void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane) { cellStruct *currentObj = objPtr->next; cellStruct *previous; while (currentObj) { if (((currentObj->overlay == ovlNumber) || (ovlNumber == -1)) && ((currentObj->idx == objectIdx) || (objectIdx == -1)) && ((currentObj->type == objType) || (objType == -1)) && ((currentObj->backgroundPlane == backgroundPlane) || (backgroundPlane == -1))) { currentObj->type = -1; } currentObj = currentObj->next; } previous = objPtr; currentObj = objPtr->next; while (currentObj) { cellStruct *si; si = currentObj; if (si->type == -1) { cellStruct *dx; previous->next = si->next; dx = si->next; if (!si->next) { dx = objPtr; } dx->prev = si->prev; // Free the entry if (si->gfxPtr) freeGfx(si->gfxPtr); MemFree(si); currentObj = dx; } else { currentObj = si->next; previous = si; } } }
void freeObjectList(cellStruct *pListHead) { int var_2 = 0; cellStruct *pCurrent = pListHead->next; while (pCurrent) { cellStruct *pNext = pCurrent->next; if (pCurrent->freeze == 0) { if (pCurrent->gfxPtr) freeGfx(pCurrent->gfxPtr); MemFree(pCurrent); } var_2 = 1; pCurrent = pNext; } if (var_2) { resetPtr(pListHead); } }