diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index a04b3ca07..38c298a08 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1053,13 +1053,7 @@ static void weaponcommon_d(DDukeActor* proj) // j is only needed for the hit type mask. rpgexplode(proj, coll.type, oldpos, EXPLOSION2, EXPLOSION2BOT, -1, RPG_EXPLODE); } - else if (proj->spr.picnum == SHRINKSPARK) - { - spawn(proj, SHRINKEREXPLOSION); - S_PlayActorSound(SHRINKER_HIT, proj); - fi.hitradius(proj, gs.shrinkerblastradius, 0, 0, 0, 0); - } - else if (proj->spr.picnum != COOLEXPLOSION1 && proj->spr.picnum != FREEZEBLAST && (!isWorldTour() || proj->spr.picnum != FIREBALL)) + if (proj->spr.picnum != COOLEXPLOSION1 && proj->spr.picnum != FREEZEBLAST && (!isWorldTour() || proj->spr.picnum != FIREBALL)) { auto spawned = spawn(proj, EXPLOSION2); if (spawned) @@ -1147,7 +1141,6 @@ void moveweapons_d(void) // Twentieth Anniversary World Tour if (act->spr.picnum == FIREBALL && !isWorldTour()) break; [[fallthrough]]; - case SHRINKSPARK: case RPG: case SPIT: case COOLEXPLOSION1: diff --git a/source/games/duke/src/animatesprites_d.cpp b/source/games/duke/src/animatesprites_d.cpp index 0b8048585..417b266a5 100644 --- a/source/games/duke/src/animatesprites_d.cpp +++ b/source/games/duke/src/animatesprites_d.cpp @@ -221,9 +221,6 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi case CRYSTALAMMO: t->shade = int(BobVal(PlayClock << 4) * 16); continue; - case SHRINKSPARK: - t->picnum = SHRINKSPARK + ((PlayClock >> 4) & 3); - break; case GROWSPARK: t->picnum = GROWSPARK + ((PlayClock >> 4) & 3); break; @@ -519,7 +516,6 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi case EXPLOSION2BOT: case FREEZEBLAST: case ATOMICHEALTH: - case SHRINKSPARK: case GROWSPARK: case CHAINGUN: case SHRINKEREXPLOSION: diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 1405348cb..4d74cc3be 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -1029,7 +1029,7 @@ static void shootshrinker(DDukeActor* actor, int p, const DVector3& pos, DAngle else zvel = 0; auto spawned = CreateActor(actor->sector(), - pos.plusZ(2) + ang.ToVector() * 0.25, SHRINKSPARK, -16, DVector2(0.4375, 0.4375), ang, vel, zvel, actor, 4); + pos.plusZ(2) + ang.ToVector() * 0.25, PClass::FindActor("DukeShrinkSpark"), -16, DVector2(0.4375, 0.4375), ang, vel, zvel, actor, 4); if (spawned) { diff --git a/wadsrc/static/filter/dukelike/engine/engine.def b/wadsrc/static/filter/dukelike/engine/engine.def index 5726b9efa..66955abe1 100644 --- a/wadsrc/static/filter/dukelike/engine/engine.def +++ b/wadsrc/static/filter/dukelike/engine/engine.def @@ -56,6 +56,7 @@ spawnclasses 2298 = DukeBloodSplat3 2299 = DukeBloodSplat4 1625 = DukeFireLaser + 1646 = DukeShrinkSpark 1272 = DukeTrash 634 = DukeBolt1 diff --git a/wadsrc/static/zscript/games/duke/actors/projectiles.zs b/wadsrc/static/zscript/games/duke/actors/projectiles.zs index 920b1b262..470f13bda 100644 --- a/wadsrc/static/zscript/games/duke/actors/projectiles.zs +++ b/wadsrc/static/zscript/games/duke/actors/projectiles.zs @@ -224,3 +224,34 @@ class DukeFirelaserTrail : DukeActor } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +class DukeShrinkSpark : DukeProjectile +{ + default + { + spriteset "SHRINKSPARK", "SHRINKSPARK1", "SHRINKSPARK2", "SHRINKSPARK3"; + } + + override void posthiteffect(CollisionData coll) + { + self.spawn('DukeShrinkerExplosion'); + self.PlayActorSound("SHRINKER_HIT"); + self.hitradius(gs.shrinkerblastradius, 0, 0, 0, 0); + self.Destroy(); + } + + override bool animate(tspritetype tspr) + { + tspr.setSpritePic(self, (PlayClock >> 4) & 3); + tspr.shade = -127; + return true; + } + +} + +