mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-20 10:32:27 +00:00
- scriptified the bolts.
This commit is contained in:
parent
676ca73983
commit
11acb92553
17 changed files with 240 additions and 210 deletions
|
@ -250,7 +250,11 @@ void FActorInfo::ResolveTextures(const char* clsname, DCoreActor* defaults)
|
|||
SpriteSet[i] = TileFiles.tileForName(SpriteSetNames[i]);
|
||||
if (SpriteSet[i] == -1) Printf("Unknown texture '%s' in sprite set for class %s\n", SpriteSetNames[i].GetChars(), clsname);
|
||||
}
|
||||
if (SpriteSet.Size() > 0) defaults->spr.picnum = SpriteSet[0]; // Unless picnum is specified it will be set to the first image of the sprite set.
|
||||
if (SpriteSet.Size() > 0)
|
||||
{
|
||||
if (defaults->spritesetindex < 0 || defaults->spritesetindex >= (int)SpriteSet.Size()) defaults->spritesetindex = 0;
|
||||
defaults->spr.picnum = SpriteSet[defaults->spritesetindex]; // Unless picnum is specified it will be set to the given image of the sprite set.
|
||||
}
|
||||
if (PicName.IsNotEmpty())
|
||||
{
|
||||
defaults->spr.picnum = TileFiles.tileForName(PicName);
|
||||
|
|
|
@ -350,7 +350,7 @@ DEFINE_PROPERTY(intangle, I, CoreActor)
|
|||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
DEFINE_PROPERTY(xvel, I, CoreActor)
|
||||
DEFINE_PROPERTY(xint, I, CoreActor)
|
||||
{
|
||||
PROP_INT_PARM(i, 0);
|
||||
defaults->spr.xint = i;
|
||||
|
@ -360,7 +360,7 @@ DEFINE_PROPERTY(xvel, I, CoreActor)
|
|||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
DEFINE_PROPERTY(yvel, I, CoreActor)
|
||||
DEFINE_PROPERTY(yint, I, CoreActor)
|
||||
{
|
||||
PROP_INT_PARM(i, 0);
|
||||
defaults->spr.yint = i;
|
||||
|
@ -370,7 +370,7 @@ DEFINE_PROPERTY(yvel, I, CoreActor)
|
|||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
DEFINE_PROPERTY(zvel, I, CoreActor)
|
||||
DEFINE_PROPERTY(inittype, I, CoreActor)
|
||||
{
|
||||
PROP_INT_PARM(i, 0);
|
||||
defaults->spr.inittype = i;
|
||||
|
@ -511,6 +511,15 @@ DEFINE_PROPERTY(spriteset, Sssssssssssssssssssssssssssssss, CoreActor)
|
|||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
DEFINE_PROPERTY(spritesetindex, I, CoreActor)
|
||||
{
|
||||
PROP_INT_PARM(i, 0);
|
||||
defaults->spritesetindex = i;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
|
|
|
@ -819,107 +819,6 @@ static void moveviewscreen(DDukeActor* actor)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// Duke only
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void movesidebolt(DDukeActor* actor)
|
||||
{
|
||||
double xx;
|
||||
auto sectp = actor->sector();
|
||||
|
||||
findplayer(actor, &xx);
|
||||
if (xx > 1280) return;
|
||||
|
||||
CLEAR_THE_BOLT2:
|
||||
if (actor->temp_data[2])
|
||||
{
|
||||
actor->temp_data[2]--;
|
||||
return;
|
||||
}
|
||||
if ((actor->spr.scale.X == 0 && actor->spr.scale.Y) == 0)
|
||||
{
|
||||
actor->spr.scale = DVector2(actor->temp_pos.X, actor->temp_pos.Y);
|
||||
}
|
||||
if ((krand() & 8) == 0)
|
||||
{
|
||||
actor->temp_pos.X = actor->spr.scale.X;
|
||||
actor->temp_pos.Y = actor->spr.scale.Y;
|
||||
actor->temp_data[2] = global_random & 4;
|
||||
actor->spr.scale = DVector2(0, 0);
|
||||
goto CLEAR_THE_BOLT2;
|
||||
}
|
||||
actor->spr.picnum++;
|
||||
|
||||
if ((krand() & 1) && (gs.tileinfo[sectp->floorpicnum].flags & TFLAG_ELECTRIC))
|
||||
S_PlayActorSound(SHORT_CIRCUIT, actor);
|
||||
|
||||
if (actor->spr.picnum == SIDEBOLT1 + 4) actor->spr.picnum = SIDEBOLT1;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void movebolt(DDukeActor *actor)
|
||||
{
|
||||
double xx;
|
||||
auto sectp = actor->sector();
|
||||
|
||||
findplayer(actor, &xx);
|
||||
if (xx > 1280) return;
|
||||
|
||||
if (actor->temp_data[3] == 0)
|
||||
actor->temp_data[3] = sectp->floorshade;
|
||||
|
||||
CLEAR_THE_BOLT:
|
||||
if (actor->temp_data[2])
|
||||
{
|
||||
actor->temp_data[2]--;
|
||||
sectp->floorshade = 20;
|
||||
sectp->ceilingshade = 20;
|
||||
return;
|
||||
}
|
||||
if (actor->spr.scale.X == 0 && actor->spr.scale.Y == 0)
|
||||
{
|
||||
actor->spr.scale = DVector2(actor->temp_pos.X, actor->temp_pos.Y);
|
||||
}
|
||||
else if ((krand() & 8) == 0)
|
||||
{
|
||||
actor->temp_pos.X = actor->spr.scale.X;
|
||||
actor->temp_pos.Y = actor->spr.scale.Y;
|
||||
actor->temp_data[2] = global_random & 4;
|
||||
actor->spr.scale = DVector2(0, 0);
|
||||
goto CLEAR_THE_BOLT;
|
||||
}
|
||||
actor->spr.picnum++;
|
||||
|
||||
int l = global_random & 7;
|
||||
actor->spr.scale.X = (0.125 + l * REPEAT_SCALE);
|
||||
|
||||
if (l & 1) actor->spr.cstat ^= CSTAT_SPRITE_TRANSLUCENT;
|
||||
|
||||
if (actor->spr.picnum == (BOLT1+1) && (krand()&7) == 0 && (gs.tileinfo[sectp->floorpicnum].flags & TFLAG_ELECTRIC))
|
||||
S_PlayActorSound(SHORT_CIRCUIT,actor);
|
||||
|
||||
if (actor->spr.picnum==BOLT1+4) actor->spr.picnum=BOLT1;
|
||||
|
||||
if (actor->spr.picnum & 1)
|
||||
{
|
||||
sectp->floorshade = 0;
|
||||
sectp->ceilingshade = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sectp->floorshade = 20;
|
||||
sectp->ceilingshade = 20;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// this has been broken up into lots of smaller subfunctions
|
||||
|
@ -950,16 +849,6 @@ void movestandables_d(void)
|
|||
moveviewscreen(act);
|
||||
}
|
||||
|
||||
else if (picnum >= SIDEBOLT1 && picnum <= SIDEBOLT1 + 3)
|
||||
{
|
||||
movesidebolt(act);
|
||||
}
|
||||
|
||||
else if (picnum >= BOLT1 && picnum <= BOLT1 + 3)
|
||||
{
|
||||
movebolt(act);
|
||||
}
|
||||
|
||||
else if (picnum == WATERDRIP)
|
||||
{
|
||||
movewaterdrip(act, WATERDRIP);
|
||||
|
|
|
@ -707,67 +707,6 @@ void movefallers_r(void)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void movebolt(DDukeActor* actor)
|
||||
{
|
||||
double xx;
|
||||
auto sectp = actor->sector();
|
||||
|
||||
findplayer(actor, &xx);
|
||||
if (xx > 1280) return;
|
||||
|
||||
if (actor->temp_data[3] == 0)
|
||||
actor->temp_data[3] = sectp->floorshade;
|
||||
|
||||
CLEAR_THE_BOLT:
|
||||
if (actor->temp_data[2])
|
||||
{
|
||||
actor->temp_data[2]--;
|
||||
sectp->floorshade = 20;
|
||||
sectp->ceilingshade = 20;
|
||||
return;
|
||||
}
|
||||
if (actor->spr.scale.X == 0 && actor->spr.scale.Y == 0)
|
||||
{
|
||||
actor->spr.scale = DVector2(actor->temp_pos.X, actor->temp_pos.Y);
|
||||
}
|
||||
else if ((krand() & 8) == 0)
|
||||
{
|
||||
actor->temp_pos.X = actor->spr.scale.X;
|
||||
actor->temp_pos.Y = actor->spr.scale.Y;
|
||||
actor->temp_data[2] = global_random & 4;
|
||||
actor->spr.scale = DVector2(0, 0);
|
||||
goto CLEAR_THE_BOLT;
|
||||
}
|
||||
actor->spr.picnum++;
|
||||
|
||||
int l = global_random & 7;
|
||||
actor->spr.scale.X = (0.125 + l * REPEAT_SCALE);
|
||||
|
||||
if (l & 1) actor->spr.cstat ^= CSTAT_SPRITE_TRANSLUCENT;
|
||||
|
||||
if (actor->spr.picnum == (BOLT1 + 1) && (krand() & 1) && (gs.tileinfo[sectp->floorpicnum].flags & TFLAG_ELECTRIC))
|
||||
S_PlayActorSound(SHORT_CIRCUIT, actor);
|
||||
|
||||
if (actor->spr.picnum == BOLT1 + 4) actor->spr.picnum = BOLT1;
|
||||
|
||||
if (actor->spr.picnum & 1)
|
||||
{
|
||||
sectp->floorshade = 0;
|
||||
sectp->ceilingshade = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sectp->floorshade = 20;
|
||||
sectp->ceilingshade = 20;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// this has been broken up into lots of smaller subfunctions
|
||||
|
@ -793,16 +732,6 @@ void movestandables_r(void)
|
|||
continue;
|
||||
}
|
||||
|
||||
else if (picnum == TRASH)
|
||||
{
|
||||
movetrash(act);
|
||||
}
|
||||
|
||||
else if (picnum >= BOLT1 && picnum <= BOLT1 + 3)
|
||||
{
|
||||
movebolt(act);
|
||||
}
|
||||
|
||||
else if (picnum == WATERDRIP)
|
||||
{
|
||||
movewaterdrip(act, WATERDRIP);
|
||||
|
|
|
@ -210,7 +210,7 @@ void initactorflags_d()
|
|||
setflag(SFLAG_HITRADIUS_FLAG2, { TRIPBOMB, QUEBALL, STRIPEBALL, DUKELYINGDEAD });
|
||||
setflag(SFLAG_CHECKSLEEP, { RUBBERCAN, EXPLODINGBARREL, WOODENHORSE, HORSEONSIDE, CANWITHSOMETHING, FIREBARREL, NUKEBARREL, NUKEBARRELDENTED, NUKEBARRELLEAKED, TRIPBOMB });
|
||||
setflag(SFLAG_NOTELEPORT, { TRANSPORTERSTAR, TRANSPORTERBEAM, TRIPBOMB, BULLETHOLE, WATERSPLASH2, BURNING, BURNING2, FIRE, FIRE2, TOILETWATER, LASERLINE });
|
||||
setflag(SFLAG_SE24_NOCARRY, { TRIPBOMB, LASERLINE, BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, SIDEBOLT1, SIDEBOLT1 + 1, SIDEBOLT1 + 2, SIDEBOLT1 + 3, CRANE, CRANE1, CRANE2, BARBROKE });
|
||||
setflag(SFLAG_SE24_NOCARRY, { TRIPBOMB, LASERLINE, BOLT1, BOLT2, BOLT3, BOLT4, SIDEBOLT1, SIDEBOLT2, SIDEBOLT3, SIDEBOLT4, CRANE, CRANE1, CRANE2, BARBROKE });
|
||||
setflag(SFLAG_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3, FOOTPRINTS4, BULLETHOLE, BLOODSPLAT1, BLOODSPLAT2, BLOODSPLAT3, BLOODSPLAT4 });
|
||||
setflag(SFLAG_BLOCK_TRIPBOMB, { TRIPBOMB }); // making this a flag adds the option to let other things block placing trip bombs as well.
|
||||
setflag(SFLAG_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4, SPEAKER, LETTER, DUCK, TARGET, TRIPBOMB, VIEWSCREEN, VIEWSCREEN2 });
|
||||
|
|
|
@ -240,7 +240,7 @@ void initactorflags_r()
|
|||
setflag(SFLAG_HITRADIUS_FLAG2, { QUEBALL, STRIPEBALL, BOWLINGPIN, DUKELYINGDEAD });
|
||||
setflag(SFLAG_CHECKSLEEP, { RUBBERCAN, EXPLODINGBARREL, WOODENHORSE, HORSEONSIDE, CANWITHSOMETHING, FIREBARREL, NUKEBARREL, NUKEBARRELDENTED, NUKEBARRELLEAKED, EGG });
|
||||
setflag(SFLAG_NOTELEPORT, { TRANSPORTERSTAR, TRANSPORTERBEAM, BULLETHOLE, WATERSPLASH2, BURNING, FIRE, MUD });
|
||||
setflag(SFLAG_SE24_NOCARRY, { BULLETHOLE, BOLT1, BOLT1 + 1,BOLT1 + 2, BOLT1 + 3, CRANE, CRANE1, CRANE2, BARBROKE });
|
||||
setflag(SFLAG_SE24_NOCARRY, { BULLETHOLE, BOLT1, BOLT2, BOLT3, BOLT4, CRANE, CRANE1, CRANE2, BARBROKE });
|
||||
setflag(SFLAG_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3 });
|
||||
setflag(SFLAG_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4 });
|
||||
setflag(SFLAG2_EXPLOSIVE, {RPG, RADIUSEXPLOSION, SEENINE, OOZFILTER });
|
||||
|
|
|
@ -32,7 +32,6 @@ void movefta();
|
|||
void clearcameras(int i, player_struct* p);
|
||||
void RANDOMSCRAP(DDukeActor* i);
|
||||
void detonate(DDukeActor* i, int explosion);
|
||||
void movetrash(DDukeActor* i);
|
||||
void movewaterdrip(DDukeActor* i, int drip);
|
||||
void movedoorshock(DDukeActor* i);
|
||||
void movetouchplate(DDukeActor* i, int plate);
|
||||
|
|
|
@ -180,6 +180,9 @@ x(BRICK, 626)
|
|||
x(SPLINTERWOOD, 630)
|
||||
x(PIPE2B, 633)
|
||||
x(BOLT1, 634)
|
||||
x(BOLT2, 635)
|
||||
x(BOLT3, 636)
|
||||
x(BOLT4, 637)
|
||||
x(W_NUMBERS, 640)
|
||||
x(WATERDRIP, 660)
|
||||
x(WATERBUBBLE, 661)
|
||||
|
@ -753,6 +756,9 @@ x(PIRATE6A, 4515)
|
|||
x(PIRATEHALF, 4516)
|
||||
x(CHESTOFGOLD, 4520)
|
||||
x(SIDEBOLT1, 4525)
|
||||
x(SIDEBOLT2, 4526)
|
||||
x(SIDEBOLT3, 4527)
|
||||
x(SIDEBOLT4, 4528)
|
||||
x(FOODOBJECT1, 4530)
|
||||
x(FOODOBJECT2, 4531)
|
||||
x(FOODOBJECT3, 4532)
|
||||
|
|
|
@ -298,6 +298,9 @@ x(PIPE3, 1123)
|
|||
x(PIPE1, 1124)
|
||||
x(PIPE2B, 1126)
|
||||
x(BOLT1, 1127)
|
||||
x(BOLT2, 1128)
|
||||
x(BOLT3, 1129)
|
||||
x(BOLT4, 1130)
|
||||
x(PIPE3B, 1132)
|
||||
x(CAMERA1, 1134)
|
||||
x(BRICK, 1139)
|
||||
|
|
|
@ -684,18 +684,6 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
|||
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
ChangeActorStat(act, STAT_STANDABLE);
|
||||
break;
|
||||
case BOLT1:
|
||||
case BOLT1 + 1:
|
||||
case BOLT1 + 2:
|
||||
case BOLT1 + 3:
|
||||
case SIDEBOLT1:
|
||||
case SIDEBOLT1 + 1:
|
||||
case SIDEBOLT1 + 2:
|
||||
case SIDEBOLT1 + 3:
|
||||
act->temp_pos.XY() = act->spr.scale;
|
||||
act->spr.yint = 0;
|
||||
ChangeActorStat(act, STAT_STANDABLE);
|
||||
break;
|
||||
case TARGET:
|
||||
case DUCK:
|
||||
case LETTER:
|
||||
|
|
|
@ -691,14 +691,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
|||
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
ChangeActorStat(act, STAT_STANDABLE);
|
||||
break;
|
||||
case BOLT1:
|
||||
case BOLT1 + 1:
|
||||
case BOLT1 + 2:
|
||||
case BOLT1 + 3:
|
||||
act->temp_pos.XY() = act->spr.scale;
|
||||
act->spr.yint = 0;
|
||||
ChangeActorStat(act, STAT_STANDABLE);
|
||||
break;
|
||||
|
||||
// this is not really nice...
|
||||
case BIKERB:
|
||||
|
|
|
@ -84,6 +84,29 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, checkcursectnums, duke_checkcursectnums)
|
|||
ACTION_RETURN_POINTER(duke_checkcursectnums(sect));
|
||||
}
|
||||
|
||||
int duke_floorflags(sectortype* sector)
|
||||
{
|
||||
return gs.tileinfo[sector->floorpicnum].flags;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, floorflags, duke_floorflags)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(sect, sectortype);
|
||||
ACTION_RETURN_INT(duke_floorflags(sect));
|
||||
}
|
||||
|
||||
int duke_global_random()
|
||||
{
|
||||
return global_random;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, global_random, duke_global_random)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
ACTION_RETURN_INT(global_random);
|
||||
}
|
||||
|
||||
DEFINE_GLOBAL_UNSIZED(dlevel)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
@ -26,5 +26,12 @@ spawnclasses
|
|||
1079 = DukeOozFilter
|
||||
1247 = DukeSeenine
|
||||
1272 = DukeTrash
|
||||
|
||||
634 = DukeBolt1
|
||||
635 = DukeBolt2
|
||||
636 = DukeBolt3
|
||||
637 = DukeBolt4
|
||||
4525 = DukeSideBolt1
|
||||
4526 = DukeSideBolt2
|
||||
4527 = DukeSideBolt3
|
||||
4528 = DukeSideBolt4
|
||||
}
|
||||
|
|
|
@ -22,5 +22,9 @@ spawnclasses
|
|||
1273 = DukeOozFilter
|
||||
1324 = DukeSeenine
|
||||
1346 = DukeTrash
|
||||
1127 = DukeBolt1
|
||||
1128 = DukeBolt2
|
||||
1129 = DukeBolt3
|
||||
1130 = DukeBolt4
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ version "4.10"
|
|||
#include "zscript/games/duke/actors/fireext.zs"
|
||||
#include "zscript/games/duke/actors/oozfilter.zs"
|
||||
#include "zscript/games/duke/actors/trash.zs"
|
||||
#include "zscript/games/duke/actors/bolt.zs"
|
||||
|
||||
#include "zscript/games/blood/bloodgame.zs"
|
||||
#include "zscript/games/blood/ui/menu.zs"
|
||||
|
|
164
wadsrc/static/zscript/games/duke/actors/bolt.zs
Normal file
164
wadsrc/static/zscript/games/duke/actors/bolt.zs
Normal file
|
@ -0,0 +1,164 @@
|
|||
class DukeBolt1 : DukeActor
|
||||
{
|
||||
default
|
||||
{
|
||||
yint 0;
|
||||
statnum STAT_STANDABLE;
|
||||
SpriteSet "BOLT1", "BOLT2", "BOLT3", "BOLT4";
|
||||
spritesetindex 0;
|
||||
}
|
||||
override void Initialize()
|
||||
{
|
||||
self.temp_pos.XY = self.scale;
|
||||
}
|
||||
|
||||
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 && (Duke.floorflags(sectp) & Duke.TFLAG_ELECTRIC))
|
||||
self.PlayActorSound(DukeSnd.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) && (Duke.floorflags(sectp) & Duke.TFLAG_ELECTRIC))
|
||||
self.PlayActorSound(DukeSnd.SHORT_CIRCUIT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class DukeSideBolt2 : DukeSideBolt1
|
||||
{
|
||||
default
|
||||
{
|
||||
spritesetindex 1;
|
||||
}
|
||||
}
|
||||
|
||||
class DukeSideBolt3 : DukeSideBolt1
|
||||
{
|
||||
default
|
||||
{
|
||||
spritesetindex 2;
|
||||
}
|
||||
}
|
||||
|
||||
class DukeSideBolt4 : DukeSideBolt1
|
||||
{
|
||||
default
|
||||
{
|
||||
spritesetindex 3;
|
||||
}
|
||||
}
|
||||
|
|
@ -68,6 +68,16 @@ struct Duke native
|
|||
CLIPMASK1 = (256 << 16) + 64
|
||||
}
|
||||
|
||||
enum ETextureFlags
|
||||
{
|
||||
TFLAG_WALLSWITCH = 1,
|
||||
TFLAG_ADULT = 2,
|
||||
TFLAG_ELECTRIC = 4,
|
||||
TFLAG_CLEARINVENTORY = 8, // really dumb Duke stuff...
|
||||
TFLAG_SLIME = 16,
|
||||
};
|
||||
|
||||
|
||||
native static void PlaySpecialMusic(int which);
|
||||
native static int PlaySound(int num, int channel = CHAN_AUTO, int flags = 0, float vol =0.8f);
|
||||
native static void StopSound(int num);
|
||||
|
@ -75,6 +85,8 @@ struct Duke native
|
|||
native static DukePlayer GetViewPlayer();
|
||||
native static int MaxAmmoAmount(int weap);
|
||||
native static DukePlayer checkcursectnums(sectortype sect);
|
||||
native static int floorflags(sectortype s);
|
||||
native static int global_random();
|
||||
|
||||
static void PlayBonusMusic()
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue