EquipBombchu (#131)

* Map symbol in Game

* EquipBombchu 12%

* EquipBombchu 53%

* EquipBombchu 71%

* configure: Don't verify dsd version if `--dsd` specified

* EquipBombchu 89%

* Fix regression
This commit is contained in:
Aetias
2025-07-31 21:22:55 +02:00
committed by GitHub
parent 8ad6359c7d
commit 82f54b2f07
67 changed files with 1321 additions and 399 deletions
+2 -1
View File
@@ -12,6 +12,7 @@
#include "Physics/Transform.hpp"
#include "Player/EquipBoomerang.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_ov000_020beba8.hpp"
struct Actor_UnkStruct_012 {
/* 00 */ u16 mUnk_00;
@@ -48,7 +49,7 @@ struct Actor_UnkStruct_09c {
/* 0 */ u16 mUnk_0;
/* 2 */ unk8 mUnk_2;
/* 3 */ unk8 mUnk_3;
/* 4 */ unk32 mUnk_4;
/* 4 */ UnkStruct_ov000_020beba8 *mUnk_4;
/* 8 */
Actor_UnkStruct_09c();
+2
View File
@@ -36,6 +36,7 @@ enum ActorTypeId_ {
ActorTypeId_Arrow = 'ARRW',
ActorTypeId_Blast = 'BLST',
ActorTypeId_Bomb = 'BOMB',
ActorTypeId_Bombchu = 'BMTY',
ActorTypeId_GrapplingHook = 'ROPE',
ActorTypeId_PlayerDummy = 'PLDM',
@@ -85,6 +86,7 @@ enum ActorTypeId_ {
ActorTypeId_FLTB = 'FLTB',
ActorTypeId_FLTM = 'FLTM',
ActorTypeId_FORC = 'FORC',
ActorTypeId_PWBS = 'PWBS',
ActorTypeId_SBEM = 'SBEM',
ActorTypeId_STNE = 'STNE',
ActorTypeId_TARU = 'TARU',
+4 -3
View File
@@ -2,6 +2,7 @@
#include "Actor/Navi/ActorNaviBase.hpp"
#include "Unknown/UnkStruct_ov000_020beba8.hpp"
#include "Unknown/UnkStruct_ov000_020c0c08.hpp"
class UnkStruct_ov000_020b8110 : public UnkStruct_ov000_020beba8 {
public:
@@ -10,7 +11,7 @@ public:
/* 00 */ virtual ~UnkStruct_ov000_020b8110() override;
/* 08 */ virtual void vfunc_08(unk16 *param1) override;
/* 14 */ virtual void vfunc_14(u16 *param1) override;
/* 14 */ virtual bool vfunc_14(u16 *param1) override;
/* 18 */ virtual void vfunc_18(s32 *param1) override;
/* 1c */
@@ -23,8 +24,8 @@ public:
/* 000 (base) */
/* 294 */ ModelRender mUnk_294;
/* 2f0 */ void *mUnk_2f0;
/* 2f4 */ unk8 mUnk_2f4[0x40];
/* 2f0 */ UnkStruct_ov000_020c0c08 mUnk_2f0;
/* 314 */ UnkStruct_ov000_020c0c08_04 mUnk_314;
/* 334 */ Vec3p mUnk_334;
/* 340 */ unk16 mUnk_340;
/* 342 */ unk8 mUnk_342[0x2];
+1 -1
View File
@@ -54,6 +54,6 @@ class ActorBlast_Unk1 : public UnkStruct_ov000_020beba8 {
/* 70 */
/* 00 */ virtual ~ActorBlast_Unk1();
/* 10 */ virtual void vfunc_10(s32 *param1);
/* 10 */ virtual bool vfunc_10(s32 *param1);
/* 18 */
};
+1 -1
View File
@@ -16,7 +16,7 @@ public:
/* 00 */ virtual ~ActorBomb_Unk1() override;
/* 08 */ virtual void vfunc_0c(unk16 *param1) override;
/* 0c */ virtual void vfunc_10(s32 *param1) override;
/* 0c */ virtual bool vfunc_10(s32 *param1) override;
/* 18 */
};
+1 -1
View File
@@ -15,7 +15,7 @@ public:
/* 00 */ virtual ~ActorRope_Unk_0219a3b0() override;
/* 08 */ virtual void vfunc_08(unk16 *param1) override;
/* 10 */ virtual void vfunc_10(s32 *param1) override;
/* 10 */ virtual bool vfunc_10(s32 *param1) override;
/* 1c */
inline ActorRope_Unk_0219a3b0() :
+10
View File
@@ -0,0 +1,10 @@
#pragma once
#include "global.h"
#include "types.h"
struct UnkStruct_027e0de4 {
void func_ov000_0207bb1c(unk32 param1, void (*param2)(void *), void *param3);
};
extern UnkStruct_027e0de4 data_027e0de4;
+45
View File
@@ -3,7 +3,52 @@
#include "global.h"
#include "types.h"
class UnkStruct_027e0f6c_Unk_1 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0c */ unk32 mUnk_0c;
/* 10 */
UnkStruct_027e0f6c_Unk_1();
~UnkStruct_027e0f6c_Unk_1();
};
class UnkStruct_027e0f6c_20 {
public:
/* 00 */ u16 mUnk_00;
/* 02 */ u16 mUnk_02;
/* 04 */ u16 mUnk_04;
/* 06 */ u16 mUnk_06;
/* 08 */ Vec3p mUnk_08;
/* 14 */ s32 mUnk_14;
/* 18 */ UnkStruct_027e0f6c_Unk_1 mUnk_18[3];
/* 48 */ s32 mUnk_48;
/* 4c */
UnkStruct_027e0f6c_20 &operator=(const UnkStruct_027e0f6c_20 &other) {
u16 temp_r2 = other.mUnk_00;
mUnk_02 = other.mUnk_02;
mUnk_00 = temp_r2;
mUnk_04 = other.mUnk_04;
mUnk_06 = other.mUnk_06;
mUnk_08.x = other.mUnk_08.x;
mUnk_08.y = other.mUnk_08.y;
mUnk_08.z = other.mUnk_08.z;
mUnk_14 = other.mUnk_14;
mUnk_18[0] = other.mUnk_18[0];
mUnk_18[1] = other.mUnk_18[1];
mUnk_18[2] = other.mUnk_18[2];
mUnk_48 = other.mUnk_48;
return *this;
}
};
struct UnkStruct_027e0f6c {
/* 00 */ unk8 mUnk_00[0x20];
/* 20 */ UnkStruct_027e0f6c_20 *mUnk_20;
void func_ov004_02102770();
};
+1 -1
View File
@@ -139,7 +139,7 @@ struct UnkStruct_027e103c {
void func_ov005_02104114();
void func_ov005_0210413c();
void func_ov005_02104160();
void func_Ov005_0210418c(char param1);
void func_ov005_0210418c(char param1);
};
extern UnkStruct_027e103c *data_027e103c;
+9 -5
View File
@@ -51,6 +51,12 @@ enum DungeonItemModelId_ {
DungeonItemModelId_COUNT,
};
struct ItemManager_Unk1 {
/* 00 */ char mUnk_00[0x10];
/* 10 */ unk32 mUnk_10[2];
/* 18 */
};
class ItemManager : public SysObject {
public:
/* 000 */ ItemFlag mEquippedItem;
@@ -149,10 +155,10 @@ public:
// Item model
void func_ov00_020ad528();
ItemModel *GetItemModel(ItemModelId id);
void func_ov00_020ad538(unk32 param1) const;
void func_ov00_020ad560(unk32 param1) const;
void *func_ov00_020ad538(const ItemManager_Unk1 *param1) const;
void *func_ov00_020ad560(const ItemManager_Unk1 *param1) const;
ItemModel *GetDungeonItemModel(DungeonItemModelId id);
void func_ov00_020ad594(unk32 param1) const;
void *func_ov00_020ad594(const ItemManager_Unk1 *param1) const;
void LoadFanfareItem(ItemId id);
bool GetFanfareItemScale(Vec3p *pScale) const;
void LoadDungeonItemModels();
@@ -209,8 +215,6 @@ public:
// Unknown
void func_ov00_020ae4dc(s32 param1);
void func_ov000_020c0c44(void *);
void func_ov000_020c0e5c(void *, unk32);
};
extern ItemManager *gItemManager;
+1 -1
View File
@@ -141,7 +141,7 @@ public:
/* 60 */ virtual unk32 vfunc_60(TilePos *param_1);
/* 64 */ virtual unk32 vfunc_64();
/* 68 */ virtual unk32 vfunc_68(Vec3p *param_1, bool param_2);
/* 6c */ virtual unk8 vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4);
/* 6c */ virtual unk8 vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4);
/* 70 */ virtual unk32 vfunc_70(Vec3p *param_2);
/* 74 */ virtual unk32 *vfunc_74(Vec3p *param_2);
/* 78 */ virtual unk32 *vfunc_78(TilePos *param_1);
+57 -3
View File
@@ -8,8 +8,10 @@
#include "Map/Course.hpp"
#include "Map/MapBase.hpp"
#include "Physics/AABB.hpp"
#include "Physics/Sphere.hpp"
#include "Save/AdventureFlags.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_ov000_020beba8.hpp"
struct MapManager_Unk1 {
/* 0 */ unk32 mUnk_0;
@@ -65,6 +67,57 @@ struct UnkStruct_0208210c_param3 {
/* 1c4 */
};
struct UnkStruct {
/* 00 */ unk8 mUnk_00[0x24];
/* 24 */ u16 mUnk_24;
/* 26 */ u16 mUnk_26;
/* 28 */ u16 mUnk_28;
/* 2a */ u16 mUnk_2a;
/* 2c */ u16 mUnk_2c;
/* 2e */ unk8 mUnk_2e;
/* 2f */ unk8 mUnk_2f;
/* 30 */ unk8 mUnk_30;
/* 31 */ unk8 mUnk_31;
/* 32 */ unk8 mUnk_32;
/* 33 */ unk8 mUnk_33;
/* 34 */ unk8 mUnk_34;
/* 35 */ unk8 mUnk_35;
/* 36 */ unk8 mUnk_36;
/* 37 */ unk8 mUnk_37;
/* 38 */ unk8 mUnk_38;
/* 3c */ Vec3p mUnk_3c;
/* 48 */ unk8 mUnk_48[0x6];
/* 4e */ u8 mUnk_4e;
/* 4f */ u8 mUnk_4f;
/* 50 */ u8 mUnk_50;
/* 51 */ u8 mUnk_51;
/* 52 */ unk8 mUnk_52[0x6];
/* 58 */ u8 mUnk_58;
/* 59 */ u8 mUnk_59;
/* 5a */ u8 mUnk_5a;
/* 5b */ u8 mUnk_5b;
/* 5c */ u8 mUnk_5c;
/* 5d */ u8 mUnk_5d;
/* 5e */
inline UnkStruct() :
mUnk_24(-1),
mUnk_26(-1),
mUnk_28(-1),
mUnk_2a(-1),
mUnk_2c(0),
mUnk_4e(0),
mUnk_4f(0),
mUnk_50(0),
mUnk_51(0),
mUnk_58(0),
mUnk_59(0),
mUnk_5a(0),
mUnk_5b(0),
mUnk_5c(0),
mUnk_5d(0) {}
};
class MapManager : public SysObject {
public:
/* 00 */ Course *mCourse;
@@ -79,8 +132,9 @@ public:
/* 0f */ unk8 mUnk_0f;
/* 10 */
bool func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Vec4p *param4);
bool func_01ffbf5c(struct UnkStruct *param1, Vec3p *param2, Vec3p *param3, s32 length);
bool func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Sphere *param4);
bool func_01ffbf5c(struct UnkStruct *param1, Vec3p *param2, Vec3p *param3, s32 length, unk32 param5, unk32 param6,
UnkStruct_ov000_020beba8 *param7, unk32 param8);
bool func_01ffc118(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7);
bool func_01ffd1e0(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7);
@@ -213,7 +267,7 @@ public:
unk32 MapData_vfunc_68(Vec3p *param_1, bool param_2);
s32 func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3, bool param_4);
unk32 func_ov00_02083f44(Vec3p *param_2, bool param_3);
unk8 MapData_vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4);
unk8 MapData_vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4);
unk32 MapData_vfunc_70(Vec3p *param_2);
static void func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3);
void GetTileWorldBounds(TilePos *tile, AABB *tileBounds);
+1 -1
View File
@@ -12,7 +12,7 @@ public:
/* 00 (base) */
/* 24 */
MapOverworld_Unk1(u32 param1, u8 *param2, unk32 param3);
MapOverworld_Unk1(u32 param1, ItemModel *param2, unk32 param3);
};
class MapOverworld : public MapBase {
+5
View File
@@ -11,7 +11,12 @@ public:
inline TilePos() :
x(0),
y(0) {}
inline TilePos(bool) {}
inline TilePos(u8 x, u8 y) :
x(x),
y(y) {}
};
inline bool operator==(TilePos a, TilePos b) {
return (a.x == b.x && a.y == b.y);
}
+22 -30
View File
@@ -3,28 +3,24 @@
#include "types.h"
#include "Actor/Actor.hpp"
#include "Map/TilePos.hpp"
#include "Player/EquipItem.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/UnkStruct_ov000_020beba8.hpp"
struct EquipBombchu_Unk1 {
/* 0 */ unk8 mUnk_0;
/* 1 */ unk8 mUnk_1;
/* 2 */
EquipBombchu_Unk1();
};
class EquipBombchu_Unk_02198d00 : public UnkStruct_ov000_020beba8 {
public:
/* 0 (base) */
/* c */
/* 0c */ unk8 mUnk_0c[4];
/* 10 */ TilePos mUnk_10;
/* 12 (padding) */
/* 14 */ Vec3p mUnk_14;
/* 20 */
/* 00 */ virtual ~EquipBombchu_Unk_02198d00() override;
/* 08 */ virtual void vfunc_08(unk16 *param1) override;
/* 08 */ virtual bool vfunc_08(UnkStruct_ov000_020beba8_08 *param1) override;
/* 0c */ virtual void vfunc_0c(unk16 *param1) override;
/* 10 */ virtual void vfunc_10(s32 *param1) override;
/* 14 */ virtual void vfunc_14(u16 *param1) override;
/* 10 */ virtual bool vfunc_10(s32 *param1) override;
/* 14 */ virtual bool vfunc_14(u16 *param1, s32 param2) override;
/* 1c */
inline EquipBombchu_Unk_02198d00() :
@@ -38,18 +34,16 @@ public:
/* 00 (base) */
/* 09 */ u8 mUnk_09[3];
/* 0c */ ActorRef mUnk_0c;
/* 0c */ u8 mUnk_14[0x4];
/* 18 */ u32 mUnk_18;
/* 1c */ EquipBombchu_Unk1 *mUnk_1c;
/* 0c */ ActorRef mBombchuRef;
/* 14 */ unk32 mUnk_14;
/* 18 */ s32 mUnk_18;
/* 1c */ TilePos *mUnk_1c;
/* 20 */ Vec3p mUnk_20;
/* 2c */ void *mUnk_2c;
/* 30 */ u32 mUnk_30;
/* 34 */ u32 mUnk_34;
/* 2c */ Vec3p mUnk_2c;
/* 38 */ Vec3p mUnk_38;
/* 44 */ u16 mUnk_44;
/* 46 */ u8 mUnk_46;
/* 47 */ char mUnk_47;
/* 44 */ s16 mUnk_44;
/* 46 */ bool mUnk_46;
/* 47 */ bool mUnk_47;
/* 48 */ bool mUnk_48;
/* 49 */ unk8 mUnk_49[3];
/* 4c */
@@ -69,19 +63,17 @@ public:
void func_ov014_0213eba4();
void func_ov014_0213ec40();
void func_ov014_0213ec64();
Actor *func_ov014_0213ed74();
Actor *func_ov014_0213ed74() const;
void *func_ov014_0213ed94(s32 param1);
void func_ov014_0213eda0();
void func_ov058_02199220();
void func_ov058_02199228();
void func_ov058_02199264();
void func_ov058_0219926c();
bool CheckUsable(unk32 param1) const;
Actor *func_ov058_02199400();
bool func_ov058_02199498(Vec3p *vec);
void func_ov058_02199ef0(unk16 param1);
void func_ov058_02199fd8(u32 param1);
unk32 func_ov058_0219a084(unk16 param1);
bool func_ov058_0219a3b4(unk16 param1);
unk32 func_ov058_02199ef0(TilePos param1);
unk32 func_ov058_02199fd8(TilePos param1);
unk32 func_ov058_0219a084(TilePos param1);
bool func_ov058_0219a3b4(TilePos param1);
};
+3 -3
View File
@@ -10,8 +10,8 @@
class EquipItem : public SysObject {
public:
/* 0 (vtable) */
/* 4 */ u16 mUnk_00;
/* 6 */ u16 mUnk_04;
/* 4 */ s16 mUnk_04;
/* 6 */ u16 mUnk_06;
/* 8 */ bool mInUse;
/* 9 */
@@ -40,6 +40,6 @@ public:
Vec3p *GetPlayerPos();
void func_ov000_020be99c(Vec3p *param1);
void func_ov000_020be9e4(s32 param1, s32 param2, s32 param3, s16 param4);
void func_ov000_020be9e4(Vec3p param3, s16 param4);
s16 GetAmmo() const;
};
+4 -2
View File
@@ -6,6 +6,7 @@
#include <nds/math.h>
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_ov000_020c0c08.hpp"
class ItemModel;
@@ -31,7 +32,7 @@ public:
/* 18 */ virtual void SetTranslation(Vec3p *translation);
/* 1c */ virtual void PushGeometryCommands();
/* 20 */ virtual void vfunc_20();
/* 24 */ virtual void vfunc_24(unk32 param1);
/* 24 */ virtual void vfunc_24(UnkStruct_ov000_020c0c08 *param1);
/* 28 */ virtual void vfunc_28();
/* 2c */ virtual void vfunc_2c();
/* 30 */ virtual void vfunc_30();
@@ -40,7 +41,7 @@ public:
/* 3c */ virtual void vfunc_3c();
/* 40 */
ModelRender();
ModelRender(unk32 param1);
void *func_ov000_020a9624(s32 param1);
void func_ov000_020a98e8(unk32 param1);
void func_ov000_020a990c(unk32 param1);
@@ -48,4 +49,5 @@ public:
void func_ov000_020a9960(unk32 param1);
void func_ov000_020a9998(unk32 param1, unk32 param2);
void func_ov000_020a99c0();
void func_ov000_020b413c(unk16 param1, Vec3p *param2);
};
+2
View File
@@ -10,6 +10,8 @@ public:
/* 0f */ unk8 mUnk_0f;
UnkStruct_020e9360();
unk32 func_ov000_02079e68(unk32 param1);
};
extern UnkStruct_020e9360 data_ov000_020e9360;
+16 -4
View File
@@ -3,7 +3,17 @@
#include "global.h"
#include "types.h"
class UnkStruct_ov000_020beba8 {
#include "System/SysNew.hpp"
#include <nds/math.h>
struct UnkStruct_ov000_020beba8_08 {
/* 00 */ u16 mUnk_00;
/* 04 */ Vec3p mUnk_04;
/* 10 */
};
class UnkStruct_ov000_020beba8 : public SysObject {
public:
/* 0 (vtable) */
/* 4 */ unk32 mUnk_4;
@@ -11,12 +21,14 @@ public:
/* c */
/* 00 */ virtual ~UnkStruct_ov000_020beba8();
/* 08 */ virtual void vfunc_08(unk16 *param1);
/* 08 */ virtual bool vfunc_08(UnkStruct_ov000_020beba8_08 *param1);
/* 0c */ virtual void vfunc_0c(unk16 *param1);
/* 10 */ virtual void vfunc_10(s32 *param1);
/* 14 */ virtual void vfunc_14(u16 *param1);
/* 10 */ virtual bool vfunc_10(s32 *param1);
/* 14 */ virtual bool vfunc_14(u16 *param1, s32 param2);
/* 18 */ virtual void vfunc_18(s32 *param1);
/* 1c */
UnkStruct_ov000_020beba8(unk32 param1);
bool func_ov014_02124034(UnkStruct_ov000_020beba8_08 *param1);
};
+20 -3
View File
@@ -6,16 +6,33 @@
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_0202e1a0.hpp"
struct UnkStruct_ov000_020c0c08_04 {
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ char *mUnk_08;
/* 0c */ unk8 mUnk_0c[0x4];
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk8 mUnk_18[0x8];
/* 20 */
};
class ItemModel;
class UnkStruct_ov000_020c0c08 : public SysObject {
public:
/* 00 (vtable) */
/* 04 */ unk32 mUnk_04;
/* 08 */ u8 *mUnk_08;
/* 04 */ UnkStruct_ov000_020c0c08_04 *mUnk_04;
/* 08 */ ItemModel *mUnk_08;
/* 0c */ UnkStruct_0202e1a0 mUnk_0c;
/* 24 */
/* 00 */ virtual ~UnkStruct_ov000_020c0c08();
/* 08 */
UnkStruct_ov000_020c0c08(unk32 param1, u8 *param2);
UnkStruct_ov000_020c0c08(UnkStruct_ov000_020c0c08_04 *param1, ItemModel *param2);
void func_ov000_020c0c44(void *);
void func_ov000_020c0e04();
void func_ov000_020c0e5c(unk32);
};
@@ -0,0 +1,10 @@
#pragma once
#include "global.h"
#include "types.h"
struct UnkStruct_ov000_020e9c88 {
void func_ov000_0207b89c(s32 param2, Vec3p *param3, void (*param4)(void *), void *param5);
};
extern UnkStruct_ov000_020e9c88 data_ov000_020e9c88;