Decomp ItemManager::LoadFanfareItem

This commit is contained in:
Aetias
2024-04-14 14:19:59 +02:00
parent 9ac440e5ec
commit 7cc42a9526
9 changed files with 81 additions and 210 deletions
+6 -202
View File
@@ -3,202 +3,6 @@
.text
.global _ZN11ItemManager15LoadFanfareItemEj
thumb_func_start _ZN11ItemManager15LoadFanfareItemEj
_ZN11ItemManager15LoadFanfareItemEj: ; 0x020adb30
push {r4, r5, lr}
sub sp, #0x10c
add r5, r0, #0
mov r0, #0x46
lsl r0, r0, #2
str r1, [r5, r0]
cmp r1, #0x2b
beq _020adb54
cmp r1, #0x25
beq _020adb54
cmp r1, #0x79
blt _020adb4c
cmp r1, #0x7c
ble _020adb54
_020adb4c:
cmp r1, #0x7e
beq _020adb54
cmp r1, #0x85
bne _020adb5c
_020adb54:
ldr r0, _020adc8c ; =data_027e1058
ldr r0, [r0]
ldr r1, [r0]
b _020adc7c
_020adb5c:
cmp r1, #0x30
blt _020adb76
cmp r1, #0x37
bgt _020adb76
ldr r0, _020adc90 ; =data_027e105c
sub r1, #0x30
ldr r0, [r0]
mov r2, #1
mov r3, #0
bl LoadTreasureItemFanfare
add r1, r0, #0
b _020adc7c
_020adb76:
cmp r1, #0x7d
bne _020adb82
ldr r0, _020adc90 ; =data_027e105c
ldr r0, [r0]
ldr r1, [r0]
b _020adc7c
_020adb82:
add r3, sp, #0x8c
mov r2, #0x80
mov r0, #0
_020adb88:
strb r0, [r3]
add r3, r3, #1
sub r2, r2, #1
bne _020adb88
add r3, sp, #0xc
mov r2, #0x80
mov r0, #0
_020adb96:
strb r0, [r3]
add r3, r3, #1
sub r2, r2, #1
bne _020adb96
mov r4, #0
cmp r1, #0x28
bne _020adbb4
add r0, r5, #0
add r0, #0xb4
ldrh r0, [r0]
cmp r0, #1
blt _020adbb4
ldr r0, _020adc94 ; =data_ov00_020e5df8
ldr r4, [r0, #4]
b _020adc22
_020adbb4:
cmp r1, #0x29
bne _020adbc8
add r0, r5, #0
add r0, #0xb6
ldrh r0, [r0]
cmp r0, #1
blt _020adbc8
ldr r0, _020adc94 ; =data_ov00_020e5df8
ldr r4, [r0, #8]
b _020adc22
_020adbc8:
cmp r1, #0x2a
bne _020adbdc
add r0, r5, #0
add r0, #0xb8
ldrh r0, [r0]
cmp r0, #1
blt _020adbdc
ldr r0, _020adc94 ; =data_ov00_020e5df8
ldr r4, [r0, #0xc]
b _020adc22
_020adbdc:
cmp r1, #0x3e
bne _020adbe6
ldr r0, _020adc98 ; =data_ov00_020e5c78
ldr r4, [r0, #0x2c]
b _020adc22
_020adbe6:
cmp r1, #0x46
bge _020adbf2
ldr r0, _020adc9c ; =data_ov00_020e5c9c
lsl r1, r1, #2
ldr r4, [r0, r1]
b _020adc22
_020adbf2:
cmp r1, #0x71
blt _020adc04
cmp r1, #0x79
bge _020adc04
sub r1, #0x71
ldr r0, _020adca0 ; =data_ov00_020e5db4
lsl r1, r1, #2
ldr r4, [r0, r1]
b _020adc22
_020adc04:
cmp r1, #0x7f
blt _020adc16
cmp r1, #0x88
bge _020adc16
sub r1, #0x7f
ldr r0, _020adca4 ; =data_ov00_020e5dd4
lsl r1, r1, #2
ldr r4, [r0, r1]
b _020adc22
_020adc16:
cmp r1, #0x4b
blt _020adc22
cmp r1, #0x6a
bgt _020adc22
ldr r0, _020adc94 ; =data_ov00_020e5df8
ldr r4, [r0]
_020adc22:
cmp r4, #0
bne _020adc2a
ldr r0, _020adc98 ; =data_ov00_020e5c78
ldr r4, [r0, #0x20]
_020adc2a:
ldr r1, _020adc94 ; =data_ov00_020e5df8
add r0, sp, #0x8c
ldr r1, [r1, #0x10]
blx strcat
add r0, sp, #0x8c
add r1, r4, #0
blx strcat
ldr r1, _020adc94 ; =data_ov00_020e5df8
add r0, sp, #0x8c
ldr r1, [r1, #0x14]
blx strcat
ldr r1, _020adc94 ; =data_ov00_020e5df8
add r0, sp, #0xc
ldr r1, [r1, #0x10]
blx strcat
add r0, sp, #0xc
add r1, r4, #0
blx strcat
ldr r1, _020adc94 ; =data_ov00_020e5df8
add r0, sp, #0xc
ldr r1, [r1, #0x18]
blx strcat
mov r3, #0
str r3, [sp]
str r3, [sp, #4]
mov r0, #1
str r0, [sp, #8]
mov r0, #0x12
lsl r0, r0, #4
ldr r0, [r5, r0]
add r1, sp, #0x8c
add r2, sp, #0xc
bl func_ov00_02079ffc
add r1, r0, #0
_020adc7c:
mov r0, #0x45
lsl r0, r0, #2
ldr r0, [r5, r0]
ldr r2, [r0]
ldr r2, [r2, #0xc]
blx r2
add sp, #0x10c
pop {r4, r5, pc}
.align 2, 0
thumb_func_end _ZN11ItemManager15LoadFanfareItemEj
_020adc8c: .word data_027e1058
_020adc90: .word data_027e105c
_020adc94: .word data_ov00_020e5df8
_020adc98: .word data_ov00_020e5c78
_020adc9c: .word data_ov00_020e5c9c
_020adca0: .word data_ov00_020e5db4
_020adca4: .word data_ov00_020e5dd4
.global _ZNK11ItemManager19GetFanfareItemScaleEP5Vec3p
thumb_func_start _ZNK11ItemManager19GetFanfareItemScaleEP5Vec3p
_ZNK11ItemManager19GetFanfareItemScaleEP5Vec3p: ; 0x020adca8
@@ -1717,8 +1521,8 @@ data_ov00_020e5c70: ; 0x020e5c70
data_ov00_020e5c74: ; 0x020e5c74
.ascii "anc"
.byte 0x00
.global data_ov00_020e5c78
data_ov00_020e5c78: ; 0x020e5c78
.global sUnknownItemModelNames
sUnknownItemModelNames: ; 0x020e5c78
.word data_ov00_020e5c74
.global data_ov00_020e5c7c
data_ov00_020e5c7c: ; 0x020e5c7c
@@ -1744,8 +1548,8 @@ data_ov00_020e5c94: ; 0x020e5c94
.global data_ov00_020e5c98
data_ov00_020e5c98: ; 0x020e5c98
.word data_ov00_020e5e14
.global data_ov00_020e5c9c
data_ov00_020e5c9c: ; 0x020e5c9c
.global sItemModelNames
sItemModelNames: ; 0x020e5c9c
.word data_ov00_020e5e18
.global data_ov00_020e5ca0
data_ov00_020e5ca0: ; 0x020e5ca0
@@ -2005,8 +1809,8 @@ data_ov00_020e5df0: ; 0x020e5df0
.global data_ov00_020e5df4
data_ov00_020e5df4: ; 0x020e5df4
.byte 0x00, 0x00, 0x00, 0x00
.global data_ov00_020e5df8
data_ov00_020e5df8: ; 0x020e5df8
.global sSpecialItemModelNames
sSpecialItemModelNames: ; 0x020e5df8
.word data_ov00_020e6030
.global data_ov00_020e5dfc
data_ov00_020e5dfc: ; 0x020e5dfc
+1 -1
View File
@@ -2,7 +2,7 @@
.extern Divide
.extern _ZN10PlayerBase18func_ov00_020a7c00Ei
.extern _ZN11ItemManager12GetItemModelEj
.extern _ZN11ItemManager15LoadFanfareItemEj
.extern _ZN11ItemManager15LoadFanfareItemEi
.extern _ZN11ItemManager18func_ov00_020ae648Ejjj
.extern _ZN11ItemManager8GiveItemEjjj
.extern _ZN13LinkStateBase10GetStateIdEv
+2 -2
View File
@@ -9726,7 +9726,7 @@ _02108c34:
ldr r0, _02108cf0 ; =gItemManager
ldr r1, [r4, #0x74]
ldr r0, [r0]
blx _ZN11ItemManager15LoadFanfareItemEj
blx _ZN11ItemManager15LoadFanfareItemEi
ldr r0, [r4, #0x74]
mov r2, #1
cmp r0, #0x81
@@ -9884,7 +9884,7 @@ _02108e44:
ldr r0, _02108e88 ; =gItemManager
mov r1, r4
ldr r0, [r0]
blx _ZN11ItemManager15LoadFanfareItemEj
blx _ZN11ItemManager15LoadFanfareItemEi
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
arm_func_end func_ov05_02108e08
+1 -1
View File
@@ -7,7 +7,7 @@
.extern _ZN11ItemManager12GetEquipItemEi
.extern _ZN11ItemManager12GetItemModelEj
.extern _ZN11ItemManager13TickEquipItemEv
.extern _ZN11ItemManager15LoadFanfareItemEj
.extern _ZN11ItemManager15LoadFanfareItemEi
.extern _ZN11ItemManager15SetEquippedItemEi
.extern _ZN11ItemManager17EquipPreviousItemEv
.extern _ZN11ItemManager18EquipItem_vfunc_38Ei
+1 -1
View File
@@ -26983,7 +26983,7 @@ _0215074c:
ldr r0, _02150764 ; =gItemManager
add r1, r4, #0
ldr r0, [r0]
bl _ZN11ItemManager15LoadFanfareItemEj
bl _ZN11ItemManager15LoadFanfareItemEi
add r0, r5, #0
mov r1, #0
bl func_ov14_02150848
+1 -1
View File
@@ -11,7 +11,7 @@
.extern _ZN10PlayerBase9AddHealthEs
.extern _ZN11ItemManager10GiveRupeesEjj
.extern _ZN11ItemManager10SetUnk_09eEjt
.extern _ZN11ItemManager15LoadFanfareItemEj
.extern _ZN11ItemManager15LoadFanfareItemEi
.extern _ZN11ItemManager18func_ov00_020ad528Ev
.extern _ZN11ItemManager18func_ov00_020ae648Ejjj
.extern _ZN11ItemManager19SetTreasureSalvagedEj
+2 -2
View File
@@ -44543,7 +44543,7 @@ _02145334:
ldr r0, _0214581c ; =gItemManager
mov r1, r5
ldr r0, [r0]
blx _ZN11ItemManager15LoadFanfareItemEj
blx _ZN11ItemManager15LoadFanfareItemEi
mov r0, r6
mov r1, #1
bl func_ov15_0216e168
@@ -88262,7 +88262,7 @@ _0216a93c:
ldr r0, _0216a95c ; =gItemManager
mov r1, r4
ldr r0, [r0]
blx _ZN11ItemManager15LoadFanfareItemEj
blx _ZN11ItemManager15LoadFanfareItemEi
mov r0, r5
bl func_ov15_0216a968
add sp, sp, #4
+4
View File
@@ -1,5 +1,9 @@
#pragma once
extern "C" {
#include <string.h>
}
#include "global.h"
#include "types.h"
#include "lib/math.h"
+63
View File
@@ -380,3 +380,66 @@ THUMB void ItemManager::RemoveItem(ItemFlag item) {
(*mAmmo)[item] = 0;
}
}
extern ItemModel **data_027e1058;
extern ItemModel **data_027e105c;
extern "C" ItemModel* func_ov00_02079ffc(void*, const char *modelName, const char *textureName, unk32 param4, unk8 param5, unk8 param6, bool param7);
extern "C" ItemModel* LoadTreasureItemFanfare(ItemModel**, s32 treasureType, bool, bool);
extern const char *sUnknownItemModelNames[];
extern const char *data_ov00_020e5dd4[];
extern const char *data_ov00_020e5db4[];
extern const char *sItemModelNames[];
extern const char *sSpecialItemModelNames[];
THUMB void ItemManager::LoadFanfareItem(ItemId id) {
mFanfareItem = id;
ItemModel *model;
if (
id == ItemId_Unk_43 ||
id == ItemId_Cannon ||
(id >= ItemId_GOLDEN_SHIP_START && id <= ItemId_GOLDEN_SHIP_END) ||
id == ItemId_Unk_126 ||
id == ItemId_Unk_133
) {
model = *data_027e1058;
} else if (
id >= ItemId_TREASURE_START &&
id <= ItemId_TREASURE_END
) {
model = LoadTreasureItemFanfare(data_027e105c, id - ItemId_TREASURE_START, true, false);
} else if (id == ItemId_Unk_125) {
model = *data_027e105c;
} else {
char modelName[0x80] = {};
char textureName[0x80] = {};
const char *itemName = NULL;
if (id == ItemId_Quiver && (s32) mQuiverSize >= 1) {
itemName = sSpecialItemModelNames[1];
} else if (id == ItemId_BigBombBag && (s32) mBombBagSize >= 1) {
itemName = sSpecialItemModelNames[2];
} else if (id == ItemId_BigBombchuBag && (s32) mBombchuBagSize >= 1) {
itemName = sSpecialItemModelNames[3];
} else if (id == ItemId_HerosNewClothes) {
itemName = sUnknownItemModelNames[11];
} else if (id < ItemId_Unk_70) {
itemName = sItemModelNames[id];
} else if (id >= ItemId_SwordsmanScroll && id < ItemId_GoldenChimney) {
itemName = data_ov00_020e5db4[id - ItemId_SwordsmanScroll];
} else if (id >= ItemId_CycloneSlate && id < ItemId_Unk_136) {
itemName = data_ov00_020e5dd4[id - ItemId_CycloneSlate];
} else if (id >= ItemId_TREASURE_CHART_START && id <= ItemId_TREASURE_CHART_END) {
itemName = sSpecialItemModelNames[0];
}
if (!itemName) {
itemName = sUnknownItemModelNames[8];
}
strcat(modelName, sSpecialItemModelNames[4]);
strcat(modelName, itemName);
strcat(modelName, sSpecialItemModelNames[5]);
strcat(textureName, sSpecialItemModelNames[4]);
strcat(textureName, itemName);
strcat(textureName, sSpecialItemModelNames[6]);
model = func_ov00_02079ffc(mFanfareItemModel, modelName, textureName, 0, 0, 0, true);
}
mUnk_114->vfunc_0c(model);
}