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.
This commit is contained in:
Marisa the Magician 2019-10-08 11:01:20 +02:00
commit 7051cb25be
35 changed files with 719 additions and 93 deletions

View file

@ -74,18 +74,20 @@ Doom Tournament (currently the devel branch is required).
## In progress
- Beta testing
- Final polishing
## Planned
- Impaler "slice" animation for melee alt
- Separate proto content into an add-on (if people want)
- 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
explosions/lava/etc).
- Alternate Impaler primary that follows the Bible (laser shots from the
crystal), shifts crystal shooting to pressing both buttons at once.
- Actual Bonesaw?
- Shifted to a 1.1 update:
- Impaler "slice" animation for melee alt
- 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
explosions/lava/etc).
- Alternate Impaler primary that follows the Bible (laser shots from the
crystal), shifts crystal shooting to pressing both buttons at once.
- Actual Bonesaw?
- Implement ASMD behavior described in the Unreal novels (highly destructive
green beam that bounces off mirrors and water).
- RTNP add-on
- Monster pack (someday)
@ -94,4 +96,5 @@ Doom Tournament (currently the devel branch is required).
## Known bugs
- 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
brightmaps/JAllMap1_a01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
brightmaps/JAllMap1_a02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
brightmaps/JAllMap1_a03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -73,6 +73,8 @@ server bool sting_olsmp = true; // adds the stupid oldskool SMP 7243 to
// an option
server bool sting_msentry = true; // allows the new Minigun Sentry, which
// 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
// (Demolisher, Razorclaw, Autocannon)
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)
server bool sting_impself = false; // disable impaler beam self-hit
user bool sting_zoomshader = true; // rifle scope shader
server bool sting_proto = true; // allow prototype content

View file

