- route all remaining calls to evPost and evKill through type specific variants.

This commit is contained in:
Christoph Oelckers 2021-08-27 10:18:33 +02:00
parent b64aede68e
commit efc791ee00
7 changed files with 120 additions and 97 deletions

View file

@ -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);
}
//---------------------------------------------------------------------------
//
//

View file

@ -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;

View file

@ -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);
}

View file

@ -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
{

View file

@ -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
}
}

View file

@ -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);

View file

@ -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];