diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 1b6e2335c..b7d2285c1 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -714,30 +714,6 @@ static void shootrpg(DDukeActor *actor, int p, DVector3 pos, DAngle ang, int atw // //--------------------------------------------------------------------------- -static void shootmortar(DDukeActor* actor, int p, const DVector3& pos, DAngle ang, int atwith) -{ - auto sect = actor->sector(); - if (actor->spr.extra >= 0) actor->spr.shade = -96; - - double x; - auto plActor = ps[findplayer(actor, &x)].GetActor(); - x = (plActor->spr.pos.XY() - actor->spr.pos.XY()).Length(); - - double zvel = -x * 0.5; - - if (zvel < -8) - zvel = -4; - double vel = x / 16.; - - CreateActor(sect, pos.plusZ(-6) + ang.ToVector() * 4, atwith, -64, DVector2(0.5, 0.5), ang, vel, zvel, actor, 1); -} - -//--------------------------------------------------------------------------- -// -// -// -//--------------------------------------------------------------------------- - void shoot_d(DDukeActor* actor, int atwith, PClass *cls) { int p; @@ -812,11 +788,6 @@ void shoot_d(DDukeActor* actor, int atwith, PClass *cls) case DTILE_RPG: shootrpg(actor, p, spos, sang, atwith); break; - - case DTILE_BOUNCEMINE: - case DTILE_MORTER: - shootmortar(actor, p, spos, sang, atwith); - return; } return; } diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 3f2c3e5ae..6595c2f42 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -735,31 +735,6 @@ static void shootwhip(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int at // //--------------------------------------------------------------------------- -static void shootmortar(DDukeActor* actor, int p, const DVector3& pos, DAngle ang, int atwith) -{ - auto sect = actor->sector(); - if (actor->spr.extra >= 0) actor->spr.shade = -96; - - double x; - auto plActor = ps[findplayer(actor, &x)].GetActor(); - x = (plActor->spr.pos.XY() - actor->spr.pos.XY()).Length(); - - double zvel = -x * 0.5; - - if (zvel < -8) - zvel = -4; - double vel = x / 16.; - double size = atwith == RTILE_CHEERBOMB ? 0.25 : 0.5; - - CreateActor(sect, pos.plusZ(-6) + ang.ToVector() * 4, atwith, -64, DVector2(size, size), ang, vel, zvel, actor, 1); -} - -//--------------------------------------------------------------------------- -// -// -// -//--------------------------------------------------------------------------- - void shoot_r(DDukeActor* actor, int atwith, PClass* cls) { int p; @@ -832,12 +807,6 @@ void shoot_r(DDukeActor* actor, int atwith, PClass* cls) rrra_rpg2: shootrpg(actor, p, spos, sang, atwith); break; - - case RTILE_CHEERBOMB: - if (!isRRRA()) break; - case RTILE_MORTER: - shootmortar(actor, p, spos, sang, atwith); - break; } return; } diff --git a/wadsrc/static/zscript/games/duke/actors/mortar.zs b/wadsrc/static/zscript/games/duke/actors/mortar.zs index f5a1b10d4..3a2d1d326 100644 --- a/wadsrc/static/zscript/games/duke/actors/mortar.zs +++ b/wadsrc/static/zscript/games/duke/actors/mortar.zs @@ -2,13 +2,37 @@ class DukeMortar : DukeActor { default { - pic "MORTAR"; + pic "MORTER"; DukeMortar.ceilingdist 3; + DukeMortar.spawnscale 0.5; } meta int ceilingdist; + meta double spawnscale; property ceilingdist: ceilingdist; + property spawnscale: spawnscale; + + override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const + { + let sect = actor.sector; + if (actor.extra >= 0) actor.shade = -96; + + double x; + DukePlayer p; + [p, x] = actor.findplayer(); + let plActor = p.Actor; + x = (plActor.pos.XY - actor.pos.XY).Length(); + + double zvel = -x * 0.5; + + if (zvel < -8) + zvel = -4; + double vel = x / 16.; + dlevel.SpawnActor(sect, pos.plusZ(-6) + ang.ToVector() * 4, GetClass(), -64, (self.spawnscale, self.spawnscale), ang, vel, zvel, actor, STAT_ACTOR); + return true; + } + override void Tick() { let spawned = self.spawn("DukeFrameEffect"); @@ -186,7 +210,6 @@ class RedneckMortar : DukeMortar { default { - pic "MORTAR"; DukeMortar.ceilingdist 16; } @@ -204,6 +227,7 @@ class RedneckCheerBomb : DukeMortar spriteset "CHEERBOMB", "CHEERBOMB1", "CHEERBOMB2", "CHEERBOMB3"; DukeMortar.ceilingdist 16; +NOFLOORPAL; + DukeMortar.spawnscale 0.25; } override bool Animate(tspritetype t)