Decompiling BOMB (#140)

* feat: begin decompiling

* feat: some progress

* fix: forgot to change symbol

* feat: increase matching

* fix: function params not updated

* feat: more matching

* fix: noo more errors oon local help

* fix: match back UnkStruct_PlayerGet_74.data

* feat: little progress

* fix: SWBM.data regression

* feat: up jp version

* feat: update matching

* refactor: rename UnkBOMB to Bomb

* feat: decompiling part of MapObjectUnkBMFL

* feat: destroy MapObjectPot's vfunc_24 for the good of all

* fix: revert wrong symbol

* feat: updating jp symbols

* feat: eur advancements

* feat: weird stuff

* feat: fix build issue

* feat: rename BMFL to BombFlower

* feat: catchup jp .data

* feat: improve BombFlower

* feat: improve bomb matching

* style: cleanup

* style: cleanup v2

* fix: mapobjectpot_base .data

* feat: better match for mapobjectpot_base

* style: use deg_to_rad macro

* style: cleaner variable definition

* doc: better comment

* fix: build
This commit is contained in:
Alessevan
2026-08-23 15:06:08 -04:00
committed by GitHub
parent fd3a2340e3
commit 473e1e102b
69 changed files with 2105 additions and 811 deletions
+8 -8
View File
@@ -56,8 +56,9 @@ public:
/* 05 */ unk8 mUnk_05;
/* 06 */ unk8 mUnk_06;
/* 07 */ unk8 mUnk_07;
/* 08 */ u32 mUnk_08;
/* 0C */
/* 08 */ unk32 mUnk_08;
/* 0C */ VecFx32 mUnk_0C;
/* 18 */
MapObject_10_Base(); // func_ov000_0207c018
@@ -76,13 +77,12 @@ public:
class MapObject_10 : public MapObject_10_Base {
public:
/* 00 (vtable) */
/* 0C */ VecFx32 mUnk_0C;
/* 18 */ VecFx32 mUnk_18;
/* 24 */
MapObject_10() {}
// data_ov031_02113f18
// data_ov000_020b36b8
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
@@ -119,10 +119,10 @@ class MapObject {
public:
/* 00 (vtable) */
/* 04 */ VecFx32 mPos;
/* 10 */ MapObject_10 *mUnk_10;
/* 10 */ MapObject_10_Base *mUnk_10;
/* 14 */ union {
s16 mUnk_14;
UnkAngleStruct mUnk_14_AngleStruct;
s16 mAngle;
UnkAngleStruct mAngleStruct;
};
/* 16 */ MapObjState mState;
/* 18 */ unk8 mUnk_18[2]; // related to Link walking to the map object when touched
@@ -154,7 +154,7 @@ public:
/* 38 */
u16 GetDirection() {
return (u16) (this->mUnk_14 + DEG_TO_ANG(45)) / DEG_TO_ANG(90);
return (u16) (this->mAngle + DEG_TO_ANG(45)) / DEG_TO_ANG(90);
}
bool IsOrientedVertically() {
+68
View File
@@ -0,0 +1,68 @@
#pragma once
#include "Actor/ActorItemFlower.hpp"
#include "Actor/ActorUnkSCCN.hpp"
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "MapObjectPot_Base.hpp"
#include "MapObject_10_Pot.hpp"
#include "global.h"
#include "types.h"
enum MapObjBombFlowerState_ {
MapObjBombFlowerState_0 = 0,
MapObjBombFlowerState_1 = 1,
MapObjBombFlowerState_2 = 2,
MapObjBombFlowerState_3 = 3,
MapObjBombFlowerState_4 = 4,
MapObjBombFlowerState_5 = 5,
MapObjBombFlowerState_6 = 6,
MapObjBombFlowerState_Max
};
class MapObjectBombFlower : public MapObjectPot_Base {
public:
/* 00 (base) */
/* 48 */ ModelRender_ov031_0211578c mUnk_48;
/* A8 */ STRUCT_PAD(0xA8, 0xB0);
/* BC */ fx32 mUnk_B0;
/* BC */ fx32 mUnk_B4;
/* B8 */ volatile u16 mUnk_B8;
/* BA */ u16 mUnk_BA;
/* BC */ bool mUnk_BC;
/* C0 */ MapObject_10_Pot mUnk_C0;
MapObjectBombFlower();
/* 08 */ virtual void vfunc_08() override;
/* 14 */ virtual void vfunc_14() override;
/* 1C */ virtual bool vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) override;
/* 28 */ virtual unk32 vfunc_28() override;
/* 38 */ virtual void vfunc_38() override;
/* 44 */ virtual bool SetState(MapObjState state, unk32) override;
/* 48 */ virtual void vfunc_48() override;
/* 50 */ virtual void vfunc_50(ActorRef *param1, MapObjectPot_Base *thisx) override;
/* 58 */ virtual void vfunc_58();
bool IsInternalTimerOut() {
if (this->mUnk_B8 < this->mUnk_BA) {
++this->mUnk_B8;
return false;
}
return true;
}
void func_ov031_02102728(unk32 param1);
};
class MapObjectProfileBombFlower : public MapObjectProfile_Derived2 {
public:
/* 00 (base) */
MapObjectProfileBombFlower();
/* 0C */ virtual MapObject *Create();
static MapObjectProfileBombFlower *GetProfile();
};
+12 -2
View File
@@ -1,7 +1,9 @@
#pragma once
#include "Actor/ActorUnkSCCN.hpp"
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "MapObject_10_Pot.hpp"
#include "global.h"
#include "types.h"
@@ -13,6 +15,15 @@ enum MapObjGrassState_ {
MapObjGrassState_MAX
};
class MapObjectProfilePot_Base : public MapObjectProfile_Derived2 {
public:
/* 00 (base) */
/* D4 */ MapObject_10_Pot mUnk_D4;
MapObjectProfilePot_Base(MapObjectId param1, MapObjectId param2) :
MapObjectProfile_Derived2(param1, param2) {}
};
class MapObjectGrass : public MapObject {
public:
/* 00 (base) */
@@ -41,10 +52,9 @@ public:
void func_ov031_02101978(unk32 param1, VecFx32 *param2);
};
class MapObjectProfileGrass : public MapObjectProfile_Derived2 {
class MapObjectProfileGrass : public MapObjectProfilePot_Base {
public:
/* 00 (base) */
/* D4 */ MapObject_10 mUnk_D4;
MapObjectProfileGrass();
+6 -11
View File
@@ -1,17 +1,14 @@
#pragma once
#include "Actor/ActorId.hpp"
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "MapObject_ov031.hpp"
#include "MapObjectGrass.hpp"
#include "MapObjectPot_Base.hpp"
#include "global.h"
#include "types.h"
class MapObjectPot : public MapObjectPot_Base {
public:
/* 00 (base) */
/* 40 */ ActorId mUnk_40;
/* 44 */ STRUCT_PAD(0x44, 0x48);
/* 48 */ ModelRender_ov000_020b198c mUnk_48;
MapObjectPot();
@@ -20,11 +17,10 @@ public:
/* 14 */ virtual void vfunc_14() override; // func_ov031_021052cc
/* 1C */ virtual bool vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3); // func_ov031_021050b4
/* 24 */ virtual void vfunc_24(MapObject *param1, VecFx32 param2) override; // func_ov031_02105348
/* 30 */ virtual ~MapObjectPot() override;
/* 3C */ virtual bool vfunc_3C() override; // func_ov031_021053b4
/* 40 */ virtual bool vfunc_40() override; // func_ov031_021053fc
/* 48 */ virtual void vfunc_48() override; // func_ov031_021051d4
/* 54 */ virtual unk32 vfunc_54() override; // func_ov031_02105310
/* 3C */ virtual bool vfunc_3C() override; // func_ov031_021053b4
/* 40 */ virtual bool vfunc_40() override; // func_ov031_021053fc
/* 48 */ virtual void vfunc_48() override; // func_ov031_021051d4
/* 54 */ virtual unk32 vfunc_54() override; // func_ov031_02105310
};
class MapObjectProfilePot : public MapObjectProfilePot_Base {
@@ -32,7 +28,6 @@ public:
/* 00 (base) */
MapObjectProfilePot();
~MapObjectProfilePot();
/* 0C */ virtual MapObject *Create();
+37
View File
@@ -0,0 +1,37 @@
#pragma once
#include "Actor/ActorId.hpp"
#include "MapObject.hpp"
enum MapObjPot_Base_State_ {
MapObjPot_BaseState_0 = 0,
MapObjPot_BaseState_1 = 1,
MapObjPot_BaseState_2 = 2,
MapObjPot_BaseState_3 = 3,
MapObjPotBase_State_Max
};
class MapObjectPot_Base : public MapObject {
public:
/* 00 (base) */
/* 40 */ ActorId mUnk_40;
/* 44 */ unk16 mUnk_44;
/* 48 */
MapObjectPot_Base();
// data_ov000_020b35d0
/* 00 */ virtual bool vfunc_00();
/* 24 */ virtual void vfunc_24(MapObject *param1, VecFx32 param2) override;
/* 28 */ virtual unk32 vfunc_28() override;
/* 30 */ virtual ~MapObjectPot_Base() = 0 override;
/* 38 */ virtual void vfunc_38() override;
/* 3C */ virtual bool vfunc_3C() override;
/* 40 */ virtual bool vfunc_40() override;
/* 44 */ virtual bool SetState(MapObjState state, unk32 param2) override;
/* 48 */ virtual void vfunc_48() override;
/* 4C */ virtual bool vfunc_4C() override;
/* 50 */ virtual void vfunc_50(ActorRef *param1, MapObjectPot_Base *thisx) override;
/* 54 */ virtual unk32 vfunc_54() override;
void func_ov000_0209da78(unk32 param1, unk32 param2);
};
-41
View File
@@ -1,41 +0,0 @@
//! TODO: This file was generated automatically and might contain errors
#pragma once
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "global.h"
#include "types.h"
class MapObjectUnkBMFL : public MapObject {
public:
/* 00 (base) */
/* 40 */
MapObjectUnkBMFL();
/* 30 */ virtual ~MapObjectUnkBMFL() override;
void func_ov031_021025c4(void);
void func_ov031_02102708(void);
void func_ov031_02102718(void);
void func_ov031_02102728(void);
void func_ov031_021027a4(void);
void func_ov031_02102894(void);
void func_ov031_021029f0(void);
void func_ov031_02102a40(void);
void func_ov031_02102ad8(void);
void func_ov031_02102af4(void);
};
class MapObjectProfileUnkBMFL : public MapObjectProfile {
public:
/* 00 (base) */
MapObjectProfileUnkBMFL();
~MapObjectProfileUnkBMFL();
/* 0C */ virtual MapObject *Create();
static MapObjectProfileUnkBMFL *GetProfile();
};
+2 -2
View File
@@ -1,6 +1,6 @@
#pragma once
#include "Actor/ActorUnkBOMB.hpp"
#include "Actor/ActorBomb.hpp"
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "Unknown/UnkStruct_ov031_Items.hpp"
@@ -21,7 +21,7 @@ public:
/* 040 */ UnkSystem6_Derived2 mUnk_040;
/* 048 */ unk8 mUnk_048;
/* 049 */ STRUCT_PAD(0x049, 0x04C);
/* 04C */ ActorUnkBOMB_unk mUnk_04C[0x4];
/* 04C */ ActorBomb_unk mUnk_04C[0x4];
/* 07C */ unk32 mUnk_07C;
/* 080 */ unk32 mUnk_080;
/* 084 */ u16 mUnk_084;
+1 -1
View File
@@ -1,8 +1,8 @@
#pragma once
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectGrass.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "MapObject_ov031.hpp"
#include "global.h"
#include "types.h"
+30
View File
@@ -0,0 +1,30 @@
#pragma once
#include "MapObject.hpp"
class MapObject_10_Pot_Base : public MapObject_10_Base {
public:
/* 00 (base) */
/* 0C */
MapObject_10_Pot_Base() {}
// should definitely be in ov000
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10(Cylinder *param1);
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual void vfunc_18(VecFx32 *param1);
/* 1C */ virtual void vfunc_1C(VecFx32 *param1);
};
class MapObject_10_Pot : public MapObject_10_Pot_Base {
public:
/* 00 (base) */
/* 18 */ fx32 mUnk_18;
/* 1C */ fx32 mUnk_1C;
/* 20 */
MapObject_10_Pot() {}
};
-45
View File
@@ -1,45 +0,0 @@
#pragma once
class MapObjectPot_Base : public MapObject {
public:
/* 00 (base) */
/* 40 */
MapObjectPot_Base();
// data_ov000_020b35d0
/* 00 */ virtual bool vfunc_00(); // func_ov000_0209d780
/* 24 */ virtual void vfunc_24(MapObject *param1, VecFx32 param2) override; // func_ov000_0209d8e8
/* 28 */ virtual unk32 vfunc_28() override; // func_ov000_0209d9f8
/* 30 */ virtual ~MapObjectPot_Base() = 0 override;
/* 38 */ virtual void vfunc_38() override; // func_ov000_0209d9ac
/* 3C */ virtual bool vfunc_3C() override; // func_ov000_0209db74
/* 40 */ virtual bool vfunc_40() override; // func_ov000_0209db7c
/* 44 */ virtual void vfunc_44(unk32, unk32) override; // func_ov000_0209d7a4
/* 48 */ virtual void vfunc_48() override; // func_ov000_0209da60
/* 4C */ virtual void vfunc_4C() override; // func_ov000_0209da70
/* 50 */ virtual void vfunc_50() override; // func_ov000_0209dac0
/* 54 */ virtual unk32 vfunc_54() override; // func_ov000_0209da64
// overlay 0
void func_ov000_0209d8e8(MapObjectPot_Base *param1, fx32 param2);
unk32 func_ov000_0209da64();
};
class MapObject_10_Pot : public MapObject_10 {
public:
/* 00 (base) */
/* 24 */
MapObject_10_Pot() {}
};
class MapObjectProfilePot_Base : public MapObjectProfile_Derived2 {
public:
/* 00 (base) */
/* D4 */ MapObject_10_Pot mUnk_D4;
MapObjectProfilePot_Base(MapObjectId param1, MapObjectId param2) :
MapObjectProfile_Derived2(param1, param2) {}
};