Skip to content

Commit

Permalink
- fixed Duke's destructibles.
Browse files Browse the repository at this point in the history
  • Loading branch information
coelckers committed Nov 26, 2022
1 parent 4fd6878 commit 06498b1
Show file tree
Hide file tree
Showing 9 changed files with 73 additions and 97 deletions.
15 changes: 11 additions & 4 deletions source/games/duke/src/ccmds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,17 @@ static int ccmd_spawn(CCmdFuncPtr parm)
if (isdigit((uint8_t)parm->parms[0][0])) {
picnum = (unsigned short)atol(parm->parms[0]);
}
else {
else
{
picnum = getlabelvalue(parm->parms[0]);
if (picnum < 0) {
Printf("spawn: Invalid tile label given\n");
return CCMD_OK;
if (picnum < 0)
{
picnum = TileFiles.tileForName(parm->parms[0]);
if (picnum < 0)
{
Printf("spawn: Invalid tile label given\n");
return CCMD_OK;
}
}
}

Expand All @@ -100,6 +106,7 @@ static int ccmd_spawn(CCmdFuncPtr parm)
if (set & 2) spawned->spr.cstat = ESpriteFlags::FromInt(cstat);
if (set & 4) spawned->spr.Angles.Yaw = ang;
if (set & 8) SetActor(spawned, DVector3( x, y, z ));
if (spawned->spr.scale.isZero()) spawned->spr.scale = isRR() ? DVector2(0.5, 0.5) : DVector2(1., 1.); // nake sure it's visible.

if (spawned->sector() == nullptr)
{
Expand Down
36 changes: 0 additions & 36 deletions source/games/duke/src/sectors_d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1256,28 +1256,6 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
S_PlayActorSound(GLASS_HEAVYBREAK, targ);
break;

case GRATE1:
targ->spr.picnum = BGRATE1;
targ->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
S_PlayActorSound(VENT_BUST, targ);
break;

case CIRCLEPANNEL:
targ->spr.picnum = CIRCLEPANNELBROKE;
targ->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
S_PlayActorSound(VENT_BUST, targ);
break;
case PANNEL1:
case PANNEL2:
targ->spr.picnum = BPANNEL1;
targ->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
S_PlayActorSound(VENT_BUST, targ);
break;
case PANNEL3:
targ->spr.picnum = BPANNEL3;
targ->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
S_PlayActorSound(VENT_BUST, targ);
break;
case PIPE1:
case PIPE2:
case PIPE3:
Expand Down Expand Up @@ -1336,21 +1314,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
targ->Destroy();
break;
}
case CHAIR1:
case CHAIR2:
targ->spr.picnum = BROKENCHAIR;
targ->spr.cstat = 0;
break;
case CHAIR3:
case MOVIECAMERA:
case SCALE:
case VACUUM:
case CAMERALIGHT:
case IVUNIT:
case POT1:
case POT2:
case POT3:
case TRIPODCAMERA:
S_PlayActorSound(GLASS_HEAVYBREAK, targ);
for (j = 0; j < 16; j++) RANDOMSCRAP(targ);
targ->Destroy();
Expand Down
13 changes: 0 additions & 13 deletions source/games/duke/src/sectors_r.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1631,20 +1631,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
}
break;

case CHAIR1:
case CHAIR2:
targ->spr.picnum = BROKENCHAIR;
targ->spr.cstat = 0;
break;
case CHAIR3:
case MOVIECAMERA:
case SCALE:
case VACUUM:
case CAMERALIGHT:
case IVUNIT:
case POT1:
case POT2:
case POT3:
S_PlayActorSound(GLASS_HEAVYBREAK, targ);
for (j = 0; j < 16; j++) RANDOMSCRAP(targ);
targ->Destroy();
Expand Down
15 changes: 0 additions & 15 deletions source/games/duke/src/spawn_d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -285,16 +285,10 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
break;

case HYDRENT:
case PANNEL1:
case PANNEL2:
case SATELITE:
case FUELPOD:
case SOLARPANNEL:
case ANTENNA:
case GRATE1:
case CHAIR1:
case CHAIR2:
case CHAIR3:
case BOTTLE1:
case BOTTLE2:
case BOTTLE3:
Expand All @@ -321,19 +315,10 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case INDY:
case LUKE:
case JURYGUY:
case SCALE:
case VACUUM:
case FANSPRITE:
case HANGLIGHT:
case FETUS:
case FETUSBROKE:
case CAMERALIGHT:
case MOVIECAMERA:
case IVUNIT:
case POT1:
case POT2:
case POT3:
case TRIPODCAMERA:
case SUSHIPLATE1:
case SUSHIPLATE2:
case SUSHIPLATE3:
Expand Down
11 changes: 0 additions & 11 deletions source/games/duke/src/spawn_r.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,9 +232,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case SOLARPANNEL:
case ANTENNA:
case GRATE1:
case CHAIR1:
case CHAIR2:
case CHAIR3:
case BOTTLE1:
case BOTTLE2:
case BOTTLE3:
Expand All @@ -253,15 +250,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case BOTTLE17:
case BOTTLE18:
case BOTTLE19:
case SCALE:
case VACUUM:
case FANSPRITE:
case CAMERALIGHT:
case MOVIECAMERA:
case IVUNIT:
case POT1:
case POT2:
case POT3:
case SUSHIPLATE1:
case SUSHIPLATE2:
case SUSHIPLATE3:
Expand Down
4 changes: 2 additions & 2 deletions source/games/duke/src/vmexports.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1137,8 +1137,8 @@ DEFINE_ACTION_FUNCTION(DDukeGenericDestructible, SetBroken)
PARAM_SELF_STRUCT_PROLOGUE(DDukeActor);
PARAM_INT(bust);
int tilenum = self->IntVar(bust ? NAME_brokenstate : NAME_spawnstate);
if (tilenum > 0) self->spr.picnum = tilenum;
ACTION_RETURN_BOOL(tilenum > 0);
if (tilenum >= 0) self->spr.picnum = tilenum;
ACTION_RETURN_BOOL(tilenum < 0);
}


