mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 19:07:47 -04:00
bd65c814f7
The lobby rematch re-enters the emulator through goto session_reboot, below the first-boot session block. After its commit (offline) or netplay clear it reset mod-owned presentation state, but it never ran mod_runtime_activate_plugins() or the controller, load-acceleration and disc-speed resets. So an offline rematch with mods enabled applied the plan's main-EXE and disc patches and ran its VBlank callbacks, but no activation callback ran, and the function-entry hook table, which the commit empties and only activation rebuilds, stayed empty. It also mounted the stock disc even when the plan had built a derived disc image. start_mod_session() now holds the first-boot sequence, unchanged: clear the controller-mode overrides and presentation policies, load acceleration and disc speed; run reset_mod_owned_presentation(); activate; then apply the netplay local viewport, the controller-mode overrides and load acceleration. The first boot and the rematch both call it after their commit or netplay clear, and both then take the mounted disc from session_disc_path(), which returns the plan's derived image when there is one and otherwise the stock disc. Activation still precedes renderer and window creation on the rematch, because those happen after session_reboot on every session. The rematch re-applies its 4:3 Settings clamp before the session start, so a plugin's activation or the netplay local viewport can still set the aspect. A netplay rematch clears the plan, so activating it runs nothing and the match stays vanilla. The first boot's behaviour is unchanged. Tests: test_mod_owned_display_controls.py now requires activation and the mod-owned reset to happen only inside start_mod_session, in the order reset, activate, apply. It requires both paths to call it after their commit and before the disc mount, and the rematch 4:3 clamp to come before it. mod_runtime_test adds the lobby rematch sequence: activating after a netplay clear runs no callback, VBlank plugin or hook; the offline rematch's commit and activation re-run the activation callback and VBlank plugin and arm exactly the plan's hook. test_mod_load_acceleration.py follows the reset block into the lambda body. Two comments that said a soft return never re-applies the controller-mode override are corrected: test_launcher_pad_mode_wiring.py and test_launcher_pad_mode_resolve.cpp. MOD_PACKAGES.md now describes the rematch as a full session start. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>