diff --git a/source/games/blood/src/eventq.cpp b/source/games/blood/src/eventq.cpp index 63dd60a0b..c172a1c41 100644 --- a/source/games/blood/src/eventq.cpp +++ b/source/games/blood/src/eventq.cpp @@ -551,6 +551,12 @@ void evPostSector(int index, unsigned int nDelta, CALLBACK_ID callback) evPost_(index, OBJ_SECTOR, nDelta, callback); } +void evPostWall(int index, unsigned int nDelta, COMMAND_ID command) +{ + evPost_(index, OBJ_WALL, nDelta, command); +} + + //--------------------------------------------------------------------------- // // @@ -585,6 +591,17 @@ void evKillActor(DBloodActor* actor, CALLBACK_ID cb) evKill_(actor->s().index, 3, cb); } +void evKillWall(int wal) +{ + evKill_(wal, OBJ_WALL); +} + +void evKillSector(int sec) +{ + evKill_(sec, OBJ_SECTOR); +} + + //--------------------------------------------------------------------------- // // diff --git a/source/games/blood/src/eventq.h b/source/games/blood/src/eventq.h index 09fed2f02..ffd2dadc8 100644 --- a/source/games/blood/src/eventq.h +++ b/source/games/blood/src/eventq.h @@ -150,7 +150,7 @@ inline bool channelRangeIsFine(int channel) { struct EVENT { DBloodActor* actor; - int16_t index_; + int index_; int8_t type; int8_t cmd; int16_t funcID; diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index aa5e35287..cc7bbbe89 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -1309,7 +1309,7 @@ void nnExtProcessSuperSprites() { pXDebris->goalAng = getangle(xvel[idx], yvel[idx]) & 2047; int ang = pDebris->ang & 2047; - if ((uwater = spriteIsUnderwater(debrisactor)) == false) evKill_(idx, 3, kCallbackEnemeyBubble); + if ((uwater = spriteIsUnderwater(debrisactor)) == false) evKillActor(debrisactor, kCallbackEnemeyBubble); else if (Chance(0x1000 - mass)) { if (zvel[idx] > 0x100) debrisBubble(idx); @@ -1532,7 +1532,7 @@ void debrisBubble(int nSprite) } if (Chance(0x2000)) - evPost_(nSprite, 3, 0, kCallbackEnemeyBubble); + evPostActor(&bloodActors[nSprite], 0, kCallbackEnemeyBubble); } void debrisMove(int listIndex) @@ -1652,12 +1652,12 @@ void debrisMove(int listIndex) int pitch = (150000 - (actor->spriteMass.mass << 9)) + Random3(8192); sfxPlay3DSoundCP(pSprite, 720, -1, 0, pitch, 75 - Random(40)); if (!spriteIsUnderwater(actor)) { - evKill_(pSprite->index, 3, kCallbackEnemeyBubble); + evKillActor(actor, kCallbackEnemeyBubble); } else { - evPost_(pSprite->index, 3, 0, kCallbackEnemeyBubble); + evPostActor(actor, 0, kCallbackEnemeyBubble); for (int i = 2; i <= 5; i++) { if (Chance(0x5000 * i)) - evPost_(pSprite->index, 3, Random(5), kCallbackEnemeyBubble); + evPostActor(actor, Random(5), kCallbackEnemeyBubble); } } break; @@ -2247,7 +2247,7 @@ void useObjResizer(XSPRITE* pXSource, short objType, int objIndex) { gGenDudeExtra[objIndex].updReq[kGenDudePropertyAttack] = true; gGenDudeExtra[objIndex].updReq[kGenDudePropertyMass] = true; gGenDudeExtra[objIndex].updReq[kGenDudePropertyDmgScale] = true; - evPost_(objIndex, 3, kGenDudeUpdTimeRate, kCallbackGenDudeUpdate); + evPostActor(&bloodActors[objIndex], kGenDudeUpdTimeRate, kCallbackGenDudeUpdate); } @@ -2784,6 +2784,7 @@ void useEffectGen(XSPRITE* pXSource, spritetype* pSprite) { spritetype* pSource = &sprite[pXSource->reference]; if (pSprite == NULL) pSprite = pSource; + auto actor = &bloodActors[pSprite->index]; if (!xspriRangeIsFine(pSprite->extra)) return; @@ -2793,8 +2794,8 @@ void useEffectGen(XSPRITE* pXSource, spritetype* pSprite) { if (fxId < kEffectGenCallbackBase + length) { fxId = gEffectGenCallbacks[fxId - kEffectGenCallbackBase]; - evKill_(pSprite->index, OBJ_SPRITE, (CALLBACK_ID)fxId); - evPost_(pSprite->index, OBJ_SPRITE, 0, (CALLBACK_ID)fxId); + evKillActor(actor, (CALLBACK_ID)fxId); + evPostActor(actor, 0, (CALLBACK_ID)fxId); } @@ -3223,7 +3224,7 @@ void useSeqSpawnerGen(XSPRITE* pXSource, int objType, int index) { } // should be: the more is seqs, the shorter is timer - evPost_(nSprite, OBJ_SPRITE, 1000, kCallbackRemove); + evPostActor(&bloodActors[nSprite], 1000, kCallbackRemove); } } else { @@ -4146,15 +4147,16 @@ bool valueIsBetween(int val, int min, int max) { } char modernTypeSetSpriteState(int nSprite, XSPRITE* pXSprite, int nState) { + auto actor = &bloodActors[nSprite]; if ((pXSprite->busy & 0xffff) == 0 && pXSprite->state == nState) return 0; pXSprite->busy = IntToFixed(nState); pXSprite->state = nState; - evKill_(nSprite, 3); + evKillActor(actor); if (pXSprite->restState != nState && pXSprite->waitTime > 0) - evPost_(nSprite, 3, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); + evPostActor(actor, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); if (pXSprite->txID != 0 && ((pXSprite->triggerOn && pXSprite->state) || (pXSprite->triggerOff && !pXSprite->state))) modernTypeSendCommand(nSprite, pXSprite->txID, (COMMAND_ID)pXSprite->command); @@ -4602,7 +4604,7 @@ void sectorPauseMotion(int nSector) { XSECTOR* pXSector = &xsector[sector[nSector].extra]; pXSector->unused1 = 1; - evKill_(nSector, OBJ_SECTOR); + evKillSector(nSector); sectorKillSounds(nSector); if ((pXSector->busy == 0 && !pXSector->state) || (pXSector->busy == 65536 && pXSector->state)) @@ -4647,7 +4649,7 @@ void sectorContinueMotion(int nSector, EVENT event) { switch (event.cmd) { case kCmdOff: if (pXSector->busy == 0) { - if (pXSector->reTriggerB && waitTimeB) evPost_(nSector, OBJ_SECTOR, (waitTimeB * 120) / 10, kCmdOff); + if (pXSector->reTriggerB && waitTimeB) evPostSector(nSector, (waitTimeB * 120) / 10, kCmdOff); return; } pXSector->state = 1; @@ -4655,7 +4657,7 @@ void sectorContinueMotion(int nSector, EVENT event) { break; case kCmdOn: if (pXSector->busy == 65536) { - if (pXSector->reTriggerA && waitTimeA) evPost_(nSector, OBJ_SECTOR, (waitTimeA * 120) / 10, kCmdOn); + if (pXSector->reTriggerA && waitTimeA) evPostSector(nSector, (waitTimeA * 120) / 10, kCmdOn); return; } pXSector->state = 0; @@ -4725,7 +4727,7 @@ bool modernTypeOperateSector(int nSector, sectortype* pSector, XSECTOR* pXSector case kSectorCounter: if (pXSector->locked != 1) break; SetSectorState(nSector, pXSector, 0); - evPost_(nSector, 6, 0, kCallbackCounterCheck); + evPostSector(nSector, 0, kCallbackCounterCheck); break; } @@ -4833,8 +4835,8 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite else aiPatrolFlagsMgr(&sprite[event.index_], &xsprite[sprite[event.index_].extra], pSprite, pXSprite, false, true); // initialize patrol dude with possible new flags break; default: - if (!pXSprite->state) evPost_(nSprite, OBJ_SPRITE, 0, kCmdOn); - else evPost_(nSprite, OBJ_SPRITE, 0, kCmdOff); + if (!pXSprite->state) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } @@ -4887,7 +4889,7 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: @@ -4902,11 +4904,11 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite } if (pXSprite->busyTime > 0) - evPost_(nSprite, 3, pXSprite->busyTime, kCmdRepeat); + evPostActor(actor, pXSprite->busyTime, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -4940,7 +4942,7 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); if (pSprite->type == kModernSeqSpawner) seqSpawnerOffSameTx(pXSprite); fallthrough__; @@ -4950,11 +4952,11 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite else useEffectGen(pXSprite, NULL); if (pXSprite->busyTime > 0) - evPost_(nSprite, 3, ClipLow((int(pXSprite->busyTime) + Random2(pXSprite->data1)) * 120 / 10, 0), kCmdRepeat); + evPostActor(actor, ClipLow((int(pXSprite->busyTime) + Random2(pXSprite->data1)) * 120 / 10, 0), kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -4965,18 +4967,18 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: if (pXSprite->txID > 0) modernTypeSendCommand(nSprite, pXSprite->txID, (COMMAND_ID)pXSprite->command); else useSectorWindGen(pXSprite, NULL); - if (pXSprite->busyTime > 0) evPost_(nSprite, 3, pXSprite->busyTime, kCmdRepeat); + if (pXSprite->busyTime > 0) evPostActor(actor, pXSprite->busyTime, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -4993,23 +4995,23 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: if (pXSprite->txID <= 0 || !aiFightGetDudesForBattle(pXSprite)) { aiFightFreeAllTargets(pXSprite); - evPost_(nSprite, 3, 0, kCmdOff); + evPostActor(actor, 0, kCmdOff); break; } else { modernTypeSendCommand(nSprite, pXSprite->txID, (COMMAND_ID)pXSprite->command); } - if (pXSprite->busyTime > 0) evPost_(nSprite, 3, pXSprite->busyTime, kCmdRepeat); + if (pXSprite->busyTime > 0) evPostActor(actor, pXSprite->busyTime, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } pXSprite->dropMsg = uint8_t(pXSprite->data4); @@ -5020,22 +5022,22 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: // force OFF after *all* TX objects reach the goal value if (pSprite->flags == kModernTypeFlag0 && incDecGoalValueIsReached(pXSprite)) { - evPost_(nSprite, 3, 0, kCmdOff); + evPostActor(actor, 0, kCmdOff); break; } modernTypeSendCommand(nSprite, pXSprite->txID, (COMMAND_ID)pXSprite->command); - if (pXSprite->busyTime > 0) evPost_(nSprite, 3, pXSprite->busyTime, kCmdRepeat); + if (pXSprite->busyTime > 0) evPostActor(actor, pXSprite->busyTime, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -5046,17 +5048,17 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: useRandomItemGen(pSprite, pXSprite); if (pXSprite->busyTime > 0) - evPost_(nSprite, 3, (120 * pXSprite->busyTime) / 10, kCmdRepeat); + evPostActor(actor, (120 * pXSprite->busyTime) / 10, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -5066,7 +5068,7 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite case kCmdSpriteProximity: if (pXSprite->state) break; sfxPlay3DSound(pSprite, 452, 0, 0); - evPost_(nSprite, 3, 30, kCmdOff); + evPostActor(actor, 30, kCmdOff); pXSprite->state = 1; fallthrough__; case kCmdOn: @@ -5186,7 +5188,7 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: @@ -5194,11 +5196,11 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite else useSoundGen(pXSprite, pSprite); if (pXSprite->busyTime > 0) - evPost_(nSprite, 3, (120 * pXSprite->busyTime) / 10, kCmdRepeat); + evPostActor(actor, (120 * pXSprite->busyTime) / 10, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -5208,7 +5210,7 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite if (pXSprite->state == 1) SetSpriteState(nSprite, pXSprite, 0); break; case kCmdOn: - evKill_(nSprite, 3); // queue overflow protect + evKillActor(actor); // queue overflow protect if (pXSprite->state == 0) SetSpriteState(nSprite, pXSprite, 1); fallthrough__; case kCmdRepeat: @@ -5216,12 +5218,12 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite else useUniMissileGen(pXSprite, pSprite); if (pXSprite->busyTime > 0) - evPost_(nSprite, 3, (120 * pXSprite->busyTime) / 10, kCmdRepeat); + evPostActor(actor, (120 * pXSprite->busyTime) / 10, kCmdRepeat); break; default: - if (pXSprite->state == 0) evPost_(nSprite, 3, 0, kCmdOn); - else evPost_(nSprite, 3, 0, kCmdOff); + if (pXSprite->state == 0) evPostActor(actor, 0, kCmdOn); + else evPostActor(actor, 0, kCmdOff); break; } return true; @@ -5367,6 +5369,8 @@ void useSequentialTx(XSPRITE* pXSource, COMMAND_ID cmd, bool setState) { int useCondition(spritetype* pSource, XSPRITE* pXSource, EVENT event) { + auto sourceactor = &bloodActors[pSource->index]; + int objType = event.type; int objIndex = event.index_; bool srcIsCondition = false; if (objType == OBJ_SPRITE && objIndex != pSource->index) @@ -5406,8 +5410,8 @@ int useCondition(spritetype* pSource, XSPRITE* pXSource, EVENT event) { if (pXSource->waitTime > 0 && pXSource->state > 0) { pXSource->restState = 1; - evKill_(pSource->index, OBJ_SPRITE); - evPost_(pSource->index, OBJ_SPRITE, (pXSource->waitTime * 120) / 10, kCmdRepeat); + evKillActor(sourceactor); + evPostActor(sourceactor, (pXSource->waitTime * 120) / 10, kCmdRepeat); return -1; } @@ -5573,7 +5577,7 @@ void useUniMissileGen(XSPRITE* pXSource, spritetype* pSprite) { // add bursting for missiles if (pMissile->type != kMissileFlareAlt && pXSource->data4 > 0) - evPost_(pMissile->index, 3, ClipHigh(pXSource->data4, 500), kCallbackMissileBurst); + evPostActor(&bloodActors[pMissile->index], ClipHigh(pXSource->data4, 500), kCallbackMissileBurst); } @@ -6435,7 +6439,7 @@ bool setDataValueOfObject(int objType, int objIndex, int dataIndex, int value) { case kDudeModernCustomBurning: gGenDudeExtra[objIndex].updReq[kGenDudePropertyWeapon] = true; gGenDudeExtra[objIndex].updReq[kGenDudePropertyDmgScale] = true; - evPost_(objIndex, 3, kGenDudeUpdTimeRate, kCallbackGenDudeUpdate); + evPostActor(&bloodActors[objIndex], kGenDudeUpdTimeRate, kCallbackGenDudeUpdate); break; } return true; @@ -6449,7 +6453,7 @@ bool setDataValueOfObject(int objType, int objIndex, int dataIndex, int value) { gGenDudeExtra[objIndex].updReq[kGenDudePropertyDmgScale] = true; gGenDudeExtra[objIndex].updReq[kGenDudePropertyStates] = true; gGenDudeExtra[objIndex].updReq[kGenDudePropertyAttack] = true; - evPost_(objIndex, 3, kGenDudeUpdTimeRate, kCallbackGenDudeUpdate); + evPostActor(&bloodActors[objIndex], kGenDudeUpdTimeRate, kCallbackGenDudeUpdate); break; } return true; @@ -7829,7 +7833,7 @@ void seqSpawnerOffSameTx(XSPRITE* pXSource) { if (pXSprite->reference != pXSource->reference && spriRangeIsFine(pXSprite->reference)) { if (sprite[pXSprite->reference].type != kModernSeqSpawner) continue; else if (pXSprite->txID == pXSource->txID && pXSprite->state == 1) { - evKill_(pXSprite->reference, OBJ_SPRITE); + evKillActor(&bloodActors[pXSprite->reference]); pXSprite->state = 0; } } @@ -7864,7 +7868,7 @@ void callbackUniMissileBurst(DBloodActor* actor, int) // 22 pBurst->cstat = pSprite->cstat; if ((pBurst->cstat & CSTAT_SPRITE_BLOCK)) { pBurst->cstat &= ~CSTAT_SPRITE_BLOCK; // we don't want missiles impact each other - evPost_(pBurst->index, 3, 100, kCallbackMissileSpriteBlock); // so set blocking flag a bit later + evPostActor(&bloodActors[pBurst->index], 100, kCallbackMissileSpriteBlock); // so set blocking flag a bit later } pBurst->pal = pSprite->pal; @@ -7890,7 +7894,7 @@ void callbackUniMissileBurst(DBloodActor* actor, int) // 22 xvel[pBurst->index] += dx; yvel[pBurst->index] += dy; zvel[pBurst->index] += dz; - evPost_(pBurst->index, 3, 960, kCallbackRemove); + evPostActor(&bloodActors[pBurst->index], 960, kCallbackRemove); } evPostActor(actor, 0, kCallbackRemove); } diff --git a/source/games/blood/src/player.cpp b/source/games/blood/src/player.cpp index 26a6d9f2e..ed155be54 100644 --- a/source/games/blood/src/player.cpp +++ b/source/games/blood/src/player.cpp @@ -870,6 +870,7 @@ char findDroppedLeech(PLAYER *a1, spritetype *a2) char PickupItem(PLAYER *pPlayer, spritetype *pItem) { + auto itemactor = &bloodActors[pItem->index]; spritetype *pSprite = pPlayer->pSprite; XSPRITE *pXSprite = pPlayer->pXSprite; char buffer[80]; int pickupSnd = 775; int nType = pItem->type - kItemBase; @@ -2042,7 +2043,7 @@ int playerDamageSprite(DBloodActor* source, PLAYER *pPlayer, DAMAGE_TYPE nDamage nKneelingPlayer = nPlayerKneelClient; powerupActivate(pPlayer, kPwUpDeliriumShroom); pXSprite->target_i = nSource; - evPost_(pSprite->index, 3, 15, kCallbackFinishHim); + evPostActor(&bloodActors[pSprite->index], 15, kCallbackFinishHim); } else { diff --git a/source/games/blood/src/seq.cpp b/source/games/blood/src/seq.cpp index 3fb9f0170..11cb2abac 100644 --- a/source/games/blood/src/seq.cpp +++ b/source/games/blood/src/seq.cpp @@ -661,9 +661,9 @@ void seqProcess(int nTicks) int nSprite = xsprite[index].reference; if (nSprite >= 0 && nSprite < kMaxSprites) { - evKill_(nSprite, SS_SPRITE); + evKillActor(&bloodActors[nSprite]); if ((sprite[nSprite].hitag & kAttrRespawn) != 0 && (sprite[nSprite].inittype >= kDudeBase && sprite[nSprite].inittype < kDudeMax)) - evPost_(nSprite, 3, gGameOptions.nMonsterRespawnTime, kCallbackRespawn); + evPostActor(&bloodActors[nSprite], gGameOptions.nMonsterRespawnTime, kCallbackRespawn); else deletesprite(nSprite); // safe to not use actPostSprite here } } diff --git a/source/games/blood/src/triggers.cpp b/source/games/blood/src/triggers.cpp index 2427c233b..89cbf163c 100644 --- a/source/games/blood/src/triggers.cpp +++ b/source/games/blood/src/triggers.cpp @@ -58,15 +58,15 @@ char SetSpriteState(int nSprite, XSPRITE* pXSprite, int nState) return 0; pXSprite->busy = IntToFixed(nState); pXSprite->state = nState; - evKill_(nSprite, 3); + evKillActor(&bloodActors[nSprite]); if ((sprite[nSprite].flags & kHitagRespawn) != 0 && sprite[nSprite].inittype >= kDudeBase && sprite[nSprite].inittype < kDudeMax) { pXSprite->respawnPending = 3; - evPost_(nSprite, 3, gGameOptions.nMonsterRespawnTime, kCallbackRespawn); + evPostActor(&bloodActors[nSprite], gGameOptions.nMonsterRespawnTime, kCallbackRespawn); return 1; } if (pXSprite->restState != nState && pXSprite->waitTime > 0) - evPost_(nSprite, 3, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); + evPostActor(&bloodActors[nSprite], (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); if (pXSprite->txID) { if (pXSprite->command != kCmdLink && pXSprite->triggerOn && pXSprite->state) @@ -85,9 +85,9 @@ char SetWallState(int nWall, XWALL *pXWall, int nState) return 0; pXWall->busy = IntToFixed(nState); pXWall->state = nState; - evKill_(nWall, 0); + evKillWall(nWall); if (pXWall->restState != nState && pXWall->waitTime > 0) - evPost_(nWall, 0, (pXWall->waitTime*120) / 10, pXWall->restState ? kCmdOn : kCmdOff); + evPostWall(nWall, (pXWall->waitTime*120) / 10, pXWall->restState ? kCmdOn : kCmdOff); if (pXWall->txID) { if (pXWall->command != kCmdLink && pXWall->triggerOn && pXWall->state) @@ -104,7 +104,7 @@ char SetSectorState(int nSector, XSECTOR *pXSector, int nState) return 0; pXSector->busy = IntToFixed(nState); pXSector->state = nState; - evKill_(nSector, 6); + evKillSector(nSector); if (nState == 1) { if (pXSector->command != kCmdLink && pXSector->triggerOn && pXSector->txID) @@ -115,7 +115,7 @@ char SetSectorState(int nSector, XSECTOR *pXSector, int nState) pXSector->stopOff = 0; } else if (pXSector->reTriggerA) - evPost_(nSector, 6, (pXSector->waitTimeA * 120) / 10, kCmdOff); + evPostSector(nSector, (pXSector->waitTimeA * 120) / 10, kCmdOff); } else { @@ -127,7 +127,7 @@ char SetSectorState(int nSector, XSECTOR *pXSector, int nState) pXSector->stopOff = 0; } else if (pXSector->reTriggerB) - evPost_(nSector, 6, (pXSector->waitTimeB * 120) / 10, kCmdOn); + evPostSector(nSector, (pXSector->waitTimeB * 120) / 10, kCmdOn); } return 1; } @@ -264,7 +264,7 @@ void LifeLeechOperate(spritetype *pSprite, XSPRITE *pXSprite, EVENT event) { missile->SetOwner(actor); pXSprite->stateTimer = 1; - evPost_(pSprite->index, 3, t2, kCallbackLeechStateTimer); + evPostActor(&bloodActors[pSprite->index], t2, kCallbackLeechStateTimer); pXSprite->data3 = ClipLow(pXSprite->data3-1, 0); } pSprite->ang = angBak; @@ -282,6 +282,7 @@ void ActivateGenerator(int); void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) { + auto actor = &bloodActors[nSprite]; spritetype *pSprite = &sprite[nSprite]; #ifdef NOONE_EXTENSIONS @@ -520,7 +521,7 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) if (event.cmd != kCmdOn) actExplodeSprite(&bloodActors[pSprite->index]); else { sfxPlay3DSound(pSprite, 454, 0, 0); - evPost_(nSprite, 3, 18, kCmdOff); + evPostActor(actor, 18, kCmdOff); } } break; @@ -530,7 +531,7 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) case kCmdSpriteProximity: if (pXSprite->state) break; sfxPlay3DSound(pSprite, 452, 0, 0); - evPost_(nSprite, 3, 30, kCmdOff); + evPostActor(actor, 30, kCmdOff); pXSprite->state = 1; fallthrough__; case kCmdOn: @@ -564,13 +565,13 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) if (pXSprite->txID) evSend(nSprite, 3, pXSprite->txID, (COMMAND_ID)pXSprite->command); if (pXSprite->busyTime > 0) { int nRand = Random2(pXSprite->data1); - evPost_(nSprite, 3, 120*(nRand+pXSprite->busyTime) / 10, kCmdRepeat); + evPostActor(actor, 120*(nRand+pXSprite->busyTime) / 10, kCmdRepeat); } break; default: if (!pXSprite->state) { SetSpriteState(nSprite, pXSprite, 1); - evPost_(nSprite, 3, 0, kCmdRepeat); + evPostActor(actor, 0, kCmdRepeat); } break; } @@ -1365,7 +1366,7 @@ int PathBusy(unsigned int nSector, unsigned int a2) pXSector->busy = a2; if ((a2&0xffff) == 0) { - evPost_(nSector, 6, (120*pXSprite2->waitTime)/10, kCmdOn); + evPostSector(nSector, (120*pXSprite2->waitTime)/10, kCmdOn); pXSector->state = 0; pXSector->busy = 0; if (pXSprite1->data4) @@ -1657,7 +1658,7 @@ void InitPath(unsigned int nSector, XSECTOR *pXSector) pXSector->marker0 = nSprite; basePath[nSector] = nSprite; if (pXSector->state) - evPost_(nSector, 6, 0, kCmdOn); + evPostSector(nSector, 0, kCmdOn); } void LinkSector(int nSector, XSECTOR *pXSector, EVENT event) @@ -2054,7 +2055,7 @@ void trInit(void) else #endif pXSector->triggerOnce = 1; - evPost_(i, 6, 0, kCallbackCounterCheck); + evPostSector(i, 0, kCallbackCounterCheck); break; case kSectorZMotion: case kSectorZMotionSprite: @@ -2130,9 +2131,9 @@ void trInit(void) case kModernRandom: case kModernRandom2: if (!gModernMap || pXSprite->state == pXSprite->restState) break; - evPost_(i, 3, (120 * pXSprite->busyTime) / 10, kCmdRepeat); + evPostActor(&bloodActors[i], (120 * pXSprite->busyTime) / 10, kCmdRepeat); if (pXSprite->waitTime > 0) - evPost_(i, 3, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); + evPostActor(&bloodActors[i], (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); break; case kModernSeqSpawner: case kModernObjDataAccumulator: @@ -2140,9 +2141,9 @@ void trInit(void) case kModernEffectSpawner: case kModernWindGenerator: if (pXSprite->state == pXSprite->restState) break; - evPost_(i, 3, 0, kCmdRepeat); + evPostActor(&bloodActors[i], 0, kCmdRepeat); if (pXSprite->waitTime > 0) - evPost_(i, 3, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); + evPostActor(&bloodActors[i], (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); break; #endif case kGenTrigger: @@ -2206,7 +2207,7 @@ void InitGenerator(int nSprite) break; } if (pXSprite->state != pXSprite->restState && pXSprite->busyTime > 0) - evPost_(nSprite, 3, (120*(pXSprite->busyTime+Random2(pXSprite->data1)))/10, kCmdRepeat); + evPostActor(&bloodActors[nSprite], (120*(pXSprite->busyTime+Random2(pXSprite->data1)))/10, kCmdRepeat); } void ActivateGenerator(int nSprite) @@ -2273,7 +2274,7 @@ void MGunFireSeqCallback(int, DBloodActor* actor) { pXSprite->data2--; if (pXSprite->data2 == 0) - evPost_(pXSprite->reference, 3, 1, kCmdOff); + evPostActor(&bloodActors[pXSprite->reference], 1, kCmdOff); } int dx = CosScale16(pSprite->ang)+Random2(1000); int dy = SinScale16(pSprite->ang)+Random2(1000); diff --git a/source/games/blood/src/weapon.cpp b/source/games/blood/src/weapon.cpp index 967a34c0d..c481bc9b9 100644 --- a/source/games/blood/src/weapon.cpp +++ b/source/games/blood/src/weapon.cpp @@ -1086,7 +1086,7 @@ void ThrowCan(int, PLAYER *pPlayer) if (pSprite) { sfxPlay3DSound(pSprite, 441, 0, 0); - evPost_(pSprite->index, 3, pPlayer->fuseTime, kCmdOn); + evPostActor(&bloodActors[pSprite->index], pPlayer->fuseTime, kCmdOn); int nXSprite = pSprite->extra; XSPRITE *pXSprite = &xsprite[nXSprite]; pXSprite->Impact = 1; @@ -1101,7 +1101,7 @@ void DropCan(int, PLAYER *pPlayer) spritetype *pSprite = playerFireThing(pPlayer, 0, 0, kThingArmedSpray, 0); if (pSprite) { - evPost_(pSprite->index, 3, pPlayer->fuseTime, kCmdOn); + evPostActor(&bloodActors[pSprite->index], pPlayer->fuseTime, kCmdOn); UseAmmo(pPlayer, 6, gAmmoItemData[0].count); } } @@ -1110,7 +1110,7 @@ void ExplodeCan(int, PLAYER *pPlayer) { sfxKill3DSound(pPlayer->pSprite, -1, 441); spritetype *pSprite = playerFireThing(pPlayer, 0, 0, kThingArmedSpray, 0); - evPost_(pSprite->index, 3, 0, kCmdOn); + evPostActor(&bloodActors[pSprite->index], 0, kCmdOn); UseAmmo(pPlayer, 6, gAmmoItemData[0].count); StartQAV(pPlayer, kQAVCANBOOM); pPlayer->curWeapon = kWeapNone; @@ -1128,7 +1128,7 @@ void ThrowBundle(int, PLAYER *pPlayer) if (pPlayer->fuseTime < 0) pXSprite->Impact = 1; else - evPost_(pSprite->index, 3, pPlayer->fuseTime, kCmdOn); + evPostActor(&bloodActors[pSprite->index], pPlayer->fuseTime, kCmdOn); UseAmmo(pPlayer, 5, 1); pPlayer->throwPower = 0; } @@ -1137,7 +1137,7 @@ void DropBundle(int, PLAYER *pPlayer) { sfxKill3DSound(pPlayer->pSprite, 16, -1); spritetype *pSprite = playerFireThing(pPlayer, 0, 0, kThingArmedTNTBundle, 0); - evPost_(pSprite->index, 3, pPlayer->fuseTime, kCmdOn); + evPostActor(&bloodActors[pSprite->index], pPlayer->fuseTime, kCmdOn); UseAmmo(pPlayer, 5, 1); } @@ -1145,7 +1145,7 @@ void ExplodeBundle(int, PLAYER *pPlayer) { sfxKill3DSound(pPlayer->pSprite, 16, -1); spritetype *pSprite = playerFireThing(pPlayer, 0, 0, kThingArmedTNTBundle, 0); - evPost_(pSprite->index, 3, 0, kCmdOn); + evPostActor(&bloodActors[pSprite->index], 0, kCmdOn); UseAmmo(pPlayer, 5, 1); StartQAV(pPlayer, kQAVDYNEXPLO); pPlayer->curWeapon = kWeapNone; @@ -1157,7 +1157,7 @@ void ThrowProx(int, PLAYER *pPlayer) int nSpeed = MulScale(pPlayer->throwPower, 0x177777, 16)+0x66666; sfxPlay3DSound(pPlayer->pSprite, 455, 1, 0); spritetype *pSprite = playerFireThing(pPlayer, 0, -9460, kThingArmedProxBomb, nSpeed); - evPost_(pSprite->index, 3, 240, kCmdOn); + evPostActor(&bloodActors[pSprite->index], 240, kCmdOn); UseAmmo(pPlayer, 10, 1); pPlayer->throwPower = 0; } @@ -1165,7 +1165,7 @@ void ThrowProx(int, PLAYER *pPlayer) void DropProx(int, PLAYER *pPlayer) { spritetype *pSprite = playerFireThing(pPlayer, 0, 0, kThingArmedProxBomb, 0); - evPost_(pSprite->index, 3, 240, kCmdOn); + evPostActor(&bloodActors[pSprite->index], 240, kCmdOn); UseAmmo(pPlayer, 10, 1); } @@ -1577,7 +1577,7 @@ void DropVoodoo(int , PLAYER *pPlayer) int nXSprite = pSprite->extra; XSPRITE *pXSprite = &xsprite[nXSprite]; pXSprite->data1 = pPlayer->ammoCount[9]; - evPost_(pSprite->index, 3, 90, kCallbackDropVoodoo); + evPostActor(&bloodActors[pSprite->index], 90, kCallbackDropVoodoo); UseAmmo(pPlayer, 6, gAmmoItemData[0].count); UseAmmo(pPlayer, 9, pPlayer->ammoCount[9]); pPlayer->hasWeapon[10] = 0; @@ -1679,7 +1679,7 @@ void AltFireNapalm(int , PLAYER *pPlayer) UseAmmo(pPlayer, 4, pXSprite->data4); seqSpawn(22, 3, pMissile->extra, -1); actBurnSprite(pPlayer->pSprite->index, pXSprite, 600); - evPost_(pMissile->index, 3, 0, kCallbackFXFlameLick); + evPostActor(&bloodActors[pMissile->index], 0, kCallbackFXFlameLick); sfxPlay3DSound(pMissile, 480, 2, 0); pPlayer->visibility = 30; pPlayer->flashEffect = 1; @@ -1722,7 +1722,7 @@ void AltFireLifeLeech(int , PLAYER *pPlayer) pXSprite->DudeLockout = 1; pXSprite->data4 = ClipHigh(pPlayer->ammoCount[4], 12); pXSprite->stateTimer = 1; - evPost_(pMissile->index, 3, 120, kCallbackLeechStateTimer); + evPostActor(&bloodActors[pMissile->index], 120, kCallbackLeechStateTimer); if (gGameOptions.nGameType <= 1) { int nAmmo = pPlayer->ammoCount[8];