- made marker0 and marker1 actor pointers.

This commit is contained in:
Christoph Oelckers 2021-09-04 19:44:19 +02:00
parent f4b900c540
commit 0d2da892e8
6 changed files with 55 additions and 44 deletions

View file

@ -360,11 +360,10 @@ void CounterCheck(DBloodActor*, int nSector) // 12
int nReq = pXSector->waitTimeA; int nType = pXSector->data; int nCount = 0;
if (!nType || !nReq) return;
int nSprite;
SectIterator it(nSector);
while ((nSprite = it.NextIndex()) >= 0)
BloodSectIterator it(nSector);
while (auto actor = it.Next())
{
if (sprite[nSprite].type == nType) nCount++;
if (actor->s().type == nType) nCount++;
}
if (nCount < nReq) {

View file

@ -371,31 +371,36 @@ void dbInit(void)
void PropagateMarkerReferences(void)
{
int nSprite, nNextSprite;
for (nSprite = headspritestat[kStatMarker]; nSprite != -1; nSprite = nNextSprite) {
nNextSprite = nextspritestat[nSprite];
switch (sprite[nSprite].type) {
BloodStatIterator it(kStatMarker);
while (auto actor = it.Next())
{
switch (actor->s().type)
{
case kMarkerOff:
case kMarkerAxis:
case kMarkerWarpDest: {
int nOwner = sprite[nSprite].owner;
if (nOwner >= 0 && nOwner < numsectors) {
case kMarkerWarpDest:
{
int nOwner = actor->s().owner;
if (nOwner >= 0 && nOwner < numsectors)
{
int nXSector = sector[nOwner].extra;
if (nXSector > 0 && nXSector < kMaxXSectors) {
xsector[nXSector].marker0 = nSprite;
if (nXSector > 0 && nXSector < kMaxXSectors)
{
xsector[nXSector].marker0 = actor;
continue;
}
}
}
break;
case kMarkerOn: {
int nOwner = sprite[nSprite].owner;
if (nOwner >= 0 && nOwner < numsectors) {
case kMarkerOn:
{
int nOwner = actor->s().owner;
if (nOwner >= 0 && nOwner < numsectors)
{
int nXSector = sector[nOwner].extra;
if (nXSector > 0 && nXSector < kMaxXSectors) {
xsector[nXSector].marker1 = nSprite;
if (nXSector > 0 && nXSector < kMaxXSectors)
{
xsector[nXSector].marker1 = actor;
continue;
}
}
@ -403,7 +408,7 @@ void PropagateMarkerReferences(void)
break;
}
DeleteSprite(nSprite);
DeleteSprite(actor);
}
}
@ -744,8 +749,8 @@ void dbLoadMap(const char *pPath, int *pX, int *pY, int *pZ, short *pAngle, shor
pXSector->onCeilZ = bitReader.readSigned(32);
pXSector->offFloorZ = bitReader.readSigned(32);
pXSector->onFloorZ = bitReader.readSigned(32);
pXSector->marker0 = bitReader.readUnsigned(16);
pXSector->marker1 = bitReader.readUnsigned(16);
/*pXSector->marker0 =*/ bitReader.readUnsigned(16);
/*pXSector->marker1 =*/ bitReader.readUnsigned(16);
pXSector->Crush = bitReader.readUnsigned(1);
pSector->ceilingxpan_ += bitReader.readUnsigned(8) / 256.f;
pSector->ceilingypan_ += bitReader.readUnsigned(8) / 256.f;

View file

@ -200,8 +200,8 @@ struct XSECTOR {
uint16_t panAngle; // Motion angle
uint16_t busyTimeB; // ON->OFF busyTime
uint16_t waitTimeB; // ON->OFF waitTime
uint16_t marker0;
uint16_t marker1;
DBloodActor* marker0;
DBloodActor* marker1;
uint16_t windAng; // Wind ang
uint16_t bobTheta; // Motion Theta
int16_t bobSpeed; // Motion speed

View file

@ -168,7 +168,7 @@ DBloodActor* CFX::fxSpawnActor(FX_ID nFx, int nSector, int x, int y, int z, unsi
pSprite->cstat |= pFX->cstat;
pSprite->shade = pFX->shade;
pSprite->pal = pFX->pal;
sprite[pSprite->index].detail = pFX->detail;
pSprite->detail = pFX->detail;
if (pFX->xrepeat > 0)
pSprite->xrepeat = pFX->xrepeat;
if (pFX->yrepeat > 0)

View file

@ -5432,9 +5432,9 @@ void sectorContinueMotion(int nSector, EVENT event)
int waitTimeB = pXSector->waitTimeB;
if (sector[nSector].type == kSectorPath)
{
if (!spriRangeIsFine(pXSector->marker0)) return;
busyTimeA = busyTimeB = xsprite[sprite[pXSector->marker0].extra].busyTime;
waitTimeA = waitTimeB = xsprite[sprite[pXSector->marker0].extra].waitTime;
if (!pXSector->marker0) return;
busyTimeA = busyTimeB = pXSector->marker0->x().busyTime;
waitTimeA = waitTimeB = pXSector->marker0->x().waitTime;
}
if (!pXSector->interruptable && event.cmd != kCmdSectorMotionContinue

View file

@ -1246,8 +1246,9 @@ int HDoorBusy(unsigned int nSector, unsigned int a2)
nWave = pXSector->busyWaveA;
else
nWave = pXSector->busyWaveB;
spritetype *pSprite1 = &sprite[pXSector->marker0];
spritetype *pSprite2 = &sprite[pXSector->marker1];
if (!pXSector->marker0 || !pXSector->marker1) return 0;
spritetype *pSprite1 = &pXSector->marker0->s();
spritetype *pSprite2 = &pXSector->marker1->s();
TranslateSector(nSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, pSprite1->ang, pSprite2->x, pSprite2->y, pSprite2->ang, pSector->type == kSectorSlide);
ZTranslateSector(nSector, pXSector, a2, nWave);
pXSector->busy = a2;
@ -1274,7 +1275,8 @@ int RDoorBusy(unsigned int nSector, unsigned int a2)
nWave = pXSector->busyWaveA;
else
nWave = pXSector->busyWaveB;
spritetype *pSprite = &sprite[pXSector->marker0];
if (!pXSector->marker0) return 0;
spritetype* pSprite = &pXSector->marker0->s();
TranslateSector(nSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), pSprite->x, pSprite->y, pSprite->x, pSprite->y, 0, pSprite->x, pSprite->y, pSprite->ang, pSector->type == kSectorRotate);
ZTranslateSector(nSector, pXSector, a2, nWave);
pXSector->busy = a2;
@ -1296,7 +1298,8 @@ int StepRotateBusy(unsigned int nSector, unsigned int a2)
int nXSector = pSector->extra;
assert(nXSector > 0 && nXSector < kMaxXSectors);
XSECTOR *pXSector = &xsector[nXSector];
spritetype *pSprite = &sprite[pXSector->marker0];
if (!pXSector->marker0) return 0;
spritetype* pSprite = &pXSector->marker0->s();
int vbp;
if (pXSector->busy < a2)
{
@ -1350,10 +1353,13 @@ int PathBusy(unsigned int nSector, unsigned int a2)
assert(nXSector > 0 && nXSector < kMaxXSectors);
XSECTOR *pXSector = &xsector[nXSector];
spritetype *pSprite = &sprite[basePath[nSector]];
spritetype *pSprite1 = &sprite[pXSector->marker0];
if (!pXSector->marker0 || !pXSector->marker1) return 0;
spritetype* pSprite1 = &pXSector->marker0->s();
spritetype* pSprite2 = &pXSector->marker1->s();
XSPRITE *pXSprite1 = &xsprite[pSprite1->extra];
spritetype *pSprite2 = &sprite[pXSector->marker1];
XSPRITE *pXSprite2 = &xsprite[pSprite2->extra];
int nWave = pXSprite1->wave;
TranslateSector(nSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), pSprite->x, pSprite->y, pSprite1->x, pSprite1->y, pSprite1->ang, pSprite2->x, pSprite2->y, pSprite2->ang, 1);
ZTranslateSector(nSector, pXSector, a2, nWave);
@ -1433,9 +1439,9 @@ void TeleFrag(int nKiller, int nSector)
void OperateTeleport(unsigned int nSector, XSECTOR *pXSector)
{
assert(nSector < (unsigned int)numsectors);
int nDest = pXSector->marker0;
assert(nDest < kMaxSprites);
spritetype *pDest = &sprite[nDest];
auto nDest = pXSector->marker0;
assert(nDest != nullptr);
spritetype *pDest = &nDest->s();
assert(pDest->statnum == kStatMarker);
assert(pDest->type == kMarkerWarpDest);
assert(pDest->sectnum >= 0 && pDest->sectnum < kMaxSectors);
@ -1482,7 +1488,8 @@ void OperatePath(unsigned int nSector, XSECTOR *pXSector, EVENT event)
spritetype *pSprite = NULL;
XSPRITE *pXSprite;
assert(nSector < (unsigned int)numsectors);
spritetype *pSprite2 = &sprite[pXSector->marker0];
if (!pXSector->marker0) return;
spritetype* pSprite2 = &pXSector->marker0->s();
XSPRITE *pXSprite2 = &xsprite[pSprite2->extra];
int nId = pXSprite2->data2;
StatIterator it(kStatPathMarker);
@ -1510,7 +1517,7 @@ void OperatePath(unsigned int nSector, XSECTOR *pXSector, EVENT event)
return;
}
pXSector->marker1 = nSprite;
pXSector->marker1 = &bloodActors[nSprite];
pXSector->offFloorZ = pSprite2->z;
pXSector->onFloorZ = pSprite->z;
switch (event.cmd) {
@ -1649,7 +1656,7 @@ void InitPath(unsigned int nSector, XSECTOR *pXSector)
}
pXSector->marker0 = nSprite;
pXSector->marker0 = &bloodActors[nSprite];
basePath[nSector] = nSprite;
if (pXSector->state)
evPostSector(nSector, 0, kCmdOn);
@ -2055,8 +2062,8 @@ void trInit(void)
case kSectorSlideMarked:
case kSectorSlide:
{
spritetype *pSprite1 = &sprite[pXSector->marker0];
spritetype *pSprite2 = &sprite[pXSector->marker1];
spritetype* pSprite1 = &pXSector->marker0->s();
spritetype* pSprite2 = &pXSector->marker1->s();
TranslateSector(i, 0, -65536, pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, pSprite1->ang, pSprite2->x, pSprite2->y, pSprite2->ang, pSector->type == kSectorSlide);
for (int j = 0; j < pSector->wallnum; j++)
{
@ -2075,7 +2082,7 @@ void trInit(void)
case kSectorRotateMarked:
case kSectorRotate:
{
spritetype *pSprite1 = &sprite[pXSector->marker0];
spritetype* pSprite1 = &pXSector->marker0->s();
TranslateSector(i, 0, -65536, pSprite1->x, pSprite1->y, pSprite1->x, pSprite1->y, 0, pSprite1->x, pSprite1->y, pSprite1->ang, pSector->type == kSectorRotate);
for (int j = 0; j < pSector->wallnum; j++)
{