- callback interface.

This commit is contained in:
Christoph Oelckers 2021-11-24 01:05:17 +01:00
parent e4e5bd0966
commit f52a542fad
7 changed files with 38 additions and 44 deletions

View file

@ -88,7 +88,6 @@ void StompSeqCallback(int, DBloodActor* actor1)
int y = pSprite->y;
int z = pSprite->z;
int vc = 400;
auto nSector = pSprite->sectnum;
auto pSector = pSprite->sector();
int v1c = 5 + 2 * gGameOptions.nDifficulty;
int v10 = 25 + 30 * gGameOptions.nDifficulty;
@ -115,7 +114,7 @@ void StompSeqCallback(int, DBloodActor* actor1)
{
int top, bottom;
GetActorExtents(actor1, &top, &bottom);
if (abs(bottom - sector[nSector].floorz) == 0)
if (abs(bottom - pSector->floorz) == 0)
{
int dx = abs(pSprite->x - pSprite2->x);
int dy = abs(pSprite->y - pSprite2->y);

View file

@ -30,7 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_BLD_NS
void fxFlameLick(DBloodActor* actor, int) // 0
void fxFlameLick(DBloodActor* actor, sectortype*) // 0
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -58,7 +58,7 @@ void fxFlameLick(DBloodActor* actor, int) // 0
evPostActor(actor, 5, kCallbackFXFlameLick);
}
void Remove(DBloodActor* actor, int) // 1
void Remove(DBloodActor* actor, sectortype*) // 1
{
if (!actor) return;
evKillActor(actor, kCallbackFXFlareSpark);
@ -68,7 +68,7 @@ void Remove(DBloodActor* actor, int) // 1
DeleteSprite(actor);
}
void FlareBurst(DBloodActor* actor, int) // 2
void FlareBurst(DBloodActor* actor, sectortype*) // 2
{
if (!actor) return;
int nAngle = getangle(actor->xvel, actor->yvel);
@ -101,7 +101,7 @@ void FlareBurst(DBloodActor* actor, int) // 2
evPostActor(actor, 0, kCallbackRemove);
}
void fxFlareSpark(DBloodActor* actor, int) // 3
void fxFlareSpark(DBloodActor* actor, sectortype*) // 3
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -115,7 +115,7 @@ void fxFlareSpark(DBloodActor* actor, int) // 3
evPostActor(actor, 4, kCallbackFXFlareSpark);
}
void fxFlareSparkLite(DBloodActor* actor, int) // 4
void fxFlareSparkLite(DBloodActor* actor, sectortype*) // 4
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -129,7 +129,7 @@ void fxFlareSparkLite(DBloodActor* actor, int) // 4
evPostActor(actor, 12, kCallbackFXFlareSparkLite);
}
void fxZombieBloodSpurt(DBloodActor* actor, int) // 5
void fxZombieBloodSpurt(DBloodActor* actor, sectortype*) // 5
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -157,7 +157,7 @@ void fxZombieBloodSpurt(DBloodActor* actor, int) // 5
}
}
void fxBloodSpurt(DBloodActor* actor, int) // 6
void fxBloodSpurt(DBloodActor* actor, sectortype*) // 6
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -173,7 +173,7 @@ void fxBloodSpurt(DBloodActor* actor, int) // 6
}
void fxArcSpark(DBloodActor* actor, int) // 7
void fxArcSpark(DBloodActor* actor, sectortype*) // 7
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -188,7 +188,7 @@ void fxArcSpark(DBloodActor* actor, int) // 7
}
void fxDynPuff(DBloodActor* actor, int) // 8
void fxDynPuff(DBloodActor* actor, sectortype*) // 8
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -209,7 +209,7 @@ void fxDynPuff(DBloodActor* actor, int) // 8
evPostActor(actor, 12, kCallbackFXDynPuff);
}
void Respawn(DBloodActor* actor, int) // 9
void Respawn(DBloodActor* actor, sectortype*) // 9
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -293,7 +293,7 @@ void Respawn(DBloodActor* actor, int) // 9
}
}
void PlayerBubble(DBloodActor* actor, int) // 10
void PlayerBubble(DBloodActor* actor, sectortype*) // 10
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -324,7 +324,7 @@ void PlayerBubble(DBloodActor* actor, int) // 10
}
}
void EnemyBubble(DBloodActor* actor, int) // 11
void EnemyBubble(DBloodActor* actor, sectortype*) // 11
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -348,11 +348,9 @@ void EnemyBubble(DBloodActor* actor, int) // 11
evPostActor(actor, 4, kCallbackEnemeyBubble);
}
void CounterCheck(DBloodActor*, int nSector) // 12
void CounterCheck(DBloodActor*, sectortype* pSector) // 12
{
if (!validSectorIndex(nSector)) return;
auto pSector = &sector[nSector];
if (pSector->type != kSectorCounter) return;
if (!pSector || pSector->type != kSectorCounter) return;
if (!pSector->hasX()) return;
XSECTOR* pXSector = &pSector->xs();
@ -361,7 +359,7 @@ void CounterCheck(DBloodActor*, int nSector) // 12
int nCount = 0;
if (!nType || !nReq) return;
BloodSectIterator it(nSector);
BloodSectIterator it(pSector);
while (auto actor = it.Next())
{
if (actor->s().type == nType) nCount++;
@ -378,7 +376,7 @@ void CounterCheck(DBloodActor*, int nSector) // 12
}
void FinishHim(DBloodActor* actor, int) // 13
void FinishHim(DBloodActor* actor, sectortype*) // 13
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -386,7 +384,7 @@ void FinishHim(DBloodActor* actor, int) // 13
sndStartSample(3313, -1, 1, 0);
}
void fxBloodBits(DBloodActor* actor, int) // 14
void fxBloodBits(DBloodActor* actor, sectortype*) // 14
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -416,7 +414,7 @@ void fxBloodBits(DBloodActor* actor, int) // 14
}
void fxTeslaAlt(DBloodActor* actor, int) // 15
void fxTeslaAlt(DBloodActor* actor, sectortype*) // 15
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -434,7 +432,7 @@ void fxTeslaAlt(DBloodActor* actor, int) // 15
int tommySleeveSnd[] = { 608, 609, 611 }; // unused?
int sawedOffSleeveSnd[] = { 610, 612 };
void fxBouncingSleeve(DBloodActor* actor, int) // 16
void fxBouncingSleeve(DBloodActor* actor, sectortype*) // 16
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -497,7 +495,7 @@ void sleeveStopBouncing(DBloodActor* actor)
}
void returnFlagToBase(DBloodActor* actor, int) // 17
void returnFlagToBase(DBloodActor* actor, sectortype*) // 17
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -523,7 +521,7 @@ void returnFlagToBase(DBloodActor* actor, int) // 17
evPostActor(actor, 0, kCallbackRemove);
}
void fxPodBloodSpray(DBloodActor* actor, int) // 18
void fxPodBloodSpray(DBloodActor* actor, sectortype*) // 18
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -542,7 +540,7 @@ void fxPodBloodSpray(DBloodActor* actor, int) // 18
evPostActor(actor, 6, kCallbackFXPodBloodSpray);
}
void fxPodBloodSplat(DBloodActor* actor, int) // 19
void fxPodBloodSplat(DBloodActor* actor, sectortype*) // 19
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -582,7 +580,7 @@ void fxPodBloodSplat(DBloodActor* actor, int) // 19
void LeechStateTimer(DBloodActor* actor, int) // 20
void LeechStateTimer(DBloodActor* actor, sectortype*) // 20
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -618,7 +616,7 @@ void sub_76A08(DBloodActor *actor, spritetype *pSprite2, PLAYER *pPlayer) // ???
}
}
void DropVoodooCb(DBloodActor* actor, int) // unused
void DropVoodooCb(DBloodActor* actor, sectortype*) // unused
{
if (!actor) return;
spritetype *pSprite = &actor->s();
@ -734,7 +732,7 @@ void DropVoodooCb(DBloodActor* actor, int) // unused
}
}
void callbackCondition(DBloodActor* actor, int)
void callbackCondition(DBloodActor* actor, sectortype*)
{
XSPRITE* pXSprite = &actor->x();
if (pXSprite->isTriggered) return;
@ -752,7 +750,7 @@ void callbackCondition(DBloodActor* actor, int)
return;
}
void(*gCallback[kCallbackMax])(DBloodActor*, int) =
void(*gCallback[kCallbackMax])(DBloodActor*, sectortype*) =
{
fxFlameLick,
Remove,

View file

@ -58,6 +58,6 @@ enum CALLBACK_ID {
kCallbackMax,
};
extern void(*gCallback[kCallbackMax])(DBloodActor*, int);
extern void(*gCallback[kCallbackMax])(DBloodActor*, sectortype*);
END_BLD_NS

View file

@ -638,9 +638,8 @@ void evProcess(unsigned int time)
if (event.cmd == kCmdCallback)
{
assert(event.funcID < kCallbackMax);
assert(gCallback[event.funcID] != nullptr);
if (event.target.isActor()) gCallback[event.funcID](event.target.actor(), -1);
else if (event.target.isSector()) gCallback[event.funcID](nullptr, sectnum(event.target.sector()));
if (event.target.isActor()) gCallback[event.funcID](event.target.actor(), nullptr);
else if (event.target.isSector()) gCallback[event.funcID](nullptr, event.target.sector());
// no case for walls defined here.
}
else

View file

@ -220,8 +220,7 @@ void CFX::fxProcess(void)
remove(actor);
continue;
}
assert(gCallback[pFXData->funcID] != nullptr);
gCallback[pFXData->funcID](actor, 0);
gCallback[pFXData->funcID](actor, nullptr);
continue;
}
if (nSector != pSprite->sectnum)
@ -246,8 +245,7 @@ void CFX::fxProcess(void)
remove(actor);
continue;
}
assert(gCallback[pFXData->funcID] != nullptr);
gCallback[pFXData->funcID](actor, 0);
gCallback[pFXData->funcID](actor, nullptr);
continue;
}
}

