summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouist103 <35883445+louist103@users.noreply.github.com>2024-03-26 21:26:31 -0400
committerGarrett Cox <garrettjcox@gmail.com>2024-05-22 09:05:00 -0500
commit904bf60b36c4a210aea83343a9c089f88d0d7bb5 (patch)
tree580c5ff5c87977a9754072436a9ddd3756fc8d3f
parent9da273a8ead5ff6557b36a1d792ccc8cd6538c82 (diff)
Changes for new LUS resources (#151)
* Changes for new LUS resources * fix factory issues and bump modules * add build version, custom assets folder, and fix extraction * add missing custom assets * fix build .h * libzip in the workflows * apt-deps * Fixes to importers to work with upstream Resource Manager. Also remove duplicated structs. * Bump LUS * bump LUS * Bump LUS * bump lus * point back to louist103/mm --------- Co-authored-by: Adam Bird <archez39@me.com>
-rw-r--r--.github/workflows/apt-deps.txt2
-rw-r--r--.github/workflows/main.yml15
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt8
m---------OTRExporter0
m---------ZAPDTR0
m---------libultraship0
-rw-r--r--mm/2s2h/BenGui/BenMenuBar.cpp1
-rw-r--r--mm/2s2h/BenPort.cpp105
-rw-r--r--mm/2s2h/Extractor/Extract.cpp10
-rw-r--r--mm/2s2h/resource/importer/AnimationFactory.cpp37
-rw-r--r--mm/2s2h/resource/importer/AnimationFactory.h14
-rw-r--r--mm/2s2h/resource/importer/AudioSampleFactory.cpp36
-rw-r--r--mm/2s2h/resource/importer/AudioSampleFactory.h18
-rw-r--r--mm/2s2h/resource/importer/AudioSequenceFactory.cpp33
-rw-r--r--mm/2s2h/resource/importer/AudioSequenceFactory.h18
-rw-r--r--mm/2s2h/resource/importer/AudioSoundFontFactory.cpp33
-rw-r--r--mm/2s2h/resource/importer/AudioSoundFontFactory.h18
-rw-r--r--mm/2s2h/resource/importer/AudioSoundFontFactory.h.111
-rw-r--r--mm/2s2h/resource/importer/BackgroundFactory.cpp31
-rw-r--r--mm/2s2h/resource/importer/BackgroundFactory.h16
-rw-r--r--mm/2s2h/resource/importer/CollisionHeaderFactory.cpp153
-rw-r--r--mm/2s2h/resource/importer/CollisionHeaderFactory.h16
-rw-r--r--mm/2s2h/resource/importer/CutsceneFactory.cpp351
-rw-r--r--mm/2s2h/resource/importer/CutsceneFactory.h21
-rw-r--r--mm/2s2h/resource/importer/KeyFrameFactory.cpp76
-rw-r--r--mm/2s2h/resource/importer/KeyFrameFactory.h24
-rw-r--r--mm/2s2h/resource/importer/PathFactory.cpp84
-rw-r--r--mm/2s2h/resource/importer/PathFactory.h30
-rw-r--r--mm/2s2h/resource/importer/PlayerAnimationFactory.cpp37
-rw-r--r--mm/2s2h/resource/importer/PlayerAnimationFactory.h14
-rw-r--r--mm/2s2h/resource/importer/SceneFactory.cpp135
-rw-r--r--mm/2s2h/resource/importer/SceneFactory.h27
-rw-r--r--mm/2s2h/resource/importer/SkeletonFactory.cpp139
-rw-r--r--mm/2s2h/resource/importer/SkeletonFactory.h22
-rw-r--r--mm/2s2h/resource/importer/SkeletonLimbFactory.cpp127
-rw-r--r--mm/2s2h/resource/importer/SkeletonLimbFactory.h22
-rw-r--r--mm/2s2h/resource/importer/TextFactory.cpp93
-rw-r--r--mm/2s2h/resource/importer/TextFactory.h23
-rw-r--r--mm/2s2h/resource/importer/TextMMFactory.cpp73
-rw-r--r--mm/2s2h/resource/importer/TextMMFactory.h26
-rw-r--r--mm/2s2h/resource/importer/TextureAnimationFactory.cpp39
-rw-r--r--mm/2s2h/resource/importer/TextureAnimationFactory.h13
-rw-r--r--mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.cpp38
-rw-r--r--mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.h14
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.cpp5
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.h14
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.cpp41
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetActorListFactory.cpp54
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetActorListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.cpp50
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.cpp42
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.h14
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.cpp39
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.h13
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.cpp35
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.cpp40
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.h13
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.cpp72
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.h24
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.cpp36
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.cpp41
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetExitListFactory.cpp35
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetExitListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetLightListFactory.cpp43
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetLightListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.cpp37
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetMeshFactory.cpp51
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetMeshFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.cpp33
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.h13
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.cpp33
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.h13
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.cpp36
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.cpp73
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.h25
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.cpp71
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.h27
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.cpp46
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.cpp35
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.cpp35
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.cpp35
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.cpp35
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.cpp56
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.cpp34
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.cpp37
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.h15
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.cpp36
-rw-r--r--mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.h13
-rw-r--r--mm/2s2h/resource/type/2shResourceType.h27
-rw-r--r--mm/2s2h/resource/type/Animation.cpp4
-rw-r--r--mm/2s2h/resource/type/Animation.h9
-rw-r--r--mm/2s2h/resource/type/AudioSample.cpp4
-rw-r--r--mm/2s2h/resource/type/AudioSample.h8
-rw-r--r--mm/2s2h/resource/type/AudioSequence.cpp4
-rw-r--r--mm/2s2h/resource/type/AudioSequence.h8
-rw-r--r--mm/2s2h/resource/type/AudioSoundFont.cpp4
-rw-r--r--mm/2s2h/resource/type/AudioSoundFont.h8
-rw-r--r--mm/2s2h/resource/type/Background.cpp4
-rw-r--r--mm/2s2h/resource/type/Background.h8
-rw-r--r--mm/2s2h/resource/type/CollisionHeader.cpp4
-rw-r--r--mm/2s2h/resource/type/CollisionHeader.h8
-rw-r--r--mm/2s2h/resource/type/Cutscene.cpp4
-rw-r--r--mm/2s2h/resource/type/Cutscene.h8
-rw-r--r--mm/2s2h/resource/type/KeyFrame.cpp8
-rw-r--r--mm/2s2h/resource/type/KeyFrame.h12
-rw-r--r--mm/2s2h/resource/type/Path.cpp14
-rw-r--r--mm/2s2h/resource/type/Path.h28
-rw-r--r--mm/2s2h/resource/type/PlayerAnimation.cpp4
-rw-r--r--mm/2s2h/resource/type/PlayerAnimation.h8
-rw-r--r--mm/2s2h/resource/type/Scene.cpp4
-rw-r--r--mm/2s2h/resource/type/Scene.h13
-rw-r--r--mm/2s2h/resource/type/Skeleton.cpp4
-rw-r--r--mm/2s2h/resource/type/Skeleton.h8
-rw-r--r--mm/2s2h/resource/type/SkeletonLimb.cpp4
-rw-r--r--mm/2s2h/resource/type/SkeletonLimb.h9
-rw-r--r--mm/2s2h/resource/type/Text.cpp11
-rw-r--r--mm/2s2h/resource/type/Text.h30
-rw-r--r--mm/2s2h/resource/type/TextMM.cpp4
-rw-r--r--mm/2s2h/resource/type/TextMM.h8
-rw-r--r--mm/2s2h/resource/type/TextureAnimation.cpp4
-rw-r--r--mm/2s2h/resource/type/TextureAnimation.h8
-rw-r--r--mm/2s2h/resource/type/scenecommand/EndMarker.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/EndMarker.h6
-rw-r--r--mm/2s2h/resource/type/scenecommand/RomFile.h2
-rw-r--r--mm/2s2h/resource/type/scenecommand/SceneCommand.h8
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.h3
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetActorList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetActorList.h7
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.h7
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.cpp10
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.h11
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCameraSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCameraSettings.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCollisionHeader.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCollisionHeader.h6
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCsCamera.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCsCamera.h9
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCutscenes.cpp18
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetCutscenes.h19
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetEchoSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetEchoSettings.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetEntranceList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetEntranceList.h5
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetExitList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetExitList.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetLightList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetLightList.h6
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetLightingSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetLightingSettings.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetMesh.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetMesh.h5
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetMinimapChests.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetMinimapChests.h2
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetMinimapList.cpp8
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetMinimapList.h3
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetObjectList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetObjectList.h6
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetPathways.cpp14
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetPathways.h18
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetRoomBehavior.cpp11
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetRoomBehavior.h20
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetRoomList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetRoomList.h14
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSoundSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSoundSettings.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSpecialObjects.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetSpecialObjects.h6
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetStartPositionList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetStartPositionList.h7
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetTimeSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetTimeSettings.h4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetTransitionActorList.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetTransitionActorList.h7
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetWindSettings.cpp4
-rw-r--r--mm/2s2h/resource/type/scenecommand/SetWindSettings.h4
-rw-r--r--mm/2s2h/z_message_OTR.cpp5
-rw-r--r--mm/2s2h/z_play_2SH.cpp6
-rw-r--r--mm/2s2h/z_scene_2SH.cpp137
-rw-r--r--mm/CMakeLists.txt13
-rw-r--r--mm/assets/.gitignore3
-rw-r--r--mm/assets/custom/accessibility/texts/filechoose_eng.json28
-rw-r--r--mm/assets/custom/accessibility/texts/kaleidoscope_eng.json18
-rw-r--r--mm/assets/custom/accessibility/texts/misc_eng.json24
-rw-r--r--mm/assets/custom/accessibility/texts/scenes_eng.json3
-rw-r--r--mm/assets/custom/fonts/Fipps-Regular.otfbin0 -> 34220 bytes
-rw-r--r--mm/assets/custom/fonts/PressStart2P-Regular.ttfbin0 -> 116008 bytes
-rw-r--r--mm/assets/custom/helpers/cosmetics/gEndGrayscaleAndEndDlistDL5
-rw-r--r--mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestFrontTex.rgb5a1.pngbin0 -> 2917 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestSideAndTopTex.rgb5a1.pngbin0 -> 1111 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gChristmasRedTreasureChestFrontTex.rgb5a1.pngbin0 -> 3518 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gChristmasRedTreasureChestSideAndTopTex.rgb5a1.pngbin0 -> 1661 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.pngbin0 -> 4727 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.pngbin0 -> 2338 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gKeyTreasureChestFrontTex.rgb5a1.pngbin0 -> 4233 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.pngbin0 -> 2184 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.pngbin0 -> 4265 bytes
-rw-r--r--mm/assets/custom/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.pngbin0 -> 1979 bytes
-rw-r--r--mm/assets/custom/objects/object_mag/gTitleBossRushSubtitleTex.rgba32.pngbin0 -> 6291 bytes
-rw-r--r--mm/assets/custom/objects/object_mag/gTitleRandomizerSubtitleTex.rgba32.pngbin0 -> 6971 bytes
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL13
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_058
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_17
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_054
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_18
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges21
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface21
-rw-r--r--mm/assets/custom/objects/object_triforce_completed/noise_texbin0 -> 2140 bytes
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL15
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_017
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_118
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_251
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_018
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_122
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_249
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_0/noise_texbin0 -> 2140 bytes
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL13
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_020
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_125
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_023
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_134
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_1/noise_texbin0 -> 2140 bytes
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL15
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_029
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_111
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_219
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_036
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_112
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_218
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface21
-rw-r--r--mm/assets/custom/objects/object_triforce_piece_2/noise_texbin0 -> 2140 bytes
-rw-r--r--mm/assets/custom/textures/buttons/ABtn.pngbin0 -> 10967 bytes
-rw-r--r--mm/assets/custom/textures/buttons/BBtn.pngbin0 -> 1300 bytes
-rw-r--r--mm/assets/custom/textures/buttons/CDown.pngbin0 -> 11241 bytes
-rw-r--r--mm/assets/custom/textures/buttons/CLeft.pngbin0 -> 11232 bytes
-rw-r--r--mm/assets/custom/textures/buttons/CRight.pngbin0 -> 11284 bytes
-rw-r--r--mm/assets/custom/textures/buttons/CUp.pngbin0 -> 11219 bytes
-rw-r--r--mm/assets/custom/textures/buttons/LBtn.pngbin0 -> 355 bytes
-rw-r--r--mm/assets/custom/textures/buttons/RBtn.pngbin0 -> 379 bytes
-rw-r--r--mm/assets/custom/textures/buttons/StartBtn.pngbin0 -> 11868 bytes
-rw-r--r--mm/assets/custom/textures/buttons/ZBtn.pngbin0 -> 1241 bytes
-rw-r--r--mm/assets/custom/textures/icons/gIcon.pngbin0 -> 932 bytes
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/SoHShinybin0 -> 1116 bytes
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL21
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_0241
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_180
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_2259
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_3118
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_0335
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_198
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_2323
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_3128
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material20
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_00120
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_00220
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_00320
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material8
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_0018
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_0028
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_0038
-rw-r--r--mm/assets/custom/textures/nintendo_rogo_static/nintendo_rogo_static_Tex_LUS_000000bin0 -> 6291548 bytes
-rw-r--r--mm/assets/custom/textures/parameter_static/gArrowDown.ia16.pngbin0 -> 17227 bytes
-rw-r--r--mm/assets/custom/textures/parameter_static/gArrowUp.ia16.pngbin0 -> 17217 bytes
-rw-r--r--mm/assets/custom/textures/parameter_static/gDPad.ia16.pngbin0 -> 1017 bytes
-rw-r--r--mm/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.pngbin0 -> 1761 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelBossRushSettingsENGTex.ia8.pngbin0 -> 4004 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelBossRushSettingsFRATex.ia8.pngbin0 -> 3942 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelBossRushSettingsGERTex.ia8.pngbin0 -> 3884 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelMQButtonTex.ia16.pngbin0 -> 883 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestENGTex.ia8.pngbin0 -> 3682 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestFRATex.ia8.pngbin0 -> 3852 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestGERTex.ia8.pngbin0 -> 3666 bytes
-rw-r--r--mm/assets/custom/textures/title_static/gFileSelRANDButtonTex.ia16.pngbin0 -> 1045 bytes
-rw-r--r--mm/assets/custom/textures/virtual/gEmptyTexture.rgba32.pngbin0 -> 194 bytes
-rw-r--r--mm/build.c0
-rw-r--r--mm/include/build.h14
-rw-r--r--mm/src/boot/build.c3
-rw-r--r--mm/src/boot/build.c.in11
-rw-r--r--mm/src/code/c_keyframe.c2
306 files changed, 4120 insertions, 3000 deletions
diff --git a/.github/workflows/apt-deps.txt b/.github/workflows/apt-deps.txt
index 2a12d368c..a6593e4de 100644
--- a/.github/workflows/apt-deps.txt
+++ b/.github/workflows/apt-deps.txt
@@ -1 +1 @@
-libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev ninja-build
+libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev ninja-build libzip-dev zipcmp zipmerge ziptool \ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 2a127d73f..338a172b6 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -45,6 +45,21 @@ jobs:
make -j
sudo make install
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
+ - name: Install latest libzip
+ if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) }}
+ run: |
+ sudo apt-get remove libzip-dev zipcmp zipmerge ziptool
+ export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
+ if [ ! -d "libzip-1.10.1" ]; then
+ wget https://libzip.org/download/libzip-1.10.1.tar.gz
+ tar -xzvf libzip-1.10.1.tar.gz
+ fi
+ cd libzip-1.10.1
+ mkdir build
+ cd build
+ cmake ..
+ make
+ sudo make install
- name: Download Rom
run: |
url="${{ secrets.BASEROM }}"
diff --git a/.gitignore b/.gitignore
index f750e6eb4..68efcecbc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,3 +56,5 @@ mm/libultraship/extern/StrHash64.dir/Debug/StrHash64.tlog/Lib.command.1.tlog
/Release
.vs/*
/x64
+
+/mm/src/boot/build.c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 18a0f1c55..9ebd540d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,7 +33,7 @@ elseif ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set(VCPKG_TARGET_TRIPLET x64-windows-static)
endif()
vcpkg_bootstrap()
-vcpkg_install_packages(zlib bzip2 libpng sdl2 sdl2-net glew glfw3)
+vcpkg_install_packages(zlib bzip2 libpng sdl2 sdl2-net glew glfw3 libzip)
endif()
################################################################################
@@ -132,7 +132,7 @@ add_custom_target(
ExtractAssets
# CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions
COMMAND ${CMAKE_COMMAND} -E $<IF:$<VERSION_LESS:${CMAKE_VERSION},3.17>,remove,rm> -f mm.otr soh.otr
- COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive
+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../mm/assets/xml --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/mm/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
COMMENT "Running asset extraction..."
@@ -143,7 +143,7 @@ add_custom_target(
# Target to generate headers
add_custom_target(
ExtractAssetHeaders
- COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --gen-headers
+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../mm/assets/xml --gen-headers
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
COMMENT "Generating asset headers..."
DEPENDS ZAPD
@@ -154,7 +154,7 @@ add_custom_target(
GenerateSohOtr
# CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions
COMMAND ${CMAKE_COMMAND} -E $<IF:$<VERSION_LESS:${CMAKE_VERSION},3.17>,remove,rm> -f soh.otr
- COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom
+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/mm/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLYSOHOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
COMMENT "Generating soh.otr..."
diff --git a/OTRExporter b/OTRExporter
-Subproject 2e378fe443aba5e32d8975c9f06b2fa5f1991c2
+Subproject 5c48f3411cd404c3ad1a945d7f7cd10d41cb5e4
diff --git a/ZAPDTR b/ZAPDTR
-Subproject 01ed7e87f2b4b8145d8b0af8c8d8912b86f4b90
+Subproject a406a7d4310c26f6e7aeece3bb4475cd8fd2d9e
diff --git a/libultraship b/libultraship
-Subproject 87d3a14cb433c499014ff810191fe83673dc69e
+Subproject e40c19e992073e1cde514ad1c4272c08b85b970
diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp
index 24f4372fc..25e650c8d 100644
--- a/mm/2s2h/BenGui/BenMenuBar.cpp
+++ b/mm/2s2h/BenGui/BenMenuBar.cpp
@@ -30,7 +30,6 @@ static const std::unordered_map<int32_t, const char*> textureFilteringMap = {
static const std::unordered_map<LUS::AudioBackend, const char*> audioBackendsMap = {
{ LUS::AudioBackend::WASAPI, "Windows Audio Session API" },
- { LUS::AudioBackend::PULSE, "PulseAudio" },
{ LUS::AudioBackend::SDL, "SDL" },
};
diff --git a/mm/2s2h/BenPort.cpp b/mm/2s2h/BenPort.cpp
index d2de391a4..0c5c1936d 100644
--- a/mm/2s2h/BenPort.cpp
+++ b/mm/2s2h/BenPort.cpp
@@ -59,6 +59,7 @@ CrowdControl* CrowdControl::Instance;
#include "2s2h/Enhancements/GfxPatcher/AuthenticGfxPatches.h"
// Resource Types/Factories
+#include "2s2h/resource//type/2shResourceType.h"
#include "2s2h/resource/type/Animation.h"
#include "2s2h/resource/type/AudioSample.h"
#include "2s2h/resource/type/AudioSequence.h"
@@ -70,7 +71,6 @@ CrowdControl* CrowdControl::Instance;
#include "2s2h/resource/type/Scene.h"
#include "2s2h/resource/type/Skeleton.h"
#include "2s2h/resource/type/SkeletonLimb.h"
-#include "2s2h/resource/type/Text.h"
#include "2s2h/resource/importer/AnimationFactory.h"
#include "2s2h/resource/importer/AudioSampleFactory.h"
#include "2s2h/resource/importer/AudioSequenceFactory.h"
@@ -82,7 +82,6 @@ CrowdControl* CrowdControl::Instance;
#include "2s2h/resource/importer/SceneFactory.h"
#include "2s2h/resource/importer/SkeletonFactory.h"
#include "2s2h/resource/importer/SkeletonLimbFactory.h"
-#include "2s2h/resource/importer/TextFactory.h"
#include "2s2h/resource/importer/TextMMFactory.h"
#include "2s2h/resource/importer/BackgroundFactory.h"
#include "2s2h/resource/importer/TextureAnimationFactory.h"
@@ -130,42 +129,44 @@ OTRGlobals::OTRGlobals() {
// tell LUS to reserve 3 SoH specific threads (Game, Audio, Save)
context = LUS::Context::CreateInstance("2 Ship 2 Harkinian", appShortName, "shipofharkinian.json", OTRFiles, {}, 3);
//context = LUS::Context::CreateUninitializedInstance("Ship of Harkinian", appShortName, "shipofharkinian.json");
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_Animation, "Animation", std::make_shared<LUS::AnimationFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_PlayerAnimation, "PlayerAnimation", std::make_shared<LUS::PlayerAnimationFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_Room, "Room", std::make_shared<LUS::SceneFactory>()); // Is room scene? maybe?
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_CollisionHeader, "CollisionHeader", std::make_shared<LUS::CollisionHeaderFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_Skeleton, "Skeleton", std::make_shared<LUS::SkeletonFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_SkeletonLimb, "SkeletonLimb", std::make_shared<LUS::SkeletonLimbFactory>());
- // TODO should we use a custom command for this?
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::SOH_Path, "Path",
- std::make_shared<LUS::PathFactoryMM>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_Cutscene, "Cutscene", std::make_shared<LUS::CutsceneFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::SOH_Text, "Text",
- std::make_shared<LUS::TextFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::SOH_TextMM, "TextMM",
- std::make_shared<LUS::TextMMFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_AudioSample, "AudioSample", std::make_shared<LUS::AudioSampleFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_AudioSoundFont, "AudioSoundFont", std::make_shared<LUS::AudioSoundFontFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_AudioSequence, "AudioSequence", std::make_shared<LUS::AudioSequenceFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::SOH_Background, "Background", std::make_shared<LUS::BackgroundFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::TSH_TexAnim, "TextureAnimation", std::make_shared<LUS::TextureAnimationFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::TSH_CKeyFrameAnim, "KeyFrameAnim", std::make_shared<LUS::KeyFrameAnimFactory>());
- context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(
- LUS::ResourceType::TSH_CKeyFrameSkel, "KeyFrameSkel", std::make_shared<LUS::KeyFrameSkelFactory>());
-
+ auto loader = context->GetResourceManager()->GetResourceLoader();
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryAnimationV0>(), RESOURCE_FORMAT_BINARY,
+ "Animation", static_cast<uint32_t>(SOH::ResourceType::SOH_Animation), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryPlayerAnimationV0>(),
+ RESOURCE_FORMAT_BINARY, "PlayerAnimation",
+ static_cast<uint32_t>(SOH::ResourceType::SOH_PlayerAnimation), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinarySceneV0>(), RESOURCE_FORMAT_BINARY,
+ "Room", static_cast<uint32_t>(SOH::ResourceType::SOH_Room), 0);
+ loader
+ ->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryCollisionHeaderV0>(), RESOURCE_FORMAT_BINARY,
+ "CollisionHeader", static_cast<uint32_t>(SOH::ResourceType::SOH_CollisionHeader), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinarySkeletonV0>(), RESOURCE_FORMAT_BINARY,
+ "Skeleton", static_cast<uint32_t>(SOH::ResourceType::SOH_Skeleton), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinarySkeletonLimbV0>(),
+ RESOURCE_FORMAT_BINARY, "SkeletonLimb",
+ static_cast<uint32_t>(SOH::ResourceType::SOH_SkeletonLimb), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryPathMMV0>(), RESOURCE_FORMAT_BINARY,
+ "Path", static_cast<uint32_t>(SOH::ResourceType::SOH_Path), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryCutsceneV0>(), RESOURCE_FORMAT_BINARY,
+ "Cutscene", static_cast<uint32_t>(SOH::ResourceType::SOH_Cutscene), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryTextMMV0>(), RESOURCE_FORMAT_BINARY,
+ "TextMM", static_cast<uint32_t>(SOH::ResourceType::TSH_TextMM), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryAudioSampleV2>(), RESOURCE_FORMAT_BINARY,
+ "AudioSample", static_cast<uint32_t>(SOH::ResourceType::SOH_AudioSample), 2);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryAudioSoundFontV2>(),
+ RESOURCE_FORMAT_BINARY, "AudioSoundFont",
+ static_cast<uint32_t>(SOH::ResourceType::SOH_AudioSoundFont), 2);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryAudioSequenceV2>(),
+ RESOURCE_FORMAT_BINARY, "AudioSequence", static_cast<uint32_t>(SOH::ResourceType::SOH_AudioSequence), 2);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryBackgroundV0>(), RESOURCE_FORMAT_BINARY,
+ "Background", static_cast<uint32_t>(SOH::ResourceType::SOH_Background), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryTextureAnimationV0>(),
+ RESOURCE_FORMAT_BINARY, "TextureAnimation",
+ static_cast<uint32_t>(SOH::ResourceType::TSH_TexAnim), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryKeyFrameAnim>(), RESOURCE_FORMAT_BINARY,
+ "KeyFrameAnim", static_cast<uint32_t>(SOH::ResourceType::TSH_CKeyFrameAnim), 0);
+ loader->RegisterResourceFactory(std::make_shared<SOH::ResourceFactoryBinaryKeyFrameSkel>(), RESOURCE_FORMAT_BINARY,
+ "KeyFrameSkel", static_cast<uint32_t>(SOH::ResourceType::TSH_CKeyFrameSkel), 0);
context->GetControlDeck()->SetSinglePlayerMappingMode(true);
//gSaveStateMgr = std::make_shared<SaveStateMgr>();
@@ -183,7 +184,7 @@ OTRGlobals::OTRGlobals() {
// cameraStrings[i] = dup;
//}
- auto versions = context->GetResourceManager()->GetArchive()->GetGameVersions();
+ auto versions = context->GetResourceManager()->GetArchiveManager()->GetGameVersions();
#if 0
for (uint32_t version : versions) {
if (!ValidHashes.contains(version)) {
@@ -266,7 +267,7 @@ extern "C" void ResourceMgr_LoadDirectory(const char* resName);
std::unordered_map<std::string, ExtensionEntry> ExtensionCache;
extern "C" void OTRExtScanner() {
- auto lst = *LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->ListFiles("*").get();
+ auto lst = *LUS::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->ListFiles("*").get();
for (auto& rPath : lst) {
std::vector<std::string> raw = StringHelper::Split(rPath, ".");
@@ -632,15 +633,15 @@ extern "C" uint16_t OTRGetPixelDepth(float x, float y) {
}
extern "C" uint32_t ResourceMgr_GetNumGameVersions() {
- return LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->GetGameVersions().size();
+ return LUS::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->GetGameVersions().size();
}
extern "C" uint32_t ResourceMgr_GetGameVersion(int index) {
- return LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->GetGameVersions()[index];
+ return LUS::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->GetGameVersions()[index];
}
extern "C" uint32_t ResourceMgr_GetGamePlatform(int index) {
- uint32_t version = LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->GetGameVersions()[index];
+ uint32_t version = LUS::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->GetGameVersions()[index];
switch (version) {
case OOT_NTSC_US_10:
@@ -663,7 +664,7 @@ extern "C" uint32_t ResourceMgr_GetGamePlatform(int index) {
}
extern "C" uint32_t ResourceMgr_GetGameRegion(int index) {
- uint32_t version = LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->GetGameVersions()[index];
+ uint32_t version = LUS::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->GetGameVersions()[index];
switch (version) {
case OOT_NTSC_US_10:
@@ -742,7 +743,7 @@ extern "C" void ResourceMgr_DirtyDirectory(const char* resName) {
// OTRTODO: There is probably a more elegant way to go about this...
// Kenix: This is definitely leaking memory when it's called.
extern "C" char** ResourceMgr_ListFiles(const char* searchMask, int* resultSize) {
- auto lst = LUS::Context::GetInstance()->GetResourceManager()->GetArchive()->ListFiles(searchMask);
+ auto lst = LUS::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->ListFiles(searchMask);
char** result = (char**)malloc(lst->size() * sizeof(char*));
for (size_t i = 0; i < lst->size(); i++) {
@@ -806,7 +807,7 @@ extern "C" char* ResourceMgr_LoadFileFromDisk(const char* filePath) {
extern "C" uint8_t ResourceMgr_ResourceIsBackground(char* texPath) {
auto res = GetResourceByNameHandlingMQ(texPath);
- return res->GetInitData()->Type == LUS::ResourceType::SOH_Background;
+ return res->GetInitData()->Type == static_cast<uint32_t>(SOH::ResourceType::SOH_Background);
}
extern "C" char* ResourceMgr_LoadJPEG(char* data, size_t dataSize) {
@@ -853,9 +854,9 @@ extern "C" uint16_t ResourceMgr_LoadTexHeightByName(char* texPath);
extern "C" char* ResourceMgr_LoadTexOrDListByName(const char* filePath) {
auto res = GetResourceByNameHandlingMQ(filePath);
- if (res->GetInitData()->Type == LUS::ResourceType::DisplayList)
+ if (res->GetInitData()->Type == static_cast<uint32_t>(LUS::ResourceType::DisplayList))
return (char*)&((std::static_pointer_cast<LUS::DisplayList>(res))->Instructions[0]);
- else if (res->GetInitData()->Type == LUS::ResourceType::Array)
+ else if (res->GetInitData()->Type == static_cast<uint32_t>(LUS::ResourceType::Array))
return (char*)(std::static_pointer_cast<LUS::Array>(res))->Vertices.data();
else {
return (char*)GetResourceDataByNameHandlingMQ(filePath);
@@ -865,7 +866,7 @@ extern "C" char* ResourceMgr_LoadTexOrDListByName(const char* filePath) {
extern "C" char* ResourceMgr_LoadIfDListByName(const char* filePath) {
auto res = GetResourceByNameHandlingMQ(filePath);
- if (res->GetInitData()->Type == LUS::ResourceType::DisplayList)
+ if (res->GetInitData()->Type == static_cast<uint32_t>(LUS::ResourceType::DisplayList))
return (char*)&((std::static_pointer_cast<LUS::DisplayList>(res))->Instructions[0]);
return nullptr;
@@ -876,7 +877,7 @@ extern "C" char* ResourceMgr_LoadIfDListByName(const char* filePath) {
//}
extern "C" char* ResourceMgr_LoadPlayerAnimByName(const char* animPath) {
- auto anim = std::static_pointer_cast<LUS::PlayerAnimation>(GetResourceByNameHandlingMQ(animPath));
+ auto anim = std::static_pointer_cast<SOH::PlayerAnimation>(GetResourceByNameHandlingMQ(animPath));
return (char*)&anim->limbRotData[0];
}
@@ -1160,12 +1161,12 @@ extern "C" SkeletonHeader* ResourceMgr_LoadSkeletonByName(const char* path, Skel
extern "C" void ResourceMgr_UnregisterSkeleton(SkelAnime* skelAnime) {
if (skelAnime != nullptr)
- LUS::SkeletonPatcher::UnregisterSkeleton(skelAnime);
+ SOH::SkeletonPatcher::UnregisterSkeleton(skelAnime);
}
extern "C" void ResourceMgr_ClearSkeletons(SkelAnime* skelAnime) {
if (skelAnime != nullptr)
- LUS::SkeletonPatcher::ClearSkeletons();
+ SOH::SkeletonPatcher::ClearSkeletons();
}
extern "C" s32* ResourceMgr_LoadCSByName(const char* path) {
diff --git a/mm/2s2h/Extractor/Extract.cpp b/mm/2s2h/Extractor/Extract.cpp
index c2eb096db..61f1291e0 100644
--- a/mm/2s2h/Extractor/Extract.cpp
+++ b/mm/2s2h/Extractor/Extract.cpp
@@ -7,6 +7,7 @@
#include "Extract.h"
#include "portable-file-dialogs.h"
#include <Utils/BitConverter.h>
+#include "build.h"
#ifdef unix
#include <dirent.h>
@@ -535,9 +536,10 @@ std::string Extractor::Mkdtemp() {
extern "C" int zapd_main(int argc, char** argv);
bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
- constexpr int argc = 16;
+ constexpr int argc = 18;
char xmlPath[1024];
char confPath[1024];
+ char portVersion[18]; // 5 digits for int16_max (x3) + separators + terminator
std::array<const char*, argc> argv;
// const char* version = GetZapdVerStr();
const char* otrFile = "mm.otr";
@@ -559,6 +561,7 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
snprintf(xmlPath, 1024, "assets/extractor/xmls");
snprintf(confPath, 1024, "assets/extractor/Config.xml");
+ snprintf(portVersion, 18, "%d.%d.%d", gBuildVersionMajor, gBuildVersionMinor, gBuildVersionPatch);
argv[0] = "ZAPD";
argv[1] = "ed";
@@ -576,6 +579,8 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
argv[13] = "OTR";
argv[14] = "--otrfile";
argv[15] = otrFile;
+ argv[16] = "--portVer";
+ argv[17] = portVersion;
#ifdef _WIN32
// Grab a handle to the command window.
@@ -584,6 +589,9 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
// Normally the command window is hidden. We want the window to be shown here so the user can see the progess of the extraction.
ShowWindow(cmdWindow, SW_SHOW);
SetWindowPos(cmdWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
+#else
+ // Show extraction in background message until linux/mac can have visual progress
+ SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Extracting", "Extraction will now begin in the background.\n\nPlease be patient for the process to finish. Do not close the main program.", nullptr);
#endif
zapd_main(argc, (char**)argv.data());
diff --git a/mm/2s2h/resource/importer/AnimationFactory.cpp b/mm/2s2h/resource/importer/AnimationFactory.cpp
index c177c8ea9..e59a46f7f 100644
--- a/mm/2s2h/resource/importer/AnimationFactory.cpp
+++ b/mm/2s2h/resource/importer/AnimationFactory.cpp
@@ -4,32 +4,15 @@
#include <libultraship/libultraship.h>
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-AnimationFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Animation>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<AnimationFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Animation with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+ResourceFactoryBinaryAnimationV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::AnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<Animation> animation = std::static_pointer_cast<Animation>(resource);
-
- ResourceVersionFactory::ParseFileBinary(reader, animation);
+ auto animation = std::make_shared<Animation>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
AnimationType animType = (AnimationType)reader->ReadUInt32();
animation->type = animType;
@@ -99,10 +82,12 @@ void LUS::AnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> read
// Read the segment pointer (always 32 bit, doesn't adjust for system pointer size)
std::string path = reader->ReadString();
-
- animation->animationData.linkAnimationHeader.segment = ResourceGetDataByName(path.c_str());
+ const auto animData = std::static_pointer_cast<Animation>(LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(path.c_str()));
+
+ animation->animationData.linkAnimationHeader.segment = animData->GetPointer();
} else if (animType == AnimationType::Legacy) {
SPDLOG_DEBUG("BEYTAH ANIMATION?!");
}
+ return animation;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/AnimationFactory.h b/mm/2s2h/resource/importer/AnimationFactory.h
index dee2026f9..37744ee02 100644
--- a/mm/2s2h/resource/importer/AnimationFactory.h
+++ b/mm/2s2h/resource/importer/AnimationFactory.h
@@ -1,17 +1,11 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class AnimationFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinaryAnimationV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class AnimationFactoryV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/AudioSampleFactory.cpp b/mm/2s2h/resource/importer/AudioSampleFactory.cpp
index 73c5af484..a24febba6 100644
--- a/mm/2s2h/resource/importer/AudioSampleFactory.cpp
+++ b/mm/2s2h/resource/importer/AudioSampleFactory.cpp
@@ -2,33 +2,14 @@
#include "2s2h/resource/type/AudioSample.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-AudioSampleFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<AudioSample>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 2:
- factory = std::make_shared<AudioSampleFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load AudioSample with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryAudioSampleV2::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::AudioSampleFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<AudioSample> audioSample = std::static_pointer_cast<AudioSample>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, audioSample);
+ auto audioSample = std::make_shared<AudioSample>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
audioSample->sample.codec = reader->ReadUByte();
audioSample->sample.medium = reader->ReadUByte();
@@ -65,9 +46,10 @@ void LUS::AudioSampleFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> re
}
audioSample->book.book = audioSample->bookData.data();
audioSample->sample.book = &audioSample->book;
-}
-} // namespace LUS
+ return audioSample;
+}
+} // namespace SOH
/*
in ResourceMgr_LoadAudioSample we used to have
diff --git a/mm/2s2h/resource/importer/AudioSampleFactory.h b/mm/2s2h/resource/importer/AudioSampleFactory.h
index 6e9ddc17c..2680ccdc2 100644
--- a/mm/2s2h/resource/importer/AudioSampleFactory.h
+++ b/mm/2s2h/resource/importer/AudioSampleFactory.h
@@ -1,19 +1,11 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class AudioSampleFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinaryAudioSampleV2 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-
-class AudioSampleFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/AudioSequenceFactory.cpp b/mm/2s2h/resource/importer/AudioSequenceFactory.cpp
index 20c5df8a3..b1c604831 100644
--- a/mm/2s2h/resource/importer/AudioSequenceFactory.cpp
+++ b/mm/2s2h/resource/importer/AudioSequenceFactory.cpp
@@ -2,33 +2,14 @@
#include "2s2h/resource/type/AudioSequence.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-AudioSequenceFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<AudioSequence>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 2:
- factory = std::make_shared<AudioSequenceFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load AudioSequence with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryAudioSequenceV2::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::AudioSequenceFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<AudioSequence> audioSequence = std::static_pointer_cast<AudioSequence>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, audioSequence);
+ auto audioSequence = std::make_shared<AudioSequence>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
audioSequence->sequence.seqDataSize = reader->ReadInt32();
audioSequence->sequenceData.reserve(audioSequence->sequence.seqDataSize);
@@ -48,5 +29,7 @@ void LUS::AudioSequenceFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader>
for (uint32_t i = 0; i < audioSequence->sequence.numFonts; i++) {
audioSequence->sequence.fonts[i] = reader->ReadUByte();
}
+
+ return audioSequence;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/AudioSequenceFactory.h b/mm/2s2h/resource/importer/AudioSequenceFactory.h
index 12b3809aa..fb4391d61 100644
--- a/mm/2s2h/resource/importer/AudioSequenceFactory.h
+++ b/mm/2s2h/resource/importer/AudioSequenceFactory.h
@@ -1,19 +1,11 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class AudioSequenceFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinaryAudioSequenceV2 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-
-class AudioSequenceFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/AudioSoundFontFactory.cpp b/mm/2s2h/resource/importer/AudioSoundFontFactory.cpp
index 4ccb7edad..6fee8ec87 100644
--- a/mm/2s2h/resource/importer/AudioSoundFontFactory.cpp
+++ b/mm/2s2h/resource/importer/AudioSoundFontFactory.cpp
@@ -3,33 +3,14 @@
#include "spdlog/spdlog.h"
#include "libultraship/libultraship.h"
-namespace LUS {
-std::shared_ptr<IResource>
-AudioSoundFontFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<AudioSoundFont>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 2:
- factory = std::make_shared<AudioSoundFontFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load AudioSoundFont with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryAudioSoundFontV2::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::AudioSoundFontFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<AudioSoundFont> audioSoundFont = std::static_pointer_cast<AudioSoundFont>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, audioSoundFont);
+ auto audioSoundFont = std::make_shared<AudioSoundFont>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
audioSoundFont->soundFont.fntIndex = reader->ReadInt32();
audioSoundFont->medium = reader->ReadInt8();
@@ -186,5 +167,7 @@ void LUS::AudioSoundFontFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader>
audioSoundFont->soundEffects.push_back(soundEffect);
}
audioSoundFont->soundFont.soundEffects = audioSoundFont->soundEffects.data();
+
+ return audioSoundFont;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/AudioSoundFontFactory.h b/mm/2s2h/resource/importer/AudioSoundFontFactory.h
index 7dd5bc0d5..a63533db9 100644
--- a/mm/2s2h/resource/importer/AudioSoundFontFactory.h
+++ b/mm/2s2h/resource/importer/AudioSoundFontFactory.h
@@ -1,19 +1,11 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class AudioSoundFontFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinaryAudioSoundFontV2 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-
-class AudioSoundFontFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/AudioSoundFontFactory.h.1 b/mm/2s2h/resource/importer/AudioSoundFontFactory.h.1
new file mode 100644
index 000000000..a63533db9
--- /dev/null
+++ b/mm/2s2h/resource/importer/AudioSoundFontFactory.h.1
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "Resource.h"
+#include "ResourceFactoryBinary.h"
+
+namespace SOH {
+class ResourceFactoryBinaryAudioSoundFontV2 : public LUS::ResourceFactoryBinary {
+ public:
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
+};
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/BackgroundFactory.cpp b/mm/2s2h/resource/importer/BackgroundFactory.cpp
index 6acc7737c..3c430bf51 100644
--- a/mm/2s2h/resource/importer/BackgroundFactory.cpp
+++ b/mm/2s2h/resource/importer/BackgroundFactory.cpp
@@ -2,31 +2,14 @@
#include "2s2h/resource/type/Background.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-BackgroundFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Background>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<BackgroundFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Background with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryBackgroundV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void BackgroundFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<Background> background = std::static_pointer_cast<Background>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, background);
+ auto background = std::make_shared<Background>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
uint32_t dataSize = reader->ReadUInt32();
@@ -35,5 +18,7 @@ void BackgroundFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
for (uint32_t i = 0; i < dataSize; i++) {
background->Data.push_back(reader->ReadUByte());
}
+
+ return background;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/BackgroundFactory.h b/mm/2s2h/resource/importer/BackgroundFactory.h
index 9767fdf8b..787ee509c 100644
--- a/mm/2s2h/resource/importer/BackgroundFactory.h
+++ b/mm/2s2h/resource/importer/BackgroundFactory.h
@@ -1,17 +1,11 @@
#pragma once
#include "resource/Resource.h"
-#include "resource/ResourceFactory.h"
+#include "resource/ResourceFactoryBinary.h"
-namespace LUS {
-class BackgroundFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinaryBackgroundV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-
-class BackgroundFactoryV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/CollisionHeaderFactory.cpp b/mm/2s2h/resource/importer/CollisionHeaderFactory.cpp
index 4b5b45f0d..e517f3bbf 100644
--- a/mm/2s2h/resource/importer/CollisionHeaderFactory.cpp
+++ b/mm/2s2h/resource/importer/CollisionHeaderFactory.cpp
@@ -2,33 +2,14 @@
#include "2s2h/resource/type/CollisionHeader.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-CollisionHeaderFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<CollisionHeader>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<CollisionHeaderFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Collision Header with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryCollisionHeaderV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::CollisionHeaderFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<CollisionHeader> collisionHeader = std::static_pointer_cast<CollisionHeader>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, collisionHeader);
+ auto collisionHeader = std::make_shared<CollisionHeader>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
collisionHeader->collisionHeaderData.minBounds.x = reader->ReadInt16();
collisionHeader->collisionHeaderData.minBounds.y = reader->ReadInt16();
@@ -138,5 +119,129 @@ void LUS::CollisionHeaderFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader
collisionHeader->waterBoxes.push_back(waterBox);
}
collisionHeader->collisionHeaderData.waterBoxes = collisionHeader->waterBoxes.data();
+
+ return collisionHeader;
}
+
+std::shared_ptr<LUS::IResource> ResourceFactoryXMLCollisionHeaderV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
+ }
+
+ auto collisionHeader = std::make_shared<CollisionHeader>(file->InitData);
+
+ auto reader = std::get<std::shared_ptr<tinyxml2::XMLDocument>>(file->Reader)->FirstChildElement();
+ auto child = reader->FirstChildElement();
+
+ collisionHeader->collisionHeaderData.minBounds.x = reader->IntAttribute("MinBoundsX");
+ collisionHeader->collisionHeaderData.minBounds.y = reader->IntAttribute("MinBoundsY");
+ collisionHeader->collisionHeaderData.minBounds.z = reader->IntAttribute("MinBoundsZ");
+
+ collisionHeader->collisionHeaderData.maxBounds.x = reader->IntAttribute("MaxBoundsX");
+ collisionHeader->collisionHeaderData.maxBounds.y = reader->IntAttribute("MaxBoundsY");
+ collisionHeader->collisionHeaderData.maxBounds.z = reader->IntAttribute("MaxBoundsZ");
+
+ Vec3s zero;
+ zero.x = 0;
+ zero.y = 0;
+ zero.z = 0;
+ collisionHeader->camPosDataZero = zero;
+
+ while (child != nullptr) {
+ std::string childName = child->Name();
+ if (childName == "Vertex") {
+ Vec3s vtx;
+ vtx.x = child->IntAttribute("X");
+ vtx.y = child->IntAttribute("Y");
+ vtx.z = child->IntAttribute("Z");
+ collisionHeader->vertices.push_back(vtx);
+ } else if (childName == "Polygon") {
+ CollisionPoly polygon;
+
+ polygon.type = child->UnsignedAttribute("Type");
+
+ polygon.flags_vIA = child->UnsignedAttribute("VertexA");
+ polygon.flags_vIB = child->UnsignedAttribute("VertexB");
+ polygon.vIC = child->UnsignedAttribute("VertexC");
+
+ polygon.normal.x = child->IntAttribute("NormalX");
+ polygon.normal.y = child->IntAttribute("NormalY");
+ polygon.normal.z = child->IntAttribute("NormalZ");
+
+ polygon.dist = child->IntAttribute("Dist");
+
+ collisionHeader->polygons.push_back(polygon);
+ } else if (childName == "PolygonType") {
+ SurfaceType surfaceType;
+
+ surfaceType.data[0] = child->UnsignedAttribute("Data1");
+ surfaceType.data[1] = child->UnsignedAttribute("Data2");
+
+ collisionHeader->surfaceTypes.push_back(surfaceType);
+ } else if (childName == "CameraData") {
+ CamData camDataEntry;
+ camDataEntry.cameraSType = child->UnsignedAttribute("SType");
+ camDataEntry.numCameras = child->IntAttribute("NumData");
+ collisionHeader->camData.push_back(camDataEntry);
+
+ int32_t camPosDataIdx = child->IntAttribute("CameraPosDataSeg");
+ collisionHeader->camPosDataIndices.push_back(camPosDataIdx);
+ } else if (childName == "CameraPositionData") {
+ //each camera position data is made up of 3 Vec3s
+ Vec3s pos;
+ pos.x = child->IntAttribute("PosX");
+ pos.y = child->IntAttribute("PosY");
+ pos.z = child->IntAttribute("PosZ");
+ collisionHeader->camPosData.push_back(pos);
+ Vec3s rot;
+ rot.x = child->IntAttribute("RotX");
+ rot.y = child->IntAttribute("RotY");
+ rot.z = child->IntAttribute("RotZ");
+ collisionHeader->camPosData.push_back(rot);
+ Vec3s other;
+ other.x = child->IntAttribute("FOV");
+ other.y = child->IntAttribute("JfifID");
+ other.z = child->IntAttribute("Unknown");
+ collisionHeader->camPosData.push_back(other);
+ } else if (childName == "WaterBox") {
+ WaterBox waterBox;
+ waterBox.xMin = child->IntAttribute("XMin");
+ waterBox.ySurface = child->IntAttribute("Ysurface");
+ waterBox.zMin = child->IntAttribute("ZMin");
+ waterBox.xLength = child->IntAttribute("XLength");
+ waterBox.zLength = child->IntAttribute("ZLength");
+ waterBox.properties = child->IntAttribute("Properties");
+
+ collisionHeader->waterBoxes.push_back(waterBox);
+ }
+
+ child = child->NextSiblingElement();
+ }
+
+ for (size_t i = 0; i < collisionHeader->camData.size(); i++) {
+ int32_t idx = collisionHeader->camPosDataIndices[i];
+
+ if (collisionHeader->camPosData.size() > 0) {
+ collisionHeader->camData[i].camPosData = &collisionHeader->camPosData[idx];
+ } else {
+ collisionHeader->camData[i].camPosData = &collisionHeader->camPosDataZero;
+ }
+ }
+
+ collisionHeader->collisionHeaderData.numVertices = collisionHeader->vertices.size();
+ collisionHeader->collisionHeaderData.numPolygons = collisionHeader->polygons.size();
+ collisionHeader->surfaceTypesCount = collisionHeader->surfaceTypes.size();
+ collisionHeader->camDataCount = collisionHeader->camData.size();
+ collisionHeader->camPosCount = collisionHeader->camPosData.size();
+ collisionHeader->collisionHeaderData.numWaterBoxes = collisionHeader->waterBoxes.size();
+
+ collisionHeader->collisionHeaderData.vtxList = collisionHeader->vertices.data();
+ collisionHeader->collisionHeaderData.polyList = collisionHeader->polygons.data();
+ collisionHeader->collisionHeaderData.surfaceTypeList = collisionHeader->surfaceTypes.data();
+ collisionHeader->collisionHeaderData.cameraDataList = collisionHeader->camData.data();
+ collisionHeader->collisionHeaderData.cameraDataListLen = collisionHeader->camDataCount;
+ collisionHeader->collisionHeaderData.waterBoxes = collisionHeader->waterBoxes.data();
+
+ return collisionHeader;
}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/CollisionHeaderFactory.h b/mm/2s2h/resource/importer/CollisionHeaderFactory.h
index 09d6ba4c5..abd878909 100644
--- a/mm/2s2h/resource/importer/CollisionHeaderFactory.h
+++ b/mm/2s2h/resource/importer/CollisionHeaderFactory.h
@@ -1,17 +1,17 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
+#include "ResourceFactoryXML.h"
-namespace LUS {
-class CollisionHeaderFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinaryCollisionHeaderV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-class CollisionHeaderFactoryV0 : public ResourceVersionFactory {
+class ResourceFactoryXMLCollisionHeaderV0 : public LUS::ResourceFactoryXML {
public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/CutsceneFactory.cpp b/mm/2s2h/resource/importer/CutsceneFactory.cpp
index be06b316f..0d76f3103 100644
--- a/mm/2s2h/resource/importer/CutsceneFactory.cpp
+++ b/mm/2s2h/resource/importer/CutsceneFactory.cpp
@@ -243,36 +243,16 @@ typedef enum {
/* -1 */ CS_CAM_STOP // OoT Remnant
} CutsceneCmd;
-namespace LUS {
-std::shared_ptr<IResource> CutsceneFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Cutscene>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<CutsceneFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Cutscene with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
+namespace SOH {
- return resource;
-}
-
-static inline uint32_t read_CMD_BBBB(std::shared_ptr<BinaryReader> reader) {
+static inline uint32_t read_CMD_BBBB(std::shared_ptr<LUS::BinaryReader> reader) {
uint32_t v;
reader->Read((char*)&v, sizeof(uint32_t));
return v;
}
-static inline uint32_t read_CMD_BBH(std::shared_ptr<BinaryReader> reader) {
+static inline uint32_t read_CMD_BBH(std::shared_ptr<LUS::BinaryReader> reader) {
uint32_t v;
reader->Read((char*)&v, sizeof(uint32_t));
@@ -287,7 +267,7 @@ static inline uint32_t read_CMD_BBH(std::shared_ptr<BinaryReader> reader) {
return v;
}
-static inline uint32_t read_CMD_HBB(std::shared_ptr<BinaryReader> reader) {
+static inline uint32_t read_CMD_HBB(std::shared_ptr<LUS::BinaryReader> reader) {
uint32_t v;
reader->Read((char*)&v, sizeof(uint32_t));
@@ -302,7 +282,7 @@ static inline uint32_t read_CMD_HBB(std::shared_ptr<BinaryReader> reader) {
return v;
}
-static inline uint32_t read_CMD_HH(std::shared_ptr<BinaryReader> reader) {
+static inline uint32_t read_CMD_HH(std::shared_ptr<LUS::BinaryReader> reader) {
uint32_t v;
reader->Read((char*)&v, sizeof(uint32_t));
@@ -320,10 +300,13 @@ static inline uint32_t read_CMD_HH(std::shared_ptr<BinaryReader> reader) {
return v;
}
-void LUS::CutsceneFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<Cutscene> cutscene = std::static_pointer_cast<Cutscene>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, cutscene);
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryCutsceneV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
+ }
+
+ auto cutscene = std::make_shared<Cutscene>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
uint32_t numEntries = reader->ReadUInt32();
cutscene->commands.reserve(numEntries);
@@ -335,9 +318,161 @@ void LUS::CutsceneFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reade
cutscene->commands.push_back(cutscene->endFrame);
// BENTODO detect the game
- ParseFileBinaryMM(reader, cutscene);
+ while (true) {
+ uint32_t command = reader->ReadUInt32();
+ cutscene->commands.push_back(command);
+
+ if (((command >= CS_CMD_ACTOR_CUE_100) && (command <= CS_CMD_ACTOR_CUE_149)) ||
+ (command == CS_CMD_ACTOR_CUE_201) ||
+ ((command >= CS_CMD_ACTOR_CUE_450) && (command <= CS_CMD_ACTOR_CUE_599))) {
+ goto actorCue;
+ }
+
+ switch (command) {
+ case CS_CMD_TEXT: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ }
+ break;
+ }
+ case CS_CMD_CAMERA_SPLINE: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ while (1) {
+ // We need to store the first half of the header to get the number of entries.
+ uint32_t header1 = read_CMD_HH(reader);
+
+ uint32_t numEntries = header1 & 0xFFFF;
+
+ cutscene->commands.push_back(header1);
+ if (numEntries == 0xFFFF) {
+ break; // Last command is HH(0xFFFF, 0004) which was already read in and pushed into the vector
+ }
+ cutscene->commands.push_back(read_CMD_HH(reader));
+
+ for (size_t j = 0; j < numEntries * 2; j++) {
+ cutscene->commands.push_back(read_CMD_BBH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ }
+
+ for (size_t j = 0; j < numEntries; j++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ }
+ }
+
+ // for (uint32_t i = 0; i < (size / 4); i++) {
+
+ // cutscene->commands.push_back(read_CMD_HH(reader));
+ //}
+ break;
+ }
+ case CS_CMD_MISC:
+ case CS_CMD_LIGHT_SETTING:
+ case CS_CMD_TRANSITION:
+ case CS_CMD_MOTION_BLUR:
+ case CS_CMD_GIVE_TATL:
+ case CS_CMD_START_SEQ:
+ case CS_CMD_STOP_SEQ:
+ case CS_CMD_SFX_REVERB_INDEX_2:
+ case CS_CMD_SFX_REVERB_INDEX_1:
+ case CS_CMD_MODIFY_SEQ:
+ case CS_CMD_START_AMBIENCE:
+ case CS_CMD_FADE_OUT_AMBIENCE:
+ case CS_CMD_DESTINATION:
+ case CS_CMD_CHOOSE_CREDITS_SCENES:
+ default: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ }
+ break;
+ }
+ case CS_CMD_TRANSITION_GENERAL: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HBB(reader));
+ cutscene->commands.push_back(read_CMD_BBBB(reader));
+ }
+ break;
+ }
+ case CS_CMD_FADE_OUT_SEQ: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(reader->ReadUInt32());
+ }
+ break;
+ }
+ case CS_CMD_TIME: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HBB(reader));
+ cutscene->commands.push_back(reader->ReadUInt32());
+ }
+ break;
+ }
+ case CS_CMD_PLAYER_CUE: {
+ actorCue:
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ cutscene->commands.push_back(reader->ReadUInt32());
+ }
+ break;
+ }
+ case CS_CMD_RUMBLE: {
+ uint32_t size = reader->ReadUInt32();
+ cutscene->commands.push_back(size);
+
+ for (uint32_t i = 0; i < size; i++) {
+ cutscene->commands.push_back(read_CMD_HH(reader));
+ cutscene->commands.push_back(read_CMD_HBB(reader));
+ cutscene->commands.push_back(read_CMD_BBBB(reader));
+ }
+ break;
+ }
+ case 0xFFFFFFFF: {
+ cutscene->commands.push_back(reader->ReadUInt32());
+ return cutscene;
+ }
+ }
+ }
+
+ return cutscene;
}
+#if 0
void LUS::CutsceneFactoryV0::ParseFileBinaryOoT(std::shared_ptr<BinaryReader> reader,
std::shared_ptr<Cutscene> cutscene) {
while (true) {
@@ -714,159 +849,5 @@ void LUS::CutsceneFactoryV0::ParseFileBinaryOoT(std::shared_ptr<BinaryReader> re
}
}
}
-
-void LUS::CutsceneFactoryV0::ParseFileBinaryMM(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<Cutscene> cutscene) {
- while (true) {
- uint32_t command = reader->ReadUInt32();
- cutscene->commands.push_back(command);
-
- if (((command >= CS_CMD_ACTOR_CUE_100) && (command <= CS_CMD_ACTOR_CUE_149)) ||
- (command == CS_CMD_ACTOR_CUE_201) ||
- ((command >= CS_CMD_ACTOR_CUE_450) && (command <= CS_CMD_ACTOR_CUE_599))) {
- goto actorCue;
- }
-
- switch (command) {
- case CS_CMD_TEXT: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- }
- break;
- }
- case CS_CMD_CAMERA_SPLINE: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- while (1) {
- // We need to store the first half of the header to get the number of entries.
- uint32_t header1 = read_CMD_HH(reader);
-
- uint32_t numEntries = header1 & 0xFFFF;
-
- cutscene->commands.push_back(header1);
- if (numEntries == 0xFFFF) {
- break; //Last command is HH(0xFFFF, 0004) which was already read in and pushed into the vector
- }
- cutscene->commands.push_back(read_CMD_HH(reader));
-
- for (size_t j = 0; j < numEntries * 2; j++) {
- cutscene->commands.push_back(read_CMD_BBH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- }
-
- for (size_t j = 0; j < numEntries; j++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- }
- }
-
- //for (uint32_t i = 0; i < (size / 4); i++) {
-
- //cutscene->commands.push_back(read_CMD_HH(reader));
- //}
- break;
- }
- case CS_CMD_MISC:
- case CS_CMD_LIGHT_SETTING:
- case CS_CMD_TRANSITION:
- case CS_CMD_MOTION_BLUR:
- case CS_CMD_GIVE_TATL:
- case CS_CMD_START_SEQ:
- case CS_CMD_STOP_SEQ:
- case CS_CMD_SFX_REVERB_INDEX_2:
- case CS_CMD_SFX_REVERB_INDEX_1:
- case CS_CMD_MODIFY_SEQ:
- case CS_CMD_START_AMBIENCE:
- case CS_CMD_FADE_OUT_AMBIENCE:
- case CS_CMD_DESTINATION:
- case CS_CMD_CHOOSE_CREDITS_SCENES:
- default: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- }
- break;
- }
- case CS_CMD_TRANSITION_GENERAL: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HBB(reader));
- cutscene->commands.push_back(read_CMD_BBBB(reader));
- }
- break;
- }
- case CS_CMD_FADE_OUT_SEQ: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(reader->ReadUInt32());
- }
- break;
- }
- case CS_CMD_TIME: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HBB(reader));
- cutscene->commands.push_back(reader->ReadUInt32());
- }
- break;
- }
- case CS_CMD_PLAYER_CUE: {
- actorCue:
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- cutscene->commands.push_back(reader->ReadUInt32());
- }
- break;
- }
- case CS_CMD_RUMBLE: {
- uint32_t size = reader->ReadUInt32();
- cutscene->commands.push_back(size);
-
- for (uint32_t i = 0; i < size; i++) {
- cutscene->commands.push_back(read_CMD_HH(reader));
- cutscene->commands.push_back(read_CMD_HBB(reader));
- cutscene->commands.push_back(read_CMD_BBBB(reader));
- }
- break;
- }
- case 0xFFFFFFFF: {
- cutscene->commands.push_back(reader->ReadUInt32());
- return;
- }
- }
- }
-}
-
+#endif
} // namespace LUS
diff --git a/mm/2s2h/resource/importer/CutsceneFactory.h b/mm/2s2h/resource/importer/CutsceneFactory.h
index 729041ce3..2b0c91651 100644
--- a/mm/2s2h/resource/importer/CutsceneFactory.h
+++ b/mm/2s2h/resource/importer/CutsceneFactory.h
@@ -1,25 +1,12 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class Cutscene;
-class CutsceneFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinaryCutsceneV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class CutsceneFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-
- private:
- void ParseFileBinaryOoT(std::shared_ptr<BinaryReader> reader,std::shared_ptr<Cutscene> cutscene);
- void ParseFileBinaryMM(std::shared_ptr<BinaryReader> reader, std::shared_ptr<Cutscene> cutscene);
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/KeyFrameFactory.cpp b/mm/2s2h/resource/importer/KeyFrameFactory.cpp
index 36166c91e..6804396a4 100644
--- a/mm/2s2h/resource/importer/KeyFrameFactory.cpp
+++ b/mm/2s2h/resource/importer/KeyFrameFactory.cpp
@@ -4,38 +4,18 @@
#include "spdlog/spdlog.h"
#include "../ZAPDTR/ZAPD/ZCKeyFrame.h"
-namespace LUS {
-
-
-
-std::shared_ptr<IResource> KeyFrameSkelFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<KeyFrameSkel>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<KeyFrameSkelFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Key Frame skel with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryKeyFrameSkel::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
+ auto skel = std::make_shared<KeyFrameSkel>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
-void KeyFrameSkelFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<KeyFrameSkel> skel = std::static_pointer_cast<KeyFrameSkel>(resource);
- ZKeyframeSkelType skelType;
-
- ResourceVersionFactory::ParseFileBinary(reader, skel);
skel->skelData.limbCount = reader->ReadUByte();
skel->skelData.dListCount = reader->ReadUByte();
- skelType = (ZKeyframeSkelType)reader->ReadUByte();
+ ZKeyframeSkelType skelType = (ZKeyframeSkelType)reader->ReadUByte();
uint8_t numLimbs = reader->ReadUByte();
if (skelType == ZKeyframeSkelType::Normal) {
@@ -69,39 +49,22 @@ void KeyFrameSkelFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
limbs[i].flags = reader->ReadUByte();
limbs[i].callbackIndex = reader->ReadUByte();
}
- skel->skelData.limbsFlex = limbs;
+ skel->skelData.limbsFlex = limbs;
}
-}
-std::shared_ptr<IResource> KeyFrameAnimFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<KeyFrameAnim>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<KeyFrameAnimFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Key Frame skel with version {}", resource->GetInitData()->ResourceVersion);
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
+ return skel;
}
-void KeyFrameAnimFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<KeyFrameAnim> anim = std::static_pointer_cast<KeyFrameAnim>(resource);
- ZKeyframeSkelType skelType;
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryKeyFrameAnim::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
+ }
- ResourceVersionFactory::ParseFileBinary(reader, anim);
+ auto anim = std::make_shared<KeyFrameAnim>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
- skelType = (ZKeyframeSkelType)reader->ReadUByte();
-
- uint32_t numBitFlags = reader->ReadUInt32();
+ const ZKeyframeSkelType skelType = (ZKeyframeSkelType)reader->ReadUByte();
+ const uint32_t numBitFlags = reader->ReadUInt32();
if (skelType == ZKeyframeSkelType::Normal) {
anim->animData.bitFlags = new u8[numBitFlags];
@@ -142,6 +105,7 @@ void KeyFrameAnimFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
anim->animData.unk_10[0] = reader->ReadUByte();
anim->animData.duration = reader->ReadUInt16();
-}
-} // namespace LUS \ No newline at end of file
+ return anim;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/KeyFrameFactory.h b/mm/2s2h/resource/importer/KeyFrameFactory.h
index 476635f2a..a76ad93b9 100644
--- a/mm/2s2h/resource/importer/KeyFrameFactory.h
+++ b/mm/2s2h/resource/importer/KeyFrameFactory.h
@@ -1,29 +1,17 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class KeyFrameSkelFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinaryKeyFrameSkel : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-class KeyFrameSkelFactoryV0 : public ResourceVersionFactory {
+class ResourceFactoryBinaryKeyFrameAnim : public LUS::ResourceFactoryBinary {
public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-class KeyFrameAnimFactory : public ResourceFactory {
- public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class KeyFrameAnimFactoryV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
}; \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/PathFactory.cpp b/mm/2s2h/resource/importer/PathFactory.cpp
index 07e5b6e7b..26b58db23 100644
--- a/mm/2s2h/resource/importer/PathFactory.cpp
+++ b/mm/2s2h/resource/importer/PathFactory.cpp
@@ -2,82 +2,14 @@
#include "2s2h/resource/type/Path.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-PathFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Path>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<PathFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Path with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::PathFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<Path> path = std::static_pointer_cast<Path>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, path);
-
- path->numPaths = reader->ReadUInt32();
- path->paths.reserve(path->numPaths);
- for (uint32_t k = 0; k < path->numPaths; k++) {
- std::vector<Vec3s> points;
- uint32_t pointCount = reader->ReadUInt32();
- points.reserve(pointCount);
- for (uint32_t i = 0; i < pointCount; i++) {
- Vec3s point;
- point.x = reader->ReadInt16();
- point.y = reader->ReadInt16();
- point.z = reader->ReadInt16();
-
- points.push_back(point);
- }
-
- PathData pathDataEntry;
- pathDataEntry.count = pointCount;
-
- path->paths.push_back(points);
- pathDataEntry.points = path->paths.back().data();
-
- path->pathData.push_back(pathDataEntry);
- }
-}
-
-std::shared_ptr<IResource> PathFactoryMM::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Path>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<PathFactoryMMV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Path with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryPathMMV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::PathFactoryMMV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<PathMM> path = std::static_pointer_cast<PathMM>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, path);
+ auto path = std::make_shared<PathMM>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
path->numPaths = reader->ReadUInt32();
path->paths.reserve(path->numPaths);
@@ -107,7 +39,7 @@ void LUS::PathFactoryMMV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
path->pathData.push_back(pathDataEntry);
}
-}
-
-} // namespace LUS
+ return path;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/PathFactory.h b/mm/2s2h/resource/importer/PathFactory.h
index 08f9e26cf..0f564dc92 100644
--- a/mm/2s2h/resource/importer/PathFactory.h
+++ b/mm/2s2h/resource/importer/PathFactory.h
@@ -1,31 +1,11 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class PathFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinaryPathMMV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-
-class PathFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-class PathFactoryMM : public ResourceFactory {
- public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class PathFactoryMMV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/PlayerAnimationFactory.cpp b/mm/2s2h/resource/importer/PlayerAnimationFactory.cpp
index 7e6aba360..b54ffeaeb 100644
--- a/mm/2s2h/resource/importer/PlayerAnimationFactory.cpp
+++ b/mm/2s2h/resource/importer/PlayerAnimationFactory.cpp
@@ -2,34 +2,15 @@
#include "2s2h/resource/type/PlayerAnimation.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-PlayerAnimationFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<PlayerAnimation>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<PlayerAnimationFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load PlayerAnimation with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+ResourceFactoryBinaryPlayerAnimationV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::PlayerAnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<PlayerAnimation> playerAnimation = std::static_pointer_cast<PlayerAnimation>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, playerAnimation);
+ auto playerAnimation = std::make_shared<PlayerAnimation>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
uint32_t numEntries = reader->ReadUInt32();
playerAnimation->limbRotData.reserve(numEntries);
@@ -37,5 +18,7 @@ void LUS::PlayerAnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader
for (uint32_t i = 0; i < numEntries; i++) {
playerAnimation->limbRotData.push_back(reader->ReadInt16());
}
+
+ return playerAnimation;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/PlayerAnimationFactory.h b/mm/2s2h/resource/importer/PlayerAnimationFactory.h
index b4981f7c6..8e1b6c36e 100644
--- a/mm/2s2h/resource/importer/PlayerAnimationFactory.h
+++ b/mm/2s2h/resource/importer/PlayerAnimationFactory.h
@@ -1,17 +1,11 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class PlayerAnimationFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinaryPlayerAnimationV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class PlayerAnimationFactoryV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/SceneFactory.cpp b/mm/2s2h/resource/importer/SceneFactory.cpp
index 67320daa8..295e87e1a 100644
--- a/mm/2s2h/resource/importer/SceneFactory.cpp
+++ b/mm/2s2h/resource/importer/SceneFactory.cpp
@@ -1,4 +1,5 @@
#include "spdlog/spdlog.h"
+#include "2s2h/resource/type/2shResourceType.h"
#include "2s2h/resource/importer/SceneFactory.h"
#include "2s2h/resource/type/Scene.h"
#include "2s2h/resource/type/scenecommand/SceneCommand.h"
@@ -32,77 +33,43 @@
#include "2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.h"
#include "2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.h"
-namespace LUS {
-
-std::shared_ptr<IResource>
-SceneFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- if (SceneFactory::sceneCommandFactories.empty()) {
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetLightingSettings] = std::make_shared<SetLightingSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetWind] = std::make_shared<SetWindSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetExitList] = std::make_shared<SetExitListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetTimeSettings] = std::make_shared<SetTimeSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetSkyboxModifier] = std::make_shared<SetSkyboxModifierFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetEchoSettings] = std::make_shared<SetEchoSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetSoundSettings] = std::make_shared<SetSoundSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetSkyboxSettings] = std::make_shared<SetSkyboxSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetRoomBehavior] = std::make_shared<SetRoomBehaviorMMFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetCsCamera] = std::make_shared<SetCsCameraFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetCameraSettings] = std::make_shared<SetCameraSettingsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetRoomList] = std::make_shared<SetRoomListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetCollisionHeader] = std::make_shared<SetCollisionHeaderFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetEntranceList] = std::make_shared<SetEntranceListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetSpecialObjects] = std::make_shared<SetSpecialObjectsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetObjectList] = std::make_shared<SetObjectListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetStartPositionList] = std::make_shared<SetStartPositionListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetActorList] = std::make_shared<SetActorListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetTransitionActorList] = std::make_shared<SetTransitionActorListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::EndMarker] = std::make_shared<EndMarkerFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetAlternateHeaders] = std::make_shared<SetAlternateHeadersFactory>();
- // TODO should we use a different custom scene command like cutscenes?
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetPathways] = std::make_shared<SetPathwaysMMFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetCutscenes] = std::make_shared<SetCutscenesFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetLightList] = std::make_shared<SetLightListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetMesh] = std::make_shared<SetMeshFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetCutscenesMM] = std::make_shared<SetCutsceneFactoryMM>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetAnimatedMaterialList] =
- std::make_shared<SetAnimatedMaterialListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetMinimapList] =
- std::make_shared<SetMinimapListFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetMinimapChests] =
- std::make_shared<SetMinimapChestsFactory>();
- SceneFactory::sceneCommandFactories[LUS::SceneCommandID::SetActorCutsceneList] =
- std::make_shared<SetActorCutsceneListFactory>();
- }
-
- auto resource = std::make_shared<Scene>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SceneFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Scene with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
+namespace SOH {
+ResourceFactoryBinarySceneV0::ResourceFactoryBinarySceneV0() {
+ sceneCommandFactories[SceneCommandID::SetLightingSettings] = std::make_shared<SetLightingSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetWind] = std::make_shared<SetWindSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetExitList] = std::make_shared<SetExitListFactory>();
+ sceneCommandFactories[SceneCommandID::SetTimeSettings] = std::make_shared<SetTimeSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetSkyboxModifier] = std::make_shared<SetSkyboxModifierFactory>();
+ sceneCommandFactories[SceneCommandID::SetEchoSettings] = std::make_shared<SetEchoSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetSoundSettings] = std::make_shared<SetSoundSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetSkyboxSettings] = std::make_shared<SetSkyboxSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetRoomBehavior] = std::make_shared<SetRoomBehaviorMMFactory>();
+ sceneCommandFactories[SceneCommandID::SetCsCamera] = std::make_shared<SetCsCameraFactory>();
+ sceneCommandFactories[SceneCommandID::SetCameraSettings] = std::make_shared<SetCameraSettingsFactory>();
+ sceneCommandFactories[SceneCommandID::SetRoomList] = std::make_shared<SetRoomListFactory>();
+ sceneCommandFactories[SceneCommandID::SetCollisionHeader] = std::make_shared<SetCollisionHeaderFactory>();
+ sceneCommandFactories[SceneCommandID::SetEntranceList] = std::make_shared<SetEntranceListFactory>();
+ sceneCommandFactories[SceneCommandID::SetSpecialObjects] = std::make_shared<SetSpecialObjectsFactory>();
+ sceneCommandFactories[SceneCommandID::SetObjectList] = std::make_shared<SetObjectListFactory>();
+ sceneCommandFactories[SceneCommandID::SetStartPositionList] = std::make_shared<SetStartPositionListFactory>();
+ sceneCommandFactories[SceneCommandID::SetActorList] = std::make_shared<SetActorListFactory>();
+ sceneCommandFactories[SceneCommandID::SetTransitionActorList] = std::make_shared<SetTransitionActorListFactory>();
+ sceneCommandFactories[SceneCommandID::EndMarker] = std::make_shared<EndMarkerFactory>();
+ sceneCommandFactories[SceneCommandID::SetAlternateHeaders] = std::make_shared<SetAlternateHeadersFactory>();
+ // TODO should we use a different custom scene command like cutscenes?
+ sceneCommandFactories[SceneCommandID::SetPathways] = std::make_shared<SetPathwaysMMFactory>();
+ //sceneCommandFactories[SceneCommandID::SetCutscenes] = std::make_shared<SetCutsceneFactoryMM>();
+ sceneCommandFactories[SceneCommandID::SetLightList] = std::make_shared<SetLightListFactory>();
+ sceneCommandFactories[SceneCommandID::SetMesh] = std::make_shared<SetMeshFactory>();
+ sceneCommandFactories[SceneCommandID::SetCutscenesMM] = std::make_shared<SetCutsceneFactoryMM>();
+ sceneCommandFactories[SceneCommandID::SetAnimatedMaterialList] = std::make_shared<SetAnimatedMaterialListFactory>();
+ sceneCommandFactories[SceneCommandID::SetMinimapList] = std::make_shared<SetMinimapListFactory>();
+ sceneCommandFactories[SceneCommandID::SetMinimapChests] = std::make_shared<SetMinimapChestsFactory>();
+ sceneCommandFactories[SceneCommandID::SetActorCutsceneList] = std::make_shared<SetActorCutsceneListFactory>();
}
-void SceneFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<Scene> scene = std::static_pointer_cast<Scene>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, scene);
-
- ParseSceneCommands(scene, reader);
-}
-
-void SceneFactoryV0::ParseSceneCommands(std::shared_ptr<Scene> scene, std::shared_ptr<BinaryReader> reader) {
+void ResourceFactoryBinarySceneV0::ParseSceneCommands(std::shared_ptr<Scene> scene,
+ std::shared_ptr<LUS::BinaryReader> reader) {
uint32_t commandCount = reader->ReadUInt32();
scene->commands.reserve(commandCount);
@@ -111,19 +78,20 @@ void SceneFactoryV0::ParseSceneCommands(std::shared_ptr<Scene> scene, std::share
}
}
-std::shared_ptr<ISceneCommand> SceneFactoryV0::ParseSceneCommand(std::shared_ptr<Scene> scene,
- std::shared_ptr<BinaryReader> reader, uint32_t index) {
+std::shared_ptr<ISceneCommand>
+ResourceFactoryBinarySceneV0::ParseSceneCommand(std::shared_ptr<Scene> scene, std::shared_ptr<LUS::BinaryReader> reader,
+ uint32_t index) {
SceneCommandID cmdID = (SceneCommandID)reader->ReadInt32();
- reader->Seek(-sizeof(int32_t), SeekOffsetType::Current);
+ reader->Seek(-sizeof(int32_t), LUS::SeekOffsetType::Current);
std::shared_ptr<ISceneCommand> result = nullptr;
- std::shared_ptr<SceneCommandFactory> commandFactory = SceneFactory::sceneCommandFactories[cmdID];
+ auto commandFactory = ResourceFactoryBinarySceneV0::sceneCommandFactories[cmdID];
if (commandFactory != nullptr) {
- auto initData = std::make_shared<ResourceInitData>();
+ auto initData = std::make_shared<LUS::ResourceInitData>();
initData->Id = scene->GetInitData()->Id;
- initData->Type = ResourceType::SOH_SceneCommand;
+ initData->Type = static_cast<uint32_t>(ResourceType::SOH_SceneCommand);
initData->Path = scene->GetInitData()->Path + "/SceneCommand" + std::to_string(index);
initData->ResourceVersion = scene->GetInitData()->ResourceVersion;
result = std::static_pointer_cast<ISceneCommand>(commandFactory->ReadResource(initData, reader));
@@ -131,10 +99,23 @@ std::shared_ptr<ISceneCommand> SceneFactoryV0::ParseSceneCommand(std::shared_ptr
}
if (result == nullptr) {
- SPDLOG_ERROR("Failed to load scene command of type {} in scene {}", (uint32_t)cmdID, scene->GetInitData()->Path);
+ SPDLOG_ERROR("Failed to load scene command of type {} in scene {}", (uint32_t)cmdID,
+ scene->GetInitData()->Path);
}
return result;
}
-} // namespace LUS
+std::shared_ptr<LUS::IResource> ResourceFactoryBinarySceneV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
+ }
+
+ auto scene = std::make_shared<Scene>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
+
+ ParseSceneCommands(scene, reader);
+
+ return scene;
+};
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/SceneFactory.h b/mm/2s2h/resource/importer/SceneFactory.h
index 40887983d..988a23de9 100644
--- a/mm/2s2h/resource/importer/SceneFactory.h
+++ b/mm/2s2h/resource/importer/SceneFactory.h
@@ -4,26 +4,25 @@
#include "2s2h/resource/type/scenecommand/SceneCommand.h"
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class SceneFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinarySceneV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ ResourceFactoryBinarySceneV0();
+
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
+ void ParseSceneCommands(std::shared_ptr<Scene> scene, std::shared_ptr<LUS::BinaryReader> reader);
// Doing something very similar to what we do on the ResourceLoader.
// Eventually, scene commands should be moved up to the ResourceLoader as well.
// They can not right now because the exporter does not give them a proper resource type enum value,
// and the exporter does not export the commands with a proper OTR header.
- static inline std::unordered_map<SceneCommandID, std::shared_ptr<SceneCommandFactory>> sceneCommandFactories;
-};
+ static inline std::unordered_map<SceneCommandID, std::shared_ptr<SceneCommandFactoryBinaryV0>>
+ sceneCommandFactories;
-class SceneFactoryV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
- void ParseSceneCommands(std::shared_ptr<Scene> scene, std::shared_ptr<BinaryReader> reader);
-protected:
- std::shared_ptr<ISceneCommand> ParseSceneCommand(std::shared_ptr<Scene> scene, std::shared_ptr<BinaryReader> reader, uint32_t index);
+ protected:
+ std::shared_ptr<ISceneCommand> ParseSceneCommand(std::shared_ptr<Scene> scene,
+ std::shared_ptr<LUS::BinaryReader> reader, uint32_t index);
};
-}; // namespace LUS
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/SkeletonFactory.cpp b/mm/2s2h/resource/importer/SkeletonFactory.cpp
index aa4c814bd..de309e1cb 100644
--- a/mm/2s2h/resource/importer/SkeletonFactory.cpp
+++ b/mm/2s2h/resource/importer/SkeletonFactory.cpp
@@ -3,54 +3,14 @@
#include <spdlog/spdlog.h>
#include <libultraship/libultraship.h>
-namespace LUS {
-std::shared_ptr<IResource>
-SkeletonFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Skeleton>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SkeletonFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Skeleton with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-std::shared_ptr<IResource>
-SkeletonFactory::ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) {
- auto resource = std::make_shared<Skeleton>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SkeletonFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Skeleton with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinarySkeletonV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileXML(reader, resource);
-
- return resource;
-}
-
-void SkeletonFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<Skeleton> skeleton = std::static_pointer_cast<Skeleton>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, skeleton);
+ auto skeleton = std::make_shared<Skeleton>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
skeleton->type = (SkeletonType)reader->ReadInt8();
skeleton->limbType = (LimbType)reader->ReadInt8();
@@ -66,17 +26,17 @@ void SkeletonFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
skeleton->limbTable.push_back(limbPath);
}
- if (skeleton->type == LUS::SkeletonType::Curve) {
+ if (skeleton->type == SkeletonType::Curve) {
skeleton->skeletonData.skelCurveLimbList.limbCount = skeleton->limbCount;
skeleton->curveLimbArray.reserve(skeleton->skeletonData.skelCurveLimbList.limbCount);
- } else if (skeleton->type == LUS::SkeletonType::Flex) {
+ } else if (skeleton->type == SkeletonType::Flex) {
skeleton->skeletonData.flexSkeletonHeader.dListCount = skeleton->dListCount;
}
- if (skeleton->type == LUS::SkeletonType::Normal) {
+ if (skeleton->type == SkeletonType::Normal) {
skeleton->skeletonData.skeletonHeader.limbCount = skeleton->limbCount;
skeleton->standardLimbArray.reserve(skeleton->skeletonData.skeletonHeader.limbCount);
- } else if (skeleton->type == LUS::SkeletonType::Flex) {
+ } else if (skeleton->type == SkeletonType::Flex) {
skeleton->skeletonData.flexSkeletonHeader.sh.limbCount = skeleton->limbCount;
skeleton->standardLimbArray.reserve(skeleton->skeletonData.flexSkeletonHeader.sh.limbCount);
}
@@ -87,53 +47,63 @@ void SkeletonFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
skeleton->skeletonHeaderSegments.push_back(limb ? limb->GetRawPointer() : nullptr);
}
- if (skeleton->type == LUS::SkeletonType::Normal) {
+ if (skeleton->type == SkeletonType::Normal) {
skeleton->skeletonData.skeletonHeader.segment = (void**)skeleton->skeletonHeaderSegments.data();
- } else if (skeleton->type == LUS::SkeletonType::Flex) {
+ } else if (skeleton->type == SkeletonType::Flex) {
skeleton->skeletonData.flexSkeletonHeader.sh.segment = (void**)skeleton->skeletonHeaderSegments.data();
- } else if (skeleton->type == LUS::SkeletonType::Curve) {
+ } else if (skeleton->type == SkeletonType::Curve) {
skeleton->skeletonData.skelCurveLimbList.limbs = (SkelCurveLimb**)skeleton->skeletonHeaderSegments.data();
} else {
SPDLOG_ERROR("unknown skeleton type {}", (uint32_t)skeleton->type);
}
skeleton->skeletonData.skeletonHeader.skeletonType = (uint8_t)skeleton->type;
+
+ return skeleton;
}
-void SkeletonFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<Skeleton> skel = std::static_pointer_cast<Skeleton>(resource);
-
- std::string skeletonType = reader->Attribute("Type");
- // std::string skeletonLimbType = reader->Attribute("LimbType");
- int numLimbs = reader->IntAttribute("LimbCount");
- int numDLs = reader->IntAttribute("DisplayListCount");
-
- if (skeletonType == "Flex") {
- skel->type = SkeletonType::Flex;
- } else if (skeletonType == "Curve") {
- skel->type = SkeletonType::Curve;
- } else if (skeletonType == "Normal") {
- skel->type = SkeletonType::Normal;
+
+std::shared_ptr<LUS::IResource> ResourceFactoryXMLSkeletonV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
}
- skel->type = SkeletonType::Flex;
- skel->limbType = LimbType::LOD;
+ auto skel = std::make_shared<Skeleton>(file->InitData);
+ auto reader = std::get<std::shared_ptr<tinyxml2::XMLDocument>>(file->Reader)->FirstChildElement();
+ auto child = reader->FirstChildElement();
- // if (skeletonLimbType == "Standard")
- // skel->limbType = LimbType::Standard;
- // else if (skeletonLimbType == "LOD")
- // skel->limbType = LimbType::LOD;
- // else if (skeletonLimbType == "Curve")
- // skel->limbType = LimbType::Curve;
- // else if (skeletonLimbType == "Skin")
- // skel->limbType = LimbType::Skin;
- // else if (skeletonLimbType == "Legacy")
- // Sskel->limbType = LimbType::Legacy;
+ skel->type = SkeletonType::Flex; // Default to Flex for legacy reasons
+ if (reader->FindAttribute("Type")) {
+ std::string skeletonType = reader->Attribute("Type");
- auto child = reader->FirstChildElement();
+ if (skeletonType == "Flex") {
+ skel->type = SkeletonType::Flex;
+ } else if (skeletonType == "Curve") {
+ skel->type = SkeletonType::Curve;
+ } else if (skeletonType == "Normal") {
+ skel->type = SkeletonType::Normal;
+ }
+ }
+
+ skel->limbType = LimbType::LOD; // Default to LOD for legacy reasons
+ if (reader->FindAttribute("LimbType")) {
+ std::string skeletonLimbType = reader->Attribute("LimbType");
+
+ if (skeletonLimbType == "Standard") {
+ skel->limbType = LimbType::Standard;
+ } else if (skeletonLimbType == "LOD") {
+ skel->limbType = LimbType::LOD;
+ } else if (skeletonLimbType == "Curve") {
+ skel->limbType = LimbType::Curve;
+ } else if (skeletonLimbType == "Skin") {
+ skel->limbType = LimbType::Skin;
+ } else if (skeletonLimbType == "Legacy") {
+ skel->limbType = LimbType::Legacy;
+ }
+ }
- skel->limbCount = numLimbs;
- skel->dListCount = numDLs;
+
+ skel->limbCount = reader->IntAttribute("LimbCount");
+ skel->dListCount = reader->IntAttribute("DisplayListCount");
while (child != nullptr) {
std::string childName = child->Name();
@@ -153,6 +123,7 @@ void SkeletonFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shared_p
skel->skeletonData.flexSkeletonHeader.sh.segment = (void**)skel->skeletonHeaderSegments.data();
skel->skeletonData.flexSkeletonHeader.dListCount = skel->dListCount;
skel->skeletonData.skeletonHeader.skeletonType = (uint8_t)skel->type;
-}
-} // namespace LUS
+ return skel;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/SkeletonFactory.h b/mm/2s2h/resource/importer/SkeletonFactory.h
index d64449393..5de02175f 100644
--- a/mm/2s2h/resource/importer/SkeletonFactory.h
+++ b/mm/2s2h/resource/importer/SkeletonFactory.h
@@ -1,23 +1,17 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
+#include "ResourceFactoryXML.h"
-namespace LUS {
-class SkeletonFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinarySkeletonV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
- std::shared_ptr<IResource>
- ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-class SkeletonFactoryV0 : public ResourceVersionFactory
-{
+class ResourceFactoryXMLSkeletonV0 : public LUS::ResourceFactoryXML {
public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
- void ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-}; // namespace LUS
-
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/SkeletonLimbFactory.cpp b/mm/2s2h/resource/importer/SkeletonLimbFactory.cpp
index ad2fec085..5879465af 100644
--- a/mm/2s2h/resource/importer/SkeletonLimbFactory.cpp
+++ b/mm/2s2h/resource/importer/SkeletonLimbFactory.cpp
@@ -3,54 +3,14 @@
#include "spdlog/spdlog.h"
#include "libultraship/libultraship.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SkeletonLimbFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SkeletonLimb>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SkeletonLimbFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Skeleton Limb with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-std::shared_ptr<IResource>
-SkeletonLimbFactory::ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) {
- auto resource = std::make_shared<SkeletonLimb>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SkeletonLimbFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Skeleton Limb with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinarySkeletonLimbV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileXML(reader, resource);
-
- return resource;
-}
-
-void LUS::SkeletonLimbFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SkeletonLimb> skeletonLimb = std::static_pointer_cast<SkeletonLimb>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, skeletonLimb);
+ auto skeletonLimb = std::make_shared<SkeletonLimb>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
skeletonLimb->limbType = (LimbType)reader->ReadInt8();
skeletonLimb->skinSegmentType = (ZLimbSkinType)reader->ReadInt8();
@@ -124,7 +84,7 @@ void LUS::SkeletonLimbFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
skeletonLimb->childIndex = reader->ReadUByte();
skeletonLimb->siblingIndex = reader->ReadUByte();
- if (skeletonLimb->limbType == LUS::LimbType::LOD) {
+ if (skeletonLimb->limbType == LimbType::LOD) {
skeletonLimb->limbData.lodLimb.jointPos.x = skeletonLimb->transX;
skeletonLimb->limbData.lodLimb.jointPos.y = skeletonLimb->transY;
skeletonLimb->limbData.lodLimb.jointPos.z = skeletonLimb->transZ;
@@ -132,19 +92,19 @@ void LUS::SkeletonLimbFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
skeletonLimb->limbData.lodLimb.sibling = skeletonLimb->siblingIndex;
if (skeletonLimb->dListPtr != "") {
- auto dList = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->dListPtr.c_str());
- skeletonLimb->limbData.lodLimb.dLists[0] = (Gfx*)(dList ? dList->GetRawPointer() : nullptr);
+ skeletonLimb->dListPtr = "__OTR__" + skeletonLimb->dListPtr;
+ skeletonLimb->limbData.lodLimb.dLists[0] = (Gfx*)skeletonLimb->dListPtr.c_str();
} else {
skeletonLimb->limbData.lodLimb.dLists[0] = nullptr;
}
if (skeletonLimb->dList2Ptr != "") {
- auto dList = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->dList2Ptr.c_str());
- skeletonLimb->limbData.lodLimb.dLists[1] = (Gfx*)(dList ? dList->GetRawPointer() : nullptr);
+ skeletonLimb->dList2Ptr = "__OTR__" + skeletonLimb->dList2Ptr;
+ skeletonLimb->limbData.lodLimb.dLists[1] = (Gfx*)skeletonLimb->dList2Ptr.c_str();
} else {
skeletonLimb->limbData.lodLimb.dLists[1] = nullptr;
}
- } else if (skeletonLimb->limbType == LUS::LimbType::Standard) {
+ } else if (skeletonLimb->limbType == LimbType::Standard) {
skeletonLimb->limbData.standardLimb.jointPos.x = skeletonLimb->transX;
skeletonLimb->limbData.standardLimb.jointPos.y = skeletonLimb->transY;
skeletonLimb->limbData.standardLimb.jointPos.z = skeletonLimb->transZ;
@@ -153,50 +113,59 @@ void LUS::SkeletonLimbFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
skeletonLimb->limbData.standardLimb.dList = nullptr;
if (!skeletonLimb->dListPtr.empty()) {
- const auto dList = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->dListPtr.c_str());
- skeletonLimb->limbData.standardLimb.dList = (Gfx*)(dList ? dList->GetRawPointer() : nullptr);
+ skeletonLimb->dListPtr = "__OTR__" + skeletonLimb->dListPtr;
+ skeletonLimb->limbData.standardLimb.dList = (Gfx*)skeletonLimb->dListPtr.c_str();
}
- } else if (skeletonLimb->limbType == LUS::LimbType::Curve) {
+ } else if (skeletonLimb->limbType == LimbType::Curve) {
skeletonLimb->limbData.skelCurveLimb.firstChildIdx = skeletonLimb->childIndex;
skeletonLimb->limbData.skelCurveLimb.nextLimbIdx = skeletonLimb->siblingIndex;
skeletonLimb->limbData.skelCurveLimb.dList[0] = nullptr;
skeletonLimb->limbData.skelCurveLimb.dList[1] = nullptr;
if (!skeletonLimb->dListPtr.empty()) {
- const auto dList = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->dListPtr.c_str());
- skeletonLimb->limbData.skelCurveLimb.dList[0] = (Gfx*)(dList ? dList->GetRawPointer() : nullptr);
+ skeletonLimb->dListPtr = "__OTR__" + skeletonLimb->dListPtr;
+ skeletonLimb->limbData.skelCurveLimb.dList[0] = (Gfx*)skeletonLimb->dListPtr.c_str();
}
if (!skeletonLimb->dList2Ptr.empty()) {
- const auto dList = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->dList2Ptr.c_str());
- skeletonLimb->limbData.skelCurveLimb.dList[1] = (Gfx*)(dList ? dList->GetRawPointer() : nullptr);
+ skeletonLimb->dList2Ptr = "__OTR__" + skeletonLimb->dList2Ptr;
+ skeletonLimb->limbData.skelCurveLimb.dList[1] = (Gfx*)skeletonLimb->dList2Ptr.c_str();
}
- } else if (skeletonLimb->limbType == LUS::LimbType::Skin) {
+ } else if (skeletonLimb->limbType == LimbType::Skin) {
skeletonLimb->limbData.skinLimb.jointPos.x = skeletonLimb->transX;
skeletonLimb->limbData.skinLimb.jointPos.y = skeletonLimb->transY;
skeletonLimb->limbData.skinLimb.jointPos.z = skeletonLimb->transZ;
skeletonLimb->limbData.skinLimb.child = skeletonLimb->childIndex;
skeletonLimb->limbData.skinLimb.sibling = skeletonLimb->siblingIndex;
- if (skeletonLimb->skinSegmentType == LUS::ZLimbSkinType::SkinType_DList) {
+ if (skeletonLimb->skinSegmentType == ZLimbSkinType::SkinType_DList) {
skeletonLimb->limbData.skinLimb.segmentType = static_cast<int32_t>(skeletonLimb->skinSegmentType);
- } else if (skeletonLimb->skinSegmentType == LUS::ZLimbSkinType::SkinType_4) {
+ } else if (skeletonLimb->skinSegmentType == ZLimbSkinType::SkinType_4) {
skeletonLimb->limbData.skinLimb.segmentType = 4;
- } else if (skeletonLimb->skinSegmentType == LUS::ZLimbSkinType::SkinType_5) {
+ } else if (skeletonLimb->skinSegmentType == ZLimbSkinType::SkinType_5) {
skeletonLimb->limbData.skinLimb.segmentType = 5;
} else {
skeletonLimb->limbData.skinLimb.segmentType = 0;
}
- if (skeletonLimb->skinSegmentType == LUS::ZLimbSkinType::SkinType_DList) {
- auto res = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->skinDList.c_str());
- skeletonLimb->limbData.skinLimb.segment = res ? res->GetRawPointer() : nullptr;
- } else if (skeletonLimb->skinSegmentType == LUS::ZLimbSkinType::SkinType_4) {
+ if (skeletonLimb->skinSegmentType == ZLimbSkinType::SkinType_DList) {
+ if (skeletonLimb->skinDList != "") {
+ skeletonLimb->skinDList = "__OTR__" + skeletonLimb->skinDList;
+ skeletonLimb->limbData.skinLimb.segment = (Gfx*)skeletonLimb->skinDList.c_str();
+ } else {
+ skeletonLimb->limbData.skinLimb.segment = nullptr;
+ }
+ } else if (skeletonLimb->skinSegmentType == ZLimbSkinType::SkinType_4) {
skeletonLimb->skinAnimLimbData.totalVtxCount = skeletonLimb->skinVtxCnt;
skeletonLimb->skinAnimLimbData.limbModifCount = skeletonLimb->skinLimbModifCount;
skeletonLimb->skinAnimLimbData.limbModifications = skeletonLimb->skinLimbModifArray.data();
- auto res = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(skeletonLimb->skinDList2.c_str());
- skeletonLimb->skinAnimLimbData.dlist = (Gfx*)(res ? res->GetRawPointer() : nullptr);
+
+ if (skeletonLimb->skinDList2 != "") {
+ skeletonLimb->skinDList2 = "__OTR__" + skeletonLimb->skinDList2;
+ skeletonLimb->skinAnimLimbData.dlist = (Gfx*)skeletonLimb->skinDList2.c_str();
+ } else {
+ skeletonLimb->skinAnimLimbData.dlist = nullptr;
+ }
for (size_t i = 0; i < skeletonLimb->skinLimbModifArray.size(); i++) {
skeletonLimb->skinAnimLimbData.limbModifications[i].vtxCount = skeletonLimb->skinLimbModifVertexArrays[i].size();
@@ -211,10 +180,17 @@ void LUS::SkeletonLimbFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
skeletonLimb->limbData.skinLimb.segment = &skeletonLimb->skinAnimLimbData;
}
}
+
+ return skeletonLimb;
}
-void SkeletonLimbFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SkeletonLimb> skelLimb = std::static_pointer_cast<SkeletonLimb>(resource);
+
+std::shared_ptr<LUS::IResource> ResourceFactoryXMLSkeletonLimbV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
+ }
+
+ auto skelLimb = std::make_shared<SkeletonLimb>(file->InitData);
+ auto reader = std::get<std::shared_ptr<tinyxml2::XMLDocument>>(file->Reader)->FirstChildElement();
std::string limbType = reader->Attribute("Type");
@@ -254,8 +230,8 @@ void SkeletonLimbFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shar
limbData.lodLimb.jointPos.z = skelLimb->transZ;
if (skelLimb->dListPtr != "") {
- auto res = LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess((const char*)skelLimb->dListPtr.c_str());
- limbData.lodLimb.dLists[0] = (Gfx*)(res ? res->GetRawPointer() : nullptr);
+ skelLimb->dListPtr = "__OTR__" + skelLimb->dListPtr;
+ limbData.lodLimb.dLists[0] = (Gfx*)skelLimb->dListPtr.c_str();
} else {
limbData.lodLimb.dLists[0] = nullptr;
}
@@ -266,6 +242,7 @@ void SkeletonLimbFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shar
limbData.lodLimb.sibling = skelLimb->siblingIndex;
// skelLimb->dList2Ptr = reader->Attribute("DisplayList2");
-}
-} // namespace LUS
+ return skelLimb;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/SkeletonLimbFactory.h b/mm/2s2h/resource/importer/SkeletonLimbFactory.h
index 8480a0126..125dde2b8 100644
--- a/mm/2s2h/resource/importer/SkeletonLimbFactory.h
+++ b/mm/2s2h/resource/importer/SkeletonLimbFactory.h
@@ -1,23 +1,17 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
+#include "ResourceFactoryXML.h"
-namespace LUS {
-class SkeletonLimbFactory : public ResourceFactory
-{
+namespace SOH {
+class ResourceFactoryBinarySkeletonLimbV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
- std::shared_ptr<IResource>
- ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-class SkeletonLimbFactoryV0 : public ResourceVersionFactory
-{
+class ResourceFactoryXMLSkeletonLimbV0 : public LUS::ResourceFactoryXML {
public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
- void ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-}; // namespace LUS
-
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/TextFactory.cpp b/mm/2s2h/resource/importer/TextFactory.cpp
deleted file mode 100644
index 7d7ffb4f3..000000000
--- a/mm/2s2h/resource/importer/TextFactory.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-#include "2s2h/resource/importer/TextFactory.h"
-#include "2s2h/resource/type/Text.h"
-#include "spdlog/spdlog.h"
-
-namespace LUS {
-std::shared_ptr<IResource>
-TextFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<Text>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<TextFactoryV0>();
- break;
- default:
- // VERSION NOT SUPPORTED
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Text with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-std::shared_ptr<IResource>
-TextFactory::ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) {
- auto resource = std::make_shared<Text>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<TextFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Text with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileXML(reader, resource);
-
- return resource;
-}
-
-void LUS::TextFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<Text> text = std::static_pointer_cast<Text>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, text);
-
- uint32_t msgCount = reader->ReadUInt32();
- text->messages.reserve(msgCount);
-
- for (uint32_t i = 0; i < msgCount; i++) {
- MessageEntry entry;
- entry.id = reader->ReadUInt16();
- entry.textboxType = reader->ReadUByte();
- entry.textboxYPos = reader->ReadUByte();
- entry.msg = reader->ReadString();
-
- text->messages.push_back(entry);
- }
-}
-void TextFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<Text> txt = std::static_pointer_cast<Text>(resource);
-
- auto child = reader->FirstChildElement();
-
- while (child != nullptr) {
- std::string childName = child->Name();
-
- if (childName == "TextEntry") {
- MessageEntry entry;
- entry.id = child->IntAttribute("ID");
- entry.textboxType = child->IntAttribute("TextboxType");
- entry.textboxYPos = child->IntAttribute("TextboxYPos");
- entry.msg = child->Attribute("Message");
- entry.msg += "\x2";
-
- txt->messages.push_back(entry);
- int bp = 0;
- }
-
- child = child->NextSiblingElement();
- }
-}
-
-} // namespace LUS
diff --git a/mm/2s2h/resource/importer/TextFactory.h b/mm/2s2h/resource/importer/TextFactory.h
deleted file mode 100644
index 7a6ae2841..000000000
--- a/mm/2s2h/resource/importer/TextFactory.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include "Resource.h"
-#include "ResourceFactory.h"
-
-namespace LUS {
-class TextFactory : public ResourceFactory
-{
- public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
- std::shared_ptr<IResource>
- ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) override;
-};
-
-class TextFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
- void ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
-
diff --git a/mm/2s2h/resource/importer/TextMMFactory.cpp b/mm/2s2h/resource/importer/TextMMFactory.cpp
index 3c2892001..ce6a1c923 100644
--- a/mm/2s2h/resource/importer/TextMMFactory.cpp
+++ b/mm/2s2h/resource/importer/TextMMFactory.cpp
@@ -2,57 +2,16 @@
#include "2s2h/resource/type/TextMM.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-TextMMFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<TextMM>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<TextMMFactoryV0>();
- break;
- default:
- // VERSION NOT SUPPORTED
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Text with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-std::shared_ptr<IResource> TextMMFactory::ReadResourceXML(std::shared_ptr<ResourceInitData> initData,
- tinyxml2::XMLElement* reader) {
- auto resource = std::make_shared<TextMM>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<TextMMFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Text with version {}", resource->GetInitData()->ResourceVersion);
+namespace SOH {
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryTextMMV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileXML(reader, resource);
-
- return resource;
-}
-
-void LUS::TextMMFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<TextMM> text = std::static_pointer_cast<TextMM>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, text);
+ auto text = std::make_shared<TextMM>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
- uint32_t msgCount = reader->ReadUInt32();
+ const uint32_t msgCount = reader->ReadUInt32();
text->messages.reserve(msgCount);
for (uint32_t i = 0; i < msgCount; i++) {
@@ -68,9 +27,17 @@ void LUS::TextMMFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
text->messages.push_back(entry);
}
+
+ return text;
}
-void TextMMFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource) {
- std::shared_ptr<TextMM> txt = std::static_pointer_cast<TextMM>(resource);
+
+std::shared_ptr<LUS::IResource> ResourceFactoryXMLTextMMV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
+ return nullptr;
+ }
+
+ auto text = std::make_shared<TextMM>(file->InitData);
+ auto reader = std::get<std::shared_ptr<tinyxml2::XMLDocument>>(file->Reader)->FirstChildElement();
auto child = reader->FirstChildElement();
@@ -82,19 +49,19 @@ void TextMMFactoryV0::ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr
entry.id = child->IntAttribute("ID");
entry.textboxType = child->IntAttribute("TextboxType");
entry.textboxYPos = child->IntAttribute("TextboxYPos");
-
- // BENTODO: MM Unique Fields
+ // BENTODO: MM Unique Fields
entry.msg = child->Attribute("Message");
entry.msg += "\x2";
- txt->messages.push_back(entry);
+ text->messages.push_back(entry);
int bp = 0;
}
child = child->NextSiblingElement();
}
-}
+ return text;
+}
} // namespace LUS
diff --git a/mm/2s2h/resource/importer/TextMMFactory.h b/mm/2s2h/resource/importer/TextMMFactory.h
index 0322a3762..97eedfcf2 100644
--- a/mm/2s2h/resource/importer/TextMMFactory.h
+++ b/mm/2s2h/resource/importer/TextMMFactory.h
@@ -1,10 +1,22 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
+#include "ResourceFactoryXML.h"
-namespace LUS {
-class TextMMFactory : public ResourceFactory
+namespace SOH {
+class ResourceFactoryBinaryTextMMV0 : public LUS::ResourceFactoryBinary {
+ public:
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
+};
+
+class ResourceFactoryXMLTextMMV0 : public LUS::ResourceFactoryXML {
+ public:
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
+};
+
+#if 0
+class TextMMFactory : public LUS::ResourceFactoryBinary
{
public:
std::shared_ptr<IResource>
@@ -12,12 +24,6 @@ class TextMMFactory : public ResourceFactory
std::shared_ptr<IResource>
ReadResourceXML(std::shared_ptr<ResourceInitData> initData, tinyxml2::XMLElement *reader) override;
};
-
-class TextMMFactoryV0 : public ResourceVersionFactory
-{
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
- void ParseFileXML(tinyxml2::XMLElement* reader, std::shared_ptr<IResource> resource) override;
-};
+#endif
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/TextureAnimationFactory.cpp b/mm/2s2h/resource/importer/TextureAnimationFactory.cpp
index 80470166c..fe0807f7b 100644
--- a/mm/2s2h/resource/importer/TextureAnimationFactory.cpp
+++ b/mm/2s2h/resource/importer/TextureAnimationFactory.cpp
@@ -3,36 +3,18 @@
#include <libultraship/libultraship.h>
#include "spdlog/spdlog.h"
-namespace LUS {
+namespace SOH {
-std::shared_ptr<IResource> TextureAnimationFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<TextureAnimation>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<TextureAnimationFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load Texture Animation with version {}", resource->GetInitData()->ResourceVersion);
+std::shared_ptr<LUS::IResource> ResourceFactoryBinaryTextureAnimationV0::ReadResource(std::shared_ptr<LUS::File> file) {
+ if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
+ auto tAnim = std::make_shared<TextureAnimation>(file->InitData);
+ auto reader = std::get<std::shared_ptr<LUS::BinaryReader>>(file->Reader);
-void LUS::TextureAnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<TextureAnimation> tAnim = std::static_pointer_cast<TextureAnimation>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, tAnim);
+ const size_t numEntries = reader->ReadUInt32();
- size_t numEntries = reader->ReadUInt32();
-
for (size_t i = 0; i < numEntries; i++) {
AnimatedMaterial anim;
anim.segment = reader->ReadInt8();
@@ -67,7 +49,7 @@ void LUS::TextureAnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReade
auto* e = new AnimatedMatColorParams;
e->keyFrameLength = reader->ReadUInt16();
e->keyFrameCount = reader->ReadUInt16();
-
+
size_t frames = reader->ReadUInt32();
e->keyFrames = new uint16_t[frames];
@@ -76,7 +58,7 @@ void LUS::TextureAnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReade
}
size_t primColorSize = reader->ReadUInt32();
e->primColors = new F3DPrimColor[primColorSize];
-
+
for (size_t i = 0; i < primColorSize; i++) {
e->primColors[i].r = reader->ReadUByte();
e->primColors[i].g = reader->ReadUByte();
@@ -123,6 +105,7 @@ void LUS::TextureAnimationFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReade
}
tAnim->anims.emplace_back(anim);
}
-}
-} // namespace LUS \ No newline at end of file
+ return tAnim;
+}
+} // namespace LUS
diff --git a/mm/2s2h/resource/importer/TextureAnimationFactory.h b/mm/2s2h/resource/importer/TextureAnimationFactory.h
index 1bc52e246..dd798f1b4 100644
--- a/mm/2s2h/resource/importer/TextureAnimationFactory.h
+++ b/mm/2s2h/resource/importer/TextureAnimationFactory.h
@@ -1,18 +1,13 @@
#pragma once
#include "Resource.h"
-#include "ResourceFactory.h"
+#include "ResourceFactoryBinary.h"
-namespace LUS {
-class TextureAnimationFactory : public ResourceFactory {
+namespace SOH {
+class ResourceFactoryBinaryTextureAnimationV0 : public LUS::ResourceFactoryBinary {
public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::File> file) override;
};
-class TextureAnimationFactoryV0 : public ResourceVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
}; // namespace LUS \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.cpp b/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.cpp
index 61dba4ca3..1246a2273 100644
--- a/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.cpp
@@ -2,37 +2,13 @@
#include "2s2h/resource/type/scenecommand/EndMarker.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-EndMarkerFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<EndMarker>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<EndMarkerFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load EndMarker with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::EndMarkerFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<EndMarker> endMarker = std::static_pointer_cast<EndMarker>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, endMarker);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+EndMarkerFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto endMarker = std::make_shared<EndMarker>(initData);
ReadCommandId(endMarker, reader);
-
- // This has no data.
-}
-} // namespace LUS
+ return endMarker;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.h b/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.h
index a2580c077..3b694b83b 100644
--- a/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/EndMarkerFactory.h
@@ -2,15 +2,9 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class EndMarkerFactory : public SceneCommandFactory {
+namespace SOH {
+class EndMarkerFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class EndMarkerFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.cpp
index a2ed3c829..d18227883 100644
--- a/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.cpp
@@ -2,8 +2,9 @@
#include "2s2h/resource/type/scenecommand/SceneCommand.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-void SceneCommandVersionFactory::ReadCommandId(std::shared_ptr<ISceneCommand> command, std::shared_ptr<BinaryReader> reader) {
+namespace SOH {
+void SceneCommandFactoryBinaryV0::ReadCommandId(std::shared_ptr<SOH::ISceneCommand> command,
+ std::shared_ptr<LUS::BinaryReader> reader) {
command->cmdId = (SceneCommandID)reader->ReadInt32();
}
}
diff --git a/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.h b/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.h
index b1449fad4..c686a148c 100644
--- a/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SceneCommandFactory.h
@@ -5,11 +5,13 @@
#include "ResourceFactory.h"
#include "2s2h/resource/type/scenecommand/SceneCommand.h"
-namespace LUS {
-class SceneCommandFactory : public ResourceFactory {};
+namespace SOH {
+class SceneCommandFactoryBinaryV0 {
+ public:
+ virtual std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) = 0;
-class SceneCommandVersionFactory : public ResourceVersionFactory {
-protected:
- void ReadCommandId(std::shared_ptr<ISceneCommand> command, std::shared_ptr<BinaryReader> reader);
+ protected:
+ void ReadCommandId(std::shared_ptr<ISceneCommand> command, std::shared_ptr<LUS::BinaryReader> reader);
};
-}; // namespace LUS
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.cpp
index 4ad852fb1..0426d51f3 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.cpp
@@ -2,40 +2,16 @@
#include "2s2h/resource/type/scenecommand/SetActorCutsceneList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetActorCutsceneListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetActorCutsceneList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetActorCutsceneListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetActorList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-
-void SetActorCutsceneListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetActorCutsceneList> setActorCsList = std::static_pointer_cast<SetActorCutsceneList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setActorCsList);
-
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetActorCutsceneListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setActorCsList = std::make_shared<SetActorCutsceneList>(initData);
ReadCommandId(setActorCsList, reader);
- setActorCsList->numEntries = reader->ReadUInt32();
- setActorCsList->entries.reserve(setActorCsList->numEntries);
+ uint32_t numEntries = reader->ReadUInt32();
+ setActorCsList->entries.reserve(numEntries);
- for (uint32_t i = 0; i < setActorCsList->numEntries; i++) {
+ for (uint32_t i = 0; i < numEntries; i++) {
CutsceneEntry e;
e.priority = reader->ReadInt16();
e.length = reader->ReadInt16();
@@ -49,7 +25,6 @@ void SetActorCutsceneListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader
e.letterboxSize = reader->ReadUByte();
setActorCsList->entries.emplace_back(e);
}
-
+ return setActorCsList;
}
-
} // namespace LUS \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.h
index 23314c129..9eb47db3f 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetActorCutsceneListFactory.h
@@ -2,16 +2,9 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetActorCutsceneListFactory : public SceneCommandFactory {
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
+namespace SOH {
+class SetActorCutsceneListFactory : public SceneCommandFactoryBinaryV0 {
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetActorCutsceneListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-
-};
-
}
diff --git a/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.cpp
index 32aa3db5f..3b140cc8d 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.cpp
@@ -2,52 +2,30 @@
#include "2s2h/resource/type/scenecommand/SetActorList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetActorListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetActorList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetActorListFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetActorList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetActorListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetActorList> setActorList = std::static_pointer_cast<SetActorList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setActorList);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetActorListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setActorList = std::make_shared<SetActorList>(initData);
ReadCommandId(setActorList, reader);
setActorList->numActors = reader->ReadUInt32();
setActorList->actorList.reserve(setActorList->numActors);
for (uint32_t i = 0; i < setActorList->numActors; i++) {
- ActorEntry entry;
+ ActorEntry entry;
- entry.id = reader->ReadUInt16();
- entry.pos.x = reader->ReadInt16();
- entry.pos.y = reader->ReadInt16();
- entry.pos.z = reader->ReadInt16();
- entry.rot.x = reader->ReadInt16();
- entry.rot.y = reader->ReadInt16();
- entry.rot.z = reader->ReadInt16();
- entry.params = reader->ReadUInt16();
+ entry.id = reader->ReadUInt16();
+ entry.pos.x = reader->ReadInt16();
+ entry.pos.y = reader->ReadInt16();
+ entry.pos.z = reader->ReadInt16();
+ entry.rot.x = reader->ReadInt16();
+ entry.rot.y = reader->ReadInt16();
+ entry.rot.z = reader->ReadInt16();
+ entry.params = reader->ReadUInt16();
setActorList->actorList.push_back(entry);
}
-}
-} // namespace LUS
+ return setActorList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.h
index 5958ac576..4c00cca2a 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetActorListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetActorListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetActorListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetActorListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.cpp
index d68d65c34..542a343e4 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.cpp
@@ -1,49 +1,25 @@
#include "2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.h"
#include "2s2h/resource/type/scenecommand/SetAlternateHeaders.h"
-#include "spdlog/spdlog.h"
#include "libultraship/libultraship.h"
-namespace LUS {
-std::shared_ptr<IResource> SetAlternateHeadersFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetAlternateHeaders>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetAlternateHeadersFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetAlternateHeaders with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetAlternateHeadersFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetAlternateHeaders> setAlternateHeaders = std::static_pointer_cast<SetAlternateHeaders>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setAlternateHeaders);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetAlternateHeadersFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setAlternateHeaders = std::make_shared<SetAlternateHeaders>(initData);
ReadCommandId(setAlternateHeaders, reader);
setAlternateHeaders->numHeaders = reader->ReadUInt32();
setAlternateHeaders->headers.reserve(setAlternateHeaders->numHeaders);
for (uint32_t i = 0; i < setAlternateHeaders->numHeaders; i++) {
- auto headerName = reader->ReadString();
- if (!headerName.empty()) {
- setAlternateHeaders->headers.push_back(std::static_pointer_cast<LUS::Scene>(LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(headerName.c_str())));
- } else {
- setAlternateHeaders->headers.push_back(nullptr);
- }
+ auto headerName = reader->ReadString();
+ if (!headerName.empty()) {
+ setAlternateHeaders->headers.push_back(std::static_pointer_cast<Scene>(LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(headerName.c_str())));
+ } else {
+ setAlternateHeaders->headers.push_back(nullptr);
+ }
}
-}
-} // namespace LUS
+ return setAlternateHeaders;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.h b/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.h
index efa96f68f..9cfbb0220 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetAlternateHeadersFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetAlternateHeadersFactory : public SceneCommandFactory {
+namespace SOH {
+class SetAlternateHeadersFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetAlternateHeadersFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.cpp
index e6e9865ec..f5fcefceb 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.cpp
@@ -1,41 +1,23 @@
#include "2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.h"
#include "2s2h/resource/type/scenecommand/SetAnimatedMaterialList.h"
#include "2s2h/resource/type/TextureAnimation.h"
-#include "spdlog/spdlog.h"
#include <libultraship/libultraship.h>
-namespace LUS {
+namespace SOH {
-std::shared_ptr<IResource> LUS::SetAnimatedMaterialListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetAnimatedMaterialList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetAnimatedMaterialListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetAnimatedMaterialList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
+std::shared_ptr<LUS::IResource> SetAnimatedMaterialListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setAnimatedMat = std::make_shared<SetAnimatedMaterialList>(initData);
+
+ ReadCommandId(setAnimatedMat, reader);
-void LUS::SetAnimatedMaterialListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetAnimatedMaterialList> setAnimatedMat =
- std::static_pointer_cast<SetAnimatedMaterialList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setAnimatedMat);
+ std::string str = reader->ReadString();
+ const auto data = std::static_pointer_cast<TextureAnimation>(
+ LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(str.c_str()));
- ReadCommandId(setAnimatedMat, reader);
- AnimatedMaterialData* res = (AnimatedMaterialData*)ResourceGetDataByName(reader->ReadString().c_str());
+ AnimatedMaterial* res = data->GetPointer();
setAnimatedMat->mat = res;
+
+ return setAnimatedMat;
}
-
} // namespace LUS \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.h
index 22e3fff69..2b3e50729 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetAnimatedMaterialListFactory.h
@@ -2,16 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetAnimatedMaterialListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetAnimatedMaterialListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetAnimatedMaterialListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
}
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.cpp
index caa46cefd..4f919c96e 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.cpp
@@ -2,38 +2,13 @@
#include "2s2h/resource/type/scenecommand/SetCameraSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetCameraSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetCameraSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetCameraSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetCameraSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetCameraSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetCameraSettings> setCameraSettings = std::static_pointer_cast<SetCameraSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setCameraSettings);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetCameraSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setCameraSettings = std::make_shared<SetCameraSettings>(initData);
ReadCommandId(setCameraSettings, reader);
- // BENTODO in MM this scene command is only used as a signal to have the scene system mark an area as visted. We should make a new command factory for this but this is fine for now.
- //setCameraSettings->settings.cameraMovement = reader->ReadInt8();
- //setCameraSettings->settings.worldMapArea = reader->ReadInt32();
-}
-} // namespace LUS
+ return setCameraSettings;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.h
index e17150807..5848d9f89 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetCameraSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetCameraSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetCameraSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetCameraSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.cpp
index 4badbb055..1ce7874a9 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.cpp
@@ -3,37 +3,16 @@
#include "libultraship/libultraship.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetCollisionHeaderFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetCollisionHeader>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetCollisionHeaderFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetCollisionHeader with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetCollisionHeaderFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetCollisionHeader> setCollisionHeader = std::static_pointer_cast<SetCollisionHeader>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setCollisionHeader);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetCollisionHeaderFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setCollisionHeader = std::make_shared<SetCollisionHeader>(initData);
ReadCommandId(setCollisionHeader, reader);
setCollisionHeader->fileName = reader->ReadString();
setCollisionHeader->collisionHeader = std::static_pointer_cast<CollisionHeader>(LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(setCollisionHeader->fileName.c_str()));
-}
-} // namespace LUS
+ return setCollisionHeader;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.h b/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.h
index 76655015d..1987ae788 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetCollisionHeaderFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetCollisionHeaderFactory : public SceneCommandFactory {
+namespace SOH {
+class SetCollisionHeaderFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetCollisionHeaderFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.cpp
index 445f64cb6..51bc3d0d9 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.cpp
@@ -2,36 +2,16 @@
#include "2s2h/resource/type/scenecommand/SetCsCamera.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetCsCameraFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetCsCamera>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetCsCameraFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetCsCamera with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetCsCameraFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setCsCamera = std::make_shared<SetCsCamera>(initData);
+
+ ReadCommandId(setCsCamera, reader);
-void LUS::SetCsCameraFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetCsCamera> setCsCamera = std::static_pointer_cast<SetCsCamera>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setCsCamera);
+ size_t camSize = reader->ReadUInt32();
- ReadCommandId(setCsCamera, reader);
-
- size_t camSize = reader->ReadUInt32();
+ setCsCamera->csCamera.reserve(camSize);
for (size_t i = 0; i < camSize; i++) {
ActorCsCamInfoData data;
@@ -49,7 +29,7 @@ void LUS::SetCsCameraFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> re
}
setCsCamera->csCamera.emplace_back(data);
}
-
-}
+ return setCsCamera;
+}
} // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.h b/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.h
index 4be361364..ce05ec4b4 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetCsCameraFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetCsCameraFactory : public SceneCommandFactory {
+namespace SOH {
+class SetCsCameraFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetCsCameraFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.cpp
index ce429d8c1..7d1eb0f81 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.cpp
@@ -3,69 +3,15 @@
#include <libultraship/libultraship.h>
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetCutscenesFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetCutscenes>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetCutscenesFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetCutscenes with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetCutscenesFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetCutscenes> setCutscenes = std::static_pointer_cast<SetCutscenes>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setCutscenes);
-
- ReadCommandId(setCutscenes, reader);
-
- setCutscenes->fileName = reader->ReadString();
- setCutscenes->cutscene = std::static_pointer_cast<Cutscene>(LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(setCutscenes->fileName.c_str()));
-}
-
-std::shared_ptr<IResource> SetCutsceneFactoryMM::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetCutscenesMM>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetCutscenesFactoryMMV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetCutscenes with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetCutscenesFactoryMMV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetCutscenesMM> setCutscenes = std::static_pointer_cast<SetCutscenesMM>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setCutscenes);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetCutsceneFactoryMM::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setCutscenes = std::make_shared<SetCutscenesMM>(initData);
ReadCommandId(setCutscenes, reader);
size_t numCs = reader->ReadUByte();
+ setCutscenes->entries.reserve(numCs);
for (size_t i = 0; i < numCs; i++) {
CutsceneScriptEntry entry;
@@ -73,9 +19,11 @@ void LUS::SetCutscenesFactoryMMV0::ParseFileBinary(std::shared_ptr<BinaryReader>
entry.exit = reader->ReadUInt16();
entry.entrance = reader->ReadUByte();
entry.flag = reader->ReadUByte();
- entry.data = ResourceGetDataByName(path.c_str());
+ entry.data = std::static_pointer_cast<Cutscene>(
+ LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(path.c_str()))->GetPointer();
setCutscenes->entries.emplace_back(entry);
}
-}
-} // namespace LUS
+ return setCutscenes;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.h b/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.h
index 905eab39a..ab71798ce 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetCutscenesFactory.h
@@ -2,27 +2,11 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetCutscenesFactory : public SceneCommandFactory {
+namespace SOH {
+class SetCutsceneFactoryMM : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetCutscenesFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-class SetCutsceneFactoryMM : public SceneCommandFactory {
- public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetCutscenesFactoryMMV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.cpp
index c9bdfef54..7c9c31490 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.cpp
@@ -2,37 +2,15 @@
#include "2s2h/resource/type/scenecommand/SetEchoSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetEchoSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetEchoSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetEchoSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetEchoSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetEchoSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetEchoSettings> setEchoSettings = std::static_pointer_cast<SetEchoSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setEchoSettings);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetEchoSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setEchoSettings = std::make_shared<SetEchoSettings>(initData);
ReadCommandId(setEchoSettings, reader);
setEchoSettings->settings.echo = reader->ReadInt8();
-}
-} // namespace LUS
+ return setEchoSettings;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.h
index 20673aa57..1b377d0c1 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetEchoSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetEchoSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetEchoSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetEchoSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.cpp
index 34a50248a..e7060dc4f 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.cpp
@@ -2,45 +2,24 @@
#include "2s2h/resource/type/scenecommand/SetEntranceList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetEntranceListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetEntranceList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetEntranceListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetEntranceListList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetEntranceListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetEntranceList> setEntranceList = std::static_pointer_cast<SetEntranceList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setEntranceList);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetEntranceListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setEntranceList = std::make_shared<SetEntranceList>(initData);
ReadCommandId(setEntranceList, reader);
setEntranceList->numEntrances = reader->ReadUInt32();
setEntranceList->entrances.reserve(setEntranceList->numEntrances);
for (uint32_t i = 0; i < setEntranceList->numEntrances; i++) {
- EntranceEntry entranceEntry;
+ EntranceEntry entranceEntry;
- entranceEntry.spawn = reader->ReadInt8();
- entranceEntry.room = reader->ReadInt8();
+ entranceEntry.spawn = reader->ReadInt8();
+ entranceEntry.room = reader->ReadInt8();
setEntranceList->entrances.push_back(entranceEntry);
}
-}
-} // namespace LUS
+ return setEntranceList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.h
index 2bb1186ba..f94a4ee37 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetEntranceListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetEntranceListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetEntranceListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetEntranceListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.cpp
index 4c5ddcb88..75b7cc30e 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.cpp
@@ -2,40 +2,19 @@
#include "2s2h/resource/type/scenecommand/SetExitList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetExitListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetExitList>( initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetExitListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetExitList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetExitListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetExitList> setExitList = std::static_pointer_cast<SetExitList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setExitList);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetExitListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setExitList = std::make_shared<SetExitList>(initData);
ReadCommandId(setExitList, reader);
-
+
setExitList->numExits = reader->ReadUInt32();
setExitList->exits.reserve(setExitList->numExits);
for (uint32_t i = 0; i < setExitList->numExits; i++) {
setExitList->exits.push_back(reader->ReadUInt16());
}
+ return setExitList;
}
-
} // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.h
index e04ab4ba0..0d6fd6fc2 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetExitListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetExitListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetExitListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetExitListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.cpp
index ab83635bf..36bd6f8b1 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.cpp
@@ -2,34 +2,10 @@
#include "2s2h/resource/type/scenecommand/SetLightList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetLightListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetLightList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetLightListFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetLightList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetLightListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetLightList> setLightList = std::static_pointer_cast<SetLightList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setLightList);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetLightListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setLightList = std::make_shared<SetLightList>(initData);
ReadCommandId(setLightList, reader);
@@ -40,7 +16,7 @@ void LUS::SetLightListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
light.type = reader->ReadUByte();
- light.params.point.x = reader->ReadInt16();
+ light.params.point.x = reader->ReadInt16();
light.params.point.y = reader->ReadInt16();
light.params.point.z = reader->ReadInt16();
@@ -49,10 +25,11 @@ void LUS::SetLightListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
light.params.point.color[2] = reader->ReadUByte(); // b
light.params.point.drawGlow = reader->ReadUByte();
- light.params.point.radius = reader->ReadInt16();
+ light.params.point.radius = reader->ReadInt16();
- setLightList->lightList.push_back(light);
+ setLightList->lightList.emplace_back(light);
}
-}
-} // namespace LUS
+ return setLightList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.h
index c099b82c5..5da751f0f 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetLightListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetLightListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetLightListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetLightListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.cpp
index c13aeffec..b7f0fdd02 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.cpp
@@ -2,33 +2,11 @@
#include "2s2h/resource/type/scenecommand/SetLightingSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetLightingSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetLightingSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetLightingSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetLightingSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetLightingSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetLightingSettings> setLightingSettings = std::static_pointer_cast<SetLightingSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setLightingSettings);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetLightingSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setLightingSettings = std::make_shared<SetLightingSettings>(initData);
ReadCommandId(setLightingSettings, reader);
@@ -65,6 +43,7 @@ void LUS::SetLightingSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryRe
lightSettings.fogFar = reader->ReadUInt16();
setLightingSettings->settings.push_back(lightSettings);
}
-}
-} // namespace LUS
+ return setLightingSettings;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.h
index b25f85a97..405337915 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetLightingSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetLightingSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetLightingSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetLightingSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.cpp
index dcb3f4c10..1d8a360f0 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.cpp
@@ -3,34 +3,10 @@
#include "spdlog/spdlog.h"
#include "libultraship/libultraship.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetMeshFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetMesh>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetMeshFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetMesh with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetMeshFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetMesh> setMesh = std::static_pointer_cast<SetMesh>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setMesh);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetMeshFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setMesh = std::make_shared<SetMesh>(initData);
ReadCommandId(setMesh, reader);
@@ -46,7 +22,8 @@ void LUS::SetMeshFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
} else if (setMesh->meshHeader.base.type == 2) {
setMesh->meshHeader.polygon2.num = polyNum;
} else {
- SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}", setMesh->meshHeader.base.type);
+ SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}",
+ setMesh->meshHeader.base.type);
}
}
@@ -104,7 +81,8 @@ void LUS::SetMeshFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
if (setMesh->meshHeader.polygon1.format == 1) {
setMesh->meshHeader.polygon1.single.source = image.source;
setMesh->meshHeader.polygon1.single.unk_0C = image.unk_0C;
- setMesh->meshHeader.polygon1.single.tlut = (void*)image.tlut; // OTRTODO: type of bgimage.tlut should be uintptr_t
+ setMesh->meshHeader.polygon1.single.tlut =
+ (void*)image.tlut; // OTRTODO: type of bgimage.tlut should be uintptr_t
setMesh->meshHeader.polygon1.single.width = image.width;
setMesh->meshHeader.polygon1.single.height = image.height;
setMesh->meshHeader.polygon1.single.fmt = image.fmt;
@@ -133,7 +111,7 @@ void LUS::SetMeshFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
setMesh->dlists.push_back(pType);
} else if (setMesh->meshHeader.base.type == 2) {
PolygonDlist2 dlist;
-
+
int32_t polyType = reader->ReadInt8(); // Unused
dlist.pos.x = reader->ReadInt16();
dlist.pos.y = reader->ReadInt16();
@@ -150,7 +128,8 @@ void LUS::SetMeshFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
setMesh->dlists2.push_back(dlist);
} else {
- SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}", setMesh->meshHeader.base.type);
+ SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}",
+ setMesh->meshHeader.base.type);
}
}
@@ -162,8 +141,10 @@ void LUS::SetMeshFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader
setMesh->meshHeader.polygon1.multi.list = setMesh->images.data();
setMesh->meshHeader.polygon1.dlist = (Gfx*)setMesh->dlists.data();
} else {
- SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}", setMesh->meshHeader.base.type);
+ SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}",
+ setMesh->meshHeader.base.type);
}
-}
-} // namespace LUS
+ return setMesh;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.h b/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.h
index 3ae72fdbc..86f090dfb 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetMeshFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetMeshFactory : public SceneCommandFactory {
+namespace SOH {
+class SetMeshFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetMeshFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.cpp
index dae215ab1..d384e1f16 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.cpp
@@ -2,33 +2,11 @@
#include "2s2h/resource/type/scenecommand/SetMinimapChests.h"
#include "spdlog/spdlog.h"
-namespace LUS {
+namespace SOH {
-std::shared_ptr<IResource> SetMinimapChestsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetMinimapChests>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetMinimapChestsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetMinimapChestsFactory with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void SetMinimapChestsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetMinimapChests> chests = std::static_pointer_cast<SetMinimapChests>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, chests);
+std::shared_ptr<LUS::IResource> SetMinimapChestsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto chests = std::make_shared<SetMinimapChests>(initData);
ReadCommandId(chests, reader);
@@ -45,6 +23,7 @@ void SetMinimapChestsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> re
d.unk_8 = reader->ReadUInt16();
chests->chests.emplace_back(d);
}
-}
+ return chests;
+}
} // namespace LUS \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.h
index 941405c40..1dbb597a7 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetMinimapChestsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetMinimapChestsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetMinimapChestsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetMinimapChestsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
} \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.cpp
index 43eb4b496..4a0db83ca 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.cpp
@@ -2,32 +2,10 @@
#include "2s2h/resource/type/scenecommand/SetMinimapList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetMinimapListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetMinimapList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetMinimapListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetMinimapListFactory with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-void SetMinimapListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetMinimapList> mapList = std::static_pointer_cast<SetMinimapList>(resource);
-
- ResourceVersionFactory::ParseFileBinary(reader, mapList);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetMinimapListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto mapList = std::make_shared<SetMinimapList>(initData);
ReadCommandId(mapList, reader);
@@ -46,5 +24,8 @@ void SetMinimapListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> read
mapList->entries.emplace_back(data);
}
mapList->list.entry = mapList->entries.data();
+
+ return mapList;
+
}
} // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.h
index d8a5fd643..2659e9e9b 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetMinimapListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetMinimapListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetMinimapListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetMinimapListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
}; // namespace LUS \ No newline at end of file
diff --git a/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.cpp
index 274407c00..c7cf20b2b 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.cpp
@@ -2,33 +2,10 @@
#include "2s2h/resource/type/scenecommand/SetObjectList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetObjectListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetObjectList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetObjectListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetObjectList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetObjectListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetObjectList> setObjectList = std::static_pointer_cast<SetObjectList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setObjectList);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetObjectListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setObjectList = std::make_shared<SetObjectList>(initData);
ReadCommandId(setObjectList, reader);
@@ -37,6 +14,7 @@ void LUS::SetObjectListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader>
for (uint32_t i = 0; i < setObjectList->numObjects; i++) {
setObjectList->objects.push_back(reader->ReadUInt16());
}
-}
-} // namespace LUS
+ return setObjectList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.h
index b977576d3..2e493ec3a 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetObjectListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetObjectListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetObjectListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetObjectListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.cpp
index a361a0915..ec6d7e4bf 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.cpp
@@ -3,70 +3,11 @@
#include "spdlog/spdlog.h"
#include <libultraship/libultraship.h>
-namespace LUS {
-std::shared_ptr<IResource>
-SetPathwaysFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetPathways>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetPathwaysFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetPathways with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetPathwaysFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetPathways> setPathways = std::static_pointer_cast<SetPathways>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setPathways);
-
- ReadCommandId(setPathways, reader);
-
- setPathways->numPaths = reader->ReadUInt32();
- setPathways->paths.reserve(setPathways->numPaths);
- for (uint32_t i = 0; i < setPathways->numPaths; i++) {
- std::string pathFileName = reader->ReadString();
- auto path = std::static_pointer_cast<Path>(LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(pathFileName.c_str()));
- setPathways->paths.push_back(path->GetPointer());
- }
-}
-
-std::shared_ptr<IResource> SetPathwaysMMFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetPathwaysMM>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetPathwaysMMFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetPathwaysMM with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetPathwaysMMFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetPathwaysMM> setPathways = std::static_pointer_cast<SetPathwaysMM>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setPathways);
-
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetPathwaysMMFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setPathways = std::make_shared<SetPathwaysMM>(initData);
+
ReadCommandId(setPathways, reader);
setPathways->numPaths = reader->ReadUInt32();
@@ -77,6 +18,6 @@ void LUS::SetPathwaysMMFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader>
LUS::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(pathFileName.c_str()));
setPathways->paths.push_back(path->GetPointer());
}
+ return setPathways;
}
-
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.h b/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.h
index 544ef02dc..6254a6938 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetPathwaysFactory.h
@@ -2,27 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetPathwaysFactory : public SceneCommandFactory {
+namespace SOH {
+class SetPathwaysMMFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetPathwaysFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-class SetPathwaysMMFactory : public SceneCommandFactory {
- public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetPathwaysMMFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
}; // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.cpp
index e2c5df85f..a7b843496 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.cpp
@@ -2,68 +2,10 @@
#include "2s2h/resource/type/scenecommand/SetRoomBehavior.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-// OOT
-#if 0
-std::shared_ptr<IResource>
-SetRoomBehaviorFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetRoomBehavior>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetRoomBehaviorFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetRoomBehavior with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetRoomBehaviorFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetRoomBehavior> setRoomBehavior = std::static_pointer_cast<SetRoomBehavior>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setRoomBehavior);
-
- ReadCommandId(setRoomBehavior, reader);
-
- setRoomBehavior->roomBehavior.gameplayFlags = reader->ReadInt8();
- setRoomBehavior->roomBehavior.gameplayFlags2 = reader->ReadInt32();
-}
-#endif
-// MM
-
-std::shared_ptr<IResource> SetRoomBehaviorMMFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetRoomBehaviorMM>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetRoomBehaviorMMFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetRoomBehavior with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void SetRoomBehaviorMMFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetRoomBehaviorMM> setRoomBehavior = std::static_pointer_cast<SetRoomBehaviorMM>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setRoomBehavior);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetRoomBehaviorMMFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setRoomBehavior = std::make_shared<SetRoomBehaviorMM>(initData);
ReadCommandId(setRoomBehavior, reader);
@@ -73,6 +15,7 @@ void SetRoomBehaviorMMFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
setRoomBehavior->roomBehavior.msgCtxUnk = reader->ReadInt8();
setRoomBehavior->roomBehavior.enablePointLights = reader->ReadInt8();
setRoomBehavior->roomBehavior.kankyoContextUnkE2 = reader->ReadInt8();
-}
-} // namespace LUS
+ return setRoomBehavior;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.h b/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.h
index a449a1c8f..a8a2c5054 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetRoomBehaviorFactory.h
@@ -2,27 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetRoomBehaviorFactory : public SceneCommandFactory {
+namespace SOH {
+class SetRoomBehaviorMMFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetRoomBehaviorFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-class SetRoomBehaviorMMFactory : public SceneCommandFactory {
- public:
- std::shared_ptr<IResource> ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetRoomBehaviorMMFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.cpp
index ac4040afa..f455828c7 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.cpp
@@ -2,49 +2,27 @@
#include "2s2h/resource/type/scenecommand/SetRoomList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetRoomListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetRoomList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetRoomListFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetRoomList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetRoomListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetRoomList> setRoomList = std::static_pointer_cast<SetRoomList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setRoomList);
+namespace SOH {
+std::shared_ptr<LUS::IResource>
+SetRoomListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setRoomList = std::make_shared<SetRoomList>(initData);
ReadCommandId(setRoomList, reader);
setRoomList->numRooms = reader->ReadInt32();
setRoomList->rooms.reserve(setRoomList->numRooms);
for (uint32_t i = 0; i < setRoomList->numRooms; i++) {
- RomFile room;
+ RomFile room;
- setRoomList->fileNames.push_back(reader->ReadString());
+ setRoomList->fileNames.push_back(reader->ReadString());
- room.fileName = (char*)setRoomList->fileNames.back().c_str();
- room.vromStart = reader->ReadInt32();
- room.vromEnd = reader->ReadInt32();
+ room.fileName = (char*)setRoomList->fileNames.back().c_str();
+ room.vromStart = reader->ReadInt32();
+ room.vromEnd = reader->ReadInt32();
setRoomList->rooms.push_back(room);
}
-}
-} // namespace LUS
+ return setRoomList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.h
index eeb099aa8..02bf2468f 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetRoomListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetRoomListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetRoomListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetRoomListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.cpp
index c2670e0fd..00b2ab343 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.cpp
@@ -2,37 +2,16 @@
#include "2s2h/resource/type/scenecommand/SetSkyboxModifier.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetSkyboxModifierFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetSkyboxModifier>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetSkyboxModifierFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetSkyboxModifier with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetSkyboxModifierFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetSkyboxModifier> setSkyboxModifier = std::static_pointer_cast<SetSkyboxModifier>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setSkyboxModifier);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetSkyboxModifierFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setSkyboxModifier = std::make_shared<SetSkyboxModifier>(initData);
ReadCommandId(setSkyboxModifier, reader);
setSkyboxModifier->modifier.skyboxDisabled = reader->ReadInt8();
setSkyboxModifier->modifier.sunMoonDisabled = reader->ReadInt8();
-}
-} // namespace LUS
+ return setSkyboxModifier;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.h b/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.h
index 3880751fe..dc7919b82 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetSkyboxModifierFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetSkyboxModifierFactory : public SceneCommandFactory {
+namespace SOH {
+class SetSkyboxModifierFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetSkyboxModifierFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.cpp
index 8ac3b91a4..2f574c6ce 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.cpp
@@ -2,32 +2,10 @@
#include "2s2h/resource/type/scenecommand/SetSkyboxSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetSkyboxSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetSkyboxSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetSkyboxSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetSkyboxSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void SetSkyboxSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetSkyboxSettings> setSkyboxSettings = std::static_pointer_cast<SetSkyboxSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setSkyboxSettings);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetSkyboxSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setSkyboxSettings = std::make_shared<SetSkyboxSettings>(initData);
ReadCommandId(setSkyboxSettings, reader);
@@ -35,6 +13,7 @@ void SetSkyboxSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> r
setSkyboxSettings->settings.skyboxId = reader->ReadInt8();
setSkyboxSettings->settings.weather = reader->ReadInt8();
setSkyboxSettings->settings.indoors = reader->ReadInt8();
-}
-} // namespace LUS
+ return setSkyboxSettings;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.h
index c75c86673..7a96d6cfc 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetSkyboxSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetSkyboxSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetSkyboxSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetSkyboxSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.cpp
index 98ee97f03..e10d73550 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.cpp
@@ -2,38 +2,17 @@
#include "2s2h/resource/type/scenecommand/SetSoundSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetSoundSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetSoundSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetSoundSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetSoundSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetSoundSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetSoundSettings> setSoundSettings = std::static_pointer_cast<SetSoundSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setSoundSettings);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetSoundSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setSoundSettings = std::make_shared<SetSoundSettings>(initData);
ReadCommandId(setSoundSettings, reader);
setSoundSettings->settings.reverb = reader->ReadInt8();
setSoundSettings->settings.natureAmbienceId = reader->ReadInt8();
setSoundSettings->settings.seqId = reader->ReadInt8();
-}
-} // namespace LUS
+ return setSoundSettings;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.h
index 235c617a2..dd89af87b 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetSoundSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetSoundSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetSoundSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetSoundSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.cpp
index 35fc6614e..1d295651c 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.cpp
@@ -2,37 +2,16 @@
#include "2s2h/resource/type/scenecommand/SetSpecialObjects.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetSpecialObjectsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetSpecialObjects>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetSpecialObjectsFactoryV0>();
- break;
- }
-
- if (factory == nullptr){
- SPDLOG_ERROR("Failed to load SetSpecialObjects with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetSpecialObjectsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetSpecialObjects> setSpecialObjects = std::static_pointer_cast<SetSpecialObjects>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setSpecialObjects);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetSpecialObjectsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setSpecialObjects = std::make_shared<SetSpecialObjects>(initData);
ReadCommandId(setSpecialObjects, reader);
setSpecialObjects->specialObjects.elfMessage = reader->ReadInt8();
setSpecialObjects->specialObjects.globalObject = reader->ReadInt16();
-}
-} // namespace LUS
+ return setSpecialObjects;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.h
index b62180a45..471690eb9 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetSpecialObjectsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetSpecialObjectsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetSpecialObjectsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetSpecialObjectsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.cpp
index 9d95a01ce..8432035d9 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.cpp
@@ -2,54 +2,30 @@
#include "2s2h/resource/type/scenecommand/SetStartPositionList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetStartPositionListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetStartPositionList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion)
- {
- case 0:
- factory = std::make_shared<SetStartPositionListFactoryV0>();
- break;
- }
-
- if (factory == nullptr)
- {
- SPDLOG_ERROR("Failed to load SetStartPositionList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetStartPositionListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource)
-{
- std::shared_ptr<SetStartPositionList> setStartPositionList = std::static_pointer_cast<SetStartPositionList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setStartPositionList);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetStartPositionListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setStartPositionList = std::make_shared<SetStartPositionList>(initData);
ReadCommandId(setStartPositionList, reader);
setStartPositionList->numStartPositions = reader->ReadUInt32();
setStartPositionList->startPositions.reserve(setStartPositionList->numStartPositions);
for (uint32_t i = 0; i < setStartPositionList->numStartPositions; i++) {
- ActorEntry entry;
+ ActorEntry entry;
- entry.id = reader->ReadUInt16();
- entry.pos.x = reader->ReadInt16();
- entry.pos.y = reader->ReadInt16();
- entry.pos.z = reader->ReadInt16();
- entry.rot.x = reader->ReadInt16();
- entry.rot.y = reader->ReadInt16();
- entry.rot.z = reader->ReadInt16();
- entry.params = reader->ReadUInt16();
+ entry.id = reader->ReadUInt16();
+ entry.pos.x = reader->ReadInt16();
+ entry.pos.y = reader->ReadInt16();
+ entry.pos.z = reader->ReadInt16();
+ entry.rot.x = reader->ReadInt16();
+ entry.rot.y = reader->ReadInt16();
+ entry.rot.z = reader->ReadInt16();
+ entry.params = reader->ReadUInt16();
setStartPositionList->startPositions.push_back(entry);
}
-}
-} // namespace LUS
+ return setStartPositionList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.h
index b029f3a1e..c1e92b4c3 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetStartPositionListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetStartPositionListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetStartPositionListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetStartPositionListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.cpp
index e3f2d77e5..73bd93a22 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.cpp
@@ -2,38 +2,18 @@
#include "2s2h/resource/type/scenecommand/SetTimeSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetTimeSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetTimeSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetTimeSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetTimeSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetTimeSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetTimeSettings> setTimeSettings = std::static_pointer_cast<SetTimeSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setTimeSettings);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetTimeSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setTimeSettings = std::make_shared<SetTimeSettings>(initData);
ReadCommandId(setTimeSettings, reader);
-
+
setTimeSettings->settings.hour = reader->ReadInt8();
setTimeSettings->settings.minute = reader->ReadInt8();
setTimeSettings->settings.timeIncrement = reader->ReadInt8();
+
+ return setTimeSettings;
}
} // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.h
index 1482c2892..10d568a39 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetTimeSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetTimeSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetTimeSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetTimeSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace LUS
diff --git a/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.cpp
index 611897fbe..9688d137e 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.cpp
@@ -2,33 +2,11 @@
#include "2s2h/resource/type/scenecommand/SetTransitionActorList.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource> SetTransitionActorListFactory::ReadResource(std::shared_ptr<ResourceInitData> initData,
- std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetTransitionActorList>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetTransitionActorListFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetTransitionActorList with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetTransitionActorListFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetTransitionActorList> setTransitionActorList = std::static_pointer_cast<SetTransitionActorList>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setTransitionActorList);
-
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetTransitionActorListFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setTransitionActorList = std::make_shared<SetTransitionActorList>(initData);
+
ReadCommandId(setTransitionActorList, reader);
setTransitionActorList->numTransitionActors = reader->ReadUInt32();
@@ -49,6 +27,7 @@ void LUS::SetTransitionActorListFactoryV0::ParseFileBinary(std::shared_ptr<Binar
setTransitionActorList->transitionActorList.push_back(entry);
}
-}
-} // namespace LUS
+ return setTransitionActorList;
+}
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.h b/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.h
index d300fdf3c..286d8cd1f 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetTransitionActorListFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetTransitionActorListFactory : public SceneCommandFactory {
+namespace SOH {
+class SetTransitionActorListFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
+ std::shared_ptr<LUS::IResource>
+ ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) override;
};
-
-class SetTransitionActorListFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
-};
-}; // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.cpp b/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.cpp
index 74b3e78ab..01dab3730 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.cpp
+++ b/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.cpp
@@ -2,39 +2,19 @@
#include "2s2h/resource/type/scenecommand/SetWindSettings.h"
#include "spdlog/spdlog.h"
-namespace LUS {
-std::shared_ptr<IResource>
-SetWindSettingsFactory::ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) {
- auto resource = std::make_shared<SetWindSettings>(initData);
- std::shared_ptr<ResourceVersionFactory> factory = nullptr;
-
- switch (resource->GetInitData()->ResourceVersion) {
- case 0:
- factory = std::make_shared<SetWindSettingsFactoryV0>();
- break;
- }
-
- if (factory == nullptr) {
- SPDLOG_ERROR("Failed to load SetWindSettings with version {}", resource->GetInitData()->ResourceVersion);
- return nullptr;
- }
-
- factory->ParseFileBinary(reader, resource);
-
- return resource;
-}
-
-void LUS::SetWindSettingsFactoryV0::ParseFileBinary(std::shared_ptr<BinaryReader> reader,
- std::shared_ptr<IResource> resource) {
- std::shared_ptr<SetWindSettings> setWind = std::static_pointer_cast<SetWindSettings>(resource);
- ResourceVersionFactory::ParseFileBinary(reader, setWind);
+namespace SOH {
+std::shared_ptr<LUS::IResource> SetWindSettingsFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) {
+ auto setWind = std::make_shared<SetWindSettings>(initData);
ReadCommandId(setWind, reader);
-
+
setWind->settings.windWest = reader->ReadInt8();
setWind->settings.windVertical = reader->ReadInt8();
setWind->settings.windSouth = reader->ReadInt8();
setWind->settings.windSpeed = reader->ReadUByte();
+
+ return setWind;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.h b/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.h
index b4fb4d615..6da192df2 100644
--- a/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.h
+++ b/mm/2s2h/resource/importer/scenecommand/SetWindSettingsFactory.h
@@ -2,15 +2,10 @@
#include "2s2h/resource/importer/scenecommand/SceneCommandFactory.h"
-namespace LUS {
-class SetWindSettingsFactory : public SceneCommandFactory {
+namespace SOH {
+class SetWindSettingsFactory : public SceneCommandFactoryBinaryV0 {
public:
- std::shared_ptr<IResource>
- ReadResource(std::shared_ptr<ResourceInitData> initData, std::shared_ptr<BinaryReader> reader) override;
-};
-
-class SetWindSettingsFactoryV0 : public SceneCommandVersionFactory {
- public:
- void ParseFileBinary(std::shared_ptr<BinaryReader> reader, std::shared_ptr<IResource> resource) override;
+ std::shared_ptr<LUS::IResource> ReadResource(std::shared_ptr<LUS::ResourceInitData> initData,
+ std::shared_ptr<LUS::BinaryReader> reader) override;
};
}; // namespace LUS
diff --git a/mm/2s2h/resource/type/2shResourceType.h b/mm/2s2h/resource/type/2shResourceType.h
new file mode 100644
index 000000000..f2124ab8b
--- /dev/null
+++ b/mm/2s2h/resource/type/2shResourceType.h
@@ -0,0 +1,27 @@
+#pragma once
+
+namespace SOH {
+enum class ResourceType {
+ SOH_Animation = 0x4F414E4D, // OANM
+ SOH_PlayerAnimation = 0x4F50414D, // OPAM
+ SOH_Room = 0x4F524F4D, // OROM
+ SOH_CollisionHeader = 0x4F434F4C, // OCOL
+ SOH_Skeleton = 0x4F534B4C, // OSKL
+ SOH_SkeletonLimb = 0x4F534C42, // OSLB
+ SOH_Path = 0x4F505448, // OPTH
+ SOH_Cutscene = 0x4F435654, // OCUT
+ SOH_Text = 0x4F545854, // OTXT
+ SOH_Audio = 0x4F415544, // OAUD
+ SOH_AudioSample = 0x4F534D50, // OSMP
+ SOH_AudioSoundFont = 0x4F534654, // OSFT
+ SOH_AudioSequence = 0x4F534551, // OSEQ
+ SOH_Background = 0x4F424749, // OBGI
+ SOH_SceneCommand = 0x4F52434D, // ORCM
+
+ TSH_TextMM = 0x4F54584D, // OTXM
+
+ TSH_TexAnim = 0x4F54414E, // OTAN
+ TSH_CKeyFrameAnim = 0x4F4B4641, // OKFA
+ TSH_CKeyFrameSkel = 0x4F4B4653 // OKFS
+};
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/Animation.cpp b/mm/2s2h/resource/type/Animation.cpp
index 46327c732..d11d05394 100644
--- a/mm/2s2h/resource/type/Animation.cpp
+++ b/mm/2s2h/resource/type/Animation.cpp
@@ -1,6 +1,6 @@
#include "Animation.h"
-namespace LUS {
+namespace SOH {
AnimationData* Animation::GetPointer() {
return &animationData;
}
@@ -18,4 +18,4 @@ size_t Animation::GetPointerSize() {
return 0;
}
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/Animation.h b/mm/2s2h/resource/type/Animation.h
index 3d6b810bf..9ca22038e 100644
--- a/mm/2s2h/resource/type/Animation.h
+++ b/mm/2s2h/resource/type/Animation.h
@@ -3,7 +3,7 @@
#include "Resource.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
enum class AnimationType {
Normal = 0,
Link = 1,
@@ -63,11 +63,12 @@ namespace LUS {
TransformUpdateIndex transformUpdateIndex;
};
- class Animation : public Resource<AnimationData> {
+ class Animation : public LUS::Resource<AnimationData> {
public:
using Resource::Resource;
- Animation() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ Animation() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
+ }
AnimationData* GetPointer();
size_t GetPointerSize();
@@ -84,4 +85,4 @@ namespace LUS {
std::vector<TransformData> transformDataArr;
std::vector<int16_t> copyValuesArr;
};
-}; // namespace LUS \ No newline at end of file
+}; // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/AudioSample.cpp b/mm/2s2h/resource/type/AudioSample.cpp
index 951aae6c1..288765822 100644
--- a/mm/2s2h/resource/type/AudioSample.cpp
+++ b/mm/2s2h/resource/type/AudioSample.cpp
@@ -1,6 +1,6 @@
#include "AudioSample.h"
-namespace LUS {
+namespace SOH {
Sample* AudioSample::GetPointer() {
return &sample;
}
@@ -8,4 +8,4 @@ Sample* AudioSample::GetPointer() {
size_t AudioSample::GetPointerSize() {
return sizeof(Sample);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/AudioSample.h b/mm/2s2h/resource/type/AudioSample.h
index eda8aa456..8ff320585 100644
--- a/mm/2s2h/resource/type/AudioSample.h
+++ b/mm/2s2h/resource/type/AudioSample.h
@@ -5,7 +5,7 @@
#include "Resource.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ uintptr_t start;
/* 0x04 */ uintptr_t end;
@@ -39,11 +39,11 @@ namespace LUS {
s32 sampleRate; // For wav samples only...
} Sample; // size = 0x10
- class AudioSample : public Resource<Sample> {
+ class AudioSample : public LUS::Resource<Sample> {
public:
using Resource::Resource;
- AudioSample() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ AudioSample() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
Sample* GetPointer();
size_t GetPointerSize();
@@ -58,4 +58,4 @@ namespace LUS {
uint32_t bookDataCount;
std::vector<int16_t> bookData;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/AudioSequence.cpp b/mm/2s2h/resource/type/AudioSequence.cpp
index c09514a67..41029d47d 100644
--- a/mm/2s2h/resource/type/AudioSequence.cpp
+++ b/mm/2s2h/resource/type/AudioSequence.cpp
@@ -1,6 +1,6 @@
#include "AudioSequence.h"
-namespace LUS {
+namespace SOH {
Sequence* AudioSequence::GetPointer() {
return &sequence;
@@ -9,4 +9,4 @@ Sequence* AudioSequence::GetPointer() {
size_t AudioSequence::GetPointerSize() {
return sizeof(Sequence);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/AudioSequence.h b/mm/2s2h/resource/type/AudioSequence.h
index 2b2bb8be9..dd4030562 100644
--- a/mm/2s2h/resource/type/AudioSequence.h
+++ b/mm/2s2h/resource/type/AudioSequence.h
@@ -5,7 +5,7 @@
#include "Resource.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
char* seqData;
@@ -17,11 +17,11 @@ typedef struct {
uint8_t fonts[16];
} Sequence;
-class AudioSequence : public Resource<Sequence> {
+class AudioSequence : public LUS::Resource<Sequence> {
public:
using Resource::Resource;
- AudioSequence() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ AudioSequence() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
Sequence* GetPointer();
size_t GetPointerSize();
@@ -29,4 +29,4 @@ public:
Sequence sequence;
std::vector<char> sequenceData;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/AudioSoundFont.cpp b/mm/2s2h/resource/type/AudioSoundFont.cpp
index 43ac40abf..12218cb64 100644
--- a/mm/2s2h/resource/type/AudioSoundFont.cpp
+++ b/mm/2s2h/resource/type/AudioSoundFont.cpp
@@ -1,6 +1,6 @@
#include "AudioSoundFont.h"
-namespace LUS {
+namespace SOH {
SoundFont* AudioSoundFont::GetPointer() {
return &soundFont;
}
@@ -8,4 +8,4 @@ SoundFont* AudioSoundFont::GetPointer() {
size_t AudioSoundFont::GetPointerSize() {
return sizeof(SoundFont);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/AudioSoundFont.h b/mm/2s2h/resource/type/AudioSoundFont.h
index 99b18b401..1dbf33937 100644
--- a/mm/2s2h/resource/type/AudioSoundFont.h
+++ b/mm/2s2h/resource/type/AudioSoundFont.h
@@ -6,7 +6,7 @@
#include "2s2h/resource/type/AudioSample.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x0 */ s16 delay;
@@ -52,11 +52,11 @@ typedef struct {
s32 fntIndex;
} SoundFont; // size = 0x14
-class AudioSoundFont : public Resource<SoundFont> {
+class AudioSoundFont : public LUS::Resource<SoundFont> {
public:
using Resource::Resource;
- AudioSoundFont() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ AudioSoundFont() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
SoundFont* GetPointer();
size_t GetPointerSize();
@@ -81,4 +81,4 @@ public:
SoundFont soundFont;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/Background.cpp b/mm/2s2h/resource/type/Background.cpp
index bc1047b5c..5465b1ad9 100644
--- a/mm/2s2h/resource/type/Background.cpp
+++ b/mm/2s2h/resource/type/Background.cpp
@@ -1,6 +1,6 @@
#include "Background.h"
-namespace LUS {
+namespace SOH {
uint8_t* Background::GetPointer() {
return Data.data();
}
@@ -8,4 +8,4 @@ uint8_t* Background::GetPointer() {
size_t Background::GetPointerSize() {
return Data.size() * sizeof(uint8_t);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/Background.h b/mm/2s2h/resource/type/Background.h
index 7f22658e0..6c10759d1 100644
--- a/mm/2s2h/resource/type/Background.h
+++ b/mm/2s2h/resource/type/Background.h
@@ -2,16 +2,16 @@
#include "resource/Resource.h"
-namespace LUS {
-class Background : public Resource<uint8_t> {
+namespace SOH {
+class Background : public LUS::Resource<uint8_t> {
public:
using Resource::Resource;
- Background() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ Background() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
uint8_t* GetPointer();
size_t GetPointerSize();
std::vector<uint8_t> Data;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/CollisionHeader.cpp b/mm/2s2h/resource/type/CollisionHeader.cpp
index 5625d2b59..dbfd737ee 100644
--- a/mm/2s2h/resource/type/CollisionHeader.cpp
+++ b/mm/2s2h/resource/type/CollisionHeader.cpp
@@ -1,6 +1,6 @@
#include "CollisionHeader.h"
-namespace LUS {
+namespace SOH {
CollisionHeaderData* CollisionHeader::GetPointer() {
return &collisionHeaderData;
}
@@ -8,4 +8,4 @@ CollisionHeaderData* CollisionHeader::GetPointer() {
size_t CollisionHeader::GetPointerSize() {
return sizeof(collisionHeaderData);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/CollisionHeader.h b/mm/2s2h/resource/type/CollisionHeader.h
index e401aa7f5..6f6a9546a 100644
--- a/mm/2s2h/resource/type/CollisionHeader.h
+++ b/mm/2s2h/resource/type/CollisionHeader.h
@@ -6,7 +6,7 @@
#include <libultraship/libultra.h>
#include "z64math.h"
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ u16 type;
@@ -67,11 +67,11 @@ typedef struct {
size_t cameraDataListLen; // OTRTODO: Added to allow for bounds checking the cameraDataList.
} CollisionHeaderData; // original name: BGDataInfo
-class CollisionHeader : public Resource<CollisionHeaderData> {
+class CollisionHeader : public LUS::Resource<CollisionHeaderData> {
public:
using Resource::Resource;
- CollisionHeader() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ CollisionHeader() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
CollisionHeaderData* GetPointer();
size_t GetPointerSize();
@@ -95,4 +95,4 @@ public:
std::vector<WaterBox> waterBoxes;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/Cutscene.cpp b/mm/2s2h/resource/type/Cutscene.cpp
index c7e98062a..60440ceb2 100644
--- a/mm/2s2h/resource/type/Cutscene.cpp
+++ b/mm/2s2h/resource/type/Cutscene.cpp
@@ -1,7 +1,7 @@
#include "Cutscene.h"
#include <libultraship/libultra/gbi.h>
-namespace LUS {
+namespace SOH {
uint32_t* Cutscene::GetPointer() {
return commands.data();
}
@@ -9,4 +9,4 @@ uint32_t* Cutscene::GetPointer() {
size_t Cutscene::GetPointerSize() {
return commands.size() * sizeof(uint32_t);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/Cutscene.h b/mm/2s2h/resource/type/Cutscene.h
index 5bd268e61..3ca8b3d50 100644
--- a/mm/2s2h/resource/type/Cutscene.h
+++ b/mm/2s2h/resource/type/Cutscene.h
@@ -7,7 +7,7 @@
#include "Vec3f.h"
#include "Color3b.h"
-namespace LUS {
+namespace SOH {
enum class CutsceneCommands {
Cmd00 = 0x0000,
@@ -44,11 +44,11 @@ enum class CutsceneCommands {
Error = 0xFEAF,
};
-class Cutscene : public Resource<uint32_t> {
+class Cutscene : public LUS::Resource<uint32_t> {
public:
using Resource::Resource;
- Cutscene() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ Cutscene() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
uint32_t* GetPointer();
size_t GetPointerSize();
@@ -57,7 +57,7 @@ class Cutscene : public Resource<uint32_t> {
uint32_t endFrame;
std::vector<uint32_t> commands;
};
-} // namespace LUS
+} // namespace SOH
/////////////
diff --git a/mm/2s2h/resource/type/KeyFrame.cpp b/mm/2s2h/resource/type/KeyFrame.cpp
index 6fc9bd567..06107fe7f 100644
--- a/mm/2s2h/resource/type/KeyFrame.cpp
+++ b/mm/2s2h/resource/type/KeyFrame.cpp
@@ -1,8 +1,8 @@
#include "KeyFrame.h"
-namespace LUS {
+namespace SOH {
-LUS::KeyFrameSkel::~KeyFrameSkel() {
+KeyFrameSkel::~KeyFrameSkel() {
delete[] skelData.limbsFlex;
}
@@ -15,14 +15,14 @@ size_t KeyFrameSkel::GetPointerSize() {
}
-LUS::KeyFrameAnim::~KeyFrameAnim() {
+KeyFrameAnim::~KeyFrameAnim() {
delete[] animData.bitFlags;
delete[] animData.keyFrames;
delete[] animData.kfNums;
delete[] animData.presetValues;
}
-KeyFrameAnimationData* LUS::KeyFrameAnim::GetPointer() {
+KeyFrameAnimationData* KeyFrameAnim::GetPointer() {
return &animData;
}
diff --git a/mm/2s2h/resource/type/KeyFrame.h b/mm/2s2h/resource/type/KeyFrame.h
index 7e5d534f5..4a1a789b1 100644
--- a/mm/2s2h/resource/type/KeyFrame.h
+++ b/mm/2s2h/resource/type/KeyFrame.h
@@ -3,7 +3,7 @@
#include "Resource.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct Vec3s {
s16 x;
@@ -56,11 +56,11 @@ typedef struct {
/* 0x12 */ s16 duration;
} KeyFrameAnimationData; // Size = 0x14
-class KeyFrameSkel : public Resource<KeyFrameSkeletonData> {
+class KeyFrameSkel : public LUS::Resource<KeyFrameSkeletonData> {
public:
using Resource::Resource;
- KeyFrameSkel() : Resource(std::shared_ptr<ResourceInitData>()) {
+ KeyFrameSkel() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
}
~KeyFrameSkel();
@@ -70,11 +70,11 @@ class KeyFrameSkel : public Resource<KeyFrameSkeletonData> {
KeyFrameSkeletonData skelData;
};
-class KeyFrameAnim : public Resource<KeyFrameAnimationData> {
+class KeyFrameAnim : public LUS::Resource<KeyFrameAnimationData> {
public:
using Resource::Resource;
- KeyFrameAnim() : Resource(std::shared_ptr<ResourceInitData>()) {
+ KeyFrameAnim() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
}
~KeyFrameAnim();
@@ -84,4 +84,4 @@ class KeyFrameAnim : public Resource<KeyFrameAnimationData> {
KeyFrameAnimationData animData;
};
-} // namespace LUS \ No newline at end of file
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/Path.cpp b/mm/2s2h/resource/type/Path.cpp
index 8ca2ac78d..5dc0a7422 100644
--- a/mm/2s2h/resource/type/Path.cpp
+++ b/mm/2s2h/resource/type/Path.cpp
@@ -1,19 +1,11 @@
#include "Path.h"
-namespace LUS {
-PathData* Path::GetPointer() {
- return pathData.data();
-}
-
-size_t Path::GetPointerSize() {
- return pathData.size() * sizeof(PathData);
-}
-
+namespace SOH {
PathDataMM* PathMM::GetPointer() {
return pathData.data();
}
size_t PathMM::GetPointerSize() {
- return pathData.size() * sizeof(PathData);
+ return pathData.size() * sizeof(PathDataMM);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/Path.h b/mm/2s2h/resource/type/Path.h
index 045764cc8..88872b570 100644
--- a/mm/2s2h/resource/type/Path.h
+++ b/mm/2s2h/resource/type/Path.h
@@ -6,13 +6,7 @@
#include <libultraship/libultra/types.h>
#include "z64math.h"
-namespace LUS {
-
-typedef struct {
- /* 0x00 */ u8 count; // number of points in the path
- /* 0x04 */ Vec3s* points; // Segment Address to the array of points
-} PathData; // size = 0x8
-
+namespace SOH {
typedef struct {
/* 0x0 */ u8 count; // Number of points in the path
/* 0x1 */ u8 additionalPathIndex;
@@ -20,25 +14,11 @@ typedef struct {
/* 0x4 */ Vec3s* points; // Segment Address to the array of points
} PathDataMM; // size = 0x8
-class Path : public Resource<PathData> {
-public:
- using Resource::Resource;
-
- Path() : Resource(std::shared_ptr<ResourceInitData>()) {}
-
- PathData* GetPointer();
- size_t GetPointerSize();
-
- uint32_t numPaths;
- std::vector<PathData> pathData;
- std::vector<std::vector<Vec3s>> paths;
-};
-
-class PathMM : public Resource<PathDataMM> {
+class PathMM : public LUS::Resource<PathDataMM> {
public:
using Resource::Resource;
- PathMM() : Resource(std::shared_ptr<ResourceInitData>()) {
+ PathMM() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
}
PathDataMM* GetPointer();
@@ -49,4 +29,4 @@ class PathMM : public Resource<PathDataMM> {
std::vector<std::vector<Vec3s>> paths;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/PlayerAnimation.cpp b/mm/2s2h/resource/type/PlayerAnimation.cpp
index 55925f49c..c9269061e 100644
--- a/mm/2s2h/resource/type/PlayerAnimation.cpp
+++ b/mm/2s2h/resource/type/PlayerAnimation.cpp
@@ -1,7 +1,7 @@
#include "PlayerAnimation.h"
#include <libultraship/libultra/gbi.h>
-namespace LUS {
+namespace SOH {
int16_t* PlayerAnimation::GetPointer() {
return limbRotData.data();
}
@@ -9,4 +9,4 @@ int16_t* PlayerAnimation::GetPointer() {
size_t PlayerAnimation::GetPointerSize() {
return limbRotData.size() * sizeof(int16_t);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/PlayerAnimation.h b/mm/2s2h/resource/type/PlayerAnimation.h
index 4eb51b139..5d5af68f2 100644
--- a/mm/2s2h/resource/type/PlayerAnimation.h
+++ b/mm/2s2h/resource/type/PlayerAnimation.h
@@ -7,17 +7,17 @@
#include "Vec3f.h"
#include "Color3b.h"
-namespace LUS {
+namespace SOH {
-class PlayerAnimation : public Resource<int16_t> {
+class PlayerAnimation : public LUS::Resource<int16_t> {
public:
using Resource::Resource;
- PlayerAnimation() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ PlayerAnimation() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
int16_t* GetPointer();
size_t GetPointerSize();
std::vector<int16_t> limbRotData;
};
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/Scene.cpp b/mm/2s2h/resource/type/Scene.cpp
index bfe219e54..15829c40e 100644
--- a/mm/2s2h/resource/type/Scene.cpp
+++ b/mm/2s2h/resource/type/Scene.cpp
@@ -1,6 +1,6 @@
#include "Scene.h"
-namespace LUS {
+namespace SOH {
void* Scene::GetPointer() {
// Scene is a special type that requries C++ processing. As such, we return nothing.
return nullptr;
@@ -9,4 +9,4 @@ void* Scene::GetPointer() {
size_t Scene::GetPointerSize() {
return 0;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/Scene.h b/mm/2s2h/resource/type/Scene.h
index f726da359..130266cb6 100644
--- a/mm/2s2h/resource/type/Scene.h
+++ b/mm/2s2h/resource/type/Scene.h
@@ -2,22 +2,21 @@
#include <cstdint>
#include <vector>
-#include <memory>
#include "Resource.h"
#include "scenecommand/SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
-class Scene : public Resource<void> {
+class Scene : public LUS::Resource<void> {
public:
using Resource::Resource;
- Scene() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ Scene() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
void* GetPointer();
- size_t GetPointerSize();
+ size_t GetPointerSize();
- std::vector<std::shared_ptr<ISceneCommand>> commands;
+ std::vector<std::shared_ptr<ISceneCommand>> commands;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/Skeleton.cpp b/mm/2s2h/resource/type/Skeleton.cpp
index 7b9003bab..c3e509cf6 100644
--- a/mm/2s2h/resource/type/Skeleton.cpp
+++ b/mm/2s2h/resource/type/Skeleton.cpp
@@ -3,7 +3,7 @@
#include "2s2h/BenPort.h"
#include "libultraship/libultraship.h"
-namespace LUS {
+namespace SOH {
SkeletonData* Skeleton::GetPointer() {
return &skeletonData;
}
@@ -79,4 +79,4 @@ void SkeletonPatcher::UpdateSkeletons() {
}
}
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/Skeleton.h b/mm/2s2h/resource/type/Skeleton.h
index 490614a44..81aa90c68 100644
--- a/mm/2s2h/resource/type/Skeleton.h
+++ b/mm/2s2h/resource/type/Skeleton.h
@@ -5,7 +5,7 @@
#include "SkeletonLimb.h"
#include <z64animation.h>
-namespace LUS {
+namespace SOH {
enum class SkeletonType {
Normal,
@@ -50,11 +50,11 @@ union SkeletonData {
SkelCurveLimbList skelCurveLimbList;
};
-class Skeleton : public Resource<SkeletonData> {
+class Skeleton : public LUS::Resource<SkeletonData> {
public:
using Resource::Resource;
- Skeleton() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ Skeleton() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {}
SkeletonData* GetPointer();
size_t GetPointerSize();
@@ -91,4 +91,4 @@ class SkeletonPatcher {
};
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/SkeletonLimb.cpp b/mm/2s2h/resource/type/SkeletonLimb.cpp
index 8e5a8ef6d..eb599e641 100644
--- a/mm/2s2h/resource/type/SkeletonLimb.cpp
+++ b/mm/2s2h/resource/type/SkeletonLimb.cpp
@@ -1,6 +1,6 @@
#include "SkeletonLimb.h"
-namespace LUS {
+namespace SOH {
SkeletonLimbData* SkeletonLimb::GetPointer() {
return &limbData;
}
@@ -21,4 +21,4 @@ size_t SkeletonLimb::GetPointerSize() {
return 0;
}
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/SkeletonLimb.h b/mm/2s2h/resource/type/SkeletonLimb.h
index 2110b3484..c93eb1897 100644
--- a/mm/2s2h/resource/type/SkeletonLimb.h
+++ b/mm/2s2h/resource/type/SkeletonLimb.h
@@ -4,7 +4,7 @@
#include "libultraship/libultra.h"
#include "z64math.h"
-namespace LUS {
+namespace SOH {
enum class LimbType {
Invalid,
Standard,
@@ -97,11 +97,12 @@ union SkeletonLimbData {
SkinLimb skinLimb;
};
-class SkeletonLimb : public Resource<SkeletonLimbData> {
+class SkeletonLimb : public LUS::Resource<SkeletonLimbData> {
public:
using Resource::Resource;
- SkeletonLimb() : Resource(std::shared_ptr<ResourceInitData>()) {}
+ SkeletonLimb() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
+ }
SkeletonLimbData* GetPointer();
size_t GetPointerSize();
@@ -131,4 +132,4 @@ public:
std::vector<std::vector<SkinVertex>> skinLimbModifVertexArrays;
std::vector<std::vector<SkinTransformation>> skinLimbModifTransformationArrays;
};
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/Text.cpp b/mm/2s2h/resource/type/Text.cpp
deleted file mode 100644
index eee289f8a..000000000
--- a/mm/2s2h/resource/type/Text.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "Text.h"
-
-namespace LUS {
-MessageEntry* Text::GetPointer() {
- return messages.data();
-}
-
-size_t Text::GetPointerSize() {
- return messages.size() * sizeof(MessageEntry);
-}
-} // namespace LUS
diff --git a/mm/2s2h/resource/type/Text.h b/mm/2s2h/resource/type/Text.h
deleted file mode 100644
index db0cb36a0..000000000
--- a/mm/2s2h/resource/type/Text.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-
-#include <cstdint>
-#include <vector>
-#include "Resource.h"
-#include <libultraship/libultra/types.h>
-
-namespace LUS {
-// TODO: we've moved away from using classes for this stuff
-class MessageEntry
-{
-public:
- uint16_t id;
- uint8_t textboxType;
- uint8_t textboxYPos;
- std::string msg;
-};
-
-class Text : public Resource<MessageEntry> {
-public:
- using Resource::Resource;
-
- Text() : Resource(std::shared_ptr<ResourceInitData>()) {}
-
- MessageEntry* GetPointer();
- size_t GetPointerSize();
-
- std::vector<MessageEntry> messages;
-};
-}; // namespace LUS
diff --git a/mm/2s2h/resource/type/TextMM.cpp b/mm/2s2h/resource/type/TextMM.cpp
index b4acc8d18..18f910044 100644
--- a/mm/2s2h/resource/type/TextMM.cpp
+++ b/mm/2s2h/resource/type/TextMM.cpp
@@ -1,6 +1,6 @@
#include "TextMM.h"
-namespace LUS {
+namespace SOH {
MessageEntryMM* TextMM::GetPointer() {
return messages.data();
}
@@ -8,4 +8,4 @@ MessageEntryMM* TextMM::GetPointer() {
size_t TextMM::GetPointerSize() {
return messages.size() * sizeof(MessageEntryMM);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/TextMM.h b/mm/2s2h/resource/type/TextMM.h
index 7a6e2d1ab..812452e42 100644
--- a/mm/2s2h/resource/type/TextMM.h
+++ b/mm/2s2h/resource/type/TextMM.h
@@ -5,7 +5,7 @@
#include "Resource.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
// TODO: we've moved away from using classes for this stuff
class MessageEntryMM {
@@ -22,11 +22,11 @@ class MessageEntryMM {
std::string msg;
};
-class TextMM : public Resource<MessageEntryMM> {
+class TextMM : public LUS::Resource<MessageEntryMM> {
public:
using Resource::Resource;
- TextMM() : Resource(std::shared_ptr<ResourceInitData>()) {
+ TextMM() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
}
MessageEntryMM* GetPointer();
@@ -34,4 +34,4 @@ public:
std::vector<MessageEntryMM> messages;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/TextureAnimation.cpp b/mm/2s2h/resource/type/TextureAnimation.cpp
index 0d49d0e5b..3dffe4b76 100644
--- a/mm/2s2h/resource/type/TextureAnimation.cpp
+++ b/mm/2s2h/resource/type/TextureAnimation.cpp
@@ -1,6 +1,6 @@
#include "TextureAnimation.h"
-namespace LUS {
+namespace SOH {
TextureAnimation::~TextureAnimation() {
for (auto& a : anims) {
switch ((TextureAnimationParamsType)a.type) {
@@ -33,4 +33,4 @@ AnimatedMaterial* TextureAnimation::GetPointer() {
size_t TextureAnimation::GetPointerSize() {
return anims.size() * sizeof(AnimatedMaterial);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/TextureAnimation.h b/mm/2s2h/resource/type/TextureAnimation.h
index 843599c48..e41286d94 100644
--- a/mm/2s2h/resource/type/TextureAnimation.h
+++ b/mm/2s2h/resource/type/TextureAnimation.h
@@ -1,7 +1,7 @@
#pragma once
#include "Resource.h"
-namespace LUS {
+namespace SOH {
enum class TextureAnimationParamsType {
/* 0 */ SingleScroll,
/* 1 */ DualScroll,
@@ -88,12 +88,12 @@ typedef struct {
/* 0x4 */ void* params;
} AnimatedMaterial; // size = 0x8
-class TextureAnimation : public Resource<AnimatedMaterial> {
+class TextureAnimation : public LUS::Resource<AnimatedMaterial> {
public:
using Resource::Resource;
~TextureAnimation();
- TextureAnimation() : Resource(std::shared_ptr<ResourceInitData>()) {
+ TextureAnimation() : Resource(std::shared_ptr<LUS::ResourceInitData>()) {
}
AnimatedMaterial* GetPointer();
@@ -102,4 +102,4 @@ class TextureAnimation : public Resource<AnimatedMaterial> {
std::vector<AnimatedMaterial> anims;
std::vector<std::string> textureCycleTextures;
};
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/scenecommand/EndMarker.cpp b/mm/2s2h/resource/type/scenecommand/EndMarker.cpp
index 9d12c1518..ba8898187 100644
--- a/mm/2s2h/resource/type/scenecommand/EndMarker.cpp
+++ b/mm/2s2h/resource/type/scenecommand/EndMarker.cpp
@@ -1,6 +1,6 @@
#include "EndMarker.h"
-namespace LUS {
+namespace SOH {
Marker* EndMarker::GetPointer() {
return &endMarker;
}
@@ -8,4 +8,4 @@ Marker* EndMarker::GetPointer() {
size_t EndMarker::GetPointerSize() {
return sizeof(Marker);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/EndMarker.h b/mm/2s2h/resource/type/scenecommand/EndMarker.h
index 9f981f1f9..34df38963 100644
--- a/mm/2s2h/resource/type/scenecommand/EndMarker.h
+++ b/mm/2s2h/resource/type/scenecommand/EndMarker.h
@@ -1,13 +1,11 @@
#pragma once
#include <cstdint>
-#include <vector>
-#include <memory>
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
} Marker;
@@ -21,4 +19,4 @@ class EndMarker : public SceneCommand<Marker> {
Marker endMarker;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/RomFile.h b/mm/2s2h/resource/type/scenecommand/RomFile.h
index ebdc3dc3b..19a5545e7 100644
--- a/mm/2s2h/resource/type/scenecommand/RomFile.h
+++ b/mm/2s2h/resource/type/scenecommand/RomFile.h
@@ -2,7 +2,7 @@
#include <cstdint>
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ uintptr_t vromStart;
/* 0x04 */ uintptr_t vromEnd;
diff --git a/mm/2s2h/resource/type/scenecommand/SceneCommand.h b/mm/2s2h/resource/type/scenecommand/SceneCommand.h
index ea99e066e..c6d0d9424 100644
--- a/mm/2s2h/resource/type/scenecommand/SceneCommand.h
+++ b/mm/2s2h/resource/type/scenecommand/SceneCommand.h
@@ -6,7 +6,7 @@
#include "Resource.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
enum class SceneCommandID : uint8_t {
SetStartPositionList = 0x00,
@@ -48,10 +48,10 @@ enum class SceneCommandID : uint8_t {
Error = 0xFF
};
-class ISceneCommand : public IResource {
+class ISceneCommand : public LUS::IResource {
public:
using IResource::IResource;
- ISceneCommand() : IResource(std::shared_ptr<ResourceInitData>()) {}
+ ISceneCommand() : IResource(std::shared_ptr<LUS::ResourceInitData>()) {}
SceneCommandID cmdId;
};
@@ -64,4 +64,4 @@ template <class T> class SceneCommand : public ISceneCommand {
}
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.cpp b/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.cpp
index 79d5253ac..735562ce8 100644
--- a/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.cpp
@@ -1,7 +1,7 @@
#include "SetActorCutsceneList.h"
#include "2s2h/resource/type/scenecommand/SetActorCutsceneList.h"
-namespace LUS {
+namespace SOH {
CutsceneEntry* SetActorCutsceneList::GetPointer() {
return entries.data();
}
@@ -10,4 +10,4 @@ size_t SetActorCutsceneList::GetPointerSize() {
return entries.size() * sizeof(CutsceneEntry);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.h b/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.h
index 5b93d1a5b..f9989bd53 100644
--- a/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetActorCutsceneList.h
@@ -3,7 +3,7 @@
#include "Resource.h"
#include "SceneCommand.h"
-namespace LUS {
+namespace SOH {
typedef struct CutsceneEntry {
int16_t priority;
int16_t length;
@@ -24,7 +24,6 @@ class SetActorCutsceneList : public SceneCommand<CutsceneEntry> {
CutsceneEntry* GetPointer();
size_t GetPointerSize();
- uint32_t numEntries;
std::vector<CutsceneEntry> entries;
};
diff --git a/mm/2s2h/resource/type/scenecommand/SetActorList.cpp b/mm/2s2h/resource/type/scenecommand/SetActorList.cpp
index d37ebb148..5bb62e764 100644
--- a/mm/2s2h/resource/type/scenecommand/SetActorList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetActorList.cpp
@@ -1,6 +1,6 @@
#include "SetActorList.h"
-namespace LUS {
+namespace SOH {
ActorEntry* SetActorList::GetPointer() {
return actorList.data();
}
@@ -8,4 +8,4 @@ ActorEntry* SetActorList::GetPointer() {
size_t SetActorList::GetPointerSize() {
return actorList.size() * sizeof(ActorEntry);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetActorList.h b/mm/2s2h/resource/type/scenecommand/SetActorList.h
index 117175d7d..5da281b7e 100644
--- a/mm/2s2h/resource/type/scenecommand/SetActorList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetActorList.h
@@ -2,14 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "SceneCommand.h"
-// #include <libultraship/libultra/types.h>
#include "z64math.h"
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ s16 id;
/* 0x02 */ Vec3s pos;
@@ -27,4 +24,4 @@ class SetActorList : public SceneCommand<ActorEntry> {
uint32_t numActors;
std::vector<ActorEntry> actorList;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.cpp b/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.cpp
index 15b3c97d4..911fef455 100644
--- a/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.cpp
@@ -1,6 +1,6 @@
#include "SetAlternateHeaders.h"
-namespace LUS {
+namespace SOH {
void* SetAlternateHeaders::GetPointer() {
// Like Scene, SetAlternateHeader is a special type that is only acted upon in C++.
return nullptr;
@@ -9,4 +9,4 @@ void* SetAlternateHeaders::GetPointer() {
size_t SetAlternateHeaders::GetPointerSize() {
return 0;
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.h b/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.h
index ebc571e3d..0e0b78747 100644
--- a/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.h
+++ b/mm/2s2h/resource/type/scenecommand/SetAlternateHeaders.h
@@ -2,8 +2,6 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "SceneCommand.h"
#include "2s2h/resource/type/Scene.h"
@@ -11,8 +9,7 @@
#include <libultraship/libultra/types.h>
-namespace LUS {
-
+namespace SOH {
class SetAlternateHeaders : public SceneCommand<void> {
public:
using SceneCommand::SceneCommand;
@@ -23,4 +20,4 @@ class SetAlternateHeaders : public SceneCommand<void> {
uint32_t numHeaders;
std::vector<std::shared_ptr<Scene>> headers;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.cpp b/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.cpp
index ef3adc543..8ac5483b4 100644
--- a/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.cpp
@@ -1,13 +1,13 @@
#include "SetAnimatedMaterialList.h"
-namespace LUS {
+namespace SOH {
-AnimatedMaterialData* LUS::SetAnimatedMaterialList::GetPointer() {
+AnimatedMaterial* SetAnimatedMaterialList::GetPointer() {
return mat;
}
-size_t LUS::SetAnimatedMaterialList::GetPointerSize() {
- return sizeof(AnimatedMaterialData);
+size_t SetAnimatedMaterialList::GetPointerSize() {
+ return sizeof(AnimatedMaterial);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.h b/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.h
index 02a8c7c38..4ba5363c6 100644
--- a/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetAnimatedMaterialList.h
@@ -3,21 +3,22 @@
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
+#include "2s2h/resource/type/TextureAnimation.h"
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x0 */ int8_t segment;
/* 0x2 */ int16_t type;
/* 0x4 */ void* params;
} AnimatedMaterialData; // size = 0x8
-class SetAnimatedMaterialList : public SceneCommand<AnimatedMaterialData> {
+class SetAnimatedMaterialList : public SceneCommand<AnimatedMaterial> {
public:
using SceneCommand::SceneCommand;
- AnimatedMaterialData* GetPointer();
+ AnimatedMaterial* GetPointer();
size_t GetPointerSize();
- AnimatedMaterialData* mat;
+ AnimatedMaterial* mat;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCameraSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetCameraSettings.cpp
index e1d2967e7..5c41f1c8f 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCameraSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetCameraSettings.cpp
@@ -1,6 +1,6 @@
#include "SetCameraSettings.h"
-namespace LUS {
+namespace SOH {
CameraSettings* SetCameraSettings::GetPointer() {
return &settings;
}
@@ -8,4 +8,4 @@ CameraSettings* SetCameraSettings::GetPointer() {
size_t SetCameraSettings::GetPointerSize() {
return sizeof(CameraSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCameraSettings.h b/mm/2s2h/resource/type/scenecommand/SetCameraSettings.h
index adbde2e02..6bce30a9b 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCameraSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetCameraSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
int8_t cameraMovement;
int32_t worldMapArea;
@@ -22,4 +22,4 @@ class SetCameraSettings : public SceneCommand<CameraSettings> {
CameraSettings settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.cpp b/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.cpp
index db8cdcb32..a1c22b9ea 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.cpp
@@ -1,6 +1,6 @@
#include "SetCollisionHeader.h"
-namespace LUS {
+namespace SOH {
CollisionHeaderData* SetCollisionHeader::GetPointer() {
if (collisionHeader == nullptr) {
return nullptr;
@@ -14,4 +14,4 @@ size_t SetCollisionHeader::GetPointerSize() {
}
return collisionHeader->GetPointerSize();
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.h b/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.h
index c615eedad..27dc65b53 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.h
+++ b/mm/2s2h/resource/type/scenecommand/SetCollisionHeader.h
@@ -1,15 +1,13 @@
#pragma once
#include <cstdint>
-#include <vector>
#include <memory>
#include <string>
#include "Resource.h"
#include "2s2h/resource/type/scenecommand/SceneCommand.h"
#include "2s2h/resource/type/CollisionHeader.h"
-// #include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
class SetCollisionHeader : public SceneCommand<CollisionHeaderData> {
public:
using SceneCommand::SceneCommand;
@@ -21,4 +19,4 @@ class SetCollisionHeader : public SceneCommand<CollisionHeaderData> {
std::shared_ptr<CollisionHeader> collisionHeader;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCsCamera.cpp b/mm/2s2h/resource/type/scenecommand/SetCsCamera.cpp
index 59af0c0fe..3614377fe 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCsCamera.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetCsCamera.cpp
@@ -1,6 +1,6 @@
#include "SetCsCamera.h"
-namespace LUS {
+namespace SOH {
SetCsCamera::~SetCsCamera() {
for (auto c : csCamera) {
if (c.actorCsCamFuncData != nullptr) {
@@ -15,4 +15,4 @@ ActorCsCamInfoData* SetCsCamera::GetPointer() {
size_t SetCsCamera::GetPointerSize() {
return sizeof(ActorCsCamInfoData);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCsCamera.h b/mm/2s2h/resource/type/scenecommand/SetCsCamera.h
index fa5d9a500..406b7fa93 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCsCamera.h
+++ b/mm/2s2h/resource/type/scenecommand/SetCsCamera.h
@@ -2,16 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
-typedef struct {
-
-} CsCamera;
-
+namespace SOH {
typedef struct {
/* 0x0 */ s16 x;
/* 0x2 */ s16 y;
@@ -34,4 +29,4 @@ class SetCsCamera : public SceneCommand<ActorCsCamInfoData> {
std::vector<ActorCsCamInfoData> csCamera;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCutscenes.cpp b/mm/2s2h/resource/type/scenecommand/SetCutscenes.cpp
index 51ceca4be..f84a8f5b6 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCutscenes.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetCutscenes.cpp
@@ -1,20 +1,6 @@
#include "SetCutscenes.h"
-namespace LUS {
-uint32_t* SetCutscenes::GetPointer() {
- if (cutscene == nullptr) {
- return nullptr;
- }
- return cutscene->GetPointer();
-}
-
-size_t SetCutscenes::GetPointerSize() {
- if (cutscene == nullptr) {
- return 0;
- }
- return cutscene->GetPointerSize();
-}
-
+namespace SOH {
CutsceneScriptEntry* SetCutscenesMM::GetPointer() {
if (entries.size() == 0) {
return nullptr;
@@ -29,4 +15,4 @@ size_t SetCutscenesMM::GetPointerSize() {
return entries.size() * sizeof(CutsceneScriptEntry);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetCutscenes.h b/mm/2s2h/resource/type/scenecommand/SetCutscenes.h
index 900201522..6fe2a838c 100644
--- a/mm/2s2h/resource/type/scenecommand/SetCutscenes.h
+++ b/mm/2s2h/resource/type/scenecommand/SetCutscenes.h
@@ -2,25 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "2s2h/resource/type/scenecommand/SceneCommand.h"
#include "2s2h/resource/type/Cutscene.h"
-// #include <libultraship/libultra.h>
-
-namespace LUS {
-class SetCutscenes : public SceneCommand<uint32_t> {
- public:
- using SceneCommand::SceneCommand;
-
- uint32_t* GetPointer();
- size_t GetPointerSize();
-
- std::string fileName;
- std::shared_ptr<Cutscene> cutscene;
-};
+namespace SOH {
class CutsceneScriptEntry {
public:
void* data;
@@ -29,7 +15,6 @@ class CutsceneScriptEntry {
uint8_t flag;
};
-
class SetCutscenesMM : public SceneCommand<CutsceneScriptEntry> {
public:
using SceneCommand::SceneCommand;
@@ -40,4 +25,4 @@ class SetCutscenesMM : public SceneCommand<CutsceneScriptEntry> {
std::vector<CutsceneScriptEntry> entries;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetEchoSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetEchoSettings.cpp
index 47cfa85ad..d4b2b1e15 100644
--- a/mm/2s2h/resource/type/scenecommand/SetEchoSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetEchoSettings.cpp
@@ -1,6 +1,6 @@
#include "SetEchoSettings.h"
-namespace LUS {
+namespace SOH {
EchoSettings* SetEchoSettings::GetPointer() {
return &settings;
}
@@ -8,4 +8,4 @@ EchoSettings* SetEchoSettings::GetPointer() {
size_t SetEchoSettings::GetPointerSize() {
return sizeof(EchoSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetEchoSettings.h b/mm/2s2h/resource/type/scenecommand/SetEchoSettings.h
index ea2f664d4..12c2036c9 100644
--- a/mm/2s2h/resource/type/scenecommand/SetEchoSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetEchoSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
int8_t echo;
} EchoSettings;
@@ -21,4 +21,4 @@ class SetEchoSettings : public SceneCommand<EchoSettings> {
EchoSettings settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetEntranceList.cpp b/mm/2s2h/resource/type/scenecommand/SetEntranceList.cpp
index d33ac189b..e82711da2 100644
--- a/mm/2s2h/resource/type/scenecommand/SetEntranceList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetEntranceList.cpp
@@ -1,6 +1,6 @@
#include "SetEntranceList.h"
-namespace LUS {
+namespace SOH {
EntranceEntry* SetEntranceList::GetPointer() {
return entrances.data();
}
@@ -8,4 +8,4 @@ EntranceEntry* SetEntranceList::GetPointer() {
size_t SetEntranceList::GetPointerSize() {
return entrances.size() * sizeof(EntranceEntry);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetEntranceList.h b/mm/2s2h/resource/type/scenecommand/SetEntranceList.h
index d31dda78c..ed6084f55 100644
--- a/mm/2s2h/resource/type/scenecommand/SetEntranceList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetEntranceList.h
@@ -2,13 +2,12 @@
#include <cstdint>
#include <vector>
-#include <memory>
#include <string>
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ u8 spawn;
/* 0x01 */ u8 room;
@@ -25,4 +24,4 @@ class SetEntranceList : public SceneCommand<EntranceEntry> {
std::vector<EntranceEntry> entrances;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetExitList.cpp b/mm/2s2h/resource/type/scenecommand/SetExitList.cpp
index 99966cdb4..3de483b0e 100644
--- a/mm/2s2h/resource/type/scenecommand/SetExitList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetExitList.cpp
@@ -1,6 +1,6 @@
#include "SetExitList.h"
-namespace LUS {
+namespace SOH {
uint16_t* SetExitList::GetPointer() {
return exits.data();
}
@@ -8,4 +8,4 @@ uint16_t* SetExitList::GetPointer() {
size_t SetExitList::GetPointerSize() {
return exits.size() * sizeof(int16_t);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetExitList.h b/mm/2s2h/resource/type/scenecommand/SetExitList.h
index c6f0b3f42..56026075f 100644
--- a/mm/2s2h/resource/type/scenecommand/SetExitList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetExitList.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
class SetExitList : public SceneCommand<uint16_t> {
public:
using SceneCommand::SceneCommand;
@@ -19,4 +19,4 @@ class SetExitList : public SceneCommand<uint16_t> {
std::vector<uint16_t> exits;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetLightList.cpp b/mm/2s2h/resource/type/scenecommand/SetLightList.cpp
index c59f75c20..459e957cb 100644
--- a/mm/2s2h/resource/type/scenecommand/SetLightList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetLightList.cpp
@@ -1,6 +1,6 @@
#include "SetLightList.h"
-namespace LUS {
+namespace SOH {
LightInfo* SetLightList::GetPointer() {
return lightList.data();
}
@@ -8,4 +8,4 @@ LightInfo* SetLightList::GetPointer() {
size_t SetLightList::GetPointerSize() {
return lightList.size() * sizeof(LightInfo);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetLightList.h b/mm/2s2h/resource/type/scenecommand/SetLightList.h
index bbc5aad3d..5e07d8fb5 100644
--- a/mm/2s2h/resource/type/scenecommand/SetLightList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetLightList.h
@@ -2,13 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x0 */ s16 x;
/* 0x2 */ s16 y;
@@ -45,4 +43,4 @@ class SetLightList : public SceneCommand<LightInfo> {
uint32_t numLights;
std::vector<LightInfo> lightList;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetLightingSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetLightingSettings.cpp
index 69127f19c..042062512 100644
--- a/mm/2s2h/resource/type/scenecommand/SetLightingSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetLightingSettings.cpp
@@ -1,6 +1,6 @@
#include "SetLightingSettings.h"
-namespace LUS {
+namespace SOH {
EnvLightSettings* SetLightingSettings::GetPointer() {
return settings.data();
}
@@ -8,4 +8,4 @@ EnvLightSettings* SetLightingSettings::GetPointer() {
size_t SetLightingSettings::GetPointerSize() {
return settings.size() * sizeof(EnvLightSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetLightingSettings.h b/mm/2s2h/resource/type/scenecommand/SetLightingSettings.h
index ca894fec3..c4059d259 100644
--- a/mm/2s2h/resource/type/scenecommand/SetLightingSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetLightingSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ u8 ambientColor[3];
/* 0x03 */ s8 light1Dir[3];
@@ -28,4 +28,4 @@ class SetLightingSettings : public SceneCommand<EnvLightSettings> {
std::vector<EnvLightSettings> settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetMesh.cpp b/mm/2s2h/resource/type/scenecommand/SetMesh.cpp
index 5ecd2cbfa..1e2cd396c 100644
--- a/mm/2s2h/resource/type/scenecommand/SetMesh.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetMesh.cpp
@@ -1,6 +1,6 @@
#include "SetMesh.h"
-namespace LUS {
+namespace SOH {
MeshHeader* SetMesh::GetPointer() {
return &meshHeader;
}
@@ -8,4 +8,4 @@ MeshHeader* SetMesh::GetPointer() {
size_t SetMesh::GetPointerSize() {
return sizeof(MeshHeader);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetMesh.h b/mm/2s2h/resource/type/scenecommand/SetMesh.h
index a3a6c9731..37684b7e1 100644
--- a/mm/2s2h/resource/type/scenecommand/SetMesh.h
+++ b/mm/2s2h/resource/type/scenecommand/SetMesh.h
@@ -2,13 +2,12 @@
#include <cstdint>
#include <vector>
-#include <memory>
#include "Resource.h"
#include "SceneCommand.h"
#include "libultraship/libultra.h"
#include "z64math.h"
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ u8 type;
} PolygonBase;
@@ -100,4 +99,4 @@ class SetMesh : public SceneCommand<MeshHeader> {
std::vector<BgImage> images;
MeshHeader meshHeader;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetMinimapChests.cpp b/mm/2s2h/resource/type/scenecommand/SetMinimapChests.cpp
index dde6da61d..ec45f32ce 100644
--- a/mm/2s2h/resource/type/scenecommand/SetMinimapChests.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetMinimapChests.cpp
@@ -1,6 +1,6 @@
#include "SetMinimapChests.h"
-namespace LUS {
+namespace SOH {
MinimapChestData* SetMinimapChests::GetPointer() {
return chests.data();
@@ -10,4 +10,4 @@ size_t SetMinimapChests::GetPointerSize() {
return sizeof(MinimapChestData);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/scenecommand/SetMinimapChests.h b/mm/2s2h/resource/type/scenecommand/SetMinimapChests.h
index 2877d4dc7..e99ef2634 100644
--- a/mm/2s2h/resource/type/scenecommand/SetMinimapChests.h
+++ b/mm/2s2h/resource/type/scenecommand/SetMinimapChests.h
@@ -2,7 +2,7 @@
#include "Resource.h"
#include "SceneCommand.h"
-namespace LUS {
+namespace SOH {
typedef struct {
int16_t unk_0;
int16_t unk_2;
diff --git a/mm/2s2h/resource/type/scenecommand/SetMinimapList.cpp b/mm/2s2h/resource/type/scenecommand/SetMinimapList.cpp
index e97a6eee0..270d22e98 100644
--- a/mm/2s2h/resource/type/scenecommand/SetMinimapList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetMinimapList.cpp
@@ -1,13 +1,13 @@
#include "SetMinimapList.h"
-namespace LUS {
+namespace SOH {
-MinimapListData* LUS::SetMinimapList::GetPointer() {
+MinimapListData* SetMinimapList::GetPointer() {
return &list;
}
-size_t LUS::SetMinimapList::GetPointerSize() {
+size_t SetMinimapList::GetPointerSize() {
return sizeof(list);
}
-} // namespace LUS \ No newline at end of file
+} // namespace SOH \ No newline at end of file
diff --git a/mm/2s2h/resource/type/scenecommand/SetMinimapList.h b/mm/2s2h/resource/type/scenecommand/SetMinimapList.h
index ecebbc323..48eaa8902 100644
--- a/mm/2s2h/resource/type/scenecommand/SetMinimapList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetMinimapList.h
@@ -4,8 +4,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-
-namespace LUS {
+namespace SOH {
typedef struct {
/* 0x00 */ u16 mapId;
/* 0x02 */ s16 unk2;
diff --git a/mm/2s2h/resource/type/scenecommand/SetObjectList.cpp b/mm/2s2h/resource/type/scenecommand/SetObjectList.cpp
index 921166675..04aeb27d0 100644
--- a/mm/2s2h/resource/type/scenecommand/SetObjectList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetObjectList.cpp
@@ -1,6 +1,6 @@
#include "SetObjectList.h"
-namespace LUS {
+namespace SOH {
int16_t* SetObjectList::GetPointer() {
return objects.data();
}
@@ -8,4 +8,4 @@ int16_t* SetObjectList::GetPointer() {
size_t SetObjectList::GetPointerSize() {
return objects.size() * sizeof(int16_t);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetObjectList.h b/mm/2s2h/resource/type/scenecommand/SetObjectList.h
index c6f786636..a3042ba5d 100644
--- a/mm/2s2h/resource/type/scenecommand/SetObjectList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetObjectList.h
@@ -2,13 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
class SetObjectList : public SceneCommand<int16_t> {
public:
using SceneCommand::SceneCommand;
@@ -19,4 +17,4 @@ class SetObjectList : public SceneCommand<int16_t> {
uint32_t numObjects;
std::vector<int16_t> objects;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetPathways.cpp b/mm/2s2h/resource/type/scenecommand/SetPathways.cpp
index 046543a5b..6cd1c35e4 100644
--- a/mm/2s2h/resource/type/scenecommand/SetPathways.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetPathways.cpp
@@ -1,18 +1,10 @@
#include "SetPathways.h"
-namespace LUS {
-PathData** SetPathways::GetPointer() {
- return paths.data();
-}
-
-size_t SetPathways::GetPointerSize() {
- return paths.size() * sizeof(PathData*);
-}
-
+namespace SOH {
PathDataMM** SetPathwaysMM::GetPointer() {
return paths.data();
}
size_t SetPathwaysMM::GetPointerSize() {
- return paths.size() * sizeof(PathData*);
+ return paths.size() * sizeof(PathDataMM*);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetPathways.h b/mm/2s2h/resource/type/scenecommand/SetPathways.h
index e72cdcb29..e43eaba61 100644
--- a/mm/2s2h/resource/type/scenecommand/SetPathways.h
+++ b/mm/2s2h/resource/type/scenecommand/SetPathways.h
@@ -2,25 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
#include "Resource.h"
#include "SceneCommand.h"
-// #include <libultraship/libultra/types.h>
#include "2s2h/resource/type/Path.h"
-namespace LUS {
-
-class SetPathways : public SceneCommand<PathData*> {
- public:
- using SceneCommand::SceneCommand;
-
- PathData** GetPointer();
- size_t GetPointerSize();
-
- uint32_t numPaths;
- std::vector<PathData*> paths;
-};
-
+namespace SOH {
class SetPathwaysMM : public SceneCommand<PathDataMM*> {
public:
using SceneCommand::SceneCommand;
@@ -32,4 +18,4 @@ class SetPathwaysMM : public SceneCommand<PathDataMM*> {
std::vector<PathDataMM*> paths;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.cpp b/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.cpp
index a56562449..cfacd61b0 100644
--- a/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.cpp
@@ -1,17 +1,10 @@
#include "SetRoomBehavior.h"
-namespace LUS {
-RoomBehavior* SetRoomBehavior::GetPointer() {
- return &roomBehavior;
-}
-
-size_t SetRoomBehavior::GetPointerSize() {
- return sizeof(RoomBehavior);
-}
+namespace SOH {
RoomBehaviorMM* SetRoomBehaviorMM::GetPointer() {
return &roomBehavior;
}
size_t SetRoomBehaviorMM::GetPointerSize() {
return sizeof(RoomBehaviorMM);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.h b/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.h
index 6889a2aee..94fa8a2bd 100644
--- a/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.h
+++ b/mm/2s2h/resource/type/scenecommand/SetRoomBehavior.h
@@ -7,12 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
-typedef struct {
- int8_t gameplayFlags;
- int32_t gameplayFlags2;
-} RoomBehavior;
-
+namespace SOH {
typedef struct {
int8_t gameplayFlags;
int8_t currRoomUnk2;
@@ -22,17 +17,6 @@ typedef struct {
int8_t kankyoContextUnkE2;
} RoomBehaviorMM;
-class SetRoomBehavior : public SceneCommand<RoomBehavior> {
- public:
- using SceneCommand::SceneCommand;
-
- RoomBehavior* GetPointer();
- size_t GetPointerSize();
-
- RoomBehavior roomBehavior;
-};
-
-
class SetRoomBehaviorMM : public SceneCommand<RoomBehaviorMM> {
public:
using SceneCommand::SceneCommand;
@@ -43,4 +27,4 @@ class SetRoomBehaviorMM : public SceneCommand<RoomBehaviorMM> {
RoomBehaviorMM roomBehavior;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetRoomList.cpp b/mm/2s2h/resource/type/scenecommand/SetRoomList.cpp
index cf8c1d61a..c81d3645e 100644
--- a/mm/2s2h/resource/type/scenecommand/SetRoomList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetRoomList.cpp
@@ -1,6 +1,6 @@
#include "SetRoomList.h"
-namespace LUS {
+namespace SOH {
RomFile* SetRoomList::GetPointer() {
return rooms.data();
}
@@ -8,4 +8,4 @@ RomFile* SetRoomList::GetPointer() {
size_t SetRoomList::GetPointerSize() {
return rooms.size() * sizeof(RomFile);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetRoomList.h b/mm/2s2h/resource/type/scenecommand/SetRoomList.h
index 9bd0e07bc..3fa4a034c 100644
--- a/mm/2s2h/resource/type/scenecommand/SetRoomList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetRoomList.h
@@ -2,7 +2,6 @@
#include <cstdint>
#include <vector>
-#include <memory>
#include <string>
#include "Resource.h"
#include "SceneCommand.h"
@@ -10,13 +9,7 @@
#include <libultraship/libultra/types.h>
#include <spdlog/spdlog.h>
-namespace LUS {
-// typedef struct {
-// /* 0x00 */ uintptr_t vromStart;
-// /* 0x04 */ uintptr_t vromEnd;
-// char* fileName;
-// } RomFile; // size = 0x8
-
+namespace SOH {
class SetRoomList : public SceneCommand<RomFile> {
public:
using SceneCommand::SceneCommand;
@@ -28,8 +21,5 @@ class SetRoomList : public SceneCommand<RomFile> {
std::vector<std::string> fileNames;
std::vector<RomFile> rooms;
- ~SetRoomList() {
- SPDLOG_TRACE("ROOM LIST DTOR");
- }
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.cpp b/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.cpp
index 9926ec01a..122d93d77 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.cpp
@@ -1,6 +1,6 @@
#include "SetSkyboxModifier.h"
-namespace LUS {
+namespace SOH {
SkyboxModifier* SetSkyboxModifier::GetPointer() {
return &modifier;
}
@@ -8,4 +8,4 @@ SkyboxModifier* SetSkyboxModifier::GetPointer() {
size_t SetSkyboxModifier::GetPointerSize() {
return sizeof(SkyboxModifier);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.h b/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.h
index 6a54879e6..6cb1ab19b 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.h
+++ b/mm/2s2h/resource/type/scenecommand/SetSkyboxModifier.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
uint8_t skyboxDisabled;
uint8_t sunMoonDisabled;
@@ -22,4 +22,4 @@ class SetSkyboxModifier : public SceneCommand<SkyboxModifier> {
SkyboxModifier modifier;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.cpp
index 7f12d4fa3..527f0462c 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.cpp
@@ -1,6 +1,6 @@
#include "SetSkyboxSettings.h"
-namespace LUS {
+namespace SOH {
SkyboxSettings* SetSkyboxSettings::GetPointer() {
return &settings;
}
@@ -8,4 +8,4 @@ SkyboxSettings* SetSkyboxSettings::GetPointer() {
size_t SetSkyboxSettings::GetPointerSize() {
return sizeof(SetSkyboxSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.h b/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.h
index a2a9593b0..30fef6b91 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetSkyboxSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
uint8_t unk;
uint8_t skyboxId;
@@ -24,4 +24,4 @@ class SetSkyboxSettings : public SceneCommand<SkyboxSettings> {
SkyboxSettings settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSoundSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetSoundSettings.cpp
index f6f1941d1..c136d34db 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSoundSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetSoundSettings.cpp
@@ -1,6 +1,6 @@
#include "SetSoundSettings.h"
-namespace LUS {
+namespace SOH {
SoundSettings* SetSoundSettings::GetPointer() {
return &settings;
}
@@ -8,4 +8,4 @@ SoundSettings* SetSoundSettings::GetPointer() {
size_t SetSoundSettings::GetPointerSize() {
return sizeof(SoundSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSoundSettings.h b/mm/2s2h/resource/type/scenecommand/SetSoundSettings.h
index c4ee4668d..237261f6a 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSoundSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetSoundSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
uint8_t seqId;
uint8_t natureAmbienceId;
@@ -23,4 +23,4 @@ class SetSoundSettings : public SceneCommand<SoundSettings> {
SoundSettings settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.cpp b/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.cpp
index 3887107da..304ab514c 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.cpp
@@ -1,6 +1,6 @@
#include "SetSpecialObjects.h"
-namespace LUS {
+namespace SOH {
SpecialObjects* SetSpecialObjects::GetPointer() {
return &specialObjects;
}
@@ -8,4 +8,4 @@ SpecialObjects* SetSpecialObjects::GetPointer() {
size_t SetSpecialObjects::GetPointerSize() {
return sizeof(SpecialObjects);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.h b/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.h
index 78cfcd425..f0f643657 100644
--- a/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.h
+++ b/mm/2s2h/resource/type/scenecommand/SetSpecialObjects.h
@@ -1,13 +1,11 @@
#pragma once
#include <cstdint>
-#include <vector>
-#include <memory>
#include "Resource.h"
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
int8_t elfMessage;
int16_t globalObject;
@@ -22,4 +20,4 @@ class SetSpecialObjects : public SceneCommand<SpecialObjects> {
SpecialObjects specialObjects;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetStartPositionList.cpp b/mm/2s2h/resource/type/scenecommand/SetStartPositionList.cpp
index 89fb40049..5fa17b2a0 100644
--- a/mm/2s2h/resource/type/scenecommand/SetStartPositionList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetStartPositionList.cpp
@@ -1,6 +1,6 @@
#include "SetStartPositionList.h"
-namespace LUS {
+namespace SOH {
ActorEntry* SetStartPositionList::GetPointer() {
return startPositions.data();
}
@@ -8,4 +8,4 @@ ActorEntry* SetStartPositionList::GetPointer() {
size_t SetStartPositionList::GetPointerSize() {
return startPositions.size() * sizeof(ActorEntry);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetStartPositionList.h b/mm/2s2h/resource/type/scenecommand/SetStartPositionList.h
index cc939aca0..ae5f32b4d 100644
--- a/mm/2s2h/resource/type/scenecommand/SetStartPositionList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetStartPositionList.h
@@ -2,14 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "SceneCommand.h"
#include "2s2h/resource/type/scenecommand/SetActorList.h"
-// #include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
// typedef struct {
// /* 0x00 */ s16 id;
// /* 0x02 */ Vec3s pos;
@@ -27,4 +24,4 @@ class SetStartPositionList : public SceneCommand<ActorEntry> {
uint32_t numStartPositions;
std::vector<ActorEntry> startPositions;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetTimeSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetTimeSettings.cpp
index 9a10fb022..c9380a0a0 100644
--- a/mm/2s2h/resource/type/scenecommand/SetTimeSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetTimeSettings.cpp
@@ -1,6 +1,6 @@
#include "SetTimeSettings.h"
-namespace LUS {
+namespace SOH {
TimeSettings* SetTimeSettings::GetPointer() {
return &settings;
}
@@ -8,4 +8,4 @@ TimeSettings* SetTimeSettings::GetPointer() {
size_t SetTimeSettings::GetPointerSize() {
return sizeof(TimeSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetTimeSettings.h b/mm/2s2h/resource/type/scenecommand/SetTimeSettings.h
index 637398652..44146fe3d 100644
--- a/mm/2s2h/resource/type/scenecommand/SetTimeSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetTimeSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
uint8_t hour;
uint8_t minute;
@@ -23,4 +23,4 @@ class SetTimeSettings : public SceneCommand<TimeSettings> {
TimeSettings settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.cpp b/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.cpp
index 86387e682..c944e99f2 100644
--- a/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.cpp
@@ -1,6 +1,6 @@
#include "SetTransitionActorList.h"
-namespace LUS {
+namespace SOH {
TransitionActorEntry* SetTransitionActorList::GetPointer() {
return transitionActorList.data();
}
@@ -8,4 +8,4 @@ TransitionActorEntry* SetTransitionActorList::GetPointer() {
size_t SetTransitionActorList::GetPointerSize() {
return transitionActorList.size() * sizeof(TransitionActorEntry);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.h b/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.h
index bb6fc2ac6..ab142e5e8 100644
--- a/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.h
+++ b/mm/2s2h/resource/type/scenecommand/SetTransitionActorList.h
@@ -2,14 +2,11 @@
#include <cstdint>
#include <vector>
-#include <memory>
-#include <string>
#include "Resource.h"
#include "SceneCommand.h"
-// #include <libultraship/libultra/types.h>
#include "z64math.h"
-namespace LUS {
+namespace SOH {
typedef struct {
struct {
s8 room; // Room to switch to
@@ -31,4 +28,4 @@ class SetTransitionActorList : public SceneCommand<TransitionActorEntry> {
uint32_t numTransitionActors;
std::vector<TransitionActorEntry> transitionActorList;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetWindSettings.cpp b/mm/2s2h/resource/type/scenecommand/SetWindSettings.cpp
index 3aa9ce7a6..64bc8ecc8 100644
--- a/mm/2s2h/resource/type/scenecommand/SetWindSettings.cpp
+++ b/mm/2s2h/resource/type/scenecommand/SetWindSettings.cpp
@@ -1,6 +1,6 @@
#include "SetWindSettings.h"
-namespace LUS {
+namespace SOH {
WindSettings* SetWindSettings::GetPointer() {
return &settings;
}
@@ -8,4 +8,4 @@ WindSettings* SetWindSettings::GetPointer() {
size_t SetWindSettings::GetPointerSize() {
return sizeof(WindSettings);
}
-} // namespace LUS
+} // namespace SOH
diff --git a/mm/2s2h/resource/type/scenecommand/SetWindSettings.h b/mm/2s2h/resource/type/scenecommand/SetWindSettings.h
index e79b445ae..389f3f0d8 100644
--- a/mm/2s2h/resource/type/scenecommand/SetWindSettings.h
+++ b/mm/2s2h/resource/type/scenecommand/SetWindSettings.h
@@ -7,7 +7,7 @@
#include "SceneCommand.h"
#include <libultraship/libultra/types.h>
-namespace LUS {
+namespace SOH {
typedef struct {
int8_t windWest;
int8_t windVertical;
@@ -24,4 +24,4 @@ class SetWindSettings : public SceneCommand<WindSettings> {
WindSettings settings;
};
-}; // namespace LUS
+}; // namespace SOH
diff --git a/mm/2s2h/z_message_OTR.cpp b/mm/2s2h/z_message_OTR.cpp
index 7614dfbb1..617c82d3d 100644
--- a/mm/2s2h/z_message_OTR.cpp
+++ b/mm/2s2h/z_message_OTR.cpp
@@ -5,13 +5,12 @@
#include "global.h"
#include "2s2h/resource/type/TextMM.h"
#include <message_data_static.h>
-#include <resource/type/Text.h>
//extern "C" MessageTableEntry* sNesMessageEntryTablePtr;
//extern "C" MessageTableEntry* sStaffMessageEntryTablePtr;
MessageTableEntry* OTRMessage_LoadTable(const char* filePath, bool isNES) {
- auto file = std::static_pointer_cast<LUS::TextMM>(LUS::Context::GetInstance()->GetResourceManager()->LoadResource(filePath));
+ auto file = std::static_pointer_cast<SOH::TextMM>(LUS::Context::GetInstance()->GetResourceManager()->LoadResource(filePath));
if (file == nullptr)
return nullptr;
@@ -62,7 +61,7 @@ extern "C" void OTRMessage_Init(PlayState* play) {
//if (play->msgCtx.messageTableStaff == NULL) {
auto file2 =
- std::static_pointer_cast<LUS::TextMM>(LUS::Context::GetInstance()->GetResourceManager()->LoadResource(
+ std::static_pointer_cast<SOH::TextMM>(LUS::Context::GetInstance()->GetResourceManager()->LoadResource(
"text/staff_message_data_static/staff_message_data_static"));
// OTRTODO: Should not be malloc'ing here. It's fine for now since we check that the message table is already null.
play->msgCtx.messageTableStaff = (MessageTableEntry*)malloc(sizeof(MessageTableEntry) * file2->messages.size());
diff --git a/mm/2s2h/z_play_2SH.cpp b/mm/2s2h/z_play_2SH.cpp
index 5cd2296c7..9f4437aa7 100644
--- a/mm/2s2h/z_play_2SH.cpp
+++ b/mm/2s2h/z_play_2SH.cpp
@@ -13,7 +13,7 @@ LUS::IResource* OTRPlay_LoadFile(PlayState* play, const char* fileName) {
return res.get();
}
-s32 OTRScene_ExecuteCommands(PlayState* play, LUS::Scene* scene);
+s32 OTRScene_ExecuteCommands(PlayState* play, SOH::Scene* scene);
extern "C" void OTRPlay_InitScene(PlayState* play, s32 spawn) {
play->curSpawn = spawn;
@@ -31,7 +31,7 @@ extern "C" void OTRPlay_InitScene(PlayState* play, s32 spawn) {
Scene_ResetTransitionActorList(&play->state, &play->transitionActors);
Room_Init(play, &play->roomCtx);
gSaveContext.worldMapArea = 0;
- OTRScene_ExecuteCommands(play, (LUS::Scene*)play->sceneSegment);
+ OTRScene_ExecuteCommands(play, (SOH::Scene*)play->sceneSegment);
Play_InitEnvironment(play, play->skyboxId);
}
@@ -59,7 +59,7 @@ extern "C" s32 OTRfunc_800973FC(PlayState* play, RoomContext* roomCtx) {
roomCtx->curRoom.segment = roomCtx->activeRoomVram;
gSegments[3] = (uintptr_t)roomCtx->activeRoomVram;
- OTRScene_ExecuteCommands(play, (LUS::Scene*)roomCtx->curRoom.segment);
+ OTRScene_ExecuteCommands(play, (SOH::Scene*)roomCtx->curRoom.segment);
func_80123140(play, GET_PLAYER(play));
Actor_SpawnTransitionActors(play, &play->actorCtx);
if (((play->sceneId != SCENE_IKANA) || (roomCtx->curRoom.num != 1)) && (play->sceneId != SCENE_IKNINSIDE)) {
diff --git a/mm/2s2h/z_scene_2SH.cpp b/mm/2s2h/z_scene_2SH.cpp
index 5d229f013..11ba1a74d 100644
--- a/mm/2s2h/z_scene_2SH.cpp
+++ b/mm/2s2h/z_scene_2SH.cpp
@@ -10,7 +10,6 @@
#include "2s2h/resource/type/CollisionHeader.h"
#include "2s2h/resource/type/Cutscene.h"
#include "2s2h/resource/type/Path.h"
-#include "2s2h/resource/type/Text.h"
#include "2s2h/resource/type/scenecommand/SetCameraSettings.h"
#include "2s2h/resource/type/scenecommand/SetCutscenes.h"
#include "2s2h/resource/type/scenecommand/SetStartPositionList.h"
@@ -39,11 +38,11 @@
#include "2s2h/resource/type/scenecommand/SetMinimapChests.h"
#include "2s2h/resource/type/scenecommand/SetCsCamera.h"
-s32 OTRScene_ExecuteCommands(PlayState* play, LUS::Scene* scene);
+s32 OTRScene_ExecuteCommands(PlayState* play, SOH::Scene* scene);
-void Scene_CommandSpawnList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetStartPositionList* list = (LUS::SetStartPositionList*)cmd;
+void Scene_CommandSpawnList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetStartPositionList* list = (SOH::SetStartPositionList*)cmd;
ActorEntry* entries = (ActorEntry*)(list->GetRawPointer());
s32 loadedCount;
s16 playerObjectId;
@@ -70,33 +69,33 @@ void Scene_CommandSpawnList(PlayState* play, LUS::ISceneCommand* cmd) {
play->objectCtx.slots[play->objectCtx.numEntries].segment = objectPtr;
}
-void Scene_CommandActorList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetActorList* list = (LUS::SetActorList*)cmd;
+void Scene_CommandActorList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetActorList* list = (SOH::SetActorList*)cmd;
play->numSetupActors = list->numActors;
play->actorCtx.halfDaysBit = 0;
play->setupActorList = (ActorEntry*)list->GetRawPointer();
}
-void Scene_CommandActorCutsceneCamList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetCsCamera* cams = (LUS::SetCsCamera*)cmd;
+void Scene_CommandActorCutsceneCamList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetCsCamera* cams = (SOH::SetCsCamera*)cmd;
play->actorCsCamList = (ActorCsCamInfo*)cams->GetPointer();
}
-void Scene_CommandCollisionHeader(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetCollisionHeader* colHeader = (LUS::SetCollisionHeader*)cmd;
+void Scene_CommandCollisionHeader(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetCollisionHeader* colHeader = (SOH::SetCollisionHeader*)cmd;
BgCheck_Allocate(&play->colCtx, play, (CollisionHeader*)colHeader->GetRawPointer());
}
-void Scene_CommandRoomList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetRoomList* list = (LUS::SetRoomList*)cmd;
+void Scene_CommandRoomList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetRoomList* list = (SOH::SetRoomList*)cmd;
play->numRooms = list->numRooms;
play->roomList = (RomFile*)list->GetPointer();
}
-void Scene_CommandWindSettings(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetWindSettings* settings = (LUS::SetWindSettings*)cmd;
+void Scene_CommandWindSettings(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetWindSettings* settings = (SOH::SetWindSettings*)cmd;
play->envCtx.windDirection.x = settings->settings.windWest;
play->envCtx.windDirection.y = settings->settings.windVertical;
@@ -104,14 +103,14 @@ void Scene_CommandWindSettings(PlayState* play, LUS::ISceneCommand* cmd) {
play->envCtx.windSpeed = settings->settings.windSpeed;
}
-void Scene_CommandEntranceList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetEntranceList* list = (LUS::SetEntranceList*)cmd;
+void Scene_CommandEntranceList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetEntranceList* list = (SOH::SetEntranceList*)cmd;
play->setupEntranceList = (EntranceEntry*)list->GetRawPointer();
}
-void Scene_CommandSpecialFiles(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetSpecialObjects* specialObjList = (LUS::SetSpecialObjects*)cmd;
+void Scene_CommandSpecialFiles(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetSpecialObjects* specialObjList = (SOH::SetSpecialObjects*)cmd;
// static RomFile naviQuestHintFiles[2] = {
// { SEGMENT_ROM_START(elf_message_field), SEGMENT_ROM_END(elf_message_field) },
// { SEGMENT_ROM_START(elf_message_ydan), SEGMENT_ROM_END(elf_message_ydan) },
@@ -129,8 +128,8 @@ void Scene_CommandSpecialFiles(PlayState* play, LUS::ISceneCommand* cmd) {
// }
}
-void Scene_CommandRoomBehavior(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetRoomBehaviorMM* behavior = (LUS::SetRoomBehaviorMM*)cmd;
+void Scene_CommandRoomBehavior(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetRoomBehaviorMM* behavior = (SOH::SetRoomBehaviorMM*)cmd;
play->roomCtx.curRoom.behaviorType1 = behavior->roomBehavior.gameplayFlags;
play->roomCtx.curRoom.behaviorType2 = behavior->roomBehavior.currRoomUnk2;
@@ -146,18 +145,18 @@ void Scene_CommandRoomBehavior(PlayState* play, LUS::ISceneCommand* cmd) {
//play->envCtx.stormState = (behavior->roomBehavior.gameplayFlags2 >> 0xC) & 1;
}
-void Scene_Command09(PlayState* play, LUS::ISceneCommand* cmd) {
+void Scene_Command09(PlayState* play, SOH::ISceneCommand* cmd) {
// Empty in z_scene.c
}
-void Scene_CommandMesh(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetMesh* mesh = (LUS::SetMesh*)cmd;
+void Scene_CommandMesh(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetMesh* mesh = (SOH::SetMesh*)cmd;
play->roomCtx.curRoom.roomShape = (RoomShape*)mesh->GetRawPointer();
}
-void Scene_CommandObjectList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetObjectList* objList = (LUS::SetObjectList*)cmd;
+void Scene_CommandObjectList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetObjectList* objList = (SOH::SetObjectList*)cmd;
s32 i;
s32 j;
s32 k;
@@ -236,36 +235,36 @@ void Scene_CommandObjectList(PlayState* play, LUS::ISceneCommand* cmd) {
// play->objectCtx.numEntries = i;
}
-void Scene_CommandLightList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetLightList* lightList = (LUS::SetLightList*)cmd;
+void Scene_CommandLightList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetLightList* lightList = (SOH::SetLightList*)cmd;
for (unsigned int i = 0; i < lightList->numLights; i++) {
LightContext_InsertLight(play, &play->lightCtx, (LightInfo*)&lightList->lightList[i]);
}
}
-void Scene_CommandPathList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetPathwaysMM* paths = (LUS::SetPathwaysMM*)cmd;
+void Scene_CommandPathList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetPathwaysMM* paths = (SOH::SetPathwaysMM*)cmd;
play->setupPathList = (Path*)paths->GetPointer()[0];
}
-void Scene_CommandTransiActorList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetTransitionActorList* list = (LUS::SetTransitionActorList*)cmd;
+void Scene_CommandTransiActorList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetTransitionActorList* list = (SOH::SetTransitionActorList*)cmd;
play->transitionActors.count = list->numTransitionActors;
play->transitionActors.list = (TransitionActorEntry*)list->GetRawPointer();
}
-void Scene_CommandEnvLightSettings(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetLightingSettings* lightSettings = (LUS::SetLightingSettings*)cmd;
+void Scene_CommandEnvLightSettings(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetLightingSettings* lightSettings = (SOH::SetLightingSettings*)cmd;
play->envCtx.numLightSettings = lightSettings->settings.size();
play->envCtx.lightSettingsList = (EnvLightSettings*)lightSettings->GetRawPointer();
}
-void Scene_CommandTimeSettings(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetTimeSettings* settings = (LUS::SetTimeSettings*)cmd;
+void Scene_CommandTimeSettings(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetTimeSettings* settings = (SOH::SetTimeSettings*)cmd;
if ((settings->settings.hour != 0xFF) && (settings->settings.minute != 0xFF)) {
gSaveContext.skyboxTime = gSaveContext.save.time = CLOCK_TIME_ALT2_F(settings->settings.hour, settings->settings.minute);
@@ -305,8 +304,8 @@ void Scene_CommandTimeSettings(PlayState* play, LUS::ISceneCommand* cmd) {
}
}
-void Scene_CommandSkyboxSettings(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetSkyboxSettings* settings = (LUS::SetSkyboxSettings*)cmd;
+void Scene_CommandSkyboxSettings(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetSkyboxSettings* settings = (SOH::SetSkyboxSettings*)cmd;
play->skyboxId = settings->settings.skyboxId & 3;
// BENTODO z_scene.c reads from skyboxSettings.skyboxConfig not weather
@@ -316,19 +315,19 @@ void Scene_CommandSkyboxSettings(PlayState* play, LUS::ISceneCommand* cmd) {
//Scene_LoadAreaTextures(play, settings->settings.)
}
-void Scene_CommandSkyboxDisables(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetSkyboxModifier* mod = (LUS::SetSkyboxModifier*)cmd;
+void Scene_CommandSkyboxDisables(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetSkyboxModifier* mod = (SOH::SetSkyboxModifier*)cmd;
play->envCtx.skyboxDisabled = mod->modifier.skyboxDisabled;
play->envCtx.sunDisabled = mod->modifier.sunMoonDisabled;
}
-void Scene_CommandExitList(PlayState* play, LUS::ISceneCommand* cmd) {
+void Scene_CommandExitList(PlayState* play, SOH::ISceneCommand* cmd) {
play->setupExitList = (u16*)cmd->GetRawPointer();
}
-void Scene_CommandSoundSettings(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetSoundSettings* settings = (LUS::SetSoundSettings*)cmd;
+void Scene_CommandSoundSettings(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetSoundSettings* settings = (SOH::SetSoundSettings*)cmd;
play->sequenceCtx.seqId = settings->settings.seqId;
play->sequenceCtx.ambienceId = settings->settings.natureAmbienceId;
@@ -338,13 +337,13 @@ void Scene_CommandSoundSettings(PlayState* play, LUS::ISceneCommand* cmd) {
}
}
-void Scene_CommandEchoSetting(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetEchoSettings* echo = (LUS::SetEchoSettings*)cmd;
+void Scene_CommandEchoSetting(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetEchoSettings* echo = (SOH::SetEchoSettings*)cmd;
play->roomCtx.curRoom.echo = echo->settings.echo;
}
-void Scene_CommandCutsceneScriptList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetCutscenesMM* cs = (LUS::SetCutscenesMM*)cmd;
+void Scene_CommandCutsceneScriptList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetCutscenesMM* cs = (SOH::SetCutscenesMM*)cmd;
play->csCtx.scriptListCount = cs->entries.size();
// BENTODO do this the right way with get pointer
play->csCtx.scriptList = (CutsceneScriptEntry*)cs->entries.data();
@@ -352,12 +351,12 @@ void Scene_CommandCutsceneScriptList(PlayState* play, LUS::ISceneCommand* cmd) {
}
static bool shouldEndSceneCommands = false;
-void Scene_CommandAltHeaderList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetAlternateHeaders* headers = (LUS::SetAlternateHeaders*)cmd;
+void Scene_CommandAltHeaderList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetAlternateHeaders* headers = (SOH::SetAlternateHeaders*)cmd;
if (gSaveContext.sceneLayer != 0) {
- LUS::Scene* desiredHeader =
- std::static_pointer_cast<LUS::Scene>(headers->headers[gSaveContext.sceneLayer - 1]).get();
+ SOH::Scene* desiredHeader =
+ std::static_pointer_cast<SOH::Scene>(headers->headers[gSaveContext.sceneLayer - 1]).get();
if (desiredHeader != nullptr) {
OTRScene_ExecuteCommands(play, desiredHeader);
@@ -369,7 +368,7 @@ void Scene_CommandAltHeaderList(PlayState* play, LUS::ISceneCommand* cmd) {
}
}
-void Scene_CommandSetRegionVisitedFlag(PlayState* play, LUS::ISceneCommand* cmd) {
+void Scene_CommandSetRegionVisitedFlag(PlayState* play, SOH::ISceneCommand* cmd) {
s16 j = 0;
s16 i = 0;
@@ -396,36 +395,36 @@ void Scene_CommandSetRegionVisitedFlag(PlayState* play, LUS::ISceneCommand* cmd)
}
}
-void Scene_CommandAnimatedMaterials(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetAnimatedMaterialList* list = (LUS::SetAnimatedMaterialList*)cmd;
+void Scene_CommandAnimatedMaterials(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetAnimatedMaterialList* list = (SOH::SetAnimatedMaterialList*)cmd;
play->sceneMaterialAnims = (AnimatedMaterial*)list->mat;
}
-void Scene_CommandCutsceneList(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetActorCutsceneList* list = (LUS::SetActorCutsceneList*)cmd;
+void Scene_CommandCutsceneList(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetActorCutsceneList* list = (SOH::SetActorCutsceneList*)cmd;
- CutsceneManager_Init(play, (ActorCutscene*)list->GetPointer(), list->numEntries);
+ CutsceneManager_Init(play, (ActorCutscene*)list->GetPointer(), list->entries.size());
}
-void Scene_CommandMiniMap(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetMinimapList* list = (LUS::SetMinimapList*)cmd;
+void Scene_CommandMiniMap(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetMinimapList* list = (SOH::SetMinimapList*)cmd;
MapDisp_Init(play);
MapDisp_InitMapData(play, list->GetPointer());
}
-void Scene_Command1D(PlayState* play, LUS::ISceneCommand* cmd) {
+void Scene_Command1D(PlayState* play, SOH::ISceneCommand* cmd) {
}
-void Scene_CommandMiniMapCompassInfo(PlayState* play, LUS::ISceneCommand* cmd) {
- LUS::SetMinimapChests* chests = (LUS::SetMinimapChests*)cmd;
+void Scene_CommandMiniMapCompassInfo(PlayState* play, SOH::ISceneCommand* cmd) {
+ SOH::SetMinimapChests* chests = (SOH::SetMinimapChests*)cmd;
MapDisp_InitChestData(play, chests->chests.size(), chests->GetPointer());
}
-void (*sSceneCmdHandlersOTR[SCENE_CMD_MAX])(PlayState*, LUS::ISceneCommand*) = {
+void (*sSceneCmdHandlersOTR[SCENE_CMD_MAX])(PlayState*, SOH::ISceneCommand*) = {
Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST
Scene_CommandActorList, // SCENE_CMD_ID_ACTOR_LIST
Scene_CommandActorCutsceneCamList, // SCENE_CMD_ID_ACTOR_CUTSCENE_CAM_LIST
@@ -459,8 +458,8 @@ void (*sSceneCmdHandlersOTR[SCENE_CMD_MAX])(PlayState*, LUS::ISceneCommand*) = {
Scene_CommandMiniMapCompassInfo, // SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO
};
-s32 OTRScene_ExecuteCommands(PlayState* play, LUS::Scene* scene) {
- LUS::SceneCommandID cmdId;
+s32 OTRScene_ExecuteCommands(PlayState* play, SOH::Scene* scene) {
+ SOH::SceneCommandID cmdId;
shouldEndSceneCommands = false;
for (int i = 0; i < scene->commands.size(); i++) {
@@ -468,17 +467,17 @@ s32 OTRScene_ExecuteCommands(PlayState* play, LUS::Scene* scene) {
cmdId = sceneCmd->cmdId;
// 2S2H [Port] This opcode is not in the original game. Its a special command for OTRs, for supporting multiple games
- if (cmdId == LUS::SceneCommandID::SetCutscenesMM) {
- cmdId = LUS::SceneCommandID::SetCutscenes;
+ if (cmdId == SOH::SceneCommandID::SetCutscenesMM) {
+ cmdId = SOH::SceneCommandID::SetCutscenes;
}
// 2S2H [Port] shouldEndSceneCommands is set when an alternate header list is found
- if (cmdId == LUS::SceneCommandID::EndMarker || shouldEndSceneCommands) {
+ if (cmdId == SOH::SceneCommandID::EndMarker || shouldEndSceneCommands) {
shouldEndSceneCommands = false;
break;
}
- if (cmdId < LUS::SceneCommandID::SetCutscenesMM) {
+ if (cmdId < SOH::SceneCommandID::SetCutscenesMM) {
sSceneCmdHandlersOTR[(int)cmdId](play, sceneCmd.get());
}
}
@@ -511,7 +510,7 @@ extern "C" s32 OTRfunc_8009728C(PlayState* play, RoomContext* roomCtx, s32 roomN
//&roomCtx->loadQueue, NULL, __FILE__, __LINE__);
printf("File Name %s\n", play->roomList[roomNum].fileName);
auto roomData =
- std::static_pointer_cast<LUS::Scene>(GetResourceByNameHandlingMQ(play->roomList[roomNum].fileName));
+ std::static_pointer_cast<SOH::Scene>(GetResourceByNameHandlingMQ(play->roomList[roomNum].fileName));
roomCtx->status = 1;
roomCtx->activeRoomVram = roomData.get();
diff --git a/mm/CMakeLists.txt b/mm/CMakeLists.txt
index 87bb4c604..96f99eb80 100644
--- a/mm/CMakeLists.txt
+++ b/mm/CMakeLists.txt
@@ -105,7 +105,7 @@ set(PROJECT_NAME mm)
################################################################################
# Sources
################################################################################
-configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/boot/build.c.in ${CMAKE_BINARY_DIR}/build.c @ONLY)
+configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/boot/build.c.in ${CMAKE_CURRENT_SOURCE_DIR}/src/boot/build.c @ONLY)
#configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/boot/properties.h.in ${CMAKE_CURRENT_SOURCE_DIR}/properties.h @ONLY)
#set(Header_Files "resource.h")
@@ -237,7 +237,6 @@ source_group("2s2h\\resource\\importer\\scenecommand" REGULAR_EXPRESSION "2s2h/r
# src (decomp) {{{
file(GLOB_RECURSE src__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.c" "src/*.h")
-list(APPEND src__ ${CMAKE_BINARY_DIR}/build.c)
#list(APPEND src__ ${CMAKE_CURRENT_SOURCE_DIR}/properties.h)
#list(APPEND src__ ${CMAKE_CURRENT_SOURCE_DIR}/Resource.rc)
list(FILTER src__ EXCLUDE REGEX "src/dmadata/*")
@@ -259,7 +258,6 @@ list(FILTER src__ EXCLUDE REGEX "src/libultra/*")
#list(REMOVE_ITEM src__ "src/libultra/gu/us2dex.c")
source_group("src" REGULAR_EXPRESSION "src/*")
-source_group("src\\build" FILES ${CMAKE_BINARY_DIR}/build.c)
source_group("src\\boot" REGULAR_EXPRESSION "src/boot/*")
source_group("src\\buffers" REGULAR_EXPRESSION "src/buffers/*")
source_group("src\\code" REGULAR_EXPRESSION "src/code/*")
@@ -677,15 +675,6 @@ endif()
################################################################################
# Pre build events
################################################################################
-if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
- add_custom_command_if(
- TARGET ${PROJECT_NAME}
- PRE_BUILD
- COMMANDS
- COMMAND $<CONFIG:Debug> copy /b $<SHELL_PATH:${CMAKE_BINARY_DIR}/>build.c +,,
- )
-endif()
-
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
add_custom_command(
TARGET ${PROJECT_NAME}
diff --git a/mm/assets/.gitignore b/mm/assets/.gitignore
index 7e53529fc..fec19cf96 100644
--- a/mm/assets/.gitignore
+++ b/mm/assets/.gitignore
@@ -4,3 +4,6 @@
*.cfg
*.vtx.inc
*.dlist.inc
+
+# Unignore our custom assets
+!custom/**/*
diff --git a/mm/assets/custom/accessibility/texts/filechoose_eng.json b/mm/assets/custom/accessibility/texts/filechoose_eng.json
new file mode 100644
index 000000000..6a634a83a
--- /dev/null
+++ b/mm/assets/custom/accessibility/texts/filechoose_eng.json
@@ -0,0 +1,28 @@
+{
+ "file1": "File 1",
+ "file2": "File 2",
+ "file3": "File 3",
+ "options": "Options",
+ "copy": "Copy",
+ "erase": "Erase",
+ "quit": "Quit",
+ "confirm": "Yes",
+ "end": "End",
+ "hyphen": "Hyphen",
+ "period": "Period",
+ "space": "Space",
+ "backspace": "Backspace",
+ "capital_letter": "Capital $0",
+ "audio_stereo": "Sound - Stereo",
+ "audio_mono": "Sound - Mono",
+ "audio_headset": "Sound - Headset",
+ "audio_surround": "Sound - Surround",
+ "target_switch": "Targeting Mode - Switch",
+ "target_hold": "Targeting Mode - Hold",
+ "language_english": "Language - English",
+ "language_german": "Language - German",
+ "language_french": "Language - French",
+ "quest_sel_vanilla": "Quest - Original",
+ "quest_sel_randomizer": "Quest - Randomizer",
+ "quest_sel_boss_rush": "Quest - Boss Rush"
+}
diff --git a/mm/assets/custom/accessibility/texts/kaleidoscope_eng.json b/mm/assets/custom/accessibility/texts/kaleidoscope_eng.json
new file mode 100644
index 000000000..0c6786a83
--- /dev/null
+++ b/mm/assets/custom/accessibility/texts/kaleidoscope_eng.json
@@ -0,0 +1,18 @@
+{
+ "health": "Health - $0 Hearts",
+ "magic": "Magic - $0",
+ "rupees": "Rupees - $0",
+ "floor": "Floor $0",
+ "basement": "Basement $0",
+ "item_menu": "Select Item",
+ "map_menu": "Map - $0",
+ "quest_menu": "Quest Status",
+ "equip_menu": "Equipment",
+ "overworld": "Overworld",
+ "equipped": "$0 - Equipped",
+ "save_prompt": "Would you like to save?",
+ "game_saved": "Game saved",
+ "game_over": "Game Over",
+ "continue_game": "Continue playing?",
+ "assigned_to": "Assigned to $0"
+}
diff --git a/mm/assets/custom/accessibility/texts/misc_eng.json b/mm/assets/custom/accessibility/texts/misc_eng.json
new file mode 100644
index 000000000..6bff3b328
--- /dev/null
+++ b/mm/assets/custom/accessibility/texts/misc_eng.json
@@ -0,0 +1,24 @@
+{
+ "minutes_plural" : "$0 minutes",
+ "minutes_singular" : "$0 minute",
+ "seconds_plural" : "$0 seconds",
+ "seconds_singular" : "$0 second",
+ "input_button_a": "the A button",
+ "input_button_b": "the B button",
+ "input_button_c": "the C button",
+ "input_button_l": "the L button",
+ "input_button_r": "the R button",
+ "input_button_z": "the Z button",
+ "input_button_c_up": "C Up",
+ "input_button_c_down": "C Down",
+ "input_button_c_left": "C Left",
+ "input_button_c_right": "C Right",
+ "input_analog_stick": "the Analog Stick",
+ "input_d_pad": "the D-Pad",
+ "input_d_pad_up": "D-Pad Up",
+ "input_d_pad_down": "D-Pad Down",
+ "input_d_pad_left": "D-Pad Left",
+ "input_d_pad_right": "D-Pad Right",
+ "yes": "Yes",
+ "no": "No"
+}
diff --git a/mm/assets/custom/accessibility/texts/scenes_eng.json b/mm/assets/custom/accessibility/texts/scenes_eng.json
new file mode 100644
index 000000000..e5b7037dd
--- /dev/null
+++ b/mm/assets/custom/accessibility/texts/scenes_eng.json
@@ -0,0 +1,3 @@
+{
+ "0": ""
+}
diff --git a/mm/assets/custom/fonts/Fipps-Regular.otf b/mm/assets/custom/fonts/Fipps-Regular.otf
new file mode 100644
index 000000000..9334dad59
--- /dev/null
+++ b/mm/assets/custom/fonts/Fipps-Regular.otf
Binary files differ
diff --git a/mm/assets/custom/fonts/PressStart2P-Regular.ttf b/mm/assets/custom/fonts/PressStart2P-Regular.ttf
new file mode 100644
index 000000000..2442affbf
--- /dev/null
+++ b/mm/assets/custom/fonts/PressStart2P-Regular.ttf
Binary files differ
diff --git a/mm/assets/custom/helpers/cosmetics/gEndGrayscaleAndEndDlistDL b/mm/assets/custom/helpers/cosmetics/gEndGrayscaleAndEndDlistDL
new file mode 100644
index 000000000..d7f9ce45c
--- /dev/null
+++ b/mm/assets/custom/helpers/cosmetics/gEndGrayscaleAndEndDlistDL
@@ -0,0 +1,5 @@
+<DisplayList Version="0">
+ <Grayscale Enabled="false"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestFrontTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestFrontTex.rgb5a1.png
new file mode 100644
index 000000000..03dac76dd
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestFrontTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestSideAndTopTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestSideAndTopTex.rgb5a1.png
new file mode 100644
index 000000000..ee03c1343
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gChristmasGreenTreasureChestSideAndTopTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gChristmasRedTreasureChestFrontTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gChristmasRedTreasureChestFrontTex.rgb5a1.png
new file mode 100644
index 000000000..0ea4b9fe2
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gChristmasRedTreasureChestFrontTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gChristmasRedTreasureChestSideAndTopTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gChristmasRedTreasureChestSideAndTopTex.rgb5a1.png
new file mode 100644
index 000000000..ccba6385d
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gChristmasRedTreasureChestSideAndTopTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.png
new file mode 100644
index 000000000..d63811e9c
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.png
new file mode 100644
index 000000000..b2e914b49
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gKeyTreasureChestFrontTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gKeyTreasureChestFrontTex.rgb5a1.png
new file mode 100644
index 000000000..6e012c263
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gKeyTreasureChestFrontTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.png
new file mode 100644
index 000000000..8d320f250
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.png
new file mode 100644
index 000000000..00f0b39e4
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.png b/mm/assets/custom/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.png
new file mode 100644
index 000000000..0a09e2b6f
--- /dev/null
+++ b/mm/assets/custom/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_mag/gTitleBossRushSubtitleTex.rgba32.png b/mm/assets/custom/objects/object_mag/gTitleBossRushSubtitleTex.rgba32.png
new file mode 100644
index 000000000..624a29923
--- /dev/null
+++ b/mm/assets/custom/objects/object_mag/gTitleBossRushSubtitleTex.rgba32.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_mag/gTitleRandomizerSubtitleTex.rgba32.png b/mm/assets/custom/objects/object_mag/gTitleRandomizerSubtitleTex.rgba32.png
new file mode 100644
index 000000000..a61a058a8
--- /dev/null
+++ b/mm/assets/custom/objects/object_mag/gTitleRandomizerSubtitleTex.rgba32.png
Binary files differ
diff --git a/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL
new file mode 100644
index 000000000..966bef206
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL
@@ -0,0 +1,13 @@
+<DisplayList Version="0">
+ <CallDisplayList Path="objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges"/>
+ <CallDisplayList Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0"/>
+ <CallDisplayList Path="objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface"/>
+ <CallDisplayList Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1"/>
+ <PipeSync/>
+ <SetGeometryMode G_LIGHTING="1" />
+ <ClearGeometryMode G_TEXTURE_GEN="1" />
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0 b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0
new file mode 100644
index 000000000..dea47708c
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0
@@ -0,0 +1,58 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="5" V01="3" V02="4"/>
+ <Triangle1 V00="5" V01="4" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="6"/>
+ <Triangle1 V00="7" V01="8" V02="6"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="6" V01="8" V02="1"/>
+ <Triangle1 V00="6" V01="1" V02="3"/>
+ <Triangle1 V00="10" V01="6" V02="3"/>
+ <Triangle1 V00="10" V01="3" V02="11"/>
+ <Triangle1 V00="5" V01="11" V02="3"/>
+ <Triangle1 V00="5" V01="6" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="14" V02="15"/>
+ <LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="0" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="6" V01="0" V02="4"/>
+ <Triangle1 V00="7" V01="0" V02="6"/>
+ <Triangle1 V00="7" V01="6" V02="1"/>
+ <Triangle1 V00="6" V01="8" V02="1"/>
+ <Triangle1 V00="7" V01="1" V02="9"/>
+ <Triangle1 V00="10" V01="9" V02="1"/>
+ <Triangle1 V00="10" V01="1" V02="0"/>
+ <Triangle1 V00="7" V01="10" V02="0"/>
+ <Triangle1 V00="11" V01="12" V02="13"/>
+ <Triangle1 V00="11" V01="13" V02="14"/>
+ <Triangle1 V00="13" V01="15" V02="14"/>
+ <LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="2"/>
+ <Triangle1 V00="2" V01="5" V02="4"/>
+ <Triangle1 V00="2" V01="6" V02="5"/>
+ <Triangle1 V00="7" V01="5" V02="6"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="7" V01="9" V02="10"/>
+ <Triangle1 V00="11" V01="10" V02="9"/>
+ <Triangle1 V00="0" V01="11" V02="9"/>
+ <Triangle1 V00="0" V01="12" V02="11"/>
+ <Triangle1 V00="7" V01="4" V02="5"/>
+ <Triangle1 V00="13" V01="4" V02="5"/>
+ <Triangle1 V00="13" V01="5" V02="6"/>
+ <Triangle1 V00="13" V01="6" V02="14"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="48" Count="4"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1 b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1
new file mode 100644
index 000000000..36be4333f
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1
@@ -0,0 +1,7 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="6"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0 b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0
new file mode 100644
index 000000000..6ca96db30
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0
@@ -0,0 +1,54 @@
+<Vertex Version="0">
+ <Vtx X="883" Y="-475" Z="103" S="344" T="380" R="103" G="6" B="75" A="255"/>
+ <Vtx X="809" Y="-497" Z="100" S="304" T="393" R="1" G="143" B="58" A="255"/>
+ <Vtx X="884" Y="-496" Z="96" S="345" T="393" R="78" G="166" B="46" A="255"/>
+ <Vtx X="856" Y="-477" Z="114" S="328" T="380" R="25" G="227" B="121" A="255"/>
+ <Vtx X="0" Y="945" Z="114" S="-58" T="-321" R="177" G="83" B="55" A="255"/>
+ <Vtx X="0" Y="870" Z="116" S="-58" T="-283" R="221" G="3" B="122" A="255"/>
+ <Vtx X="-856" Y="-477" Z="114" S="-437" T="380" R="231" G="227" B="121" A="255"/>
+ <Vtx X="-883" Y="-475" Z="103" S="-452" T="380" R="153" G="6" B="75" A="255"/>
+ <Vtx X="-809" Y="-497" Z="100" S="-412" T="393" R="255" G="143" B="58" A="255"/>
+ <Vtx X="-884" Y="-496" Z="96" S="-453" T="392" R="178" G="166" B="46" A="255"/>
+ <Vtx X="-817" Y="-464" Z="116" S="-414" T="369" R="254" G="251" B="127" A="255"/>
+ <Vtx X="817" Y="-464" Z="116" S="304" T="369" R="2" G="251" B="127" A="255"/>
+ <Vtx X="883" Y="-475" Z="-106" S="-460" T="380" R="103" G="6" B="181" A="255"/>
+ <Vtx X="884" Y="-496" Z="-99" S="-461" T="393" R="78" G="166" B="210" A="255"/>
+ <Vtx X="809" Y="-497" Z="-103" S="-420" T="393" R="1" G="143" B="198" A="255"/>
+ <Vtx X="856" Y="-477" Z="-117" S="-444" T="380" R="25" G="227" B="135" A="255"/>
+ <Vtx X="-856" Y="-477" Z="-117" S="320" T="380" R="231" G="227" B="135" A="255"/>
+ <Vtx X="856" Y="-477" Z="-117" S="-444" T="380" R="25" G="227" B="135" A="255"/>
+ <Vtx X="809" Y="-497" Z="-103" S="-420" T="393" R="1" G="143" B="198" A="255"/>
+ <Vtx X="-809" Y="-497" Z="-103" S="296" T="393" R="255" G="143" B="198" A="255"/>
+ <Vtx X="-883" Y="-475" Z="-106" S="336" T="380" R="153" G="6" B="181" A="255"/>
+ <Vtx X="-884" Y="-496" Z="-99" S="337" T="392" R="178" G="166" B="210" A="255"/>
+ <Vtx X="0" Y="945" Z="-117" S="-58" T="-321" R="177" G="83" B="201" A="255"/>
+ <Vtx X="0" Y="870" Z="-120" S="-58" T="-283" R="228" G="24" B="134" A="255"/>
+ <Vtx X="883" Y="-475" Z="-106" S="-460" T="380" R="103" G="6" B="181" A="255"/>
+ <Vtx X="817" Y="-464" Z="-120" S="-421" T="369" R="1" G="254" B="129" A="255"/>
+ <Vtx X="-817" Y="-464" Z="-120" S="297" T="369" R="255" G="254" B="129" A="255"/>
+ <Vtx X="-884" Y="-496" Z="-99" S="-149" T="-277" R="178" G="166" B="210" A="255"/>
+ <Vtx X="-809" Y="-497" Z="-103" S="-149" T="-277" R="255" G="143" B="198" A="255"/>
+ <Vtx X="809" Y="-497" Z="-103" S="-149" T="-277" R="1" G="143" B="198" A="255"/>
+ <Vtx X="884" Y="-496" Z="96" S="-149" T="-277" R="78" G="166" B="46" A="255"/>
+ <Vtx X="884" Y="-496" Z="-99" S="-149" T="-277" R="78" G="166" B="210" A="255"/>
+ <Vtx X="884" Y="-496" Z="96" S="-149" T="-277" R="78" G="166" B="46" A="255"/>
+ <Vtx X="884" Y="-496" Z="-99" S="-149" T="-277" R="78" G="166" B="210" A="255"/>
+ <Vtx X="883" Y="-475" Z="-106" S="-149" T="-277" R="103" G="6" B="181" A="255"/>
+ <Vtx X="883" Y="-475" Z="103" S="-149" T="-277" R="103" G="6" B="75" A="255"/>
+ <Vtx X="0" Y="945" Z="114" S="107" T="-277" R="177" G="83" B="55" A="255"/>
+ <Vtx X="0" Y="945" Z="-1" S="107" T="-149" R="169" G="92" B="0" A="255"/>
+ <Vtx X="0" Y="945" Z="-117" S="107" T="-277" R="177" G="83" B="201" A="255"/>
+ <Vtx X="-883" Y="-475" Z="103" S="-149" T="-277" R="153" G="6" B="75" A="255"/>
+ <Vtx X="-883" Y="-475" Z="-106" S="-149" T="-277" R="153" G="6" B="181" A="255"/>
+ <Vtx X="-884" Y="-496" Z="-99" S="-149" T="-277" R="178" G="166" B="210" A="255"/>
+ <Vtx X="-884" Y="-496" Z="96" S="-149" T="-277" R="178" G="166" B="46" A="255"/>
+ <Vtx X="-809" Y="-497" Z="100" S="-149" T="-277" R="255" G="143" B="58" A="255"/>
+ <Vtx X="809" Y="-497" Z="100" S="-149" T="-277" R="1" G="143" B="58" A="255"/>
+ <Vtx X="0" Y="874" Z="-1" S="107" T="-149" R="165" G="0" B="89" A="255"/>
+ <Vtx X="0" Y="870" Z="-120" S="107" T="-277" R="221" G="3" B="134" A="255"/>
+ <Vtx X="0" Y="874" Z="-1" S="235" T="-149" R="0" G="0" B="127" A="255"/>
+ <Vtx X="0" Y="874" Z="-1" S="107" T="-149" R="165" G="0" B="89" A="255"/>
+ <Vtx X="0" Y="874" Z="-1" S="235" T="-149" R="0" G="0" B="127" A="255"/>
+ <Vtx X="0" Y="870" Z="116" S="107" T="-277" R="221" G="3" B="122" A="255"/>
+ <Vtx X="0" Y="945" Z="114" S="107" T="-277" R="177" G="83" B="55" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1 b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1
new file mode 100644
index 000000000..3a653966d
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1
@@ -0,0 +1,8 @@
+<Vertex Version="0">
+ <Vtx X="0" Y="870" Z="-120" S="-280" T="103" R="228" G="24" B="134" A="255"/>
+ <Vtx X="817" Y="-464" Z="-120" S="75" T="-550" R="1" G="254" B="129" A="255"/>
+ <Vtx X="-817" Y="-464" Z="-120" S="438" T="103" R="255" G="254" B="129" A="255"/>
+ <Vtx X="0" Y="870" Z="116" S="-280" T="103" R="221" G="3" B="122" A="255"/>
+ <Vtx X="-817" Y="-464" Z="116" S="438" T="103" R="254" G="251" B="127" A="255"/>
+ <Vtx X="817" Y="-464" Z="116" S="75" T="-550" R="2" G="251" B="127" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges b/mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges
new file mode 100644
index 000000000..52591dfc8
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_completed/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface b/mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface
new file mode 100644
index 000000000..06193ae61
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="2621" T="1311" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_completed/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_completed/noise_tex b/mm/assets/custom/objects/object_triforce_completed/noise_tex
new file mode 100644
index 000000000..a6d6cf945
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_completed/noise_tex
Binary files differ
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL
new file mode 100644
index 000000000..70d08c31d
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL
@@ -0,0 +1,15 @@
+<DisplayList Version="0">
+ <CallDisplayList Path="objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface"/>
+ <CallDisplayList Path="objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0"/>
+ <CallDisplayList Path="objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges"/>
+ <CallDisplayList Path="objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1"/>
+ <CallDisplayList Path="objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge"/>
+ <CallDisplayList Path="objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2"/>
+ <PipeSync/>
+ <SetGeometryMode G_LIGHTING="1" />
+ <ClearGeometryMode G_TEXTURE_GEN="1" />
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0 b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0
new file mode 100644
index 000000000..09e44f1b7
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0
@@ -0,0 +1,17 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="1" V01="3" V02="4"/>
+ <Triangle1 V00="1" V01="4" V02="5"/>
+ <Triangle1 V00="5" V01="4" V02="6"/>
+ <Triangle1 V00="5" V01="6" V02="7"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="10" V02="11"/>
+ <Triangle1 V00="11" V01="10" V02="12"/>
+ <Triangle1 V00="10" V01="13" V02="12"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="14" V02="15"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1 b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1
new file mode 100644
index 000000000..48001e3c3
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1
@@ -0,0 +1,18 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="0" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="7" V02="9"/>
+ <Triangle1 V00="10" V01="11" V02="7"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1" VertexBufferIndex="0" VertexOffset="16" Count="4"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2 b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2
new file mode 100644
index 000000000..e35e34492
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2
@@ -0,0 +1,51 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="2"/>
+ <Triangle1 V00="4" V01="2" V02="5"/>
+ <Triangle1 V00="6" V01="3" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="3"/>
+ <Triangle1 V00="8" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="11"/>
+ <Triangle1 V00="14" V01="13" V02="12"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="6" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="9" V02="11"/>
+ <Triangle1 V00="12" V01="13" V02="9"/>
+ <Triangle1 V00="13" V01="7" V02="9"/>
+ <Triangle1 V00="13" V01="14" V02="7"/>
+ <Triangle1 V00="14" V01="5" V02="7"/>
+ <Triangle1 V00="14" V01="15" V02="5"/>
+ <Triangle1 V00="15" V01="3" V02="5"/>
+ <LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2" VertexBufferIndex="0" VertexOffset="32" Count="15"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="1" V01="3" V02="2"/>
+ <Triangle1 V00="1" V01="4" V02="3"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="4" V01="6" V02="5"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="8" V01="10" V02="9"/>
+ <Triangle1 V00="10" V01="11" V02="9"/>
+ <Triangle1 V00="10" V01="12" V02="11"/>
+ <Triangle1 V00="12" V01="13" V02="11"/>
+ <Triangle1 V00="12" V01="14" V02="13"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0 b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0
new file mode 100644
index 000000000..a86fa98bf
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0
@@ -0,0 +1,18 @@
+<Vertex Version="0">
+ <Vtx X="-123" Y="756" Z="-317" S="179" T="369" R="53" G="49" B="151" A="255"/>
+ <Vtx X="-309" Y="40" Z="-317" S="236" T="343" R="203" G="242" B="141" A="255"/>
+ <Vtx X="-419" Y="165" Z="-317" S="226" T="369" R="216" G="236" B="137" A="255"/>
+ <Vtx X="153" Y="372" Z="-317" S="212" T="298" R="82" G="29" B="163" A="255"/>
+ <Vtx X="135" Y="39" Z="-317" S="260" T="272" R="38" G="25" B="137" A="255"/>
+ <Vtx X="-283" Y="-340" Z="-317" S="287" T="307" R="201" G="193" B="160" A="255"/>
+ <Vtx X="507" Y="-162" Z="-317" S="260" T="203" R="70" G="41" B="158" A="255"/>
+ <Vtx X="607" Y="-764" Z="-317" S="290" T="170" R="16" G="184" B="152" A="255"/>
+ <Vtx X="-123" Y="756" Z="317" S="179" T="369" R="53" G="49" B="105" A="255"/>
+ <Vtx X="-419" Y="165" Z="317" S="226" T="369" R="216" G="236" B="119" A="255"/>
+ <Vtx X="-309" Y="40" Z="317" S="236" T="343" R="203" G="242" B="115" A="255"/>
+ <Vtx X="153" Y="372" Z="317" S="212" T="298" R="82" G="29" B="93" A="255"/>
+ <Vtx X="135" Y="39" Z="317" S="260" T="272" R="38" G="25" B="119" A="255"/>
+ <Vtx X="-283" Y="-340" Z="317" S="287" T="307" R="201" G="193" B="96" A="255"/>
+ <Vtx X="607" Y="-764" Z="317" S="290" T="170" R="16" G="184" B="104" A="255"/>
+ <Vtx X="507" Y="-162" Z="317" S="260" T="203" R="70" G="41" B="98" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1 b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1
new file mode 100644
index 000000000..230fbb7f8
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1
@@ -0,0 +1,22 @@
+<Vertex Version="0">
+ <Vtx X="-182" Y="839" Z="-280" S="115" T="0" R="226" G="65" B="151" A="255"/>
+ <Vtx X="-123" Y="756" Z="-317" S="103" T="13" R="53" G="49" B="151" A="255"/>
+ <Vtx X="-419" Y="165" Z="-317" S="127" T="56" R="216" G="236" B="137" A="255"/>
+ <Vtx X="-482" Y="237" Z="-280" S="140" T="45" R="165" G="2" B="167" A="255"/>
+ <Vtx X="-202" Y="867" Z="-226" S="120" T="-4" R="146" G="62" B="241" A="255"/>
+ <Vtx X="-507" Y="266" Z="-224" S="145" T="41" R="141" G="52" B="242" A="255"/>
+ <Vtx X="-507" Y="266" Z="-224" S="-26" T="-277" R="141" G="52" B="242" A="255"/>
+ <Vtx X="-202" Y="867" Z="0" S="-9" T="-207" R="142" G="57" B="0" A="255"/>
+ <Vtx X="-202" Y="867" Z="-226" S="-9" T="-277" R="146" G="62" B="241" A="255"/>
+ <Vtx X="-507" Y="266" Z="0" S="-26" T="-215" R="142" G="57" B="0" A="255"/>
+ <Vtx X="-507" Y="266" Z="224" S="-26" T="-277" R="141" G="52" B="14" A="255"/>
+ <Vtx X="-202" Y="867" Z="226" S="-9" T="-277" R="146" G="62" B="15" A="255"/>
+ <Vtx X="-182" Y="839" Z="280" S="115" T="0" R="226" G="65" B="105" A="255"/>
+ <Vtx X="-419" Y="165" Z="317" S="127" T="56" R="216" G="236" B="119" A="255"/>
+ <Vtx X="-123" Y="756" Z="317" S="103" T="13" R="53" G="49" B="105" A="255"/>
+ <Vtx X="-482" Y="237" Z="280" S="140" T="45" R="165" G="2" B="89" A="255"/>
+ <Vtx X="-202" Y="867" Z="226" S="120" T="-4" R="146" G="62" B="15" A="255"/>
+ <Vtx X="-482" Y="237" Z="280" S="140" T="45" R="165" G="2" B="89" A="255"/>
+ <Vtx X="-182" Y="839" Z="280" S="115" T="0" R="226" G="65" B="105" A="255"/>
+ <Vtx X="-507" Y="266" Z="224" S="145" T="41" R="141" G="52" B="14" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2 b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2
new file mode 100644
index 000000000..86d123825
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2
@@ -0,0 +1,49 @@
+<Vertex Version="0">
+ <Vtx X="-182" Y="839" Z="-280" S="-14" T="2292" R="226" G="65" B="151" A="255"/>
+ <Vtx X="-202" Y="867" Z="-226" S="-9" T="2332" R="146" G="62" B="241" A="255"/>
+ <Vtx X="-202" Y="867" Z="0" S="1001" T="2332" R="103" G="74" B="0" A="255"/>
+ <Vtx X="-182" Y="839" Z="0" S="1001" T="2292" R="103" G="74" B="0" A="255"/>
+ <Vtx X="-182" Y="839" Z="280" S="-14" T="2292" R="226" G="65" B="105" A="255"/>
+ <Vtx X="-202" Y="867" Z="226" S="-9" T="2332" R="146" G="62" B="15" A="255"/>
+ <Vtx X="-123" Y="756" Z="317" S="-16" T="2174" R="53" G="49" B="105" A="255"/>
+ <Vtx X="-123" Y="756" Z="0" S="1001" T="2174" R="103" G="74" B="0" A="255"/>
+ <Vtx X="153" Y="372" Z="317" S="-16" T="1624" R="82" G="29" B="93" A="255"/>
+ <Vtx X="153" Y="372" Z="0" S="1001" T="1624" R="120" G="43" B="0" A="255"/>
+ <Vtx X="135" Y="39" Z="317" S="-16" T="1237" R="38" G="25" B="119" A="255"/>
+ <Vtx X="135" Y="39" Z="0" S="1001" T="1237" R="106" G="70" B="0" A="255"/>
+ <Vtx X="507" Y="-162" Z="317" S="-16" T="746" R="70" G="41" B="98" A="255"/>
+ <Vtx X="507" Y="-162" Z="0" S="1001" T="746" R="110" G="64" B="0" A="255"/>
+ <Vtx X="607" Y="-764" Z="317" S="-16" T="428" R="16" G="184" B="104" A="255"/>
+ <Vtx X="607" Y="-764" Z="0" S="1001" T="428" R="28" G="132" B="0" A="255"/>
+ <Vtx X="-283" Y="-340" Z="317" S="-16" T="-548" R="201" G="193" B="96" A="255"/>
+ <Vtx X="607" Y="-764" Z="0" S="1001" T="428" R="28" G="132" B="0" A="255"/>
+ <Vtx X="607" Y="-764" Z="317" S="-16" T="428" R="16" G="184" B="104" A="255"/>
+ <Vtx X="-283" Y="-340" Z="0" S="1001" T="-548" R="172" G="160" B="0" A="255"/>
+ <Vtx X="-309" Y="40" Z="317" S="-16" T="-991" R="203" G="242" B="115" A="255"/>
+ <Vtx X="-309" Y="40" Z="0" S="1001" T="-991" R="133" G="223" B="0" A="255"/>
+ <Vtx X="-419" Y="165" Z="317" S="-16" T="-1185" R="216" G="236" B="119" A="255"/>
+ <Vtx X="-419" Y="165" Z="0" S="1001" T="-1185" R="160" G="172" B="0" A="255"/>
+ <Vtx X="-482" Y="237" Z="280" S="-14" T="-1296" R="165" G="2" B="89" A="255"/>
+ <Vtx X="-482" Y="237" Z="0" S="1001" T="-1296" R="160" G="172" B="0" A="255"/>
+ <Vtx X="-507" Y="266" Z="224" S="-8" T="-1340" R="141" G="52" B="14" A="255"/>
+ <Vtx X="-507" Y="266" Z="0" S="1001" T="-1340" R="160" G="172" B="0" A="255"/>
+ <Vtx X="-507" Y="266" Z="-224" S="-8" T="-1340" R="141" G="52" B="242" A="255"/>
+ <Vtx X="-482" Y="237" Z="-280" S="-14" T="-1296" R="165" G="2" B="167" A="255"/>
+ <Vtx X="-419" Y="165" Z="-317" S="-16" T="-1185" R="216" G="236" B="137" A="255"/>
+ <Vtx X="-309" Y="40" Z="-317" S="-16" T="-991" R="203" G="242" B="141" A="255"/>
+ <Vtx X="-309" Y="40" Z="-317" S="-16" T="-991" R="203" G="242" B="141" A="255"/>
+ <Vtx X="-283" Y="-340" Z="-317" S="-16" T="-548" R="201" G="193" B="160" A="255"/>
+ <Vtx X="-283" Y="-340" Z="0" S="1001" T="-548" R="172" G="160" B="0" A="255"/>
+ <Vtx X="607" Y="-764" Z="0" S="1001" T="428" R="28" G="132" B="0" A="255"/>
+ <Vtx X="607" Y="-764" Z="-317" S="-16" T="428" R="16" G="184" B="152" A="255"/>
+ <Vtx X="507" Y="-162" Z="0" S="1001" T="746" R="110" G="64" B="0" A="255"/>
+ <Vtx X="507" Y="-162" Z="-317" S="-16" T="746" R="70" G="41" B="158" A="255"/>
+ <Vtx X="135" Y="39" Z="0" S="1001" T="1237" R="106" G="70" B="0" A="255"/>
+ <Vtx X="135" Y="39" Z="-317" S="-16" T="1237" R="38" G="25" B="137" A="255"/>
+ <Vtx X="153" Y="372" Z="0" S="1001" T="1624" R="120" G="43" B="0" A="255"/>
+ <Vtx X="153" Y="372" Z="-317" S="-16" T="1624" R="82" G="29" B="163" A="255"/>
+ <Vtx X="-123" Y="756" Z="0" S="1001" T="2174" R="103" G="74" B="0" A="255"/>
+ <Vtx X="-123" Y="756" Z="-317" S="-16" T="2174" R="53" G="49" B="151" A="255"/>
+ <Vtx X="-182" Y="839" Z="0" S="1001" T="2292" R="103" G="74" B="0" A="255"/>
+ <Vtx X="-182" Y="839" Z="-280" S="-14" T="2292" R="226" G="65" B="151" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge b/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge
new file mode 100644
index 000000000..f62631793
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_0/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges b/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges
new file mode 100644
index 000000000..9355e7094
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_0/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface b/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface
new file mode 100644
index 000000000..e863b31c5
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="3932" T="1966" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_0/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_0/noise_tex b/mm/assets/custom/objects/object_triforce_piece_0/noise_tex
new file mode 100644
index 000000000..a6d6cf945
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_0/noise_tex
Binary files differ
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL
new file mode 100644
index 000000000..50a9264c6
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL
@@ -0,0 +1,13 @@
+<DisplayList Version="0">
+ <CallDisplayList Path="objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface"/>
+ <CallDisplayList Path="objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0"/>
+ <CallDisplayList Path="objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge"/>
+ <CallDisplayList Path="objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1"/>
+ <PipeSync/>
+ <SetGeometryMode G_LIGHTING="1" />
+ <ClearGeometryMode G_TEXTURE_GEN="1" />
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0 b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0
new file mode 100644
index 000000000..5f33f7347
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0
@@ -0,0 +1,20 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="2" V02="1"/>
+ <Triangle1 V00="4" V01="2" V02="3"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="4" V01="6" V02="2"/>
+ <Triangle1 V00="6" V01="4" V02="7"/>
+ <Triangle1 V00="4" V01="8" V02="7"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="12" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="10" V02="13"/>
+ <Triangle1 V00="10" V01="14" V02="13"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="5"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="4"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1 b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1
new file mode 100644
index 000000000..43df6492b
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1
@@ -0,0 +1,25 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="8" V02="9"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="12" V02="13"/>
+ <LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1" VertexBufferIndex="0" VertexOffset="14" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="6" V02="7"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="9" V01="11" V02="12"/>
+ <Triangle1 V00="9" V01="12" V02="13"/>
+ <LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1" VertexBufferIndex="0" VertexOffset="28" Count="4"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0 b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0
new file mode 100644
index 000000000..e078b8246
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0
@@ -0,0 +1,23 @@
+<Vertex Version="0">
+ <Vtx X="-541" Y="-249" Z="-296" S="-131" T="247" R="216" G="164" B="177" A="255"/>
+ <Vtx X="-905" Y="183" Z="-296" S="-95" T="240" R="166" G="44" B="178" A="255"/>
+ <Vtx X="-88" Y="-225" Z="-296" S="-174" T="295" R="232" G="219" B="137" A="255"/>
+ <Vtx X="-138" Y="176" Z="-296" S="-134" T="288" R="243" G="77" B="156" A="255"/>
+ <Vtx X="218" Y="94" Z="-296" S="-193" T="311" R="65" G="1" B="147" A="255"/>
+ <Vtx X="437" Y="375" Z="-296" S="-173" T="336" R="82" G="59" B="178" A="255"/>
+ <Vtx X="-22" Y="-366" Z="-296" S="-193" T="289" R="225" G="156" B="183" A="255"/>
+ <Vtx X="226" Y="-222" Z="-296" S="-208" T="305" R="19" G="161" B="174" A="255"/>
+ <Vtx X="514" Y="-258" Z="-296" S="-222" T="321" R="94" G="205" B="187" A="255"/>
+ <Vtx X="-541" Y="-249" Z="296" S="-131" T="247" R="216" G="164" B="79" A="255"/>
+ <Vtx X="-88" Y="-225" Z="296" S="-174" T="295" R="222" G="199" B="108" A="255"/>
+ <Vtx X="-905" Y="183" Z="296" S="-95" T="240" R="165" G="42" B="79" A="255"/>
+ <Vtx X="-138" Y="176" Z="296" S="-134" T="288" R="245" G="98" B="81" A="255"/>
+ <Vtx X="218" Y="94" Z="296" S="-193" T="311" R="65" G="1" B="109" A="255"/>
+ <Vtx X="-22" Y="-366" Z="296" S="-193" T="289" R="225" G="156" B="73" A="255"/>
+ <Vtx X="226" Y="-222" Z="296" S="-208" T="305" R="19" G="161" B="82" A="255"/>
+ <Vtx X="226" Y="-222" Z="296" S="-208" T="305" R="19" G="161" B="82" A="255"/>
+ <Vtx X="514" Y="-258" Z="296" S="-222" T="321" R="94" G="205" B="69" A="255"/>
+ <Vtx X="218" Y="94" Z="296" S="-193" T="311" R="65" G="1" B="109" A="255"/>
+ <Vtx X="437" Y="375" Z="296" S="-173" T="336" R="81" G="60" B="77" A="255"/>
+ <Vtx X="-138" Y="176" Z="296" S="-134" T="288" R="245" G="98" B="81" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1 b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1
new file mode 100644
index 000000000..e0460194d
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1
@@ -0,0 +1,34 @@
+<Vertex Version="0">
+ <Vtx X="514" Y="-258" Z="296" S="1210" T="1071" R="94" G="205" B="69" A="255"/>
+ <Vtx X="226" Y="-222" Z="-296" S="-240" T="507" R="19" G="161" B="174" A="255"/>
+ <Vtx X="514" Y="-258" Z="-296" S="-240" T="1071" R="94" G="205" B="187" A="255"/>
+ <Vtx X="226" Y="-222" Z="296" S="1210" T="507" R="19" G="161" B="82" A="255"/>
+ <Vtx X="-22" Y="-366" Z="-296" S="-240" T="-58" R="225" G="156" B="183" A="255"/>
+ <Vtx X="-22" Y="-366" Z="296" S="1210" T="-58" R="225" G="156" B="73" A="255"/>
+ <Vtx X="-22" Y="-366" Z="296" S="1210" T="749" R="225" G="156" B="73" A="255"/>
+ <Vtx X="-88" Y="-225" Z="296" S="1210" T="261" R="222" G="199" B="108" A="255"/>
+ <Vtx X="-88" Y="-225" Z="-296" S="-240" T="261" R="232" G="219" B="137" A="255"/>
+ <Vtx X="-22" Y="-366" Z="-296" S="-240" T="749" R="225" G="156" B="183" A="255"/>
+ <Vtx X="-88" Y="-225" Z="296" S="1210" T="1064" R="222" G="199" B="108" A="255"/>
+ <Vtx X="-541" Y="-249" Z="296" S="1210" T="-61" R="216" G="164" B="79" A="255"/>
+ <Vtx X="-541" Y="-249" Z="-296" S="-240" T="-61" R="216" G="164" B="177" A="255"/>
+ <Vtx X="-88" Y="-225" Z="-296" S="-240" T="1064" R="232" G="219" B="137" A="255"/>
+ <Vtx X="437" Y="375" Z="296" S="22" T="-67" R="81" G="60" B="77" A="255"/>
+ <Vtx X="218" Y="94" Z="296" S="22" T="1071" R="65" G="1" B="109" A="255"/>
+ <Vtx X="218" Y="94" Z="-296" S="965" T="1071" R="65" G="1" B="147" A="255"/>
+ <Vtx X="437" Y="375" Z="-296" S="965" T="-67" R="82" G="59" B="178" A="255"/>
+ <Vtx X="218" Y="94" Z="296" S="-231" T="-65" R="65" G="1" B="109" A="255"/>
+ <Vtx X="514" Y="-258" Z="296" S="-231" T="1071" R="94" G="205" B="69" A="255"/>
+ <Vtx X="514" Y="-258" Z="-296" S="966" T="1071" R="94" G="205" B="187" A="255"/>
+ <Vtx X="218" Y="94" Z="-296" S="966" T="-65" R="65" G="1" B="147" A="255"/>
+ <Vtx X="-905" Y="183" Z="296" S="-231" T="-622" R="165" G="42" B="79" A="255"/>
+ <Vtx X="-138" Y="176" Z="-296" S="1228" T="507" R="243" G="77" B="156" A="255"/>
+ <Vtx X="-905" Y="183" Z="-296" S="1228" T="-622" R="166" G="44" B="178" A="255"/>
+ <Vtx X="-138" Y="176" Z="296" S="-231" T="507" R="245" G="98" B="81" A="255"/>
+ <Vtx X="437" Y="375" Z="296" S="-231" T="1636" R="81" G="60" B="77" A="255"/>
+ <Vtx X="437" Y="375" Z="-296" S="1228" T="1636" R="82" G="59" B="178" A="255"/>
+ <Vtx X="-541" Y="-249" Z="296" S="1210" T="1068" R="216" G="164" B="79" A="255"/>
+ <Vtx X="-905" Y="183" Z="296" S="1210" T="-59" R="165" G="42" B="79" A="255"/>
+ <Vtx X="-905" Y="183" Z="-296" S="-240" T="-59" R="166" G="44" B="178" A="255"/>
+ <Vtx X="-541" Y="-249" Z="-296" S="-240" T="1068" R="216" G="164" B="177" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge b/mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge
new file mode 100644
index 000000000..b9e61293d
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_1/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface b/mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface
new file mode 100644
index 000000000..5f8dc51f9
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="1984" T="1984" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_1/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_1/noise_tex b/mm/assets/custom/objects/object_triforce_piece_1/noise_tex
new file mode 100644
index 000000000..a6d6cf945
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_1/noise_tex
Binary files differ
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL
new file mode 100644
index 000000000..5213cd53c
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL
@@ -0,0 +1,15 @@
+<DisplayList Version="0">
+ <CallDisplayList Path="objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges"/>
+ <CallDisplayList Path="objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0"/>
+ <CallDisplayList Path="objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface"/>
+ <CallDisplayList Path="objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1"/>
+ <CallDisplayList Path="objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge"/>
+ <CallDisplayList Path="objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2"/>
+ <PipeSync/>
+ <SetGeometryMode G_LIGHTING="1" />
+ <ClearGeometryMode G_TEXTURE_GEN="1" />
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0 b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0
new file mode 100644
index 000000000..b54e182d5
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0
@@ -0,0 +1,29 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="15"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="5" V01="6" V02="7"/>
+ <Triangle1 V00="5" V01="8" V02="6"/>
+ <Triangle1 V00="5" V01="9" V02="8"/>
+ <Triangle1 V00="5" V01="10" V02="9"/>
+ <Triangle1 V00="0" V01="11" V02="12"/>
+ <Triangle1 V00="0" V01="12" V02="13"/>
+ <Triangle1 V00="13" V01="12" V02="14"/>
+ <LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0" VertexBufferIndex="0" VertexOffset="15" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <Triangle1 V00="5" V01="6" V02="7"/>
+ <Triangle1 V00="5" V01="7" V02="8"/>
+ <Triangle1 V00="8" V01="7" V02="9"/>
+ <Triangle1 V00="5" V01="10" V02="11"/>
+ <Triangle1 V00="5" V01="12" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="10"/>
+ <LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0" VertexBufferIndex="0" VertexOffset="29" Count="5"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="2" V01="4" V02="3"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1 b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1
new file mode 100644
index 000000000..00a32bfd8
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1
@@ -0,0 +1,11 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="10"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="5" V01="6" V02="7"/>
+ <Triangle1 V00="8" V01="5" V02="7"/>
+ <Triangle1 V00="9" V01="5" V02="8"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2 b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2
new file mode 100644
index 000000000..0993c1c1e
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2
@@ -0,0 +1,19 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="3" V01="2" V02="4"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="5" V01="4" V02="6"/>
+ <Triangle1 V00="5" V01="6" V02="7"/>
+ <Triangle1 V00="7" V01="6" V02="8"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="9" V01="8" V02="10"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="11" V01="10" V02="12"/>
+ <Triangle1 V00="11" V01="12" V02="13"/>
+ <Triangle1 V00="13" V01="12" V02="14"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0 b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0
new file mode 100644
index 000000000..bf7dfcac6
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0
@@ -0,0 +1,36 @@
+<Vertex Version="0">
+ <Vtx X="-21" Y="362" Z="-291" S="-58" T="-283" R="0" G="5" B="129" A="255"/>
+ <Vtx X="925" Y="-641" Z="-263" S="-126" T="-197" R="35" G="218" B="140" A="255"/>
+ <Vtx X="789" Y="-680" Z="-291" S="-110" T="-189" R="250" G="168" B="164" A="255"/>
+ <Vtx X="-20" Y="545" Z="-263" S="-58" T="-321" R="96" G="79" B="228" A="255"/>
+ <Vtx X="953" Y="-636" Z="-258" S="-129" T="-198" R="100" G="79" B="253" A="255"/>
+ <Vtx X="-20" Y="372" Z="0" S="107" T="-149" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-20" Y="545" Z="-263" S="107" T="-277" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-21" Y="362" Z="-291" S="107" T="-277" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-20" Y="545" Z="0" S="107" T="-149" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-20" Y="545" Z="263" S="107" T="-277" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-21" Y="362" Z="291" S="107" T="-277" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-641" Y="-449" Z="-291" S="-35" T="-239" R="199" G="189" B="164" A="255"/>
+ <Vtx X="-715" Y="-328" Z="-263" S="-26" T="-261" R="184" G="237" B="153" A="255"/>
+ <Vtx X="-20" Y="545" Z="-263" S="-58" T="-321" R="159" G="78" B="229" A="255"/>
+ <Vtx X="-723" Y="-322" Z="-261" S="-25" T="-262" R="156" G="79" B="255" A="255"/>
+ <Vtx X="-723" Y="-322" Z="-261" S="85" T="-277" R="156" G="79" B="255" A="255"/>
+ <Vtx X="-723" Y="-322" Z="261" S="85" T="-277" R="156" G="79" B="1" A="255"/>
+ <Vtx X="-20" Y="545" Z="263" S="107" T="-277" R="159" G="78" B="27" A="255"/>
+ <Vtx X="-20" Y="545" Z="0" S="107" T="-149" R="157" G="80" B="0" A="255"/>
+ <Vtx X="-20" Y="545" Z="-263" S="107" T="-277" R="159" G="78" B="229" A="255"/>
+ <Vtx X="-21" Y="362" Z="291" S="-58" T="-283" R="0" G="5" B="127" A="255"/>
+ <Vtx X="789" Y="-680" Z="291" S="-110" T="-189" R="250" G="168" B="92" A="255"/>
+ <Vtx X="925" Y="-641" Z="263" S="-126" T="-197" R="35" G="218" B="116" A="255"/>
+ <Vtx X="-20" Y="545" Z="263" S="-58" T="-321" R="96" G="79" B="28" A="255"/>
+ <Vtx X="953" Y="-636" Z="258" S="-129" T="-198" R="100" G="79" B="3" A="255"/>
+ <Vtx X="-715" Y="-328" Z="263" S="-26" T="-261" R="184" G="237" B="103" A="255"/>
+ <Vtx X="-641" Y="-449" Z="291" S="-35" T="-239" R="199" G="189" B="92" A="255"/>
+ <Vtx X="-20" Y="545" Z="263" S="-58" T="-321" R="159" G="78" B="27" A="255"/>
+ <Vtx X="-723" Y="-322" Z="261" S="-25" T="-262" R="156" G="79" B="1" A="255"/>
+ <Vtx X="-20" Y="545" Z="-263" S="107" T="-277" R="96" G="79" B="228" A="255"/>
+ <Vtx X="-20" Y="545" Z="0" S="107" T="-149" R="98" G="81" B="0" A="255"/>
+ <Vtx X="-20" Y="545" Z="263" S="107" T="-277" R="96" G="79" B="28" A="255"/>
+ <Vtx X="953" Y="-636" Z="-258" S="62" T="-277" R="100" G="79" B="253" A="255"/>
+ <Vtx X="953" Y="-636" Z="258" S="62" T="-277" R="100" G="79" B="3" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1 b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1
new file mode 100644
index 000000000..e3237ab21
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1
@@ -0,0 +1,12 @@
+<Vertex Version="0">
+ <Vtx X="-21" Y="362" Z="-291" S="-280" T="103" R="0" G="5" B="129" A="255"/>
+ <Vtx X="-179" Y="-722" Z="-291" S="-196" T="52" R="246" G="164" B="169" A="255"/>
+ <Vtx X="-641" Y="-449" Z="-291" S="-232" T="103" R="199" G="189" B="164" A="255"/>
+ <Vtx X="104" Y="-535" Z="-291" S="-236" T="55" R="4" G="156" B="178" A="255"/>
+ <Vtx X="789" Y="-680" Z="-291" S="-229" T="9" R="250" G="168" B="164" A="255"/>
+ <Vtx X="-21" Y="362" Z="291" S="-280" T="103" R="0" G="5" B="127" A="255"/>
+ <Vtx X="-641" Y="-449" Z="291" S="-232" T="103" R="199" G="189" B="92" A="255"/>
+ <Vtx X="-179" Y="-722" Z="291" S="-196" T="52" R="246" G="164" B="87" A="255"/>
+ <Vtx X="104" Y="-535" Z="291" S="-236" T="55" R="4" G="156" B="78" A="255"/>
+ <Vtx X="789" Y="-680" Z="291" S="-229" T="9" R="250" G="168" B="92" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2 b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2
new file mode 100644
index 000000000..ec4e73700
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2
@@ -0,0 +1,18 @@
+<Vertex Version="0">
+ <Vtx X="-723" Y="-322" Z="261" S="1659" T="-1411" R="156" G="79" B="1" A="255"/>
+ <Vtx X="-723" Y="-322" Z="-261" S="-669" T="-1411" R="156" G="79" B="255" A="255"/>
+ <Vtx X="-715" Y="-328" Z="-263" S="-683" T="-1373" R="184" G="237" B="153" A="255"/>
+ <Vtx X="-715" Y="-328" Z="263" S="1668" T="-1373" R="184" G="237" B="103" A="255"/>
+ <Vtx X="-641" Y="-449" Z="-291" S="-703" T="-945" R="199" G="189" B="164" A="255"/>
+ <Vtx X="-641" Y="-449" Z="291" S="1688" T="-945" R="199" G="189" B="92" A="255"/>
+ <Vtx X="-179" Y="-722" Z="-291" S="-703" T="289" R="246" G="164" B="169" A="255"/>
+ <Vtx X="-179" Y="-722" Z="291" S="1688" T="289" R="246" G="164" B="87" A="255"/>
+ <Vtx X="104" Y="-535" Z="-291" S="-703" T="1094" R="4" G="156" B="178" A="255"/>
+ <Vtx X="104" Y="-535" Z="291" S="1688" T="1094" R="4" G="156" B="78" A="255"/>
+ <Vtx X="789" Y="-680" Z="-291" S="-703" T="2016" R="250" G="168" B="164" A="255"/>
+ <Vtx X="789" Y="-680" Z="291" S="1688" T="2016" R="250" G="168" B="92" A="255"/>
+ <Vtx X="925" Y="-641" Z="-263" S="-683" T="2363" R="35" G="218" B="140" A="255"/>
+ <Vtx X="925" Y="-641" Z="263" S="1668" T="2363" R="35" G="218" B="116" A="255"/>
+ <Vtx X="953" Y="-636" Z="-258" S="-665" T="2403" R="100" G="79" B="253" A="255"/>
+ <Vtx X="953" Y="-636" Z="258" S="1649" T="2403" R="100" G="79" B="3" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge b/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge
new file mode 100644
index 000000000..c222fe68d
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_2/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges b/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges
new file mode 100644
index 000000000..5968068f5
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_2/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface b/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface
new file mode 100644
index 000000000..d903f00bb
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
+ <ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
+ <Texture S="2621" T="1311" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_triforce_piece_2/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/objects/object_triforce_piece_2/noise_tex b/mm/assets/custom/objects/object_triforce_piece_2/noise_tex
new file mode 100644
index 000000000..a6d6cf945
--- /dev/null
+++ b/mm/assets/custom/objects/object_triforce_piece_2/noise_tex
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/ABtn.png b/mm/assets/custom/textures/buttons/ABtn.png
new file mode 100644
index 000000000..c1b06571c
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/ABtn.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/BBtn.png b/mm/assets/custom/textures/buttons/BBtn.png
new file mode 100644
index 000000000..99b1197c9
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/BBtn.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/CDown.png b/mm/assets/custom/textures/buttons/CDown.png
new file mode 100644
index 000000000..741188eaf
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/CDown.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/CLeft.png b/mm/assets/custom/textures/buttons/CLeft.png
new file mode 100644
index 000000000..5e26a2067
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/CLeft.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/CRight.png b/mm/assets/custom/textures/buttons/CRight.png
new file mode 100644
index 000000000..9e6180639
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/CRight.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/CUp.png b/mm/assets/custom/textures/buttons/CUp.png
new file mode 100644
index 000000000..6c0e29d2d
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/CUp.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/LBtn.png b/mm/assets/custom/textures/buttons/LBtn.png
new file mode 100644
index 000000000..2e0a8f00c
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/LBtn.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/RBtn.png b/mm/assets/custom/textures/buttons/RBtn.png
new file mode 100644
index 000000000..c255643c3
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/RBtn.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/StartBtn.png b/mm/assets/custom/textures/buttons/StartBtn.png
new file mode 100644
index 000000000..c3e08dc36
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/StartBtn.png
Binary files differ
diff --git a/mm/assets/custom/textures/buttons/ZBtn.png b/mm/assets/custom/textures/buttons/ZBtn.png
new file mode 100644
index 000000000..def8d9a6d
--- /dev/null
+++ b/mm/assets/custom/textures/buttons/ZBtn.png
Binary files differ
diff --git a/mm/assets/custom/textures/icons/gIcon.png b/mm/assets/custom/textures/icons/gIcon.png
new file mode 100644
index 000000000..e81a0fbce
--- /dev/null
+++ b/mm/assets/custom/textures/icons/gIcon.png
Binary files differ
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/SoHShiny b/mm/assets/custom/textures/nintendo_rogo_static/SoHShiny
new file mode 100644
index 000000000..5e5c7b52b
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/SoHShiny
Binary files differ
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL
new file mode 100644
index 000000000..5e5435d84
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_003"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/gShipLogoDL_tri_0"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_003"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_002"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/gShipLogoDL_tri_1"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_002"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/gShipLogoDL_tri_2"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_001"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/gShipLogoDL_tri_3"/>
+ <CallDisplayList Path="textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_001"/>
+ <PipeSync/>
+ <SetGeometryMode G_LIGHTING="1" />
+ <ClearGeometryMode G_TEXTURE_GEN="1" />
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_0 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_0
new file mode 100644
index 000000000..2986de72b
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_0
@@ -0,0 +1,241 @@
+<DisplayList Version="0">
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="3" V01="6" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="7" V01="9" V02="10"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="10" V02="11"/>
+ <Triangle1 V00="11" V01="13" V02="12"/>
+ <Triangle1 V00="11" V01="14" V02="13"/>
+ <Triangle1 V00="11" V01="15" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="7" V01="10" V02="8"/>
+ <Triangle1 V00="10" V01="11" V02="8"/>
+ <Triangle1 V00="10" V01="12" V02="11"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="3" V01="6" V02="4"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="7" V01="10" V02="8"/>
+ <Triangle1 V00="11" V01="8" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="48" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="4" V01="7" V02="8"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="13" V02="11"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="62" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="78" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="7" V01="8" V02="5"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="94" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="110" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="9" V02="7"/>
+ <Triangle1 V00="9" V01="10" V02="7"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="11" V01="12" V02="10"/>
+ <Triangle1 V00="11" V01="13" V02="12"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="124" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="140" Count="15"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="1" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="6" V01="5" V02="3"/>
+ <Triangle1 V00="7" V01="6" V02="3"/>
+ <Triangle1 V00="7" V01="8" V02="6"/>
+ <Triangle1 V00="6" V01="9" V02="5"/>
+ <Triangle1 V00="5" V01="9" V02="10"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="10" V01="12" V02="5"/>
+ <Triangle1 V00="5" V01="12" V02="13"/>
+ <Triangle1 V00="4" V01="5" V02="13"/>
+ <Triangle1 V00="13" V01="14" V02="4"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="155" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="171" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="0" V01="5" V02="4"/>
+ <Triangle1 V00="0" V01="6" V02="5"/>
+ <Triangle1 V00="4" V01="7" V02="3"/>
+ <Triangle1 V00="8" V01="7" V02="4"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="9" V02="8"/>
+ <Triangle1 V00="8" V01="11" V02="10"/>
+ <Triangle1 V00="8" V01="12" V02="11"/>
+ <Triangle1 V00="10" V01="13" V02="9"/>
+ <Triangle1 V00="14" V01="13" V02="10"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="187" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="2" V01="4" V02="3"/>
+ <Triangle1 V00="0" V01="5" V02="1"/>
+ <Triangle1 V00="6" V01="5" V02="0"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="11" V02="8"/>
+ <Triangle1 V00="12" V01="13" V02="11"/>
+ <Triangle1 V00="14" V01="13" V02="12"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="203" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="0" V01="4" V02="3"/>
+ <Triangle1 V00="0" V01="5" V02="4"/>
+ <Triangle1 V00="5" V01="6" V02="4"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="6" V02="7"/>
+ <Triangle1 V00="8" V01="9" V02="6"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="12" V01="13" V02="10"/>
+ <Triangle1 V00="13" V01="14" V02="10"/>
+ <Triangle1 V00="15" V01="14" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="219" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="3" V02="5"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="7" V01="8" V02="6"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="13" V02="11"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="233" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="249" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="265" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="9" V01="11" V02="12"/>
+ <Triangle1 V00="9" V01="12" V02="13"/>
+ <Triangle1 V00="14" V01="15" V02="7"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="281" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="3" V01="6" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="9" V01="8" V02="6"/>
+ <Triangle1 V00="10" V01="9" V02="6"/>
+ <Triangle1 V00="10" V01="11" V02="9"/>
+ <Triangle1 V00="9" V01="12" V02="8"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="297" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <Triangle1 V00="5" V01="6" V02="7"/>
+ <Triangle1 V00="8" V01="7" V02="6"/>
+ <Triangle1 V00="6" V01="9" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="11" V01="13" V02="12"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="311" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="9" V02="7"/>
+ <Triangle1 V00="7" V01="9" V02="10"/>
+ <Triangle1 V00="7" V01="10" V02="11"/>
+ <Triangle1 V00="11" V01="10" V02="12"/>
+ <Triangle1 V00="11" V01="12" V02="13"/>
+ <Triangle1 V00="12" V01="8" V02="13"/>
+ <Triangle1 V00="12" V01="6" V02="8"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_0" VertexBufferIndex="0" VertexOffset="325" Count="8"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="0" V01="7" V02="6"/>
+ <Triangle1 V00="0" V01="2" V02="7"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_1 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_1
new file mode 100644
index 000000000..2aa9bea6d
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_1
@@ -0,0 +1,80 @@
+<DisplayList Version="0">
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="7" V02="5"/>
+ <Triangle1 V00="7" V01="8" V02="5"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_1" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="6" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_1" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="8" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="12" V02="13"/>
+ <Triangle1 V00="13" V01="12" V02="14"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_1" VertexBufferIndex="0" VertexOffset="48" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="2" V01="4" V02="3"/>
+ <Triangle1 V00="2" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="8" V01="9" V02="6"/>
+ <Triangle1 V00="9" V01="10" V02="6"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="11" V01="12" V02="10"/>
+ <Triangle1 V00="10" V01="12" V02="13"/>
+ <Triangle1 V00="12" V01="14" V02="13"/>
+ <Triangle1 V00="15" V01="13" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_1" VertexBufferIndex="0" VertexOffset="64" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="1" V02="0"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="0" V02="5"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="6" V02="7"/>
+ <Triangle1 V00="9" V01="8" V02="7"/>
+ <Triangle1 V00="7" V01="10" V02="9"/>
+ <Triangle1 V00="11" V01="12" V02="13"/>
+ <Triangle1 V00="14" V01="11" V02="13"/>
+ <Triangle1 V00="15" V01="14" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_1" VertexBufferIndex="0" VertexOffset="80" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="2" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="1" V02="5"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="5" V02="7"/>
+ <Triangle1 V00="8" V01="6" V02="7"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="8" V02="9"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="11" V01="12" V02="10"/>
+ <Triangle1 V00="10" V01="12" V02="13"/>
+ <Triangle1 V00="12" V01="14" V02="13"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_2 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_2
new file mode 100644
index 000000000..2b8fe0d11
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_2
@@ -0,0 +1,259 @@
+<DisplayList Version="0">
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="13" V02="11"/>
+ <Triangle1 V00="13" V01="10" V02="14"/>
+ <Triangle1 V00="15" V01="14" V02="10"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="0" V02="2"/>
+ <Triangle1 V00="4" V01="3" V02="2"/>
+ <Triangle1 V00="4" V01="2" V02="5"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="5" V01="8" V02="7"/>
+ <Triangle1 V00="8" V01="5" V02="9"/>
+ <Triangle1 V00="5" V01="10" V02="9"/>
+ <Triangle1 V00="5" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="8" V02="9"/>
+ <Triangle1 V00="12" V01="9" V02="13"/>
+ <Triangle1 V00="14" V01="12" V02="13"/>
+ <Triangle1 V00="13" V01="15" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="3" V01="2" V02="4"/>
+ <Triangle1 V00="4" V01="2" V02="5"/>
+ <Triangle1 V00="5" V01="2" V02="6"/>
+ <Triangle1 V00="2" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="6" V02="7"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="11" V01="5" V02="6"/>
+ <Triangle1 V00="11" V01="6" V02="12"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="48" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="1" V02="0"/>
+ <Triangle1 V00="3" V01="0" V02="4"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="4" V01="6" V02="5"/>
+ <Triangle1 V00="3" V01="5" V02="7"/>
+ <Triangle1 V00="3" V01="7" V02="8"/>
+ <Triangle1 V00="8" V01="9" V02="3"/>
+ <Triangle1 V00="10" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="8" V02="11"/>
+ <Triangle1 V00="12" V01="9" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="9"/>
+ <Triangle1 V00="12" V01="14" V02="13"/>
+ <Triangle1 V00="12" V01="15" V02="14"/>
+ <Triangle1 V00="14" V01="1" V02="13"/>
+ <Triangle1 V00="14" V01="2" V02="1"/>
+ <Triangle1 V00="13" V01="1" V02="3"/>
+ <Triangle1 V00="13" V01="3" V02="9"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="64" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="0" V02="2"/>
+ <Triangle1 V00="3" V01="2" V02="4"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="3" V02="5"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="7" V01="8" V02="6"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="9" V01="12" V02="10"/>
+ <Triangle1 V00="13" V01="10" V02="12"/>
+ <Triangle1 V00="13" V01="12" V02="14"/>
+ <Triangle1 V00="15" V01="13" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="80" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="3" V01="6" V02="4"/>
+ <Triangle1 V00="7" V01="6" V02="3"/>
+ <Triangle1 V00="7" V01="8" V02="6"/>
+ <Triangle1 V00="9" V01="8" V02="7"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="11" V01="10" V02="9"/>
+ <Triangle1 V00="11" V01="12" V02="10"/>
+ <Triangle1 V00="13" V01="12" V02="11"/>
+ <Triangle1 V00="13" V01="11" V02="14"/>
+ <Triangle1 V00="15" V01="13" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="96" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="2" V01="3" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="0"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="13" V02="11"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="110" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="6" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="6" V01="9" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="15" V01="12" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="126" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="0" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="6" V01="4" V02="5"/>
+ <Triangle1 V00="7" V01="6" V02="5"/>
+ <Triangle1 V00="8" V01="6" V02="7"/>
+ <Triangle1 V00="8" V01="7" V02="9"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="10" V02="11"/>
+ <Triangle1 V00="11" V01="10" V02="12"/>
+ <Triangle1 V00="13" V01="11" V02="12"/>
+ <Triangle1 V00="13" V01="12" V02="14"/>
+ <Triangle1 V00="15" V01="13" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="142" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="1" V01="0" V02="3"/>
+ <Triangle1 V00="1" V01="3" V02="4"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="4" V01="6" V02="1"/>
+ <Triangle1 V00="6" V01="7" V02="1"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="8" V01="9" V02="7"/>
+ <Triangle1 V00="7" V01="9" V02="10"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="12" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="158" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="7" V01="5" V02="4"/>
+ <Triangle1 V00="7" V01="4" V02="8"/>
+ <Triangle1 V00="9" V01="7" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="7"/>
+ <Triangle1 V00="10" V01="9" V02="11"/>
+ <Triangle1 V00="12" V01="10" V02="11"/>
+ <Triangle1 V00="13" V01="12" V02="11"/>
+ <Triangle1 V00="13" V01="11" V02="14"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="174" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="6" V01="3" V02="5"/>
+ <Triangle1 V00="7" V01="6" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="11" V01="10" V02="9"/>
+ <Triangle1 V00="11" V01="12" V02="10"/>
+ <Triangle1 V00="13" V01="12" V02="11"/>
+ <Triangle1 V00="11" V01="14" V02="13"/>
+ <Triangle1 V00="14" V01="15" V02="13"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="190" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="4" V01="6" V02="5"/>
+ <Triangle1 V00="4" V01="7" V02="6"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="13" V01="12" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="206" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="1" V01="3" V02="2"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="7" V01="5" V02="4"/>
+ <Triangle1 V00="7" V01="8" V02="5"/>
+ <Triangle1 V00="9" V01="8" V02="7"/>
+ <Triangle1 V00="9" V01="7" V02="10"/>
+ <Triangle1 V00="11" V01="9" V02="10"/>
+ <Triangle1 V00="12" V01="11" V02="10"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="222" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="1" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="5" V01="4" V02="3"/>
+ <Triangle1 V00="5" V01="3" V02="6"/>
+ <Triangle1 V00="7" V01="5" V02="6"/>
+ <Triangle1 V00="7" V01="6" V02="8"/>
+ <Triangle1 V00="9" V01="7" V02="8"/>
+ <Triangle1 V00="9" V01="8" V02="10"/>
+ <Triangle1 V00="11" V01="12" V02="13"/>
+ <Triangle1 V00="11" V01="13" V02="14"/>
+ <Triangle1 V00="11" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="238" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="0" V02="3"/>
+ <Triangle1 V00="4" V01="3" V02="5"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="6" V01="9" V02="8"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="10" V01="13" V02="11"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="252" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="0" V02="2"/>
+ <Triangle1 V00="4" V01="3" V02="2"/>
+ <Triangle1 V00="2" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="9" V01="8" V02="7"/>
+ <Triangle1 V00="9" V01="7" V02="10"/>
+ <Triangle1 V00="7" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="13" V02="14"/>
+ <Triangle1 V00="15" V01="12" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="268" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="1" V01="3" V02="2"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="6" V01="7" V02="4"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="10" V02="11"/>
+ <Triangle1 V00="8" V01="11" V02="12"/>
+ <Triangle1 V00="13" V01="8" V02="12"/>
+ <Triangle1 V00="12" V01="14" V02="13"/>
+ <Triangle1 V00="15" V01="13" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="284" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="5"/>
+ <Triangle1 V00="5" V01="6" V02="3"/>
+ <Triangle1 V00="6" V01="7" V02="3"/>
+ <Triangle1 V00="8" V01="3" V02="7"/>
+ <Triangle1 V00="9" V01="8" V02="7"/>
+ <Triangle1 V00="7" V01="10" V02="9"/>
+ <Triangle1 V00="10" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="10" V02="13"/>
+ <Triangle1 V00="14" V01="12" V02="13"/>
+ <Triangle1 V00="14" V01="13" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="300" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="8"/>
+ <Triangle1 V00="6" V01="9" V02="7"/>
+ <Triangle1 V00="10" V01="9" V02="6"/>
+ <Triangle1 V00="11" V01="10" V02="6"/>
+ <Triangle1 V00="11" V01="6" V02="12"/>
+ <Triangle1 V00="13" V01="12" V02="6"/>
+ <Triangle1 V00="13" V01="6" V02="8"/>
+ <Triangle1 V00="10" V01="14" V02="9"/>
+ <Triangle1 V00="9" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_2" VertexBufferIndex="0" VertexOffset="316" Count="5"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="0" V02="2"/>
+ <Triangle1 V00="3" V01="4" V02="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_3 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_3
new file mode 100644
index 000000000..53edaf74f
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_tri_3
@@ -0,0 +1,118 @@
+<DisplayList Version="0">
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="0" Count="15"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="5" V01="6" V02="3"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="7" V01="8" V02="6"/>
+ <Triangle1 V00="7" V01="9" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="8"/>
+ <Triangle1 V00="9" V01="11" V02="10"/>
+ <Triangle1 V00="8" V01="10" V02="12"/>
+ <Triangle1 V00="8" V01="12" V02="13"/>
+ <Triangle1 V00="6" V01="8" V02="13"/>
+ <Triangle1 V00="6" V01="13" V02="14"/>
+ <Triangle1 V00="1" V01="6" V02="14"/>
+ <Triangle1 V00="1" V01="3" V02="6"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="15" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="6" V02="7"/>
+ <Triangle1 V00="7" V01="6" V02="8"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="9" V01="8" V02="10"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="10" V01="12" V02="11"/>
+ <Triangle1 V00="13" V01="14" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="31" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="1" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="4" V01="5" V02="1"/>
+ <Triangle1 V00="4" V01="6" V02="5"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="6" V01="8" V02="7"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="7" V01="9" V02="10"/>
+ <Triangle1 V00="7" V01="10" V02="11"/>
+ <Triangle1 V00="7" V01="11" V02="12"/>
+ <Triangle1 V00="5" V01="7" V02="12"/>
+ <Triangle1 V00="5" V01="12" V02="13"/>
+ <Triangle1 V00="2" V01="5" V02="13"/>
+ <Triangle1 V00="2" V01="1" V02="5"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="45" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="3" V01="5" V02="6"/>
+ <Triangle1 V00="3" V01="6" V02="7"/>
+ <Triangle1 V00="7" V01="1" V02="3"/>
+ <Triangle1 V00="7" V01="8" V02="1"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="12" V01="11" V02="10"/>
+ <Triangle1 V00="12" V01="10" V02="13"/>
+ <Triangle1 V00="14" V01="12" V02="13"/>
+ <Triangle1 V00="14" V01="13" V02="15"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="61" Count="14"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="2" V02="3"/>
+ <Triangle1 V00="4" V01="0" V02="3"/>
+ <Triangle1 V00="4" V01="5" V02="0"/>
+ <Triangle1 V00="6" V01="5" V02="4"/>
+ <Triangle1 V00="6" V01="7" V02="5"/>
+ <Triangle1 V00="8" V01="9" V02="10"/>
+ <Triangle1 V00="8" V01="11" V02="9"/>
+ <Triangle1 V00="12" V01="11" V02="8"/>
+ <Triangle1 V00="12" V01="13" V02="11"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="75" Count="15"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="5" V01="6" V02="3"/>
+ <Triangle1 V00="5" V01="7" V02="6"/>
+ <Triangle1 V00="3" V01="6" V02="8"/>
+ <Triangle1 V00="3" V01="8" V02="1"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="9" V01="12" V02="10"/>
+ <Triangle1 V00="13" V01="12" V02="9"/>
+ <Triangle1 V00="13" V01="14" V02="12"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="90" Count="15"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <Triangle1 V00="3" V01="5" V02="4"/>
+ <Triangle1 V00="4" V01="5" V02="6"/>
+ <Triangle1 V00="4" V01="6" V02="7"/>
+ <Triangle1 V00="7" V01="6" V02="8"/>
+ <Triangle1 V00="9" V01="10" V02="11"/>
+ <Triangle1 V00="9" V01="12" V02="10"/>
+ <Triangle1 V00="13" V01="12" V02="9"/>
+ <Triangle1 V00="13" V01="14" V02="12"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="105" Count="16"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="0" V01="3" V02="1"/>
+ <Triangle1 V00="4" V01="3" V02="0"/>
+ <Triangle1 V00="4" V01="5" V02="3"/>
+ <Triangle1 V00="3" V01="5" V02="6"/>
+ <Triangle1 V00="7" V01="3" V02="6"/>
+ <Triangle1 V00="7" V01="6" V02="8"/>
+ <Triangle1 V00="7" V01="8" V02="9"/>
+ <Triangle1 V00="1" V01="3" V02="7"/>
+ <Triangle1 V00="10" V01="11" V02="12"/>
+ <Triangle1 V00="13" V01="10" V02="12"/>
+ <Triangle1 V00="13" V01="12" V02="14"/>
+ <Triangle1 V00="15" V01="13" V02="14"/>
+ <LoadVertices Path="textures/nintendo_rogo_static/gShipLogoDL_vtx_3" VertexBufferIndex="0" VertexOffset="121" Count="5"/>
+ <Triangle1 V00="0" V01="1" V02="2"/>
+ <Triangle1 V00="3" V01="1" V02="0"/>
+ <Triangle1 V00="3" V01="4" V02="1"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_0 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_0
new file mode 100644
index 000000000..2c2ee793b
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_0
@@ -0,0 +1,335 @@
+<Vertex Version="0">
+ <Vtx X="0" Y="-5" Z="11" S="391" T="-468" R="0" G="10" B="127" A="255"/>
+ <Vtx X="-1" Y="-6" Z="13" S="391" T="-447" R="162" G="39" B="76" A="255"/>
+ <Vtx X="0" Y="-6" Z="13" S="408" T="-447" R="94" G="39" B="76" A="255"/>
+ <Vtx X="-3" Y="2" Z="-27" S="120" T="-327" R="81" G="50" B="84" A="255"/>
+ <Vtx X="1" Y="0" Z="-21" S="171" T="-251" R="185" G="93" B="49" A="255"/>
+ <Vtx X="2" Y="2" Z="-27" S="181" T="-327" R="175" G="50" B="84" A="255"/>
+ <Vtx X="-2" Y="0" Z="-21" S="130" T="-251" R="71" G="93" B="49" A="255"/>
+ <Vtx X="2" Y="0" Z="-20" S="185" T="-228" R="188" G="87" B="63" A="255"/>
+ <Vtx X="-3" Y="0" Z="-20" S="116" T="-228" R="68" G="87" B="63" A="255"/>
+ <Vtx X="-5" Y="-1" Z="-17" S="83" T="-191" R="88" G="79" B="46" A="255"/>
+ <Vtx X="5" Y="-1" Z="-17" S="218" T="-191" R="168" G="79" B="46" A="255"/>
+ <Vtx X="-6" Y="-1" Z="-11" S="70" T="-103" R="92" G="87" B="7" A="255"/>
+ <Vtx X="6" Y="-1" Z="-11" S="231" T="-103" R="164" G="87" B="7" A="255"/>
+ <Vtx X="0" Y="-1" Z="-1" S="151" T="35" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-1" Y="-1" Z="0" S="139" T="48" R="202" G="115" B="0" A="255"/>
+ <Vtx X="-6" Y="-1" Z="3" S="70" T="94" R="75" G="78" B="190" A="255"/>
+ <Vtx X="0" Y="-1" Z="1" S="151" T="60" R="0" G="115" B="54" A="255"/>
+ <Vtx X="-1" Y="-1" Z="0" S="139" T="48" R="202" G="115" B="0" A="255"/>
+ <Vtx X="-6" Y="-1" Z="3" S="70" T="94" R="75" G="78" B="190" A="255"/>
+ <Vtx X="6" Y="-1" Z="3" S="231" T="94" R="181" G="78" B="190" A="255"/>
+ <Vtx X="1" Y="-1" Z="0" S="162" T="48" R="54" G="115" B="0" A="255"/>
+ <Vtx X="6" Y="-1" Z="-11" S="231" T="-103" R="164" G="87" B="7" A="255"/>
+ <Vtx X="0" Y="-1" Z="-1" S="151" T="35" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-1" Y="-6" Z="13" S="65" T="-396" R="162" G="39" B="76" A="255"/>
+ <Vtx X="0" Y="-8" Z="12" S="48" T="-424" R="114" G="12" B="55" A="255"/>
+ <Vtx X="0" Y="-6" Z="13" S="49" T="-396" R="94" G="39" B="76" A="255"/>
+ <Vtx X="-1" Y="-8" Z="12" S="65" T="-424" R="142" G="12" B="55" A="255"/>
+ <Vtx X="0" Y="-12" Z="14" S="49" T="-483" R="83" G="232" B="94" A="255"/>
+ <Vtx X="-1" Y="-12" Z="14" S="65" T="-483" R="173" G="232" B="94" A="255"/>
+ <Vtx X="0" Y="2" Z="12" S="-34" T="-437" R="0" G="21" B="125" A="255"/>
+ <Vtx X="3" Y="3" Z="11" S="-55" T="-468" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="3" Z="11" S="-55" T="-437" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="2" Z="12" S="-34" T="-437" R="0" G="21" B="125" A="255"/>
+ <Vtx X="3" Y="2" Z="12" S="-34" T="-468" R="0" G="21" B="125" A="255"/>
+ <Vtx X="3" Y="3" Z="11" S="-55" T="-468" R="0" G="21" B="125" A="255"/>
+ <Vtx X="4" Y="2" Z="12" S="20" T="-447" R="0" G="21" B="125" A="255"/>
+ <Vtx X="6" Y="3" Z="11" S="-1" T="-478" R="0" G="21" B="125" A="255"/>
+ <Vtx X="4" Y="3" Z="11" S="-1" T="-447" R="0" G="21" B="125" A="255"/>
+ <Vtx X="6" Y="2" Z="12" S="20" T="-478" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-1" Y="-12" Z="14" S="-372" T="-427" R="173" G="232" B="94" A="255"/>
+ <Vtx X="0" Y="-13" Z="13" S="-389" T="-438" R="84" G="161" B="250" A="255"/>
+ <Vtx X="0" Y="-12" Z="14" S="-389" T="-427" R="83" G="232" B="94" A="255"/>
+ <Vtx X="-1" Y="-13" Z="13" S="-372" T="-438" R="172" G="161" B="250" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="-389" T="-468" R="0" G="146" B="64" A="255"/>
+ <Vtx X="-1" Y="2" Z="12" S="221" T="-475" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-3" Y="3" Z="11" S="200" T="-444" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-3" Y="2" Z="12" S="221" T="-444" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-1" Y="3" Z="11" S="200" T="-476" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-4" Y="3" Z="11" S="186" T="-444" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-6" Y="2" Z="12" S="165" T="-476" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-4" Y="2" Z="12" S="165" T="-444" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-6" Y="3" Z="11" S="186" T="-475" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-1" Y="-8" Z="12" S="212" T="-395" R="142" G="12" B="55" A="255"/>
+ <Vtx X="-1" Y="-6" Z="13" S="221" T="-422" R="162" G="39" B="76" A="255"/>
+ <Vtx X="0" Y="-5" Z="11" S="206" T="-444" R="0" G="10" B="127" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="186" T="-357" R="0" G="146" B="64" A="255"/>
+ <Vtx X="-1" Y="-12" Z="14" S="221" T="-333" R="173" G="232" B="94" A="255"/>
+ <Vtx X="-1" Y="-13" Z="13" S="207" T="-327" R="172" G="161" B="250" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="20" T="-494" R="169" G="61" B="70" A="255"/>
+ <Vtx X="-5" Y="27" Z="0" S="28" T="-447" R="183" G="183" B="73" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="28" T="-494" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-5" Y="27" Z="0" S="20" T="-447" R="183" G="73" B="73" A="255"/>
+ <Vtx X="1" Y="4" Z="0" S="427" T="389" R="87" G="195" B="70" A="255"/>
+ <Vtx X="8" Y="4" Z="-1" S="415" T="495" R="85" G="163" B="239" A="255"/>
+ <Vtx X="8" Y="4" Z="0" S="427" T="495" R="73" G="183" B="73" A="255"/>
+ <Vtx X="0" Y="4" Z="-1" S="415" T="377" R="0" G="155" B="179" A="255"/>
+ <Vtx X="-1" Y="5" Z="0" S="-343" T="-272" R="169" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="19" Z="-1" S="-330" T="-71" R="0" G="130" B="15" A="255"/>
+ <Vtx X="0" Y="5" Z="-1" S="-330" T="-272" R="0" G="125" B="236" A="255"/>
+ <Vtx X="-1" Y="19" Z="0" S="-343" T="-71" R="169" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="19" Z="-1" S="-132" T="-270" R="0" G="130" B="15" A="255"/>
+ <Vtx X="1" Y="5" Z="0" S="-144" T="-69" R="87" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="5" Z="-1" S="-132" T="-69" R="0" G="125" B="236" A="255"/>
+ <Vtx X="1" Y="19" Z="0" S="-144" T="-270" R="87" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-431" T="-469" R="0" G="115" B="202" A="255"/>
+ <Vtx X="1" Y="28" Z="0" S="-441" T="-456" R="68" G="149" B="0" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-431" T="-456" R="87" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="28" Z="-1" S="-441" T="-469" R="0" G="149" B="188" A="255"/>
+ <Vtx X="-1" Y="28" Z="0" S="-431" T="-469" R="188" G="149" B="0" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-421" T="-456" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-421" T="-469" R="169" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="28" Z="-1" S="-431" T="-456" R="0" G="149" B="188" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="-5" T="-177" R="54" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-2" T="-148" R="0" G="0" B="127" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="-2" T="-178" R="0" G="115" B="54" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-5" T="-148" R="97" G="206" B="66" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-2" T="-105" R="0" G="0" B="127" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-5" T="-104" R="98" G="50" B="64" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-2" T="-96" R="0" G="73" B="104" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-5" T="-96" R="104" G="73" B="0" A="255"/>
+ <Vtx X="2" Y="28" Z="0" S="35" T="-483" R="107" G="188" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="-3" S="48" T="-447" R="0" G="73" B="152" A="255"/>
+ <Vtx X="2" Y="29" Z="0" S="48" T="-483" R="104" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="-3" S="35" T="-447" R="0" G="188" B="149" A="255"/>
+ <Vtx X="2" Y="28" Z="0" S="-330" T="-475" R="107" G="188" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="3" S="-344" T="-439" R="0" G="73" B="104" A="255"/>
+ <Vtx X="0" Y="28" Z="3" S="-330" T="-438" R="0" G="188" B="107" A="255"/>
+ <Vtx X="2" Y="29" Z="0" S="-344" T="-475" R="104" G="73" B="0" A="255"/>
+ <Vtx X="-3" Y="29" Z="0" S="200" T="-444" R="152" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="-3" S="186" T="-481" R="0" G="188" B="149" A="255"/>
+ <Vtx X="-3" Y="28" Z="0" S="186" T="-444" R="149" G="188" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="-3" S="200" T="-481" R="0" G="73" B="152" A="255"/>
+ <Vtx X="0" Y="29" Z="3" S="165" T="-445" R="0" G="73" B="104" A="255"/>
+ <Vtx X="-3" Y="28" Z="0" S="152" T="-481" R="149" G="188" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="3" S="152" T="-444" R="0" G="188" B="107" A="255"/>
+ <Vtx X="-3" Y="29" Z="0" S="165" T="-481" R="152" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="-2" T="-14" R="0" G="115" B="54" A="255"/>
+ <Vtx X="-1" Y="31" Z="0" S="-5" T="-43" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-1" Y="29" Z="0" S="-5" T="-14" R="202" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-2" T="-43" R="0" G="0" B="127" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-2" T="-43" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="34" Z="0" S="-5" T="-87" R="129" G="0" B="0" A="255"/>
+ <Vtx X="-1" Y="31" Z="0" S="-5" T="-43" R="129" G="0" B="0" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-2" T="-87" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="35" Z="0" S="-5" T="-96" R="152" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-2" T="-96" R="0" G="73" B="104" A="255"/>
+ <Vtx X="-1" Y="29" Z="0" S="-2" T="68" R="202" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-5" T="39" R="187" G="201" B="164" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="-5" T="68" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-1" Y="31" Z="0" S="-2" T="39" R="129" G="0" B="0" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-5" T="-5" R="189" G="55" B="163" A="255"/>
+ <Vtx X="-1" Y="34" Z="0" S="-2" T="-5" R="129" G="0" B="0" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-5" T="-14" R="0" G="73" B="152" A="255"/>
+ <Vtx X="-1" Y="35" Z="0" S="-2" T="-14" R="152" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="-1" T="-221" R="0" G="115" B="202" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-4" T="-251" R="97" G="206" B="66" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="-4" T="-222" R="54" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-1" T="-251" R="187" G="201" B="164" A="255"/>
+ <Vtx X="-1" Y="35" Z="0" S="-350" T="-271" R="152" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-345" T="-266" R="104" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-345" T="-271" R="0" G="73" B="152" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-350" T="-266" R="0" G="73" B="104" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-1" T="-251" R="189" G="55" B="163" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-4" T="-260" R="104" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-4" T="-251" R="98" G="50" B="64" A="255"/>
+ <Vtx X="0" Y="35" Z="0" S="-1" T="-260" R="0" G="73" B="152" A="255"/>
+ <Vtx X="1" Y="19" Z="0" S="434" T="-341" R="87" G="195" B="70" A="255"/>
+ <Vtx X="8" Y="19" Z="-1" S="445" T="-447" R="105" G="193" B="33" A="255"/>
+ <Vtx X="8" Y="19" Z="0" S="434" T="-447" R="73" G="183" B="74" A="255"/>
+ <Vtx X="0" Y="19" Z="-1" S="445" T="-329" R="0" G="130" B="15" A="255"/>
+ <Vtx X="-1" Y="21" Z="0" S="391" T="-393" R="169" G="61" B="69" A="255"/>
+ <Vtx X="-9" Y="21" Z="-1" S="379" T="-287" R="166" G="90" B="0" A="255"/>
+ <Vtx X="-9" Y="21" Z="0" S="391" T="-287" R="183" G="74" B="73" A="255"/>
+ <Vtx X="0" Y="21" Z="-1" S="379" T="-405" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-9" Y="21" Z="-1" S="371" T="-287" R="166" G="90" B="0" A="255"/>
+ <Vtx X="0" Y="21" Z="-1" S="371" T="-405" R="0" G="127" B="0" A="255"/>
+ <Vtx X="8" Y="21" Z="-1" S="379" T="-524" R="90" G="90" B="0" A="255"/>
+ <Vtx X="1" Y="21" Z="0" S="391" T="-418" R="87" G="61" B="69" A="255"/>
+ <Vtx X="8" Y="21" Z="0" S="391" T="-524" R="73" G="74" B="73" A="255"/>
+ <Vtx X="8" Y="21" Z="-1" S="371" T="-524" R="90" G="90" B="0" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="363" T="-464" R="91" G="85" B="231" A="255"/>
+ <Vtx X="8" Y="21" Z="-2" S="363" T="-524" R="73" G="73" B="183" A="255"/>
+ <Vtx X="0" Y="21" Z="-2" S="363" T="-405" R="0" G="97" B="82" A="255"/>
+ <Vtx X="-5" Y="21" Z="-2" S="363" T="-346" R="165" G="87" B="236" A="255"/>
+ <Vtx X="-9" Y="21" Z="-2" S="363" T="-287" R="183" G="73" B="183" A="255"/>
+ <Vtx X="-1" Y="21" Z="0" S="-55" T="-437" R="169" G="61" B="69" A="255"/>
+ <Vtx X="-9" Y="19" Z="0" S="-31" T="-331" R="183" G="183" B="74" A="255"/>
+ <Vtx X="-1" Y="19" Z="0" S="-31" T="-437" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-9" Y="21" Z="0" S="-55" T="-331" R="183" G="74" B="73" A="255"/>
+ <Vtx X="-1" Y="19" Z="0" S="427" T="389" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-9" Y="19" Z="-1" S="439" T="495" R="151" G="193" B="33" A="255"/>
+ <Vtx X="0" Y="19" Z="-1" S="439" T="377" R="0" G="130" B="15" A="255"/>
+ <Vtx X="-9" Y="19" Z="0" S="427" T="495" R="183" G="183" B="74" A="255"/>
+ <Vtx X="0" Y="4" Z="-1" S="-461" T="-495" R="0" G="155" B="179" A="255"/>
+ <Vtx X="1" Y="-1" Z="0" S="-473" T="-427" R="54" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="-1" Z="-1" S="-461" T="-427" R="0" G="115" B="202" A="255"/>
+ <Vtx X="1" Y="4" Z="0" S="-473" T="-496" R="87" G="195" B="70" A="255"/>
+ <Vtx X="-1" Y="4" Z="0" S="281" T="-423" R="169" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="-1" Z="-1" S="293" T="-492" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-1" Y="-1" Z="0" S="281" T="-491" R="202" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="4" Z="-1" S="293" T="-423" R="0" G="155" B="179" A="255"/>
+ <Vtx X="1" Y="4" Z="0" S="-29" T="-262" R="87" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="-1" Z="1" S="-17" T="-331" R="0" G="115" B="54" A="255"/>
+ <Vtx X="1" Y="-1" Z="0" S="-29" T="-331" R="54" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="4" Z="1" S="-17" T="-263" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="5" Z="0" S="-29" T="-250" R="87" G="61" B="70" A="255"/>
+ <Vtx X="8" Y="5" Z="0" S="-132" T="-251" R="73" G="73" B="73" A="255"/>
+ <Vtx X="8" Y="4" Z="0" S="-132" T="-262" R="73" G="183" B="73" A="255"/>
+ <Vtx X="0" Y="5" Z="1" S="-17" T="-251" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="19" Z="0" S="-29" T="-50" R="87" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="19" Z="1" S="-17" T="-50" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="21" Z="0" S="-29" T="-25" R="87" G="61" B="69" A="255"/>
+ <Vtx X="8" Y="21" Z="0" S="-132" T="-25" R="73" G="74" B="73" A="255"/>
+ <Vtx X="8" Y="19" Z="0" S="-132" T="-50" R="73" G="183" B="74" A="255"/>
+ <Vtx X="0" Y="21" Z="1" S="-17" T="-26" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-29" T="50" R="87" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="27" Z="1" S="-17" T="50" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-29" T="58" R="87" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="27" Z="1" S="-17" T="50" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-29" T="50" R="87" G="195" B="70" A="255"/>
+ <Vtx X="4" Y="27" Z="0" S="-75" T="58" R="73" G="73" B="73" A="255"/>
+ <Vtx X="4" Y="27" Z="0" S="-75" T="50" R="73" G="183" B="73" A="255"/>
+ <Vtx X="0" Y="27" Z="1" S="-17" T="57" R="0" G="0" B="127" A="255"/>
+ <Vtx X="1" Y="28" Z="0" S="-29" T="68" R="68" G="149" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="1" S="-17" T="68" R="0" G="149" B="68" A="255"/>
+ <Vtx X="0" Y="4" Z="1" S="-5" T="0" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="-1" Z="0" S="-17" T="68" R="202" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="-1" Z="1" S="-5" T="68" R="0" G="115" B="54" A="255"/>
+ <Vtx X="-1" Y="4" Z="0" S="-17" T="0" R="169" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="5" Z="1" S="-5" T="-12" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="5" Z="0" S="-17" T="-12" R="169" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="19" Z="1" S="-5" T="-213" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="19" Z="0" S="-17" T="-213" R="169" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="21" Z="1" S="-5" T="-238" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="19" Z="0" S="-17" T="-213" R="169" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="19" Z="1" S="-5" T="-213" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="21" Z="0" S="-17" T="-238" R="169" G="61" B="69" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-17" T="-313" R="169" G="195" B="70" A="255"/>
+ <Vtx X="0" Y="27" Z="1" S="-5" T="-313" R="0" G="0" B="127" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-17" T="-321" R="169" G="61" B="70" A="255"/>
+ <Vtx X="0" Y="27" Z="1" S="-5" T="-321" R="0" G="0" B="127" A="255"/>
+ <Vtx X="0" Y="28" Z="1" S="-5" T="-331" R="0" G="149" B="68" A="255"/>
+ <Vtx X="-1" Y="28" Z="0" S="-17" T="-331" R="188" G="149" B="0" A="255"/>
+ <Vtx X="-9" Y="21" Z="-1" S="-431" T="-436" R="166" G="90" B="0" A="255"/>
+ <Vtx X="-9" Y="21" Z="-2" S="-431" T="-427" R="183" G="73" B="183" A="255"/>
+ <Vtx X="-9" Y="19" Z="-2" S="-407" T="-427" R="158" G="20" B="177" A="255"/>
+ <Vtx X="-9" Y="19" Z="-1" S="-407" T="-444" R="151" G="193" B="33" A="255"/>
+ <Vtx X="-9" Y="21" Z="-1" S="-431" T="-444" R="166" G="90" B="0" A="255"/>
+ <Vtx X="-9" Y="19" Z="0" S="-407" T="-456" R="183" G="183" B="74" A="255"/>
+ <Vtx X="-9" Y="19" Z="0" S="-407" T="-456" R="183" G="183" B="74" A="255"/>
+ <Vtx X="-9" Y="21" Z="0" S="-431" T="-456" R="183" G="74" B="73" A="255"/>
+ <Vtx X="-9" Y="21" Z="-1" S="-431" T="-444" R="166" G="90" B="0" A="255"/>
+ <Vtx X="8" Y="19" Z="-2" S="-431" T="-456" R="98" G="20" B="177" A="255"/>
+ <Vtx X="8" Y="21" Z="-2" S="-455" T="-456" R="73" G="73" B="183" A="255"/>
+ <Vtx X="8" Y="21" Z="-1" S="-455" T="-448" R="90" G="90" B="0" A="255"/>
+ <Vtx X="8" Y="19" Z="-1" S="-431" T="-439" R="105" G="193" B="33" A="255"/>
+ <Vtx X="8" Y="21" Z="-1" S="-455" T="-439" R="90" G="90" B="0" A="255"/>
+ <Vtx X="8" Y="19" Z="0" S="-431" T="-427" R="73" G="183" B="74" A="255"/>
+ <Vtx X="8" Y="21" Z="0" S="-455" T="-427" R="73" G="74" B="73" A="255"/>
+ <Vtx X="8" Y="5" Z="-1" S="-418" T="-468" R="98" G="79" B="20" A="255"/>
+ <Vtx X="8" Y="4" Z="0" S="-407" T="-456" R="73" G="183" B="73" A="255"/>
+ <Vtx X="8" Y="4" Z="-1" S="-407" T="-468" R="85" G="163" B="239" A="255"/>
+ <Vtx X="8" Y="5" Z="0" S="-418" T="-456" R="73" G="73" B="73" A="255"/>
+ <Vtx X="1" Y="5" Z="0" S="457" T="-341" R="87" G="61" B="70" A="255"/>
+ <Vtx X="8" Y="5" Z="-1" S="445" T="-447" R="98" G="79" B="20" A="255"/>
+ <Vtx X="0" Y="5" Z="-1" S="445" T="-329" R="0" G="125" B="236" A="255"/>
+ <Vtx X="8" Y="5" Z="0" S="457" T="-447" R="73" G="73" B="73" A="255"/>
+ <Vtx X="-9" Y="5" Z="0" S="-133" T="-291" R="183" G="73" B="73" A="255"/>
+ <Vtx X="-9" Y="4" Z="-1" S="-144" T="-303" R="171" G="163" B="239" A="255"/>
+ <Vtx X="-9" Y="4" Z="0" S="-144" T="-291" R="183" G="183" B="73" A="255"/>
+ <Vtx X="-9" Y="5" Z="-1" S="-133" T="-303" R="158" G="79" B="20" A="255"/>
+ <Vtx X="-1" Y="5" Z="0" S="450" T="389" R="169" G="61" B="70" A="255"/>
+ <Vtx X="-9" Y="5" Z="-1" S="439" T="495" R="158" G="79" B="20" A="255"/>
+ <Vtx X="-9" Y="5" Z="0" S="450" T="495" R="183" G="73" B="73" A="255"/>
+ <Vtx X="0" Y="5" Z="-1" S="439" T="377" R="0" G="125" B="236" A="255"/>
+ <Vtx X="-1" Y="4" Z="0" S="434" T="-341" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-9" Y="4" Z="-1" S="422" T="-447" R="171" G="163" B="239" A="255"/>
+ <Vtx X="0" Y="4" Z="-1" S="422" T="-329" R="0" G="155" B="179" A="255"/>
+ <Vtx X="-9" Y="4" Z="0" S="434" T="-447" R="183" G="183" B="73" A="255"/>
+ <Vtx X="-1" Y="5" Z="0" S="-125" T="-521" R="169" G="61" B="70" A="255"/>
+ <Vtx X="-9" Y="4" Z="0" S="-113" T="-415" R="183" G="183" B="73" A="255"/>
+ <Vtx X="-1" Y="4" Z="0" S="-113" T="-521" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-9" Y="5" Z="0" S="-125" T="-415" R="183" G="73" B="73" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-15" T="-417" R="0" G="129" B="253" A="255"/>
+ <Vtx X="1" Y="21" Z="0" S="-3" T="-492" R="87" G="61" B="69" A="255"/>
+ <Vtx X="0" Y="21" Z="-1" S="-15" T="-493" R="0" G="115" B="202" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-3" T="-417" R="87" G="195" B="70" A="255"/>
+ <Vtx X="-1" Y="21" Z="0" S="-27" T="-492" R="169" G="61" B="69" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-15" T="-417" R="0" G="129" B="253" A="255"/>
+ <Vtx X="0" Y="21" Z="-1" S="-15" T="-492" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-27" T="-417" R="169" G="195" B="70" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-137" T="-282" R="102" G="185" B="27" A="255"/>
+ <Vtx X="4" Y="27" Z="0" S="-144" T="-270" R="73" G="73" B="73" A="255"/>
+ <Vtx X="4" Y="27" Z="0" S="-137" T="-270" R="73" G="183" B="73" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-144" T="-282" R="90" G="90" B="0" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-137" T="-282" R="102" G="185" B="27" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-144" T="-291" R="73" G="73" B="183" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-144" T="-282" R="90" G="90" B="0" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-137" T="-291" R="103" G="30" B="188" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-348" T="-474" R="87" G="195" B="70" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-360" T="-427" R="102" G="185" B="27" A="255"/>
+ <Vtx X="4" Y="27" Z="0" S="-348" T="-427" R="73" G="183" B="73" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-360" T="-486" R="0" G="129" B="253" A="255"/>
+ <Vtx X="-5" Y="27" Z="0" S="408" T="-468" R="183" G="73" B="73" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="415" T="-456" R="154" G="185" B="27" A="255"/>
+ <Vtx X="-5" Y="27" Z="0" S="415" T="-468" R="183" G="183" B="73" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="408" T="-456" R="166" G="90" B="0" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="408" T="-447" R="183" G="73" B="183" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="415" T="-447" R="153" G="30" B="188" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-372" T="-474" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="-360" T="-427" R="154" G="185" B="27" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-372" T="-474" R="169" G="195" B="70" A="255"/>
+ <Vtx X="-5" Y="27" Z="0" S="-372" T="-427" R="183" G="183" B="73" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="-360" T="-427" R="154" G="185" B="27" A="255"/>
+ <Vtx X="-1" Y="27" Z="0" S="-156" T="-378" R="169" G="61" B="70" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="-144" T="-425" R="166" G="90" B="0" A="255"/>
+ <Vtx X="-5" Y="27" Z="0" S="-156" T="-425" R="183" G="73" B="73" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-144" T="-366" R="0" G="115" B="202" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="-136" T="-425" R="183" G="73" B="183" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="-136" T="-366" R="0" G="90" B="166" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-144" T="-307" R="90" G="90" B="0" A="255"/>
+ <Vtx X="1" Y="27" Z="0" S="-156" T="-354" R="87" G="61" B="70" A="255"/>
+ <Vtx X="4" Y="27" Z="0" S="-156" T="-307" R="73" G="73" B="73" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-136" T="-307" R="73" G="73" B="183" A="255"/>
+ <Vtx X="0" Y="-13" Z="13" S="173" T="-444" R="84" G="161" B="250" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="151" T="-415" R="0" G="146" B="64" A="255"/>
+ <Vtx X="0" Y="-12" Z="14" S="186" T="-438" R="83" G="232" B="94" A="255"/>
+ <Vtx X="0" Y="-8" Z="12" S="177" T="-376" R="114" G="12" B="55" A="255"/>
+ <Vtx X="0" Y="-12" Z="14" S="186" T="-438" R="83" G="232" B="94" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="151" T="-415" R="0" G="146" B="64" A="255"/>
+ <Vtx X="0" Y="-5" Z="11" S="171" T="-327" R="0" G="10" B="127" A="255"/>
+ <Vtx X="0" Y="-6" Z="13" S="186" T="-349" R="94" G="39" B="76" A="255"/>
+ <Vtx X="8" Y="21" Z="-2" S="495" T="-143" R="73" G="73" B="183" A="255"/>
+ <Vtx X="8" Y="19" Z="-2" S="471" T="-143" R="98" G="20" B="177" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="495" T="-83" R="91" G="85" B="231" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="487" T="-78" R="11" G="222" B="134" A="255"/>
+ <Vtx X="0" Y="19" Z="-2" S="471" T="-24" R="0" G="31" B="133" A="255"/>
+ <Vtx X="-4" Y="21" Z="-2" S="488" T="31" R="243" G="222" B="134" A="255"/>
+ <Vtx X="-9" Y="19" Z="-2" S="471" T="94" R="158" G="20" B="177" A="255"/>
+ <Vtx X="-5" Y="21" Z="-2" S="495" T="35" R="165" G="87" B="236" A="255"/>
+ <Vtx X="-9" Y="21" Z="-2" S="495" T="94" R="183" G="73" B="183" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="450" T="436" R="0" G="90" B="166" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="450" T="495" R="73" G="73" B="183" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="458" T="495" R="103" G="30" B="188" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="458" T="436" R="0" G="51" B="140" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="450" T="377" R="183" G="73" B="183" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="458" T="377" R="153" G="30" B="188" A="255"/>
+ <Vtx X="-1" Y="28" Z="0" S="269" T="-389" R="188" G="149" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="3" S="253" T="-423" R="0" G="188" B="107" A="255"/>
+ <Vtx X="-3" Y="28" Z="0" S="253" T="-373" R="149" G="188" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="1" S="269" T="-407" R="0" G="149" B="68" A="255"/>
+ <Vtx X="1" Y="28" Z="0" S="285" T="-407" R="68" G="149" B="0" A="255"/>
+ <Vtx X="2" Y="28" Z="0" S="302" T="-423" R="107" G="188" B="0" A="255"/>
+ <Vtx X="0" Y="28" Z="-1" S="285" T="-389" R="0" G="149" B="188" A="255"/>
+ <Vtx X="0" Y="28" Z="-3" S="302" T="-373" R="0" G="188" B="149" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="26" T="-419" R="0" G="115" B="202" A="255"/>
+ <Vtx X="2" Y="29" Z="0" S="-1" T="-396" R="104" G="73" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="-3" S="48" T="-396" R="0" G="73" B="152" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="22" T="-419" R="54" G="115" B="0" A="255"/>
+ <Vtx X="0" Y="29" Z="3" S="-1" T="-447" R="0" G="73" B="104" A="255"/>
+ <Vtx X="0" Y="29" Z="0" S="22" T="-424" R="0" G="115" B="54" A="255"/>
+ <Vtx X="-1" Y="29" Z="0" S="26" T="-424" R="202" G="115" B="0" A="255"/>
+ <Vtx X="-3" Y="29" Z="0" S="48" T="-447" R="152" G="73" B="0" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_1 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_1
new file mode 100644
index 000000000..ec462b114
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_1
@@ -0,0 +1,98 @@
+<Vertex Version="0">
+ <Vtx X="3" Y="34" Z="-1" S="302" T="-467" R="72" G="84" B="194" A="255"/>
+ <Vtx X="3" Y="31" Z="0" S="293" T="-423" R="64" G="160" B="202" A="255"/>
+ <Vtx X="3" Y="31" Z="-1" S="302" T="-423" R="72" G="172" B="194" A="255"/>
+ <Vtx X="3" Y="34" Z="0" S="293" T="-467" R="64" G="96" B="202" A="255"/>
+ <Vtx X="3" Y="34" Z="0" S="-128" T="-469" R="64" G="96" B="202" A="255"/>
+ <Vtx X="3" Y="31" Z="0" S="-135" T="-425" R="23" G="154" B="183" A="255"/>
+ <Vtx X="3" Y="31" Z="0" S="-128" T="-425" R="64" G="160" B="202" A="255"/>
+ <Vtx X="3" Y="34" Z="0" S="-135" T="-469" R="23" G="102" B="183" A="255"/>
+ <Vtx X="4" Y="31" Z="0" S="-147" T="-425" R="234" G="160" B="176" A="255"/>
+ <Vtx X="4" Y="34" Z="0" S="-147" T="-469" R="234" G="96" B="176" A="255"/>
+ <Vtx X="5" Y="31" Z="0" S="-156" T="-425" R="59" G="186" B="168" A="255"/>
+ <Vtx X="5" Y="34" Z="0" S="-156" T="-469" R="59" G="70" B="168" A="255"/>
+ <Vtx X="3" Y="31" Z="1" S="112" T="-416" R="183" G="171" B="61" A="255"/>
+ <Vtx X="2" Y="34" Z="0" S="104" T="-460" R="193" G="96" B="54" A="255"/>
+ <Vtx X="2" Y="31" Z="0" S="104" T="-416" R="193" G="160" B="54" A="255"/>
+ <Vtx X="3" Y="34" Z="1" S="112" T="-460" R="183" G="85" B="61" A="255"/>
+ <Vtx X="3" Y="31" Z="1" S="260" T="-423" R="226" G="175" B="94" A="255"/>
+ <Vtx X="3" Y="34" Z="1" S="253" T="-467" R="183" G="85" B="61" A="255"/>
+ <Vtx X="3" Y="31" Z="1" S="253" T="-423" R="183" G="171" B="61" A="255"/>
+ <Vtx X="3" Y="34" Z="1" S="260" T="-467" R="226" G="81" B="94" A="255"/>
+ <Vtx X="4" Y="31" Z="1" S="271" T="-423" R="25" G="172" B="92" A="255"/>
+ <Vtx X="4" Y="34" Z="1" S="271" T="-467" R="25" G="84" B="92" A="255"/>
+ <Vtx X="5" Y="31" Z="1" S="281" T="-423" R="84" G="178" B="56" A="255"/>
+ <Vtx X="5" Y="34" Z="1" S="281" T="-467" R="84" G="78" B="56" A="255"/>
+ <Vtx X="5" Y="34" Z="1" S="-401" T="-471" R="84" G="78" B="56" A="255"/>
+ <Vtx X="5" Y="31" Z="0" S="-389" T="-427" R="59" G="186" B="168" A="255"/>
+ <Vtx X="5" Y="34" Z="0" S="-389" T="-471" R="59" G="70" B="168" A="255"/>
+ <Vtx X="5" Y="31" Z="1" S="-401" T="-427" R="84" G="178" B="56" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-1" T="-178" R="187" G="201" B="164" A="255"/>
+ <Vtx X="0" Y="34" Z="-1" S="-5" T="-221" R="171" G="82" B="209" A="255"/>
+ <Vtx X="0" Y="31" Z="-1" S="-5" T="-178" R="171" G="174" B="210" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-1" T="-221" R="189" G="55" B="163" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="70" T="-417" R="97" G="206" B="66" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="74" T="-460" R="34" G="89" B="84" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="70" T="-460" R="98" G="50" B="64" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="74" T="-417" R="33" G="166" B="84" A="255"/>
+ <Vtx X="1" Y="34" Z="0" S="82" T="-461" R="12" G="97" B="81" A="255"/>
+ <Vtx X="1" Y="31" Z="0" S="82" T="-417" R="12" G="159" B="81" A="255"/>
+ <Vtx X="2" Y="31" Z="0" S="94" T="-417" R="227" G="157" B="75" A="255"/>
+ <Vtx X="2" Y="34" Z="0" S="94" T="-461" R="227" G="99" B="75" A="255"/>
+ <Vtx X="2" Y="31" Z="0" S="104" T="-416" R="193" G="160" B="54" A="255"/>
+ <Vtx X="2" Y="34" Z="0" S="104" T="-460" R="193" G="96" B="54" A="255"/>
+ <Vtx X="0" Y="31" Z="-1" S="151" T="-416" R="171" G="174" B="210" A="255"/>
+ <Vtx X="0" Y="34" Z="-1" S="151" T="-460" R="171" G="82" B="209" A="255"/>
+ <Vtx X="0" Y="34" Z="-1" S="143" T="-460" R="205" G="85" B="177" A="255"/>
+ <Vtx X="0" Y="31" Z="-1" S="143" T="-416" R="205" G="171" B="177" A="255"/>
+ <Vtx X="1" Y="34" Z="-1" S="135" T="-460" R="242" G="84" B="161" A="255"/>
+ <Vtx X="1" Y="31" Z="-1" S="135" T="-416" R="242" G="172" B="161" A="255"/>
+ <Vtx X="1" Y="31" Z="-1" S="135" T="-416" R="242" G="172" B="161" A="255"/>
+ <Vtx X="1" Y="34" Z="-1" S="135" T="-460" R="242" G="84" B="161" A="255"/>
+ <Vtx X="2" Y="34" Z="-1" S="123" T="-460" R="35" G="83" B="166" A="255"/>
+ <Vtx X="2" Y="31" Z="-1" S="123" T="-416" R="35" G="173" B="166" A="255"/>
+ <Vtx X="3" Y="31" Z="-1" S="113" T="-416" R="72" G="172" B="194" A="255"/>
+ <Vtx X="3" Y="34" Z="-1" S="113" T="-460" R="72" G="84" B="194" A="255"/>
+ <Vtx X="4" Y="31" Z="0" S="-72" T="-478" R="234" G="160" B="176" A="255"/>
+ <Vtx X="5" Y="31" Z="0" S="-64" T="-485" R="59" G="186" B="168" A="255"/>
+ <Vtx X="5" Y="31" Z="1" S="-76" T="-489" R="84" G="178" B="56" A="255"/>
+ <Vtx X="4" Y="31" Z="1" S="-84" T="-481" R="25" G="172" B="92" A="255"/>
+ <Vtx X="3" Y="31" Z="0" S="-77" T="-467" R="23" G="154" B="183" A="255"/>
+ <Vtx X="3" Y="31" Z="1" S="-89" T="-471" R="226" G="175" B="94" A="255"/>
+ <Vtx X="3" Y="31" Z="1" S="-86" T="-461" R="183" G="171" B="61" A="255"/>
+ <Vtx X="3" Y="31" Z="0" S="-74" T="-458" R="64" G="160" B="202" A="255"/>
+ <Vtx X="2" Y="31" Z="0" S="-79" T="-454" R="193" G="160" B="54" A="255"/>
+ <Vtx X="3" Y="31" Z="-1" S="-67" T="-450" R="72" G="172" B="194" A="255"/>
+ <Vtx X="2" Y="31" Z="0" S="-76" T="-441" R="227" G="157" B="75" A="255"/>
+ <Vtx X="3" Y="31" Z="-1" S="-67" T="-450" R="72" G="172" B="194" A="255"/>
+ <Vtx X="2" Y="31" Z="0" S="-79" T="-454" R="193" G="160" B="54" A="255"/>
+ <Vtx X="2" Y="31" Z="-1" S="-64" T="-438" R="35" G="173" B="166" A="255"/>
+ <Vtx X="1" Y="31" Z="-1" S="-67" T="-426" R="242" G="172" B="161" A="255"/>
+ <Vtx X="1" Y="31" Z="0" S="-79" T="-430" R="12" G="159" B="81" A="255"/>
+ <Vtx X="0" Y="31" Z="-1" S="-73" T="-419" R="205" G="171" B="177" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-85" T="-423" R="33" G="166" B="84" A="255"/>
+ <Vtx X="0" Y="31" Z="-1" S="-83" T="-415" R="171" G="174" B="210" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-86" T="-415" R="187" G="201" B="164" A="255"/>
+ <Vtx X="0" Y="31" Z="0" S="-88" T="-420" R="97" G="206" B="66" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-111" T="-488" R="189" G="55" B="163" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-113" T="-484" R="98" G="50" B="64" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-110" T="-481" R="34" G="89" B="84" A="255"/>
+ <Vtx X="0" Y="34" Z="-1" S="-107" T="-489" R="171" G="82" B="209" A="255"/>
+ <Vtx X="0" Y="34" Z="-1" S="-98" T="-484" R="205" G="85" B="177" A="255"/>
+ <Vtx X="0" Y="34" Z="0" S="-110" T="-481" R="34" G="89" B="84" A="255"/>
+ <Vtx X="1" Y="34" Z="0" S="-104" T="-474" R="12" G="97" B="81" A="255"/>
+ <Vtx X="0" Y="34" Z="-1" S="-98" T="-484" R="205" G="85" B="177" A="255"/>
+ <Vtx X="1" Y="34" Z="-1" S="-92" T="-477" R="242" G="84" B="161" A="255"/>
+ <Vtx X="2" Y="34" Z="-1" S="-89" T="-466" R="35" G="83" B="166" A="255"/>
+ <Vtx X="2" Y="34" Z="0" S="-101" T="-462" R="227" G="99" B="75" A="255"/>
+ <Vtx X="3" Y="34" Z="-1" S="-92" T="-453" R="72" G="84" B="194" A="255"/>
+ <Vtx X="2" Y="34" Z="0" S="-104" T="-450" R="193" G="96" B="54" A="255"/>
+ <Vtx X="3" Y="34" Z="0" S="-98" T="-446" R="64" G="96" B="202" A="255"/>
+ <Vtx X="3" Y="34" Z="1" S="-110" T="-442" R="183" G="85" B="61" A="255"/>
+ <Vtx X="3" Y="34" Z="0" S="-101" T="-436" R="23" G="102" B="183" A="255"/>
+ <Vtx X="3" Y="34" Z="1" S="-113" T="-433" R="226" G="81" B="94" A="255"/>
+ <Vtx X="4" Y="34" Z="1" S="-109" T="-422" R="25" G="84" B="92" A="255"/>
+ <Vtx X="4" Y="34" Z="0" S="-97" T="-426" R="234" G="96" B="176" A="255"/>
+ <Vtx X="5" Y="34" Z="1" S="-101" T="-415" R="84" G="78" B="56" A="255"/>
+ <Vtx X="5" Y="34" Z="0" S="-89" T="-418" R="59" G="70" B="168" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_2 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_2
new file mode 100644
index 000000000..cc906e23e
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_2
@@ -0,0 +1,323 @@
+<Vertex Version="0">
+ <Vtx X="-2" Y="1" Z="-22" S="-343" T="-266" R="155" G="77" B="11" A="255"/>
+ <Vtx X="-3" Y="3" Z="-26" S="-350" T="-196" R="71" G="66" B="82" A="255"/>
+ <Vtx X="-3" Y="5" Z="-28" S="-343" T="-169" R="183" G="100" B="227" A="255"/>
+ <Vtx X="2" Y="1" Z="-22" S="-343" T="-71" R="101" G="77" B="11" A="255"/>
+ <Vtx X="3" Y="5" Z="-28" S="-343" T="-169" R="73" G="100" B="227" A="255"/>
+ <Vtx X="2" Y="3" Z="-26" S="-350" T="-141" R="185" G="66" B="82" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="-348" T="-432" R="82" G="187" B="69" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="-343" T="-368" R="82" G="185" B="66" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="-343" T="-432" R="118" G="227" B="38" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="-348" T="-367" R="118" G="226" B="35" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-528" T="-505" R="4" G="95" B="85" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-522" T="-510" R="85" G="196" B="73" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-529" T="-510" R="71" G="88" B="58" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-522" T="-506" R="53" G="243" B="115" A="255"/>
+ <Vtx X="6" Y="3" Z="11" S="-510" T="-495" R="0" G="21" B="125" A="255"/>
+ <Vtx X="4" Y="3" Z="11" S="-510" T="-464" R="0" G="21" B="125" A="255"/>
+ <Vtx X="3" Y="3" Z="11" S="-510" T="-452" R="0" G="21" B="125" A="255"/>
+ <Vtx X="4" Y="3" Z="11" S="-510" T="-464" R="0" G="21" B="125" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-528" T="-505" R="4" G="95" B="85" A="255"/>
+ <Vtx X="0" Y="3" Z="11" S="-510" T="-421" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-1" Y="3" Z="11" S="-510" T="-398" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-528" T="-314" R="252" G="95" B="85" A="255"/>
+ <Vtx X="-3" Y="3" Z="11" S="-510" T="-367" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-4" Y="3" Z="11" S="-510" T="-355" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-6" Y="3" Z="11" S="-510" T="-324" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-522" T="-314" R="203" G="243" B="115" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-522" T="-309" R="171" G="196" B="73" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-529" T="-310" R="185" G="88" B="58" A="255"/>
+ <Vtx X="-6" Y="2" Z="12" S="-489" T="-324" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-7" Y="0" Z="12" S="-473" T="-309" R="156" G="221" B="70" A="255"/>
+ <Vtx X="-4" Y="2" Z="12" S="-489" T="-355" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="0" Z="12" S="-473" T="-409" R="0" G="215" B="120" A="255"/>
+ <Vtx X="-3" Y="2" Z="12" S="-489" T="-367" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-4" Y="2" Z="12" S="-489" T="-355" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="0" Z="12" S="-473" T="-409" R="0" G="215" B="120" A="255"/>
+ <Vtx X="-1" Y="2" Z="12" S="-489" T="-398" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="2" Z="12" S="-489" T="-421" R="0" G="21" B="125" A="255"/>
+ <Vtx X="3" Y="2" Z="12" S="-489" T="-452" R="0" G="21" B="125" A="255"/>
+ <Vtx X="4" Y="2" Z="12" S="-489" T="-464" R="0" G="21" B="125" A="255"/>
+ <Vtx X="7" Y="0" Z="12" S="-473" T="-510" R="100" G="221" B="70" A="255"/>
+ <Vtx X="6" Y="2" Z="12" S="-489" T="-495" R="0" G="21" B="125" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-522" T="-506" R="53" G="243" B="115" A="255"/>
+ <Vtx X="6" Y="3" Z="11" S="-510" T="-495" R="0" G="21" B="125" A="255"/>
+ <Vtx X="3" Y="3" Z="11" S="-510" T="-452" R="0" G="21" B="125" A="255"/>
+ <Vtx X="4" Y="3" Z="11" S="-510" T="-464" R="0" G="21" B="125" A="255"/>
+ <Vtx X="7" Y="-10" Z="-10" S="70" T="194" R="104" G="186" B="237" A="255"/>
+ <Vtx X="2" Y="-9" Z="-17" S="136" T="95" R="21" G="160" B="176" A="255"/>
+ <Vtx X="6" Y="-8" Z="-17" S="85" T="94" R="92" G="201" B="188" A="255"/>
+ <Vtx X="7" Y="-10" Z="-10" S="70" T="194" R="104" G="186" B="237" A="255"/>
+ <Vtx X="2" Y="-13" Z="-10" S="137" T="196" R="26" G="134" B="231" A="255"/>
+ <Vtx X="2" Y="-9" Z="-17" S="136" T="95" R="21" G="160" B="176" A="255"/>
+ <Vtx X="2" Y="-13" Z="4" S="137" T="393" R="27" G="132" B="9" A="255"/>
+ <Vtx X="7" Y="-10" Z="4" S="70" T="391" R="106" G="186" B="6" A="255"/>
+ <Vtx X="2" Y="-11" Z="11" S="137" T="495" R="19" G="169" B="91" A="255"/>
+ <Vtx X="7" Y="-9" Z="11" S="74" T="494" R="84" G="207" B="82" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="175" T="495" R="0" G="146" B="64" A="255"/>
+ <Vtx X="-2" Y="-11" Z="11" S="196" T="495" R="237" G="169" B="91" A="255"/>
+ <Vtx X="-2" Y="-13" Z="4" S="195" T="393" R="229" G="132" B="9" A="255"/>
+ <Vtx X="-7" Y="-10" Z="4" S="263" T="391" R="150" G="186" B="6" A="255"/>
+ <Vtx X="-7" Y="-9" Z="11" S="259" T="494" R="172" G="207" B="82" A="255"/>
+ <Vtx X="-7" Y="-10" Z="-10" S="263" T="194" R="152" G="186" B="237" A="255"/>
+ <Vtx X="-2" Y="-13" Z="-10" S="195" T="196" R="230" G="134" B="231" A="255"/>
+ <Vtx X="-3" Y="-9" Z="-17" S="197" T="95" R="235" G="160" B="176" A="255"/>
+ <Vtx X="-6" Y="-8" Z="-17" S="248" T="94" R="164" G="201" B="188" A="255"/>
+ <Vtx X="3" Y="0" Z="-21" S="335" T="-265" R="74" G="215" B="161" A="255"/>
+ <Vtx X="2" Y="1" Z="-22" S="346" T="-287" R="101" G="77" B="11" A="255"/>
+ <Vtx X="3" Y="0" Z="-21" S="330" T="-265" R="70" G="191" B="172" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="306" T="-211" R="81" G="166" B="218" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="302" T="-211" R="89" G="177" B="211" A="255"/>
+ <Vtx X="7" Y="-1" Z="-10" S="305" T="-112" R="95" G="172" B="248" A="255"/>
+ <Vtx X="7" Y="-1" Z="-10" S="309" T="-112" R="91" G="168" B="248" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="342" T="94" R="82" G="185" B="66" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="346" T="94" R="118" G="226" B="35" A="255"/>
+ <Vtx X="2" Y="-1" Z="-22" S="140" T="-416" R="100" G="222" B="185" A="255"/>
+ <Vtx X="2" Y="2" Z="-28" S="140" T="-327" R="29" G="191" B="151" A="255"/>
+ <Vtx X="3" Y="2" Z="-28" S="151" T="-328" R="93" G="233" B="172" A="255"/>
+ <Vtx X="1" Y="-1" Z="-22" S="133" T="-416" R="29" G="170" B="168" A="255"/>
+ <Vtx X="-2" Y="2" Z="-28" S="81" T="-327" R="227" G="191" B="151" A="255"/>
+ <Vtx X="-2" Y="-1" Z="-22" S="88" T="-416" R="227" G="170" B="168" A="255"/>
+ <Vtx X="-2" Y="-1" Z="-22" S="81" T="-416" R="156" G="222" B="185" A="255"/>
+ <Vtx X="-2" Y="-1" Z="-22" S="81" T="-416" R="156" G="222" B="185" A="255"/>
+ <Vtx X="-3" Y="2" Z="-28" S="70" T="-328" R="163" G="233" B="172" A="255"/>
+ <Vtx X="-2" Y="2" Z="-28" S="81" T="-327" R="227" G="191" B="151" A="255"/>
+ <Vtx X="2" Y="1" Z="-22" S="-380" T="405" R="101" G="77" B="11" A="255"/>
+ <Vtx X="3" Y="2" Z="-28" S="-366" T="495" R="93" G="233" B="172" A="255"/>
+ <Vtx X="3" Y="5" Z="-28" S="-330" T="488" R="73" G="100" B="227" A="255"/>
+ <Vtx X="2" Y="-1" Z="-22" S="-403" T="409" R="100" G="222" B="185" A="255"/>
+ <Vtx X="3" Y="0" Z="-21" S="-395" T="385" R="74" G="215" B="161" A="255"/>
+ <Vtx X="3" Y="-2" Z="-21" S="-414" T="398" R="81" G="253" B="159" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="-398" T="338" R="81" G="166" B="218" A="255"/>
+ <Vtx X="6" Y="-8" Z="-17" S="-495" T="336" R="92" G="201" B="188" A="255"/>
+ <Vtx X="7" Y="-1" Z="-10" S="-397" T="239" R="91" G="168" B="248" A="255"/>
+ <Vtx X="7" Y="-10" Z="-10" S="-529" T="237" R="104" G="186" B="237" A="255"/>
+ <Vtx X="7" Y="-10" Z="4" S="-525" T="39" R="106" G="186" B="6" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="-398" T="30" R="118" G="226" B="35" A="255"/>
+ <Vtx X="7" Y="-9" Z="11" S="-509" T="-64" R="84" G="207" B="82" A="255"/>
+ <Vtx X="7" Y="0" Z="11" S="-387" T="-61" R="102" G="218" B="66" A="255"/>
+ <Vtx X="7" Y="-9" Z="11" S="-509" T="-64" R="84" G="207" B="82" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="-398" T="30" R="118" G="226" B="35" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="-335" T="33" R="82" G="187" B="69" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-330" T="-61" R="53" G="243" B="115" A="255"/>
+ <Vtx X="7" Y="0" Z="12" S="-378" T="-71" R="100" G="221" B="70" A="255"/>
+ <Vtx X="-4" Y="3" Z="11" S="-510" T="-355" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-3" Y="2" Z="12" S="-489" T="-367" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-3" Y="3" Z="11" S="-510" T="-367" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-4" Y="2" Z="12" S="-489" T="-355" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-7" Y="4" Z="5" S="-55" T="-479" R="174" G="187" B="69" A="255"/>
+ <Vtx X="-8" Y="-1" Z="5" S="-59" T="-415" R="174" G="185" B="66" A="255"/>
+ <Vtx X="-7" Y="-1" Z="5" S="-55" T="-415" R="138" G="226" B="35" A="255"/>
+ <Vtx X="-8" Y="4" Z="5" S="-59" T="-480" R="138" G="227" B="38" A="255"/>
+ <Vtx X="6" Y="0" Z="-11" S="412" T="-103" R="174" G="97" B="6" A="255"/>
+ <Vtx X="6" Y="-1" Z="3" S="418" T="93" R="181" G="78" B="190" A="255"/>
+ <Vtx X="6" Y="0" Z="3" S="431" T="94" R="223" G="119" B="228" A="255"/>
+ <Vtx X="6" Y="-1" Z="-11" S="399" T="-103" R="164" G="87" B="7" A="255"/>
+ <Vtx X="5" Y="0" Z="-17" S="404" T="-191" R="185" G="99" B="36" A="255"/>
+ <Vtx X="5" Y="-1" Z="-17" S="391" T="-191" R="168" G="79" B="46" A="255"/>
+ <Vtx X="2" Y="1" Z="-20" S="404" T="-228" R="186" G="82" B="68" A="255"/>
+ <Vtx X="2" Y="0" Z="-20" S="391" T="-229" R="188" G="87" B="63" A="255"/>
+ <Vtx X="1" Y="0" Z="-21" S="395" T="-252" R="185" G="93" B="49" A="255"/>
+ <Vtx X="1" Y="1" Z="-21" S="408" T="-252" R="167" G="83" B="38" A="255"/>
+ <Vtx X="2" Y="2" Z="-27" S="418" T="-329" R="175" G="50" B="84" A="255"/>
+ <Vtx X="2" Y="3" Z="-26" S="431" T="-328" R="185" G="66" B="82" A="255"/>
+ <Vtx X="2" Y="1" Z="-22" S="-2" T="134" R="101" G="77" B="11" A="255"/>
+ <Vtx X="2" Y="3" Z="-26" S="0" T="68" R="185" G="66" B="82" A="255"/>
+ <Vtx X="1" Y="1" Z="-21" S="-11" T="144" R="167" G="83" B="38" A="255"/>
+ <Vtx X="3" Y="1" Z="-20" S="14" T="159" R="5" G="126" B="18" A="255"/>
+ <Vtx X="3" Y="1" Z="-20" S="14" T="159" R="5" G="126" B="18" A="255"/>
+ <Vtx X="1" Y="1" Z="-21" S="-11" T="144" R="167" G="83" B="38" A="255"/>
+ <Vtx X="2" Y="1" Z="-20" S="3" T="167" R="186" G="82" B="68" A="255"/>
+ <Vtx X="5" Y="0" Z="-17" S="36" T="204" R="185" G="99" B="36" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="51" T="200" R="254" G="127" B="6" A="255"/>
+ <Vtx X="6" Y="0" Z="-11" S="50" T="292" R="174" G="97" B="6" A="255"/>
+ <Vtx X="7" Y="0" Z="4" S="65" T="495" R="246" G="89" B="166" A="255"/>
+ <Vtx X="6" Y="0" Z="3" S="50" T="489" R="223" G="119" B="228" A="255"/>
+ <Vtx X="0" Y="0" Z="4" S="-31" T="495" R="0" G="90" B="166" A="255"/>
+ <Vtx X="0" Y="0" Z="4" S="-31" T="492" R="0" G="104" B="183" A="255"/>
+ <Vtx X="-6" Y="0" Z="3" S="-112" T="489" R="33" G="119" B="228" A="255"/>
+ <Vtx X="-7" Y="0" Z="4" S="-128" T="495" R="10" G="89" B="166" A="255"/>
+ <Vtx X="-6" Y="0" Z="-11" S="-112" T="292" R="82" G="97" B="6" A="255"/>
+ <Vtx X="-6" Y="0" Z="-17" S="-113" T="200" R="2" G="127" B="6" A="255"/>
+ <Vtx X="-5" Y="0" Z="-17" S="-99" T="204" R="71" G="99" B="36" A="255"/>
+ <Vtx X="-4" Y="1" Z="-20" S="-76" T="159" R="251" G="126" B="18" A="255"/>
+ <Vtx X="-3" Y="1" Z="-20" S="-66" T="167" R="70" G="82" B="68" A="255"/>
+ <Vtx X="-4" Y="1" Z="-20" S="-76" T="159" R="251" G="126" B="18" A="255"/>
+ <Vtx X="-5" Y="0" Z="-17" S="-99" T="204" R="71" G="99" B="36" A="255"/>
+ <Vtx X="-2" Y="1" Z="-21" S="-52" T="144" R="89" G="83" B="38" A="255"/>
+ <Vtx X="-2" Y="1" Z="-22" S="-60" T="134" R="155" G="77" B="11" A="255"/>
+ <Vtx X="-3" Y="3" Z="-26" S="-62" T="68" R="71" G="66" B="82" A="255"/>
+ <Vtx X="-4" Y="1" Z="-20" S="-80" T="158" R="199" G="109" B="224" A="255"/>
+ <Vtx X="-6" Y="0" Z="-17" S="-113" T="200" R="2" G="127" B="6" A="255"/>
+ <Vtx X="-7" Y="0" Z="-17" S="-117" T="199" R="170" G="85" B="216" A="255"/>
+ <Vtx X="-8" Y="0" Z="-10" S="-132" T="297" R="165" G="88" B="250" A="255"/>
+ <Vtx X="-7" Y="0" Z="4" S="-128" T="495" R="10" G="89" B="166" A="255"/>
+ <Vtx X="-8" Y="0" Z="4" S="-132" T="494" R="144" G="45" B="216" A="255"/>
+ <Vtx X="-3" Y="3" Z="-26" S="-68" T="-341" R="71" G="66" B="82" A="255"/>
+ <Vtx X="3" Y="5" Z="-28" S="-89" T="-415" R="73" G="100" B="227" A="255"/>
+ <Vtx X="-3" Y="5" Z="-28" S="-89" T="-331" R="183" G="100" B="227" A="255"/>
+ <Vtx X="2" Y="3" Z="-26" S="-68" T="-404" R="185" G="66" B="82" A="255"/>
+ <Vtx X="-3" Y="2" Z="-27" S="-55" T="-341" R="81" G="50" B="84" A="255"/>
+ <Vtx X="2" Y="3" Z="-26" S="-68" T="-404" R="185" G="66" B="82" A="255"/>
+ <Vtx X="-3" Y="3" Z="-26" S="-68" T="-341" R="71" G="66" B="82" A="255"/>
+ <Vtx X="2" Y="2" Z="-27" S="-55" T="-404" R="175" G="50" B="84" A="255"/>
+ <Vtx X="3" Y="1" Z="-20" S="255" T="70" R="57" G="109" B="224" A="255"/>
+ <Vtx X="3" Y="0" Z="-21" S="246" T="76" R="70" G="191" B="172" A="255"/>
+ <Vtx X="2" Y="1" Z="-22" S="261" T="94" R="101" G="77" B="11" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="242" T="29" R="89" G="177" B="211" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="252" T="29" R="86" G="85" B="216" A="255"/>
+ <Vtx X="7" Y="0" Z="-10" S="251" T="-70" R="91" G="88" B="250" A="255"/>
+ <Vtx X="7" Y="-1" Z="-10" S="239" T="-70" R="95" G="172" B="248" A="255"/>
+ <Vtx X="7" Y="0" Z="4" S="248" T="-267" R="112" G="45" B="216" A="255"/>
+ <Vtx X="7" Y="-1" Z="5" S="231" T="-279" R="82" G="185" B="66" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="294" T="-278" R="118" G="227" B="38" A="255"/>
+ <Vtx X="7" Y="4" Z="4" S="302" T="-268" R="65" G="75" B="176" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="302" T="-372" R="71" G="88" B="58" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="302" T="-372" R="71" G="88" B="58" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="295" T="-373" R="85" G="196" B="73" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="294" T="-278" R="118" G="227" B="38" A="255"/>
+ <Vtx X="-6" Y="-1" Z="3" S="-343" T="-272" R="75" G="78" B="190" A="255"/>
+ <Vtx X="-6" Y="0" Z="3" S="-330" T="-272" R="33" G="119" B="228" A="255"/>
+ <Vtx X="0" Y="0" Z="4" S="-331" T="-355" R="0" G="104" B="183" A="255"/>
+ <Vtx X="6" Y="-1" Z="3" S="-343" T="-438" R="181" G="78" B="190" A="255"/>
+ <Vtx X="6" Y="0" Z="3" S="-330" T="-438" R="223" G="119" B="228" A="255"/>
+ <Vtx X="2" Y="1" Z="-22" S="-2" T="134" R="101" G="77" B="11" A="255"/>
+ <Vtx X="3" Y="1" Z="-20" S="14" T="159" R="5" G="126" B="18" A="255"/>
+ <Vtx X="3" Y="1" Z="-20" S="18" T="158" R="57" G="109" B="224" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="51" T="200" R="254" G="127" B="6" A="255"/>
+ <Vtx X="6" Y="0" Z="-17" S="55" T="199" R="86" G="85" B="216" A="255"/>
+ <Vtx X="7" Y="0" Z="-10" S="70" T="297" R="91" G="88" B="250" A="255"/>
+ <Vtx X="7" Y="0" Z="4" S="65" T="495" R="246" G="89" B="166" A="255"/>
+ <Vtx X="7" Y="0" Z="4" S="70" T="494" R="112" G="45" B="216" A="255"/>
+ <Vtx X="7" Y="4" Z="4" S="264" T="101" R="242" G="91" B="168" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="363" T="100" R="71" G="88" B="58" A="255"/>
+ <Vtx X="7" Y="4" Z="4" S="263" T="97" R="65" G="75" B="176" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="364" T="105" R="4" G="95" B="85" A="255"/>
+ <Vtx X="-7" Y="4" Z="4" S="264" T="300" R="14" G="91" B="168" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="364" T="296" R="252" G="95" B="85" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="363" T="301" R="185" G="88" B="58" A="255"/>
+ <Vtx X="-8" Y="4" Z="4" S="263" T="304" R="191" G="75" B="176" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="-59" T="-509" R="82" G="187" B="69" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-64" T="-416" R="85" G="196" B="73" A="255"/>
+ <Vtx X="7" Y="4" Z="11" S="-59" T="-415" R="53" G="243" B="115" A="255"/>
+ <Vtx X="7" Y="4" Z="5" S="-64" T="-510" R="118" G="227" B="38" A="255"/>
+ <Vtx X="2" Y="-11" Z="11" S="415" T="370" R="19" G="169" B="91" A="255"/>
+ <Vtx X="0" Y="-5" Z="11" S="327" T="391" R="0" G="10" B="127" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="415" T="391" R="0" G="146" B="64" A="255"/>
+ <Vtx X="7" Y="-9" Z="11" S="385" T="304" R="84" G="207" B="82" A="255"/>
+ <Vtx X="7" Y="-9" Z="11" S="385" T="304" R="84" G="207" B="82" A="255"/>
+ <Vtx X="7" Y="0" Z="11" S="263" T="305" R="102" G="218" B="66" A="255"/>
+ <Vtx X="0" Y="-5" Z="11" S="327" T="391" R="0" G="10" B="127" A="255"/>
+ <Vtx X="0" Y="0" Z="11" S="263" T="400" R="0" G="205" B="116" A="255"/>
+ <Vtx X="-4" Y="0" Z="-21" S="379" T="72" R="182" G="215" B="161" A="255"/>
+ <Vtx X="-4" Y="0" Z="-21" S="375" T="72" R="186" G="191" B="172" A="255"/>
+ <Vtx X="-2" Y="1" Z="-22" S="391" T="94" R="155" G="77" B="11" A="255"/>
+ <Vtx X="-6" Y="0" Z="-17" S="351" T="18" R="175" G="166" B="218" A="255"/>
+ <Vtx X="-7" Y="0" Z="-17" S="346" T="18" R="167" G="177" B="211" A="255"/>
+ <Vtx X="-8" Y="-1" Z="-10" S="349" T="-81" R="161" G="172" B="248" A="255"/>
+ <Vtx X="-7" Y="-1" Z="-10" S="354" T="-81" R="165" G="168" B="248" A="255"/>
+ <Vtx X="-8" Y="-1" Z="5" S="386" T="-287" R="174" G="185" B="66" A="255"/>
+ <Vtx X="-7" Y="-1" Z="5" S="391" T="-287" R="138" G="226" B="35" A="255"/>
+ <Vtx X="-2" Y="1" Z="-21" S="448" T="16" R="89" G="83" B="38" A="255"/>
+ <Vtx X="-3" Y="2" Z="-27" S="458" T="94" R="81" G="50" B="84" A="255"/>
+ <Vtx X="-3" Y="3" Z="-26" S="471" T="93" R="71" G="66" B="82" A="255"/>
+ <Vtx X="-2" Y="1" Z="-21" S="448" T="16" R="89" G="83" B="38" A="255"/>
+ <Vtx X="-2" Y="0" Z="-21" S="435" T="17" R="71" G="93" B="49" A="255"/>
+ <Vtx X="-3" Y="2" Z="-27" S="458" T="94" R="81" G="50" B="84" A="255"/>
+ <Vtx X="-3" Y="1" Z="-20" S="444" T="-6" R="70" G="82" B="68" A="255"/>
+ <Vtx X="-3" Y="0" Z="-20" S="431" T="-6" R="68" G="87" B="63" A="255"/>
+ <Vtx X="-5" Y="-1" Z="-17" S="431" T="-43" R="88" G="79" B="46" A="255"/>
+ <Vtx X="-5" Y="0" Z="-17" S="444" T="-43" R="71" G="99" B="36" A="255"/>
+ <Vtx X="-6" Y="-1" Z="-11" S="439" T="-130" R="92" G="87" B="7" A="255"/>
+ <Vtx X="-6" Y="0" Z="-11" S="452" T="-131" R="82" G="97" B="6" A="255"/>
+ <Vtx X="-6" Y="-1" Z="3" S="458" T="-327" R="75" G="78" B="190" A="255"/>
+ <Vtx X="-6" Y="0" Z="3" S="471" T="-327" R="33" G="119" B="228" A="255"/>
+ <Vtx X="-4" Y="1" Z="-20" S="23" T="-373" R="199" G="109" B="224" A="255"/>
+ <Vtx X="-2" Y="1" Z="-22" S="29" T="-396" R="155" G="77" B="11" A="255"/>
+ <Vtx X="-4" Y="0" Z="-21" S="14" T="-379" R="186" G="191" B="172" A="255"/>
+ <Vtx X="-7" Y="0" Z="-17" S="10" T="-333" R="167" G="177" B="211" A="255"/>
+ <Vtx X="-7" Y="0" Z="-17" S="20" T="-333" R="170" G="85" B="216" A="255"/>
+ <Vtx X="-8" Y="0" Z="-10" S="19" T="-235" R="165" G="88" B="250" A="255"/>
+ <Vtx X="-7" Y="0" Z="-17" S="20" T="-333" R="170" G="85" B="216" A="255"/>
+ <Vtx X="-7" Y="0" Z="-17" S="10" T="-333" R="167" G="177" B="211" A="255"/>
+ <Vtx X="-8" Y="-1" Z="-10" S="7" T="-235" R="161" G="172" B="248" A="255"/>
+ <Vtx X="-8" Y="0" Z="4" S="16" T="-37" R="144" G="45" B="216" A="255"/>
+ <Vtx X="-8" Y="-1" Z="5" S="-1" T="-26" R="174" G="185" B="66" A="255"/>
+ <Vtx X="-8" Y="4" Z="5" S="62" T="-26" R="138" G="227" B="38" A="255"/>
+ <Vtx X="-8" Y="4" Z="4" S="70" T="-36" R="191" G="75" B="176" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="70" T="67" R="185" G="88" B="58" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="63" T="68" R="171" G="196" B="73" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-348" T="-366" R="171" G="196" B="73" A="255"/>
+ <Vtx X="-7" Y="4" Z="5" S="-343" T="-273" R="174" G="187" B="69" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-343" T="-367" R="203" G="243" B="115" A="255"/>
+ <Vtx X="-8" Y="4" Z="5" S="-348" T="-272" R="138" G="227" B="38" A="255"/>
+ <Vtx X="-2" Y="-11" Z="11" S="415" T="430" R="237" G="169" B="91" A="255"/>
+ <Vtx X="0" Y="-11" Z="11" S="415" T="409" R="0" G="146" B="64" A="255"/>
+ <Vtx X="0" Y="-5" Z="11" S="327" T="409" R="0" G="10" B="127" A="255"/>
+ <Vtx X="-7" Y="-9" Z="11" S="385" T="495" R="172" G="207" B="82" A="255"/>
+ <Vtx X="-7" Y="0" Z="11" S="263" T="495" R="154" G="218" B="66" A="255"/>
+ <Vtx X="0" Y="0" Z="11" S="263" T="400" R="0" G="205" B="116" A="255"/>
+ <Vtx X="7" Y="0" Z="12" S="230" T="-327" R="100" G="221" B="70" A="255"/>
+ <Vtx X="0" Y="0" Z="12" S="230" T="-428" R="0" G="215" B="120" A="255"/>
+ <Vtx X="7" Y="0" Z="11" S="221" T="-332" R="102" G="218" B="66" A="255"/>
+ <Vtx X="0" Y="0" Z="11" S="221" T="-428" R="0" G="205" B="116" A="255"/>
+ <Vtx X="-7" Y="0" Z="11" S="221" T="-523" R="154" G="218" B="66" A="255"/>
+ <Vtx X="-7" Y="0" Z="12" S="230" T="-529" R="156" G="221" B="70" A="255"/>
+ <Vtx X="-2" Y="2" Z="-28" S="-89" T="-403" R="227" G="191" B="151" A="255"/>
+ <Vtx X="-3" Y="2" Z="-28" S="-96" T="-415" R="163" G="233" B="172" A="255"/>
+ <Vtx X="-3" Y="5" Z="-28" S="-132" T="-415" R="183" G="100" B="227" A="255"/>
+ <Vtx X="2" Y="2" Z="-28" S="-89" T="-343" R="29" G="191" B="151" A="255"/>
+ <Vtx X="-3" Y="5" Z="-28" S="-132" T="-415" R="183" G="100" B="227" A="255"/>
+ <Vtx X="3" Y="5" Z="-28" S="-132" T="-331" R="73" G="100" B="227" A="255"/>
+ <Vtx X="2" Y="2" Z="-28" S="-89" T="-343" R="29" G="191" B="151" A="255"/>
+ <Vtx X="3" Y="2" Z="-28" S="-96" T="-331" R="93" G="233" B="172" A="255"/>
+ <Vtx X="-1" Y="3" Z="11" S="-510" T="-398" R="0" G="21" B="125" A="255"/>
+ <Vtx X="-1" Y="2" Z="12" S="-489" T="-398" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="2" Z="12" S="-489" T="-421" R="0" G="21" B="125" A="255"/>
+ <Vtx X="0" Y="3" Z="11" S="-510" T="-421" R="0" G="21" B="125" A="255"/>
+ <Vtx X="7" Y="4" Z="4" S="364" T="300" R="242" G="91" B="168" A="255"/>
+ <Vtx X="7" Y="4" Z="4" S="364" T="304" R="65" G="75" B="176" A="255"/>
+ <Vtx X="7" Y="0" Z="4" S="418" T="304" R="112" G="45" B="216" A="255"/>
+ <Vtx X="7" Y="0" Z="4" S="418" T="300" R="246" G="89" B="166" A="255"/>
+ <Vtx X="0" Y="0" Z="4" S="418" T="201" R="0" G="90" B="166" A="255"/>
+ <Vtx X="-7" Y="4" Z="4" S="364" T="101" R="14" G="91" B="168" A="255"/>
+ <Vtx X="-7" Y="0" Z="4" S="418" T="101" R="10" G="89" B="166" A="255"/>
+ <Vtx X="-8" Y="0" Z="4" S="418" T="97" R="144" G="45" B="216" A="255"/>
+ <Vtx X="-8" Y="0" Z="4" S="418" T="97" R="144" G="45" B="216" A="255"/>
+ <Vtx X="-8" Y="4" Z="4" S="364" T="97" R="191" G="75" B="176" A="255"/>
+ <Vtx X="-7" Y="4" Z="4" S="364" T="101" R="14" G="91" B="168" A="255"/>
+ <Vtx X="-7" Y="0" Z="11" S="-189" T="486" R="154" G="218" B="66" A="255"/>
+ <Vtx X="-7" Y="0" Z="12" S="-180" T="495" R="156" G="221" B="70" A="255"/>
+ <Vtx X="-7" Y="4" Z="11" S="-132" T="486" R="203" G="243" B="115" A="255"/>
+ <Vtx X="-7" Y="4" Z="5" S="-137" T="392" R="174" G="187" B="69" A="255"/>
+ <Vtx X="-7" Y="-1" Z="5" S="-199" T="395" R="138" G="226" B="35" A="255"/>
+ <Vtx X="-7" Y="-9" Z="11" S="-311" T="488" R="172" G="207" B="82" A="255"/>
+ <Vtx X="-7" Y="-10" Z="4" S="-327" T="385" R="150" G="186" B="6" A="255"/>
+ <Vtx X="-7" Y="-1" Z="-10" S="-199" T="185" R="165" G="168" B="248" A="255"/>
+ <Vtx X="-7" Y="-10" Z="-10" S="-330" T="188" R="152" G="186" B="237" A="255"/>
+ <Vtx X="-6" Y="-8" Z="-17" S="-297" T="89" R="164" G="201" B="188" A="255"/>
+ <Vtx X="-6" Y="0" Z="-17" S="-200" T="87" R="175" G="166" B="218" A="255"/>
+ <Vtx X="-4" Y="-2" Z="-21" S="-216" T="29" R="175" G="253" B="159" A="255"/>
+ <Vtx X="-4" Y="0" Z="-21" S="-197" T="41" R="182" G="215" B="161" A="255"/>
+ <Vtx X="-2" Y="-1" Z="-22" S="-205" T="18" R="156" G="222" B="185" A="255"/>
+ <Vtx X="-4" Y="-2" Z="-21" S="-216" T="29" R="175" G="253" B="159" A="255"/>
+ <Vtx X="-4" Y="0" Z="-21" S="-197" T="41" R="182" G="215" B="161" A="255"/>
+ <Vtx X="-2" Y="1" Z="-22" S="-182" T="22" R="155" G="77" B="11" A="255"/>
+ <Vtx X="-3" Y="2" Z="-28" S="-168" T="-69" R="163" G="233" B="172" A="255"/>
+ <Vtx X="-3" Y="5" Z="-28" S="-132" T="-62" R="183" G="100" B="227" A="255"/>
+ <Vtx X="-2" Y="-2" Z="-22" S="-313" T="-419" R="232" G="199" B="145" A="255"/>
+ <Vtx X="2" Y="-9" Z="-17" S="-213" T="-360" R="21" G="160" B="176" A="255"/>
+ <Vtx X="-3" Y="-9" Z="-17" S="-213" T="-423" R="235" G="160" B="176" A="255"/>
+ <Vtx X="2" Y="-2" Z="-22" S="-313" T="-360" R="24" G="199" B="145" A="255"/>
+ <Vtx X="-2" Y="-1" Z="-22" S="-326" T="-412" R="227" G="170" B="168" A="255"/>
+ <Vtx X="-2" Y="-1" Z="-22" S="-330" T="-419" R="156" G="222" B="185" A="255"/>
+ <Vtx X="-4" Y="-2" Z="-21" S="-319" T="-435" R="175" G="253" B="159" A="255"/>
+ <Vtx X="-6" Y="-8" Z="-17" S="-237" T="-475" R="164" G="201" B="188" A="255"/>
+ <Vtx X="1" Y="-1" Z="-22" S="-326" T="-366" R="29" G="170" B="168" A="255"/>
+ <Vtx X="2" Y="-1" Z="-22" S="-330" T="-359" R="100" G="222" B="185" A="255"/>
+ <Vtx X="2" Y="-2" Z="-22" S="-313" T="-360" R="24" G="199" B="145" A="255"/>
+ <Vtx X="2" Y="-1" Z="-22" S="-330" T="-359" R="100" G="222" B="185" A="255"/>
+ <Vtx X="3" Y="-2" Z="-21" S="-319" T="-343" R="81" G="253" B="159" A="255"/>
+ <Vtx X="6" Y="-8" Z="-17" S="-237" T="-307" R="92" G="201" B="188" A="255"/>
+ <Vtx X="2" Y="-9" Z="-17" S="-213" T="-360" R="21" G="160" B="176" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_3 b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_3
new file mode 100644
index 000000000..68e4babcf
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/gShipLogoDL_vtx_3
@@ -0,0 +1,128 @@
+<Vertex Version="0">
+ <Vtx X="0" Y="19" Z="-1" S="-529" T="-189" R="0" G="130" B="15" A="255"/>
+ <Vtx X="8" Y="17" Z="-3" S="-493" T="-308" R="93" G="215" B="77" A="255"/>
+ <Vtx X="8" Y="19" Z="-1" S="-529" T="-308" R="105" G="193" B="33" A="255"/>
+ <Vtx X="0" Y="17" Z="-3" S="-493" T="-190" R="0" G="195" B="112" A="255"/>
+ <Vtx X="-9" Y="19" Z="-1" S="-529" T="-71" R="151" G="193" B="33" A="255"/>
+ <Vtx X="-9" Y="17" Z="-3" S="-493" T="-71" R="163" G="215" B="77" A="255"/>
+ <Vtx X="0" Y="13" Z="-4" S="-444" T="-190" R="0" G="233" B="125" A="255"/>
+ <Vtx X="-9" Y="13" Z="-4" S="-444" T="-72" R="159" G="241" B="81" A="255"/>
+ <Vtx X="0" Y="9" Z="-4" S="-390" T="-190" R="0" G="28" B="124" A="255"/>
+ <Vtx X="-9" Y="9" Z="-4" S="-390" T="-72" R="160" G="18" B="82" A="255"/>
+ <Vtx X="0" Y="6" Z="-3" S="-350" T="-190" R="0" G="86" B="94" A="255"/>
+ <Vtx X="-9" Y="6" Z="-3" S="-350" T="-72" R="156" G="53" B="58" A="255"/>
+ <Vtx X="8" Y="6" Z="-3" S="-350" T="-308" R="100" G="53" B="58" A="255"/>
+ <Vtx X="8" Y="9" Z="-4" S="-390" T="-309" R="96" G="18" B="82" A="255"/>
+ <Vtx X="8" Y="13" Z="-4" S="-444" T="-309" R="97" G="241" B="81" A="255"/>
+ <Vtx X="-9" Y="19" Z="-2" S="-172" T="-520" R="158" G="20" B="177" A="255"/>
+ <Vtx X="-9" Y="17" Z="-3" S="-181" T="-481" R="163" G="215" B="77" A="255"/>
+ <Vtx X="-9" Y="19" Z="-1" S="-156" T="-520" R="151" G="193" B="33" A="255"/>
+ <Vtx X="-9" Y="17" Z="-3" S="-190" T="-485" R="168" G="39" B="174" A="255"/>
+ <Vtx X="-9" Y="13" Z="-4" S="-202" T="-430" R="159" G="241" B="81" A="255"/>
+ <Vtx X="-9" Y="13" Z="-5" S="-213" T="-430" R="172" G="17" B="162" A="255"/>
+ <Vtx X="-9" Y="9" Z="-5" S="-211" T="-375" R="171" G="236" B="163" A="255"/>
+ <Vtx X="-9" Y="9" Z="-4" S="-201" T="-375" R="160" G="18" B="82" A="255"/>
+ <Vtx X="-9" Y="6" Z="-3" S="-191" T="-328" R="173" G="195" B="181" A="255"/>
+ <Vtx X="-9" Y="6" Z="-3" S="-183" T="-334" R="156" G="53" B="58" A="255"/>
+ <Vtx X="-9" Y="5" Z="-2" S="-171" T="-313" R="169" G="174" B="212" A="255"/>
+ <Vtx X="-9" Y="5" Z="-1" S="-156" T="-319" R="158" G="79" B="20" A="255"/>
+ <Vtx X="-9" Y="4" Z="-1" S="-156" T="-307" R="171" G="163" B="239" A="255"/>
+ <Vtx X="0" Y="19" Z="-2" S="-330" T="-189" R="0" G="31" B="133" A="255"/>
+ <Vtx X="-9" Y="17" Z="-3" S="-297" T="-306" R="168" G="39" B="174" A="255"/>
+ <Vtx X="-9" Y="19" Z="-2" S="-330" T="-307" R="158" G="20" B="177" A="255"/>
+ <Vtx X="0" Y="19" Z="-2" S="-330" T="-189" R="0" G="31" B="133" A="255"/>
+ <Vtx X="0" Y="17" Z="-3" S="-297" T="-188" R="0" G="54" B="141" A="255"/>
+ <Vtx X="-9" Y="17" Z="-3" S="-297" T="-306" R="168" G="39" B="174" A="255"/>
+ <Vtx X="8" Y="19" Z="-2" S="-330" T="-70" R="98" G="20" B="177" A="255"/>
+ <Vtx X="8" Y="17" Z="-3" S="-297" T="-70" R="88" G="39" B="174" A="255"/>
+ <Vtx X="0" Y="13" Z="-5" S="-243" T="-187" R="0" G="22" B="131" A="255"/>
+ <Vtx X="8" Y="13" Z="-5" S="-243" T="-69" R="84" G="17" B="162" A="255"/>
+ <Vtx X="0" Y="9" Z="-5" S="-189" T="-188" R="0" G="229" B="132" A="255"/>
+ <Vtx X="8" Y="9" Z="-5" S="-189" T="-69" R="85" G="236" B="163" A="255"/>
+ <Vtx X="8" Y="6" Z="-3" S="-144" T="-70" R="83" G="195" B="181" A="255"/>
+ <Vtx X="0" Y="6" Z="-3" S="-144" T="-188" R="0" G="176" B="157" A="255"/>
+ <Vtx X="-9" Y="6" Z="-3" S="-144" T="-306" R="173" G="195" B="181" A="255"/>
+ <Vtx X="-9" Y="9" Z="-5" S="-189" T="-306" R="171" G="236" B="163" A="255"/>
+ <Vtx X="-9" Y="13" Z="-5" S="-243" T="-306" R="172" G="17" B="162" A="255"/>
+ <Vtx X="0" Y="6" Z="-3" S="455" T="215" R="0" G="176" B="157" A="255"/>
+ <Vtx X="-9" Y="5" Z="-2" S="433" T="333" R="169" G="174" B="212" A="255"/>
+ <Vtx X="-9" Y="6" Z="-3" S="455" T="333" R="173" G="195" B="181" A="255"/>
+ <Vtx X="0" Y="5" Z="-2" S="433" T="215" R="0" G="144" B="195" A="255"/>
+ <Vtx X="8" Y="6" Z="-3" S="455" T="97" R="83" G="195" B="181" A="255"/>
+ <Vtx X="8" Y="5" Z="-2" S="433" T="97" R="87" G="174" B="212" A="255"/>
+ <Vtx X="8" Y="4" Z="-1" S="418" T="97" R="85" G="163" B="239" A="255"/>
+ <Vtx X="0" Y="4" Z="-1" S="418" T="215" R="0" G="155" B="179" A="255"/>
+ <Vtx X="-9" Y="4" Z="-1" S="418" T="333" R="171" G="163" B="239" A="255"/>
+ <Vtx X="8" Y="4" Z="-1" S="358" T="-499" R="85" G="163" B="239" A="255"/>
+ <Vtx X="8" Y="5" Z="-2" S="344" T="-494" R="87" G="174" B="212" A="255"/>
+ <Vtx X="8" Y="5" Z="-1" S="358" T="-488" R="98" G="79" B="20" A="255"/>
+ <Vtx X="8" Y="6" Z="-3" S="332" T="-472" R="100" G="53" B="58" A="255"/>
+ <Vtx X="8" Y="6" Z="-3" S="323" T="-478" R="83" G="195" B="181" A="255"/>
+ <Vtx X="8" Y="9" Z="-4" S="314" T="-431" R="96" G="18" B="82" A="255"/>
+ <Vtx X="8" Y="9" Z="-5" S="304" T="-432" R="85" G="236" B="163" A="255"/>
+ <Vtx X="8" Y="13" Z="-4" S="312" T="-376" R="97" G="241" B="81" A="255"/>
+ <Vtx X="8" Y="9" Z="-4" S="314" T="-431" R="96" G="18" B="82" A="255"/>
+ <Vtx X="8" Y="9" Z="-5" S="304" T="-432" R="85" G="236" B="163" A="255"/>
+ <Vtx X="8" Y="13" Z="-5" S="302" T="-377" R="84" G="17" B="162" A="255"/>
+ <Vtx X="8" Y="17" Z="-3" S="324" T="-321" R="88" G="39" B="174" A="255"/>
+ <Vtx X="8" Y="17" Z="-3" S="334" T="-325" R="93" G="215" B="77" A="255"/>
+ <Vtx X="8" Y="19" Z="-2" S="342" T="-287" R="98" G="20" B="177" A="255"/>
+ <Vtx X="8" Y="19" Z="-1" S="358" T="-287" R="105" G="193" B="33" A="255"/>
+ <Vtx X="0" Y="6" Z="-3" S="455" T="215" R="0" G="86" B="94" A="255"/>
+ <Vtx X="8" Y="5" Z="-1" S="483" T="97" R="98" G="79" B="20" A="255"/>
+ <Vtx X="8" Y="6" Z="-3" S="455" T="97" R="100" G="53" B="58" A="255"/>
+ <Vtx X="0" Y="5" Z="-1" S="483" T="215" R="0" G="125" B="236" A="255"/>
+ <Vtx X="-9" Y="6" Z="-3" S="455" T="333" R="156" G="53" B="58" A="255"/>
+ <Vtx X="-9" Y="5" Z="-1" S="483" T="333" R="158" G="79" B="20" A="255"/>
+ <Vtx X="0" Y="25" Z="-2" S="-407" T="-368" R="0" G="191" B="109" A="255"/>
+ <Vtx X="4" Y="24" Z="-3" S="-383" T="-427" R="96" G="254" B="83" A="255"/>
+ <Vtx X="4" Y="25" Z="-2" S="-407" T="-427" R="99" G="216" B="69" A="255"/>
+ <Vtx X="0" Y="24" Z="-3" S="-383" T="-368" R="0" G="252" B="127" A="255"/>
+ <Vtx X="-5" Y="25" Z="-2" S="-407" T="-309" R="157" G="216" B="69" A="255"/>
+ <Vtx X="-5" Y="24" Z="-3" S="-383" T="-309" R="160" G="254" B="83" A="255"/>
+ <Vtx X="0" Y="21" Z="-2" S="-348" T="-368" R="0" G="97" B="82" A="255"/>
+ <Vtx X="-5" Y="21" Z="-2" S="-348" T="-309" R="165" G="87" B="236" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="-348" T="-427" R="91" G="85" B="231" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="407" T="-388" R="0" G="51" B="140" A="255"/>
+ <Vtx X="-5" Y="25" Z="-3" S="422" T="-447" R="174" G="49" B="172" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="407" T="-447" R="153" G="30" B="188" A="255"/>
+ <Vtx X="0" Y="25" Z="-3" S="422" T="-388" R="0" G="65" B="147" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="407" T="-329" R="103" G="30" B="188" A="255"/>
+ <Vtx X="4" Y="25" Z="-3" S="422" T="-329" R="82" G="49" B="172" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="245" T="-456" R="153" G="30" B="188" A="255"/>
+ <Vtx X="-5" Y="25" Z="-2" S="240" T="-439" R="157" G="216" B="69" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="253" T="-457" R="154" G="185" B="27" A="255"/>
+ <Vtx X="-5" Y="25" Z="-3" S="232" T="-437" R="174" G="49" B="172" A="255"/>
+ <Vtx X="-5" Y="24" Z="-3" S="239" T="-413" R="160" G="254" B="83" A="255"/>
+ <Vtx X="-5" Y="24" Z="-3" S="231" T="-412" R="171" G="3" B="161" A="255"/>
+ <Vtx X="-5" Y="21" Z="-3" S="243" T="-380" R="172" G="209" B="172" A="255"/>
+ <Vtx X="-5" Y="21" Z="-2" S="251" T="-380" R="165" G="87" B="236" A="255"/>
+ <Vtx X="-4" Y="21" Z="-2" S="253" T="-373" R="243" G="222" B="134" A="255"/>
+ <Vtx X="0" Y="27" Z="-1" S="391" T="-388" R="0" G="129" B="253" A="255"/>
+ <Vtx X="4" Y="25" Z="-2" S="407" T="-447" R="99" G="216" B="69" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="391" T="-447" R="102" G="185" B="27" A="255"/>
+ <Vtx X="0" Y="25" Z="-2" S="407" T="-388" R="0" G="191" B="109" A="255"/>
+ <Vtx X="-5" Y="27" Z="-1" S="391" T="-329" R="154" G="185" B="27" A="255"/>
+ <Vtx X="-5" Y="25" Z="-2" S="407" T="-329" R="157" G="216" B="69" A="255"/>
+ <Vtx X="0" Y="25" Z="-3" S="-473" T="-368" R="0" G="65" B="147" A="255"/>
+ <Vtx X="-5" Y="24" Z="-3" S="-449" T="-427" R="171" G="3" B="161" A="255"/>
+ <Vtx X="-5" Y="25" Z="-3" S="-473" T="-427" R="174" G="49" B="172" A="255"/>
+ <Vtx X="0" Y="24" Z="-3" S="-449" T="-368" R="0" G="4" B="129" A="255"/>
+ <Vtx X="4" Y="25" Z="-3" S="-473" T="-309" R="82" G="49" B="172" A="255"/>
+ <Vtx X="4" Y="24" Z="-3" S="-449" T="-309" R="85" G="3" B="161" A="255"/>
+ <Vtx X="4" Y="21" Z="-3" S="-416" T="-309" R="84" G="209" B="173" A="255"/>
+ <Vtx X="-5" Y="21" Z="-3" S="-416" T="-427" R="172" G="209" B="172" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="-407" T="-314" R="11" G="222" B="134" A="255"/>
+ <Vtx X="-4" Y="21" Z="-2" S="-407" T="-424" R="243" G="222" B="134" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="-6" T="-408" R="91" G="85" B="231" A="255"/>
+ <Vtx X="4" Y="21" Z="-2" S="-5" T="-417" R="11" G="222" B="134" A="255"/>
+ <Vtx X="4" Y="21" Z="-3" S="-15" T="-408" R="84" G="209" B="173" A="255"/>
+ <Vtx X="4" Y="24" Z="-3" S="-19" T="-375" R="96" G="254" B="83" A="255"/>
+ <Vtx X="4" Y="24" Z="-3" S="-27" T="-377" R="85" G="3" B="161" A="255"/>
+ <Vtx X="4" Y="25" Z="-3" S="-26" T="-351" R="82" G="49" B="172" A="255"/>
+ <Vtx X="4" Y="25" Z="-3" S="-26" T="-351" R="82" G="49" B="172" A="255"/>
+ <Vtx X="4" Y="25" Z="-2" S="-18" T="-349" R="99" G="216" B="69" A="255"/>
+ <Vtx X="4" Y="24" Z="-3" S="-19" T="-375" R="96" G="254" B="83" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-13" T="-333" R="103" G="30" B="188" A="255"/>
+ <Vtx X="4" Y="27" Z="-1" S="-5" T="-331" R="102" G="185" B="27" A="255"/>
+</Vertex>
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material
new file mode 100644
index 000000000..e48b335c0
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material
@@ -0,0 +1,20 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_1" B0="G_CCMUX_TEXEL0" C0="G_CCMUX_PRIMITIVE" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_SHADE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_2CYCLE="1"/>
+ <PipelineMode G_PM_NPRIMITIVE="1"/>
+ <SetRenderMode Mode1="G_RM_FOG_SHADE_A" Mode2="G_RM_AA_ZB_OPA_SURF2" />
+ <Texture S="1984" T="1984" Level="0" Tile="0" On="1"/>
+ <TileSync/>
+ <SetTextureImage Path="textures/nintendo_rogo_static/SoHShiny" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="158" G="66" B="3" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_001 b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_001
new file mode 100644
index 000000000..e98640319
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_001
@@ -0,0 +1,20 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_1" B0="G_CCMUX_TEXEL0" C0="G_CCMUX_PRIMITIVE" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_SHADE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_2CYCLE="1"/>
+ <PipelineMode G_PM_NPRIMITIVE="1"/>
+ <SetRenderMode Mode1="G_RM_FOG_SHADE_A" Mode2="G_RM_AA_ZB_OPA_SURF2" />
+ <Texture S="1984" T="1984" Level="0" Tile="0" On="1"/>
+ <TileSync/>
+ <SetTextureImage Path="textures/nintendo_rogo_static/SoHShiny" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="124" G="127" B="126" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_002 b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_002
new file mode 100644
index 000000000..b2db72d79
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_002
@@ -0,0 +1,20 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_1" B0="G_CCMUX_TEXEL0" C0="G_CCMUX_PRIMITIVE" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_SHADE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_2CYCLE="1"/>
+ <PipelineMode G_PM_NPRIMITIVE="1"/>
+ <SetRenderMode Mode1="G_RM_FOG_SHADE_A" Mode2="G_RM_AA_ZB_OPA_SURF2" />
+ <Texture S="1984" T="1984" Level="0" Tile="0" On="1"/>
+ <TileSync/>
+ <SetTextureImage Path="textures/nintendo_rogo_static/SoHShiny" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="255" G="7" B="0" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_003 b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_003
new file mode 100644
index 000000000..be60fd46b
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_gShipLogoDL_f3d_material_003
@@ -0,0 +1,20 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_SHADE" D0="G_CCMUX_0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
+ <SetGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_2CYCLE="1"/>
+ <PipelineMode G_PM_NPRIMITIVE="1"/>
+ <SetRenderMode Mode1="G_RM_FOG_SHADE_A" Mode2="G_RM_AA_ZB_OPA_SURF2" />
+ <Texture S="1984" T="1984" Level="0" Tile="0" On="1"/>
+ <TileSync/>
+ <SetTextureImage Path="textures/nintendo_rogo_static/SoHShiny" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="88" G="46" B="16" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material
new file mode 100644
index 000000000..3cda02a88
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material
@@ -0,0 +1,8 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <ClearGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_1CYCLE="1"/>
+ <PipelineMode G_PM_1PRIMITIVE="1"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_001 b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_001
new file mode 100644
index 000000000..3cda02a88
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_001
@@ -0,0 +1,8 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <ClearGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_1CYCLE="1"/>
+ <PipelineMode G_PM_1PRIMITIVE="1"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_002 b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_002
new file mode 100644
index 000000000..3cda02a88
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_002
@@ -0,0 +1,8 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <ClearGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_1CYCLE="1"/>
+ <PipelineMode G_PM_1PRIMITIVE="1"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_003 b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_003
new file mode 100644
index 000000000..3cda02a88
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/mat_revert_gShipLogoDL_f3d_material_003
@@ -0,0 +1,8 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <ClearGeometryMode G_FOG="1" G_TEXTURE_GEN="1" />
+ <SetCycleType G_CYC_1CYCLE="1"/>
+ <PipelineMode G_PM_1PRIMITIVE="1"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/mm/assets/custom/textures/nintendo_rogo_static/nintendo_rogo_static_Tex_LUS_000000 b/mm/assets/custom/textures/nintendo_rogo_static/nintendo_rogo_static_Tex_LUS_000000
new file mode 100644
index 000000000..2edcaacb3
--- /dev/null
+++ b/mm/assets/custom/textures/nintendo_rogo_static/nintendo_rogo_static_Tex_LUS_000000
Binary files differ
diff --git a/mm/assets/custom/textures/parameter_static/gArrowDown.ia16.png b/mm/assets/custom/textures/parameter_static/gArrowDown.ia16.png
new file mode 100644
index 000000000..cdb51d79c
--- /dev/null
+++ b/mm/assets/custom/textures/parameter_static/gArrowDown.ia16.png
Binary files differ
diff --git a/mm/assets/custom/textures/parameter_static/gArrowUp.ia16.png b/mm/assets/custom/textures/parameter_static/gArrowUp.ia16.png
new file mode 100644
index 000000000..1ed3f1cdd
--- /dev/null
+++ b/mm/assets/custom/textures/parameter_static/gArrowUp.ia16.png
Binary files differ
diff --git a/mm/assets/custom/textures/parameter_static/gDPad.ia16.png b/mm/assets/custom/textures/parameter_static/gDPad.ia16.png
new file mode 100644
index 000000000..fc818e0d1
--- /dev/null
+++ b/mm/assets/custom/textures/parameter_static/gDPad.ia16.png
Binary files differ
diff --git a/mm/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png b/mm/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png
new file mode 100644
index 000000000..cc67b6a13
--- /dev/null
+++ b/mm/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsENGTex.ia8.png b/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsENGTex.ia8.png
new file mode 100644
index 000000000..e7a7aaa88
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsENGTex.ia8.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsFRATex.ia8.png b/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsFRATex.ia8.png
new file mode 100644
index 000000000..8cbf6339c
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsFRATex.ia8.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsGERTex.ia8.png b/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsGERTex.ia8.png
new file mode 100644
index 000000000..455390170
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelBossRushSettingsGERTex.ia8.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelMQButtonTex.ia16.png b/mm/assets/custom/textures/title_static/gFileSelMQButtonTex.ia16.png
new file mode 100644
index 000000000..076b9365f
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelMQButtonTex.ia16.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestENGTex.ia8.png b/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestENGTex.ia8.png
new file mode 100644
index 000000000..02ca600c2
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestENGTex.ia8.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestFRATex.ia8.png b/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestFRATex.ia8.png
new file mode 100644
index 000000000..8bc17292b
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestFRATex.ia8.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestGERTex.ia8.png b/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestGERTex.ia8.png
new file mode 100644
index 000000000..25f96cc2b
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestGERTex.ia8.png
Binary files differ
diff --git a/mm/assets/custom/textures/title_static/gFileSelRANDButtonTex.ia16.png b/mm/assets/custom/textures/title_static/gFileSelRANDButtonTex.ia16.png
new file mode 100644
index 000000000..f43114e81
--- /dev/null
+++ b/mm/assets/custom/textures/title_static/gFileSelRANDButtonTex.ia16.png
Binary files differ
diff --git a/mm/assets/custom/textures/virtual/gEmptyTexture.rgba32.png b/mm/assets/custom/textures/virtual/gEmptyTexture.rgba32.png
new file mode 100644
index 000000000..eaf806b71
--- /dev/null
+++ b/mm/assets/custom/textures/virtual/gEmptyTexture.rgba32.png
Binary files differ
diff --git a/mm/build.c b/mm/build.c
deleted file mode 100644
index e69de29bb..000000000
--- a/mm/build.c
+++ /dev/null
diff --git a/mm/include/build.h b/mm/include/build.h
index 5099e5d3c..e69975e01 100644
--- a/mm/include/build.h
+++ b/mm/include/build.h
@@ -1,8 +1,22 @@
#ifndef BUILD_H
#define BUILD_H
+#include <libultraship/libultra.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+// 2S2H [Port] Version information
+extern char gBuildVersion[];
+extern u16 gBuildVersionMajor;
+extern u16 gBuildVersionMinor;
+extern u16 gBuildVersionPatch;
+
extern char gBuildTeam[];
extern char gBuildDate[];
extern char gBuildMakeOption[];
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/mm/src/boot/build.c b/mm/src/boot/build.c
deleted file mode 100644
index 23bd1cd59..000000000
--- a/mm/src/boot/build.c
+++ /dev/null
@@ -1,3 +0,0 @@
-const char gBuildTeam[] = "zelda@srd44";
-const char gBuildDate[] = "00-07-31 17:04:16";
-const char gBuildMakeOption[] = "";
diff --git a/mm/src/boot/build.c.in b/mm/src/boot/build.c.in
index e69de29bb..fedca727f 100644
--- a/mm/src/boot/build.c.in
+++ b/mm/src/boot/build.c.in
@@ -0,0 +1,11 @@
+#include <libultraship/libultra.h>
+
+// 2S2H [Port] Version information
+const char gBuildVersion[] = "@PROJECT_BUILD_NAME@ (@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@)";
+const u16 gBuildVersionMajor = @CMAKE_PROJECT_VERSION_MAJOR@;
+const u16 gBuildVersionMinor = @CMAKE_PROJECT_VERSION_MINOR@;
+const u16 gBuildVersionPatch = @CMAKE_PROJECT_VERSION_PATCH@;
+
+const char gBuildTeam[] = "@PROJECT_TEAM@";
+const char gBuildDate[] = __DATE__ " " __TIME__;
+const char gBuildMakeOption[] = "";
diff --git a/mm/src/code/c_keyframe.c b/mm/src/code/c_keyframe.c
index d37b28a9b..6ae56e54d 100644
--- a/mm/src/code/c_keyframe.c
+++ b/mm/src/code/c_keyframe.c
@@ -132,7 +132,7 @@ void Keyframe_InitFlex(KFSkelAnimeFlex* kfSkelAnime, KeyFrameSkeleton* skeleton,
skel = (KeyFrameSkeleton*)ResourceMgr_LoadKeyFrameSkelByName(skeleton);
}
if (ResourceMgr_OTRSigCheck(anim)) {
- anim = (KeyFrameSkeleton*)ResourceMgr_LoadKeyFrameSkelByName(animation);
+ anim = (KeyFrameAnimation*)ResourceMgr_LoadKeyFrameAnimByName(animation);
}
kfSkelAnime->skeleton = skel;