diff --git a/source/blood/src/actor.cpp b/source/blood/src/actor.cpp index a6889f6a8..a509e5a9c 100644 --- a/source/blood/src/actor.cpp +++ b/source/blood/src/actor.cpp @@ -6758,71 +6758,66 @@ void actFireVector(spritetype *pShooter, int a2, int a3, int a4, int a5, int a6, sfxPlay3DSound(x, y, z, pVectorData->surfHit[nSurf].fxSnd, nSector); } -void FireballSeqCallback(int, int nXSprite) +void FireballSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; + XSPRITE* pXSprite = &actor->x(); int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype *pSprite = &actor->s(); spritetype *pFX = gFX.fxSpawn(FX_11, pSprite->sectnum, pSprite->x, pSprite->y, pSprite->z, 0); if (pFX) { int nFX = pFX->index; - xvel[nFX] = xvel[nSprite]; - yvel[nFX] = yvel[nSprite]; - zvel[nFX] = zvel[nSprite]; + xvel[nFX] = actor->xvel(); + yvel[nFX] = actor->yvel(); + zvel[nFX] = actor->zvel(); } } -void NapalmSeqCallback(int, int nXSprite) + +void NapalmSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype *pSprite = &actor->s(); spritetype *pFX = gFX.fxSpawn(FX_12, pSprite->sectnum, pSprite->x, pSprite->y, pSprite->z, 0); if (pFX) { int nFX = pFX->index; - xvel[nFX] = xvel[nSprite]; - yvel[nFX] = yvel[nSprite]; - zvel[nFX] = zvel[nSprite]; + xvel[nFX] = actor->xvel(); + yvel[nFX] = actor->yvel(); + zvel[nFX] = actor->zvel(); } } -void sub_3888C(int, int nXSprite) +void sub_3888C(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype* pSprite = &actor->s(); spritetype *pFX = gFX.fxSpawn(FX_32, pSprite->sectnum, pSprite->x, pSprite->y, pSprite->z, 0); if (pFX) { int nFX = pFX->index; - xvel[nFX] = xvel[nSprite]; - yvel[nFX] = yvel[nSprite]; - zvel[nFX] = zvel[nSprite]; + xvel[nFX] = actor->xvel(); + yvel[nFX] = actor->yvel(); + zvel[nFX] = actor->zvel(); } } -void sub_38938(int, int nXSprite) +void sub_38938(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype *pSprite = &actor->s(); spritetype *pFX = gFX.fxSpawn(FX_33, pSprite->sectnum, pSprite->x, pSprite->y, pSprite->z, 0); if (pFX) { int nFX = pFX->index; - xvel[nFX] = xvel[nSprite]; - yvel[nFX] = yvel[nSprite]; - zvel[nFX] = zvel[nSprite]; + xvel[nFX] = actor->xvel(); + yvel[nFX] = actor->yvel(); + zvel[nFX] = actor->zvel(); } } -void TreeToGibCallback(int, int nXSprite) +void TreeToGibCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype *pSprite = &actor->s(); pSprite->type = kThingObjectExplode; pXSprite->state = 1; pXSprite->data1 = 15; @@ -6833,11 +6828,10 @@ void TreeToGibCallback(int, int nXSprite) pSprite->cstat |= 257; } -void DudeToGibCallback1(int, int nXSprite) +void DudeToGibCallback1(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); pSprite->type = kThingBloodChunks; pXSprite->data1 = 8; pXSprite->data2 = 0; @@ -6851,11 +6845,10 @@ void DudeToGibCallback1(int, int nXSprite) pXSprite->state = 1; } -void DudeToGibCallback2(int, int nXSprite) +void DudeToGibCallback2(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); pSprite->type = kThingBloodChunks; pXSprite->data1 = 3; pXSprite->data2 = 0; diff --git a/source/blood/src/aibat.cpp b/source/blood/src/aibat.cpp index 5aa3b0801..70ed2d63b 100644 --- a/source/blood/src/aibat.cpp +++ b/source/blood/src/aibat.cpp @@ -72,10 +72,10 @@ AISTATE batDodgeDown = {kAiStateMove, 6, -1, 120, NULL, batMoveDodgeDown, 0, &ba AISTATE batDodgeDownRight = {kAiStateMove, 6, -1, 90, NULL, batMoveDodgeDown, 0, &batChase }; AISTATE batDodgeDownLeft = {kAiStateMove, 6, -1, 90, NULL, batMoveDodgeDown, 0, &batChase }; -void batBiteSeqCallback(int, int nXSprite) +void batBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - spritetype *pSprite = &sprite[pXSprite->reference]; + XSPRITE* pXSprite = &actor->x(); + spritetype *pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); diff --git a/source/blood/src/aibeast.cpp b/source/blood/src/aibeast.cpp index e4ccfa6ba..1341a6152 100644 --- a/source/blood/src/aibeast.cpp +++ b/source/blood/src/aibeast.cpp @@ -75,11 +75,10 @@ AISTATE beast138FB4 = { kAiStateOther, 9, -1, 120, NULL, sub_62AE0, beastThinkSw AISTATE beast138FD0 = { kAiStateOther, 9, -1, 0, NULL, sub_62D7C, beastThinkSwimChase, &beastSwimChase }; AISTATE beast138FEC = { kAiStateOther, 9, -1, 120, NULL, aiMoveTurn, NULL, &beastSwimChase }; -void SlashSeqCallback(int, int nXSprite) +void SlashSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype *pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); @@ -93,12 +92,12 @@ void SlashSeqCallback(int, int nXSprite) sfxPlay3DSound(pSprite, 9012+Random(2), -1, 0); } -void StompSeqCallback(int, int nXSprite) +void StompSeqCallback(int, DBloodActor* actor) { uint8_t vb8[(kMaxSectors+7)>>3]; - XSPRITE *pXSprite = &xsprite[nXSprite]; + XSPRITE* pXSprite = &actor->x(); int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype *pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); int x = pSprite->x; diff --git a/source/blood/src/aiboneel.cpp b/source/blood/src/aiboneel.cpp index 713e820cb..eea78ddfc 100644 --- a/source/blood/src/aiboneel.cpp +++ b/source/blood/src/aiboneel.cpp @@ -73,11 +73,10 @@ AISTATE eelDodgeDown = { kAiStateMove, 0, -1, 120, NULL, eelMoveDodgeDown, NULL, AISTATE eelDodgeDownRight = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeDown, NULL, &eelChase }; AISTATE eelDodgeDownLeft = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeDown, NULL, &eelChase }; -void eelBiteSeqCallback(int, int nXSprite) +void eelBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - auto actor = &bloodActors[pXSprite->reference]; - spritetype *pSprite = &sprite[pXSprite->reference]; + XSPRITE* pXSprite = &actor->x(); + spritetype *pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); diff --git a/source/blood/src/aiburn.cpp b/source/blood/src/aiburn.cpp index 73830d5a7..05019a471 100644 --- a/source/blood/src/aiburn.cpp +++ b/source/blood/src/aiburn.cpp @@ -85,7 +85,7 @@ AISTATE genDudeBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burn AISTATE genDudeBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, &genDudeBurnSearch }; AISTATE genDudeBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &genDudeBurnChase }; -void BurnSeqCallback(int, int) +void BurnSeqCallback(int, DBloodActor*) { } diff --git a/source/blood/src/aicaleb.cpp b/source/blood/src/aicaleb.cpp index 4aaac27fd..44e8aef59 100644 --- a/source/blood/src/aicaleb.cpp +++ b/source/blood/src/aicaleb.cpp @@ -70,13 +70,12 @@ AISTATE tinycaleb139660 = { kAiStateOther, 8, -1, 120, NULL, sub_65F44, calebThi AISTATE tinycaleb13967C = { kAiStateOther, 8, -1, 0, NULL, sub_661E0, calebThinkSwimChase, &tinycalebSwimChase }; AISTATE tinycaleb139698 = { kAiStateOther, 8, -1, 120, NULL, aiMoveTurn, NULL, &tinycalebSwimChase }; -void SeqAttackCallback(int, int nXSprite) +void SeqAttackCallback(int, DBloodActor* actor) { - int nSprite = xsprite[nXSprite].reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype *pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); - int dz = gDudeSlope[nXSprite]; + int dz = actor->dudeSlope(); dx += Random2(1500); dy += Random2(1500); dz += Random2(1500); diff --git a/source/blood/src/aicerber.cpp b/source/blood/src/aicerber.cpp index 4c7b0bbf1..3f14fda65 100644 --- a/source/blood/src/aicerber.cpp +++ b/source/blood/src/aicerber.cpp @@ -68,11 +68,10 @@ AISTATE cerberus4Burn = { kAiStateChase, 6, nCerberusBurnClient2, 60, NULL, NULL AISTATE cerberus139890 = { kAiStateOther, 7, -1, 120, NULL, aiMoveTurn, NULL, &cerberusChase }; AISTATE cerberus1398AC = { kAiStateOther, 7, -1, 120, NULL, aiMoveTurn, NULL, &cerberusChase }; -void cerberusBiteSeqCallback(int, int nXSprite) +void cerberusBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype *pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); ///assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); @@ -92,11 +91,10 @@ void cerberusBiteSeqCallback(int, int nXSprite) actFireVector(pSprite, 0, 0, dx, dy, dz, VECTOR_TYPE_14); } -void cerberusBurnSeqCallback(int, int nXSprite) +void cerberusBurnSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = pDudeInfo->eyeHeight*pSprite->yrepeat; ///assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); @@ -111,7 +109,7 @@ void cerberusBurnSeqCallback(int, int nXSprite) Aim aim; aim.dx = CosScale16(pSprite->ang); aim.dy = SinScale16(pSprite->ang); - aim.dz = gDudeSlope[nXSprite]; + aim.dz = actor->dudeSlope(); int nClosest = 0x7fffffff; int nSprite2; StatIterator it(kStatDude); @@ -135,7 +133,7 @@ void cerberusBurnSeqCallback(int, int nXSprite) } int tx = x+mulscale30(Cos(pSprite->ang), nDist); int ty = y+mulscale30(Sin(pSprite->ang), nDist); - int tz = z+mulscale(gDudeSlope[nXSprite], nDist, 10); + int tz = z+mulscale(actor->dudeSlope(), nDist, 10); int tsr = mulscale(9460, nDist, 10); int top, bottom; GetSpriteExtents(pSprite2, &top, &bottom); @@ -175,11 +173,10 @@ void cerberusBurnSeqCallback(int, int nXSprite) } } -void cerberusBurnSeqCallback2(int, int nXSprite) +void cerberusBurnSeqCallback2(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); ///assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { Printf(PRINT_HIGH, "pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); @@ -196,7 +193,7 @@ void cerberusBurnSeqCallback2(int, int nXSprite) int ax, ay, az; aim.dx = ax = CosScale16(pSprite->ang); aim.dy = ay = SinScale16(pSprite->ang); - aim.dz = gDudeSlope[nXSprite]; + aim.dz = actor->dudeSlope(); az = 0; int nClosest = 0x7fffffff; int nSprite2; @@ -221,7 +218,7 @@ void cerberusBurnSeqCallback2(int, int nXSprite) } int tx = x+mulscale30(Cos(pSprite->ang), nDist); int ty = y+mulscale30(Sin(pSprite->ang), nDist); - int tz = z+mulscale(gDudeSlope[nXSprite], nDist, 10); + int tz = z+mulscale(actor->dudeSlope(), nDist, 10); int tsr = mulscale(9460, nDist, 10); int top, bottom; GetSpriteExtents(pSprite2, &top, &bottom); diff --git a/source/blood/src/aicult.cpp b/source/blood/src/aicult.cpp index ebf862b3f..38d0c3e05 100644 --- a/source/blood/src/aicult.cpp +++ b/source/blood/src/aicult.cpp @@ -87,14 +87,13 @@ AISTATE cultistTSwimFire = { kAiStateChase, 8, nTommyClient, 0, NULL, aiMoveTurn AISTATE cultistTsSwimFire = { kAiStateChase, 8, nTeslaClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistTsSwimFire }; AISTATE cultistSwimRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &cultistSwimDodge }; -void TommySeqCallback(int, int nXSprite) +void TommySeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); - int dz = gDudeSlope[nXSprite]; + int dz = actor->dudeSlope(); dx += Random3((5-gGameOptions.nDifficulty)*1000); dy += Random3((5-gGameOptions.nDifficulty)*1000); dz += Random3((5-gGameOptions.nDifficulty)*500); @@ -102,16 +101,15 @@ void TommySeqCallback(int, int nXSprite) sfxPlay3DSound(pSprite, 4001, -1, 0); } -void TeslaSeqCallback(int, int nXSprite) +void TeslaSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); if (Chance(dword_138BB0[gGameOptions.nDifficulty])) { int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); - int dz = gDudeSlope[nXSprite]; + int dz = actor->dudeSlope(); dx += Random3((5-gGameOptions.nDifficulty)*1000); dy += Random3((5-gGameOptions.nDifficulty)*1000); dz += Random3((5-gGameOptions.nDifficulty)*500); @@ -120,14 +118,13 @@ void TeslaSeqCallback(int, int nXSprite) } } -void ShotSeqCallback(int, int nXSprite) +void ShotSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); - int dz = gDudeSlope[nXSprite]; + int dz = actor->dudeSlope(); dx += Random2((5-gGameOptions.nDifficulty)*1000-500); dy += Random2((5-gGameOptions.nDifficulty)*1000-500); dz += Random2((5-gGameOptions.nDifficulty)*500); @@ -144,11 +141,10 @@ void ShotSeqCallback(int, int nXSprite) sfxPlay3DSound(pSprite, 1002, -1, 0); } -void cultThrowSeqCallback(int, int nXSprite) +void cultThrowSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int nMissile = kThingArmedTNTStick; if (gGameOptions.nDifficulty > 2) nMissile = kThingArmedTNTBundle; @@ -171,24 +167,22 @@ void cultThrowSeqCallback(int, int nXSprite) evPost(pMissile->index, 3, 120*(1+Random(2)), kCmdOn); } -void sub_68170(int, int nXSprite) +void sub_68170(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int nMissile = kThingArmedTNTStick; if (gGameOptions.nDifficulty > 2) nMissile = kThingArmedTNTBundle; sfxPlay3DSound(pSprite, 455, -1, 0); - spritetype *pMissile = actFireThing(pSprite, 0, 0, gDudeSlope[nXSprite]-9460, nMissile, 0x133333); + spritetype* pMissile = actFireThing(pSprite, 0, 0, actor->dudeSlope() - 9460, nMissile, 0x133333); evPost(pMissile->index, 3, 120*(2+Random(2)), kCmdOn); } -void sub_68230(int, int nXSprite) +void sub_68230(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int nMissile = kThingArmedTNTStick; if (gGameOptions.nDifficulty > 2) nMissile = kThingArmedTNTBundle; diff --git a/source/blood/src/aigarg.cpp b/source/blood/src/aigarg.cpp index de69f6baf..15266d0c4 100644 --- a/source/blood/src/aigarg.cpp +++ b/source/blood/src/aigarg.cpp @@ -92,11 +92,10 @@ static void playStatueBreakSnd(DBloodActor* actor) { aiPlay3DSound(pSprite, 313, AI_SFX_PRIORITY_1, -1); } -void SlashFSeqCallback(int, int nXSprite) +void SlashFSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); @@ -114,18 +113,17 @@ void SlashFSeqCallback(int, int nXSprite) actFireVector(pSprite, 0, 0, dx-r2, dy+r1, dz, VECTOR_TYPE_13); } -void ThrowFSeqCallback(int, int nXSprite) +void ThrowFSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - actFireThing(&sprite[nSprite], 0, 0, gDudeSlope[nXSprite]-7500, kThingBone, 0xeeeee); + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); + actFireThing(&actor->s(), 0, 0, actor->dudeSlope()-7500, kThingBone, 0xeeeee); } -void BlastSSeqCallback(int, int nXSprite) +void BlastSSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); wrand(); // ??? spritetype *pTarget = &sprite[pXSprite->target]; int height = (pSprite->yrepeat*getDudeInfo(pSprite->type)->eyeHeight) << 2; @@ -138,7 +136,7 @@ void BlastSSeqCallback(int, int nXSprite) Aim aim; aim.dx = CosScale16(pSprite->ang); aim.dy = SinScale16(pSprite->ang); - aim.dz = gDudeSlope[nXSprite]; + aim.dz = actor->dudeSlope(); int nClosest = 0x7fffffff; int nSprite2; StatIterator it(kStatDude); @@ -162,7 +160,7 @@ void BlastSSeqCallback(int, int nXSprite) } int tx = x+mulscale30(Cos(pSprite->ang), nDist); int ty = y+mulscale30(Sin(pSprite->ang), nDist); - int tz = z+mulscale(gDudeSlope[nXSprite], nDist, 10); + int tz = z+mulscale(actor->dudeSlope(), nDist, 10); int tsr = mulscale(9460, nDist, 10); int top, bottom; GetSpriteExtents(pSprite2, &top, &bottom); @@ -216,12 +214,10 @@ void BlastSSeqCallback(int, int nXSprite) } -void ThrowSSeqCallback(int, int nXSprite) +void ThrowSSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; - actFireThing(pSprite, 0, 0, gDudeSlope[nXSprite]-7500, kThingBone, Chance(0x6000) ? 0x133333 : 0x111111); + spritetype* pSprite = &actor->s(); + actFireThing(pSprite, 0, 0, actor->dudeSlope() - 7500, kThingBone, Chance(0x6000) ? 0x133333 : 0x111111); } static void gargThinkTarget(DBloodActor* actor) diff --git a/source/blood/src/aighost.cpp b/source/blood/src/aighost.cpp index 1e312002b..5f28b72ed 100644 --- a/source/blood/src/aighost.cpp +++ b/source/blood/src/aighost.cpp @@ -76,11 +76,10 @@ AISTATE ghostDodgeDown = { kAiStateMove, 0, -1, 120, NULL, ghostMoveDodgeDown, N AISTATE ghostDodgeDownRight = { kAiStateMove, 0, -1, 90, NULL, ghostMoveDodgeDown, NULL, &ghostChase }; AISTATE ghostDodgeDownLeft = { kAiStateMove, 0, -1, 90, NULL, ghostMoveDodgeDown, NULL, &ghostChase }; -void ghostSlashSeqCallback(int, int nXSprite) +void ghostSlashSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); @@ -99,18 +98,15 @@ void ghostSlashSeqCallback(int, int nXSprite) actFireVector(pSprite, 0, 0, dx-r2, dy+r1, dz, VECTOR_TYPE_12); } -void ghostThrowSeqCallback(int, int nXSprite) +void ghostThrowSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - actFireThing(&sprite[nSprite], 0, 0, gDudeSlope[nXSprite]-7500, kThingBone, 0xeeeee); + actFireThing(&actor->s(), 0, 0, actor->dudeSlope() - 7500, kThingBone, 0xeeeee); } -void ghostBlastSeqCallback(int, int nXSprite) +void ghostBlastSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); wrand(); // ??? spritetype *pTarget = &sprite[pXSprite->target]; int height = (pSprite->yrepeat*getDudeInfo(pSprite->type)->eyeHeight) << 2; @@ -123,7 +119,7 @@ void ghostBlastSeqCallback(int, int nXSprite) Aim aim; aim.dx = CosScale16(pSprite->ang); aim.dy = SinScale16(pSprite->ang); - aim.dz = gDudeSlope[nXSprite]; + aim.dz = actor->dudeSlope(); int nClosest = 0x7fffffff; int nSprite2; StatIterator it(kStatDude); @@ -147,7 +143,7 @@ void ghostBlastSeqCallback(int, int nXSprite) } int tx = x+mulscale30(Cos(pSprite->ang), nDist); int ty = y+mulscale30(Sin(pSprite->ang), nDist); - int tz = z+mulscale(gDudeSlope[nXSprite], nDist, 10); + int tz = z+mulscale(actor->dudeSlope(), nDist, 10); int tsr = mulscale(9460, nDist, 10); int top, bottom; GetSpriteExtents(pSprite2, &top, &bottom); diff --git a/source/blood/src/aigilbst.cpp b/source/blood/src/aigilbst.cpp index 78b8b966e..318c1b510 100644 --- a/source/blood/src/aigilbst.cpp +++ b/source/blood/src/aigilbst.cpp @@ -71,11 +71,10 @@ AISTATE gillBeast13A138 = { kAiStateOther, 10, -1, 120, NULL, sub_6CD74, gillThi AISTATE gillBeast13A154 = { kAiStateOther, 10, -1, 0, NULL, sub_6D03C, gillThinkSwimChase, &gillBeastSwimChase }; AISTATE gillBeast13A170 = { kAiStateOther, 10, -1, 120, NULL, NULL, aiMoveTurn, &gillBeastSwimChase }; -void GillBiteSeqCallback(int, int nXSprite) +void GillBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); diff --git a/source/blood/src/aihand.cpp b/source/blood/src/aihand.cpp index afcd1064c..6301bd004 100644 --- a/source/blood/src/aihand.cpp +++ b/source/blood/src/aihand.cpp @@ -55,11 +55,10 @@ AISTATE handRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &handSearch } AISTATE handGoto = { kAiStateMove, 6, -1, 1800, NULL, aiMoveForward, handThinkGoto, &handIdle }; AISTATE handJump = { kAiStateChase, 7, nJumpClient, 120, NULL, NULL, NULL, &handChase }; -void HandJumpSeqCallback(int, int nXSprite) +void HandJumpSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; if (IsPlayerSprite(pTarget)) { diff --git a/source/blood/src/aihound.cpp b/source/blood/src/aihound.cpp index 10b7cfaac..d202c01b3 100644 --- a/source/blood/src/aihound.cpp +++ b/source/blood/src/aihound.cpp @@ -58,11 +58,10 @@ AISTATE houndGoto = { kAiStateMove, 8, -1, 600, NULL, aiMoveForward, houndThinkG AISTATE houndBite = { kAiStateChase, 6, nHoundBiteClient, 60, NULL, NULL, NULL, &houndChase }; AISTATE houndBurn = { kAiStateChase, 7, nHoundBurnClient, 60, NULL, NULL, NULL, &houndChase }; -void houndBiteSeqCallback(int, int nXSprite) +void houndBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); ///assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); @@ -86,11 +85,9 @@ void houndBiteSeqCallback(int, int nXSprite) #endif } -void houndBurnSeqCallback(int, int nXSprite) +void houndBurnSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype* pSprite = &actor->s(); actFireMissile(pSprite, 0, 0, CosScale16(pSprite->ang), SinScale16(pSprite->ang), 0, kMissileFlameHound); } diff --git a/source/blood/src/aipod.cpp b/source/blood/src/aipod.cpp index 072286ae0..8eaf871be 100644 --- a/source/blood/src/aipod.cpp +++ b/source/blood/src/aipod.cpp @@ -66,25 +66,20 @@ AISTATE tentacleStartChase = { kAiStateOther, 6, nTentacleStartSearchClient, 120 AISTATE tentacleRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &tentacleChase }; AISTATE tentacleChase = { kAiStateChase, 6, -1, 0, NULL, aiMoveTurn, aiPodChase, NULL }; -void sub_6FF08(int, int nXSprite) +void sub_6FF08(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - sfxPlay3DSound(&sprite[nSprite], 2503, -1, 0); + sfxPlay3DSound(&actor->s(), 2503, -1, 0); } -void sub_6FF54(int, int nXSprite) +void sub_6FF54(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - sfxPlay3DSound(&sprite[nSprite], 2500, -1, 0); + sfxPlay3DSound(&actor->s(), 2500, -1, 0); } -void podAttack(int, int nXSprite) +void podAttack(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); ///assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { Printf(PRINT_HIGH, "pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); @@ -137,11 +132,10 @@ void podAttack(int, int nXSprite) sub_746D4(pSprite, 240); } -void sub_70284(int, int nXSprite) +void sub_70284(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); sfxPlay3DSound(pSprite, 2502, -1, 0); int nDist, nBurn; DAMAGE_TYPE dmgType; @@ -158,7 +152,7 @@ void sub_70284(int, int nXSprite) nDist = 75; break; } - sub_2A620(nSprite, pSprite->x, pSprite->y, pSprite->z, pSprite->sectnum, nDist, 1, 5*(1+gGameOptions.nDifficulty), dmgType, 2, nBurn, 0, 0); + sub_2A620(pSprite->index, pSprite->x, pSprite->y, pSprite->z, pSprite->sectnum, nDist, 1, 5*(1+gGameOptions.nDifficulty), dmgType, 2, nBurn, 0, 0); } static void aiPodSearch(DBloodActor* actor) diff --git a/source/blood/src/airat.cpp b/source/blood/src/airat.cpp index c73418ae9..443d8d70d 100644 --- a/source/blood/src/airat.cpp +++ b/source/blood/src/airat.cpp @@ -55,11 +55,10 @@ AISTATE ratRecoil = { kAiStateRecoil, 7, -1, 0, NULL, NULL, NULL, &ratDodge }; AISTATE ratGoto = { kAiStateMove, 7, -1, 600, NULL, aiMoveForward, ratThinkGoto, &ratIdle }; AISTATE ratBite = { kAiStateChase, 6, nRatBiteClient, 120, NULL, NULL, NULL, &ratChase }; -void ratBiteSeqCallback(int, int nXSprite) +void ratBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); diff --git a/source/blood/src/aispid.cpp b/source/blood/src/aispid.cpp index fd9eb4671..672d6aaa2 100644 --- a/source/blood/src/aispid.cpp +++ b/source/blood/src/aispid.cpp @@ -80,11 +80,10 @@ static char sub_70D30(XSPRITE *pXDude, int a2, int a3) return 0; } -void SpidBiteSeqCallback(int, int nXSprite) +void SpidBiteSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); dx += Random2(2000); @@ -130,11 +129,10 @@ void SpidBiteSeqCallback(int, int nXSprite) } } -void SpidJumpSeqCallback(int, int nXSprite) +void SpidJumpSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); int dx = CosScale16(pSprite->ang); int dy = SinScale16(pSprite->ang); dx += Random2(200); @@ -149,19 +147,18 @@ void SpidJumpSeqCallback(int, int nXSprite) case kDudeSpiderBrown: case kDudeSpiderRed: case kDudeSpiderBlack: - xvel[nSprite] = IntToFixed(dx); - yvel[nSprite] = IntToFixed(dy); - zvel[nSprite] = IntToFixed(dz); + actor->xvel() = IntToFixed(dx); + actor->yvel() = IntToFixed(dy); + actor->zvel() = IntToFixed(dz); break; } } } -void sub_71370(int, int nXSprite) +void sub_71370(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax); DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); @@ -184,7 +181,7 @@ void sub_71370(int, int nXSprite) if (pSpawn) { pDudeExtraE->xval2++; - pSpawn->owner = nSprite; + pSpawn->owner = pSprite->index; gKillMgr.AddNewKill(1); } } diff --git a/source/blood/src/aitchern.cpp b/source/blood/src/aitchern.cpp index 76e8a5e01..a67e25fd1 100644 --- a/source/blood/src/aitchern.cpp +++ b/source/blood/src/aitchern.cpp @@ -60,16 +60,14 @@ AISTATE tcherno13A9F0 = { kAiStateChase, 6, dword_279B58, 60, NULL, NULL, NULL, AISTATE tcherno13AA0C = { kAiStateChase, 7, dword_279B5C, 60, NULL, NULL, NULL, &tchernobogChase }; AISTATE tcherno13AA28 = { kAiStateChase, 8, -1, 60, NULL, aiMoveTurn, NULL, &tchernobogChase }; -void sub_71A90(int, int nXSprite) +void sub_71A90(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - auto actor = &bloodActors[pXSprite->reference]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; XSPRITE *pXTarget = &xsprite[pTarget->extra]; int nTarget = pTarget->index; - int nOwner = actSpriteIdToOwnerId(nSprite); + int nOwner = actSpriteIdToOwnerId(pSprite->index); if (pXTarget->burnTime == 0) evPost(nTarget, 3, 0, kCallbackFXFlameLick); actBurnSprite(nOwner, pXTarget, 40); @@ -77,11 +75,10 @@ void sub_71A90(int, int nXSprite) aiNewState(actor, &tcherno13A9D4); } -void sub_71BD4(int, int nXSprite) +void sub_71BD4(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); int height = pSprite->yrepeat*pDudeInfo->eyeHeight; ///assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); @@ -96,7 +93,7 @@ void sub_71BD4(int, int nXSprite) Aim aim; aim.dx = CosScale16(pSprite->ang); aim.dy = SinScale16(pSprite->ang); - aim.dz = gDudeSlope[nXSprite]; + aim.dz = actor->dudeSlope(); int nClosest = 0x7fffffff; int nSprite2; StatIterator it(kStatDude); @@ -120,7 +117,7 @@ void sub_71BD4(int, int nXSprite) } int tx = x+mulscale30(Cos(pSprite->ang), nDist); int ty = y+mulscale30(Sin(pSprite->ang), nDist); - int tz = z+mulscale(gDudeSlope[nXSprite], nDist, 10); + int tz = z+mulscale(actor->dudeSlope(), nDist, 10); int tsr = mulscale(9460, nDist, 10); int top, bottom; GetSpriteExtents(pSprite2, &top, &bottom); @@ -153,11 +150,10 @@ void sub_71BD4(int, int nXSprite) actFireMissile(pSprite, 350, 0, aim.dx, aim.dy, aim.dz, kMissileFireballTchernobog); } -void sub_720AC(int, int nXSprite) +void sub_720AC(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); ///assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) { Printf(PRINT_HIGH, "pXSprite->target >= 0 && pXSprite->target < kMaxSprites"); @@ -175,7 +171,7 @@ void sub_720AC(int, int nXSprite) Aim aim; aim.dx = ax; aim.dy = ay; - aim.dz = gDudeSlope[nXSprite]; + aim.dz = actor->dudeSlope(); int nClosest = 0x7fffffff; az = 0; int nSprite2; @@ -200,7 +196,7 @@ void sub_720AC(int, int nXSprite) } int tx = x+mulscale30(Cos(pSprite->ang), nDist); int ty = y+mulscale30(Sin(pSprite->ang), nDist); - int tz = z+mulscale(gDudeSlope[nXSprite], nDist, 10); + int tz = z+mulscale(actor->dudeSlope(), nDist, 10); int tsr = mulscale(9460, nDist, 10); int top, bottom; GetSpriteExtents(pSprite2, &top, &bottom); diff --git a/source/blood/src/aiunicult.cpp b/source/blood/src/aiunicult.cpp index b9f83842b..3e91aafcc 100644 --- a/source/blood/src/aiunicult.cpp +++ b/source/blood/src/aiunicult.cpp @@ -55,7 +55,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "gib.h" BEGIN_BLD_NS -static void ThrowThing(int, bool); +static void ThrowThing(DBloodActor*, bool); static void unicultThinkSearch(DBloodActor*); static void unicultThinkGoto(DBloodActor*); static void unicultThinkChase(DBloodActor*); @@ -132,7 +132,7 @@ static void forcePunch(DBloodActor* actor) auto pXSprite = &actor->x(); auto pSprite = &actor->s(); if (gGenDudeExtra[pSprite->index].forcePunch && seqGetStatus(3, pSprite->extra) == -1) - punchCallback(0,pSprite->extra); + punchCallback(0, actor); } /*bool sameFamily(spritetype* pDude1, spritetype* pDude2) { @@ -179,12 +179,12 @@ void genDudeUpdate(spritetype* pSprite) { } } -void punchCallback(int, int nXIndex) { - XSPRITE* pXSprite = &xsprite[nXIndex]; - if (pXSprite->target != -1) { - int nSprite = pXSprite->reference; - spritetype* pSprite = &sprite[nSprite]; - +void punchCallback(int, DBloodActor* actor) +{ + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); + if (pXSprite->target != -1) + { int nZOffset1 = getDudeInfo(pSprite->type)->eyeHeight * pSprite->yrepeat << 2; int nZOffset2 = 0; @@ -203,20 +203,14 @@ void punchCallback(int, int nXIndex) { } } -void genDudeAttack1(int, int nXIndex) { - if (!(nXIndex >= 0 && nXIndex < kMaxXSprites)) { - Printf(PRINT_HIGH, "nXIndex >= 0 && nXIndex < kMaxXSprites"); - return; - } - - XSPRITE* pXSprite = &xsprite[nXIndex]; int nSprite = pXSprite->reference; - if (pXSprite->target < 0) return; - else if (!(nSprite >= 0 && nSprite < kMaxSprites)) { - Printf(PRINT_HIGH, "nIndex >= 0 && nIndex < kMaxSprites"); - return; - } +void genDudeAttack1(int, DBloodActor* actor) +{ + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); - int dx, dy, dz; spritetype* pSprite = &sprite[nSprite]; + if (pXSprite->target < 0) return; + + int dx, dy, dz; xvel[pSprite->index] = yvel[pSprite->index] = 0; GENDUDEEXTRA* pExtra = genDudeExtra(pSprite); @@ -226,7 +220,7 @@ void genDudeAttack1(int, int nXIndex) { if (pExtra->weaponType == kGenDudeWeaponHitscan) { - dx = CosScale16(pSprite->ang); dy = SinScale16(pSprite->ang); dz = gDudeSlope[nXIndex]; + dx = CosScale16(pSprite->ang); dy = SinScale16(pSprite->ang); dz = actor->dudeSlope(); // dispersal modifiers here in case if non-melee enemy if (!dudeIsMelee(pXSprite)) { dx += Random3(dispersion); dy += Random3(dispersion); dz += Random3(dispersion); @@ -241,7 +235,7 @@ void genDudeAttack1(int, int nXIndex) { spritetype* pSpawned = NULL; int dist = pSprite->clipdist << 4; if (pExtra->slaveCount <= gGameOptions.nDifficulty) { if ((pSpawned = actSpawnDude(pSprite, pExtra->curWeapon, dist + Random(dist), 0)) != NULL) { - pSpawned->owner = nSprite; + pSpawned->owner = pSprite->index; if (xspriRangeIsFine(pSpawned->extra)) { xsprite[pSpawned->extra].target = pXSprite->target; @@ -258,7 +252,7 @@ void genDudeAttack1(int, int nXIndex) { } else if (pExtra->weaponType == kGenDudeWeaponMissile) { - dx = CosScale16(pSprite->ang); dy = SinScale16(pSprite->ang); dz = gDudeSlope[nXIndex]; + dx = CosScale16(pSprite->ang); dy = SinScale16(pSprite->ang); dz = actor->dudeSlope(); // dispersal modifiers here dx += Random3(dispersion); dy += Random3(dispersion); dz += Random3(dispersion >> 1); @@ -269,16 +263,20 @@ void genDudeAttack1(int, int nXIndex) { } } -void ThrowCallback1(int, int nXIndex) { - ThrowThing(nXIndex, true); +void ThrowCallback1(int, DBloodActor* actor) +{ + ThrowThing(actor, true); } -void ThrowCallback2(int, int nXIndex) { - ThrowThing(nXIndex, false); +void ThrowCallback2(int, DBloodActor* actor) +{ + ThrowThing(actor, false); } -static void ThrowThing(int nXIndex, bool impact) { - XSPRITE* pXSprite = &xsprite[nXIndex]; spritetype* pSprite = &sprite[pXSprite->reference]; +static void ThrowThing(DBloodActor* actor, bool impact) +{ + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); if (!(pXSprite->target >= 0 && pXSprite->target < kMaxSprites)) return; diff --git a/source/blood/src/aizomba.cpp b/source/blood/src/aizomba.cpp index 43de96751..978ac688e 100644 --- a/source/blood/src/aizomba.cpp +++ b/source/blood/src/aizomba.cpp @@ -73,11 +73,10 @@ AISTATE zombie2Search = { kAiStateSearch, 8, -1, 1800, NULL, NULL, myThinkSearch AISTATE zombieSIdle = { kAiStateIdle, 10, -1, 0, NULL, NULL, aiThinkTarget, NULL }; AISTATE zombie13AC2C = { kAiStateOther, 11, nStandClient, 0, entryEZombie, NULL, NULL, &zombieAPonder }; -void HackSeqCallback(int, int nXSprite) +void HackSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); @@ -93,11 +92,9 @@ void HackSeqCallback(int, int nXSprite) actFireVector(pSprite, 0, 0, dx, dy, dz, VECTOR_TYPE_10); } -void StandSeqCallback(int, int nXSprite) +void StandSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - sfxPlay3DSound(&sprite[nSprite], 1102, -1, 0); + sfxPlay3DSound(&actor->s(), 1102, -1, 0); } static void zombaThinkSearch(DBloodActor* actor) diff --git a/source/blood/src/aizombf.cpp b/source/blood/src/aizombf.cpp index d89577bc5..f40cb1c31 100644 --- a/source/blood/src/aizombf.cpp +++ b/source/blood/src/aizombf.cpp @@ -59,15 +59,10 @@ AISTATE zombieFSearch = { kAiStateSearch, 8, -1, 1800, NULL, aiMoveForward, zomb AISTATE zombieFRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &zombieFChase }; AISTATE zombieFTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &zombieFChase }; -void zombfHackSeqCallback(int, int nXSprite) +void zombfHackSeqCallback(int, DBloodActor* actor) { - if (nXSprite <= 0 || nXSprite >= kMaxXSprites) - return; - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - if (nXSprite < 0 || nXSprite >= kMaxSprites) - return; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); if (pSprite->type != kDudeZombieButcher) return; spritetype *pTarget = &sprite[pXSprite->target]; @@ -78,11 +73,10 @@ void zombfHackSeqCallback(int, int nXSprite) actFireVector(pSprite, 0, 0, CosScale16(pSprite->ang), SinScale16(pSprite->ang), height-height2, VECTOR_TYPE_11); } -void PukeSeqCallback(int, int nXSprite) +void PukeSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); spritetype *pTarget = &sprite[pXSprite->target]; DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEINFO *pDudeInfoT = getDudeInfo(pTarget->type); @@ -97,11 +91,9 @@ void PukeSeqCallback(int, int nXSprite) actFireMissile(pSprite, 0, -(height-height2), dx, dy, 0, kMissilePukeGreen); } -void ThrowSeqCallback(int, int nXSprite) +void ThrowSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype* pSprite = &actor->s(); actFireMissile(pSprite, 0, -getDudeInfo(pSprite->type)->eyeHeight, CosScale16(pSprite->ang), SinScale16(pSprite->ang), 0, kMissileButcherKnife); } diff --git a/source/blood/src/player.cpp b/source/blood/src/player.cpp index d345a9b71..484dca4fb 100644 --- a/source/blood/src/player.cpp +++ b/source/blood/src/player.cpp @@ -47,6 +47,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "gstrings.h" #include "gamestate.h" #include "automap.h" +#include "bloodactor.h" BEGIN_BLD_NS @@ -2125,12 +2126,11 @@ void playerLandingSound(PLAYER *pPlayer) } } -void PlayerSurvive(int, int nXSprite) +void PlayerSurvive(int, DBloodActor* actor) { + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); char buffer[80]; - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; actHealDude(pXSprite, 1, 2); if (gGameOptions.nGameType > 0 && numplayers > 1) { @@ -2150,9 +2150,9 @@ void PlayerSurvive(int, int nXSprite) } } -void PlayerKneelsOver(int, int nXSprite) +void PlayerKneelsOver(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; + XSPRITE* pXSprite = &actor->x(); for (int p = connecthead; p >= 0; p = connectpoint2[p]) { if (gPlayer[p].pXSprite == pXSprite) diff --git a/source/blood/src/player.h b/source/blood/src/player.h index 6664282a6..7e575fb80 100644 --- a/source/blood/src/player.h +++ b/source/blood/src/player.h @@ -279,7 +279,6 @@ int playerDamageSprite(int nSource, PLAYER *pPlayer, DAMAGE_TYPE nDamageType, in int UseAmmo(PLAYER *pPlayer, int nAmmoType, int nDec); void voodooTarget(PLAYER *pPlayer); void playerLandingSound(PLAYER *pPlayer); -void PlayerSurvive(int, int nXSprite); -void PlayerKneelsOver(int, int nXSprite); +void PlayerSurvive(int, DBloodActor*); END_BLD_NS diff --git a/source/blood/src/seq.cpp b/source/blood/src/seq.cpp index 4ab636a83..63b02c195 100644 --- a/source/blood/src/seq.cpp +++ b/source/blood/src/seq.cpp @@ -42,6 +42,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "raze_sound.h" #include "actor.h" #include "seq.h" +#include "bloodactor.h" #include "files.h" @@ -49,7 +50,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. BEGIN_BLD_NS -static void (*seqClientCallback[])(int, int) = { +static void (*seqClientCallback[])(int, DBloodActor*) = { FireballSeqCallback, sub_38938, NapalmSeqCallback, @@ -428,8 +429,14 @@ void SEQINST::Update() UpdateMasked(index, &pSequence->frames[frameIndex]); break; } + + // all seq callbacks are for sprites, but there's no sanity checks here that what gets passed is meant to be for a sprite... if (pSequence->frames[frameIndex].trigger && callback != -1) - seqClientCallback[callback](type, index); + { + assert(type == 3); + seqClientCallback[callback](type, &bloodActors[xsprite[index].reference]); + } + } //--------------------------------------------------------------------------- diff --git a/source/blood/src/seqcb.h b/source/blood/src/seqcb.h index 5319107cb..62e5c9987 100644 --- a/source/blood/src/seqcb.h +++ b/source/blood/src/seqcb.h @@ -2,64 +2,65 @@ BEGIN_BLD_NS -void FireballSeqCallback(int, int); -void sub_38938(int, int); -void NapalmSeqCallback(int, int); -void sub_3888C(int, int); -void TreeToGibCallback(int, int); -void DudeToGibCallback1(int, int); -void DudeToGibCallback2(int, int); -void batBiteSeqCallback(int, int); -void SlashSeqCallback(int, int); -void StompSeqCallback(int, int); -void eelBiteSeqCallback(int, int); -void BurnSeqCallback(int, int); -void SeqAttackCallback(int, int); -void cerberusBiteSeqCallback(int, int); -void cerberusBurnSeqCallback(int, int); -void cerberusBurnSeqCallback2(int, int); -void TommySeqCallback(int, int); -void TeslaSeqCallback(int, int); -void ShotSeqCallback(int, int); -void cultThrowSeqCallback(int, int); -void sub_68170(int, int); -void sub_68230(int, int); -void SlashFSeqCallback(int, int); -void ThrowFSeqCallback(int, int); -void BlastSSeqCallback(int, int); -void ThrowSSeqCallback(int, int); -void ghostSlashSeqCallback(int, int); -void ghostThrowSeqCallback(int, int); -void ghostBlastSeqCallback(int, int); -void GillBiteSeqCallback(int, int); -void HandJumpSeqCallback(int, int); -void houndBiteSeqCallback(int, int); -void houndBurnSeqCallback(int, int); -void sub_6FF08(int, int); -void sub_6FF54(int, int); -void podAttack(int, int); -void sub_70284(int, int); -void ratBiteSeqCallback(int, int); -void SpidBiteSeqCallback(int, int); -void SpidJumpSeqCallback(int, int); -void sub_71370(int, int); -void sub_71A90(int, int); -void sub_71BD4(int, int); -void sub_720AC(int, int); -void genDudeAttack1(int, int); -void punchCallback(int, int); -void ThrowCallback1(int, int); -void ThrowCallback2(int, int); -void HackSeqCallback(int, int); -void StandSeqCallback(int, int); -void zombfHackSeqCallback(int, int); -void PukeSeqCallback(int, int); -void ThrowSeqCallback(int, int); -void PlayerSurvive(int, int); -void PlayerKneelsOver(int, int); -void FireballTrapSeqCallback(int, int); -void MGunFireSeqCallback(int, int); -void MGunOpenSeqCallback(int, int); +class DBloodActor; +void FireballSeqCallback(int, DBloodActor*); +void sub_38938(int, DBloodActor*); +void NapalmSeqCallback(int, DBloodActor*); +void sub_3888C(int, DBloodActor*); +void TreeToGibCallback(int, DBloodActor*); +void DudeToGibCallback1(int, DBloodActor*); +void DudeToGibCallback2(int, DBloodActor*); +void batBiteSeqCallback(int, DBloodActor*); +void SlashSeqCallback(int, DBloodActor*); +void StompSeqCallback(int, DBloodActor*); +void eelBiteSeqCallback(int, DBloodActor*); +void BurnSeqCallback(int, DBloodActor*); +void SeqAttackCallback(int, DBloodActor*); +void cerberusBiteSeqCallback(int, DBloodActor*); +void cerberusBurnSeqCallback(int, DBloodActor*); +void cerberusBurnSeqCallback2(int, DBloodActor*); +void TommySeqCallback(int, DBloodActor*); +void TeslaSeqCallback(int, DBloodActor*); +void ShotSeqCallback(int, DBloodActor*); +void cultThrowSeqCallback(int, DBloodActor*); +void sub_68170(int, DBloodActor*); +void sub_68230(int, DBloodActor*); +void SlashFSeqCallback(int, DBloodActor*); +void ThrowFSeqCallback(int, DBloodActor*); +void BlastSSeqCallback(int, DBloodActor*); +void ThrowSSeqCallback(int, DBloodActor*); +void ghostSlashSeqCallback(int, DBloodActor*); +void ghostThrowSeqCallback(int, DBloodActor*); +void ghostBlastSeqCallback(int, DBloodActor*); +void GillBiteSeqCallback(int, DBloodActor*); +void HandJumpSeqCallback(int, DBloodActor*); +void houndBiteSeqCallback(int, DBloodActor*); +void houndBurnSeqCallback(int, DBloodActor*); +void sub_6FF08(int, DBloodActor*); +void sub_6FF54(int, DBloodActor*); +void podAttack(int, DBloodActor*); +void sub_70284(int, DBloodActor*); +void ratBiteSeqCallback(int, DBloodActor*); +void SpidBiteSeqCallback(int, DBloodActor*); +void SpidJumpSeqCallback(int, DBloodActor*); +void sub_71370(int, DBloodActor*); +void sub_71A90(int, DBloodActor*); +void sub_71BD4(int, DBloodActor*); +void sub_720AC(int, DBloodActor*); +void genDudeAttack1(int, DBloodActor*); +void punchCallback(int, DBloodActor*); +void ThrowCallback1(int, DBloodActor*); +void ThrowCallback2(int, DBloodActor*); +void HackSeqCallback(int, DBloodActor*); +void StandSeqCallback(int, DBloodActor*); +void zombfHackSeqCallback(int, DBloodActor*); +void PukeSeqCallback(int, DBloodActor*); +void ThrowSeqCallback(int, DBloodActor*); +void PlayerSurvive(int, DBloodActor*); +void PlayerKneelsOver(int, DBloodActor*); +void FireballTrapSeqCallback(int, DBloodActor*); +void MGunFireSeqCallback(int, DBloodActor*); +void MGunOpenSeqCallback(int, DBloodActor*); enum { diff --git a/source/blood/src/triggers.cpp b/source/blood/src/triggers.cpp index b5d41792b..055a049d5 100644 --- a/source/blood/src/triggers.cpp +++ b/source/blood/src/triggers.cpp @@ -2259,7 +2259,7 @@ void ActivateGenerator(int nSprite) case kGenMissileFireball: switch (pXSprite->data2) { case 0: - FireballTrapSeqCallback(3, nXSprite); + FireballTrapSeqCallback(3, &bloodActors[nSprite]); break; case 1: seqSpawn(35, 3, nXSprite, nFireballTrapClient); @@ -2281,11 +2281,9 @@ void ActivateGenerator(int nSprite) } } -void FireballTrapSeqCallback(int, int nXSprite) +void FireballTrapSeqCallback(int, DBloodActor* actor) { - XSPRITE *pXSprite = &xsprite[nXSprite]; - int nSprite = pXSprite->reference; - spritetype *pSprite = &sprite[nSprite]; + spritetype* pSprite = &actor->s(); if (pSprite->cstat&32) actFireMissile(pSprite, 0, 0, 0, 0, (pSprite->cstat&8) ? 0x4000 : -0x4000, kMissileFireball); else @@ -2293,18 +2291,17 @@ void FireballTrapSeqCallback(int, int nXSprite) } -void MGunFireSeqCallback(int, int nXSprite) +void MGunFireSeqCallback(int, DBloodActor* actor) { - int nSprite = xsprite[nXSprite].reference; - spritetype *pSprite = &sprite[nSprite]; - XSPRITE *pXSprite = &xsprite[nXSprite]; + XSPRITE* pXSprite = &actor->x(); + spritetype* pSprite = &actor->s(); if (pXSprite->data2 > 0 || pXSprite->data1 == 0) { if (pXSprite->data2 > 0) { pXSprite->data2--; if (pXSprite->data2 == 0) - evPost(nSprite, 3, 1, kCmdOff); + evPost(pXSprite->reference, 3, 1, kCmdOff); } int dx = CosScale16(pSprite->ang)+Random2(1000); int dy = SinScale16(pSprite->ang)+Random2(1000); @@ -2314,9 +2311,9 @@ void MGunFireSeqCallback(int, int nXSprite) } } -void MGunOpenSeqCallback(int, int nXSprite) +void MGunOpenSeqCallback(int, DBloodActor* actor) { - seqSpawn(39, 3, nXSprite, nMGunFireClient); + seqSpawn(39, 3, actor->s().extra, nMGunFireClient); }