mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-07 08:15:59 -10:00
* take a model reference when a ship changes class ship_model_change() only loaded the model when the class had none, so a ship switched to a class whose model had been loaded only by a select-screen preview adopted that preview's single reference. Closing the screen then freed the model from under the ship, and the first simulation frame asserted in model_get(). This is what happened on a replayed mission with a restored loadout: ship select was skipped, the weapon-select overhead loaded the new class once, the commit switched the player to it, and the screen close released it. Load unconditionally, as ship_create() already does, so the ship holds its own reference. Co-Authored-By: Claude Fable 5.1 <[email protected]> * reject stale model ids in model_unload and release select-screen handles at level close model_unload only used the slot part of the id it was given, so a handle kept across missions would free whatever model had since been loaded into that slot. Validate the id against the slot's occupant and warn instead. Two holders could present such handles: the weapon-select icon models under a scripted UI that overrides the state hooks (the native close never runs), and the ship-select 3D model global, which was never reset between missions. Release the select-screen handles from game_level_close, and unload the ship-select model on screen close and on every selection change. Co-Authored-By: Claude Fable 5.1 <[email protected]> * consolidate the select-screen resource release The weapon side released its icons, anims, and ship class data from two functions keyed on whether the screen was open, and the level-close path added a third copy. Give the weapon side the same shape as the ship side: one unconditional weapon_select_common_close(), with weapon_select_close() left as pure UI teardown. common_select_level_close() now just calls the two common closes, and common_select_close() calls it in turn. The ship-select 3D model is released from ship_select_common_close() so both paths cover it. Co-Authored-By: Claude Fable 5.1 <[email protected]> --------- Co-authored-by: Claude Fable 5.1 <[email protected]>