Skip to content

Commit

Permalink
- moved gInterpolateSprite into DBloodActor
Browse files Browse the repository at this point in the history
  • Loading branch information
coelckers committed Sep 6, 2021
1 parent edd5bbc commit 9010ea3
Show file tree
Hide file tree
Showing 11 changed files with 19 additions and 26 deletions.
5 changes: 3 additions & 2 deletions source/games/blood/src/aiunicult.cpp
Expand Up @@ -597,7 +597,7 @@ static void unicultThinkChase(DBloodActor* actor)
}

}
else if (dist > 4072 && dist <= 11072 && !spriteIsUnderwater(actor, false) && pSprite->owner != (kMaxSprites - 1))
else if (dist > 4072 && dist <= 11072 && !spriteIsUnderwater(actor, false) && !actor->GetSpecialOwner())
{
switch (curWeapon)
{
Expand Down Expand Up @@ -2534,7 +2534,8 @@ bool genDudePrepare(DBloodActor* actor, int propId)
}
case kGenDudePropertyLeech:
pExtra->pLifeLeech = nullptr;
if (pSprite->owner != kMaxSprites - 1) {
if (!actor->GetSpecialOwner())
{
BloodStatIterator it(kStatThing);
while (auto actor2 = it.Next())
{
Expand Down
2 changes: 1 addition & 1 deletion source/games/blood/src/animatesprite.cpp
Expand Up @@ -543,7 +543,7 @@ void viewProcessSprites(spritetype* tsprite, int& spritesortcnt, int32_t cX, int
}

int nSprite = pTSprite->owner;
if (cl_interpolate && gInterpolateSprite[nSprite] && !(pTSprite->flags&512))
if (cl_interpolate && owneractor->interpolated && !(pTSprite->flags&512))
{
pTSprite->pos = pTSprite->interpolatedvec3(gInterpolate);
pTSprite->ang = pTSprite->interpolatedang(gInterpolate);
Expand Down
4 changes: 3 additions & 1 deletion source/games/blood/src/blood.cpp
Expand Up @@ -263,7 +263,9 @@ void GameInterface::Ticker()
if (newweap > 0 && newweap < WeaponSel_MaxBlood) gPlayer[i].newWeapon = newweap;
}

gInterpolateSprite.Zero();
BloodSpriteIterator it;
while (DBloodActor* act = it.Next()) act->interpolated = false;

ClearMovementInterpolations();
UpdateInterpolations();

Expand Down
4 changes: 3 additions & 1 deletion source/games/blood/src/bloodactor.h
Expand Up @@ -105,9 +105,10 @@ class DBloodActor
// transient data (not written to savegame)
int cumulDamage;
bool explosionhackflag; // this originally hijacked the target field which is not safe when working with pointers.
bool interpolated;
ConditionElement condition[2];

DBloodActor() :index(int(this - base())) { /*assert(index >= 0 && index < kMaxSprites);*/ }
DBloodActor() :index(int(this - base())) {}
DBloodActor& operator=(const DBloodActor& other) = default;

void Clear()
Expand All @@ -121,6 +122,7 @@ class DBloodActor
basePoint = {};
xsprite = {};
hasx = false;
interpolated = false;
xvel = yvel = zvel = 0;
}
bool hasX() { return hasx; }
Expand Down
3 changes: 1 addition & 2 deletions source/games/blood/src/db.cpp
Expand Up @@ -163,8 +163,7 @@ void qinitspritelists(void) // Replace
{
headspritestat[i] = -1;
}
int const nMaxSprites = kMaxSprites;
for (short i = 0; i < nMaxSprites; i++)
for (short i = 0; i < kMaxSprites; i++)
{
sprite[i].sectnum = -1;
InsertSpriteStat(i, kMaxStatus);
Expand Down
4 changes: 0 additions & 4 deletions source/games/blood/src/gameutil.h
Expand Up @@ -58,10 +58,6 @@ enum {


// by NoOne: functions to quickly check range of specifical arrays
inline bool spriRangeIsFine(int nIndex) {
return (nIndex >= 0 && nIndex < kMaxSprites);
}

inline bool sectRangeIsFine(int nIndex) {
return (nIndex >= 0 && nIndex < kMaxSectors);
}
Expand Down
2 changes: 1 addition & 1 deletion source/games/blood/src/nnexts.cpp
Expand Up @@ -4402,7 +4402,7 @@ bool condCheckDude(DBloodActor* aCond, int cmpOp, bool PUSH)
{
auto act = actor->genDudeExtra.pLifeLeech;
if (!act) return false;
if (pSpr->owner == kMaxSprites - 1) return true;
if (actor->GetSpecialOwner()) return true;
else if (PUSH) condPush(aCond, OBJ_SPRITE, 0, act);
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion source/games/blood/src/triggers.cpp
Expand Up @@ -1460,7 +1460,7 @@ void OperateTeleport(unsigned int nSector, XSECTOR *pXSector)
sfxPlay3DSound(pDest, 201, -1, 0);
actor->xvel = actor->yvel = actor->zvel = 0;
int nSprite = actor->GetIndex();
gInterpolateSprite.Clear(nSprite);
actor->interpolated = false;
viewBackupSpriteLoc(actor);
if (pPlayer)
{
Expand Down
1 change: 0 additions & 1 deletion source/games/blood/src/view.cpp
Expand Up @@ -49,7 +49,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
EXTERN_CVAR(Bool, testnewrenderer)
BEGIN_BLD_NS

FixedBitArray<kMaxSprites> gInterpolateSprite;
VIEW gPrevView[kMaxPlayers];
VIEWPOS gViewPos;
int gViewIndex;
Expand Down
14 changes: 4 additions & 10 deletions source/games/blood/src/view.h
Expand Up @@ -132,7 +132,6 @@ extern int gScreenTilt;
extern int deliriumTilt, deliriumTurn, deliriumPitch;
extern int gScreenTiltO, deliriumTurnO, deliriumPitchO;
extern int gShowFrameRate;
extern FixedBitArray<kMaxSprites> gInterpolateSprite;
extern int gLastPal;
extern double gInterpolate;

Expand Down Expand Up @@ -169,19 +168,14 @@ inline void viewInterpolateWall(int nWall, walltype *pWall)
StartInterpolation(nWall, Interp_Wall_Y);
}

inline void viewBackupSpriteLoc(int nSprite, spritetype *pSprite)
inline void viewBackupSpriteLoc(DBloodActor* actor)
{
if (!gInterpolateSprite[nSprite])
if (!actor->interpolated)
{
pSprite->backuploc();
gInterpolateSprite.Set(nSprite);
actor->s().backuploc();
actor->interpolated = true;
}
}

inline void viewBackupSpriteLoc(DBloodActor* actor)
{
viewBackupSpriteLoc(actor->GetIndex(), &actor->s());
}


END_BLD_NS
4 changes: 2 additions & 2 deletions source/games/blood/src/warp.cpp
Expand Up @@ -198,7 +198,7 @@ int CheckLink(DBloodActor *actor)
else
z2 = getceilzofslope(pSprite->sectnum, pSprite->x, pSprite->y);
pSprite->z += z2-z;
gInterpolateSprite.Clear(actor->GetIndex());
actor->interpolated = false;
return pUpper->type;
}
}
Expand All @@ -225,7 +225,7 @@ int CheckLink(DBloodActor *actor)
else
z2 = getflorzofslope(pSprite->sectnum, pSprite->x, pSprite->y);
pSprite->z += z2-z;
gInterpolateSprite.Clear(actor->GetIndex());
actor->interpolated = false;
return pLower->type;
}
}
Expand Down

0 comments on commit 9010ea3

Please sign in to comment.