Expand Down
31 changes: 15 additions & 16 deletions wadsrc/static/filter/dukelike/engine/engine.def
Original file line number Diff line number Diff line change
Expand Up @@ -77,24 +77,23 @@ spawnclasses
1528 = DukePlayerGun
1536 = DukePlayerLeg

595 = DukeGenericUnblockingDestructible, "GRATE1", "BGRATE1", "VENT_BUST"
595 = DukeGenericSolidUnblockingDestructible, "GRATE1", "BGRATE1", "VENT_BUST"
1113 = DukeGenericUnblockingDestructible, "CIRCLEPANNEL", "CIRCLEPANNELBROKE", "VENT_BUST"
341 = DukeGenericUnblockingDestructible, "PANNEL1", "BPANNEL1", "VENT_BUST"
342 = DukeGenericUnblockingDestructible, "PANNEL2", "BPANNEL3", "VENT_BUST"
343 = DukeGenericUnblockingDestructible, "PANNEL3", "BPANNEL3", "VENT_BUST"
556 = DukeGenericUnblockingDestructible, "CHAIR1", "BROKENCHAIR", "VENT_BUST"
557 = DukeGenericUnblockingDestructible, "CHAIR2", "BROKENCHAIR", "VENT_BUST"
342 = DukeGenericSolidUnblockingDestructible, "PANNEL1", "BPANNEL1", "VENT_BUST"
343 = DukeGenericSolidUnblockingDestructible, "PANNEL2", "BPANNEL3", "VENT_BUST"
4099 = DukeGenericUnblockingDestructible, "PANNEL3", "BPANNEL3", "VENT_BUST"
556 = DukeGenericSolidUnblockingDestructible, "CHAIR1", "BROKENCHAIR"
557 = DukeGenericSolidUnblockingDestructible, "CHAIR2", "BROKENCHAIR"

