From 9cc4d9f43298e51666f715d8c94f9203b0c35ec8 Mon Sep 17 00:00:00 2001 From: nukeykt Date: Thu, 6 Feb 2020 06:17:05 +0900 Subject: [PATCH] Blood: workaround dudeInfo OOB issue # Conflicts: # source/blood/src/actor.cpp # source/blood/src/demo.cpp # source/blood/src/dude.cpp # source/blood/src/dude.h --- source/blood/src/actor.cpp | 52 +++++++++++++++++----------------- source/blood/src/ai.cpp | 24 ++++++++-------- source/blood/src/aibat.cpp | 24 ++++++++-------- source/blood/src/aibeast.cpp | 24 ++++++++-------- source/blood/src/aiboneel.cpp | 24 ++++++++-------- source/blood/src/aiburn.cpp | 4 +-- source/blood/src/aicaleb.cpp | 22 +++++++------- source/blood/src/aicerber.cpp | 12 ++++---- source/blood/src/aicult.cpp | 4 +-- source/blood/src/aigarg.cpp | 24 ++++++++-------- source/blood/src/aighost.cpp | 24 ++++++++-------- source/blood/src/aigilbst.cpp | 22 +++++++------- source/blood/src/aihand.cpp | 4 +-- source/blood/src/aihound.cpp | 4 +-- source/blood/src/aiinnoc.cpp | 4 +-- source/blood/src/aipod.cpp | 6 ++-- source/blood/src/airat.cpp | 4 +-- source/blood/src/aispid.cpp | 6 ++-- source/blood/src/aitchern.cpp | 10 +++---- source/blood/src/aiunicult.cpp | 20 ++++++------- source/blood/src/aizomba.cpp | 12 ++++---- source/blood/src/aizombf.cpp | 14 ++++----- source/blood/src/blood.cpp | 2 +- source/blood/src/callback.cpp | 8 +++--- source/blood/src/demo.cpp | 3 +- source/blood/src/dude.cpp | 2 ++ source/blood/src/dude.h | 8 ++++++ source/blood/src/player.cpp | 4 +-- source/blood/src/triggers.cpp | 14 ++++----- source/blood/src/view.cpp | 2 +- source/blood/src/weapon.cpp | 2 +- 31 files changed, 200 insertions(+), 189 deletions(-) diff --git a/source/blood/src/actor.cpp b/source/blood/src/actor.cpp index 3b77cd14f..afba3eb61 100644 --- a/source/blood/src/actor.cpp +++ b/source/blood/src/actor.cpp @@ -2787,7 +2787,7 @@ void ConcussSprite(int a1, spritetype *pSprite, int x, int y, int z, int a6) int mass = 0; if (IsDudeSprite(pSprite)) { - mass = dudeInfo[pSprite->type - kDudeBase].mass; + mass = getDudeInfo(pSprite->type)->mass; #ifdef NOONE_EXTENSIONS switch (pSprite->type) { case kDudeModernCustom: @@ -3342,7 +3342,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType, break; } - if (!gSysRes.Lookup(dudeInfo[nType].seqStartID + nSeq, "SEQ")) + if (!gSysRes.Lookup(getDudeInfo(nType+kDudeBase)->seqStartID + nSeq, "SEQ")) { seqKill(3, nXSprite); gKillMgr.AddKill(pSprite); @@ -3651,13 +3651,13 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType, seqSpawn(dudeInfo[nType].seqStartID+12, 3, nXSprite, nDudeToGibClient1); break; default: - seqSpawn(dudeInfo[nType].seqStartID+nSeq, 3, nXSprite, -1); + seqSpawn(getDudeInfo(nType+kDudeBase)->seqStartID+nSeq, 3, nXSprite, -1); break; } if (damageType == DAMAGE_TYPE_3) { - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); for (int i = 0; i < 3; i++) if (pDudeInfo->nGibType[i] > -1) GibSprite(pSprite, (GIBTYPE)pDudeInfo->nGibType[i], NULL, NULL); @@ -3695,7 +3695,7 @@ int actDamageSprite(int nSource, spritetype *pSprite, DAMAGE_TYPE damageType, in //ThrowError("Bad Dude Failed: initial=%d type=%d %s\n", (int)pSprite->inittype, (int)pSprite->type, (int)(pSprite->flags & 16) ? "RESPAWN" : "NORMAL"); } - int nType = pSprite->type - kDudeBase; int nDamageFactor = dudeInfo[nType].at70[damageType]; + int nType = pSprite->type - kDudeBase; int nDamageFactor = getDudeInfo(nType+kDudeBase)->at70[damageType]; #ifdef NOONE_EXTENSIONS if (pSprite->type == kDudeModernCustom) nDamageFactor = gGenDudeExtra[pSprite->index].dmgControl[damageType]; @@ -3884,7 +3884,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode) pThingInfo = &thingInfo[pSpriteHit->type - kThingBase]; break; case kStatDude: - pDudeInfo = &dudeInfo[pSpriteHit->type - kDudeBase]; + pDudeInfo = getDudeInfo(pSpriteHit->type); break; } } @@ -3905,7 +3905,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode) if (IsDudeSprite(pSource) && pXSource != NULL && pXSource->health != 0) - actHealDude(pXSource, nDamage >> 2, dudeInfo[pSource->type - kDudeBase].startHealth); + actHealDude(pXSource, nDamage >> 2, getDudeInfo(pSource->type)->startHealth); } } @@ -4115,7 +4115,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode) XSPRITE *pXOwner = &xsprite[pOwner->extra]; int nType = pOwner->type-kDudeBase; if (pXOwner->health > 0) - actHealDude(pXOwner, 10, dudeInfo[nType].startHealth); + actHealDude(pXOwner, 10, getDudeInfo(nType+kDudeBase)->startHealth); } } break; @@ -4241,8 +4241,8 @@ void ProcessTouchObjects(spritetype *pSprite, int nXSprite) // add size shroom abilities if ((IsPlayerSprite(pSprite) && isShrinked(pSprite)) || (IsPlayerSprite(pSprite2) && isGrown(pSprite2))) { - int mass1 = dudeInfo[pSprite2->type - kDudeBase].mass; - int mass2 = dudeInfo[pSprite->type - kDudeBase].mass; + int mass1 = getDudeInfo(pSprite2->type)->mass; + int mass2 = getDudeInfo(pSprite->type)->mass; switch (pSprite->type) { case kDudeModernCustom: case kDudeModernCustomBurning: @@ -4316,8 +4316,8 @@ void ProcessTouchObjects(spritetype *pSprite, int nXSprite) // add size shroom abilities if ((IsPlayerSprite(pSprite2) && isShrinked(pSprite2)) || (IsPlayerSprite(pSprite) && isGrown(pSprite))) { if (xvel[pSprite->xvel] != 0 && IsDudeSprite(pSprite2)) { - int mass1 = dudeInfo[pSprite->type - kDudeBase].mass; - int mass2 = dudeInfo[pSprite2->type - kDudeBase].mass; + int mass1 = getDudeInfo(pSprite->type)->mass; + int mass2 = getDudeInfo(pSprite2->type)->mass; switch (pSprite2->type) { case kDudeModernCustom: case kDudeModernCustomBurning: @@ -4373,8 +4373,8 @@ void ProcessTouchObjects(spritetype *pSprite, int nXSprite) // add size shroom abilities if ((IsPlayerSprite(pSprite2) && isShrinked(pSprite2)) || (IsPlayerSprite(pSprite) && isGrown(pSprite))) { - int mass1 = dudeInfo[pSprite->type - kDudeBase].mass; - int mass2 = dudeInfo[pSprite2->type - kDudeBase].mass; + int mass1 = getDudeInfo(pSprite->type)->mass; + int mass2 = getDudeInfo(pSprite2->type)->mass; switch (pSprite2->type) { case kDudeModernCustom: case kDudeModernCustomBurning: @@ -4717,7 +4717,7 @@ void MoveDude(spritetype *pSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int top, bottom; GetSpriteExtents(pSprite, &top, &bottom); int bz = (bottom-pSprite->z)/4; @@ -6231,10 +6231,10 @@ void actProcessSprites(void) pXIncarnation->key = pXIncarnation->dropMsg = 0; // set hp - if (pXSprite->data4 <= 0) pXSprite->health = dudeInfo[pSprite->type - kDudeBase].startHealth << 4; + if (pXSprite->data4 <= 0) pXSprite->health = getDudeInfo(pSprite->type)->startHealth << 4; else pXSprite->health = ClipRange(pXSprite->data4 << 4, 1, 65535); - int seqId = dudeInfo[pSprite->type - kDudeBase].seqStartID; + int seqId = getDudeInfo(pSprite->type)->seqStartID; switch (pSprite->type) { case kDudePodMother: // fake dude case kDudeTentacleMother: // fake dude @@ -6491,11 +6491,11 @@ spritetype *actSpawnDude(spritetype *pSource, short nType, int a3, int a4) vec3_t pos = { x, y, z }; setsprite(pSprite2->index, &pos); pSprite2->cstat |= 0x1101; - pSprite2->clipdist = dudeInfo[nDude].clipdist; - pXSprite2->health = dudeInfo[nDude].startHealth<<4; + pSprite2->clipdist = getDudeInfo(nDude+kDudeBase)->clipdist; + pXSprite2->health = getDudeInfo(nDude+kDudeBase)->startHealth<<4; pXSprite2->respawn = 1; - if (gSysRes.Lookup(dudeInfo[nDude].seqStartID, "SEQ")) - seqSpawn(dudeInfo[nDude].seqStartID, 3, pSprite2->extra, -1); + if (gSysRes.Lookup(getDudeInfo(nDude+kDudeBase)->seqStartID, "SEQ")) + seqSpawn(getDudeInfo(nDude+kDudeBase)->seqStartID, 3, pSprite2->extra, -1); #ifdef NOONE_EXTENSIONS // add a way to inherit some values of spawner type 18 by dude. @@ -7027,7 +7027,7 @@ void actFireVector(spritetype *pShooter, int a2, int a3, int a4, int a5, int a6, } if (pSprite->statnum == kStatDude) { - int t = pSprite->type == kThingBloodChunks ? 0 : dudeInfo[pSprite->type-kDudeBase].mass; + int t = getDudeInfo(pSprite->type)->mass; #ifdef NOONE_EXTENSIONS if (IsDudeSprite(pSprite)) { @@ -7494,7 +7494,7 @@ spritetype* actSpawnCustomDude(spritetype* pSprite, int nDist) { pDude->type = nType; pDude->ang = nAngle; vec3_t pos = { x, y, z }; setsprite(pDude->index, &pos); - pDude->cstat |= 0x1101; pDude->clipdist = dudeInfo[nType - kDudeBase].clipdist; + pDude->cstat |= 0x1101; pDude->clipdist = getDudeInfo(nType)->clipdist; // inherit weapon, seq and sound settings. pXDude->data1 = pXSource->data1; @@ -7512,7 +7512,7 @@ spritetype* actSpawnCustomDude(spritetype* pSprite, int nDist) { if (pSource->clipdist > 0) pDude->clipdist = pSource->clipdist; // inherit custom hp settings - if (pXSource->data4 <= 0) pXDude->health = dudeInfo[nType - kDudeBase].startHealth << 4; + if (pXSource->data4 <= 0) pXDude->health = getDudeInfo(nType)->startHealth << 4; else pXDude->health = ClipRange(pXSource->data4 << 4, 1, 65535); @@ -7566,7 +7566,7 @@ int getSpriteMassBySize(spritetype* pSprite) { clipDist = gGenDudeExtra[pSprite->index].initVals[2]; break; default: - seqId = dudeInfo[pSprite->type - kDudeBase].seqStartID; + seqId = getDudeInfo(pSprite->type)->seqStartID; break; } @@ -7910,7 +7910,7 @@ bool isImmune(spritetype* pSprite, int dmgType, int minScale) { else if (IsDudeSprite(pSprite)) { if (IsPlayerSprite(pSprite)) return (gPlayer[pSprite->type - kDudePlayer1].damageControl[dmgType] <= minScale); else if (pSprite->type == kDudeModernCustom) return (gGenDudeExtra[pSprite->index].dmgControl[dmgType] <= minScale); - else return (dudeInfo[pSprite->type - kDudeBase].at70[dmgType] <= minScale); + else return (getDudeInfo(pSprite->type)->at70[dmgType] <= minScale); } } diff --git a/source/blood/src/ai.cpp b/source/blood/src/ai.cpp index 8c3bd395f..a58a487e0 100644 --- a/source/blood/src/ai.cpp +++ b/source/blood/src/ai.cpp @@ -95,7 +95,7 @@ bool sub_5BDA8(spritetype *pSprite, int nSeq) { if (pSprite->statnum == kStatDude && pSprite->type >= kDudeBase && pSprite->type < kDudeMax) { - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); if (seqGetID(3, pSprite->extra) == pDudeInfo->seqStartID + nSeq && seqGetStatus(3, pSprite->extra) >= 0) return true; } @@ -118,7 +118,7 @@ void aiPlay3DSound(spritetype *pSprite, int a2, AI_SFX_PRIORITY a3, int a4) void aiNewState(spritetype *pSprite, XSPRITE *pXSprite, AISTATE *pAIState) { - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); pXSprite->stateTimer = pAIState->stateTicks; pXSprite->aiState = pAIState; int seqStartId = pDudeInfo->seqStartID; @@ -305,7 +305,7 @@ void aiMoveForward(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -318,7 +318,7 @@ void aiMoveForward(spritetype *pSprite, XSPRITE *pXSprite) void aiMoveTurn(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -328,7 +328,7 @@ void aiMoveDodge(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -910,7 +910,7 @@ void aiSetTarget(XSPRITE *pXSprite, int nTarget) if (actSpriteOwnerToSpriteId(&sprite[pXSprite->reference]) != nTarget) { pXSprite->target = nTarget; - DUDEINFO *pDudeInfo = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pTarget->type); pXSprite->targetX = pTarget->x; pXSprite->targetY = pTarget->y; pXSprite->targetZ = pTarget->z-((pDudeInfo->eyeHeight*pTarget->yrepeat)<<2); @@ -926,7 +926,7 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T return 0; pXSprite->health = ClipLow(pXSprite->health - nDamage, 0); cumulDamage[pSprite->extra] += nDamage; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nSprite = pXSprite->reference; if (nSource >= 0) { @@ -1127,7 +1127,7 @@ void RecoilDude(spritetype *pSprite, XSPRITE *pXSprite) char v4 = Chance(0x8000); DUDEEXTRA *pDudeExtra = &gDudeExtra[pSprite->extra]; if (pSprite->statnum == kStatDude && (pSprite->type >= kDudeBase && pSprite->type < kDudeMax)) { - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); switch (pSprite->type) { #ifdef NOONE_EXTENSIONS case kDudeModernCustom: { @@ -1371,7 +1371,7 @@ void RecoilDude(spritetype *pSprite, XSPRITE *pXSprite) void aiThinkTarget(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); if (Chance(pDudeInfo->alertChance)) { for (int p = connecthead; p >= 0; p = connectpoint2[p]) @@ -1410,7 +1410,7 @@ void aiThinkTarget(spritetype *pSprite, XSPRITE *pXSprite) void sub_5F15C(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); if (Chance(pDudeInfo->alertChance)) { for (int p = connecthead; p >= 0; p = connectpoint2[p]) @@ -1457,7 +1457,7 @@ void sub_5F15C(spritetype *pSprite, XSPRITE *pXSprite) int nDist = approxDist(dx, dy); if (pSprite2->type == kDudeInnocent) { - DUDEINFO *pDudeInfo = &dudeInfo[pSprite2->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite2->type); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; int UNUSED(nAngle) = getangle(dx,dy); @@ -1475,7 +1475,7 @@ void aiProcessDudes(void) { spritetype *pSprite = &sprite[nSprite]; if (pSprite->flags & 32) continue; int nXSprite = pSprite->extra; - XSPRITE *pXSprite = &xsprite[nXSprite]; DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + XSPRITE *pXSprite = &xsprite[nXSprite]; DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); if (IsPlayerSprite(pSprite) || pXSprite->health == 0) continue; pXSprite->stateTimer = ClipLow(pXSprite->stateTimer-4, 0); switch (pSprite->type){ diff --git a/source/blood/src/aibat.cpp b/source/blood/src/aibat.cpp index c78d71f4b..ca80dbc34 100644 --- a/source/blood/src/aibat.cpp +++ b/source/blood/src/aibat.cpp @@ -83,8 +83,8 @@ static void BiteSeqCallback(int, int nXSprite) int dx = Cos(pSprite->ang) >> 16; int dy = Sin(pSprite->ang) >> 16; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int height = (pSprite->yrepeat*pDudeInfo->eyeHeight)<<2; int height2 = (pTarget->yrepeat*pDudeInfoT->eyeHeight)<<2; dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); @@ -94,7 +94,7 @@ static void BiteSeqCallback(int, int nXSprite) static void thinkTarget(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1; if (pDudeExtraE->at8 && pDudeExtraE->at4 < 10) pDudeExtraE->at4++; @@ -152,7 +152,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -171,7 +171,7 @@ static void thinkPonder(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -188,7 +188,7 @@ static void thinkPonder(spritetype *pSprite, XSPRITE *pXSprite) { int nDeltaAngle = ((getangle(dx,dy)+1024-pSprite->ang)&2047)-1024; int height = (pDudeInfo->eyeHeight*pSprite->yrepeat)<<2; - int height2 = (dudeInfo[pTarget->type-kDudeBase].eyeHeight*pTarget->yrepeat)<<2; + int height2 = (getDudeInfo(pTarget->type)->eyeHeight*pTarget->yrepeat)<<2; int top, bottom; GetSpriteExtents(pSprite, &top, &bottom); if (cansee(pTarget->x, pTarget->y, pTarget->z, pTarget->sectnum, pSprite->x, pSprite->y, pSprite->z - height, pSprite->sectnum)) @@ -221,7 +221,7 @@ static void MoveDodgeUp(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -245,7 +245,7 @@ static void MoveDodgeDown(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -275,7 +275,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -331,7 +331,7 @@ static void MoveForward(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -364,7 +364,7 @@ static void MoveSwoop(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -396,7 +396,7 @@ static void MoveFly(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aibeast.cpp b/source/blood/src/aibeast.cpp index 55b7e30a7..678290a9d 100644 --- a/source/blood/src/aibeast.cpp +++ b/source/blood/src/aibeast.cpp @@ -207,7 +207,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); XSECTOR *pXSector; int nXSector = sector[pSprite->sectnum].extra; if (nXSector > 0) @@ -246,7 +246,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -394,7 +394,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) static void thinkSwimGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -413,7 +413,7 @@ static void thinkSwimChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -464,7 +464,7 @@ static void MoveForward(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -484,7 +484,7 @@ static void sub_628A0(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -517,10 +517,10 @@ static void sub_62AE0(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); spritetype *pTarget = &sprite[pXSprite->target]; - int z = pSprite->z + dudeInfo[pSprite->type - kDudeBase].eyeHeight; - int z2 = pTarget->z + dudeInfo[pTarget->type - kDudeBase].eyeHeight; + int z = pSprite->z + getDudeInfo(pSprite->type)->eyeHeight; + int z2 = pTarget->z + getDudeInfo(pTarget->type)->eyeHeight; int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -553,10 +553,10 @@ static void sub_62D7C(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); spritetype *pTarget = &sprite[pXSprite->target]; - int z = pSprite->z + dudeInfo[pSprite->type - kDudeBase].eyeHeight; - int z2 = pTarget->z + dudeInfo[pTarget->type - kDudeBase].eyeHeight; + int z = pSprite->z + getDudeInfo(pSprite->type)->eyeHeight; + int z2 = pTarget->z + getDudeInfo(pTarget->type)->eyeHeight; int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aiboneel.cpp b/source/blood/src/aiboneel.cpp index 526f2f147..64c8424b8 100644 --- a/source/blood/src/aiboneel.cpp +++ b/source/blood/src/aiboneel.cpp @@ -84,8 +84,8 @@ static void BiteSeqCallback(int, int nXSprite) int dx = Cos(pSprite->ang) >> 16; int dy = Sin(pSprite->ang) >> 16; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int height = (pSprite->yrepeat*pDudeInfo->eyeHeight)<<2; int height2 = (pTarget->yrepeat*pDudeInfoT->eyeHeight)<<2; /* @@ -107,7 +107,7 @@ static void BiteSeqCallback(int, int nXSprite) static void thinkTarget(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1; if (pDudeExtraE->at8 && pDudeExtraE->at4 < 10) pDudeExtraE->at4++; @@ -167,7 +167,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -186,7 +186,7 @@ static void thinkPonder(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -203,7 +203,7 @@ static void thinkPonder(spritetype *pSprite, XSPRITE *pXSprite) { int nDeltaAngle = ((getangle(dx,dy)+1024-pSprite->ang)&2047)-1024; int height = (pDudeInfo->eyeHeight*pSprite->yrepeat)<<2; - int height2 = (dudeInfo[pTarget->type-kDudeBase].eyeHeight*pTarget->yrepeat)<<2; + int height2 = (getDudeInfo(pTarget->type)->eyeHeight*pTarget->yrepeat)<<2; int top, bottom; GetSpriteExtents(pSprite, &top, &bottom); if (cansee(pTarget->x, pTarget->y, pTarget->z, pTarget->sectnum, pSprite->x, pSprite->y, pSprite->z - height, pSprite->sectnum)) @@ -236,7 +236,7 @@ static void MoveDodgeUp(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -260,7 +260,7 @@ static void MoveDodgeDown(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -290,7 +290,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -342,7 +342,7 @@ static void MoveForward(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -375,7 +375,7 @@ static void MoveSwoop(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -404,7 +404,7 @@ static void MoveAscend(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aiburn.cpp b/source/blood/src/aiburn.cpp index 81c0fa664..9a7543748 100644 --- a/source/blood/src/aiburn.cpp +++ b/source/blood/src/aiburn.cpp @@ -100,7 +100,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -171,7 +171,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/aicaleb.cpp b/source/blood/src/aicaleb.cpp index 8b36e75b8..8109eed4a 100644 --- a/source/blood/src/aicaleb.cpp +++ b/source/blood/src/aicaleb.cpp @@ -108,7 +108,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); XSECTOR *pXSector; int nXSector = sector[pSprite->sectnum].extra; if (nXSector > 0) @@ -147,7 +147,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -261,7 +261,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) static void thinkSwimGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -280,7 +280,7 @@ static void thinkSwimChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -326,7 +326,7 @@ static void sub_65D04(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -359,10 +359,10 @@ static void sub_65F44(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); spritetype *pTarget = &sprite[pXSprite->target]; - int z = pSprite->z + dudeInfo[pSprite->type - kDudeBase].eyeHeight; - int z2 = pTarget->z + dudeInfo[pTarget->type - kDudeBase].eyeHeight; + int z = pSprite->z + getDudeInfo(pSprite->type)->eyeHeight; + int z2 = pTarget->z + getDudeInfo(pTarget->type)->eyeHeight; int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -395,10 +395,10 @@ static void sub_661E0(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); spritetype *pTarget = &sprite[pXSprite->target]; - int z = pSprite->z + dudeInfo[pSprite->type - kDudeBase].eyeHeight; - int z2 = pTarget->z + dudeInfo[pTarget->type - kDudeBase].eyeHeight; + int z = pSprite->z + getDudeInfo(pSprite->type)->eyeHeight; + int z2 = pTarget->z + getDudeInfo(pTarget->type)->eyeHeight; int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aicerber.cpp b/source/blood/src/aicerber.cpp index aa7bd46e2..fec67f1f5 100644 --- a/source/blood/src/aicerber.cpp +++ b/source/blood/src/aicerber.cpp @@ -104,7 +104,7 @@ static void BurnSeqCallback(int, int nXSprite) XSPRITE *pXSprite = &xsprite[nXSprite]; int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = pDudeInfo->eyeHeight*pSprite->yrepeat; ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { @@ -190,7 +190,7 @@ static void BurnSeqCallback2(int, int nXSprite) consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = pDudeInfo->eyeHeight*pSprite->yrepeat; int x = pSprite->x; @@ -240,7 +240,7 @@ static void BurnSeqCallback2(int, int nXSprite) int nDeltaAngle = ((nAngle-pSprite->ang+1024)&2047)-1024; if (klabs(nDeltaAngle) <= tt1.at8) { - DUDEINFO *pDudeInfo2 = &dudeInfo[pSprite2->type - kDudeBase]; + DUDEINFO *pDudeInfo2 = getDudeInfo(pSprite2->type); int height = (pDudeInfo2->aimHeight*pSprite2->yrepeat)<<2; int tz = (z2-height)-z; if (cansee(x, y, z, pSprite->sectnum, x2, y2, z2, pSprite2->sectnum)) @@ -279,7 +279,7 @@ static void thinkTarget(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1; if (pDudeExtraE->at8 && pDudeExtraE->at4 < 10) pDudeExtraE->at4++; @@ -339,7 +339,7 @@ static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -379,7 +379,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { diff --git a/source/blood/src/aicult.cpp b/source/blood/src/aicult.cpp index 317bfae86..440883331 100644 --- a/source/blood/src/aicult.cpp +++ b/source/blood/src/aicult.cpp @@ -237,7 +237,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -276,7 +276,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/aigarg.cpp b/source/blood/src/aigarg.cpp index e396820ae..a2d8fdeb4 100644 --- a/source/blood/src/aigarg.cpp +++ b/source/blood/src/aigarg.cpp @@ -106,8 +106,8 @@ static void SlashFSeqCallback(int, int nXSprite) int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; spritetype *pTarget = &sprite[pXSprite->target]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int height = (pSprite->yrepeat*pDudeInfo->eyeHeight)<<2; int height2 = (pTarget->yrepeat*pDudeInfoT->eyeHeight)<<2; int dz = height-height2; @@ -136,7 +136,7 @@ static void BlastSSeqCallback(int, int nXSprite) spritetype *pSprite = &sprite[nSprite]; wrand(); // ??? spritetype *pTarget = &sprite[pXSprite->target]; - int height = (pSprite->yrepeat*dudeInfo[pSprite->type-kDudeBase].eyeHeight) << 2; + int height = (pSprite->yrepeat*getDudeInfo(pSprite->type)->eyeHeight) << 2; int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int UNUSED(nDist) = approxDist(dx, dy); @@ -231,7 +231,7 @@ static void thinkTarget(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1; if (pDudeExtraE->at8 && pDudeExtraE->at4 < 10) pDudeExtraE->at4++; @@ -294,7 +294,7 @@ static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -313,7 +313,7 @@ static void MoveDodgeUp(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -341,7 +341,7 @@ static void MoveDodgeDown(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -375,7 +375,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); @@ -565,7 +565,7 @@ static void MoveForward(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -602,7 +602,7 @@ static void MoveSlow(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -646,7 +646,7 @@ static void MoveSwoop(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -689,7 +689,7 @@ static void MoveFly(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aighost.cpp b/source/blood/src/aighost.cpp index fd9be1e3e..525030e83 100644 --- a/source/blood/src/aighost.cpp +++ b/source/blood/src/aighost.cpp @@ -88,8 +88,8 @@ static void SlashSeqCallback(int, int nXSprite) int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; spritetype *pTarget = &sprite[pXSprite->target]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int height = (pSprite->yrepeat*pDudeInfo->eyeHeight)<<2; int height2 = (pTarget->yrepeat*pDudeInfoT->eyeHeight)<<2; int dz = height-height2; @@ -119,7 +119,7 @@ static void BlastSeqCallback(int, int nXSprite) spritetype *pSprite = &sprite[nSprite]; wrand(); // ??? spritetype *pTarget = &sprite[pXSprite->target]; - int height = (pSprite->yrepeat*dudeInfo[pSprite->type-kDudeBase].eyeHeight) << 2; + int height = (pSprite->yrepeat*getDudeInfo(pSprite->type)->eyeHeight) << 2; int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int UNUSED(nDist) = approxDist(dx, dy); @@ -206,7 +206,7 @@ static void thinkTarget(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1; if (pDudeExtraE->at8 && pDudeExtraE->at4 < 10) pDudeExtraE->at4++; @@ -268,7 +268,7 @@ static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -287,7 +287,7 @@ static void MoveDodgeUp(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -315,7 +315,7 @@ static void MoveDodgeDown(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -349,7 +349,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); @@ -457,7 +457,7 @@ static void MoveForward(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -494,7 +494,7 @@ static void MoveSlow(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -535,7 +535,7 @@ static void MoveSwoop(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -575,7 +575,7 @@ static void MoveFly(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aigilbst.cpp b/source/blood/src/aigilbst.cpp index 267fa402d..13277003e 100644 --- a/source/blood/src/aigilbst.cpp +++ b/source/blood/src/aigilbst.cpp @@ -99,7 +99,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); XSECTOR *pXSector; int nXSector = sector[pSprite->sectnum].extra; if (nXSector > 0) @@ -138,7 +138,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -248,7 +248,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) static void thinkSwimGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -267,7 +267,7 @@ static void thinkSwimChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -318,7 +318,7 @@ static void sub_6CB00(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -351,10 +351,10 @@ static void sub_6CD74(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); spritetype *pTarget = &sprite[pXSprite->target]; - int z = pSprite->z + dudeInfo[pSprite->type - kDudeBase].eyeHeight; - int z2 = pTarget->z + dudeInfo[pTarget->type - kDudeBase].eyeHeight; + int z = pSprite->z + getDudeInfo(pSprite->type)->eyeHeight; + int z2 = pTarget->z + getDudeInfo(pTarget->type)->eyeHeight; int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; @@ -387,10 +387,10 @@ static void sub_6D03C(spritetype *pSprite, XSPRITE *pXSprite) { int nSprite = pSprite->index; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); spritetype *pTarget = &sprite[pXSprite->target]; - int z = pSprite->z + dudeInfo[pSprite->type - kDudeBase].eyeHeight; - int z2 = pTarget->z + dudeInfo[pTarget->type - kDudeBase].eyeHeight; + int z = pSprite->z + getDudeInfo(pSprite->type)->eyeHeight; + int z2 = pTarget->z + getDudeInfo(pTarget->type)->eyeHeight; int nAng = ((pXSprite->goalAng+1024-pSprite->ang)&2047)-1024; int nTurnRange = (pDudeInfo->angSpeed<<2)>>4; pSprite->ang = (pSprite->ang+ClipRange(nAng, -nTurnRange, nTurnRange))&2047; diff --git a/source/blood/src/aihand.cpp b/source/blood/src/aihand.cpp index bf77d3bd3..7a5d4d583 100644 --- a/source/blood/src/aihand.cpp +++ b/source/blood/src/aihand.cpp @@ -85,7 +85,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -104,7 +104,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/aihound.cpp b/source/blood/src/aihound.cpp index 2eb18ff94..3f35f2225 100644 --- a/source/blood/src/aihound.cpp +++ b/source/blood/src/aihound.cpp @@ -108,7 +108,7 @@ static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -131,7 +131,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); diff --git a/source/blood/src/aiinnoc.cpp b/source/blood/src/aiinnoc.cpp index a35b7f720..b90a09d70 100644 --- a/source/blood/src/aiinnoc.cpp +++ b/source/blood/src/aiinnoc.cpp @@ -64,7 +64,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -83,7 +83,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/aipod.cpp b/source/blood/src/aipod.cpp index 84ffe6ae8..6683f3aae 100644 --- a/source/blood/src/aipod.cpp +++ b/source/blood/src/aipod.cpp @@ -107,7 +107,7 @@ static void sub_6FFA0(int, int nXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int x = pTarget->x-pSprite->x; int y = pTarget->y-pSprite->y; int dz = pTarget->z-pSprite->z; @@ -184,7 +184,7 @@ static void sub_70380(spritetype *pSprite, XSPRITE *pXSprite) return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -225,7 +225,7 @@ static void sub_704D8(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); diff --git a/source/blood/src/airat.cpp b/source/blood/src/airat.cpp index 56b61da17..214fe1ce8 100644 --- a/source/blood/src/airat.cpp +++ b/source/blood/src/airat.cpp @@ -82,7 +82,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -101,7 +101,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/aispid.cpp b/source/blood/src/aispid.cpp index f83299bec..6cc349569 100644 --- a/source/blood/src/aispid.cpp +++ b/source/blood/src/aispid.cpp @@ -170,7 +170,7 @@ static void sub_71370(int, int nXSprite) int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1; @@ -207,7 +207,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -226,7 +226,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/aitchern.cpp b/source/blood/src/aitchern.cpp index 1ef148d80..a1b59a680 100644 --- a/source/blood/src/aitchern.cpp +++ b/source/blood/src/aitchern.cpp @@ -88,7 +88,7 @@ static void sub_71BD4(int, int nXSprite) XSPRITE *pXSprite = &xsprite[nXSprite]; int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = pSprite->yrepeat*pDudeInfo->eyeHeight; ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { @@ -167,7 +167,7 @@ static void sub_720AC(int, int nXSprite) consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = pSprite->yrepeat*pDudeInfo->eyeHeight; int ax, ay, az; ax = Cos(pSprite->ang)>>16; @@ -248,7 +248,7 @@ static void sub_725A4(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u2; if (pDudeExtraE->at4 && pDudeExtraE->at0 < 10) pDudeExtraE->at0++; @@ -305,7 +305,7 @@ static void sub_72850(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -328,7 +328,7 @@ static void sub_72934(spritetype *pSprite, XSPRITE *pXSprite) consoleSysMsg("pSprite->type >= kDudeBase && pSprite->type < kDudeMax"); return; } - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); ///dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { consoleSysMsg("pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); diff --git a/source/blood/src/aiunicult.cpp b/source/blood/src/aiunicult.cpp index 47294fa31..74b5575da 100644 --- a/source/blood/src/aiunicult.cpp +++ b/source/blood/src/aiunicult.cpp @@ -210,12 +210,12 @@ static void punchCallback(int, int nXIndex) { int nSprite = pXSprite->reference; spritetype* pSprite = &sprite[nSprite]; - int nZOffset1 = dudeInfo[pSprite->type - kDudeBase].eyeHeight * pSprite->yrepeat << 2; + int nZOffset1 = getDudeInfo(pSprite->type)->eyeHeight * pSprite->yrepeat << 2; int nZOffset2 = 0; spritetype* pTarget = &sprite[pXSprite->target]; if(IsDudeSprite(pTarget)) - nZOffset2 = dudeInfo[pTarget->type - kDudeBase].eyeHeight * pTarget->yrepeat << 2; + nZOffset2 = getDudeInfo(pTarget->type)->eyeHeight * pTarget->yrepeat << 2; int dx = Cos(pSprite->ang) >> 16; int dy = Sin(pSprite->ang) >> 16; @@ -429,7 +429,7 @@ static void thinkGoto(spritetype* pSprite, XSPRITE* pXSprite) { aiChooseDirection(pSprite, pXSprite, nAngle); // if reached target, change to search mode - if (approxDist(dx, dy) < 5120 && klabs(pSprite->ang - nAngle) < dudeInfo[pSprite->type - kDudeBase].periphery) { + if (approxDist(dx, dy) < 5120 && klabs(pSprite->ang - nAngle) < getDudeInfo(pSprite->type)->periphery) { if (spriteIsUnderwater(pSprite, false)) aiGenDudeNewState(pSprite, &genDudeSearchW); else aiGenDudeNewState(pSprite, &genDudeSearchL); } @@ -498,7 +498,7 @@ static void thinkChase( spritetype* pSprite, XSPRITE* pXSprite ) { } } - DUDEINFO* pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type); int losAngle = ((getangle(dx, dy) + 1024 - pSprite->ang) & 2047) - 1024; int eyeAboveZ = (pDudeInfo->eyeHeight * pSprite->yrepeat) << 2; @@ -958,7 +958,7 @@ int checkAttackState(spritetype* pSprite, XSPRITE* pXSprite) { ///// For gen dude int getGenDudeMoveSpeed(spritetype* pSprite,int which, bool mul, bool shift) { - DUDEINFO* pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type); XSPRITE* pXSprite = &xsprite[pSprite->extra]; int speed = -1; int step = 2500; int maxSpeed = 146603; switch(which){ @@ -992,7 +992,7 @@ int getGenDudeMoveSpeed(spritetype* pSprite,int which, bool mul, bool shift) { } void aiGenDudeMoveForward(spritetype* pSprite, XSPRITE* pXSprite ) { - DUDEINFO* pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type); GENDUDEEXTRA* pExtra = &gGenDudeExtra[pSprite->index]; int maxTurn = pDudeInfo->angSpeed * 4 >> 4; @@ -1294,7 +1294,7 @@ void scaleDamage(XSPRITE* pXSprite) { short weaponType = gGenDudeExtra[sprite[pXSprite->reference].index].weaponType; unsigned short* curScale = gGenDudeExtra[sprite[pXSprite->reference].index].dmgControl; for (int i = 0; i < kDmgMax; i++) - curScale[i] = dudeInfo[kDudeModernCustom - kDudeBase].startDamage[i]; + curScale[i] = getDudeInfo(kDudeModernCustom)->startDamage[i]; // all enemies with vector weapons gets extra resistance to bullet damage if (weaponType == kGenDudeWeaponHitscan) { @@ -1305,7 +1305,7 @@ void scaleDamage(XSPRITE* pXSprite) { } else if (weaponType == kGenDudeWeaponSummon) { for (int i = 0; i < kDmgMax; i++) - curScale[i] = dudeInfo[curWeapon - kDudeBase].startDamage[i]; + curScale[i] = getDudeInfo(curWeapon)->startDamage[i]; // these does not like the explosions and burning } else if (weaponType == kGenDudeWeaponKamikaze) { @@ -1856,7 +1856,7 @@ bool genDudePrepare(spritetype* pSprite, int propId) { // check the animation int seqStartId = -1; - if (pXSprite->data2 <= 0) seqStartId = pXSprite->data2 = dudeInfo[pSprite->type - kDudeBase].seqStartID; + if (pXSprite->data2 <= 0) seqStartId = pXSprite->data2 = getDudeInfo(pSprite->type)->seqStartID; else seqStartId = pXSprite->data2; for (int i = seqStartId; i < seqStartId + kGenDudeSeqMax; i++) { @@ -1867,7 +1867,7 @@ bool genDudePrepare(spritetype* pSprite, int propId) { case kGenDudeSeqAttackThrow: case kGenDudeSeqAttackPunch: if (!gSysRes.Lookup(i, "SEQ")) { - pXSprite->data2 = dudeInfo[pSprite->type - kDudeBase].seqStartID; + pXSprite->data2 = getDudeInfo(pSprite->type)->seqStartID; viewSetSystemMessage("No SEQ animation id %d found for custom dude #%d!", i, pSprite->index); viewSetSystemMessage("SEQ base id: %d", seqStartId); } else if ((i - seqStartId) == kGenDudeSeqAttackPunch) { diff --git a/source/blood/src/aizomba.cpp b/source/blood/src/aizomba.cpp index 47802f6e5..f822b8e1d 100644 --- a/source/blood/src/aizomba.cpp +++ b/source/blood/src/aizomba.cpp @@ -83,8 +83,8 @@ static void HackSeqCallback(int, int nXSprite) int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; spritetype *pTarget = &sprite[pXSprite->target]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int tx = pXSprite->targetX-pSprite->x; int ty = pXSprite->targetY-pSprite->y; int UNUSED(nDist) = approxDist(tx, ty); @@ -114,7 +114,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -133,7 +133,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -179,7 +179,7 @@ static void thinkPonder(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; @@ -225,7 +225,7 @@ static void thinkPonder(spritetype *pSprite, XSPRITE *pXSprite) static void myThinkTarget(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); for (int p = connecthead; p >= 0; p = connectpoint2[p]) { PLAYER *pPlayer = &gPlayer[p]; diff --git a/source/blood/src/aizombf.cpp b/source/blood/src/aizombf.cpp index f677a3995..2ec3b6f6a 100644 --- a/source/blood/src/aizombf.cpp +++ b/source/blood/src/aizombf.cpp @@ -78,9 +78,9 @@ static void HackSeqCallback(int, int nXSprite) if (pSprite->type != kDudeZombieButcher) return; spritetype *pTarget = &sprite[pXSprite->target]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = (pDudeInfo->eyeHeight*pSprite->yrepeat); - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int height2 = (pDudeInfoT->eyeHeight*pTarget->yrepeat); actFireVector(pSprite, 0, 0, Cos(pSprite->ang)>>16, Sin(pSprite->ang)>>16, height-height2, VECTOR_TYPE_11); } @@ -91,8 +91,8 @@ static void PukeSeqCallback(int, int nXSprite) int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; spritetype *pTarget = &sprite[pXSprite->target]; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; - DUDEINFO *pDudeInfoT = &dudeInfo[pTarget->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); + DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); int height = (pDudeInfo->eyeHeight*pSprite->yrepeat); int height2 = (pDudeInfoT->eyeHeight*pTarget->yrepeat); int tx = pXSprite->targetX-pSprite->x; @@ -110,7 +110,7 @@ static void ThrowSeqCallback(int, int nXSprite) XSPRITE *pXSprite = &xsprite[nXSprite]; int nSprite = pXSprite->reference; spritetype *pSprite = &sprite[nSprite]; - actFireMissile(pSprite, 0, -dudeInfo[pSprite->type-kDudeBase].eyeHeight, Cos(pSprite->ang)>>16, Sin(pSprite->ang)>>16, 0, kMissileButcherKnife); + actFireMissile(pSprite, 0, -getDudeInfo(pSprite->type)->eyeHeight, Cos(pSprite->ang)>>16, Sin(pSprite->ang)>>16, 0, kMissileButcherKnife); } static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) @@ -122,7 +122,7 @@ static void thinkSearch(spritetype *pSprite, XSPRITE *pXSprite) static void thinkGoto(spritetype *pSprite, XSPRITE *pXSprite) { dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int dx = pXSprite->targetX-pSprite->x; int dy = pXSprite->targetY-pSprite->y; int nAngle = getangle(dx, dy); @@ -141,7 +141,7 @@ static void thinkChase(spritetype *pSprite, XSPRITE *pXSprite) return; } dassert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); dassert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; diff --git a/source/blood/src/blood.cpp b/source/blood/src/blood.cpp index 937251eff..52c69e5e4 100644 --- a/source/blood/src/blood.cpp +++ b/source/blood/src/blood.cpp @@ -171,7 +171,7 @@ void QuitGame(void) void PrecacheDude(spritetype *pSprite) { - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); seqPrecacheId(pDudeInfo->seqStartID); seqPrecacheId(pDudeInfo->seqStartID+5); seqPrecacheId(pDudeInfo->seqStartID+1); diff --git a/source/blood/src/callback.cpp b/source/blood/src/callback.cpp index b24d1921c..1db195757 100644 --- a/source/blood/src/callback.cpp +++ b/source/blood/src/callback.cpp @@ -269,10 +269,10 @@ void Respawn(int nSprite) // 9 pSprite->y = baseSprite[nSprite].y; pSprite->z = baseSprite[nSprite].z; pSprite->cstat |= 0x1101; - pSprite->clipdist = dudeInfo[nType].clipdist; - pXSprite->health = dudeInfo[nType].startHealth<<4; - if (gSysRes.Lookup(dudeInfo[nType].seqStartID, "SEQ")) - seqSpawn(dudeInfo[nType].seqStartID, 3, pSprite->extra, -1); + pSprite->clipdist = getDudeInfo(nType+kDudeBase)->clipdist; + pXSprite->health = getDudeInfo(nType+kDudeBase)->startHealth<<4; + if (gSysRes.Lookup(getDudeInfo(nType+kDudeBase)->seqStartID, "SEQ")) + seqSpawn(getDudeInfo(nType+kDudeBase)->seqStartID, 3, pSprite->extra, -1); aiInitSprite(pSprite); pXSprite->key = 0; } else if (pSprite->type == kThingTNTBarrel) { diff --git a/source/blood/src/demo.cpp b/source/blood/src/demo.cpp index 48725b4ba..d1a22ed14 100644 --- a/source/blood/src/demo.cpp +++ b/source/blood/src/demo.cpp @@ -302,6 +302,7 @@ void CDemo::Playback(void) inputState.SetBindsEnabled(false); ready2send = 0; int v4 = 0; + totalclock = 0; gNetFifoClock = totalclock; gViewMode = 3; _DEMOPLAYBACK: @@ -309,7 +310,7 @@ _DEMOPLAYBACK: { handleevents(); D_ProcessEvents(); - while (totalclock >= gNetFifoClock && !gQuitGame) + while (((int)totalclock*16) >= gNetFifoClock && !gQuitGame) { if (!v4) { diff --git a/source/blood/src/dude.cpp b/source/blood/src/dude.cpp index 66d851163..0c82c56d0 100644 --- a/source/blood/src/dude.cpp +++ b/source/blood/src/dude.cpp @@ -1731,4 +1731,6 @@ DUDEINFO gPlayerTemplate[4] = }, }; +DUDEINFO fakeDudeInfo = {}; + END_BLD_NS diff --git a/source/blood/src/dude.h b/source/blood/src/dude.h index 0f2b9ce97..da4c728ef 100644 --- a/source/blood/src/dude.h +++ b/source/blood/src/dude.h @@ -57,5 +57,13 @@ struct DUDEINFO { extern DUDEINFO dudeInfo[kDudeMax-kDudeBase]; extern DUDEINFO gPlayerTemplate[4]; +extern DUDEINFO fakeDudeInfo; + +inline DUDEINFO *getDudeInfo(int const nType) +{ + if (nType >= kDudeBase && nType < kDudeMax) + return &dudeInfo[nType - kDudeBase]; + return &fakeDudeInfo; +} END_BLD_NS diff --git a/source/blood/src/player.cpp b/source/blood/src/player.cpp index 202d853cd..c34fd8cad 100644 --- a/source/blood/src/player.cpp +++ b/source/blood/src/player.cpp @@ -1394,7 +1394,7 @@ int ActionScan(PLAYER *pPlayer, int *a2, int *a3) { spritetype *pSprite = &sprite[*a2]; XSPRITE *pXSprite = &xsprite[*a3]; - int nMass = dudeInfo[pSprite->type-kDudeBase].mass; + int nMass = getDudeInfo(pSprite->type)->mass; if (nMass) { int t2 = divscale(0xccccc, nMass, 8); @@ -2095,7 +2095,7 @@ int playerDamageSprite(int nSource, PLAYER *pPlayer, DAMAGE_TYPE nDamageType, in XSPRITE *pXSprite = pPlayer->pXSprite; int nXSprite = pSprite->extra; int nXSector = sector[pSprite->sectnum].extra; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int nDeathSeqID = -1; int nKneelingPlayer = -1; int nSprite = pSprite->index; diff --git a/source/blood/src/triggers.cpp b/source/blood/src/triggers.cpp index 7da5f81e3..eb7e197f3 100644 --- a/source/blood/src/triggers.cpp +++ b/source/blood/src/triggers.cpp @@ -289,7 +289,7 @@ void LifeLeechOperate(spritetype *pSprite, XSPRITE *pXSprite, EVENT event) int top, bottom; GetSpriteExtents(pSprite, &top, &bottom); int nType = pTarget->type-kDudeBase; - DUDEINFO *pDudeInfo = &dudeInfo[nType]; + DUDEINFO *pDudeInfo = getDudeInfo(nType+kDudeBase); int z1 = (top-pSprite->z)-256; int x = pTarget->x; int y = pTarget->y; @@ -423,7 +423,7 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) case kDudeBurningZombieButcher: case kDudeBurningTinyCaleb: case kDudeBurningBeast: { - pXSpawn->health = dudeInfo[pXSprite->data1 - kDudeBase].startHealth << 4; + pXSpawn->health = getDudeInfo(pXSprite->data1)->startHealth << 4; pXSpawn->burnTime = 10; pXSpawn->target = -1; aiActivateDude(pSpawn, pXSpawn); @@ -1271,7 +1271,7 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) case kDudeBurningZombieButcher: case kDudeBurningTinyCaleb: case kDudeBurningBeast: { - pXSpawn->health = dudeInfo[pXSprite->data1 - kDudeBase].startHealth << 4; + pXSpawn->health = getDudeInfo(pXSprite->data1)->startHealth << 4; pXSpawn->burnTime = 10; pXSpawn->target = -1; aiActivateDude(pSpawn, pXSpawn); @@ -3759,7 +3759,7 @@ void pastePropertiesInObj(int type, int nDest, EVENT event) { spritetype* pSprite = &sprite[nDest]; XSPRITE* pXSprite = &xsprite[pSprite->extra]; spritetype* pTarget = NULL; XSPRITE* pXTarget = NULL; int receiveHp = 33 + Random(33); - DUDEINFO* pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; int matesPerEnemy = 1; + DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type); int matesPerEnemy = 1; // dude is burning? if (pXSprite->burnTime > 0 && spriRangeIsFine(pXSprite->burnSource)) { @@ -3853,7 +3853,7 @@ void pastePropertiesInObj(int type, int nDest, EVENT event) { if (pXMate->data4 > 0 && pXMate->health < pXMate->data4) actHealDude(pXMate, receiveHp, pXMate->data4); else { - DUDEINFO* pTDudeInfo = &dudeInfo[pMate->type - kDudeBase]; + DUDEINFO* pTDudeInfo = getDudeInfo(pMate->type); if (pXMate->health < pTDudeInfo->startHealth) actHealDude(pXMate, receiveHp, pTDudeInfo->startHealth); } @@ -4060,7 +4060,7 @@ void pastePropertiesInObj(int type, int nDest, EVENT event) { // the following functions required for kModernDudeTargetChanger //--------------------------------------- spritetype* getTargetInRange(spritetype* pSprite, int minDist, int maxDist, short data, short teamMode) { - DUDEINFO* pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; XSPRITE* pXSprite = &xsprite[pSprite->extra]; + DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type); XSPRITE* pXSprite = &xsprite[pSprite->extra]; spritetype* pTarget = NULL; XSPRITE* pXTarget = NULL; spritetype* cTarget = NULL; for (int nSprite = headspritestat[kStatDude]; nSprite >= 0; nSprite = nextspritestat[nSprite]) { pTarget = &sprite[nSprite]; pXTarget = &xsprite[pTarget->extra]; @@ -4366,7 +4366,7 @@ bool getDudesForTargetChg(XSPRITE* pXSprite) { void disturbDudesInSight(spritetype* pSprite, int max) { spritetype* pDude = NULL; XSPRITE* pXDude = NULL; XSPRITE* pXSprite = &xsprite[pSprite->extra]; - DUDEINFO* pDudeInfo = &dudeInfo[pSprite->type - kDudeBase]; + DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type); for (int nSprite = headspritestat[kStatDude]; nSprite >= 0; nSprite = nextspritestat[nSprite]) { pDude = &sprite[nSprite]; if (pDude->xvel == pSprite->xvel || !IsDudeSprite(pDude) || pDude->extra < 0) diff --git a/source/blood/src/view.cpp b/source/blood/src/view.cpp index 12daf066a..b7a8ffcf6 100644 --- a/source/blood/src/view.cpp +++ b/source/blood/src/view.cpp @@ -3091,7 +3091,7 @@ void viewDrawScreen(bool sceneonly) if (gViewMode == 3 || gViewMode == 4 || gOverlayMap) { - DoSectorLighting(); + //DoSectorLighting(); } if (gViewMode == 3 || gOverlayMap) { diff --git a/source/blood/src/weapon.cpp b/source/blood/src/weapon.cpp index b0cd69514..83fe9d90a 100644 --- a/source/blood/src/weapon.cpp +++ b/source/blood/src/weapon.cpp @@ -373,7 +373,7 @@ void UpdateAimVector(PLAYER * pPlayer) int nDist2 = ksqrt(dx*dx+dy*dy+dz*dz); if (nDist2 >= nClosest) continue; - DUDEINFO *pDudeInfo = &dudeInfo[pSprite->type-kDudeBase]; + DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int center = (pSprite->yrepeat*pDudeInfo->aimHeight)<<2; int dzCenter = (z2-center)-z; if (cansee(x, y, z, pPSprite->sectnum, x2, y2, z2, pSprite->sectnum))