diff --git a/source/games/exhumed/src/object.cpp b/source/games/exhumed/src/object.cpp index 4a3178fc7..63196ea03 100644 --- a/source/games/exhumed/src/object.cpp +++ b/source/games/exhumed/src/object.cpp @@ -149,7 +149,7 @@ TArray sBob; TArray sTrail; TArray sTrailPoint; TArray Elevator; -TArray ObjectList; +TArray> ObjectList; TArray sMoveSect; TArray SlideData; TArray WallFace; @@ -160,6 +160,7 @@ TObjPtr pFinaleSpr; size_t MarkObjects() { GC::Mark(pFinaleSpr); + for (auto& d : ObjectList) GC::Mark(d); for (auto& d : sDrip) GC::Mark(d.pActor); for (auto& d : sTrap) GC::Mark(d.pActor); for (auto& d : Elevator) GC::Mark(d.pActor); @@ -1882,7 +1883,7 @@ DExhumedActor* BuildObject(DExhumedActor* pActor, int nOjectType, int nHitag) pActor->spr.intowner = runlist_AddRunRec(pActor->spr.lotag - 1, pActor, 0x170000); // GrabTimeSlot(3); - pActor->nPhase = ObjectList.Push(pActor); + pActor->nPhase = ObjectList.Push(MakeObjPtr(pActor)); if (pActor->spr.statnum == kStatDestructibleSprite) { pActor->nHealth = 4; } @@ -2164,7 +2165,7 @@ void AIObject::RadialDamage(RunListEvent* ev) pActor->nHealth = -1; int ax = pActor->nIndex2; - if (ax < 0 || ObjectList[ax]->nHealth <= 0) { + if (ax < 0 || ObjectList[ax] == nullptr || ObjectList[ax]->nHealth <= 0) { return; } @@ -2649,7 +2650,7 @@ void PostProcess() { auto pObjectActor = ObjectList[i]; - if (pObjectActor->spr.statnum == kStatExplodeTarget) + if (pObjectActor && pObjectActor->spr.statnum == kStatExplodeTarget) { if (!pObjectActor->nIndex2) { pObjectActor->nIndex2 = -1; @@ -2662,7 +2663,7 @@ void PostProcess() for (unsigned j = 0; j < ObjectList.Size(); j++) { - if (i != j && ObjectList[j]->spr.statnum == kStatExplodeTarget && edi == ObjectList[j]->nIndex2) + if (i != j && ObjectList[j] && ObjectList[j]->spr.statnum == kStatExplodeTarget && edi == ObjectList[j]->nIndex2) { pObjectActor->nIndex2 = j; ObjectList[j]->nIndex2 = i;