- nXSector is gone.

This commit is contained in:
Christoph Oelckers 2021-11-19 19:33:38 +01:00
parent a0ef54cb54
commit 8f5b9d2f03
7 changed files with 52 additions and 65 deletions

View file

@ -4896,7 +4896,7 @@ void MoveDude(DBloodActor* actor)
int nHitWall = coll.index; int nHitWall = coll.index;
walltype* pHitWall = &wall[nHitWall]; walltype* pHitWall = &wall[nHitWall];
XWALL* pHitXWall = nullptr; XWALL* pHitXWall = nullptr;
if (pHitWall->extra > 0) pHitXWall = &pHitWall->xw(); if (pHitWall->hasX()) pHitXWall = &pHitWall->xw();
if (pDudeInfo->lockOut && pHitXWall && pHitXWall->triggerPush && !pHitXWall->key && !pHitXWall->dudeLockout && !pHitXWall->state && !pHitXWall->busy && !pPlayer) if (pDudeInfo->lockOut && pHitXWall && pHitXWall->triggerPush && !pHitXWall->key && !pHitXWall->dudeLockout && !pHitXWall->state && !pHitXWall->busy && !pPlayer)
trTriggerWall(pHitWall, kCmdWallPush); trTriggerWall(pHitWall, kCmdWallPush);

View file

