From b462c3d998c87e773a42b56e90e32c0efadd9821 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 3 Sep 2022 12:06:50 +0200 Subject: [PATCH] =?UTF-8?q?-=20consolidated=20Exhumed=E2=80=99s=20velocity?= =?UTF-8?q?=20setters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/games/exhumed/src/anubis.cpp | 6 ++---- source/games/exhumed/src/bullet.cpp | 3 +-- source/games/exhumed/src/exhumed.cpp | 12 ++++++++++++ source/games/exhumed/src/exhumedactor.h | 2 +- source/games/exhumed/src/fish.cpp | 3 +-- source/games/exhumed/src/lavadude.cpp | 9 +++------ source/games/exhumed/src/lion.cpp | 17 ++++++----------- source/games/exhumed/src/move.cpp | 3 +-- source/games/exhumed/src/mummy.cpp | 9 +++------ source/games/exhumed/src/queen.cpp | 6 ++---- source/games/exhumed/src/rat.cpp | 3 +-- source/games/exhumed/src/rex.cpp | 12 ++++-------- source/games/exhumed/src/scorp.cpp | 9 +++------ source/games/exhumed/src/set.cpp | 9 +++------ source/games/exhumed/src/spider.cpp | 9 +++------ source/games/exhumed/src/wasp.cpp | 3 +-- 16 files changed, 47 insertions(+), 68 deletions(-) diff --git a/source/games/exhumed/src/anubis.cpp b/source/games/exhumed/src/anubis.cpp index f39abec92..ecc0e45fb 100644 --- a/source/games/exhumed/src/anubis.cpp +++ b/source/games/exhumed/src/anubis.cpp @@ -157,8 +157,7 @@ void AIAnubis::Tick(RunListEvent* ev) ap->nFrame = 0; ap->pTarget = pTarget; - ap->set_int_xvel(bcos(ap->int_ang(), -2)); - ap->set_int_yvel(bsin(ap->int_ang(), -2)); + ap->VelFromAngle(-2); } } return; @@ -194,8 +193,7 @@ void AIAnubis::Tick(RunListEvent* ev) case kHitWall: { ap->set_int_ang((ap->int_ang() + 256) & kAngleMask); - ap->set_int_xvel(bcos(ap->int_ang(), -2)); - ap->set_int_yvel(bsin(ap->int_ang(), -2)); + ap->VelFromAngle(-2); break; } diff --git a/source/games/exhumed/src/bullet.cpp b/source/games/exhumed/src/bullet.cpp index 4e2046533..98fb4556a 100644 --- a/source/games/exhumed/src/bullet.cpp +++ b/source/games/exhumed/src/bullet.cpp @@ -238,8 +238,7 @@ void BulletHitsSprite(Bullet *pBullet, DExhumedActor* pBulletActor, DExhumedActo int xVel = pHitActor->int_xvel(); int yVel = pHitActor->int_yvel(); - pHitActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pHitActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pHitActor->VelFromAngle(-2); MoveCreature(pHitActor); diff --git a/source/games/exhumed/src/exhumed.cpp b/source/games/exhumed/src/exhumed.cpp index 16610e304..a5b2b7ec6 100644 --- a/source/games/exhumed/src/exhumed.cpp +++ b/source/games/exhumed/src/exhumed.cpp @@ -608,6 +608,18 @@ std::pair GameInterface::GetCoordinates() } +/* +void DExhumedActor::VelFromAngle(int shift = 0) +{ + vel.XY() = spr.angle.ToVector() * (1 << (14 + shift)); +} +*/ +void DExhumedActor::VelFromAngle(int shift) +{ + set_int_xvel(bcos(int_ang(), shift)); + set_int_yvel(bsin(int_ang(), shift)); +} + void DExhumedActor::Serialize(FSerializer& arc) { Super::Serialize(arc); diff --git a/source/games/exhumed/src/exhumedactor.h b/source/games/exhumed/src/exhumedactor.h index 7ecb2d03e..2748a4e34 100644 --- a/source/games/exhumed/src/exhumedactor.h +++ b/source/games/exhumed/src/exhumedactor.h @@ -43,7 +43,7 @@ public: DExhumedActor() = default; void Serialize(FSerializer& arc) override; - + void VelFromAngle(int shift = 0); }; // subclassed to add a game specific actor() method diff --git a/source/games/exhumed/src/fish.cpp b/source/games/exhumed/src/fish.cpp index a87a3ee30..dce656fb2 100644 --- a/source/games/exhumed/src/fish.cpp +++ b/source/games/exhumed/src/fish.cpp @@ -187,8 +187,7 @@ void IdleFish(DExhumedActor* pActor, int edx) pActor->add_int_ang((256 - RandomSize(9)) + 1024); pActor->norm_ang(); - pActor->set_int_xvel(bcos(pActor->int_ang(), -8)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -8)); + pActor->VelFromAngle(-8); pActor->nAction = 0; pActor->nFrame = 0; diff --git a/source/games/exhumed/src/lavadude.cpp b/source/games/exhumed/src/lavadude.cpp index 33675378b..252ab0523 100644 --- a/source/games/exhumed/src/lavadude.cpp +++ b/source/games/exhumed/src/lavadude.cpp @@ -264,8 +264,7 @@ void AILavaDude::Tick(RunListEvent* ev) PlotCourseToSprite(pActor, pTarget); - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); if (pTarget && !RandomSize(1)) { @@ -288,8 +287,7 @@ void AILavaDude::Tick(RunListEvent* ev) pActor->spr.pos = pos; pActor->set_int_ang((pActor->int_ang() + ((RandomWord() & 0x3FF) + 1024)) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); break; } @@ -300,8 +298,7 @@ void AILavaDude::Tick(RunListEvent* ev) if (coll.type == kHitWall) { pActor->set_int_ang((pActor->int_ang() + ((RandomWord() & 0x3FF) + 1024)) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); break; } else if (coll.type == kHitSprite) diff --git a/source/games/exhumed/src/lion.cpp b/source/games/exhumed/src/lion.cpp index 861a84747..fbb51a973 100644 --- a/source/games/exhumed/src/lion.cpp +++ b/source/games/exhumed/src/lion.cpp @@ -236,8 +236,7 @@ void AILion::Tick(RunListEvent* ev) pActor->nAction = 2; pActor->nFrame = 0; - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); pActor->pTarget = pTarget; return; } @@ -252,8 +251,7 @@ void AILion::Tick(RunListEvent* ev) if (RandomBit()) { pActor->set_int_ang(RandomWord() & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); } else { @@ -292,8 +290,7 @@ void AILion::Tick(RunListEvent* ev) { // loc_378FA: pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); break; } else if (nMov.type == kHitSprite) @@ -323,8 +320,7 @@ void AILion::Tick(RunListEvent* ev) { // loc_378FA: pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); break; } } @@ -448,8 +444,7 @@ void AILion::Tick(RunListEvent* ev) { // loc_378FA: pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); break; } } @@ -476,7 +471,7 @@ void AILion::Tick(RunListEvent* ev) pActor->set_int_zvel(-1000); pActor->nAction = 6; - pActor->set_int_xvel(bcos(pActor->int_ang()) - bcos(pActor->int_ang(), -3)); + pActor->set_int_xvel(bcos(pActor->int_ang()) - bcos(pActor->int_ang(), -3)); pActor->set_int_yvel(bsin(pActor->int_ang()) - bsin(pActor->int_ang(), -3)); D3PlayFX(StaticSound[kSound24], pActor); } diff --git a/source/games/exhumed/src/move.cpp b/source/games/exhumed/src/move.cpp index d3121d605..58522b8c2 100644 --- a/source/games/exhumed/src/move.cpp +++ b/source/games/exhumed/src/move.cpp @@ -638,8 +638,7 @@ Collision MoveCreatureWithCaution(DExhumedActor* pActor) ChangeActorSect(pActor, pSectorPre); pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); Collision c; c.setNone(); return c; diff --git a/source/games/exhumed/src/mummy.cpp b/source/games/exhumed/src/mummy.cpp index e2d027b91..dca13b81b 100644 --- a/source/games/exhumed/src/mummy.cpp +++ b/source/games/exhumed/src/mummy.cpp @@ -176,8 +176,7 @@ void AIMummy::Tick(RunListEvent* ev) pActor->nAction = 1; pActor->nCount = 90; - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); } } } @@ -218,8 +217,7 @@ void AIMummy::Tick(RunListEvent* ev) // loc_2B5A8 if (!pActor->nFrame) { - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); } if (pActor->vel.X != 0 || pActor->vel.Y != 0) @@ -260,8 +258,7 @@ void AIMummy::Tick(RunListEvent* ev) case kHitWall: { pActor->set_int_ang((pActor->int_ang() + ((RandomWord() & 0x3FF) + 1024)) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); return; } diff --git a/source/games/exhumed/src/queen.cpp b/source/games/exhumed/src/queen.cpp index 7657c513b..82ab3c8dd 100644 --- a/source/games/exhumed/src/queen.cpp +++ b/source/games/exhumed/src/queen.cpp @@ -604,8 +604,7 @@ void AIQueenEgg::Tick(RunListEvent* ev) case kHitWall: pActor->set_int_ang((RandomSize(9) + 768)); pActor->norm_ang(); - pActor->set_int_xvel(bcos(pActor->int_ang(), -3)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -3)); + pActor->VelFromAngle(-3); pActor->set_int_zvel(-RandomSize(5)); break; } @@ -1128,8 +1127,7 @@ void BuildQueen(DExhumedActor* pActor, const DVector3& pos, sectortype* pSector, void SetQueenSpeed(DExhumedActor* pActor, int nSpeed) { - pActor->set_int_xvel(bcos(pActor->int_ang(), -(2 - nSpeed))); - pActor->set_int_yvel(bsin(pActor->int_ang(), -(2 - nSpeed))); + pActor->VelFromAngle(-(2 - nSpeed)); } void AIQueen::Tick(RunListEvent* ev) diff --git a/source/games/exhumed/src/rat.cpp b/source/games/exhumed/src/rat.cpp index 7ec4c4dfa..9ff78ba4d 100644 --- a/source/games/exhumed/src/rat.cpp +++ b/source/games/exhumed/src/rat.cpp @@ -69,8 +69,7 @@ void InitRats() void SetRatVel(DExhumedActor* pActor) { - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); } void BuildRat(DExhumedActor* pActor, const DVector3& pos, sectortype* pSector, int nAngle) diff --git a/source/games/exhumed/src/rex.cpp b/source/games/exhumed/src/rex.cpp index 1c791ea65..be211715c 100644 --- a/source/games/exhumed/src/rex.cpp +++ b/source/games/exhumed/src/rex.cpp @@ -221,8 +221,7 @@ void AIRex::Tick(RunListEvent* ev) pActor->nAction = 1; pActor->nFrame = 0; - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); D3PlayFX(StaticSound[kSound48], pActor); @@ -287,8 +286,7 @@ void AIRex::Tick(RunListEvent* ev) case kHitWall: { pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); pActor->nAction = 1; pActor->nFrame = 0; nAction = 1; @@ -306,8 +304,7 @@ void AIRex::Tick(RunListEvent* ev) { PlotCourseToSprite(pActor, pTarget); - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); auto nMov = MoveCreatureWithCaution(pActor); @@ -319,8 +316,7 @@ void AIRex::Tick(RunListEvent* ev) pActor->nCount = 60; pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -2)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -2)); + pActor->VelFromAngle(-2); pActor->nAction = 1; pActor->nFrame = 0; nAction = 1; diff --git a/source/games/exhumed/src/scorp.cpp b/source/games/exhumed/src/scorp.cpp index 69cb48c28..25fae7f12 100644 --- a/source/games/exhumed/src/scorp.cpp +++ b/source/games/exhumed/src/scorp.cpp @@ -217,8 +217,7 @@ void AIScorp::Tick(RunListEvent* ev) D3PlayFX(StaticSound[kSound41], pActor); pActor->nFrame = 0; - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); pActor->nAction = 1; pActor->pTarget = pTarget; @@ -302,8 +301,7 @@ void AIScorp::Tick(RunListEvent* ev) { pActor->nAction = 1; - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); pActor->nFrame = 0; return; @@ -410,8 +408,7 @@ void AIScorp::Effect(RunListEvent* ev, DExhumedActor* pTarget, int mode) pActor->add_int_ang(RandomSize(7) - 63); pActor->norm_ang(); - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); } if (mode <= 1) { diff --git a/source/games/exhumed/src/set.cpp b/source/games/exhumed/src/set.cpp index e8ec900e3..95567f83f 100644 --- a/source/games/exhumed/src/set.cpp +++ b/source/games/exhumed/src/set.cpp @@ -295,8 +295,7 @@ void AISet::Tick(RunListEvent* ev) pActor->nFrame = 0; pActor->pTarget = pTarget; - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); } } @@ -419,8 +418,7 @@ void AISet::Tick(RunListEvent* ev) } pActor->set_int_ang((pActor->int_ang() + 256) & kAngleMask); - pActor->set_int_xvel(bcos(pActor->int_ang(), -1)); - pActor->set_int_yvel(bsin(pActor->int_ang(), -1)); + pActor->VelFromAngle(-1); break; } else if (nMov.type == kHitSprite) @@ -522,8 +520,7 @@ void AISet::Tick(RunListEvent* ev) pActor->nAction = 8; pActor->nFrame = 0; - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); } return; } diff --git a/source/games/exhumed/src/spider.cpp b/source/games/exhumed/src/spider.cpp index b5fff0bbf..828b8c419 100644 --- a/source/games/exhumed/src/spider.cpp +++ b/source/games/exhumed/src/spider.cpp @@ -142,8 +142,7 @@ void AISpider::Tick(RunListEvent* ev) spp->nFrame = 0; spp->pTarget = pTarget; - spp->set_int_xvel(bcos(spp->int_ang())); - spp->set_int_yvel(bsin(spp->int_ang())); + spp->VelFromAngle(); return; } } @@ -193,8 +192,7 @@ void AISpider::Tick(RunListEvent* ev) if (RandomSize(3)) { - spp->set_int_xvel(bcos(spp->int_ang())); - spp->set_int_yvel(bsin(spp->int_ang())); + spp->VelFromAngle(); } else { @@ -300,8 +298,7 @@ void AISpider::Tick(RunListEvent* ev) case kHitWall: { spp->set_int_ang((spp->int_ang() + 256) & 0x7EF); - spp->set_int_xvel(bcos(spp->int_ang())); - spp->set_int_yvel(bsin(spp->int_ang())); + spp->VelFromAngle(); return; } case kHitSprite: diff --git a/source/games/exhumed/src/wasp.cpp b/source/games/exhumed/src/wasp.cpp index ee79023d4..c42134a97 100644 --- a/source/games/exhumed/src/wasp.cpp +++ b/source/games/exhumed/src/wasp.cpp @@ -36,8 +36,7 @@ static actionSeq WaspSeq[] = { void SetWaspVel(DExhumedActor* pActor) { - pActor->set_int_xvel(bcos(pActor->int_ang())); - pActor->set_int_yvel(bsin(pActor->int_ang())); + pActor->VelFromAngle(); } DExhumedActor* BuildWasp(DExhumedActor* pActor, const DVector3& pos, sectortype* pSector, int nAngle, bool bEggWasp)