- made nChunkSprite an actor array

# Conflicts:
#	source/games/exhumed/src/move.cpp
This commit is contained in:
Christoph Oelckers 2021-09-17 09:24:14 +02:00
parent c2467dc47b
commit fe9ddabd35
3 changed files with 20 additions and 21 deletions

View file

@ -227,7 +227,7 @@ struct BlockInfo
extern BlockInfo sBlockInfo[]; extern BlockInfo sBlockInfo[];
extern int hihit; extern int hihit;
extern short nChunkSprite[]; extern DExhumedActor* nChunkSprite[];
extern DExhumedActor* nBodySprite[]; extern DExhumedActor* nBodySprite[];
signed int lsqrt(int a1); signed int lsqrt(int a1);

View file

@ -51,7 +51,7 @@ enum
// think this belongs in init.c? // think this belongs in init.c?
BlockInfo sBlockInfo[kMaxPushBlocks]; BlockInfo sBlockInfo[kMaxPushBlocks];
short nChunkSprite[kMaxMoveChunks]; DExhumedActor *nChunkSprite[kMaxMoveChunks];
FSerializer& Serialize(FSerializer& arc, const char* keyname, BlockInfo& w, BlockInfo* def) FSerializer& Serialize(FSerializer& arc, const char* keyname, BlockInfo& w, BlockInfo* def)
{ {
@ -1322,7 +1322,7 @@ void WheresMyMouth(int nPlayer, int *x, int *y, int *z, short *sectnum)
void InitChunks() void InitChunks()
{ {
nCurChunkNum = 0; nCurChunkNum = 0;
memset(nChunkSprite, -1, sizeof(nChunkSprite)); memset(nChunkSprite, 0, sizeof(nChunkSprite));
memset(nBodyGunSprite, -1, sizeof(nBodyGunSprite)); memset(nBodyGunSprite, -1, sizeof(nBodyGunSprite));
memset(nBodySprite, 0, sizeof(nBodySprite)); memset(nBodySprite, 0, sizeof(nBodySprite));
nCurBodyNum = 0; nCurBodyNum = 0;
@ -1367,7 +1367,7 @@ int GrabBodyGunSprite()
return nSprite; return nSprite;
} }
DExhumedActor GrabBody() DExhumedActor* GrabBody()
{ {
DExhumedActor* pActor = nullptr; DExhumedActor* pActor = nullptr;
spritetype* pSprite = nullptr; spritetype* pSprite = nullptr;
@ -1400,24 +1400,22 @@ DExhumedActor GrabBody()
return pActor; return pActor;
} }
int GrabChunkSprite() DExhumedActor* GrabChunkSprite()
{ {
int nSprite = nChunkSprite[nCurChunkNum]; auto pActor = nChunkSprite[nCurChunkNum];
auto pSprite = &sprite[nSprite];
if (nSprite == -1) if (pActor == nullptr)
{ {
nSprite = insertsprite(0, 899); pActor = insertActor(0, 899);
pSprite = &sprite[nSprite]; nChunkSprite[nCurChunkNum] = pActor;
nChunkSprite[nCurChunkNum] = nSprite;
} }
else if (pSprite->statnum) else if (pActor->s().statnum)
{ {
// TODO MonoOut("too many chunks being used at once!\n"); // TODO MonoOut("too many chunks being used at once!\n");
return -1; return nullptr;
} }
changespritestat(nSprite, 899); ChangeActorStat(pActor, 899);
nCurChunkNum++; nCurChunkNum++;
if (nCurChunkNum >= kMaxMoveChunks) if (nCurChunkNum >= kMaxMoveChunks)
@ -1426,9 +1424,9 @@ int GrabChunkSprite()
if (nChunkTotal < kMaxMoveChunks) if (nChunkTotal < kMaxMoveChunks)
nChunkTotal++; nChunkTotal++;
pSprite->cstat = 0x80; pActor->s().cstat = 0x80;
return nSprite; return pActor;
} }
int BuildCreatureChunk(int nVal, int nPic) int BuildCreatureChunk(int nVal, int nPic)

View file

@ -177,11 +177,12 @@ int FindFood(short nSprite)
if (nChunkTotal) if (nChunkTotal)
{ {
int nSprite2 = nChunkSprite[RandomSize(7) % nChunkTotal]; auto pActor2 = nChunkSprite[RandomSize(7) % nChunkTotal];
if (nSprite2 != -1) if (pActor2 != nullptr)
{ {
if (cansee(x, y, z2, nSector, sprite[nSprite2].x, sprite[nSprite2].y, sprite[nSprite2].z, sprite[nSprite2].sectnum)) { auto pSprite2 = &pActor2->s();
return nSprite2; if (cansee(x, y, z2, nSector, pSprite2->x, pSprite2->y, pSprite2->z, pSprite2->sectnum)) {
return pActor2->GetSpriteIndex();
} }
} }
} }