From c91ce8c0532c0820f9aab8667fee05852873adb4 Mon Sep 17 00:00:00 2001 From: Thanatos Date: Fri, 16 Feb 2024 13:39:32 +0100 Subject: [PATCH 1/2] Use super missile model with red texture for missile launcher --- .../files/missile_e.bctex | Bin 0 -> 2954 bytes .../files/powerup_randomissile.bcmdl | Bin 0 -> 13308 bytes .../pickups/model_data.py | 12 +++--------- src/open_samus_returns_rando/pickups/pickup.py | 9 +-------- .../samus_returns_patcher.py | 7 +++++++ 5 files changed, 11 insertions(+), 17 deletions(-) create mode 100644 src/open_samus_returns_rando/files/missile_e.bctex create mode 100644 src/open_samus_returns_rando/files/powerup_randomissile.bcmdl diff --git a/src/open_samus_returns_rando/files/missile_e.bctex b/src/open_samus_returns_rando/files/missile_e.bctex new file mode 100644 index 0000000000000000000000000000000000000000..b8558c7d8dd2c416de875009e30be95874a0ff96 GIT binary patch literal 2954 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 None: MODELUPDATER["functions"][0]["params"].pop("Param2") bmsad["components"].pop("FX") bmsad["sound_fx"] = ListContainer([]) - elif model_name == "powerup_missilelauncher": - bmsad["header"]["model_scale"] = 1.75 - bmsad["components"].pop("FX") else: bmsad["components"].pop("FX") bmsad["sound_fx"] = ListContainer([]) @@ -249,10 +245,7 @@ def patch_model(self, model_names: list[str], bmsad: dict) -> None: if model_name not in TANK_MODELS: MODELUPDATER["fields"] = OFFSET MODELUPDATER["fields"]["vInitPosWorldOffset"]["value"][1] = y_offset - if model_name == "powerup_missilelauncher": - MODELUPDATER["fields"]["vInitAngWorldOffset"]["value"][0] = -1.6 - else: - MODELUPDATER["fields"]["vInitAngWorldOffset"]["value"][0] = 0.0 + MODELUPDATER["fields"]["vInitAngWorldOffset"]["value"][0] = 0.0 def patch(self, editor: PatcherEditor): diff --git a/src/open_samus_returns_rando/samus_returns_patcher.py b/src/open_samus_returns_rando/samus_returns_patcher.py index 453b9372..852c4f2d 100644 --- a/src/open_samus_returns_rando/samus_returns_patcher.py +++ b/src/open_samus_returns_rando/samus_returns_patcher.py @@ -6,6 +6,7 @@ from mercury_engine_data_structures.file_tree_editor import OutputFormat from open_samus_returns_rando.debug import debug_custom_pickups, debug_spawn_points +from open_samus_returns_rando.files import files_path from open_samus_returns_rando.logger import LOG from open_samus_returns_rando.lua_editor import LuaEditor from open_samus_returns_rando.misc_patches.collision_camera_table import create_collision_camera_table @@ -50,6 +51,12 @@ def patch_extracted(input_path: Path, output_path: Path, configuration: dict): editor = PatcherEditor(input_path) lua_scripts = LuaEditor() + # TODO: Move me somewhere! + missile_tex = files_path().joinpath("missile_e.bctex").read_bytes() + missile_model = files_path().joinpath("powerup_randomissile.bcmdl").read_bytes() + editor.add_new_asset("actors/items/powerup_randomissile/models/powerup_randomissile.bcmdl", missile_model, []) + editor.add_new_asset("actors/items/powerup_randomissile/models/textures/missile_e.bctex", missile_tex, []) + # Apply fixes apply_static_fixes(editor) From 267db4cbafbbd95f2fb4f5f591096384f3c2a8ae Mon Sep 17 00:00:00 2001 From: Thanatos Date: Sat, 17 Feb 2024 16:15:46 +0100 Subject: [PATCH 2/2] Refactor custom missile launcher --- .../models/powerup_missilelauncher.bcmdl} | Bin .../models/textures}/missile_e.bctex | Bin .../pickups/model_data.py | 6 +++--- .../samus_returns_patcher.py | 15 ++++++++++----- 4 files changed, 13 insertions(+), 8 deletions(-) rename src/open_samus_returns_rando/files/{powerup_randomissile.bcmdl => romfs/actors/items/powerup_missilelauncher/models/powerup_missilelauncher.bcmdl} (100%) rename src/open_samus_returns_rando/files/{ => romfs/actors/items/powerup_missilelauncher/models/textures}/missile_e.bctex (100%) diff --git a/src/open_samus_returns_rando/files/powerup_randomissile.bcmdl b/src/open_samus_returns_rando/files/romfs/actors/items/powerup_missilelauncher/models/powerup_missilelauncher.bcmdl similarity index 100% rename from src/open_samus_returns_rando/files/powerup_randomissile.bcmdl rename to src/open_samus_returns_rando/files/romfs/actors/items/powerup_missilelauncher/models/powerup_missilelauncher.bcmdl diff --git a/src/open_samus_returns_rando/files/missile_e.bctex b/src/open_samus_returns_rando/files/romfs/actors/items/powerup_missilelauncher/models/textures/missile_e.bctex similarity index 100% rename from src/open_samus_returns_rando/files/missile_e.bctex rename to src/open_samus_returns_rando/files/romfs/actors/items/powerup_missilelauncher/models/textures/missile_e.bctex diff --git a/src/open_samus_returns_rando/pickups/model_data.py b/src/open_samus_returns_rando/pickups/model_data.py index 12e31c05..195c296c 100644 --- a/src/open_samus_returns_rando/pickups/model_data.py +++ b/src/open_samus_returns_rando/pickups/model_data.py @@ -285,10 +285,10 @@ class ModelData: ), ), "powerup_missilelauncher": ModelData( - bcmdl_path="actors/items/powerup_randomissile/models/powerup_randomissile.bcmdl", + bcmdl_path="actors/items/powerup_missilelauncher/models/powerup_missilelauncher.bcmdl", dependencies=( - "actors/items/powerup_randomissile/models/powerup_randomissile.bcmdl", - "actors/items/powerup_randomissile/models/textures/missile_e.bctex", + "actors/items/powerup_missilelauncher/models/powerup_missilelauncher.bcmdl", + "actors/items/powerup_missilelauncher/models/textures/missile_e.bctex", ), ), } diff --git a/src/open_samus_returns_rando/samus_returns_patcher.py b/src/open_samus_returns_rando/samus_returns_patcher.py index 852c4f2d..7986b351 100644 --- a/src/open_samus_returns_rando/samus_returns_patcher.py +++ b/src/open_samus_returns_rando/samus_returns_patcher.py @@ -33,6 +33,14 @@ def _read_schema(): with Path(__file__).parent.joinpath("files", "schema.json").open() as f: return json.load(f) +def add_custom_files(editor: PatcherEditor): + custom_romfs = files_path().joinpath("romfs") + for child in custom_romfs.rglob("*"): + if not child.is_file(): + continue + relative = child.relative_to(custom_romfs).as_posix() + LOG.info("Adding custom asset %s", relative) + editor.add_new_asset(str(relative), child.read_bytes(), []) def patch_exefs(exefs_patches: Path): exefs_patches.mkdir(parents=True, exist_ok=True) @@ -51,11 +59,8 @@ def patch_extracted(input_path: Path, output_path: Path, configuration: dict): editor = PatcherEditor(input_path) lua_scripts = LuaEditor() - # TODO: Move me somewhere! - missile_tex = files_path().joinpath("missile_e.bctex").read_bytes() - missile_model = files_path().joinpath("powerup_randomissile.bcmdl").read_bytes() - editor.add_new_asset("actors/items/powerup_randomissile/models/powerup_randomissile.bcmdl", missile_model, []) - editor.add_new_asset("actors/items/powerup_randomissile/models/textures/missile_e.bctex", missile_tex, []) + # Add all custom files from RomFS + add_custom_files(editor) # Apply fixes apply_static_fixes(editor)