- moved basePath into XSECTOR.

# Conflicts:
#	source/games/blood/src/nnexts.cpp
This commit is contained in:
Christoph Oelckers 2021-09-04 19:53:31 +02:00
parent 0d2da892e8
commit db75e4d2bf
6 changed files with 38 additions and 27 deletions

View file

@ -108,14 +108,16 @@ public:
void Clear()
{
explosionhackflag = false;
prevmarker = nullptr;
dudeSlope = 0;
hit = {};
dudeExtra = {};
spriteMass = {};
hit = {};
genDudeExtra = {};
prevmarker = nullptr;
basePoint = {};
xvel = yvel = zvel = 0;
explosionhackflag = false;
interpolated = false;
}
bool hasX() { return sprite[index].extra > 0; }
void addX()

View file

@ -522,6 +522,7 @@ void dbLoadMap(const char *pPath, int *pX, int *pY, int *pZ, short *pAngle, shor
memset(sector, 0, sizeof(sector));
memset(wall, 0, sizeof(wall));
memset(sprite, 0, sizeof(sprite));
memset(xsprite, 0, sizeof(xsprite));
#ifdef NOONE_EXTENSIONS
for (auto& ctrl : gPlayerCtrl) ctrl.qavScene.initiator = nullptr;

View file

@ -202,6 +202,7 @@ struct XSECTOR {
uint16_t waitTimeB; // ON->OFF waitTime
DBloodActor* marker0;
DBloodActor* marker1;
DBloodActor* basePath;
uint16_t windAng; // Wind ang
uint16_t bobTheta; // Motion Theta
int16_t bobSpeed; // Motion speed

View file

@ -571,6 +571,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, XSECTOR& w, XSECTO
("panangle", w.panAngle, def->panAngle)
("marker0", w.marker0, def->marker0)
("marker1", w.marker1, def->marker1)
("basepath", w.basePath, def->basePath)
("windang", w.windAng, def->windAng)
("bobtheta", w.bobTheta, def->bobTheta)
("bobspeed", w.bobSpeed, def->bobSpeed)

View file

@ -383,6 +383,7 @@ bool nnExtEraseModernStuff(DBloodActor* actor)
bool erased = false;
switch (pSprite->type) {
// erase all modern types if the map is not extended
case kModernSpriteDamager:
case kModernCustomDudeSpawn:
case kModernRandomTX:
case kModernSequentialTX:
@ -393,7 +394,6 @@ bool nnExtEraseModernStuff(DBloodActor* actor)
case kModernDudeTargetChanger:
case kModernSectorFXChanger:
case kModernObjDataChanger:
case kModernSpriteDamager:
case kModernObjDataAccumulator:
case kModernEffectSpawner:
case kModernWindGenerator:
@ -493,23 +493,19 @@ void nnExtResetGlobals()
memset(gImpactSpritesList, 0, sizeof(gImpactSpritesList));
// reset tracking conditions, if any
if (gTrackingCondsCount > 0)
for (int i = 0; i < countof(gCondition); i++)
{
for (int i = 0; i < gTrackingCondsCount; i++)
{
TRCONDITION* pCond = &gCondition[i];
TRCONDITION* pCond = &gCondition[i];
for (unsigned k = 0; k < kMaxTracedObjects; k++)
{
pCond->obj[k].actor = nullptr;
pCond->obj[k].index_ = pCond->obj[k].cmd = 0;
pCond->obj[k].type = -1;
}
pCond->length = 0;
{
pCond->obj[k].actor = nullptr;
pCond->obj[k].index_ = pCond->obj[k].cmd = 0;
pCond->obj[k].type = -1;
}
gTrackingCondsCount = 0;
pCond->actor = nullptr;
pCond->length = 0;
}
gTrackingCondsCount = 0;
// clear sprite mass cache
for (int i = 0; i < kMaxSprites; i++)

View file

@ -33,9 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_BLD_NS
int basePath[kMaxSectors];
unsigned int GetWaveValue(unsigned int nPhase, int nType)
{
switch (nType)
@ -1352,13 +1349,13 @@ int PathBusy(unsigned int nSector, unsigned int a2)
int nXSector = pSector->extra;
assert(nXSector > 0 && nXSector < kMaxXSectors);
XSECTOR *pXSector = &xsector[nXSector];
spritetype *pSprite = &sprite[basePath[nSector]];
if (!pXSector->marker0 || !pXSector->marker1) return 0;
if (!pXSector->basePath || !pXSector->marker0 || !pXSector->marker1) return 0;
spritetype* pSprite = &pXSector->basePath->s();
spritetype* pSprite1 = &pXSector->marker0->s();
spritetype* pSprite2 = &pXSector->marker1->s();
XSPRITE *pXSprite1 = &xsprite[pSprite1->extra];
XSPRITE *pXSprite2 = &xsprite[pSprite2->extra];
XSPRITE *pXSprite1 = &pXSector->marker0->x();
XSPRITE *pXSprite2 = &pXSector->marker1->x();
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);
@ -1656,8 +1653,7 @@ void InitPath(unsigned int nSector, XSECTOR *pXSector)
}
pXSector->marker0 = &bloodActors[nSprite];
basePath[nSector] = nSprite;
pXSector->basePath = pXSector->marker0 = &bloodActors[nSprite];
if (pXSector->state)
evPostSector(nSector, 0, kCmdOn);
}
@ -2122,6 +2118,7 @@ void trInit(void)
#ifdef NOONE_EXTENSIONS
case kModernRandom:
case kModernRandom2:
if (!gModernMap || pXSprite->state == pXSprite->restState) break;
evPostActor(&bloodActors[i], (120 * pXSprite->busyTime) / 10, kCmdRepeat);
if (pXSprite->waitTime > 0)
@ -2305,9 +2302,22 @@ void SerializeTriggers(FSerializer& arc)
{
if (arc.BeginObject("triggers"))
{
#ifdef OLD_SAVEGAME
if (arc.BeginArray("basepath"))
{
int nul = 0;
for (int i = 0; i < numsectors; i++)
{
if (sector[i].extra > 0)
arc(nullptr, xsector[sector[i].extra].basePath);
else
arc(nullptr, nul);
}
arc.EndArray();
}
#endif
arc("busycount", gBusyCount)
.Array("busy", gBusy, gBusyCount)
.Array("basepath", basePath, numsectors)
.EndObject();
}
}