From 18a445aee5bf6ea195145ddf65c32b0ca1e40db4 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 23 Aug 2022 21:25:05 +0200 Subject: [PATCH] - added ZeroVelocity function to DBloodActor. --- source/games/blood/src/actor.cpp | 10 ++++------ source/games/blood/src/aiunicult.cpp | 2 +- source/games/blood/src/bloodactor.h | 5 +++++ source/games/blood/src/callback.cpp | 6 +++--- source/games/blood/src/nnexts.cpp | 8 ++++---- source/games/blood/src/player.cpp | 2 +- source/games/blood/src/triggers.cpp | 2 +- source/games/duke/src/player_r.cpp | 12 ++++-------- 8 files changed, 23 insertions(+), 24 deletions(-) diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index 2a3611cf4..c012f95e8 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -2387,7 +2387,7 @@ static void actInitThings() act->spr.flags = thingInfo[nType].flags; if (act->spr.flags & kPhysGravity) act->spr.flags |= kPhysFalling; - act->vel.X = act->vel.Y = act->vel.Z = 0; + act->ZeroVelocity(); switch (act->spr.type) { @@ -2489,7 +2489,7 @@ static void actInitDudes() act->spr.cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_ALL; #endif - act->vel.X = act->vel.Y = act->vel.Z = 0; + act->ZeroVelocity(); #ifdef NOONE_EXTENSIONS // add a way to set custom hp for every enemy - should work only if map just started and not loaded. @@ -2718,9 +2718,7 @@ static void actNapalmMove(DBloodActor* actor) spawnparam[0] = actor->xspr.data4 >> 1; spawnparam[1] = actor->xspr.data4 - spawnparam[0]; int ang = actor->int_ang(); - actor->vel.X = 0; - actor->vel.Y = 0; - actor->vel.Z = 0; + actor->ZeroVelocity(); for (int i = 0; i < 2; i++) { int t1 = Random(0x33333) + 0x33333; @@ -5493,7 +5491,7 @@ void actExplodeSprite(DBloodActor* actor) GibSprite(actor, GIBTYPE_5, nullptr, nullptr); break; } - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); actPostSprite(actor, kStatExplosion); actor->spr.xrepeat = actor->spr.yrepeat = explodeInfo[nType].repeat; diff --git a/source/games/blood/src/aiunicult.cpp b/source/games/blood/src/aiunicult.cpp index 0232ba841..d6f0d1761 100644 --- a/source/games/blood/src/aiunicult.cpp +++ b/source/games/blood/src/aiunicult.cpp @@ -728,7 +728,7 @@ static void unicultThinkChase(DBloodActor* actor) const EXPLOSION* pExpl = &explodeInfo[nType]; if (CheckProximity(actor, target->spr.pos, target->sector(), pExpl->radius >> 1)) { - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); if (doExplosion(actor, nType) && actor->xspr.health > 0) actDamageSprite(actor, actor, kDamageExplode, 65535); } diff --git a/source/games/blood/src/bloodactor.h b/source/games/blood/src/bloodactor.h index 1a4f4cc9c..7b58ef680 100644 --- a/source/games/blood/src/bloodactor.h +++ b/source/games/blood/src/bloodactor.h @@ -118,6 +118,11 @@ public: { return spr.type >= kItemAmmoBase && spr.type < kItemAmmoMax; } + + void ZeroVelocity() + { + vel = { 0,0,0 }; + } bool isActive() { diff --git a/source/games/blood/src/callback.cpp b/source/games/blood/src/callback.cpp index a2778d0ca..e502f38ca 100644 --- a/source/games/blood/src/callback.cpp +++ b/source/games/blood/src/callback.cpp @@ -291,7 +291,7 @@ void Respawn(DBloodActor* actor, sectortype*) // 9 actor->spr.type = actor->spr.inittype; actor->SetOwner(nullptr); actor->spr.flags &= ~kHitagRespawn; - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); actor->xspr.respawnPending = 0; actor->xspr.burnTime = 0; actor->xspr.isTriggered = 0; @@ -556,7 +556,7 @@ void fxBouncingSleeve(DBloodActor* actor, sectortype*) // 16 void sleeveStopBouncing(DBloodActor* actor) { - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); if (actor->hasX()) seqKill(actor); sfxKill3DSound(actor, -1, -1); @@ -712,7 +712,7 @@ void sub_76A08(DBloodActor* actor, DBloodActor* actor2, PLAYER* pPlayer) // ??? actor->spr.angle = actor2->spr.angle; ChangeActorSect(actor, actor2->sector()); sfxPlay3DSound(actor2, 201, -1, 0); - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); viewBackupSpriteLoc(actor); if (pPlayer) { diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index a51ee9291..e830e88de 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -2651,7 +2651,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe else flags &= ~(kPhysGravity | kPhysFalling); targetactor->spr.flags &= ~(kPhysMove | kPhysGravity | kPhysFalling); - targetactor->vel.X = targetactor->vel.Y = targetactor->vel.Z = 0; + targetactor->ZeroVelocity(); targetactor->xspr.restState = targetactor->xspr.state; } @@ -2764,7 +2764,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe { if (oldFlags == 0) - targetactor->vel.X = targetactor->vel.Y = targetactor->vel.Z = 0; + targetactor->ZeroVelocity(); if (nIndex != -1) { @@ -2800,7 +2800,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe { targetactor->xspr.physAttr = flags; - targetactor->vel.X = targetactor->vel.Y = targetactor->vel.Z = 0; + targetactor->ZeroVelocity(); if (targetactor->spr.lotag >= kThingBase && targetactor->spr.lotag < kThingMax) ChangeActorStat(targetactor, kStatThing); // if it was a thing - restore statnum } @@ -3279,7 +3279,7 @@ void useTeleportTarget(DBloodActor* sourceactor, DBloodActor* actor) if (sourceactor->xspr.data3 == 1) { - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); } else if (sourceactor->xspr.data3 > 0) { diff --git a/source/games/blood/src/player.cpp b/source/games/blood/src/player.cpp index 7c0d2a261..ee9b146e3 100644 --- a/source/games/blood/src/player.cpp +++ b/source/games/blood/src/player.cpp @@ -855,7 +855,7 @@ void playerStart(int nPlayer, int bNewLevel) pPlayer->throwPower = 0; pPlayer->deathTime = 0; pPlayer->nextWeapon = kWeapNone; - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); pInput->avel = 0; pInput->actions = 0; pInput->fvel = 0; diff --git a/source/games/blood/src/triggers.cpp b/source/games/blood/src/triggers.cpp index a37326152..a6151e009 100644 --- a/source/games/blood/src/triggers.cpp +++ b/source/games/blood/src/triggers.cpp @@ -1639,7 +1639,7 @@ void OperateTeleport(sectortype* pSector) actor->spr.angle = destactor->spr.angle; ChangeActorSect(actor, destactor->sector()); sfxPlay3DSound(destactor, 201, -1, 0); - actor->vel.X = actor->vel.Y = actor->vel.Z = 0; + actor->ZeroVelocity(); actor->interpolated = false; viewBackupSpriteLoc(actor); if (pPlayer) diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 053856721..08f40ffae 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -4096,10 +4096,8 @@ void OffMotorcycle(player_struct *p) p->VBumpTarget = 0; p->VBumpNow = 0; p->TurbCount = 0; - p->vel.X = 0; - p->vel.Y = 0; - p->vel.X -= p->angle.ang.Cos() * (1 << 7); - p->vel.Y -= p->angle.ang.Sin() * (1 << 7); + p->vel.X = 0 - p->angle.ang.Cos() * (1 << 7); + p->vel.Y = 0 - p->angle.ang.Sin() * (1 << 7); p->moto_underwater = 0; auto spawned = spawn(p->GetActor(), EMPTYBIKE); if (spawned) @@ -4163,10 +4161,8 @@ void OffBoat(player_struct *p) p->VBumpTarget = 0; p->VBumpNow = 0; p->TurbCount = 0; - p->vel.X = 0; - p->vel.Y = 0; - p->vel.X -= p->angle.ang.Cos() * (1 << 7); - p->vel.Y -= p->angle.ang.Sin() * (1 << 7); + p->vel.X = 0 - p->angle.ang.Cos() * (1 << 7); + p->vel.Y = 0 - p->angle.ang.Sin() * (1 << 7); p->moto_underwater = 0; auto spawned = spawn(p->GetActor(), EMPTYBOAT); if (spawned)