From 39d100c970cea86ac06fcbf617e10e4991c9bbb7 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 25 Sep 2022 14:16:26 +0200 Subject: [PATCH] - Blood: floatified debrisConcuss --- source/games/blood/src/actor.cpp | 2 +- source/games/blood/src/nnexts.cpp | 13 ++++++------- source/games/blood/src/nnexts.h | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index 6dc5586f1..1d0db1601 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -5841,7 +5841,7 @@ static void actCheckExplosion() if (!physactor->insector() || (physactor->spr.flags & kHitagFree) != 0) continue; if (!CheckSector(sectorMap, physactor) || !CheckProximity(physactor, apos, pSector, radius)) continue; - else debrisConcuss(Owner, i, x, y, z, pExplodeInfo->dmgType); + else debrisConcuss(Owner, i, DVector3(x * inttoworld, y * inttoworld, z * zinttoworld), pExplodeInfo->dmgType); } } diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index 34802b6d3..223ddbf92 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -1568,24 +1568,23 @@ int debrisGetFreeIndex(void) // //--------------------------------------------------------------------------- -void debrisConcuss(DBloodActor* owneractor, int listIndex, int x, int y, int z, int dmg) +void debrisConcuss(DBloodActor* owneractor, int listIndex, const DVector3& pos, int dmg) { DBloodActor* actor = gPhysSpritesList[listIndex]; if (actor != nullptr && actor->hasX()) { - int dx = actor->int_pos().X - x; int dy = actor->int_pos().Y - y; int dz = (actor->int_pos().Z - z) >> 4; - dmg = Scale(0x40000, dmg, 0x40000 + dx * dx + dy * dy + dz * dz); + auto dv = actor->spr.pos - pos; + + dmg = int(dmg * (0x4000 / (0x4000 + dv.LengthSquared()))); bool thing = (actor->spr.type >= kThingBase && actor->spr.type < kThingMax); int size = (tileWidth(actor->spr.picnum) * actor->spr.xrepeat * tileHeight(actor->spr.picnum) * actor->spr.yrepeat) >> 1; if (actor->xspr.physAttr & kPhysDebrisExplode) { if (actor->spriteMass.mass > 0) { - int t = Scale(dmg, size, actor->spriteMass.mass); + double t = double(dmg) * size / actor->spriteMass.mass; - actor->add_int_bvel_x(MulScale(t, dx, 16)); - actor->add_int_bvel_y(MulScale(t, dy, 16)); - actor->add_int_bvel_z(MulScale(t, dz, 16)); + actor->vel += dv * t / (1 << 24); } if (thing) diff --git a/source/games/blood/src/nnexts.h b/source/games/blood/src/nnexts.h index 172edc499..834ff8b52 100644 --- a/source/games/blood/src/nnexts.h +++ b/source/games/blood/src/nnexts.h @@ -301,7 +301,7 @@ void sfxPlayVectorSound(DBloodActor* pSprite, int vectorId); int debrisGetFreeIndex(void); void debrisBubble(DBloodActor* nSprite); void debrisMove(int listIndex); -void debrisConcuss(DBloodActor* nOwner, int listIndex, int x, int y, int z, int dmg); +void debrisConcuss(DBloodActor* nOwner, int listIndex, const DVector3& pos, int dmg); // ------------------------------------------------------------------------- // void aiSetGenIdleState(DBloodActor*);