diff --git a/asm/include/main.inc b/asm/include/main.inc index b20c937d..45ded362 100644 --- a/asm/include/main.inc +++ b/asm/include/main.inc @@ -813,7 +813,7 @@ .extern func_ov00_0207b334 .extern func_ov00_020838e8 .extern func_ov05_02100ae0 -.extern func_ov00_020ab6c8 +.extern _ZN13LinkStateGrab18func_ov00_020ab6c8Ev .extern _ZN11ItemManager8GiveKeysEj .extern _ZN11ItemManager7AddItemEi .extern func_ov00_02087d98 @@ -1223,4 +1223,4 @@ .extern data_ov09_0211e8c0 .extern data_ov13_0211606c .extern data_ov13_02116094 -.extern data_ov12_02134e80 \ No newline at end of file +.extern data_ov12_02134e80 diff --git a/asm/include/ov04.inc b/asm/include/ov04.inc index 314f3659..ebdf945d 100644 --- a/asm/include/ov04.inc +++ b/asm/include/ov04.inc @@ -1535,7 +1535,7 @@ .extern data_027e0f94 .extern data_027e0fd8 .extern func_02035064 -.extern data_ov00_020e5974 +.extern _ZTV13LinkStateGrab .extern func_020350ac .extern func_020350ac .extern _ZN9SysObjectdlEPv diff --git a/asm/include/ov05.inc b/asm/include/ov05.inc index b7bbf669..aca23b25 100644 --- a/asm/include/ov05.inc +++ b/asm/include/ov05.inc @@ -816,7 +816,7 @@ .extern data_ov00_020eec68 .extern data_027e071c .extern func_020385b8 -.extern func_ov00_020ab6c8 +.extern _ZN13LinkStateGrab18func_ov00_020ab6c8Ev .extern _ZN13LinkStateBase18func_ov00_020a82acEv .extern func_ov00_020af044 .extern func_ov00_020cfbb0 @@ -1107,7 +1107,7 @@ .extern _ZN13LinkStateBase18func_ov00_020a8994Ev .extern _ZN13LinkStateBase18func_ov00_020a8d6cEv .extern func_01ff9cec -.extern func_ov00_020ab9b8 +.extern _ZN13LinkStateGrab18func_ov00_020ab9b8Ejb .extern _ZN13LinkStateBase18func_ov00_020a8b3cEi .extern _ZN13LinkStateBase12GetPlayerPosEv .extern func_01ff9bc4 @@ -1156,7 +1156,7 @@ .extern _ZN13LinkStateBase14GetPlayerAngleEv .extern func_0202b154 .extern _ZN13LinkStateBase18func_ov00_020a81fcEv -.extern func_ov00_020aa818 +.extern _ZN13LinkStateGrab18func_ov00_020aa818Ev .extern _ZN13LinkStateBase12GetPlayerPosEv .extern func_01ff9bf8 .extern func_01ffa0f4 @@ -1196,7 +1196,7 @@ .extern _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev .extern _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev .extern _ZN13LinkStateBase15ChangeLinkStateEi -.extern func_ov00_020aa844 +.extern _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor .extern func_0203516c .extern data_027e0fe4 .extern data_027e0f74 @@ -1215,7 +1215,7 @@ .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev -.extern func_ov00_020aa844 +.extern _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor .extern data_027e0fe4 .extern data_027e0fb8 .extern data_027e0f74 @@ -1253,7 +1253,7 @@ .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern func_ov00_020af044 .extern func_020385b8 -.extern func_ov00_020ab97c +.extern _ZN13LinkStateGrab18func_ov00_020ab97cEP5Vec3p .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern _ZN13LinkStateBase18EquipItem_vfunc_28Ev .extern _ZN13LinkStateBase12GetPlayerPosEv @@ -1338,7 +1338,7 @@ .extern _ZN13LinkStateBase12GetGrabActorEv .extern func_ov00_020a9180 .extern func_020385b8 -.extern func_ov00_020ab770 +.extern _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p .extern func_01fffcd8 .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern func_01fffcd8 @@ -1409,7 +1409,7 @@ .extern _ZN13LinkStateBase6LookAtEP5Vec3p .extern func_ov00_020af044 .extern func_020385b8 -.extern func_ov00_020ab8cc +.extern _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p .extern _ZN13LinkStateBase12GetGrabActorEv .extern func_ov00_0208583c .extern _ZNK11ItemManager8GetFairyEi @@ -1936,7 +1936,7 @@ .extern _ZN13LinkStateBase12GetGrabActorEv .extern func_ov00_020a9180 .extern func_020385b8 -.extern func_ov00_020ab770 +.extern _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p .extern func_01fffcd8 .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern func_ov00_02097738 @@ -1976,7 +1976,7 @@ .extern func_ov00_020ceacc .extern func_020385b8 .extern _ZN13LinkStateBase12GetPlayerVelEv -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern _ZN13LinkStateBase12GetGrabActorEv .extern _ZN13LinkStateBase18func_ov00_020a8a4cEii .extern _ZN13LinkStateBase18func_ov00_020a8ad0Ei diff --git a/asm/include/ov12.inc b/asm/include/ov12.inc index cf885396..c62abafb 100644 --- a/asm/include/ov12.inc +++ b/asm/include/ov12.inc @@ -588,7 +588,7 @@ .extern data_027e0f64 .extern func_ov00_020bcdb8 .extern func_020385b8 -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern func_ov00_02083664 .extern func_ov00_020bb544 .extern func_ov00_020b4460 diff --git a/asm/include/ov18.inc b/asm/include/ov18.inc index c469e490..c12af214 100644 --- a/asm/include/ov18.inc +++ b/asm/include/ov18.inc @@ -1102,7 +1102,7 @@ .extern func_ov14_02145f0c .extern Approach_thunk .extern func_020385b8 -.extern func_ov00_020ab934 +.extern _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p .extern func_ov14_02145f0c .extern data_027e0fc8 .extern Approach_thunk diff --git a/asm/include/ov23.inc b/asm/include/ov23.inc index bbe8e2f2..5d7fc972 100644 --- a/asm/include/ov23.inc +++ b/asm/include/ov23.inc @@ -429,7 +429,7 @@ .extern _ZN13LinkStateBase15GetPlayer_Unk18Ev .extern func_ov00_020a9180 .extern func_020385b8 -.extern func_ov00_020ab770 +.extern _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p .extern _ZN13LinkStateBase12GetPlayerPosEv .extern func_01ff9bf8 .extern func_01ffa0f4 @@ -1146,7 +1146,7 @@ .extern func_ov00_020c3674 .extern func_ov00_020bb544 .extern func_020385b8 -.extern func_ov00_020ab6c8 +.extern _ZN13LinkStateGrab18func_ov00_020ab6c8Ev .extern func_ov00_020bc46c .extern func_ov14_0213ec64 .extern func_ov00_02083918 diff --git a/asm/include/ov41.inc b/asm/include/ov41.inc index d6fd0bf7..d4541e61 100644 --- a/asm/include/ov41.inc +++ b/asm/include/ov41.inc @@ -282,7 +282,7 @@ .extern func_ov00_020c3674 .extern func_ov00_020c2974 .extern func_020385b8 -.extern func_ov00_020ab934 +.extern _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p .extern data_027e0f94 .extern data_027e0fc8 .extern data_027e0f74 @@ -321,7 +321,7 @@ .extern func_ov00_02097760 .extern func_ov00_020c2974 .extern func_020385b8 -.extern func_ov00_020ab934 +.extern _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p .extern func_ov00_020c1908 .extern func_ov00_020bd304 .extern func_ov00_020c1908 @@ -331,7 +331,7 @@ .extern func_ov00_020c28d4 .extern func_ov00_020c2974 .extern func_020385b8 -.extern func_ov00_020ab934 +.extern _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p .extern func_ov00_020c28d4 .extern func_ov00_020bd304 .extern func_ov00_020c1908 diff --git a/asm/include/ov42.inc b/asm/include/ov42.inc index 6b30a2ea..91bc4e73 100644 --- a/asm/include/ov42.inc +++ b/asm/include/ov42.inc @@ -19,7 +19,7 @@ .extern func_ov00_02087400 .extern _ZN11ItemManager13ForceEquipItemEi .extern func_020385b8 -.extern func_ov00_020ab6c8 +.extern _ZN13LinkStateGrab18func_ov00_020ab6c8Ev .extern func_ov00_020bcf50 .extern func_ov00_020c1500 .extern func_ov00_020c3348 diff --git a/asm/include/ov55.inc b/asm/include/ov55.inc index f3970147..6aae1b3f 100644 --- a/asm/include/ov55.inc +++ b/asm/include/ov55.inc @@ -29,12 +29,12 @@ .extern _ZN13LinkStateBase12GetPlayerPosEv .extern func_01ff9bc4 .extern func_020385b8 -.extern func_ov00_020ab8cc +.extern _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p .extern func_ov00_020b049c .extern _ZN13LinkStateBase12GetPlayerPosEv .extern func_01ff9bc4 .extern func_020385b8 -.extern func_ov00_020ab908 +.extern _ZN13LinkStateGrab14SetThrowOffsetEP5Vec3p .extern _ZN13LinkStateBase15GetGrabActorRefEv .extern func_ov00_020af298 .extern _ZN13LinkStateBase15ChangeLinkStateEi diff --git a/asm/include/ov58.inc b/asm/include/ov58.inc index 30a7daf6..35e38763 100644 --- a/asm/include/ov58.inc +++ b/asm/include/ov58.inc @@ -152,7 +152,7 @@ .extern func_ov14_0213ed94 .extern func_ov00_02083c7c .extern func_020385b8 -.extern func_ov00_020ab8cc +.extern _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p .extern _ZN13LinkStateBase6LookAtEP5Vec3p .extern _ZN13LinkStateBase15ChangeLinkStateEi .extern _ZN13LinkStateBase14GetPlayerAngleEv diff --git a/asm/main.s b/asm/main.s index ff18766d..05d53b47 100644 --- a/asm/main.s +++ b/asm/main.s @@ -76899,7 +76899,7 @@ _02038374: ldmia sp!, {r3, r4, r5, pc} _020383ac: bl func_020385b8 - bl func_ov00_020ab6c8 + bl _ZN13LinkStateGrab18func_ov00_020ab6c8Ev add sp, sp, #0x18 mov r0, #2 ldmia sp!, {r3, r4, r5, pc} diff --git a/asm/ov00/Player/LinkStateDamage.s b/asm/ov00/Player/LinkStateDamage.s index 766054af..c35ef0d0 100644 --- a/asm/ov00/Player/LinkStateDamage.s +++ b/asm/ov00/Player/LinkStateDamage.s @@ -581,7 +581,7 @@ _020ac64c: bl func_ov00_020d716c bl func_020385b8 mov r1, #0 - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p _020ac698: mov r1, #0xf ldr r0, _020ac7e0 ; =data_027e0db0 diff --git a/asm/ov00/Player/LinkStateGrab.s b/asm/ov00/Player/LinkStateGrab.s new file mode 100644 index 00000000..1eab2c8f --- /dev/null +++ b/asm/ov00/Player/LinkStateGrab.s @@ -0,0 +1,2228 @@ + .include "macros/function.inc" + .include "ov00/Player/include/LinkStateGrab.inc" + + .text + + .global _ZN13LinkStateGrab8vfunc_00Ev + thumb_func_start _ZN13LinkStateGrab8vfunc_00Ev +_ZN13LinkStateGrab8vfunc_00Ev: ; 0x020aa32c + bx lr + .align 2, 0 + thumb_func_end _ZN13LinkStateGrab8vfunc_00Ev + + .global _ZN13LinkStateGrab5GetIdEv + arm_func_start _ZN13LinkStateGrab5GetIdEv +_ZN13LinkStateGrab5GetIdEv: ; 0x020aa330 + mov r0, #2 + bx lr + arm_func_end _ZN13LinkStateGrab5GetIdEv + + .global _ZN13LinkStateGrab20CreateDebugHierarchyEv + arm_func_start _ZN13LinkStateGrab20CreateDebugHierarchyEv +_ZN13LinkStateGrab20CreateDebugHierarchyEv: ; 0x020aa338 + ldr r1, [r0, #4] + cmp r1, #7 + cmpne r1, #8 + cmpne r1, #9 + bne _020aa354 + ldr r0, [r0, #0x10] + bx lr +_020aa354: + mvn r0, #0 + bx lr + arm_func_end _ZN13LinkStateGrab20CreateDebugHierarchyEv + + .global _ZN13LinkStateGrab14GetGrabActorIdEv + thumb_func_start _ZN13LinkStateGrab14GetGrabActorIdEv +_ZN13LinkStateGrab14GetGrabActorIdEv: ; 0x020aa35c + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r5, r0, #0 + ldr r6, _020aa4f0 ; =data_ov00_020e59b8 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r3, [r0] + ldr r1, _020aa4f4 ; =0x4c475242 + ldr r2, _020aa4f8 ; =data_ov00_020e5940 + ldr r3, [r3, #0x3c] + add r4, r0, #0 + blx r3 + ldr r0, _020aa4f8 ; =data_ov00_020e5940 + mov r1, #0 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #3 + str r1, [sp, #8] + lsl r0, r0, #0xc + str r0, [sp, #0xc] + str r1, [sp, #0x10] + add r0, r4, #0 + ldr r4, [r0] + ldr r3, _020aa4f4 ; =0x4c475242 + ldr r4, [r4, #0x34] + mov r1, #1 + add r2, r6, #0 + blx r4 + ldr r0, _020aa4fc ; =data_ov00_020e5908 + ldr r7, _020aa500 ; =data_ov00_020e59cc + ldr r1, [r0, #0x40] + lsr r0, r1, #0x1f + add r0, r1, r0 + asr r4, r0, #1 + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r3, [r0] + ldr r1, _020aa4f4 ; =0x4c475242 + ldr r2, _020aa504 ; =data_ov00_020e5944 + ldr r3, [r3, #0x3c] + add r6, r0, #0 + blx r3 + ldr r0, _020aa504 ; =data_ov00_020e5944 + ldr r3, _020aa4f4 ; =0x4c475242 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + str r4, [sp, #0xc] + str r0, [sp, #0x10] + add r0, r6, #0 + ldr r4, [r0] + mov r1, #1 + ldr r4, [r4, #0x34] + add r2, r7, #0 + blx r4 + ldr r0, _020aa4fc ; =data_ov00_020e5908 + ldr r7, _020aa508 ; =data_ov00_020e59e4 + ldr r4, [r0, #0x40] + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r3, [r0] + ldr r1, _020aa4f4 ; =0x4c475242 + ldr r2, _020aa50c ; =data_ov00_020e5948 + ldr r3, [r3, #0x3c] + add r6, r0, #0 + blx r3 + ldr r0, _020aa50c ; =data_ov00_020e5948 + ldr r3, _020aa4f4 ; =0x4c475242 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + lsr r0, r4, #0x1f + add r0, r4, r0 + asr r0, r0, #1 + str r0, [sp, #8] + str r4, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + add r0, r6, #0 + ldr r4, [r0] + mov r1, #1 + ldr r4, [r4, #0x34] + add r2, r7, #0 + blx r4 + ldr r1, _020aa4fc ; =data_ov00_020e5908 + add r0, r5, #0 + ldr r1, [r1, #0x54] + blx _ZN13LinkStateBase26PlayerControlData_vfunc_14Ei + add r6, r0, #0 + add r0, r5, #0 + ldr r7, _020aa510 ; =data_ov00_020e59fc + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r3, [r0] + ldr r1, _020aa4f4 ; =0x4c475242 + ldr r2, _020aa514 ; =data_ov00_020e5960 + ldr r3, [r3, #0x3c] + add r4, r0, #0 + blx r3 + ldr r0, _020aa514 ; =data_ov00_020e5960 + mov r1, #0 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #3 + str r1, [sp, #8] + lsl r0, r0, #0xc + str r0, [sp, #0xc] + str r1, [sp, #0x10] + add r0, r4, #0 + ldr r4, [r0] + ldr r3, _020aa4f4 ; =0x4c475242 + ldr r4, [r4, #0x34] + mov r1, #1 + add r2, r7, #0 + blx r4 + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r3, [r0] + ldr r1, _020aa4f4 ; =0x4c475242 + ldr r2, _020aa518 ; =data_ov00_020e5964 + ldr r3, [r3, #0x3c] + add r7, r0, #0 + blx r3 + lsr r0, r6, #0x1f + add r0, r6, r0 + asr r4, r0, #1 + ldr r0, _020aa518 ; =data_ov00_020e5964 + ldr r2, _020aa51c ; =data_ov00_020e5a0c + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + str r4, [sp, #0xc] + str r0, [sp, #0x10] + add r0, r7, #0 + ldr r7, [r0] + ldr r3, _020aa4f4 ; =0x4c475242 + ldr r7, [r7, #0x34] + mov r1, #1 + blx r7 + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r3, [r0] + ldr r1, _020aa4f4 ; =0x4c475242 + ldr r2, _020aa520 ; =data_ov00_020e5968 + ldr r3, [r3, #0x3c] + add r7, r0, #0 + blx r3 + ldr r0, _020aa520 ; =data_ov00_020e5968 + ldr r2, _020aa524 ; =data_ov00_020e5a20 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + str r4, [sp, #8] + str r6, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + add r0, r7, #0 + ldr r4, [r0] + ldr r3, _020aa4f4 ; =0x4c475242 + ldr r4, [r4, #0x34] + mov r1, #1 + blx r4 + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r0, _020aa4fc ; =data_ov00_020e5908 + ldr r6, _020aa528 ; =data_ov00_020e5a34 + ldr r0, [r0, #0x20] + lsl r4, r0, #1 + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + ldr r1, _020aa52c ; =data_ov00_020e5928 + ldr r3, _020aa530 ; =0x4c505348 + str r1, [sp] + mov r1, #6 + str r1, [sp, #4] + mov r1, #0 + str r1, [sp, #8] + str r4, [sp, #0xc] + str r1, [sp, #0x10] + ldr r4, [r0] + add r2, r6, #0 + ldr r4, [r4, #0x34] + blx r4 + add r0, r5, #0 + blx _ZN13LinkStateBase18GetDebugHierarchy0Ev + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + nop + thumb_func_end _ZN13LinkStateGrab14GetGrabActorIdEv +_020aa4f0: .word data_ov00_020e59b8 +_020aa4f4: .word 0x4c475242 +_020aa4f8: .word data_ov00_020e5940 +_020aa4fc: .word data_ov00_020e5908 +_020aa500: .word data_ov00_020e59cc +_020aa504: .word data_ov00_020e5944 +_020aa508: .word data_ov00_020e59e4 +_020aa50c: .word data_ov00_020e5948 +_020aa510: .word data_ov00_020e59fc +_020aa514: .word data_ov00_020e5960 +_020aa518: .word data_ov00_020e5964 +_020aa51c: .word data_ov00_020e5a0c +_020aa520: .word data_ov00_020e5968 +_020aa524: .word data_ov00_020e5a20 +_020aa528: .word data_ov00_020e5a34 +_020aa52c: .word data_ov00_020e5928 +_020aa530: .word 0x4c505348 + + .global _ZN13LinkStateGrab12OnStateEnterEv + arm_func_start _ZN13LinkStateGrab12OnStateEnterEv +_ZN13LinkStateGrab12OnStateEnterEv: ; 0x020aa534 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + mov r4, r0 + ldr r1, [r4, #4] + cmp r1, #6 + beq _020aa558 + bl _ZN13LinkStateBase18func_ov00_020a82acEv + mov r0, r4 + bl _ZN13LinkStateBase18EquipItem_vfunc_28Ev +_020aa558: + ldr r0, [r4, #4] + cmp r0, #9 + addls pc, pc, r0, lsl #2 + b _020aa76c +_020aa568: ; jump table + b _020aa590 ; case 0 + b _020aa5a0 ; case 1 + b _020aa5c0 ; case 2 + b _020aa5d4 ; case 3 + b _020aa5d4 ; case 4 + b _020aa634 ; case 5 + b _020aa75c ; case 6 + b _020aa684 ; case 7 + b _020aa704 ; case 8 + b _020aa730 ; case 9 +_020aa590: + mov r0, r4 + mov r1, #0 + bl _ZN13LinkStateBase15ChangeLinkStateEi + b _020aa778 +_020aa5a0: + ldr r0, _020aa78c ; =data_027e0fb8 + ldr r0, [r0] + bl func_ov00_020af044 + ldr r1, _020aa790 ; =data_ov00_020e592c + mov r0, r4 + mov r2, #1 + bl _ZN13LinkStateBase18func_ov00_020a8a4cEii + b _020aa778 +_020aa5c0: + ldr r1, _020aa794 ; =data_ov00_020e593c + mov r0, r4 + mov r2, #1 + bl _ZN13LinkStateBase18func_ov00_020a8a4cEii + b _020aa778 +_020aa5d4: + mov r0, r4 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + mov r0, r4 + beq _020aa62c + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r2, r0 + ldr r0, _020aa798 ; =data_ov00_020eec9c + ldr r1, _020aa79c ; =0x00000125 + bl func_ov00_020d7b20 + ldr r0, [r4, #0x18] + ldr r1, [r4, #0x20] + bl func_01ffa0f4 + mov r5, r0 + mov r0, r4 + bl _ZN13LinkStateBase14GetPlayerAngleEv + strh r5, [r0] + ldr r1, _020aa7a0 ; =data_ov00_020e595c + mov r0, r4 + mov r2, #1 + bl _ZN13LinkStateBase18func_ov00_020a89bcEii + b _020aa778 +_020aa62c: + bl _ZN13LinkStateBase18func_ov00_020a8994Ev + b _020aa778 +_020aa634: + mov r0, r4 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + beq _020aa674 + ldr r0, [r4, #0x18] + ldr r1, [r4, #0x20] + bl func_01ffa0f4 + mov r5, r0 + mov r0, r4 + bl _ZN13LinkStateBase14GetPlayerAngleEv + strh r5, [r0] + ldr r1, _020aa7a4 ; =data_ov00_020e594c + mov r0, r4 + mov r2, #1 + bl _ZN13LinkStateBase18func_ov00_020a8a4cEii + b _020aa778 +_020aa674: + mov r0, r4 + mov r1, #0 + bl _ZN13LinkStateBase15ChangeLinkStateEi + b _020aa778 +_020aa684: + ldr r0, _020aa78c ; =data_027e0fb8 + ldr r0, [r0] + bl func_ov00_020af044 + ldr r0, _020aa7a8 ; =data_027e0fe4 + add r1, r4, #0x10 + ldr r0, [r0] + bl func_ov00_020c3674 + cmp r0, #0 + mov r0, r4 + beq _020aa6bc + bl _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev + mov r1, #0 + str r1, [r0] + b _020aa6c4 +_020aa6bc: + mov r1, #0 + bl _ZN13LinkStateBase15ChangeLinkStateEi +_020aa6c4: + mov r2, #0 + str r2, [sp] + mov r3, r2 + add r0, r4, #0x24 + mov r1, #1 + str r2, [sp, #4] + bl func_020350b4 + mov r1, #0 + mov r2, r1 + mov r3, r1 + add r0, r4, #0x24 + str r1, [sp] + bl func_020351b8 + mov r0, #0 + strb r0, [r4, #0xb2] + b _020aa778 +_020aa704: + ldrb r0, [r4, #0xb0] + cmp r0, #0 + beq _020aa720 + mov r0, r4 + bl _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev + mov r1, #1 + str r1, [r0] +_020aa720: + ldr r0, _020aa7ac ; =data_ov00_020e5908 + ldr r0, [r0, #0x20] + str r0, [r4, #0xc] + b _020aa778 +_020aa730: + ldrb r0, [r4, #0xb1] + cmp r0, #0 + beq _020aa74c + mov r0, r4 + bl _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev + mvn r1, #0 + str r1, [r0] +_020aa74c: + ldr r0, _020aa7ac ; =data_ov00_020e5908 + ldr r0, [r0, #0x20] + str r0, [r4, #0xc] + b _020aa778 +_020aa75c: + ldr r0, _020aa78c ; =data_027e0fb8 + ldr r0, [r0] + bl func_ov00_020af044 + b _020aa778 +_020aa76c: + mov r0, r4 + mov r1, #0 + bl _ZN13LinkStateBase15ChangeLinkStateEi +_020aa778: + ldr r0, [r4, #4] + cmp r0, #7 + strne r0, [r4, #0xac] + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab12OnStateEnterEv +_020aa78c: .word data_027e0fb8 +_020aa790: .word data_ov00_020e592c +_020aa794: .word data_ov00_020e593c +_020aa798: .word data_ov00_020eec9c +_020aa79c: .word 0x00000125 +_020aa7a0: .word data_ov00_020e595c +_020aa7a4: .word data_ov00_020e594c +_020aa7a8: .word data_027e0fe4 +_020aa7ac: .word data_ov00_020e5908 + + .global _ZN13LinkStateGrab12OnStateLeaveEi + arm_func_start _ZN13LinkStateGrab12OnStateLeaveEi +_ZN13LinkStateGrab12OnStateLeaveEi: ; 0x020aa7b0 + stmdb sp!, {r4, lr} + mov r4, r0 + bl _ZN13LinkStateBase12OnStateLeaveEi + ldr r0, _020aa814 ; =data_027e0fb8 + ldr r0, [r0] + ldrb r1, [r0, #0x80] + cmp r1, #0 + beq _020aa7d4 + bl func_ov00_020af050 +_020aa7d4: + mov r0, r4 + bl _ZN13LinkStateBase12GetGrabActorEv + ldr r1, [r4, #4] + cmp r1, #1 + ldmneia sp!, {r4, pc} + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldrb r0, [r0, #0x11b] + cmp r0, #0 + ldmneia sp!, {r4, pc} + mov r0, r4 + bl _ZN13LinkStateBase15GetGrabActorRefEv + mvn r1, #0 + str r1, [r0] + str r1, [r0, #4] + ldmia sp!, {r4, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab12OnStateLeaveEi +_020aa814: .word data_027e0fb8 + + .global _ZN13LinkStateGrab18func_ov00_020aa818Ev + arm_func_start _ZN13LinkStateGrab18func_ov00_020aa818Ev +_ZN13LinkStateGrab18func_ov00_020aa818Ev: ; 0x020aa818 + stmdb sp!, {r4, lr} + ldr r0, _020aa840 ; =gItemManager + ldr r4, [r0] + mov r0, r4 + bl _ZNK11ItemManager16GetEquippedFairyEv + mov r1, r0 + mov r0, r4 + bl _ZNK11ItemManager8GetFairyEi + bl func_ov00_020ba458 + ldmia sp!, {r4, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab18func_ov00_020aa818Ev +_020aa840: .word gItemManager + + .global _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor + arm_func_start _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor +_ZN13LinkStateGrab18func_ov00_020aa844EP5Actor: ; 0x020aa844 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x2c + mov r4, r1 + mov r5, r0 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + add r2, sp, #0x20 + add r0, r4, #0x48 + bl func_01ff9bf8 + mov r0, r5 + bl _ZN13LinkStateBase14GetPlayerAngleEv + ldrh r6, [r0] + mov r0, r5 + bl _ZN13LinkStateBase14GetPlayerAngleEv + ldrh r1, [r0] + mov r0, r6, asr #0x4 + mov r2, r0, lsl #0x2 + mov r0, r1, asr #0x4 + mov r0, r0, lsl #0x1 + add r0, r0, #1 + ldr r3, _020aabd0 ; =data_02050f54 + mov r1, r0, lsl #0x1 + ldrsh r1, [r3, r1] + ldrsh sb, [r3, r2] + ldr r6, [sp, #0x20] + str r1, [sp] + mov r1, r1, asr #0x1f + str r1, [sp, #4] + ldr r1, [sp] + mov r0, r4 + rsb r1, r1, #0 + str r1, [sp, #8] + ldr r2, [sp, #8] + mov r1, r1, asr #0x1f + smull r3, r2, r6, r2 + adds r4, r3, #0x800 + adc r3, r2, #0 + mov r2, r4, lsr #0xc + str r1, [sp, #0xc] + ldr r7, [sp, #0x28] + orr r2, r2, r3, lsl #20 + smull r4, r3, r7, sb + adds r4, r4, #0x800 + adc r3, r3, #0 + mov r4, r4, lsr #0xc + orr r4, r4, r3, lsl #20 + add r1, sp, #0x10 + mov r8, sb, asr #0x1f + add r4, r2, r4 + bl func_ov00_020c2a0c + smull r1, r0, r6, sb + adds r1, r1, #0x800 + adc r0, r0, #0 + mov r2, r1, lsr #0xc + orr r2, r2, r0, lsl #20 + ldr r0, [sp] + smull r1, r0, r7, r0 + adds r1, r1, #0x800 + adc r0, r0, #0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #20 + add r2, r2, r1 + ldr r1, [sp, #0x1c] + mov r0, r5 + add r1, r1, #0x66 + add r1, r1, #0x600 + sub r7, r2, r1 + bl _ZN13LinkStateBase12GetPlayerVelEv + mov r1, #0 + str r1, [r0] + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerVelEv + mov r1, #0 + cmp r4, #0 + str r1, [r0, #8] + ble _020aaa04 + ldr r6, _020aabd4 ; =0x00000155 + mov r0, r5 + cmp r4, r6 + movle r6, r4 + bl _ZN13LinkStateBase12GetPlayerVelEv + ldr r1, [sp, #8] + mov r2, r6, asr #0x1f + umull ip, r3, r6, r1 + ldr r1, [sp, #0xc] + mla r3, r6, r1, r3 + ldr r1, [sp, #8] + adds r6, ip, #0x800 + mla r3, r2, r1, r3 + adc r2, r3, #0 + mov r3, r6, lsr #0xc + ldr r1, _020aabd4 ; =0x00000155 + ldr r6, [r0] + orr r3, r3, r2, lsl #20 + add r2, r6, r3 + str r2, [r0] + cmp r4, r1 + movgt r4, r1 + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerVelEv + umull r3, r2, r4, sb + mla r2, r4, r8, r2 + mov r1, r4, asr #0x1f + mla r2, r1, sb, r2 + adds r3, r3, #0x800 + adc r1, r2, #0 + mov r2, r3, lsr #0xc + ldr r3, [r0, #8] + orr r2, r2, r1, lsl #20 + add r1, r3, r2 + str r1, [r0, #8] + b _020aaa98 +_020aaa04: + cmp r4, #0 + bge _020aaa98 + mvn r6, #0x154 + cmp r4, r6 + mov r0, r5 + movge r6, r4 + bl _ZN13LinkStateBase12GetPlayerVelEv + ldr r1, [sp, #8] + mov r2, r6, asr #0x1f + umull ip, r3, r6, r1 + ldr r1, [sp, #0xc] + mla r3, r6, r1, r3 + ldr r1, [sp, #8] + adds r6, ip, #0x800 + mla r3, r2, r1, r3 + adc r2, r3, #0 + mov r3, r6, lsr #0xc + mvn r1, #0x154 + cmp r4, r1 + ldr r6, [r0] + orr r3, r3, r2, lsl #20 + add r2, r6, r3 + str r2, [r0] + movlt r4, r1 + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerVelEv + umull r3, r2, r4, sb + mla r2, r4, r8, r2 + mov r1, r4, asr #0x1f + mla r2, r1, sb, r2 + adds r3, r3, #0x800 + adc r1, r2, #0 + mov r2, r3, lsr #0xc + ldr r3, [r0, #8] + orr r2, r2, r1, lsl #20 + add r1, r3, r2 + str r1, [r0, #8] +_020aaa98: + cmp r7, #0 + ble _020aab34 + ldr r4, _020aabd4 ; =0x00000155 + mov r0, r5 + cmp r7, r4 + movle r4, r7 + bl _ZN13LinkStateBase12GetPlayerVelEv + umull r3, r2, r4, sb + adds r3, r3, #0x800 + mla r2, r4, r8, r2 + mov r1, r4, asr #0x1f + mla r2, r1, sb, r2 + adc r2, r2, #0 + mov r3, r3, lsr #0xc + ldr r1, _020aabd4 ; =0x00000155 + ldr r4, [r0] + orr r3, r3, r2, lsl #20 + add r2, r4, r3 + str r2, [r0] + cmp r7, r1 + mov r0, r5 + movgt r7, r1 + bl _ZN13LinkStateBase12GetPlayerVelEv + ldr r1, [sp] + mov r2, r7, asr #0x1f + umull r4, r3, r7, r1 + ldr r1, [sp, #4] + adds r4, r4, #0x800 + mla r3, r7, r1, r3 + ldr r1, [sp] + add sp, sp, #0x2c + mla r3, r2, r1, r3 + adc r1, r3, #0 + mov r2, r4, lsr #0xc + ldr r3, [r0, #8] + orr r2, r2, r1, lsl #20 + add r1, r3, r2 + str r1, [r0, #8] + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_020aab34: + addge sp, sp, #0x2c + ldmgeia sp!, {r4, r5, r6, r7, r8, sb, pc} + mvn r4, #0x154 + cmp r7, r4 + movge r4, r7 + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerVelEv + umull r3, r2, r4, sb + adds r3, r3, #0x800 + mla r2, r4, r8, r2 + mov r1, r4, asr #0x1f + mla r2, r1, sb, r2 + adc r2, r2, #0 + mov r3, r3, lsr #0xc + mvn r1, #0x154 + cmp r7, r1 + ldr r4, [r0] + orr r3, r3, r2, lsl #20 + add r2, r4, r3 + str r2, [r0] + mov r0, r5 + movlt r7, r1 + bl _ZN13LinkStateBase12GetPlayerVelEv + ldr r1, [sp] + mov r2, r7, asr #0x1f + umull r4, r3, r7, r1 + ldr r1, [sp, #4] + adds r4, r4, #0x800 + mla r3, r7, r1, r3 + ldr r1, [sp] + mla r3, r2, r1, r3 + adc r1, r3, #0 + mov r2, r4, lsr #0xc + ldr r3, [r0, #8] + orr r2, r2, r1, lsl #20 + add r1, r3, r2 + str r1, [r0, #8] + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor +_020aabd0: .word data_02050f54 +_020aabd4: .word 0x00000155 + + .global _ZN13LinkStateGrab8vfunc_20Ei + arm_func_start _ZN13LinkStateGrab8vfunc_20Ei +_ZN13LinkStateGrab8vfunc_20Ei: ; 0x020aabd8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0xc8 + mov r6, r1 + mov r1, #2 + mov r4, r0 + bl _ZN13LinkStateBase25HasFlags_PlayerLink_Unk48Et + cmp r0, #0 + bne _020aac08 + mov r0, r4 + bl _ZN13LinkStateBase18func_ov00_020a8b80Ev + cmp r0, #0 + bne _020aac14 +_020aac08: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020aac14: + mov r0, r4 + bl _ZN13LinkStateBase12GetGrabActorEv + movs r5, r0 + beq _020aadbc + cmp r6, #0 + bne _020aadbc + ldr r0, _020ab3bc ; =gItemManager + mov r6, #0 + ldr r0, [r0] + ldr r0, [r0] + sub r0, r0, #9 + cmp r0, #1 + bhi _020aacf4 + ldr r1, _020ab3c0 ; =data_027e0d0c + mov r0, r4 + ldr r2, [r1] + str r2, [r4, #0x18] + ldr r2, [r1, #4] + str r2, [r4, #0x1c] + ldr r1, [r1, #8] + str r1, [r4, #0x20] + bl _ZN13LinkStateBase14GetPlayerAngleEv + ldrh r1, [r0] + ldr r2, _020ab3c4 ; =data_02050f54 + ldr r0, _020ab3c8 ; =0x000004cd + mov r1, r1, asr #0x4 + mov r3, r1, lsl #0x1 + mov r1, r3, lsl #0x1 + ldrsh ip, [r2, r1] + add r1, r3, #1 + mov r1, r1, lsl #0x1 + ldrsh r2, [r2, r1] + mov r1, r6 + umull r7, lr, ip, r0 + mla lr, ip, r1, lr + umull r6, r3, r2, r0 + mla r3, r2, r1, r3 + mov ip, ip, asr #0x1f + mov r1, r2, asr #0x1f + adds r8, r7, #0x800 + mla lr, ip, r0, lr + mla r3, r1, r0, r3 + adc r7, lr, #0 + mov r8, r8, lsr #0xc + adds r6, r6, #0x800 + mov r1, r6, lsr #0xc + ldr r0, [r4, #0x18] + orr r8, r8, r7, lsl #20 + add r0, r0, r8 + str r0, [r4, #0x18] + adc r0, r3, #0 + ldr r2, [r4, #0x20] + orr r1, r1, r0, lsl #20 + add r0, r2, r1 + str r0, [r4, #0x20] + mov r6, #1 +_020aacf4: + mov r0, r5 + ldr r1, [r0] + ldr r1, [r1, #0x2c] + blx r1 + mvn r1, #0 + cmp r0, r1 + movne r5, #1 + moveq r5, #0 + cmp r5, #0 + bne _020aad64 + cmp r6, #0 + bne _020aad3c + ldr r0, _020ab3cc ; =data_027e0fb8 + add r1, r4, #0x18 + ldr r0, [r0] + bl func_ov00_020b05e8 + cmp r0, #0 + beq _020aad64 +_020aad3c: + ldr r0, _020ab3cc ; =data_027e0fb8 + mov r1, #0 + ldr r2, [r0] + mov r0, #5 + strb r1, [r2, #0x79] + strb r1, [r2, #0x7b] + str r0, [r4, #4] + add sp, sp, #0xc8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020aad64: + cmp r6, #0 + bne _020aad88 + ldr r0, _020ab3cc ; =data_027e0fb8 + mov r2, r5 + ldr r0, [r0] + add r1, r4, #0x18 + bl func_ov00_020b049c + cmp r0, #0 + beq _020aadb0 +_020aad88: + ldr r0, _020ab3cc ; =data_027e0fb8 + mov r1, #0 + ldr r2, [r0] + mov r0, #3 + strb r1, [r2, #0x79] + strb r1, [r2, #0x7b] + str r0, [r4, #4] + add sp, sp, #0xc8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020aadb0: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020aadbc: + ldr r1, _020ab3cc ; =data_027e0fb8 + ldr r0, _020ab3d0 ; =data_027e0fe4 + ldr r3, [r1] + ldr r0, [r0] + ldr r2, [r3, #0x84] + add r1, sp, #0x14 + str r2, [sp, #0x14] + ldr r2, [r3, #0x88] + str r2, [sp, #0x18] + bl func_ov00_020c3674 + movs r6, r0 + bne _020aae38 + mov r0, r4 + bl _ZN13LinkStateBase18func_ov00_020a8d40Ev + ldr r2, _020ab3cc ; =data_027e0fb8 + ldr r1, [r0, #0xe0] + ldr r0, [r2] + bl func_ov00_020b0ad0 + cmp r0, #0 + beq _020aae2c + mov r0, r4 + bl _ZN13LinkStateBase18func_ov00_020a8d40Ev + ldr r6, [r0, #0xe0] + ldr r0, [r6, #8] + str r0, [sp, #0x14] + ldr r0, [r6, #0xc] + str r0, [sp, #0x18] + b _020aae54 +_020aae2c: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020aae38: + ldr r0, _020ab3cc ; =data_027e0fb8 + ldr r0, [r0] + ldrb r0, [r0, #0x80] + cmp r0, #0 + addne sp, sp, #0xc8 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_020aae54: + ldr r0, _020ab3cc ; =data_027e0fb8 + cmp r5, #0 + movne r2, #1 + ldr r1, [r6, #0x12c] + ldr r0, [r0] + moveq r2, #0 + bl func_ov00_020afe88 + cmp r0, #0 + bne _020aae90 + ldr r0, _020ab3cc ; =data_027e0fb8 + ldr r0, [r0] + bl func_ov00_020af050 + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020aae90: + ldr r0, [r6, #0x12c] + cmp r0, #2 + bne _020aaf78 + mov r0, r4 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + bne _020aaf78 + add r3, sp, #0x5c + add r1, r6, #0x60 + add r2, r6, #0x48 + mov r0, #0x6000 + bl func_01ff9e64 + mov r0, #0 + ldr r1, _020ab3d4 ; =0x0000ffff + strh r0, [sp, #0x94] + strb r0, [sp, #0xb6] + strb r0, [sp, #0xb7] + strb r0, [sp, #0xb8] + strb r0, [sp, #0xb9] + strb r0, [sp, #0xc0] + strb r0, [sp, #0xc1] + strb r0, [sp, #0xc2] + strb r0, [sp, #0xc3] + strb r0, [sp, #0xc4] + strb r0, [sp, #0xc5] + strh r1, [sp, #0x8c] + strh r1, [sp, #0x8e] + strh r1, [sp, #0x90] + strh r1, [sp, #0x92] + ldr r1, [r6, #0x48] + add r2, r6, #0x8c + str r1, [sp, #0x28] + ldr r1, [r6, #0x4c] + ldr r5, _020ab3d8 ; =data_027e0e60 + str r1, [sp, #0x2c] + ldr r3, [r6, #0x50] + add r1, sp, #0x68 + str r3, [sp, #0x30] + str r2, [sp] + ldr r3, [r6, #8] + add r2, sp, #0x5c + str r3, [sp, #4] + ldrh ip, [r6, #0x9c] + add r3, sp, #0x28 + str ip, [sp, #8] + str r0, [sp, #0xc] + str r0, [sp, #0x10] + ldr r0, [r5] + bl func_01ffbe78 + cmp r0, #0 + beq _020aaf88 + ldr r2, [sp, #0x68] + ldr r1, [sp, #0x6c] + ldr r0, [sp, #0x70] + str r2, [sp, #0x5c] + str r1, [sp, #0x60] + str r0, [sp, #0x64] + b _020aaf88 +_020aaf78: + add r1, sp, #0x5c + mov r0, r4 + mov r2, r6 + bl _ZN13LinkStateGrab18func_ov00_020ab7bcEP5Vec3pP5Actor +_020aaf88: + mov r0, r4 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + add r0, sp, #0x5c + add r2, sp, #0x50 + bl func_01ff9bf8 + add r1, sp, #0x40 + mov r0, r6 + bl func_ov00_020c2a0c + ldr r0, [r6, #0x12c] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _020ab3b0 +_020aafbc: ; jump table + b _020ab3b0 ; case 0 + b _020aafd8 ; case 1 + b _020ab000 ; case 2 + b _020ab1e4 ; case 3 + b _020ab2b0 ; case 4 + b _020ab32c ; case 5 + b _020ab398 ; case 6 +_020aafd8: + add r0, sp, #0x50 + bl func_01ff9cec + cmp r0, #0x800 + bge _020aaff4 + ldr r0, _020ab3cc ; =data_027e0fb8 + ldr r0, [r0] + bl func_ov00_020af044 +_020aaff4: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab000: + bl func_ov00_020a7b8c + ldr r2, [r0] + mov r1, #1 + ldr r2, [r2, #0x14] + blx r2 + cmp r0, #0 + addeq sp, sp, #0xc8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + bne _020ab170 + mov r0, r4 + bl _ZN13LinkStateBase19GetCurrentCharacterEv + cmp r0, #1 + bne _020ab060 + bl _ZN13LinkStateGrab13GetLinkState4Ev + add r2, sp, #0x50 + mov r1, r6 + bl func_ov23_02171410 + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab060: + add r0, sp, #0x50 + bl func_01ff9cec + ldr r1, [sp, #0x4c] + mov r5, r0 + add r0, r1, #0x3800 + cmp r5, r0 + bge _020ab1d8 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x58] + bl func_01ffa0f4 + ldr r1, _020ab3dc ; =0x00001ccd + mov r0, r0, lsl #0x10 + cmp r5, r1 + mov r6, r0, asr #0x10 + bge _020ab0fc + mov r0, r4 + bl _ZN13LinkStateBase14GetPlayerAngleEv + ldrsh r0, [r0] + add r2, sp, #0x5c + sub r0, r6, r0 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 + cmp r1, #0x4000 + ble _020ab0d0 + mov r0, r4 + mov r1, #1 + bl _ZN13LinkStateBase18func_ov00_020a81b8Eii + b _020ab160 +_020ab0d0: + mov r0, #0x4000 + rsb r0, r0, #0 + cmp r1, r0 + mov r0, r4 + blt _020ab0f0 + mov r1, #0 + bl _ZN13LinkStateBase18func_ov00_020a81b8Eii + b _020ab160 +_020ab0f0: + mov r1, #2 + bl _ZN13LinkStateBase18func_ov00_020a81b8Eii + b _020ab160 +_020ab0fc: + rsb r0, r1, #0x4800 + cmp r5, r0 + bge _020ab134 + ldr r1, [sp, #0x54] + ldr r0, _020ab3e0 ; =0x00001333 + cmp r1, #0 + rsblt r1, r1, #0 + cmp r1, r0 + bge _020ab134 + add r2, sp, #0x5c + mov r0, r4 + mov r1, #3 + bl _ZN13LinkStateBase18func_ov00_020a81b8Eii + b _020ab160 +_020ab134: + mov r0, r4 + bl _ZN13LinkStateBase18func_ov00_020a8d40Ev + ldrsh r0, [r0, #0x5a] + cmp r0, #0 + addne sp, sp, #0xc8 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + add r2, sp, #0x5c + mov r0, r4 + mov r1, #4 + bl _ZN13LinkStateBase18func_ov00_020a81b8Eii +_020ab160: + mov r0, r4 + bl _ZN13LinkStateBase14GetPlayerAngleEv + strh r6, [r0] + b _020ab1d8 +_020ab170: + add r0, sp, #0x50 + bl func_01ff9cec + cmp r0, #0x4000 + bge _020ab1d8 + mov r0, r4 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + add r0, r6, #0x48 + add r2, r4, #0x18 + bl func_01ff9bf8 + ldr r0, _020ab3cc ; =data_027e0fb8 + mov r1, #0 + ldr r2, [r0] + strb r1, [r2, #0x79] + strb r1, [r2, #0x7b] + ldr r0, [r0] + bl func_ov00_020af044 + mov r0, #3 + str r0, [r4, #4] + ldr r1, [sp, #0x14] + mov r0, #1 + str r1, [r4, #0x10] + ldr r1, [sp, #0x18] + add sp, sp, #0xc8 + str r1, [r4, #0x14] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab1d8: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab1e4: + add r0, sp, #0x50 + bl func_01ff9cec + cmp r0, #0x400 + bge _020ab2a4 + mov r0, r4 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + add r0, sp, #0x40 + add r2, sp, #0x34 + bl func_01ff9bf8 + ldr r0, [sp, #0x34] + cmp r0, #0 + ldreq r0, [sp, #0x3c] + cmpeq r0, #0 + beq _020ab278 + ldr r0, [sp, #0x34] + ldr r1, [sp, #0x3c] + bl func_01ffa0f4 + mov r6, r0, lsl #0x10 + mov r0, r6, asr #0x10 + bl func_0202bbbc + bl func_0202bba8 + mov r5, r0 + rsb r0, r5, r6, asr #16 + mov r0, r0, lsl #0x10 + movs r1, r0, asr #0x10 + rsbmi r0, r1, #0 + movmi r0, r0, lsl #0x10 + movmi r1, r0, asr #0x10 + ldr r0, _020ab3e4 ; =0x000018e4 + cmp r1, r0 + addgt sp, sp, #0xc8 + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + bl _ZN13LinkStateBase14GetPlayerAngleEv + strh r5, [r0] +_020ab278: + mov r0, #7 + str r0, [r4, #4] + mov r0, #0 + str r0, [r4, #0xc] + ldr r1, [sp, #0x14] + mov r0, #1 + str r1, [r4, #0x10] + ldr r1, [sp, #0x18] + add sp, sp, #0xc8 + str r1, [r4, #0x14] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab2a4: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab2b0: + add r0, sp, #0x50 + bl func_01ff9cec + ldr r1, [sp, #0x4c] + add r1, r1, #0xc00 + cmp r0, r1 + bge _020ab320 + mov r0, r4 + bl func_ov05_0211139c + cmp r0, #0 + bne _020ab320 + mov r0, r4 + bl _ZN13LinkStateBase15GetGrabActorRefEv + ldr r1, [r6, #8] + mov r2, #1 + str r1, [r0] + ldr r3, [r6, #0xc] + add r1, r6, #0x48 + str r3, [r0, #4] + mov r0, r4 + str r2, [r4, #4] + bl _ZN13LinkStateBase6LookAtEP5Vec3p + ldr r1, [sp, #0x14] + mov r0, #1 + str r1, [r4, #0x10] + ldr r1, [sp, #0x18] + add sp, sp, #0xc8 + str r1, [r4, #0x14] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab320: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab32c: + mov r0, r6 + ldr r1, [r0] + ldr r1, [r1, #0x3c] + blx r1 + cmp r0, #0 + beq _020ab38c + mov r0, r4 + bl func_ov05_021113b4 + cmp r0, #0 + beq _020ab38c + mov r0, r6 + mov r1, #1 + bl func_ov00_020c1908 + mov r0, #6 + str r0, [r4, #4] + ldr r1, [sp, #0x14] + mov r0, r4 + str r1, [r4, #0x10] + ldr r1, [sp, #0x18] + str r1, [r4, #0x14] + bl _ZN13LinkStateBase18EquipItem_vfunc_28Ev + add sp, sp, #0xc8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab38c: + add sp, sp, #0xc8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab398: + ldr r0, _020ab3cc ; =data_027e0fb8 + ldr r0, [r0] + bl func_ov00_020af050 + add sp, sp, #0xc8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020ab3b0: + mov r0, #0 + add sp, sp, #0xc8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab8vfunc_20Ei +_020ab3bc: .word gItemManager +_020ab3c0: .word data_027e0d0c +_020ab3c4: .word data_02050f54 +_020ab3c8: .word 0x000004cd +_020ab3cc: .word data_027e0fb8 +_020ab3d0: .word data_027e0fe4 +_020ab3d4: .word 0x0000ffff +_020ab3d8: .word data_027e0e60 +_020ab3dc: .word 0x00001ccd +_020ab3e0: .word 0x00001333 +_020ab3e4: .word 0x000018e4 + + .global _ZN13LinkStateGrab13GetLinkState4Ev + arm_func_start _ZN13LinkStateGrab13GetLinkState4Ev +_ZN13LinkStateGrab13GetLinkState4Ev: ; 0x020ab3e8 + ldr ip, _020ab3f4 ; =func_01fffcd8 + mov r0, #4 + bx ip + .align 2, 0 + arm_func_end _ZN13LinkStateGrab13GetLinkState4Ev +_020ab3f4: .word func_01fffcd8 + + .global _ZN13LinkStateGrab8vfunc_24Ei + arm_func_start _ZN13LinkStateGrab8vfunc_24Ei +_ZN13LinkStateGrab8vfunc_24Ei: ; 0x020ab3f8 + stmdb sp!, {r3, lr} + cmp r1, #5 + addls pc, pc, r1, lsl #2 + b _020ab47c +_020ab408: ; jump table + b _020ab47c ; case 0 + b _020ab484 ; case 1 + b _020ab484 ; case 2 + b _020ab484 ; case 3 + b _020ab420 ; case 4 + b _020ab434 ; case 5 +_020ab420: + ldr r2, [r0, #4] + cmp r2, #6 + bne _020ab484 + bl _ZN13LinkStateBase8vfunc_24Ei + ldmia sp!, {r3, pc} +_020ab434: + ldr r2, [r0, #4] + cmp r2, #9 + addls pc, pc, r2, lsl #2 + b _020ab474 +_020ab444: ; jump table + b _020ab474 ; case 0 + b _020ab474 ; case 1 + b _020ab474 ; case 2 + b _020ab46c ; case 3 + b _020ab46c ; case 4 + b _020ab474 ; case 5 + b _020ab474 ; case 6 + b _020ab474 ; case 7 + b _020ab46c ; case 8 + b _020ab46c ; case 9 +_020ab46c: + mov r0, #0 + ldmia sp!, {r3, pc} +_020ab474: + bl _ZN13LinkStateBase8vfunc_24Ei + ldmia sp!, {r3, pc} +_020ab47c: + mov r0, #0 + ldmia sp!, {r3, pc} +_020ab484: + ldr r2, [r0, #4] + cmp r2, #1 + cmpne r2, #7 + bne _020ab49c + bl _ZN13LinkStateBase8vfunc_24Ei + ldmia sp!, {r3, pc} +_020ab49c: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end _ZN13LinkStateGrab8vfunc_24Ei + + .global _ZN13LinkStateGrab8vfunc_34EP5Vec3p + arm_func_start _ZN13LinkStateGrab8vfunc_34EP5Vec3p +_ZN13LinkStateGrab8vfunc_34EP5Vec3p: ; 0x020ab4a4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r6, r0 + mov r4, r1 + bl _ZN13LinkStateBase28Get_PlayerControlData_Unk120Ev + cmp r0, #0x1e + bne _020ab5f4 + mov r0, r6 + bl _ZN13LinkStateBase18func_ov00_020a8d50Ev + cmp r0, #0x2000 + movlt r5, #0 + blt _020ab4ec + cmp r0, #0x7000 + movge r5, #0x1000 + bge _020ab4ec + sub r0, r0, #0x2000 + mov r1, #0x5000 + bl Divide + mov r5, r0 +_020ab4ec: + mov r0, r6 + bl _ZN13LinkStateBase14GetPlayerAngleEv + mov r1, r5, asr #0x1f + mov r2, r1, lsl #0xe + mov r1, #0x800 + adds r3, r1, r5, lsl #14 + orr r2, r2, r5, lsr #18 + adc r1, r2, #0 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #20 + mov r1, r2, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r1, r1, asr #0x4 + mov r5, r1, lsl #0x1 + add r1, r5, #1 + ldr ip, _020ab60c ; =data_02050f54 + mov r1, r1, lsl #0x1 + ldrsh r3, [ip, r1] + ldr r6, _020ab610 ; =0x00000b33 + ldrh r0, [r0] + umull r1, lr, r3, r6 + mov r7, #0 + mov r0, r0, asr #0x4 + mov r8, r0, lsl #0x1 + mov r2, r8, lsl #0x1 + mov r0, r5, lsl #0x1 + ldrsh sb, [ip, r0] + adds r5, r1, #0x800 + add r8, r8, #1 + umull r1, r0, sb, r6 + mov r5, r5, lsr #0xc + ldrsh r2, [ip, r2] + mov r8, r8, lsl #0x1 + ldrsh ip, [ip, r8] + mla lr, r3, r7, lr + mov r3, r3, asr #0x1f + mla lr, r3, r6, lr + adc r3, lr, #0 + orr r5, r5, r3, lsl #20 + mla r0, sb, r7, r0 + mov r3, sb, asr #0x1f + mla r0, r3, r6, r0 + smull r7, r6, r2, r5 + smull r3, r2, ip, r5 + adds r7, r7, #0x800 + adc r5, r6, #0 + mov r6, r7, lsr #0xc + orr r6, r6, r5, lsl #20 + adds r1, r1, #0x800 + adc r0, r0, #0 + mov r5, r1, lsr #0xc + orr r5, r5, r0, lsl #20 + adds r1, r3, #0x800 + adc r0, r2, #0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #20 + ldr r0, [r4] + add r0, r0, r6 + str r0, [r4] + ldr r0, [r4, #4] + add r0, r0, r5 + str r0, [r4, #4] + ldr r0, [r4, #8] + add r0, r0, r1 + str r0, [r4, #8] + b _020ab604 +_020ab5f4: + ldr r0, [r4, #4] + add r0, r0, #0x33 + add r0, r0, #0xb00 + str r0, [r4, #4] +_020ab604: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab8vfunc_34EP5Vec3p +_020ab60c: .word data_02050f54 +_020ab610: .word 0x00000b33 + + .global _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p + arm_func_start _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p +_ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p: ; 0x020ab614 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase12GetGrabActorEv + movs ip, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, pc} + ldr r0, _020ab67c ; =data_027e0d0c + add r3, sp, #0 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, ip + ldr r2, [r0] + cmp r4, #0 + moveq r4, r3 + ldr r2, [r2, #0x5c] + mov r1, r4 + blx r2 + mov r0, r5 + bl _ZN13LinkStateBase15GetGrabActorRefEv + mvn r1, #0 + str r1, [r0] + str r1, [r0, #4] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p +_020ab67c: .word data_027e0d0c + + .global _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p + arm_func_start _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p +_ZN13LinkStateGrab15SetBombVelocityEP5Vec3p: ; 0x020ab680 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r1, [r0, #4] + ldr r0, _020ab6c0 ; =0x424f4d42 + cmp r1, r0 + ldrne r0, _020ab6c4 ; =0x4b4f4b4f + cmpne r1, r0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p +_020ab6c0: .word 0x424f4d42 +_020ab6c4: .word 0x4b4f4b4f + + .global _ZN13LinkStateGrab18func_ov00_020ab6c8Ev + arm_func_start _ZN13LinkStateGrab18func_ov00_020ab6c8Ev +_ZN13LinkStateGrab18func_ov00_020ab6c8Ev: ; 0x020ab6c8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r2, [r0, #4] + ldr r1, _020ab758 ; =0x4b4f4b4f + cmp r2, r1 + bhi _020ab714 + bhs _020ab740 + ldr r1, _020ab75c ; =0x424f4d42 + cmp r2, r1 + bhi _020ab704 + beq _020ab740 + b _020ab748 +_020ab704: + ldr r1, _020ab760 ; =0x4452554d + cmp r2, r1 + beq _020ab740 + b _020ab748 +_020ab714: + ldr r1, _020ab764 ; =0x54415255 + cmp r2, r1 + bhi _020ab734 + bhs _020ab740 + ldr r1, _020ab768 ; =0x53544e45 + cmp r2, r1 + beq _020ab740 + b _020ab748 +_020ab734: + ldr r1, _020ab76c ; =0x54535542 + cmp r2, r1 + bne _020ab748 +_020ab740: + bl func_ov00_020c3180 + ldmia sp!, {r4, pc} +_020ab748: + mov r0, r4 + mov r1, #0 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p + ldmia sp!, {r4, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab18func_ov00_020ab6c8Ev +_020ab758: .word 0x4b4f4b4f +_020ab75c: .word 0x424f4d42 +_020ab760: .word 0x4452554d +_020ab764: .word 0x54415255 +_020ab768: .word 0x53544e45 +_020ab76c: .word 0x54535542 + + .global _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p + arm_func_start _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p +_ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p: ; 0x020ab770 + stmdb sp!, {r4, r5, r6, lr} + ldr r2, _020ab7b8 ; =data_027e0fb8 + mov r6, r0 + ldr r0, [r2] + mov r5, r1 + bl func_ov00_020aeffc + movs r4, r0 + beq _020ab7a8 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl _ZN13LinkStateGrab18func_ov00_020ab7bcEP5Vec3pP5Actor + cmp r0, #0 + bne _020ab7b0 +_020ab7a8: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_020ab7b0: + ldr r0, [r4, #0x12c] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p +_020ab7b8: .word data_027e0fb8 + + .global _ZN13LinkStateGrab18func_ov00_020ab7bcEP5Vec3pP5Actor + arm_func_start _ZN13LinkStateGrab18func_ov00_020ab7bcEP5Vec3pP5Actor +_ZN13LinkStateGrab18func_ov00_020ab7bcEP5Vec3pP5Actor: ; 0x020ab7bc + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x1c + ldr r3, [r2, #0x48] + mov r5, r1 + str r3, [r5] + ldr r1, [r2, #0x4c] + mov r4, r0 + str r1, [r5, #4] + ldr r0, [r2, #0x50] + str r0, [r5, #8] + ldr r0, [r2, #0x12c] + cmp r0, #2 + beq _020ab7fc + cmp r0, #3 + beq _020ab818 + b _020ab8c0 +_020ab7fc: + bl func_ov00_020a7b8c + ldr r2, [r0] + mov r1, #1 + ldr r2, [r2, #0x14] + blx r2 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, pc} +_020ab818: + add r1, sp, #0 + mov r0, r2 + bl func_ov00_020c2a0c + mov r0, r4 + bl _ZN13LinkStateBase12GetPlayerPosEv + add r2, sp, #0x10 + mov r1, r5 + bl func_01ff9bf8 + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + add r2, r1, #0x66 + ldr r1, [sp, #0x18] + add r4, r2, #0x600 + bl func_01ffa0f4 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl func_0202bbbc + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _020ab8b4 +_020ab868: ; jump table + b _020ab878 ; case 0 + b _020ab888 ; case 1 + b _020ab898 ; case 2 + b _020ab8a8 ; case 3 +_020ab878: + ldr r0, [r5] + add r0, r0, r4 + str r0, [r5] + b _020ab8b4 +_020ab888: + ldr r0, [r5] + sub r0, r0, r4 + str r0, [r5] + b _020ab8b4 +_020ab898: + ldr r0, [r5, #8] + add r0, r0, r4 + str r0, [r5, #8] + b _020ab8b4 +_020ab8a8: + ldr r0, [r5, #8] + sub r0, r0, r4 + str r0, [r5, #8] +_020ab8b4: + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, pc} +_020ab8c0: + mov r0, #1 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020ab7bcEP5Vec3pP5Actor + + .global _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p + arm_func_start _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p +_ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p: ; 0x020ab8cc + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + mov r0, r4 + add r2, r5, #0x18 + bl func_01ff9bf8 + add r0, r5, #0x18 + mov r2, r0 + mov r1, #0x1000 + bl func_0202da8c + mov r0, #5 + str r0, [r5, #4] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p + + .global _ZN13LinkStateGrab14SetThrowOffsetEP5Vec3p + arm_func_start _ZN13LinkStateGrab14SetThrowOffsetEP5Vec3p +_ZN13LinkStateGrab14SetThrowOffsetEP5Vec3p: ; 0x020ab908 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + mov r0, r4 + add r2, r5, #0x18 + bl func_01ff9bf8 + mov r0, #3 + str r0, [r5, #4] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab14SetThrowOffsetEP5Vec3p + + .global _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p + arm_func_start _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p +_ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p: ; 0x020ab934 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + mov r0, r4 + add r2, r5, #0x18 + bl func_01ff9bf8 + mov r2, #3 + mov r0, r5 + mov r1, #2 + str r2, [r5, #4] + bl _ZN13LinkStateBase15ChangeLinkStateEi + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p + + .global _ZN13LinkStateGrab18func_ov00_020ab97cEP5Vec3p + arm_func_start _ZN13LinkStateGrab18func_ov00_020ab97cEP5Vec3p +_ZN13LinkStateGrab18func_ov00_020ab97cEP5Vec3p: ; 0x020ab97c + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r5 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r1, r0 + mov r0, r4 + add r2, r5, #0x18 + bl func_01ff9bf8 + mov r0, #4 + str r0, [r5, #4] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020ab97cEP5Vec3p + + .global _ZN13LinkStateGrab18func_ov00_020ab9b8Ejb + arm_func_start _ZN13LinkStateGrab18func_ov00_020ab9b8Ejb +_ZN13LinkStateGrab18func_ov00_020ab9b8Ejb: ; 0x020ab9b8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x18 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl _ZN13LinkStateBase12GetGrabActorEv + movs r4, r0 + addeq sp, sp, #0x18 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r5, #0 + mov r5, #1 + beq _020aba70 + mov r0, r7 + bl _ZN13LinkStateBase12GetPlayerPosEv + add r3, sp, #0xc + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, r7 + bl _ZN13LinkStateBase12GetPlayerPosEv + add r2, sp, #0xc + add r1, r7, #0x18 + bl func_01ff9bc4 + ldr r1, [r4, #4] + ldr r0, _020abb64 ; =0x424b4559 + cmp r1, r0 + beq _020aba30 + ldr r0, _020abb68 ; =0x464f5243 + cmp r1, r0 + beq _020aba54 + b _020aba70 +_020aba30: + add r1, sp, #0xc + mov r0, r4 + bl func_ov17_0215dff0 + cmp r0, #0 + beq _020aba70 + mov r0, r7 + mov r5, #0 + bl _ZN13LinkStateGrab18func_ov00_020aa818Ev + b _020aba70 +_020aba54: + add r1, sp, #0xc + mov r0, r4 + bl func_ov17_0215e338 + cmp r0, #0 + beq _020aba70 + mov r0, r7 + bl _ZN13LinkStateGrab18func_ov00_020aa818Ev +_020aba70: + cmp r5, #0 + beq _020abb30 + mov r1, #0 + mov r0, r7 + str r1, [sp] + str r1, [sp, #4] + str r1, [sp, #8] + bl _ZN13LinkStateBase14GetPlayerAngleEv + ldrh r5, [r0] + ldr r2, _020abb6c ; =0x0000028f + mov r3, #0 + umull r1, r0, r6, r2 + mla r0, r6, r3, r0 + mov r3, r6, asr #0x1f + mov r5, r5, asr #0x4 + mov ip, r5, lsl #0x1 + mla r0, r3, r2, r0 + adds r1, r1, #0x800 + add r5, ip, #1 + ldr r6, _020abb70 ; =data_02050f54 + mov r3, ip, lsl #0x1 + mov r2, r5, lsl #0x1 + ldrsh r3, [r6, r3] + adc r0, r0, #0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #20 + smull r0, r5, r3, r1 + adds r3, r0, #0x800 + ldrsh r2, [r6, r2] + mov r3, r3, lsr #0xc + smull r1, r0, r2, r1 + adc r2, r5, #0 + adds r1, r1, #0x800 + orr r3, r3, r2, lsl #20 + ldr r5, [sp] + adc r0, r0, #0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #20 + ldr r2, [sp, #8] + add r3, r5, r3 + add r1, r2, r1 + str r1, [sp, #8] + mov r0, r4 + str r3, [sp] + ldr r2, [r0] + add r1, sp, #0 + ldr r2, [r2, #0x5c] + blx r2 +_020abb30: + mov r0, r7 + bl _ZN13LinkStateBase15GetGrabActorRefEv + mvn r1, #0 + str r1, [r0] + str r1, [r0, #4] + mov r0, r7 + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r2, r0 + ldr r0, _020abb74 ; =data_ov00_020eec9c + mov r1, #0xcc + bl func_ov00_020d7a84 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab18func_ov00_020ab9b8Ejb +_020abb64: .word 0x424b4559 +_020abb68: .word 0x464f5243 +_020abb6c: .word 0x0000028f +_020abb70: .word data_02050f54 +_020abb74: .word data_ov00_020eec9c + + .global _ZN13LinkStateGrab4GrabEP8ActorRef + arm_func_start _ZN13LinkStateGrab4GrabEP8ActorRef +_ZN13LinkStateGrab4GrabEP8ActorRef: ; 0x020abb78 + stmdb sp!, {r3, lr} + ldr r3, [r1] + mov r2, #6 + str r3, [r0, #0x10] + ldr r3, [r1, #4] + mov r1, #2 + str r3, [r0, #0x14] + bl _ZN13LinkStateBase18ChangeLinkSubStateEii + mov r0, #1 + ldmia sp!, {r3, pc} + arm_func_end _ZN13LinkStateGrab4GrabEP8ActorRef + + .global _ZN13LinkStateGrab18func_ov00_020abba0EP8ActorRef + arm_func_start _ZN13LinkStateGrab18func_ov00_020abba0EP8ActorRef +_ZN13LinkStateGrab18func_ov00_020abba0EP8ActorRef: ; 0x020abba0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateGrab18func_ov00_020abc40Ev + cmp r0, #0 + beq _020abbc8 + mov r0, r5 + mov r1, r4 + bl _ZN13LinkStateGrab4GrabEP8ActorRef + ldmia sp!, {r3, r4, r5, pc} +_020abbc8: + ldr r0, [r4] + str r0, [r5, #0x10] + ldr r0, [r4, #4] + str r0, [r5, #0x14] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020abba0EP8ActorRef + + .global _ZN13LinkStateGrab18func_ov00_020abbdcEP8ActorRef + arm_func_start _ZN13LinkStateGrab18func_ov00_020abbdcEP8ActorRef +_ZN13LinkStateGrab18func_ov00_020abbdcEP8ActorRef: ; 0x020abbdc + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateGrab18func_ov00_020abc40Ev + cmp r0, #0 + beq _020abc04 + mov r0, r5 + mov r1, r4 + bl _ZN13LinkStateGrab4GrabEP8ActorRef + ldmia sp!, {r3, r4, r5, pc} +_020abc04: + ldr r0, [r4] + str r0, [r5, #0x10] + ldr r0, [r4, #4] + str r0, [r5, #0x14] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020abbdcEP8ActorRef + + .global _ZN13LinkStateGrab18func_ov00_020abc18EP8ActorRef + arm_func_start _ZN13LinkStateGrab18func_ov00_020abc18EP8ActorRef +_ZN13LinkStateGrab18func_ov00_020abc18EP8ActorRef: ; 0x020abc18 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateGrab18func_ov00_020abc40Ev + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl _ZN13LinkStateGrab4GrabEP8ActorRef + ldmia sp!, {r3, r4, r5, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020abc18EP8ActorRef + + .global _ZN13LinkStateGrab18func_ov00_020abc40Ev + arm_func_start _ZN13LinkStateGrab18func_ov00_020abc40Ev +_ZN13LinkStateGrab18func_ov00_020abc40Ev: ; 0x020abc40 + stmdb sp!, {r4, lr} + mov r4, r0 + bl _ZN13LinkStateBase10GetStateIdEv + cmp r0, #2 + ldreq r0, [r4, #4] + cmpeq r0, #6 + beq _020abc70 + mov r0, r4 + bl _ZN13LinkStateBase10GetStateIdEv + cmp r0, #6 + movne r0, #1 + ldmneia sp!, {r4, pc} +_020abc70: + mov r0, #0 + ldmia sp!, {r4, pc} + arm_func_end _ZN13LinkStateGrab18func_ov00_020abc40Ev + + .global _ZN13LinkStateGrab18func_ov00_020abc78EP8ActorRef + arm_func_start _ZN13LinkStateGrab18func_ov00_020abc78EP8ActorRef +_ZN13LinkStateGrab18func_ov00_020abc78EP8ActorRef: ; 0x020abc78 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r4, r1 + bl _ZN13LinkStateBase18func_ov00_020a8b80Ev + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r5 + bl _ZN13LinkStateBase12GetGrabActorEv + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r5 + bl _ZN13LinkStateBase10GetStateIdEv + cmp r0, #0 + beq _020abce0 + cmp r0, #1 + bne _020abcd8 + ldr r0, _020abd6c ; =data_027e0fb8 + mov r1, #0 + ldr r0, [r0] + strb r1, [r0, #0x79] + strb r1, [r0, #0x7b] + b _020abce0 +_020abcd8: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_020abce0: + ldr r0, _020abd70 ; =data_027e0fe4 + mov r1, r4 + ldr r0, [r0] + bl func_ov00_020c3674 + mov r6, r0 + mov r0, r5 + bl _ZN13LinkStateBase15GetGrabActorRefEv + ldr r2, [r4] + add r1, r6, #0x48 + str r2, [r0] + ldr r2, [r4, #4] + str r2, [r0, #4] + mov r0, r5 + bl _ZN13LinkStateBase6LookAtEP5Vec3p + ldr r1, [r4] + mov r0, r5 + str r1, [r5, #0x10] + ldr r1, [r4, #4] + str r1, [r5, #0x14] + bl _ZN13LinkStateBase12GetPlayerPosEv + mov r2, r0 + ldr r0, _020abd74 ; =data_ov00_020eec9c + mov r1, #0xcb + bl func_ov00_020d7a84 + mov r0, r5 + bl _ZN13LinkStateBase12GetGrabActorEv + ldr r1, [r0] + ldr r1, [r1, #0x58] + blx r1 + mov r0, r5 + mov r1, #2 + mov r2, r1 + bl _ZN13LinkStateBase18ChangeLinkSubStateEii + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 + arm_func_end _ZN13LinkStateGrab18func_ov00_020abc78EP8ActorRef +_020abd6c: .word data_027e0fb8 +_020abd70: .word data_027e0fe4 +_020abd74: .word data_ov00_020eec9c + + .rodata + .global data_ov00_020dc528 +data_ov00_020dc528: ; 0x020dc528 + .ascii "zdf_link_ice" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020dc538 +data_ov00_020dc538: ; 0x020dc538 + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020dc53c +data_ov00_020dc53c: ; 0x020dc53c + .ascii "zdf_link_ice" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020dc54c +data_ov00_020dc54c: ; 0x020dc54c + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020dc550 +data_ov00_020dc550: ; 0x020dc550 + .byte 0xec, 0x01, 0x00, 0x00 + .global data_ov00_020dc554 +data_ov00_020dc554: ; 0x020dc554 + .byte 0x3c, 0x00, 0x00, 0x00 + .global data_ov00_020dc558 +data_ov00_020dc558: ; 0x020dc558 + .byte 0xae, 0x13, 0x00, 0x00 + .global data_ov00_020dc55c +data_ov00_020dc55c: ; 0x020dc55c + .byte 0x0f, 0x00, 0x00, 0x00 + .global data_ov00_020dc560 + + .data + .global data_ov00_020e58e8 +data_ov00_020e58e8: ; 0x020e58e8 + .ascii "brg" + .byte 0x00 + .global data_ov00_020e58ec +data_ov00_020e58ec: ; 0x020e58ec + .ascii "fnl" + .byte 0x00 + .global data_ov00_020e58f0 +data_ov00_020e58f0: ; 0x020e58f0 + .ascii "pdl" + .byte 0x00 + .global data_ov00_020e58f4 +data_ov00_020e58f4: ; 0x020e58f4 + .ascii "dco" + .byte 0x00 + .global data_ov00_020e58f8 +data_ov00_020e58f8: ; 0x020e58f8 + .ascii "can" + .byte 0x00 + .global data_ov00_020e58fc +data_ov00_020e58fc: ; 0x020e58fc + .ascii "hul" + .byte 0x00 + .global data_ov00_020e5900 +data_ov00_020e5900: ; 0x020e5900 + .ascii "bow" + .byte 0x00 + .global data_ov00_020e5904 +data_ov00_020e5904: ; 0x020e5904 + .ascii "anc" + .byte 0x00 + .global data_ov00_020e5908 +data_ov00_020e5908: ; 0x020e5908 + .word data_ov00_020e5904 + .global data_ov00_020e590c +data_ov00_020e590c: ; 0x020e590c + .word data_ov00_020e5900 + .global data_ov00_020e5910 +data_ov00_020e5910: ; 0x020e5910 + .word data_ov00_020e58fc + .global data_ov00_020e5914 +data_ov00_020e5914: ; 0x020e5914 + .word data_ov00_020e58f8 + .global data_ov00_020e5918 +data_ov00_020e5918: ; 0x020e5918 + .word data_ov00_020e58f4 + .global data_ov00_020e591c +data_ov00_020e591c: ; 0x020e591c + .word data_ov00_020e58f0 + .global data_ov00_020e5920 +data_ov00_020e5920: ; 0x020e5920 + .word data_ov00_020e58ec + .global data_ov00_020e5924 +data_ov00_020e5924: ; 0x020e5924 + .word data_ov00_020e58e8 + .global data_ov00_020e5928 +data_ov00_020e5928: ; 0x020e5928 + .byte 0x02, 0x00, 0x00, 0x00 + .global data_ov00_020e592c +data_ov00_020e592c: ; 0x020e592c + .byte 0x1d, 0x00, 0x00, 0x00 + .global data_ov00_020e5930 +data_ov00_020e5930: ; 0x020e5930 + .byte 0x66, 0x16, 0x00, 0x00 + .global data_ov00_020e5934 +data_ov00_020e5934: ; 0x020e5934 + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e5938 +data_ov00_020e5938: ; 0x020e5938 + .byte 0x00, 0x50, 0x00, 0x00 + .global data_ov00_020e593c +data_ov00_020e593c: ; 0x020e593c + .byte 0x1e, 0x00, 0x00, 0x00 + .global data_ov00_020e5940 +data_ov00_020e5940: ; 0x020e5940 + .byte 0x99, 0x19, 0x00, 0x00 + .global data_ov00_020e5944 +data_ov00_020e5944: ; 0x020e5944 + .byte 0x00, 0x20, 0x00, 0x00 + .global data_ov00_020e5948 +data_ov00_020e5948: ; 0x020e5948 + .byte 0x00, 0xa0, 0x00, 0x00 + .global data_ov00_020e594c +data_ov00_020e594c: ; 0x020e594c + .byte 0x1e, 0x00 + .global data_ov00_020e594e +data_ov00_020e594e: ; 0x020e594e + .byte 0x00, 0x00 + .global data_ov00_020e5950 +data_ov00_020e5950: ; 0x020e5950 + .byte 0x00, 0xe8 + .global data_ov00_020e5952 +data_ov00_020e5952: ; 0x020e5952 + .byte 0xff, 0xff + .global data_ov00_020e5954 +data_ov00_020e5954: ; 0x020e5954 + .byte 0x00, 0xa0 + .global data_ov00_020e5956 +data_ov00_020e5956: ; 0x020e5956 + .byte 0x00, 0x00 + .global data_ov00_020e5958 +data_ov00_020e5958: ; 0x020e5958 + .byte 0x00, 0x00 + .global data_ov00_020e595a +data_ov00_020e595a: ; 0x020e595a + .byte 0x00, 0x00 + .global data_ov00_020e595c +data_ov00_020e595c: ; 0x020e595c + .byte 0x22, 0x00, 0x00, 0x00 + .global data_ov00_020e5960 +data_ov00_020e5960: ; 0x020e5960 + .byte 0x00, 0x10, 0x00, 0x00 + .global data_ov00_020e5964 +data_ov00_020e5964: ; 0x020e5964 + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e5968 +data_ov00_020e5968: ; 0x020e5968 + .byte 0x00, 0xf0, 0x00, 0x00 + + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global _ZTV13LinkStateGrab +_ZTV13LinkStateGrab: ; 0x020e5974 + .word _ZN13LinkStateGrab8vfunc_00Ev + .word func_ov04_0210ab88 ; data_ov07_0210ab88 + .word func_ov04_0210ab9c ; data_ov07_0210ab9c + .word _ZN13LinkStateGrab5GetIdEv - 1 + .word _ZN13LinkStateGrab14GetGrabActorIdEv + .word _ZN13LinkStateGrab12OnStateEnterEv - 1 + .word _ZN13LinkStateGrab12OnStateLeaveEi - 1 + .word func_ov05_0210a648 ; data_ov07_0210a648 + .word _ZN13LinkStateGrab8vfunc_20Ei - 1 + .word _ZN13LinkStateGrab8vfunc_24Ei - 1 + .word _ZN13LinkStateBase8vfunc_28Ev + .word func_ov05_0210b3bc ; data_ov07_0210b3bc + .word func_ov05_0210f708 + .word _ZN13LinkStateGrab8vfunc_34EP5Vec3p - 1 + .word func_ov05_0210f70c + .word func_ov05_0210f714 + .word func_ov05_0210f71c + .global data_ov00_020e59b8 +data_ov00_020e59b8: ; 0x020e59b8 + .ascii "持ち上げ再生速度" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e59cc +data_ov00_020e59cc: ; 0x020e59cc + .ascii "持ち上げ開始フレーム" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e59e4 +data_ov00_020e59e4: ; 0x020e59e4 + .ascii "持ち上げ終了フレーム" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e59fc +data_ov00_020e59fc: ; 0x020e59fc + .ascii "投げ再生速度" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e5a0c +data_ov00_020e5a0c: ; 0x020e5a0c + .ascii "投げ開始フレーム" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e5a20 +data_ov00_020e5a20: ; 0x020e5a20 + .ascii "投げ終了フレーム" + .byte 0x00, 0x00, 0x00, 0x00 + .global data_ov00_020e5a34 +data_ov00_020e5a34: ; 0x020e5a34 + .ascii "停止時間" + .byte 0x00, 0x00, 0x00, 0x00 diff --git a/asm/ov00/Player/include/LinkStateDamage.inc b/asm/ov00/Player/include/LinkStateDamage.inc index 93466f0a..1ceeaa01 100644 --- a/asm/ov00/Player/include/LinkStateDamage.inc +++ b/asm/ov00/Player/include/LinkStateDamage.inc @@ -84,7 +84,7 @@ .extern func_ov00_020a914c .extern func_ov00_020d716c .extern func_020385b8 -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern func_ov00_02097ff4 .extern _ZN13LinkStateBase18func_ov00_020a8d40Ev .extern _ZN13LinkStateBase25GetCurrentCharacterHealthEv diff --git a/asm/ov00/Player/include/LinkStateGrab.inc b/asm/ov00/Player/include/LinkStateGrab.inc new file mode 100644 index 00000000..740be649 --- /dev/null +++ b/asm/ov00/Player/include/LinkStateGrab.inc @@ -0,0 +1,198 @@ +#pragma once +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase26PlayerControlData_vfunc_14Ei +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18GetDebugHierarchy0Ev +.extern _ZN13LinkStateBase18func_ov00_020a82acEv +.extern _ZN13LinkStateBase18EquipItem_vfunc_28Ev +.extern _ZN13LinkStateBase15ChangeLinkStateEi +.extern func_ov00_020af044 +.extern _ZN13LinkStateBase18func_ov00_020a8a4cEii +.extern _ZN13LinkStateBase18func_ov00_020a8a4cEii +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_ov00_020d7b20 +.extern func_01ffa0f4 +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern _ZN13LinkStateBase18func_ov00_020a89bcEii +.extern _ZN13LinkStateBase18func_ov00_020a8994Ev +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern func_01ffa0f4 +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern _ZN13LinkStateBase18func_ov00_020a8a4cEii +.extern _ZN13LinkStateBase15ChangeLinkStateEi +.extern func_ov00_020af044 +.extern func_ov00_020c3674 +.extern _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev +.extern _ZN13LinkStateBase15ChangeLinkStateEi +.extern func_020350b4 +.extern func_020351b8 +.extern _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev +.extern _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev +.extern func_ov00_020af044 +.extern _ZN13LinkStateBase15ChangeLinkStateEi +.extern data_027e0fb8 +.extern data_ov00_020eec9c +.extern data_027e0fe4 +.extern _ZN13LinkStateBase12OnStateLeaveEi +.extern func_ov00_020af050 +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase15GetGrabActorRefEv +.extern data_027e0fb8 +.extern _ZNK11ItemManager16GetEquippedFairyEv +.extern _ZNK11ItemManager8GetFairyEi +.extern func_ov00_020ba458 +.extern gItemManager +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern func_ov00_020c2a0c +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern _ZN13LinkStateBase12GetPlayerVelEv +.extern data_02050f54 +.extern _ZN13LinkStateBase25HasFlags_PlayerLink_Unk48Et +.extern _ZN13LinkStateBase18func_ov00_020a8b80Ev +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern func_ov00_020b05e8 +.extern func_ov00_020b049c +.extern func_ov00_020c3674 +.extern _ZN13LinkStateBase18func_ov00_020a8d40Ev +.extern func_ov00_020b0ad0 +.extern _ZN13LinkStateBase18func_ov00_020a8d40Ev +.extern func_ov00_020afe88 +.extern func_ov00_020af050 +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern func_01ff9e64 +.extern func_01ffbe78 +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern func_ov00_020c2a0c +.extern func_01ff9cec +.extern func_ov00_020af044 +.extern func_ov00_020a7b8c +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase19GetCurrentCharacterEv +.extern func_ov23_02171410 +.extern func_01ff9cec +.extern func_01ffa0f4 +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern _ZN13LinkStateBase18func_ov00_020a81b8Eii +.extern _ZN13LinkStateBase18func_ov00_020a81b8Eii +.extern _ZN13LinkStateBase18func_ov00_020a81b8Eii +.extern _ZN13LinkStateBase18func_ov00_020a81b8Eii +.extern _ZN13LinkStateBase18func_ov00_020a8d40Ev +.extern _ZN13LinkStateBase18func_ov00_020a81b8Eii +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern func_01ff9cec +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern func_ov00_020af044 +.extern func_01ff9cec +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern func_01ffa0f4 +.extern func_0202bbbc +.extern func_0202bba8 +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern func_01ff9cec +.extern func_ov05_0211139c +.extern _ZN13LinkStateBase15GetGrabActorRefEv +.extern _ZN13LinkStateBase6LookAtEP5Vec3p +.extern func_ov05_021113b4 +.extern func_ov00_020c1908 +.extern _ZN13LinkStateBase18EquipItem_vfunc_28Ev +.extern func_ov00_020af050 +.extern gItemManager +.extern data_027e0d0c +.extern data_02050f54 +.extern data_027e0fb8 +.extern data_027e0fe4 +.extern data_027e0e60 +.extern func_01fffcd8 +.extern _ZN13LinkStateBase8vfunc_24Ei +.extern _ZN13LinkStateBase8vfunc_24Ei +.extern _ZN13LinkStateBase8vfunc_24Ei +.extern _ZN13LinkStateBase28Get_PlayerControlData_Unk120Ev +.extern _ZN13LinkStateBase18func_ov00_020a8d50Ev +.extern Divide +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern data_02050f54 +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase15GetGrabActorRefEv +.extern data_027e0d0c +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern func_ov00_020c3180 +.extern func_ov00_020aeffc +.extern data_027e0fb8 +.extern func_ov00_020a7b8c +.extern func_ov00_020c2a0c +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern func_01ffa0f4 +.extern func_0202bbbc +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern func_0202da8c +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern _ZN13LinkStateBase15ChangeLinkStateEi +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bf8 +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_01ff9bc4 +.extern func_ov17_0215dff0 +.extern func_ov17_0215e338 +.extern _ZN13LinkStateBase14GetPlayerAngleEv +.extern _ZN13LinkStateBase15GetGrabActorRefEv +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_ov00_020d7a84 +.extern data_02050f54 +.extern data_ov00_020eec9c +.extern _ZN13LinkStateBase18ChangeLinkSubStateEii +.extern _ZN13LinkStateBase10GetStateIdEv +.extern _ZN13LinkStateBase10GetStateIdEv +.extern _ZN13LinkStateBase18func_ov00_020a8b80Ev +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase10GetStateIdEv +.extern func_ov00_020c3674 +.extern _ZN13LinkStateBase15GetGrabActorRefEv +.extern _ZN13LinkStateBase6LookAtEP5Vec3p +.extern _ZN13LinkStateBase12GetPlayerPosEv +.extern func_ov00_020d7a84 +.extern _ZN13LinkStateBase12GetGrabActorEv +.extern _ZN13LinkStateBase18ChangeLinkSubStateEii +.extern data_027e0fb8 +.extern data_027e0fe4 +.extern data_ov00_020eec9c +.extern func_ov04_0210ab88 +.extern func_ov04_0210ab9c +.extern func_ov05_0210a648 +.extern _ZN13LinkStateBase8vfunc_28Ev +.extern func_ov05_0210b3bc +.extern func_ov05_0210f708 +.extern func_ov05_0210f70c +.extern func_ov05_0210f714 +.extern func_ov05_0210f71c diff --git a/asm/ov00/include/ov00_020ae7a4.inc b/asm/ov00/include/ov00_020ae7a4.inc index d1733c00..fc8beb1d 100644 --- a/asm/ov00/include/ov00_020ae7a4.inc +++ b/asm/ov00/include/ov00_020ae7a4.inc @@ -330,7 +330,7 @@ .extern func_ov00_020b542c .extern _ZN13LinkStateBase18func_ov00_020a82acEv .extern func_020385b8 -.extern func_ov00_020ab680 +.extern _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p .extern _ZN13LinkStateBase18func_ov00_020a82acEv .extern func_ov00_020d70a4 .extern func_0202ab78 @@ -362,11 +362,11 @@ .extern func_ov00_020838e8 .extern func_ov12_021343bc .extern func_020385b8 -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern func_ov05_02100ae0 .extern func_ov00_020a5e9c .extern func_020385b8 -.extern func_ov00_020ab680 +.extern _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p .extern func_ov05_02100ae0 .extern func_ov05_021099dc .extern _ZN13LinkStateBase18func_ov00_020a8d40Ev @@ -922,7 +922,7 @@ .extern func_ov00_02083ee0 .extern func_0202b2f8 .extern func_020385b8 -.extern func_ov00_020abb78 +.extern _ZN13LinkStateGrab4GrabEP8ActorRef .extern data_027e0fc8 .extern data_027e0f74 .extern data_027e0c68 @@ -1046,7 +1046,7 @@ .extern _ZNK11ItemManager19GetActiveFairyLevelEi .extern _ZN15LinkStateDamage18func_ov00_020acb6cEP5Vec3pi .extern func_020385b8 -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern func_ov00_020af050 .extern data_027e0fcc .extern data_027e0f94 @@ -1059,16 +1059,16 @@ .extern func_02002c14 .extern _ZN15LinkStateDamage18func_ov00_020acb6cEP5Vec3pi .extern func_020385b8 -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern func_ov00_020af050 .extern data_027e0f74 .extern data_027e0fa0 .extern data_027e0fb8 -.extern func_ov00_020ab3e8 +.extern _ZN13LinkStateGrab13GetLinkState4Ev .extern func_ov05_02107b74 .extern data_027e0fa0 .extern data_027e0fac -.extern func_ov00_020ab3e8 +.extern _ZN13LinkStateGrab13GetLinkState4Ev .extern func_01ffa0f4 .extern data_027e0fa0 .extern data_027e0fac @@ -1102,9 +1102,9 @@ .extern data_027e0fd0 .extern data_027e0fe4 .extern func_020385b8 -.extern func_ov00_020abc78 +.extern _ZN13LinkStateGrab18func_ov00_020abc78EP8ActorRef .extern func_020385b8 -.extern func_ov00_020aa338 +.extern _ZN13LinkStateGrab20CreateDebugHierarchyEv .extern data_027e0fdc .extern func_01ff9bc4 .extern func_020385b8 @@ -1162,7 +1162,7 @@ .extern data_027e0fd4 .extern data_027e0fac .extern func_020385b8 -.extern func_ov00_020ab6c8 +.extern _ZN13LinkStateGrab18func_ov00_020ab6c8Ev .extern func_ov00_020a914c .extern func_ov05_021096bc .extern func_ov00_020a914c @@ -1184,7 +1184,7 @@ .extern data_ov00_020e6298 .extern data_ov00_020e6288 .extern func_020385b8 -.extern func_ov00_020ab6c8 +.extern _ZN13LinkStateGrab18func_ov00_020ab6c8Ev .extern func_ov00_020a914c .extern func_ov00_020b2f70 .extern data_ov00_020e62a8 @@ -1210,12 +1210,12 @@ .extern data_027e0fcc .extern data_027e0f94 .extern func_ov05_02103f4c -.extern func_ov00_020ab3e8 +.extern _ZN13LinkStateGrab13GetLinkState4Ev .extern func_ov05_02107e80 .extern func_ov00_020cfb84 -.extern func_ov00_020ab3e8 +.extern _ZN13LinkStateGrab13GetLinkState4Ev .extern func_020385b8 -.extern func_ov00_020ab614 +.extern _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p .extern data_027e103c .extern data_027e0fa0 .extern data_027e0f94 @@ -2732,7 +2732,7 @@ .extern func_020376c0 .extern func_020385d0 .extern func_020385b8 -.extern func_ov00_020abc18 +.extern _ZN13LinkStateGrab18func_ov00_020abc18EP8ActorRef .extern func_02036da8 .extern func_02037258 .extern data_027e0f64 @@ -2747,7 +2747,7 @@ .extern func_ov00_020c3674 .extern func_ov00_020c3674 .extern func_020385b8 -.extern func_ov00_020abbdc +.extern _ZN13LinkStateGrab18func_ov00_020abbdcEP8ActorRef .extern func_ov00_020bc320 .extern func_ov00_020bc398 .extern func_ov00_020c3674 @@ -2782,7 +2782,7 @@ .extern func_ov00_020c3674 .extern func_ov00_020c3674 .extern func_020385b8 -.extern func_ov00_020abba0 +.extern _ZN13LinkStateGrab18func_ov00_020abba0EP8ActorRef .extern func_ov00_02087ef0 .extern func_ov00_02087338 .extern data_027e0fe4 diff --git a/asm/ov00/ov00_020a8e04.s b/asm/ov00/ov00_020a8e04.s index 0b697545..579835e0 100644 --- a/asm/ov00/ov00_020a8e04.s +++ b/asm/ov00/ov00_020a8e04.s @@ -1982,2059 +1982,6 @@ _020aa280: arm_func_end func_ov00_020aa124 _020aa328: .word data_ov00_020e9360 - .global func_ov00_020aa32c - thumb_func_start func_ov00_020aa32c -func_ov00_020aa32c: ; 0x020aa32c - bx lr - .align 2, 0 - thumb_func_end func_ov00_020aa32c - - .global func_ov00_020aa330 - arm_func_start func_ov00_020aa330 -func_ov00_020aa330: ; 0x020aa330 - mov r0, #2 - bx lr - arm_func_end func_ov00_020aa330 - - .global func_ov00_020aa338 - arm_func_start func_ov00_020aa338 -func_ov00_020aa338: ; 0x020aa338 - ldr r1, [r0, #4] - cmp r1, #7 - cmpne r1, #8 - cmpne r1, #9 - bne _020aa354 - ldr r0, [r0, #0x10] - bx lr -_020aa354: - mvn r0, #0 - bx lr - arm_func_end func_ov00_020aa338 - - .global func_ov00_020aa35c - thumb_func_start func_ov00_020aa35c -func_ov00_020aa35c: ; 0x020aa35c - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r5, r0, #0 - ldr r6, _020aa4f0 ; =data_ov00_020e59b8 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r3, [r0] - ldr r1, _020aa4f4 ; =0x4c475242 - ldr r2, _020aa4f8 ; =data_ov00_020e5940 - ldr r3, [r3, #0x3c] - add r4, r0, #0 - blx r3 - ldr r0, _020aa4f8 ; =data_ov00_020e5940 - mov r1, #0 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #3 - str r1, [sp, #8] - lsl r0, r0, #0xc - str r0, [sp, #0xc] - str r1, [sp, #0x10] - add r0, r4, #0 - ldr r4, [r0] - ldr r3, _020aa4f4 ; =0x4c475242 - ldr r4, [r4, #0x34] - mov r1, #1 - add r2, r6, #0 - blx r4 - ldr r0, _020aa4fc ; =data_ov00_020e5908 - ldr r7, _020aa500 ; =data_ov00_020e59cc - ldr r1, [r0, #0x40] - lsr r0, r1, #0x1f - add r0, r1, r0 - asr r4, r0, #1 - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r3, [r0] - ldr r1, _020aa4f4 ; =0x4c475242 - ldr r2, _020aa504 ; =data_ov00_020e5944 - ldr r3, [r3, #0x3c] - add r6, r0, #0 - blx r3 - ldr r0, _020aa504 ; =data_ov00_020e5944 - ldr r3, _020aa4f4 ; =0x4c475242 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - str r4, [sp, #0xc] - str r0, [sp, #0x10] - add r0, r6, #0 - ldr r4, [r0] - mov r1, #1 - ldr r4, [r4, #0x34] - add r2, r7, #0 - blx r4 - ldr r0, _020aa4fc ; =data_ov00_020e5908 - ldr r7, _020aa508 ; =data_ov00_020e59e4 - ldr r4, [r0, #0x40] - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r3, [r0] - ldr r1, _020aa4f4 ; =0x4c475242 - ldr r2, _020aa50c ; =data_ov00_020e5948 - ldr r3, [r3, #0x3c] - add r6, r0, #0 - blx r3 - ldr r0, _020aa50c ; =data_ov00_020e5948 - ldr r3, _020aa4f4 ; =0x4c475242 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - lsr r0, r4, #0x1f - add r0, r4, r0 - asr r0, r0, #1 - str r0, [sp, #8] - str r4, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x10] - add r0, r6, #0 - ldr r4, [r0] - mov r1, #1 - ldr r4, [r4, #0x34] - add r2, r7, #0 - blx r4 - ldr r1, _020aa4fc ; =data_ov00_020e5908 - add r0, r5, #0 - ldr r1, [r1, #0x54] - blx _ZN13LinkStateBase26PlayerControlData_vfunc_14Ei - add r6, r0, #0 - add r0, r5, #0 - ldr r7, _020aa510 ; =data_ov00_020e59fc - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r3, [r0] - ldr r1, _020aa4f4 ; =0x4c475242 - ldr r2, _020aa514 ; =data_ov00_020e5960 - ldr r3, [r3, #0x3c] - add r4, r0, #0 - blx r3 - ldr r0, _020aa514 ; =data_ov00_020e5960 - mov r1, #0 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #3 - str r1, [sp, #8] - lsl r0, r0, #0xc - str r0, [sp, #0xc] - str r1, [sp, #0x10] - add r0, r4, #0 - ldr r4, [r0] - ldr r3, _020aa4f4 ; =0x4c475242 - ldr r4, [r4, #0x34] - mov r1, #1 - add r2, r7, #0 - blx r4 - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r3, [r0] - ldr r1, _020aa4f4 ; =0x4c475242 - ldr r2, _020aa518 ; =data_ov00_020e5964 - ldr r3, [r3, #0x3c] - add r7, r0, #0 - blx r3 - lsr r0, r6, #0x1f - add r0, r6, r0 - asr r4, r0, #1 - ldr r0, _020aa518 ; =data_ov00_020e5964 - ldr r2, _020aa51c ; =data_ov00_020e5a0c - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - str r4, [sp, #0xc] - str r0, [sp, #0x10] - add r0, r7, #0 - ldr r7, [r0] - ldr r3, _020aa4f4 ; =0x4c475242 - ldr r7, [r7, #0x34] - mov r1, #1 - blx r7 - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r3, [r0] - ldr r1, _020aa4f4 ; =0x4c475242 - ldr r2, _020aa520 ; =data_ov00_020e5968 - ldr r3, [r3, #0x3c] - add r7, r0, #0 - blx r3 - ldr r0, _020aa520 ; =data_ov00_020e5968 - ldr r2, _020aa524 ; =data_ov00_020e5a20 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - str r4, [sp, #8] - str r6, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x10] - add r0, r7, #0 - ldr r4, [r0] - ldr r3, _020aa4f4 ; =0x4c475242 - ldr r4, [r4, #0x34] - mov r1, #1 - blx r4 - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r0, _020aa4fc ; =data_ov00_020e5908 - ldr r6, _020aa528 ; =data_ov00_020e5a34 - ldr r0, [r0, #0x20] - lsl r4, r0, #1 - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - ldr r1, _020aa52c ; =data_ov00_020e5928 - ldr r3, _020aa530 ; =0x4c505348 - str r1, [sp] - mov r1, #6 - str r1, [sp, #4] - mov r1, #0 - str r1, [sp, #8] - str r4, [sp, #0xc] - str r1, [sp, #0x10] - ldr r4, [r0] - add r2, r6, #0 - ldr r4, [r4, #0x34] - blx r4 - add r0, r5, #0 - blx _ZN13LinkStateBase18GetDebugHierarchy0Ev - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - nop - thumb_func_end func_ov00_020aa35c -_020aa4f0: .word data_ov00_020e59b8 -_020aa4f4: .word 0x4c475242 -_020aa4f8: .word data_ov00_020e5940 -_020aa4fc: .word data_ov00_020e5908 -_020aa500: .word data_ov00_020e59cc -_020aa504: .word data_ov00_020e5944 -_020aa508: .word data_ov00_020e59e4 -_020aa50c: .word data_ov00_020e5948 -_020aa510: .word data_ov00_020e59fc -_020aa514: .word data_ov00_020e5960 -_020aa518: .word data_ov00_020e5964 -_020aa51c: .word data_ov00_020e5a0c -_020aa520: .word data_ov00_020e5968 -_020aa524: .word data_ov00_020e5a20 -_020aa528: .word data_ov00_020e5a34 -_020aa52c: .word data_ov00_020e5928 -_020aa530: .word 0x4c505348 - - .global func_ov00_020aa534 - arm_func_start func_ov00_020aa534 -func_ov00_020aa534: ; 0x020aa534 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r4, r0 - ldr r1, [r4, #4] - cmp r1, #6 - beq _020aa558 - bl _ZN13LinkStateBase18func_ov00_020a82acEv - mov r0, r4 - bl _ZN13LinkStateBase18EquipItem_vfunc_28Ev -_020aa558: - ldr r0, [r4, #4] - cmp r0, #9 - addls pc, pc, r0, lsl #2 - b _020aa76c -_020aa568: ; jump table - b _020aa590 ; case 0 - b _020aa5a0 ; case 1 - b _020aa5c0 ; case 2 - b _020aa5d4 ; case 3 - b _020aa5d4 ; case 4 - b _020aa634 ; case 5 - b _020aa75c ; case 6 - b _020aa684 ; case 7 - b _020aa704 ; case 8 - b _020aa730 ; case 9 -_020aa590: - mov r0, r4 - mov r1, #0 - bl _ZN13LinkStateBase15ChangeLinkStateEi - b _020aa778 -_020aa5a0: - ldr r0, _020aa78c ; =data_027e0fb8 - ldr r0, [r0] - bl func_ov00_020af044 - ldr r1, _020aa790 ; =data_ov00_020e592c - mov r0, r4 - mov r2, #1 - bl _ZN13LinkStateBase18func_ov00_020a8a4cEii - b _020aa778 -_020aa5c0: - ldr r1, _020aa794 ; =data_ov00_020e593c - mov r0, r4 - mov r2, #1 - bl _ZN13LinkStateBase18func_ov00_020a8a4cEii - b _020aa778 -_020aa5d4: - mov r0, r4 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - mov r0, r4 - beq _020aa62c - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r2, r0 - ldr r0, _020aa798 ; =data_ov00_020eec9c - ldr r1, _020aa79c ; =0x00000125 - bl func_ov00_020d7b20 - ldr r0, [r4, #0x18] - ldr r1, [r4, #0x20] - bl func_01ffa0f4 - mov r5, r0 - mov r0, r4 - bl _ZN13LinkStateBase14GetPlayerAngleEv - strh r5, [r0] - ldr r1, _020aa7a0 ; =data_ov00_020e595c - mov r0, r4 - mov r2, #1 - bl _ZN13LinkStateBase18func_ov00_020a89bcEii - b _020aa778 -_020aa62c: - bl _ZN13LinkStateBase18func_ov00_020a8994Ev - b _020aa778 -_020aa634: - mov r0, r4 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - beq _020aa674 - ldr r0, [r4, #0x18] - ldr r1, [r4, #0x20] - bl func_01ffa0f4 - mov r5, r0 - mov r0, r4 - bl _ZN13LinkStateBase14GetPlayerAngleEv - strh r5, [r0] - ldr r1, _020aa7a4 ; =data_ov00_020e594c - mov r0, r4 - mov r2, #1 - bl _ZN13LinkStateBase18func_ov00_020a8a4cEii - b _020aa778 -_020aa674: - mov r0, r4 - mov r1, #0 - bl _ZN13LinkStateBase15ChangeLinkStateEi - b _020aa778 -_020aa684: - ldr r0, _020aa78c ; =data_027e0fb8 - ldr r0, [r0] - bl func_ov00_020af044 - ldr r0, _020aa7a8 ; =data_027e0fe4 - add r1, r4, #0x10 - ldr r0, [r0] - bl func_ov00_020c3674 - cmp r0, #0 - mov r0, r4 - beq _020aa6bc - bl _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev - mov r1, #0 - str r1, [r0] - b _020aa6c4 -_020aa6bc: - mov r1, #0 - bl _ZN13LinkStateBase15ChangeLinkStateEi -_020aa6c4: - mov r2, #0 - str r2, [sp] - mov r3, r2 - add r0, r4, #0x24 - mov r1, #1 - str r2, [sp, #4] - bl func_020350b4 - mov r1, #0 - mov r2, r1 - mov r3, r1 - add r0, r4, #0x24 - str r1, [sp] - bl func_020351b8 - mov r0, #0 - strb r0, [r4, #0xb2] - b _020aa778 -_020aa704: - ldrb r0, [r4, #0xb0] - cmp r0, #0 - beq _020aa720 - mov r0, r4 - bl _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev - mov r1, #1 - str r1, [r0] -_020aa720: - ldr r0, _020aa7ac ; =data_ov00_020e5908 - ldr r0, [r0, #0x20] - str r0, [r4, #0xc] - b _020aa778 -_020aa730: - ldrb r0, [r4, #0xb1] - cmp r0, #0 - beq _020aa74c - mov r0, r4 - bl _ZN13LinkStateBase20Get_PlayerLink_Unk44Ev - mvn r1, #0 - str r1, [r0] -_020aa74c: - ldr r0, _020aa7ac ; =data_ov00_020e5908 - ldr r0, [r0, #0x20] - str r0, [r4, #0xc] - b _020aa778 -_020aa75c: - ldr r0, _020aa78c ; =data_027e0fb8 - ldr r0, [r0] - bl func_ov00_020af044 - b _020aa778 -_020aa76c: - mov r0, r4 - mov r1, #0 - bl _ZN13LinkStateBase15ChangeLinkStateEi -_020aa778: - ldr r0, [r4, #4] - cmp r0, #7 - strne r0, [r4, #0xac] - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 - arm_func_end func_ov00_020aa534 -_020aa78c: .word data_027e0fb8 -_020aa790: .word data_ov00_020e592c -_020aa794: .word data_ov00_020e593c -_020aa798: .word data_ov00_020eec9c -_020aa79c: .word 0x00000125 -_020aa7a0: .word data_ov00_020e595c -_020aa7a4: .word data_ov00_020e594c -_020aa7a8: .word data_027e0fe4 -_020aa7ac: .word data_ov00_020e5908 - - .global func_ov00_020aa7b0 - arm_func_start func_ov00_020aa7b0 -func_ov00_020aa7b0: ; 0x020aa7b0 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN13LinkStateBase12OnStateLeaveEi - ldr r0, _020aa814 ; =data_027e0fb8 - ldr r0, [r0] - ldrb r1, [r0, #0x80] - cmp r1, #0 - beq _020aa7d4 - bl func_ov00_020af050 -_020aa7d4: - mov r0, r4 - bl _ZN13LinkStateBase12GetGrabActorEv - ldr r1, [r4, #4] - cmp r1, #1 - ldmneia sp!, {r4, pc} - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldrb r0, [r0, #0x11b] - cmp r0, #0 - ldmneia sp!, {r4, pc} - mov r0, r4 - bl _ZN13LinkStateBase15GetGrabActorRefEv - mvn r1, #0 - str r1, [r0] - str r1, [r0, #4] - ldmia sp!, {r4, pc} - .align 2, 0 - arm_func_end func_ov00_020aa7b0 -_020aa814: .word data_027e0fb8 - - .global func_ov00_020aa818 - arm_func_start func_ov00_020aa818 -func_ov00_020aa818: ; 0x020aa818 - stmdb sp!, {r4, lr} - ldr r0, _020aa840 ; =gItemManager - ldr r4, [r0] - mov r0, r4 - bl _ZNK11ItemManager16GetEquippedFairyEv - mov r1, r0 - mov r0, r4 - bl _ZNK11ItemManager8GetFairyEi - bl func_ov00_020ba458 - ldmia sp!, {r4, pc} - .align 2, 0 - arm_func_end func_ov00_020aa818 -_020aa840: .word gItemManager - - .global func_ov00_020aa844 - arm_func_start func_ov00_020aa844 -func_ov00_020aa844: ; 0x020aa844 - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x2c - mov r4, r1 - mov r5, r0 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - add r2, sp, #0x20 - add r0, r4, #0x48 - bl func_01ff9bf8 - mov r0, r5 - bl _ZN13LinkStateBase14GetPlayerAngleEv - ldrh r6, [r0] - mov r0, r5 - bl _ZN13LinkStateBase14GetPlayerAngleEv - ldrh r1, [r0] - mov r0, r6, asr #0x4 - mov r2, r0, lsl #0x2 - mov r0, r1, asr #0x4 - mov r0, r0, lsl #0x1 - add r0, r0, #1 - ldr r3, _020aabd0 ; =data_02050f54 - mov r1, r0, lsl #0x1 - ldrsh r1, [r3, r1] - ldrsh sb, [r3, r2] - ldr r6, [sp, #0x20] - str r1, [sp] - mov r1, r1, asr #0x1f - str r1, [sp, #4] - ldr r1, [sp] - mov r0, r4 - rsb r1, r1, #0 - str r1, [sp, #8] - ldr r2, [sp, #8] - mov r1, r1, asr #0x1f - smull r3, r2, r6, r2 - adds r4, r3, #0x800 - adc r3, r2, #0 - mov r2, r4, lsr #0xc - str r1, [sp, #0xc] - ldr r7, [sp, #0x28] - orr r2, r2, r3, lsl #20 - smull r4, r3, r7, sb - adds r4, r4, #0x800 - adc r3, r3, #0 - mov r4, r4, lsr #0xc - orr r4, r4, r3, lsl #20 - add r1, sp, #0x10 - mov r8, sb, asr #0x1f - add r4, r2, r4 - bl func_ov00_020c2a0c - smull r1, r0, r6, sb - adds r1, r1, #0x800 - adc r0, r0, #0 - mov r2, r1, lsr #0xc - orr r2, r2, r0, lsl #20 - ldr r0, [sp] - smull r1, r0, r7, r0 - adds r1, r1, #0x800 - adc r0, r0, #0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #20 - add r2, r2, r1 - ldr r1, [sp, #0x1c] - mov r0, r5 - add r1, r1, #0x66 - add r1, r1, #0x600 - sub r7, r2, r1 - bl _ZN13LinkStateBase12GetPlayerVelEv - mov r1, #0 - str r1, [r0] - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerVelEv - mov r1, #0 - cmp r4, #0 - str r1, [r0, #8] - ble _020aaa04 - ldr r6, _020aabd4 ; =0x00000155 - mov r0, r5 - cmp r4, r6 - movle r6, r4 - bl _ZN13LinkStateBase12GetPlayerVelEv - ldr r1, [sp, #8] - mov r2, r6, asr #0x1f - umull ip, r3, r6, r1 - ldr r1, [sp, #0xc] - mla r3, r6, r1, r3 - ldr r1, [sp, #8] - adds r6, ip, #0x800 - mla r3, r2, r1, r3 - adc r2, r3, #0 - mov r3, r6, lsr #0xc - ldr r1, _020aabd4 ; =0x00000155 - ldr r6, [r0] - orr r3, r3, r2, lsl #20 - add r2, r6, r3 - str r2, [r0] - cmp r4, r1 - movgt r4, r1 - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerVelEv - umull r3, r2, r4, sb - mla r2, r4, r8, r2 - mov r1, r4, asr #0x1f - mla r2, r1, sb, r2 - adds r3, r3, #0x800 - adc r1, r2, #0 - mov r2, r3, lsr #0xc - ldr r3, [r0, #8] - orr r2, r2, r1, lsl #20 - add r1, r3, r2 - str r1, [r0, #8] - b _020aaa98 -_020aaa04: - cmp r4, #0 - bge _020aaa98 - mvn r6, #0x154 - cmp r4, r6 - mov r0, r5 - movge r6, r4 - bl _ZN13LinkStateBase12GetPlayerVelEv - ldr r1, [sp, #8] - mov r2, r6, asr #0x1f - umull ip, r3, r6, r1 - ldr r1, [sp, #0xc] - mla r3, r6, r1, r3 - ldr r1, [sp, #8] - adds r6, ip, #0x800 - mla r3, r2, r1, r3 - adc r2, r3, #0 - mov r3, r6, lsr #0xc - mvn r1, #0x154 - cmp r4, r1 - ldr r6, [r0] - orr r3, r3, r2, lsl #20 - add r2, r6, r3 - str r2, [r0] - movlt r4, r1 - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerVelEv - umull r3, r2, r4, sb - mla r2, r4, r8, r2 - mov r1, r4, asr #0x1f - mla r2, r1, sb, r2 - adds r3, r3, #0x800 - adc r1, r2, #0 - mov r2, r3, lsr #0xc - ldr r3, [r0, #8] - orr r2, r2, r1, lsl #20 - add r1, r3, r2 - str r1, [r0, #8] -_020aaa98: - cmp r7, #0 - ble _020aab34 - ldr r4, _020aabd4 ; =0x00000155 - mov r0, r5 - cmp r7, r4 - movle r4, r7 - bl _ZN13LinkStateBase12GetPlayerVelEv - umull r3, r2, r4, sb - adds r3, r3, #0x800 - mla r2, r4, r8, r2 - mov r1, r4, asr #0x1f - mla r2, r1, sb, r2 - adc r2, r2, #0 - mov r3, r3, lsr #0xc - ldr r1, _020aabd4 ; =0x00000155 - ldr r4, [r0] - orr r3, r3, r2, lsl #20 - add r2, r4, r3 - str r2, [r0] - cmp r7, r1 - mov r0, r5 - movgt r7, r1 - bl _ZN13LinkStateBase12GetPlayerVelEv - ldr r1, [sp] - mov r2, r7, asr #0x1f - umull r4, r3, r7, r1 - ldr r1, [sp, #4] - adds r4, r4, #0x800 - mla r3, r7, r1, r3 - ldr r1, [sp] - add sp, sp, #0x2c - mla r3, r2, r1, r3 - adc r1, r3, #0 - mov r2, r4, lsr #0xc - ldr r3, [r0, #8] - orr r2, r2, r1, lsl #20 - add r1, r3, r2 - str r1, [r0, #8] - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} -_020aab34: - addge sp, sp, #0x2c - ldmgeia sp!, {r4, r5, r6, r7, r8, sb, pc} - mvn r4, #0x154 - cmp r7, r4 - movge r4, r7 - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerVelEv - umull r3, r2, r4, sb - adds r3, r3, #0x800 - mla r2, r4, r8, r2 - mov r1, r4, asr #0x1f - mla r2, r1, sb, r2 - adc r2, r2, #0 - mov r3, r3, lsr #0xc - mvn r1, #0x154 - cmp r7, r1 - ldr r4, [r0] - orr r3, r3, r2, lsl #20 - add r2, r4, r3 - str r2, [r0] - mov r0, r5 - movlt r7, r1 - bl _ZN13LinkStateBase12GetPlayerVelEv - ldr r1, [sp] - mov r2, r7, asr #0x1f - umull r4, r3, r7, r1 - ldr r1, [sp, #4] - adds r4, r4, #0x800 - mla r3, r7, r1, r3 - ldr r1, [sp] - mla r3, r2, r1, r3 - adc r1, r3, #0 - mov r2, r4, lsr #0xc - ldr r3, [r0, #8] - orr r2, r2, r1, lsl #20 - add r1, r3, r2 - str r1, [r0, #8] - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 - arm_func_end func_ov00_020aa844 -_020aabd0: .word data_02050f54 -_020aabd4: .word 0x00000155 - - .global func_ov00_020aabd8 - arm_func_start func_ov00_020aabd8 -func_ov00_020aabd8: ; 0x020aabd8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xc8 - mov r6, r1 - mov r1, #2 - mov r4, r0 - bl _ZN13LinkStateBase25HasFlags_PlayerLink_Unk48Et - cmp r0, #0 - bne _020aac08 - mov r0, r4 - bl _ZN13LinkStateBase18func_ov00_020a8b80Ev - cmp r0, #0 - bne _020aac14 -_020aac08: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020aac14: - mov r0, r4 - bl _ZN13LinkStateBase12GetGrabActorEv - movs r5, r0 - beq _020aadbc - cmp r6, #0 - bne _020aadbc - ldr r0, _020ab3bc ; =gItemManager - mov r6, #0 - ldr r0, [r0] - ldr r0, [r0] - sub r0, r0, #9 - cmp r0, #1 - bhi _020aacf4 - ldr r1, _020ab3c0 ; =data_027e0d0c - mov r0, r4 - ldr r2, [r1] - str r2, [r4, #0x18] - ldr r2, [r1, #4] - str r2, [r4, #0x1c] - ldr r1, [r1, #8] - str r1, [r4, #0x20] - bl _ZN13LinkStateBase14GetPlayerAngleEv - ldrh r1, [r0] - ldr r2, _020ab3c4 ; =data_02050f54 - ldr r0, _020ab3c8 ; =0x000004cd - mov r1, r1, asr #0x4 - mov r3, r1, lsl #0x1 - mov r1, r3, lsl #0x1 - ldrsh ip, [r2, r1] - add r1, r3, #1 - mov r1, r1, lsl #0x1 - ldrsh r2, [r2, r1] - mov r1, r6 - umull r7, lr, ip, r0 - mla lr, ip, r1, lr - umull r6, r3, r2, r0 - mla r3, r2, r1, r3 - mov ip, ip, asr #0x1f - mov r1, r2, asr #0x1f - adds r8, r7, #0x800 - mla lr, ip, r0, lr - mla r3, r1, r0, r3 - adc r7, lr, #0 - mov r8, r8, lsr #0xc - adds r6, r6, #0x800 - mov r1, r6, lsr #0xc - ldr r0, [r4, #0x18] - orr r8, r8, r7, lsl #20 - add r0, r0, r8 - str r0, [r4, #0x18] - adc r0, r3, #0 - ldr r2, [r4, #0x20] - orr r1, r1, r0, lsl #20 - add r0, r2, r1 - str r0, [r4, #0x20] - mov r6, #1 -_020aacf4: - mov r0, r5 - ldr r1, [r0] - ldr r1, [r1, #0x2c] - blx r1 - mvn r1, #0 - cmp r0, r1 - movne r5, #1 - moveq r5, #0 - cmp r5, #0 - bne _020aad64 - cmp r6, #0 - bne _020aad3c - ldr r0, _020ab3cc ; =data_027e0fb8 - add r1, r4, #0x18 - ldr r0, [r0] - bl func_ov00_020b05e8 - cmp r0, #0 - beq _020aad64 -_020aad3c: - ldr r0, _020ab3cc ; =data_027e0fb8 - mov r1, #0 - ldr r2, [r0] - mov r0, #5 - strb r1, [r2, #0x79] - strb r1, [r2, #0x7b] - str r0, [r4, #4] - add sp, sp, #0xc8 - mov r0, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020aad64: - cmp r6, #0 - bne _020aad88 - ldr r0, _020ab3cc ; =data_027e0fb8 - mov r2, r5 - ldr r0, [r0] - add r1, r4, #0x18 - bl func_ov00_020b049c - cmp r0, #0 - beq _020aadb0 -_020aad88: - ldr r0, _020ab3cc ; =data_027e0fb8 - mov r1, #0 - ldr r2, [r0] - mov r0, #3 - strb r1, [r2, #0x79] - strb r1, [r2, #0x7b] - str r0, [r4, #4] - add sp, sp, #0xc8 - mov r0, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020aadb0: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020aadbc: - ldr r1, _020ab3cc ; =data_027e0fb8 - ldr r0, _020ab3d0 ; =data_027e0fe4 - ldr r3, [r1] - ldr r0, [r0] - ldr r2, [r3, #0x84] - add r1, sp, #0x14 - str r2, [sp, #0x14] - ldr r2, [r3, #0x88] - str r2, [sp, #0x18] - bl func_ov00_020c3674 - movs r6, r0 - bne _020aae38 - mov r0, r4 - bl _ZN13LinkStateBase18func_ov00_020a8d40Ev - ldr r2, _020ab3cc ; =data_027e0fb8 - ldr r1, [r0, #0xe0] - ldr r0, [r2] - bl func_ov00_020b0ad0 - cmp r0, #0 - beq _020aae2c - mov r0, r4 - bl _ZN13LinkStateBase18func_ov00_020a8d40Ev - ldr r6, [r0, #0xe0] - ldr r0, [r6, #8] - str r0, [sp, #0x14] - ldr r0, [r6, #0xc] - str r0, [sp, #0x18] - b _020aae54 -_020aae2c: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020aae38: - ldr r0, _020ab3cc ; =data_027e0fb8 - ldr r0, [r0] - ldrb r0, [r0, #0x80] - cmp r0, #0 - addne sp, sp, #0xc8 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} -_020aae54: - ldr r0, _020ab3cc ; =data_027e0fb8 - cmp r5, #0 - movne r2, #1 - ldr r1, [r6, #0x12c] - ldr r0, [r0] - moveq r2, #0 - bl func_ov00_020afe88 - cmp r0, #0 - bne _020aae90 - ldr r0, _020ab3cc ; =data_027e0fb8 - ldr r0, [r0] - bl func_ov00_020af050 - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020aae90: - ldr r0, [r6, #0x12c] - cmp r0, #2 - bne _020aaf78 - mov r0, r4 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - bne _020aaf78 - add r3, sp, #0x5c - add r1, r6, #0x60 - add r2, r6, #0x48 - mov r0, #0x6000 - bl func_01ff9e64 - mov r0, #0 - ldr r1, _020ab3d4 ; =0x0000ffff - strh r0, [sp, #0x94] - strb r0, [sp, #0xb6] - strb r0, [sp, #0xb7] - strb r0, [sp, #0xb8] - strb r0, [sp, #0xb9] - strb r0, [sp, #0xc0] - strb r0, [sp, #0xc1] - strb r0, [sp, #0xc2] - strb r0, [sp, #0xc3] - strb r0, [sp, #0xc4] - strb r0, [sp, #0xc5] - strh r1, [sp, #0x8c] - strh r1, [sp, #0x8e] - strh r1, [sp, #0x90] - strh r1, [sp, #0x92] - ldr r1, [r6, #0x48] - add r2, r6, #0x8c - str r1, [sp, #0x28] - ldr r1, [r6, #0x4c] - ldr r5, _020ab3d8 ; =data_027e0e60 - str r1, [sp, #0x2c] - ldr r3, [r6, #0x50] - add r1, sp, #0x68 - str r3, [sp, #0x30] - str r2, [sp] - ldr r3, [r6, #8] - add r2, sp, #0x5c - str r3, [sp, #4] - ldrh ip, [r6, #0x9c] - add r3, sp, #0x28 - str ip, [sp, #8] - str r0, [sp, #0xc] - str r0, [sp, #0x10] - ldr r0, [r5] - bl func_01ffbe78 - cmp r0, #0 - beq _020aaf88 - ldr r2, [sp, #0x68] - ldr r1, [sp, #0x6c] - ldr r0, [sp, #0x70] - str r2, [sp, #0x5c] - str r1, [sp, #0x60] - str r0, [sp, #0x64] - b _020aaf88 -_020aaf78: - add r1, sp, #0x5c - mov r0, r4 - mov r2, r6 - bl func_ov00_020ab7bc -_020aaf88: - mov r0, r4 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - add r0, sp, #0x5c - add r2, sp, #0x50 - bl func_01ff9bf8 - add r1, sp, #0x40 - mov r0, r6 - bl func_ov00_020c2a0c - ldr r0, [r6, #0x12c] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _020ab3b0 -_020aafbc: ; jump table - b _020ab3b0 ; case 0 - b _020aafd8 ; case 1 - b _020ab000 ; case 2 - b _020ab1e4 ; case 3 - b _020ab2b0 ; case 4 - b _020ab32c ; case 5 - b _020ab398 ; case 6 -_020aafd8: - add r0, sp, #0x50 - bl func_01ff9cec - cmp r0, #0x800 - bge _020aaff4 - ldr r0, _020ab3cc ; =data_027e0fb8 - ldr r0, [r0] - bl func_ov00_020af044 -_020aaff4: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab000: - bl func_ov00_020a7b8c - ldr r2, [r0] - mov r1, #1 - ldr r2, [r2, #0x14] - blx r2 - cmp r0, #0 - addeq sp, sp, #0xc8 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r4 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - bne _020ab170 - mov r0, r4 - bl _ZN13LinkStateBase19GetCurrentCharacterEv - cmp r0, #1 - bne _020ab060 - bl func_ov00_020ab3e8 - add r2, sp, #0x50 - mov r1, r6 - bl func_ov23_02171410 - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab060: - add r0, sp, #0x50 - bl func_01ff9cec - ldr r1, [sp, #0x4c] - mov r5, r0 - add r0, r1, #0x3800 - cmp r5, r0 - bge _020ab1d8 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x58] - bl func_01ffa0f4 - ldr r1, _020ab3dc ; =0x00001ccd - mov r0, r0, lsl #0x10 - cmp r5, r1 - mov r6, r0, asr #0x10 - bge _020ab0fc - mov r0, r4 - bl _ZN13LinkStateBase14GetPlayerAngleEv - ldrsh r0, [r0] - add r2, sp, #0x5c - sub r0, r6, r0 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 - cmp r1, #0x4000 - ble _020ab0d0 - mov r0, r4 - mov r1, #1 - bl _ZN13LinkStateBase18func_ov00_020a81b8Eii - b _020ab160 -_020ab0d0: - mov r0, #0x4000 - rsb r0, r0, #0 - cmp r1, r0 - mov r0, r4 - blt _020ab0f0 - mov r1, #0 - bl _ZN13LinkStateBase18func_ov00_020a81b8Eii - b _020ab160 -_020ab0f0: - mov r1, #2 - bl _ZN13LinkStateBase18func_ov00_020a81b8Eii - b _020ab160 -_020ab0fc: - rsb r0, r1, #0x4800 - cmp r5, r0 - bge _020ab134 - ldr r1, [sp, #0x54] - ldr r0, _020ab3e0 ; =0x00001333 - cmp r1, #0 - rsblt r1, r1, #0 - cmp r1, r0 - bge _020ab134 - add r2, sp, #0x5c - mov r0, r4 - mov r1, #3 - bl _ZN13LinkStateBase18func_ov00_020a81b8Eii - b _020ab160 -_020ab134: - mov r0, r4 - bl _ZN13LinkStateBase18func_ov00_020a8d40Ev - ldrsh r0, [r0, #0x5a] - cmp r0, #0 - addne sp, sp, #0xc8 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - add r2, sp, #0x5c - mov r0, r4 - mov r1, #4 - bl _ZN13LinkStateBase18func_ov00_020a81b8Eii -_020ab160: - mov r0, r4 - bl _ZN13LinkStateBase14GetPlayerAngleEv - strh r6, [r0] - b _020ab1d8 -_020ab170: - add r0, sp, #0x50 - bl func_01ff9cec - cmp r0, #0x4000 - bge _020ab1d8 - mov r0, r4 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - add r0, r6, #0x48 - add r2, r4, #0x18 - bl func_01ff9bf8 - ldr r0, _020ab3cc ; =data_027e0fb8 - mov r1, #0 - ldr r2, [r0] - strb r1, [r2, #0x79] - strb r1, [r2, #0x7b] - ldr r0, [r0] - bl func_ov00_020af044 - mov r0, #3 - str r0, [r4, #4] - ldr r1, [sp, #0x14] - mov r0, #1 - str r1, [r4, #0x10] - ldr r1, [sp, #0x18] - add sp, sp, #0xc8 - str r1, [r4, #0x14] - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab1d8: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab1e4: - add r0, sp, #0x50 - bl func_01ff9cec - cmp r0, #0x400 - bge _020ab2a4 - mov r0, r4 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - add r0, sp, #0x40 - add r2, sp, #0x34 - bl func_01ff9bf8 - ldr r0, [sp, #0x34] - cmp r0, #0 - ldreq r0, [sp, #0x3c] - cmpeq r0, #0 - beq _020ab278 - ldr r0, [sp, #0x34] - ldr r1, [sp, #0x3c] - bl func_01ffa0f4 - mov r6, r0, lsl #0x10 - mov r0, r6, asr #0x10 - bl func_0202bbbc - bl func_0202bba8 - mov r5, r0 - rsb r0, r5, r6, asr #16 - mov r0, r0, lsl #0x10 - movs r1, r0, asr #0x10 - rsbmi r0, r1, #0 - movmi r0, r0, lsl #0x10 - movmi r1, r0, asr #0x10 - ldr r0, _020ab3e4 ; =0x000018e4 - cmp r1, r0 - addgt sp, sp, #0xc8 - movgt r0, #0 - ldmgtia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r4 - bl _ZN13LinkStateBase14GetPlayerAngleEv - strh r5, [r0] -_020ab278: - mov r0, #7 - str r0, [r4, #4] - mov r0, #0 - str r0, [r4, #0xc] - ldr r1, [sp, #0x14] - mov r0, #1 - str r1, [r4, #0x10] - ldr r1, [sp, #0x18] - add sp, sp, #0xc8 - str r1, [r4, #0x14] - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab2a4: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab2b0: - add r0, sp, #0x50 - bl func_01ff9cec - ldr r1, [sp, #0x4c] - add r1, r1, #0xc00 - cmp r0, r1 - bge _020ab320 - mov r0, r4 - bl func_ov05_0211139c - cmp r0, #0 - bne _020ab320 - mov r0, r4 - bl _ZN13LinkStateBase15GetGrabActorRefEv - ldr r1, [r6, #8] - mov r2, #1 - str r1, [r0] - ldr r3, [r6, #0xc] - add r1, r6, #0x48 - str r3, [r0, #4] - mov r0, r4 - str r2, [r4, #4] - bl _ZN13LinkStateBase6LookAtEP5Vec3p - ldr r1, [sp, #0x14] - mov r0, #1 - str r1, [r4, #0x10] - ldr r1, [sp, #0x18] - add sp, sp, #0xc8 - str r1, [r4, #0x14] - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab320: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab32c: - mov r0, r6 - ldr r1, [r0] - ldr r1, [r1, #0x3c] - blx r1 - cmp r0, #0 - beq _020ab38c - mov r0, r4 - bl func_ov05_021113b4 - cmp r0, #0 - beq _020ab38c - mov r0, r6 - mov r1, #1 - bl func_ov00_020c1908 - mov r0, #6 - str r0, [r4, #4] - ldr r1, [sp, #0x14] - mov r0, r4 - str r1, [r4, #0x10] - ldr r1, [sp, #0x18] - str r1, [r4, #0x14] - bl _ZN13LinkStateBase18EquipItem_vfunc_28Ev - add sp, sp, #0xc8 - mov r0, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab38c: - add sp, sp, #0xc8 - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab398: - ldr r0, _020ab3cc ; =data_027e0fb8 - ldr r0, [r0] - bl func_ov00_020af050 - add sp, sp, #0xc8 - mov r0, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020ab3b0: - mov r0, #0 - add sp, sp, #0xc8 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 - arm_func_end func_ov00_020aabd8 -_020ab3bc: .word gItemManager -_020ab3c0: .word data_027e0d0c -_020ab3c4: .word data_02050f54 -_020ab3c8: .word 0x000004cd -_020ab3cc: .word data_027e0fb8 -_020ab3d0: .word data_027e0fe4 -_020ab3d4: .word 0x0000ffff -_020ab3d8: .word data_027e0e60 -_020ab3dc: .word 0x00001ccd -_020ab3e0: .word 0x00001333 -_020ab3e4: .word 0x000018e4 - - .global func_ov00_020ab3e8 - arm_func_start func_ov00_020ab3e8 -func_ov00_020ab3e8: ; 0x020ab3e8 - ldr ip, _020ab3f4 ; =func_01fffcd8 - mov r0, #4 - bx ip - .align 2, 0 - arm_func_end func_ov00_020ab3e8 -_020ab3f4: .word func_01fffcd8 - - .global func_ov00_020ab3f8 - arm_func_start func_ov00_020ab3f8 -func_ov00_020ab3f8: ; 0x020ab3f8 - stmdb sp!, {r3, lr} - cmp r1, #5 - addls pc, pc, r1, lsl #2 - b _020ab47c -_020ab408: ; jump table - b _020ab47c ; case 0 - b _020ab484 ; case 1 - b _020ab484 ; case 2 - b _020ab484 ; case 3 - b _020ab420 ; case 4 - b _020ab434 ; case 5 -_020ab420: - ldr r2, [r0, #4] - cmp r2, #6 - bne _020ab484 - bl _ZN13LinkStateBase8vfunc_24Ei - ldmia sp!, {r3, pc} -_020ab434: - ldr r2, [r0, #4] - cmp r2, #9 - addls pc, pc, r2, lsl #2 - b _020ab474 -_020ab444: ; jump table - b _020ab474 ; case 0 - b _020ab474 ; case 1 - b _020ab474 ; case 2 - b _020ab46c ; case 3 - b _020ab46c ; case 4 - b _020ab474 ; case 5 - b _020ab474 ; case 6 - b _020ab474 ; case 7 - b _020ab46c ; case 8 - b _020ab46c ; case 9 -_020ab46c: - mov r0, #0 - ldmia sp!, {r3, pc} -_020ab474: - bl _ZN13LinkStateBase8vfunc_24Ei - ldmia sp!, {r3, pc} -_020ab47c: - mov r0, #0 - ldmia sp!, {r3, pc} -_020ab484: - ldr r2, [r0, #4] - cmp r2, #1 - cmpne r2, #7 - bne _020ab49c - bl _ZN13LinkStateBase8vfunc_24Ei - ldmia sp!, {r3, pc} -_020ab49c: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end func_ov00_020ab3f8 - - .global func_ov00_020ab4a4 - arm_func_start func_ov00_020ab4a4 -func_ov00_020ab4a4: ; 0x020ab4a4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r6, r0 - mov r4, r1 - bl _ZN13LinkStateBase28Get_PlayerControlData_Unk120Ev - cmp r0, #0x1e - bne _020ab5f4 - mov r0, r6 - bl _ZN13LinkStateBase18func_ov00_020a8d50Ev - cmp r0, #0x2000 - movlt r5, #0 - blt _020ab4ec - cmp r0, #0x7000 - movge r5, #0x1000 - bge _020ab4ec - sub r0, r0, #0x2000 - mov r1, #0x5000 - bl Divide - mov r5, r0 -_020ab4ec: - mov r0, r6 - bl _ZN13LinkStateBase14GetPlayerAngleEv - mov r1, r5, asr #0x1f - mov r2, r1, lsl #0xe - mov r1, #0x800 - adds r3, r1, r5, lsl #14 - orr r2, r2, r5, lsr #18 - adc r1, r2, #0 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #20 - mov r1, r2, lsl #0x10 - mov r1, r1, lsr #0x10 - mov r1, r1, asr #0x4 - mov r5, r1, lsl #0x1 - add r1, r5, #1 - ldr ip, _020ab60c ; =data_02050f54 - mov r1, r1, lsl #0x1 - ldrsh r3, [ip, r1] - ldr r6, _020ab610 ; =0x00000b33 - ldrh r0, [r0] - umull r1, lr, r3, r6 - mov r7, #0 - mov r0, r0, asr #0x4 - mov r8, r0, lsl #0x1 - mov r2, r8, lsl #0x1 - mov r0, r5, lsl #0x1 - ldrsh sb, [ip, r0] - adds r5, r1, #0x800 - add r8, r8, #1 - umull r1, r0, sb, r6 - mov r5, r5, lsr #0xc - ldrsh r2, [ip, r2] - mov r8, r8, lsl #0x1 - ldrsh ip, [ip, r8] - mla lr, r3, r7, lr - mov r3, r3, asr #0x1f - mla lr, r3, r6, lr - adc r3, lr, #0 - orr r5, r5, r3, lsl #20 - mla r0, sb, r7, r0 - mov r3, sb, asr #0x1f - mla r0, r3, r6, r0 - smull r7, r6, r2, r5 - smull r3, r2, ip, r5 - adds r7, r7, #0x800 - adc r5, r6, #0 - mov r6, r7, lsr #0xc - orr r6, r6, r5, lsl #20 - adds r1, r1, #0x800 - adc r0, r0, #0 - mov r5, r1, lsr #0xc - orr r5, r5, r0, lsl #20 - adds r1, r3, #0x800 - adc r0, r2, #0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #20 - ldr r0, [r4] - add r0, r0, r6 - str r0, [r4] - ldr r0, [r4, #4] - add r0, r0, r5 - str r0, [r4, #4] - ldr r0, [r4, #8] - add r0, r0, r1 - str r0, [r4, #8] - b _020ab604 -_020ab5f4: - ldr r0, [r4, #4] - add r0, r0, #0x33 - add r0, r0, #0xb00 - str r0, [r4, #4] -_020ab604: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 - arm_func_end func_ov00_020ab4a4 -_020ab60c: .word data_02050f54 -_020ab610: .word 0x00000b33 - - .global func_ov00_020ab614 - arm_func_start func_ov00_020ab614 -func_ov00_020ab614: ; 0x020ab614 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase12GetGrabActorEv - movs ip, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, pc} - ldr r0, _020ab67c ; =data_027e0d0c - add r3, sp, #0 - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, ip - ldr r2, [r0] - cmp r4, #0 - moveq r4, r3 - ldr r2, [r2, #0x5c] - mov r1, r4 - blx r2 - mov r0, r5 - bl _ZN13LinkStateBase15GetGrabActorRefEv - mvn r1, #0 - str r1, [r0] - str r1, [r0, #4] - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 - arm_func_end func_ov00_020ab614 -_020ab67c: .word data_027e0d0c - - .global func_ov00_020ab680 - arm_func_start func_ov00_020ab680 -func_ov00_020ab680: ; 0x020ab680 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r1, [r0, #4] - ldr r0, _020ab6c0 ; =0x424f4d42 - cmp r1, r0 - ldrne r0, _020ab6c4 ; =0x4b4f4b4f - cmpne r1, r0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl func_ov00_020ab614 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 - arm_func_end func_ov00_020ab680 -_020ab6c0: .word 0x424f4d42 -_020ab6c4: .word 0x4b4f4b4f - - .global func_ov00_020ab6c8 - arm_func_start func_ov00_020ab6c8 -func_ov00_020ab6c8: ; 0x020ab6c8 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r2, [r0, #4] - ldr r1, _020ab758 ; =0x4b4f4b4f - cmp r2, r1 - bhi _020ab714 - bhs _020ab740 - ldr r1, _020ab75c ; =0x424f4d42 - cmp r2, r1 - bhi _020ab704 - beq _020ab740 - b _020ab748 -_020ab704: - ldr r1, _020ab760 ; =0x4452554d - cmp r2, r1 - beq _020ab740 - b _020ab748 -_020ab714: - ldr r1, _020ab764 ; =0x54415255 - cmp r2, r1 - bhi _020ab734 - bhs _020ab740 - ldr r1, _020ab768 ; =0x53544e45 - cmp r2, r1 - beq _020ab740 - b _020ab748 -_020ab734: - ldr r1, _020ab76c ; =0x54535542 - cmp r2, r1 - bne _020ab748 -_020ab740: - bl func_ov00_020c3180 - ldmia sp!, {r4, pc} -_020ab748: - mov r0, r4 - mov r1, #0 - bl func_ov00_020ab614 - ldmia sp!, {r4, pc} - .align 2, 0 - arm_func_end func_ov00_020ab6c8 -_020ab758: .word 0x4b4f4b4f -_020ab75c: .word 0x424f4d42 -_020ab760: .word 0x4452554d -_020ab764: .word 0x54415255 -_020ab768: .word 0x53544e45 -_020ab76c: .word 0x54535542 - - .global func_ov00_020ab770 - arm_func_start func_ov00_020ab770 -func_ov00_020ab770: ; 0x020ab770 - stmdb sp!, {r4, r5, r6, lr} - ldr r2, _020ab7b8 ; =data_027e0fb8 - mov r6, r0 - ldr r0, [r2] - mov r5, r1 - bl func_ov00_020aeffc - movs r4, r0 - beq _020ab7a8 - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl func_ov00_020ab7bc - cmp r0, #0 - bne _020ab7b0 -_020ab7a8: - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_020ab7b0: - ldr r0, [r4, #0x12c] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 - arm_func_end func_ov00_020ab770 -_020ab7b8: .word data_027e0fb8 - - .global func_ov00_020ab7bc - arm_func_start func_ov00_020ab7bc -func_ov00_020ab7bc: ; 0x020ab7bc - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x1c - ldr r3, [r2, #0x48] - mov r5, r1 - str r3, [r5] - ldr r1, [r2, #0x4c] - mov r4, r0 - str r1, [r5, #4] - ldr r0, [r2, #0x50] - str r0, [r5, #8] - ldr r0, [r2, #0x12c] - cmp r0, #2 - beq _020ab7fc - cmp r0, #3 - beq _020ab818 - b _020ab8c0 -_020ab7fc: - bl func_ov00_020a7b8c - ldr r2, [r0] - mov r1, #1 - ldr r2, [r2, #0x14] - blx r2 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, pc} -_020ab818: - add r1, sp, #0 - mov r0, r2 - bl func_ov00_020c2a0c - mov r0, r4 - bl _ZN13LinkStateBase12GetPlayerPosEv - add r2, sp, #0x10 - mov r1, r5 - bl func_01ff9bf8 - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x10] - add r2, r1, #0x66 - ldr r1, [sp, #0x18] - add r4, r2, #0x600 - bl func_01ffa0f4 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl func_0202bbbc - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _020ab8b4 -_020ab868: ; jump table - b _020ab878 ; case 0 - b _020ab888 ; case 1 - b _020ab898 ; case 2 - b _020ab8a8 ; case 3 -_020ab878: - ldr r0, [r5] - add r0, r0, r4 - str r0, [r5] - b _020ab8b4 -_020ab888: - ldr r0, [r5] - sub r0, r0, r4 - str r0, [r5] - b _020ab8b4 -_020ab898: - ldr r0, [r5, #8] - add r0, r0, r4 - str r0, [r5, #8] - b _020ab8b4 -_020ab8a8: - ldr r0, [r5, #8] - sub r0, r0, r4 - str r0, [r5, #8] -_020ab8b4: - add sp, sp, #0x1c - mov r0, #1 - ldmia sp!, {r4, r5, pc} -_020ab8c0: - mov r0, #1 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, pc} - arm_func_end func_ov00_020ab7bc - - .global func_ov00_020ab8cc - arm_func_start func_ov00_020ab8cc -func_ov00_020ab8cc: ; 0x020ab8cc - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - mov r0, r4 - add r2, r5, #0x18 - bl func_01ff9bf8 - add r0, r5, #0x18 - mov r2, r0 - mov r1, #0x1000 - bl func_0202da8c - mov r0, #5 - str r0, [r5, #4] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020ab8cc - - .global func_ov00_020ab908 - arm_func_start func_ov00_020ab908 -func_ov00_020ab908: ; 0x020ab908 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - mov r0, r4 - add r2, r5, #0x18 - bl func_01ff9bf8 - mov r0, #3 - str r0, [r5, #4] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020ab908 - - .global func_ov00_020ab934 - arm_func_start func_ov00_020ab934 -func_ov00_020ab934: ; 0x020ab934 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - mov r0, r4 - add r2, r5, #0x18 - bl func_01ff9bf8 - mov r2, #3 - mov r0, r5 - mov r1, #2 - str r2, [r5, #4] - bl _ZN13LinkStateBase15ChangeLinkStateEi - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020ab934 - - .global func_ov00_020ab97c - arm_func_start func_ov00_020ab97c -func_ov00_020ab97c: ; 0x020ab97c - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r1, r0 - mov r0, r4 - add r2, r5, #0x18 - bl func_01ff9bf8 - mov r0, #4 - str r0, [r5, #4] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020ab97c - - .global func_ov00_020ab9b8 - arm_func_start func_ov00_020ab9b8 -func_ov00_020ab9b8: ; 0x020ab9b8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x18 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl _ZN13LinkStateBase12GetGrabActorEv - movs r4, r0 - addeq sp, sp, #0x18 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r5, #0 - mov r5, #1 - beq _020aba70 - mov r0, r7 - bl _ZN13LinkStateBase12GetPlayerPosEv - add r3, sp, #0xc - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, r7 - bl _ZN13LinkStateBase12GetPlayerPosEv - add r2, sp, #0xc - add r1, r7, #0x18 - bl func_01ff9bc4 - ldr r1, [r4, #4] - ldr r0, _020abb64 ; =0x424b4559 - cmp r1, r0 - beq _020aba30 - ldr r0, _020abb68 ; =0x464f5243 - cmp r1, r0 - beq _020aba54 - b _020aba70 -_020aba30: - add r1, sp, #0xc - mov r0, r4 - bl func_ov17_0215dff0 - cmp r0, #0 - beq _020aba70 - mov r0, r7 - mov r5, #0 - bl func_ov00_020aa818 - b _020aba70 -_020aba54: - add r1, sp, #0xc - mov r0, r4 - bl func_ov17_0215e338 - cmp r0, #0 - beq _020aba70 - mov r0, r7 - bl func_ov00_020aa818 -_020aba70: - cmp r5, #0 - beq _020abb30 - mov r1, #0 - mov r0, r7 - str r1, [sp] - str r1, [sp, #4] - str r1, [sp, #8] - bl _ZN13LinkStateBase14GetPlayerAngleEv - ldrh r5, [r0] - ldr r2, _020abb6c ; =0x0000028f - mov r3, #0 - umull r1, r0, r6, r2 - mla r0, r6, r3, r0 - mov r3, r6, asr #0x1f - mov r5, r5, asr #0x4 - mov ip, r5, lsl #0x1 - mla r0, r3, r2, r0 - adds r1, r1, #0x800 - add r5, ip, #1 - ldr r6, _020abb70 ; =data_02050f54 - mov r3, ip, lsl #0x1 - mov r2, r5, lsl #0x1 - ldrsh r3, [r6, r3] - adc r0, r0, #0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #20 - smull r0, r5, r3, r1 - adds r3, r0, #0x800 - ldrsh r2, [r6, r2] - mov r3, r3, lsr #0xc - smull r1, r0, r2, r1 - adc r2, r5, #0 - adds r1, r1, #0x800 - orr r3, r3, r2, lsl #20 - ldr r5, [sp] - adc r0, r0, #0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #20 - ldr r2, [sp, #8] - add r3, r5, r3 - add r1, r2, r1 - str r1, [sp, #8] - mov r0, r4 - str r3, [sp] - ldr r2, [r0] - add r1, sp, #0 - ldr r2, [r2, #0x5c] - blx r2 -_020abb30: - mov r0, r7 - bl _ZN13LinkStateBase15GetGrabActorRefEv - mvn r1, #0 - str r1, [r0] - str r1, [r0, #4] - mov r0, r7 - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r2, r0 - ldr r0, _020abb74 ; =data_ov00_020eec9c - mov r1, #0xcc - bl func_ov00_020d7a84 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 - arm_func_end func_ov00_020ab9b8 -_020abb64: .word 0x424b4559 -_020abb68: .word 0x464f5243 -_020abb6c: .word 0x0000028f -_020abb70: .word data_02050f54 -_020abb74: .word data_ov00_020eec9c - - .global func_ov00_020abb78 - arm_func_start func_ov00_020abb78 -func_ov00_020abb78: ; 0x020abb78 - stmdb sp!, {r3, lr} - ldr r3, [r1] - mov r2, #6 - str r3, [r0, #0x10] - ldr r3, [r1, #4] - mov r1, #2 - str r3, [r0, #0x14] - bl _ZN13LinkStateBase18ChangeLinkSubStateEii - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end func_ov00_020abb78 - - .global func_ov00_020abba0 - arm_func_start func_ov00_020abba0 -func_ov00_020abba0: ; 0x020abba0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl func_ov00_020abc40 - cmp r0, #0 - beq _020abbc8 - mov r0, r5 - mov r1, r4 - bl func_ov00_020abb78 - ldmia sp!, {r3, r4, r5, pc} -_020abbc8: - ldr r0, [r4] - str r0, [r5, #0x10] - ldr r0, [r4, #4] - str r0, [r5, #0x14] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020abba0 - - .global func_ov00_020abbdc - arm_func_start func_ov00_020abbdc -func_ov00_020abbdc: ; 0x020abbdc - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl func_ov00_020abc40 - cmp r0, #0 - beq _020abc04 - mov r0, r5 - mov r1, r4 - bl func_ov00_020abb78 - ldmia sp!, {r3, r4, r5, pc} -_020abc04: - ldr r0, [r4] - str r0, [r5, #0x10] - ldr r0, [r4, #4] - str r0, [r5, #0x14] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020abbdc - - .global func_ov00_020abc18 - arm_func_start func_ov00_020abc18 -func_ov00_020abc18: ; 0x020abc18 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl func_ov00_020abc40 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl func_ov00_020abb78 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020abc18 - - .global func_ov00_020abc40 - arm_func_start func_ov00_020abc40 -func_ov00_020abc40: ; 0x020abc40 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN13LinkStateBase10GetStateIdEv - cmp r0, #2 - ldreq r0, [r4, #4] - cmpeq r0, #6 - beq _020abc70 - mov r0, r4 - bl _ZN13LinkStateBase10GetStateIdEv - cmp r0, #6 - movne r0, #1 - ldmneia sp!, {r4, pc} -_020abc70: - mov r0, #0 - ldmia sp!, {r4, pc} - arm_func_end func_ov00_020abc40 - - .global func_ov00_020abc78 - arm_func_start func_ov00_020abc78 -func_ov00_020abc78: ; 0x020abc78 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - mov r4, r1 - bl _ZN13LinkStateBase18func_ov00_020a8b80Ev - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r5 - bl _ZN13LinkStateBase12GetGrabActorEv - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - mov r0, r5 - bl _ZN13LinkStateBase10GetStateIdEv - cmp r0, #0 - beq _020abce0 - cmp r0, #1 - bne _020abcd8 - ldr r0, _020abd6c ; =data_027e0fb8 - mov r1, #0 - ldr r0, [r0] - strb r1, [r0, #0x79] - strb r1, [r0, #0x7b] - b _020abce0 -_020abcd8: - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_020abce0: - ldr r0, _020abd70 ; =data_027e0fe4 - mov r1, r4 - ldr r0, [r0] - bl func_ov00_020c3674 - mov r6, r0 - mov r0, r5 - bl _ZN13LinkStateBase15GetGrabActorRefEv - ldr r2, [r4] - add r1, r6, #0x48 - str r2, [r0] - ldr r2, [r4, #4] - str r2, [r0, #4] - mov r0, r5 - bl _ZN13LinkStateBase6LookAtEP5Vec3p - ldr r1, [r4] - mov r0, r5 - str r1, [r5, #0x10] - ldr r1, [r4, #4] - str r1, [r5, #0x14] - bl _ZN13LinkStateBase12GetPlayerPosEv - mov r2, r0 - ldr r0, _020abd74 ; =data_ov00_020eec9c - mov r1, #0xcb - bl func_ov00_020d7a84 - mov r0, r5 - bl _ZN13LinkStateBase12GetGrabActorEv - ldr r1, [r0] - ldr r1, [r1, #0x58] - blx r1 - mov r0, r5 - mov r1, #2 - mov r2, r1 - bl _ZN13LinkStateBase18ChangeLinkSubStateEii - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 - arm_func_end func_ov00_020abc78 -_020abd6c: .word data_027e0fb8 -_020abd70: .word data_027e0fe4 -_020abd74: .word data_ov00_020eec9c - - .rodata - .global data_ov00_020dc528 -data_ov00_020dc528: ; 0x020dc528 - .ascii "zdf_link_ice" - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020dc538 -data_ov00_020dc538: ; 0x020dc538 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020dc53c -data_ov00_020dc53c: ; 0x020dc53c - .ascii "zdf_link_ice" - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020dc54c -data_ov00_020dc54c: ; 0x020dc54c - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020dc550 -data_ov00_020dc550: ; 0x020dc550 - .byte 0xec, 0x01, 0x00, 0x00 - .global data_ov00_020dc554 -data_ov00_020dc554: ; 0x020dc554 - .byte 0x3c, 0x00, 0x00, 0x00 - .global data_ov00_020dc558 -data_ov00_020dc558: ; 0x020dc558 - .byte 0xae, 0x13, 0x00, 0x00 - .global data_ov00_020dc55c -data_ov00_020dc55c: ; 0x020dc55c - .byte 0x0f, 0x00, 0x00, 0x00 - .global data_ov00_020dc560 - .data .global data_ov00_020e56f0 data_ov00_020e56f0: ; 0x020e56f0 @@ -4440,282 +2387,3 @@ data_ov00_020e58e0: ; 0x020e58e0 .global data_ov00_020e58e4 data_ov00_020e58e4: ; 0x020e58e4 .word func_ov00_020a9eb4 - 1 - .global data_ov00_020e58e8 -data_ov00_020e58e8: ; 0x020e58e8 - .ascii "brg" - .byte 0x00 - .global data_ov00_020e58ec -data_ov00_020e58ec: ; 0x020e58ec - .ascii "fnl" - .byte 0x00 - .global data_ov00_020e58f0 -data_ov00_020e58f0: ; 0x020e58f0 - .ascii "pdl" - .byte 0x00 - .global data_ov00_020e58f4 -data_ov00_020e58f4: ; 0x020e58f4 - .ascii "dco" - .byte 0x00 - .global data_ov00_020e58f8 -data_ov00_020e58f8: ; 0x020e58f8 - .ascii "can" - .byte 0x00 - .global data_ov00_020e58fc -data_ov00_020e58fc: ; 0x020e58fc - .ascii "hul" - .byte 0x00 - .global data_ov00_020e5900 -data_ov00_020e5900: ; 0x020e5900 - .ascii "bow" - .byte 0x00 - .global data_ov00_020e5904 -data_ov00_020e5904: ; 0x020e5904 - .ascii "anc" - .byte 0x00 - .global data_ov00_020e5908 -data_ov00_020e5908: ; 0x020e5908 - .word data_ov00_020e5904 - .global data_ov00_020e590c -data_ov00_020e590c: ; 0x020e590c - .word data_ov00_020e5900 - .global data_ov00_020e5910 -data_ov00_020e5910: ; 0x020e5910 - .word data_ov00_020e58fc - .global data_ov00_020e5914 -data_ov00_020e5914: ; 0x020e5914 - .word data_ov00_020e58f8 - .global data_ov00_020e5918 -data_ov00_020e5918: ; 0x020e5918 - .word data_ov00_020e58f4 - .global data_ov00_020e591c -data_ov00_020e591c: ; 0x020e591c - .word data_ov00_020e58f0 - .global data_ov00_020e5920 -data_ov00_020e5920: ; 0x020e5920 - .word data_ov00_020e58ec - .global data_ov00_020e5924 -data_ov00_020e5924: ; 0x020e5924 - .word data_ov00_020e58e8 - .global data_ov00_020e5928 -data_ov00_020e5928: ; 0x020e5928 - .byte 0x02, 0x00, 0x00, 0x00 - .global data_ov00_020e592c -data_ov00_020e592c: ; 0x020e592c - .byte 0x1d, 0x00, 0x00, 0x00 - .global data_ov00_020e5930 -data_ov00_020e5930: ; 0x020e5930 - .byte 0x66, 0x16, 0x00, 0x00 - .global data_ov00_020e5934 -data_ov00_020e5934: ; 0x020e5934 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5938 -data_ov00_020e5938: ; 0x020e5938 - .byte 0x00, 0x50, 0x00, 0x00 - .global data_ov00_020e593c -data_ov00_020e593c: ; 0x020e593c - .byte 0x1e, 0x00, 0x00, 0x00 - .global data_ov00_020e5940 -data_ov00_020e5940: ; 0x020e5940 - .byte 0x99, 0x19, 0x00, 0x00 - .global data_ov00_020e5944 -data_ov00_020e5944: ; 0x020e5944 - .byte 0x00, 0x20, 0x00, 0x00 - .global data_ov00_020e5948 -data_ov00_020e5948: ; 0x020e5948 - .byte 0x00, 0xa0, 0x00, 0x00 - .global data_ov00_020e594c -data_ov00_020e594c: ; 0x020e594c - .byte 0x1e, 0x00 - .global data_ov00_020e594e -data_ov00_020e594e: ; 0x020e594e - .byte 0x00, 0x00 - .global data_ov00_020e5950 -data_ov00_020e5950: ; 0x020e5950 - .byte 0x00, 0xe8 - .global data_ov00_020e5952 -data_ov00_020e5952: ; 0x020e5952 - .byte 0xff, 0xff - .global data_ov00_020e5954 -data_ov00_020e5954: ; 0x020e5954 - .byte 0x00, 0xa0 - .global data_ov00_020e5956 -data_ov00_020e5956: ; 0x020e5956 - .byte 0x00, 0x00 - .global data_ov00_020e5958 -data_ov00_020e5958: ; 0x020e5958 - .byte 0x00, 0x00 - .global data_ov00_020e595a -data_ov00_020e595a: ; 0x020e595a - .byte 0x00, 0x00 - .global data_ov00_020e595c -data_ov00_020e595c: ; 0x020e595c - .byte 0x22, 0x00, 0x00, 0x00 - .global data_ov00_020e5960 -data_ov00_020e5960: ; 0x020e5960 - .byte 0x00, 0x10, 0x00, 0x00 - .global data_ov00_020e5964 -data_ov00_020e5964: ; 0x020e5964 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5968 -data_ov00_020e5968: ; 0x020e5968 - .byte 0x00, 0xf0, 0x00, 0x00 - .global data_ov00_020e596c -data_ov00_020e596c: ; 0x020e596c - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5970 -data_ov00_020e5970: ; 0x020e5970 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5974 -data_ov00_020e5974: ; 0x020e5974 - .word func_ov00_020aa32c - .global data_ov00_020e5978 -data_ov00_020e5978: ; 0x020e5978 - .word func_ov04_0210ab88 ; data_ov07_0210ab88 - .global data_ov00_020e597c -data_ov00_020e597c: ; 0x020e597c - .word func_ov04_0210ab9c ; data_ov07_0210ab9c - .global data_ov00_020e5980 -data_ov00_020e5980: ; 0x020e5980 - .word func_ov00_020aa330 - 1 - .global data_ov00_020e5984 -data_ov00_020e5984: ; 0x020e5984 - .word func_ov00_020aa35c - .global data_ov00_020e5988 -data_ov00_020e5988: ; 0x020e5988 - .word func_ov00_020aa534 - 1 - .global data_ov00_020e598c -data_ov00_020e598c: ; 0x020e598c - .word func_ov00_020aa7b0 - 1 - .global data_ov00_020e5990 -data_ov00_020e5990: ; 0x020e5990 - .word func_ov05_0210a648 ; data_ov07_0210a648 - .global data_ov00_020e5994 -data_ov00_020e5994: ; 0x020e5994 - .word func_ov00_020aabd8 - 1 - .global data_ov00_020e5998 -data_ov00_020e5998: ; 0x020e5998 - .word func_ov00_020ab3f8 - 1 - .global data_ov00_020e599c -data_ov00_020e599c: ; 0x020e599c - .word _ZN13LinkStateBase8vfunc_28Ev - .global data_ov00_020e59a0 -data_ov00_020e59a0: ; 0x020e59a0 - .word func_ov05_0210b3bc ; data_ov07_0210b3bc - .global data_ov00_020e59a4 -data_ov00_020e59a4: ; 0x020e59a4 - .word func_ov05_0210f708 - .global data_ov00_020e59a8 -data_ov00_020e59a8: ; 0x020e59a8 - .word func_ov00_020ab4a4 - 1 - .global data_ov00_020e59ac -data_ov00_020e59ac: ; 0x020e59ac - .word func_ov05_0210f70c - .global data_ov00_020e59b0 -data_ov00_020e59b0: ; 0x020e59b0 - .word func_ov05_0210f714 - .global data_ov00_020e59b4 -data_ov00_020e59b4: ; 0x020e59b4 - .word func_ov05_0210f71c - .global data_ov00_020e59b8 -data_ov00_020e59b8: ; 0x020e59b8 - .byte 0x8e, 0x9d, 0x82, 0xbf - .global data_ov00_020e59bc -data_ov00_020e59bc: ; 0x020e59bc - .byte 0x8f, 0xe3, 0x82, 0xb0 - .global data_ov00_020e59c0 -data_ov00_020e59c0: ; 0x020e59c0 - .byte 0x8d, 0xc4, 0x90, 0xb6 - .global data_ov00_020e59c4 -data_ov00_020e59c4: ; 0x020e59c4 - .byte 0x91, 0xac, 0x93, 0x78 - .global data_ov00_020e59c8 -data_ov00_020e59c8: ; 0x020e59c8 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e59cc -data_ov00_020e59cc: ; 0x020e59cc - .byte 0x8e, 0x9d, 0x82, 0xbf - .global data_ov00_020e59d0 -data_ov00_020e59d0: ; 0x020e59d0 - .byte 0x8f, 0xe3, 0x82, 0xb0 - .global data_ov00_020e59d4 -data_ov00_020e59d4: ; 0x020e59d4 - .byte 0x8a, 0x4a, 0x8e, 0x6e - .global data_ov00_020e59d8 -data_ov00_020e59d8: ; 0x020e59d8 - .byte 0x83, 0x74, 0x83, 0x8c - .global data_ov00_020e59dc -data_ov00_020e59dc: ; 0x020e59dc - .byte 0x81, 0x5b, 0x83, 0x80 - .global data_ov00_020e59e0 -data_ov00_020e59e0: ; 0x020e59e0 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e59e4 -data_ov00_020e59e4: ; 0x020e59e4 - .byte 0x8e, 0x9d, 0x82, 0xbf - .global data_ov00_020e59e8 -data_ov00_020e59e8: ; 0x020e59e8 - .byte 0x8f, 0xe3, 0x82, 0xb0 - .global data_ov00_020e59ec -data_ov00_020e59ec: ; 0x020e59ec - .byte 0x8f, 0x49, 0x97, 0xb9 - .global data_ov00_020e59f0 -data_ov00_020e59f0: ; 0x020e59f0 - .byte 0x83, 0x74, 0x83, 0x8c - .global data_ov00_020e59f4 -data_ov00_020e59f4: ; 0x020e59f4 - .byte 0x81, 0x5b, 0x83, 0x80 - .global data_ov00_020e59f8 -data_ov00_020e59f8: ; 0x020e59f8 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e59fc -data_ov00_020e59fc: ; 0x020e59fc - .byte 0x93, 0x8a, 0x82, 0xb0 - .global data_ov00_020e5a00 -data_ov00_020e5a00: ; 0x020e5a00 - .byte 0x8d, 0xc4, 0x90, 0xb6 - .global data_ov00_020e5a04 -data_ov00_020e5a04: ; 0x020e5a04 - .byte 0x91, 0xac, 0x93, 0x78 - .global data_ov00_020e5a08 -data_ov00_020e5a08: ; 0x020e5a08 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5a0c -data_ov00_020e5a0c: ; 0x020e5a0c - .byte 0x93, 0x8a, 0x82, 0xb0 - .global data_ov00_020e5a10 -data_ov00_020e5a10: ; 0x020e5a10 - .byte 0x8a, 0x4a, 0x8e, 0x6e - .global data_ov00_020e5a14 -data_ov00_020e5a14: ; 0x020e5a14 - .byte 0x83, 0x74, 0x83, 0x8c - .global data_ov00_020e5a18 -data_ov00_020e5a18: ; 0x020e5a18 - .byte 0x81, 0x5b, 0x83, 0x80 - .global data_ov00_020e5a1c -data_ov00_020e5a1c: ; 0x020e5a1c - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5a20 -data_ov00_020e5a20: ; 0x020e5a20 - .byte 0x93, 0x8a, 0x82, 0xb0 - .global data_ov00_020e5a24 -data_ov00_020e5a24: ; 0x020e5a24 - .byte 0x8f, 0x49, 0x97, 0xb9 - .global data_ov00_020e5a28 -data_ov00_020e5a28: ; 0x020e5a28 - .byte 0x83, 0x74, 0x83, 0x8c - .global data_ov00_020e5a2c -data_ov00_020e5a2c: ; 0x020e5a2c - .byte 0x81, 0x5b, 0x83, 0x80 - .global data_ov00_020e5a30 -data_ov00_020e5a30: ; 0x020e5a30 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5a34 -data_ov00_020e5a34: ; 0x020e5a34 - .byte 0x92, 0xe2, 0x8e, 0x7e - .global data_ov00_020e5a38 -data_ov00_020e5a38: ; 0x020e5a38 - .byte 0x8e, 0x9e, 0x8a, 0xd4 - .global data_ov00_020e5a3c -data_ov00_020e5a3c: ; 0x020e5a3c - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov00_020e5a40 diff --git a/asm/ov00/ov00_020ae7a4.s b/asm/ov00/ov00_020ae7a4.s index 1f88338d..0a5623c8 100644 --- a/asm/ov00/ov00_020ae7a4.s +++ b/asm/ov00/ov00_020ae7a4.s @@ -4645,7 +4645,7 @@ _020b2338: bl _ZN13LinkStateBase18func_ov00_020a82acEv bl func_020385b8 mov r1, #0 - bl func_ov00_020ab680 + bl _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p ldr r0, [r4, #0x64] cmp r0, #0xf addls pc, pc, r0, lsl #2 @@ -4898,7 +4898,7 @@ _020b2658: _020b2664: bl func_020385b8 mov r1, #0 - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p ldr r0, _020b2b94 ; =data_027e0d38 add r1, sp, #0 ldr r0, [r0] @@ -4912,7 +4912,7 @@ _020b2688: beq _020b26a4 bl func_020385b8 mov r1, #0 - bl func_ov00_020ab680 + bl _ZN13LinkStateGrab15SetBombVelocityEP5Vec3p _020b26a4: ldr r0, _020b2b94 ; =data_027e0d38 add r1, sp, #0 @@ -15210,7 +15210,7 @@ _020bac10: bl func_ov00_020c1908 bl func_020385b8 add r1, r6, #8 - bl func_ov00_020abb78 + bl _ZN13LinkStateGrab4GrabEP8ActorRef mov r0, r6 strb r5, [r6, #0x278] ldr r2, [r0] @@ -17018,7 +17018,7 @@ _020bc028: bne _020bc060 bl func_020385b8 add r1, sp, #0 - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p _020bc060: ldr r0, _020bc084 ; =data_027e0fb8 ldr r0, [r0] @@ -17118,7 +17118,7 @@ _020bc114: bl func_ov00_020bb544 bl func_020385b8 add r1, sp, #0xc - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p ldr r0, _020bc1c4 ; =data_027e0fb8 ldr r0, [r0] bl func_ov00_020af050 @@ -17139,7 +17139,7 @@ func_ov00_020bc1c8: ; 0x020bc1c8 mov r6, r1 mov r5, r2 mov r4, r3 - bl func_ov00_020ab3e8 + bl _ZN13LinkStateGrab13GetLinkState4Ev mov r1, r6 mov r2, r5 mov r3, r4 @@ -17160,7 +17160,7 @@ _020bc20c: .word data_027e0fac arm_func_start func_ov00_020bc210 func_ov00_020bc210: ; 0x020bc210 stmdb sp!, {r3, lr} - bl func_ov00_020ab3e8 + bl _ZN13LinkStateGrab13GetLinkState4Ev mov r1, #1 strb r1, [r0, #0x28] mov r0, r1 @@ -17638,7 +17638,7 @@ func_ov00_020bc7e0: ; 0x020bc7e0 mov r4, r1 bl func_020385b8 mov r1, r4 - bl func_ov00_020abc78 + bl _ZN13LinkStateGrab18func_ov00_020abc78EP8ActorRef ldmia sp!, {r4, pc} arm_func_end func_ov00_020bc7e0 @@ -17647,7 +17647,7 @@ func_ov00_020bc7e0: ; 0x020bc7e0 func_ov00_020bc7f8: ; 0x020bc7f8 stmdb sp!, {r3, lr} bl func_020385b8 - bl func_ov00_020aa338 + bl _ZN13LinkStateGrab20CreateDebugHierarchyEv ldmia sp!, {r3, pc} arm_func_end func_ov00_020bc7f8 @@ -18194,7 +18194,7 @@ func_ov00_020bce48: ; 0x020bce48 cmp r1, r0 beq _020bce9c bl func_020385b8 - bl func_ov00_020ab6c8 + bl _ZN13LinkStateGrab18func_ov00_020ab6c8Ev _020bce9c: bl func_ov00_020a914c mov r1, r4 @@ -18341,7 +18341,7 @@ func_ov00_020bd030: ; 0x020bd030 mov r5, r0 mov r4, r1 bl func_020385b8 - bl func_ov00_020ab6c8 + bl _ZN13LinkStateGrab18func_ov00_020ab6c8Ev bl func_ov00_020a914c mov r2, r4 ldr r1, _020bd06c ; =data_ov00_020e62a8 @@ -18657,7 +18657,7 @@ _020bd408: mov r0, #0 ldmneia sp!, {r3, r4, r5, r6, r7, pc} strb r0, [sp, #4] - bl func_ov00_020ab3e8 + bl _ZN13LinkStateGrab13GetLinkState4Ev add ip, sp, #4 mov r1, r6 mov r2, r5 @@ -18684,7 +18684,7 @@ _020bd484: ldrb r0, [sp, #4] cmp r0, #0 beq _020bd4b8 - bl func_ov00_020ab3e8 + bl _ZN13LinkStateGrab13GetLinkState4Ev ldr r2, [r0] mov r1, #0 ldr r2, [r2, #0x20] @@ -18697,7 +18697,7 @@ _020bd484: _020bd4b8: bl func_020385b8 ldr r1, _020bd4d4 ; =data_027e0fa0 - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p mov r0, #1 add sp, sp, #8 ldmia sp!, {r3, r4, r5, r6, r7, pc} @@ -45392,7 +45392,7 @@ _020d1f74: beq _020d1ff8 bl func_020385b8 mov r1, r7 - bl func_ov00_020abc18 + bl _ZN13LinkStateGrab18func_ov00_020abc18EP8ActorRef b _020d1ff8 _020d1fd8: ldrb r4, [r8, #1] @@ -45699,7 +45699,7 @@ _020d2400: bl func_020385b8 add r1, r7, #0x20 add r1, r1, r4, lsl #3 - bl func_ov00_020abbdc + bl _ZN13LinkStateGrab18func_ov00_020abbdcEP8ActorRef add sp, sp, #8 mov r0, #2 ldmia sp!, {r3, r4, r5, r6, r7, pc} @@ -46080,7 +46080,7 @@ _020d2934: blt _020d2904 bl func_020385b8 mov r1, r6 - bl func_ov00_020abba0 + bl _ZN13LinkStateGrab18func_ov00_020abba0EP8ActorRef ldrb r0, [r8, #0x54] cmp r0, #0 beq _020d29c0 diff --git a/asm/ov04.s b/asm/ov04.s index 803e3f5d..b7be290c 100644 --- a/asm/ov04.s +++ b/asm/ov04.s @@ -20593,7 +20593,7 @@ func_ov04_0210ab44: ; 0x0210ab44 push {r4, lr} add r4, r0, #0 bl func_ov04_0210add4 - ldr r0, _0210ab84 ; =data_ov00_020e5974 + ldr r0, _0210ab84 ; =_ZTV13LinkStateGrab str r0, [r4] mov r0, #0 str r0, [r4, #0xc] @@ -20622,7 +20622,7 @@ func_ov04_0210ab44: ; 0x0210ab44 pop {r4, pc} .align 2, 0 thumb_func_end func_ov04_0210ab44 -_0210ab84: .word data_ov00_020e5974 +_0210ab84: .word _ZTV13LinkStateGrab .global func_ov04_0210ab88 thumb_func_start func_ov04_0210ab88 diff --git a/asm/ov05.s b/asm/ov05.s index 9abaee59..9cfd5bc1 100644 --- a/asm/ov05.s +++ b/asm/ov05.s @@ -9567,7 +9567,7 @@ func_ov05_021089f4: ; 0x021089f4 sub sp, sp, #0xc mov r4, r0 bl func_020385b8 - bl func_ov00_020ab6c8 + bl _ZN13LinkStateGrab18func_ov00_020ab6c8Ev mov r0, r4 bl _ZN13LinkStateBase18func_ov00_020a82acEv ldr r0, _02108ce0 ; =data_027e0fb8 @@ -11770,7 +11770,7 @@ _0210a798: moveq r2, #1 movne r2, #0 mov r0, r4 - bl func_ov00_020ab9b8 + bl _ZN13LinkStateGrab18func_ov00_020ab9b8Ejb ldmia sp!, {r4, pc} arm_func_end func_ov05_0210a774 @@ -12134,7 +12134,7 @@ _0210ac7c: add r1, sp, #0x18 bl _ZN13LinkStateBase18func_ov00_020a81fcEv mov r0, r6 - bl func_ov00_020aa818 + bl _ZN13LinkStateGrab18func_ov00_020aa818Ev add sp, sp, #0x24 ldmia sp!, {r4, r5, r6, r7, pc} _0210ad00: @@ -12503,7 +12503,7 @@ _0210b244: _0210b264: mov r0, r5 mov r1, r4 - bl func_ov00_020aa844 + bl _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor add r0, r5, #0x24 bl func_0203516c add sp, sp, #0x100 @@ -12594,7 +12594,7 @@ _0210b394: _0210b3a0: mov r0, r5 mov r1, r4 - bl func_ov00_020aa844 + bl _ZN13LinkStateGrab18func_ov00_020aa844EP5Actor ldmia sp!, {r3, r4, r5, pc} .align 2, 0 arm_func_end func_ov05_0210b2a4 @@ -12901,7 +12901,7 @@ _0210b7b0: bl func_ov00_020af044 bl func_020385b8 add r1, r5, #0x24 - bl func_ov00_020ab97c + bl _ZN13LinkStateGrab18func_ov00_020ab97cEP5Vec3p mov r0, r5 mov r1, #2 bl _ZN13LinkStateBase15ChangeLinkStateEi @@ -13486,7 +13486,7 @@ func_ov05_0210bf50: ; 0x0210bf50 mov r5, r0 bl func_020385b8 add r1, sp, #8 - bl func_ov00_020ab770 + bl _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p cmp r0, #0 cmpeq r5, #0 movne r5, #1 @@ -14035,7 +14035,7 @@ _0210c7a8: bl func_ov00_020af044 bl func_020385b8 add r1, r5, #0x18 - bl func_ov00_020ab8cc + bl _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p add sp, sp, #0x78 mov r0, #1 ldmia sp!, {r3, r4, r5, r6, r7, pc} @@ -19632,7 +19632,7 @@ func_ov05_021113dc: ; 0x021113dc mov r7, r0 bl func_020385b8 add r1, sp, #0x4c - bl func_ov00_020ab770 + bl _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p movs r8, r0 cmpeq r7, #0 moveq sb, #0 @@ -19991,7 +19991,7 @@ _02111944: bl _ZN13LinkStateBase12GetPlayerVelEv mov r1, r0 mov r0, r6 - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p _02111960: mov r0, r5 bl _ZN13LinkStateBase12GetGrabActorEv diff --git a/asm/ov12.s b/asm/ov12.s index 76c33d5d..50248f12 100644 --- a/asm/ov12.s +++ b/asm/ov12.s @@ -9472,7 +9472,7 @@ func_ov12_0211a7d0: ; 0x0211a7d0 bl func_ov00_020bcdb8 bl func_020385b8 mov r1, #0 - bl func_ov00_020ab614 + bl _ZN13LinkStateGrab20SetGrabActorVelocityEP5Vec3p bl func_ov12_0211a964 mov r2, #0 strh r2, [r0, #0x12] diff --git a/asm/ov18.s b/asm/ov18.s index 30776c76..438e61ba 100644 --- a/asm/ov18.s +++ b/asm/ov18.s @@ -12822,7 +12822,7 @@ func_ov18_02165948: ; 0x02165948 beq _02165980 bl func_020385b8 add r1, r4, #0x48 - bl func_ov00_020ab934 + bl _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p _02165980: add r0, r4, #0x1d8 mov r1, #2 diff --git a/asm/ov23.s b/asm/ov23.s index c17f7ae6..2031b7f5 100644 --- a/asm/ov23.s +++ b/asm/ov23.s @@ -5178,7 +5178,7 @@ _021719b0: mov r5, r0 bl func_020385b8 add r1, sp, #0x28 - bl func_ov00_020ab770 + bl _ZN13LinkStateGrab18func_ov00_020ab770EP5Vec3p cmp r0, #0 cmpeq r5, #0 movne r8, #1 @@ -13024,7 +13024,7 @@ func_ov23_02178174: ; 0x02178174 mov r1, #0 bl func_ov00_020bb544 bl func_020385b8 - bl func_ov00_020ab6c8 + bl _ZN13LinkStateGrab18func_ov00_020ab6c8Ev mov r0, r5 bl func_ov00_020bc46c str r0, [sp] diff --git a/asm/ov41.s b/asm/ov41.s index fe359cd7..986e1db1 100644 --- a/asm/ov41.s +++ b/asm/ov41.s @@ -3579,7 +3579,7 @@ func_ov41_0218c204: ; 0x0218c204 str r0, [sp, #8] bl func_020385b8 add r1, sp, #0 - bl func_ov00_020ab934 + bl _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p mov r0, #1 strb r0, [r4, #0x52b] add sp, sp, #0x18 @@ -4074,7 +4074,7 @@ func_ov41_0218c834: ; 0x0218c834 str r0, [sp, #0x14] bl func_020385b8 add r1, sp, #0xc - bl func_ov00_020ab934 + bl _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p b _0218cbd0 _0218c9c4: cmp r4, #0 @@ -4180,7 +4180,7 @@ _0218ca80: str r0, [sp, #8] bl func_020385b8 add r1, sp, #0 - bl func_ov00_020ab934 + bl _ZN13LinkStateGrab18func_ov00_020ab934EP5Vec3p b _0218cbd0 _0218cb5c: cmp r4, #0 diff --git a/asm/ov42.s b/asm/ov42.s index b2c45c5b..5db161c5 100644 --- a/asm/ov42.s +++ b/asm/ov42.s @@ -347,7 +347,7 @@ _02189918: mov r0, #0 strb r0, [r7, #0x64] bl func_020385b8 - bl func_ov00_020ab6c8 + bl _ZN13LinkStateGrab18func_ov00_020ab6c8Ev mov r0, r4 add r1, sp, #0x3c mov r2, #0x800 diff --git a/asm/ov55.s b/asm/ov55.s index 0a813cc5..6b8618c2 100644 --- a/asm/ov55.s +++ b/asm/ov55.s @@ -313,7 +313,7 @@ _0219907c: bl func_01ff9bc4 bl func_020385b8 add r1, r4, #0x38 - bl func_ov00_020ab8cc + bl _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p b _02199128 _021990dc: ldr r0, _021991a4 ; =data_027e0fb8 @@ -334,7 +334,7 @@ _021990dc: bl func_01ff9bc4 bl func_020385b8 add r1, r4, #0x38 - bl func_ov00_020ab908 + bl _ZN13LinkStateGrab14SetThrowOffsetEP5Vec3p _02199128: cmp r5, #0 beq _02199178 diff --git a/asm/ov58.s b/asm/ov58.s index 405717bb..4349bfef 100644 --- a/asm/ov58.s +++ b/asm/ov58.s @@ -2541,7 +2541,7 @@ func_ov58_0219a47c: ; 0x0219a47c bl func_ov00_02083c7c bl func_020385b8 add r1, sp, #4 - bl func_ov00_020ab8cc + bl _ZN13LinkStateGrab24SetNormalizedThrowOffsetEP5Vec3p mov r0, r5 add r1, sp, #4 bl _ZN13LinkStateBase6LookAtEP5Vec3p diff --git a/include/Player/LinkStateGrab.hpp b/include/Player/LinkStateGrab.hpp index cb95c518..2dadb7bd 100644 --- a/include/Player/LinkStateGrab.hpp +++ b/include/Player/LinkStateGrab.hpp @@ -6,6 +6,7 @@ #include "lib/math.h" #include "Player/LinkStateBase.hpp" +#include "Player/LinkState4.hpp" #include "Actor/ActorManager.hpp" #include "Actor/Actor.hpp" @@ -32,4 +33,25 @@ public: /* 2c */ virtual void vfunc_2c(u16 *param1) override; /* 34 */ virtual bool vfunc_34(Vec3p *param1) override; /* 44 */ + + s32 GetGrabActorId(); + bool func_ov00_020aa818(); + void func_ov00_020aa844(Actor *param1); + LinkState4* GetLinkState4(); + void SetGrabActorVelocity(Vec3p *velocity); + void SetBombVelocity(Vec3p *velocity); + void func_ov00_020ab6c8(); + unk32 func_ov00_020ab770(Vec3p *param1); + unk32 func_ov00_020ab7bc(Vec3p *param1, Actor *actor); + void SetNormalizedThrowOffset(Vec3p *target); + void SetThrowOffset(Vec3p *target); + void func_ov00_020ab934(Vec3p *target); + void func_ov00_020ab97c(Vec3p *target); + void func_ov00_020ab9b8(u32 param1, bool param2); + void Grab(ActorRef *ref); + void func_ov00_020abba0(ActorRef *ref); + void func_ov00_020abbdc(ActorRef *ref); // duplicate of func_ov00_020abba0 + void func_ov00_020abc18(ActorRef *ref); + bool func_ov00_020abc40(); + bool func_ov00_020abc78(ActorRef *ref); }; diff --git a/src/00_Core/Player/LinkStateGrab.cpp b/src/00_Core/Player/LinkStateGrab.cpp new file mode 100644 index 00000000..4a3eecd4 --- /dev/null +++ b/src/00_Core/Player/LinkStateGrab.cpp @@ -0,0 +1,34 @@ +#include "Player/LinkStateGrab.hpp" + +#ifdef STUBS + +void LinkStateGrab::vfunc_00() {} +LinkStateId LinkStateGrab::GetId() {} +void LinkStateGrab::CreateDebugHierarchy() {} +s32 LinkStateGrab::GetGrabActorId() {} +void LinkStateGrab::OnStateEnter() {} +void LinkStateGrab::OnStateLeave(s32 param1) {} +bool LinkStateGrab::func_ov00_020aa818() {} +void LinkStateGrab::func_ov00_020aa844(Actor *param1) {} +bool LinkStateGrab::vfunc_20(s32 param1) {} +LinkState4* LinkStateGrab::GetLinkState4() {} +bool LinkStateGrab::vfunc_24(s32 param1) {} +bool LinkStateGrab::vfunc_34(Vec3p *param1) {} +void LinkStateGrab::SetGrabActorVelocity(Vec3p *velocity) {} +void LinkStateGrab::SetBombVelocity(Vec3p *velocity) {} +void LinkStateGrab::func_ov00_020ab6c8() {} +unk32 LinkStateGrab::func_ov00_020ab770(Vec3p *param1) {} +unk32 LinkStateGrab::func_ov00_020ab7bc(Vec3p *param1, Actor *actor) {} +void LinkStateGrab::SetNormalizedThrowOffset(Vec3p *target) {} +void LinkStateGrab::SetThrowOffset(Vec3p *target) {} +void LinkStateGrab::func_ov00_020ab934(Vec3p *target) {} +void LinkStateGrab::func_ov00_020ab97c(Vec3p *target) {} +void LinkStateGrab::func_ov00_020ab9b8(u32 param1, bool param2) {} +void LinkStateGrab::Grab(ActorRef *ref) {} +void LinkStateGrab::func_ov00_020abba0(ActorRef *ref) {} +void LinkStateGrab::func_ov00_020abbdc(ActorRef *ref) {} +void LinkStateGrab::func_ov00_020abc18(ActorRef *ref) {} +bool LinkStateGrab::func_ov00_020abc40() {} +bool LinkStateGrab::func_ov00_020abc78(ActorRef *ref) {} + +#endif diff --git a/tools/lcf.py b/tools/lcf.py index 355a9312..b2fea899 100644 --- a/tools/lcf.py +++ b/tools/lcf.py @@ -29,6 +29,8 @@ ov00 = Overlay(name='ov00', after='ARM9', objects=[ 'asm/ov00/ov00_0207af9c.s', 'asm/ov00/Player/LinkStateBase.s', 'asm/ov00/ov00_020a8e04.s', + 'src/00_Core/Player/LinkStateGrab.cpp', + 'asm/ov00/Player/LinkStateGrab.s', 'src/00_Core/Player/LinkStateItem.cpp', 'asm/ov00/Player/LinkStateItem.s', 'src/00_Core/Player/LinkStateDamage.cpp',