mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-21 11:01:01 +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]);
|
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[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())
|
if (PicName.IsNotEmpty())
|
||||||
{
|
{
|
||||||
defaults->spr.picnum = TileFiles.tileForName(PicName);
|
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);
|
PROP_INT_PARM(i, 0);
|
||||||
defaults->spr.xint = i;
|
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);
|
PROP_INT_PARM(i, 0);
|
||||||
defaults->spr.yint = i;
|
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);
|
PROP_INT_PARM(i, 0);
|
||||||
defaults->spr.inittype = i;
|
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
|
// this has been broken up into lots of smaller subfunctions
|
||||||
|
@ -950,16 +849,6 @@ void movestandables_d(void)
|
||||||
moveviewscreen(act);
|
moveviewscreen(act);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (picnum >= SIDEBOLT1 && picnum <= SIDEBOLT1 + 3)
|
|
||||||
{
|
|
||||||
movesidebolt(act);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (picnum >= BOLT1 && picnum <= BOLT1 + 3)
|
|
||||||
{
|
|
||||||
movebolt(act);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (picnum == WATERDRIP)
|
else if (picnum == WATERDRIP)
|
||||||
{
|
{
|
||||||
movewaterdrip(act, 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
|
// this has been broken up into lots of smaller subfunctions
|
||||||
|
@ -793,16 +732,6 @@ void movestandables_r(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (picnum == TRASH)
|
|
||||||
{
|
|
||||||
movetrash(act);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (picnum >= BOLT1 && picnum <= BOLT1 + 3)
|
|
||||||
{
|
|
||||||
movebolt(act);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (picnum == WATERDRIP)
|
else if (picnum == WATERDRIP)
|
||||||
{
|
{
|
||||||
movewaterdrip(act, WATERDRIP);
|
movewaterdrip(act, WATERDRIP);
|
||||||
|
|
|
@ -210,7 +210,7 @@ void initactorflags_d()
|
||||||
setflag(SFLAG_HITRADIUS_FLAG2, { TRIPBOMB, QUEBALL, STRIPEBALL, DUKELYINGDEAD });
|
setflag(SFLAG_HITRADIUS_FLAG2, { TRIPBOMB, QUEBALL, STRIPEBALL, DUKELYINGDEAD });
|
||||||
setflag(SFLAG_CHECKSLEEP, { RUBBERCAN, EXPLODINGBARREL, WOODENHORSE, HORSEONSIDE, CANWITHSOMETHING, FIREBARREL, NUKEBARREL, NUKEBARRELDENTED, NUKEBARRELLEAKED, TRIPBOMB });
|
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_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_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_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 });
|
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_HITRADIUS_FLAG2, { QUEBALL, STRIPEBALL, BOWLINGPIN, DUKELYINGDEAD });
|
||||||
setflag(SFLAG_CHECKSLEEP, { RUBBERCAN, EXPLODINGBARREL, WOODENHORSE, HORSEONSIDE, CANWITHSOMETHING, FIREBARREL, NUKEBARREL, NUKEBARRELDENTED, NUKEBARRELLEAKED, EGG });
|
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_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_SE24_REMOVE, { BLOODPOOL, PUKE, FOOTPRINTS, FOOTPRINTS2, FOOTPRINTS3 });
|
||||||
setflag(SFLAG_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4 });
|
setflag(SFLAG_NOFALLER, { CRACK1, CRACK2, CRACK3, CRACK4 });
|
||||||
setflag(SFLAG2_EXPLOSIVE, {RPG, RADIUSEXPLOSION, SEENINE, OOZFILTER });
|
setflag(SFLAG2_EXPLOSIVE, {RPG, RADIUSEXPLOSION, SEENINE, OOZFILTER });
|
||||||
|
|
|
@ -32,7 +32,6 @@ void movefta();
|
||||||
void clearcameras(int i, player_struct* p);
|
void clearcameras(int i, player_struct* p);
|
||||||
void RANDOMSCRAP(DDukeActor* i);
|
void RANDOMSCRAP(DDukeActor* i);
|
||||||
void detonate(DDukeActor* i, int explosion);
|
void detonate(DDukeActor* i, int explosion);
|
||||||
void movetrash(DDukeActor* i);
|
|
||||||
void movewaterdrip(DDukeActor* i, int drip);
|
void movewaterdrip(DDukeActor* i, int drip);
|
||||||
void movedoorshock(DDukeActor* i);
|
void movedoorshock(DDukeActor* i);
|
||||||
void movetouchplate(DDukeActor* i, int plate);
|
void movetouchplate(DDukeActor* i, int plate);
|
||||||
|
|
|
@ -180,6 +180,9 @@ x(BRICK, 626)
|
||||||
x(SPLINTERWOOD, 630)
|
x(SPLINTERWOOD, 630)
|
||||||
x(PIPE2B, 633)
|
x(PIPE2B, 633)
|
||||||
x(BOLT1, 634)
|
x(BOLT1, 634)
|
||||||
|
x(BOLT2, 635)
|
||||||
|
x(BOLT3, 636)
|
||||||
|
x(BOLT4, 637)
|
||||||
x(W_NUMBERS, 640)
|
x(W_NUMBERS, 640)
|
||||||
x(WATERDRIP, 660)
|
x(WATERDRIP, 660)
|
||||||
x(WATERBUBBLE, 661)
|
x(WATERBUBBLE, 661)
|
||||||
|
@ -753,6 +756,9 @@ x(PIRATE6A, 4515)
|
||||||
x(PIRATEHALF, 4516)
|
x(PIRATEHALF, 4516)
|
||||||
x(CHESTOFGOLD, 4520)
|
x(CHESTOFGOLD, 4520)
|
||||||
x(SIDEBOLT1, 4525)
|
x(SIDEBOLT1, 4525)
|
||||||
|
x(SIDEBOLT2, 4526)
|
||||||
|
x(SIDEBOLT3, 4527)
|
||||||
|
x(SIDEBOLT4, 4528)
|
||||||
x(FOODOBJECT1, 4530)
|
x(FOODOBJECT1, 4530)
|
||||||
x(FOODOBJECT2, 4531)
|
x(FOODOBJECT2, 4531)
|
||||||
x(FOODOBJECT3, 4532)
|
x(FOODOBJECT3, 4532)
|
||||||
|
|
|
@ -298,6 +298,9 @@ x(PIPE3, 1123)
|
||||||
x(PIPE1, 1124)
|
x(PIPE1, 1124)
|
||||||
x(PIPE2B, 1126)
|
x(PIPE2B, 1126)
|
||||||
x(BOLT1, 1127)
|
x(BOLT1, 1127)
|
||||||
|
x(BOLT2, 1128)
|
||||||
|
x(BOLT3, 1129)
|
||||||
|
x(BOLT4, 1130)
|
||||||
x(PIPE3B, 1132)
|
x(PIPE3B, 1132)
|
||||||
x(CAMERA1, 1134)
|
x(CAMERA1, 1134)
|
||||||
x(BRICK, 1139)
|
x(BRICK, 1139)
|
||||||
|
|
|
@ -684,18 +684,6 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
||||||
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||||
ChangeActorStat(act, STAT_STANDABLE);
|
ChangeActorStat(act, STAT_STANDABLE);
|
||||||
break;
|
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 TARGET:
|
||||||
case DUCK:
|
case DUCK:
|
||||||
case LETTER:
|
case LETTER:
|
||||||
|
|
|
@ -691,14 +691,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
||||||
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||||
ChangeActorStat(act, STAT_STANDABLE);
|
ChangeActorStat(act, STAT_STANDABLE);
|
||||||
break;
|
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...
|
// this is not really nice...
|
||||||
case BIKERB:
|
case BIKERB:
|
||||||
|
|
|
@ -84,6 +84,29 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, checkcursectnums, duke_checkcursectnums)
|
||||||
ACTION_RETURN_POINTER(duke_checkcursectnums(sect));
|
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)
|
DEFINE_GLOBAL_UNSIZED(dlevel)
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
|
@ -26,5 +26,12 @@ spawnclasses
|
||||||
1079 = DukeOozFilter
|
1079 = DukeOozFilter
|
||||||
1247 = DukeSeenine
|
1247 = DukeSeenine
|
||||||
1272 = DukeTrash
|
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
|
1273 = DukeOozFilter
|
||||||
1324 = DukeSeenine
|
1324 = DukeSeenine
|
||||||
1346 = DukeTrash
|
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/fireext.zs"
|
||||||
#include "zscript/games/duke/actors/oozfilter.zs"
|
#include "zscript/games/duke/actors/oozfilter.zs"
|
||||||
#include "zscript/games/duke/actors/trash.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/bloodgame.zs"
|
||||||
#include "zscript/games/blood/ui/menu.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
|
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 void PlaySpecialMusic(int which);
|
||||||
native static int PlaySound(int num, int channel = CHAN_AUTO, int flags = 0, float vol =0.8f);
|
native static int PlaySound(int num, int channel = CHAN_AUTO, int flags = 0, float vol =0.8f);
|
||||||
native static void StopSound(int num);
|
native static void StopSound(int num);
|
||||||
|
@ -75,6 +85,8 @@ struct Duke native
|
||||||
native static DukePlayer GetViewPlayer();
|
native static DukePlayer GetViewPlayer();
|
||||||
native static int MaxAmmoAmount(int weap);
|
native static int MaxAmmoAmount(int weap);
|
||||||
native static DukePlayer checkcursectnums(sectortype sect);
|
native static DukePlayer checkcursectnums(sectortype sect);
|
||||||
|
native static int floorflags(sectortype s);
|
||||||
|
native static int global_random();
|
||||||
|
|
||||||
static void PlayBonusMusic()
|
static void PlayBonusMusic()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue