- removed the owner fuckery in Blood.

Par for course I'd say - instead of checking for replaced player actors at the only time it really matters - i.e. when respawning, it was encoded into the stored value, making the entire thing very messy.
For mow, multiplayer handling is not needed, but when it does, better go over all actors and manually substitute the two relevant fields, i.e. sprite.owner and xsprite.burnsource.
This commit is contained in:
Christoph Oelckers 2020-12-02 19:56:32 +01:00
parent 045e487859
commit 19b731bc8f
8 changed files with 47 additions and 80 deletions

View file

@ -2360,36 +2360,7 @@ bool IsUnderwaterSector(int nSector)
return 0; return 0;
} }
int actSpriteOwnerToSpriteId(spritetype *pSprite) // Let's better forget that this shit ever existed. It will be a lot easier to substitute player owners upon respawn, if needed.
{
assert(pSprite != NULL);
if (pSprite->owner == -1)
return -1;
int nSprite = pSprite->owner & (kMaxSprites-1);
if (pSprite->owner & kMaxSprites)
nSprite = gPlayer[nSprite].pSprite->index;
return nSprite;
}
void actPropagateSpriteOwner(spritetype *pTarget, spritetype *pSource)
{
assert(pTarget != NULL && pSource != NULL);
if (IsPlayerSprite(pSource))
pTarget->owner = (pSource->type - kDudePlayer1) | kMaxSprites;
else
pTarget->owner = pSource->index;
}
int actSpriteIdToOwnerId(int nSprite)
{
if (nSprite == -1)
return -1;
assert(nSprite >= 0 && nSprite < kMaxSprites);
spritetype *pSprite = &sprite[nSprite];
if (IsPlayerSprite(pSprite))
nSprite = (pSprite->type - kDudePlayer1) | kMaxSprites;
return nSprite;
}
int actOwnerIdToSpriteId(int nSprite) int actOwnerIdToSpriteId(int nSprite)
{ {
@ -2689,7 +2660,7 @@ void sub_2A620(int nSprite, int x, int y, int z, int nSector, int nDist, int a7,
UNREFERENCED_PARAMETER(a12); UNREFERENCED_PARAMETER(a12);
UNREFERENCED_PARAMETER(a13); UNREFERENCED_PARAMETER(a13);
uint8_t va0[(kMaxSectors+7)>>3]; uint8_t va0[(kMaxSectors+7)>>3];
int nOwner = actSpriteIdToOwnerId(nSprite); int nOwner = sprite[nSprite].owner;
GetClosestSpriteSectors(nSector, x, y, nDist, va0); GetClosestSpriteSectors(nSector, x, y, nDist, va0);
nDist <<= 4; nDist <<= 4;
if (a10 & 2) if (a10 & 2)
@ -2766,14 +2737,14 @@ void sub_2AA94(DBloodActor* actor)
{ {
auto pXSprite = &actor->x(); auto pXSprite = &actor->x();
auto pSprite = &actor->s(); auto pSprite = &actor->s();
int nSprite = actOwnerIdToSpriteId(pSprite->owner); int nOwner = pSprite->owner;
actPostSprite(pSprite->index, kStatDecoration); actPostSprite(pSprite->index, kStatDecoration);
seqSpawn(9, 3, pSprite->extra); seqSpawn(9, 3, pSprite->extra);
if (Chance(0x8000)) if (Chance(0x8000))
pSprite->cstat |= 4; pSprite->cstat |= 4;
sfxPlay3DSound(pSprite, 303, 24+(pSprite->flags&3), 1); sfxPlay3DSound(pSprite, 303, 24+(pSprite->flags&3), 1);
sub_2A620(nSprite, pSprite->x, pSprite->y, pSprite->z, pSprite->sectnum, 128, 0, 60, DAMAGE_TYPE_3, 15, 120, 0, 0); sub_2A620(nOwner, pSprite->x, pSprite->y, pSprite->z, pSprite->sectnum, 128, 0, 60, DAMAGE_TYPE_3, 15, 120, 0, 0);
if (pXSprite->data4 > 1) if (pXSprite->data4 > 1)
{ {
GibSprite(pSprite, GIBTYPE_5, NULL, NULL); GibSprite(pSprite, GIBTYPE_5, NULL, NULL);
@ -3347,7 +3318,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType,
break; break;
case kDudeSpiderBrown: case kDudeSpiderBrown:
if (pSprite->owner != -1) { if (pSprite->owner != -1) {
spritetype *pOwner = &sprite[actSpriteOwnerToSpriteId(pSprite)]; spritetype *pOwner = &sprite[pSprite->owner];
gDudeExtra[pOwner->extra].at6.u1.xval2--; gDudeExtra[pOwner->extra].at6.u1.xval2--;
} }
@ -3357,7 +3328,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType,
break; break;
case kDudeSpiderRed: case kDudeSpiderRed:
if (pSprite->owner != -1) { if (pSprite->owner != -1) {
spritetype *pOwner = &sprite[actSpriteOwnerToSpriteId(pSprite)]; spritetype *pOwner = &sprite[pSprite->owner];
gDudeExtra[pOwner->extra].at6.u1.xval2--; gDudeExtra[pOwner->extra].at6.u1.xval2--;
} }
@ -3367,7 +3338,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType,
break; break;
case kDudeSpiderBlack: case kDudeSpiderBlack:
if (pSprite->owner != -1) { if (pSprite->owner != -1) {
spritetype *pOwner = &sprite[actSpriteOwnerToSpriteId(pSprite)]; spritetype *pOwner = &sprite[pSprite->owner];
gDudeExtra[pOwner->extra].at6.u1.xval2--; gDudeExtra[pOwner->extra].at6.u1.xval2--;
} }
@ -3581,7 +3552,7 @@ int actDamageSprite(int nSource, spritetype *pSprite, DAMAGE_TYPE damageType, in
default: default:
if (!(pSprite->flags & kHitagRespawn)) if (!(pSprite->flags & kHitagRespawn))
actPropagateSpriteOwner(pSprite, &sprite[nSource]); pSprite->owner = nSource;
break; break;
} }
@ -3724,7 +3695,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
switch (pMissile->type) { switch (pMissile->type) {
case kMissileLifeLeechRegular: case kMissileLifeLeechRegular:
if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo)) { if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo)) {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
DAMAGE_TYPE rand1 = (DAMAGE_TYPE)Random(7); DAMAGE_TYPE rand1 = (DAMAGE_TYPE)Random(7);
int rand2 = (7 + Random(7)) << 4; int rand2 = (7 + Random(7)) << 4;
int nDamage = actDamageSprite(nOwner, pSpriteHit, rand1, rand2); int nDamage = actDamageSprite(nOwner, pSpriteHit, rand1, rand2);
@ -3770,7 +3741,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
seqKill(3, nXMissile); seqKill(3, nXMissile);
if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo)) if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo))
{ {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (15+Random(7))<<4; int nDamage = (15+Random(7))<<4;
actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_2, nDamage); actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_2, nDamage);
} }
@ -3782,7 +3753,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
GibSprite(pMissile, GIBTYPE_6, NULL, NULL); GibSprite(pMissile, GIBTYPE_6, NULL, NULL);
if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo)) if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo))
{ {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (25+Random(20))<<4; int nDamage = (25+Random(20))<<4;
actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_5, nDamage); actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_5, nDamage);
} }
@ -3793,7 +3764,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
sfxKill3DSound(pMissile, -1, -1); sfxKill3DSound(pMissile, -1, -1);
sfxPlay3DSound(pMissile->x, pMissile->y, pMissile->z, 306, pMissile->sectnum); sfxPlay3DSound(pMissile->x, pMissile->y, pMissile->z, 306, pMissile->sectnum);
if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo)) { if (hitCode == 3 && pSpriteHit && (pThingInfo || pDudeInfo)) {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDmgMul = (pMissile->type == kMissileLifeLeechAltSmall) ? 6 : 3; int nDmgMul = (pMissile->type == kMissileLifeLeechAltSmall) ? 6 : 3;
int nDamage = (nDmgMul+Random(nDmgMul))<<4; int nDamage = (nDmgMul+Random(nDmgMul))<<4;
actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_5, nDamage); actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_5, nDamage);
@ -3806,7 +3777,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
{ {
if (pThingInfo && pSpriteHit->type == kThingTNTBarrel && pXSpriteHit->burnTime == 0) if (pThingInfo && pSpriteHit->type == kThingTNTBarrel && pXSpriteHit->burnTime == 0)
evPost(nSpriteHit, 3, 0, kCallbackFXFlameLick); evPost(nSpriteHit, 3, 0, kCallbackFXFlameLick);
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (50+Random(50))<<4; int nDamage = (50+Random(50))<<4;
actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_2, nDamage); actDamageSprite(nOwner, pSpriteHit, DAMAGE_TYPE_2, nDamage);
} }
@ -3819,7 +3790,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
case kMissileFlareRegular: case kMissileFlareRegular:
sfxKill3DSound(pMissile, -1, -1); sfxKill3DSound(pMissile, -1, -1);
if ((hitCode == 3 && pSpriteHit) && (pThingInfo || pDudeInfo)) { if ((hitCode == 3 && pSpriteHit) && (pThingInfo || pDudeInfo)) {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
if ((pThingInfo && pThingInfo->dmgControl[DAMAGE_TYPE_1] != 0) || (pDudeInfo && pDudeInfo->at70[DAMAGE_TYPE_1] != 0)) { if ((pThingInfo && pThingInfo->dmgControl[DAMAGE_TYPE_1] != 0) || (pDudeInfo && pDudeInfo->at70[DAMAGE_TYPE_1] != 0)) {
if (pThingInfo && pSpriteHit->type == kThingTNTBarrel && pXSpriteHit->burnTime == 0) if (pThingInfo && pSpriteHit->type == kThingTNTBarrel && pXSpriteHit->burnTime == 0)
evPost(nSpriteHit, 3, 0, kCallbackFXFlameLick); evPost(nSpriteHit, 3, 0, kCallbackFXFlameLick);
@ -3863,7 +3834,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
XSPRITE *pXObject = &xsprite[pObject->extra]; XSPRITE *pXObject = &xsprite[pObject->extra];
if ((pObject->statnum == kStatThing || pObject->statnum == kStatDude) && pXObject->burnTime == 0) if ((pObject->statnum == kStatThing || pObject->statnum == kStatDude) && pXObject->burnTime == 0)
evPost(nObject, 3, 0, kCallbackFXFlameLick); evPost(nObject, 3, 0, kCallbackFXFlameLick);
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
actBurnSprite(pMissile->owner, pXObject, (4+gGameOptions.nDifficulty)<<2); actBurnSprite(pMissile->owner, pXObject, (4+gGameOptions.nDifficulty)<<2);
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_1, 8); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_1, 8);
} }
@ -3881,7 +3852,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
XSPRITE *pXObject = &xsprite[pObject->extra]; XSPRITE *pXObject = &xsprite[pObject->extra];
if ((pObject->statnum == kStatThing || pObject->statnum == kStatDude) && pXObject->burnTime == 0) if ((pObject->statnum == kStatThing || pObject->statnum == kStatDude) && pXObject->burnTime == 0)
evPost(nObject, 3, 0, kCallbackFXFlameLick); evPost(nObject, 3, 0, kCallbackFXFlameLick);
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
actBurnSprite(pMissile->owner, pXObject, (4+gGameOptions.nDifficulty)<<2); actBurnSprite(pMissile->owner, pXObject, (4+gGameOptions.nDifficulty)<<2);
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_1, 8); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_1, 8);
int nDamage = (25+Random(10))<<4; int nDamage = (25+Random(10))<<4;
@ -3902,7 +3873,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
XSPRITE *pXObject = &xsprite[pObject->extra]; XSPRITE *pXObject = &xsprite[pObject->extra];
if ((pObject->statnum == kStatThing || pObject->statnum == kStatDude) && pXObject->burnTime == 0) if ((pObject->statnum == kStatThing || pObject->statnum == kStatDude) && pXObject->burnTime == 0)
evPost(nObject, 3, 0, kCallbackFXFlameLick); evPost(nObject, 3, 0, kCallbackFXFlameLick);
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
actBurnSprite(pMissile->owner, pXObject, 32); actBurnSprite(pMissile->owner, pXObject, 32);
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_5, 12); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_5, 12);
int nDamage = (25+Random(10))<<4; int nDamage = (25+Random(10))<<4;
@ -3923,7 +3894,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
spritetype *pObject = &sprite[nObject]; spritetype *pObject = &sprite[nObject];
if (pObject->statnum == kStatDude) if (pObject->statnum == kStatDude)
{ {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (25+Random(10))<<4; int nDamage = (25+Random(10))<<4;
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_5, nDamage); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_5, nDamage);
} }
@ -3941,7 +3912,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
spritetype *pObject = &sprite[nObject]; spritetype *pObject = &sprite[nObject];
if (pObject->statnum == kStatDude) if (pObject->statnum == kStatDude)
{ {
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (10+Random(10))<<4; int nDamage = (10+Random(10))<<4;
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_5, nDamage); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_5, nDamage);
spritetype *pOwner = &sprite[nOwner]; spritetype *pOwner = &sprite[nOwner];
@ -3964,7 +3935,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
int nObject = gHitInfo.hitsprite; int nObject = gHitInfo.hitsprite;
assert(nObject >= 0 && nObject < kMaxSprites); assert(nObject >= 0 && nObject < kMaxSprites);
spritetype *pObject = &sprite[nObject]; spritetype *pObject = &sprite[nObject];
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (15+Random(10))<<4; int nDamage = (15+Random(10))<<4;
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_6, nDamage); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_6, nDamage);
} }
@ -3977,7 +3948,7 @@ void actImpactMissile(spritetype *pMissile, int hitCode)
int nObject = gHitInfo.hitsprite; int nObject = gHitInfo.hitsprite;
assert(nObject >= 0 && nObject < kMaxSprites); assert(nObject >= 0 && nObject < kMaxSprites);
spritetype *pObject = &sprite[nObject]; spritetype *pObject = &sprite[nObject];
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
int nDamage = (10+Random(10))<<4; int nDamage = (10+Random(10))<<4;
actDamageSprite(nOwner, pObject, DAMAGE_TYPE_0, nDamage); actDamageSprite(nOwner, pObject, DAMAGE_TYPE_0, nDamage);
} }
@ -4188,7 +4159,7 @@ void ProcessTouchObjects(spritetype *pSprite, int nXSprite)
case kDudeBurningZombieButcher: case kDudeBurningZombieButcher:
// This does not make sense // This does not make sense
pXSprite->burnTime = ClipLow(pXSprite->burnTime-4, 0); pXSprite->burnTime = ClipLow(pXSprite->burnTime-4, 0);
actDamageSprite(actOwnerIdToSpriteId(pXSprite->burnSource), pSprite, DAMAGE_TYPE_1, 8); actDamageSprite(pXSprite->burnSource, pSprite, DAMAGE_TYPE_1, 8);
break; break;
} }
} }
@ -4605,7 +4576,7 @@ void MoveDude(spritetype *pSprite)
// Should be pHitSprite here // Should be pHitSprite here
if (pSprite->extra > 0) if (pSprite->extra > 0)
pHitXSprite = &xsprite[pHitSprite->extra]; pHitXSprite = &xsprite[pHitSprite->extra];
int nOwner = actSpriteOwnerToSpriteId(pHitSprite); int nOwner = pHitSprite->owner;
if (pHitSprite->statnum == kStatProjectile && !(pHitSprite->flags&32) && pSprite->index != nOwner) if (pHitSprite->statnum == kStatProjectile && !(pHitSprite->flags&32) && pSprite->index != nOwner)
{ {
@ -5088,7 +5059,7 @@ int MoveMissile(spritetype *pSprite)
int bakCstat = 0; int bakCstat = 0;
if (pSprite->owner >= 0) if (pSprite->owner >= 0)
{ {
int nOwner = actSpriteOwnerToSpriteId(pSprite); int nOwner = pSprite->owner;
pOwner = &sprite[nOwner]; pOwner = &sprite[nOwner];
if (IsDudeSprite(pOwner)) if (IsDudeSprite(pOwner))
{ {
@ -5460,7 +5431,7 @@ void actProcessSprites(void)
if (pXSprite->burnTime > 0) if (pXSprite->burnTime > 0)
{ {
pXSprite->burnTime = ClipLow(pXSprite->burnTime-4,0); pXSprite->burnTime = ClipLow(pXSprite->burnTime-4,0);
actDamageSprite(actOwnerIdToSpriteId(pXSprite->burnSource), pSprite, DAMAGE_TYPE_1, 8); actDamageSprite(pXSprite->burnSource, pSprite, DAMAGE_TYPE_1, 8);
} }
if (pXSprite->Proximity) { if (pXSprite->Proximity) {
@ -5493,7 +5464,7 @@ void actProcessSprites(void)
if (pSprite->type == kModernThingEnemyLifeLeech) proxyDist = 512; if (pSprite->type == kModernThingEnemyLifeLeech) proxyDist = 512;
#endif #endif
if (pSprite->type == kThingDroppedLifeLeech && pXSprite->target == -1) { if (pSprite->type == kThingDroppedLifeLeech && pXSprite->target == -1) {
int nOwner = actOwnerIdToSpriteId(pSprite->owner); int nOwner = pSprite->owner;
spritetype *pOwner = &sprite[nOwner]; spritetype *pOwner = &sprite[nOwner];
if (!IsPlayerSprite(pOwner)) if (!IsPlayerSprite(pOwner))
continue; continue;
@ -5528,7 +5499,7 @@ void actProcessSprites(void)
break; break;
#endif #endif
} }
if (pSprite->owner == -1) actPropagateSpriteOwner(pSprite, pSprite2); if (pSprite->owner == -1) pSprite->owner = pSprite2->index;
trTriggerSprite(nSprite, pXSprite, kCmdSpriteProximity); trTriggerSprite(nSprite, pXSprite, kCmdSpriteProximity);
} }
} }
@ -5623,7 +5594,7 @@ void actProcessSprites(void)
int nObject = hit & 0x3fff; int nObject = hit & 0x3fff;
assert(nObject >= 0 && nObject < kMaxSprites); assert(nObject >= 0 && nObject < kMaxSprites);
spritetype * pObject = &sprite[nObject]; spritetype * pObject = &sprite[nObject];
actDamageSprite(actSpriteOwnerToSpriteId(pSprite), pObject, DAMAGE_TYPE_0, pXSprite->data1); actDamageSprite(pSprite->owner, pObject, DAMAGE_TYPE_0, pXSprite->data1);
} }
break; break;
#endif #endif
@ -5634,13 +5605,13 @@ void actProcessSprites(void)
int nObject = hit & 0x3fff; int nObject = hit & 0x3fff;
assert(nObject >= 0 && nObject < kMaxSprites); assert(nObject >= 0 && nObject < kMaxSprites);
spritetype *pObject = &sprite[nObject]; spritetype *pObject = &sprite[nObject];
actDamageSprite(actSpriteOwnerToSpriteId(pSprite), pObject, DAMAGE_TYPE_0, 12); actDamageSprite(pSprite->owner, pObject, DAMAGE_TYPE_0, 12);
} }
break; break;
case kThingPodGreenBall: case kThingPodGreenBall:
if ((hit&0xc000) == 0x4000) if ((hit&0xc000) == 0x4000)
{ {
sub_2A620(actSpriteOwnerToSpriteId(pSprite), pSprite->x, pSprite->y, pSprite->z, pSprite->sectnum, 200, 1, 20, DAMAGE_TYPE_3, 6, 0, 0, 0); sub_2A620(pSprite->owner, pSprite->x, pSprite->y, pSprite->z, pSprite->sectnum, 200, 1, 20, DAMAGE_TYPE_3, 6, 0, 0, 0);
evPost(pSprite->index, 3, 0, kCallbackFXPodBloodSplat); evPost(pSprite->index, 3, 0, kCallbackFXPodBloodSplat);
} }
else else
@ -5650,7 +5621,7 @@ void actProcessSprites(void)
break; break;
assert(nObject >= 0 && nObject < kMaxSprites); assert(nObject >= 0 && nObject < kMaxSprites);
spritetype *pObject = &sprite[nObject]; spritetype *pObject = &sprite[nObject];
actDamageSprite(actSpriteOwnerToSpriteId(pSprite), pObject, DAMAGE_TYPE_0, 12); actDamageSprite(pSprite->owner, pObject, DAMAGE_TYPE_0, 12);
evPost(pSprite->index, 3, 0, kCallbackFXPodBloodSplat); evPost(pSprite->index, 3, 0, kCallbackFXPodBloodSplat);
} }
break; break;
@ -5689,7 +5660,7 @@ void actProcessSprites(void)
if (pSprite->flags & 32) if (pSprite->flags & 32)
continue; continue;
int nOwner = actSpriteOwnerToSpriteId(pSprite); int nOwner = pSprite->owner;
int nType = pSprite->type; int nType = pSprite->type;
assert(nType >= 0 && nType < kExplodeMax); assert(nType >= 0 && nType < kExplodeMax);
const EXPLOSION *pExplodeInfo = &explodeInfo[nType]; const EXPLOSION *pExplodeInfo = &explodeInfo[nType];
@ -5905,11 +5876,11 @@ void actProcessSprites(void)
case kDudeBurningCultist: case kDudeBurningCultist:
case kDudeBurningZombieAxe: case kDudeBurningZombieAxe:
case kDudeBurningZombieButcher: case kDudeBurningZombieButcher:
actDamageSprite(actOwnerIdToSpriteId(pXSprite->burnSource), pSprite, DAMAGE_TYPE_1, 8); actDamageSprite(pXSprite->burnSource, pSprite, DAMAGE_TYPE_1, 8);
break; break;
default: default:
pXSprite->burnTime = ClipLow(pXSprite->burnTime-4, 0); pXSprite->burnTime = ClipLow(pXSprite->burnTime-4, 0);
actDamageSprite(actOwnerIdToSpriteId(pXSprite->burnSource), pSprite, DAMAGE_TYPE_1, 8); actDamageSprite(pXSprite->burnSource, pSprite, DAMAGE_TYPE_1, 8);
break; break;
} }
} }
@ -6303,7 +6274,7 @@ spritetype * actFireThing(spritetype *pSprite, int a2, int a3, int a4, int thing
y = gHitInfo.hity-mulscale28(pSprite->clipdist<<1, Sin(pSprite->ang)); y = gHitInfo.hity-mulscale28(pSprite->clipdist<<1, Sin(pSprite->ang));
} }
spritetype *pThing = actSpawnThing(pSprite->sectnum, x, y, z, thingType); spritetype *pThing = actSpawnThing(pSprite->sectnum, x, y, z, thingType);
actPropagateSpriteOwner(pThing, pSprite); pThing->owner = pSprite->index;
pThing->ang = pSprite->ang; pThing->ang = pSprite->ang;
xvel[pThing->index] = mulscale30(a6, Cos(pThing->ang)); xvel[pThing->index] = mulscale30(a6, Cos(pThing->ang));
yvel[pThing->index] = mulscale30(a6, Sin(pThing->ang)); yvel[pThing->index] = mulscale30(a6, Sin(pThing->ang));
@ -6357,7 +6328,7 @@ spritetype* actFireMissile(spritetype *pSprite, int a2, int a3, int a4, int a5,
xvel[nMissile] = mulscale(pMissileInfo->velocity, a4, 14); xvel[nMissile] = mulscale(pMissileInfo->velocity, a4, 14);
yvel[nMissile] = mulscale(pMissileInfo->velocity, a5, 14); yvel[nMissile] = mulscale(pMissileInfo->velocity, a5, 14);
zvel[nMissile] = mulscale(pMissileInfo->velocity, a6, 14); zvel[nMissile] = mulscale(pMissileInfo->velocity, a6, 14);
actPropagateSpriteOwner(pMissile, pSprite); pMissile->owner = pSprite->index;
pMissile->cstat |= 1; pMissile->cstat |= 1;
int nXSprite = pMissile->extra; int nXSprite = pMissile->extra;
assert(nXSprite > 0 && nXSprite < kMaxXSprites); assert(nXSprite > 0 && nXSprite < kMaxXSprites);
@ -6670,7 +6641,7 @@ void actFireVector(spritetype *pShooter, int a2, int a3, int a4, int a5, int a6,
XSPRITE *pXSprite = &xsprite[nXSprite]; XSPRITE *pXSprite = &xsprite[nXSprite];
if (!pXSprite->burnTime) if (!pXSprite->burnTime)
evPost(nSprite, 3, 0, kCallbackFXFlameLick); evPost(nSprite, 3, 0, kCallbackFXFlameLick);
actBurnSprite(actSpriteIdToOwnerId(nShooter), pXSprite, pVectorData->burnTime); actBurnSprite(sprite[nShooter].owner, pXSprite, pVectorData->burnTime);
} }
} }
if (pSprite->statnum == kStatDude) if (pSprite->statnum == kStatDude)
@ -6700,7 +6671,7 @@ void actFireVector(spritetype *pShooter, int a2, int a3, int a4, int a5, int a6,
XSPRITE *pXSprite = &xsprite[nXSprite]; XSPRITE *pXSprite = &xsprite[nXSprite];
if (!pXSprite->burnTime) if (!pXSprite->burnTime)
evPost(nSprite, 3, 0, kCallbackFXFlameLick); evPost(nSprite, 3, 0, kCallbackFXFlameLick);
actBurnSprite(actSpriteIdToOwnerId(nShooter), pXSprite, pVectorData->burnTime); actBurnSprite(sprite[nShooter].owner, pXSprite, pVectorData->burnTime);
} }
if (Chance(pVectorData->fxChance)) if (Chance(pVectorData->fxChance))
{ {
@ -6754,7 +6725,7 @@ void actFireVector(spritetype *pShooter, int a2, int a3, int a4, int a5, int a6,
if (pVectorData->burnTime != 0) { if (pVectorData->burnTime != 0) {
if (!xsprite[nXSprite].burnTime) evPost(nSprite, 3, 0, kCallbackFXFlameLick); if (!xsprite[nXSprite].burnTime) evPost(nSprite, 3, 0, kCallbackFXFlameLick);
actBurnSprite(actSpriteIdToOwnerId(nShooter), &xsprite[nXSprite], pVectorData->burnTime); actBurnSprite(sprite[nShooter].owner, &xsprite[nXSprite], pVectorData->burnTime);
} }
//if (pSprite->type >= kThingBase && pSprite->type < kThingMax) //if (pSprite->type >= kThingBase && pSprite->type < kThingMax)

View file

@ -216,10 +216,6 @@ void actDoLight(int spriteNum);
#endif #endif
bool IsUnderwaterSector(int nSector); bool IsUnderwaterSector(int nSector);
int actSpriteOwnerToSpriteId(spritetype *pSprite);
void actPropagateSpriteOwner(spritetype *pTarget, spritetype *pSource);
int actSpriteIdToOwnerId(int nSprite);
int actOwnerIdToSpriteId(int nSprite);
bool actTypeInSector(int nSector, int nType); bool actTypeInSector(int nSector, int nType);
void actAllocateSpares(void); void actAllocateSpares(void);
void actInit(bool bSaveLoad); void actInit(bool bSaveLoad);

View file

@ -887,7 +887,7 @@ void aiSetTarget(XSPRITE *pXSprite, int nTarget)
spritetype *pTarget = &sprite[nTarget]; spritetype *pTarget = &sprite[nTarget];
if (pTarget->type >= kDudeBase && pTarget->type < kDudeMax) if (pTarget->type >= kDudeBase && pTarget->type < kDudeMax)
{ {
if (actSpriteOwnerToSpriteId(&sprite[pXSprite->reference]) != nTarget) if (sprite[pXSprite->reference].owner != nTarget)
{ {
pXSprite->target = nTarget; pXSprite->target = nTarget;
DUDEINFO *pDudeInfo = getDudeInfo(pTarget->type); DUDEINFO *pDudeInfo = getDudeInfo(pTarget->type);

View file

@ -67,7 +67,7 @@ void sub_71A90(int, DBloodActor* actor)
spritetype *pTarget = &sprite[pXSprite->target]; spritetype *pTarget = &sprite[pXSprite->target];
XSPRITE *pXTarget = &xsprite[pTarget->extra]; XSPRITE *pXTarget = &xsprite[pTarget->extra];
int nTarget = pTarget->index; int nTarget = pTarget->index;
int nOwner = actSpriteIdToOwnerId(pSprite->index); int nOwner = pSprite->owner;
if (pXTarget->burnTime == 0) if (pXTarget->burnTime == 0)
evPost(nTarget, 3, 0, kCallbackFXFlameLick); evPost(nTarget, 3, 0, kCallbackFXFlameLick);
actBurnSprite(nOwner, pXTarget, 40); actBurnSprite(nOwner, pXTarget, 40);

View file

@ -612,7 +612,7 @@ void sub_76A08(spritetype *pSprite, spritetype *pSprite2, PLAYER *pPlayer) // ??
void DropVoodooCb(int nSprite) // unused void DropVoodooCb(int nSprite) // unused
{ {
spritetype *pSprite = &sprite[nSprite]; spritetype *pSprite = &sprite[nSprite];
int nOwner = actSpriteOwnerToSpriteId(pSprite); int nOwner = pSprite->owner;
if (nOwner < 0 || nOwner >= kMaxSprites) if (nOwner < 0 || nOwner >= kMaxSprites)
{ {
evPost(nSprite, 3, 0, kCallbackRemove); evPost(nSprite, 3, 0, kCallbackRemove);

View file

@ -319,7 +319,7 @@ const char* GameInterface::GenericCheat(int player, int cheat)
{ {
if (!gMe->pXSprite->burnTime) if (!gMe->pXSprite->burnTime)
evPost(gMe->nSprite, 3, 0, kCallbackFXFlameLick); evPost(gMe->nSprite, 3, 0, kCallbackFXFlameLick);
actBurnSprite(actSpriteIdToOwnerId(gMe->nSprite), gMe->pXSprite, 2400); actBurnSprite(gMe->pSprite->index, gMe->pXSprite, 2400);
return GStrings("TXTB_FIRED"); return GStrings("TXTB_FIRED");
} }
case kCheatEdmark: case kCheatEdmark:
@ -332,7 +332,7 @@ const char* GameInterface::GenericCheat(int player, int cheat)
gMe->armor[1] = VanillaMode() ? 200 : 3200; gMe->armor[1] = VanillaMode() ? 200 : 3200;
if (!gMe->pXSprite->burnTime) if (!gMe->pXSprite->burnTime)
evPost(gMe->nSprite, 3, 0, kCallbackFXFlameLick); evPost(gMe->nSprite, 3, 0, kCallbackFXFlameLick);
actBurnSprite(actSpriteIdToOwnerId(gMe->nSprite), gMe->pXSprite, 2400); actBurnSprite(gMe->pSprite->index, gMe->pXSprite, 2400);
return GStrings("TXTB_RETARD"); return GStrings("TXTB_RETARD");
} }
case kCheatSterno: case kCheatSterno:

View file

@ -877,7 +877,7 @@ char findDroppedLeech(PLAYER *a1, spritetype *a2)
if (a2 && a2->index == nSprite) if (a2 && a2->index == nSprite)
continue; continue;
spritetype *pSprite = &sprite[nSprite]; spritetype *pSprite = &sprite[nSprite];
if (pSprite->type == kThingDroppedLifeLeech && actOwnerIdToSpriteId(pSprite->owner) == a1->nSprite) if (pSprite->type == kThingDroppedLifeLeech && pSprite->owner == a1->nSprite)
return 1; return 1;
} }
return 0; return 0;

View file

@ -1639,7 +1639,7 @@ void AltFireNapalm(int nTrigger, PLAYER *pPlayer)
pXSprite->data4 = ClipHigh(pPlayer->ammoCount[4], 12); pXSprite->data4 = ClipHigh(pPlayer->ammoCount[4], 12);
UseAmmo(pPlayer, 4, pXSprite->data4); UseAmmo(pPlayer, 4, pXSprite->data4);
seqSpawn(22, 3, pMissile->extra, -1); seqSpawn(22, 3, pMissile->extra, -1);
actBurnSprite(actSpriteIdToOwnerId(pPlayer->pSprite->index), pXSprite, 600); actBurnSprite(pPlayer->pSprite->index, pXSprite, 600);
evPost(pMissile->index, 3, 0, kCallbackFXFlameLick); evPost(pMissile->index, 3, 0, kCallbackFXFlameLick);
sfxPlay3DSound(pMissile, 480, 2, 0); sfxPlay3DSound(pMissile, 480, 2, 0);
pPlayer->visibility = 30; pPlayer->visibility = 30;
@ -2551,7 +2551,7 @@ void teslaHit(spritetype *pMissile, int a2)
int z = pMissile->z; int z = pMissile->z;
int nDist = 300; int nDist = 300;
int nSector = pMissile->sectnum; int nSector = pMissile->sectnum;
int nOwner = actSpriteOwnerToSpriteId(pMissile); int nOwner = pMissile->owner;
GetClosestSpriteSectors(nSector, x, y, nDist, va4); GetClosestSpriteSectors(nSector, x, y, nDist, va4);
char v4 = 1; char v4 = 1;
int v24 = -1; int v24 = -1;