Fix Argorok Peahat camera init race condition

Fixes #264
This commit is contained in:
PJB3005
2026-04-07 15:41:56 +02:00
parent 678321294c
commit c8bbfbc836
+16
View File
@@ -1154,6 +1154,18 @@ int daE_PH_c::create() {
int phase_state = dComIfG_resLoad(&mPhase, "E_PH");
if (phase_state == cPhs_COMPLEATE_e) {
#if TARGET_PC
// Due to our loads being so much faster, peahats can initialize *before* the camera.
// This breaks the peahat used for camera focus during transition to phase 2 of Argorok.
// as it caches incorrect camera parameters in its init.
if (auto cam = dComIfGp_getCamera(0)) {
if (cam->phase_request.mpHandlerTable != nullptr) {
return cPhs_INIT_e;
}
}
#endif
mAction = fopAcM_GetParam(this) & 0xF;
if (dComIfGs_isZoneSwitch(2, fopAcM_GetRoomNo(this)) && mAction == 4) {
@@ -1256,6 +1268,10 @@ int daE_PH_c::create() {
if (mAction == 5) {
dCamera_c* camera_p = dCam_getBody();
mCamFovY = camera_p->Fovy();
if (mCamFovY < 1) {
OSReport("GUH");
mCamFovY = 10;
}
mCamCenter = camera_p->Center();
mCamCenterTarget = mCamCenter;