2022-12-31 09:53:03 +00:00
|
|
|
|
|
|
|
class DukeToiletWater : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "TOILETWATER";
|
|
|
|
+FORCERUNCON;
|
|
|
|
+NOTELEPORT;
|
|
|
|
Strength 0;
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
self.shade = -16;
|
|
|
|
self.changeStat(STAT_STANDABLE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeExplosion2 : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "EXPLOSION2";
|
|
|
|
+FULLBRIGHT;
|
|
|
|
+FORCERUNCON;
|
|
|
|
+TRIGGER_IFHITSECTOR;
|
|
|
|
Strength 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
override bool animate(tspritetype t)
|
|
|
|
{
|
|
|
|
Duke.GetViewPlayer().visibility = -127;
|
|
|
|
Duke.setlastvisinc(32);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner && spawner != self)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
self.Angle = spawner.Angle;
|
2022-12-31 09:53:03 +00:00
|
|
|
self.cstat = randomXFlip();
|
|
|
|
|
|
|
|
double c,f;
|
|
|
|
[c, f] = self.sector.getSlopes(self.pos.XY);
|
|
|
|
self.pos.Z = min(self.pos.Z, f - 12);
|
|
|
|
}
|
|
|
|
self.cstat |= CSTAT_SPRITE_YCENTER;
|
|
|
|
self.shade = -127;
|
|
|
|
self.Scale = (0.75, 0.75);
|
|
|
|
self.ChangeStat(STAT_MISC);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeExplosion2Bot : DukeExplosion2
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "EXPLOSION2BOT";
|
|
|
|
-TRIGGER_IFHITSECTOR;
|
|
|
|
}
|
|
|
|
|
2023-09-10 17:55:59 +00:00
|
|
|
override bool animate(tspritetype t)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2022-12-31 09:53:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
2023-09-10 17:55:59 +00:00
|
|
|
class RedneckExplosion3 : DukeExplosion2Bot
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "EXPLOSION3";
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
Super.Initialize(spawner);
|
2022-12-31 09:53:03 +00:00
|
|
|
self.scale = (2, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeFloorFlame : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "FLOORFLAME";
|
|
|
|
+FULLBRIGHT;
|
|
|
|
+FORCERUNCON;
|
|
|
|
Strength 0;
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
self.shade = -127;
|
|
|
|
self.ChangeStat(STAT_STANDABLE);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeForceRipple : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "FORCERIPPLE";
|
|
|
|
+FORCERUNCON;
|
|
|
|
Strength 0;
|
|
|
|
//StartAction "RIP_F";
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeTransporterStar : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "TRANSPORTERSTAR";
|
|
|
|
+FORCERUNCON;
|
|
|
|
+NOTELEPORT;
|
|
|
|
Strength 0;
|
|
|
|
//StartAction "TRANSFOWARD";
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner == nullptr || spawner == self)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
scale = (0, 0);
|
|
|
|
return;
|
|
|
|
}
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner.statnum == STAT_PROJECTILE)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
self.scale = (0.125, 0.125);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
self.scale = (0.75, 1);
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner.statnum == STAT_PLAYER || spawner.badguy())
|
2022-12-31 09:53:03 +00:00
|
|
|
self.pos.Z -= 32;
|
|
|
|
}
|
|
|
|
|
|
|
|
self.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
|
2023-05-14 10:18:47 +00:00
|
|
|
self.angle = spawner.angle;
|
2022-12-31 09:53:03 +00:00
|
|
|
|
|
|
|
self.vel.X = 8;
|
|
|
|
self.DoMove(CLIPMASK0);
|
|
|
|
self.SetPosition(self.pos);
|
|
|
|
self.ChangeStat(STAT_MISC);
|
|
|
|
self.shade = -127;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeTransporterBeam : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "TRANSPORTERBEAM";
|
|
|
|
+FORCERUNCON;
|
|
|
|
+NOTELEPORT;
|
|
|
|
Strength 0;
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner == nullptr || spawner == self)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
scale = (0, 0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
self.scale = (0.484375, REPEAT_SCALE);
|
2023-05-14 10:18:47 +00:00
|
|
|
self.pos.Z = spawner.sector.floorz - gs.playerheight;
|
2022-12-31 09:53:03 +00:00
|
|
|
|
|
|
|
self.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
|
2023-05-14 10:18:47 +00:00
|
|
|
self.angle = spawner.angle;
|
2022-12-31 09:53:03 +00:00
|
|
|
|
|
|
|
self.vel.X = 8;
|
|
|
|
self.DoMove(CLIPMASK0);
|
|
|
|
self.SetPosition(self.pos);
|
|
|
|
self.ChangeStat(STAT_MISC);
|
|
|
|
self.shade = -127;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeSteamBase : DukeActor // we need this for in-game checking and the shared CON code.
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
statnum STAT_STANDABLE;
|
|
|
|
+FORCERUNCON;
|
|
|
|
Strength 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class DukeCeilingSteam : DukeSteamBase
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "CEILINGSTEAM";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class DukeSteam : DukeSteamBase
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "STEAM";
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
let owner = self.ownerActor;
|
|
|
|
|
|
|
|
if (owner && owner != self)
|
|
|
|
{
|
|
|
|
self.Angle = owner.Angle;
|
|
|
|
self.cstat = CSTAT_SPRITE_ALIGNMENT_WALL | CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
|
|
|
|
self.vel.X = -0.5;
|
|
|
|
self.doMove(CLIPMASK0);
|
|
|
|
}
|
|
|
|
self.scale = (REPEAT_SCALE, REPEAT_SCALE);
|
|
|
|
self.ChangeStat(STAT_STANDABLE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeSmallSmoke : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "SMALLSMOKE";
|
|
|
|
+FORCERUNCON;
|
|
|
|
Strength 0;
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner && spawner != self)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
self.Angle = spawner.Angle;
|
2022-12-31 09:53:03 +00:00
|
|
|
self.cstat = randomXFlip();
|
|
|
|
|
|
|
|
double c,f;
|
|
|
|
[c, f] = self.sector.getSlopes(self.pos.XY);
|
|
|
|
self.pos.Z = min(self.pos.Z, f - 12);
|
|
|
|
}
|
|
|
|
self.scale = (0.375, 0.375);
|
|
|
|
self.ChangeStat(STAT_MISC);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class DukeBlood : DukeActor
|
|
|
|
{
|
|
|
|
default
|
|
|
|
{
|
|
|
|
pic "BLOOD";
|
|
|
|
+FORCERUNCON;
|
|
|
|
Strength 0;
|
|
|
|
}
|
|
|
|
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
|
|
|
self.pos.Z -= 26;
|
2023-05-14 10:18:47 +00:00
|
|
|
if (spawner && spawner.pal == 6)
|
2022-12-31 09:53:03 +00:00
|
|
|
self.pal = 6;
|
|
|
|
self.scale = (0.25, 0.25);
|
|
|
|
temp_pos.Z = 72 * REPEAT_SCALE;
|
|
|
|
self.ChangeStat(STAT_MISC);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class RedneckBlood : DukeBlood
|
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
override void Initialize(DukeActor spawner)
|
2022-12-31 09:53:03 +00:00
|
|
|
{
|
2023-05-14 10:18:47 +00:00
|
|
|
Super.Initialize(spawner);
|
2022-12-31 09:53:03 +00:00
|
|
|
self.scale = (0.0625, 0.0625);
|
|
|
|
temp_pos.Z = 48 * REPEAT_SCALE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|