diff --git a/source/games/blood/src/eventq.cpp b/source/games/blood/src/eventq.cpp index c172a1c41..91ae460a9 100644 --- a/source/games/blood/src/eventq.cpp +++ b/source/games/blood/src/eventq.cpp @@ -601,6 +601,26 @@ void evKillSector(int sec) evKill_(sec, OBJ_SECTOR); } +// these have no target. +void evSendGame(int rxId, COMMAND_ID command) +{ + evSend(0, 0, rxId, command); +} + +void evSendActor(DBloodActor* actor, int rxId, COMMAND_ID command) +{ + evSend(actor->s().index, OBJ_SPRITE, rxId, command); +} + +void evSendSector(int index, int rxId, COMMAND_ID command) +{ + evSend(index, OBJ_SECTOR, rxId, command); +} + +void evSendWall(int index, int rxId, COMMAND_ID command) +{ + evSend(index, OBJ_WALL, rxId, command); +} //--------------------------------------------------------------------------- // diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index cc7bbbe89..179059056 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -4165,17 +4165,18 @@ char modernTypeSetSpriteState(int nSprite, XSPRITE* pXSprite, int nState) { } void modernTypeSendCommand(int nSprite, int destChannel, COMMAND_ID command) { + auto actor = &bloodActors[nSprite]; switch (command) { case kCmdLink: - evSend(nSprite, 3, destChannel, kCmdModernUse); // just send command to change properties + evSendActor(actor, destChannel, kCmdModernUse); // just send command to change properties return; case kCmdUnlock: - evSend(nSprite, 3, destChannel, command); // send normal command first - evSend(nSprite, 3, destChannel, kCmdModernUse); // then send command to change properties + evSendActor(actor, destChannel, command); // send normal command first + evSendActor(actor, destChannel, kCmdModernUse); // then send command to change properties return; default: - evSend(nSprite, 3, destChannel, kCmdModernUse); // send first command to change properties - evSend(nSprite, 3, destChannel, command); // then send normal command + evSendActor(actor, destChannel, kCmdModernUse); // send first command to change properties + evSendActor(actor, destChannel, command); // then send normal command return; } } @@ -4863,12 +4864,12 @@ bool modernTypeOperateSprite(int nSprite, spritetype* pSprite, XSPRITE* pXSprite case kMarkerDudeSpawn: if (!gGameOptions.nMonsterSettings) return true; else if (!(pSprite->flags & kModernTypeFlag4)) useDudeSpawn(pXSprite, pSprite); - else if (pXSprite->txID) evSend(nSprite, OBJ_SPRITE, pXSprite->txID, kCmdModernUse); + else if (pXSprite->txID) evSendActor(actor, pXSprite->txID, kCmdModernUse); return true; case kModernCustomDudeSpawn: if (!gGameOptions.nMonsterSettings) return true; else if (!(pSprite->flags & kModernTypeFlag4)) useCustomDudeSpawn(actor, actor); - else if (pXSprite->txID) evSend(nSprite, OBJ_SPRITE, pXSprite->txID, kCmdModernUse); + else if (pXSprite->txID) evSendActor(actor, pXSprite->txID, kCmdModernUse); return true; case kModernRandomTX: // random Event Switch takes random data field and uses it as TX ID case kModernSequentialTX: // sequential Switch takes values from data fields starting from data1 and uses it as TX ID @@ -5265,19 +5266,19 @@ bool txIsRanged(XSPRITE* pXSource) { } void seqTxSendCmdAll(XSPRITE* pXSource, int nIndex, COMMAND_ID cmd, bool modernSend) { - + auto actor = &bloodActors[nIndex]; bool ranged = txIsRanged(pXSource); if (ranged) { for (pXSource->txID = pXSource->data1; pXSource->txID <= pXSource->data4; pXSource->txID++) { if (pXSource->txID <= 0 || pXSource->txID >= kChannelUserMax) continue; - else if (!modernSend) evSend(nIndex, 3, pXSource->txID, cmd); + else if (!modernSend) evSendActor(actor, pXSource->txID, cmd); else modernTypeSendCommand(nIndex, pXSource->txID, cmd); } } else { for (int i = 0; i <= 3; i++) { pXSource->txID = GetDataVal(&sprite[pXSource->reference], i); if (pXSource->txID <= 0 || pXSource->txID >= kChannelUserMax) continue; - else if (!modernSend) evSend(nIndex, 3, pXSource->txID, cmd); + else if (!modernSend) evSendActor(actor, pXSource->txID, cmd); else modernTypeSendCommand(nIndex, pXSource->txID, cmd); } } @@ -5307,7 +5308,7 @@ void useRandomTx(XSPRITE* pXSource, COMMAND_ID cmd, bool setState) { pXSource->txID = (tx > 0 && tx < kChannelUserMax) ? tx : 0; if (setState) SetSpriteState(pSource->index, pXSource, pXSource->state ^ 1); - //evSend(pSource->index, OBJ_SPRITE, pXSource->txID, (COMMAND_ID)pXSource->command); + //evSendActor(pSource->index, pXSource->txID, (COMMAND_ID)pXSource->command); } void useSequentialTx(XSPRITE* pXSource, COMMAND_ID cmd, bool setState) { @@ -5363,7 +5364,7 @@ void useSequentialTx(XSPRITE* pXSource, COMMAND_ID cmd, bool setState) { pXSource->txID = (tx > 0 && tx < kChannelUserMax) ? tx : 0; if (setState) SetSpriteState(pSource->index, pXSource, pXSource->state ^ 1); - //evSend(pSource->index, OBJ_SPRITE, pXSource->txID, (COMMAND_ID)pXSource->command); + //evSendActor(pSource->index, pXSource->txID, (COMMAND_ID)pXSource->command); } @@ -5435,7 +5436,7 @@ int useCondition(spritetype* pSource, XSPRITE* pXSource, EVENT event) { // send command to rx bucket if (pXSource->txID) - evSend(pSource->index, OBJ_SPRITE, pXSource->txID, (COMMAND_ID)pXSource->command); + evSendActor(&bloodActors[pSource->index], pXSource->txID, (COMMAND_ID)pXSource->command); if (pSource->flags) { @@ -7521,7 +7522,9 @@ void aiPatrolThink(DBloodActor* actor) { return; } - spritetype* pMarker = &sprite[nMarker]; XSPRITE* pXMarker = &xsprite[pMarker->extra]; + auto markeractor = &bloodActors[nMarker]; + spritetype* pMarker = &markeractor->s(); + XSPRITE* pXMarker = &markeractor->x(); const DUDEINFO_EXTRA* pExtra = &gDudeInfoExtra[pSprite->type - kDudeBase]; bool isFinal = ((!pXSprite->unused2 && pXMarker->data2 == -1) || (pXSprite->unused2 && pXMarker->data1 == -1)); bool reached = false; @@ -7564,7 +7567,7 @@ void aiPatrolThink(DBloodActor* actor) { // send command if (pXMarker->txID) { - evSend(nMarker, OBJ_SPRITE, pXMarker->txID, (COMMAND_ID)pXMarker->command); + evSendActor(markeractor, pXMarker->txID, (COMMAND_ID)pXMarker->command); // copy dude flags for current dude } else if (pXMarker->command == kCmdDudeFlagsSet) { @@ -7639,7 +7642,7 @@ void aiPatrolThink(DBloodActor* actor) { // send command if (pXMarker->txID) { - evSend(nMarker, OBJ_SPRITE, pXMarker->txID, (COMMAND_ID)pXMarker->command); + evSendActor(markeractor, pXMarker->txID, (COMMAND_ID)pXMarker->command); // copy dude flags for current dude } else if (pXMarker->command == kCmdDudeFlagsSet) { @@ -7677,11 +7680,11 @@ void aiPatrolThink(DBloodActor* actor) { // send command at arrival if (pXMarker->triggerOn) - evSend(nMarker, OBJ_SPRITE, pXMarker->txID, (COMMAND_ID)pXMarker->command); + evSendActor(markeractor, pXMarker->txID, (COMMAND_ID)pXMarker->command); // send command at departure if (pXMarker->triggerOff) - evSend(nMarker, OBJ_SPRITE, pXMarker->txID, (COMMAND_ID)pXMarker->command); + evSendActor(markeractor, pXMarker->txID, (COMMAND_ID)pXMarker->command); // copy dude flags for current dude } else if (pXMarker->command == kCmdDudeFlagsSet) { diff --git a/source/games/blood/src/player.cpp b/source/games/blood/src/player.cpp index ed155be54..7a6fa4688 100644 --- a/source/games/blood/src/player.cpp +++ b/source/games/blood/src/player.cpp @@ -933,7 +933,7 @@ char PickupItem(PLAYER *pPlayer, spritetype *pItem) { pPlayer->used2[1] = -1; team_score[pPlayer->teamId] += 10; team_ticker[pPlayer->teamId] += 240; - evSend(0, 0, 81, kCmdOn); + evSendGame(81, kCmdOn); sprintf(buffer, "%s captured Red Flag!", PlayerName(pPlayer->nPlayer)); sndStartSample(8001, 255, 2, 0); viewSetMessage(buffer); @@ -970,7 +970,7 @@ char PickupItem(PLAYER *pPlayer, spritetype *pItem) { pPlayer->used2[0] = -1; team_score[pPlayer->teamId] += 10; team_ticker[pPlayer->teamId] += 240; - evSend(0, 0, 80, kCmdOn); + evSendGame(80, kCmdOn); sprintf(buffer, "%s captured Blue Flag!", PlayerName(pPlayer->nPlayer)); sndStartSample(8000, 255, 2, 0); viewSetMessage(buffer); @@ -1866,16 +1866,16 @@ void FragPlayer(PLAYER *pPlayer, int nSprite) if (nTeam1 == 0) { if (nTeam1 != nTeam2) - evSend(0, 0, 15, kCmdToggle); + evSendGame(15, kCmdToggle); else - evSend(0, 0, 16, kCmdToggle); + evSendGame(16, kCmdToggle); } else { if (nTeam1 == nTeam2) - evSend(0, 0, 16, kCmdToggle); + evSendGame(16, kCmdToggle); else - evSend(0, 0, 15, kCmdToggle); + evSendGame(15, kCmdToggle); } } } diff --git a/source/games/blood/src/triggers.cpp b/source/games/blood/src/triggers.cpp index 89cbf163c..8fa448816 100644 --- a/source/games/blood/src/triggers.cpp +++ b/source/games/blood/src/triggers.cpp @@ -54,25 +54,26 @@ unsigned int GetWaveValue(unsigned int nPhase, int nType) char SetSpriteState(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; - evKillActor(&bloodActors[nSprite]); + evKillActor(actor); if ((sprite[nSprite].flags & kHitagRespawn) != 0 && sprite[nSprite].inittype >= kDudeBase && sprite[nSprite].inittype < kDudeMax) { pXSprite->respawnPending = 3; - evPostActor(&bloodActors[nSprite], gGameOptions.nMonsterRespawnTime, kCallbackRespawn); + evPostActor(actor, gGameOptions.nMonsterRespawnTime, kCallbackRespawn); return 1; } if (pXSprite->restState != nState && pXSprite->waitTime > 0) - evPostActor(&bloodActors[nSprite], (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); + evPostActor(actor, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff); if (pXSprite->txID) { if (pXSprite->command != kCmdLink && pXSprite->triggerOn && pXSprite->state) - evSend(nSprite, 3, pXSprite->txID, (COMMAND_ID)pXSprite->command); + evSendActor(actor, pXSprite->txID, (COMMAND_ID)pXSprite->command); if (pXSprite->command != kCmdLink && pXSprite->triggerOff && !pXSprite->state) - evSend(nSprite, 3, pXSprite->txID, (COMMAND_ID)pXSprite->command); + evSendActor(actor, pXSprite->txID, (COMMAND_ID)pXSprite->command); } return 1; } @@ -91,9 +92,9 @@ char SetWallState(int nWall, XWALL *pXWall, int nState) if (pXWall->txID) { if (pXWall->command != kCmdLink && pXWall->triggerOn && pXWall->state) - evSend(nWall, 0, pXWall->txID, (COMMAND_ID)pXWall->command); + evSendWall(nWall, pXWall->txID, (COMMAND_ID)pXWall->command); if (pXWall->command != kCmdLink && pXWall->triggerOff && !pXWall->state) - evSend(nWall, 0, pXWall->txID, (COMMAND_ID)pXWall->command); + evSendWall(nWall, pXWall->txID, (COMMAND_ID)pXWall->command); } return 1; } @@ -108,7 +109,7 @@ char SetSectorState(int nSector, XSECTOR *pXSector, int nState) if (nState == 1) { if (pXSector->command != kCmdLink && pXSector->triggerOn && pXSector->txID) - evSend(nSector, 6, pXSector->txID, (COMMAND_ID)pXSector->command); + evSendSector(nSector,pXSector->txID, (COMMAND_ID)pXSector->command); if (pXSector->stopOn) { pXSector->stopOn = 0; @@ -120,7 +121,7 @@ char SetSectorState(int nSector, XSECTOR *pXSector, int nState) else { if (pXSector->command != kCmdLink && pXSector->triggerOff && pXSector->txID) - evSend(nSector, 6, pXSector->txID, (COMMAND_ID)pXSector->command); + evSendSector(nSector,pXSector->txID, (COMMAND_ID)pXSector->command); if (pXSector->stopOff) { pXSector->stopOn = 0; @@ -450,7 +451,7 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) sfxPlay3DSound(pSprite, pXSprite->data4, -1, 0); if (pXSprite->command == kCmdLink && pXSprite->txID > 0) - evSend(nSprite, 3, pXSprite->txID, kCmdLink); + evSendActor(actor, pXSprite->txID, kCmdLink); if (pXSprite->data1 == pXSprite->data2) SetSpriteState(nSprite, pXSprite, 1); @@ -562,7 +563,7 @@ void OperateSprite(int nSprite, XSPRITE *pXSprite, EVENT event) break; case kCmdRepeat: if (pSprite->type != kGenTrigger) ActivateGenerator(nSprite); - if (pXSprite->txID) evSend(nSprite, 3, pXSprite->txID, (COMMAND_ID)pXSprite->command); + if (pXSprite->txID) evSendActor(actor, pXSprite->txID, (COMMAND_ID)pXSprite->command); if (pXSprite->busyTime > 0) { int nRand = Random2(pXSprite->data1); evPostActor(actor, 120*(nRand+pXSprite->busyTime) / 10, kCmdRepeat); @@ -1077,7 +1078,7 @@ int VCrushBusy(unsigned int nSector, unsigned int a2) sector[nSector].floorz = v10; pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1130,7 +1131,7 @@ int VSpriteBusy(unsigned int nSector, unsigned int a2) } pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1230,7 +1231,7 @@ int VDoorBusy(unsigned int nSector, unsigned int a2) ZTranslateSector(nSector, pXSector, a2, nWave); pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1258,7 +1259,7 @@ int HDoorBusy(unsigned int nSector, unsigned int a2) ZTranslateSector(nSector, pXSector, a2, nWave); pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1285,7 +1286,7 @@ int RDoorBusy(unsigned int nSector, unsigned int a2) ZTranslateSector(nSector, pXSector, a2, nWave); pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1318,7 +1319,7 @@ int StepRotateBusy(unsigned int nSector, unsigned int a2) } pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1338,7 +1339,7 @@ int GenSectorBusy(unsigned int nSector, unsigned int a2) XSECTOR *pXSector = &xsector[nXSector]; pXSector->busy = a2; if (pXSector->command == kCmdLink && pXSector->txID) - evSend(nSector, 6, pXSector->txID, kCmdLink); + evSendSector(nSector,pXSector->txID, kCmdLink); if ((a2&0xffff) == 0) { SetSectorState(nSector, pXSector, FixedToInt(a2)); @@ -1736,7 +1737,7 @@ void trTriggerSector(unsigned int nSector, XSECTOR *pXSector, int command) { pXSector->isTriggered = 1; if (pXSector->decoupled && pXSector->txID > 0) - evSend(nSector, 6, pXSector->txID, (COMMAND_ID)pXSector->command); + evSendSector(nSector,pXSector->txID, (COMMAND_ID)pXSector->command); else { EVENT event; @@ -1755,7 +1756,7 @@ void trTriggerWall(unsigned int nWall, XWALL *pXWall, int command) { pXWall->isTriggered = 1; if (pXWall->decoupled && pXWall->txID > 0) - evSend(nWall, 0, pXWall->txID, (COMMAND_ID)pXWall->command); + evSendWall(nWall, pXWall->txID, (COMMAND_ID)pXWall->command); else { EVENT event; @@ -1773,7 +1774,7 @@ void trTriggerSprite(unsigned int nSprite, XSPRITE *pXSprite, int command) { pXSprite->isTriggered = 1; if (pXSprite->Decoupled && pXSprite->txID > 0) - evSend(nSprite, 3, pXSprite->txID, (COMMAND_ID)pXSprite->command); + evSendActor(&bloodActors[nSprite], pXSprite->txID, (COMMAND_ID)pXSprite->command); else { EVENT event; @@ -2170,17 +2171,17 @@ void trInit(void) } } - evSend(0, 0, kChannelLevelStart, kCmdOn); + evSendGame(kChannelLevelStart, kCmdOn); switch (gGameOptions.nGameType) { case 1: - evSend(0, 0, kChannelLevelStartCoop, kCmdOn); + evSendGame(kChannelLevelStartCoop, kCmdOn); break; case 2: - evSend(0, 0, kChannelLevelStartMatch, kCmdOn); + evSendGame(kChannelLevelStartMatch, kCmdOn); break; case 3: - evSend(0, 0, kChannelLevelStartMatch, kCmdOn); - evSend(0, 0, kChannelLevelStartTeamsOnly, kCmdOn); + evSendGame(kChannelLevelStartMatch, kCmdOn); + evSendGame(kChannelLevelStartTeamsOnly, kCmdOn); break; } } diff --git a/source/games/blood/src/weapon.cpp b/source/games/blood/src/weapon.cpp index c481bc9b9..140d423db 100644 --- a/source/games/blood/src/weapon.cpp +++ b/source/games/blood/src/weapon.cpp @@ -1192,7 +1192,7 @@ void DropRemote(int, PLAYER *pPlayer) void FireRemote(int, PLAYER *pPlayer) { - evSend(0, 0, 90+(pPlayer->pSprite->type-kDudePlayer1), kCmdOn); + evSendGame(90+(pPlayer->pSprite->type-kDudePlayer1), kCmdOn); } enum { kMaxShotgunBarrels = 4 };