diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 627be78e3..e7ce0e543 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -818,26 +818,6 @@ static bool weaponhitsprite(DDukeActor* proj, DDukeActor *targ, bool fireball) S_PlayActorSound(PISTOL_BODYHIT, targ); - if (proj->spr.picnum == SPIT) - { - ps[p].Angles.addPitch(DAngle::fromDeg(-14.04)); - ps[p].sync.actions |= SB_CENTERVIEW; - - if (ps[p].loogcnt == 0) - { - if (!S_CheckActorSoundPlaying(ps[p].GetActor(), DUKE_LONGTERM_PAIN)) - S_PlayActorSound(DUKE_LONGTERM_PAIN, ps[p].GetActor()); - - int j = 3 + (krand() & 3); - ps[p].numloogs = j; - ps[p].loogcnt = 24 * 4; - for (int x = 0; x < j; x++) - { - ps[p].loogie[x].X = krand() % 320; - ps[p].loogie[x].Y = krand() % 200; - } - } - } } return false; } @@ -935,10 +915,6 @@ static void weaponcommon_d(DDukeActor* proj) movesprite_ex(proj, DVector3(proj->spr.Angles.Yaw.ToVector() * vel, velz), CLIPMASK1, coll); - if (proj->spr.picnum == RPG && proj->temp_actor != nullptr) - if ((proj->spr.pos.XY() - proj->temp_actor->spr.pos.XY()).Length() < 16) - coll.setSprite(proj->temp_actor); - if (!proj->insector()) { proj->Destroy(); @@ -962,9 +938,6 @@ static void weaponcommon_d(DDukeActor* proj) } } - if (proj->spr.picnum == SPIT) if (proj->vel.Z < 24) - proj->vel.Z += gs.gravity - 112 / 256.; - if (coll.type != 0) { if (proj->spr.picnum == COOLEXPLOSION1) diff --git a/wadsrc/static/filter/dukelike/engine/engine.def b/wadsrc/static/filter/dukelike/engine/engine.def index 5fba488d9..47b821914 100644 --- a/wadsrc/static/filter/dukelike/engine/engine.def +++ b/wadsrc/static/filter/dukelike/engine/engine.def @@ -59,6 +59,7 @@ spawnclasses 1646 = DukeShrinkSpark 2605 = DukeRPG 1641 = DukeFreezeBlast + 1636 = DukeSpit 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 4e13e325a..700c96f77 100644 --- a/wadsrc/static/zscript/games/duke/actors/projectiles.zs +++ b/wadsrc/static/zscript/games/duke/actors/projectiles.zs @@ -455,3 +455,51 @@ class DukeFreezeBlast : DukeProjectile } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +class DukeSpit : DukeProjectile +{ + default + { + pic "SPIT"; + } + + override bool postmoveeffect(CollisionData coll) + { + Super.postmoveeffect(coll); + if (self.vel.Z < 24) + self.vel.Z += gs.gravity - 112 / 256.; + return false; + } + + override bool weaponhitplayer(DukeActor targ) + { + if (Super.weaponhitplayer(targ)) return true; + + let p = targ.GetPlayer(); + + p.addPitch(-14.04); + p.centerview(); + + if (p.loogcnt == 0) + { + if (!p.actor.CheckSoundPlaying("PLAYER_LONGTERM_PAIN")) + p.actor.PlayActorSound("PLAYER_LONGTERM_PAIN"); + + int j = random(3, 7); + p.numloogs = j; + p.loogcnt = 24 * 4; + for (int x = 0; x < j; x++) + { + p.loogie[x].X = random(0, 319); + p.loogie[x].Y = random(0, 199); + } + } + return false; + } +} +