raze/wadsrc/static/zscript/games/duke/actors/flammables.zs
Christoph Oelckers ac1d1a90e0 - transfer the nofloorfire flag to the flame actor.
When checked on the owner it can fall victim to garbage collection.
2023-04-16 16:53:33 +02:00

124 lines
1.7 KiB
Text

class DukeFlammable : DukeActor
{
default
{
statnum STAT_STANDABLE;
+HITRADIUS_FLAG1;
}
override void Initialize()
{
self.cstat = CSTAT_SPRITE_BLOCK_ALL; // Make it hitable
self.extra = 1;
}
override void Tick()
{
if (self.counter == 1)
{
self.temp_data[1]++;
if ((self.temp_data[1] & 3) > 0) return;
if (self.bFLAMMABLEPOOLEFFECT && self.temp_data[1] == 32)
{
self.cstat = 0;
let spawned = self.spawn("DukeBloodPool");
if (spawned)
{
spawned.pal = 2;
spawned.shade = 127;
spawned.detail = 1;
}
}
else
{
if (self.shade < 64) self.shade++;
else
{
self.Destroy();
return;
}
}
double scale = self.scale.X - random(0, 7) * REPEAT_SCALE;
if (scale < 0.15625)
{
self.Destroy();
return;
}
self.scale.X = scale;
scale = self.scale.Y - random(0, 7) * REPEAT_SCALE;
if (scale < 0.0625)
{
self.Destroy();
return;
}
self.scale.Y = scale;
}
if (self.bFALLINGFLAMMABLE)
{
self.makeitfall();
self.ceilingz = self.sector.ceilingz;
}
}
override void onHit(DukeActor hitter)
{
if (hitter.bINFLAME)
{
if (self.counter == 0)
{
self.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
self.counter = 1;
let burn = self.spawn("DukeBurning");
if (burn) burn.bNoFloorFire = self.bNoFloorFire;
}
}
}
}
class DukeBox : DukeFlammable
{
default
{
pic "BOX";
+FALLINGFLAMMABLE;
}
}
class DukeTree1 : DukeFlammable
{
default
{
pic "TREE1";
+NOFLOORFIRE;
}
}
class DukeTree2 : DukeFlammable
{
default
{
pic "TREE2";
+NOFLOORFIRE;
}
}
class DukeTire : DukeFlammable
{
default
{
pic "TIRE";
+FLAMMABLEPOOLEFFECT;
}
}
class DukeCone : DukeFlammable
{
default
{
pic "CONE";
}
}