summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2026-05-04 22:07:42 +0200
committerGitHub <noreply@github.com>2026-05-04 22:07:42 +0200
commitb44496319d3027a625fcf876cf22e467720355df (patch)
tree4eff75d3a7855824487f1e87c99394640fb3387d
parentfe6681a298f089c5bbbee077ad9c06dc801df476 (diff)
ActorShopItem 98% (#151)
* ActorShopItem 93% * Fix build * Add missing symbols to usa * Document BMG message ID functions * Create bmg.py for inspecting BMG files * ActorShopItem 98% * Match func_ov031_0217dfec * Port reloc changes to usa * Make `ModelRender::GetLcdcAddress` non-const
-rw-r--r--.clangd1
-rw-r--r--config/eur/arm9/overlays/ov000/relocs.txt18
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt8
-rw-r--r--config/eur/arm9/overlays/ov003/symbols.txt2
-rw-r--r--config/eur/arm9/overlays/ov004/relocs.txt44
-rw-r--r--config/eur/arm9/overlays/ov009/relocs.txt4
-rw-r--r--config/eur/arm9/overlays/ov015/relocs.txt14
-rw-r--r--config/eur/arm9/overlays/ov018/relocs.txt2
-rw-r--r--config/eur/arm9/overlays/ov025/relocs.txt2
-rw-r--r--config/eur/arm9/overlays/ov026/relocs.txt2
-rw-r--r--config/eur/arm9/overlays/ov031/delinks.txt5
-rw-r--r--config/eur/arm9/overlays/ov031/relocs.txt72
-rw-r--r--config/eur/arm9/overlays/ov031/symbols.txt599
-rw-r--r--config/eur/arm9/overlays/ov040/relocs.txt2
-rw-r--r--config/eur/arm9/relocs.txt4
-rw-r--r--config/eur/arm9/symbols.txt4
-rw-r--r--config/usa/arm9/overlays/ov000/relocs.txt18
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt8
-rw-r--r--config/usa/arm9/overlays/ov003/symbols.txt2
-rw-r--r--config/usa/arm9/overlays/ov004/relocs.txt44
-rw-r--r--config/usa/arm9/overlays/ov009/relocs.txt4
-rw-r--r--config/usa/arm9/overlays/ov015/relocs.txt14
-rw-r--r--config/usa/arm9/overlays/ov018/relocs.txt2
-rw-r--r--config/usa/arm9/overlays/ov031/delinks.txt5
-rw-r--r--config/usa/arm9/overlays/ov031/relocs.txt72
-rw-r--r--config/usa/arm9/overlays/ov031/symbols.txt599
-rw-r--r--config/usa/arm9/overlays/ov040/relocs.txt2
-rw-r--r--config/usa/arm9/relocs.txt4
-rw-r--r--config/usa/arm9/symbols.txt4
-rw-r--r--include/Actor/ActorShopItem.hpp240
-rw-r--r--include/Actor/ActorTypeId.hpp19
-rw-r--r--include/DTCM/UnkStruct_027e0f64.hpp14
-rw-r--r--include/Message/BMG.hpp2
-rw-r--r--include/Message/MsgProc.hpp2
-rw-r--r--include/Save/AdventureFlags.hpp9
-rw-r--r--include/System/SysNew.hpp2
-rw-r--r--include/Unknown/UnkStruct_027e0dbc.hpp1
-rw-r--r--include/Unknown/UnkStruct_ov000_020c0c08.hpp7
-rw-r--r--include/lib/files.hpp17
-rw-r--r--include/types.h1
-rw-r--r--libs/nds/include/nds/g3d/g3d.h4
-rw-r--r--libs/nds/include/nds/g3d/sbc.h4
-rw-r--r--src/00_Core/Map/MapManager.cpp10
-rw-r--r--src/00_Core/Player/PlayerControl.cpp4
-rw-r--r--src/00_Core/Render/ModelRender.cpp2
-rw-r--r--src/09_Adventure/Game/GameModeAdventure.cpp2
-rw-r--r--src/31_Shop/Actor/ActorShopItem.cpp1436
-rw-r--r--src/Main/Unknown/UnkStruct_020397f8.cpp2
-rw-r--r--tools/bmg.py115
-rw-r--r--tools/requirements.txt1
-rw-r--r--tools/vtable_sym.py129
51 files changed, 2537 insertions, 1047 deletions
diff --git a/.clangd b/.clangd
index 617e5d9b..4e544a02 100644
--- a/.clangd
+++ b/.clangd
@@ -8,3 +8,4 @@ CompileFlags:
- -Ilibs/nds/include
- -Ilibs/nitro/include
- -Ilibs/nns/include
+ - -Wno-c99-designator
diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt
index 25cbeb02..cef7adca 100644
--- a/config/eur/arm9/overlays/ov000/relocs.txt
+++ b/config/eur/arm9/overlays/ov000/relocs.txt
@@ -3349,12 +3349,12 @@ from:0x0209bb2c kind:arm_call to:0x0204f614 module:main
from:0x0209bb44 kind:arm_call to:0x020a5b38 module:overlay(0)
from:0x0209bb98 kind:arm_call to:0x02080f64 module:overlay(0)
from:0x0209bba8 kind:load to:0x027e0ce0 module:dtcm
-from:0x0209bbac kind:load to:0x02057878 module:main
-from:0x0209bbb0 kind:load to:0x0205785c module:main
+from:0x0209bbac kind:load to:0x02057870 add:0x8 module:main
+from:0x0209bbb0 kind:load to:0x02057854 add:0x8 module:main
from:0x0209bbb4 kind:load to:0x0203010d module:main
from:0x0209bbb8 kind:load to:0x0209bbc0 module:overlay(0)
from:0x0209bbbc kind:load to:0x020db058 module:overlay(0)
-from:0x0209bbe0 kind:load to:0x02057878 module:main
+from:0x0209bbe0 kind:load to:0x02057870 add:0x8 module:main
from:0x0209bbe4 kind:load to:0x02057840 module:main
from:0x0209bc18 kind:arm_call to:0x020a5d74 module:overlay(0)
from:0x0209bc68 kind:arm_call to:0x020a5e08 module:overlay(0)
@@ -4288,9 +4288,9 @@ from:0x020a5788 kind:arm_call to:0x020c0e5c module:overlay(0)
from:0x020a57f4 kind:load to:0x020dc294 module:overlay(0)
from:0x020a57f8 kind:load to:0x027e0ce0 module:dtcm
from:0x020a57fc kind:load to:0x020dc354 module:overlay(0)
-from:0x020a5800 kind:load to:0x02057878 module:main
+from:0x020a5800 kind:load to:0x02057870 add:0x8 module:main
from:0x020a5804 kind:load to:0x0209bbc0 module:overlay(0)
-from:0x020a5808 kind:load to:0x0205785c module:main
+from:0x020a5808 kind:load to:0x02057854 add:0x8 module:main
from:0x020a580c kind:load to:0x0203010d module:main
from:0x020a5810 kind:load to:0x020dc2c4 module:overlay(0)
from:0x020a5814 kind:load to:0x020dc324 module:overlay(0)
@@ -7721,10 +7721,10 @@ from:0x020c42cc kind:load to:0x027e0fe4 module:dtcm
from:0x020c42d4 kind:load to:0x027e0e60 module:dtcm
from:0x020c42e8 kind:load to:0x020ddfa0 module:overlay(0)
from:0x020c4318 kind:load to:0x020ddad8 module:overlay(0)
-from:0x020c4378 kind:load to:0x02057878 module:main
+from:0x020c4378 kind:load to:0x02057870 add:0x8 module:main
from:0x020c437c kind:load to:0x02057840 module:main
from:0x020c4380 kind:load to:0x020e835c module:overlay(0)
-from:0x020c4384 kind:load to:0x0205785c module:main
+from:0x020c4384 kind:load to:0x02057854 add:0x8 module:main
from:0x020c43ac kind:arm_call_thumb to:0x0202d5dc module:main
from:0x020c43e8 kind:arm_call to:0x020c42d8 module:overlay(0)
from:0x020c43fc kind:arm_call to:0x02047024 module:main
@@ -11220,10 +11220,10 @@ from:0x020e191c kind:arm_call to:0x0204f8d4 module:main
from:0x020e1948 kind:arm_call to:0x0204f8d4 module:main
from:0x020e1974 kind:arm_call to:0x0204f8d4 module:main
from:0x020e19a4 kind:arm_call to:0x0204f8d4 module:main
-from:0x020e19ac kind:load to:0x02057878 module:main
+from:0x020e19ac kind:load to:0x02057870 add:0x8 module:main
from:0x020e19b0 kind:load to:0x020ee1fc module:overlay(0)
from:0x020e19b4 kind:load to:0x020e699c module:overlay(0)
-from:0x020e19b8 kind:load to:0x0205785c module:main
+from:0x020e19b8 kind:load to:0x02057854 add:0x8 module:main
from:0x020e19bc kind:load to:0x020ee408 module:overlay(0)
from:0x020e19c0 kind:load to:0x0203005d module:main
from:0x020e19c4 kind:load to:0x020ee2d4 module:overlay(0)
diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt
index 2a9873f8..f6f84a60 100644
--- a/config/eur/arm9/overlays/ov000/symbols.txt
+++ b/config/eur/arm9/overlays/ov000/symbols.txt
@@ -137,10 +137,10 @@ func_ov000_02079e04 kind:function(arm,size=0x38) addr:0x02079e04
_Z19func_ov000_02079e3cv kind:function(arm,size=0x2c) addr:0x02079e3c
_ZN18UnkStruct_020e936019func_ov000_02079e68Ei kind:function(arm,size=0x4c) addr:0x02079e68
func_ov000_02079eb4 kind:function(arm,size=0x24) addr:0x02079eb4
-func_ov000_02079ed8 kind:function(thumb,size=0x22) addr:0x02079ed8
+_ZN29ActorShopItemCollectable_Unk1C1Ev kind:function(thumb,size=0x22) addr:0x02079ed8
func_ov000_02079efc kind:function(thumb,size=0x3e) addr:0x02079efc
-func_ov000_02079f3c kind:function(thumb,size=0x20) addr:0x02079f3c
-func_ov000_02079f5c kind:function(thumb,size=0xa0) addr:0x02079f5c
+_ZN29ActorShopItemCollectable_Unk1D1Ev kind:function(thumb,size=0x20) addr:0x02079f3c
+_ZN29ActorShopItemCollectable_Unk119func_ov000_02079f5cEiiiihi kind:function(thumb,size=0xa0) addr:0x02079f5c
LoadNsbTexturedModel kind:function(thumb,size=0x3a) addr:0x02079ffc
func_ov000_0207a038 kind:function(thumb,size=0x102) addr:0x0207a038
_ZN19Actor_UnkStruct_012C1Ev kind:function(arm,size=0x4c) addr:0x0207a13c
@@ -223,7 +223,7 @@ func_ov000_0207bb14 kind:function(arm,size=0x4) addr:0x0207bb14
func_ov000_0207bb18 kind:function(arm,size=0x4) addr:0x0207bb18
_ZN18UnkStruct_027e0de419func_ov000_0207bb1cEiPFvPvES0_ kind:function(arm,size=0x30) addr:0x0207bb1c
func_ov000_0207bb4c kind:function(arm,size=0xfc) addr:0x0207bb4c
-func_ov000_0207bc48 kind:function(arm,size=0x20) addr:0x0207bc48
+_ZN17UnkClass_027e0e2819func_ov000_0207bc48Ev kind:function(arm,size=0x20) addr:0x0207bc48
func_ov000_0207bc68 kind:function(arm,size=0x14) addr:0x0207bc68
func_ov000_0207bc7c kind:function(thumb,size=0x1e) addr:0x0207bc7c
func_ov000_0207bc9c kind:function(arm,size=0x18) addr:0x0207bc9c
diff --git a/config/eur/arm9/overlays/ov003/symbols.txt b/config/eur/arm9/overlays/ov003/symbols.txt
index ee39ed3a..600d1128 100644
--- a/config/eur/arm9/overlays/ov003/symbols.txt
+++ b/config/eur/arm9/overlays/ov003/symbols.txt
@@ -117,7 +117,7 @@ func_ov003_020f3c84 kind:function(thumb,size=0x42) addr:0x020f3c84
func_ov003_020f3cc8 kind:function(arm,size=0x8) addr:0x020f3cc8
func_ov003_020f3cd0 kind:function(arm,size=0x8c) addr:0x020f3cd0
_ZN18UnkStruct_027e0dbc19func_ov003_020f3d5cEi kind:function(thumb,size=0x16) addr:0x020f3d5c
-func_ov003_020f3d74 kind:function(thumb,size=0xc) addr:0x020f3d74
+_ZN18UnkStruct_027e0dbc19func_ov003_020f3d74Ei kind:function(thumb,size=0xc) addr:0x020f3d74
func_ov003_020f3d80 kind:function(thumb,size=0xc) addr:0x020f3d80
func_ov003_020f3d8c kind:function(thumb,size=0x6) addr:0x020f3d8c
func_ov003_020f3d94 kind:function(thumb,size=0x6) addr:0x020f3d94
diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt
index 9279e6d9..27da7103 100644
--- a/config/eur/arm9/overlays/ov004/relocs.txt
+++ b/config/eur/arm9/overlays/ov004/relocs.txt
@@ -137,9 +137,9 @@ from:0x021013f0 kind:thumb_call to:0x021014bc module:overlay(4)
from:0x021013fc kind:thumb_call_arm to:0x0202e9dc module:main
from:0x02101406 kind:thumb_call to:0x0210168c module:overlay(4)
from:0x02101410 kind:load to:0x027e0ce0 module:dtcm
-from:0x02101414 kind:load to:0x02057878 module:main
+from:0x02101414 kind:load to:0x02057870 add:0x8 module:main
from:0x02101418 kind:load to:0x0210fda0 module:overlay(4)
-from:0x0210141c kind:load to:0x0205785c module:main
+from:0x0210141c kind:load to:0x02057854 add:0x8 module:main
from:0x0210142e kind:thumb_call to:0x021016c0 module:overlay(4)
from:0x02101434 kind:thumb_call_arm to:0x0202ea0c module:main
from:0x0210145e kind:thumb_call_arm to:0x0202ea18 module:main
@@ -181,9 +181,9 @@ from:0x021018d6 kind:thumb_call_arm to:0x02007908 module:main
from:0x021018e6 kind:thumb_call_arm to:0x02007908 module:main
from:0x0210193c kind:thumb_call_arm to:0x0204f754 module:main
from:0x02101958 kind:thumb_call to:0x0203005c module:main
-from:0x02101960 kind:load to:0x02057878 module:main
+from:0x02101960 kind:load to:0x02057870 add:0x8 module:main
from:0x02101964 kind:load to:0x0210fdb4 module:overlay(4)
-from:0x02101968 kind:load to:0x0205785c module:main
+from:0x02101968 kind:load to:0x02057854 add:0x8 module:main
from:0x02101974 kind:load to:0x020eaa98 module:overlay(0)
from:0x02101978 kind:load to:0x020eaaf8 module:overlay(0)
from:0x0210197c kind:load to:0x020eab34 module:overlay(0)
@@ -333,8 +333,8 @@ from:0x02102494 kind:thumb_call_arm to:0x0209d884 module:overlay(0)
from:0x0210249c kind:load to:0x027e0ce0 module:dtcm
from:0x021024a0 kind:load to:0x020e2508 module:overlay(0)
from:0x021024a4 kind:load to:0x020e250c module:overlay(0)
-from:0x021024a8 kind:load to:0x02057878 module:main
-from:0x021024ac kind:load to:0x0205785c module:main
+from:0x021024a8 kind:load to:0x02057870 add:0x8 module:main
+from:0x021024ac kind:load to:0x02057854 add:0x8 module:main
from:0x021024b0 kind:load to:0x027e0f68 module:dtcm
from:0x021024b4 kind:load to:0x027e0fe4 module:dtcm
from:0x021024b8 kind:load to:0x027e0fec module:dtcm
@@ -2043,9 +2043,9 @@ from:0x0210a176 kind:thumb_call_arm to:0x0202e9dc module:main
from:0x0210a17e kind:thumb_call to:0x02030274 module:main
from:0x0210a460 kind:load to:0x020e6c88 module:overlay(0)
from:0x0210a464 kind:load to:0x027e0ce0 module:dtcm
-from:0x0210a468 kind:load to:0x02057878 module:main
+from:0x0210a468 kind:load to:0x02057870 add:0x8 module:main
from:0x0210a46c kind:load to:0x02110934 module:overlay(4)
-from:0x0210a470 kind:load to:0x0205785c module:main
+from:0x0210a470 kind:load to:0x02057854 add:0x8 module:main
from:0x0210a474 kind:load to:0x021104a0 module:overlay(4)
from:0x0210a478 kind:load to:0x027e0fc8 module:dtcm
from:0x0210a47c kind:load to:0x027e0fcc module:dtcm
@@ -2520,8 +2520,8 @@ from:0x0210c4da kind:thumb_call_arm to:0x02097674 module:overlay(0)
from:0x0210c4e0 kind:thumb_call to:0x0203005c module:main
from:0x0210c4e6 kind:thumb_call to:0x0203005c module:main
from:0x0210c4f0 kind:load to:0x027e0d44 module:dtcm
-from:0x0210c4f8 kind:load to:0x02057878 module:main
-from:0x0210c4fc kind:load to:0x0205785c module:main
+from:0x0210c4f8 kind:load to:0x02057870 add:0x8 module:main
+from:0x0210c4fc kind:load to:0x02057854 add:0x8 module:main
from:0x0210c500 kind:load to:0x027e0f68 module:dtcm
from:0x0210c504 kind:load to:0x027e0fec module:dtcm
from:0x0210c508 kind:load to:0x027e0c68 module:dtcm
@@ -2572,8 +2572,8 @@ from:0x0210c7c8 kind:thumb_call_arm to:0x0201b3c4 module:main
from:0x0210c7d2 kind:thumb_call_arm to:0x0201e4cc module:main
from:0x0210c7f0 kind:load to:0x020ec820 module:overlay(0)
from:0x0210c7f4 kind:load to:0x027e0ce0 module:dtcm
-from:0x0210c7f8 kind:load to:0x02057878 module:main
-from:0x0210c7fc kind:load to:0x0205785c module:main
+from:0x0210c7f8 kind:load to:0x02057870 add:0x8 module:main
+from:0x0210c7fc kind:load to:0x02057854 add:0x8 module:main
from:0x0210c820 kind:thumb_call_arm to:0x02047024 module:main
from:0x0210c826 kind:thumb_call to:0x020bd718 module:overlay(0)
from:0x0210c84a kind:thumb_call_arm to:0x02018f78 module:main
@@ -2593,7 +2593,7 @@ from:0x0210ca6c kind:load to:0x027e0ce0 module:dtcm
from:0x0210ca70 kind:load to:0x0210f9c8 module:overlay(4)
from:0x0210ca74 kind:load to:0x0210f9cc module:overlay(4)
from:0x0210ca78 kind:load to:0x02110d0c module:overlay(4)
-from:0x0210ca7c kind:load to:0x02057878 module:main
+from:0x0210ca7c kind:load to:0x02057870 add:0x8 module:main
from:0x0210ca80 kind:load to:0x02057840 module:main
from:0x0210caee kind:thumb_call to:0x0202d5dc module:main
from:0x0210cb10 kind:thumb_call to:0x021026f0 module:overlay(4)
@@ -2856,7 +2856,7 @@ from:0x0210e2c8 kind:thumb_call to:0x0210de48 module:overlay(4)
from:0x0210e2e8 kind:load to:0x027e0d38 module:dtcm
from:0x0210e2ec kind:load to:0x027e1060 module:dtcm
from:0x0210e2f0 kind:load to:0x02111058 module:overlay(4)
-from:0x0210e2f4 kind:load to:0x02057878 module:main
+from:0x0210e2f4 kind:load to:0x02057870 add:0x8 module:main
from:0x0210e2f8 kind:load to:0x02057840 module:main
from:0x0210e302 kind:thumb_call to:0x0203014c module:main
from:0x0210e332 kind:thumb_call_arm to:0x0202e9dc module:main
@@ -2901,7 +2901,7 @@ from:0x0210e6c0 kind:thumb_call_arm to:0x020c0bdc module:overlay(0)
from:0x0210e6c8 kind:load to:0x027e0ce0 module:dtcm
from:0x0210e6cc kind:load to:0x021110a0 module:overlay(4)
from:0x0210e6d0 kind:load to:0x02111088 module:overlay(4)
-from:0x0210e6d4 kind:load to:0x02057878 module:main
+from:0x0210e6d4 kind:load to:0x02057870 add:0x8 module:main
from:0x0210e6d8 kind:load to:0x02057840 module:main
from:0x0210e6dc kind:load to:0x0210fcf8 module:overlay(4)
from:0x0210e6e0 kind:load to:0x02111070 module:overlay(4)
@@ -2949,7 +2949,7 @@ from:0x0210ea68 kind:thumb_call_arm to:0x020c0bdc module:overlay(0)
from:0x0210ea70 kind:load to:0x027e0d38 module:dtcm
from:0x0210ea74 kind:load to:0x027e0900 module:dtcm
from:0x0210ea7c kind:load to:0x0216d918 module:overlay(29)
-from:0x0210ea80 kind:load to:0x02057878 module:main
+from:0x0210ea80 kind:load to:0x02057870 add:0x8 module:main
from:0x0210ea84 kind:load to:0x02057808 module:main
from:0x0210ea88 kind:load to:0x021110a0 module:overlay(4)
from:0x0210ea8c kind:load to:0x027e0ce0 module:dtcm
@@ -2988,9 +2988,9 @@ from:0x0210ecf2 kind:thumb_call to:0x02101c88 module:overlay(4)
from:0x0210ecfc kind:thumb_call to:0x020300cc module:main
from:0x0210ed02 kind:thumb_call to:0x020300cc module:main
from:0x0210ed08 kind:thumb_call to:0x0203005c module:main
-from:0x0210ed10 kind:load to:0x02057878 module:main
+from:0x0210ed10 kind:load to:0x02057870 add:0x8 module:main
from:0x0210ed14 kind:load to:0x02111024 module:overlay(4)
-from:0x0210ed18 kind:load to:0x0205785c module:main
+from:0x0210ed18 kind:load to:0x02057854 add:0x8 module:main
from:0x0210edbc kind:thumb_call_arm to:0x0202e9dc module:main
from:0x0210edc4 kind:thumb_call_arm to:0x020a33fc module:overlay(0)
from:0x0210ede4 kind:thumb_call_arm to:0x020078f4 module:main
@@ -3010,8 +3010,8 @@ from:0x0210ef6e kind:thumb_call to:0x0210f010 module:overlay(4)
from:0x0210ef74 kind:thumb_call to:0x0203005c module:main
from:0x0210ef80 kind:load to:0x027e0d38 module:dtcm
from:0x0210ef84 kind:load to:0x027e0f7c module:dtcm
-from:0x0210ef88 kind:load to:0x02057878 module:main
-from:0x0210ef8c kind:load to:0x0205785c module:main
+from:0x0210ef88 kind:load to:0x02057870 add:0x8 module:main
+from:0x0210ef8c kind:load to:0x02057854 add:0x8 module:main
from:0x0210ef9c kind:thumb_call_arm to:0x0207cd74 module:overlay(0)
from:0x0210efba kind:thumb_call to:0x0203009c module:main
from:0x0210efcc kind:thumb_call_arm to:0x0209d710 module:overlay(0)
@@ -3019,8 +3019,8 @@ from:0x0210efdc kind:thumb_call to:0x02101cfc module:overlay(4)
from:0x0210efe6 kind:thumb_call to:0x0203005c module:main
from:0x0210eff4 kind:thumb_call_arm to:0x020a34c8 module:overlay(0)
from:0x0210effa kind:thumb_call to:0x0203005c module:main
-from:0x0210f004 kind:load to:0x02057878 module:main
-from:0x0210f008 kind:load to:0x0205785c module:main
+from:0x0210f004 kind:load to:0x02057870 add:0x8 module:main
+from:0x0210f008 kind:load to:0x02057854 add:0x8 module:main
from:0x0210f00c kind:load to:0x027e0f7c module:dtcm
from:0x0210f040 kind:thumb_call_arm to:0x020078f4 module:main
from:0x0210f05c kind:thumb_call_arm to:0x02097354 module:overlay(0)
diff --git a/config/eur/arm9/overlays/ov009/relocs.txt b/config/eur/arm9/overlays/ov009/relocs.txt
index f970ca04..4b8e0c74 100644
--- a/config/eur/arm9/overlays/ov009/relocs.txt
+++ b/config/eur/arm9/overlays/ov009/relocs.txt
@@ -1999,10 +1999,10 @@ from:0x0211e4b4 kind:load to:0x0211f530 module:overlay(9)
from:0x0211e4f8 kind:arm_call to:0x0204f8d4 module:main
from:0x0211e538 kind:arm_call to:0x0204f8d4 module:main
from:0x0211e574 kind:arm_call to:0x0204f8d4 module:main
-from:0x0211e57c kind:load to:0x02057878 module:main
+from:0x0211e57c kind:load to:0x02057870 add:0x8 module:main
from:0x0211e580 kind:load to:0x0211f538 module:overlay(9)
from:0x0211e584 kind:load to:0x0211ea50 module:overlay(9)
-from:0x0211e588 kind:load to:0x0205785c module:main
+from:0x0211e588 kind:load to:0x02057854 add:0x8 module:main
from:0x0211e58c kind:load to:0x0211f544 module:overlay(9)
from:0x0211e590 kind:load to:0x0203005d module:main
from:0x0211e594 kind:load to:0x0211f538 module:overlay(9)
diff --git a/config/eur/arm9/overlays/ov015/relocs.txt b/config/eur/arm9/overlays/ov015/relocs.txt
index d10bd648..83b49b7c 100644
--- a/config/eur/arm9/overlays/ov015/relocs.txt
+++ b/config/eur/arm9/overlays/ov015/relocs.txt
@@ -1331,8 +1331,8 @@ from:0x0212a240 kind:arm_call to:0x0212b5dc module:overlay(15)
from:0x0212a254 kind:arm_call to:0x0202e9f4 module:main
from:0x0212a270 kind:arm_call to:0x0212b7f4 module:overlay(15)
from:0x0212a278 kind:arm_call_thumb to:0x0203010c module:main
-from:0x0212a288 kind:load to:0x02057878 module:main
-from:0x0212a28c kind:load to:0x0205785c module:main
+from:0x0212a288 kind:load to:0x02057870 add:0x8 module:main
+from:0x0212a28c kind:load to:0x02057854 add:0x8 module:main
from:0x0212a290 kind:load to:0x02057840 module:main
from:0x0212a294 kind:load to:0x0218a348 module:overlay(15)
from:0x0212a298 kind:load to:0x027e0ce0 module:dtcm
@@ -11767,12 +11767,12 @@ from:0x02184f84 kind:arm_call to:0x0202e9dc module:main
from:0x02184f98 kind:arm_call to:0x020a5d10 module:overlay(0)
from:0x02184fa4 kind:arm_call_thumb to:0x020a9588 module:overlay(0)
from:0x02184fc4 kind:load to:0x027e0ce0 module:dtcm
-from:0x02184fc8 kind:load to:0x02057878 module:main
-from:0x02184fcc kind:load to:0x0205785c module:main
+from:0x02184fc8 kind:load to:0x02057870 add:0x8 module:main
+from:0x02184fcc kind:load to:0x02057854 add:0x8 module:main
from:0x02184fd0 kind:load to:0x0203010d module:main
from:0x02184fd4 kind:load to:0x02184fdc module:overlay(15)
from:0x02184fd8 kind:load to:0x0218726c module:overlay(15)
-from:0x02184ffc kind:load to:0x02057878 module:main
+from:0x02184ffc kind:load to:0x02057870 add:0x8 module:main
from:0x02185000 kind:load to:0x02057840 module:main
from:0x0218505c kind:arm_call to:0x020a5ccc module:overlay(0)
from:0x02185070 kind:arm_call to:0x0204f754 module:main
@@ -12185,7 +12185,7 @@ from:0x02187dd0 kind:arm_call to:0x0204f8d4 module:main
from:0x02187e08 kind:arm_call to:0x0204f8d4 module:main
from:0x02187e44 kind:arm_call to:0x0204f8d4 module:main
from:0x02187e84 kind:arm_call to:0x0204f8d4 module:main
-from:0x02187e8c kind:load to:0x02057878 module:main
+from:0x02187e8c kind:load to:0x02057870 add:0x8 module:main
from:0x02187e90 kind:load to:0x0218f55c module:overlay(15)
from:0x02187e94 kind:load to:0x0218b8fc module:overlay(15)
from:0x02187e98 kind:load to:0x02057840 module:main
@@ -12196,7 +12196,7 @@ from:0x02187ea8 kind:load to:0x0218b90c module:overlay(15)
from:0x02187eac kind:load to:0x0218f588 module:overlay(15)
from:0x02187eb0 kind:load to:0x0218f57c module:overlay(15)
from:0x02187eb4 kind:load to:0x0218b91c module:overlay(15)
-from:0x02187eb8 kind:load to:0x0205785c module:main
+from:0x02187eb8 kind:load to:0x02057854 add:0x8 module:main
from:0x02187ebc kind:load to:0x0218f5a4 module:overlay(15)
from:0x02187ec0 kind:load to:0x0203005d module:main
from:0x02187ec4 kind:load to:0x0218f598 module:overlay(15)
diff --git a/config/eur/arm9/overlays/ov018/relocs.txt b/config/eur/arm9/overlays/ov018/relocs.txt
index 2a6ff2f0..2b3aa4ae 100644
--- a/config/eur/arm9/overlays/ov018/relocs.txt
+++ b/config/eur/arm9/overlays/ov018/relocs.txt
@@ -127,7 +127,7 @@ from:0x0215c8f4 kind:arm_call_thumb to:0x0203005c module:main
from:0x0215c8fc kind:arm_call_thumb to:0x0203010c module:main
from:0x0215c908 kind:load to:0x0216c0c0 module:overlay(18)
from:0x0215c90c kind:load to:0x02057840 module:main
-from:0x0215c910 kind:load to:0x0205785c module:main
+from:0x0215c910 kind:load to:0x02057854 add:0x8 module:main
from:0x0215c914 kind:load to:0x027e0ce0 module:dtcm
from:0x0215c918 kind:load to:0x0216b45c module:overlay(18)
from:0x0215c930 kind:arm_call_thumb to:0x020c0c08 module:overlay(0)
diff --git a/config/eur/arm9/overlays/ov025/relocs.txt b/config/eur/arm9/overlays/ov025/relocs.txt
index c1e77cfd..fd60c489 100644
--- a/config/eur/arm9/overlays/ov025/relocs.txt
+++ b/config/eur/arm9/overlays/ov025/relocs.txt
@@ -665,7 +665,7 @@ from:0x02173580 kind:load to:0x020e72e8 add:0x8 module:overlay(0)
from:0x02173588 kind:load to:0x027e0fe4 module:dtcm
from:0x021735a0 kind:arm_call to:0x0217345c module:overlay(25)
from:0x02173600 kind:load to:0x027e10b4 module:dtcm
-from:0x02173604 kind:load to:0x02183f78 module:overlays(30,31)
+from:0x02173604 kind:load to:0x02183f78 module:overlay(30)
from:0x021737b8 kind:arm_call to:0x020c37ec module:overlay(0)
from:0x02173804 kind:arm_call to:0x020c3674 module:overlay(0)
from:0x02173898 kind:arm_call to:0x020c3674 module:overlay(0)
diff --git a/config/eur/arm9/overlays/ov026/relocs.txt b/config/eur/arm9/overlays/ov026/relocs.txt
index 64465e87..43a0f011 100644
--- a/config/eur/arm9/overlays/ov026/relocs.txt
+++ b/config/eur/arm9/overlays/ov026/relocs.txt
@@ -414,7 +414,7 @@ from:0x0217076c kind:arm_call to:0x020c5774 module:overlay(0)
from:0x0217078c kind:load to:0x027e0e60 module:dtcm
from:0x02170790 kind:load to:0x027e0f94 module:dtcm
from:0x021707a4 kind:load to:0x027e10b4 module:dtcm
-from:0x021707a8 kind:load to:0x02183f84 module:overlays(30,31,32)
+from:0x021707a8 kind:load to:0x02183f84 module:overlays(30,32)
from:0x021707c0 kind:arm_call to:0x020c1bfc module:overlay(0)
from:0x021707e4 kind:arm_call to:0x020cbee8 module:overlay(0)
from:0x021707ec kind:arm_call to:0x020cc138 module:overlay(0)
diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt
index 238d43d7..5d5e1607 100644
--- a/config/eur/arm9/overlays/ov031/delinks.txt
+++ b/config/eur/arm9/overlays/ov031/delinks.txt
@@ -7,3 +7,8 @@
src/31_Shop/Actor/ActorShopItem.cpp:
.text start:0x0217dbdc end:0x02180708
+ .rodata start:0x021818e8 end:0x02181a88
+ .init start:0x02181b6c end:0x02181f58
+ .ctor start:0x02182080 end:0x02182084
+ .data start:0x02182290 end:0x02183a98
+ .bss start:0x02183e88 end:0x02184154
diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt
index e57ef64b..5d23e731 100644
--- a/config/eur/arm9/overlays/ov031/relocs.txt
+++ b/config/eur/arm9/overlays/ov031/relocs.txt
@@ -283,39 +283,39 @@ from:0x0217dbb4 kind:arm_call to:0x0202b894 module:main
from:0x0217dbf4 kind:arm_call to:0x0202e9dc module:main
from:0x0217dc00 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dc14 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dc18 kind:load to:0x021832d4 module:overlay(31)
+from:0x0217dc18 kind:load to:0x021832cc module:overlay(31) add:0x8
from:0x0217dc34 kind:arm_call to:0x0202e9dc module:main
from:0x0217dc40 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dc54 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dc58 kind:load to:0x021831e8 module:overlay(31)
+from:0x0217dc58 kind:load to:0x021831e0 module:overlay(31) add:0x8
from:0x0217dc74 kind:arm_call to:0x0202e9dc module:main
from:0x0217dc80 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dc94 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dc98 kind:load to:0x021830fc module:overlay(31)
+from:0x0217dc98 kind:load to:0x021830f4 module:overlay(31) add:0x8
from:0x0217dcb4 kind:arm_call to:0x0202e9dc module:main
from:0x0217dcc0 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dcd4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dcd8 kind:load to:0x02183010 module:overlay(31)
+from:0x0217dcd8 kind:load to:0x02183008 module:overlay(31) add:0x8
from:0x0217dcf4 kind:arm_call to:0x0202e9dc module:main
from:0x0217dd00 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dd14 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dd18 kind:load to:0x02182e38 module:overlay(31)
+from:0x0217dd18 kind:load to:0x02182e30 module:overlay(31) add:0x8
from:0x0217dd34 kind:arm_call to:0x0202e9dc module:main
from:0x0217dd40 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dd54 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dd58 kind:load to:0x02182c60 module:overlay(31)
+from:0x0217dd58 kind:load to:0x02182c58 module:overlay(31) add:0x8
from:0x0217dd74 kind:arm_call to:0x0202e9dc module:main
from:0x0217dd80 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217dd94 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dd98 kind:load to:0x02182f24 module:overlay(31)
+from:0x0217dd98 kind:load to:0x02182f1c module:overlay(31) add:0x8
from:0x0217ddb4 kind:arm_call to:0x0202e9dc module:main
from:0x0217ddc0 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217ddd4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217ddd8 kind:load to:0x02182d4c module:overlay(31)
+from:0x0217ddd8 kind:load to:0x02182d44 module:overlay(31) add:0x8
from:0x0217ddf4 kind:arm_call to:0x0202e9dc module:main
from:0x0217de00 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217de14 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217de18 kind:load to:0x02182b74 module:overlay(31)
+from:0x0217de18 kind:load to:0x02182b6c module:overlay(31) add:0x8
from:0x0217de34 kind:arm_call to:0x0202e9dc module:main
from:0x0217de40 kind:arm_call to:0x0217e4f4 module:overlay(31)
from:0x0217de48 kind:load to:0x027e0fe0 module:dtcm
@@ -325,23 +325,23 @@ from:0x0217de78 kind:load to:0x027e0fe0 module:dtcm
from:0x0217de94 kind:arm_call to:0x0202e9dc module:main
from:0x0217dea0 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217deb4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217deb8 kind:load to:0x021828b0 module:overlay(31)
+from:0x0217deb8 kind:load to:0x021828a8 module:overlay(31) add:0x8
from:0x0217ded4 kind:arm_call to:0x0202e9dc module:main
from:0x0217dee0 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217def4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217def8 kind:load to:0x021827c4 module:overlay(31)
+from:0x0217def8 kind:load to:0x021827bc module:overlay(31) add:0x8
from:0x0217df14 kind:arm_call to:0x0202e9dc module:main
from:0x0217df20 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217df34 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217df38 kind:load to:0x021826d8 module:overlay(31)
+from:0x0217df38 kind:load to:0x021826d0 module:overlay(31) add:0x8
from:0x0217df54 kind:arm_call to:0x0202e9dc module:main
from:0x0217df60 kind:arm_call to:0x0217e588 module:overlay(31)
from:0x0217df74 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217df78 kind:load to:0x02182550 module:overlay(31)
+from:0x0217df78 kind:load to:0x02182548 module:overlay(31) add:0x8
from:0x0217df94 kind:arm_call to:0x0202e9dc module:main
from:0x0217dfa0 kind:arm_call to:0x0217e588 module:overlay(31)
from:0x0217dfb4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dfb8 kind:load to:0x0218248c module:overlay(31)
+from:0x0217dfb8 kind:load to:0x02182484 module:overlay(31) add:0x8
from:0x0217dfd4 kind:arm_call to:0x0202e9dc module:main
from:0x0217dfe0 kind:arm_call to:0x0217e5b8 module:overlay(31)
from:0x0217dfe8 kind:load to:0x027e0fe0 module:dtcm
@@ -357,8 +357,8 @@ from:0x0217e194 kind:arm_call to:0x0202e9dc module:main
from:0x0217e1dc kind:arm_call to:0x0202e9dc module:main
from:0x0217e224 kind:arm_call to:0x0202e9dc module:main
from:0x0217e268 kind:arm_call to:0x0217dfec module:overlay(31)
-from:0x0217e278 kind:load to:0x02057878 module:main
-from:0x0217e27c kind:load to:0x0205785c module:main
+from:0x0217e278 kind:load to:0x02057870 add:0x8 module:main
+from:0x0217e27c kind:load to:0x02057854 add:0x8 module:main
from:0x0217e280 kind:load to:0x027e0fb4 module:dtcm
from:0x0217e284 kind:load to:0x021822b0 module:overlay(31)
from:0x0217e288 kind:load to:0x027e0ce0 module:dtcm
@@ -371,71 +371,71 @@ from:0x0217e2a0 kind:load to:0x02183e88 module:overlay(31)
from:0x0217e2a4 kind:load to:0x02183a44 module:overlay(31)
from:0x0217e2a8 kind:load to:0x02183a60 module:overlay(31)
from:0x0217e2ac kind:load to:0x02183a7c module:overlay(31)
-from:0x0217e2b0 kind:load to:0x021818f8 module:overlay(31)
+from:0x0217e2b0 kind:load to:0x021818e8 add:0x10 module:overlay(31)
from:0x0217e3cc kind:load to:0x021840a8 module:overlay(31)
from:0x0217e3d0 kind:load to:0x021840f0 module:overlay(31)
from:0x0217e3d4 kind:load to:0x02183e88 module:overlay(31)
from:0x0217e3e0 kind:arm_call to:0x020c1554 module:overlay(0)
-from:0x0217e408 kind:load to:0x021834ac module:overlay(31)
+from:0x0217e408 kind:load to:0x021834a4 add:0x8 module:overlay(31)
from:0x0217e414 kind:arm_call to:0x0217e3d8 module:overlay(31)
-from:0x0217e45c kind:load to:0x021833c0 module:overlay(31)
+from:0x0217e45c kind:load to:0x021833b8 module:overlay(31) add:0x8
from:0x0217e46c kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217e498 kind:arm_call to:0x0202e9dc module:main
from:0x0217e4a4 kind:arm_call_thumb to:0x02079ed8 module:overlay(0)
from:0x0217e4d8 kind:arm_call_thumb to:0x02079f5c module:overlay(0)
-from:0x0217e4e8 kind:load to:0x02182a88 module:overlay(31)
+from:0x0217e4e8 kind:load to:0x02182a80 module:overlay(31) add:0x8
from:0x0217e4ec kind:load to:0x027e0ce0 module:dtcm
from:0x0217e4f0 kind:load to:0x021818e8 module:overlay(31)
from:0x0217e500 kind:arm_call to:0x0217e40c module:overlay(31)
from:0x0217e52c kind:arm_call to:0x0202e9dc module:main
from:0x0217e538 kind:arm_call_thumb to:0x02079ed8 module:overlay(0)
from:0x0217e56c kind:arm_call_thumb to:0x02079f5c module:overlay(0)
-from:0x0217e57c kind:load to:0x0218299c module:overlay(31)
+from:0x0217e57c kind:load to:0x02182994 module:overlay(31) add:0x8
from:0x0217e580 kind:load to:0x027e0ce0 module:dtcm
from:0x0217e584 kind:load to:0x021818e8 module:overlay(31)
from:0x0217e590 kind:arm_call to:0x0217e3d8 module:overlay(31)
-from:0x0217e5b4 kind:load to:0x02182614 module:overlay(31)
+from:0x0217e5b4 kind:load to:0x0218260c module:overlay(31) add:0x8
from:0x0217e5c0 kind:arm_call to:0x0217e588 module:overlay(31)
-from:0x0217e5d4 kind:load to:0x021823c8 module:overlay(31)
+from:0x0217e5d4 kind:load to:0x021823c0 module:overlay(31) add:0x8
from:0x0217e5e0 kind:arm_call to:0x020c1730 module:overlay(0)
from:0x0217e5f4 kind:arm_call to:0x020c1730 module:overlay(0)
from:0x0217e5fc kind:arm_call to:0x0202ea0c module:main
from:0x0217e610 kind:arm_call to:0x020c1730 module:overlay(0)
from:0x0217e654 kind:arm_call to:0x0217e608 module:overlay(31)
-from:0x0217e660 kind:load to:0x021833c0 module:overlay(31)
+from:0x0217e660 kind:load to:0x021833b8 module:overlay(31) add:0x8
from:0x0217e69c kind:arm_call to:0x0217e608 module:overlay(31)
from:0x0217e6a4 kind:arm_call to:0x0202ea0c module:main
-from:0x0217e6b0 kind:load to:0x021833c0 module:overlay(31)
+from:0x0217e6b0 kind:load to:0x021833b8 module:overlay(31) add:0x8
from:0x0217e6ec kind:arm_call to:0x0217e608 module:overlay(31)
-from:0x0217e6f8 kind:load to:0x021833c0 module:overlay(31)
+from:0x0217e6f8 kind:load to:0x021833b8 module:overlay(31) add:0x8
from:0x0217e70c kind:arm_call to:0x0217e6b4 module:overlay(31)
from:0x0217e728 kind:arm_call to:0x0217e6b4 module:overlay(31)
from:0x0217e730 kind:arm_call to:0x0202ea0c module:main
from:0x0217e75c kind:arm_call_thumb to:0x02079f3c module:overlay(0)
from:0x0217e764 kind:arm_call to:0x0202ea0c module:main
from:0x0217e7f8 kind:arm_call to:0x0217e6b4 module:overlay(31)
-from:0x0217e804 kind:load to:0x02182a88 module:overlay(31)
+from:0x0217e804 kind:load to:0x02182a80 module:overlay(31) add:0x8
from:0x0217e808 kind:load to:0x02183e88 module:overlay(31)
from:0x0217e82c kind:arm_call_thumb to:0x02079f3c module:overlay(0)
from:0x0217e834 kind:arm_call to:0x0202ea0c module:main
from:0x0217e8c8 kind:arm_call to:0x0217e6b4 module:overlay(31)
from:0x0217e8d0 kind:arm_call to:0x0202ea0c module:main
-from:0x0217e8dc kind:load to:0x02182a88 module:overlay(31)
+from:0x0217e8dc kind:load to:0x02182a80 module:overlay(31) add:0x8
from:0x0217e8e0 kind:load to:0x02183e88 module:overlay(31)
from:0x0217e904 kind:arm_call_thumb to:0x02079f3c module:overlay(0)
from:0x0217e90c kind:arm_call to:0x0202ea0c module:main
from:0x0217e91c kind:arm_call to:0x0217e6b4 module:overlay(31)
-from:0x0217e928 kind:load to:0x0218299c module:overlay(31)
+from:0x0217e928 kind:load to:0x02182994 module:overlay(31) add:0x8
from:0x0217e94c kind:arm_call_thumb to:0x02079f3c module:overlay(0)
from:0x0217e954 kind:arm_call to:0x0202ea0c module:main
from:0x0217e964 kind:arm_call to:0x0217e6b4 module:overlay(31)
from:0x0217e96c kind:arm_call to:0x0202ea0c module:main
-from:0x0217e978 kind:load to:0x0218299c module:overlay(31)
+from:0x0217e978 kind:load to:0x02182994 module:overlay(31) add:0x8
from:0x0217ea00 kind:arm_call to:0x0217dfec module:overlay(31)
from:0x0217ea0c kind:load to:0x027e0fb4 module:dtcm
-from:0x0217ea10 kind:load to:0x02181a08 module:overlay(31)
-from:0x0217ea14 kind:load to:0x02181a18 module:overlay(31)
-from:0x0217ea18 kind:load to:0x02181a28 module:overlay(31)
+from:0x0217ea10 kind:load to:0x021818e8 add:0x120 module:overlay(31)
+from:0x0217ea14 kind:load to:0x021818e8 add:0x130 module:overlay(31)
+from:0x0217ea18 kind:load to:0x021818e8 add:0x140 module:overlay(31)
from:0x0217ea1c kind:load to:0x021818e8 module:overlay(31)
from:0x0217ea20 kind:load to:0x021840a8 module:overlay(31)
from:0x0217ea24 kind:load to:0x021840f0 module:overlay(31)
@@ -450,8 +450,8 @@ from:0x0217eb10 kind:arm_call to:0x0217dfec module:overlay(31)
from:0x0217eb20 kind:load to:0x027e1058 module:dtcm
from:0x0217eb24 kind:load to:0x027e0ce0 module:dtcm
from:0x0217eb28 kind:load to:0x02183e88 module:overlay(31)
-from:0x0217eb2c kind:load to:0x02181a38 module:overlay(31)
-from:0x0217eb30 kind:load to:0x02181a48 module:overlay(31)
+from:0x0217eb2c kind:load to:0x021818e8 add:0x150 module:overlay(31)
+from:0x0217eb30 kind:load to:0x021818e8 add:0x160 module:overlay(31)
from:0x0217eb44 kind:arm_call to:0x02180278 module:overlay(31)
from:0x0217eb58 kind:arm_call_thumb to:0x0211c144 module:overlay(9)
from:0x0217eb70 kind:arm_call to:0x0202e9dc module:main
@@ -573,7 +573,7 @@ from:0x0217fc74 kind:arm_call to:0x0217fc08 module:overlay(31)
from:0x0217fcac kind:arm_call to:0x02180248 module:overlay(31)
from:0x0217fcb8 kind:arm_call to:0x02180260 module:overlay(31)
from:0x0217fcc4 kind:arm_call_thumb to:0x0211c980 module:overlay(9)
-from:0x0217fcdc kind:load to:0x021819e8 module:overlay(31)
+from:0x0217fcdc kind:load to:0x021818e8 add:0x100 module:overlay(31)
from:0x0217fce8 kind:arm_call to:0x0217bdb8 module:overlay(31)
from:0x0217fd0c kind:arm_call to:0x0217bdb8 module:overlay(31)
from:0x0217fd10 kind:arm_call to:0x0217ce6c module:overlay(31)
diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt
index 8113abda..0473807f 100644
--- a/config/eur/arm9/overlays/ov031/symbols.txt
+++ b/config/eur/arm9/overlays/ov031/symbols.txt
@@ -1,4 +1,4 @@
-func_ov031_0217bd80 kind:function(arm,size=0x8) addr:0x0217bd80
+_ZN24UnkStruct_ov031_02183e8019func_ov031_0217bd80Ev kind:function(arm,size=0x8) addr:0x0217bd80
func_ov031_0217bd88 kind:function(arm,size=0x18) addr:0x0217bd88
func_ov031_0217bda0 kind:function(arm,size=0xc) addr:0x0217bda0
func_ov031_0217bdac kind:function(arm,size=0x8) addr:0x0217bdac
@@ -31,10 +31,10 @@ func_ov031_0217cdd8 kind:function(arm,size=0x20) addr:0x0217cdd8
func_ov031_0217cdf8 kind:function(arm,size=0x20) addr:0x0217cdf8
func_ov031_0217ce18 kind:function(arm,size=0x54) addr:0x0217ce18
func_ov031_0217ce6c kind:function(arm,size=0x24) addr:0x0217ce6c
-func_ov031_0217ce90 kind:function(arm,size=0x30) addr:0x0217ce90
-func_ov031_0217cec0 kind:function(arm,size=0x40) addr:0x0217cec0
+HasFreebieCard kind:function(arm,size=0x30) addr:0x0217ce90
+_ZN24UnkStruct_ov031_02183e8019func_ov031_0217cec0Ev kind:function(arm,size=0x40) addr:0x0217cec0
func_ov031_0217cf00 kind:function(arm,size=0x1c) addr:0x0217cf00
-func_ov031_0217cf1c kind:function(arm,size=0x10) addr:0x0217cf1c
+_Z19func_ov031_0217cf1cv kind:function(arm,size=0x10) addr:0x0217cf1c
func_ov031_0217cf2c kind:function(arm,size=0x34) addr:0x0217cf2c
func_ov031_0217cf60 kind:function(arm,size=0x24) addr:0x0217cf60
func_ov031_0217cf84 kind:function(arm,size=0x2c) addr:0x0217cf84
@@ -69,175 +69,175 @@ func_ov031_0217da80 kind:function(arm,size=0x38) addr:0x0217da80
func_ov031_0217dab8 kind:function(arm,size=0x90) addr:0x0217dab8
func_ov031_0217db48 kind:function(arm,size=0x8) addr:0x0217db48
func_ov031_0217db50 kind:function(arm,size=0x8c) addr:0x0217db50
-func_ov031_0217dbdc kind:function(arm,size=0x40) addr:0x0217dbdc
-func_ov031_0217dc1c kind:function(arm,size=0x40) addr:0x0217dc1c
-func_ov031_0217dc5c kind:function(arm,size=0x40) addr:0x0217dc5c
-func_ov031_0217dc9c kind:function(arm,size=0x40) addr:0x0217dc9c
-func_ov031_0217dcdc kind:function(arm,size=0x40) addr:0x0217dcdc
-func_ov031_0217dd1c kind:function(arm,size=0x40) addr:0x0217dd1c
-func_ov031_0217dd5c kind:function(arm,size=0x40) addr:0x0217dd5c
-func_ov031_0217dd9c kind:function(arm,size=0x40) addr:0x0217dd9c
-func_ov031_0217dddc kind:function(arm,size=0x40) addr:0x0217dddc
-func_ov031_0217de1c kind:function(arm,size=0x30) addr:0x0217de1c
-func_ov031_0217de4c kind:function(arm,size=0x30) addr:0x0217de4c
-func_ov031_0217de7c kind:function(arm,size=0x40) addr:0x0217de7c
-func_ov031_0217debc kind:function(arm,size=0x40) addr:0x0217debc
-func_ov031_0217defc kind:function(arm,size=0x40) addr:0x0217defc
-func_ov031_0217df3c kind:function(arm,size=0x40) addr:0x0217df3c
-func_ov031_0217df7c kind:function(arm,size=0x40) addr:0x0217df7c
-func_ov031_0217dfbc kind:function(arm,size=0x30) addr:0x0217dfbc
-func_ov031_0217dfec kind:function(arm,size=0x54) addr:0x0217dfec
-func_ov031_0217e040 kind:function(arm,size=0x274) addr:0x0217e040
-func_ov031_0217e2b4 kind:function(arm,size=0x124) addr:0x0217e2b4
-func_ov031_0217e3d8 kind:function(arm,size=0x34) addr:0x0217e3d8
-func_ov031_0217e40c kind:function(arm,size=0x54) addr:0x0217e40c
-func_ov031_0217e460 kind:function(arm,size=0x94) addr:0x0217e460
-func_ov031_0217e4f4 kind:function(arm,size=0x94) addr:0x0217e4f4
-func_ov031_0217e588 kind:function(arm,size=0x30) addr:0x0217e588
-func_ov031_0217e5b8 kind:function(arm,size=0x20) addr:0x0217e5b8
-func_ov031_0217e5d8 kind:function(arm,size=0x14) addr:0x0217e5d8
-func_ov031_0217e5ec kind:function(arm,size=0x1c) addr:0x0217e5ec
-func_ov031_0217e608 kind:function(arm,size=0x14) addr:0x0217e608
-func_ov031_0217e61c kind:function(arm,size=0x48) addr:0x0217e61c
-func_ov031_0217e664 kind:function(arm,size=0x50) addr:0x0217e664
-func_ov031_0217e6b4 kind:function(arm,size=0x48) addr:0x0217e6b4
-func_ov031_0217e6fc kind:function(arm,size=0x1c) addr:0x0217e6fc
-func_ov031_0217e718 kind:function(arm,size=0x24) addr:0x0217e718
-func_ov031_0217e73c kind:function(arm,size=0xd0) addr:0x0217e73c
-func_ov031_0217e80c kind:function(arm,size=0xd8) addr:0x0217e80c
-func_ov031_0217e8e4 kind:function(arm,size=0x48) addr:0x0217e8e4
-func_ov031_0217e92c kind:function(arm,size=0x50) addr:0x0217e92c
-func_ov031_0217e97c kind:function(arm,size=0xac) addr:0x0217e97c
-func_ov031_0217ea28 kind:function(arm,size=0x18) addr:0x0217ea28
-func_ov031_0217ea40 kind:function(arm,size=0x1c) addr:0x0217ea40
-func_ov031_0217ea5c kind:function(arm,size=0xd8) addr:0x0217ea5c
-func_ov031_0217eb34 kind:function(arm,size=0x60) addr:0x0217eb34
-func_ov031_0217eb94 kind:function(arm,size=0xc) addr:0x0217eb94
-func_ov031_0217eba0 kind:function(arm,size=0x20) addr:0x0217eba0
-func_ov031_0217ebc0 kind:function(arm,size=0x14) addr:0x0217ebc0
-func_ov031_0217ebd4 kind:function(arm,size=0x14) addr:0x0217ebd4
-func_ov031_0217ebe8 kind:function(arm,size=0x1c) addr:0x0217ebe8
-func_ov031_0217ec04 kind:function(arm,size=0x14) addr:0x0217ec04
-func_ov031_0217ec18 kind:function(arm,size=0x1c) addr:0x0217ec18
-func_ov031_0217ec34 kind:function(arm,size=0x14) addr:0x0217ec34
-func_ov031_0217ec48 kind:function(arm,size=0x1c) addr:0x0217ec48
-func_ov031_0217ec64 kind:function(arm,size=0x14) addr:0x0217ec64
-func_ov031_0217ec78 kind:function(arm,size=0x1c) addr:0x0217ec78
-func_ov031_0217ec94 kind:function(arm,size=0x24) addr:0x0217ec94
-func_ov031_0217ecb8 kind:function(arm,size=0x30) addr:0x0217ecb8
-func_ov031_0217ece8 kind:function(arm,size=0x64) addr:0x0217ece8
-func_ov031_0217ed4c kind:function(arm,size=0x1c) addr:0x0217ed4c
-func_ov031_0217ed68 kind:function(arm,size=0x60) addr:0x0217ed68
-func_ov031_0217edc8 kind:function(arm,size=0x14) addr:0x0217edc8
-func_ov031_0217eddc kind:function(arm,size=0x98) addr:0x0217eddc
-func_ov031_0217ee74 kind:function(arm,size=0x154) addr:0x0217ee74
-func_ov031_0217efc8 kind:function(arm,size=0x68) addr:0x0217efc8
-func_ov031_0217f030 kind:function(arm,size=0x60) addr:0x0217f030
-func_ov031_0217f090 kind:function(arm,size=0x14) addr:0x0217f090
-func_ov031_0217f0a4 kind:function(arm,size=0xc) addr:0x0217f0a4
-func_ov031_0217f0b0 kind:function(arm,size=0x4) addr:0x0217f0b0
-func_ov031_0217f0b4 kind:function(arm,size=0x38) addr:0x0217f0b4
-func_ov031_0217f0ec kind:function(arm,size=0x20) addr:0x0217f0ec
-func_ov031_0217f10c kind:function(arm,size=0x8) addr:0x0217f10c
-func_ov031_0217f114 kind:function(arm,size=0xc) addr:0x0217f114
-func_ov031_0217f120 kind:function(arm,size=0x334) addr:0x0217f120
-func_ov031_0217f454 kind:function(arm,size=0x50) addr:0x0217f454
-func_ov031_0217f4a4 kind:function(arm,size=0x194) addr:0x0217f4a4
-func_ov031_0217f638 kind:function(arm,size=0x4) addr:0x0217f638
-func_ov031_0217f63c kind:function(arm,size=0x4) addr:0x0217f63c
-func_ov031_0217f640 kind:function(arm,size=0xb8) addr:0x0217f640
-func_ov031_0217f6f8 kind:function(arm,size=0xb8) addr:0x0217f6f8
-func_ov031_0217f7b0 kind:function(arm,size=0xb8) addr:0x0217f7b0
-func_ov031_0217f868 kind:function(arm,size=0x24) addr:0x0217f868
-func_ov031_0217f88c kind:function(arm,size=0x8) addr:0x0217f88c
-func_ov031_0217f894 kind:function(arm,size=0xc) addr:0x0217f894
-func_ov031_0217f8a0 kind:function(arm,size=0x24) addr:0x0217f8a0
-func_ov031_0217f8c4 kind:function(arm,size=0xc) addr:0x0217f8c4
-func_ov031_0217f8d0 kind:function(arm,size=0xc) addr:0x0217f8d0
-func_ov031_0217f8dc kind:function(arm,size=0xc) addr:0x0217f8dc
-func_ov031_0217f8e8 kind:function(arm,size=0x38) addr:0x0217f8e8
-func_ov031_0217f920 kind:function(arm,size=0xc) addr:0x0217f920
-func_ov031_0217f92c kind:function(arm,size=0x48) addr:0x0217f92c
-func_ov031_0217f974 kind:function(arm,size=0x98) addr:0x0217f974
-func_ov031_0217fa0c kind:function(arm,size=0x98) addr:0x0217fa0c
-func_ov031_0217faa4 kind:function(arm,size=0x60) addr:0x0217faa4
-func_ov031_0217fb04 kind:function(arm,size=0xc) addr:0x0217fb04
-func_ov031_0217fb10 kind:function(arm,size=0xf8) addr:0x0217fb10
-func_ov031_0217fc08 kind:function(arm,size=0x14) addr:0x0217fc08
-func_ov031_0217fc1c kind:function(arm,size=0x28) addr:0x0217fc1c
-func_ov031_0217fc44 kind:function(arm,size=0x38) addr:0x0217fc44
-func_ov031_0217fc7c kind:function(arm,size=0x64) addr:0x0217fc7c
-func_ov031_0217fce0 kind:function(arm,size=0x18) addr:0x0217fce0
-func_ov031_0217fcf8 kind:function(arm,size=0x5c) addr:0x0217fcf8
-func_ov031_0217fd54 kind:function(arm,size=0x30) addr:0x0217fd54
-func_ov031_0217fd84 kind:function(arm,size=0x7c) addr:0x0217fd84
-func_ov031_0217fe00 kind:function(arm,size=0x2c) addr:0x0217fe00
-func_ov031_0217fe2c kind:function(arm,size=0x2c) addr:0x0217fe2c
-func_ov031_0217fe58 kind:function(arm,size=0x2c) addr:0x0217fe58
-func_ov031_0217fe84 kind:function(arm,size=0x2c) addr:0x0217fe84
-func_ov031_0217feb0 kind:function(arm,size=0x2c) addr:0x0217feb0
-func_ov031_0217fedc kind:function(arm,size=0x2c) addr:0x0217fedc
-func_ov031_0217ff08 kind:function(arm,size=0x54) addr:0x0217ff08
-func_ov031_0217ff5c kind:function(arm,size=0x40) addr:0x0217ff5c
-func_ov031_0217ff9c kind:function(arm,size=0x7c) addr:0x0217ff9c
-func_ov031_02180018 kind:function(arm,size=0xc) addr:0x02180018
-func_ov031_02180024 kind:function(arm,size=0xc) addr:0x02180024
-func_ov031_02180030 kind:function(arm,size=0x40) addr:0x02180030
-func_ov031_02180070 kind:function(arm,size=0x54) addr:0x02180070
-func_ov031_021800c4 kind:function(arm,size=0x54) addr:0x021800c4
-func_ov031_02180118 kind:function(arm,size=0x54) addr:0x02180118
-func_ov031_0218016c kind:function(arm,size=0x40) addr:0x0218016c
-func_ov031_021801ac kind:function(arm,size=0x34) addr:0x021801ac
-func_ov031_021801e0 kind:function(arm,size=0x34) addr:0x021801e0
-func_ov031_02180214 kind:function(arm,size=0x34) addr:0x02180214
-func_ov031_02180248 kind:function(arm,size=0x18) addr:0x02180248
-func_ov031_02180260 kind:function(arm,size=0x18) addr:0x02180260
-func_ov031_02180278 kind:function(arm,size=0x18) addr:0x02180278
-func_ov031_02180290 kind:function(arm,size=0x8) addr:0x02180290
-func_ov031_02180298 kind:function(arm,size=0x8) addr:0x02180298
-func_ov031_021802a0 kind:function(arm,size=0x8) addr:0x021802a0
-func_ov031_021802a8 kind:function(arm,size=0x3c) addr:0x021802a8
-func_ov031_021802e4 kind:function(arm,size=0x8) addr:0x021802e4
-func_ov031_021802ec kind:function(arm,size=0x3c) addr:0x021802ec
-func_ov031_02180328 kind:function(arm,size=0x8) addr:0x02180328
-func_ov031_02180330 kind:function(arm,size=0x3c) addr:0x02180330
-func_ov031_0218036c kind:function(arm,size=0x8) addr:0x0218036c
-func_ov031_02180374 kind:function(arm,size=0x50) addr:0x02180374
-func_ov031_021803c4 kind:function(arm,size=0x3c) addr:0x021803c4
-func_ov031_02180400 kind:function(arm,size=0x8) addr:0x02180400
-func_ov031_02180408 kind:function(arm,size=0x8) addr:0x02180408
-func_ov031_02180410 kind:function(arm,size=0x8) addr:0x02180410
-func_ov031_02180418 kind:function(arm,size=0x20) addr:0x02180418
-func_ov031_02180438 kind:function(arm,size=0x1c) addr:0x02180438
-func_ov031_02180454 kind:function(arm,size=0x14) addr:0x02180454
-func_ov031_02180468 kind:function(arm,size=0x1c) addr:0x02180468
-func_ov031_02180484 kind:function(arm,size=0x14) addr:0x02180484
-func_ov031_02180498 kind:function(arm,size=0x1c) addr:0x02180498
-func_ov031_021804b4 kind:function(arm,size=0x14) addr:0x021804b4
-func_ov031_021804c8 kind:function(arm,size=0x1c) addr:0x021804c8
-func_ov031_021804e4 kind:function(arm,size=0x14) addr:0x021804e4
-func_ov031_021804f8 kind:function(arm,size=0x1c) addr:0x021804f8
-func_ov031_02180514 kind:function(arm,size=0x14) addr:0x02180514
-func_ov031_02180528 kind:function(arm,size=0x1c) addr:0x02180528
-func_ov031_02180544 kind:function(arm,size=0x14) addr:0x02180544
-func_ov031_02180558 kind:function(arm,size=0x1c) addr:0x02180558
-func_ov031_02180574 kind:function(arm,size=0x14) addr:0x02180574
-func_ov031_02180588 kind:function(arm,size=0x1c) addr:0x02180588
-func_ov031_021805a4 kind:function(arm,size=0x14) addr:0x021805a4
-func_ov031_021805b8 kind:function(arm,size=0x1c) addr:0x021805b8
-func_ov031_021805d4 kind:function(arm,size=0x14) addr:0x021805d4
-func_ov031_021805e8 kind:function(arm,size=0x1c) addr:0x021805e8
-func_ov031_02180604 kind:function(arm,size=0x14) addr:0x02180604
-func_ov031_02180618 kind:function(arm,size=0x1c) addr:0x02180618
-func_ov031_02180634 kind:function(arm,size=0x14) addr:0x02180634
-func_ov031_02180648 kind:function(arm,size=0x1c) addr:0x02180648
-func_ov031_02180664 kind:function(arm,size=0x14) addr:0x02180664
-func_ov031_02180678 kind:function(arm,size=0x1c) addr:0x02180678
-func_ov031_02180694 kind:function(arm,size=0x14) addr:0x02180694
-func_ov031_021806a8 kind:function(arm,size=0x1c) addr:0x021806a8
-func_ov031_021806c4 kind:function(arm,size=0x14) addr:0x021806c4
-func_ov031_021806d8 kind:function(arm,size=0x1c) addr:0x021806d8
-func_ov031_021806f4 kind:function(arm,size=0x14) addr:0x021806f4
+_ZN15ActorShopItemDM6CreateEv kind:function(arm,size=0x40) addr:0x0217dbdc
+_ZN20ActorShopItemSoldOut6CreateEv kind:function(arm,size=0x40) addr:0x0217dc1c
+_ZN27ActorShopItemHeartContainer6CreateEv kind:function(arm,size=0x40) addr:0x0217dc5c
+_ZN19ActorShopItemArrows6CreateEv kind:function(arm,size=0x40) addr:0x0217dc9c
+_ZN18ActorShopItemBombs6CreateEv kind:function(arm,size=0x40) addr:0x0217dcdc
+_ZN21ActorShopItemBombchus6CreateEv kind:function(arm,size=0x40) addr:0x0217dd1c
+_ZN19ActorShopItemQuiver6CreateEv kind:function(arm,size=0x40) addr:0x0217dd5c
+_ZN20ActorShopItemBombBag6CreateEv kind:function(arm,size=0x40) addr:0x0217dd9c
+_ZN23ActorShopItemBombchuBag6CreateEv kind:function(arm,size=0x40) addr:0x0217dddc
+_ZN21ActorShopItemTreasure6CreateEv kind:function(arm,size=0x30) addr:0x0217de1c
+_ZN21ActorShopItemShipPart6CreateEv kind:function(arm,size=0x30) addr:0x0217de4c
+_ZN16ActorShopItemGem6CreateEv kind:function(arm,size=0x40) addr:0x0217de7c
+_ZN19ActorShopItemShield6CreateEv kind:function(arm,size=0x40) addr:0x0217debc
+_ZN19ActorShopItemPotion6CreateEv kind:function(arm,size=0x40) addr:0x0217defc
+_ZN15ActorShopItemBK6CreateEv kind:function(arm,size=0x40) addr:0x0217df3c
+_ZN15ActorShopItemCC6CreateEv kind:function(arm,size=0x40) addr:0x0217df7c
+_ZN15ActorShopItemBY6CreateEv kind:function(arm,size=0x30) addr:0x0217dfbc
+_Z19func_ov031_0217dfecP9FileEntryS0_PKc kind:function(arm,size=0x54) addr:0x0217dfec
+_Z19func_ov031_0217e040v kind:function(arm,size=0x274) addr:0x0217e040
+_Z19func_ov031_0217e2b4v kind:function(arm,size=0x124) addr:0x0217e2b4
+_ZN17ActorShopItemBaseC1Ev kind:function(arm,size=0x34) addr:0x0217e3d8
+_ZN13ActorShopItemC2Ev kind:function(arm,size=0x54) addr:0x0217e40c
+_ZN21ActorShopItemShipPartC1Ev kind:function(arm,size=0x94) addr:0x0217e460
+_ZN21ActorShopItemTreasureC1Ev kind:function(arm,size=0x94) addr:0x0217e4f4
+_ZN16ActorShopItemUnkC2Ev kind:function(arm,size=0x30) addr:0x0217e588
+_ZN15ActorShopItemBYC1Ev kind:function(arm,size=0x20) addr:0x0217e5b8
+_ZN17ActorShopItemBaseD1Ev kind:function(arm,size=0x14) addr:0x0217e5d8
+_ZN17ActorShopItemBaseD0Ev kind:function(arm,size=0x1c) addr:0x0217e5ec
+_ZN17ActorShopItemBaseD2Ev kind:function(arm,size=0x14) addr:0x0217e608
+_ZN13ActorShopItemD1Ev kind:function(arm,size=0x48) addr:0x0217e61c
+_ZN13ActorShopItemD0Ev kind:function(arm,size=0x50) addr:0x0217e664
+_ZN13ActorShopItemD2Ev kind:function(arm,size=0x48) addr:0x0217e6b4
+_ZN20ActorShopItemSoldOutD1Ev kind:function(arm,size=0x1c) addr:0x0217e6fc
+_ZN20ActorShopItemSoldOutD0Ev kind:function(arm,size=0x24) addr:0x0217e718
+_ZN21ActorShopItemShipPartD1Ev kind:function(arm,size=0xd0) addr:0x0217e73c
+_ZN21ActorShopItemShipPartD0Ev kind:function(arm,size=0xd8) addr:0x0217e80c
+_ZN21ActorShopItemTreasureD1Ev kind:function(arm,size=0x48) addr:0x0217e8e4
+_ZN21ActorShopItemTreasureD0Ev kind:function(arm,size=0x50) addr:0x0217e92c
+_ZN13ActorShopItem8vfunc_d4Ev kind:function(arm,size=0xac) addr:0x0217e97c
+_ZN15ActorShopItemDM8vfunc_d4Ev kind:function(arm,size=0x18) addr:0x0217ea28
+_ZN20ActorShopItemSoldOut8vfunc_d4Ev kind:function(arm,size=0x1c) addr:0x0217ea40
+_ZN21ActorShopItemShipPart8vfunc_d4Ev kind:function(arm,size=0xd8) addr:0x0217ea5c
+_ZN21ActorShopItemTreasure8vfunc_d4Ev kind:function(arm,size=0x60) addr:0x0217eb34
+_ZN17ActorShopItemBase4InitEv kind:function(arm,size=0xc) addr:0x0217eb94
+_ZN13ActorShopItem4InitEv kind:function(arm,size=0x20) addr:0x0217eba0
+_ZN15ActorShopItemDM4InitEv kind:function(arm,size=0x14) addr:0x0217ebc0
+_ZN20ActorShopItemSoldOut4InitEv kind:function(arm,size=0x14) addr:0x0217ebd4
+_ZN27ActorShopItemHeartContainer4InitEv kind:function(arm,size=0x1c) addr:0x0217ebe8
+_ZN19ActorShopItemArrows4InitEv kind:function(arm,size=0x14) addr:0x0217ec04
+_ZN19ActorShopItemQuiver4InitEv kind:function(arm,size=0x1c) addr:0x0217ec18
+_ZN18ActorShopItemBombs4InitEv kind:function(arm,size=0x14) addr:0x0217ec34
+_ZN20ActorShopItemBombBag4InitEv kind:function(arm,size=0x1c) addr:0x0217ec48
+_ZN21ActorShopItemBombchus4InitEv kind:function(arm,size=0x14) addr:0x0217ec64
+_ZN23ActorShopItemBombchuBag4InitEv kind:function(arm,size=0x1c) addr:0x0217ec78
+_ZN21ActorShopItemShipPart4InitEv kind:function(arm,size=0x24) addr:0x0217ec94
+_ZN21ActorShopItemTreasure4InitEv kind:function(arm,size=0x30) addr:0x0217ecb8
+_ZN16ActorShopItemGem4InitEv kind:function(arm,size=0x64) addr:0x0217ece8
+_ZN19ActorShopItemShield4InitEv kind:function(arm,size=0x1c) addr:0x0217ed4c
+_ZN19ActorShopItemPotion4InitEv kind:function(arm,size=0x60) addr:0x0217ed68
+_ZN16ActorShopItemUnk4InitEv kind:function(arm,size=0x14) addr:0x0217edc8
+_ZN17ActorShopItemBase8vfunc_14Ej kind:function(arm,size=0x98) addr:0x0217eddc
+_ZN13ActorShopItem8vfunc_14Ej kind:function(arm,size=0x154) addr:0x0217ee74
+_ZN21ActorShopItemShipPart8vfunc_14Ej kind:function(arm,size=0x68) addr:0x0217efc8
+_ZN16ActorShopItemUnk8vfunc_14Ej kind:function(arm,size=0x60) addr:0x0217f030
+_ZN17ActorShopItemBase8vfunc_18Ej kind:function(arm,size=0x14) addr:0x0217f090
+_ZN13ActorShopItem8vfunc_c8Ev kind:function(arm,size=0xc) addr:0x0217f0a4
+_ZN13ActorShopItem8vfunc_ccEv kind:function(arm,size=0x4) addr:0x0217f0b0
+_ZN13ActorShopItem19func_ov031_0217f0b4Ev kind:function(arm,size=0x38) addr:0x0217f0b4
+_ZN13ActorShopItem8GetPitchEv kind:function(arm,size=0x20) addr:0x0217f0ec
+_ZN13ActorShopItem6GetYawEv kind:function(arm,size=0x8) addr:0x0217f10c
+_Z19func_ov031_0217f114Pv kind:function(arm,size=0xc) addr:0x0217f114
+_ZN13ActorShopItem19func_ov031_0217f120Ev kind:function(arm,size=0x334) addr:0x0217f120
+_ZN13ActorShopItem8vfunc_20Eb kind:function(arm,size=0x50) addr:0x0217f454
+_ZN21ActorShopItemShipPart8vfunc_20Eb kind:function(arm,size=0x194) addr:0x0217f4a4
+_ZN15ActorShopItemDM8vfunc_20Eb kind:function(arm,size=0x4) addr:0x0217f638
+_ZN16ActorShopItemUnk8vfunc_20Eb kind:function(arm,size=0x4) addr:0x0217f63c
+_ZN15ActorShopItemBK8vfunc_1cEPt kind:function(arm,size=0xb8) addr:0x0217f640
+_ZN15ActorShopItemCC8vfunc_1cEPt kind:function(arm,size=0xb8) addr:0x0217f6f8
+_ZN15ActorShopItemBY8vfunc_1cEPt kind:function(arm,size=0xb8) addr:0x0217f7b0
+_ZN13ActorShopItem19GetSoldOutMessageIdEv kind:function(arm,size=0x24) addr:0x0217f868
+_ZN15ActorShopItemDM12GetMessageIdEv kind:function(arm,size=0x8) addr:0x0217f88c
+_ZN20ActorShopItemSoldOut12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f894
+_ZN27ActorShopItemHeartContainer12GetMessageIdEv kind:function(arm,size=0x24) addr:0x0217f8a0
+_ZN19ActorShopItemArrows12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f8c4
+_ZN19ActorShopItemQuiver12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f8d0
+_ZN18ActorShopItemBombs12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f8dc
+_ZN20ActorShopItemBombBag12GetMessageIdEv kind:function(arm,size=0x38) addr:0x0217f8e8
+_ZN21ActorShopItemBombchus12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f920
+_ZN23ActorShopItemBombchuBag12GetMessageIdEv kind:function(arm,size=0x48) addr:0x0217f92c
+_ZN21ActorShopItemShipPart12GetMessageIdEv kind:function(arm,size=0x98) addr:0x0217f974
+_ZN21ActorShopItemTreasure12GetMessageIdEv kind:function(arm,size=0x98) addr:0x0217fa0c
+_ZN16ActorShopItemGem12GetMessageIdEv kind:function(arm,size=0x60) addr:0x0217faa4
+_ZN19ActorShopItemShield12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217fb04
+_ZN19ActorShopItemPotion12GetMessageIdEv kind:function(arm,size=0xf8) addr:0x0217fb10
+_ZN13ActorShopItem8GetPriceEv kind:function(arm,size=0x14) addr:0x0217fc08
+_ZN27ActorShopItemHeartContainer8GetPriceEv kind:function(arm,size=0x28) addr:0x0217fc1c
+_ZN19ActorShopItemPotion8GetPriceEv kind:function(arm,size=0x38) addr:0x0217fc44
+_ZN21ActorShopItemShipPart8GetPriceEv kind:function(arm,size=0x64) addr:0x0217fc7c
+_ZN21ActorShopItemTreasure8GetPriceEv kind:function(arm,size=0x18) addr:0x0217fce0
+_ZN13ActorShopItem8vfunc_c0Ev kind:function(arm,size=0x5c) addr:0x0217fcf8
+_ZN13ActorShopItem8vfunc_c4Ev kind:function(arm,size=0x30) addr:0x0217fd54
+_ZN27ActorShopItemHeartContainer8vfunc_c4Ev kind:function(arm,size=0x7c) addr:0x0217fd84
+_ZN19ActorShopItemArrows8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fe00
+_ZN19ActorShopItemQuiver8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fe2c
+_ZN18ActorShopItemBombs8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fe58
+_ZN20ActorShopItemBombBag8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fe84
+_ZN21ActorShopItemBombchus8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217feb0
+_ZN23ActorShopItemBombchuBag8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fedc
+_ZN21ActorShopItemShipPart8vfunc_c4Ev kind:function(arm,size=0x54) addr:0x0217ff08
+_ZN21ActorShopItemTreasure8vfunc_c4Ev kind:function(arm,size=0x40) addr:0x0217ff5c
+_ZN16ActorShopItemGem8vfunc_c4Ev kind:function(arm,size=0x7c) addr:0x0217ff9c
+_ZN19ActorShopItemShield8vfunc_c4Ev kind:function(arm,size=0xc) addr:0x02180018
+_ZN19ActorShopItemPotion8vfunc_c4Ev kind:function(arm,size=0xc) addr:0x02180024
+_ZN17ActorShopItemBase8vfunc_b4Ev kind:function(arm,size=0x40) addr:0x02180030
+_ZN15ActorShopItemBK8vfunc_b4Ev kind:function(arm,size=0x54) addr:0x02180070
+_ZN15ActorShopItemCC8vfunc_b4Ev kind:function(arm,size=0x54) addr:0x021800c4
+_ZN15ActorShopItemBY8vfunc_b4Ev kind:function(arm,size=0x54) addr:0x02180118
+_ZN17ActorShopItemBase8vfunc_b8Ev kind:function(arm,size=0x40) addr:0x0218016c
+_ZN15ActorShopItemBK8vfunc_b8Ev kind:function(arm,size=0x34) addr:0x021801ac
+_ZN15ActorShopItemCC8vfunc_b8Ev kind:function(arm,size=0x34) addr:0x021801e0
+_ZN15ActorShopItemBY8vfunc_b8Ev kind:function(arm,size=0x34) addr:0x02180214
+_ZN21ActorShopItemShipPart19func_ov031_02180248Ev kind:function(arm,size=0x18) addr:0x02180248
+_ZN21ActorShopItemShipPart19func_ov031_02180260Ev kind:function(arm,size=0x18) addr:0x02180260
+_ZN21ActorShopItemTreasure19func_ov031_02180278Ev kind:function(arm,size=0x18) addr:0x02180278
+_ZN15ActorShopItemDM8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180290
+_ZN20ActorShopItemSoldOut8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180298
+_ZN27ActorShopItemHeartContainer8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x021802a0
+_ZN19ActorShopItemArrows8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x021802a8
+_ZN19ActorShopItemQuiver8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x021802e4
+_ZN18ActorShopItemBombs8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x021802ec
+_ZN20ActorShopItemBombBag8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180328
+_ZN21ActorShopItemBombchus8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x02180330
+_ZN23ActorShopItemBombchuBag8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x0218036c
+_ZN21ActorShopItemShipPart8vfunc_d0Ev kind:function(arm,size=0x50) addr:0x02180374
+_ZN21ActorShopItemTreasure8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x021803c4
+_ZN16ActorShopItemGem8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180400
+_ZN19ActorShopItemShield8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180408
+_ZN19ActorShopItemPotion8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180410
+_ZN16ActorShopItemUnk19func_ov031_02180418Ev kind:function(arm,size=0x20) addr:0x02180418
+_ZN15ActorShopItemBYD0Ev kind:function(arm,size=0x1c) addr:0x02180438
+_ZN15ActorShopItemBYD1Ev kind:function(arm,size=0x14) addr:0x02180454
+_ZN15ActorShopItemCCD0Ev kind:function(arm,size=0x1c) addr:0x02180468
+_ZN15ActorShopItemCCD1Ev kind:function(arm,size=0x14) addr:0x02180484
+_ZN15ActorShopItemBKD0Ev kind:function(arm,size=0x1c) addr:0x02180498
+_ZN15ActorShopItemBKD1Ev kind:function(arm,size=0x14) addr:0x021804b4
+_ZN16ActorShopItemUnkD0Ev kind:function(arm,size=0x1c) addr:0x021804c8
+_ZN16ActorShopItemUnkD1Ev kind:function(arm,size=0x14) addr:0x021804e4
+_ZN19ActorShopItemPotionD0Ev kind:function(arm,size=0x1c) addr:0x021804f8
+_ZN19ActorShopItemPotionD1Ev kind:function(arm,size=0x14) addr:0x02180514
+_ZN19ActorShopItemShieldD0Ev kind:function(arm,size=0x1c) addr:0x02180528
+_ZN19ActorShopItemShieldD1Ev kind:function(arm,size=0x14) addr:0x02180544
+_ZN16ActorShopItemGemD0Ev kind:function(arm,size=0x1c) addr:0x02180558
+_ZN16ActorShopItemGemD1Ev kind:function(arm,size=0x14) addr:0x02180574
+_ZN23ActorShopItemBombchuBagD0Ev kind:function(arm,size=0x1c) addr:0x02180588
+_ZN23ActorShopItemBombchuBagD1Ev kind:function(arm,size=0x14) addr:0x021805a4
+_ZN21ActorShopItemBombchusD0Ev kind:function(arm,size=0x1c) addr:0x021805b8
+_ZN21ActorShopItemBombchusD1Ev kind:function(arm,size=0x14) addr:0x021805d4
+_ZN20ActorShopItemBombBagD0Ev kind:function(arm,size=0x1c) addr:0x021805e8
+_ZN20ActorShopItemBombBagD1Ev kind:function(arm,size=0x14) addr:0x02180604
+_ZN18ActorShopItemBombsD0Ev kind:function(arm,size=0x1c) addr:0x02180618
+_ZN18ActorShopItemBombsD1Ev kind:function(arm,size=0x14) addr:0x02180634
+_ZN19ActorShopItemQuiverD0Ev kind:function(arm,size=0x1c) addr:0x02180648
+_ZN19ActorShopItemQuiverD1Ev kind:function(arm,size=0x14) addr:0x02180664
+_ZN19ActorShopItemArrowsD0Ev kind:function(arm,size=0x1c) addr:0x02180678
+_ZN19ActorShopItemArrowsD1Ev kind:function(arm,size=0x14) addr:0x02180694
+_ZN27ActorShopItemHeartContainerD0Ev kind:function(arm,size=0x1c) addr:0x021806a8
+_ZN27ActorShopItemHeartContainerD1Ev kind:function(arm,size=0x14) addr:0x021806c4
+_ZN15ActorShopItemDMD0Ev kind:function(arm,size=0x1c) addr:0x021806d8
+_ZN15ActorShopItemDMD1Ev kind:function(arm,size=0x14) addr:0x021806f4
func_ov031_02180708 kind:function(arm,size=0x44) addr:0x02180708
func_ov031_0218074c kind:function(arm,size=0x44) addr:0x0218074c
func_ov031_02180790 kind:function(arm,size=0x44) addr:0x02180790
@@ -290,14 +290,10 @@ func_ov031_0218186c kind:function(arm,size=0x1c) addr:0x0218186c
func_ov031_02181888 kind:function(arm,size=0x14) addr:0x02181888
func_ov031_0218189c kind:function(arm,size=0x4) addr:0x0218189c
data_ov031_021818a0 kind:data(any) addr:0x021818a0
-data_ov031_021818e8 kind:data(any) addr:0x021818e8
-data_ov031_021818f8 kind:data(any) addr:0x021818f8
-data_ov031_021819e8 kind:data(any) addr:0x021819e8
-data_ov031_02181a08 kind:data(any) addr:0x02181a08
-data_ov031_02181a18 kind:data(any) addr:0x02181a18
-data_ov031_02181a28 kind:data(any) addr:0x02181a28
-data_ov031_02181a38 kind:data(any) addr:0x02181a38
-data_ov031_02181a48 kind:data(any) addr:0x02181a48
+sShopItemBaseNames kind:data(any) addr:0x021818e8 local
+unk$1534 kind:data(any) addr:0x02181a58 local
+unk$1554 kind:data(any) addr:0x02181a6c local
+@2460 kind:data(any) addr:0x02181a80 local
data_ov031_02181a88 kind:data(any) addr:0x02181a88
data_ov031_02181a94 kind:data(any) addr:0x02181a94
data_ov031_02181abc kind:data(any) addr:0x02181abc
@@ -306,11 +302,11 @@ data_ov031_02181ad4 kind:data(any) addr:0x02181ad4
data_ov031_02181b10 kind:data(any) addr:0x02181b10
data_ov031_02181b24 kind:data(any) addr:0x02181b24
data_ov031_02181b30 kind:data(any) addr:0x02181b30
-__sinit_ov031_02181b6c kind:function(arm,size=0x3ec) addr:0x02181b6c
+__sinit_ActorShopItem.cpp kind:function(arm,size=0x3ec) addr:0x02181b6c local
__sinit_ov031_02181f58 kind:function(arm,size=0xa8) addr:0x02181f58
__sinit_ov031_02182000 kind:function(arm,size=0x40) addr:0x02182000
__sinit_ov031_02182040 kind:function(arm,size=0x40) addr:0x02182040
-.p__sinit_ov031_02181b6c kind:data(word) addr:0x02182080
+.p__sinit_ActorShopItem.cpp kind:data(word) addr:0x02182080 local
.p__sinit_ov031_02181f58 kind:data(word) addr:0x02182084
.p__sinit_ov031_02182000 kind:data(word) addr:0x02182088
.p__sinit_ov031_02182040 kind:data(word) addr:0x0218208c
@@ -332,84 +328,84 @@ data_ov031_0218213c kind:data(any) addr:0x0218213c
data_ov031_02182140 kind:data(any) addr:0x02182140
data_ov031_02182144 kind:data(any) addr:0x02182144
data_ov031_02182170 kind:data(any) addr:0x02182170
-data_ov031_02182290 kind:data(any) addr:0x02182290
-data_ov031_02182294 kind:data(any) addr:0x02182294
-data_ov031_02182298 kind:data(any) addr:0x02182298
-data_ov031_0218229c kind:data(any) addr:0x0218229c
-data_ov031_021822a0 kind:data(any) addr:0x021822a0
-data_ov031_021822a4 kind:data(any) addr:0x021822a4
-data_ov031_021822a8 kind:data(any) addr:0x021822a8
-data_ov031_021822ac kind:data(any) addr:0x021822ac
-data_ov031_021822b0 kind:data(any) addr:0x021822b0
-data_ov031_021822d0 kind:data(any) addr:0x021822d0
-data_ov031_02182318 kind:data(any) addr:0x02182318
-data_ov031_0218236c kind:data(any) addr:0x0218236c
-data_ov031_021823c8 kind:data(any) addr:0x021823c8
-data_ov031_0218248c kind:data(any) addr:0x0218248c
-data_ov031_02182550 kind:data(any) addr:0x02182550
-data_ov031_02182614 kind:data(any) addr:0x02182614
-data_ov031_021826d8 kind:data(any) addr:0x021826d8
-data_ov031_021827c4 kind:data(any) addr:0x021827c4
-data_ov031_021828b0 kind:data(any) addr:0x021828b0
-data_ov031_0218299c kind:data(any) addr:0x0218299c
-data_ov031_02182a88 kind:data(any) addr:0x02182a88
-data_ov031_02182b74 kind:data(any) addr:0x02182b74
-data_ov031_02182c60 kind:data(any) addr:0x02182c60
-data_ov031_02182d4c kind:data(any) addr:0x02182d4c
-data_ov031_02182e38 kind:data(any) addr:0x02182e38
-data_ov031_02182f24 kind:data(any) addr:0x02182f24
-data_ov031_02183010 kind:data(any) addr:0x02183010
-data_ov031_021830fc kind:data(any) addr:0x021830fc
-data_ov031_021831e8 kind:data(any) addr:0x021831e8
-data_ov031_021832d4 kind:data(any) addr:0x021832d4
-data_ov031_021833c0 kind:data(any) addr:0x021833c0
-data_ov031_021834ac kind:data(any) addr:0x021834ac
-data_ov031_02183568 kind:data(any) addr:0x02183568
-data_ov031_02183584 kind:data(any) addr:0x02183584
-data_ov031_021835a0 kind:data(any) addr:0x021835a0
-data_ov031_021835bc kind:data(any) addr:0x021835bc
-data_ov031_021835dc kind:data(any) addr:0x021835dc
-data_ov031_021835f8 kind:data(any) addr:0x021835f8
-data_ov031_02183618 kind:data(any) addr:0x02183618
-data_ov031_02183634 kind:data(any) addr:0x02183634
-data_ov031_02183654 kind:data(any) addr:0x02183654
-data_ov031_02183670 kind:data(any) addr:0x02183670
-data_ov031_0218368c kind:data(any) addr:0x0218368c
-data_ov031_021836a8 kind:data(any) addr:0x021836a8
-data_ov031_021836c4 kind:data(any) addr:0x021836c4
-data_ov031_021836e0 kind:data(any) addr:0x021836e0
-data_ov031_021836fc kind:data(any) addr:0x021836fc
-data_ov031_02183714 kind:data(any) addr:0x02183714
-data_ov031_02183730 kind:data(any) addr:0x02183730
-data_ov031_02183750 kind:data(any) addr:0x02183750
-data_ov031_02183770 kind:data(any) addr:0x02183770
-data_ov031_0218378c kind:data(any) addr:0x0218378c
-data_ov031_021837ac kind:data(any) addr:0x021837ac
-data_ov031_021837c8 kind:data(any) addr:0x021837c8
-data_ov031_021837e4 kind:data(any) addr:0x021837e4
-data_ov031_02183800 kind:data(any) addr:0x02183800
-data_ov031_0218381c kind:data(any) addr:0x0218381c
-data_ov031_0218383c kind:data(any) addr:0x0218383c
-data_ov031_02183858 kind:data(any) addr:0x02183858
-data_ov031_02183878 kind:data(any) addr:0x02183878
-data_ov031_02183894 kind:data(any) addr:0x02183894
-data_ov031_021838b4 kind:data(any) addr:0x021838b4
-data_ov031_021838d0 kind:data(any) addr:0x021838d0
-data_ov031_021838ec kind:data(any) addr:0x021838ec
-data_ov031_02183908 kind:data(any) addr:0x02183908
-data_ov031_02183924 kind:data(any) addr:0x02183924
-data_ov031_02183940 kind:data(any) addr:0x02183940
-data_ov031_0218395c kind:data(any) addr:0x0218395c
-data_ov031_02183974 kind:data(any) addr:0x02183974
-data_ov031_02183990 kind:data(any) addr:0x02183990
-data_ov031_021839b0 kind:data(any) addr:0x021839b0
-data_ov031_021839d0 kind:data(any) addr:0x021839d0
-data_ov031_021839ec kind:data(any) addr:0x021839ec
-data_ov031_02183a0c kind:data(any) addr:0x02183a0c
-data_ov031_02183a28 kind:data(any) addr:0x02183a28
-data_ov031_02183a44 kind:data(any) addr:0x02183a44
-data_ov031_02183a60 kind:data(any) addr:0x02183a60
-data_ov031_02183a7c kind:data(any) addr:0x02183a7c
+@1183 kind:data(any) addr:0x02182290 local
+@1184 kind:data(any) addr:0x02182294 local
+@1185 kind:data(any) addr:0x02182298 local
+@1186 kind:data(any) addr:0x0218229c local
+@1187 kind:data(any) addr:0x021822a0 local
+@1188 kind:data(any) addr:0x021822a4 local
+@1189 kind:data(any) addr:0x021822a8 local
+@1190 kind:data(any) addr:0x021822ac local
+sShipTypes kind:data(any) addr:0x021822b0 local
+sShopItemPrices kind:data(any) addr:0x021822d0
+sShopItemModelPaths kind:data(any) addr:0x02182318
+sShopItemTexturePaths kind:data(any) addr:0x0218236c
+_ZTV15ActorShopItemBY kind:data(any) addr:0x021823c0
+_ZTV15ActorShopItemCC kind:data(any) addr:0x02182484
+_ZTV15ActorShopItemBK kind:data(any) addr:0x02182548
+_ZTV16ActorShopItemUnk kind:data(any) addr:0x0218260c
+_ZTV19ActorShopItemPotion kind:data(any) addr:0x021826d0
+_ZTV19ActorShopItemShield kind:data(any) addr:0x021827bc
+_ZTV16ActorShopItemGem kind:data(any) addr:0x021828a8
+_ZTV21ActorShopItemTreasure kind:data(any) addr:0x02182994
+_ZTV21ActorShopItemShipPart kind:data(any) addr:0x02182a80
+_ZTV23ActorShopItemBombchuBag kind:data(any) addr:0x02182b6c
+_ZTV21ActorShopItemBombchus kind:data(any) addr:0x02182c58
+_ZTV20ActorShopItemBombBag kind:data(any) addr:0x02182d44
+_ZTV18ActorShopItemBombs kind:data(any) addr:0x02182e30
+_ZTV19ActorShopItemQuiver kind:data(any) addr:0x02182f1c
+_ZTV19ActorShopItemArrows kind:data(any) addr:0x02183008
+_ZTV27ActorShopItemHeartContainer kind:data(any) addr:0x021830f4
+_ZTV20ActorShopItemSoldOut kind:data(any) addr:0x021831e0
+_ZTV15ActorShopItemDM kind:data(any) addr:0x021832cc
+_ZTV13ActorShopItem kind:data(any) addr:0x021833b8
+_ZTV17ActorShopItemBase kind:data(any) addr:0x021834a4
+@1267 kind:data(any) addr:0x02183568 local
+@1268 kind:data(any) addr:0x02183584 local
+@1269 kind:data(any) addr:0x021835a0 local
+@1270 kind:data(any) addr:0x021835bc local
+@1271 kind:data(any) addr:0x021835dc local
+@1272 kind:data(any) addr:0x021835f8 local
+@1273 kind:data(any) addr:0x02183618 local
+@1274 kind:data(any) addr:0x02183634 local
+@1275 kind:data(any) addr:0x02183654 local
+@1276 kind:data(any) addr:0x02183670 local
+@1277 kind:data(any) addr:0x0218368c local
+@1278 kind:data(any) addr:0x021836a8 local
+@1279 kind:data(any) addr:0x021836c4 local
+@1280 kind:data(any) addr:0x021836e0 local
+@1281 kind:data(any) addr:0x021836fc local
+@1282 kind:data(any) addr:0x02183714 local
+@1283 kind:data(any) addr:0x02183730 local
+@1284 kind:data(any) addr:0x02183750 local
+@1285 kind:data(any) addr:0x02183770 local
+@1286 kind:data(any) addr:0x0218378c local
+@1287 kind:data(any) addr:0x021837ac local
+@1288 kind:data(any) addr:0x021837c8 local
+@1289 kind:data(any) addr:0x021837e4 local
+@1290 kind:data(any) addr:0x02183800 local
+@1291 kind:data(any) addr:0x0218381c local
+@1292 kind:data(any) addr:0x0218383c local
+@1293 kind:data(any) addr:0x02183858 local
+@1294 kind:data(any) addr:0x02183878 local
+@1295 kind:data(any) addr:0x02183894 local
+@1296 kind:data(any) addr:0x021838b4 local
+@1297 kind:data(any) addr:0x021838d0 local
+@1298 kind:data(any) addr:0x021838ec local
+@1299 kind:data(any) addr:0x02183908 local
+@1300 kind:data(any) addr:0x02183924 local
+@1301 kind:data(any) addr:0x02183940 local
+@1302 kind:data(any) addr:0x0218395c local
+@1303 kind:data(any) addr:0x02183974 local
+@1304 kind:data(any) addr:0x02183990 local
+@1305 kind:data(any) addr:0x021839b0 local
+@1306 kind:data(any) addr:0x021839d0 local
+@1307 kind:data(any) addr:0x021839ec local
+@1308 kind:data(any) addr:0x02183a0c local
+@1261 kind:data(any) addr:0x02183a28 local
+@1262 kind:data(any) addr:0x02183a44 local
+@1263 kind:data(any) addr:0x02183a60 local
+@1264 kind:data(any) addr:0x02183a7c local
data_ov031_02183a98 kind:data(any) addr:0x02183a98
data_ov031_02183a9c kind:data(any) addr:0x02183a9c
data_ov031_02183aa0 kind:data(any) addr:0x02183aa0
@@ -433,44 +429,49 @@ data_ov031_02183d6c kind:data(any) addr:0x02183d6c
data_ov031_02183d7c kind:data(any) addr:0x02183d7c
data_ov031_02183e80 kind:bss addr:0x02183e80
data_ov031_02183e84 kind:bss addr:0x02183e84
-data_ov031_02183e88 kind:bss addr:0x02183e88
-data_ov031_02183e94 kind:bss addr:0x02183e94
-data_ov031_02183ea8 kind:bss addr:0x02183ea8
-data_ov031_02183eb4 kind:bss addr:0x02183eb4
-data_ov031_02183ec8 kind:bss addr:0x02183ec8
-data_ov031_02183ed4 kind:bss addr:0x02183ed4
-data_ov031_02183ee8 kind:bss addr:0x02183ee8
-data_ov031_02183ef4 kind:bss addr:0x02183ef4
-data_ov031_02183f08 kind:bss addr:0x02183f08
-data_ov031_02183f14 kind:bss addr:0x02183f14
-data_ov031_02183f28 kind:bss addr:0x02183f28
-data_ov031_02183f34 kind:bss addr:0x02183f34
-data_ov031_02183f48 kind:bss addr:0x02183f48
-data_ov031_02183f54 kind:bss addr:0x02183f54
-data_ov031_02183f68 kind:bss addr:0x02183f68
-data_ov031_02183f74 kind:bss addr:0x02183f74
-data_ov031_02183f78 kind:bss addr:0x02183f78 ambiguous
-data_ov031_02183f84 kind:bss addr:0x02183f84 ambiguous
-data_ov031_02183f88 kind:bss addr:0x02183f88
-data_ov031_02183f94 kind:bss addr:0x02183f94
-data_ov031_02183fa8 kind:bss addr:0x02183fa8
-data_ov031_02183fb4 kind:bss addr:0x02183fb4
-data_ov031_02183fc8 kind:bss addr:0x02183fc8
-data_ov031_02183fd4 kind:bss addr:0x02183fd4
-data_ov031_02183fe8 kind:bss addr:0x02183fe8
-data_ov031_02183ff4 kind:bss addr:0x02183ff4
-data_ov031_02184008 kind:bss addr:0x02184008
-data_ov031_02184014 kind:bss addr:0x02184014
-data_ov031_02184028 kind:bss addr:0x02184028
-data_ov031_02184034 kind:bss addr:0x02184034
-data_ov031_02184048 kind:bss addr:0x02184048
-data_ov031_02184054 kind:bss addr:0x02184054
-data_ov031_02184068 kind:bss addr:0x02184068
-data_ov031_02184074 kind:bss addr:0x02184074
-data_ov031_02184088 kind:bss addr:0x02184088
-data_ov031_02184094 kind:bss addr:0x02184094
-data_ov031_021840a8 kind:bss addr:0x021840a8
-data_ov031_021840f0 kind:bss addr:0x021840f0
+@792 kind:bss addr:0x02183e88 local
+_ZN15ActorShopItemDM5gTypeE kind:bss addr:0x02183e94
+@794 kind:bss addr:0x02183ea8 local
+_ZN20ActorShopItemSoldOut5gTypeE kind:bss addr:0x02183eb4
+@796 kind:bss addr:0x02183ec8 local
+_ZN27ActorShopItemHeartContainer5gTypeE kind:bss addr:0x02183ed4
+@798 kind:bss addr:0x02183ee8 local
+_ZN19ActorShopItemArrows5gTypeE kind:bss addr:0x02183ef4
+@800 kind:bss addr:0x02183f08 local
+_ZN18ActorShopItemBombs5gTypeE kind:bss addr:0x02183f14
+@802 kind:bss addr:0x02183f28 local
+_ZN21ActorShopItemBombchus5gTypeE kind:bss addr:0x02183f34
+@804 kind:bss addr:0x02183f48 local
+_ZN19ActorShopItemQuiver5gTypeE kind:bss addr:0x02183f54
+@806 kind:bss addr:0x02183f68 local
+_ZN20ActorShopItemBombBag5gTypeE kind:bss addr:0x02183f74
+@808 kind:bss addr:0x02183f88 local
+_ZN23ActorShopItemBombchuBag5gTypeE kind:bss addr:0x02183f94
+@810 kind:bss addr:0x02183fa8 local
+_ZN21ActorShopItemTreasure5gTypeE kind:bss addr:0x02183fb4
+@812 kind:bss addr:0x02183fc8 local
+_ZN21ActorShopItemShipPart5gTypeE kind:bss addr:0x02183fd4
+@814 kind:bss addr:0x02183fe8 local
+_ZN16ActorShopItemGem5gTypeE kind:bss addr:0x02183ff4
+@816 kind:bss addr:0x02184008 local
+_ZN19ActorShopItemShield5gTypeE kind:bss addr:0x02184014
+@818 kind:bss addr:0x02184028 local
+_ZN19ActorShopItemPotion5gTypeE kind:bss addr:0x02184034
+@820 kind:bss addr:0x02184048 local
+_ZN15ActorShopItemBK5gTypeE kind:bss addr:0x02184054
+@822 kind:bss addr:0x02184068 local
+_ZN15ActorShopItemCC5gTypeE kind:bss addr:0x02184074
+@824 kind:bss addr:0x02184088 local
+_ZN15ActorShopItemBY5gTypeE kind:bss addr:0x02184094
+sShopItemModelFiles kind:bss addr:0x021840a8 local
+sShopItemTextureFiles kind:bss addr:0x021840f0 local
+sShopItemShipModelFile kind:bss addr:0x02184138 local
+sShopItemShip2ModelFile kind:bss addr:0x0218413c local
+sShopItemShipTextureFile kind:bss addr:0x02184140 local
+sShopItemShip2TextureFile kind:bss addr:0x02184144 local
+sSoldOutModel kind:bss addr:0x02184148 local
+sShipModel kind:bss addr:0x0218414c local
+sShip2Model kind:bss addr:0x02184150 local
data_ov031_02184154 kind:bss addr:0x02184154
data_ov031_02184160 kind:bss addr:0x02184160
data_ov031_02184174 kind:bss addr:0x02184174
diff --git a/config/eur/arm9/overlays/ov040/relocs.txt b/config/eur/arm9/overlays/ov040/relocs.txt
index cda57e8d..379fbb2e 100644
--- a/config/eur/arm9/overlays/ov040/relocs.txt
+++ b/config/eur/arm9/overlays/ov040/relocs.txt
@@ -697,7 +697,7 @@ from:0x02183040 kind:arm_call to:0x0217e190 module:overlay(40)
from:0x0218304c kind:arm_call to:0x02182e28 module:overlay(40)
from:0x02183084 kind:arm_call to:0x02182f8c module:overlay(40)
from:0x021830d4 kind:arm_call to:0x0217e004 module:overlay(40)
-from:0x02183110 kind:load to:0x02057878 module:main
+from:0x02183110 kind:load to:0x02057870 add:0x8 module:main
from:0x02183114 kind:load to:0x02057840 module:main
from:0x02183120 kind:arm_call to:0x021831c0 module:overlay(40)
from:0x02183128 kind:arm_call_thumb to:0x0203010c module:main
diff --git a/config/eur/arm9/relocs.txt b/config/eur/arm9/relocs.txt
index ece84d28..200939f2 100644
--- a/config/eur/arm9/relocs.txt
+++ b/config/eur/arm9/relocs.txt
@@ -3849,10 +3849,10 @@ from:0x02030034 kind:overlay_id to:7
from:0x02030038 kind:load to:0x027e0ce0 module:dtcm
from:0x02030044 kind:thumb_call_arm to:0x0202ea0c module:main
from:0x0203006c kind:thumb_call to:0x0203004c module:main
-from:0x02030074 kind:load to:0x0205785c module:main
+from:0x02030074 kind:load to:0x02057854 add:0x8 module:main
from:0x02030088 kind:thumb_call to:0x0203004c module:main
from:0x0203008e kind:thumb_call_arm to:0x0202ea0c module:main
-from:0x02030098 kind:load to:0x0205785c module:main
+from:0x02030098 kind:load to:0x02057854 add:0x8 module:main
from:0x020300ba kind:thumb_call to:0x0202d550 module:main
from:0x020300c8 kind:load to:0x027e0ce0 module:dtcm
from:0x020300d8 kind:thumb_call to:0x0202d590 module:main
diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt
index 2d63bb34..ce7f52fd 100644
--- a/config/eur/arm9/symbols.txt
+++ b/config/eur/arm9/symbols.txt
@@ -2698,8 +2698,8 @@ data_020577f0 kind:data(any) addr:0x020577f0
data_020577f8 kind:data(any) addr:0x020577f8
data_02057808 kind:data(any) addr:0x02057808
data_02057840 kind:data(any) addr:0x02057840
-data_0205785c kind:data(any) addr:0x0205785c
-data_02057878 kind:data(any) addr:0x02057878
+_ZTV13FileEntryFlag kind:data(any) addr:0x02057854
+_ZTV9FileEntry kind:data(any) addr:0x02057870
_ZTV8BhioBase kind:data(any) addr:0x02057894
data_020578d4 kind:data(any) addr:0x020578d4
data_020578d8 kind:data(any) addr:0x020578d8
diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt
index f346ec9b..00718f4d 100644
--- a/config/usa/arm9/overlays/ov000/relocs.txt
+++ b/config/usa/arm9/overlays/ov000/relocs.txt
@@ -3349,12 +3349,12 @@ from:0x0209bacc kind:arm_call to:0x0204f5d0 module:main
from:0x0209bae4 kind:arm_call to:0x020a5ad8 module:overlay(0)
from:0x0209bb38 kind:arm_call to:0x02080f04 module:overlay(0)
from:0x0209bb48 kind:load to:0x027e0ce0 module:dtcm
-from:0x0209bb4c kind:load to:0x02057830 module:main
-from:0x0209bb50 kind:load to:0x02057814 module:main
+from:0x0209bb4c kind:load to:0x02057828 add:0x8 module:main
+from:0x0209bb50 kind:load to:0x0205780c add:0x8 module:main
from:0x0209bb54 kind:load to:0x02030109 module:main
from:0x0209bb58 kind:load to:0x0209bb60 module:overlay(0)
from:0x0209bb5c kind:load to:0x020daff8 module:overlay(0)
-from:0x0209bb80 kind:load to:0x02057830 module:main
+from:0x0209bb80 kind:load to:0x02057828 add:0x8 module:main
from:0x0209bb84 kind:load to:0x020577f8 module:main
from:0x0209bbb8 kind:arm_call to:0x020a5d14 module:overlay(0)
from:0x0209bc08 kind:arm_call to:0x020a5da8 module:overlay(0)
@@ -4288,9 +4288,9 @@ from:0x020a5728 kind:arm_call to:0x020c0dfc module:overlay(0)
from:0x020a5794 kind:load to:0x020dc234 module:overlay(0)
from:0x020a5798 kind:load to:0x027e0ce0 module:dtcm
from:0x020a579c kind:load to:0x020dc2f4 module:overlay(0)
-from:0x020a57a0 kind:load to:0x02057830 module:main
+from:0x020a57a0 kind:load to:0x02057828 add:0x8 module:main
from:0x020a57a4 kind:load to:0x0209bb60 module:overlay(0)
-from:0x020a57a8 kind:load to:0x02057814 module:main
+from:0x020a57a8 kind:load to:0x0205780c add:0x8 module:main
from:0x020a57ac kind:load to:0x02030109 module:main
from:0x020a57b0 kind:load to:0x020dc264 module:overlay(0)
from:0x020a57b4 kind:load to:0x020dc2c4 module:overlay(0)
@@ -7721,10 +7721,10 @@ from:0x020c426c kind:load to:0x027e0fe4 module:dtcm
from:0x020c4274 kind:load to:0x027e0e60 module:dtcm
from:0x020c4288 kind:load to:0x020ddf40 module:overlay(0)
from:0x020c42b8 kind:load to:0x020dda78 module:overlay(0)
-from:0x020c4318 kind:load to:0x02057830 module:main
+from:0x020c4318 kind:load to:0x02057828 add:0x8 module:main
from:0x020c431c kind:load to:0x020577f8 module:main
from:0x020c4320 kind:load to:0x020e82fc module:overlay(0)
-from:0x020c4324 kind:load to:0x02057814 module:main
+from:0x020c4324 kind:load to:0x0205780c add:0x8 module:main
from:0x020c434c kind:arm_call_thumb to:0x0202d5d8 module:main
from:0x020c4388 kind:arm_call to:0x020c4278 module:overlay(0)
from:0x020c439c kind:arm_call to:0x02046fe0 module:main
@@ -11220,10 +11220,10 @@ from:0x020e18bc kind:arm_call to:0x0204f890 module:main
from:0x020e18e8 kind:arm_call to:0x0204f890 module:main
from:0x020e1914 kind:arm_call to:0x0204f890 module:main
from:0x020e1944 kind:arm_call to:0x0204f890 module:main
-from:0x020e194c kind:load to:0x02057830 module:main
+from:0x020e194c kind:load to:0x02057828 add:0x8 module:main
from:0x020e1950 kind:load to:0x020ee19c module:overlay(0)
from:0x020e1954 kind:load to:0x020e693c module:overlay(0)
-from:0x020e1958 kind:load to:0x02057814 module:main
+from:0x020e1958 kind:load to:0x0205780c add:0x8 module:main
from:0x020e195c kind:load to:0x020ee3a8 module:overlay(0)
from:0x020e1960 kind:load to:0x02030059 module:main
from:0x020e1964 kind:load to:0x020ee274 module:overlay(0)
diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt
index 3b5b344d..dc43fb71 100644
--- a/config/usa/arm9/overlays/ov000/symbols.txt
+++ b/config/usa/arm9/overlays/ov000/symbols.txt
@@ -137,10 +137,10 @@ func_ov000_02079e04 kind:function(arm,size=0x38) addr:0x02079da4
_Z19func_ov000_02079e3cv kind:function(arm,size=0x2c) addr:0x02079ddc
_ZN18UnkStruct_020e936019func_ov000_02079e68Ei kind:function(arm,size=0x4c) addr:0x02079e08
func_ov000_02079eb4 kind:function(arm,size=0x24) addr:0x02079e54
-func_ov000_02079ed8 kind:function(thumb,size=0x22) addr:0x02079e78
+_ZN29ActorShopItemCollectable_Unk1C1Ev kind:function(thumb,size=0x22) addr:0x02079e78
func_ov000_02079efc kind:function(thumb,size=0x3e) addr:0x02079e9c
-func_ov000_02079f3c kind:function(thumb,size=0x20) addr:0x02079edc
-func_ov000_02079f5c kind:function(thumb,size=0xa0) addr:0x02079efc
+_ZN29ActorShopItemCollectable_Unk1D1Ev kind:function(thumb,size=0x20) addr:0x02079edc
+_ZN29ActorShopItemCollectable_Unk119func_ov000_02079f5cEiiiihi kind:function(thumb,size=0xa0) addr:0x02079efc
LoadNsbTexturedModel kind:function(thumb,size=0x3a) addr:0x02079f9c
func_ov000_0207a038 kind:function(thumb,size=0x102) addr:0x02079fd8
_ZN19Actor_UnkStruct_012C1Ev kind:function(arm,size=0x4c) addr:0x0207a0dc
@@ -223,7 +223,7 @@ func_ov000_0207bb14 kind:function(arm,size=0x4) addr:0x0207bab4
func_ov000_0207bb18 kind:function(arm,size=0x4) addr:0x0207bab8
_ZN18UnkStruct_027e0de419func_ov000_0207bb1cEiPFvPvES0_ kind:function(arm,size=0x30) addr:0x0207babc
func_ov000_0207bb4c kind:function(arm,size=0xfc) addr:0x0207baec
-func_ov000_0207bc48 kind:function(arm,size=0x20) addr:0x0207bbe8
+_ZN17UnkClass_027e0e2819func_ov000_0207bc48Ev kind:function(arm,size=0x20) addr:0x0207bbe8
func_ov000_0207bc68 kind:function(arm,size=0x14) addr:0x0207bc08
func_ov000_0207bc7c kind:function(thumb,size=0x1e) addr:0x0207bc1c
func_ov000_0207bc9c kind:function(arm,size=0x18) addr:0x0207bc3c
diff --git a/config/usa/arm9/overlays/ov003/symbols.txt b/config/usa/arm9/overlays/ov003/symbols.txt
index 105805cd..94cd1206 100644
--- a/config/usa/arm9/overlays/ov003/symbols.txt
+++ b/config/usa/arm9/overlays/ov003/symbols.txt
@@ -117,7 +117,7 @@ func_ov003_020f3c84 kind:function(thumb,size=0x42) addr:0x020f3c24
func_ov003_020f3cc8 kind:function(arm,size=0x8) addr:0x020f3c68
func_ov003_020f3cd0 kind:function(arm,size=0x8c) addr:0x020f3c70
_ZN18UnkStruct_027e0dbc19func_ov003_020f3d5cEi kind:function(thumb,size=0x16) addr:0x020f3cfc
-func_ov003_020f3d74 kind:function(thumb,size=0xc) addr:0x020f3d14
+_ZN18UnkStruct_027e0dbc19func_ov003_020f3d74Ei kind:function(thumb,size=0xc) addr:0x020f3d14
func_ov003_020f3d80 kind:function(thumb,size=0xc) addr:0x020f3d20
func_ov003_020f3d8c kind:function(thumb,size=0x6) addr:0x020f3d2c
func_ov003_020f3d94 kind:function(thumb,size=0x6) addr:0x020f3d34
diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt
index be093516..2cd5e266 100644
--- a/config/usa/arm9/overlays/ov004/relocs.txt
+++ b/config/usa/arm9/overlays/ov004/relocs.txt
@@ -137,9 +137,9 @@ from:0x02101370 kind:thumb_call to:0x0210143c module:overlay(4)
from:0x0210137c kind:thumb_call_arm to:0x0202e9d8 module:main
from:0x02101386 kind:thumb_call to:0x0210160c module:overlay(4)
from:0x02101390 kind:load to:0x027e0ce0 module:dtcm
-from:0x02101394 kind:load to:0x02057830 module:main
+from:0x02101394 kind:load to:0x02057828 add:0x8 module:main
from:0x02101398 kind:load to:0x0210fd20 module:overlay(4)
-from:0x0210139c kind:load to:0x02057814 module:main
+from:0x0210139c kind:load to:0x0205780c add:0x8 module:main
from:0x021013ae kind:thumb_call to:0x02101640 module:overlay(4)
from:0x021013b4 kind:thumb_call_arm to:0x0202ea08 module:main
from:0x021013de kind:thumb_call_arm to:0x0202ea14 module:main
@@ -181,9 +181,9 @@ from:0x02101856 kind:thumb_call_arm to:0x02007908 module:main
from:0x02101866 kind:thumb_call_arm to:0x02007908 module:main
from:0x021018bc kind:thumb_call_arm to:0x0204f710 module:main
from:0x021018d8 kind:thumb_call to:0x02030058 module:main
-from:0x021018e0 kind:load to:0x02057830 module:main
+from:0x021018e0 kind:load to:0x02057828 add:0x8 module:main
from:0x021018e4 kind:load to:0x0210fd34 module:overlay(4)
-from:0x021018e8 kind:load to:0x02057814 module:main
+from:0x021018e8 kind:load to:0x0205780c add:0x8 module:main
from:0x021018f4 kind:load to:0x020eaa38 module:overlay(0)
from:0x021018f8 kind:load to:0x020eaa98 module:overlay(0)
from:0x021018fc kind:load to:0x020eaad4 module:overlay(0)
@@ -333,8 +333,8 @@ from:0x02102414 kind:thumb_call_arm to:0x0209d824 module:overlay(0)
from:0x0210241c kind:load to:0x027e0ce0 module:dtcm
from:0x02102420 kind:load to:0x020e24a8 module:overlay(0)
from:0x02102424 kind:load to:0x020e24ac module:overlay(0)
-from:0x02102428 kind:load to:0x02057830 module:main
-from:0x0210242c kind:load to:0x02057814 module:main
+from:0x02102428 kind:load to:0x02057828 add:0x8 module:main
+from:0x0210242c kind:load to:0x0205780c add:0x8 module:main
from:0x02102430 kind:load to:0x027e0f68 module:dtcm
from:0x02102434 kind:load to:0x027e0fe4 module:dtcm
from:0x02102438 kind:load to:0x027e0fec module:dtcm
@@ -2043,9 +2043,9 @@ from:0x0210a0f6 kind:thumb_call_arm to:0x0202e9d8 module:main
from:0x0210a0fe kind:thumb_call to:0x02030270 module:main
from:0x0210a3e0 kind:load to:0x020e6c28 module:overlay(0)
from:0x0210a3e4 kind:load to:0x027e0ce0 module:dtcm
-from:0x0210a3e8 kind:load to:0x02057830 module:main
+from:0x0210a3e8 kind:load to:0x02057828 add:0x8 module:main
from:0x0210a3ec kind:load to:0x021108b4 module:overlay(4)
-from:0x0210a3f0 kind:load to:0x02057814 module:main
+from:0x0210a3f0 kind:load to:0x0205780c add:0x8 module:main
from:0x0210a3f4 kind:load to:0x02110420 module:overlay(4)
from:0x0210a3f8 kind:load to:0x027e0fc8 module:dtcm
from:0x0210a3fc kind:load to:0x027e0fcc module:dtcm
@@ -2520,8 +2520,8 @@ from:0x0210c45a kind:thumb_call_arm to:0x02097614 module:overlay(0)
from:0x0210c460 kind:thumb_call to:0x02030058 module:main
from:0x0210c466 kind:thumb_call to:0x02030058 module:main
from:0x0210c470 kind:load to:0x027e0d44 module:dtcm
-from:0x0210c478 kind:load to:0x02057830 module:main
-from:0x0210c47c kind:load to:0x02057814 module:main
+from:0x0210c478 kind:load to:0x02057828 add:0x8 module:main
+from:0x0210c47c kind:load to:0x0205780c add:0x8 module:main
from:0x0210c480 kind:load to:0x027e0f68 module:dtcm
from:0x0210c484 kind:load to:0x027e0fec module:dtcm
from:0x0210c488 kind:load to:0x027e0c68 module:dtcm
@@ -2572,8 +2572,8 @@ from:0x0210c748 kind:thumb_call_arm to:0x0201b3c4 module:main
from:0x0210c752 kind:thumb_call_arm to:0x0201e4cc module:main
from:0x0210c770 kind:load to:0x020ec7c0 module:overlay(0)
from:0x0210c774 kind:load to:0x027e0ce0 module:dtcm
-from:0x0210c778 kind:load to:0x02057830 module:main
-from:0x0210c77c kind:load to:0x02057814 module:main
+from:0x0210c778 kind:load to:0x02057828 add:0x8 module:main
+from:0x0210c77c kind:load to:0x0205780c add:0x8 module:main
from:0x0210c7a0 kind:thumb_call_arm to:0x02046fe0 module:main
from:0x0210c7a6 kind:thumb_call to:0x020bd6b8 module:overlay(0)
from:0x0210c7ca kind:thumb_call_arm to:0x02018f78 module:main
@@ -2593,7 +2593,7 @@ from:0x0210c9ec kind:load to:0x027e0ce0 module:dtcm
from:0x0210c9f0 kind:load to:0x0210f948 module:overlay(4)
from:0x0210c9f4 kind:load to:0x0210f94c module:overlay(4)
from:0x0210c9f8 kind:load to:0x02110c8c module:overlay(4)
-from:0x0210c9fc kind:load to:0x02057830 module:main
+from:0x0210c9fc kind:load to:0x02057828 add:0x8 module:main
from:0x0210ca00 kind:load to:0x020577f8 module:main
from:0x0210ca6e kind:thumb_call to:0x0202d5d8 module:main
from:0x0210ca90 kind:thumb_call to:0x02102670 module:overlay(4)
@@ -2856,7 +2856,7 @@ from:0x0210e248 kind:thumb_call to:0x0210ddc8 module:overlay(4)
from:0x0210e268 kind:load to:0x027e0d38 module:dtcm
from:0x0210e26c kind:load to:0x027e1060 module:dtcm
from:0x0210e270 kind:load to:0x02110fd8 module:overlay(4)
-from:0x0210e274 kind:load to:0x02057830 module:main
+from:0x0210e274 kind:load to:0x02057828 add:0x8 module:main
from:0x0210e278 kind:load to:0x020577f8 module:main
from:0x0210e282 kind:thumb_call to:0x02030148 module:main
from:0x0210e2b2 kind:thumb_call_arm to:0x0202e9d8 module:main
@@ -2901,7 +2901,7 @@ from:0x0210e640 kind:thumb_call_arm to:0x020c0b7c module:overlay(0)
from:0x0210e648 kind:load to:0x027e0ce0 module:dtcm
from:0x0210e64c kind:load to:0x02111020 module:overlay(4)
from:0x0210e650 kind:load to:0x02111008 module:overlay(4)
-from:0x0210e654 kind:load to:0x02057830 module:main
+from:0x0210e654 kind:load to:0x02057828 add:0x8 module:main
from:0x0210e658 kind:load to:0x020577f8 module:main
from:0x0210e65c kind:load to:0x0210fc78 module:overlay(4)
from:0x0210e660 kind:load to:0x02110ff0 module:overlay(4)
@@ -2949,7 +2949,7 @@ from:0x0210e9e8 kind:thumb_call_arm to:0x020c0b7c module:overlay(0)
from:0x0210e9f0 kind:load to:0x027e0d38 module:dtcm
from:0x0210e9f4 kind:load to:0x027e0900 module:dtcm
from:0x0210e9fc kind:load to:0x0216d878 module:overlay(29)
-from:0x0210ea00 kind:load to:0x02057830 module:main
+from:0x0210ea00 kind:load to:0x02057828 add:0x8 module:main
from:0x0210ea04 kind:load to:0x020577c0 module:main
from:0x0210ea08 kind:load to:0x02111020 module:overlay(4)
from:0x0210ea0c kind:load to:0x027e0ce0 module:dtcm
@@ -2988,9 +2988,9 @@ from:0x0210ec72 kind:thumb_call to:0x02101c08 module:overlay(4)
from:0x0210ec7c kind:thumb_call to:0x020300c8 module:main
from:0x0210ec82 kind:thumb_call to:0x020300c8 module:main
from:0x0210ec88 kind:thumb_call to:0x02030058 module:main
-from:0x0210ec90 kind:load to:0x02057830 module:main
+from:0x0210ec90 kind:load to:0x02057828 add:0x8 module:main
from:0x0210ec94 kind:load to:0x02110fa4 module:overlay(4)
-from:0x0210ec98 kind:load to:0x02057814 module:main
+from:0x0210ec98 kind:load to:0x0205780c add:0x8 module:main
from:0x0210ed3c kind:thumb_call_arm to:0x0202e9d8 module:main
from:0x0210ed44 kind:thumb_call_arm to:0x020a339c module:overlay(0)
from:0x0210ed64 kind:thumb_call_arm to:0x020078f4 module:main
@@ -3010,8 +3010,8 @@ from:0x0210eeee kind:thumb_call to:0x0210ef90 module:overlay(4)
from:0x0210eef4 kind:thumb_call to:0x02030058 module:main
from:0x0210ef00 kind:load to:0x027e0d38 module:dtcm
from:0x0210ef04 kind:load to:0x027e0f7c module:dtcm
-from:0x0210ef08 kind:load to:0x02057830 module:main
-from:0x0210ef0c kind:load to:0x02057814 module:main
+from:0x0210ef08 kind:load to:0x02057828 add:0x8 module:main
+from:0x0210ef0c kind:load to:0x0205780c add:0x8 module:main
from:0x0210ef1c kind:thumb_call_arm to:0x0207cd14 module:overlay(0)
from:0x0210ef3a kind:thumb_call to:0x02030098 module:main
from:0x0210ef4c kind:thumb_call_arm to:0x0209d6b0 module:overlay(0)
@@ -3019,8 +3019,8 @@ from:0x0210ef5c kind:thumb_call to:0x02101c7c module:overlay(4)
from:0x0210ef66 kind:thumb_call to:0x02030058 module:main
from:0x0210ef74 kind:thumb_call_arm to:0x020a3468 module:overlay(0)
from:0x0210ef7a kind:thumb_call to:0x02030058 module:main
-from:0x0210ef84 kind:load to:0x02057830 module:main
-from:0x0210ef88 kind:load to:0x02057814 module:main
+from:0x0210ef84 kind:load to:0x02057828 add:0x8 module:main
+from:0x0210ef88 kind:load to:0x0205780c add:0x8 module:main
from:0x0210ef8c kind:load to:0x027e0f7c module:dtcm
from:0x0210efc0 kind:thumb_call_arm to:0x020078f4 module:main
from:0x0210efdc kind:thumb_call_arm to:0x020972f4 module:overlay(0)
diff --git a/config/usa/arm9/overlays/ov009/relocs.txt b/config/usa/arm9/overlays/ov009/relocs.txt
index fac38039..81578eb6 100644
--- a/config/usa/arm9/overlays/ov009/relocs.txt
+++ b/config/usa/arm9/overlays/ov009/relocs.txt
@@ -1999,10 +1999,10 @@ from:0x0211e434 kind:load to:0x0211f4b0 module:overlay(9)
from:0x0211e478 kind:arm_call to:0x0204f890 module:main
from:0x0211e4b8 kind:arm_call to:0x0204f890 module:main
from:0x0211e4f4 kind:arm_call to:0x0204f890 module:main
-from:0x0211e4fc kind:load to:0x02057830 module:main
+from:0x0211e4fc kind:load to:0x02057828 add:0x8 module:main
from:0x0211e500 kind:load to:0x0211f4b8 module:overlay(9)
from:0x0211e504 kind:load to:0x0211e9d0 module:overlay(9)
-from:0x0211e508 kind:load to:0x02057814 module:main
+from:0x0211e508 kind:load to:0x0205780c add:0x8 module:main
from:0x0211e50c kind:load to:0x0211f4c4 module:overlay(9)
from:0x0211e510 kind:load to:0x02030059 module:main
from:0x0211e514 kind:load to:0x0211f4b8 module:overlay(9)
diff --git a/config/usa/arm9/overlays/ov015/relocs.txt b/config/usa/arm9/overlays/ov015/relocs.txt
index a26a50d5..b698719e 100644
--- a/config/usa/arm9/overlays/ov015/relocs.txt
+++ b/config/usa/arm9/overlays/ov015/relocs.txt
@@ -1331,8 +1331,8 @@ from:0x0212a1c0 kind:arm_call to:0x0212b55c module:overlay(15)
from:0x0212a1d4 kind:arm_call to:0x0202e9f0 module:main
from:0x0212a1f0 kind:arm_call to:0x0212b774 module:overlay(15)
from:0x0212a1f8 kind:arm_call_thumb to:0x02030108 module:main
-from:0x0212a208 kind:load to:0x02057830 module:main
-from:0x0212a20c kind:load to:0x02057814 module:main
+from:0x0212a208 kind:load to:0x02057828 add:0x8 module:main
+from:0x0212a20c kind:load to:0x0205780c add:0x8 module:main
from:0x0212a210 kind:load to:0x020577f8 module:main
from:0x0212a214 kind:load to:0x0218a2c8 module:overlay(15)
from:0x0212a218 kind:load to:0x027e0ce0 module:dtcm
@@ -11767,12 +11767,12 @@ from:0x02184f04 kind:arm_call to:0x0202e9d8 module:main
from:0x02184f18 kind:arm_call to:0x020a5cb0 module:overlay(0)
from:0x02184f24 kind:arm_call_thumb to:0x020a9528 module:overlay(0)
from:0x02184f44 kind:load to:0x027e0ce0 module:dtcm
-from:0x02184f48 kind:load to:0x02057830 module:main
-from:0x02184f4c kind:load to:0x02057814 module:main
+from:0x02184f48 kind:load to:0x02057828 add:0x8 module:main
+from:0x02184f4c kind:load to:0x0205780c add:0x8 module:main
from:0x02184f50 kind:load to:0x02030109 module:main
from:0x02184f54 kind:load to:0x02184f5c module:overlay(15)
from:0x02184f58 kind:load to:0x021871ec module:overlay(15)
-from:0x02184f7c kind:load to:0x02057830 module:main
+from:0x02184f7c kind:load to:0x02057828 add:0x8 module:main
from:0x02184f80 kind:load to:0x020577f8 module:main
from:0x02184fdc kind:arm_call to:0x020a5c6c module:overlay(0)
from:0x02184ff0 kind:arm_call to:0x0204f710 module:main
@@ -12185,7 +12185,7 @@ from:0x02187d50 kind:arm_call to:0x0204f890 module:main
from:0x02187d88 kind:arm_call to:0x0204f890 module:main
from:0x02187dc4 kind:arm_call to:0x0204f890 module:main
from:0x02187e04 kind:arm_call to:0x0204f890 module:main
-from:0x02187e0c kind:load to:0x02057830 module:main
+from:0x02187e0c kind:load to:0x02057828 add:0x8 module:main
from:0x02187e10 kind:load to:0x0218f4dc module:overlay(15)
from:0x02187e14 kind:load to:0x0218b87c module:overlay(15)
from:0x02187e18 kind:load to:0x020577f8 module:main
@@ -12196,7 +12196,7 @@ from:0x02187e28 kind:load to:0x0218b88c module:overlay(15)
from:0x02187e2c kind:load to:0x0218f508 module:overlay(15)
from:0x02187e30 kind:load to:0x0218f4fc module:overlay(15)
from:0x02187e34 kind:load to:0x0218b89c module:overlay(15)
-from:0x02187e38 kind:load to:0x02057814 module:main
+from:0x02187e38 kind:load to:0x0205780c add:0x8 module:main
from:0x02187e3c kind:load to:0x0218f524 module:overlay(15)
from:0x02187e40 kind:load to:0x02030059 module:main
from:0x02187e44 kind:load to:0x0218f518 module:overlay(15)
diff --git a/config/usa/arm9/overlays/ov018/relocs.txt b/config/usa/arm9/overlays/ov018/relocs.txt
index 58be9719..d62f08d0 100644
--- a/config/usa/arm9/overlays/ov018/relocs.txt
+++ b/config/usa/arm9/overlays/ov018/relocs.txt
@@ -127,7 +127,7 @@ from:0x0215c854 kind:arm_call_thumb to:0x02030058 module:main
from:0x0215c85c kind:arm_call_thumb to:0x02030108 module:main
from:0x0215c868 kind:load to:0x0216c020 module:overlay(18)
from:0x0215c86c kind:load to:0x020577f8 module:main
-from:0x0215c870 kind:load to:0x02057814 module:main
+from:0x0215c870 kind:load to:0x0205780c add:0x8 module:main
from:0x0215c874 kind:load to:0x027e0ce0 module:dtcm
from:0x0215c878 kind:load to:0x0216b3bc module:overlay(18)
from:0x0215c890 kind:arm_call_thumb to:0x020c0ba8 module:overlay(0)
diff --git a/config/usa/arm9/overlays/ov031/delinks.txt b/config/usa/arm9/overlays/ov031/delinks.txt
index e9049fd1..14857467 100644
--- a/config/usa/arm9/overlays/ov031/delinks.txt
+++ b/config/usa/arm9/overlays/ov031/delinks.txt
@@ -7,3 +7,8 @@
src/31_Shop/Actor/ActorShopItem.cpp:
.text start:0x0217db3c end:0x02180668
+ .rodata start:0x02181848 end:0x021819e8
+ .init start:0x02181acc end:0x02181eb8
+ .ctor start:0x02181fe0 end:0x02181fe4
+ .data start:0x021821f0 end:0x021839f8
+ .bss start:0x02183de8 end:0x021840b4
diff --git a/config/usa/arm9/overlays/ov031/relocs.txt b/config/usa/arm9/overlays/ov031/relocs.txt
index 05d27eb6..45729ad7 100644
--- a/config/usa/arm9/overlays/ov031/relocs.txt
+++ b/config/usa/arm9/overlays/ov031/relocs.txt
@@ -283,39 +283,39 @@ from:0x0217db14 kind:arm_call to:0x0202b87c module:main
from:0x0217db54 kind:arm_call to:0x0202e9d8 module:main
from:0x0217db60 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217db74 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217db78 kind:load to:0x02183234 module:overlay(31)
+from:0x0217db78 kind:load to:0x0218322c module:overlay(31) add:0x8
from:0x0217db94 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dba0 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dbb4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dbb8 kind:load to:0x02183148 module:overlay(31)
+from:0x0217dbb8 kind:load to:0x02183140 module:overlay(31) add:0x8
from:0x0217dbd4 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dbe0 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dbf4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dbf8 kind:load to:0x0218305c module:overlay(31)
+from:0x0217dbf8 kind:load to:0x02183054 module:overlay(31) add:0x8
from:0x0217dc14 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dc20 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dc34 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dc38 kind:load to:0x02182f70 module:overlay(31)
+from:0x0217dc38 kind:load to:0x02182f68 module:overlay(31) add:0x8
from:0x0217dc54 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dc60 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dc74 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dc78 kind:load to:0x02182d98 module:overlay(31)
+from:0x0217dc78 kind:load to:0x02182d90 module:overlay(31) add:0x8
from:0x0217dc94 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dca0 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dcb4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dcb8 kind:load to:0x02182bc0 module:overlay(31)
+from:0x0217dcb8 kind:load to:0x02182bb8 module:overlay(31) add:0x8
from:0x0217dcd4 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dce0 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dcf4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dcf8 kind:load to:0x02182e84 module:overlay(31)
+from:0x0217dcf8 kind:load to:0x02182e7c module:overlay(31) add:0x8
from:0x0217dd14 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dd20 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dd34 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dd38 kind:load to:0x02182cac module:overlay(31)
+from:0x0217dd38 kind:load to:0x02182ca4 module:overlay(31) add:0x8
from:0x0217dd54 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dd60 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217dd74 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217dd78 kind:load to:0x02182ad4 module:overlay(31)
+from:0x0217dd78 kind:load to:0x02182acc module:overlay(31) add:0x8
from:0x0217dd94 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dda0 kind:arm_call to:0x0217e454 module:overlay(31)
from:0x0217dda8 kind:load to:0x027e0fe0 module:dtcm
@@ -325,23 +325,23 @@ from:0x0217ddd8 kind:load to:0x027e0fe0 module:dtcm
from:0x0217ddf4 kind:arm_call to:0x0202e9d8 module:main
from:0x0217de00 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217de14 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217de18 kind:load to:0x02182810 module:overlay(31)
+from:0x0217de18 kind:load to:0x02182808 module:overlay(31) add:0x8
from:0x0217de34 kind:arm_call to:0x0202e9d8 module:main
from:0x0217de40 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217de54 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217de58 kind:load to:0x02182724 module:overlay(31)
+from:0x0217de58 kind:load to:0x0218271c module:overlay(31) add:0x8
from:0x0217de74 kind:arm_call to:0x0202e9d8 module:main
from:0x0217de80 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217de94 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217de98 kind:load to:0x02182638 module:overlay(31)
+from:0x0217de98 kind:load to:0x02182630 module:overlay(31) add:0x8
from:0x0217deb4 kind:arm_call to:0x0202e9d8 module:main
from:0x0217dec0 kind:arm_call to:0x0217e4e8 module:overlay(31)
from:0x0217ded4 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217ded8 kind:load to:0x021824b0 module:overlay(31)
+from:0x0217ded8 kind:load to:0x021824a8 module:overlay(31) add:0x8
from:0x0217def4 kind:arm_call to:0x0202e9d8 module:main
from:0x0217df00 kind:arm_call to:0x0217e4e8 module:overlay(31)
from:0x0217df14 kind:load to:0x027e0fe0 module:dtcm
-from:0x0217df18 kind:load to:0x021823ec module:overlay(31)
+from:0x0217df18 kind:load to:0x021823e4 module:overlay(31) add:0x8
from:0x0217df34 kind:arm_call to:0x0202e9d8 module:main
from:0x0217df40 kind:arm_call to:0x0217e518 module:overlay(31)
from:0x0217df48 kind:load to:0x027e0fe0 module:dtcm
@@ -357,8 +357,8 @@ from:0x0217e0f4 kind:arm_call to:0x0202e9d8 module:main
from:0x0217e13c kind:arm_call to:0x0202e9d8 module:main
from:0x0217e184 kind:arm_call to:0x0202e9d8 module:main
from:0x0217e1c8 kind:arm_call to:0x0217df4c module:overlay(31)
-from:0x0217e1d8 kind:load to:0x02057830 module:main
-from:0x0217e1dc kind:load to:0x02057814 module:main
+from:0x0217e1d8 kind:load to:0x02057828 add:0x8 module:main
+from:0x0217e1dc kind:load to:0x0205780c add:0x8 module:main
from:0x0217e1e0 kind:load to:0x027e0fb4 module:dtcm
from:0x0217e1e4 kind:load to:0x02182210 module:overlay(31)
from:0x0217e1e8 kind:load to:0x027e0ce0 module:dtcm
@@ -371,71 +371,71 @@ from:0x0217e200 kind:load to:0x02183de8 module:overlay(31)
from:0x0217e204 kind:load to:0x021839a4 module:overlay(31)
from:0x0217e208 kind:load to:0x021839c0 module:overlay(31)
from:0x0217e20c kind:load to:0x021839dc module:overlay(31)
-from:0x0217e210 kind:load to:0x02181858 module:overlay(31)
+from:0x0217e210 kind:load to:0x02181848 add:0x10 module:overlay(31)
from:0x0217e32c kind:load to:0x02184008 module:overlay(31)
from:0x0217e330 kind:load to:0x02184050 module:overlay(31)
from:0x0217e334 kind:load to:0x02183de8 module:overlay(31)
from:0x0217e340 kind:arm_call to:0x020c14f4 module:overlay(0)
-from:0x0217e368 kind:load to:0x0218340c module:overlay(31)
+from:0x0217e368 kind:load to:0x02183404 add:0x8 module:overlay(31)
from:0x0217e374 kind:arm_call to:0x0217e338 module:overlay(31)
-from:0x0217e3bc kind:load to:0x02183320 module:overlay(31)
+from:0x0217e3bc kind:load to:0x02183318 module:overlay(31) add:0x8
from:0x0217e3cc kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217e3f8 kind:arm_call to:0x0202e9d8 module:main
from:0x0217e404 kind:arm_call_thumb to:0x02079e78 module:overlay(0)
from:0x0217e438 kind:arm_call_thumb to:0x02079efc module:overlay(0)
-from:0x0217e448 kind:load to:0x021829e8 module:overlay(31)
+from:0x0217e448 kind:load to:0x021829e0 module:overlay(31) add:0x8
from:0x0217e44c kind:load to:0x027e0ce0 module:dtcm
from:0x0217e450 kind:load to:0x02181848 module:overlay(31)
from:0x0217e460 kind:arm_call to:0x0217e36c module:overlay(31)
from:0x0217e48c kind:arm_call to:0x0202e9d8 module:main
from:0x0217e498 kind:arm_call_thumb to:0x02079e78 module:overlay(0)
from:0x0217e4cc kind:arm_call_thumb to:0x02079efc module:overlay(0)
-from:0x0217e4dc kind:load to:0x021828fc module:overlay(31)
+from:0x0217e4dc kind:load to:0x021828f4 module:overlay(31) add:0x8
from:0x0217e4e0 kind:load to:0x027e0ce0 module:dtcm
from:0x0217e4e4 kind:load to:0x02181848 module:overlay(31)
from:0x0217e4f0 kind:arm_call to:0x0217e338 module:overlay(31)
-from:0x0217e514 kind:load to:0x02182574 module:overlay(31)
+from:0x0217e514 kind:load to:0x0218256c module:overlay(31) add:0x8
from:0x0217e520 kind:arm_call to:0x0217e4e8 module:overlay(31)
-from:0x0217e534 kind:load to:0x02182328 module:overlay(31)
+from:0x0217e534 kind:load to:0x02182320 module:overlay(31) add:0x8
from:0x0217e540 kind:arm_call to:0x020c16d0 module:overlay(0)
from:0x0217e554 kind:arm_call to:0x020c16d0 module:overlay(0)
from:0x0217e55c kind:arm_call to:0x0202ea08 module:main
from:0x0217e570 kind:arm_call to:0x020c16d0 module:overlay(0)
from:0x0217e5b4 kind:arm_call to:0x0217e568 module:overlay(31)
-from:0x0217e5c0 kind:load to:0x02183320 module:overlay(31)
+from:0x0217e5c0 kind:load to:0x02183318 module:overlay(31) add:0x8
from:0x0217e5fc kind:arm_call to:0x0217e568 module:overlay(31)
from:0x0217e604 kind:arm_call to:0x0202ea08 module:main
-from:0x0217e610 kind:load to:0x02183320 module:overlay(31)
+from:0x0217e610 kind:load to:0x02183318 module:overlay(31) add:0x8
from:0x0217e64c kind:arm_call to:0x0217e568 module:overlay(31)
-from:0x0217e658 kind:load to:0x02183320 module:overlay(31)
+from:0x0217e658 kind:load to:0x02183318 module:overlay(31) add:0x8
from:0x0217e66c kind:arm_call to:0x0217e614 module:overlay(31)
from:0x0217e688 kind:arm_call to:0x0217e614 module:overlay(31)
from:0x0217e690 kind:arm_call to:0x0202ea08 module:main
from:0x0217e6bc kind:arm_call_thumb to:0x02079edc module:overlay(0)
from:0x0217e6c4 kind:arm_call to:0x0202ea08 module:main
from:0x0217e758 kind:arm_call to:0x0217e614 module:overlay(31)
-from:0x0217e764 kind:load to:0x021829e8 module:overlay(31)
+from:0x0217e764 kind:load to:0x021829e0 module:overlay(31) add:0x8
from:0x0217e768 kind:load to:0x02183de8 module:overlay(31)
from:0x0217e78c kind:arm_call_thumb to:0x02079edc module:overlay(0)
from:0x0217e794 kind:arm_call to:0x0202ea08 module:main
from:0x0217e828 kind:arm_call to:0x0217e614 module:overlay(31)
from:0x0217e830 kind:arm_call to:0x0202ea08 module:main
-from:0x0217e83c kind:load to:0x021829e8 module:overlay(31)
+from:0x0217e83c kind:load to:0x021829e0 module:overlay(31) add:0x8
from:0x0217e840 kind:load to:0x02183de8 module:overlay(31)
from:0x0217e864 kind:arm_call_thumb to:0x02079edc module:overlay(0)
from:0x0217e86c kind:arm_call to:0x0202ea08 module:main
from:0x0217e87c kind:arm_call to:0x0217e614 module:overlay(31)
-from:0x0217e888 kind:load to:0x021828fc module:overlay(31)
+from:0x0217e888 kind:load to:0x021828f4 module:overlay(31) add:0x8
from:0x0217e8ac kind:arm_call_thumb to:0x02079edc module:overlay(0)
from:0x0217e8b4 kind:arm_call to:0x0202ea08 module:main
from:0x0217e8c4 kind:arm_call to:0x0217e614 module:overlay(31)
from:0x0217e8cc kind:arm_call to:0x0202ea08 module:main
-from:0x0217e8d8 kind:load to:0x021828fc module:overlay(31)
+from:0x0217e8d8 kind:load to:0x021828f4 module:overlay(31) add:0x8
from:0x0217e960 kind:arm_call to:0x0217df4c module:overlay(31)
from:0x0217e96c kind:load to:0x027e0fb4 module:dtcm
-from:0x0217e970 kind:load to:0x02181968 module:overlay(31)
-from:0x0217e974 kind:load to:0x02181978 module:overlay(31)
-from:0x0217e978 kind:load to:0x02181988 module:overlay(31)
+from:0x0217e970 kind:load to:0x02181848 add:0x120 module:overlay(31)
+from:0x0217e974 kind:load to:0x02181848 add:0x130 module:overlay(31)
+from:0x0217e978 kind:load to:0x02181848 add:0x140 module:overlay(31)
from:0x0217e97c kind:load to:0x02181848 module:overlay(31)
from:0x0217e980 kind:load to:0x02184008 module:overlay(31)
from:0x0217e984 kind:load to:0x02184050 module:overlay(31)
@@ -450,8 +450,8 @@ from:0x0217ea70 kind:arm_call to:0x0217df4c module:overlay(31)
from:0x0217ea80 kind:load to:0x027e1058 module:dtcm
from:0x0217ea84 kind:load to:0x027e0ce0 module:dtcm
from:0x0217ea88 kind:load to:0x02183de8 module:overlay(31)
-from:0x0217ea8c kind:load to:0x02181998 module:overlay(31)
-from:0x0217ea90 kind:load to:0x021819a8 module:overlay(31)
+from:0x0217ea8c kind:load to:0x02181848 add:0x150 module:overlay(31)
+from:0x0217ea90 kind:load to:0x02181848 add:0x160 module:overlay(31)
from:0x0217eaa4 kind:arm_call to:0x021801d8 module:overlay(31)
from:0x0217eab8 kind:arm_call_thumb to:0x0211c0c4 module:overlay(9)
from:0x0217ead0 kind:arm_call to:0x0202e9d8 module:main
@@ -573,7 +573,7 @@ from:0x0217fbd4 kind:arm_call to:0x0217fb68 module:overlay(31)
from:0x0217fc0c kind:arm_call to:0x021801a8 module:overlay(31)
from:0x0217fc18 kind:arm_call to:0x021801c0 module:overlay(31)
from:0x0217fc24 kind:arm_call_thumb to:0x0211c900 module:overlay(9)
-from:0x0217fc3c kind:load to:0x02181948 module:overlay(31)
+from:0x0217fc3c kind:load to:0x02181848 add:0x100 module:overlay(31)
from:0x0217fc48 kind:arm_call to:0x0217bd18 module:overlay(31)
from:0x0217fc6c kind:arm_call to:0x0217bd18 module:overlay(31)
from:0x0217fc70 kind:arm_call to:0x0217cdcc module:overlay(31)
diff --git a/config/usa/arm9/overlays/ov031/symbols.txt b/config/usa/arm9/overlays/ov031/symbols.txt
index 7c07e509..d5c2da62 100644
--- a/config/usa/arm9/overlays/ov031/symbols.txt
+++ b/config/usa/arm9/overlays/ov031/symbols.txt
@@ -1,4 +1,4 @@
-func_ov031_0217bd80 kind:function(arm,size=0x8) addr:0x0217bce0
+_ZN24UnkStruct_ov031_02183e8019func_ov031_0217bd80Ev kind:function(arm,size=0x8) addr:0x0217bce0
func_ov031_0217bd88 kind:function(arm,size=0x18) addr:0x0217bce8
func_ov031_0217bda0 kind:function(arm,size=0xc) addr:0x0217bd00
func_ov031_0217bdac kind:function(arm,size=0x8) addr:0x0217bd0c
@@ -31,10 +31,10 @@ func_ov031_0217cdd8 kind:function(arm,size=0x20) addr:0x0217cd38
func_ov031_0217cdf8 kind:function(arm,size=0x20) addr:0x0217cd58
func_ov031_0217ce18 kind:function(arm,size=0x54) addr:0x0217cd78
func_ov031_0217ce6c kind:function(arm,size=0x24) addr:0x0217cdcc
-func_ov031_0217ce90 kind:function(arm,size=0x30) addr:0x0217cdf0
-func_ov031_0217cec0 kind:function(arm,size=0x40) addr:0x0217ce20
+HasFreebieCard kind:function(arm,size=0x30) addr:0x0217cdf0
+_ZN24UnkStruct_ov031_02183e8019func_ov031_0217cec0Ev kind:function(arm,size=0x40) addr:0x0217ce20
func_ov031_0217cf00 kind:function(arm,size=0x1c) addr:0x0217ce60
-func_ov031_0217cf1c kind:function(arm,size=0x10) addr:0x0217ce7c
+_Z19func_ov031_0217cf1cv kind:function(arm,size=0x10) addr:0x0217ce7c
func_ov031_0217cf2c kind:function(arm,size=0x34) addr:0x0217ce8c
func_ov031_0217cf60 kind:function(arm,size=0x24) addr:0x0217cec0
func_ov031_0217cf84 kind:function(arm,size=0x2c) addr:0x0217cee4
@@ -69,175 +69,175 @@ func_ov031_0217da80 kind:function(arm,size=0x38) addr:0x0217d9e0
func_ov031_0217dab8 kind:function(arm,size=0x90) addr:0x0217da18
func_ov031_0217db48 kind:function(arm,size=0x8) addr:0x0217daa8
func_ov031_0217db50 kind:function(arm,size=0x8c) addr:0x0217dab0
-func_ov031_0217dbdc kind:function(arm,size=0x40) addr:0x0217db3c
-func_ov031_0217dc1c kind:function(arm,size=0x40) addr:0x0217db7c
-func_ov031_0217dc5c kind:function(arm,size=0x40) addr:0x0217dbbc
-func_ov031_0217dc9c kind:function(arm,size=0x40) addr:0x0217dbfc
-func_ov031_0217dcdc kind:function(arm,size=0x40) addr:0x0217dc3c
-func_ov031_0217dd1c kind:function(arm,size=0x40) addr:0x0217dc7c
-func_ov031_0217dd5c kind:function(arm,size=0x40) addr:0x0217dcbc
-func_ov031_0217dd9c kind:function(arm,size=0x40) addr:0x0217dcfc
-func_ov031_0217dddc kind:function(arm,size=0x40) addr:0x0217dd3c
-func_ov031_0217de1c kind:function(arm,size=0x30) addr:0x0217dd7c
-func_ov031_0217de4c kind:function(arm,size=0x30) addr:0x0217ddac
-func_ov031_0217de7c kind:function(arm,size=0x40) addr:0x0217dddc
-func_ov031_0217debc kind:function(arm,size=0x40) addr:0x0217de1c
-func_ov031_0217defc kind:function(arm,size=0x40) addr:0x0217de5c
-func_ov031_0217df3c kind:function(arm,size=0x40) addr:0x0217de9c
-func_ov031_0217df7c kind:function(arm,size=0x40) addr:0x0217dedc
-func_ov031_0217dfbc kind:function(arm,size=0x30) addr:0x0217df1c
-func_ov031_0217dfec kind:function(arm,size=0x54) addr:0x0217df4c
-func_ov031_0217e040 kind:function(arm,size=0x274) addr:0x0217dfa0
-func_ov031_0217e2b4 kind:function(arm,size=0x124) addr:0x0217e214
-func_ov031_0217e3d8 kind:function(arm,size=0x34) addr:0x0217e338
-func_ov031_0217e40c kind:function(arm,size=0x54) addr:0x0217e36c
-func_ov031_0217e460 kind:function(arm,size=0x94) addr:0x0217e3c0
-func_ov031_0217e4f4 kind:function(arm,size=0x94) addr:0x0217e454
-func_ov031_0217e588 kind:function(arm,size=0x30) addr:0x0217e4e8
-func_ov031_0217e5b8 kind:function(arm,size=0x20) addr:0x0217e518
-func_ov031_0217e5d8 kind:function(arm,size=0x14) addr:0x0217e538
-func_ov031_0217e5ec kind:function(arm,size=0x1c) addr:0x0217e54c
-func_ov031_0217e608 kind:function(arm,size=0x14) addr:0x0217e568
-func_ov031_0217e61c kind:function(arm,size=0x48) addr:0x0217e57c
-func_ov031_0217e664 kind:function(arm,size=0x50) addr:0x0217e5c4
-func_ov031_0217e6b4 kind:function(arm,size=0x48) addr:0x0217e614
-func_ov031_0217e6fc kind:function(arm,size=0x1c) addr:0x0217e65c
-func_ov031_0217e718 kind:function(arm,size=0x24) addr:0x0217e678
-func_ov031_0217e73c kind:function(arm,size=0xd0) addr:0x0217e69c
-func_ov031_0217e80c kind:function(arm,size=0xd8) addr:0x0217e76c
-func_ov031_0217e8e4 kind:function(arm,size=0x48) addr:0x0217e844
-func_ov031_0217e92c kind:function(arm,size=0x50) addr:0x0217e88c
-func_ov031_0217e97c kind:function(arm,size=0xac) addr:0x0217e8dc
-func_ov031_0217ea28 kind:function(arm,size=0x18) addr:0x0217e988
-func_ov031_0217ea40 kind:function(arm,size=0x1c) addr:0x0217e9a0
-func_ov031_0217ea5c kind:function(arm,size=0xd8) addr:0x0217e9bc
-func_ov031_0217eb34 kind:function(arm,size=0x60) addr:0x0217ea94
-func_ov031_0217eb94 kind:function(arm,size=0xc) addr:0x0217eaf4
-func_ov031_0217eba0 kind:function(arm,size=0x20) addr:0x0217eb00
-func_ov031_0217ebc0 kind:function(arm,size=0x14) addr:0x0217eb20
-func_ov031_0217ebd4 kind:function(arm,size=0x14) addr:0x0217eb34
-func_ov031_0217ebe8 kind:function(arm,size=0x1c) addr:0x0217eb48
-func_ov031_0217ec04 kind:function(arm,size=0x14) addr:0x0217eb64
-func_ov031_0217ec18 kind:function(arm,size=0x1c) addr:0x0217eb78
-func_ov031_0217ec34 kind:function(arm,size=0x14) addr:0x0217eb94
-func_ov031_0217ec48 kind:function(arm,size=0x1c) addr:0x0217eba8
-func_ov031_0217ec64 kind:function(arm,size=0x14) addr:0x0217ebc4
-func_ov031_0217ec78 kind:function(arm,size=0x1c) addr:0x0217ebd8
-func_ov031_0217ec94 kind:function(arm,size=0x24) addr:0x0217ebf4
-func_ov031_0217ecb8 kind:function(arm,size=0x30) addr:0x0217ec18
-func_ov031_0217ece8 kind:function(arm,size=0x64) addr:0x0217ec48
-func_ov031_0217ed4c kind:function(arm,size=0x1c) addr:0x0217ecac
-func_ov031_0217ed68 kind:function(arm,size=0x60) addr:0x0217ecc8
-func_ov031_0217edc8 kind:function(arm,size=0x14) addr:0x0217ed28
-func_ov031_0217eddc kind:function(arm,size=0x98) addr:0x0217ed3c
-func_ov031_0217ee74 kind:function(arm,size=0x154) addr:0x0217edd4
-func_ov031_0217efc8 kind:function(arm,size=0x68) addr:0x0217ef28
-func_ov031_0217f030 kind:function(arm,size=0x60) addr:0x0217ef90
-func_ov031_0217f090 kind:function(arm,size=0x14) addr:0x0217eff0
-func_ov031_0217f0a4 kind:function(arm,size=0xc) addr:0x0217f004
-func_ov031_0217f0b0 kind:function(arm,size=0x4) addr:0x0217f010
-func_ov031_0217f0b4 kind:function(arm,size=0x38) addr:0x0217f014
-func_ov031_0217f0ec kind:function(arm,size=0x20) addr:0x0217f04c
-func_ov031_0217f10c kind:function(arm,size=0x8) addr:0x0217f06c
-func_ov031_0217f114 kind:function(arm,size=0xc) addr:0x0217f074
-func_ov031_0217f120 kind:function(arm,size=0x334) addr:0x0217f080
-func_ov031_0217f454 kind:function(arm,size=0x50) addr:0x0217f3b4
-func_ov031_0217f4a4 kind:function(arm,size=0x194) addr:0x0217f404
-func_ov031_0217f638 kind:function(arm,size=0x4) addr:0x0217f598
-func_ov031_0217f63c kind:function(arm,size=0x4) addr:0x0217f59c
-func_ov031_0217f640 kind:function(arm,size=0xb8) addr:0x0217f5a0
-func_ov031_0217f6f8 kind:function(arm,size=0xb8) addr:0x0217f658
-func_ov031_0217f7b0 kind:function(arm,size=0xb8) addr:0x0217f710
-func_ov031_0217f868 kind:function(arm,size=0x24) addr:0x0217f7c8
-func_ov031_0217f88c kind:function(arm,size=0x8) addr:0x0217f7ec
-func_ov031_0217f894 kind:function(arm,size=0xc) addr:0x0217f7f4
-func_ov031_0217f8a0 kind:function(arm,size=0x24) addr:0x0217f800
-func_ov031_0217f8c4 kind:function(arm,size=0xc) addr:0x0217f824
-func_ov031_0217f8d0 kind:function(arm,size=0xc) addr:0x0217f830
-func_ov031_0217f8dc kind:function(arm,size=0xc) addr:0x0217f83c
-func_ov031_0217f8e8 kind:function(arm,size=0x38) addr:0x0217f848
-func_ov031_0217f920 kind:function(arm,size=0xc) addr:0x0217f880
-func_ov031_0217f92c kind:function(arm,size=0x48) addr:0x0217f88c
-func_ov031_0217f974 kind:function(arm,size=0x98) addr:0x0217f8d4
-func_ov031_0217fa0c kind:function(arm,size=0x98) addr:0x0217f96c
-func_ov031_0217faa4 kind:function(arm,size=0x60) addr:0x0217fa04
-func_ov031_0217fb04 kind:function(arm,size=0xc) addr:0x0217fa64
-func_ov031_0217fb10 kind:function(arm,size=0xf8) addr:0x0217fa70
-func_ov031_0217fc08 kind:function(arm,size=0x14) addr:0x0217fb68
-func_ov031_0217fc1c kind:function(arm,size=0x28) addr:0x0217fb7c
-func_ov031_0217fc44 kind:function(arm,size=0x38) addr:0x0217fba4
-func_ov031_0217fc7c kind:function(arm,size=0x64) addr:0x0217fbdc
-func_ov031_0217fce0 kind:function(arm,size=0x18) addr:0x0217fc40
-func_ov031_0217fcf8 kind:function(arm,size=0x5c) addr:0x0217fc58
-func_ov031_0217fd54 kind:function(arm,size=0x30) addr:0x0217fcb4
-func_ov031_0217fd84 kind:function(arm,size=0x7c) addr:0x0217fce4
-func_ov031_0217fe00 kind:function(arm,size=0x2c) addr:0x0217fd60
-func_ov031_0217fe2c kind:function(arm,size=0x2c) addr:0x0217fd8c
-func_ov031_0217fe58 kind:function(arm,size=0x2c) addr:0x0217fdb8
-func_ov031_0217fe84 kind:function(arm,size=0x2c) addr:0x0217fde4
-func_ov031_0217feb0 kind:function(arm,size=0x2c) addr:0x0217fe10
-func_ov031_0217fedc kind:function(arm,size=0x2c) addr:0x0217fe3c
-func_ov031_0217ff08 kind:function(arm,size=0x54) addr:0x0217fe68
-func_ov031_0217ff5c kind:function(arm,size=0x40) addr:0x0217febc
-func_ov031_0217ff9c kind:function(arm,size=0x7c) addr:0x0217fefc
-func_ov031_02180018 kind:function(arm,size=0xc) addr:0x0217ff78
-func_ov031_02180024 kind:function(arm,size=0xc) addr:0x0217ff84
-func_ov031_02180030 kind:function(arm,size=0x40) addr:0x0217ff90
-func_ov031_02180070 kind:function(arm,size=0x54) addr:0x0217ffd0
-func_ov031_021800c4 kind:function(arm,size=0x54) addr:0x02180024
-func_ov031_02180118 kind:function(arm,size=0x54) addr:0x02180078
-func_ov031_0218016c kind:function(arm,size=0x40) addr:0x021800cc
-func_ov031_021801ac kind:function(arm,size=0x34) addr:0x0218010c
-func_ov031_021801e0 kind:function(arm,size=0x34) addr:0x02180140
-func_ov031_02180214 kind:function(arm,size=0x34) addr:0x02180174
-func_ov031_02180248 kind:function(arm,size=0x18) addr:0x021801a8
-func_ov031_02180260 kind:function(arm,size=0x18) addr:0x021801c0
-func_ov031_02180278 kind:function(arm,size=0x18) addr:0x021801d8
-func_ov031_02180290 kind:function(arm,size=0x8) addr:0x021801f0
-func_ov031_02180298 kind:function(arm,size=0x8) addr:0x021801f8
-func_ov031_021802a0 kind:function(arm,size=0x8) addr:0x02180200
-func_ov031_021802a8 kind:function(arm,size=0x3c) addr:0x02180208
-func_ov031_021802e4 kind:function(arm,size=0x8) addr:0x02180244
-func_ov031_021802ec kind:function(arm,size=0x3c) addr:0x0218024c
-func_ov031_02180328 kind:function(arm,size=0x8) addr:0x02180288
-func_ov031_02180330 kind:function(arm,size=0x3c) addr:0x02180290
-func_ov031_0218036c kind:function(arm,size=0x8) addr:0x021802cc
-func_ov031_02180374 kind:function(arm,size=0x50) addr:0x021802d4
-func_ov031_021803c4 kind:function(arm,size=0x3c) addr:0x02180324
-func_ov031_02180400 kind:function(arm,size=0x8) addr:0x02180360
-func_ov031_02180408 kind:function(arm,size=0x8) addr:0x02180368
-func_ov031_02180410 kind:function(arm,size=0x8) addr:0x02180370
-func_ov031_02180418 kind:function(arm,size=0x20) addr:0x02180378
-func_ov031_02180438 kind:function(arm,size=0x1c) addr:0x02180398
-func_ov031_02180454 kind:function(arm,size=0x14) addr:0x021803b4
-func_ov031_02180468 kind:function(arm,size=0x1c) addr:0x021803c8
-func_ov031_02180484 kind:function(arm,size=0x14) addr:0x021803e4
-func_ov031_02180498 kind:function(arm,size=0x1c) addr:0x021803f8
-func_ov031_021804b4 kind:function(arm,size=0x14) addr:0x02180414
-func_ov031_021804c8 kind:function(arm,size=0x1c) addr:0x02180428
-func_ov031_021804e4 kind:function(arm,size=0x14) addr:0x02180444
-func_ov031_021804f8 kind:function(arm,size=0x1c) addr:0x02180458
-func_ov031_02180514 kind:function(arm,size=0x14) addr:0x02180474
-func_ov031_02180528 kind:function(arm,size=0x1c) addr:0x02180488
-func_ov031_02180544 kind:function(arm,size=0x14) addr:0x021804a4
-func_ov031_02180558 kind:function(arm,size=0x1c) addr:0x021804b8
-func_ov031_02180574 kind:function(arm,size=0x14) addr:0x021804d4
-func_ov031_02180588 kind:function(arm,size=0x1c) addr:0x021804e8
-func_ov031_021805a4 kind:function(arm,size=0x14) addr:0x02180504
-func_ov031_021805b8 kind:function(arm,size=0x1c) addr:0x02180518
-func_ov031_021805d4 kind:function(arm,size=0x14) addr:0x02180534
-func_ov031_021805e8 kind:function(arm,size=0x1c) addr:0x02180548
-func_ov031_02180604 kind:function(arm,size=0x14) addr:0x02180564
-func_ov031_02180618 kind:function(arm,size=0x1c) addr:0x02180578
-func_ov031_02180634 kind:function(arm,size=0x14) addr:0x02180594
-func_ov031_02180648 kind:function(arm,size=0x1c) addr:0x021805a8
-func_ov031_02180664 kind:function(arm,size=0x14) addr:0x021805c4
-func_ov031_02180678 kind:function(arm,size=0x1c) addr:0x021805d8
-func_ov031_02180694 kind:function(arm,size=0x14) addr:0x021805f4
-func_ov031_021806a8 kind:function(arm,size=0x1c) addr:0x02180608
-func_ov031_021806c4 kind:function(arm,size=0x14) addr:0x02180624
-func_ov031_021806d8 kind:function(arm,size=0x1c) addr:0x02180638
-func_ov031_021806f4 kind:function(arm,size=0x14) addr:0x02180654
+_ZN15ActorShopItemDM6CreateEv kind:function(arm,size=0x40) addr:0x0217db3c
+_ZN20ActorShopItemSoldOut6CreateEv kind:function(arm,size=0x40) addr:0x0217db7c
+_ZN27ActorShopItemHeartContainer6CreateEv kind:function(arm,size=0x40) addr:0x0217dbbc
+_ZN19ActorShopItemArrows6CreateEv kind:function(arm,size=0x40) addr:0x0217dbfc
+_ZN18ActorShopItemBombs6CreateEv kind:function(arm,size=0x40) addr:0x0217dc3c
+_ZN21ActorShopItemBombchus6CreateEv kind:function(arm,size=0x40) addr:0x0217dc7c
+_ZN19ActorShopItemQuiver6CreateEv kind:function(arm,size=0x40) addr:0x0217dcbc
+_ZN20ActorShopItemBombBag6CreateEv kind:function(arm,size=0x40) addr:0x0217dcfc
+_ZN23ActorShopItemBombchuBag6CreateEv kind:function(arm,size=0x40) addr:0x0217dd3c
+_ZN21ActorShopItemTreasure6CreateEv kind:function(arm,size=0x30) addr:0x0217dd7c
+_ZN21ActorShopItemShipPart6CreateEv kind:function(arm,size=0x30) addr:0x0217ddac
+_ZN16ActorShopItemGem6CreateEv kind:function(arm,size=0x40) addr:0x0217dddc
+_ZN19ActorShopItemShield6CreateEv kind:function(arm,size=0x40) addr:0x0217de1c
+_ZN19ActorShopItemPotion6CreateEv kind:function(arm,size=0x40) addr:0x0217de5c
+_ZN15ActorShopItemBK6CreateEv kind:function(arm,size=0x40) addr:0x0217de9c
+_ZN15ActorShopItemCC6CreateEv kind:function(arm,size=0x40) addr:0x0217dedc
+_ZN15ActorShopItemBY6CreateEv kind:function(arm,size=0x30) addr:0x0217df1c
+_Z19func_ov031_0217dfecP9FileEntryS0_PKc kind:function(arm,size=0x54) addr:0x0217df4c
+_Z19func_ov031_0217e040v kind:function(arm,size=0x274) addr:0x0217dfa0
+_Z19func_ov031_0217e2b4v kind:function(arm,size=0x124) addr:0x0217e214
+_ZN17ActorShopItemBaseC1Ev kind:function(arm,size=0x34) addr:0x0217e338
+_ZN13ActorShopItemC2Ev kind:function(arm,size=0x54) addr:0x0217e36c
+_ZN21ActorShopItemShipPartC1Ev kind:function(arm,size=0x94) addr:0x0217e3c0
+_ZN21ActorShopItemTreasureC1Ev kind:function(arm,size=0x94) addr:0x0217e454
+_ZN16ActorShopItemUnkC2Ev kind:function(arm,size=0x30) addr:0x0217e4e8
+_ZN15ActorShopItemBYC1Ev kind:function(arm,size=0x20) addr:0x0217e518
+_ZN17ActorShopItemBaseD1Ev kind:function(arm,size=0x14) addr:0x0217e538
+_ZN17ActorShopItemBaseD0Ev kind:function(arm,size=0x1c) addr:0x0217e54c
+_ZN17ActorShopItemBaseD2Ev kind:function(arm,size=0x14) addr:0x0217e568
+_ZN13ActorShopItemD1Ev kind:function(arm,size=0x48) addr:0x0217e57c
+_ZN13ActorShopItemD0Ev kind:function(arm,size=0x50) addr:0x0217e5c4
+_ZN13ActorShopItemD2Ev kind:function(arm,size=0x48) addr:0x0217e614
+_ZN20ActorShopItemSoldOutD1Ev kind:function(arm,size=0x1c) addr:0x0217e65c
+_ZN20ActorShopItemSoldOutD0Ev kind:function(arm,size=0x24) addr:0x0217e678
+_ZN21ActorShopItemShipPartD1Ev kind:function(arm,size=0xd0) addr:0x0217e69c
+_ZN21ActorShopItemShipPartD0Ev kind:function(arm,size=0xd8) addr:0x0217e76c
+_ZN21ActorShopItemTreasureD1Ev kind:function(arm,size=0x48) addr:0x0217e844
+_ZN21ActorShopItemTreasureD0Ev kind:function(arm,size=0x50) addr:0x0217e88c
+_ZN13ActorShopItem8vfunc_d4Ev kind:function(arm,size=0xac) addr:0x0217e8dc
+_ZN15ActorShopItemDM8vfunc_d4Ev kind:function(arm,size=0x18) addr:0x0217e988
+_ZN20ActorShopItemSoldOut8vfunc_d4Ev kind:function(arm,size=0x1c) addr:0x0217e9a0
+_ZN21ActorShopItemShipPart8vfunc_d4Ev kind:function(arm,size=0xd8) addr:0x0217e9bc
+_ZN21ActorShopItemTreasure8vfunc_d4Ev kind:function(arm,size=0x60) addr:0x0217ea94
+_ZN17ActorShopItemBase4InitEv kind:function(arm,size=0xc) addr:0x0217eaf4
+_ZN13ActorShopItem4InitEv kind:function(arm,size=0x20) addr:0x0217eb00
+_ZN15ActorShopItemDM4InitEv kind:function(arm,size=0x14) addr:0x0217eb20
+_ZN20ActorShopItemSoldOut4InitEv kind:function(arm,size=0x14) addr:0x0217eb34
+_ZN27ActorShopItemHeartContainer4InitEv kind:function(arm,size=0x1c) addr:0x0217eb48
+_ZN19ActorShopItemArrows4InitEv kind:function(arm,size=0x14) addr:0x0217eb64
+_ZN19ActorShopItemQuiver4InitEv kind:function(arm,size=0x1c) addr:0x0217eb78
+_ZN18ActorShopItemBombs4InitEv kind:function(arm,size=0x14) addr:0x0217eb94
+_ZN20ActorShopItemBombBag4InitEv kind:function(arm,size=0x1c) addr:0x0217eba8
+_ZN21ActorShopItemBombchus4InitEv kind:function(arm,size=0x14) addr:0x0217ebc4
+_ZN23ActorShopItemBombchuBag4InitEv kind:function(arm,size=0x1c) addr:0x0217ebd8
+_ZN21ActorShopItemShipPart4InitEv kind:function(arm,size=0x24) addr:0x0217ebf4
+_ZN21ActorShopItemTreasure4InitEv kind:function(arm,size=0x30) addr:0x0217ec18
+_ZN16ActorShopItemGem4InitEv kind:function(arm,size=0x64) addr:0x0217ec48
+_ZN19ActorShopItemShield4InitEv kind:function(arm,size=0x1c) addr:0x0217ecac
+_ZN19ActorShopItemPotion4InitEv kind:function(arm,size=0x60) addr:0x0217ecc8
+_ZN16ActorShopItemUnk4InitEv kind:function(arm,size=0x14) addr:0x0217ed28
+_ZN17ActorShopItemBase8vfunc_14Ej kind:function(arm,size=0x98) addr:0x0217ed3c
+_ZN13ActorShopItem8vfunc_14Ej kind:function(arm,size=0x154) addr:0x0217edd4
+_ZN21ActorShopItemShipPart8vfunc_14Ej kind:function(arm,size=0x68) addr:0x0217ef28
+_ZN16ActorShopItemUnk8vfunc_14Ej kind:function(arm,size=0x60) addr:0x0217ef90
+_ZN17ActorShopItemBase8vfunc_18Ej kind:function(arm,size=0x14) addr:0x0217eff0
+_ZN13ActorShopItem8vfunc_c8Ev kind:function(arm,size=0xc) addr:0x0217f004
+_ZN13ActorShopItem8vfunc_ccEv kind:function(arm,size=0x4) addr:0x0217f010
+_ZN13ActorShopItem19func_ov031_0217f0b4Ev kind:function(arm,size=0x38) addr:0x0217f014
+_ZN13ActorShopItem8GetPitchEv kind:function(arm,size=0x20) addr:0x0217f04c
+_ZN13ActorShopItem6GetYawEv kind:function(arm,size=0x8) addr:0x0217f06c
+_Z19func_ov031_0217f114Pv kind:function(arm,size=0xc) addr:0x0217f074
+_ZN13ActorShopItem19func_ov031_0217f120Ev kind:function(arm,size=0x334) addr:0x0217f080
+_ZN13ActorShopItem8vfunc_20Eb kind:function(arm,size=0x50) addr:0x0217f3b4
+_ZN21ActorShopItemShipPart8vfunc_20Eb kind:function(arm,size=0x194) addr:0x0217f404
+_ZN15ActorShopItemDM8vfunc_20Eb kind:function(arm,size=0x4) addr:0x0217f598
+_ZN16ActorShopItemUnk8vfunc_20Eb kind:function(arm,size=0x4) addr:0x0217f59c
+_ZN15ActorShopItemBK8vfunc_1cEPt kind:function(arm,size=0xb8) addr:0x0217f5a0
+_ZN15ActorShopItemCC8vfunc_1cEPt kind:function(arm,size=0xb8) addr:0x0217f658
+_ZN15ActorShopItemBY8vfunc_1cEPt kind:function(arm,size=0xb8) addr:0x0217f710
+_ZN13ActorShopItem19GetSoldOutMessageIdEv kind:function(arm,size=0x24) addr:0x0217f7c8
+_ZN15ActorShopItemDM12GetMessageIdEv kind:function(arm,size=0x8) addr:0x0217f7ec
+_ZN20ActorShopItemSoldOut12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f7f4
+_ZN27ActorShopItemHeartContainer12GetMessageIdEv kind:function(arm,size=0x24) addr:0x0217f800
+_ZN19ActorShopItemArrows12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f824
+_ZN19ActorShopItemQuiver12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f830
+_ZN18ActorShopItemBombs12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f83c
+_ZN20ActorShopItemBombBag12GetMessageIdEv kind:function(arm,size=0x38) addr:0x0217f848
+_ZN21ActorShopItemBombchus12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217f880
+_ZN23ActorShopItemBombchuBag12GetMessageIdEv kind:function(arm,size=0x48) addr:0x0217f88c
+_ZN21ActorShopItemShipPart12GetMessageIdEv kind:function(arm,size=0x98) addr:0x0217f8d4
+_ZN21ActorShopItemTreasure12GetMessageIdEv kind:function(arm,size=0x98) addr:0x0217f96c
+_ZN16ActorShopItemGem12GetMessageIdEv kind:function(arm,size=0x60) addr:0x0217fa04
+_ZN19ActorShopItemShield12GetMessageIdEv kind:function(arm,size=0xc) addr:0x0217fa64
+_ZN19ActorShopItemPotion12GetMessageIdEv kind:function(arm,size=0xf8) addr:0x0217fa70
+_ZN13ActorShopItem8GetPriceEv kind:function(arm,size=0x14) addr:0x0217fb68
+_ZN27ActorShopItemHeartContainer8GetPriceEv kind:function(arm,size=0x28) addr:0x0217fb7c
+_ZN19ActorShopItemPotion8GetPriceEv kind:function(arm,size=0x38) addr:0x0217fba4
+_ZN21ActorShopItemShipPart8GetPriceEv kind:function(arm,size=0x64) addr:0x0217fbdc
+_ZN21ActorShopItemTreasure8GetPriceEv kind:function(arm,size=0x18) addr:0x0217fc40
+_ZN13ActorShopItem8vfunc_c0Ev kind:function(arm,size=0x5c) addr:0x0217fc58
+_ZN13ActorShopItem8vfunc_c4Ev kind:function(arm,size=0x30) addr:0x0217fcb4
+_ZN27ActorShopItemHeartContainer8vfunc_c4Ev kind:function(arm,size=0x7c) addr:0x0217fce4
+_ZN19ActorShopItemArrows8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fd60
+_ZN19ActorShopItemQuiver8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fd8c
+_ZN18ActorShopItemBombs8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fdb8
+_ZN20ActorShopItemBombBag8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fde4
+_ZN21ActorShopItemBombchus8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fe10
+_ZN23ActorShopItemBombchuBag8vfunc_c4Ev kind:function(arm,size=0x2c) addr:0x0217fe3c
+_ZN21ActorShopItemShipPart8vfunc_c4Ev kind:function(arm,size=0x54) addr:0x0217fe68
+_ZN21ActorShopItemTreasure8vfunc_c4Ev kind:function(arm,size=0x40) addr:0x0217febc
+_ZN16ActorShopItemGem8vfunc_c4Ev kind:function(arm,size=0x7c) addr:0x0217fefc
+_ZN19ActorShopItemShield8vfunc_c4Ev kind:function(arm,size=0xc) addr:0x0217ff78
+_ZN19ActorShopItemPotion8vfunc_c4Ev kind:function(arm,size=0xc) addr:0x0217ff84
+_ZN17ActorShopItemBase8vfunc_b4Ev kind:function(arm,size=0x40) addr:0x0217ff90
+_ZN15ActorShopItemBK8vfunc_b4Ev kind:function(arm,size=0x54) addr:0x0217ffd0
+_ZN15ActorShopItemCC8vfunc_b4Ev kind:function(arm,size=0x54) addr:0x02180024
+_ZN15ActorShopItemBY8vfunc_b4Ev kind:function(arm,size=0x54) addr:0x02180078
+_ZN17ActorShopItemBase8vfunc_b8Ev kind:function(arm,size=0x40) addr:0x021800cc
+_ZN15ActorShopItemBK8vfunc_b8Ev kind:function(arm,size=0x34) addr:0x0218010c
+_ZN15ActorShopItemCC8vfunc_b8Ev kind:function(arm,size=0x34) addr:0x02180140
+_ZN15ActorShopItemBY8vfunc_b8Ev kind:function(arm,size=0x34) addr:0x02180174
+_ZN21ActorShopItemShipPart19func_ov031_02180248Ev kind:function(arm,size=0x18) addr:0x021801a8
+_ZN21ActorShopItemShipPart19func_ov031_02180260Ev kind:function(arm,size=0x18) addr:0x021801c0
+_ZN21ActorShopItemTreasure19func_ov031_02180278Ev kind:function(arm,size=0x18) addr:0x021801d8
+_ZN15ActorShopItemDM8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x021801f0
+_ZN20ActorShopItemSoldOut8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x021801f8
+_ZN27ActorShopItemHeartContainer8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180200
+_ZN19ActorShopItemArrows8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x02180208
+_ZN19ActorShopItemQuiver8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180244
+_ZN18ActorShopItemBombs8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x0218024c
+_ZN20ActorShopItemBombBag8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180288
+_ZN21ActorShopItemBombchus8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x02180290
+_ZN23ActorShopItemBombchuBag8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x021802cc
+_ZN21ActorShopItemShipPart8vfunc_d0Ev kind:function(arm,size=0x50) addr:0x021802d4
+_ZN21ActorShopItemTreasure8vfunc_d0Ev kind:function(arm,size=0x3c) addr:0x02180324
+_ZN16ActorShopItemGem8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180360
+_ZN19ActorShopItemShield8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180368
+_ZN19ActorShopItemPotion8vfunc_d0Ev kind:function(arm,size=0x8) addr:0x02180370
+_ZN16ActorShopItemUnk19func_ov031_02180418Ev kind:function(arm,size=0x20) addr:0x02180378
+_ZN15ActorShopItemBYD0Ev kind:function(arm,size=0x1c) addr:0x02180398
+_ZN15ActorShopItemBYD1Ev kind:function(arm,size=0x14) addr:0x021803b4
+_ZN15ActorShopItemCCD0Ev kind:function(arm,size=0x1c) addr:0x021803c8
+_ZN15ActorShopItemCCD1Ev kind:function(arm,size=0x14) addr:0x021803e4
+_ZN15ActorShopItemBKD0Ev kind:function(arm,size=0x1c) addr:0x021803f8
+_ZN15ActorShopItemBKD1Ev kind:function(arm,size=0x14) addr:0x02180414
+_ZN16ActorShopItemUnkD0Ev kind:function(arm,size=0x1c) addr:0x02180428
+_ZN16ActorShopItemUnkD1Ev kind:function(arm,size=0x14) addr:0x02180444
+_ZN19ActorShopItemPotionD0Ev kind:function(arm,size=0x1c) addr:0x02180458
+_ZN19ActorShopItemPotionD1Ev kind:function(arm,size=0x14) addr:0x02180474
+_ZN19ActorShopItemShieldD0Ev kind:function(arm,size=0x1c) addr:0x02180488
+_ZN19ActorShopItemShieldD1Ev kind:function(arm,size=0x14) addr:0x021804a4
+_ZN16ActorShopItemGemD0Ev kind:function(arm,size=0x1c) addr:0x021804b8
+_ZN16ActorShopItemGemD1Ev kind:function(arm,size=0x14) addr:0x021804d4
+_ZN23ActorShopItemBombchuBagD0Ev kind:function(arm,size=0x1c) addr:0x021804e8
+_ZN23ActorShopItemBombchuBagD1Ev kind:function(arm,size=0x14) addr:0x02180504
+_ZN21ActorShopItemBombchusD0Ev kind:function(arm,size=0x1c) addr:0x02180518
+_ZN21ActorShopItemBombchusD1Ev kind:function(arm,size=0x14) addr:0x02180534
+_ZN20ActorShopItemBombBagD0Ev kind:function(arm,size=0x1c) addr:0x02180548
+_ZN20ActorShopItemBombBagD1Ev kind:function(arm,size=0x14) addr:0x02180564
+_ZN18ActorShopItemBombsD0Ev kind:function(arm,size=0x1c) addr:0x02180578
+_ZN18ActorShopItemBombsD1Ev kind:function(arm,size=0x14) addr:0x02180594
+_ZN19ActorShopItemQuiverD0Ev kind:function(arm,size=0x1c) addr:0x021805a8
+_ZN19ActorShopItemQuiverD1Ev kind:function(arm,size=0x14) addr:0x021805c4
+_ZN19ActorShopItemArrowsD0Ev kind:function(arm,size=0x1c) addr:0x021805d8
+_ZN19ActorShopItemArrowsD1Ev kind:function(arm,size=0x14) addr:0x021805f4
+_ZN27ActorShopItemHeartContainerD0Ev kind:function(arm,size=0x1c) addr:0x02180608
+_ZN27ActorShopItemHeartContainerD1Ev kind:function(arm,size=0x14) addr:0x02180624
+_ZN15ActorShopItemDMD0Ev kind:function(arm,size=0x1c) addr:0x02180638
+_ZN15ActorShopItemDMD1Ev kind:function(arm,size=0x14) addr:0x02180654
func_ov031_02180708 kind:function(arm,size=0x44) addr:0x02180668
func_ov031_0218074c kind:function(arm,size=0x44) addr:0x021806ac
func_ov031_02180790 kind:function(arm,size=0x44) addr:0x021806f0
@@ -290,14 +290,10 @@ func_ov031_0218186c kind:function(arm,size=0x1c) addr:0x021817cc
func_ov031_02181888 kind:function(arm,size=0x14) addr:0x021817e8
func_ov031_0218189c kind:function(arm,size=0x4) addr:0x021817fc
data_ov031_021818a0 kind:data(any) addr:0x02181800
-data_ov031_021818e8 kind:data(any) addr:0x02181848
-data_ov031_021818f8 kind:data(any) addr:0x02181858
-data_ov031_021819e8 kind:data(any) addr:0x02181948
-data_ov031_02181a08 kind:data(any) addr:0x02181968
-data_ov031_02181a18 kind:data(any) addr:0x02181978
-data_ov031_02181a28 kind:data(any) addr:0x02181988
-data_ov031_02181a38 kind:data(any) addr:0x02181998
-data_ov031_02181a48 kind:data(any) addr:0x021819a8
+sShopItemBaseNames kind:data(any) addr:0x02181848
+unk$1534 kind:data(any) addr:0x021819b8 local
+unk$1554 kind:data(any) addr:0x021819cc local
+@2460 kind:data(any) addr:0x021819e0 local
data_ov031_02181a88 kind:data(any) addr:0x021819e8
data_ov031_02181a94 kind:data(any) addr:0x021819f4
data_ov031_02181abc kind:data(any) addr:0x02181a1c
@@ -306,11 +302,11 @@ data_ov031_02181ad4 kind:data(any) addr:0x02181a34
data_ov031_02181b10 kind:data(any) addr:0x02181a70
data_ov031_02181b24 kind:data(any) addr:0x02181a84
data_ov031_02181b30 kind:data(any) addr:0x02181a90
-__sinit_ov031_02181b6c kind:function(arm,size=0x3ec) addr:0x02181acc
+__sinit_ActorShopItem.cpp kind:function(arm,size=0x3ec) addr:0x02181acc local
__sinit_ov031_02181f58 kind:function(arm,size=0xa8) addr:0x02181eb8
__sinit_ov031_02182000 kind:function(arm,size=0x40) addr:0x02181f60
__sinit_ov031_02182040 kind:function(arm,size=0x40) addr:0x02181fa0
-.p__sinit_ov031_02181b6c kind:data(word) addr:0x02181fe0
+.p__sinit_ActorShopItem.cpp kind:data(word) addr:0x02181fe0 local
.p__sinit_ov031_02181f58 kind:data(word) addr:0x02181fe4
.p__sinit_ov031_02182000 kind:data(word) addr:0x02181fe8
.p__sinit_ov031_02182040 kind:data(word) addr:0x02181fec
@@ -332,84 +328,84 @@ data_ov031_0218213c kind:data(any) addr:0x0218209c
data_ov031_02182140 kind:data(any) addr:0x021820a0
data_ov031_02182144 kind:data(any) addr:0x021820a4
data_ov031_02182170 kind:data(any) addr:0x021820d0
-data_ov031_02182290 kind:data(any) addr:0x021821f0
-data_ov031_02182294 kind:data(any) addr:0x021821f4
-data_ov031_02182298 kind:data(any) addr:0x021821f8
-data_ov031_0218229c kind:data(any) addr:0x021821fc
-data_ov031_021822a0 kind:data(any) addr:0x02182200
-data_ov031_021822a4 kind:data(any) addr:0x02182204
-data_ov031_021822a8 kind:data(any) addr:0x02182208
-data_ov031_021822ac kind:data(any) addr:0x0218220c
-data_ov031_021822b0 kind:data(any) addr:0x02182210
-data_ov031_021822d0 kind:data(any) addr:0x02182230
-data_ov031_02182318 kind:data(any) addr:0x02182278
-data_ov031_0218236c kind:data(any) addr:0x021822cc
-data_ov031_021823c8 kind:data(any) addr:0x02182328
-data_ov031_0218248c kind:data(any) addr:0x021823ec
-data_ov031_02182550 kind:data(any) addr:0x021824b0
-data_ov031_02182614 kind:data(any) addr:0x02182574
-data_ov031_021826d8 kind:data(any) addr:0x02182638
-data_ov031_021827c4 kind:data(any) addr:0x02182724
-data_ov031_021828b0 kind:data(any) addr:0x02182810
-data_ov031_0218299c kind:data(any) addr:0x021828fc
-data_ov031_02182a88 kind:data(any) addr:0x021829e8
-data_ov031_02182b74 kind:data(any) addr:0x02182ad4
-data_ov031_02182c60 kind:data(any) addr:0x02182bc0
-data_ov031_02182d4c kind:data(any) addr:0x02182cac
-data_ov031_02182e38 kind:data(any) addr:0x02182d98
-data_ov031_02182f24 kind:data(any) addr:0x02182e84
-data_ov031_02183010 kind:data(any) addr:0x02182f70
-data_ov031_021830fc kind:data(any) addr:0x0218305c
-data_ov031_021831e8 kind:data(any) addr:0x02183148
-data_ov031_021832d4 kind:data(any) addr:0x02183234
-data_ov031_021833c0 kind:data(any) addr:0x02183320
-data_ov031_021834ac kind:data(any) addr:0x0218340c
-data_ov031_02183568 kind:data(any) addr:0x021834c8
-data_ov031_02183584 kind:data(any) addr:0x021834e4
-data_ov031_021835a0 kind:data(any) addr:0x02183500
-data_ov031_021835bc kind:data(any) addr:0x0218351c
-data_ov031_021835dc kind:data(any) addr:0x0218353c
-data_ov031_021835f8 kind:data(any) addr:0x02183558
-data_ov031_02183618 kind:data(any) addr:0x02183578
-data_ov031_02183634 kind:data(any) addr:0x02183594
-data_ov031_02183654 kind:data(any) addr:0x021835b4
-data_ov031_02183670 kind:data(any) addr:0x021835d0
-data_ov031_0218368c kind:data(any) addr:0x021835ec
-data_ov031_021836a8 kind:data(any) addr:0x02183608
-data_ov031_021836c4 kind:data(any) addr:0x02183624
-data_ov031_021836e0 kind:data(any) addr:0x02183640
-data_ov031_021836fc kind:data(any) addr:0x0218365c
-data_ov031_02183714 kind:data(any) addr:0x02183674
-data_ov031_02183730 kind:data(any) addr:0x02183690
-data_ov031_02183750 kind:data(any) addr:0x021836b0
-data_ov031_02183770 kind:data(any) addr:0x021836d0
-data_ov031_0218378c kind:data(any) addr:0x021836ec
-data_ov031_021837ac kind:data(any) addr:0x0218370c
-data_ov031_021837c8 kind:data(any) addr:0x02183728
-data_ov031_021837e4 kind:data(any) addr:0x02183744
-data_ov031_02183800 kind:data(any) addr:0x02183760
-data_ov031_0218381c kind:data(any) addr:0x0218377c
-data_ov031_0218383c kind:data(any) addr:0x0218379c
-data_ov031_02183858 kind:data(any) addr:0x021837b8
-data_ov031_02183878 kind:data(any) addr:0x021837d8
-data_ov031_02183894 kind:data(any) addr:0x021837f4
-data_ov031_021838b4 kind:data(any) addr:0x02183814
-data_ov031_021838d0 kind:data(any) addr:0x02183830
-data_ov031_021838ec kind:data(any) addr:0x0218384c
-data_ov031_02183908 kind:data(any) addr:0x02183868
-data_ov031_02183924 kind:data(any) addr:0x02183884
-data_ov031_02183940 kind:data(any) addr:0x021838a0
-data_ov031_0218395c kind:data(any) addr:0x021838bc
-data_ov031_02183974 kind:data(any) addr:0x021838d4
-data_ov031_02183990 kind:data(any) addr:0x021838f0
-data_ov031_021839b0 kind:data(any) addr:0x02183910
-data_ov031_021839d0 kind:data(any) addr:0x02183930
-data_ov031_021839ec kind:data(any) addr:0x0218394c
-data_ov031_02183a0c kind:data(any) addr:0x0218396c
-data_ov031_02183a28 kind:data(any) addr:0x02183988
-data_ov031_02183a44 kind:data(any) addr:0x021839a4
-data_ov031_02183a60 kind:data(any) addr:0x021839c0
-data_ov031_02183a7c kind:data(any) addr:0x021839dc
+@1183 kind:data(any) addr:0x021821f0 local
+@1184 kind:data(any) addr:0x021821f4 local
+@1185 kind:data(any) addr:0x021821f8 local
+@1186 kind:data(any) addr:0x021821fc local
+@1187 kind:data(any) addr:0x02182200 local
+@1188 kind:data(any) addr:0x02182204 local
+@1189 kind:data(any) addr:0x02182208 local
+@1190 kind:data(any) addr:0x0218220c local
+sShipTypes kind:data(any) addr:0x02182210 local
+sShopItemPrices kind:data(any) addr:0x02182230
+sShopItemModelPaths kind:data(any) addr:0x02182278
+sShopItemTexturePaths kind:data(any) addr:0x021822cc
+_ZTV15ActorShopItemBY kind:data(any) addr:0x02182320
+_ZTV15ActorShopItemCC kind:data(any) addr:0x021823e4
+_ZTV15ActorShopItemBK kind:data(any) addr:0x021824a8
+_ZTV16ActorShopItemUnk kind:data(any) addr:0x0218256c
+_ZTV19ActorShopItemPotion kind:data(any) addr:0x02182630
+_ZTV19ActorShopItemShield kind:data(any) addr:0x0218271c
+_ZTV16ActorShopItemGem kind:data(any) addr:0x02182808
+_ZTV21ActorShopItemTreasure kind:data(any) addr:0x021828f4
+_ZTV21ActorShopItemShipPart kind:data(any) addr:0x021829e0
+_ZTV23ActorShopItemBombchuBag kind:data(any) addr:0x02182acc
+_ZTV21ActorShopItemBombchus kind:data(any) addr:0x02182bb8
+_ZTV20ActorShopItemBombBag kind:data(any) addr:0x02182ca4
+_ZTV18ActorShopItemBombs kind:data(any) addr:0x02182d90
+_ZTV19ActorShopItemQuiver kind:data(any) addr:0x02182e7c
+_ZTV19ActorShopItemArrows kind:data(any) addr:0x02182f68
+_ZTV27ActorShopItemHeartContainer kind:data(any) addr:0x02183054
+_ZTV20ActorShopItemSoldOut kind:data(any) addr:0x02183140
+_ZTV15ActorShopItemDM kind:data(any) addr:0x0218322c
+_ZTV13ActorShopItem kind:data(any) addr:0x02183318
+_ZTV17ActorShopItemBase kind:data(any) addr:0x02183404
+@1266 kind:data(any) addr:0x021834c8 local
+@1267 kind:data(any) addr:0x021834e4 local
+@1268 kind:data(any) addr:0x02183500 local
+@1269 kind:data(any) addr:0x0218351c local
+@1270 kind:data(any) addr:0x0218353c local
+@1271 kind:data(any) addr:0x02183558 local
+@1272 kind:data(any) addr:0x02183578 local
+@1273 kind:data(any) addr:0x02183594 local
+@1274 kind:data(any) addr:0x021835b4 local
+@1275 kind:data(any) addr:0x021835d0 local
+@1276 kind:data(any) addr:0x021835ec local
+@1277 kind:data(any) addr:0x02183608 local
+@1278 kind:data(any) addr:0x02183624 local
+@1279 kind:data(any) addr:0x02183640 local
+@1280 kind:data(any) addr:0x0218365c local
+@1281 kind:data(any) addr:0x02183674 local
+@1282 kind:data(any) addr:0x02183690 local
+@1283 kind:data(any) addr:0x021836b0 local
+@1284 kind:data(any) addr:0x021836d0 local
+@1285 kind:data(any) addr:0x021836ec local
+@1286 kind:data(any) addr:0x0218370c local
+@1287 kind:data(any) addr:0x02183728 local
+@1288 kind:data(any) addr:0x02183744 local
+@1289 kind:data(any) addr:0x02183760 local
+@1290 kind:data(any) addr:0x0218377c local
+@1291 kind:data(any) addr:0x0218379c local
+@1292 kind:data(any) addr:0x021837b8 local
+@1293 kind:data(any) addr:0x021837d8 local
+@1294 kind:data(any) addr:0x021837f4 local
+@1295 kind:data(any) addr:0x02183814 local
+@1296 kind:data(any) addr:0x02183830 local
+@1297 kind:data(any) addr:0x0218384c local
+@1298 kind:data(any) addr:0x02183868 local
+@1299 kind:data(any) addr:0x02183884 local
+@1300 kind:data(any) addr:0x021838a0 local
+@1301 kind:data(any) addr:0x021838bc local
+@1302 kind:data(any) addr:0x021838d4 local
+@1303 kind:data(any) addr:0x021838f0 local
+@1304 kind:data(any) addr:0x02183910 local
+@1305 kind:data(any) addr:0x02183930 local
+@1306 kind:data(any) addr:0x0218394c local
+@1307 kind:data(any) addr:0x0218396c local
+@1261 kind:data(any) addr:0x02183988 local
+@1262 kind:data(any) addr:0x021839a4 local
+@1263 kind:data(any) addr:0x021839c0 local
+@1264 kind:data(any) addr:0x021839dc local
data_ov031_02183a98 kind:data(any) addr:0x021839f8
data_ov031_02183a9c kind:data(any) addr:0x021839fc
data_ov031_02183aa0 kind:data(any) addr:0x02183a00
@@ -433,44 +429,49 @@ data_ov031_02183d6c kind:data(any) addr:0x02183ccc
data_ov031_02183d7c kind:data(any) addr:0x02183cdc
data_ov031_02183e80 kind:bss addr:0x02183de0
data_ov031_02183e84 kind:bss addr:0x02183de4
-data_ov031_02183e88 kind:bss addr:0x02183de8
-data_ov031_02183e94 kind:bss addr:0x02183df4
-data_ov031_02183ea8 kind:bss addr:0x02183e08
-data_ov031_02183eb4 kind:bss addr:0x02183e14
-data_ov031_02183ec8 kind:bss addr:0x02183e28
-data_ov031_02183ed4 kind:bss addr:0x02183e34
-data_ov031_02183ee8 kind:bss addr:0x02183e48
-data_ov031_02183ef4 kind:bss addr:0x02183e54
-data_ov031_02183f08 kind:bss addr:0x02183e68
-data_ov031_02183f14 kind:bss addr:0x02183e74
-data_ov031_02183f28 kind:bss addr:0x02183e88
-data_ov031_02183f34 kind:bss addr:0x02183e94
-data_ov031_02183f48 kind:bss addr:0x02183ea8
-data_ov031_02183f54 kind:bss addr:0x02183eb4
-data_ov031_02183f68 kind:bss addr:0x02183ec8
-data_ov031_02183f74 kind:bss addr:0x02183ed4
-data_ov031_02183f78 kind:bss addr:0x02183ed8 ambiguous
-data_ov031_02183f84 kind:bss addr:0x02183ee4 ambiguous
-data_ov031_02183f88 kind:bss addr:0x02183ee8
-data_ov031_02183f94 kind:bss addr:0x02183ef4
-data_ov031_02183fa8 kind:bss addr:0x02183f08
-data_ov031_02183fb4 kind:bss addr:0x02183f14
-data_ov031_02183fc8 kind:bss addr:0x02183f28
-data_ov031_02183fd4 kind:bss addr:0x02183f34
-data_ov031_02183fe8 kind:bss addr:0x02183f48
-data_ov031_02183ff4 kind:bss addr:0x02183f54
-data_ov031_02184008 kind:bss addr:0x02183f68
-data_ov031_02184014 kind:bss addr:0x02183f74
-data_ov031_02184028 kind:bss addr:0x02183f88
-data_ov031_02184034 kind:bss addr:0x02183f94
-data_ov031_02184048 kind:bss addr:0x02183fa8
-data_ov031_02184054 kind:bss addr:0x02183fb4
-data_ov031_02184068 kind:bss addr:0x02183fc8
-data_ov031_02184074 kind:bss addr:0x02183fd4
-data_ov031_02184088 kind:bss addr:0x02183fe8
-data_ov031_02184094 kind:bss addr:0x02183ff4
-data_ov031_021840a8 kind:bss addr:0x02184008
-data_ov031_021840f0 kind:bss addr:0x02184050
+@792 kind:bss addr:0x02183de8
+_ZN15ActorShopItemDM5gTypeE kind:bss addr:0x02183df4
+@794 kind:bss addr:0x02183e08
+_ZN20ActorShopItemSoldOut5gTypeE kind:bss addr:0x02183e14
+@796 kind:bss addr:0x02183e28
+_ZN27ActorShopItemHeartContainer5gTypeE kind:bss addr:0x02183e34
+@798 kind:bss addr:0x02183e48
+_ZN19ActorShopItemArrows5gTypeE kind:bss addr:0x02183e54
+@800 kind:bss addr:0x02183e68
+_ZN18ActorShopItemBombs5gTypeE kind:bss addr:0x02183e74
+@802 kind:bss addr:0x02183e88
+_ZN21ActorShopItemBombchus5gTypeE kind:bss addr:0x02183e94
+@804 kind:bss addr:0x02183ea8
+_ZN19ActorShopItemQuiver5gTypeE kind:bss addr:0x02183eb4
+@806 kind:bss addr:0x02183ec8
+_ZN20ActorShopItemBombBag5gTypeE kind:bss addr:0x02183ed4
+@808 kind:bss addr:0x02183ee8
+_ZN23ActorShopItemBombchuBag5gTypeE kind:bss addr:0x02183ef4
+@810 kind:bss addr:0x02183f08
+_ZN21ActorShopItemTreasure5gTypeE kind:bss addr:0x02183f14
+@812 kind:bss addr:0x02183f28
+_ZN21ActorShopItemShipPart5gTypeE kind:bss addr:0x02183f34
+@814 kind:bss addr:0x02183f48
+_ZN16ActorShopItemGem5gTypeE kind:bss addr:0x02183f54
+@816 kind:bss addr:0x02183f68
+_ZN19ActorShopItemShield5gTypeE kind:bss addr:0x02183f74
+@818 kind:bss addr:0x02183f88
+_ZN19ActorShopItemPotion5gTypeE kind:bss addr:0x02183f94
+@820 kind:bss addr:0x02183fa8
+_ZN15ActorShopItemBK5gTypeE kind:bss addr:0x02183fb4
+@822 kind:bss addr:0x02183fc8
+_ZN15ActorShopItemCC5gTypeE kind:bss addr:0x02183fd4
+@824 kind:bss addr:0x02183fe8
+_ZN15ActorShopItemBY5gTypeE kind:bss addr:0x02183ff4
+sShopItemModelFiles kind:bss addr:0x02184008 local
+sShopItemTextureFiles kind:bss addr:0x02184050 local
+sShopItemShipModelFile kind:bss addr:0x02184098 local
+sShopItemShip2ModelFile kind:bss addr:0x0218409c local
+sShopItemShipTextureFile kind:bss addr:0x021840a0 local
+sShopItemShip2TextureFile kind:bss addr:0x021840a4 local
+sSoldOutModel kind:bss addr:0x021840a8 local
+sShipModel kind:bss addr:0x021840ac local
+sShip2Model kind:bss addr:0x021840b0 local
data_ov031_02184154 kind:bss addr:0x021840b4
data_ov031_02184160 kind:bss addr:0x021840c0
data_ov031_02184174 kind:bss addr:0x021840d4
diff --git a/config/usa/arm9/overlays/ov040/relocs.txt b/config/usa/arm9/overlays/ov040/relocs.txt
index b62510fe..42e0fd7a 100644
--- a/config/usa/arm9/overlays/ov040/relocs.txt
+++ b/config/usa/arm9/overlays/ov040/relocs.txt
@@ -697,7 +697,7 @@ from:0x02182fa0 kind:arm_call to:0x0217e0f0 module:overlay(40)
from:0x02182fac kind:arm_call to:0x02182d88 module:overlay(40)
from:0x02182fe4 kind:arm_call to:0x02182eec module:overlay(40)
from:0x02183034 kind:arm_call to:0x0217df64 module:overlay(40)
-from:0x02183070 kind:load to:0x02057830 module:main
+from:0x02183070 kind:load to:0x02057828 add:0x8 module:main
from:0x02183074 kind:load to:0x020577f8 module:main
from:0x02183080 kind:arm_call to:0x02183120 module:overlay(40)
from:0x02183088 kind:arm_call_thumb to:0x02030108 module:main
diff --git a/config/usa/arm9/relocs.txt b/config/usa/arm9/relocs.txt
index e9fe2eaa..eb560ea2 100644
--- a/config/usa/arm9/relocs.txt
+++ b/config/usa/arm9/relocs.txt
@@ -3851,10 +3851,10 @@ from:0x02030030 kind:overlay_id to:7
from:0x02030034 kind:load to:0x027e0ce0 module:dtcm
from:0x02030040 kind:thumb_call_arm to:0x0202ea08 module:main
from:0x02030068 kind:thumb_call to:0x02030048 module:main
-from:0x02030070 kind:load to:0x02057814 module:main
+from:0x02030070 kind:load to:0x0205780c add:0x8 module:main
from:0x02030084 kind:thumb_call to:0x02030048 module:main
from:0x0203008a kind:thumb_call_arm to:0x0202ea08 module:main
-from:0x02030094 kind:load to:0x02057814 module:main
+from:0x02030094 kind:load to:0x0205780c add:0x8 module:main
from:0x020300b6 kind:thumb_call to:0x0202d54c module:main
from:0x020300c4 kind:load to:0x027e0ce0 module:dtcm
from:0x020300d4 kind:thumb_call to:0x0202d58c module:main
diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt
index 3c77a5a0..d85e0d19 100644
--- a/config/usa/arm9/symbols.txt
+++ b/config/usa/arm9/symbols.txt
@@ -2699,8 +2699,8 @@ data_020577f0 kind:data(any) addr:0x020577a8
data_020577f8 kind:data(any) addr:0x020577b0
data_02057808 kind:data(any) addr:0x020577c0
data_02057840 kind:data(any) addr:0x020577f8
-data_0205785c kind:data(any) addr:0x02057814
-data_02057878 kind:data(any) addr:0x02057830
+_ZTV13FileEntryFlag kind:data(any) addr:0x0205780c
+_ZTV9FileEntry kind:data(any) addr:0x02057828
_ZTV8BhioBase kind:data(any) addr:0x0205784c
data_020578d4 kind:data(any) addr:0x0205788c
data_020578d8 kind:data(any) addr:0x02057890
diff --git a/include/Actor/ActorShopItem.hpp b/include/Actor/ActorShopItem.hpp
index 2c27a854..5d2e8d55 100644
--- a/include/Actor/ActorShopItem.hpp
+++ b/include/Actor/ActorShopItem.hpp
@@ -1,18 +1,52 @@
#pragma once
+#include "Item/Item.hpp"
#include "global.h"
#include "types.h"
#include "Actor/Actor.hpp"
#include "Actor/ActorType.hpp"
+#include "Render/ModelRender.hpp"
+#include "System/SysNew.hpp"
+
+typedef u32 ShopItem;
+enum ShopItem_ {
+ ShopItem_Unk = -1,
+ ShopItem_Test = 0,
+ ShopItem_SoldOut = 1,
+ ShopItem_Bombs = 2,
+ ShopItem_Arrows = 3,
+ ShopItem_Bombchus = 4,
+ ShopItem_HeartContainer = 5,
+ ShopItem_BombBag = 6,
+ ShopItem_Quiver = 7,
+ ShopItem_BombchuBag = 8,
+ ShopItem_ShipPart = 9,
+ ShopItem_Treasure = 10,
+ ShopItem_CourageGem = 11,
+ ShopItem_PowerGem = 12,
+ ShopItem_WisdomGem = 13,
+ ShopItem_Shield = 14,
+ ShopItem_RedPotion = 15,
+ ShopItem_PurplePotion = 16,
+ ShopItem_YellowPotion = 17,
+ ShopItem_BASE_COUNT = ShopItem_YellowPotion + 1,
+ ShopItem_LargeBombBag = 18,
+ ShopItem_LargeQuiver = 19,
+ ShopItem_LargeBombchuBag = 20,
+ ShopItem_COUNT_WITH_UPGRADES = ShopItem_LargeBombchuBag + 1,
+ ShopItem_Ship = 21,
+ ShopItem_Ship2 = 22,
+ ShopItem_FULL_COUNT = ShopItem_Ship2 + 1,
+};
class ActorShopItemBase : public Actor {
public:
/* 000 (base) */
- /* 158 */ unk32 mUnk_158;
- /* 15c */ unk8 mUnk_15c;
- /* 15d */ unk8 mUnk_15d;
- /* 15e */ unk8 mUnk_15e;
+ /* 158 */ ShopItem mShopItemId;
+ /* 15c */ bool mUnk_15c;
+ /* 15d */ bool mUnk_15d;
+ /* 15e */ bool mUnk_15e;
/* 160 */
/* 00 */ virtual ~ActorShopItemBase() override;
@@ -29,40 +63,39 @@ public:
class ActorShopItem : public ActorShopItemBase {
public:
/* 000 (base) */
- /* 160 */ unk32 mUnk_160;
- /* 164 */ unk32 mUnk_164;
- /* 168 */ unk16 mUnk_168;
- /* 16a */ unk16 mUnk_16a;
- /* 16c */ unk16 mUnk_16c;
- /* 16e */ unk16 mUnk_16e;
- /* 170 */ unk16 mUnk_170;
- /* 172 */ unk16 mUnk_172;
- /* 174 */ unk8 mUnk_174;
- /* 175 */ unk8 mUnk_175;
+ /* 160 */ ModelRender *mModel;
+ /* 164 */ ItemId mItemId;
+ /* 168 */ u16 mUnk_168;
+ /* 16a */ u16 mUnk_16a;
+ /* 16c */ u16 mUnk_16c;
+ /* 16e */ u16 mUnk_16e;
+ /* 170 */ u16 mUnk_170;
+ /* 172 */ u16 mUnk_172;
+ /* 174 */ bool mUnk_174;
+ /* 175 */ bool mUnk_175;
/* 178 */
/* 00 */ virtual ~ActorShopItem() override;
/* 08 */ virtual bool Init() override;
/* 14 */ virtual void vfunc_14(u32 param1) override;
/* 20 */ virtual void vfunc_20(bool param1) override;
- /* bc */ virtual unk32 vfunc_bc() = 0;
+ /* bc */ virtual unk32 GetMessageId() = 0;
/* c0 */ virtual unk32 vfunc_c0();
/* c4 */ virtual void vfunc_c4();
/* c8 */ virtual void vfunc_c8();
/* cc */ virtual void vfunc_cc();
- /* d0 */ virtual unk32 vfunc_d0() = 0;
+ /* d0 */ virtual bool vfunc_d0() = 0;
/* d4 */ virtual void vfunc_d4();
- /* d8 */ virtual unk32 vfunc_d8();
- /* dc */ virtual unk32 vfunc_dc();
- /* e0 */ virtual unk32 vfunc_e0();
+ /* d8 */ virtual u32 GetPitch();
+ /* dc */ virtual u32 GetYaw();
+ /* e0 */ virtual s32 GetPrice();
/* e4 */
ActorShopItem();
void func_ov031_0217f0b4();
- void func_ov031_0217f114();
void func_ov031_0217f120();
- unk32 func_ov031_0217f868();
+ unk32 GetSoldOutMessageId();
};
class ActorShopItemDM : public ActorShopItem {
@@ -75,8 +108,8 @@ public:
/* 00 */ virtual ~ActorShopItemDM() override;
/* 08 */ virtual bool Init() override;
/* 20 */ virtual void vfunc_20(bool param1) override;
- /* bc */ virtual unk32 vfunc_bc() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* bc */ virtual unk32 GetMessageId() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* d4 */ virtual void vfunc_d4() override;
/* e4 */
@@ -92,8 +125,8 @@ public:
/* 00 */ virtual ~ActorShopItemSoldOut() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* bc */ virtual unk32 GetMessageId() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* d4 */ virtual void vfunc_d4() override;
/* e4 */
@@ -109,11 +142,10 @@ public:
/* 00 */ virtual ~ActorShopItemHeartContainer() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
- /* d4 */ virtual void vfunc_d4() override;
- /* e0 */ virtual unk32 vfunc_e0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
+ /* e0 */ virtual s32 GetPrice() override;
/* e4 */
static ActorShopItemHeartContainer *Create();
@@ -128,100 +160,100 @@ public:
/* 00 */ virtual ~ActorShopItemArrows() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
static ActorShopItemArrows *Create();
};
-class ActorShopItemBombs : public ActorShopItem {
+class ActorShopItemQuiver : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
/* 178 */
- /* 00 */ virtual ~ActorShopItemBombs() override;
+ /* 00 */ virtual ~ActorShopItemQuiver() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
- static ActorShopItemBombs *Create();
+ static ActorShopItemQuiver *Create();
};
-class ActorShopItemBombchus : public ActorShopItem {
+class ActorShopItemBombs : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
/* 178 */
- /* 00 */ virtual ~ActorShopItemBombchus() override;
+ /* 00 */ virtual ~ActorShopItemBombs() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
- static ActorShopItemBombchus *Create();
+ static ActorShopItemBombs *Create();
};
-class ActorShopItemQuiver : public ActorShopItem {
+class ActorShopItemBombBag : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
/* 178 */
- /* 00 */ virtual ~ActorShopItemQuiver() override;
+ /* 00 */ virtual ~ActorShopItemBombBag() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
- static ActorShopItemQuiver *Create();
+ static ActorShopItemBombBag *Create();
};
-class ActorShopItemBombBag : public ActorShopItem {
+class ActorShopItemBombchus : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
/* 178 */
- /* 00 */ virtual ~ActorShopItemBombBag() override;
+ /* 00 */ virtual ~ActorShopItemBombchus() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
- static ActorShopItemBombBag *Create();
+ static ActorShopItemBombchus *Create();
};
-class ActorShopItemB2 : public ActorShopItem {
+class ActorShopItemBombchuBag : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
/* 178 */
- /* 00 */ virtual ~ActorShopItemB2() override;
+ /* 00 */ virtual ~ActorShopItemBombchuBag() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
- static ActorShopItemB2 *Create();
+ static ActorShopItemBombchuBag *Create();
};
-struct ActorShopItemCollectable_Unk1 {
+struct ActorShopItemCollectable_Unk1 : public SysObject {
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
@@ -234,60 +266,62 @@ struct ActorShopItemCollectable_Unk1 {
/* 24 */ unk8 mUnk_24;
/* 25 */ unk8 mUnk_25;
/* 28 */
+
+ ActorShopItemCollectable_Unk1();
+ ~ActorShopItemCollectable_Unk1();
+
+ void func_ov000_02079f5c(unk32, unk32, unk32, unk32, u8, unk32);
};
-class ActorShopItemTreasure : public ActorShopItem {
+class ActorShopItemShipPart : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
- /* 178 */ ActorShopItemCollectable_Unk1 *mUnk_178;
- /* 17c */ unk32 mUnk_17c;
- /* 180 */
+ /* 178 */ ModelRender *mUnk_178;
+ /* 17c */ ActorShopItemCollectable_Unk1 *mUnk_17c;
+ /* 180 */ unk32 mUnk_180;
+ /* 184 */
- /* 00 */ virtual ~ActorShopItemTreasure() override;
+ /* 00 */ virtual ~ActorShopItemShipPart() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* 14 */ virtual void vfunc_14(u32 param1) override;
+ /* 20 */ virtual void vfunc_20(bool param1) override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* d4 */ virtual void vfunc_d4() override;
- /* e0 */ virtual unk32 vfunc_e0() override;
+ /* e0 */ virtual s32 GetPrice() override;
/* e4 */
- static ActorShopItemTreasure *Create();
- ActorShopItemTreasure();
+ static ActorShopItemShipPart *Create();
+ ActorShopItemShipPart();
unk32 func_ov031_02180248();
unk32 func_ov031_02180260();
- unk32 func_ov031_02180278();
};
-class ActorShopItemShipPart : public ActorShopItem {
+class ActorShopItemTreasure : public ActorShopItem {
public:
static ActorType gType;
/* 000 (base) */
- /* 178 */ unk32 mUnk_178;
- /* 17c */ ActorShopItemCollectable_Unk1 *mUnk_17c;
- /* 180 */ unk32 mUnk_180;
- /* 184 */
+ /* 178 */ ActorShopItemCollectable_Unk1 *mUnk_178;
+ /* 17c */ unk32 mUnk_17c;
+ /* 180 */
- /* 00 */ virtual ~ActorShopItemShipPart() override;
+ /* 00 */ virtual ~ActorShopItemTreasure() override;
/* 08 */ virtual bool Init() override;
- /* 14 */ virtual void vfunc_14(u32 param1) override;
- /* 20 */ virtual void vfunc_20(bool param1) override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* d4 */ virtual void vfunc_d4() override;
- /* e0 */ virtual unk32 vfunc_e0() override;
+ /* e0 */ virtual s32 GetPrice() override;
/* e4 */
- static ActorShopItemShipPart *Create();
- ActorShopItemShipPart();
+ static ActorShopItemTreasure *Create();
+ ActorShopItemTreasure();
- unk32 func_ov031_02180248();
- unk32 func_ov031_02180260();
unk32 func_ov031_02180278();
};
@@ -300,9 +334,9 @@ public:
/* 00 */ virtual ~ActorShopItemGem() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
static ActorShopItemGem *Create();
@@ -317,9 +351,9 @@ public:
/* 00 */ virtual ~ActorShopItemShield() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
/* e4 */
static ActorShopItemShield *Create();
@@ -334,10 +368,10 @@ public:
/* 00 */ virtual ~ActorShopItemPotion() override;
/* 08 */ virtual bool Init() override;
- /* bc */ virtual unk32 vfunc_bc() override;
+ /* bc */ virtual unk32 GetMessageId() override;
/* c4 */ virtual void vfunc_c4() override;
- /* d0 */ virtual unk32 vfunc_d0() override;
- /* e0 */ virtual unk32 vfunc_e0() override;
+ /* d0 */ virtual bool vfunc_d0() override;
+ /* e0 */ virtual s32 GetPrice() override;
/* e4 */
static ActorShopItemPotion *Create();
@@ -347,16 +381,21 @@ class ActorShopItemUnk : public ActorShopItemBase {
public:
/* 000 (base) */
/* 160 */ unk32 mUnk_160;
- /* 164 */ unk8 mUnk_164;
+ /* 164 */ bool mUnk_164;
/* 168 */
- /* 00 */ virtual ~ActorShopItemUnk() override;
+ /* 00 */ virtual ~ActorShopItemUnk();
/* 08 */ virtual bool Init() override;
/* 14 */ virtual void vfunc_14(u32 param1) override;
+ /* 1c */ virtual void vfunc_1c(u16 *param1) override = 0;
/* 20 */ virtual void vfunc_20(bool param1) override;
+ /* b4 */ virtual bool vfunc_b4() override = 0;
+ /* b8 */ virtual bool vfunc_b8() override = 0;
/* bc */
ActorShopItemUnk();
+
+ void func_ov031_02180418();
};
class ActorShopItemBK : public ActorShopItemUnk {
@@ -407,3 +446,20 @@ public:
static ActorShopItemBY *Create();
ActorShopItemBY();
};
+
+struct UnkStruct_ov031_02183e80 {
+ /* 000 */ PAD(0x000, 0x01c);
+ /* 01c */ u32 mUnk_01c[2];
+ /* 024 */ u32 mUnk_024[2];
+ /* 02c */ u32 mUnk_02c[2];
+ /* 034 */ PAD(0x34, 0x38);
+ /* 038 */ u32 mUnk_038[1]; // at least 1, unclear how many
+ /* 03c */ PAD(0x03c, 0x178);
+ /* 178 */ Vec3p mUnk_178;
+ /* 184 */ PAD(0x184, 0x19a);
+ /* 19a */ u8 mUnk_19a;
+ /* 19b */
+
+ bool func_ov031_0217bd80();
+ bool func_ov031_0217cec0();
+};
diff --git a/include/Actor/ActorTypeId.hpp b/include/Actor/ActorTypeId.hpp
index e7e7132f..b0c6a5ee 100644
--- a/include/Actor/ActorTypeId.hpp
+++ b/include/Actor/ActorTypeId.hpp
@@ -14,16 +14,23 @@ enum ActorTypeId_ {
ActorTypeId_TreasureMap = 'TMAP',
ActorTypeId_DigSpot = 'DGTG',
- ActorTypeId_ShopItemBombchus = 'ITBT',
- ActorTypeId_ShopItemBombs = 'ITBM',
- ActorTypeId_ShopItemTreasure = 'ITTR',
- ActorTypeId_ShopItemHeartContainer = 'ITHU',
ActorTypeId_ShopItemQuiver = 'ITAP',
+ ActorTypeId_ShopItemArrows = 'ITAR',
+ ActorTypeId_ShopItemBombchuBag = 'ITB2',
ActorTypeId_ShopItemBombBag = 'ITBB',
- ActorTypeId_ShopItemRedPotion = 'ITPB',
- ActorTypeId_ShopItemCourageGem = 'ITSR',
+ ActorTypeId_ShopItemBK = 'ITBK',
+ ActorTypeId_ShopItemBombs = 'ITBM',
+ ActorTypeId_ShopItemBombchus = 'ITBT',
+ ActorTypeId_ShopItemBY = 'ITBY',
+ ActorTypeId_ShopItemCC = 'ITCC',
+ ActorTypeId_ShopItemDM = 'ITDM',
+ ActorTypeId_ShopItemHeartContainer = 'ITHU',
+ ActorTypeId_ShopItemPotion = 'ITPB',
ActorTypeId_ShopItemShield = 'ITSL',
ActorTypeId_ShopItemSoldOut = 'ITSO',
+ ActorTypeId_ShopItemShipPart = 'ITSP',
+ ActorTypeId_ShopItemGem = 'ITSR',
+ ActorTypeId_ShopItemTreasure = 'ITTR',
ActorTypeId_RefillArrows = 'FLAL',
ActorTypeId_RefillBombs = 'FLBM',
diff --git a/include/DTCM/UnkStruct_027e0f64.hpp b/include/DTCM/UnkStruct_027e0f64.hpp
index 9a0bdd36..755ba5bd 100644
--- a/include/DTCM/UnkStruct_027e0f64.hpp
+++ b/include/DTCM/UnkStruct_027e0f64.hpp
@@ -3,11 +3,21 @@
#include "global.h"
#include "types.h"
+#include <nds/math.h>
+
#include "Player/Bhio.hpp"
struct UnkStruct_027e0f64_04 {
- /* 000 */ u8 pad[0x1B4 - 0x00];
+ /* 000 */ PAD(0x000, 0x01c);
+ /* 01c */ Mat4x3p mUnk_01c;
+ /* 04c */ PAD(0x04c, 0x1b4);
/* 1b4 */ unk32 mUnk_1b4;
+ /* 1b8 */ PAD(0x1b8, 0x260);
+ /* 260 */ Vec3p mUnk_260;
+ /* 26c */ Vec3p mUnk_26c;
+ /* 278 */
+
+ bool func_01ffe468(Vec3p *param2, s32 *param3, s32 *param4, bool param5);
};
class UnkStruct_027e0f64 {
@@ -19,7 +29,7 @@ public:
void func_ov000_0208ae94();
void func_ov000_0208b13c();
- unk32 func_ov000_0208b180();
+ UnkStruct_027e0f64_04 *func_ov000_0208b180();
};
extern UnkStruct_027e0f64 *data_027e0f64;
diff --git a/include/Message/BMG.hpp b/include/Message/BMG.hpp
index ac0c183f..6ef203e3 100644
--- a/include/Message/BMG.hpp
+++ b/include/Message/BMG.hpp
@@ -10,6 +10,8 @@
#define BMG_GET_MSG_ADDR(pGroups, flags) \
((u32) (pGroups)->entries[(flags) >> 0x10].pDAT1 + (BMG_GET_MSG_OFFSET((pGroups), (flags)) & ~1))
+#define BMG_ID(file, entry) (((file) << 0x10) | (entry))
+
enum BMGTag {
/* "INF1" */ BMG_TAG_INF1 = '1FNI',
/* "FLW1" */ BMG_TAG_FLW1 = '1WLF',
diff --git a/include/Message/MsgProc.hpp b/include/Message/MsgProc.hpp
index 0615dee8..dc10f91f 100644
--- a/include/Message/MsgProc.hpp
+++ b/include/Message/MsgProc.hpp
@@ -125,7 +125,7 @@ public:
unk32 func_ov000_0207bc48();
void func_ov000_0207bc9c();
};
-extern UnkClass_027e0e28 *data_027e0e28;
+extern UnkClass_027e0e28 data_027e0e28;
extern unk32 *data_ov009_0211f5b4;
extern "C" unk32 func_ov003_020f3f94(unk32 *);
extern "C" void func_ov003_020f4060(unk32 **);
diff --git a/include/Save/AdventureFlags.hpp b/include/Save/AdventureFlags.hpp
index 72c7f0f1..f4c550a0 100644
--- a/include/Save/AdventureFlags.hpp
+++ b/include/Save/AdventureFlags.hpp
@@ -25,6 +25,15 @@ enum AdventureFlag_ {
/* 0x0030 */ AdventureFlag_Cannon = FLAG(1, 16),
/* 0x0033 */ AdventureFlag_RegalNecklace = FLAG(1, 19),
+ /* 0x0067 */ AdventureFlag_Unk_103 = FLAG(3, 7),
+ /* 0x0068 */ AdventureFlag_Unk_104 = FLAG(3, 8),
+ /* 0x0069 */ AdventureFlag_Unk_105 = FLAG(3, 9),
+ /* 0x006A */ AdventureFlag_Unk_106 = FLAG(3, 10),
+ /* 0x006B */ AdventureFlag_Unk_107 = FLAG(3, 11),
+ /* 0x006C */ AdventureFlag_Unk_108 = FLAG(3, 12),
+ /* 0x006D */ AdventureFlag_Unk_109 = FLAG(3, 13),
+ /* 0x0071 */ AdventureFlag_Unk_113 = FLAG(3, 17),
+
/* 0x007A */ AdventureFlag_CourageCrest = FLAG(3, 26),
/* 0x007D */ AdventureFlag_Azurine = FLAG(3, 29),
/* 0x007E */ AdventureFlag_Crimsonine = FLAG(3, 30),
diff --git a/include/System/SysNew.hpp b/include/System/SysNew.hpp
index e488166b..f1696089 100644
--- a/include/System/SysNew.hpp
+++ b/include/System/SysNew.hpp
@@ -17,8 +17,6 @@ void SysDelete(void *ptr);
void *func_0202e99c(s32 length);
void *func_0202e9bc(s32 length);
-extern u32 *data_027e0ce0[];
-
class SysObject {
public:
static void *operator new(size_t length, u32 *id, u32 idLength);
diff --git a/include/Unknown/UnkStruct_027e0dbc.hpp b/include/Unknown/UnkStruct_027e0dbc.hpp
index 0c816fd7..a5697c80 100644
--- a/include/Unknown/UnkStruct_027e0dbc.hpp
+++ b/include/Unknown/UnkStruct_027e0dbc.hpp
@@ -28,6 +28,7 @@ public:
void func_ov000_0207b988(GameModeId modeId);
unk32 func_ov003_020f3d5c(unk32 param1);
+ void func_ov003_020f3d74(unk32 param1);
};
extern UnkStruct_027e0dbc data_027e0dbc;
diff --git a/include/Unknown/UnkStruct_ov000_020c0c08.hpp b/include/Unknown/UnkStruct_ov000_020c0c08.hpp
index 2e16bed3..ed19553c 100644
--- a/include/Unknown/UnkStruct_ov000_020c0c08.hpp
+++ b/include/Unknown/UnkStruct_ov000_020c0c08.hpp
@@ -19,7 +19,12 @@ struct UnkStruct_ov000_020c0c08_04 {
/* 20 */
};
-class ItemModel;
+class ItemModel {
+ /* 00 */ unk32 mUnk_00;
+ /* 04 */ unk32 mUnk_04;
+ /* 08 */ unk32 mUnk_08;
+ /* 0c */
+};
class UnkStruct_ov000_020c0c08 : public SysObject {
public:
diff --git a/include/lib/files.hpp b/include/lib/files.hpp
index 78b435f4..e58feb21 100644
--- a/include/lib/files.hpp
+++ b/include/lib/files.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "System/SysNew.hpp"
#include "global.h"
#include "types.h"
@@ -7,13 +8,14 @@ struct FileEntry_Unk8 {
/* 00 */ unk8 mUnk_00[0x8];
/* 08 */ u16 mUnk_08;
/* 0a */ u16 mUnk_0a;
- /* 0c */ // more fields, probably
+ /* 0c */ u16 mUnk_0c;
+ /* 10 */ // more fields, probably
};
-class FileEntry {
+class FileEntry : public SysObject {
public:
/* 00 (vtable) */
- /* 04 */ char *path;
+ /* 04 */ const char *path;
/* 08 */ FileEntry_Unk8 *mUnk_08;
/* 0c */ unk32 mUnk_0c;
/* 10 */
@@ -23,6 +25,11 @@ public:
/* 0c */ virtual void vfunc_0c() = 0;
/* 10 */ virtual u32 vfunc_10(u32 param1) = 0;
/* 14 */
+
+ FileEntry(const char *path) :
+ path(path),
+ mUnk_08(NULL),
+ mUnk_0c(0) {}
};
class FileEntryFlag : public FileEntry {
@@ -36,4 +43,8 @@ public:
/* 0c */ virtual void vfunc_0c() override;
/* 10 */ virtual u32 vfunc_10(u32 param1) override;
/* 14 */
+
+ FileEntryFlag(const char *path) :
+ FileEntry(path),
+ mUnk_10(0) {}
};
diff --git a/include/types.h b/include/types.h
index b5ca70bb..bcdc63b0 100644
--- a/include/types.h
+++ b/include/types.h
@@ -36,5 +36,6 @@ typedef s32 bool;
#define CEIL_DIV(a, b) (((a) + (b) - 1) / (b))
#define UNK_PTR unk32 *
+#define PAD(start, end) unk8 pad_##start[end - start]
#endif
diff --git a/libs/nds/include/nds/g3d/g3d.h b/libs/nds/include/nds/g3d/g3d.h
index 36faa173..03f2a1e2 100644
--- a/libs/nds/include/nds/g3d/g3d.h
+++ b/libs/nds/include/nds/g3d/g3d.h
@@ -34,7 +34,7 @@ typedef struct G3d_BoneMtxStruct {
/* 64 */
} G3d_BoneMtxStruct;
-typedef enum {
+typedef enum G3d_AnimationBinds {
G3D_ANIMBIND_UNK = 0xff,
G3D_ANIMBIND_EXISTS = 0x100,
G3D_ANIMBIND_OFF = 0x200
@@ -89,7 +89,7 @@ static inline G3d_NameList *G3d_GetMesh(const G3d_Model *mdl) {
return (G3d_NameList *) ((u8 *) mdl + mdl->offMesh);
}
-typedef enum {
+typedef enum G3d_RenderObjFlag {
G3D_RENDEROBJ_FLAG_STORE = 0x1, // stores results in local cache
G3D_RENDEROBJ_FLAG_SKIP_CMD = 0x2, // skips pushing geometry commands to the FIFO
G3D_RENDEROBJ_FLAG_SKIP_SBC_DRAW = 0x4, // skips the execution of rendering commands
diff --git a/libs/nds/include/nds/g3d/sbc.h b/libs/nds/include/nds/g3d/sbc.h
index 2ac3ec3b..88dcc25d 100644
--- a/libs/nds/include/nds/g3d/sbc.h
+++ b/libs/nds/include/nds/g3d/sbc.h
@@ -3,7 +3,7 @@
extern void PushGeometryCommand(u32 command, void *data, s32 length);
-typedef enum {
+typedef enum G3d_SBC_Commands {
G3D_SBC_CMD_NOP = 0x0,
G3D_SBC_CMD_END = 0x1,
G3D_SBC_CMD_VIS = 0x2,
@@ -16,7 +16,7 @@ typedef enum {
G3D_SBC_CMD_00D = 0xd
} G3d_SBC_Commands;
-typedef enum {
+typedef enum G3d_RenderStateFlag {
G3D_RENDERST_FLAG_BONE_VISIBLE = 0x1,
G3D_RENDERST_FLAG_MAT_TRANSPARENT = 0x2,
G3D_RENDERST_FLAG_VALID_NODE = 0x4,
diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp
index 09357983..12133434 100644
--- a/src/00_Core/Map/MapManager.cpp
+++ b/src/00_Core/Map/MapManager.cpp
@@ -33,8 +33,8 @@ extern void func_ov000_020792a0(s32 *param_1, s32 param_2, unk32 param_3, unk32
extern void func_ov000_02079898(unk32 *param_1, unk32 param_2, unk32 param_3);
extern void func_ov000_020798bc(s32 *param_1, s32 param_2);
extern void func_ov000_02088000(UnkStruct_027e0f64_04 *param_1, s32 param_2);
-extern void func_ov000_02088130(u8 *param_1, unk32 param_2);
-extern void func_ov000_02088144(u8 *param_1, unk32 param_2);
+extern void func_ov000_02088130(u8 *param_1, UnkStruct_027e0f64_04 *param_2);
+extern void func_ov000_02088144(u8 *param_1, UnkStruct_027e0f64_04 *param_2);
extern s32 func_ov000_0208b73c(s32 param_1, unk32 param_2);
extern s32 func_ov000_0208b7d0(s32 param_1, Vec3p *param_2);
@@ -2090,7 +2090,7 @@ unk32 MapManager::func_ov00_02084ebc(Vec3p *param_2) {
s32 MapManager::func_ov00_02085108(Vec3p *param_2) {
MapManager *puVar1;
- unk32 uVar2;
+ UnkStruct_027e0f64_04 *uVar2;
int *piVar3;
int iVar4;
u32 uVar5;
@@ -2148,7 +2148,7 @@ s32 MapManager::func_ov00_02085108(Vec3p *param_2) {
s32 MapManager::func_ov00_0208527c(MapManager *param_1, unk32 param_2, Vec3p *param_3) {
u32 uVar1;
MapManager *puVar2;
- unk32 uVar3;
+ UnkStruct_027e0f64_04 *uVar3;
int iVar4;
int iVar5;
u32 uVar6;
@@ -2208,7 +2208,7 @@ s32 MapManager::func_ov00_0208527c(MapManager *param_1, unk32 param_2, Vec3p *pa
s32 MapManager::func_ov00_020853fc(MapManager *param_1, Vec3p *param_2, s32 *param_3) {
u32 uVar1;
- unk32 uVar2;
+ UnkStruct_027e0f64_04 *uVar2;
int iVar3;
int iVar4;
int iVar5;
diff --git a/src/00_Core/Player/PlayerControl.cpp b/src/00_Core/Player/PlayerControl.cpp
index 07e20cf6..7fc613ca 100644
--- a/src/00_Core/Player/PlayerControl.cpp
+++ b/src/00_Core/Player/PlayerControl.cpp
@@ -728,8 +728,6 @@ ARM bool PlayerControl::func_ov00_020b05e8(Vec3p *param1) {
return false;
}
-extern "C" bool func_01ffe468(unk32 param1, Vec3p *param2, s32 *param3, s32 *param4, bool param5);
-
ARM bool PlayerControl::func_ov00_020b0778(Vec3p *param1, u32 angle, unk32 *param3) {
Vec3p spC;
*param3 = 0;
@@ -737,7 +735,7 @@ ARM bool PlayerControl::func_ov00_020b0778(Vec3p *param1, u32 angle, unk32 *para
s32 sp8;
s32 sp4;
- bool var_r0 = !func_01ffe468(data_027e0f64->func_ov000_0208b180(), &spC, &sp8, &sp4, 0);
+ bool var_r0 = !data_027e0f64->func_ov000_0208b180()->func_01ffe468(&spC, &sp8, &sp4, 0);
if (var_r0) {
return 0;
}
diff --git a/src/00_Core/Render/ModelRender.cpp b/src/00_Core/Render/ModelRender.cpp
index 37a4ce30..b10d3c13 100644
--- a/src/00_Core/Render/ModelRender.cpp
+++ b/src/00_Core/Render/ModelRender.cpp
@@ -9,7 +9,6 @@ extern "C" void UnkInit_ModelRender_Struct4_Params(G3d_RenderObject *unkStruct4,
extern "C" void CopySingle288(Mat3p *src, Mat3p *dest);
extern "C" void SetGeometryScale(Vec3p *scale);
extern "C" void SetGeometryTranslation(Vec3p *translation);
-extern "C" void PushGeometryCommand(u32 command, void *data, s32 length);
extern "C" void func_ov000_020c0d70(UnkStruct_ov000_020c0c08 *param1, G3d_RenderObject *param2);
extern "C" void func_ov000_020b3ea8(void *param1);
extern "C" unk32 func_0201e388(void *param1, const char *param2);
@@ -20,7 +19,6 @@ extern "C" Vec3p gGeomScale;
extern "C" const Mat4x3p *data_027e03c8;
extern "C" Vec3p gDefaultScale;
extern "C" Mat3p gDefaultMatrix;
-extern "C" u32 *data_027e0ce0[];
THUMB ModelRender::ModelRender(ItemModel *itemModel) {
this->unkBoneMatrixArray2 = NULL;
diff --git a/src/09_Adventure/Game/GameModeAdventure.cpp b/src/09_Adventure/Game/GameModeAdventure.cpp
index a7ae24be..859ae790 100644
--- a/src/09_Adventure/Game/GameModeAdventure.cpp
+++ b/src/09_Adventure/Game/GameModeAdventure.cpp
@@ -142,7 +142,7 @@ ARM unk32 GameModeAdventure::vfunc_08(bool param1) {
this->mUnk_00c->func_ov009_021135d0();
this->mUnk_014->func_ov009_0211372c();
- data_027e0e28->func_ov000_0207bc9c();
+ data_027e0e28.func_ov000_0207bc9c();
}
}
diff --git a/src/31_Shop/Actor/ActorShopItem.cpp b/src/31_Shop/Actor/ActorShopItem.cpp
index 4994f414..9b10209b 100644
--- a/src/31_Shop/Actor/ActorShopItem.cpp
+++ b/src/31_Shop/Actor/ActorShopItem.cpp
@@ -1,205 +1,1341 @@
#include "Actor/ActorShopItem.hpp"
+#include "Actor/ActorTypeId.hpp"
+#include "DTCM/UnkStruct_027e0c54.hpp"
+#include "DTCM/UnkStruct_027e0f64.hpp"
+#include "Item/Item.hpp"
+#include "Item/ItemManager.hpp"
+#include "Message/MsgProc.hpp"
+#include "Player/TouchControl.hpp"
+#include "Render/ModelRender.hpp"
+#include "Save/AdventureFlags.hpp"
+#include "System/SysNew.hpp"
+#include "Unknown/UnkStruct_020e9360.hpp"
+#include "Unknown/UnkStruct_027e0dbc.hpp"
+#include "Unknown/UnkStruct_ov000_020e9c88.hpp"
#include "lib/files.hpp"
+#include "nds/math.h"
+#include "types.h"
extern u32 **data_027e0fe0[];
-ActorShopItemDM *ActorShopItemDM::Create() {
+ARM ActorShopItemDM *ActorShopItemDM::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemDM();
}
-ActorShopItemSoldOut *ActorShopItemSoldOut::Create() {
+ARM ActorShopItemSoldOut *ActorShopItemSoldOut::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemSoldOut();
}
-ActorShopItemHeartContainer *ActorShopItemHeartContainer::Create() {
+ARM ActorShopItemHeartContainer *ActorShopItemHeartContainer::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemHeartContainer();
}
-ActorShopItemArrows *ActorShopItemArrows::Create() {
+ARM ActorShopItemArrows *ActorShopItemArrows::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemArrows();
}
-ActorShopItemBombs *ActorShopItemBombs::Create() {
+ARM ActorShopItemBombs *ActorShopItemBombs::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemBombs();
}
-ActorShopItemBombchus *ActorShopItemBombchus::Create() {
+ARM ActorShopItemBombchus *ActorShopItemBombchus::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemBombchus();
}
-ActorShopItemQuiver *ActorShopItemQuiver::Create() {
+ARM ActorShopItemQuiver *ActorShopItemQuiver::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemQuiver();
}
-ActorShopItemBombBag *ActorShopItemBombBag::Create() {
+ARM ActorShopItemBombBag *ActorShopItemBombBag::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemBombBag();
}
-ActorShopItemB2 *ActorShopItemB2::Create() {
- return new(*data_027e0fe0[0], 4) ActorShopItemB2();
+ARM ActorShopItemBombchuBag *ActorShopItemBombchuBag::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemBombchuBag();
}
-ActorShopItemTreasure *ActorShopItemTreasure::Create() {
+ARM ActorShopItemTreasure *ActorShopItemTreasure::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemTreasure();
}
-ActorShopItemShipPart *ActorShopItemShipPart::Create() {
+ARM ActorShopItemShipPart *ActorShopItemShipPart::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemShipPart();
}
-ActorShopItemGem *ActorShopItemGem::Create() {
+ARM ActorShopItemGem *ActorShopItemGem::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemGem();
}
-ActorShopItemShield *ActorShopItemShield::Create() {
+ARM ActorShopItemShield *ActorShopItemShield::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemShield();
}
-ActorShopItemPotion *ActorShopItemPotion::Create() {
+ARM ActorShopItemPotion *ActorShopItemPotion::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemPotion();
}
-ActorShopItemBK *ActorShopItemBK::Create() {
+ARM ActorShopItemBK *ActorShopItemBK::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemBK();
}
-ActorShopItemCC *ActorShopItemCC::Create() {
+ARM ActorShopItemCC *ActorShopItemCC::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemCC();
}
-ActorShopItemBY *ActorShopItemBY::Create() {
+ARM ActorShopItemBY *ActorShopItemBY::Create() {
return new(*data_027e0fe0[0], 4) ActorShopItemBY();
}
-static void func_ov031_0217dfec(FileEntry *param_1, FileEntry *param_2, char *param_3) {}
-static void func_ov031_0217e040() {}
-static void func_ov031_0217e2b4() {}
-
-ActorShopItemBase::ActorShopItemBase() {}
-ActorShopItem::ActorShopItem() {}
-ActorShopItemShipPart::ActorShopItemShipPart() {}
-ActorShopItemTreasure::ActorShopItemTreasure() {}
-ActorShopItemUnk::ActorShopItemUnk() {}
-ActorShopItemBY::ActorShopItemBY() {}
-
-ActorShopItemBase::~ActorShopItemBase() {}
-ActorShopItem::~ActorShopItem() {}
-ActorShopItemSoldOut::~ActorShopItemSoldOut() {}
-ActorShopItemShipPart::~ActorShopItemShipPart() {}
-ActorShopItemTreasure::~ActorShopItemTreasure() {}
-
-void ActorShopItem::vfunc_d4() {}
-void ActorShopItemDM::vfunc_d4() {}
-void ActorShopItemSoldOut::vfunc_d4() {}
-void ActorShopItemShipPart::vfunc_d4() {}
-void ActorShopItemTreasure::vfunc_d4() {}
-
-bool ActorShopItemBase::Init() {}
-bool ActorShopItem::Init() {}
-bool ActorShopItemDM::Init() {}
-bool ActorShopItemSoldOut::Init() {}
-bool ActorShopItemHeartContainer::Init() {}
-bool ActorShopItemArrows::Init() {}
-bool ActorShopItemQuiver::Init() {}
-bool ActorShopItemBombs::Init() {}
-bool ActorShopItemBombBag::Init() {}
-bool ActorShopItemBombchus::Init() {}
-bool ActorShopItemB2::Init() {}
-bool ActorShopItemShipPart::Init() {}
-bool ActorShopItemTreasure::Init() {}
-bool ActorShopItemGem::Init() {}
-bool ActorShopItemShield::Init() {}
-bool ActorShopItemPotion::Init() {}
-bool ActorShopItemUnk::Init() {}
-
-void ActorShopItemBase::vfunc_14(u32 param1) {}
-void ActorShopItem::vfunc_14(u32 param1) {}
-void ActorShopItemShipPart::vfunc_14(u32 param1) {}
-void ActorShopItemUnk::vfunc_14(u32 param1) {}
-
-void ActorShopItemBase::vfunc_18(u32 param1) {}
-
-void ActorShopItem::vfunc_c8() {}
-void ActorShopItem::vfunc_cc() {}
-void ActorShopItem::func_ov031_0217f0b4() {}
-unk32 ActorShopItem::vfunc_d8() {}
-unk32 ActorShopItem::vfunc_dc() {}
-void ActorShopItem::func_ov031_0217f114() {}
-void ActorShopItem::func_ov031_0217f120() {}
-
-void ActorShopItem::vfunc_20(bool param1) {}
-void ActorShopItemShipPart::vfunc_20(bool param1) {}
-void ActorShopItemDM::vfunc_20(bool param1) {}
-void ActorShopItemUnk::vfunc_20(bool param1) {}
-
-void ActorShopItemBK::vfunc_1c(u16 *param1) {}
-void ActorShopItemCC::vfunc_1c(u16 *param1) {}
-void ActorShopItemBY::vfunc_1c(u16 *param1) {}
-
-unk32 ActorShopItem::func_ov031_0217f868() {}
-unk32 ActorShopItemDM::vfunc_bc() {}
-unk32 ActorShopItemSoldOut::vfunc_bc() {}
-unk32 ActorShopItemHeartContainer::vfunc_bc() {}
-unk32 ActorShopItemArrows::vfunc_bc() {}
-unk32 ActorShopItemQuiver::vfunc_bc() {}
-unk32 ActorShopItemBombs::vfunc_bc() {}
-unk32 ActorShopItemBombBag::vfunc_bc() {}
-unk32 ActorShopItemBombchus::vfunc_bc() {}
-unk32 ActorShopItemB2::vfunc_bc() {}
-unk32 ActorShopItemShipPart::vfunc_bc() {}
-unk32 ActorShopItemTreasure::vfunc_bc() {}
-unk32 ActorShopItemGem::vfunc_bc() {}
-unk32 ActorShopItemShield::vfunc_bc() {}
-unk32 ActorShopItemPotion::vfunc_bc() {}
-
-unk32 ActorShopItem::vfunc_e0() {}
-unk32 ActorShopItemHeartContainer::vfunc_e0() {}
-unk32 ActorShopItemPotion::vfunc_e0() {}
-unk32 ActorShopItemShipPart::vfunc_e0() {}
-unk32 ActorShopItemTreasure::vfunc_e0() {}
-
-unk32 ActorShopItem::vfunc_c0() {}
-
-void ActorShopItem::vfunc_c4() {}
-void ActorShopItemHeartContainer::vfunc_c4() {}
-void ActorShopItemArrows::vfunc_c4() {}
-void ActorShopItemQuiver::vfunc_c4() {}
-void ActorShopItemBombs::vfunc_c4() {}
-void ActorShopItemBombBag::vfunc_c4() {}
-void ActorShopItemBombchus::vfunc_c4() {}
-void ActorShopItemB2::vfunc_c4() {}
-void ActorShopItemShipPart::vfunc_c4() {}
-void ActorShopItemTreasure::vfunc_c4() {}
-void ActorShopItemGem::vfunc_c4() {}
-void ActorShopItemShield::vfunc_c4() {}
-void ActorShopItemPotion::vfunc_c4() {}
-
-bool ActorShopItemBase::vfunc_b4() {}
-bool ActorShopItemBK::vfunc_b4() {}
-bool ActorShopItemCC::vfunc_b4() {}
-bool ActorShopItemBY::vfunc_b4() {}
-
-bool ActorShopItemBase::vfunc_b8() {}
-bool ActorShopItemBK::vfunc_b8() {}
-bool ActorShopItemCC::vfunc_b8() {}
-bool ActorShopItemBY::vfunc_b8() {}
-
-unk32 ActorShopItemTreasure::func_ov031_02180248() {}
-unk32 ActorShopItemTreasure::func_ov031_02180260() {}
-unk32 ActorShopItemTreasure::func_ov031_02180278() {}
-
-unk32 ActorShopItemDM::vfunc_d0() {}
-unk32 ActorShopItemSoldOut::vfunc_d0() {}
-unk32 ActorShopItemHeartContainer::vfunc_d0() {}
-unk32 ActorShopItemArrows::vfunc_d0() {}
-unk32 ActorShopItemQuiver::vfunc_d0() {}
-unk32 ActorShopItemBombs::vfunc_d0() {}
-unk32 ActorShopItemBombBag::vfunc_d0() {}
-unk32 ActorShopItemBombchus::vfunc_d0() {}
-unk32 ActorShopItemB2::vfunc_d0() {}
-unk32 ActorShopItemShipPart::vfunc_d0() {}
-unk32 ActorShopItemGem::vfunc_d0() {}
-unk32 ActorShopItemShield::vfunc_d0() {}
-unk32 ActorShopItemPotion::vfunc_d0() {}
-
-void func_ov031_02180418(unk32 param_1); \ No newline at end of file
+static const char *sShipTypes[8] = {
+ [7] = "brg", [6] = "fnl", [5] = "pdl", [4] = "dco", [3] = "can", [2] = "hul", [1] = "bow", [0] = "anc"};
+
+ActorType ActorShopItemDM::gType = ActorType(ActorTypeId_ShopItemDM, (ActorCreateFunc) ActorShopItemDM::Create, NULL);
+ActorType ActorShopItemSoldOut::gType =
+ ActorType(ActorTypeId_ShopItemSoldOut, (ActorCreateFunc) ActorShopItemSoldOut::Create, NULL);
+ActorType ActorShopItemHeartContainer::gType =
+ ActorType(ActorTypeId_ShopItemHeartContainer, (ActorCreateFunc) ActorShopItemHeartContainer::Create, NULL);
+ActorType ActorShopItemArrows::gType =
+ ActorType(ActorTypeId_ShopItemArrows, (ActorCreateFunc) ActorShopItemArrows::Create, NULL);
+ActorType ActorShopItemBombs::gType = ActorType(ActorTypeId_ShopItemBombs, (ActorCreateFunc) ActorShopItemBombs::Create, NULL);
+ActorType ActorShopItemBombchus::gType =
+ ActorType(ActorTypeId_ShopItemBombchus, (ActorCreateFunc) ActorShopItemBombchus::Create, NULL);
+ActorType ActorShopItemQuiver::gType =
+ ActorType(ActorTypeId_ShopItemQuiver, (ActorCreateFunc) ActorShopItemQuiver::Create, NULL);
+ActorType ActorShopItemBombBag::gType =
+ ActorType(ActorTypeId_ShopItemBombBag, (ActorCreateFunc) ActorShopItemBombBag::Create, NULL);
+ActorType ActorShopItemBombchuBag::gType =
+ ActorType(ActorTypeId_ShopItemBombchuBag, (ActorCreateFunc) ActorShopItemBombchuBag::Create, NULL);
+ActorType ActorShopItemTreasure::gType =
+ ActorType(ActorTypeId_ShopItemTreasure, (ActorCreateFunc) ActorShopItemTreasure::Create, NULL);
+ActorType ActorShopItemShipPart::gType =
+ ActorType(ActorTypeId_ShopItemShipPart, (ActorCreateFunc) ActorShopItemShipPart::Create, NULL);
+ActorType ActorShopItemGem::gType = ActorType(ActorTypeId_ShopItemGem, (ActorCreateFunc) ActorShopItemGem::Create, NULL);
+ActorType ActorShopItemShield::gType =
+ ActorType(ActorTypeId_ShopItemShield, (ActorCreateFunc) ActorShopItemShield::Create, NULL);
+ActorType ActorShopItemPotion::gType =
+ ActorType(ActorTypeId_ShopItemPotion, (ActorCreateFunc) ActorShopItemPotion::Create, NULL);
+ActorType ActorShopItemBK::gType = ActorType(ActorTypeId_ShopItemBK, (ActorCreateFunc) ActorShopItemBK::Create, NULL);
+ActorType ActorShopItemCC::gType = ActorType(ActorTypeId_ShopItemCC, (ActorCreateFunc) ActorShopItemCC::Create, NULL);
+ActorType ActorShopItemBY::gType = ActorType(ActorTypeId_ShopItemBY, (ActorCreateFunc) ActorShopItemBY::Create, NULL);
+
+struct ShopItemPrice {
+ u32 price;
+ ShopItemPrice(u32 price) :
+ price(price) {}
+};
+static const ShopItemPrice sShopItemPrices[ShopItem_BASE_COUNT] = {
+ ShopItemPrice(0), // ShopItem_Test
+ ShopItemPrice(0), // ShopItem_SoldOut
+ ShopItemPrice(50), // ShopItem_Bombs
+ ShopItemPrice(50), // ShopItem_Arrows
+ ShopItemPrice(50), // ShopItem_Bombchus
+ ShopItemPrice(2000), // ShopItem_HeartContainer
+ ShopItemPrice(1000), // ShopItem_BombBag
+ ShopItemPrice(1000), // ShopItem_Quiver
+ ShopItemPrice(1000), // ShopItem_BombchuBag
+ ShopItemPrice(500), // ShopItem_ShipPart
+ ShopItemPrice(500), // ShopItem_Treasure
+ ShopItemPrice(500), // ShopItem_PowerGem
+ ShopItemPrice(500), // ShopItem_WisdomGem
+ ShopItemPrice(500), // ShopItem_CourageGem
+ ShopItemPrice(80), // ShopItem_Shield
+ ShopItemPrice(50), // ShopItem_RedPotion
+ ShopItemPrice(150), // ShopItem_PurplePotion
+ ShopItemPrice(150), // ShopItem_YellowPotion
+};
+
+static const char *sShopItemModelPaths[ShopItem_COUNT_WITH_UPGRADES] = {
+ [ShopItem_Test] = "Player/get/gd_test.nsbmd",
+ [ShopItem_SoldOut] = "Player/get/soldboard.nsbmd",
+ [ShopItem_Bombs] = "Player/get/gd_bmset.nsbmd",
+ [ShopItem_Arrows] = "Player/get/gd_arrowset.nsbmd",
+ [ShopItem_Bombchus] = "Player/get/gd_bomchu.nsbmd",
+ [ShopItem_HeartContainer] = "Player/get/gd_heart_utu.nsbmd",
+ [ShopItem_BombBag] = "Player/get/gd_bmbagM.nsbmd",
+ [ShopItem_Quiver] = "Player/get/gd_arrowpod.nsbmd",
+ [ShopItem_BombchuBag] = "Player/get/gd_bcbagM.nsbmd",
+ [ShopItem_ShipPart] = "Player/get/gd_ship.nsbmd",
+ [ShopItem_Treasure] = "Player/get/gd_test.nsbmd",
+ [ShopItem_PowerGem] = "Player/get/gd_minaY.nsbmd",
+ [ShopItem_WisdomGem] = "Player/get/gd_minaP.nsbmd",
+ [ShopItem_CourageGem] = "Player/get/gd_minaC.nsbmd",
+ [ShopItem_Shield] = "Player/get/gd_shA.nsbmd",
+ [ShopItem_RedPotion] = "Player/get/gd_rev_bin.nsbmd",
+ [ShopItem_PurplePotion] = "Player/get/gd_rev_binP.nsbmd",
+ [ShopItem_YellowPotion] = "Player/get/gd_rev_binY.nsbmd",
+ [ShopItem_LargeBombBag] = "Player/get/gd_bmbagL.nsbmd",
+ [ShopItem_LargeQuiver] = "Player/get/gd_arrowpodL.nsbmd",
+ [ShopItem_LargeBombchuBag] = "Player/get/gd_bcbagL.nsbmd",
+};
+
+static const char *sShopItemTexturePaths[ShopItem_COUNT_WITH_UPGRADES] = {
+ [ShopItem_Test] = "Player/get/gd_test.nsbtx",
+ [ShopItem_SoldOut] = "Player/get/soldboard.nsbtx",
+ [ShopItem_Bombs] = "Player/get/gd_bmset.nsbtx",
+ [ShopItem_Arrows] = "Player/get/gd_arrowset.nsbtx",
+ [ShopItem_Bombchus] = "Player/get/gd_bomchu.nsbtx",
+ [ShopItem_HeartContainer] = "Player/get/gd_heart_utu.nsbtx",
+ [ShopItem_BombBag] = "Player/get/gd_bmbagM.nsbtx",
+ [ShopItem_Quiver] = "Player/get/gd_arrowpod.nsbtx",
+ [ShopItem_BombchuBag] = "Player/get/gd_bcbagM.nsbtx",
+ [ShopItem_ShipPart] = "Player/get/gd_ship.nsbtx",
+ [ShopItem_Treasure] = "Player/get/gd_test.nsbtx",
+ [ShopItem_PowerGem] = "Player/get/gd_minaY.nsbtx",
+ [ShopItem_WisdomGem] = "Player/get/gd_minaP.nsbtx",
+ [ShopItem_CourageGem] = "Player/get/gd_minaC.nsbtx",
+ [ShopItem_Shield] = "Player/get/gd_shA.nsbtx",
+ [ShopItem_RedPotion] = "Player/get/gd_rev_bin.nsbtx",
+ [ShopItem_PurplePotion] = "Player/get/gd_rev_binP.nsbtx",
+ [ShopItem_YellowPotion] = "Player/get/gd_rev_binY.nsbtx",
+ [ShopItem_LargeBombBag] = "Player/get/gd_bmbagL.nsbtx",
+ [ShopItem_LargeQuiver] = "Player/get/gd_arrowpodL.nsbtx",
+ [ShopItem_LargeBombchuBag] = "Player/get/gd_bcbagL.nsbtx",
+};
+
+// clang-format off
+static const char sShopItemBaseNames[ShopItem_FULL_COUNT][16] = {
+ [ShopItem_Test] = "gd_test",
+ [ShopItem_SoldOut] = "soldboard",
+ [ShopItem_Bombs] = "gd_bmset",
+ [ShopItem_Arrows] = "gd_arrowset",
+ [ShopItem_Bombchus] = "gd_bomchu",
+ [ShopItem_HeartContainer] = "gd_heart_utu",
+ [ShopItem_BombBag] = "gd_bmbagM",
+ [ShopItem_Quiver] = "gd_arrowpod",
+ [ShopItem_BombchuBag] = "gd_bcbagM",
+ [ShopItem_ShipPart] = "gd_ship",
+ [ShopItem_Treasure] = "gd_test",
+ [ShopItem_CourageGem] = "gd_minaY",
+ [ShopItem_PowerGem] = "gd_minaP",
+ [ShopItem_WisdomGem] = "gd_minaC",
+ [ShopItem_Shield] = "gd_shA",
+ [ShopItem_RedPotion] = "gd_rev_bin",
+ [ShopItem_PurplePotion] = "gd_rev_binP",
+ [ShopItem_YellowPotion] = "gd_rev_binY",
+ [ShopItem_LargeBombBag] = "gd_bmbagL",
+ [ShopItem_LargeQuiver] = "gd_arrowpodL",
+ [ShopItem_LargeBombchuBag] = "gd_bcbagL",
+ [ShopItem_Ship] = "gd_ship",
+ [ShopItem_Ship2] = "gd_ship02",
+};
+// clang-format on
+
+static FileEntryFlag *sShopItemModelFiles[ShopItem_BASE_COUNT];
+static FileEntryFlag *sShopItemTextureFiles[ShopItem_BASE_COUNT];
+static FileEntryFlag *sShopItemShipModelFile;
+static FileEntryFlag *sShopItemShip2ModelFile;
+static FileEntryFlag *sShopItemShipTextureFile;
+static FileEntryFlag *sShopItemShip2TextureFile;
+static ModelRender *sSoldOutModel;
+static ModelRender *sShipModel;
+static ModelRender *sShip2Model;
+
+extern "C" s32 func_ov000_020bd728(FileEntry *, FileEntry *, unk32, unk32);
+extern "C" s32 *func_0201e24c(s32, const char *);
+ARM static ModelRender *func_ov031_0217dfec(FileEntry *param_1, FileEntry *param_2, const char *param_3) {
+ s32 temp_r0 = func_ov000_020bd728(param_1, param_2, 1, 0);
+ s32 temp_r4 = *func_0201e24c(temp_r0 + 8, param_3);
+ ItemModel *ptr = (ItemModel *) (temp_r0 + temp_r4);
+ return new(data_027e0ce0[1], 4) ModelRender(ptr);
+}
+
+ARM static void func_ov031_0217e040() {
+ for (s32 i = 0; i < ShopItem_BASE_COUNT; ++i) {
+ const char *modelPath;
+ const char *texturePath;
+ if (i == ShopItem_BombBag && gItemManager->mBombBagSize == 1) {
+ modelPath = sShopItemModelPaths[ShopItem_LargeBombBag];
+ texturePath = sShopItemTexturePaths[ShopItem_LargeBombBag];
+ } else if (i == ShopItem_Quiver && gItemManager->mQuiverSize == 1) {
+ modelPath = sShopItemModelPaths[ShopItem_LargeQuiver];
+ texturePath = sShopItemTexturePaths[ShopItem_LargeQuiver];
+ } else if (i == ShopItem_BombchuBag && gItemManager->mBombchuBagSize == 1) {
+ modelPath = sShopItemModelPaths[ShopItem_LargeBombchuBag];
+ texturePath = sShopItemTexturePaths[ShopItem_LargeBombchuBag];
+ } else {
+ modelPath = sShopItemModelPaths[i];
+ texturePath = sShopItemTexturePaths[i];
+ }
+
+ sShopItemModelFiles[i] = new(data_027e0ce0[1], 4) FileEntryFlag(modelPath);
+ sShopItemTextureFiles[i] = new(data_027e0ce0[1], 4) FileEntryFlag(texturePath);
+ }
+
+ sShopItemShipModelFile = new(data_027e0ce0[1], 4) FileEntryFlag("Player/get/gd_ship.nsbmd");
+ sShopItemShipTextureFile = new(data_027e0ce0[1], 4) FileEntryFlag("Player/get/gd_ship.nsbtx");
+ sShopItemShip2ModelFile = new(data_027e0ce0[1], 4) FileEntryFlag("Player/get/gd_ship02.nsbmd");
+ sShopItemShip2TextureFile = new(data_027e0ce0[1], 4) FileEntryFlag("Player/get/gd_ship02.nsbtx");
+ sSoldOutModel = func_ov031_0217dfec(sShopItemModelFiles[ShopItem_SoldOut], sShopItemTextureFiles[ShopItem_SoldOut],
+ sShopItemBaseNames[ShopItem_SoldOut]);
+}
+
+ARM static void func_ov031_0217e2b4() {
+ FileEntryFlag *temp_r0;
+ FileEntryFlag *temp_r0_2;
+ s32 i;
+
+ for (i = 0; i < ShopItem_BASE_COUNT; ++i) {
+ delete sShopItemModelFiles[i];
+ sShopItemModelFiles[i] = NULL;
+ delete sShopItemTextureFiles[i];
+ sShopItemTextureFiles[i] = NULL;
+ }
+ delete sShopItemShipModelFile;
+ sShopItemShipModelFile = NULL;
+ delete sShopItemShipTextureFile;
+ sShopItemShipTextureFile = NULL;
+ delete sShopItemShip2ModelFile;
+ sShopItemShip2ModelFile = NULL;
+ delete sShopItemShip2TextureFile;
+ sShopItemShip2TextureFile = NULL;
+ delete sSoldOutModel;
+ sSoldOutModel = NULL;
+}
+
+ARM ActorShopItemBase::ActorShopItemBase() :
+ mShopItemId(0),
+ mUnk_15c(0),
+ mUnk_15d(0),
+ mUnk_15e(0) {}
+
+ARM ActorShopItem::ActorShopItem() :
+ mModel(NULL),
+ mItemId(ItemId_None),
+ mUnk_168(0),
+ mUnk_16a(0),
+ mUnk_16c(0),
+ mUnk_16e(0),
+ mUnk_170(0),
+ mUnk_172(0),
+ mUnk_174(0),
+ mUnk_175(0) {}
+
+struct UnkStruct_ov031_0217e460 {
+ /* 00 */ unk32 mUnk_00;
+ /* 04 */ unk32 mUnk_04;
+ /* 08 */ unk32 mUnk_08;
+ /* 0c */ unk32 mUnk_0c;
+ /* 10 */ u8 mUnk_10;
+ /* 14 */
+};
+
+ARM ActorShopItemShipPart::ActorShopItemShipPart() :
+ mUnk_17c(NULL),
+ mUnk_180(-1) {
+ static const UnkStruct_ov031_0217e460 unk = {0x4000, 0x1000, 0xc00, 0x500, 0};
+
+ mUnk_17c = new(data_027e0ce0[1], 4) ActorShopItemCollectable_Unk1();
+ mUnk_17c->func_ov000_02079f5c(unk.mUnk_00, unk.mUnk_04, unk.mUnk_08, unk.mUnk_0c, unk.mUnk_10, 0);
+}
+
+ARM ActorShopItemTreasure::ActorShopItemTreasure() :
+ mUnk_178(NULL),
+ mUnk_17c(-1) {
+ static const UnkStruct_ov031_0217e460 unk = {0x4000, 0x1000, 0xc00, 0x500, 0};
+
+ mUnk_178 = new(data_027e0ce0[1], 4) ActorShopItemCollectable_Unk1();
+ mUnk_178->func_ov000_02079f5c(unk.mUnk_00, unk.mUnk_04, unk.mUnk_08, unk.mUnk_0c, unk.mUnk_10, 0);
+}
+
+ARM ActorShopItemUnk::ActorShopItemUnk() :
+ mUnk_160(128),
+ mUnk_164(0) {}
+
+ARM ActorShopItemBY::ActorShopItemBY() {}
+
+ARM ActorShopItemBase::~ActorShopItemBase() {}
+
+ARM ActorShopItem::~ActorShopItem() {
+ if (mModel != NULL) {
+ delete mModel;
+ mModel = NULL;
+ }
+}
+
+ARM ActorShopItemSoldOut::~ActorShopItemSoldOut() {
+ mModel = NULL;
+}
+
+ARM ActorShopItemShipPart::~ActorShopItemShipPart() {
+ delete mUnk_17c;
+ mUnk_17c = NULL;
+ if (mUnk_178 != NULL) {
+ delete mUnk_178;
+ mUnk_178 = NULL;
+ }
+ mModel = NULL;
+ if (sShipModel != NULL) {
+ delete sShipModel;
+ sShipModel = NULL;
+ }
+ if (sShip2Model != NULL) {
+ delete sShip2Model;
+ sShip2Model = NULL;
+ }
+}
+
+ARM ActorShopItemTreasure::~ActorShopItemTreasure() {
+ delete mUnk_178;
+ mUnk_178 = NULL;
+}
+
+ARM void ActorShopItem::vfunc_d4() {
+ const char *baseName;
+ ShopItem id = mShopItemId;
+ if ((id == 6) && (gItemManager->mBombBagSize == 1)) {
+ baseName = sShopItemBaseNames[ShopItem_LargeBombBag];
+ } else if ((id == 7) && (gItemManager->mQuiverSize == 1)) {
+ baseName = sShopItemBaseNames[ShopItem_LargeQuiver];
+ } else if ((id == 8) && (gItemManager->mBombchuBagSize == 1)) {
+ baseName = sShopItemBaseNames[ShopItem_LargeBombchuBag];
+ } else {
+ baseName = sShopItemBaseNames[id];
+ }
+ mModel = func_ov031_0217dfec(sShopItemModelFiles[id], sShopItemTextureFiles[id], baseName);
+}
+
+ARM void ActorShopItemDM::vfunc_d4() {
+ mModel = NULL;
+ mUnk_175 = 1;
+ mVisible = false;
+}
+
+ARM void ActorShopItemSoldOut::vfunc_d4() {
+ mModel = sSoldOutModel;
+ mUnk_175 = 1;
+}
+
+extern ItemModel **data_027e1058;
+extern "C" ItemModel *func_ov009_0211c020(ItemModel **, unk32, unk32, unk32, ActorShopItemCollectable_Unk1 *);
+ARM void ActorShopItemShipPart::vfunc_d4() {
+ ItemModel **dVar1 = data_027e1058;
+ unk32 uVar2 = this->func_ov031_02180248();
+ unk32 uVar3 = this->func_ov031_02180260();
+ ItemModel *pIVar4 = func_ov009_0211c020(dVar1, uVar2, uVar3, 0, mUnk_17c);
+ mUnk_178 = new(data_027e0ce0[1], 4) ModelRender(pIVar4);
+ if (sShipModel == NULL) {
+ sShipModel = func_ov031_0217dfec(sShopItemShipModelFile, sShopItemShipTextureFile, sShopItemBaseNames[ShopItem_Ship]);
+ }
+ mModel = sShipModel;
+ if (sShip2Model == NULL) {
+ sShip2Model =
+ func_ov031_0217dfec(sShopItemShip2ModelFile, sShopItemShip2TextureFile, sShopItemBaseNames[ShopItem_Ship2]);
+ }
+}
+
+extern ItemModel **data_027e105c;
+extern "C" ItemModel *LoadTreasureItemFanfare(ItemModel **, unk32, unk32, ActorShopItemCollectable_Unk1 *);
+ARM void ActorShopItemTreasure::vfunc_d4() {
+ ItemModel **dVar1 = data_027e105c;
+ unk32 treasureIndex = ActorShopItemTreasure::func_ov031_02180278();
+ ItemModel *pIVar2 = LoadTreasureItemFanfare(dVar1, treasureIndex, 0, mUnk_178);
+ mModel = new(data_027e0ce0[1], 4) ModelRender(pIVar2);
+}
+
+ARM bool ActorShopItemBase::Init() {
+ return Actor::Init();
+}
+
+ARM bool ActorShopItem::Init() {
+ this->vfunc_d4();
+ return ActorShopItemBase::Init();
+}
+
+ARM bool ActorShopItemDM::Init() {
+ mShopItemId = ShopItem_Test;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemSoldOut::Init() {
+ mShopItemId = ShopItem_SoldOut;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemHeartContainer::Init() {
+ mShopItemId = ShopItem_HeartContainer;
+ mItemId = ItemId_HeartContainer;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemArrows::Init() {
+ mShopItemId = ShopItem_Arrows;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemQuiver::Init() {
+ mShopItemId = ShopItem_Quiver;
+ mItemId = ItemId_Quiver;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemBombs::Init() {
+ mShopItemId = ShopItem_Bombs;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemBombBag::Init() {
+ mShopItemId = ShopItem_BombBag;
+ mItemId = ItemId_BigBombBag;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemBombchus::Init() {
+ mShopItemId = ShopItem_Bombchus;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemBombchuBag::Init() {
+ mShopItemId = ShopItem_BombchuBag;
+ mItemId = ItemId_BigBombchuBag;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemShipPart::Init() {
+ mUnk_180 = mUnk_140;
+ mShopItemId = ShopItem_ShipPart;
+ mItemId = ItemId_Unk_43;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemTreasure::Init() {
+ mUnk_17c = mUnk_140;
+ mShopItemId = ShopItem_Treasure;
+ mItemId = this->func_ov031_02180278() + ItemId_TREASURE_START;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemGem::Init() {
+ switch (mUnk_140) {
+ case Gem_Power:
+ mItemId = ItemId_PowerGem;
+ mShopItemId = ShopItem_PowerGem;
+ break;
+ case Gem_Wisdom:
+ mItemId = ItemId_WisdomGem;
+ mShopItemId = ShopItem_WisdomGem;
+ break;
+ case Gem_Courage:
+ mItemId = ItemId_CourageGem;
+ mShopItemId = ShopItem_CourageGem;
+ break;
+ }
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemShield::Init() {
+ mShopItemId = ShopItem_Shield;
+ mItemId = ItemId_WoodenShield;
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemPotion::Init() {
+ switch (mUnk_140) {
+ case Potion_Yellow - 1:
+ mShopItemId = ShopItem_YellowPotion;
+ mItemId = ItemId_YellowPotion;
+ break;
+ case Potion_Purple - 1:
+ mShopItemId = ShopItem_PurplePotion;
+ mItemId = ItemId_PurplePotion;
+ break;
+ case Potion_Red - 1:
+ default:
+ mShopItemId = ShopItem_RedPotion;
+ mItemId = ItemId_RedPotion;
+ break;
+ }
+ return ActorShopItem::Init();
+}
+
+ARM bool ActorShopItemUnk::Init() {
+ mShopItemId = ShopItem_Unk;
+ return ActorShopItemBase::Init();
+}
+
+ARM void ActorShopItemBase::vfunc_14(u32 param1) {
+ if (this->func_ov00_020c313c(param1)) {
+ mUnk_15e = false;
+ if (!mUnk_15c && this->vfunc_b4()) {
+ mUnk_15d = true;
+ } else if (mUnk_15d == true && !gTouchControl.mTouch) {
+ mUnk_15d = false;
+ mUnk_15e = true;
+ }
+ mUnk_15c = gTouchControl.mTouch;
+ }
+ mUnk_0a4.func_ov000_0207a1c8(param1, &mPos);
+}
+
+extern "C" UnkStruct_ov031_02183e80 *func_ov031_0217bdb8();
+
+ARM void ActorShopItem::vfunc_14(u32 param1) {
+ Vec3p subroutine_arg0;
+ Vec3p sp24;
+ Vec3p *temp_r0;
+ Vec3p *temp_r0_2;
+ UnkStruct_027e0f64_04 *temp_r3;
+
+ if ((this->func_ov00_020c313c(param1) != 0) && (func_ov031_0217bdb8()->mUnk_19a == 0)) {
+ temp_r3 = data_027e0f64->mUnk_8;
+ sp24 = temp_r3->mUnk_260;
+ sp24.y = FLOAT_TO_Q20(2.3);
+ sp24.z -= FLOAT_TO_Q20(0.45);
+ subroutine_arg0 = sp24;
+ Vec3p_Sub(&subroutine_arg0, &mUnk_014, &subroutine_arg0);
+ Vec3p_Normalize(&subroutine_arg0, &subroutine_arg0);
+ if (mUnk_174 == 1) {
+ Vec3p_Scale(&subroutine_arg0, FLOAT_TO_Q20(0.25));
+ temp_r0 = &mPos;
+ Vec3p_Add(temp_r0, &subroutine_arg0, temp_r0);
+ if (mPos.y >= sp24.y) {
+ mPos = sp24;
+ }
+ } else {
+ Vec3p_Scale(&subroutine_arg0, -FLOAT_TO_Q20(0.25));
+ temp_r0_2 = &mPos;
+ Vec3p_Add(temp_r0_2, &subroutine_arg0, temp_r0_2);
+ if (mPos.y <= mUnk_014.y) {
+ mPos = mUnk_014;
+ }
+ }
+ }
+ ActorShopItemBase::vfunc_14(param1);
+}
+
+ARM void ActorShopItemShipPart::vfunc_14(u32 param1) {
+ if (func_ov031_0217bdb8()->mUnk_19a != 0 && mUnk_174 == true) {
+ mModel = mUnk_178;
+ mPos.x = 0;
+ mPos.y = FLOAT_TO_Q20(10.0);
+ mPos.z = 0;
+ } else {
+ mModel = sShipModel;
+ }
+ ActorShopItem::vfunc_14(param1);
+}
+
+ARM void ActorShopItemUnk::vfunc_14(u32 param1) {
+ if (this->func_ov00_020c313c(param1)) {
+ if (mUnk_164) {
+ mUnk_160 -= 0x10;
+ if (mUnk_160 < 0) {
+ mUnk_160 = 0;
+ }
+ } else {
+ mUnk_160 += 0x10;
+ if (mUnk_160 > 0x80) {
+ mUnk_160 = 0x80;
+ }
+ }
+ }
+ ActorShopItemBase::vfunc_14(param1);
+}
+
+ARM void ActorShopItemBase::vfunc_18(u32 param1) {
+ this->vfunc_14(param1);
+}
+
+ARM void ActorShopItem::vfunc_c8() {
+ this->func_ov031_0217f0b4();
+}
+
+ARM void ActorShopItem::vfunc_cc() {}
+
+ARM void ActorShopItem::func_ov031_0217f0b4() {
+ if (!mUnk_175) {
+ return;
+ }
+ q20 z = mUnk_014.z;
+ q20 y = mUnk_014.y;
+ q20 x = mUnk_014.x;
+ mPos.x = x;
+ mPos.y = y;
+ mPos.z = z;
+ mUnk_174 = false;
+ mShopItemId = ShopItem_SoldOut;
+}
+
+ARM u32 ActorShopItem::GetPitch() {
+ return data_027e0c54.mUnk_0 ? 0xdd28 : 0;
+}
+
+ARM u32 ActorShopItem::GetYaw() {
+ return 0;
+}
+
+ARM static void func_ov031_0217f114(void *self) {
+ ((ActorShopItem *) self)->func_ov031_0217f120();
+}
+
+extern "C" void func_020197bc(void *, unk32);
+ARM void ActorShopItem::func_ov031_0217f120() {
+ unk32 uVar1;
+ void *lcdc;
+ ModelRender *model;
+ Vec3p scale;
+ Mat3p rotation;
+ Mat3p rz;
+ Mat3p ry;
+ Mat3p rx;
+
+ model = mShopItemId == ShopItem_SoldOut ? sSoldOutModel : mModel;
+ uVar1 = data_ov000_020e9360.func_ov000_02079e68(2);
+ lcdc = mModel->GetLcdcAddress();
+ func_020197bc(lcdc, uVar1);
+ if (mUnk_174 == true) {
+ mUnk_168 = *(vu16 *) &mUnk_168;
+ mUnk_16a = *(vu16 *) &mUnk_16a;
+ mUnk_16c = *(vu16 *) &mUnk_16c;
+ mUnk_16e = *(vu16 *) &mUnk_16e;
+ mUnk_170 += 400;
+ mUnk_172 = *(vu16 *) &mUnk_172;
+ } else {
+ mUnk_168 = 0;
+ mUnk_16a = 0;
+ mUnk_16c = 0;
+ mUnk_16e = 0;
+ mUnk_170 = 0;
+ mUnk_172 = 0;
+ }
+
+ Mat3p_InitIdentity(&rotation);
+
+ Mat3p_InitXRotation(&rx, SIN(mUnk_168), COS(mUnk_168));
+ Mat3p_Multiply(&rx, &rotation, &rotation);
+ Mat3p_InitYRotation(&ry, SIN(mUnk_16a), COS(mUnk_16a));
+ Mat3p_Multiply(&ry, &rotation, &rotation);
+ Mat3p_InitZRotation(&rz, SIN(mUnk_16c), COS(mUnk_16c));
+ Mat3p_Multiply(&rz, &rotation, &rotation);
+
+ Mat3p_InitYRotation(&ry, SIN(this->GetYaw()), COS(this->GetYaw()));
+ Mat3p_Multiply(&ry, &rotation, &rotation);
+ Mat3p_InitXRotation(&rx, SIN(this->GetPitch()), COS(this->GetPitch()));
+ Mat3p_Multiply(&rx, &rotation, &rotation);
+
+ Mat3p_InitXRotation(&rx, SIN(mUnk_16e), COS(mUnk_16e));
+ Mat3p_Multiply(&rx, &rotation, &rotation);
+ Mat3p_InitYRotation(&ry, SIN(mUnk_170), COS(mUnk_170));
+ Mat3p_Multiply(&ry, &rotation, &rotation);
+ Mat3p_InitZRotation(&rz, SIN(mUnk_172), COS(mUnk_172));
+ Mat3p_Multiply(&rz, &rotation, &rotation);
+
+ scale.x = FLOAT_TO_Q20(1.6);
+ scale.y = FLOAT_TO_Q20(1.6);
+ scale.z = FLOAT_TO_Q20(1.6);
+
+ model->SetTransform(&scale, &rotation, &mPos);
+}
+
+ARM void ActorShopItem::vfunc_20(bool param1) {
+ if (data_027e0c54.mUnk_0 && !param1) {
+ return;
+ }
+ if (!mVisible) {
+ return;
+ }
+ data_ov000_020e9c88.func_ov000_0207b89c(param1, &mPos, &func_ov031_0217f114, this);
+}
+
+extern "C" unk32 func_ov031_0217bda0();
+extern "C" unk32 func_ov031_0217bdac();
+extern "C" void CopySingle288(void *src, void *dest);
+extern "C" void func_ov009_0211d090(Vec3p *, Vec3p *);
+extern "C" void func_ov009_0211d00c(Mat3p *, Vec3p *);
+ARM void ActorShopItemShipPart::vfunc_20(bool param1) {
+ if (data_027e0c54.mUnk_0 && !param1) {
+ return;
+ }
+ if (mUnk_174 == true && mModel == mUnk_178) {
+ func_ov031_0217bdb8();
+ unk32 size = func_ov031_0217bda0();
+ UnkStruct_027e0f64_04 *unk1 = data_027e0f64->func_ov000_0208b180();
+ Mat4x3p MStack_44 = unk1->mUnk_01c;
+ Mat3p tempMatrix;
+ CopySingle288(&MStack_44, &tempMatrix);
+ Mat3p rotation2;
+ Mat3p_func_01ff83a0(&tempMatrix, &rotation2);
+ func_ov031_0217bdb8();
+ Vec3p translation;
+ translation.z = -func_ov031_0217bdac();
+ translation.x = 0;
+ translation.y = 0;
+ Mat3p_MultiplyVec(&translation, &rotation2, &translation);
+ Vec3p_Add(&translation, &unk1->mUnk_260, &translation);
+ Vec3p scale2;
+ scale2.x = size;
+ scale2.y = size;
+ scale2.z = size;
+ sShip2Model->SetTransform(&scale2, &rotation2, &translation);
+
+ Vec3p tempVec = func_ov031_0217bdb8()->mUnk_178;
+ translation = tempVec;
+ Vec3p_Add(&mPos, &translation, &translation);
+ Vec3p scale;
+ func_ov009_0211d090(&scale, &tempVec);
+ Mat3p rotation;
+ func_ov009_0211d00c((Mat3p *) &rotation, &tempVec);
+ mModel->SetTransform(&scale, (Mat3p *) &rotation, &translation);
+ } else {
+ ActorShopItem::vfunc_20(param1);
+ }
+}
+
+ARM void ActorShopItemDM::vfunc_20(bool param1) {}
+
+ARM void ActorShopItemUnk::vfunc_20(bool param1) {}
+
+extern "C" void func_020349cc(unk32, unk32, unk32, unk32, unk32, unk32);
+extern "C" void func_0203493c(unk32, unk32, unk32, unk32, unk32);
+ARM void ActorShopItemBK::vfunc_1c(u16 *param1) {
+ if (data_027e0e28.func_ov000_0207bc48() == 0) {
+ return;
+ }
+ if (mUnk_160 >= 0x40) {
+ return;
+ }
+ if ((*param1 & 2) == 0) {
+ return;
+ }
+ if (mUnk_15d && this->vfunc_b4()) {
+ func_020349cc(0x5c, 4, 2, 0, mUnk_160 + 4, 0);
+ } else {
+ func_0203493c(0x5c, 2, 0, mUnk_160, 0);
+ }
+}
+
+ARM void ActorShopItemCC::vfunc_1c(u16 *param1) {
+ if (data_027e0e28.func_ov000_0207bc48() == 0) {
+ return;
+ }
+ if (mUnk_160 >= 0x40) {
+ return;
+ }
+ if ((*param1 & 2) == 0) {
+ return;
+ }
+ if (mUnk_15d && this->vfunc_b4()) {
+ func_020349cc(0x5c, 4, 1, 0, mUnk_160 + 4, 0);
+ } else {
+ func_0203493c(0x5c, 1, 0, mUnk_160, 0);
+ }
+}
+
+ARM void ActorShopItemBY::vfunc_1c(u16 *param1) {
+ if (data_027e0e28.func_ov000_0207bc48() == 0) {
+ return;
+ }
+ if (mUnk_160 >= 0x40) {
+ return;
+ }
+ if ((*param1 & 2) == 0) {
+ return;
+ }
+ if (mUnk_15d && this->vfunc_b4()) {
+ func_020349cc(0x5c, 3, 0, 0, mUnk_160 + 4, 0);
+ } else {
+ func_0203493c(0x5c, 0, 0, mUnk_160, 0);
+ }
+}
+
+struct UnkStruct_ov031_02183e84 {
+ /* 000 */ PAD(0x000, 0x470);
+ /* 470 */ unk32 mUnk_470;
+ /* 474 */
+};
+extern UnkStruct_ov031_02183e84 *func_ov031_0217cf1c();
+ARM unk32 ActorShopItem::GetSoldOutMessageId() {
+ if (func_ov031_0217cf1c()->mUnk_470 == 2) {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x57);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xff);
+ }
+}
+
+ARM unk32 ActorShopItemDM::GetMessageId() {
+ return 0;
+}
+
+ARM unk32 ActorShopItemSoldOut::GetMessageId() {
+ return ActorShopItem::GetSoldOutMessageId();
+}
+
+ARM unk32 ActorShopItemHeartContainer::GetMessageId() {
+ if (func_ov031_0217cf1c()->mUnk_470 == 2) {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x44);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x8e);
+ }
+}
+
+ARM unk32 ActorShopItemArrows::GetMessageId() {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x47);
+}
+
+ARM unk32 ActorShopItemQuiver::GetMessageId() {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x43);
+}
+
+ARM unk32 ActorShopItemBombs::GetMessageId() {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x42);
+}
+
+extern "C" bool HasFreebieCard();
+ARM unk32 ActorShopItemBombBag::GetMessageId() {
+ unk32 unk = func_ov031_0217cf1c()->mUnk_470;
+ if (unk == 2) {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x48);
+ } else if (HasFreebieCard()) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x12d);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xf8);
+ }
+}
+
+ARM unk32 ActorShopItemBombchus::GetMessageId() {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x45);
+}
+
+ARM unk32 ActorShopItemBombchuBag::GetMessageId() {
+ switch (func_ov031_0217cf1c()->mUnk_470) {
+ case 2:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x49);
+ case 1:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x8e);
+ case 0:
+ default:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xf8);
+ }
+}
+
+ARM unk32 ActorShopItemShipPart::GetMessageId() {
+ switch (func_ov031_0217cf1c()->mUnk_470) {
+ case 2:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x46);
+ case 0:
+ if (HasFreebieCard()) {
+ if (mUnk_180 == 0) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x12e);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x12f);
+ }
+ } else if (mUnk_180 == 0) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xf9);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xfa);
+ }
+ case 1:
+ if (mUnk_180 == 0) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x8f);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x90);
+ }
+ default:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xf9);
+ }
+}
+
+ARM unk32 ActorShopItemTreasure::GetMessageId() {
+ switch (func_ov031_0217cf1c()->mUnk_470) {
+ case 2:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4a);
+ case 0:
+ if (HasFreebieCard()) {
+ if (mUnk_17c == 0) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x130);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x131);
+ }
+ } else if (mUnk_17c == 0) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xfb);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xfc);
+ }
+ case 1:
+ if (mUnk_17c == 0) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x91);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x92);
+ }
+ default:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xfb);
+ }
+}
+
+ARM unk32 ActorShopItemGem::GetMessageId() {
+ switch (func_ov031_0217cf1c()->mUnk_470) {
+ case 2:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4b);
+ case 0:
+ if (HasFreebieCard()) {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x132);
+ } else {
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xfd);
+ }
+ case 1:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x93);
+ default:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0xfd);
+ }
+}
+
+ARM unk32 ActorShopItemShield::GetMessageId() {
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4c);
+}
+
+ARM unk32 ActorShopItemPotion::GetMessageId() {
+ int iVar1;
+
+ if (func_ov031_0217cf1c()->mUnk_470 == 2) {
+ switch (mShopItemId) {
+ case ShopItem_RedPotion:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4d);
+ case ShopItem_PurplePotion:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4e);
+ case ShopItem_YellowPotion:
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4f);
+ }
+ } else {
+ if (HasFreebieCard()) {
+ switch (mShopItemId) {
+ case ShopItem_RedPotion:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x10f);
+ case ShopItem_PurplePotion:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x110);
+ case ShopItem_YellowPotion:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x111);
+ }
+ }
+ switch (mShopItemId) {
+ case ShopItem_RedPotion:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x10c);
+ case ShopItem_PurplePotion:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x10d);
+ case ShopItem_YellowPotion:
+ return BMG_ID(BMG_FILE_INDEX_SHIP, 0x10e);
+ }
+ }
+ return BMG_ID(BMG_FILE_INDEX_FIELD, 0x4d);
+}
+
+ARM s32 ActorShopItem::GetPrice() {
+ return sShopItemPrices[mShopItemId].price;
+}
+
+ARM s32 ActorShopItemHeartContainer::GetPrice() {
+ if (func_ov031_0217cf1c()->mUnk_470 == 1) {
+ return 1500;
+ } else {
+ return 2000;
+ }
+}
+
+ARM s32 ActorShopItemPotion::GetPrice() {
+ if (func_ov031_0217cf1c()->mUnk_470 != 2) {
+ if (mShopItemId == ShopItem_RedPotion) {
+ return 80;
+ } else {
+ return 200;
+ }
+ }
+ return ActorShopItem::GetPrice();
+}
+
+extern "C" unk32 func_ov009_0211c980(unk32, unk32);
+ARM s32 ActorShopItemShipPart::GetPrice() {
+ unk32 uVar1;
+ unk32 uVar2;
+ int iVar3;
+ u16 local_18[4] = {150, 600, 1500, 7000};
+
+ uVar1 = this->func_ov031_02180248();
+ uVar2 = this->func_ov031_02180260();
+ iVar3 = func_ov009_0211c980(uVar1, uVar2);
+ return (int) (short) local_18[iVar3];
+}
+
+ARM s32 ActorShopItemTreasure::GetPrice() {
+ unk32 unk = mUnk_17c;
+ return func_ov031_0217bdb8()->mUnk_038[unk];
+}
+
+extern "C" unk32 func_ov031_0217ce6c();
+ARM unk32 ActorShopItem::vfunc_c0() {
+ s32 price = this->GetPrice();
+ func_ov031_0217bdb8();
+ unk32 unk = (price * (10 - func_ov031_0217ce6c()) / 10 + 5) / 10 * 10;
+ if (unk < 10) {
+ unk = 10;
+ }
+ return unk;
+}
+
+ARM void ActorShopItem::vfunc_c4() {
+ if (mItemId == ItemId_None) {
+ return;
+ }
+ if (func_ov031_0217bdb8()->func_ov031_0217bd80()) {
+ mUnk_175 = true;
+ }
+}
+
+ARM void ActorShopItemHeartContainer::vfunc_c4() {
+ switch (func_ov031_0217cf1c()->mUnk_470) {
+ case 2:
+ gAdventureFlags->Set(AdventureFlag_Unk_103, true);
+ break;
+ case 0:
+ gAdventureFlags->Set(AdventureFlag_Unk_104, true);
+ break;
+ case 1:
+ gAdventureFlags->Set(AdventureFlag_Unk_104, true);
+ break;
+ default:
+ return;
+ }
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemArrows::vfunc_c4() {
+ gItemManager->GiveAmmo(ItemFlag_Bow, 10);
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemQuiver::vfunc_c4() {
+ gAdventureFlags->Set(AdventureFlag_Unk_107, true);
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemBombs::vfunc_c4() {
+ gItemManager->GiveAmmo(ItemFlag_BombBag, 10);
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemBombBag::vfunc_c4() {
+ gAdventureFlags->Set(AdventureFlag_Unk_106, true);
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemBombchus::vfunc_c4() {
+ gItemManager->GiveAmmo(ItemFlag_BombchuBag, 10);
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemBombchuBag::vfunc_c4() {
+ gAdventureFlags->Set(AdventureFlag_Unk_108, true);
+ ActorShopItem::vfunc_c4();
+}
+
+extern "C" void GiveShipPart(ShipPart part, ShipType type);
+ARM void ActorShopItemShipPart::vfunc_c4() {
+ ShipPart part = this->func_ov031_02180248();
+ ShipType type = this->func_ov031_02180260();
+ GiveShipPart(part, type);
+ if (func_ov031_0217bdb8()->func_ov031_0217bd80()) {
+ data_027e0dbc.func_ov003_020f3d74(mUnk_180 + 8);
+ }
+ ActorShopItem::vfunc_c4();
+}
+
+extern "C" void func_ov009_0211cac0(u32);
+ARM void ActorShopItemTreasure::vfunc_c4() {
+ unk32 unk = this->func_ov031_02180278();
+ func_ov009_0211cac0(unk);
+ if (func_ov031_0217bdb8()->func_ov031_0217bd80()) {
+ data_027e0dbc.func_ov003_020f3d74(mUnk_17c + 5);
+ }
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemGem::vfunc_c4() {
+ switch (func_ov031_0217cf1c()->mUnk_470) {
+ case 2:
+ gAdventureFlags->Set(AdventureFlag_Unk_105, true);
+ break;
+ case 0:
+ gAdventureFlags->Set(AdventureFlag_Unk_109, true);
+ break;
+ case 1:
+ gAdventureFlags->Set(AdventureFlag_Unk_113, true);
+ break;
+ default:
+ return;
+ }
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemShield::vfunc_c4() {
+ ActorShopItem::vfunc_c4();
+}
+
+ARM void ActorShopItemPotion::vfunc_c4() {
+ ActorShopItem::vfunc_c4();
+}
+
+extern "C" bool func_0202b8f8(Vec3p *, s32, s32, s32, unk8);
+ARM bool ActorShopItemBase::vfunc_b4() {
+ if (!gTouchControl.mTouch) {
+ return false;
+ }
+ return func_0202b8f8(&mPos, 0x4cd, gTouchControl.mTouchX, gTouchControl.mTouchY, 1);
+}
+
+extern "C" bool func_02034b90(unk32, unk32, s32, s32);
+ARM bool ActorShopItemBK::vfunc_b4() {
+ if (mUnk_160 != 0 || !mUnk_164) {
+ return false;
+ }
+ if (!gTouchControl.mTouch) {
+ return false;
+ }
+ return func_02034b90(0x5c, 2, gTouchControl.mTouchX, gTouchControl.mTouchY);
+}
+
+ARM bool ActorShopItemCC::vfunc_b4() {
+ if (mUnk_160 != 0 || !mUnk_164) {
+ return false;
+ }
+ if (!gTouchControl.mTouch) {
+ return false;
+ }
+ return func_02034b90(0x5c, 1, gTouchControl.mTouchX, gTouchControl.mTouchY);
+}
+
+ARM bool ActorShopItemBY::vfunc_b4() {
+ if (mUnk_160 != 0 || !mUnk_164) {
+ return false;
+ }
+ if (!gTouchControl.mTouch) {
+ return false;
+ }
+ return func_02034b90(0x5c, 0, gTouchControl.mTouchX, gTouchControl.mTouchY);
+}
+
+ARM bool ActorShopItemBase::vfunc_b8() {
+ if (!mUnk_15e) {
+ return false;
+ }
+ return func_0202b8f8(&mPos, 0x4cd, gTouchControl.mTouchLastX, gTouchControl.mTouchLastY, 1);
+}
+
+ARM bool ActorShopItemBK::vfunc_b8() {
+ if (!mUnk_15e) {
+ return false;
+ }
+ return func_02034b90(0x5c, 2, gTouchControl.mTouchLastX, gTouchControl.mTouchLastY);
+}
+
+ARM bool ActorShopItemCC::vfunc_b8() {
+ if (!mUnk_15e) {
+ return false;
+ }
+ return func_02034b90(0x5c, 1, gTouchControl.mTouchLastX, gTouchControl.mTouchLastY);
+}
+
+ARM bool ActorShopItemBY::vfunc_b8() {
+ if (!mUnk_15e) {
+ return false;
+ }
+ return func_02034b90(0x5c, 0, gTouchControl.mTouchLastX, gTouchControl.mTouchLastY);
+}
+
+ARM unk32 ActorShopItemShipPart::func_ov031_02180248() {
+ s32 unk = mUnk_180;
+ return func_ov031_0217bdb8()->mUnk_01c[unk];
+}
+
+ARM unk32 ActorShopItemShipPart::func_ov031_02180260() {
+ s32 unk = mUnk_180;
+ return func_ov031_0217bdb8()->mUnk_024[unk];
+}
+
+ARM unk32 ActorShopItemTreasure::func_ov031_02180278() {
+ s32 unk = mUnk_17c;
+ return func_ov031_0217bdb8()->mUnk_02c[unk];
+}
+
+ARM bool ActorShopItemDM::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemSoldOut::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemHeartContainer::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemArrows::vfunc_d0() {
+ ItemManager *pItemManager = gItemManager;
+ return (s32) pItemManager->GetAmmo(ItemFlag_Bow) >= pItemManager->GetMaxAmmo(ItemFlag_Bow);
+}
+
+ARM bool ActorShopItemQuiver::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemBombs::vfunc_d0() {
+ ItemManager *pItemManager = gItemManager;
+ return (s32) pItemManager->GetAmmo(ItemFlag_BombBag) >= pItemManager->GetMaxAmmo(ItemFlag_BombBag);
+}
+
+ARM bool ActorShopItemBombBag::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemBombchus::vfunc_d0() {
+ ItemManager *pItemManager = gItemManager;
+ return (s32) pItemManager->GetAmmo(ItemFlag_BombchuBag) >= pItemManager->GetMaxAmmo(ItemFlag_BombchuBag);
+}
+
+ARM bool ActorShopItemBombchuBag::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemShipPart::vfunc_d0() {
+ ItemManager *pItemManager = gItemManager;
+ ShipPart part = this->func_ov031_02180248();
+ ShipType type = this->func_ov031_02180260();
+ return pItemManager->GetShipPartCount(part, type) >= pItemManager->GetMaxShipPartCount();
+}
+
+ARM bool ActorShopItemTreasure::vfunc_d0() {
+ ItemManager *pItemManager = gItemManager;
+ Treasure treasure = this->func_ov031_02180278();
+ return pItemManager->GetTreasureCount(treasure) >= pItemManager->GetMaxTreasureCount();
+}
+
+ARM bool ActorShopItemGem::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemShield::vfunc_d0() {
+ return false;
+}
+
+ARM bool ActorShopItemPotion::vfunc_d0() {
+ return false;
+}
+
+void ActorShopItemUnk::func_ov031_02180418() {
+ if (func_ov031_0217bdb8()->func_ov031_0217cec0()) {
+ return;
+ }
+ mUnk_164 = true;
+}
+
+ActorShopItemBY::~ActorShopItemBY() {}
+ActorShopItemCC::~ActorShopItemCC() {}
+ActorShopItemBK::~ActorShopItemBK() {}
+ActorShopItemUnk::~ActorShopItemUnk() {}
+ActorShopItemPotion::~ActorShopItemPotion() {}
+ActorShopItemShield::~ActorShopItemShield() {}
+ActorShopItemGem::~ActorShopItemGem() {}
+ActorShopItemBombchuBag::~ActorShopItemBombchuBag() {}
+ActorShopItemBombchus::~ActorShopItemBombchus() {}
+ActorShopItemBombBag::~ActorShopItemBombBag() {}
+ActorShopItemBombs::~ActorShopItemBombs() {}
+ActorShopItemQuiver::~ActorShopItemQuiver() {}
+ActorShopItemArrows::~ActorShopItemArrows() {}
+ActorShopItemHeartContainer::~ActorShopItemHeartContainer() {}
+ActorShopItemDM::~ActorShopItemDM() {}
diff --git a/src/Main/Unknown/UnkStruct_020397f8.cpp b/src/Main/Unknown/UnkStruct_020397f8.cpp
index 7d593d84..793ee441 100644
--- a/src/Main/Unknown/UnkStruct_020397f8.cpp
+++ b/src/Main/Unknown/UnkStruct_020397f8.cpp
@@ -413,7 +413,7 @@ ARM void UnkStruct_020397f8::vfunc_44(s32 touchLastX, s32 touchLastY) {
if ((data_02056be4[data_027e077c.mUnk_0] & 2) == 0) {
if ((gTouchControl.mFlags & 1) != 0) {
if (this->mUnk_50 == 0 && data_027e0d38 != 0) {
- if (func_ov000_02079e04() == 0 && data_027e0e28->func_ov000_0207bc48() == 0) {
+ if (func_ov000_02079e04() == 0 && data_027e0e28.func_ov000_0207bc48() == 0) {
if (gGame.mUnk_101 == 0 && data_027e103c->mUnk_24 == 0) {
return;
}
diff --git a/tools/bmg.py b/tools/bmg.py
new file mode 100644
index 00000000..d3046ed1
--- /dev/null
+++ b/tools/bmg.py
@@ -0,0 +1,115 @@
+from pathlib import Path
+from argparse import ArgumentParser
+
+import ndspy.bmg
+
+def main():
+ parser = ArgumentParser(description="View strings in BMG files")
+ parser.add_argument("--file", help="Path to the BMG file. If not provided, the file will be derived from the message ID.")
+ parser.add_argument("--language", help="Language of the BMG file. Does nothing if --file is provided.")
+ parser.add_argument("--version", help="Game version to use. Does nothing if --file is provided.")
+ parser.add_argument("id", help="Index of the BMG entry")
+ args = parser.parse_args()
+
+ if args.id.startswith("0x"):
+ msg_id = int(args.id, 16)
+ else:
+ msg_id = int(args.id)
+ bmg_file = get_bmg_file(args.file, msg_id, args.language, args.version)
+
+ with bmg_file.open("rb") as f:
+ data = f.read()
+ bmg = ndspy.bmg.BMG(data)
+ message = bmg.messages[msg_id & 0xffff]
+
+ for part in message.stringParts:
+ print(part, end="")
+ print()
+
+BMG_FILENAMES = [
+ "system",
+ "regular",
+ "battle",
+ "test",
+ "default",
+ "sea",
+ "kaitei",
+ "main_isl",
+ "brave",
+ "flame",
+ "wind",
+ "frost",
+ "power",
+ "wisdom",
+ "ghost",
+ "hidari",
+ "sennin",
+ "ship",
+ "collect",
+ "mainselect",
+ "field",
+ "wisdom_dngn",
+ "demo",
+ "battleCommon",
+ "bossLast1",
+ "bossLast3",
+ "torii",
+ "myou",
+ "kojima1",
+ "kojima2",
+ "kojima5",
+ "kojima3",
+ "staff",
+ "kaitei_F",
+]
+
+LANGUAGES = [
+ "English",
+ "French",
+ "German",
+ "Italian",
+ "Spanish",
+ "Japanese",
+]
+
+def get_bmg_file(file: str | None, msg_id: int, language: str | None, version: str | None) -> Path:
+ if file is not None:
+ return Path(file)
+
+ versions = find_available_versions()
+ if len(versions) == 0:
+ print("You must extract the game files before using this tool")
+ exit(1)
+ if version is None:
+ version = versions[0]
+ if version not in versions:
+ print(f"Version {version} not found in the extract directory")
+ exit(1)
+
+ files_dir = Path(__file__).parent.parent / "extract" / version / "files"
+ if language is None:
+ for lang in LANGUAGES:
+ lang_dir = files_dir / lang
+ if lang_dir.exists():
+ language = lang
+ break
+ if language is None:
+ print("No language directories found in the extracted assets")
+ exit(1)
+
+ file_index = msg_id >> 16
+ if file_index >= len(BMG_FILENAMES):
+ print(f"Message ID {msg_id} is out of range")
+ exit(1)
+ filename = BMG_FILENAMES[file_index] + ".bmg"
+
+ return files_dir / language / "Message" / filename
+
+
+def find_available_versions() -> list[str]:
+ extract_path = Path(__file__).parent.parent / "extract"
+ return [d.name for d in extract_path.iterdir() if d.is_dir()]
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tools/requirements.txt b/tools/requirements.txt
index 4682190e..b0f58dc2 100644
--- a/tools/requirements.txt
+++ b/tools/requirements.txt
@@ -1,3 +1,4 @@
+ndspy
pre-commit
pyperclip
requests
diff --git a/tools/vtable_sym.py b/tools/vtable_sym.py
new file mode 100644
index 00000000..826cd610
--- /dev/null
+++ b/tools/vtable_sym.py
@@ -0,0 +1,129 @@
+import argparse
+from pathlib import Path
+import re
+
+def main():
+ parser = argparse.ArgumentParser(description='Define vtable symbols and update relocations')
+ parser.add_argument('old_name', help='The old name of the vtable symbol')
+ parser.add_argument('new_name', help='The new name of the vtable symbol')
+ parser.add_argument('--dry', action='store_true', help='Print the changes without writing to files')
+ args = parser.parse_args()
+
+ old_name: str = args.old_name
+ new_name: str = args.new_name
+ dry_run: bool = args.dry
+
+ file_write_buffer: list[tuple[Path, list[str]]] = []
+ manual_changes: list[str] = []
+
+ current_path = Path(__file__).parent
+ root_path = current_path.parent
+ base_config_path = root_path / "config"
+ for config_path in base_config_path.iterdir():
+ if config_path.is_file():
+ continue
+
+ old_address = None
+ new_address = None
+ dest_module = None
+ for symbol_file in config_path.glob("**/symbols.txt"):
+ with symbol_file.open("r") as f:
+ lines = f.readlines()
+
+ for row, line in enumerate(lines):
+ if not line.startswith(old_name):
+ continue
+ print(f"Updating symbol {old_name} in {symbol_file}:{row + 1}")
+ address = get_attr_value(line, "addr")
+ if address is None:
+ print(f"Error: Could not find symbol address at {symbol_file}:{row + 1}")
+ exit(1)
+ address = int(address, 16)
+ old_address = address
+ new_address = address - 8
+ line = line.replace(old_name, new_name, 1)
+ line = set_attr_value(line, "addr", f"0x{new_address:08x}")
+ print(f"-> {line}")
+ lines[row] = line
+
+ if old_address is None or new_address is None:
+ # Try next symbols.txt file
+ continue
+
+ file_name = str(symbol_file.relative_to(config_path))
+ if file_name.endswith("dtcm/symbols.txt"):
+ dest_module = ("dtcm", 0)
+ elif file_name.endswith("itcm/symbols.txt"):
+ dest_module = ("itcm", 0)
+ elif file_name.endswith("arm9/symbols.txt"):
+ dest_module = ("main", 0)
+ else:
+ overlay_id = re.search(r"ov(\d+)/symbols.txt", file_name)
+ if overlay_id is None:
+ print(f"Error: Could not determine module for {symbol_file}")
+ exit(1)
+ dest_module = ("overlay", int(overlay_id.group(1)))
+
+ file_write_buffer.append((symbol_file, lines))
+ break
+
+ if old_address is None or new_address is None or dest_module is None:
+ print(f"Error: Could not find symbol {old_name} in any symbols.txt file in {config_path}")
+ exit(1)
+
+ for relocs_file in config_path.glob("**/relocs.txt"):
+ with relocs_file.open("r") as f:
+ lines = f.readlines()
+
+ any_change = False
+ for row, line in enumerate(lines):
+ to_addr = get_attr_value(line, "to")
+ if to_addr is None:
+ continue
+ to_addr = int(to_addr, 16)
+ if to_addr != old_address:
+ continue
+ reloc_module = get_attr_value(line, "module")
+ if reloc_module is None:
+ continue
+ if dest_module[0] == "overlay" and reloc_module.startswith("overlays"):
+ print(f"Warning: Found ambiguous relocation for {old_name} in {relocs_file}, it will require manual review.")
+ manual_changes.append(f"{relocs_file}:{row + 1}")
+ if not reloc_module.startswith(dest_module[0]):
+ continue
+
+ print(f"Updating relocation for {old_name} in {relocs_file}:{row + 1}")
+ line = set_attr_value(line, "to", f"0x{new_address:08x}")
+ line = set_attr_value(line, "add", "0x8")
+ print(f"-> {line}")
+ lines[row] = line
+ any_change = True
+
+ if any_change:
+ file_write_buffer.append((relocs_file, lines))
+
+ if not dry_run:
+ for symbol_file, lines in file_write_buffer:
+ with symbol_file.open("w") as f:
+ f.writelines(lines)
+ print(f"Changes written to {len(file_write_buffer)} files:")
+ else:
+ print(f"Dry run complete. {len(file_write_buffer)} files would be updated:")
+ for symbol_file, _ in file_write_buffer:
+ print(f"- {symbol_file}")
+
+def get_attr_value(line: str, attr: str) -> str | None:
+ match = re.search(rf"{attr}:(\S+)", line)
+ if match is None:
+ return None
+ return match.group(1)
+
+def set_attr_value(line: str, attr: str, value: str) -> str:
+ pattern = rf"{attr}:\S+"
+ if not re.search(pattern, line):
+ line = line.strip() + f" {attr}:{value}\n"
+ return line
+ return re.sub(rf"{attr}:\S+", f"{attr}:{value}", line, count=1)
+
+if __name__ == "__main__":
+ main()