diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index 465186ac..27c07d7a 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -189,7 +189,7 @@ func_01ffee10 kind:function(arm,size=0x124) addr:0x01ffee10 func_01ffef34 kind:function(arm,size=0x128) addr:0x01ffef34 func_01fff05c kind:function(arm,size=0x58) addr:0x01fff05c func_01fff0b4 kind:function(arm,size=0x94) addr:0x01fff0b4 -func_01fff148 kind:function(arm,size=0x20) addr:0x01fff148 +_ZN18UnkStruct_027e0ce013func_01fff148Ev kind:function(arm,size=0x20) addr:0x01fff148 func_01fff168 kind:function(arm,size=0x14) addr:0x01fff168 func_01fff17c kind:function(arm,size=0x28) addr:0x01fff17c func_01fff1a4 kind:function(arm,size=0x3c) addr:0x01fff1a4 diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index a35f57bd..90bdc890 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -5,3 +5,6 @@ .data start:0x020b1960 end:0x020b4ec0 kind:data align:32 .bss start:0x020b4ec0 end:0x020b6520 kind:bss align:32 +src/00_Second/Actor/Actor.cpp: + .text start:0x02098388 end:0x02098654 + .data start:0x020b30e4 end:0x020b3148 diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 1aec6b5c..85300611 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -6679,7 +6679,7 @@ from:0x020983e4 kind:arm_call to:0x020975f8 module:overlay(0) from:0x02098400 kind:arm_call to:0x02028cdc module:main from:0x0209844c kind:arm_call to:0x0209862c module:overlay(0) from:0x02098458 kind:arm_call to:0x0209848c module:overlay(0) -from:0x02098464 kind:load to:0x020b30ec module:overlay(0) +from:0x02098464 kind:load to:0x020b30e4 add:8 module:overlay(0) from:0x02098468 kind:load to:0x020b539c module:overlay(0) from:0x0209847c kind:arm_call to:0x02011ff4 module:main from:0x020984e8 kind:arm_call to:0x020984f0 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index f46af626..aa0ae95f 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1636,7 +1636,7 @@ func_ov000_02081d5c kind:function(arm,size=0x20) addr:0x02081d5c func_ov000_02081d7c kind:function(arm,size=0xb4) addr:0x02081d7c func_ov000_02081e30 kind:function(arm,size=0x8c) addr:0x02081e30 func_ov000_02081ebc kind:function(arm,size=0x10) addr:0x02081ebc -func_ov000_02081ecc kind:function(arm,size=0x10) addr:0x02081ecc +_ZN18UnkStruct_027e0cd819func_ov000_02081eccEsi kind:function(arm,size=0x10) addr:0x02081ecc func_ov000_02081edc kind:function(arm,size=0x10) addr:0x02081edc func_ov000_02081eec kind:function(arm,size=0x50) addr:0x02081eec func_ov000_02081f3c kind:function(arm,size=0x4c) addr:0x02081f3c @@ -2261,7 +2261,7 @@ func_ov000_02097528 kind:function(arm,size=0x20) addr:0x02097528 func_ov000_02097548 kind:function(arm,size=0x78) addr:0x02097548 func_ov000_020975c0 kind:function(arm,size=0x1c) addr:0x020975c0 func_ov000_020975dc kind:function(arm,size=0x1c) addr:0x020975dc -func_ov000_020975f8 kind:function(arm,size=0x78) addr:0x020975f8 +_ZN8Actor_5c19func_ov000_020975f8Ev kind:function(arm,size=0x78) addr:0x020975f8 func_ov000_02097670 kind:function(arm,size=0xc) addr:0x02097670 func_ov000_0209767c kind:function(arm,size=0xa8) addr:0x0209767c func_ov000_02097724 kind:function(arm,size=0x28) addr:0x02097724 @@ -2311,29 +2311,29 @@ func_ov000_020982c0 kind:function(arm,size=0x18) addr:0x020982c0 func_ov000_020982d8 kind:function(arm,size=0x80) addr:0x020982d8 func_ov000_02098358 kind:function(arm,size=0x14) addr:0x02098358 func_ov000_0209836c kind:function(arm,size=0x1c) addr:0x0209836c -func_ov000_02098388 kind:function(arm,size=0xe8) addr:0x02098388 -func_ov000_02098470 kind:function(arm,size=0x4) addr:0x02098470 -func_ov000_02098474 kind:function(arm,size=0x14) addr:0x02098474 -func_ov000_02098488 kind:function(arm,size=0x4) addr:0x02098488 -func_ov000_0209848c kind:function(arm,size=0x1c) addr:0x0209848c -func_ov000_020984a8 kind:function(arm,size=0x8) addr:0x020984a8 -func_ov000_020984b0 kind:function(arm,size=0x4) addr:0x020984b0 -func_ov000_020984b4 kind:function(arm,size=0x4) addr:0x020984b4 -func_ov000_020984b8 kind:function(arm,size=0x4) addr:0x020984b8 -func_ov000_020984bc kind:function(arm,size=0x4) addr:0x020984bc -func_ov000_020984c0 kind:function(arm,size=0x4) addr:0x020984c0 -func_ov000_020984c4 kind:function(arm,size=0x4) addr:0x020984c4 -func_ov000_020984c8 kind:function(arm,size=0x8) addr:0x020984c8 -func_ov000_020984d0 kind:function(arm,size=0x20) addr:0x020984d0 -func_ov000_020984f0 kind:function(arm,size=0x28) addr:0x020984f0 -func_ov000_02098518 kind:function(arm,size=0x24) addr:0x02098518 -func_ov000_0209853c kind:function(arm,size=0x18) addr:0x0209853c -func_ov000_02098554 kind:function(arm,size=0x18) addr:0x02098554 -func_ov000_0209856c kind:function(arm,size=0xc) addr:0x0209856c -func_ov000_02098578 kind:function(arm,size=0xc) addr:0x02098578 -func_ov000_02098584 kind:function(arm,size=0x6c) addr:0x02098584 -func_ov000_020985f0 kind:function(arm,size=0x3c) addr:0x020985f0 -func_ov000_0209862c kind:function(arm,size=0x28) addr:0x0209862c +_ZN5ActorC1Ev kind:function(arm,size=0xe8) addr:0x02098388 +_ZN5ActorD1Ev kind:function(arm,size=0x4) addr:0x02098470 +_ZN5ActorD0Ev kind:function(arm,size=0x14) addr:0x02098474 +_ZN5ActorD2Ev kind:function(arm,size=0x4) addr:0x02098488 +_ZN5Actor19func_ov000_0209848cEP27UnkStruct_ov000_020b539c_30 kind:function(arm,size=0x1c) addr:0x0209848c +_ZN5Actor8vfunc_18Ev kind:function(arm,size=0x8) addr:0x020984a8 +_ZN5Actor8vfunc_1cEv kind:function(arm,size=0x4) addr:0x020984b0 +_ZN5Actor8vfunc_20Ev kind:function(arm,size=0x4) addr:0x020984b4 +_ZN5Actor8vfunc_24Ev kind:function(arm,size=0x4) addr:0x020984b8 +_ZN5Actor8vfunc_28Ev kind:function(arm,size=0x4) addr:0x020984bc +_ZN5Actor8vfunc_2cEv kind:function(arm,size=0x4) addr:0x020984c0 +_ZN5Actor8vfunc_30Ev kind:function(arm,size=0x4) addr:0x020984c4 +_ZN5Actor8vfunc_34Ev kind:function(arm,size=0x8) addr:0x020984c8 +_ZN5Actor19func_ov000_020984d0Ev kind:function(arm,size=0x20) addr:0x020984d0 +_ZN5Actor19func_ov000_020984f0Ev kind:function(arm,size=0x28) addr:0x020984f0 +_ZN5Actor8vfunc_00EP18UnkStruct_vfunc_00 kind:function(arm,size=0x24) addr:0x02098518 +_ZN5Actor19func_ov000_0209853cEv kind:function(arm,size=0x18) addr:0x0209853c +_ZN5Actor8vfunc_04Ev kind:function(arm,size=0x18) addr:0x02098554 +_ZN5Actor8vfunc_08Ev kind:function(arm,size=0xc) addr:0x0209856c +_ZN5Actor8vfunc_0cEv kind:function(arm,size=0xc) addr:0x02098578 +_ZN5Actor8vfunc_38Ei kind:function(arm,size=0x6c) addr:0x02098584 +_ZN5Actor8vfunc_3cEP5Vec3p kind:function(arm,size=0x3c) addr:0x020985f0 +_ZN5Actor19func_ov000_0209862cEi kind:function(arm,size=0x28) addr:0x0209862c func_ov000_02098654 kind:function(arm,size=0x28) addr:0x02098654 func_ov000_0209867c kind:function(arm,size=0x38) addr:0x0209867c func_ov000_020986b4 kind:function(arm,size=0x48) addr:0x020986b4 @@ -3667,7 +3667,7 @@ data_ov000_020b3098 kind:data(any) addr:0x020b3098 data_ov000_020b30a4 kind:data(any) addr:0x020b30a4 data_ov000_020b30b4 kind:data(any) addr:0x020b30b4 data_ov000_020b30d0 kind:data(any) addr:0x020b30d0 -data_ov000_020b30ec kind:data(any) addr:0x020b30ec +_ZTV5Actor kind:data(any) addr:0x020b30e4 data_ov000_020b3148 kind:data(any) addr:0x020b3148 data_ov000_020b31a8 kind:data(any) addr:0x020b31a8 data_ov000_020b31f0 kind:data(any) addr:0x020b31f0 diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 2646b2b9..d6dbf2b6 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1611,7 +1611,7 @@ func_02028c4c kind:function(arm,size=0x14) addr:0x02028c4c func_02028c60 kind:function(arm,size=0x18) addr:0x02028c60 func_02028c78 kind:function(arm,size=0x18) addr:0x02028c78 func_02028c90 kind:function(arm,size=0x4c) addr:0x02028c90 -func_02028cdc kind:function(arm,size=0x38) addr:0x02028cdc +_ZN24UnkStruct_ov000_020b539c13func_02028cdcEP8Actor_5ci kind:function(arm,size=0x38) addr:0x02028cdc func_02028d14 kind:function(arm,size=0x1c) addr:0x02028d14 func_02028d30 kind:function(arm,size=0x1c) addr:0x02028d30 func_02028d4c kind:function(arm,size=0x24) addr:0x02028d4c diff --git a/config/jp/arm9/itcm/symbols.txt b/config/jp/arm9/itcm/symbols.txt index 465186ac..27c07d7a 100644 --- a/config/jp/arm9/itcm/symbols.txt +++ b/config/jp/arm9/itcm/symbols.txt @@ -189,7 +189,7 @@ func_01ffee10 kind:function(arm,size=0x124) addr:0x01ffee10 func_01ffef34 kind:function(arm,size=0x128) addr:0x01ffef34 func_01fff05c kind:function(arm,size=0x58) addr:0x01fff05c func_01fff0b4 kind:function(arm,size=0x94) addr:0x01fff0b4 -func_01fff148 kind:function(arm,size=0x20) addr:0x01fff148 +_ZN18UnkStruct_027e0ce013func_01fff148Ev kind:function(arm,size=0x20) addr:0x01fff148 func_01fff168 kind:function(arm,size=0x14) addr:0x01fff168 func_01fff17c kind:function(arm,size=0x28) addr:0x01fff17c func_01fff1a4 kind:function(arm,size=0x3c) addr:0x01fff1a4 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp new file mode 100644 index 00000000..531d7454 --- /dev/null +++ b/include/Actor/Actor.hpp @@ -0,0 +1,139 @@ +#pragma once + +#include "System/SysNew.hpp" +#include "nitro/math.h" +#include "global.h" +#include "types.h" + +struct UnkStruct_vfunc_00 { + unk32 mUnk_00; + unk32 mUnk_04; + unk32 mUnk_08; +}; + +struct UnkStruct_vfunc_3c { + unk32 mUnk_00; + unk32 mUnk_04; + unk32 mUnk_08; +}; + +class Actor_5c { +public: + /* 00 */ unk32 mUnk_00; + + void func_ov000_020975f8(); +}; + +class UnkStruct_ov000_020b539c_30 { +public: + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk8 mUnk_08[0x18 - 0x08]; + /* 1c */ unk8 mUnk_18; + /* 1c */ unk8 mUnk_19; + /* 1c */ unk16 mUnk_1a; + /* 1c */ unk16 mUnk_1c; + /* 1e */ u16 mUnk_1e; + /* 20 */ +}; + +class UnkStruct_ov000_020b539c { +public: + /* 00 */ unk8 mUnk_00[0x30]; + /* 30 */ UnkStruct_ov000_020b539c_30 *mUnk_30; + /* 34 */ + + void func_02028cdc(Actor_5c *param1, unk32 param2); +}; + +class Actor : public SysObject { +public: + /* 00 (vtable) */ + /* 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 */ Vec3p mUnk_1c; + /* 28 */ u16 mUnk_28; + /* 28 */ unk16 mUnk_2a; + /* 2c */ unk32 mUnk_2c; + /* 30 */ unk32 *mUnk_30; + /* 34 */ unk32 *mUnk_34; + /* 38 */ unk32 mUnk_38; + /* 3c */ unk32 mUnk_3c; + /* 40 */ unk32 mUnk_40; + /* 44 */ u16 mUnk_44; + /* 46 */ unk16 mUnk_46; + /* 48 */ unk16 mUnk_48; + /* 4a */ unk8 mUnk_4a; + /* 4a */ unk8 mUnk_4b; + /* 4c */ unk16 mUnk_4c; + /* 4e */ s16 mUnk_4e; + /* 50 */ unk16 mUnk_50; + /* 52 */ unk16 mUnk_52; + /* 54 */ unk32 mUnk_54; + /* 58 */ unk32 mUnk_58; + /* 5c */ Actor_5c mUnk_5c; + /* 60 */ unk32 mUnk_60; + /* 64 */ unk32 mUnk_64; + /* 68 */ s16 mUnk_68; + /* 68 */ unk16 mUnk_6a; + /* 6c */ unk32 mUnk_6c; + /* 70 */ unk32 mUnk_70; + /* 74 */ unk32 mUnk_74; + /* 78 */ unk32 mUnk_78; + /* 7c */ unk32 mUnk_7c; + /* 80 */ unk16 mUnk_80; + /* 80 */ unk16 mUnk_82; + /* 84 */ unk32 mUnk_84; + /* 88 */ unk32 mUnk_88; + /* 8c */ unk32 mUnk_8c; + /* 90 */ UnkStruct_ov000_020b539c_30 *mUnk_90; + + /* 00 */ virtual unk32 vfunc_00(UnkStruct_vfunc_00 *param1); + /* 04 */ virtual bool vfunc_04(); + /* 08 */ virtual unk16 vfunc_08(); + /* 0c */ virtual unk8 vfunc_0c(); + /* 10 */ virtual void vfunc_10(); + /* 14 */ virtual void vfunc_14(); + /* 18 */ virtual unk32 vfunc_18(); + /* 1c */ virtual void vfunc_1c(); + /* 20 */ virtual void vfunc_20(); + /* 24 */ virtual void vfunc_24(); + /* 28 */ virtual void vfunc_28(); + /* 2c */ virtual void vfunc_2c(); + /* 30 */ virtual void vfunc_30(); + /* 34 */ virtual unk32 vfunc_34(); + /* 38 */ virtual unk32 vfunc_38(unk32 param1); + /* 3c */ virtual bool vfunc_3c(Vec3p* param1); + /* 40 */ virtual void vfunc_40(); + /* 44 */ virtual void vfunc_44(); + /* 48 */ virtual void vfunc_48(); + /* 4c */ virtual ~Actor(); + /* 54 */ + + Actor(); + void func_ov000_0209848c(UnkStruct_ov000_020b539c_30 *param1); + void func_ov000_020984b0(); + void func_ov000_020984b4(); + void func_ov000_020984b8(); + void func_ov000_020984bc(); + void func_ov000_020984c0(); + void func_ov000_020984c4(); + unk32 func_ov000_020984c8(); + void func_ov000_020984d0(); + void func_ov000_020984f0(); + + s32 func_ov000_02098518(unk32 *param1); + void func_ov000_0209853c(); + s32 func_ov000_02098554(); + s16 func_ov000_0209856c(); + s8 func_ov000_02098578(); + s32 func_ov000_02098584(); + s32 func_ov000_020985f0(void *param1); + void func_ov000_0209862c(unk32 param1); +}; + +extern UnkStruct_ov000_020b539c data_ov000_020b539c; diff --git a/include/Unknown/UnkStruct_027e0cd8.hpp b/include/Unknown/UnkStruct_027e0cd8.hpp new file mode 100644 index 00000000..998b082b --- /dev/null +++ b/include/Unknown/UnkStruct_027e0cd8.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include "types.h" + +class UnkStruct_027e0cd8 { +public: + void func_ov000_02081ecc(unk16 param1, unk32 param2); +}; + +extern UnkStruct_027e0cd8* data_027e0cd8; diff --git a/include/Unknown/UnkStruct_027e0ce0.hpp b/include/Unknown/UnkStruct_027e0ce0.hpp new file mode 100644 index 00000000..6bcbaab8 --- /dev/null +++ b/include/Unknown/UnkStruct_027e0ce0.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "global.h" +#include "types.h" + +#include "System/SysNew.hpp" + +// PlayerManager? +class UnkStruct_027e0ce0 { +public: + /* 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 */ unk32 mUnk_24; + /* 28 */ unk32 mUnk_28; + /* 2c */ unk32 mUnk_2c; + /* 30 */ + + void func_01fff148(); + + void func_ov000_0208a318(unk32 param1, unk32 param2, unk32 param3); + + void func_ov024_020d3d98(unk32 param1, unk32 param2); + void func_ov024_020d3ee8(unk32, u16, unk32); + + void func_ov110_02185d3c(unk32 param1); +}; + +extern UnkStruct_027e0ce0 *data_027e0ce0; diff --git a/include/nitro/math.h b/include/nitro/math.h new file mode 100644 index 00000000..ea1d1d88 --- /dev/null +++ b/include/nitro/math.h @@ -0,0 +1,190 @@ +#ifndef _NDS_MATH_H +#define _NDS_MATH_H + +#include "global.h" +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +// Q20.12 fixed point number +typedef s32 q20; +// Q4.12 fixed point number +typedef s16 q4; + +#define INT_TO_Q20(n) ((s32) ((n) << 12)) +#define FLOAT_TO_Q21(n) ((s32) (((n) * 8192 + 1) / 4)) +#define FLOAT_TO_Q20(n) ((s32) (((n) * 8192 + 1) / 2)) +#define FLOAT_TO_Q19(n) ((s32) (((n) * 8192 + 1))) +#define ROUND_Q20(n) (((s32) (n) + 0x800) >> 12) +#define MUL_Q20(a, b) (q20)((((s64) (a)) * ((s64) (b)) + 0x800) >> 12) +#define DIV_Q20(a, b) (((a) << 12) / (b)) + +#define DEG_TO_ANG(n) ((n) * 0x10000 / 360) +#define SIN(n) (gSinCosTable[2 * ((n) >> 4)]) +#define COS(n) (gSinCosTable[2 * ((n) >> 4) + 1]) + +u32 func_01ff9f3c(s32 a, s32 b); +s32 Atan2(s32 x, s32 y); + +u32 CoDivide64By32(u32 a, u32 b); +u32 func_01ff98f0(u32 a, u32 b); +u32 CoReciprocal(u32 x); +u64 func_01ff992c(u32 x); +u32 CoSqrt(u32 x); +u32 CoInvSqrt(u32 x); +u32 AwaitDivisionResult(); +u32 GetDivisionResult(); +void StartReciprocal(u32 x); +void StartSqrt(u32 x); +void func_01ff9ac4(u32 x); +u32 AwaitSqrtResult(); +void StartDivision64By32(u32 a, u32 b); +u32 CoDivide32(u32 a, u32 b); +u32 CoRemainder(u32 a, u32 b); + +bool Approach(unk32 *src, unk32 dest, unk32 step); +bool Approach_thunk(unk32 *src, unk32 dest, unk32 step); +extern q4 gSinCosTable[]; + +typedef struct { + /* 0 */ u8 x; + /* 1 */ u8 y; + /* 2 */ +} Vec2b; + +typedef struct { + /* 0 */ s16 x; + /* 1 */ s16 y; + /* 2 */ +} Vec2s; + +typedef struct { + /* 0 */ q20 x; + /* 4 */ q20 y; + /* 8 */ +} Vec2p; + +typedef struct { + /* 0 */ q20 x; + /* 4 */ q20 y; + /* 8 */ q20 z; + /* c */ +} Vec3p; + +typedef struct { + /* 00 */ q20 x; + /* 04 */ q20 y; + /* 08 */ q20 z; + /* 0c */ q20 w; + /* 10 */ +} Vec4p; + +typedef struct { + /* 00 */ Vec2p xColumn; + /* 08 */ Vec2p yColumn; + /* 10 */ +} Mat2p; + +typedef struct { + /* 00 */ Vec3p xColumn; + /* 0c */ Vec3p yColumn; + /* 18 */ Vec3p zColumn; + /* 24 */ +} Mat3p; + +typedef struct { + /* 00 */ Vec3p xColumn; + /* 0c */ Vec3p yColumn; + /* 18 */ Vec3p zColumn; + /* 24 */ Vec3p wColumn; + /* 30 */ +} Mat4x3p; + +typedef struct { + /* 00 */ Vec4p xColumn; + /* 10 */ Vec4p yColumn; + /* 20 */ Vec4p zColumn; + /* 30 */ Vec4p wColumn; + /* 40 */ +} Mat4p; + +extern const Vec3p gVec3p_ZERO; + +void Vec3p_Add(Vec3p *a, Vec3p *b, Vec3p *out); +void Vec3p_Sub(Vec3p *a, Vec3p *b, Vec3p *out); +q20 Vec3p_Dot(Vec3p *a, Vec3p *b); +void Vec3p_Cross(Vec3p *a, Vec3p *b, Vec3p *out); +q20 Vec3p_Length(Vec3p *a); +void Vec3p_Normalize(Vec3p *vec, Vec3p *out); +void Vec3p_Axpy(q20 a, Vec3p *x, Vec3p *y, Vec3p *out); +q20 Vec3p_Distance(Vec3p *a, Vec3p *b); +bool Vec3p_TryNormalize(Vec3p *vec); +q20 Vec3p_DistanceSquared(Vec3p *a, Vec3p *b); +void Vec3p_Scale(Vec3p *vec, q20 scale); +bool Vec3p_CalculateNormal(Vec3p *vec, Vec3p *a, Vec3p *b, Vec3p *c); + +inline void Vec3p_Rotate(Vec3p *vec, q20 sin, q20 cos, Vec3p *out) { + out->x += MUL_Q20(vec->z, sin); + out->z += MUL_Q20(vec->z, cos); + out->x += MUL_Q20(vec->x, cos); + out->z += MUL_Q20(vec->x, -sin); +} + +inline void Vec3p_CopyXZ(Vec3p *vec, Vec3p *out) { + q20 z = vec->z; + q20 x = vec->x; + + out->x = x; + out->y = 0; + out->z = z; +} + +inline void Vec3p_Copy(Vec3p *vec, Vec3p *out) { + out->x = vec->x; + out->y = vec->y; + out->z = vec->z; +} + +void Mat2p_InitIdentity(Mat2p *m); +void Mat2p_InitRotation(Mat2p *m, q20 sin, q20 cos); +void Mat2p_Multiply(Mat2p *a, Mat2p *b, Mat2p *out); + +void Mat3p_InitIdentity(Mat3p *m); +void Mat3p_CopyToMat4x3p(Mat3p *m, Mat4x3p *out); +void Mat3p_InitScale(Mat3p *m, q20 x, q20 y, q20 z); +void Mat3p_ScaleColumns(Mat3p *m, Mat3p *out, q20 x, q20 y, q20 z); +void Mat3p_InitXRotation(Mat3p *m, q20 sin, q20 cos); +void Mat3p_InitYRotation(Mat3p *m, q20 sin, q20 cos); +void Mat3p_InitZRotation(Mat3p *m, q20 sin, q20 cos); +void Mat3p_func_01ff8248(Mat3p *m, Vec3p *v, q20 scale, q20 offset); +void Mat3p_func_01ff83a0(Mat3p *a, Mat3p *b); +void Mat3p_Multiply(Mat3p *a, Mat3p *b, Mat3p *out); +void Mat3p_MultiplyVec(Vec3p *v, Mat3p *m, Vec3p *out); + +void Mat4x3p_InitIdentity(Mat4x3p *m); +void Mat4x3p_CopyToMat4p(Mat4x3p *m, Mat4p *out); +void Mat4x3p_func_01ff8988(Mat4x3p *m, Mat4x3p *out, q20 x, q20 y, q20 z); +void Mat4x3p_InitScale(Mat4x3p *m, q20 x, q20 y, q20 z); +void Mat4x3p_ScaleColumns(Mat4x3p *m, Mat4x3p *out, q20 x, q20 y, q20 z); +void Mat4x3p_InitXRotation(Mat4x3p *m, q20 sin, q20 cos); +void Mat4x3p_InitYRotation(Mat4x3p *m, q20 sin, q20 cos); +void Mat4x3p_InitZRotation(Mat4x3p *m, q20 sin, q20 cos); +void Mat4x3p_func_01ff8ad8(Mat4x3p *m, Vec3p *v, q20 scale, q20 offset); +void Mat4x3p_func_01ff8af8(Mat4x3p *a, Mat4x3p *b); +void Mat4x3p_Multiply(Mat4x3p *a, Mat4x3p *b, Mat4x3p *out); +void Mat4x3p_MultiplyVec(Vec3p *v, Mat4x3p *m, Vec3p *out); + +void Mat4p_InitIdentity(Mat4p *m); +void Mat4p_CopyToMat4x3p(Mat4p *m, Mat4x3p *out); +void Mat4p_InitZRotation(Mat4p *m, q20 sin, q20 cos); +void Mat4p_Multiply(Mat4p *a, Mat4p *b, Mat4p *out); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/00_Second/Actor/Actor.cpp b/src/00_Second/Actor/Actor.cpp new file mode 100644 index 00000000..512c82ab --- /dev/null +++ b/src/00_Second/Actor/Actor.cpp @@ -0,0 +1,177 @@ +#include "Actor/Actor.hpp" +#include "Unknown/UnkStruct_027e0cd8.hpp" +#include "Unknown/UnkStruct_027e0ce0.hpp" + +ARM Actor::Actor() { + unk32 temp_r2; + unk32 temp_ip; + unk32 temp_r3; + + this->mUnk_1c.x = 0; + this->mUnk_1c.y = 0; + this->mUnk_1c.z = 0; + this->mUnk_2c = 0xCD; + this->mUnk_38 = 0; + this->mUnk_3c = 0; + this->mUnk_40 = 0; + this->mUnk_48 = 4; + this->mUnk_4c = -1; + this->mUnk_50 = 0; + this->mUnk_52 = 0; + this->mUnk_54 = 0; + this->mUnk_58 = 0; + this->mUnk_84 = 0; + this->mUnk_5c.func_ov000_020975f8(); + this->mUnk_8c = 0; + this->mUnk_90 = 0; + data_ov000_020b539c.func_02028cdc(&this->mUnk_5c, 0x30); + temp_r2 = this->mUnk_5c.mUnk_00; + temp_ip = this->mUnk_60; + temp_r3 = this->mUnk_64; + this->mUnk_04 = temp_r2; + this->mUnk_10 = temp_r2; + this->mUnk_28 = this->mUnk_68; + this->mUnk_58 = 0x400B; + this->mUnk_44 = 0xFF; + this->mUnk_08 = temp_ip; + this->mUnk_0c = temp_r3; + this->mUnk_14 = temp_ip; + this->mUnk_18 = temp_r3; + this->mUnk_46 = 0; + this->func_ov000_0209862c(0); + this->func_ov000_0209848c(data_ov000_020b539c.mUnk_30); +} + +ARM Actor::~Actor() {} + +// non-matching (equivalent) +ARM void Actor::func_ov000_0209848c(UnkStruct_ov000_020b539c_30 *param1) { + s16 unk_1c; + unk32 *temp_r3; + + unk_1c = param1->mUnk_1c; + temp_r3 = ¶m1->mUnk_04; + + this->mUnk_90 = param1; + this->mUnk_30 = this->mUnk_34 = temp_r3; + this->mUnk_4e = unk_1c; +} + +ARM unk32 Actor::vfunc_18() { + return 1; +} + +ARM void Actor::vfunc_1c() {} + +ARM void Actor::vfunc_20() {} + +ARM void Actor::vfunc_24() {} + +ARM void Actor::vfunc_28() {} + +ARM void Actor::vfunc_2c() {} + +ARM void Actor::vfunc_30() {} + +ARM unk32 Actor::vfunc_34() { + return 1; +} + +ARM void Actor::func_ov000_020984d0() { + this->mUnk_58 &= ~1; + + if (this->mUnk_58 & 0x10000) { + this->func_ov000_020984f0(); + } +} + +ARM void Actor::func_ov000_020984f0() { + if (this->mUnk_80 >= 0) { + data_027e0cd8->func_ov000_02081ecc(this->mUnk_80, 1); + } +} + +// non-matching +ARM unk32 Actor::vfunc_00(UnkStruct_vfunc_00 *param1) { + unk32 iVar1; + unk32 uVar2; + + uVar2 = this->mUnk_0c; + iVar1 = this->mUnk_08 + this->mUnk_4e; + param1->mUnk_00 = this->mUnk_04; + param1->mUnk_04 = iVar1; + param1->mUnk_08 = uVar2; + return iVar1; +} + +ARM void Actor::func_ov000_0209853c(void) { + data_027e0ce0->func_01fff148(); +} + +ARM bool Actor::vfunc_04() { + return this->mUnk_90->mUnk_1e & 1; +} + +ARM unk16 Actor::vfunc_08() { + return this->mUnk_90->mUnk_1a; +} + +ARM unk8 Actor::vfunc_0c() { + return this->mUnk_90->mUnk_18; +} + +// non-matching +ARM unk32 Actor::vfunc_38(unk32 param1) { + u16 var_r3; + short stack_c; + + var_r3 = param1 >> 16; + + if (this->mUnk_58 & 0x100) { + return 0; + } + + this->mUnk_58 |= 0x100; + stack_c = this->mUnk_58; + + switch (stack_c) { + case 0x100: + case 0x101: + if (stack_c == 0x101) { + var_r3 = 0; + } + + // ??? + *(&this->mUnk_4a + var_r3) = 0; + break; + default: + break; + } + + return 1; +} + +// non-matching +ARM bool Actor::vfunc_3c(Vec3p *param1) { + if (this->mUnk_58 & 0x100) { + this->mUnk_1c.x = param1->x; + this->mUnk_1c.y = param1->y; + this->mUnk_1c.z = param1->z; + this->mUnk_58 &= ~0x100; + return true; + } + + return false; +} + +// non-matching +ARM void Actor::func_ov000_0209862c(unk32 param1) { + s8 var_ip; + void *temp_r2; + + var_ip = 0; + do { + var_ip += 1; + (&this->mUnk_4a)[var_ip] = param1; + } while (var_ip < 2); +} diff --git a/tools/mangle.py b/tools/mangle.py index 68d2aeb3..af18bcf5 100644 --- a/tools/mangle.py +++ b/tools/mangle.py @@ -17,7 +17,7 @@ libc_include_dir = libs_dir / 'c' / 'include' libcpp_include_dir = libs_dir / 'cpp' / 'include' if platform.system() == 'Windows': cc = [str(cc_path)] -else: cc = ['wine', str(cc_path)] +else: cc = ['./wibo', str(cc_path)] args = parser.parse_args()