Checkered room crash workaround (#615)

* Increase poly and vertex count for dyna actors

* Add TODO

* Only apply fix in Forest Temple

* Enable globally
This commit is contained in:
Sirius902 2022-07-07 19:21:14 -07:00 committed by GitHub
parent a1f92d76ab
commit ee184b5a51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1584,9 +1584,19 @@ void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, Collis
BgCheck_SetSubdivisionDimension(colCtx->minBounds.z, colCtx->subdivAmount.z, &colCtx->maxBounds.z, BgCheck_SetSubdivisionDimension(colCtx->minBounds.z, colCtx->subdivAmount.z, &colCtx->maxBounds.z,
&colCtx->subdivLength.z, &colCtx->subdivLengthInv.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; colCtx->memSize *= 2;
#endif colCtx->dyna.polyListMax *= 2;
colCtx->dyna.vtxListMax *= 2;
memSize = colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z + memSize = colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z +
colCtx->colHeader->numPolygons * sizeof(u8) + colCtx->dyna.polyNodesMax * sizeof(SSNode) + colCtx->colHeader->numPolygons * sizeof(u8) + colCtx->dyna.polyNodesMax * sizeof(SSNode) +