mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-20 18:52:43 +00:00
- made marker0 and marker1 actor pointers.
This commit is contained in:
parent
f4b900c540
commit
0d2da892e8
6 changed files with 55 additions and 44 deletions
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue