From b046f33b3c30da618b494ac5be61a4e7ffc6e956 Mon Sep 17 00:00:00 2001 From: Aetias Date: Tue, 30 Apr 2024 18:38:48 +0200 Subject: [PATCH] Decomp `ItemManager::LoadDungeonItemModels` --- asm/ov00/Item/ItemManager.s | 45 ----------------------------- include/DTCM/UnkStruct_027e0f78.hpp | 15 ++++++++++ include/Item/ItemManager.hpp | 1 + src/00_Core/Item/ItemManager.cpp | 25 ++++++++++++++++ 4 files changed, 41 insertions(+), 45 deletions(-) create mode 100644 include/DTCM/UnkStruct_027e0f78.hpp diff --git a/asm/ov00/Item/ItemManager.s b/asm/ov00/Item/ItemManager.s index 74b706e5..cfbe2a4c 100644 --- a/asm/ov00/Item/ItemManager.s +++ b/asm/ov00/Item/ItemManager.s @@ -3,51 +3,6 @@ .text - .global _ZN11ItemManager21LoadDungeonItemModelsEv - thumb_func_start _ZN11ItemManager21LoadDungeonItemModelsEv -_ZN11ItemManager21LoadDungeonItemModelsEv: ; 0x020ae5fc - push {r3, r4, r5, r6, r7, lr} - ldr r7, _020ae644 ; =data_027e0f78 - add r5, r0, #0 - mov r4, #0 -_020ae604: - mov r0, #1 - lsl r0, r0, #8 - ldr r0, [r5, r0] - cmp r0, #0 - beq _020ae638 - cmp r4, #2 - beq _020ae61a - cmp r4, #3 - beq _020ae61a - cmp r4, #4 - bne _020ae622 -_020ae61a: - ldr r2, [r7] - ldrh r1, [r2, #0x1e] - ldrh r6, [r2, #0x1c] - b _020ae628 -_020ae622: - ldr r2, [r7] - ldrh r1, [r2, #0x1a] - ldrh r6, [r2, #0x18] -_020ae628: - blx func_020196bc - mov r0, #1 - lsl r0, r0, #8 - ldr r0, [r5, r0] - add r1, r6, #0 - blx func_020196fc -_020ae638: - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #5 - blt _020ae604 - pop {r3, r4, r5, r6, r7, pc} - nop - thumb_func_end _ZN11ItemManager21LoadDungeonItemModelsEv -_020ae644: .word data_027e0f78 - .global _ZN11ItemManager18func_ov00_020ae648Ejjj thumb_func_start _ZN11ItemManager18func_ov00_020ae648Ejjj _ZN11ItemManager18func_ov00_020ae648Ejjj: ; 0x020ae648 diff --git a/include/DTCM/UnkStruct_027e0f78.hpp b/include/DTCM/UnkStruct_027e0f78.hpp new file mode 100644 index 00000000..04353f37 --- /dev/null +++ b/include/DTCM/UnkStruct_027e0f78.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_027e0f78 { + /* 00 */ unk8 mUnk_00[0x18]; + /* 18 */ u16 mUnk_18; + /* 1a */ u16 mUnk_1a; + /* 1c */ u16 mUnk_1c; + /* 1e */ u16 mUnk_1e; + /* 20 */ +}; + +extern UnkStruct_027e0f78 *data_027e0f78; diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index 666ae6de..46c2d70b 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -9,6 +9,7 @@ extern "C" { #include "lib/math.h" #include "Actor/ActorNavi.hpp" +#include "DTCM/UnkStruct_027e0f78.hpp" #include "Save/AdventureFlags.hpp" #include "Item/Item.hpp" #include "Map/MapManager.hpp" diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index 03cc2f19..b77717eb 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -889,3 +889,28 @@ ARM bool ItemManager::HasPurplePotion() const { } return false; } + +extern "C" void func_020196bc(ItemModel *param1, unk32 param2); +extern "C" void func_020196fc(ItemModel *param1, unk32 param2); +THUMB void ItemManager::LoadDungeonItemModels() { + for (s32 i = 0; i < DungeonItemModelId_COUNT; ++i) { + if (mDungeonItemModels[i] == NULL) continue; + + u16 unk1, unk2; + switch (i) { + case DungeonItemModelId_RoundCrystal: + case DungeonItemModelId_SquareCrystal: + case DungeonItemModelId_TriangleCrystal: { + unk1 = data_027e0f78->mUnk_1e; + unk2 = data_027e0f78->mUnk_1c; + } break; + + default: { + unk1 = data_027e0f78->mUnk_1a; + unk2 = data_027e0f78->mUnk_18; + } break; + } + func_020196bc(mDungeonItemModels[i], unk1); + func_020196fc(mDungeonItemModels[i], unk2); + } +}