Match ActorBomb (#158)

* actor prog from overlay 0

* fix build issues

* ActorBomb OK for eur

* ActorBomb OK for eur1, usa and jp

* fix regressions
This commit is contained in:
Yanis
2026-10-08 03:35:12 +02:00
committed by GitHub
parent 2c723299b7
commit 89dedbb3d1
86 changed files with 746 additions and 458 deletions
+3 -1
View File
@@ -2,6 +2,7 @@
#include "Actor/Actor.hpp"
#include "Actor/ActorProfile.hpp"
#include "MapObject/MapObjectRef.hpp"
#include "global.h"
#include "types.h"
@@ -17,7 +18,8 @@ public:
mUnk_04(param1) {}
// data_ov031_02112d4c
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
};
class ActorBlast : public Actor {
+10 -4
View File
@@ -3,7 +3,9 @@
#include "Actor/Actor.hpp"
#include "Actor/ActorProfile.hpp"
#include "Actor_Derived1.hpp"
#include "MapObject/MapObjectRef.hpp"
#include "global.h"
#include "nns/g3d/sbc.h"
#include "types.h"
enum ActorBombState_ {
@@ -53,16 +55,19 @@ public:
// data_ov031_02112c78
/* 00 */ virtual ~ActorBomb_180() override;
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
/* 10 */ virtual bool vfunc_10(ActorRef param1, unk32 param2) override;
};
class ActorBomb_ov031_020e2134 : public UnkStruct_ov031_Items_00 {
public:
/* 00 (base) */
/* 04 */ PAD(0x4, 0x8);
/* 04 */ PAD(0x04, 0x08);
/* 08 */
~ActorBomb_ov031_020e2134() {} // required to fix function order
// data_ov031_02112cb0
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
};
@@ -112,14 +117,15 @@ public:
// check if really in ActorUnkBomb
G3d_Model *func_ov031_020e1540(u16 param1);
UnkStruct_ov000_02058a84 *func_ov031_020e15d0(u16 param1);
static void func_ov031_020e1634();
void func_ov031_020e17f4();
static void func_ov031_020e1634(G3d_RenderState *param1);
//
void func_ov031_020e18a0();
void SetState(ActorState state);
void func_ov031_020e1908();
void func_ov031_020e1920(VecFx32 *param1);
void func_ov031_020e1920(const VecFx32 *param1);
void func_ov031_020e193c();
void func_ov031_020e1b1c();
void func_ov031_020e1b7c();
+3 -1
View File
@@ -2,6 +2,7 @@
#include "Actor/Actor.hpp"
#include "Actor/ActorProfile.hpp"
#include "MapObject/MapObjectRef.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/UnkStruct_ov031_Items.hpp"
#include "global.h"
@@ -36,7 +37,8 @@ public:
/* 00 */ virtual ~ActorItemBoomerang_11C() override;
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
};
class ActorItemBoomerang_A0 : public UnkStruct_ov031_Items_01 {
+1 -1
View File
@@ -14,7 +14,7 @@ public:
ModelRender_ov031_0211578c(const G3d_Model *model, unk32 param1, unk32 param2);
// data_ov031_0211578c
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
void func_ov031_02102c00();
};
+2 -13
View File
@@ -22,18 +22,6 @@ enum ActorKeeseState_ {
};
class ActorKeese;
class UnkStruct_ov000_020b34c4 {
public:
/* 00 (vtable) */
/* 04 */ MapObjectId mUnk_04;
/* 08 */
UnkStruct_ov000_020b34c4(MapObjectId param1) :
mUnk_04(param1) {}
// data_ov000_020b34c4
/* 00 */ virtual bool vfunc_00(MapObject *param1);
};
class UnkStruct_ov032_0212251c : public UnkStruct_ov000_020b34c4 {
public:
@@ -61,7 +49,8 @@ public:
// data_ov032_02122528
/* 00 */ virtual ~ActorKeese_2AC() override;
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
};
class ModelRender_ov032_02122568 : public UnkStruct_ov000_020b3268 {
+2 -2
View File
@@ -33,8 +33,8 @@ public:
/* 04 */
// data_ov031_02114a5c
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2,
unk32 param3) override; // func_ov031_020f8354
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
/* 10 */ virtual bool vfunc_10(ActorRef param1, unk32 param2) override; // func_ov031_020f83e4
/* 14 */
};
+2 -1
View File
@@ -50,7 +50,8 @@ public:
// data_ov031_02114288
/* 00 */ virtual ~ActorShotArrow_178() override;
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
void func_ov031_020f3304();
};
+2 -1
View File
@@ -42,7 +42,8 @@ public:
/* 00 */ virtual ~UnkStruct_ov063_02162ea8();
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
};
class UnkStruct_ov063_02162ee8 : public UnkStruct_ov000_020b3268 {
+2 -1
View File
@@ -21,7 +21,8 @@ public:
// data_ov031_02113148
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) override;
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override;
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) override;
};
class ActorUnkSWBM_98 : public UnkStruct_ov031_Items_01 {
+1 -1
View File
@@ -21,7 +21,7 @@ public:
// data_ov000_020b4d64
/* 0C */ virtual void vfunc_0C() override;
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
};
class ModelRender_ov031_02113670 : public ModelRender_ov000_020b4d64 {
+2 -2
View File
@@ -126,14 +126,14 @@ void func_0200240c(unk32);
BOOL NNS_SndArcLoadBank(unk32 param1, unk32 param2);
void func_02006aa8(unk32, unk32);
void func_02006d8c(u16, unk32);
void func_0200b578(G3d_RenderObject *, void (*)(), unk32, unk32, unk32);
void func_0200b578(G3d_RenderObject *, G3d_CallbackFunction, unk32, unk32, unk32);
void func_0200b58c(G3d_RenderObject *);
void G3d_GetCurrentMtx(MtxFx43 *mtx1, MtxFx33 *mtx2);
void func_0200ea38(G3d_Model *, unk32, unk32);
void func_0200eab0(G3d_Model *, unk32, u8);
void func_0200ef9c(G3d_Model *);
UnkResourceStruct2 *func_0200f05c(G3d_NameList *, char *);
unk32 func_0200f218(unk32, const char *);
unk32 func_0200f218(G3d_NameList *, const char name[16]);
void *func_02012ec8(unk32, unk16, const char *, size_t *, unk32, u8);
void *func_02012ee4(const char *, unk32, unk32, size_t *, u8);
void *func_02012f6c(const char *, size_t *);
+2 -3
View File
@@ -3,6 +3,7 @@
#include "Actor/ActorRef.hpp"
#include "Map/MapObjectId.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "MapObject/MapObjectRef.hpp"
#include "Physics/Cylinder.hpp"
#include "Render/ModelRender.hpp"
#include "System/SysNew.hpp"
@@ -134,9 +135,7 @@ public:
/* 1C */ MapObjFlags mFlags[1];
/* 1E */ unk16 mUnk_1E;
/* 20 */ MapObject_20 mUnk_20; // parameters
/* 38 */ unk8 mUnk_38;
/* 39 */ unk8 mUnk_39;
/* 3A */ Vec2bCpp mUnk_3A;
/* 38 */ MapObjRef mRef;
/* 3C */ MapObjectProfile *mpProfile;
/* 40 */
+1 -1
View File
@@ -20,7 +20,7 @@ public:
// data_ov031_02115844
/* 00 */ virtual ~MapObjectTreasureSpawned_74() override {}
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
void func_ov000_0209dde0(void);
+2 -1
View File
@@ -1,12 +1,13 @@
#pragma once
#include "MapObject/MapObject.hpp"
#include "Unknown/UnkStruct_ov000_020b34c4.hpp"
#include "files.h"
#include "types.h"
#include "math.hpp"
struct MapObject;
typedef void (*UnkCallback_func_01fff4cc)(void *, void *);
struct UnkStruct_MapObjCreateData {
+64
View File
@@ -0,0 +1,64 @@
#pragma once
#include "MapObject/MapObjectManager.hpp"
#include "global.h"
#include "math.hpp"
#include "types.h"
struct MapObject;
struct MapObjRef {
union {
struct {
union {
struct {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
};
u16 unk_00_u16;
};
/* 02 */ Vec2b unk_02;
/* 04 */
};
u32 data;
};
MapObjRef() {}
MapObjRef(u32 value) {
this->data = value;
}
void Reset() {
this->data = 0;
}
const bool operator==(const MapObjRef &other) const {
return other.data == this->data;
}
const bool operator!=(const MapObjRef &other) const {
return !(*this == other);
}
void operator=(const MapObjRef &other) {
this->data = other.data;
}
const u32 Get32() const {
return this->data;
}
Vec2bCpp &GetUnk02() {
return *(Vec2bCpp *) &this->unk_02;
}
};
// for arrays
struct MapObjRefElem {
MapObjRef ref;
MapObjRefElem() {
this->ref.Reset();
}
};
+1 -1
View File
@@ -20,7 +20,7 @@ public:
// data_ov000_020b36e0
/* 00 */ virtual ~MapObjectSwitchStep_40() override {}
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
void func_ov000_0209dde0(void);
};
+1 -1
View File
@@ -20,7 +20,7 @@ public:
MapObjectUnkSWSW_40(G3d_Model *pModel);
// data_ov032_021227ac
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
void func_ov032_021210a0(fx32 param1);
};
+2 -2
View File
@@ -147,7 +147,7 @@ public:
ModelRender_Derived4(PlayerCharacter character, unk32 param2, G3d_Model *pModel, G3d_BoneMtxStruct *pCacheJntAnm);
// data_ov000_020b2b70
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
// overlay 0
void func_ov000_02057fe8(UnkAngleStruct param1, UnkAngleStruct param2, VecFx32 *param3);
@@ -166,7 +166,7 @@ public:
// data_ov093_021787e8
/* 00 */ virtual ~ModelRender_Derived5() override {}
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
};
class PlayerActorBase_38 {
+8 -26
View File
@@ -3,7 +3,9 @@
#include "global.h"
#include "math.hpp"
#include "nitro/fx.h"
#include "nns/g3d/sbc.h"
#include "profile.hpp"
#include "stdbool.h"
#include "types.h"
#include <nns/g3d/g3d.h>
@@ -20,25 +22,6 @@ struct ActorUnkZLSL_AnimationTag {
typedef void (*UnkSystem4_UnkCallback)(void *, unk32);
class UnkSystem4_vfunc_1C_B4 {
public:
/* 00 */ unk32 mUnk_00;
/* 00 */ PAD(0x04, 0x28);
/* 28 */ MtxFx33 mUnk_28;
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ unk32 mUnk_54;
};
class UnkSystem4_vfunc_1C {
public:
/* 00 */ u8 *mUnk_00;
/* 04 */ unk32 *mUnk_04;
/* 08 */ PAD(0x08, 0xB4);
/* B4 */ UnkSystem4_vfunc_1C_B4 *mUnk_B4;
/* 00 */ unk32 *mUnk_B8;
};
class ModelRenderBase {
public:
/* 00 (vtable) */
@@ -82,7 +65,7 @@ public:
/* 10 */ virtual void vfunc_10(VecFx32 *param1, MtxFx33 *param2, VecFx32 *param3) override; // SetTransform?
/* 14 */ virtual void vfunc_14(MtxFx33 *param1, VecFx32 *param2) override; // SetRotationTranslation?
/* 18 */ virtual void vfunc_18(VecFx32 *param1) override;
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1);
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1);
/* 20 */ virtual void vfunc_20();
void func_ov000_02057c38(unk32 param1, unk32 param2);
@@ -183,7 +166,7 @@ public:
void func_01ffc3b4();
void func_ov000_020577a4(UnkStruct_ov000_02058a84 *param1, unk32 param2, unk32 param3);
void func_ov000_020577a4(UnkStruct_ov000_02058a84 *param1, unk32 param2, bool param3);
void func_ov000_020577f8(unk32 param1);
void func_ov000_020578a4(unk32 param1, unk32 param2);
};
@@ -192,11 +175,10 @@ class UnkSystem5_Derived1 : public UnkSystem5 {
public:
UnkSystem5_Derived1(void *param1, G3d_Model *param2, UnkStruct_ov000_02058a84 *param3) :
UnkSystem5(param1, param2) {
unk32 value = 0;
bool value = false;
//! TODO: struct
if (!(*((u32 *) param3 + 2) & 2)) {
value = 1;
if (!(param3->mUnk_08 & 2)) {
value = true;
}
this->func_ov000_020577a4(param3, 0, value);
@@ -216,7 +198,7 @@ public:
// data_ov000_020b1be4
/* 00 */ virtual ~ModelRender_Derived1() override {}
/* 08 */ virtual void vfunc_08(G3d_Model *pModel) override;
/* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override;
/* 1C */ virtual void vfunc_1C(G3d_RenderState *param1) override;
unk32 func_ov000_0205a778(const char *param1);
VecFx32 *func_ov000_0205a7a8(unk32 param1);
+16 -4
View File
@@ -9,6 +9,7 @@
#include "Actor/ActorRef.hpp"
#include "Item/ItemManager.hpp"
#include "LinkList.hpp"
#include "MapObject/MapObjectRef.hpp"
#include "Player/PlayerLink.hpp"
#include "Player/PlayerZelda.hpp"
#include "Player/TouchControl.hpp"
@@ -307,7 +308,10 @@ public:
class UnkStruct_ov031_020f3310_04 {
public:
/* 00 */ PAD(0x00, 0x24);
/* 24 */ unk32 mUnk_24[4];
/* 24 */ u32 *mUnk_24;
/* 28 */ unk32 mUnk_28;
/* 2C */ unk32 mUnk_2C;
/* 30 */ unk32 mUnk_30;
/* 34 */
};
@@ -321,9 +325,16 @@ public:
class UnkStruct_ov031_020e54d4 {
public:
/* 00 */ PAD(0x00, 0x04);
/* 04 */ unk32 mUnk_04;
/* 00 (vtable) */
/* 04 */ u8 mUnk_04;
/* 08 */ u32 mUnk_08;
/* 00 */ virtual unk32 vfunc_00();
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14(const VecFx32 *param1);
};
class UnkStruct_027e0ce0_38_Base {
@@ -334,7 +345,8 @@ public:
// data_ov000_020b2838
/* 00 */ virtual ~UnkStruct_027e0ce0_38_Base();
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2);
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3);
/* 0C */ virtual bool vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4);
/* 10 */ virtual bool vfunc_10(ActorRef param1, unk32 param2);
/* 14 */
};
+4 -2
View File
@@ -1,9 +1,10 @@
#pragma once
#include "Map/MapObjectId.hpp"
#include "MapObject/MapObject.hpp"
#include "nitro/fx.h"
struct MapObject;
class UnkStruct_ov000_020b34c4 {
public:
/* 00 (vtable) */
@@ -16,7 +17,8 @@ public:
UnkStruct_ov000_020b34c4(MapObjectId mapObjId) :
mUnk_04(mapObjId) {}
virtual bool vfunc_00(MapObject *param1);
// data_ov000_020b34c4
/* 00 */ virtual bool vfunc_00(MapObject *param1);
};
extern UnkStruct_ov000_020b34c4 data_ov000_020b34c4;
+2 -2
View File
@@ -51,8 +51,8 @@ public:
class UnkStruct_ov000_02058a84 {
public:
/* 0 */ PAD(0x0, 0x6);
/* 6 */ u16 mUnk_6;
/* 8 */
/* 6 */ u16 mUnk_06;
/* 8 */ u32 mUnk_08;
};
class MapObjectProfile_Derived2_20_Base {