Skip to content

Commit

Permalink
Checkered room crash workaround (#615)
Browse files Browse the repository at this point in the history
* Increase poly and vertex count for dyna actors

* Add TODO

* Only apply fix in Forest Temple

* Enable globally
  • Loading branch information
Sirius902 authored Jul 8, 2022
1 parent a1f92d7 commit ee184b5
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions soh/src/code/z_bgcheck.c
Original file line number Diff line number Diff line change
Expand Up @@ -1584,9 +1584,19 @@ void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, Collis
BgCheck_SetSubdivisionDimension(colCtx->minBounds.z, colCtx->subdivAmount.z, &colCtx->maxBounds.z,
&colCtx->subdivLength.z, &colCtx->subdivLengthInv.z);

#ifdef _SOH64 // BGCheck needs more memory on 64 bits because it crashes on some areas
// OTRTODO: Re-enable when the below DynaPoly workaround is removed.
// #ifdef _SOH64 // BGCheck needs more memory on 64 bits because it crashes on some areas
// colCtx->memSize *= 2;
// #endif

// BGCheck needs a higher polygon and vertex count due to removed object dependencies.
// Otherwise Forest Temple checkered room will crash due to the hallway actor being killed a frame late.
//
// OTRTODO: This is a workaround. The proper solution to fix this crash is to manage object loading / unloading
// the same as N64.
colCtx->memSize *= 2;
#endif
colCtx->dyna.polyListMax *= 2;
colCtx->dyna.vtxListMax *= 2;

memSize = colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z +
colCtx->colHeader->numPolygons * sizeof(u8) + colCtx->dyna.polyNodesMax * sizeof(SSNode) +
Expand Down

0 comments on commit ee184b5

Please sign in to comment.