680 = DukeGenericScrapSpawningDestructible, "*CHAIR3", "", "GLASS_HEAVYBREAK"
686 = DukeGenericScrapSpawningDestructible, "*MOVIECAMERA", "", "GLASS_HEAVYBREAK"
678 = DukeGenericScrapSpawningDestructible, "*SCALE", "", "GLASS_HEAVYBREAK"
685 = DukeGenericScrapSpawningDestructible, "*CAMERALIGHT", "", "GLASS_HEAVYBREAK"
689 = DukeGenericScrapSpawningDestructible, "*IVUNIT", "", "GLASS_HEAVYBREAK"
694 = DukeGenericScrapSpawningDestructible, "*POT1", "", "GLASS_HEAVYBREAK"
695 = DukeGenericScrapSpawningDestructible, "*POT2", "", "GLASS_HEAVYBREAK"
697 = DukeGenericScrapSpawningDestructible, "*POT3", "", "GLASS_HEAVYBREAK"
4444 = DukeGenericScrapSpawningDestructible, "*TRIPODCAMERA", "", "GLASS_HEAVYBREAK"
669 = DukeGenericScrapSpawningDestructible, "*VACUUM", "", "GLASS_HEAVYBREAK"
686 = DukeGenericSolidScrapSpawningDestructible, "MOVIECAMERA", "", "GLASS_HEAVYBREAK"
678 = DukeGenericSolidScrapSpawningDestructible, "SCALE", "", "GLASS_HEAVYBREAK"
685 = DukeGenericSolidScrapSpawningDestructible, "CAMERALIGHT", "", "GLASS_HEAVYBREAK"
689 = DukeGenericSolidScrapSpawningDestructible, "IVUNIT", "", "GLASS_HEAVYBREAK"
694 = DukeGenericSolidScrapSpawningDestructible, "POT1", "", "GLASS_HEAVYBREAK"
695 = DukeGenericSolidScrapSpawningDestructible, "POT2", "", "GLASS_HEAVYBREAK"
697 = DukeGenericSolidScrapSpawningDestructible, "POT3", "", "GLASS_HEAVYBREAK"
4444 = DukeGenericSolidScrapSpawningDestructible, "TRIPODCAMERA", "", "GLASS_HEAVYBREAK"
669 = DukeGenericSolidScrapSpawningDestructible, "*VACUUM", "", "GLASS_HEAVYBREAK"
}

tileflag TFLAG_WALLSWITCH {
Expand Down
14 changes: 14 additions & 0 deletions wadsrc/static/filter/redneck/engine/engine.def
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,20 @@ spawnclasses
2160 = DukeGenericGlassSpawningDestructible, "*RRTILE2160", "*RRTILE2161", "GLASS_BREAKING"
2175 = DukeGenericGlassSpawningDestructible, "*RRTILE2175", "*RRTILE2176", "GLASS_BREAKING"

234 = DukeGenericSolidUnblockingDestructible, "GRATE1", "BGRATE1", "VENT_BUST"
2251 = DukeGenericUnblockingDestructible, "CIRCLEPANNEL", "CIRCLEPANNELBROKE", "VENT_BUST"
343 = DukeGenericSolidUnblockingDestructible, "PANNEL2", "BPANNEL3", "VENT_BUST"
1085 = DukeGenericSolidUnblockingDestructible, "CHAIR1", "BROKENCHAIR"
1086 = DukeGenericSolidUnblockingDestructible, "CHAIR2", "BROKENCHAIR"
1158 = DukeGenericSolidScrapSpawningDestructible, "MOVIECAMERA", "", "GLASS_HEAVYBREAK"
1150 = DukeGenericSolidScrapSpawningDestructible, "SCALE", "", "GLASS_HEAVYBREAK"
1157 = DukeGenericScrapSpawningDestructible, "CAMERALIGHT", "", "GLASS_HEAVYBREAK"
1163 = DukeGenericSolidScrapSpawningDestructible, "IVUNIT", "", "GLASS_HEAVYBREAK"
1164 = DukeGenericSolidScrapSpawningDestructible, "POT1", "", "GLASS_HEAVYBREAK"
1165 = DukeGenericSolidScrapSpawningDestructible, "POT2", "", "GLASS_HEAVYBREAK"
1166 = DukeGenericSolidScrapSpawningDestructible, "POT3", "", "GLASS_HEAVYBREAK"
1141 = DukeGenericSolidScrapSpawningDestructible, "VACUUM", "", "GLASS_HEAVYBREAK"

}


Expand Down
31 changes: 31 additions & 0 deletions wadsrc/static/zscript/games/duke/actors/genericdestructible.zs
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,34 @@ class DukeGenericUnblockingDestructible : DukeGenericDestructible
return false;
}
}

class DukeGenericSolidScrapSpawningDestructible : DukeGenericDestructible
{
override void Initialize()
{
self.SetBroken(false);
self.cstat |= CSTAT_SPRITE_BLOCK_ALL;
}

override bool DestroyAction()
{
for(int i = 0; i < 16; i++) self.RandomScrap();
self.Destroy();
return false;
}
}

class DukeGenericSolidUnblockingDestructible : DukeGenericDestructible
{
override void Initialize()
{
self.SetBroken(false);
self.cstat |= CSTAT_SPRITE_BLOCK_ALL;
}

override bool DestroyAction()
{
self.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
return false;
}
}

0 comments on commit 06498b1

Please sign in to comment.