View file

@ -9068,7 +9068,7 @@ void levelEndLevelCustom(int nLevel)
//
//---------------------------------------------------------------------------
void callbackUniMissileBurst(DBloodActor* actor, int) // 22
void callbackUniMissileBurst(DBloodActor* actor, sectortype*) // 22
{
if (!actor) return;
spritetype* pSprite = &actor->s();
@ -9129,13 +9129,13 @@ void callbackUniMissileBurst(DBloodActor* actor, int) // 22
//
//---------------------------------------------------------------------------
void callbackMakeMissileBlocking(DBloodActor* actor, int) // 23
void callbackMakeMissileBlocking(DBloodActor* actor, sectortype*) // 23
{
if (!actor || actor->s().statnum != kStatProjectile) return;
actor->s().cstat |= CSTAT_SPRITE_BLOCK;
}
void callbackGenDudeUpdate(DBloodActor* actor, int) // 24
void callbackGenDudeUpdate(DBloodActor* actor, sectortype*) // 24
{
if (actor)
genDudeUpdate(actor);

View file

@ -348,9 +348,9 @@ void playerQavScenePlay(PLAYER* pPlayer);
void playerQavSceneDraw(PLAYER* pPlayer, int a2, double a3, double a4, int a5);
void playerQavSceneReset(PLAYER* pPlayer);
// ------------------------------------------------------------------------- //
void callbackUniMissileBurst(DBloodActor*actor, int nSprite);
void callbackMakeMissileBlocking(DBloodActor* actor, int nSprite);
void callbackGenDudeUpdate(DBloodActor* actor, int nSprite);
void callbackUniMissileBurst(DBloodActor*actor, sectortype* nSprite);
void callbackMakeMissileBlocking(DBloodActor* actor, sectortype* nSprite);
void callbackGenDudeUpdate(DBloodActor* actor, sectortype* nSprite);
// ------------------------------------------------------------------------- //
PLAYER* getPlayerById(int id);
bool isGrown(DBloodActor* pSprite);