@ -440,6 +440,18 @@ Object StarterImpalerBolt
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
HardwareShader Texture "graphics/MenuBarr.png"
{
@ -850,6 +862,34 @@ HardwareShader Texture "models/shield.png"
{
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
HardwareShader PostProcess scene
{

View file

@ -115,6 +115,7 @@ I_SCUBA = "You picked up the SCUBA Gear.";
I_OLSMP = "You got the SMP 7243. Time to kick ass!";
I_OLSMPAMMO = "You picked up a SMP 7243 Magazine.";
I_LBOOTS = "You picked up the Jump Boots.";
I_ALLMAP = "You got an Area Map.";
/* Tags */
T_WPOWERUP = "Dispersion Pistol Powerup";
T_STINGERAMMO = "Tarydium Shards";
@ -182,6 +183,7 @@ T_SCUBA = "SCUBA Gear";
T_OLSMP = "SMP 7243";
T_OLSMPAMMO = "SMP 7243 Magazine";
T_LBOOTS = "Jump Boots";
T_ALLMAP = "Area Map";
/* Miscellaneous */
TR_NOMSG = "No new messages";
TR_NEWMSG = "New Translator message";
@ -225,6 +227,7 @@ STING_UNREAL97 = "Unreal '97";
STING_UNREAL96 = "Unreal '96";
STING_UNREAL95 = "Unreal '95";
STING_POPTS = "Prototype features";
STING_PROTO = "Enable prototype content";
STING_TELEHAND = "Teleport Capsules";
STING_FLARES = "Light/Dark Flares";
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_OLSMP = "Enable SMP 7243 from Oldskool Amp'd";
STING_MSENTRY = "Enable new Minigun Sentry";
STING_ABONUS = "Enable Armor Bonus";
STING_DUBIOUS = "Enable Demolisher, Razorclaw and Autocannon";
STING_ZSHADER = "Enable Rifle scope shader";
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_OLSMPAMMO = "Has recogido un Cargador de SMP 7243.";
I_LBOOTS = "Has recogido las Botas de Salto.";
I_ALLMAP = "Has obtenido un Mapa de Área.";
/* Tags */
T_WPOWERUP = "Mejora para Pistola de Dispersión";
T_STINGERAMMO = "Fragmentos de Tarydium";
@ -435,6 +440,7 @@ T_DETECTOR = "Detector de Movimiento";
T_SCUBA = "Kit de Buceo";
T_OLSMPAMMO = "Cargador de SMP 7243";
T_LBOOTS = "Botas de Salto";
T_ALLMAP = "Mapa de Área";
/* Miscellaneous */
TR_NOMSG = "No hay mensajes nuevos";
TR_NEWMSG = "Nuevo mensaje de Traductor";
@ -465,6 +471,7 @@ STING_HUDMODE = "Modo de HUD";
STING_TRANSEXT = "Traductor extendido (cabe más texto)";
STING_INTRO = "Tipo de intro";
STING_POPTS = "Características de prototipo";
STING_PROTO = "Habilitar contenido de prototipo";
STING_TELEHAND = "Cápsulas de Teletransporte";
STING_FLARES = "Bengalas de luz/oscuridad";
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_OLSMP = "Habilitar SMP 7243 de Oldskool Amp'd";
STING_MSENTRY = "Habilitar nueva Torreta";
STING_ABONUS = "Habilitar Armadura Extra";
STING_DUBIOUS = "Habilitar Demoledor, Garra y Autocañón";
STING_ZSHADER = "Habilitar shader de mira de Rifle";
STING_QOPTS = "Características de comodidad";

View file

@ -23,8 +23,9 @@ OptionMenu "UnrealOptionMenu"
Option "$STING_TRANSEXT", "sting_transext", "YesNo"
StaticText " "
StaticText "$STING_POPTS", "Gold"
Option "$STING_TELEHAND", "sting_telegun", "YesNo"
Option "$STING_FLARES", "sting_flares", "YesNo"
Option "$STING_PROTO", "sting_proto", "YesNo"
Option "$STING_TELEHAND", "sting_telegun", "YesNo", "sting_proto"
Option "$STING_FLARES", "sting_flares", "YesNo", "sting_proto"
Command "$FLAK_APPLY", "netevent refreshtrans"
Option "$STING_STINGER", "sting_stinger", "YesNo"
Option "$STING_STINGERB", "sting_stingerb", "YesNo"
@ -36,7 +37,7 @@ OptionMenu "UnrealOptionMenu"
StaticText " "
StaticText "$STING_DOPTS", "Gold"
Option "$STING_AUTODUAL", "sting_automags", "YesNo"
Option "$STING_PROTODUAL", "sting_protomags", "YesNo"
Option "$STING_PROTODUAL", "sting_protomags", "YesNo", "sting_proto"
StaticText " "
StaticText "$STING_UOPTS", "Gold"
Option "$STING_DPISTOL", "sting_dpistol", "YesNo"
@ -44,15 +45,16 @@ OptionMenu "UnrealOptionMenu"
Option "$STING_NOPSTART", "sting_nopstart", "YesNo"
Option "$STING_OLSMP", "sting_olsmp", "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"
StaticText " "
StaticText "$STING_QOPTS", "Gold"
Option "$STING_AUTOSCUBA", "sting_autoscuba", "YesNo"
Option "$STING_RAZORAIM", "sting_razoraim", "YesNo"
Option "$STING_BIOSPLASH", "sting_biosplash", "YesNo"
Option "$STING_FLAMETSPREAD", "sting_flametspread", "YesNo"
Option "$STING_IMPSELF", "sting_impself", "YesNo"
Option "$STING_FLAMETSPREAD", "sting_flametspread", "YesNo", "sting_proto"
Option "$STING_IMPSELF", "sting_impself", "YesNo", "sting_proto"
}
AddOptionMenu "OptionsMenu"

View file

@ -797,3 +797,23 @@ Model "UArmorBonus"
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

Binary file not shown.

BIN
models/CheapComp_d.3d Normal file

Binary file not shown.

BIN
models/JAllMap1_a00.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
models/JAllMap1_a01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
models/JAllMap1_a02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
models/JAllMap1_a03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
models/JAllMap2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
models/JAllMap3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -11,6 +11,66 @@ Class Betamag : UnrealWeapon
int SlaveRefire;
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 )
{
if ( sting_protomags && (item.GetClass() == GetClass()) )
@ -271,27 +331,6 @@ Class Betamag : UnrealWeapon
else if ( Amount > 1 ) SelectionOrder = 2200;
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
{
Tag "$T_PROTOMAG";

View file

@ -20,13 +20,13 @@ Class BigAmmo : Ammo
}
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);
}
override void Tick()
{
Super.Tick();
if ( sting_dubious ) return;
if ( sting_proto && sting_dubious ) return;
if ( !Owner )
{
let r = Spawn((GetClass()=="BigAmmo")?"CellPack":"Cell",pos,ALLOW_REPLACE);
@ -237,13 +237,13 @@ Class BigGun : UnrealWeapon
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);
}
override void Tick()
{
Super.Tick();
if ( sting_dubious ) return;
if ( sting_proto && sting_dubious ) return;
if ( !Owner )
{
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);

View file

@ -2,13 +2,13 @@ Class Bonesaw : UnrealWeapon
{
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);
}
override void Tick()
{
Super.Tick();
if ( sting_dubious ) return;
if ( sting_proto && sting_dubious ) return;
if ( !Owner )
{
let r = Spawn("Chainsaw",pos,ALLOW_REPLACE);

View file

@ -66,7 +66,7 @@ Class DefaultAmmo : Ammo
}
override void DoEffect()
{
Super.Tick();
Super.DoEffect();
if ( rechargespeed <= 0. ) rechargespeed = 1.1;
rechargephase += 1./rechargespeed;
if ( rechargephase < 35 ) return;

View file

@ -316,6 +316,47 @@ Class FlameGun : UnrealWeapon
Weapon.AmmoGive 100;
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 )
{
Weapon weap = Weapon(invoker);

View file

@ -10,13 +10,13 @@ Class SMiniAmmo : Ammo
}
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);
}
override void Tick()
{
Super.Tick();
if ( sting_dubious ) return;
if ( sting_proto && sting_dubious ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}
@ -123,13 +123,13 @@ Class SMiniGun : UnrealWeapon
{
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);
}
override void Tick()
{
Super.Tick();
if ( sting_dubious ) return;
if ( sting_proto && sting_dubious ) return;
if ( !Owner )
{
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);

View file

@ -12,6 +12,47 @@ Class ImpalerAmmo : Ammo
Ammo.DropAmount 3;
+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
{
Spawn:
@ -693,6 +734,47 @@ Class Impaler : UnrealWeapon
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()
{
return HasGem?ClipCount:-1, -1, (ClipCount<10), false;

View file

@ -90,24 +90,24 @@ Class UnrealBackpack : BackpackItem replaces Backpack
Super.DoPickupSpecial(toucher);
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];
xitemn[0] = max(0,Random[BackpackExtra](-1,3));
xitemn[1] = max(0,Random[BackpackExtra](-1,3));
xitemn[2] = max(0,Random[BackpackExtra](-2,1));
xitemn[3] = max(0,Random[BackpackExtra](-2,1));
xitemn[4] = max(0,Random[BackpackExtra](-2,1));
xitemn[5] = max(0,Random[BackpackExtra](-1,1));
xitemn[4] = max(0,Random[BackpackExtra](-1,1));
xitemn[5] = max(0,Random[BackpackExtra](-2,1));
xitemn[6] = max(0,Random[BackpackExtra](-2,1));
// random doubling
if ( !Random[BackpackExtra](0,4) ) xitemn[0] *= 2;
if ( !Random[BackpackExtra](0,4) ) xitemn[1] *= 2;
if ( !Random[BackpackExtra](0,9) ) xitemn[2] *= 2;
if ( !Random[BackpackExtra](0,7) ) xitemn[3] *= 2;
if ( !Random[BackpackExtra](0,6) ) xitemn[4] *= 2;
if ( !Random[BackpackExtra](0,5) ) xitemn[5] *= 2;
if ( !Random[BackpackExtra](0,7) ) xitemn[2] *= 2;
if ( !Random[BackpackExtra](0,6) ) xitemn[3] *= 2;
if ( !Random[BackpackExtra](0,5) ) xitemn[4] *= 2;
if ( !Random[BackpackExtra](0,9) ) xitemn[5] *= 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;
toucher.GiveInventory(xitems[i],xitemn[i]);
@ -749,13 +749,13 @@ Class BetaFlare : UnrealInventory
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);
}
override void Tick()
{
Super.Tick();
if ( sting_flares ) return;
if ( sting_proto && sting_flares ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}
@ -2251,6 +2251,18 @@ Class SentryGunItem : UnrealInventory
Inventory.PickupMessage "$I_OSENTRY";
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 )
{
if ( pickup ) return false;
@ -2399,6 +2411,11 @@ Class SentryGun : Actor
override void Tick()
{
Super.Tick();
if ( !sting_proto )
{
Destroy();
return;
}
if ( !master && (rememberedplayer != -1) && playeringame[rememberedplayer] )
master = players[rememberedplayer].mo;
}

View file

@ -11,6 +11,47 @@ Class FlameAmmo : Ammo
Ammo.BackpackMaxAmount 900;
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
{
Spawn:
@ -761,6 +802,47 @@ Class UFlamethrower : UnrealWeapon
bool bCharging;
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()
{
return bCharging?min(5,int(chargesize+0.1)):-1, -1, false, false;

View file

@ -114,6 +114,10 @@ Class OLSMP : UnrealWeapon
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 )
{
Weapon weap = Weapon(invoker);

View file

@ -8,6 +8,18 @@ Class PeaceAmmo : Ammo
Ammo.BackpackAmount 0;
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
@ -398,6 +410,18 @@ Class PeaceBarrel : Actor
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 )
{
let weap = Weapon(invoker);

View file

@ -16,6 +16,47 @@ Class UShells : Ammo
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
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
{
Spawn:
@ -96,6 +137,48 @@ Class QuadShot : UnrealWeapon
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()
{
return ClipOut?-1:ClipCount, -1, (ClipCount<2), false;

View file

@ -12,7 +12,7 @@ Class StunnerAmmo : Ammo
}
override void DoEffect()
{
Super.Tick();
Super.DoEffect();
if ( rechargespeed <= 0. ) rechargespeed = 2.;
rechargephase += 1./rechargespeed;
if ( rechargephase < 7 ) return;
@ -20,6 +20,18 @@ Class StunnerAmmo : Ammo
rechargephase = 0;
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
@ -272,6 +284,48 @@ Class Stunner : UnrealWeapon
double chargesize, count;
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()
{
return bCharging?min(5,int(chargesize)):-1, -1, false, false;

View file

@ -250,6 +250,49 @@ Class PowerShield : UnrealArmor
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 )
{
absorb = Clamp(Amount-50,25,100);

View file

@ -183,15 +183,21 @@ Class UPlayer : UTPlayer
{
// force akimbo
let t = FindInventory(type);
if ( t ) t.Amount = 2;
t.SetTag(StringTable.Localize("$T_AUTOMAG2"));
if ( t )
{
t.Amount = 2;
t.SetTag(StringTable.Localize("$T_AUTOMAG2"));
}
}
else if ( (type is 'Betamag') && sting_protomags )
{
// force akimbo
let t = FindInventory(type);
if ( t ) t.Amount = 2;
t.SetTag(StringTable.Localize("$T_PROTOMAG2"));
if ( t )
{
t.Amount = 2;
t.SetTag(StringTable.Localize("$T_PROTOMAG2"));
}
}
else if ( type is 'DispersionPistol' )
{
@ -952,29 +958,29 @@ Class UnrealMainHandler : EventHandler
{
if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') )
{
if ( (sting_dubious || sting_olsmp) && !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp';
else if ( Random[Replacements](0,2) )
if ( ((sting_proto && sting_dubious) || sting_olsmp) && !Random[Replacements](0,sting_proto?3:1) ) e.Replacement = 'WeaponPowerUp';
else if ( sting_proto && Random[Replacements](0,2) )
{
if ( sting_dubious && Random[Replacements](0,1) ) e.Replacement = 'Bonesaw';
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 if ( (e.Replacee == 'Fist') || (e.Replacee == 'Staff') ) e.Replacement = 'DispersionPistol';
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 if ( (e.Replacee == 'Shotgun') || (e.Replacee == 'SuperShotgun') || (e.Replacee == 'Crossbow') )
{
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 switch( Random[Replacements](0,2) )
else switch( Random[Replacements](0,sting_proto?2:1) )
{
case 0:
e.Replacement = 'Stinger';
@ -994,7 +1000,7 @@ Class UnrealMainHandler : EventHandler
}
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';
else e.Replacement = 'FlameGun';
@ -1004,14 +1010,14 @@ Class UnrealMainHandler : EventHandler
}
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 e.Replacement = 'UBioRifle';
}
else if ( (e.Replacee == 'BFG9000') || (e.Replacee == 'Mace') )
{
if ( sting_olsmp && (!sting_dubious || Random[Replacements](0,1)) ) e.Replacement = 'OLSMP';
else if ( sting_dubious )
if ( sting_olsmp && (!sting_proto || !sting_dubious || Random[Replacements](0,1)) ) e.Replacement = 'OLSMP';
else if ( sting_proto && sting_dubious )
{
if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun';
else e.Replacement = 'BigGun';
@ -1033,7 +1039,7 @@ Class UnrealMainHandler : EventHandler
else if ( (e.Replacee == 'Shell') || (e.Replacee == 'CrossbowAmmo') )
{
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:
e.Replacement = 'StingerAmmo';
@ -1048,7 +1054,7 @@ Class UnrealMainHandler : EventHandler
}
else if ( (e.Replacee == 'ShellBox') || (e.Replacee == 'CrossbowHefty') )
{
switch( Random[Replacements](0,2) )
switch( Random[Replacements](0,sting_proto?2:1) )
{
case 0:
e.Replacement = 'StingerAmmo2';
@ -1063,7 +1069,7 @@ Class UnrealMainHandler : EventHandler
}
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) )
{
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') )
{
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 e.Replacement = 'URocketAmmo';
}
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';
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';
else e.Replacement = 'ImpalerAmmo2';
@ -1106,12 +1112,12 @@ Class UnrealMainHandler : EventHandler
}
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';
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 ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo';
else e.Replacement = 'URifleAmmo';
@ -1120,13 +1126,17 @@ Class UnrealMainHandler : EventHandler
else if ( (e.Replacee == 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') )
{
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 if ( e.Replacee == 'ArtiEgg' ) e.Replacement = 'VoiceBox';
else if ( (e.Replacee == 'Soulsphere') || (e.Replacee == 'ArtiSuperHealth') ) e.Replacement = 'SuperHealth';
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 == 'Infrared') || (e.Replacee == 'ArtiTorch') ) e.Replacement = 'UFlashlight';
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 == '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 if ( (e.Replacee == 'HealthBonus') || (e.Replacee == 'CrystalVial') ) e.Replacement = 'Bandages';
@ -1150,7 +1160,7 @@ Class UnrealMainHandler : EventHandler
else if ( e.Replacee == 'ArtiTeleport' )
{
// 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:
e.Replacement = 'UnrealBackpack';
@ -1208,6 +1218,19 @@ Class UnrealMainHandler : EventHandler
else if ( e.Replacee is 'EnhancedShockAmmo' ) e.Replacement = 'UNothing';
else if ( e.Replacee is 'UTBackpack' ) e.Replacement = 'UnrealBackpack';
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
else if ( e.Replacee is 'UTActivatable' ) e.Replacement = 'UNothing';
else if ( e.Replacee is 'UTActivatableHealth' ) e.Replacement = 'UNothing';
@ -1218,9 +1241,9 @@ Class UnrealMainHandler : EventHandler
{
if ( flak_translocator )
players[e.playernumber].mo.TakeInventory("Translocator",1);
if ( sting_telegun )
if ( sting_proto && sting_telegun )
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("DarkFlare",1);
@ -1241,14 +1264,14 @@ Class UnrealMainHandler : EventHandler
players[i].mo.TakeInventory("Translocator",1);
}
}
if ( sting_telegun )
if ( sting_proto && sting_telegun )
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
{
players[i].mo.GiveInventory("UTranslocator",1);
}
}
if ( sting_flares )
if ( sting_proto && sting_flares )
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
{

View file

@ -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
{
ui TextureID DetHud, DetSpot[2];
@ -328,7 +350,6 @@ Class MotionDetector : UnrealInventory
{
Tag "$T_DETECTOR";
+COUNTITEM;
+INVENTORY.BIGPOWERUP;
+INVENTORY.ALWAYSPICKUP;
Inventory.MaxAmount 1;
Inventory.Icon "I_Detect";
@ -338,10 +359,47 @@ Class MotionDetector : UnrealInventory
}
override bool TryPickup( in out Actor toucher )
{
if ( !sting_proto ) return false; // not allowed
bool valid = Super.TryPickup(toucher);
if ( valid ) level.allmap = true;
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 )
{
if ( !bActive ) return;

View file

@ -12,7 +12,7 @@ Class UTranslocatorAmmo : Ammo
override void Tick()
{
Super.Tick();
if ( sting_telegun ) return;
if ( sting_proto && sting_telegun ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}
@ -132,13 +132,13 @@ Class UTranslocator : UnrealWeapon
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);
}
override void Tick()
{
Super.Tick();
if ( sting_telegun ) return;
if ( sting_proto && sting_telegun ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}