Project Sylpheed never stores a capital ship as a single mesh. Each ship is modelled, then split into destructible parts (hull segments, bridge, engines, integral turrets), each shipped as its own XBG7 resource inside a hidden/resource3d/Stage_SNN.xpr container. The split lets the game hide/replace a part when the player destroys it. Crucially each part keeps its ship-local position, so reconstructing the whole ship is: draw every base part of one id together, untransformed. New `ship` module: Faction (from the e/f/n id prefix — ADAN/TCAF/Neutral), ShipModel, ship_id_of, is_base_part (skips _l/_m/_d LODs, _bNN/_dead/_break destruction geometry, e_rou_ scene nodes), and ships_in_container to group a stage's resources into whole ships. Supporting: - mesh::xbg7_resource_names — list a container's XBG7 resource names (directory walk only, no geometry decode). - Xbg7Model::models_named — decode only the named resources (assemble a ship from its ~8 parts instead of the whole ~300-resource stage). - game_data::Vessel gains `model` (the rou_<id> hull stem) to link stats to the 3D part family. Tests: id/part classification + a disc-gated reconstruction of the ADAN e108 frigate from Stage_S02. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
40 KiB
40 KiB