summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2026-04-16 23:10:14 +0200
committerGitHub <noreply@github.com>2026-04-16 23:10:14 +0200
commit38e9378f8f4bc465a09305e5021ead2eb89afb2b (patch)
treecb0c3cad894ce4d2fd74d111c090f8ca9698bb99
parent81f4540e6c2e4b80709f6837298b27929e6a4061 (diff)
Delink ActorShopItem.cpp (#147)
* Make types compatible with dsd-ghidra typesync * Update actors.md * Update docs * Delink ActorShopItem.cpp
-rw-r--r--config/eur/arm9/overlays/ov031/delinks.txt3
-rw-r--r--config/usa/arm9/overlays/ov031/delinks.txt3
-rw-r--r--docs/actors.md6
-rw-r--r--docs/overlays.md2
-rw-r--r--include/Actor/ActorShopItem.hpp409
-rw-r--r--include/DTCM/UnkStruct_027e0e58.hpp2
-rw-r--r--include/DTCM/UnkStruct_027e105c.hpp3
-rw-r--r--include/Message/MessageManager.hpp2
-rw-r--r--include/Unknown/UnkStruct_027e0dbc.hpp2
-rw-r--r--include/Unknown/UnkStruct_ov000_020e9c88.hpp2
-rw-r--r--include/lib/touch.h12
-rw-r--r--libs/c/include/assert.h2
-rw-r--r--libs/c/include/stdarg.h6
-rw-r--r--libs/c/include/stddef.h4
-rw-r--r--libs/nds/include/nds/g3d/g3d.h26
-rw-r--r--libs/nds/include/nds/g3d/sbc.h2
-rw-r--r--src/31_Shop/Actor/ActorShopItem.cpp205
17 files changed, 669 insertions, 22 deletions
diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt
index 88d5941a..238d43d7 100644
--- a/config/eur/arm9/overlays/ov031/delinks.txt
+++ b/config/eur/arm9/overlays/ov031/delinks.txt
@@ -4,3 +4,6 @@
.ctor start:0x02182080 end:0x02182090 kind:rodata align:4
.data start:0x021820a0 end:0x02183e80 kind:data align:32
.bss start:0x02183e80 end:0x02184200 kind:bss align:32
+
+src/31_Shop/Actor/ActorShopItem.cpp:
+ .text start:0x0217dbdc end:0x02180708
diff --git a/config/usa/arm9/overlays/ov031/delinks.txt b/config/usa/arm9/overlays/ov031/delinks.txt
index 4b6fb547..e9049fd1 100644
--- a/config/usa/arm9/overlays/ov031/delinks.txt
+++ b/config/usa/arm9/overlays/ov031/delinks.txt
@@ -4,3 +4,6 @@
.ctor start:0x02181fe0 end:0x02181ff0 kind:rodata align:4
.data start:0x02182000 end:0x02183de0 kind:data align:32
.bss start:0x02183de0 end:0x02184160 kind:bss align:32
+
+src/31_Shop/Actor/ActorShopItem.cpp:
+ .text start:0x0217db3c end:0x02180668
diff --git a/docs/actors.md b/docs/actors.md
index 1787be41..1061473d 100644
--- a/docs/actors.md
+++ b/docs/actors.md
@@ -24,9 +24,14 @@ translations. Feel free to contribute to this list!
-------|--------------|---------
`ITAP` | Item Arrow Pod | Quiver
`ITAR` | Item Arrows | 10 Arrows
+`ITB2` |
`ITBB` | Item Bomb Bag
+`ITBK` |
`ITBM` | Item Bombs | 10 Bombs
`ITBT` | Item Bombchus | 10 Bombchus
+`ITBY` |
+`ITCC` |
+`ITDM` |
`ITHU` | | Heart container
`ITPB` | Item Potion Bottle
`ITSL` | Item Shield
@@ -191,6 +196,7 @@ translations. Feel free to contribute to this list!
`GRNE` | Goron Elder | Biggoron
`GRNM` | Goron Man
`ITS3` | Item Seller NPC 3 | Mi, item seller of Goron Island
+`ITS2` | Item Seller NPC 2
`ITSN` | Item Seller NPC | Ai, item seller of Mercay Island
`JUDG` | Judge | The treasure teller
`LNBK` | Linebeck
diff --git a/docs/overlays.md b/docs/overlays.md
index 9a36aea1..b7270ede 100644
--- a/docs/overlays.md
+++ b/docs/overlays.md
@@ -35,7 +35,7 @@ contribute to this list!
`28` | --- | - |
`29` | --- | - |
`30` | --- | - |
-`31` | --- | 7 |
+`31` | Shop | 7 | Handles shops.
`32` | --- | 7 |
`33` | --- | 7 |
`34` | --- | - |
diff --git a/include/Actor/ActorShopItem.hpp b/include/Actor/ActorShopItem.hpp
new file mode 100644
index 00000000..2c27a854
--- /dev/null
+++ b/include/Actor/ActorShopItem.hpp
@@ -0,0 +1,409 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Actor/Actor.hpp"
+#include "Actor/ActorType.hpp"
+
+class ActorShopItemBase : public Actor {
+public:
+ /* 000 (base) */
+ /* 158 */ unk32 mUnk_158;
+ /* 15c */ unk8 mUnk_15c;
+ /* 15d */ unk8 mUnk_15d;
+ /* 15e */ unk8 mUnk_15e;
+ /* 160 */
+
+ /* 00 */ virtual ~ActorShopItemBase() override;
+ /* 08 */ virtual bool Init() override;
+ /* 14 */ virtual void vfunc_14(u32 param1) override;
+ /* 18 */ virtual void vfunc_18(u32 param1) override;
+ /* b4 */ virtual bool vfunc_b4();
+ /* b8 */ virtual bool vfunc_b8();
+ /* bc */
+
+ ActorShopItemBase();
+};
+
+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;
+ /* 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;
+ /* 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;
+ /* d4 */ virtual void vfunc_d4();
+ /* d8 */ virtual unk32 vfunc_d8();
+ /* dc */ virtual unk32 vfunc_dc();
+ /* e0 */ virtual unk32 vfunc_e0();
+ /* e4 */
+
+ ActorShopItem();
+
+ void func_ov031_0217f0b4();
+ void func_ov031_0217f114();
+ void func_ov031_0217f120();
+ unk32 func_ov031_0217f868();
+};
+
+class ActorShopItemDM : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 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;
+ /* d4 */ virtual void vfunc_d4() override;
+ /* e4 */
+
+ static ActorShopItemDM *Create();
+};
+
+class ActorShopItemSoldOut : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemSoldOut() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d4 */ virtual void vfunc_d4() override;
+ /* e4 */
+
+ static ActorShopItemSoldOut *Create();
+};
+
+class ActorShopItemHeartContainer : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemHeartContainer() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() 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;
+ /* e4 */
+
+ static ActorShopItemHeartContainer *Create();
+};
+
+class ActorShopItemArrows : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemArrows() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemArrows *Create();
+};
+
+class ActorShopItemBombs : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemBombs() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemBombs *Create();
+};
+
+class ActorShopItemBombchus : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemBombchus() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemBombchus *Create();
+};
+
+class ActorShopItemQuiver : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemQuiver() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemQuiver *Create();
+};
+
+class ActorShopItemBombBag : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemBombBag() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemBombBag *Create();
+};
+
+class ActorShopItemB2 : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemB2() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemB2 *Create();
+};
+
+struct ActorShopItemCollectable_Unk1 {
+ /* 00 */ unk32 mUnk_00;
+ /* 04 */ unk32 mUnk_04;
+ /* 08 */ unk32 mUnk_08;
+ /* 0c */ unk32 mUnk_0c;
+ /* 10 */ unk32 mUnk_10;
+ /* 14 */ unk32 mUnk_14;
+ /* 18 */ unk32 mUnk_18;
+ /* 1c */ unk32 mUnk_1c;
+ /* 20 */ unk32 mUnk_20;
+ /* 24 */ unk8 mUnk_24;
+ /* 25 */ unk8 mUnk_25;
+ /* 28 */
+};
+
+class ActorShopItemTreasure : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */ ActorShopItemCollectable_Unk1 *mUnk_178;
+ /* 17c */ unk32 mUnk_17c;
+ /* 180 */
+
+ /* 00 */ virtual ~ActorShopItemTreasure() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() 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;
+ /* e4 */
+
+ static ActorShopItemTreasure *Create();
+ ActorShopItemTreasure();
+
+ unk32 func_ov031_02180248();
+ unk32 func_ov031_02180260();
+ unk32 func_ov031_02180278();
+};
+
+class ActorShopItemShipPart : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */ unk32 mUnk_178;
+ /* 17c */ ActorShopItemCollectable_Unk1 *mUnk_17c;
+ /* 180 */ unk32 mUnk_180;
+ /* 184 */
+
+ /* 00 */ virtual ~ActorShopItemShipPart() 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;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* d4 */ virtual void vfunc_d4() override;
+ /* e0 */ virtual unk32 vfunc_e0() override;
+ /* e4 */
+
+ static ActorShopItemShipPart *Create();
+ ActorShopItemShipPart();
+
+ unk32 func_ov031_02180248();
+ unk32 func_ov031_02180260();
+ unk32 func_ov031_02180278();
+};
+
+class ActorShopItemGem : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemGem() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemGem *Create();
+};
+
+class ActorShopItemShield : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemShield() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e4 */
+
+ static ActorShopItemShield *Create();
+};
+
+class ActorShopItemPotion : public ActorShopItem {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 178 */
+
+ /* 00 */ virtual ~ActorShopItemPotion() override;
+ /* 08 */ virtual bool Init() override;
+ /* bc */ virtual unk32 vfunc_bc() override;
+ /* c4 */ virtual void vfunc_c4() override;
+ /* d0 */ virtual unk32 vfunc_d0() override;
+ /* e0 */ virtual unk32 vfunc_e0() override;
+ /* e4 */
+
+ static ActorShopItemPotion *Create();
+};
+
+class ActorShopItemUnk : public ActorShopItemBase {
+public:
+ /* 000 (base) */
+ /* 160 */ unk32 mUnk_160;
+ /* 164 */ unk8 mUnk_164;
+ /* 168 */
+
+ /* 00 */ virtual ~ActorShopItemUnk() override;
+ /* 08 */ virtual bool Init() override;
+ /* 14 */ virtual void vfunc_14(u32 param1) override;
+ /* 20 */ virtual void vfunc_20(bool param1) override;
+ /* bc */
+
+ ActorShopItemUnk();
+};
+
+class ActorShopItemBK : public ActorShopItemUnk {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+ /* 00 */ virtual ~ActorShopItemBK() override;
+ /* 1c */ virtual void vfunc_1c(u16 *param1) override;
+ /* b4 */ virtual bool vfunc_b4() override;
+ /* b8 */ virtual bool vfunc_b8() override;
+ /* bc */
+
+ static ActorShopItemBK *Create();
+};
+
+class ActorShopItemCC : public ActorShopItemUnk {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+ /* 00 */ virtual ~ActorShopItemCC() override;
+ /* 1c */ virtual void vfunc_1c(u16 *param1) override;
+ /* b4 */ virtual bool vfunc_b4() override;
+ /* b8 */ virtual bool vfunc_b8() override;
+ /* bc */
+
+ static ActorShopItemCC *Create();
+};
+
+class ActorShopItemBY : public ActorShopItemUnk {
+public:
+ static ActorType gType;
+
+ /* 000 (base) */
+ /* 168 */
+
+ /* 00 */ virtual ~ActorShopItemBY() override;
+ /* 1c */ virtual void vfunc_1c(u16 *param1) override;
+ /* b4 */ virtual bool vfunc_b4() override;
+ /* b8 */ virtual bool vfunc_b8() override;
+ /* bc */
+
+ static ActorShopItemBY *Create();
+ ActorShopItemBY();
+};
diff --git a/include/DTCM/UnkStruct_027e0e58.hpp b/include/DTCM/UnkStruct_027e0e58.hpp
index 031c920c..3bc27500 100644
--- a/include/DTCM/UnkStruct_027e0e58.hpp
+++ b/include/DTCM/UnkStruct_027e0e58.hpp
@@ -3,6 +3,8 @@
#include "global.h"
#include "types.h"
+#include <nds/math.h>
+
struct UnkStruct_027e0e58 {
/* 00 */ unk8 mUnk_00[0x22];
/* 22 */ unk16 mUnk_22;
diff --git a/include/DTCM/UnkStruct_027e105c.hpp b/include/DTCM/UnkStruct_027e105c.hpp
index 41c4f031..3855cd48 100644
--- a/include/DTCM/UnkStruct_027e105c.hpp
+++ b/include/DTCM/UnkStruct_027e105c.hpp
@@ -1,7 +1,10 @@
#pragma once
+#include "global.h"
#include "types.h"
+#include "Item/Item.hpp"
+
struct UnkStruct_027e105c {
/* 0 */ const char **unk_0;
/* 4 */
diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp
index b7588106..9cae73d7 100644
--- a/include/Message/MessageManager.hpp
+++ b/include/Message/MessageManager.hpp
@@ -50,7 +50,7 @@ public:
bool func_02036770(u32 param_2);
unk32 func_02036798(void);
bool func_020367dc(int param_2);
- bool MessageManager::func_020367ec(void);
+ bool func_020367ec(void);
bool func_02036808(void);
bool func_02036824(void);
bool func_02036850(void);
diff --git a/include/Unknown/UnkStruct_027e0dbc.hpp b/include/Unknown/UnkStruct_027e0dbc.hpp
index 21691344..0c816fd7 100644
--- a/include/Unknown/UnkStruct_027e0dbc.hpp
+++ b/include/Unknown/UnkStruct_027e0dbc.hpp
@@ -3,6 +3,8 @@
#include "global.h"
#include "types.h"
+#include "Game/GameMode.hpp"
+
class UnkStruct_027e0dbc {
public:
/* 00 */ unk32 mUnk_00;
diff --git a/include/Unknown/UnkStruct_ov000_020e9c88.hpp b/include/Unknown/UnkStruct_ov000_020e9c88.hpp
index ff60bd78..357f0c3b 100644
--- a/include/Unknown/UnkStruct_ov000_020e9c88.hpp
+++ b/include/Unknown/UnkStruct_ov000_020e9c88.hpp
@@ -3,6 +3,8 @@
#include "global.h"
#include "types.h"
+#include <nds/math.h>
+
struct UnkStruct_ov000_020e9c88 {
void func_ov000_0207b89c(s32 param2, Vec3p *param3, void (*param4)(void *), void *param5);
};
diff --git a/include/lib/touch.h b/include/lib/touch.h
index e5848f5f..bf911845 100644
--- a/include/lib/touch.h
+++ b/include/lib/touch.h
@@ -3,20 +3,24 @@
#include "global.h"
#include "types.h"
-struct TouchStateFlags {
+typedef struct TouchStateFlags {
u16 touchX;
u16 touchY;
u16 touch;
u16 flags;
-};
+} TouchStateFlags;
-struct TouchState {
+typedef struct TouchState {
bool touch;
s32 touchX;
s32 touchY;
-};
+} TouchState;
+#ifdef __cplusplus
extern "C" {
+#endif
void WaitForTouchUpdate(u16 param1);
bool GetTouchStateFlags(TouchStateFlags *pState);
+#ifdef __cplusplus
}
+#endif
diff --git a/libs/c/include/assert.h b/libs/c/include/assert.h
index 22cdf7dc..6742f6bb 100644
--- a/libs/c/include/assert.h
+++ b/libs/c/include/assert.h
@@ -3,6 +3,6 @@
#define assert(condition) (void) ((condition) || __assert_failed(#condition, __FILE__, __FUNCTION__, __LINE__));
-void __assert_failed(char *condition, char *fileName, char *functionName, s32 lineNumber);
+void __assert_failed(char *condition, char *fileName, char *functionName, int lineNumber);
#endif
diff --git a/libs/c/include/stdarg.h b/libs/c/include/stdarg.h
index 4ace4037..795fbc8b 100644
--- a/libs/c/include/stdarg.h
+++ b/libs/c/include/stdarg.h
@@ -1,7 +1,9 @@
#ifndef _C_STDARG_H
#define _C_STDARG_H
+#ifdef __cplusplus
extern "C" {
+#endif
typedef char *va_list;
#define __std(ref) ::std::ref
@@ -11,7 +13,9 @@ typedef char *va_list;
#define va_start(ap, parm) ((ap) = __va_start(parm))
#define va_arg(ap, type) (*(type *) ((ap += __fourbytealign(sizeof(type))) - __fourbytealign(sizeof(type))))
#define va_end(ap) ((void) 0)
-}
+#ifdef __cplusplus
+} // extern "C"
+#endif
#if defined(__cplusplus)
namespace std {
diff --git a/libs/c/include/stddef.h b/libs/c/include/stddef.h
index eeed560c..50a16807 100644
--- a/libs/c/include/stddef.h
+++ b/libs/c/include/stddef.h
@@ -3,7 +3,11 @@
#define NULL 0
+#ifdef __MWERKS__
typedef unsigned long size_t;
+#else
+typedef unsigned int size_t;
+#endif
#define offsetof(type, member) ((size_t) &((type *) NULL)->member)
diff --git a/libs/nds/include/nds/g3d/g3d.h b/libs/nds/include/nds/g3d/g3d.h
index c4175327..36faa173 100644
--- a/libs/nds/include/nds/g3d/g3d.h
+++ b/libs/nds/include/nds/g3d/g3d.h
@@ -1,9 +1,9 @@
#include "nds/math.h"
-struct G3d_RenderState_;
-typedef void (*G3d_CallbackFunction)(struct G3d_RenderState_ *);
+struct G3d_RenderState;
+typedef void (*G3d_CallbackFunction)(struct G3d_RenderState *);
-typedef struct G3d_NameList_ {
+typedef struct G3d_NameList {
/* 00 */ u8 dummy;
/* 01 */ u8 numElmnts; // number of elements
/* 02 */ u16 size; // size of this NameList in bytes
@@ -13,20 +13,20 @@ typedef struct G3d_NameList_ {
/* 0c */
} G3d_NameList;
-typedef struct G3d_NameList_Header_ {
+typedef struct G3d_NameList_Header {
/* 00 */ u16 element_size;
/* 02 */ u16 data_section_size;
/* 04 */ u8 data[4];
/* 08 */
} G3d_NameList_Header;
-typedef struct G3d_InvBindMtx_ {
+typedef struct G3d_InvBindMtx {
/* 00 */ Mat4x3p mtx;
/* 30 */ Mat3p unkMtx;
/* 54 */
} G3d_InvBindMtx;
-typedef struct G3d_BoneMtxStruct_ {
+typedef struct G3d_BoneMtxStruct {
/* 00 */ u32 flag;
/* 04 */ u8 mUnk_04[0x24];
/* 28 */ Mat3p rot;
@@ -40,9 +40,9 @@ typedef enum {
G3D_ANIMBIND_OFF = 0x200
} G3d_AnimationBinds;
-typedef struct G3d_Animation_ {
+typedef struct G3d_Animation {
/* 00 */ u8 mUnk_00[0x10];
- /* 10 */ struct G3d_Animation_ *next; // next animation in the list
+ /* 10 */ struct G3d_Animation *next; // next animation in the list
/* 14 */ u8 mUnk_14[0x5];
/* 19 */ u8 numElmnts; // number of elements in the elementBinds array
/* 1a */ u16 elementBinds[1]; // each bit corresponds to a bone/material and determines whether an animation exists for it
@@ -50,7 +50,7 @@ typedef struct G3d_Animation_ {
} G3d_Animation;
// Structure representing the NSBMD model file
-typedef struct G3d_Model_ {
+typedef struct G3d_Model {
/* 00 */ u32 size; // size of the model in bytes
/* 04 */ u32 offSbc; // offset of the SBC commands list
/* 08 */ u32 offMat; // offset of the material list
@@ -98,7 +98,7 @@ typedef enum {
} G3d_RenderObjFlag;
// Structure that handles the parameters for drawing a model
-typedef struct G3d_RenderObject_ {
+typedef struct G3d_RenderObject {
/* 00 */ u32 flag; // G3d_RenderObjFlag
/* 04 */ G3d_Model *model;
/* 08 */ G3d_Animation *matAnim; // material animation
@@ -122,14 +122,14 @@ typedef struct G3d_RenderObject_ {
/* 54 */
} G3d_RenderObject;
-typedef struct G3d_Material_List_ {
+typedef struct G3d_Material_List {
/* 00 */ u16 texture_pairings_off;
/* 02 */ u16 palette_pairings_off;
/* 04 */ G3d_NameList materials;
/* 10 */
} G3d_Material_List;
-typedef struct G3d_Material_ {
+typedef struct G3d_Material {
/* 00 */ u32 mUnk_00;
/* 04 */ u32 dif_amb;
/* 08 */ u32 spe_emi;
@@ -145,7 +145,7 @@ typedef struct G3d_Material_ {
/* 2c */
} G3d_Material;
-typedef struct G3d_MaterialAnimation_ {
+typedef struct G3d_MaterialAnimation {
/* 00 */ u32 flag;
/* 04 */ u32 dif_amb;
/* 08 */ u32 spe_emi;
diff --git a/libs/nds/include/nds/g3d/sbc.h b/libs/nds/include/nds/g3d/sbc.h
index 6f0416c4..2ac3ec3b 100644
--- a/libs/nds/include/nds/g3d/sbc.h
+++ b/libs/nds/include/nds/g3d/sbc.h
@@ -30,7 +30,7 @@ typedef enum {
G3D_RENDERST_FLAG_SKIP_SBC_MTXCALC = 0x400 // skips the execution of matrix calculation commands
} G3d_RenderStateFlag;
-typedef struct G3d_RenderState_ {
+typedef struct G3d_RenderState {
/* 00 */ u8 *currentCmd; // current command being processed
/* 04 */ G3d_RenderObject *renderObj; // current render object being processed
/* 08 */ u32 flag; // G3d_RenderStateFlag
diff --git a/src/31_Shop/Actor/ActorShopItem.cpp b/src/31_Shop/Actor/ActorShopItem.cpp
new file mode 100644
index 00000000..4994f414
--- /dev/null
+++ b/src/31_Shop/Actor/ActorShopItem.cpp
@@ -0,0 +1,205 @@
+#include "Actor/ActorShopItem.hpp"
+#include "lib/files.hpp"
+
+extern u32 **data_027e0fe0[];
+
+ActorShopItemDM *ActorShopItemDM::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemDM();
+}
+
+ActorShopItemSoldOut *ActorShopItemSoldOut::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemSoldOut();
+}
+
+ActorShopItemHeartContainer *ActorShopItemHeartContainer::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemHeartContainer();
+}
+
+ActorShopItemArrows *ActorShopItemArrows::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemArrows();
+}
+
+ActorShopItemBombs *ActorShopItemBombs::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemBombs();
+}
+
+ActorShopItemBombchus *ActorShopItemBombchus::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemBombchus();
+}
+
+ActorShopItemQuiver *ActorShopItemQuiver::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemQuiver();
+}
+
+ActorShopItemBombBag *ActorShopItemBombBag::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemBombBag();
+}
+
+ActorShopItemB2 *ActorShopItemB2::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemB2();
+}
+
+ActorShopItemTreasure *ActorShopItemTreasure::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemTreasure();
+}
+
+ActorShopItemShipPart *ActorShopItemShipPart::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemShipPart();
+}
+
+ActorShopItemGem *ActorShopItemGem::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemGem();
+}
+
+ActorShopItemShield *ActorShopItemShield::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemShield();
+}
+
+ActorShopItemPotion *ActorShopItemPotion::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemPotion();
+}
+
+ActorShopItemBK *ActorShopItemBK::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemBK();
+}
+
+ActorShopItemCC *ActorShopItemCC::Create() {
+ return new(*data_027e0fe0[0], 4) ActorShopItemCC();
+}
+
+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