Release Candidate 2:
- Added option to toggle all beta content. - Added option to toggle armor bonuses (for purists). - Added cheap alternate allmap replacer, so there's something else to replace the computer map when the detector isn't allowed. - Small fixes and corrections.
23
Readme.md
|
|
@ -74,18 +74,20 @@ Doom Tournament (currently the devel branch is required).
|
||||||
|
|
||||||
## In progress
|
## In progress
|
||||||
|
|
||||||
- Beta testing
|
- Final polishing
|
||||||
|
|
||||||
## Planned
|
## Planned
|
||||||
|
|
||||||
- Impaler "slice" animation for melee alt
|
- Shifted to a 1.1 update:
|
||||||
- Separate proto content into an add-on (if people want)
|
- Impaler "slice" animation for melee alt
|
||||||
- Alternate flamethrower secondary that behaves more like the Unreal Bible
|
- Alternate flamethrower secondary that behaves more like the Unreal Bible
|
||||||
describes (unlit blobs at a rate of 4 per second that catch on fire with
|
describes (unlit blobs at a rate of 4 per second that catch on fire with
|
||||||
explosions/lava/etc).
|
explosions/lava/etc).
|
||||||
- Alternate Impaler primary that follows the Bible (laser shots from the
|
- Alternate Impaler primary that follows the Bible (laser shots from the
|
||||||
crystal), shifts crystal shooting to pressing both buttons at once.
|
crystal), shifts crystal shooting to pressing both buttons at once.
|
||||||
- Actual Bonesaw?
|
- Actual Bonesaw?
|
||||||
|
- Implement ASMD behavior described in the Unreal novels (highly destructive
|
||||||
|
green beam that bounces off mirrors and water).
|
||||||
|
|
||||||
- RTNP add-on
|
- RTNP add-on
|
||||||
- Monster pack (someday)
|
- Monster pack (someday)
|
||||||
|
|
@ -94,4 +96,5 @@ Doom Tournament (currently the devel branch is required).
|
||||||
## Known bugs
|
## Known bugs
|
||||||
|
|
||||||
- The Quadshot will visibly load 4 shells even when there's less available,
|
- The Quadshot will visibly load 4 shells even when there's less available,
|
||||||
this is a limitation of the animation.
|
this is a limitation of the animation and I'll have to make alternate ones
|
||||||
|
for it eventually.
|
||||||
|
|
|
||||||
BIN
brightmaps/JAllMap1_a00.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
brightmaps/JAllMap1_a01.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
brightmaps/JAllMap1_a02.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
brightmaps/JAllMap1_a03.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
|
|
@ -73,6 +73,8 @@ server bool sting_olsmp = true; // adds the stupid oldskool SMP 7243 to
|
||||||
// an option
|
// an option
|
||||||
server bool sting_msentry = true; // allows the new Minigun Sentry, which
|
server bool sting_msentry = true; // allows the new Minigun Sentry, which
|
||||||
// is an original creation for this mod
|
// is an original creation for this mod
|
||||||
|
server bool sting_abonus = true; // allows the armor bonus pickup, which
|
||||||
|
// is also original for this mod
|
||||||
server bool sting_dubious = true; // allows weapons of dubious origin
|
server bool sting_dubious = true; // allows weapons of dubious origin
|
||||||
// (Demolisher, Razorclaw, Autocannon)
|
// (Demolisher, Razorclaw, Autocannon)
|
||||||
server bool sting_autoscuba = true; // SCUBA gear toggles automatically
|
server bool sting_autoscuba = true; // SCUBA gear toggles automatically
|
||||||
|
|
@ -88,3 +90,4 @@ server bool sting_flametspread = false; // targets on fire spread the flames
|
||||||
// to anyone nearby (may be op)
|
// to anyone nearby (may be op)
|
||||||
server bool sting_impself = false; // disable impaler beam self-hit
|
server bool sting_impself = false; // disable impaler beam self-hit
|
||||||
user bool sting_zoomshader = true; // rifle scope shader
|
user bool sting_zoomshader = true; // rifle scope shader
|
||||||
|
server bool sting_proto = true; // allow prototype content
|
||||||
|
|
|
||||||
40
gldefs.txt
|
|
@ -440,6 +440,18 @@ Object StarterImpalerBolt
|
||||||
Frame "PBLT" { light "IBOLTLIGHT" }
|
Frame "PBLT" { light "IBOLTLIGHT" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PointLight UCOMPLIGHT
|
||||||
|
{
|
||||||
|
Color 0.3 1.0 0.2
|
||||||
|
Size 12
|
||||||
|
Offset 0 8 0
|
||||||
|
Attenuate 1
|
||||||
|
}
|
||||||
|
Object UAllMap
|
||||||
|
{
|
||||||
|
Frame "PMAP" { light "UCOMPLIGHT" }
|
||||||
|
}
|
||||||
|
|
||||||
// Shaders / Brightmaps
|
// Shaders / Brightmaps
|
||||||
HardwareShader Texture "graphics/MenuBarr.png"
|
HardwareShader Texture "graphics/MenuBarr.png"
|
||||||
{
|
{
|
||||||
|
|
@ -850,6 +862,34 @@ HardwareShader Texture "models/shield.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/AmbientGlow.fp"
|
Shader "shaders/glsl/AmbientGlow.fp"
|
||||||
}
|
}
|
||||||
|
HardwareShader Texture "models/JAllMap1_a00.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||||
|
Texture "brighttex" "brightmaps/JAllMap1_a00.png"
|
||||||
|
}
|
||||||
|
HardwareShader Texture "models/JAllMap1_a01.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||||
|
Texture "brighttex" "brightmaps/JAllMap1_a01.png"
|
||||||
|
}
|
||||||
|
HardwareShader Texture "models/JAllMap1_a02.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||||
|
Texture "brighttex" "brightmaps/JAllMap1_a02.png"
|
||||||
|
}
|
||||||
|
HardwareShader Texture "models/JAllMap1_a03.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||||
|
Texture "brighttex" "brightmaps/JAllMap1_a03.png"
|
||||||
|
}
|
||||||
|
HardwareShader Texture "models/JAllMap2.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/AmbientGlow.fp"
|
||||||
|
}
|
||||||
|
HardwareShader Texture "models/JAllMap3.png"
|
||||||
|
{
|
||||||
|
Shader "shaders/glsl/AmbientGlow.fp"
|
||||||
|
}
|
||||||
// PP shaders
|
// PP shaders
|
||||||
HardwareShader PostProcess scene
|
HardwareShader PostProcess scene
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,7 @@ I_SCUBA = "You picked up the SCUBA Gear.";
|
||||||
I_OLSMP = "You got the SMP 7243. Time to kick ass!";
|
I_OLSMP = "You got the SMP 7243. Time to kick ass!";
|
||||||
I_OLSMPAMMO = "You picked up a SMP 7243 Magazine.";
|
I_OLSMPAMMO = "You picked up a SMP 7243 Magazine.";
|
||||||
I_LBOOTS = "You picked up the Jump Boots.";
|
I_LBOOTS = "You picked up the Jump Boots.";
|
||||||
|
I_ALLMAP = "You got an Area Map.";
|
||||||
/* Tags */
|
/* Tags */
|
||||||
T_WPOWERUP = "Dispersion Pistol Powerup";
|
T_WPOWERUP = "Dispersion Pistol Powerup";
|
||||||
T_STINGERAMMO = "Tarydium Shards";
|
T_STINGERAMMO = "Tarydium Shards";
|
||||||
|
|
@ -182,6 +183,7 @@ T_SCUBA = "SCUBA Gear";
|
||||||
T_OLSMP = "SMP 7243";
|
T_OLSMP = "SMP 7243";
|
||||||
T_OLSMPAMMO = "SMP 7243 Magazine";
|
T_OLSMPAMMO = "SMP 7243 Magazine";
|
||||||
T_LBOOTS = "Jump Boots";
|
T_LBOOTS = "Jump Boots";
|
||||||
|
T_ALLMAP = "Area Map";
|
||||||
/* Miscellaneous */
|
/* Miscellaneous */
|
||||||
TR_NOMSG = "No new messages";
|
TR_NOMSG = "No new messages";
|
||||||
TR_NEWMSG = "New Translator message";
|
TR_NEWMSG = "New Translator message";
|
||||||
|
|
@ -225,6 +227,7 @@ STING_UNREAL97 = "Unreal '97";
|
||||||
STING_UNREAL96 = "Unreal '96";
|
STING_UNREAL96 = "Unreal '96";
|
||||||
STING_UNREAL95 = "Unreal '95";
|
STING_UNREAL95 = "Unreal '95";
|
||||||
STING_POPTS = "Prototype features";
|
STING_POPTS = "Prototype features";
|
||||||
|
STING_PROTO = "Enable prototype content";
|
||||||
STING_TELEHAND = "Teleport Capsules";
|
STING_TELEHAND = "Teleport Capsules";
|
||||||
STING_FLARES = "Light/Dark Flares";
|
STING_FLARES = "Light/Dark Flares";
|
||||||
STING_STINGER = "Stinger detonation";
|
STING_STINGER = "Stinger detonation";
|
||||||
|
|
@ -243,6 +246,7 @@ STING_PSHIELD = "Power Shield does not drain over time";
|
||||||
STING_NOPSTART = "Players don't start up with an Automag";
|
STING_NOPSTART = "Players don't start up with an Automag";
|
||||||
STING_OLSMP = "Enable SMP 7243 from Oldskool Amp'd";
|
STING_OLSMP = "Enable SMP 7243 from Oldskool Amp'd";
|
||||||
STING_MSENTRY = "Enable new Minigun Sentry";
|
STING_MSENTRY = "Enable new Minigun Sentry";
|
||||||
|
STING_ABONUS = "Enable Armor Bonus";
|
||||||
STING_DUBIOUS = "Enable Demolisher, Razorclaw and Autocannon";
|
STING_DUBIOUS = "Enable Demolisher, Razorclaw and Autocannon";
|
||||||
STING_ZSHADER = "Enable Rifle scope shader";
|
STING_ZSHADER = "Enable Rifle scope shader";
|
||||||
STING_QOPTS = "Convenience features";
|
STING_QOPTS = "Convenience features";
|
||||||
|
|
@ -373,6 +377,7 @@ I_SCUBA = "Has recogido el Kit de Buceo.";
|
||||||
I_OLSMP = "Has obtenido el SMP 7243. ¡Hora de patear traseros!";
|
I_OLSMP = "Has obtenido el SMP 7243. ¡Hora de patear traseros!";
|
||||||
I_OLSMPAMMO = "Has recogido un Cargador de SMP 7243.";
|
I_OLSMPAMMO = "Has recogido un Cargador de SMP 7243.";
|
||||||
I_LBOOTS = "Has recogido las Botas de Salto.";
|
I_LBOOTS = "Has recogido las Botas de Salto.";
|
||||||
|
I_ALLMAP = "Has obtenido un Mapa de Área.";
|
||||||
/* Tags */
|
/* Tags */
|
||||||
T_WPOWERUP = "Mejora para Pistola de Dispersión";
|
T_WPOWERUP = "Mejora para Pistola de Dispersión";
|
||||||
T_STINGERAMMO = "Fragmentos de Tarydium";
|
T_STINGERAMMO = "Fragmentos de Tarydium";
|
||||||
|
|
@ -435,6 +440,7 @@ T_DETECTOR = "Detector de Movimiento";
|
||||||
T_SCUBA = "Kit de Buceo";
|
T_SCUBA = "Kit de Buceo";
|
||||||
T_OLSMPAMMO = "Cargador de SMP 7243";
|
T_OLSMPAMMO = "Cargador de SMP 7243";
|
||||||
T_LBOOTS = "Botas de Salto";
|
T_LBOOTS = "Botas de Salto";
|
||||||
|
T_ALLMAP = "Mapa de Área";
|
||||||
/* Miscellaneous */
|
/* Miscellaneous */
|
||||||
TR_NOMSG = "No hay mensajes nuevos";
|
TR_NOMSG = "No hay mensajes nuevos";
|
||||||
TR_NEWMSG = "Nuevo mensaje de Traductor";
|
TR_NEWMSG = "Nuevo mensaje de Traductor";
|
||||||
|
|
@ -465,6 +471,7 @@ STING_HUDMODE = "Modo de HUD";
|
||||||
STING_TRANSEXT = "Traductor extendido (cabe más texto)";
|
STING_TRANSEXT = "Traductor extendido (cabe más texto)";
|
||||||
STING_INTRO = "Tipo de intro";
|
STING_INTRO = "Tipo de intro";
|
||||||
STING_POPTS = "Características de prototipo";
|
STING_POPTS = "Características de prototipo";
|
||||||
|
STING_PROTO = "Habilitar contenido de prototipo";
|
||||||
STING_TELEHAND = "Cápsulas de Teletransporte";
|
STING_TELEHAND = "Cápsulas de Teletransporte";
|
||||||
STING_FLARES = "Bengalas de luz/oscuridad";
|
STING_FLARES = "Bengalas de luz/oscuridad";
|
||||||
STING_STINGER = "Detonación de Arma Aguijón";
|
STING_STINGER = "Detonación de Arma Aguijón";
|
||||||
|
|
@ -483,6 +490,7 @@ STING_PSHIELD = "El Escudo de Fuerza no pierde carga con el tiempo";
|
||||||
STING_NOPSTART = "Los jugadores no empiezan la partida con un Automag";
|
STING_NOPSTART = "Los jugadores no empiezan la partida con un Automag";
|
||||||
STING_OLSMP = "Habilitar SMP 7243 de Oldskool Amp'd";
|
STING_OLSMP = "Habilitar SMP 7243 de Oldskool Amp'd";
|
||||||
STING_MSENTRY = "Habilitar nueva Torreta";
|
STING_MSENTRY = "Habilitar nueva Torreta";
|
||||||
|
STING_ABONUS = "Habilitar Armadura Extra";
|
||||||
STING_DUBIOUS = "Habilitar Demoledor, Garra y Autocañón";
|
STING_DUBIOUS = "Habilitar Demoledor, Garra y Autocañón";
|
||||||
STING_ZSHADER = "Habilitar shader de mira de Rifle";
|
STING_ZSHADER = "Habilitar shader de mira de Rifle";
|
||||||
STING_QOPTS = "Características de comodidad";
|
STING_QOPTS = "Características de comodidad";
|
||||||
|
|
|
||||||
14
menudef.txt
|
|
@ -23,8 +23,9 @@ OptionMenu "UnrealOptionMenu"
|
||||||
Option "$STING_TRANSEXT", "sting_transext", "YesNo"
|
Option "$STING_TRANSEXT", "sting_transext", "YesNo"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$STING_POPTS", "Gold"
|
StaticText "$STING_POPTS", "Gold"
|
||||||
Option "$STING_TELEHAND", "sting_telegun", "YesNo"
|
Option "$STING_PROTO", "sting_proto", "YesNo"
|
||||||
Option "$STING_FLARES", "sting_flares", "YesNo"
|
Option "$STING_TELEHAND", "sting_telegun", "YesNo", "sting_proto"
|
||||||
|
Option "$STING_FLARES", "sting_flares", "YesNo", "sting_proto"
|
||||||
Command "$FLAK_APPLY", "netevent refreshtrans"
|
Command "$FLAK_APPLY", "netevent refreshtrans"
|
||||||
Option "$STING_STINGER", "sting_stinger", "YesNo"
|
Option "$STING_STINGER", "sting_stinger", "YesNo"
|
||||||
Option "$STING_STINGERB", "sting_stingerb", "YesNo"
|
Option "$STING_STINGERB", "sting_stingerb", "YesNo"
|
||||||
|
|
@ -36,7 +37,7 @@ OptionMenu "UnrealOptionMenu"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$STING_DOPTS", "Gold"
|
StaticText "$STING_DOPTS", "Gold"
|
||||||
Option "$STING_AUTODUAL", "sting_automags", "YesNo"
|
Option "$STING_AUTODUAL", "sting_automags", "YesNo"
|
||||||
Option "$STING_PROTODUAL", "sting_protomags", "YesNo"
|
Option "$STING_PROTODUAL", "sting_protomags", "YesNo", "sting_proto"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$STING_UOPTS", "Gold"
|
StaticText "$STING_UOPTS", "Gold"
|
||||||
Option "$STING_DPISTOL", "sting_dpistol", "YesNo"
|
Option "$STING_DPISTOL", "sting_dpistol", "YesNo"
|
||||||
|
|
@ -44,15 +45,16 @@ OptionMenu "UnrealOptionMenu"
|
||||||
Option "$STING_NOPSTART", "sting_nopstart", "YesNo"
|
Option "$STING_NOPSTART", "sting_nopstart", "YesNo"
|
||||||
Option "$STING_OLSMP", "sting_olsmp", "YesNo"
|
Option "$STING_OLSMP", "sting_olsmp", "YesNo"
|
||||||
Option "$STING_MSENTRY", "sting_msentry", "YesNo"
|
Option "$STING_MSENTRY", "sting_msentry", "YesNo"
|
||||||
Option "$STING_DUBIOUS", "sting_dubious", "YesNo"
|
Option "$STING_ABONUS", "sting_abonus", "YesNo"
|
||||||
|
Option "$STING_DUBIOUS", "sting_dubious", "YesNo", "sting_proto"
|
||||||
Option "$STING_ZSHADER", "sting_zoomshader", "YesNo"
|
Option "$STING_ZSHADER", "sting_zoomshader", "YesNo"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$STING_QOPTS", "Gold"
|
StaticText "$STING_QOPTS", "Gold"
|
||||||
Option "$STING_AUTOSCUBA", "sting_autoscuba", "YesNo"
|
Option "$STING_AUTOSCUBA", "sting_autoscuba", "YesNo"
|
||||||
Option "$STING_RAZORAIM", "sting_razoraim", "YesNo"
|
Option "$STING_RAZORAIM", "sting_razoraim", "YesNo"
|
||||||
Option "$STING_BIOSPLASH", "sting_biosplash", "YesNo"
|
Option "$STING_BIOSPLASH", "sting_biosplash", "YesNo"
|
||||||
Option "$STING_FLAMETSPREAD", "sting_flametspread", "YesNo"
|
Option "$STING_FLAMETSPREAD", "sting_flametspread", "YesNo", "sting_proto"
|
||||||
Option "$STING_IMPSELF", "sting_impself", "YesNo"
|
Option "$STING_IMPSELF", "sting_impself", "YesNo", "sting_proto"
|
||||||
}
|
}
|
||||||
|
|
||||||
AddOptionMenu "OptionsMenu"
|
AddOptionMenu "OptionsMenu"
|
||||||
|
|
|
||||||
|
|
@ -797,3 +797,23 @@ Model "UArmorBonus"
|
||||||
|
|
||||||
FrameIndex XANH A 0 0
|
FrameIndex XANH A 0 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Model "UAllMap"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "cheapcomp_d.3d"
|
||||||
|
SurfaceSkin 0 1 "JAllMap2.png"
|
||||||
|
SurfaceSkin 0 2 "JAllMap3.png"
|
||||||
|
Scale 0.04 0.04 0.048
|
||||||
|
ZOffset 3
|
||||||
|
AngleOffset 90
|
||||||
|
|
||||||
|
SurfaceSkin 0 0 "JAllMap1_a00.png"
|
||||||
|
FrameIndex PMAP A 0 0
|
||||||
|
SurfaceSkin 0 0 "JAllMap1_a01.png"
|
||||||
|
FrameIndex PMAP B 0 0
|
||||||
|
SurfaceSkin 0 0 "JAllMap1_a02.png"
|
||||||
|
FrameIndex PMAP C 0 0
|
||||||
|
SurfaceSkin 0 0 "JAllMap1_a03.png"
|
||||||
|
FrameIndex PMAP D 0 0
|
||||||
|
}
|
||||||
|
|
|
||||||
BIN
models/CheapComp_a.3d
Normal file
BIN
models/CheapComp_d.3d
Normal file
BIN
models/JAllMap1_a00.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
models/JAllMap1_a01.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
models/JAllMap1_a02.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
models/JAllMap1_a03.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
models/JAllMap2.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
models/JAllMap3.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
|
|
@ -11,6 +11,66 @@ Class Betamag : UnrealWeapon
|
||||||
int SlaveRefire;
|
int SlaveRefire;
|
||||||
double AltAccuracy;
|
double AltAccuracy;
|
||||||
|
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_protomags && (MaxAmount <= 1) ) MaxAmount = 2;
|
||||||
|
else if ( !sting_protomags && (MaxAmount > 1) ) MaxAmount = 1;
|
||||||
|
if ( Owner && !sting_protomags && (Amount > 1) )
|
||||||
|
{
|
||||||
|
// no dual wielding
|
||||||
|
if ( Owner.player.ReadyWeapon == self )
|
||||||
|
{
|
||||||
|
// delete the slave overlay
|
||||||
|
PSprite psp;
|
||||||
|
for ( psp = Owner.player.psprites; psp; psp = psp.next )
|
||||||
|
{
|
||||||
|
if ( (psp.Caller == self) && ((psp.id == 2) || (psp.id == -9998)) ) psp.Destroy();
|
||||||
|
slaveactive = false;
|
||||||
|
slavedown = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Amount = 1;
|
||||||
|
SetTag(StringTable.Localize("$T_AUTOMAG"));
|
||||||
|
}
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("Pistol",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
override bool HandlePickup( Inventory item )
|
override bool HandlePickup( Inventory item )
|
||||||
{
|
{
|
||||||
if ( sting_protomags && (item.GetClass() == GetClass()) )
|
if ( sting_protomags && (item.GetClass() == GetClass()) )
|
||||||
|
|
@ -271,27 +331,6 @@ Class Betamag : UnrealWeapon
|
||||||
else if ( Amount > 1 ) SelectionOrder = 2200;
|
else if ( Amount > 1 ) SelectionOrder = 2200;
|
||||||
else SelectionOrder = default.SelectionOrder;
|
else SelectionOrder = default.SelectionOrder;
|
||||||
}
|
}
|
||||||
override void Tick()
|
|
||||||
{
|
|
||||||
Super.Tick();
|
|
||||||
if ( sting_protomags && (MaxAmount <= 1) ) MaxAmount = 2;
|
|
||||||
else if ( !sting_protomags && (MaxAmount > 1) ) MaxAmount = 1;
|
|
||||||
if ( !Owner || sting_protomags || (Amount <= 1) ) return;
|
|
||||||
// no dual wielding
|
|
||||||
if ( Owner.player.ReadyWeapon == self )
|
|
||||||
{
|
|
||||||
// delete the slave overlay
|
|
||||||
PSprite psp;
|
|
||||||
for ( psp = Owner.player.psprites; psp; psp = psp.next )
|
|
||||||
{
|
|
||||||
if ( (psp.Caller == self) && ((psp.id == 2) || (psp.id == -9998)) ) psp.Destroy();
|
|
||||||
slaveactive = false;
|
|
||||||
slavedown = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Amount = 1;
|
|
||||||
SetTag(StringTable.Localize("$T_AUTOMAG"));
|
|
||||||
}
|
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Tag "$T_PROTOMAG";
|
Tag "$T_PROTOMAG";
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,13 @@ Class BigAmmo : Ammo
|
||||||
}
|
}
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_dubious ) return false; // not allowed
|
if ( !sting_proto || !sting_dubious ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_dubious ) return;
|
if ( sting_proto && sting_dubious ) return;
|
||||||
if ( !Owner )
|
if ( !Owner )
|
||||||
{
|
{
|
||||||
let r = Spawn((GetClass()=="BigAmmo")?"CellPack":"Cell",pos,ALLOW_REPLACE);
|
let r = Spawn((GetClass()=="BigAmmo")?"CellPack":"Cell",pos,ALLOW_REPLACE);
|
||||||
|
|
@ -237,13 +237,13 @@ Class BigGun : UnrealWeapon
|
||||||
|
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_dubious ) return false; // not allowed
|
if ( !sting_proto || !sting_dubious ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_dubious ) return;
|
if ( sting_proto && sting_dubious ) return;
|
||||||
if ( !Owner )
|
if ( !Owner )
|
||||||
{
|
{
|
||||||
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);
|
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ Class Bonesaw : UnrealWeapon
|
||||||
{
|
{
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_dubious ) return false; // not allowed
|
if ( !sting_proto || !sting_dubious ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_dubious ) return;
|
if ( sting_proto && sting_dubious ) return;
|
||||||
if ( !Owner )
|
if ( !Owner )
|
||||||
{
|
{
|
||||||
let r = Spawn("Chainsaw",pos,ALLOW_REPLACE);
|
let r = Spawn("Chainsaw",pos,ALLOW_REPLACE);
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ Class DefaultAmmo : Ammo
|
||||||
}
|
}
|
||||||
override void DoEffect()
|
override void DoEffect()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.DoEffect();
|
||||||
if ( rechargespeed <= 0. ) rechargespeed = 1.1;
|
if ( rechargespeed <= 0. ) rechargespeed = 1.1;
|
||||||
rechargephase += 1./rechargespeed;
|
rechargephase += 1./rechargespeed;
|
||||||
if ( rechargephase < 35 ) return;
|
if ( rechargephase < 35 ) return;
|
||||||
|
|
|
||||||
|
|
@ -316,6 +316,47 @@ Class FlameGun : UnrealWeapon
|
||||||
Weapon.AmmoGive 100;
|
Weapon.AmmoGive 100;
|
||||||
UTWeapon.DropAmmo 50;
|
UTWeapon.DropAmmo 50;
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("RocketLauncher",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
action void A_FlameGunFire( bool bAlt = false )
|
action void A_FlameGunFire( bool bAlt = false )
|
||||||
{
|
{
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,13 @@ Class SMiniAmmo : Ammo
|
||||||
}
|
}
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_dubious ) return false; // not allowed
|
if ( !sting_proto || !sting_dubious ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_dubious ) return;
|
if ( sting_proto && sting_dubious ) return;
|
||||||
if ( Owner ) Owner.RemoveInventory(self);
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
@ -123,13 +123,13 @@ Class SMiniGun : UnrealWeapon
|
||||||
{
|
{
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_dubious ) return false; // not allowed
|
if ( !sting_proto || !sting_dubious ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_dubious ) return;
|
if ( sting_proto && sting_dubious ) return;
|
||||||
if ( !Owner )
|
if ( !Owner )
|
||||||
{
|
{
|
||||||
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);
|
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,47 @@ Class ImpalerAmmo : Ammo
|
||||||
Ammo.DropAmount 3;
|
Ammo.DropAmount 3;
|
||||||
+INVENTORY.IGNORESKILL;
|
+INVENTORY.IGNORESKILL;
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn((GetClass()=="ImpalerAmmo")?"CellPack":"Cell",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
@ -693,6 +734,47 @@ Class Impaler : UnrealWeapon
|
||||||
|
|
||||||
property ClipCount : ClipCount;
|
property ClipCount : ClipCount;
|
||||||
|
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("PlasmaRifle",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return HasGem?ClipCount:-1, -1, (ClipCount<10), false;
|
return HasGem?ClipCount:-1, -1, (ClipCount<10), false;
|
||||||
|
|
|
||||||
|
|
@ -90,24 +90,24 @@ Class UnrealBackpack : BackpackItem replaces Backpack
|
||||||
Super.DoPickupSpecial(toucher);
|
Super.DoPickupSpecial(toucher);
|
||||||
if ( gameinfo.gametype&GAME_DOOMCHEX )
|
if ( gameinfo.gametype&GAME_DOOMCHEX )
|
||||||
{
|
{
|
||||||
static const Class<Inventory> xitems[] = {"Flare", "Seeds", "SentryGunItem", "VoiceBox", "ForceField", "Dampener", "Peacemaker"};
|
static const Class<Inventory> xitems[] = {"Flare", "Seeds", "VoiceBox", "ForceField", "Dampener", "Peacemaker", "SentryGunItem"};
|
||||||
int xitemn[7];
|
int xitemn[7];
|
||||||
xitemn[0] = max(0,Random[BackpackExtra](-1,3));
|
xitemn[0] = max(0,Random[BackpackExtra](-1,3));
|
||||||
xitemn[1] = max(0,Random[BackpackExtra](-1,3));
|
xitemn[1] = max(0,Random[BackpackExtra](-1,3));
|
||||||
xitemn[2] = max(0,Random[BackpackExtra](-2,1));
|
xitemn[2] = max(0,Random[BackpackExtra](-2,1));
|
||||||
xitemn[3] = max(0,Random[BackpackExtra](-2,1));
|
xitemn[3] = max(0,Random[BackpackExtra](-2,1));
|
||||||
xitemn[4] = max(0,Random[BackpackExtra](-2,1));
|
xitemn[4] = max(0,Random[BackpackExtra](-1,1));
|
||||||
xitemn[5] = max(0,Random[BackpackExtra](-1,1));
|
xitemn[5] = max(0,Random[BackpackExtra](-2,1));
|
||||||
xitemn[6] = max(0,Random[BackpackExtra](-2,1));
|
xitemn[6] = max(0,Random[BackpackExtra](-2,1));
|
||||||
// random doubling
|
// random doubling
|
||||||
if ( !Random[BackpackExtra](0,4) ) xitemn[0] *= 2;
|
if ( !Random[BackpackExtra](0,4) ) xitemn[0] *= 2;
|
||||||
if ( !Random[BackpackExtra](0,4) ) xitemn[1] *= 2;
|
if ( !Random[BackpackExtra](0,4) ) xitemn[1] *= 2;
|
||||||
if ( !Random[BackpackExtra](0,9) ) xitemn[2] *= 2;
|
if ( !Random[BackpackExtra](0,7) ) xitemn[2] *= 2;
|
||||||
if ( !Random[BackpackExtra](0,7) ) xitemn[3] *= 2;
|
if ( !Random[BackpackExtra](0,6) ) xitemn[3] *= 2;
|
||||||
if ( !Random[BackpackExtra](0,6) ) xitemn[4] *= 2;
|
if ( !Random[BackpackExtra](0,5) ) xitemn[4] *= 2;
|
||||||
if ( !Random[BackpackExtra](0,5) ) xitemn[5] *= 2;
|
if ( !Random[BackpackExtra](0,9) ) xitemn[5] *= 2;
|
||||||
if ( !Random[BackpackExtra](0,9) ) xitemn[6] *= 2;
|
if ( !Random[BackpackExtra](0,9) ) xitemn[6] *= 2;
|
||||||
for ( int i=0; i<7; i++ )
|
for ( int i=0; i<(sting_proto?7:5); i++ )
|
||||||
{
|
{
|
||||||
if ( xitemn[i] <= 0 ) continue;
|
if ( xitemn[i] <= 0 ) continue;
|
||||||
toucher.GiveInventory(xitems[i],xitemn[i]);
|
toucher.GiveInventory(xitems[i],xitemn[i]);
|
||||||
|
|
@ -749,13 +749,13 @@ Class BetaFlare : UnrealInventory
|
||||||
|
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_flares ) return false; // not allowed
|
if ( !sting_proto || !sting_flares ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_flares ) return;
|
if ( sting_proto && sting_flares ) return;
|
||||||
if ( Owner ) Owner.RemoveInventory(self);
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
@ -2251,6 +2251,18 @@ Class SentryGunItem : UnrealInventory
|
||||||
Inventory.PickupMessage "$I_OSENTRY";
|
Inventory.PickupMessage "$I_OSENTRY";
|
||||||
Inventory.RespawnTics 1050;
|
Inventory.RespawnTics 1050;
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
override bool Use( bool pickup )
|
override bool Use( bool pickup )
|
||||||
{
|
{
|
||||||
if ( pickup ) return false;
|
if ( pickup ) return false;
|
||||||
|
|
@ -2399,6 +2411,11 @@ Class SentryGun : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( !sting_proto )
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if ( !master && (rememberedplayer != -1) && playeringame[rememberedplayer] )
|
if ( !master && (rememberedplayer != -1) && playeringame[rememberedplayer] )
|
||||||
master = players[rememberedplayer].mo;
|
master = players[rememberedplayer].mo;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,47 @@ Class FlameAmmo : Ammo
|
||||||
Ammo.BackpackMaxAmount 900;
|
Ammo.BackpackMaxAmount 900;
|
||||||
Ammo.DropAmount 30;
|
Ammo.DropAmount 30;
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("RocketAmmo",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
@ -761,6 +802,47 @@ Class UFlamethrower : UnrealWeapon
|
||||||
bool bCharging;
|
bool bCharging;
|
||||||
double ChargeSize, Count;
|
double ChargeSize, Count;
|
||||||
|
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("PlasmaRifle",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return bCharging?min(5,int(chargesize+0.1)):-1, -1, false, false;
|
return bCharging?min(5,int(chargesize+0.1)):-1, -1, false, false;
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,10 @@ Class OLSMP : UnrealWeapon
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
override void PlayUpSound( Actor origin )
|
||||||
|
{
|
||||||
|
origin.A_PlaySound(upsound,CHAN_WEAPON,Dampener.Active(origin)?.1:1.,pitch:0.8);
|
||||||
|
}
|
||||||
action void A_OLSMPRefire( statelabel flash = null, bool slave = false )
|
action void A_OLSMPRefire( statelabel flash = null, bool slave = false )
|
||||||
{
|
{
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,18 @@ Class PeaceAmmo : Ammo
|
||||||
Ammo.BackpackAmount 0;
|
Ammo.BackpackAmount 0;
|
||||||
Ammo.BackpackMaxAmount 2;
|
Ammo.BackpackMaxAmount 2;
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class PeaceLight : RocketLight
|
Class PeaceLight : RocketLight
|
||||||
|
|
@ -398,6 +410,18 @@ Class PeaceBarrel : Actor
|
||||||
|
|
||||||
Class Peacemaker : UnrealWeapon
|
Class Peacemaker : UnrealWeapon
|
||||||
{
|
{
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
action void A_PeacemakerThrow( bool bAlt = false )
|
action void A_PeacemakerThrow( bool bAlt = false )
|
||||||
{
|
{
|
||||||
let weap = Weapon(invoker);
|
let weap = Weapon(invoker);
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,47 @@ Class UShells : Ammo
|
||||||
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
|
||||||
return String.Format("%s%d%s",StringTable.Localize("$I_SHELLSL"),Amount,StringTable.Localize("$I_SHELLSR"));
|
return String.Format("%s%d%s",StringTable.Localize("$I_SHELLSL"),Amount,StringTable.Localize("$I_SHELLSR"));
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn((GetClass()=="UShells")?"ShellBox":"Shells",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
@ -96,6 +137,48 @@ Class QuadShot : UnrealWeapon
|
||||||
|
|
||||||
property ClipCount : ClipCount;
|
property ClipCount : ClipCount;
|
||||||
|
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("Shotgun",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return ClipOut?-1:ClipCount, -1, (ClipCount<2), false;
|
return ClipOut?-1:ClipCount, -1, (ClipCount<2), false;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Class StunnerAmmo : Ammo
|
||||||
}
|
}
|
||||||
override void DoEffect()
|
override void DoEffect()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.DoEffect();
|
||||||
if ( rechargespeed <= 0. ) rechargespeed = 2.;
|
if ( rechargespeed <= 0. ) rechargespeed = 2.;
|
||||||
rechargephase += 1./rechargespeed;
|
rechargephase += 1./rechargespeed;
|
||||||
if ( rechargephase < 7 ) return;
|
if ( rechargephase < 7 ) return;
|
||||||
|
|
@ -20,6 +20,18 @@ Class StunnerAmmo : Ammo
|
||||||
rechargephase = 0;
|
rechargephase = 0;
|
||||||
Amount = min(Amount+1,MaxAmount);
|
Amount = min(Amount+1,MaxAmount);
|
||||||
}
|
}
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class StunTrail : Actor
|
Class StunTrail : Actor
|
||||||
|
|
@ -272,6 +284,48 @@ Class Stunner : UnrealWeapon
|
||||||
double chargesize, count;
|
double chargesize, count;
|
||||||
bool bCharging;
|
bool bCharging;
|
||||||
|
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
|
return Super.TryPickup(toucher);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("Chainsaw",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return bCharging?min(5,int(chargesize)):-1, -1, false, false;
|
return bCharging?min(5,int(chargesize)):-1, -1, false, false;
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,49 @@ Class PowerShield : UnrealArmor
|
||||||
|
|
||||||
Class UArmorBonus : UArmor
|
Class UArmorBonus : UArmor
|
||||||
{
|
{
|
||||||
|
override bool TryPickup( in out Actor toucher )
|
||||||
|
{
|
||||||
|
if ( !sting_abonus ) return false; // not allowed
|
||||||
|
bool valid = Super.TryPickup(toucher);
|
||||||
|
if ( valid ) level.allmap = true;
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_abonus ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("ArmorBonus",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
override void AbsorbDamage( int damage, Name damageType, out int newdamage )
|
override void AbsorbDamage( int damage, Name damageType, out int newdamage )
|
||||||
{
|
{
|
||||||
absorb = Clamp(Amount-50,25,100);
|
absorb = Clamp(Amount-50,25,100);
|
||||||
|
|
|
||||||
|
|
@ -183,15 +183,21 @@ Class UPlayer : UTPlayer
|
||||||
{
|
{
|
||||||
// force akimbo
|
// force akimbo
|
||||||
let t = FindInventory(type);
|
let t = FindInventory(type);
|
||||||
if ( t ) t.Amount = 2;
|
if ( t )
|
||||||
t.SetTag(StringTable.Localize("$T_AUTOMAG2"));
|
{
|
||||||
|
t.Amount = 2;
|
||||||
|
t.SetTag(StringTable.Localize("$T_AUTOMAG2"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( (type is 'Betamag') && sting_protomags )
|
else if ( (type is 'Betamag') && sting_protomags )
|
||||||
{
|
{
|
||||||
// force akimbo
|
// force akimbo
|
||||||
let t = FindInventory(type);
|
let t = FindInventory(type);
|
||||||
if ( t ) t.Amount = 2;
|
if ( t )
|
||||||
t.SetTag(StringTable.Localize("$T_PROTOMAG2"));
|
{
|
||||||
|
t.Amount = 2;
|
||||||
|
t.SetTag(StringTable.Localize("$T_PROTOMAG2"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( type is 'DispersionPistol' )
|
else if ( type is 'DispersionPistol' )
|
||||||
{
|
{
|
||||||
|
|
@ -952,29 +958,29 @@ Class UnrealMainHandler : EventHandler
|
||||||
{
|
{
|
||||||
if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') )
|
if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') )
|
||||||
{
|
{
|
||||||
if ( (sting_dubious || sting_olsmp) && !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp';
|
if ( ((sting_proto && sting_dubious) || sting_olsmp) && !Random[Replacements](0,sting_proto?3:1) ) e.Replacement = 'WeaponPowerUp';
|
||||||
else if ( Random[Replacements](0,2) )
|
else if ( sting_proto && Random[Replacements](0,2) )
|
||||||
{
|
{
|
||||||
if ( sting_dubious && Random[Replacements](0,1) ) e.Replacement = 'Bonesaw';
|
if ( sting_dubious && Random[Replacements](0,1) ) e.Replacement = 'Bonesaw';
|
||||||
else e.Replacement = 'Stunner';
|
else e.Replacement = 'Stunner';
|
||||||
}
|
}
|
||||||
else if ( !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
else if ( sting_proto && !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
||||||
else e.Replacement = 'Automag';
|
else e.Replacement = 'Automag';
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'Fist') || (e.Replacee == 'Staff') ) e.Replacement = 'DispersionPistol';
|
else if ( (e.Replacee == 'Fist') || (e.Replacee == 'Staff') ) e.Replacement = 'DispersionPistol';
|
||||||
else if ( (e.Replacee == 'Pistol') || (e.Replacee == 'GoldWand') )
|
else if ( (e.Replacee == 'Pistol') || (e.Replacee == 'GoldWand') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
if ( sting_proto && !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
||||||
else e.Replacement = 'Automag';
|
else e.Replacement = 'Automag';
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'Shotgun') || (e.Replacee == 'SuperShotgun') || (e.Replacee == 'Crossbow') )
|
else if ( (e.Replacee == 'Shotgun') || (e.Replacee == 'SuperShotgun') || (e.Replacee == 'Crossbow') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,3) && (e.Replacee != 'SuperShotgun') )
|
if ( !Random[Replacements](0,3) && (e.Replacee != 'SuperShotgun') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
if ( sting_proto && !Random[Replacements](0,2) ) e.Replacement = 'Betamag';
|
||||||
else e.Replacement = 'Automag';
|
else e.Replacement = 'Automag';
|
||||||
}
|
}
|
||||||
else switch( Random[Replacements](0,2) )
|
else switch( Random[Replacements](0,sting_proto?2:1) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
e.Replacement = 'Stinger';
|
e.Replacement = 'Stinger';
|
||||||
|
|
@ -994,7 +1000,7 @@ Class UnrealMainHandler : EventHandler
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'RocketLauncher') || (e.Replacee == 'PhoenixRod') )
|
else if ( (e.Replacee == 'RocketLauncher') || (e.Replacee == 'PhoenixRod') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,3) )
|
if ( sting_proto && !Random[Replacements](0,3) )
|
||||||
{
|
{
|
||||||
if ( Random[Replacements](0,1) ) e.Replacement = 'UFlamethrower';
|
if ( Random[Replacements](0,1) ) e.Replacement = 'UFlamethrower';
|
||||||
else e.Replacement = 'FlameGun';
|
else e.Replacement = 'FlameGun';
|
||||||
|
|
@ -1004,14 +1010,14 @@ Class UnrealMainHandler : EventHandler
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'PlasmaRifle') || (e.Replacee == 'SkullRod') )
|
else if ( (e.Replacee == 'PlasmaRifle') || (e.Replacee == 'SkullRod') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'Impaler';
|
if ( sting_proto && !Random[Replacements](0,2) ) e.Replacement = 'Impaler';
|
||||||
else if ( Random[Replacements](0,1) ) e.Replacement = 'URifle';
|
else if ( Random[Replacements](0,1) ) e.Replacement = 'URifle';
|
||||||
else e.Replacement = 'UBioRifle';
|
else e.Replacement = 'UBioRifle';
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'BFG9000') || (e.Replacee == 'Mace') )
|
else if ( (e.Replacee == 'BFG9000') || (e.Replacee == 'Mace') )
|
||||||
{
|
{
|
||||||
if ( sting_olsmp && (!sting_dubious || Random[Replacements](0,1)) ) e.Replacement = 'OLSMP';
|
if ( sting_olsmp && (!sting_proto || !sting_dubious || Random[Replacements](0,1)) ) e.Replacement = 'OLSMP';
|
||||||
else if ( sting_dubious )
|
else if ( sting_proto && sting_dubious )
|
||||||
{
|
{
|
||||||
if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun';
|
if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun';
|
||||||
else e.Replacement = 'BigGun';
|
else e.Replacement = 'BigGun';
|
||||||
|
|
@ -1033,7 +1039,7 @@ Class UnrealMainHandler : EventHandler
|
||||||
else if ( (e.Replacee == 'Shell') || (e.Replacee == 'CrossbowAmmo') )
|
else if ( (e.Replacee == 'Shell') || (e.Replacee == 'CrossbowAmmo') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'UClip';
|
if ( !Random[Replacements](0,2) ) e.Replacement = 'UClip';
|
||||||
else switch( Random[Replacements](0,2) )
|
else switch( Random[Replacements](0,sting_proto?2:1) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
e.Replacement = 'StingerAmmo';
|
e.Replacement = 'StingerAmmo';
|
||||||
|
|
@ -1048,7 +1054,7 @@ Class UnrealMainHandler : EventHandler
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'ShellBox') || (e.Replacee == 'CrossbowHefty') )
|
else if ( (e.Replacee == 'ShellBox') || (e.Replacee == 'CrossbowHefty') )
|
||||||
{
|
{
|
||||||
switch( Random[Replacements](0,2) )
|
switch( Random[Replacements](0,sting_proto?2:1) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
e.Replacement = 'StingerAmmo2';
|
e.Replacement = 'StingerAmmo2';
|
||||||
|
|
@ -1063,7 +1069,7 @@ Class UnrealMainHandler : EventHandler
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'RocketAmmo') || (e.Replacee == 'PhoenixRodAmmo') || (e.Replacee == 'MaceAmmo') )
|
else if ( (e.Replacee == 'RocketAmmo') || (e.Replacee == 'PhoenixRodAmmo') || (e.Replacee == 'MaceAmmo') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,4) ) e.Replacement = 'FlameAmmo';
|
if ( sting_proto && !Random[Replacements](0,4) ) e.Replacement = 'FlameAmmo';
|
||||||
else if ( Random[Replacements](0,1) )
|
else if ( Random[Replacements](0,1) )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,3) ) e.Replacement = 'UFlakBox';
|
if ( !Random[Replacements](0,3) ) e.Replacement = 'UFlakBox';
|
||||||
|
|
@ -1077,18 +1083,18 @@ Class UnrealMainHandler : EventHandler
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'RocketBox') || (e.Replacee == 'PhoenixRodHefty') || (e.Replacee == 'MaceHefty') )
|
else if ( (e.Replacee == 'RocketBox') || (e.Replacee == 'PhoenixRodHefty') || (e.Replacee == 'MaceHefty') )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,3) ) e.Replacement = 'FlameAmmo';
|
if ( sting_proto && !Random[Replacements](0,3) ) e.Replacement = 'FlameAmmo';
|
||||||
else if ( Random[Replacements](0,1) ) e.Replacement = 'UFlakBox';
|
else if ( Random[Replacements](0,1) ) e.Replacement = 'UFlakBox';
|
||||||
else e.Replacement = 'URocketAmmo';
|
else e.Replacement = 'URocketAmmo';
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') )
|
else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') )
|
||||||
{
|
{
|
||||||
if ( sting_dubious && !Random[Replacements](0,4) )
|
if ( sting_proto && sting_dubious && !Random[Replacements](0,4) )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo2';
|
if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo2';
|
||||||
else e.Replacement = 'BigAmmo3';
|
else e.Replacement = 'BigAmmo3';
|
||||||
}
|
}
|
||||||
else if ( !Random[Replacements](0,3) )
|
else if ( sting_proto && !Random[Replacements](0,3) )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
|
if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
|
||||||
else e.Replacement = 'ImpalerAmmo2';
|
else e.Replacement = 'ImpalerAmmo2';
|
||||||
|
|
@ -1106,12 +1112,12 @@ Class UnrealMainHandler : EventHandler
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') )
|
else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') )
|
||||||
{
|
{
|
||||||
if ( sting_dubious && !Random[Replacements](0,4) )
|
if ( sting_proto && sting_dubious && !Random[Replacements](0,4) )
|
||||||
{
|
{
|
||||||
if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo';
|
if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo';
|
||||||
else e.Replacement = 'BigAmmo2';
|
else e.Replacement = 'BigAmmo2';
|
||||||
}
|
}
|
||||||
else if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
|
else if ( sting_proto && !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
|
||||||
else if ( sting_olsmp && !Random[Replacements](0,2) ) e.Replacement = 'OLSMPAmmo';
|
else if ( sting_olsmp && !Random[Replacements](0,2) ) e.Replacement = 'OLSMPAmmo';
|
||||||
else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo';
|
else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo';
|
||||||
else e.Replacement = 'URifleAmmo';
|
else e.Replacement = 'URifleAmmo';
|
||||||
|
|
@ -1120,13 +1126,17 @@ Class UnrealMainHandler : EventHandler
|
||||||
else if ( (e.Replacee == 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') )
|
else if ( (e.Replacee == 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') )
|
||||||
{
|
{
|
||||||
if ( sting_msentry && !Random[Replacements](0,9) ) e.Replacement = 'SentryItem';
|
if ( sting_msentry && !Random[Replacements](0,9) ) e.Replacement = 'SentryItem';
|
||||||
else if ( (sting_dubious || sting_olsmp) && !Random[Replacements](0,2) ) e.Replacement = 'WeaponPowerUp';
|
else if ( ((sting_proto && sting_dubious) || sting_olsmp) && !Random[Replacements](0,2) ) e.Replacement = 'WeaponPowerUp';
|
||||||
else e.Replacement = 'Amplifier';
|
else e.Replacement = 'Amplifier';
|
||||||
}
|
}
|
||||||
else if ( e.Replacee == 'ArtiEgg' ) e.Replacement = 'VoiceBox';
|
else if ( e.Replacee == 'ArtiEgg' ) e.Replacement = 'VoiceBox';
|
||||||
else if ( (e.Replacee == 'Soulsphere') || (e.Replacee == 'ArtiSuperHealth') ) e.Replacement = 'SuperHealth';
|
else if ( (e.Replacee == 'Soulsphere') || (e.Replacee == 'ArtiSuperHealth') ) e.Replacement = 'SuperHealth';
|
||||||
else if ( e.Replacee == 'Megasphere' ) e.Replacement = 'ShieldBelt';
|
else if ( e.Replacee == 'Megasphere' ) e.Replacement = 'ShieldBelt';
|
||||||
else if ( (e.Replacee == 'Allmap') || (e.Replacee == 'SuperMap') ) e.Replacement = 'MotionDetector';
|
else if ( (e.Replacee == 'Allmap') || (e.Replacee == 'SuperMap') )
|
||||||
|
{
|
||||||
|
if ( sting_proto && Random[Replacements](0,2) ) e.Replacement = 'MotionDetector';
|
||||||
|
else e.Replacement = 'UAllMap';
|
||||||
|
}
|
||||||
else if ( (e.Replacee == 'BlurSphere') || (e.Replacee == 'ArtiInvisibility') ) e.Replacement = 'UInvisibility';
|
else if ( (e.Replacee == 'BlurSphere') || (e.Replacee == 'ArtiInvisibility') ) e.Replacement = 'UInvisibility';
|
||||||
else if ( (e.Replacee == 'Infrared') || (e.Replacee == 'ArtiTorch') ) e.Replacement = 'UFlashlight';
|
else if ( (e.Replacee == 'Infrared') || (e.Replacee == 'ArtiTorch') ) e.Replacement = 'UFlashlight';
|
||||||
else if ( e.Replacee == 'RadSuit' ) e.Replacement = 'UJumpBoots';
|
else if ( e.Replacee == 'RadSuit' ) e.Replacement = 'UJumpBoots';
|
||||||
|
|
@ -1134,7 +1144,7 @@ Class UnrealMainHandler : EventHandler
|
||||||
else if ( (e.Replacee == 'Backpack') || (e.Replacee == 'BagOfHolding') ) e.Replacement = 'UnrealBackpack';
|
else if ( (e.Replacee == 'Backpack') || (e.Replacee == 'BagOfHolding') ) e.Replacement = 'UnrealBackpack';
|
||||||
else if ( (e.Replacee == 'ArmorBonus') || (e.Replacee == 'ArtiTimeBomb') )
|
else if ( (e.Replacee == 'ArmorBonus') || (e.Replacee == 'ArtiTimeBomb') )
|
||||||
{
|
{
|
||||||
if ( Random[Replacements](0,3) ) e.Replacement = 'UArmorBonus';
|
if ( sting_abonus && Random[Replacements](0,3) ) e.Replacement = 'UArmorBonus';
|
||||||
else e.Replacement = 'Flare';
|
else e.Replacement = 'Flare';
|
||||||
}
|
}
|
||||||
else if ( (e.Replacee == 'HealthBonus') || (e.Replacee == 'CrystalVial') ) e.Replacement = 'Bandages';
|
else if ( (e.Replacee == 'HealthBonus') || (e.Replacee == 'CrystalVial') ) e.Replacement = 'Bandages';
|
||||||
|
|
@ -1150,7 +1160,7 @@ Class UnrealMainHandler : EventHandler
|
||||||
else if ( e.Replacee == 'ArtiTeleport' )
|
else if ( e.Replacee == 'ArtiTeleport' )
|
||||||
{
|
{
|
||||||
// I have no idea what to replace this with, so just have some random stuff
|
// I have no idea what to replace this with, so just have some random stuff
|
||||||
switch( Random[Replacements](0,7) )
|
switch( Random[Replacements](0,sting_proto?7:5) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
e.Replacement = 'UnrealBackpack';
|
e.Replacement = 'UnrealBackpack';
|
||||||
|
|
@ -1208,6 +1218,19 @@ Class UnrealMainHandler : EventHandler
|
||||||
else if ( e.Replacee is 'EnhancedShockAmmo' ) e.Replacement = 'UNothing';
|
else if ( e.Replacee is 'EnhancedShockAmmo' ) e.Replacement = 'UNothing';
|
||||||
else if ( e.Replacee is 'UTBackpack' ) e.Replacement = 'UnrealBackpack';
|
else if ( e.Replacee is 'UTBackpack' ) e.Replacement = 'UnrealBackpack';
|
||||||
else if ( e.Replacee is 'UDamage' ) e.Replacement = 'Amplifier';
|
else if ( e.Replacee is 'UDamage' ) e.Replacement = 'Amplifier';
|
||||||
|
else if ( e.Replacee is 'UTInvisibility' ) e.Replacement = 'UInvisibility';
|
||||||
|
else if ( e.Replacee is 'UTShieldBelt' ) e.Replacement = 'ShieldBelt';
|
||||||
|
else if ( e.Replacee is 'UTBodyArmor' ) e.Replacement = 'UArmor';
|
||||||
|
else if ( e.Replacee is 'UTThighPads' ) e.Replacement = 'KevlarSuit';
|
||||||
|
else if ( e.Replacee is 'UTArmorBonus' )
|
||||||
|
{
|
||||||
|
if ( sting_abonus ) e.Replacement = 'UArmorBonus';
|
||||||
|
else e.Replacement = 'Flare';
|
||||||
|
}
|
||||||
|
else if ( (e.Replacee is 'UTMedBox') || (e.Replacee is 'UTHealthBox') ) e.Replacement = 'UHealth';
|
||||||
|
else if ( e.Replacee is 'UTHealthPack' ) e.Replacement = 'SuperHealth';
|
||||||
|
else if ( e.Replacee is 'UTHealthBonus' ) e.Replacement = 'Bandages';
|
||||||
|
else if ( e.Replacee is 'UTJumpBoots' ) e.Replacement = 'UJumpBoots';
|
||||||
// we don't need these
|
// we don't need these
|
||||||
else if ( e.Replacee is 'UTActivatable' ) e.Replacement = 'UNothing';
|
else if ( e.Replacee is 'UTActivatable' ) e.Replacement = 'UNothing';
|
||||||
else if ( e.Replacee is 'UTActivatableHealth' ) e.Replacement = 'UNothing';
|
else if ( e.Replacee is 'UTActivatableHealth' ) e.Replacement = 'UNothing';
|
||||||
|
|
@ -1218,9 +1241,9 @@ Class UnrealMainHandler : EventHandler
|
||||||
{
|
{
|
||||||
if ( flak_translocator )
|
if ( flak_translocator )
|
||||||
players[e.playernumber].mo.TakeInventory("Translocator",1);
|
players[e.playernumber].mo.TakeInventory("Translocator",1);
|
||||||
if ( sting_telegun )
|
if ( sting_proto && sting_telegun )
|
||||||
players[e.playernumber].mo.GiveInventory("UTranslocator",1);
|
players[e.playernumber].mo.GiveInventory("UTranslocator",1);
|
||||||
if ( sting_flares )
|
if ( sting_proto && sting_flares )
|
||||||
{
|
{
|
||||||
players[e.playernumber].mo.GiveInventory("LightFlare",1);
|
players[e.playernumber].mo.GiveInventory("LightFlare",1);
|
||||||
players[e.playernumber].mo.GiveInventory("DarkFlare",1);
|
players[e.playernumber].mo.GiveInventory("DarkFlare",1);
|
||||||
|
|
@ -1241,14 +1264,14 @@ Class UnrealMainHandler : EventHandler
|
||||||
players[i].mo.TakeInventory("Translocator",1);
|
players[i].mo.TakeInventory("Translocator",1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( sting_telegun )
|
if ( sting_proto && sting_telegun )
|
||||||
{
|
{
|
||||||
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
|
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
|
||||||
{
|
{
|
||||||
players[i].mo.GiveInventory("UTranslocator",1);
|
players[i].mo.GiveInventory("UTranslocator",1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( sting_flares )
|
if ( sting_proto && sting_flares )
|
||||||
{
|
{
|
||||||
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
|
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -319,6 +319,28 @@ Class UJumpBoots : UnrealInventory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cheap replacement when proto content disabled
|
||||||
|
Class UAllMap : MapRevealer
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Tag "$T_ALLMAP";
|
||||||
|
+COUNTITEM;
|
||||||
|
+INVENTORY.ALWAYSPICKUP;
|
||||||
|
Inventory.MaxAmount 0;
|
||||||
|
Inventory.Icon "I_Detect";
|
||||||
|
Inventory.PickupSound "misc/p_pkup";
|
||||||
|
Inventory.PickupMessage "$I_ALLMAP";
|
||||||
|
Inventory.RespawnTics 1050;
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
PMAP ABCDCB 6;
|
||||||
|
Loop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Class MotionDetector : UnrealInventory
|
Class MotionDetector : UnrealInventory
|
||||||
{
|
{
|
||||||
ui TextureID DetHud, DetSpot[2];
|
ui TextureID DetHud, DetSpot[2];
|
||||||
|
|
@ -328,7 +350,6 @@ Class MotionDetector : UnrealInventory
|
||||||
{
|
{
|
||||||
Tag "$T_DETECTOR";
|
Tag "$T_DETECTOR";
|
||||||
+COUNTITEM;
|
+COUNTITEM;
|
||||||
+INVENTORY.BIGPOWERUP;
|
|
||||||
+INVENTORY.ALWAYSPICKUP;
|
+INVENTORY.ALWAYSPICKUP;
|
||||||
Inventory.MaxAmount 1;
|
Inventory.MaxAmount 1;
|
||||||
Inventory.Icon "I_Detect";
|
Inventory.Icon "I_Detect";
|
||||||
|
|
@ -338,10 +359,47 @@ Class MotionDetector : UnrealInventory
|
||||||
}
|
}
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
|
if ( !sting_proto ) return false; // not allowed
|
||||||
bool valid = Super.TryPickup(toucher);
|
bool valid = Super.TryPickup(toucher);
|
||||||
if ( valid ) level.allmap = true;
|
if ( valid ) level.allmap = true;
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( sting_proto ) return;
|
||||||
|
if ( !Owner )
|
||||||
|
{
|
||||||
|
let r = Spawn("AllMap",pos,ALLOW_REPLACE);
|
||||||
|
r.spawnangle = spawnangle;
|
||||||
|
r.spawnpoint = spawnpoint;
|
||||||
|
r.angle = angle;
|
||||||
|
r.pitch = pitch;
|
||||||
|
r.roll = roll;
|
||||||
|
r.special = special;
|
||||||
|
r.args[0] = args[0];
|
||||||
|
r.args[1] = args[1];
|
||||||
|
r.args[2] = args[2];
|
||||||
|
r.args[3] = args[3];
|
||||||
|
r.args[4] = args[4];
|
||||||
|
r.ChangeTid(tid);
|
||||||
|
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
|
||||||
|
r.HandleSpawnFlags();
|
||||||
|
r.SpawnFlags = SpawnFlags;
|
||||||
|
r.bCountSecret = SpawnFlags&MTF_SECRET;
|
||||||
|
r.vel = vel;
|
||||||
|
r.master = master;
|
||||||
|
r.target = target;
|
||||||
|
r.tracer = tracer;
|
||||||
|
r.bDropped = bDropped;
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.RemoveInventory(self);
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
override void PostRender( double lbottom )
|
override void PostRender( double lbottom )
|
||||||
{
|
{
|
||||||
if ( !bActive ) return;
|
if ( !bActive ) return;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Class UTranslocatorAmmo : Ammo
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_telegun ) return;
|
if ( sting_proto && sting_telegun ) return;
|
||||||
if ( Owner ) Owner.RemoveInventory(self);
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
@ -132,13 +132,13 @@ Class UTranslocator : UnrealWeapon
|
||||||
|
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
if ( !sting_telegun ) return false; // not allowed
|
if ( !sting_proto || !sting_telegun ) return false; // not allowed
|
||||||
return Super.TryPickup(toucher);
|
return Super.TryPickup(toucher);
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( sting_telegun ) return;
|
if ( sting_proto && sting_telegun ) return;
|
||||||
if ( Owner ) Owner.RemoveInventory(self);
|
if ( Owner ) Owner.RemoveInventory(self);
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
|
||||||