summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2024-04-30 18:38:48 +0200
committerAetias <aetias@outlook.com>2024-04-30 18:38:48 +0200
commitb046f33b3c30da618b494ac5be61a4e7ffc6e956 (patch)
treedf2ba3663cbea99bf921ae3a296d4d9f9609a62d
parent102fc098fa59af662c5b21bac49157cfaa23a0dc (diff)
Decomp `ItemManager::LoadDungeonItemModels`
-rw-r--r--asm/ov00/Item/ItemManager.s45
-rw-r--r--include/DTCM/UnkStruct_027e0f78.hpp15
-rw-r--r--include/Item/ItemManager.hpp1
-rw-r--r--src/00_Core/Item/ItemManager.cpp25
4 files changed, 41 insertions, 45 deletions
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);
+ }
+}