@ -79,7 +79,6 @@ template<typename T> tspritetype* viewInsertTSprite(spritetype* tsprite, int& sp
pTSprite->xrepeat = 64; pTSprite->xrepeat = 64;
pTSprite->yrepeat = 64; pTSprite->yrepeat = 64;
pTSprite->owner = -1; pTSprite->owner = -1;
pTSprite->extra = -1;
pTSprite->type = -spritesortcnt; pTSprite->type = -spritesortcnt;
pTSprite->statnum = nStatnum; pTSprite->statnum = nStatnum;
pTSprite->sectnum = nSector; pTSprite->sectnum = nSector;
@ -523,7 +522,6 @@ void viewProcessSprites(spritetype* tsprite, int& spritesortcnt, int32_t cX, int
{ {
tspritetype *pTSprite = &tsprite[nTSprite]; tspritetype *pTSprite = &tsprite[nTSprite];
auto owneractor = &bloodActors[pTSprite->owner]; auto owneractor = &bloodActors[pTSprite->owner];
//int nXSprite = pTSprite->extra;
XSPRITE *pTXSprite = NULL; XSPRITE *pTXSprite = NULL;
if (sprite[pTSprite->owner].detail > gDetail) if (sprite[pTSprite->owner].detail > gDetail)
{ {

View file

@ -118,9 +118,9 @@ void hudDraw(PLAYER *gView, int nSectnum, double bobx, double boby, double zDelt
} }
int nShade = sector[nSectnum].floorshade; int nShade = sector[nSectnum].floorshade;
int nPalette = 0; int nPalette = 0;
if (sector[gView->pSprite->sectnum].extra > 0) { if (gView->pSprite->sector()->hasX()) {
sectortype* pSector = &sector[gView->pSprite->sectnum]; sectortype* pSector = gView->pSprite->sector();
XSECTOR* pXSector = &xsector[pSector->extra]; XSECTOR* pXSector = &pSector->xs();
if (pXSector->color) if (pXSector->color)
nPalette = pSector->floorpal; nPalette = pSector->floorpal;
} }

View file

@ -1186,10 +1186,10 @@ void nnExtProcessSuperSprites()
} }
} }
else if (sectRangeIsFine(pWind->sectnum)) else if (validSectorIndex(pWind->sectnum))
{ {
sectortype* pSect = &sector[pWind->sectnum]; sectortype* pSect = pWind->sector();
XSECTOR* pXSector = (pSect->extra > 0) ? &xsector[pSect->extra] : NULL; XSECTOR* pXSector = (pSect->hasX()) ? &pSect->xs() : nullptr;
if ((fWindAlways) || (pXSector && !pXSector->locked && (pXSector->windAlways || pXSector->busy))) if ((fWindAlways) || (pXSector && !pXSector->locked && (pXSector->windAlways || pXSector->busy)))
windGenDoVerticalWind(pXWind->sysData2, pWind->sectnum); windGenDoVerticalWind(pXWind->sysData2, pWind->sectnum);
} }
@ -1457,7 +1457,7 @@ int getSpriteMassBySize(DBloodActor* actor)
int mass = 0; int seqId = -1; int clipDist = pSprite->clipdist; int mass = 0; int seqId = -1; int clipDist = pSprite->clipdist;
if (!actor->hasX()) if (!actor->hasX())
{ {
I_Error("getSpriteMassBySize: pSprite->extra < 0"); I_Error("getSpriteMassBySize: pSprite->hasX == false");
} }
else if (actor->IsDudeActor()) else if (actor->IsDudeActor())
{ {
@ -4054,7 +4054,7 @@ bool condCheckSector(DBloodActor* aCond, int cmpOp, bool PUSH)
condError(aCond, "Object #%d (objType: %d) is not a sector!", objIndex, objType); condError(aCond, "Object #%d (objType: %d) is not a sector!", objIndex, objType);
sectortype* pSect = &sector[objIndex]; sectortype* pSect = &sector[objIndex];
XSECTOR* pXSect = (xsectRangeIsFine(pSect->extra)) ? &xsector[pSect->extra] : NULL; XSECTOR* pXSect = pSect->hasX()? &pSect->xs() : nullptr;
if (cond < (kCondRange >> 1)) if (cond < (kCondRange >> 1))
{ {

View file

@ -1939,7 +1939,6 @@ int playerDamageSprite(DBloodActor* source, PLAYER *pPlayer, DAMAGE_TYPE nDamage
spritetype *pSprite = pPlayer->pSprite; spritetype *pSprite = pPlayer->pSprite;
XSPRITE *pXSprite = pPlayer->pXSprite; XSPRITE *pXSprite = pPlayer->pXSprite;
auto pActor = pPlayer->actor; auto pActor = pPlayer->actor;
int nXSector = sector[pSprite->sectnum].extra;
DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type); DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type);
int nDeathSeqID = -1; int nDeathSeqID = -1;
int nKneelingPlayer = -1; int nKneelingPlayer = -1;
@ -2051,7 +2050,7 @@ int playerDamageSprite(DBloodActor* source, PLAYER *pPlayer, DAMAGE_TYPE nDamage
if (nDeathSeqID != 16) if (nDeathSeqID != 16)
{ {
powerupClear(pPlayer); powerupClear(pPlayer);
if (nXSector > 0 && xsector[nXSector].Exit) if (pSprite->sector()->hasX() && pSprite->sector()->xs().Exit)
trTriggerSector(pSprite->sector(), kCmdSectorExit); trTriggerSector(pSprite->sector(), kCmdSectorExit);
pSprite->flags |= 7; pSprite->flags |= 7;
for (int p = connecthead; p >= 0; p = connectpoint2[p]) for (int p = connecthead; p >= 0; p = connectpoint2[p])

View file

@ -422,10 +422,9 @@ static void fakeMoveDude(spritetype *pSprite)
} }
bool bUnderwater = 0; bool bUnderwater = 0;
bool bDepth = 0; bool bDepth = 0;
int nXSector = sector[nSector].extra; if (sector[sectnum].hasX())
if (nXSector > 0)
{ {
XSECTOR *pXSector = &xsector[nXSector]; XSECTOR *pXSector = &sector[sectnum].xs();
if (pXSector->Underwater) if (pXSector->Underwater)
bUnderwater = 1; bUnderwater = 1;
if (pXSector->Depth) if (pXSector->Depth)
@ -550,8 +549,8 @@ static void fakeMoveDude(spritetype *pSprite)
return; return;
} }
} }
int nXSector = sector[pSprite->sectnum].extra; int n XSector = sector [pSprite->sectnum]. extra;
if (nXSector > 0 && xsector[nXSector].Underwater) if (n XSector > 0 && xsector[n XSector].Underwater)
return; return;
if (predict.floordist >= 0x100) if (predict.floordist >= 0x100)
return; return;

View file

@ -811,8 +811,8 @@ void DragPoint(int nWall, int x, int y)
void TranslateSector(int nSector, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, char a12) void TranslateSector(int nSector, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, char a12)
{ {
int x, y; int x, y;
int nXSector = sector[nSector].extra; auto pSector = &sector[nSector];
XSECTOR *pXSector = &xsector[nXSector]; XSECTOR *pXSector = &pSector->xs();
int v20 = interpolatedvalue(a6, a9, a2); int v20 = interpolatedvalue(a6, a9, a2);
int vc = interpolatedvalue(a6, a9, a3); int vc = interpolatedvalue(a6, a9, a3);
int v28 = vc - v20; int v28 = vc - v20;
@ -822,10 +822,10 @@ void TranslateSector(int nSector, int a2, int a3, int a4, int a5, int a6, int a7
int v44 = interpolatedvalue(a8, a11, a2); int v44 = interpolatedvalue(a8, a11, a2);
int vbp = interpolatedvalue(a8, a11, a3); int vbp = interpolatedvalue(a8, a11, a3);
int v14 = vbp - v44; int v14 = vbp - v44;
int nWall = sector[nSector].wallptr; int nWall = pSector->wallptr;
if (a12) if (a12)
{ {
for (int i = 0; i < sector[nSector].wallnum; nWall++, i++) for (int i = 0; i < pSector->wallnum; nWall++, i++)
{ {
x = baseWall[nWall].x; x = baseWall[nWall].x;
y = baseWall[nWall].y; y = baseWall[nWall].y;
@ -836,7 +836,7 @@ void TranslateSector(int nSector, int a2, int a3, int a4, int a5, int a6, int a7
} }
else else
{ {
for (int i = 0; i < sector[nSector].wallnum; nWall++, i++) for (int i = 0; i < pSector->wallnum; nWall++, i++)
{ {
int v10 = wall[nWall].point2; int v10 = wall[nWall].point2;
x = baseWall[nWall].x; x = baseWall[nWall].x;
@ -1035,10 +1035,10 @@ DBloodActor* GetCrushedSpriteExtents(unsigned int nSector, int *pzTop, int *pzBo
int VCrushBusy(unsigned int nSector, unsigned int a2) int VCrushBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
int nXSector = sector[nSector].extra; auto pSector = &sector[nSector];
assert(nXSector > 0 && nXSector < kMaxXSectors); assert(pSector->hasX());
XSECTOR *pXSector = &xsector[nXSector]; XSECTOR *pXSector = &pSector->xs();
int nWave; int nWave;
if (pXSector->busy < a2) if (pXSector->busy < a2)
nWave = pXSector->busyWaveA; nWave = pXSector->busyWaveA;
@ -1057,9 +1057,9 @@ int VCrushBusy(unsigned int nSector, unsigned int a2)
return 1; return 1;
viewInterpolateSector(nSector, &sector[nSector]); viewInterpolateSector(nSector, &sector[nSector]);
if (dz1 != 0) if (dz1 != 0)
sector[nSector].ceilingz = vc; pSector->ceilingz = vc;
if (dz2 != 0) if (dz2 != 0)
sector[nSector].floorz = v10; pSector->floorz = v10;
pXSector->busy = a2; pXSector->busy = a2;
if (pXSector->command == kCmdLink && pXSector->txID) if (pXSector->command == kCmdLink && pXSector->txID)
evSendSector(nSector,pXSector->txID, kCmdLink); evSendSector(nSector,pXSector->txID, kCmdLink);
@ -1074,10 +1074,10 @@ int VCrushBusy(unsigned int nSector, unsigned int a2)
int VSpriteBusy(unsigned int nSector, unsigned int a2) int VSpriteBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
int nXSector = sector[nSector].extra; auto pSector = &sector[nSector];
assert(nXSector > 0 && nXSector < kMaxXSectors); assert(pSector->hasX());
XSECTOR *pXSector = &xsector[nXSector]; XSECTOR* pXSector = &pSector->xs();
int nWave; int nWave;
if (pXSector->busy < a2) if (pXSector->busy < a2)
nWave = pXSector->busyWaveA; nWave = pXSector->busyWaveA;
@ -1125,10 +1125,10 @@ int VSpriteBusy(unsigned int nSector, unsigned int a2)
int VDoorBusy(unsigned int nSector, unsigned int a2) int VDoorBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
int nXSector = sector[nSector].extra; auto pSector = &sector[nSector];
assert(nXSector > 0 && nXSector < kMaxXSectors); assert(pSector->hasX());
XSECTOR *pXSector = &xsector[nXSector]; XSECTOR *pXSector = &pSector->xs();
int vbp; int vbp;
if (pXSector->state) if (pXSector->state)
vbp = 65536/ClipLow((120*pXSector->busyTimeA)/10, 1); vbp = 65536/ClipLow((120*pXSector->busyTimeA)/10, 1);
@ -1222,11 +1222,10 @@ int VDoorBusy(unsigned int nSector, unsigned int a2)
int HDoorBusy(unsigned int nSector, unsigned int a2) int HDoorBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
sectortype *pSector = &sector[nSector]; sectortype *pSector = &sector[nSector];
int nXSector = pSector->extra; assert(pSector->hasX());
assert(nXSector > 0 && nXSector < kMaxXSectors); XSECTOR* pXSector = &pSector->xs();
XSECTOR *pXSector = &xsector[nXSector];
int nWave; int nWave;
if (pXSector->busy < a2) if (pXSector->busy < a2)
nWave = pXSector->busyWaveA; nWave = pXSector->busyWaveA;
@ -1251,11 +1250,10 @@ int HDoorBusy(unsigned int nSector, unsigned int a2)
int RDoorBusy(unsigned int nSector, unsigned int a2) int RDoorBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
sectortype *pSector = &sector[nSector]; sectortype *pSector = &sector[nSector];
int nXSector = pSector->extra; assert(pSector->hasX());
assert(nXSector > 0 && nXSector < kMaxXSectors); XSECTOR* pXSector = &pSector->xs();
XSECTOR *pXSector = &xsector[nXSector];
int nWave; int nWave;
if (pXSector->busy < a2) if (pXSector->busy < a2)
nWave = pXSector->busyWaveA; nWave = pXSector->busyWaveA;
@ -1279,11 +1277,10 @@ int RDoorBusy(unsigned int nSector, unsigned int a2)
int StepRotateBusy(unsigned int nSector, unsigned int a2) int StepRotateBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
sectortype *pSector = &sector[nSector]; sectortype *pSector = &sector[nSector];
int nXSector = pSector->extra; assert(pSector->hasX());
assert(nXSector > 0 && nXSector < kMaxXSectors); XSECTOR* pXSector = &pSector->xs();
XSECTOR *pXSector = &xsector[nXSector];
if (!pXSector->marker0) return 0; if (!pXSector->marker0) return 0;
spritetype* pSprite = &pXSector->marker0->s(); spritetype* pSprite = &pXSector->marker0->s();
int vbp; int vbp;
@ -1314,11 +1311,10 @@ int StepRotateBusy(unsigned int nSector, unsigned int a2)
int GenSectorBusy(unsigned int nSector, unsigned int a2) int GenSectorBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
sectortype *pSector = &sector[nSector]; sectortype *pSector = &sector[nSector];
int nXSector = pSector->extra; assert(pSector->hasX());
assert(nXSector > 0 && nXSector < kMaxXSectors); XSECTOR* pXSector = &pSector->xs();
XSECTOR *pXSector = &xsector[nXSector];
pXSector->busy = a2; pXSector->busy = a2;
if (pXSector->command == kCmdLink && pXSector->txID) if (pXSector->command == kCmdLink && pXSector->txID)
evSendSector(nSector,pXSector->txID, kCmdLink); evSendSector(nSector,pXSector->txID, kCmdLink);
@ -1333,11 +1329,10 @@ int GenSectorBusy(unsigned int nSector, unsigned int a2)
int PathBusy(unsigned int nSector, unsigned int a2) int PathBusy(unsigned int nSector, unsigned int a2)
{ {
assert(nSector < (unsigned int)numsectors); assert(validSectorIndex(nSector));
sectortype *pSector = &sector[nSector]; sectortype *pSector = &sector[nSector];
int nXSector = pSector->extra; assert(pSector->hasX());
assert(nXSector > 0 && nXSector < kMaxXSectors); XSECTOR* pXSector = &pSector->xs();
XSECTOR *pXSector = &xsector[nXSector];
if (!pXSector->basePath || !pXSector->marker0 || !pXSector->marker1) return 0; if (!pXSector->basePath || !pXSector->marker0 || !pXSector->marker1) return 0;
spritetype* pSprite = &pXSector->basePath->s(); spritetype* pSprite = &pXSector->basePath->s();
@ -1856,10 +1851,8 @@ void ProcessMotion(void)
int nSector; int nSector;
for (pSector = &sector[0], nSector = 0; nSector < numsectors; nSector++, pSector++) for (pSector = &sector[0], nSector = 0; nSector < numsectors; nSector++, pSector++)
{ {
int nXSector = pSector->extra; if (!pSector->hasX()) continue;
if (nXSector <= 0) XSECTOR* pXSector = &pSector->xs();
continue;
XSECTOR *pXSector = &xsector[nXSector];
if (pXSector->bobSpeed != 0) if (pXSector->bobSpeed != 0)
{ {
if (pXSector->bobAlways) if (pXSector->bobAlways)
@ -2029,11 +2022,9 @@ void trInit(void)
sectortype *pSector = &sector[i]; sectortype *pSector = &sector[i];
baseFloor[i] = pSector->floorz; baseFloor[i] = pSector->floorz;
baseCeil[i] = pSector->ceilingz; baseCeil[i] = pSector->ceilingz;
int nXSector = pSector->extra; if (pSector->hasX())
if (nXSector > 0)
{ {
assert(nXSector < kMaxXSectors); XSECTOR *pXSector = &pSector->xs();
XSECTOR *pXSector = &xsector[nXSector];
if (pXSector->state) if (pXSector->state)
pXSector->busy = 65536; pXSector->busy = 65536;
switch (pSector->type) switch (pSector->type)