mirror of
https://github.com/ZDoom/Raze.git
synced 2024-12-11 13:21:49 +00:00
513de38723
Using ownerActor is not robust, for some actors this will have unwanted side effects.
165 lines
2.6 KiB
Text
165 lines
2.6 KiB
Text
class DukeBolt1 : DukeActor
|
|
{
|
|
default
|
|
{
|
|
SpriteSet "BOLT1", "BOLT2", "BOLT3", "BOLT4";
|
|
spritesetindex 0;
|
|
+SE24_NOCARRY;
|
|
}
|
|
override void Initialize(DukeActor spawner)
|
|
{
|
|
self.temp_pos.XY = self.scale;
|
|
self.yint = 0;
|
|
self.ChangeStat(STAT_STANDABLE);
|
|
}
|
|
|
|
override void Tick()
|
|
{
|
|
DukePlayer p;
|
|
double xx;
|
|
let sectp = self.sector;
|
|
|
|
[p, xx] = self.findplayer();
|
|
if (xx > 1280) return;
|
|
|
|
if (self.temp_data[3] == 0)
|
|
self.temp_data[3] = sectp.floorshade;
|
|
|
|
while (true)
|
|
{
|
|
if (self.temp_data[2])
|
|
{
|
|
self.temp_data[2]--;
|
|
sectp.floorshade = 20;
|
|
sectp.ceilingshade = 20;
|
|
return;
|
|
}
|
|
if (self.scale == (0, 0))
|
|
{
|
|
self.scale = self.temp_pos.XY;
|
|
}
|
|
else if ((random() & 8) == 0)
|
|
{
|
|
self.temp_pos.XY = self.scale;
|
|
self.temp_data[2] = Duke.global_random() & 4;
|
|
self.scale = (0, 0);
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
self.SetSpritesetImage((self.spritesetindex + 1) % self.GetSpriteSetSize());
|
|
|
|
int l = Duke.global_random() & 7;
|
|
self.scale.X = (0.125 + l * REPEAT_SCALE);
|
|
|
|
if (l & 1) self.cstat ^= CSTAT_SPRITE_TRANSLUCENT;
|
|
|
|
if (self.spritesetindex == 1 && random(0, 7) == 0 && (dlevel.floorsurface(sectp) == Duke.TSURF_ELECTRIC))
|
|
self.PlayActorSound("SHORT_CIRCUIT");
|
|
|
|
if (self.spritesetindex & 1)
|
|
{
|
|
sectp.floorshade = 0;
|
|
sectp.ceilingshade = 0;
|
|
}
|
|
else
|
|
{
|
|
sectp.floorshade = 20;
|
|
sectp.ceilingshade = 20;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
class DukeBolt2 : DukeBolt1
|
|
{
|
|
default
|
|
{
|
|
spritesetindex 1;
|
|
}
|
|
}
|
|
|
|
class DukeBolt3 : DukeBolt1
|
|
{
|
|
default
|
|
{
|
|
spritesetindex 2;
|
|
}
|
|
}
|
|
|
|
class DukeBolt4 : DukeBolt1
|
|
{
|
|
default
|
|
{
|
|
spritesetindex 3;
|
|
}
|
|
}
|
|
|
|
class DukeSideBolt1 : DukeBolt1
|
|
{
|
|
default
|
|
{
|
|
SpriteSet "SIDEBOLT1", "SIDEBOLT2", "SIDEBOLT3", "SIDEBOLT4";
|
|
}
|
|
|
|
override void Tick()
|
|
{
|
|
DukePlayer p;
|
|
double xx;
|
|
let sectp = self.sector;
|
|
|
|
[p, xx] = self.findplayer();
|
|
if (xx > 1280) return;
|
|
|
|
while (true)
|
|
{
|
|
if (self.temp_data[2])
|
|
{
|
|
self.temp_data[2]--;
|
|
return;
|
|
}
|
|
if (self.scale == (0, 0))
|
|
{
|
|
self.scale = self.temp_pos.XY;
|
|
}
|
|
if ((random() & 8) == 0)
|
|
{
|
|
self.temp_pos.XY = self.scale;
|
|
self.temp_data[2] = Duke.global_random() & 4;
|
|
self.scale = (0, 0);
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
self.SetSpriteSetImage((self.spritesetindex + 1) % self.GetSpriteSetSize());
|
|
|
|
if (random(0, 1) && (dlevel.floorsurface(sectp) == Duke.TSURF_ELECTRIC))
|
|
self.PlayActorSound("SHORT_CIRCUIT");
|
|
}
|
|
|
|
}
|
|
|
|
class DukeSideBolt2 : DukeSideBolt1
|
|
{
|
|
default
|
|
{
|
|
spritesetindex 1;
|
|
}
|
|
}
|
|
|
|
class DukeSideBolt3 : DukeSideBolt1
|
|
{
|
|
default
|
|
{
|
|
spritesetindex 2;
|
|
}
|
|
}
|
|
|
|
class DukeSideBolt4 : DukeSideBolt1
|
|
{
|
|
default
|
|
{
|
|
spritesetindex 3;
|
|
}
|
|
}
|
|
|