From c806d36e26cf6022bdf16ca61b7827374e39640f Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 23 May 2024 19:31:57 +0200 Subject: [PATCH] Decomp `Actor` --- asm/ov00/Actor/Actor.s | 8 +- asm/ov00/ov00_020c3e54.inc | 2 +- asm/ov00/ov00_020c3e54.s | 2 +- asm/ov14/ov14_0211f640.inc | 2 +- asm/ov14/ov14_0211f640.s | 8 +- asm/ov15.inc | 2 +- asm/ov15.s | 40 +++++----- asm/ov18.inc | 2 +- asm/ov18.s | 2 +- asm/ov19.inc | 2 +- asm/ov19.s | 4 +- asm/ov23.inc | 2 +- asm/ov23.s | 2 +- asm/ov27.inc | 2 +- asm/ov27.s | 4 +- asm/ov28.inc | 2 +- asm/ov28.s | 8 +- asm/ov29.inc | 2 +- asm/ov29.s | 10 +-- asm/ov34.inc | 2 +- asm/ov34.s | 2 +- asm/ov35.inc | 2 +- asm/ov35.s | 6 +- asm/ov36.inc | 2 +- asm/ov36.s | 8 +- asm/ov37.inc | 2 +- asm/ov37.s | 4 +- asm/ov38.inc | 2 +- asm/ov38.s | 12 +-- asm/ov39.inc | 2 +- asm/ov39.s | 4 +- asm/ov41.inc | 2 +- asm/ov41.s | 4 +- asm/ov42.inc | 2 +- asm/ov42.s | 6 +- asm/ov46.inc | 2 +- asm/ov46.s | 2 +- asm/ov48.inc | 4 +- asm/ov48.s | 6 +- asm/ov51.inc | 2 +- asm/ov51.s | 4 +- asm/ov52.inc | 2 +- asm/ov52.s | 2 +- include/Actor/Actor.hpp | 8 +- include/Actor/ActorManager.hpp | 8 +- include/Actor/ActorRef.hpp | 4 + src/00_Core/Actor/Actor.cpp | 122 +++++++++++++++++++++++++++-- src/00_Core/Actor/ActorManager.cpp | 8 +- 48 files changed, 227 insertions(+), 115 deletions(-) diff --git a/asm/ov00/Actor/Actor.s b/asm/ov00/Actor/Actor.s index 8ca3a034..78e8b718 100644 --- a/asm/ov00/Actor/Actor.s +++ b/asm/ov00/Actor/Actor.s @@ -1314,9 +1314,9 @@ _ZN5Actor18func_ov00_020c23d4EP8ActorRefPS_P8Cylinder: ; 0x020c23d4 _020c2438: .word gActorManager arm_func_end _ZN5Actor18func_ov00_020c23d4EP8ActorRefPS_P8Cylinder - .global _ZN5Actor18func_ov00_020c243cEiPi - arm_func_start _ZN5Actor18func_ov00_020c243cEiPi -_ZN5Actor18func_ov00_020c243cEiPi: ; 0x020c243c + .global _ZN5Actor18func_ov00_020c243cEPjPi + arm_func_start _ZN5Actor18func_ov00_020c243cEPjPi +_ZN5Actor18func_ov00_020c243cEPjPi: ; 0x020c243c stmdb sp!, {r3, r4, r5, r6, r7, lr} sub sp, sp, #0x18 movs r6, r2 @@ -1534,7 +1534,7 @@ _020c2734: .word 0x54534248 _020c2738: .word 0x54415255 _020c273c: .word 0x54535542 _020c2740: .word 0x564c5230 - arm_func_end _ZN5Actor18func_ov00_020c243cEiPi + arm_func_end _ZN5Actor18func_ov00_020c243cEPjPi .global _ZN5Actor12CollidesWithEPKS_ arm_func_start _ZN5Actor12CollidesWithEPKS_ diff --git a/asm/ov00/ov00_020c3e54.inc b/asm/ov00/ov00_020c3e54.inc index a6cb7c85..a595cd9b 100644 --- a/asm/ov00/ov00_020c3e54.inc +++ b/asm/ov00/ov00_020c3e54.inc @@ -63,7 +63,7 @@ .extern _ZN5Actor18func_ov00_020c1c20Eii .extern _ZN5Actor18func_ov00_020c1cf8Ev .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c29ecEi .extern _ZN5Actor18func_ov00_020c3118Es .extern _ZN5Actor18func_ov00_020c313cEj diff --git a/asm/ov00/ov00_020c3e54.s b/asm/ov00/ov00_020c3e54.s index 7e0b6ebf..3a4ed826 100644 --- a/asm/ov00/ov00_020c3e54.s +++ b/asm/ov00/ov00_020c3e54.s @@ -9468,7 +9468,7 @@ func_ov00_020cb58c: ; 0x020cb58c mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _020cb604 _020cb5fc: diff --git a/asm/ov14/ov14_0211f640.inc b/asm/ov14/ov14_0211f640.inc index c7f19c39..7b0d5279 100644 --- a/asm/ov14/ov14_0211f640.inc +++ b/asm/ov14/ov14_0211f640.inc @@ -84,7 +84,7 @@ .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c2c0cEv .extern _ZN5Actor18func_ov00_020c2c70Ev .extern _ZN5Actor18func_ov00_020c2d54Ev diff --git a/asm/ov14/ov14_0211f640.s b/asm/ov14/ov14_0211f640.s index 7685af21..bbcb7b12 100644 --- a/asm/ov14/ov14_0211f640.s +++ b/asm/ov14/ov14_0211f640.s @@ -935,7 +935,7 @@ func_ov14_02120118: ; 0x02120118 _02120154: ldr r1, _0212017c ; =data_ov14_02153b54 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 ldmeqia sp!, {r4, pc} mov r0, r4 @@ -3566,7 +3566,7 @@ _021225a4: ldr r1, _02122aec ; =data_ov14_02153bdc mov r0, r5 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _021225cc mov r0, r5 @@ -3577,7 +3577,7 @@ _021225cc: ldr r1, _02122af0 ; =data_ov14_02153be8 add r2, sp, #8 mov r0, r5 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02122650 ldr r1, [sp, #8] @@ -6159,7 +6159,7 @@ _021247b0: ldr r1, _02124c5c ; =data_ov14_02153bfc mov r0, r5 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _021247d8 mov r0, r5 diff --git a/asm/ov15.inc b/asm/ov15.inc index dfa1051f..8171fede 100644 --- a/asm/ov15.inc +++ b/asm/ov15.inc @@ -101,7 +101,7 @@ .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ .extern _ZN5Actor18func_ov00_020c23d4EP8ActorRefPS_P8Cylinder -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor20IncreaseActiveFramesEv .extern _ZN5Actor4KillEv diff --git a/asm/ov15.s b/asm/ov15.s index 8d1f2cb9..74202c94 100644 --- a/asm/ov15.s +++ b/asm/ov15.s @@ -5033,7 +5033,7 @@ func_ov15_02123a9c: ; 0x02123a9c ldr r1, [r5, #0x158] mov r0, r5 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 bne _02123b10 mov r0, r5 @@ -6716,7 +6716,7 @@ func_ov15_02125210: ; 0x02125210 ble _02125270 add r2, sp, #0 mov r1, r4 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02125270 ldr r1, [sp] @@ -23361,7 +23361,7 @@ func_ov15_02133094: ; 0x02133094 ldr r3, [r5, #0x50] mov r2, r1 str r3, [r5, #0x5c] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r5 ldr r1, [r0] ldr r1, [r1, #0xb4] @@ -25459,7 +25459,7 @@ func_ov15_02134d6c: ; 0x02134d6c bne _02134dd0 ldr r1, _02135104 ; =data_ov15_02185ea0 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02134dd0 ldrb r0, [r4, #0x217] @@ -34572,7 +34572,7 @@ _0213cbd8: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _0213cbf0: ldr r0, [r5, #0x284] sub r0, r0, #1 @@ -37704,7 +37704,7 @@ func_ov15_0213f5cc: ; 0x0213f5cc str r3, [r4, #0x64] ldr r3, [r5, #0x68] str r3, [r4, #0x68] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _0213f658: ldr r0, [r5, #0x130] ldr r1, _0213f7b0 ; =data_ov15_02185fcc @@ -39727,7 +39727,7 @@ func_ov15_021411c4: ; 0x021411c4 ldr r3, [sp, #8] mov r2, r1 str r3, [r4, #0x50] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add sp, sp, #0xc ldmia sp!, {r3, r4, pc} .align 2, 0 @@ -56084,7 +56084,7 @@ func_ov15_0214ed58: ; 0x0214ed58 ldr r3, [r4, #0x50] mov r2, r1 str r3, [r4, #0x5c] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 ldr r1, [r0] ldr r1, [r1, #0xb4] @@ -58086,7 +58086,7 @@ _02150954: ldr r3, [r5, #0x50] mov r2, r1 str r3, [r5, #0x5c] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r5 ldr r1, [r0] ldr r1, [r1, #0xb4] @@ -64373,7 +64373,7 @@ _02156144: mov r1, #0 mov r0, r6 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _02156154: add r0, r6, #0x1b4 bl func_ov00_020c5e20 @@ -76967,7 +76967,7 @@ _02160d04: ldr r3, [r5, #0x50] mov r2, r1 str r3, [r5, #0x5c] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r5 ldr r1, [r0] ldr r1, [r1, #0xb4] @@ -83046,7 +83046,7 @@ func_ov15_0216629c: ; 0x0216629c ldr r1, _02166390 ; =data_ov15_021867f0 mov r0, r5 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _0216633c _02166328: @@ -86817,7 +86817,7 @@ _02169544: mov r0, r10 mov r2, r1 str r3, [r10, #0x2d4] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldr r0, [r10, #0x130] cmp r0, #3 beq _02169648 @@ -89524,12 +89524,12 @@ _0216b9c0: .word data_027e0d78 .global func_ov15_0216b9c4 arm_func_start func_ov15_0216b9c4 func_ov15_0216b9c4: ; 0x0216b9c4 - ldr ip, _0216b9d4 ; =_ZN5Actor18func_ov00_020c243cEiPi + ldr ip, _0216b9d4 ; =_ZN5Actor18func_ov00_020c243cEPjPi ldr r1, _0216b9d8 ; =data_ov15_02186a38 mov r2, #0 bx ip .align 2, 0 -_0216b9d4: .word _ZN5Actor18func_ov00_020c243cEiPi +_0216b9d4: .word _ZN5Actor18func_ov00_020c243cEPjPi _0216b9d8: .word data_ov15_02186a38 arm_func_end func_ov15_0216b9c4 @@ -95226,7 +95226,7 @@ _02170790: ldr r1, _021707e0 ; =data_ov15_02186c7c mov r0, r4 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 bl func_ov15_021724d0 add r0, r4, #0x158 @@ -98811,7 +98811,7 @@ _02173a50: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02173b28 ldr r0, [r4, #0x160] @@ -104096,7 +104096,7 @@ _02178204: ldr r3, [r4, #0x50] mov r2, r1 str r3, [r4, #0x5c] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 ldr r1, [r0] ldr r1, [r1, #0xb4] @@ -107908,7 +107908,7 @@ func_ov15_0217b7d8: ; 0x0217b7d8 ldr r3, [r4, #0x50] mov r2, r1 str r3, [r4, #0x5c] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 bl func_ov15_0217b3cc ldmia sp!, {r4, pc} @@ -109070,7 +109070,7 @@ _0217c7a4: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r5 bl _ZN5Actor12ApplyGravityEv add r0, r5, #0x48 diff --git a/asm/ov18.inc b/asm/ov18.inc index 1d4405f5..06de2822 100644 --- a/asm/ov18.inc +++ b/asm/ov18.inc @@ -29,7 +29,7 @@ .extern _ZN5Actor18func_Ov00_020c1bfcEi .extern _ZN5Actor18func_ov00_020c1cf8Ev .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor6GetPosEv .extern _ZN5Actor8vfunc_0cEv diff --git a/asm/ov18.s b/asm/ov18.s index 988680e0..884917a2 100644 --- a/asm/ov18.s +++ b/asm/ov18.s @@ -12729,7 +12729,7 @@ func_ov18_0216585c: ; 0x0216585c mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 ldmneia sp!, {r4, pc} mov r0, r4 diff --git a/asm/ov19.inc b/asm/ov19.inc index 8f9f08a9..af8c1c38 100644 --- a/asm/ov19.inc +++ b/asm/ov19.inc @@ -53,7 +53,7 @@ .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ .extern _ZN5Actor18func_ov00_020c23d4EP8ActorRefPS_P8Cylinder -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c29ecEi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor18func_ov00_020c31c0Ei diff --git a/asm/ov19.s b/asm/ov19.s index c0708f05..3d1c1c86 100644 --- a/asm/ov19.s +++ b/asm/ov19.s @@ -1671,7 +1671,7 @@ _0216ec94: mov r0, r4 mov r2, r1 str r3, [r4, #0x88] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi b _0216ece8 _0216ecbc: ldr r2, [r4, #0x158] @@ -9216,7 +9216,7 @@ _02174fa8: add r2, sp, #8 mov r0, r4 str r3, [r4, #0x88] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02174ff8 mov r0, r4 diff --git a/asm/ov23.inc b/asm/ov23.inc index 733d0ddb..b69a26f3 100644 --- a/asm/ov23.inc +++ b/asm/ov23.inc @@ -83,7 +83,7 @@ .extern _ZN5Actor18func_ov00_020c1c20Eii .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1ef8EP8CylinderP5Vec3pii -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor4KillEv .extern _ZN5Actor6GetPosEv diff --git a/asm/ov23.s b/asm/ov23.s index 8f7a58f4..12134424 100644 --- a/asm/ov23.s +++ b/asm/ov23.s @@ -9572,7 +9572,7 @@ _021754bc: add r2, sp, #0 ldr r1, [r0, #0x20] mov r0, r6 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _021755b8 ldr r1, [sp] diff --git a/asm/ov27.inc b/asm/ov27.inc index a0fe6bf1..9a247809 100644 --- a/asm/ov27.inc +++ b/asm/ov27.inc @@ -37,7 +37,7 @@ .extern _ZN5Actor18func_ov00_020c1ef8EP8CylinderP5Vec3pii .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor20IncreaseActiveFramesEv .extern _ZN5Actor6GetPosEv diff --git a/asm/ov27.s b/asm/ov27.s index 17ab3922..5a0923aa 100644 --- a/asm/ov27.s +++ b/asm/ov27.s @@ -2155,7 +2155,7 @@ _0216f544: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add sp, sp, #0x20 ldmia sp!, {r4, pc} .align 2, 0 @@ -9234,7 +9234,7 @@ _02175454: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _021754a4: ldr r0, _02175554 ; =gMapManager ldrh r1, [r4, #0x20] diff --git a/asm/ov28.inc b/asm/ov28.inc index cba911db..4c086e84 100644 --- a/asm/ov28.inc +++ b/asm/ov28.inc @@ -40,7 +40,7 @@ .extern _ZN5Actor18func_ov00_020c198cEv .extern _ZN5Actor18func_ov00_020c1c20Eii .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c3094Ev .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor20IncreaseActiveFramesEv diff --git a/asm/ov28.s b/asm/ov28.s index b218d52c..0b98fb3e 100644 --- a/asm/ov28.s +++ b/asm/ov28.s @@ -4339,12 +4339,12 @@ _02170f08: .global func_ov28_02170f10 arm_func_start func_ov28_02170f10 func_ov28_02170f10: ; 0x02170f10 - ldr ip, _02170f20 ; =_ZN5Actor18func_ov00_020c243cEiPi + ldr ip, _02170f20 ; =_ZN5Actor18func_ov00_020c243cEPjPi mov r1, #0 mov r2, r1 bx ip .align 2, 0 -_02170f20: .word _ZN5Actor18func_ov00_020c243cEiPi +_02170f20: .word _ZN5Actor18func_ov00_020c243cEPjPi arm_func_end func_ov28_02170f10 .global func_ov28_02170f24 @@ -7501,7 +7501,7 @@ func_ov28_021736d0: ; 0x021736d0 mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 ldmneia sp!, {r4, pc} mov r0, r4 @@ -9383,7 +9383,7 @@ func_ov28_02174ec4: ; 0x02174ec4 mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 bne _02174f18 mov r0, r4 diff --git a/asm/ov29.inc b/asm/ov29.inc index e6c53607..6548ab28 100644 --- a/asm/ov29.inc +++ b/asm/ov29.inc @@ -30,7 +30,7 @@ .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c2ebcEv .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor6GetPosEv diff --git a/asm/ov29.s b/asm/ov29.s index cda4f0cb..d6a5dea9 100644 --- a/asm/ov29.s +++ b/asm/ov29.s @@ -5194,7 +5194,7 @@ _02171bfc: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldmia sp!, {r4, pc} arm_func_end func_ov29_02171bd8 @@ -5227,7 +5227,7 @@ _02171c68: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldmia sp!, {r4, pc} _02171ca4: ldrb r0, [r4, #0x334] @@ -5390,7 +5390,7 @@ _02171eb8: mov r1, #0 mov r0, r6 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add sp, sp, #0x18 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 @@ -5498,7 +5498,7 @@ _02172028: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _0217204c: add r0, r5, #0x290 bl func_0202e58c @@ -6767,7 +6767,7 @@ func_ov29_02173098: ; 0x02173098 mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _02173108: ldr r0, [r4, #0x284] cmp r0, #0 diff --git a/asm/ov34.inc b/asm/ov34.inc index be908e96..d1f28bec 100644 --- a/asm/ov34.inc +++ b/asm/ov34.inc @@ -21,7 +21,7 @@ .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c2e7cEv .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor4KillEv diff --git a/asm/ov34.s b/asm/ov34.s index daa33249..05811d9f 100644 --- a/asm/ov34.s +++ b/asm/ov34.s @@ -9439,7 +9439,7 @@ _02184310: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 bne _0218434c mov r0, r5 diff --git a/asm/ov35.inc b/asm/ov35.inc index 0c1d6d27..a65163dd 100644 --- a/asm/ov35.inc +++ b/asm/ov35.inc @@ -34,7 +34,7 @@ .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1fc8Ej .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor18func_ov00_020c3200Ei .extern _ZN5Actor20IncreaseActiveFramesEv diff --git a/asm/ov35.s b/asm/ov35.s index 06c6d9b8..010d7383 100644 --- a/asm/ov35.s +++ b/asm/ov35.s @@ -673,7 +673,7 @@ _0217c6b0: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldr r0, _0217c700 ; =data_027e0ff4 mov r1, r4 ldr r0, [r0] @@ -8306,7 +8306,7 @@ func_ov35_0218307c: ; 0x0218307c ldr r1, _021830c0 ; =data_ov35_02185374 mov r0, r5 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi orrs r0, r4, r0 movne r0, #1 moveq r0, #0 @@ -10226,7 +10226,7 @@ func_ov35_02184aa4: ; 0x02184aa4 ldr r1, _02184b10 ; =data_ov35_02185640 mov r0, r4 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldmia sp!, {r4, pc} .align 2, 0 _02184b10: .word data_ov35_02185640 diff --git a/asm/ov36.inc b/asm/ov36.inc index 08943fd7..e5c9009b 100644 --- a/asm/ov36.inc +++ b/asm/ov36.inc @@ -25,7 +25,7 @@ .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1fc8Ej .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor20IncreaseActiveFramesEv .extern _ZN5Actor20KillPickupItemActorsEv diff --git a/asm/ov36.s b/asm/ov36.s index 5928578b..07ed1c50 100644 --- a/asm/ov36.s +++ b/asm/ov36.s @@ -11190,7 +11190,7 @@ _02185a24: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 bne _021859d0 ldr r1, [sp, #0x28] @@ -11215,7 +11215,7 @@ _02185a24: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add sp, sp, #0x34 ldmia sp!, {r3, r4, pc} _02185af4: @@ -11224,7 +11224,7 @@ _02185af4: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add sp, sp, #0x34 ldmia sp!, {r3, r4, pc} .align 2, 0 @@ -12023,7 +12023,7 @@ _021865f4: ldr r1, _02186644 ; =data_ov36_02186ba8 mov r0, r5 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _02186620: mov r1, r4 add r0, r5, #0xa4 diff --git a/asm/ov37.inc b/asm/ov37.inc index 6e76b37c..abfc0249 100644 --- a/asm/ov37.inc +++ b/asm/ov37.inc @@ -28,7 +28,7 @@ .extern _ZN5Actor18func_ov00_020c1ef8EP8CylinderP5Vec3pii .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor20IncreaseActiveFramesEv .extern _ZN5Actor20KillPickupItemActorsEv diff --git a/asm/ov37.s b/asm/ov37.s index 487facbb..b5efbd9f 100644 --- a/asm/ov37.s +++ b/asm/ov37.s @@ -10545,7 +10545,7 @@ func_ov37_021850cc: ; 0x021850cc mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02185104 _021850fc: @@ -13034,7 +13034,7 @@ _021870d0: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _0218738c _021871e8: diff --git a/asm/ov38.inc b/asm/ov38.inc index 4215f602..fefff628 100644 --- a/asm/ov38.inc +++ b/asm/ov38.inc @@ -25,7 +25,7 @@ .extern _ZN5Actor18func_ov00_020c198cEv .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c2e7cEv .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor6GetPosEv diff --git a/asm/ov38.s b/asm/ov38.s index a2851cc6..cbf34bc6 100644 --- a/asm/ov38.s +++ b/asm/ov38.s @@ -4026,7 +4026,7 @@ _0217f608: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 mov r1, #0x1a bl _ZN5Actor18func_ov00_020c1fc8Ej @@ -4394,7 +4394,7 @@ _0217fb24: mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 mov r1, #0x1a bl _ZN5Actor18func_ov00_020c1fc8Ej @@ -4506,7 +4506,7 @@ _0217fc7c: mov r0, r4 mov r2, r1 strb r1, [r3, #0xa7] - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r0, r4 mov r1, #0x1a bl _ZN5Actor18func_ov00_020c1fc8Ej @@ -6863,7 +6863,7 @@ _02181dbc: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add r1, r5, #0x1000 add r0, r5, #0x38 ldr r1, [r1, #0x3c] @@ -7386,7 +7386,7 @@ _02182528: mov r1, #0 mov r0, r6 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi add sp, sp, #0x10 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 @@ -8655,7 +8655,7 @@ _021836c8: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _0218376c: mov r0, r5 bl func_ov38_02182db8 diff --git a/asm/ov39.inc b/asm/ov39.inc index 790f3437..eb944681 100644 --- a/asm/ov39.inc +++ b/asm/ov39.inc @@ -32,7 +32,7 @@ .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1ef8EP8CylinderP5Vec3pii .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor20IncreaseActiveFramesEv .extern _ZN5Actor6GetPosEv diff --git a/asm/ov39.s b/asm/ov39.s index f0a1b44c..3d4a975c 100644 --- a/asm/ov39.s +++ b/asm/ov39.s @@ -1999,7 +1999,7 @@ _0217d83c: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _0217d86c: ldr r0, [r5, #0x158] tst r0, #0x40 @@ -3128,7 +3128,7 @@ func_ov39_0217e82c: ; 0x0217e82c mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldr r0, [r4, #0x130] cmp r0, #0x10 ldmneia sp!, {r4, pc} diff --git a/asm/ov41.inc b/asm/ov41.inc index 995fa139..71fe15f7 100644 --- a/asm/ov41.inc +++ b/asm/ov41.inc @@ -25,7 +25,7 @@ .extern _ZN5Actor18func_Ov00_020c1bfcEi .extern _ZN5Actor18func_ov00_020c1e2cEiP5Vec3p .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor18func_ov00_020c31c0Ei .extern _ZN5Actor4KillEv diff --git a/asm/ov41.s b/asm/ov41.s index 26f7832c..6236cfbf 100644 --- a/asm/ov41.s +++ b/asm/ov41.s @@ -1254,7 +1254,7 @@ func_ov41_0218a4d8: ; 0x0218a4d8 mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _0218a510 _0218a508: @@ -2405,7 +2405,7 @@ func_ov41_0218b34c: ; 0x0218b34c mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _0218b384 _0218b37c: diff --git a/asm/ov42.inc b/asm/ov42.inc index bfcb6802..a727d6ee 100644 --- a/asm/ov42.inc +++ b/asm/ov42.inc @@ -14,7 +14,7 @@ .extern _ZN5Actor15IsHitboxTouchedEb .extern _ZN5Actor15TrySetTransformEP9Transform .extern _ZN5Actor16CollidesWithLinkEv -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor6GetPosEv .extern _ZN5Actor8vfunc_08Ev diff --git a/asm/ov42.s b/asm/ov42.s index d6fe2b7e..15f9e713 100644 --- a/asm/ov42.s +++ b/asm/ov42.s @@ -1689,12 +1689,12 @@ func_ov42_0218aab0: ; 0x0218aab0 .global func_ov42_0218aad4 arm_func_start func_ov42_0218aad4 func_ov42_0218aad4: ; 0x0218aad4 - ldr ip, _0218aae4 ; =_ZN5Actor18func_ov00_020c243cEiPi + ldr ip, _0218aae4 ; =_ZN5Actor18func_ov00_020c243cEPjPi mov r1, #0 mov r2, r1 bx ip .align 2, 0 -_0218aae4: .word _ZN5Actor18func_ov00_020c243cEiPi +_0218aae4: .word _ZN5Actor18func_ov00_020c243cEPjPi arm_func_end func_ov42_0218aad4 .global func_ov42_0218aae8 @@ -3813,7 +3813,7 @@ func_ov42_0218c620: ; 0x0218c620 ldmneia sp!, {r3, pc} ldr r1, _0218c640 ; =data_ov42_0218c73c mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldmia sp!, {r3, pc} .align 2, 0 _0218c640: .word data_ov42_0218c73c diff --git a/asm/ov46.inc b/asm/ov46.inc index a594f808..642edde7 100644 --- a/asm/ov46.inc +++ b/asm/ov46.inc @@ -21,7 +21,7 @@ .extern _ZN5Actor16CollidesWithLinkEv .extern _ZN5Actor18func_ov00_020c1ef8EP8CylinderP5Vec3pii .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor6GetPosEv .extern _ZN5Actor8vfunc_0cEv diff --git a/asm/ov46.s b/asm/ov46.s index 4dc2cbc5..c89ae28f 100644 --- a/asm/ov46.s +++ b/asm/ov46.s @@ -4088,7 +4088,7 @@ func_ov46_02193574: ; 0x02193574 mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 bne _0219367c ldr r0, [r4, #0x158] diff --git a/asm/ov48.inc b/asm/ov48.inc index dd7a54f6..87935b01 100644 --- a/asm/ov48.inc +++ b/asm/ov48.inc @@ -22,7 +22,7 @@ .extern _ZN5Actor18func_ov00_020c1d58Ev .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor18func_ov00_020c3200Ei .extern _ZN5Actor20IncreaseActiveFramesEv @@ -82,7 +82,7 @@ .extern _ZN5Actor18func_ov00_020c1d58Ev .extern _ZN5Actor18func_ov00_020c1f5cEP5Vec3pS1_iS1_hi .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor18func_ov00_020c3200Ei .extern _ZN5Actor20IncreaseActiveFramesEv diff --git a/asm/ov48.s b/asm/ov48.s index 02be7ecf..2f83d6c5 100644 --- a/asm/ov48.s +++ b/asm/ov48.s @@ -1796,7 +1796,7 @@ func_ov48_02191478: ; 0x02191478 mov r1, #0 ldr r0, [r4, #0x530] mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _021915f8 ldr r2, [r4, #0x530] @@ -3340,7 +3340,7 @@ _02192804: mov r1, #0 mov r0, r8 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 beq _02192b5c _0219283c: @@ -4818,7 +4818,7 @@ _02193b5c: mov r0, r10 mov r1, r3 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi mov r2, #0 add r1, sp, #0x258 mvn r3, #0 diff --git a/asm/ov51.inc b/asm/ov51.inc index 1dced8a0..134394bd 100644 --- a/asm/ov51.inc +++ b/asm/ov51.inc @@ -17,7 +17,7 @@ .extern _ZN5Actor18func_ov00_020c1ef8EP8CylinderP5Vec3pii .extern _ZN5Actor18func_ov00_020c1fc8Ej .extern _ZN5Actor18func_ov00_020c23c4EP8ActorRefPS_ -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor18func_ov00_020c3200Ei .extern _ZN5Actor20IncreaseActiveFramesEv diff --git a/asm/ov51.s b/asm/ov51.s index a1d6f2fc..458ac3df 100644 --- a/asm/ov51.s +++ b/asm/ov51.s @@ -653,7 +653,7 @@ _02195d14: mov r1, #0 mov r0, r5 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi cmp r0, #0 bne _02195e80 mov r0, r5 @@ -2417,7 +2417,7 @@ func_ov51_02197314: ; 0x02197314 mov r1, r3 mov r0, r4 mov r2, #0 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi _021973d8: add r0, r4, #0x100 ldrsh r1, [r0, #0xd6] diff --git a/asm/ov52.inc b/asm/ov52.inc index 6d69e647..4f0444aa 100644 --- a/asm/ov52.inc +++ b/asm/ov52.inc @@ -23,7 +23,7 @@ .extern _ZN5Actor16CollidesWithLinkEv .extern _ZN5Actor18func_ov00_020c1cf8Ev .extern _ZN5Actor18func_ov00_020c1fc8Ej -.extern _ZN5Actor18func_ov00_020c243cEiPi +.extern _ZN5Actor18func_ov00_020c243cEPjPi .extern _ZN5Actor18func_ov00_020c313cEj .extern _ZN5Actor6GetPosEv .extern _ZN5Actor8vfunc_08Ev diff --git a/asm/ov52.s b/asm/ov52.s index 9ec3a52b..25949de9 100644 --- a/asm/ov52.s +++ b/asm/ov52.s @@ -1634,7 +1634,7 @@ func_ov52_0219699c: ; 0x0219699c mov r1, #0 mov r0, r4 mov r2, r1 - bl _ZN5Actor18func_ov00_020c243cEiPi + bl _ZN5Actor18func_ov00_020c243cEPjPi ldmia sp!, {r4, pc} arm_func_end func_ov52_0219699c diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 87c90905..bc8773ad 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -67,8 +67,7 @@ class Actor : public SysObject { public: /* 000 (vtable) */ /* 004 */ ActorTypeId mType; - /* 008 */ unk32 mId; - /* 00c */ unk32 mIndex; + /* 008 */ ActorRef mRef; /* 010 */ u8 mUnk_010; /* 011 */ u8 mUnk_011; /* 012 */ unk16 mUnk_012; @@ -79,8 +78,7 @@ public: /* 034 */ unk32 mUnk_034; /* 038 */ unk32 mUnk_038; /* 03c */ unk32 mUnk_03c; - /* 040 */ unk32 mUnk_040; - /* 044 */ unk32 mUnk_044; + /* 040 */ ActorRef mUnk_040; /* 048 */ Vec3p mPos; /* 054 */ Vec3p mPrevPos; /* 060 */ Vec3p mVel; @@ -207,7 +205,7 @@ public: bool CollidesWithPlayer(PlayerCollide flags); static void func_ov00_020c23c4(ActorRef *ref, Actor *actor); static void func_ov00_020c23d4(ActorRef *ref, Actor *actor, Cylinder *cylinder); - bool func_ov00_020c243c(unk32 param1, s32 *param2); + bool func_ov00_020c243c(ActorTypeId *actorTypes, s32 *param2); bool func_ov00_020c27a8(unk32 param1); bool IsFollowedByLink(); void StopLinkFollow(); diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 59e04a58..12ad2e2f 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -83,16 +83,16 @@ public: Actor* FindActorById(u32 id); Actor* GetActor(ActorRef *ref); s32 FilterActors(FilterActorBase *filter, ActorList *filteredActors); - static void FindActorByType(ActorRef *ref, ActorManager *manager, u32 type); - static void FindNearestActorOfType(ActorRef *ref, ActorManager *manager, u32 type, Vec3p *pos); + static void FindActorByType(ActorRef *ref, ActorManager *manager, ActorTypeId type); + static void FindNearestActorOfType(ActorRef *ref, ActorManager *manager, ActorTypeId type, Vec3p *pos); bool func_ov00_020c398c(u32 index); void func_ov00_020c399c(u32 index, Cylinder *cylinder); - void func_ov00_020c39ac(u32 index, u32 *actorTypes, bool param3); + Actor* func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3); s32 func_ov00_020c3b2c(s32 *param1); s32 func_ov00_020c3bb0(unk32 param1, s32 *param2); void func_ov00_020c3ce8(unk32 param1, unk32 param2); void Actor_vfunc_28(); - static bool ActorTypeIsOneOf(u32 type, u32 *types); + static bool ActorTypeIsOneOf(u32 type, ActorTypeId *types); }; extern ActorManager *gActorManager; diff --git a/include/Actor/ActorRef.hpp b/include/Actor/ActorRef.hpp index 5c9bc461..c96f111f 100644 --- a/include/Actor/ActorRef.hpp +++ b/include/Actor/ActorRef.hpp @@ -9,6 +9,10 @@ struct ActorRef { /* 8 */ inline ActorRef() { + this->Reset(); + } + + inline void Reset() { id = -1; index = -1; } diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index 651d3ae4..1ece30b6 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -4,6 +4,7 @@ extern "C" { #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" +#include "Item/ItemManager.hpp" #include "Map/MapManager.hpp" #include "Player/PlayerLinkBase.hpp" #include "Save/AdventureFlags.hpp" @@ -318,12 +319,121 @@ bool Actor::func_ov00_020c1f5c(Vec3p *param1, Vec3p *param2, s32 param3, Vec3p * return false; } -bool Actor::func_ov00_020c1fc8(PlayerCollide flags) {} -bool Actor::CollidesWithShield(Cylinder *param1) {} -bool Actor::CollidesWithPlayer(PlayerCollide flags) {} -void Actor::func_ov00_020c23c4(ActorRef *ref, Actor *actor) {} -void Actor::func_ov00_020c23d4(ActorRef *ref, Actor *actor, Cylinder *cylinder) {} -bool Actor::func_ov00_020c243c(unk32 param1, s32 *param2) {} +struct Knockback { + u8 mUnk_0c; + Vec3p vec; + unk32 mUnk_10; + unk32 mUnk_14; +}; + +bool Actor::func_ov00_020c1fc8(PlayerCollide flags) { + if (gAdventureFlags->func_ov00_02097738()) return false; + bool result = false; + if (mHitbox.size >= 0) { + Vec3p vecFromPlayer; + Vec3p_Sub(&mPos, &gPlayerPos, &vecFromPlayer); + if (this->CollidesWithPlayer(flags & PlayerCollide_Sword)) { + Knockback knockback; + knockback.mUnk_0c = 0; + knockback.mUnk_10 = 0xb; + knockback.mUnk_14 = 0; + gPlayer->EquipItem_vfunc_2c(); + knockback.vec = vecFromPlayer; + result = this->vfunc_48((unk32) &knockback); + } else if (this->CollidesWithPlayer(flags & PlayerCollide_Shield)) { + Knockback knockback; + knockback.mUnk_10 = 0xb; + knockback.mUnk_14 = 0; + knockback.mUnk_0c = 0; + knockback.vec = vecFromPlayer; + s32 wisdomLvl = gItemManager->GetActiveFairyLevel(FairyId_Wisdom); + if (wisdomLvl >= 1) { + knockback.mUnk_10 = 3; + } else { + knockback.mUnk_10 = 2; + } + result = this->vfunc_48((unk32) &knockback); + } else if (this->CollidesWithPlayer(flags & PlayerCollide_Hammer)) { + Knockback knockback; + knockback.mUnk_0c = 0; + knockback.mUnk_10 = 0xb; + knockback.mUnk_14 = 0; + gPlayer->EquipItem_vfunc_2c(); + knockback.vec = vecFromPlayer; + result = this->vfunc_48((unk32) &knockback); + } else if (this->CollidesWithPlayer(flags & PlayerCollide_Gongoron)) { + Knockback knockback; + knockback.mUnk_0c = 0; + knockback.mUnk_10 = 0xb; + knockback.mUnk_14 = 0; + u8 unk1 = gPlayerLink->vfunc_78(); + knockback.vec = vecFromPlayer; + if (unk1 != 0) { + knockback.mUnk_10 = 9; + } else { + knockback.mUnk_10 = 2; + } + result = this->vfunc_48((unk32) &knockback); + } + } + return result; +} + +bool Actor::CollidesWithShield(Cylinder *param1) { + Vec3p vecFromPlayer; + Vec3p_Sub(&mPos, &gPlayerPos, &vecFromPlayer); + s32 currAngle = gPlayerAngle; + s32 angle = Atan2(vecFromPlayer.x, vecFromPlayer.z); + s32 angleDiff = (s16)angle - currAngle; + if (angleDiff < 0) angleDiff = -angleDiff; + if (angleDiff <= DEG_TO_ANG(90) && gPlayer->EquipCollidesWith(param1, ItemFlag_WoodenShield)) { + return true; + } + return false; +} + +bool Actor::CollidesWithPlayer(PlayerCollide flags) { + if (flags != 0 && mHitbox.size >= 0) { + Cylinder hitbox; + this->GetHitbox(&hitbox); + if (flags & PlayerCollide_Player) { + if (gPlayer->CollidesWith(&hitbox)) return true; + } + if (flags & PlayerCollide_Sword) { + if (gPlayer->EquipCollidesWith(&hitbox, ItemFlag_OshusSword)) return true; + } + if (flags & PlayerCollide_Shield) { + if (this->CollidesWithShield(&hitbox)) return true; + } + if (flags & PlayerCollide_Gongoron) { + if (gPlayerLink && gPlayerLink->GongoronCollidesWith(&hitbox)) return true; + } + if (flags & PlayerCollide_Hammer) { + if (gPlayer->EquipCollidesWith(&hitbox, ItemFlag_Hammer)) return true; + } + } + return false; +} + +void Actor::func_ov00_020c23c4(ActorRef *ref, Actor *actor) { + Actor::func_ov00_020c23d4(ref, actor, &actor->mHitbox); +} + +void Actor::func_ov00_020c23d4(ActorRef *ref, Actor *actor, Cylinder *cylinder) { + *ref = actor->mUnk_040; + if (!gActorManager->func_ov00_020c398c(actor->mRef.index)) { + ref->Reset(); + } + actor->mUnk_040.Reset(); + gActorManager->func_ov00_020c399c(actor->mRef.index, cylinder); +} + +bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, s32 *param2) { + if (param2) *param2 = 0; + if (gAdventureFlags->func_ov00_02097738()) return false; + if (mHitbox.size < 0 || !gActorManager->func_ov00_020c39ac(mRef.index, actorTypes, false)) return false; +} + bool Actor::CollidesWith(const Actor *other) {} bool Actor::func_ov00_020c27a8(unk32 param1) {} bool Actor::CollidesWithLink() {} diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 2c71d197..6740808d 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -9,15 +9,15 @@ Actor* ActorManager::FindActorById(u32 id) {} Actor* ActorManager::GetActor(ActorRef *ref) {} bool FilterActor::Filter(Actor *actor) {} s32 ActorManager::FilterActors(ActorFilterBase *filter, ActorList *filteredActors) {} -void ActorManager::FindActorByType(ActorRef *ref, ActorManager *manager, u32 type) {} -void ActorManager::FindNearestActorOfType(ActorRef *ref, ActorManager *manager, u32 type, Vec3p *pos) {} +void ActorManager::FindActorByType(ActorRef *ref, ActorManager *manager, ActorTypeId type) {} +void ActorManager::FindNearestActorOfType(ActorRef *ref, ActorManager *manager, ActorTypeId type, Vec3p *pos) {} bool ActorManager::func_ov00_020c398c(u32 index) {} void ActorManager::func_ov00_020c399c(u32 index, Cylinder *cylinder) {} -void ActorManager::func_ov00_020c39ac(u32 index, u32 *actorTypes, bool param3) {} +Actor* ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3) {} s32 ActorManager::func_ov00_020c3b2c(s32 *param1) {} s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) {} void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {} void ActorManager::Actor_vfunc_28() {} -bool ActorManager::ActorTypeIsOneOf(u32 type, u32 *types) {} +bool ActorManager::ActorTypeIsOneOf(u32 type, ActorTypeId *types) {} #endif