mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 08:51:24 +00:00
- route all access to genDudeExtra through the method in DBloodActor
This commit is contained in:
parent
cdacf8e470
commit
062b3dbf76
5 changed files with 38 additions and 33 deletions
|
@ -2946,7 +2946,7 @@ static bool actKillModernDude(DBloodActor* actor, DAMAGE_TYPE damageType)
|
|||
{
|
||||
auto pSprite = &actor->s();
|
||||
auto pXSprite = &actor->x();
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
removeDudeStuff(pSprite);
|
||||
if (pXSprite->txID <= 0 || getNextIncarnation(pXSprite) == nullptr)
|
||||
{
|
||||
|
@ -3343,7 +3343,7 @@ static void modernCustomDudeDeath(DBloodActor* actor, int nSeq, int damageType)
|
|||
int dudeToGib = (actCheckRespawn(actor)) ? -1 : ((nSeq == 3) ? nDudeToGibClient2 : nDudeToGibClient1);
|
||||
if (nSeq == 3)
|
||||
{
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
if (pExtra->availDeaths[kDmgBurn] == 3) seqSpawn((15 + Random(2)) + pXSprite->data2, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 2) seqSpawn(16 + pXSprite->data2, actor, dudeToGib);
|
||||
else if (pExtra->availDeaths[kDmgBurn] == 1) seqSpawn(15 + pXSprite->data2, actor, dudeToGib);
|
||||
|
|
|
@ -1052,7 +1052,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
|
|||
|
||||
if (pSprite->type == kDudeModernCustom)
|
||||
{
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
if (nDmgType == kDamageBurn)
|
||||
{
|
||||
if (pXSprite->health > (uint32_t)pDudeInfo->fleeHealth) return nDamage;
|
||||
|
@ -1273,7 +1273,7 @@ void RecoilDude(DBloodActor* actor)
|
|||
#ifdef NOONE_EXTENSIONS
|
||||
case kDudeModernCustom:
|
||||
{
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite); int rChance = getRecoilChance(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra(); int rChance = getRecoilChance(pSprite);
|
||||
if (pExtra->canElectrocute && pDudeExtra->teslaHit && !spriteIsUnderwater(pSprite, false))
|
||||
{
|
||||
|
||||
|
@ -1668,7 +1668,7 @@ void aiProcessDudes(void)
|
|||
#ifdef NOONE_EXTENSIONS
|
||||
case kDudeModernCustom:
|
||||
case kDudeModernCustomBurning: {
|
||||
GENDUDEEXTRA* pExtra = &gGenDudeExtra[pSprite->index];
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
if (pExtra->slaveCount > 0) updateTargetOfSlaves(pSprite);
|
||||
if (pExtra->nLifeLeech >= 0) updateTargetOfLeech(pSprite);
|
||||
if (pXSprite->stateTimer == 0 && pXSprite->aiState && pXSprite->aiState->nextState
|
||||
|
|
|
@ -123,7 +123,7 @@ static void forcePunch(DBloodActor* actor)
|
|||
{
|
||||
auto pXSprite = &actor->x();
|
||||
auto pSprite = &actor->s();
|
||||
if (gGenDudeExtra[pSprite->index].forcePunch && seqGetStatus(3, pSprite->extra) == -1)
|
||||
if (actor->genDudeExtra().forcePunch && seqGetStatus(3, pSprite->extra) == -1)
|
||||
punchCallback(0, actor);
|
||||
}
|
||||
|
||||
|
@ -146,7 +146,7 @@ static bool genDudeAdjustSlope(DBloodActor* actor, int dist, int weaponType, int
|
|||
{
|
||||
int fStart = 0;
|
||||
int fEnd = 0;
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
unsigned int clipMask = (weaponType == kGenDudeWeaponMissile) ? CLIPMASK0 : CLIPMASK1;
|
||||
|
||||
for (int i = -8191; i < 8192; i += by)
|
||||
|
@ -185,7 +185,8 @@ GENDUDEEXTRA* genDudeExtra(spritetype* pGenDude) {
|
|||
}
|
||||
|
||||
void genDudeUpdate(spritetype* pSprite) {
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
auto actor = &bloodActors[pSprite->index];
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
for (int i = 0; i < kGenDudePropertyMax; i++) {
|
||||
if (pExtra->updReq[i]) genDudePrepare(pSprite, i);
|
||||
}
|
||||
|
@ -239,7 +240,7 @@ void genDudeAttack1(int, DBloodActor* actor)
|
|||
int dx, dy, dz;
|
||||
actor->xvel() = actor->yvel() = 0;
|
||||
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
short dispersion = pExtra->baseDispersion;
|
||||
if (inDuck(pXSprite->aiState))
|
||||
dispersion = ClipLow(dispersion >> 1, kGenDudeMinDispesion);
|
||||
|
@ -322,8 +323,8 @@ static void ThrowThing(DBloodActor* actor, bool impact)
|
|||
if (!(pTarget->type >= kDudeBase && pTarget->type < kDudeMax))
|
||||
return;
|
||||
|
||||
short curWeapon = gGenDudeExtra[sprite[pXSprite->reference].index].curWeapon;
|
||||
short weaponType = gGenDudeExtra[sprite[pXSprite->reference].index].weaponType;
|
||||
int curWeapon = actor->genDudeExtra().curWeapon;
|
||||
int weaponType = actor->genDudeExtra().weaponType;
|
||||
if (weaponType != kGenDudeWeaponThrow) return;
|
||||
|
||||
const THINGINFO* pThinkInfo = &thingInfo[curWeapon - kThingBase];
|
||||
|
@ -401,7 +402,7 @@ static void ThrowThing(DBloodActor* actor, bool impact)
|
|||
pXThing->Proximity = true;
|
||||
pXThing->stateTimer = 1;
|
||||
|
||||
gGenDudeExtra[pSprite->index].nLifeLeech = pThing->index;
|
||||
actor->genDudeExtra().nLifeLeech = pThing->index;
|
||||
evPost(pThing->index, 3, 80, kCallbackLeechStateTimer);
|
||||
return;
|
||||
}
|
||||
|
@ -520,7 +521,7 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
//aiChooseDirection(actor,getangle(dx, dy));
|
||||
aiGenDudeChooseDirection(pSprite, pXSprite, getangle(dx, dy), xvelocity, yvelocity);
|
||||
|
||||
GENDUDEEXTRA* pExtra = &gGenDudeExtra[pSprite->index];
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
if (!pExtra->canAttack)
|
||||
{
|
||||
if (pExtra->canWalk) aiSetTarget(actor, actor); // targeting self???
|
||||
|
@ -558,8 +559,8 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
|
||||
actor->dudeSlope = DivScale(pTarget->z - pSprite->z, dist, 10);
|
||||
|
||||
short curWeapon = gGenDudeExtra[pSprite->index].curWeapon;
|
||||
short weaponType = gGenDudeExtra[pSprite->index].weaponType;
|
||||
int curWeapon = actor->genDudeExtra().curWeapon;
|
||||
int weaponType = actor->genDudeExtra().weaponType;
|
||||
spritetype* pLeech = leechIsDropped(pSprite);
|
||||
const VECTORDATA* meleeVector = &gVectorData[22];
|
||||
if (weaponType == kGenDudeWeaponThrow)
|
||||
|
@ -653,7 +654,7 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
} else {
|
||||
|
||||
int vdist; int mdist; int defDist;
|
||||
defDist = vdist = mdist = gGenDudeExtra[pSprite->index].fireDist;
|
||||
defDist = vdist = mdist = actor->genDudeExtra().fireDist;
|
||||
|
||||
if (weaponType == kGenDudeWeaponHitscan) {
|
||||
if ((vdist = gVectorData[curWeapon].maxDist) <= 0)
|
||||
|
@ -667,7 +668,7 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
aiSetTarget(actor, pSprite->x, pSprite->y, pSprite->z);
|
||||
return;
|
||||
}
|
||||
else if (gGenDudeExtra[pSprite->index].slaveCount > gGameOptions.nDifficulty || dist < meleeVector->maxDist)
|
||||
else if (actor->genDudeExtra().slaveCount > gGameOptions.nDifficulty || dist < meleeVector->maxDist)
|
||||
{
|
||||
if (dist <= meleeVector->maxDist)
|
||||
{
|
||||
|
@ -1071,7 +1072,7 @@ void aiGenDudeMoveForward(DBloodActor* actor)
|
|||
auto pXSprite = &actor->x();
|
||||
auto pSprite = &actor->s();
|
||||
DUDEINFO* pDudeInfo = getDudeInfo(pSprite->type);
|
||||
GENDUDEEXTRA* pExtra = &gGenDudeExtra[pSprite->index];
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
int maxTurn = pDudeInfo->angSpeed * 4 >> 4;
|
||||
|
||||
if (pExtra->canFly)
|
||||
|
@ -1168,11 +1169,13 @@ void aiGenDudeNewState(spritetype* pSprite, AISTATE* pAIState) {
|
|||
Printf(PRINT_HIGH, "!xspriRangeIsFine(pSprite->extra)");
|
||||
return;
|
||||
}
|
||||
auto actor = &bloodActors[pSprite->index];
|
||||
|
||||
XSPRITE* pXSprite = &xsprite[pSprite->extra];
|
||||
|
||||
// redirect dudes which cannot walk to non-walk states
|
||||
if (!gGenDudeExtra[pSprite->index].canWalk) {
|
||||
if (!actor->genDudeExtra().canWalk)
|
||||
{
|
||||
|
||||
if (pAIState == &genDudeDodgeL || pAIState == &genDudeDodgeShortL || pAIState == &genDudeDodgeShorterL)
|
||||
pAIState = &genDudeRecoilL;
|
||||
|
@ -1234,7 +1237,7 @@ bool playGenDudeSound(spritetype* pSprite, int mode) {
|
|||
const GENDUDESND* sndInfo =& gCustomDudeSnd[mode]; bool gotSnd = false;
|
||||
short sndStartId = xsprite[pSprite->extra].sysData1; int rand = sndInfo->randomRange;
|
||||
int sndId = (sndStartId <= 0) ? sndInfo->defaultSndId : sndStartId + sndInfo->sndIdOffset;
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite);
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
|
||||
// let's check if there same sounds already played by other dudes
|
||||
// so we won't get a lot of annoying screams in the same time and ensure sound played in it's full length (if not interruptable)
|
||||
|
@ -1966,8 +1969,10 @@ void updateTargetOfSlaves(spritetype* pSprite) {
|
|||
return;
|
||||
}
|
||||
|
||||
auto actor = &bloodActors[pSprite->index];
|
||||
XSPRITE* pXSprite = &xsprite[pSprite->extra];
|
||||
GENDUDEEXTRA* pExtra = genDudeExtra(pSprite); short* slave = pExtra->slave;
|
||||
GENDUDEEXTRA* pExtra = &actor->genDudeExtra();
|
||||
short* slave = pExtra->slave;
|
||||
spritetype* pTarget = (pXSprite->target_i >= 0 && IsDudeSprite(&sprite[pXSprite->target_i])) ? &sprite[pXSprite->target_i] : NULL;
|
||||
XSPRITE* pXTarget = (pTarget != NULL && xspriRangeIsFine(pTarget->extra) && xsprite[pTarget->extra].health > 0) ? &xsprite[pTarget->extra] : NULL;
|
||||
|
||||
|
|
|
@ -195,7 +195,6 @@ struct GENDUDEEXTRA
|
|||
|
||||
extern GENDUDEEXTRA gGenDudeExtra[kMaxSprites];
|
||||
|
||||
GENDUDEEXTRA* genDudeExtra(spritetype* pGenDude);
|
||||
XSPRITE* getNextIncarnation(XSPRITE* pXSprite);
|
||||
void killDudeLeech(spritetype* pLeech);
|
||||
void removeLeech(spritetype* pLeech, bool delSprite = true);
|
||||
|
|
|
@ -3760,6 +3760,7 @@ bool condCheckDude(XSPRITE* pXCond, int cmpOp, bool PUSH) {
|
|||
if (objType != OBJ_SPRITE || !spriRangeIsFine(objIndex))
|
||||
condError(pXCond, "Object #%d (objType: %d) is not a sprite!", objIndex, objType);
|
||||
|
||||
auto actor = &bloodActors[objIndex];
|
||||
spritetype* pSpr = &sprite[objIndex];
|
||||
if (!xsprIsFine(pSpr) || pSpr->type == kThingBloodChunks)
|
||||
condError(pXCond, "Object #%d (objType: %d) is dead!", objIndex, objType);
|
||||
|
@ -3846,12 +3847,12 @@ bool condCheckDude(XSPRITE* pXCond, int cmpOp, bool PUSH) {
|
|||
case kDudeModernCustomBurning:
|
||||
switch (cond) {
|
||||
case 20: // life leech is thrown?
|
||||
var = genDudeExtra(pSpr)->nLifeLeech;
|
||||
var = actor->genDudeExtra().nLifeLeech;
|
||||
if (!spriRangeIsFine(var)) return false;
|
||||
else if (PUSH) condPush(pXCond, OBJ_SPRITE, var);
|
||||
return true;
|
||||
case 21: // life leech is destroyed?
|
||||
var = genDudeExtra(pSpr)->nLifeLeech;
|
||||
var = actor->genDudeExtra().nLifeLeech;
|
||||
if (!spriRangeIsFine(var) && pSpr->owner == kMaxSprites - 1) return true;
|
||||
else if (PUSH) condPush(pXCond, OBJ_SPRITE, var);
|
||||
return false;
|
||||
|
@ -3859,19 +3860,19 @@ bool condCheckDude(XSPRITE* pXCond, int cmpOp, bool PUSH) {
|
|||
return condCmp(gGenDudeExtra[pSpr->index].slaveCount, arg1, arg2, cmpOp);
|
||||
case 23: // check if dude can...
|
||||
switch (arg3) {
|
||||
case 1: return genDudeExtra(pSpr)->canAttack;
|
||||
case 2: return genDudeExtra(pSpr)->canBurn;
|
||||
case 3: return genDudeExtra(pSpr)->canDuck;
|
||||
case 4: return genDudeExtra(pSpr)->canElectrocute;
|
||||
case 5: return genDudeExtra(pSpr)->canFly;
|
||||
case 6: return genDudeExtra(pSpr)->canRecoil;
|
||||
case 7: return genDudeExtra(pSpr)->canSwim;
|
||||
case 8: return genDudeExtra(pSpr)->canWalk;
|
||||
case 1: return actor->genDudeExtra().canAttack;
|
||||
case 2: return actor->genDudeExtra().canBurn;
|
||||
case 3: return actor->genDudeExtra().canDuck;
|
||||
case 4: return actor->genDudeExtra().canElectrocute;
|
||||
case 5: return actor->genDudeExtra().canFly;
|
||||
case 6: return actor->genDudeExtra().canRecoil;
|
||||
case 7: return actor->genDudeExtra().canSwim;
|
||||
case 8: return actor->genDudeExtra().canWalk;
|
||||
default: condError(pXCond, "Invalid argument %d", arg3); break;
|
||||
}
|
||||
break;
|
||||
case 24: // compare weapon dispersion
|
||||
return condCmp(genDudeExtra(pSpr)->baseDispersion, arg1, arg2, cmpOp);
|
||||
return condCmp(actor->genDudeExtra().baseDispersion, arg1, arg2, cmpOp);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue