From be02098914d37fda7796a39d0c8332c2ab88c235 Mon Sep 17 00:00:00 2001 From: enzofc708 <47937189+enzofc708@users.noreply.github.com> Date: Tue, 12 Aug 2025 10:24:54 -0300 Subject: [PATCH] Decomp LinkStateDamage (#133) * match first functions * add more functions * match more functions * match last function * fix EUR relocs file * match some data * fix PR comments * match vfunc_24 * fixed most of .data * match symbol names --------- Co-authored-by: Yanis002 <35189056+Yanis002@users.noreply.github.com> --- config/eur/arm9/overlays/ov000/relocs.txt | 14 +- config/eur/arm9/overlays/ov000/symbols.txt | 71 +++---- config/eur/arm9/overlays/ov004/relocs.txt | 6 +- config/usa/arm9/overlays/ov000/relocs.txt | 14 +- config/usa/arm9/overlays/ov000/symbols.txt | 71 +++---- config/usa/arm9/overlays/ov004/relocs.txt | 6 +- include/Player/LinkStateBase.hpp | 3 +- include/Player/LinkStateDamage.hpp | 27 ++- include/Player/PlayerControlData.hpp | 2 +- src/00_Core/Player/LinkStateBase.cpp | 2 +- src/00_Core/Player/LinkStateDamage.cpp | 223 +++++++++++++++++++-- 11 files changed, 316 insertions(+), 123 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index cfd76b1a..3268527c 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -5221,21 +5221,21 @@ from:0x020ac16a kind:thumb_call_arm to:0x020a8dec module:overlay(0) from:0x020ac170 kind:thumb_call_arm to:0x020a8df8 module:overlay(0) from:0x020ac178 kind:load to:0x020e5aac module:overlay(0) from:0x020ac17c kind:load to:0x020e5bac module:overlay(0) -from:0x020ac184 kind:load to:0x020e5af4 module:overlay(0) -from:0x020ac188 kind:load to:0x020e5af8 module:overlay(0) +from:0x020ac184 kind:load to:0x020e5af0 add:0x4 module:overlay(0) +from:0x020ac188 kind:load to:0x020e5af0 add:0x8 module:overlay(0) from:0x020ac18c kind:load to:0x020e5bc0 module:overlay(0) -from:0x020ac190 kind:load to:0x020e5afc module:overlay(0) +from:0x020ac190 kind:load to:0x020e5af0 add:0xc module:overlay(0) from:0x020ac194 kind:load to:0x020e5bd8 module:overlay(0) from:0x020ac198 kind:load to:0x020e5bf0 module:overlay(0) -from:0x020ac19c kind:load to:0x020e5b04 module:overlay(0) -from:0x020ac1a0 kind:load to:0x020e5b08 module:overlay(0) +from:0x020ac19c kind:load to:0x020e5b00 add:0x4 module:overlay(0) +from:0x020ac1a0 kind:load to:0x020e5b00 add:0x8 module:overlay(0) from:0x020ac1a4 kind:load to:0x020e5c04 module:overlay(0) -from:0x020ac1a8 kind:load to:0x020e5b0c module:overlay(0) +from:0x020ac1a8 kind:load to:0x020e5b00 add:0xc module:overlay(0) from:0x020ac1ac kind:load to:0x020e5c1c module:overlay(0) from:0x020ac1b0 kind:load to:0x020e5c34 module:overlay(0) from:0x020ac1b4 kind:load to:0x020e5aec module:overlay(0) from:0x020ac1b8 kind:load to:0x020e5c44 module:overlay(0) -from:0x020ac1bc kind:load to:0x020e5ae0 module:overlay(0) +from:0x020ac1bc kind:load to:0x020e5adc add:0x4 module:overlay(0) from:0x020ac1d4 kind:arm_call to:0x020a8d40 module:overlay(0) from:0x020ac1e0 kind:arm_call to:0x020a81dc module:overlay(0) from:0x020ac1f0 kind:arm_call to:0x020a81dc module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 0f389d0e..3227b3c6 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2087,11 +2087,11 @@ _ZN15LinkStateDamage20CreateDebugHierarchyEv kind:function(thumb,size=0x218) add _ZN15LinkStateDamage12OnStateEnterEv kind:function(arm,size=0x630) addr:0x020ac1c0 _ZN15LinkStateDamage12OnStateLeaveEi kind:function(arm,size=0x1f4) addr:0x020ac7f0 _ZN15LinkStateDamage18func_ov00_020ac9e4Ei kind:function(arm,size=0x6c) addr:0x020ac9e4 -_ZN15LinkStateDamage18func_ov00_020aca50Ev kind:function(arm,size=0x44) addr:0x020aca50 -_ZN15LinkStateDamage18func_ov00_020aca94Ev kind:function(arm,size=0x68) addr:0x020aca94 +_Z11RespawnLinkP15LinkStateDamage kind:function(arm,size=0x44) addr:0x020aca50 +_ZN15LinkStateDamage21SetLinkFrozenMaterialEv kind:function(arm,size=0x68) addr:0x020aca94 _ZN15LinkStateDamage8vfunc_30Ei kind:function(arm,size=0x70) addr:0x020acafc _ZN15LinkStateDamage18func_ov00_020acb6cEP5Vec3pi kind:function(arm,size=0x324) addr:0x020acb6c -_ZN15LinkStateDamage18func_ov00_020ace90EP5Vec3pi kind:function(arm,size=0x68) addr:0x020ace90 +_ZN15LinkStateDamage9KnockbackEP5Vec3pi kind:function(arm,size=0x68) addr:0x020ace90 _ZN15LinkStateDamage8vfunc_24Ei kind:function(arm,size=0x30) addr:0x020acef8 _ZN15LinkStateDamage8vfunc_20Ei kind:function(arm,size=0xc0) addr:0x020acf28 _ZN15LinkStateDamage18func_ov00_020acfe8Eb kind:function(arm,size=0x30) addr:0x020acfe8 @@ -3718,7 +3718,7 @@ data_ov000_020dc550 kind:data(any) addr:0x020dc550 data_ov000_020dc554 kind:data(any) addr:0x020dc554 data_ov000_020dc558 kind:data(any) addr:0x020dc558 data_ov000_020dc55c kind:data(any) addr:0x020dc55c -data_ov000_020dc560 kind:data(any) addr:0x020dc560 +@1244 kind:data(any) addr:0x020dc560 data_ov000_020dc574 kind:data(any) addr:0x020dc574 data_ov000_020dc674 kind:data(any) addr:0x020dc674 sQuiverSizes kind:data(any) addr:0x020dc6c4 local @@ -4829,41 +4829,34 @@ data_ov000_020e5a0c kind:data(any) addr:0x020e5a0c data_ov000_020e5a20 kind:data(any) addr:0x020e5a20 data_ov000_020e5a34 kind:data(any) addr:0x020e5a34 _ZTV13LinkStateItem kind:data(any) addr:0x020e5a40 -data_ov000_020e5a8c kind:data(any) addr:0x020e5a8c -data_ov000_020e5a90 kind:data(any) addr:0x020e5a90 -data_ov000_020e5a94 kind:data(any) addr:0x020e5a94 -data_ov000_020e5a98 kind:data(any) addr:0x020e5a98 -data_ov000_020e5a9c kind:data(any) addr:0x020e5a9c -data_ov000_020e5aa0 kind:data(any) addr:0x020e5aa0 -data_ov000_020e5aa4 kind:data(any) addr:0x020e5aa4 -data_ov000_020e5aa8 kind:data(any) addr:0x020e5aa8 -data_ov000_020e5aac kind:data(any) addr:0x020e5aac -data_ov000_020e5acc kind:data(any) addr:0x020e5acc -data_ov000_020e5adc kind:data(any) addr:0x020e5adc -data_ov000_020e5ae0 kind:data(any) addr:0x020e5ae0 -data_ov000_020e5aec kind:data(any) addr:0x020e5aec -data_ov000_020e5af0 kind:data(any) addr:0x020e5af0 -data_ov000_020e5af4 kind:data(any) addr:0x020e5af4 -data_ov000_020e5af8 kind:data(any) addr:0x020e5af8 -data_ov000_020e5afc kind:data(any) addr:0x020e5afc -data_ov000_020e5b00 kind:data(any) addr:0x020e5b00 -data_ov000_020e5b04 kind:data(any) addr:0x020e5b04 -data_ov000_020e5b08 kind:data(any) addr:0x020e5b08 -data_ov000_020e5b0c kind:data(any) addr:0x020e5b0c -data_ov000_020e5b10 kind:data(any) addr:0x020e5b10 -data_ov000_020e5b20 kind:data(any) addr:0x020e5b20 -data_ov000_020e5b30 kind:data(any) addr:0x020e5b30 -data_ov000_020e5b40 kind:data(any) addr:0x020e5b40 -data_ov000_020e5b50 kind:data(any) addr:0x020e5b50 -_ZTV15LinkStateDamage kind:data(any) addr:0x020e5b68 -data_ov000_020e5bac kind:data(any) addr:0x020e5bac -data_ov000_020e5bc0 kind:data(any) addr:0x020e5bc0 -data_ov000_020e5bd8 kind:data(any) addr:0x020e5bd8 -data_ov000_020e5bf0 kind:data(any) addr:0x020e5bf0 -data_ov000_020e5c04 kind:data(any) addr:0x020e5c04 -data_ov000_020e5c1c kind:data(any) addr:0x020e5c1c -data_ov000_020e5c34 kind:data(any) addr:0x020e5c34 -data_ov000_020e5c44 kind:data(any) addr:0x020e5c44 +@1126 kind:data(any) addr:0x020e5a8c +@1125 kind:data(any) addr:0x020e5a90 +@1124 kind:data(any) addr:0x020e5a94 +@1123 kind:data(any) addr:0x020e5a98 +@1122 kind:data(any) addr:0x020e5a9c +@1121 kind:data(any) addr:0x020e5aa0 +@1120 kind:data(any) addr:0x020e5aa4 +@1119 kind:data(any) addr:0x020e5aa8 +gShipParts kind:data(any) addr:0x020e5aac +_ZN15LinkStateDamage19data_ov000_020e5accE kind:data(any) addr:0x020e5acc +_ZN15LinkStateDamage19data_ov000_020e5adcE kind:data(any) addr:0x020e5adc +_ZN15LinkStateDamage19data_ov000_020e5aecE kind:data(any) addr:0x020e5aec +_ZN15LinkStateDamage19data_ov000_020e5af0E kind:data(any) addr:0x020e5af0 +_ZN15LinkStateDamage19data_ov000_020e5b00E kind:data(any) addr:0x020e5b00 +_ZN15LinkStateDamage19data_ov000_020e5b10E kind:data(any) addr:0x020e5b10 +_ZN15LinkStateDamage19data_ov000_020e5b20E kind:data(any) addr:0x020e5b20 +_ZN15LinkStateDamage19data_ov000_020e5b30E kind:data(any) addr:0x020e5b30 +_ZN15LinkStateDamage19data_ov000_020e5b40E kind:data(any) addr:0x020e5b40 +_ZN15LinkStateDamage19data_ov000_020e5b50E kind:data(any) addr:0x020e5b50 +_ZTV15LinkStateDamage kind:data(any) addr:0x020e5b60 +@1178 kind:data(any) addr:0x020e5bac local +@1179 kind:data(any) addr:0x020e5bc0 local +@1180 kind:data(any) addr:0x020e5bd8 local +@1181 kind:data(any) addr:0x020e5bf0 local +@1182 kind:data(any) addr:0x020e5c04 local +@1183 kind:data(any) addr:0x020e5c1c local +@1184 kind:data(any) addr:0x020e5c34 local +@1185 kind:data(any) addr:0x020e5c44 local @1542 kind:data(any) addr:0x020e5c58 local @1541 kind:data(any) addr:0x020e5c5c local @1540 kind:data(any) addr:0x020e5c60 local diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index c61e5fee..f056478a 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -1709,7 +1709,7 @@ from:0x0210836e kind:thumb_call to:0x020bb3f4 module:overlay(0) from:0x02108386 kind:thumb_call_arm to:0x0202e9dc module:main from:0x02108394 kind:thumb_call to:0x020bb42c module:overlay(0) from:0x021083ac kind:thumb_call to:0x021083f4 module:overlay(4) -from:0x021083d0 kind:load to:0x020e5b68 module:overlay(0) +from:0x021083d0 kind:load to:0x020e5b60 add:8 module:overlay(0) from:0x021083d4 kind:load to:0x027e0d0c module:dtcm from:0x021083d8 kind:load to:0x020b7d74 module:overlay(0) from:0x021083dc kind:load to:0x021079d5 module:overlay(4) @@ -1728,7 +1728,7 @@ from:0x02108454 kind:thumb_call_arm to:0x020b7d74 module:overlay(0) from:0x0210845c kind:thumb_call to:0x020a95a4 module:overlay(0) from:0x0210846a kind:thumb_call_arm to:0x0204f754 module:main from:0x02108470 kind:thumb_call to:0x0210adf4 module:overlay(4) -from:0x02108478 kind:load to:0x020e5b68 module:overlay(0) +from:0x02108478 kind:load to:0x020e5b60 add:8 module:overlay(0) from:0x0210847c kind:load to:0x020b7d74 module:overlay(0) from:0x0210849e kind:thumb_call_arm to:0x020b7d74 module:overlay(0) from:0x021084ac kind:thumb_call_arm to:0x0204f754 module:main @@ -1737,7 +1737,7 @@ from:0x021084bc kind:thumb_call to:0x020a95a4 module:overlay(0) from:0x021084ca kind:thumb_call_arm to:0x0204f754 module:main from:0x021084d0 kind:thumb_call to:0x0210adf4 module:overlay(4) from:0x021084d6 kind:thumb_call_arm to:0x0202ea0c module:main -from:0x021084e0 kind:load to:0x020e5b68 module:overlay(0) +from:0x021084e0 kind:load to:0x020e5b60 add:8 module:overlay(0) from:0x021084e4 kind:load to:0x020b7d74 module:overlay(0) from:0x021084f2 kind:thumb_call_arm to:0x020a5e9c module:overlay(0) from:0x021084fc kind:thumb_call_arm to:0x02078b40 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index c771e6c0..29b56242 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -5221,21 +5221,21 @@ from:0x020ac10a kind:thumb_call_arm to:0x020a8d8c module:overlay(0) from:0x020ac110 kind:thumb_call_arm to:0x020a8d98 module:overlay(0) from:0x020ac118 kind:load to:0x020e5a4c module:overlay(0) from:0x020ac11c kind:load to:0x020e5b4c module:overlay(0) -from:0x020ac124 kind:load to:0x020e5a94 module:overlay(0) -from:0x020ac128 kind:load to:0x020e5a98 module:overlay(0) +from:0x020ac124 kind:load to:0x020e5a90 add:0x4 module:overlay(0) +from:0x020ac128 kind:load to:0x020e5a90 add:0x8 module:overlay(0) from:0x020ac12c kind:load to:0x020e5b60 module:overlay(0) -from:0x020ac130 kind:load to:0x020e5a9c module:overlay(0) +from:0x020ac130 kind:load to:0x020e5a90 add:0xc module:overlay(0) from:0x020ac134 kind:load to:0x020e5b78 module:overlay(0) from:0x020ac138 kind:load to:0x020e5b90 module:overlay(0) -from:0x020ac13c kind:load to:0x020e5aa4 module:overlay(0) -from:0x020ac140 kind:load to:0x020e5aa8 module:overlay(0) +from:0x020ac13c kind:load to:0x020e5aa0 add:0x4 module:overlay(0) +from:0x020ac140 kind:load to:0x020e5aa0 add:0x8 module:overlay(0) from:0x020ac144 kind:load to:0x020e5ba4 module:overlay(0) -from:0x020ac148 kind:load to:0x020e5aac module:overlay(0) +from:0x020ac148 kind:load to:0x020e5aa0 add:0xc module:overlay(0) from:0x020ac14c kind:load to:0x020e5bbc module:overlay(0) from:0x020ac150 kind:load to:0x020e5bd4 module:overlay(0) from:0x020ac154 kind:load to:0x020e5a8c module:overlay(0) from:0x020ac158 kind:load to:0x020e5be4 module:overlay(0) -from:0x020ac15c kind:load to:0x020e5a80 module:overlay(0) +from:0x020ac15c kind:load to:0x020e5a7c add:0x4 module:overlay(0) from:0x020ac174 kind:arm_call to:0x020a8ce0 module:overlay(0) from:0x020ac180 kind:arm_call to:0x020a817c module:overlay(0) from:0x020ac190 kind:arm_call to:0x020a817c module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 07fb0761..c9eb2494 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -2087,11 +2087,11 @@ _ZN15LinkStateDamage20CreateDebugHierarchyEv kind:function(thumb,size=0x218) add _ZN15LinkStateDamage12OnStateEnterEv kind:function(arm,size=0x630) addr:0x020ac160 _ZN15LinkStateDamage12OnStateLeaveEi kind:function(arm,size=0x1f4) addr:0x020ac790 _ZN15LinkStateDamage18func_ov00_020ac9e4Ei kind:function(arm,size=0x6c) addr:0x020ac984 -_ZN15LinkStateDamage18func_ov00_020aca50Ev kind:function(arm,size=0x44) addr:0x020ac9f0 -_ZN15LinkStateDamage18func_ov00_020aca94Ev kind:function(arm,size=0x68) addr:0x020aca34 +_Z11RespawnLinkP15LinkStateDamage kind:function(arm,size=0x44) addr:0x020ac9f0 +_ZN15LinkStateDamage21SetLinkFrozenMaterialEv kind:function(arm,size=0x68) addr:0x020aca34 _ZN15LinkStateDamage8vfunc_30Ei kind:function(arm,size=0x70) addr:0x020aca9c _ZN15LinkStateDamage18func_ov00_020acb6cEP5Vec3pi kind:function(arm,size=0x324) addr:0x020acb0c -_ZN15LinkStateDamage18func_ov00_020ace90EP5Vec3pi kind:function(arm,size=0x68) addr:0x020ace30 +_ZN15LinkStateDamage9KnockbackEP5Vec3pi kind:function(arm,size=0x68) addr:0x020ace30 _ZN15LinkStateDamage8vfunc_24Ei kind:function(arm,size=0x30) addr:0x020ace98 _ZN15LinkStateDamage8vfunc_20Ei kind:function(arm,size=0xc0) addr:0x020acec8 _ZN15LinkStateDamage18func_ov00_020acfe8Eb kind:function(arm,size=0x30) addr:0x020acf88 @@ -3718,7 +3718,7 @@ data_ov000_020dc550 kind:data(any) addr:0x020dc4f0 data_ov000_020dc554 kind:data(any) addr:0x020dc4f4 data_ov000_020dc558 kind:data(any) addr:0x020dc4f8 data_ov000_020dc55c kind:data(any) addr:0x020dc4fc -data_ov000_020dc560 kind:data(any) addr:0x020dc500 +@1244 kind:data(any) addr:0x020dc500 data_ov000_020dc574 kind:data(any) addr:0x020dc514 data_ov000_020dc674 kind:data(any) addr:0x020dc614 sQuiverSizes kind:data(any) addr:0x020dc664 local @@ -4829,41 +4829,34 @@ data_ov000_020e5a0c kind:data(any) addr:0x020e59ac data_ov000_020e5a20 kind:data(any) addr:0x020e59c0 data_ov000_020e5a34 kind:data(any) addr:0x020e59d4 _ZTV13LinkStateItem kind:data(any) addr:0x020e59e0 -data_ov000_020e5a8c kind:data(any) addr:0x020e5a2c -data_ov000_020e5a90 kind:data(any) addr:0x020e5a30 -data_ov000_020e5a94 kind:data(any) addr:0x020e5a34 -data_ov000_020e5a98 kind:data(any) addr:0x020e5a38 -data_ov000_020e5a9c kind:data(any) addr:0x020e5a3c -data_ov000_020e5aa0 kind:data(any) addr:0x020e5a40 -data_ov000_020e5aa4 kind:data(any) addr:0x020e5a44 -data_ov000_020e5aa8 kind:data(any) addr:0x020e5a48 -data_ov000_020e5aac kind:data(any) addr:0x020e5a4c -data_ov000_020e5acc kind:data(any) addr:0x020e5a6c -data_ov000_020e5adc kind:data(any) addr:0x020e5a7c -data_ov000_020e5ae0 kind:data(any) addr:0x020e5a80 -data_ov000_020e5aec kind:data(any) addr:0x020e5a8c -data_ov000_020e5af0 kind:data(any) addr:0x020e5a90 -data_ov000_020e5af4 kind:data(any) addr:0x020e5a94 -data_ov000_020e5af8 kind:data(any) addr:0x020e5a98 -data_ov000_020e5afc kind:data(any) addr:0x020e5a9c -data_ov000_020e5b00 kind:data(any) addr:0x020e5aa0 -data_ov000_020e5b04 kind:data(any) addr:0x020e5aa4 -data_ov000_020e5b08 kind:data(any) addr:0x020e5aa8 -data_ov000_020e5b0c kind:data(any) addr:0x020e5aac -data_ov000_020e5b10 kind:data(any) addr:0x020e5ab0 -data_ov000_020e5b20 kind:data(any) addr:0x020e5ac0 -data_ov000_020e5b30 kind:data(any) addr:0x020e5ad0 -data_ov000_020e5b40 kind:data(any) addr:0x020e5ae0 -data_ov000_020e5b50 kind:data(any) addr:0x020e5af0 -_ZTV15LinkStateDamage kind:data(any) addr:0x020e5b08 -data_ov000_020e5bac kind:data(any) addr:0x020e5b4c -data_ov000_020e5bc0 kind:data(any) addr:0x020e5b60 -data_ov000_020e5bd8 kind:data(any) addr:0x020e5b78 -data_ov000_020e5bf0 kind:data(any) addr:0x020e5b90 -data_ov000_020e5c04 kind:data(any) addr:0x020e5ba4 -data_ov000_020e5c1c kind:data(any) addr:0x020e5bbc -data_ov000_020e5c34 kind:data(any) addr:0x020e5bd4 -data_ov000_020e5c44 kind:data(any) addr:0x020e5be4 +@1126 kind:data(any) addr:0x020e5a2c +@1125 kind:data(any) addr:0x020e5a30 +@1124 kind:data(any) addr:0x020e5a34 +@1123 kind:data(any) addr:0x020e5a38 +@1122 kind:data(any) addr:0x020e5a3c +@1121 kind:data(any) addr:0x020e5a40 +@1120 kind:data(any) addr:0x020e5a44 +@1119 kind:data(any) addr:0x020e5a48 +gShipParts kind:data(any) addr:0x020e5a4c +_ZN15LinkStateDamage19data_ov000_020e5accE kind:data(any) addr:0x020e5a6c +_ZN15LinkStateDamage19data_ov000_020e5adcE kind:data(any) addr:0x020e5a7c +_ZN15LinkStateDamage19data_ov000_020e5aecE kind:data(any) addr:0x020e5a8c +_ZN15LinkStateDamage19data_ov000_020e5af0E kind:data(any) addr:0x020e5a90 +_ZN15LinkStateDamage19data_ov000_020e5b00E kind:data(any) addr:0x020e5aa0 +_ZN15LinkStateDamage19data_ov000_020e5b10E kind:data(any) addr:0x020e5ab0 +_ZN15LinkStateDamage19data_ov000_020e5b20E kind:data(any) addr:0x020e5ac0 +_ZN15LinkStateDamage19data_ov000_020e5b30E kind:data(any) addr:0x020e5ad0 +_ZN15LinkStateDamage19data_ov000_020e5b40E kind:data(any) addr:0x020e5ae0 +_ZN15LinkStateDamage19data_ov000_020e5b50E kind:data(any) addr:0x020e5af0 +_ZTV15LinkStateDamage kind:data(any) addr:0x020e5b00 +@1178 kind:data(any) addr:0x020e5b4c local +@1179 kind:data(any) addr:0x020e5b60 local +@1180 kind:data(any) addr:0x020e5b78 local +@1181 kind:data(any) addr:0x020e5b90 local +@1182 kind:data(any) addr:0x020e5ba4 local +@1183 kind:data(any) addr:0x020e5bbc local +@1184 kind:data(any) addr:0x020e5bd4 local +@1185 kind:data(any) addr:0x020e5be4 local @1542 kind:data(any) addr:0x020e5bf8 local @1541 kind:data(any) addr:0x020e5bfc local @1540 kind:data(any) addr:0x020e5c00 local diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index 33b64cd8..ad8c39f4 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -1709,7 +1709,7 @@ from:0x021082ee kind:thumb_call to:0x020bb394 module:overlay(0) from:0x02108306 kind:thumb_call_arm to:0x0202e9d8 module:main from:0x02108314 kind:thumb_call to:0x020bb3cc module:overlay(0) from:0x0210832c kind:thumb_call to:0x02108374 module:overlay(4) -from:0x02108350 kind:load to:0x020e5b08 module:overlay(0) +from:0x02108350 kind:load to:0x020e5b00 add:8 module:overlay(0) from:0x02108354 kind:load to:0x027e0d0c module:dtcm from:0x02108358 kind:load to:0x020b7d14 module:overlay(0) from:0x0210835c kind:load to:0x02107955 module:overlay(4) @@ -1728,7 +1728,7 @@ from:0x021083d4 kind:thumb_call_arm to:0x020b7d14 module:overlay(0) from:0x021083dc kind:thumb_call to:0x020a9544 module:overlay(0) from:0x021083ea kind:thumb_call_arm to:0x0204f710 module:main from:0x021083f0 kind:thumb_call to:0x0210ad74 module:overlay(4) -from:0x021083f8 kind:load to:0x020e5b08 module:overlay(0) +from:0x021083f8 kind:load to:0x020e5b00 add:8 module:overlay(0) from:0x021083fc kind:load to:0x020b7d14 module:overlay(0) from:0x0210841e kind:thumb_call_arm to:0x020b7d14 module:overlay(0) from:0x0210842c kind:thumb_call_arm to:0x0204f710 module:main @@ -1737,7 +1737,7 @@ from:0x0210843c kind:thumb_call to:0x020a9544 module:overlay(0) from:0x0210844a kind:thumb_call_arm to:0x0204f710 module:main from:0x02108450 kind:thumb_call to:0x0210ad74 module:overlay(4) from:0x02108456 kind:thumb_call_arm to:0x0202ea08 module:main -from:0x02108460 kind:load to:0x020e5b08 module:overlay(0) +from:0x02108460 kind:load to:0x020e5b00 add:8 module:overlay(0) from:0x02108464 kind:load to:0x020b7d14 module:overlay(0) from:0x02108472 kind:thumb_call_arm to:0x020a5e3c module:overlay(0) from:0x0210847c kind:thumb_call_arm to:0x02078ae0 module:overlay(0) diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 8f5ebd6c..781d0fca 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -6,6 +6,7 @@ #include "Actor/Actor.hpp" #include "Actor/ActorManager.hpp" +#include "DTCM/UnkStruct_027e0fd4.hpp" #include "Debug/DebugHierarchy.hpp" #include "Player/EquipItem.hpp" #include "Player/PlayerControlData.hpp" @@ -124,7 +125,7 @@ public: s32 Get_PlayerLinkBase_Unk44(); bool IsEquipBeingUsed(ItemFlag id); EquipItem *GetEquipItem(ItemFlag id); - void *func_ov00_020a8d40(); + UnkStruct_027e0fd4 *func_ov00_020a8d40(); unk32 func_ov00_020a8d50(); unk32 func_ov00_020a8d6c(); s32 PlayerControlData_vfunc_14(s32 param1); diff --git a/include/Player/LinkStateDamage.hpp b/include/Player/LinkStateDamage.hpp index 02e2c526..f58de710 100644 --- a/include/Player/LinkStateDamage.hpp +++ b/include/Player/LinkStateDamage.hpp @@ -9,19 +9,31 @@ class LinkStateDamage : public LinkStateBase { public: + static LinkStateBase_UnkStruct1 data_ov000_020e5acc; + static LinkStateBase_UnkStruct1 data_ov000_020e5adc; + static unk32 data_ov000_020e5aec; + static LinkStateBase_UnkStruct1 data_ov000_020e5af0; + static LinkStateBase_UnkStruct1 data_ov000_020e5b00; + static LinkStateBase_UnkStruct1 data_ov000_020e5b10; + static LinkStateBase_UnkStruct1 data_ov000_020e5b20; + static LinkStateBase_UnkStruct1 data_ov000_020e5b30; + static LinkStateBase_UnkStruct1 data_ov000_020e5b40; + static LinkStateBase_UnkStruct1 data_ov000_020e5b50; + /* 00 (base) */ - /* 0c */ void *mUnk_0c; - /* 10 */ unk32 mUnk_10; - /* 14 */ unk32 mUnk_14; + /* 0c */ Vec3p mUnk_0c; /* 18 */ unk32 mUnk_18; /* 1c */ unk32 mUnk_1c; /* 20 */ unk8 mUnk_20[2]; /* 22 */ unk16 mUnk_22; - /* 24 */ unk8 mUnk_24[0xe]; + /* 24 */ unk8 mUnk_24[8]; + /* 2c */ q20 mUnk_2c; // maybe link's "y" coordinate when entering this state + /* 30 */ bool mUnk_30; + /* 31 */ unk8 mUnk_31; /* 32 */ unk16 mUnk_32; /* 34 */ unk32 mUnk_34[2]; /* 3c */ ModelRender mUnk_3c; - /* 98 */ void *mUnk_98; + /* 98 */ UnkStruct_ov000_020c0c08 *mUnk_98; /* 9c */ void *mUnk_9c; /* a0 */ unk32 mUnk_a0[3]; /* ac */ unk32 mUnk_ac; @@ -42,11 +54,10 @@ public: /* 44 */ void func_ov00_020ac9e4(unk32 param1); - void func_ov00_020aca50(); - void func_ov00_020aca94(); + void SetLinkFrozenMaterial(); void func_ov00_020acb6c(Vec3p *param1, unk32 param2); - void func_ov00_020ace90(Vec3p *param1, unk32 param2); + void Knockback(Vec3p *knockbackVec, unk32 param2); void func_ov00_020acfe8(bool param1); diff --git a/include/Player/PlayerControlData.hpp b/include/Player/PlayerControlData.hpp index cdcd8db8..edf90602 100644 --- a/include/Player/PlayerControlData.hpp +++ b/include/Player/PlayerControlData.hpp @@ -15,7 +15,7 @@ public: /* 010 */ unk32 mUnk_010; /* 014 */ unk32 mUnk_014; /* 018 */ unk32 mStateUnk; - /* 01c */ Vec3p mUnk_01c; + /* 01c */ Vec3p mLastJumpLocation; // vector from last location of the player before jumping? /* 028 */ unk16 mUnk_028; /* 02a */ unk16 mUnk_02a; /* 02c */ unk16 mUnk_02c; diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index a750d276..d08091cc 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -74,7 +74,7 @@ unk32 LinkStateBase::Grab() {} s32 LinkStateBase::Get_PlayerLinkBase_Unk44() {} bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) {} EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) {} -void *LinkStateBase::func_ov00_020a8d40() {} +UnkStruct_027e0fd4 *LinkStateBase::func_ov00_020a8d40() {} unk32 LinkStateBase::func_ov00_020a8d50() {} unk32 LinkStateBase::func_ov00_020a8d6c() {} s32 LinkStateBase::PlayerControlData_vfunc_14(s32 param1) {} diff --git a/src/00_Core/Player/LinkStateDamage.cpp b/src/00_Core/Player/LinkStateDamage.cpp index c544b154..d07de354 100644 --- a/src/00_Core/Player/LinkStateDamage.cpp +++ b/src/00_Core/Player/LinkStateDamage.cpp @@ -1,16 +1,211 @@ #include "Player/LinkStateDamage.hpp" +#include "Game/Game.hpp" +#include "Unknown/UnkStruct_020e9360.hpp" +#include "Unknown/UnkStruct_ov000_020e9c88.hpp" -void LinkStateDamage::vfunc_00() {} -void LinkStateDamage::CreateDebugHierarchy() {} -void LinkStateDamage::OnStateEnter() {} -void LinkStateDamage::OnStateLeave(s32 param1) {} -void LinkStateDamage::func_ov00_020ac9e4(unk32 param1) {} -void LinkStateDamage::func_ov00_020aca50() {} -void LinkStateDamage::func_ov00_020aca94() {} -void LinkStateDamage::vfunc_30(unk32 param1) {} -void LinkStateDamage::func_ov00_020acb6c(Vec3p *param1, unk32 param2) {} -void LinkStateDamage::func_ov00_020ace90(Vec3p *param1, unk32 param2) {} -bool LinkStateDamage::vfunc_24(s32 param1) {} -bool LinkStateDamage::vfunc_20(s32 param1) {} -void LinkStateDamage::func_ov00_020acfe8(bool param1) {} -LinkStateId LinkStateDamage::GetId() {} +extern "C" unk32 func_0201e388(void *param1, const char *param2); +extern "C" void func_02019534(void *model, unk32 param1, unk32 param2); + +static char *gShipParts[8] = {"brg", "anc", "pdl", "hul", "can", "dco", "bow", "fnl"}; + +THUMB void LinkStateDamage::vfunc_00() {} + +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5acc = {74, {0x1000, 0, 0x3E000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5adc = {43, {0x1000, 0, 0x5000}}; +unk32 LinkStateDamage::data_ov000_020e5aec = 6; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5af0 = {12, {0x1800, 0, 0xa000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b00 = {13, {0x1800, 0, 0xa000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b10 = {12, {0x1000, 0, 0xa000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b20 = {13, {0x1000, 0, 0xa000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b30 = {39, {0x1000, 0, 0x2000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b40 = {10, {0x800, 0, 0x4000}}; +LinkStateBase_UnkStruct1 LinkStateDamage::data_ov000_020e5b50 = {84, {0x1000, 0, 0x19000}}; + +THUMB void LinkStateDamage::CreateDebugHierarchy() { + unk32 id = 'LDMG'; + + s32 unk1 = this->PlayerControlData_vfunc_14(data_ov000_020e5af0.mUnk_00); + + // Front minor damage regeneration speed "前小ダメ再生速度" + const char *description1 = "\x91O\x8f\xac\x83_\x83\x81\x8d\xc4\x90\xb6\x91\xac\x93x\x00\x00\x00"; + + // Front minor damage start frame "前小ダメ開始フレーム" + const char *description2 = "\x91O\x8f\xac\x83_\x83\x81\x8aJ\x8en\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + + // Front minor damage end frame "前小ダメ終了フレーム" + const char *description3 = "\x91O\x8F\xAC\x83_\x83\x81\x8FI\x97\xB9\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + + DebugHierarchy *debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5af0.mUnk_04.x); + debugHierarchy->GetChildNode(1, description1, id, &data_ov000_020e5af0.mUnk_04.x, 8, 0, 0x2000, 0); + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5af0.mUnk_04.y); + debugHierarchy->GetChildNode(1, description2, id, &data_ov000_020e5af0.mUnk_04.y, 8, 0, unk1 / 2, 0); + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5af0.mUnk_04.z); + debugHierarchy->GetChildNode(1, description3, id, &data_ov000_020e5af0.mUnk_04.z, 8, unk1 / 2, unk1, 0); + unk1 = this->PlayerControlData_vfunc_14(data_ov000_020e5b00.mUnk_00); + + // Back minor damage regeneration speed "後小ダメ再生速度" + const char *description4 = "\x8c\xE3\x8F\xAC\x83_\x83\x81\x8D\xC4\x90\xB6\x91\xAC\x93x\x00\x00\x00"; + + // Back minor damage start frame "後小ダメ開始フレーム" + const char *description5 = "\x8C\xE3\x8F\xAC\x83_\x83\x81\x8AJ\x8En\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + + // Back minor damage end frame "後小ダメ終了フレーム" + const char *description6 = "\x8C\xE3\x8F\xAC\x83_\x83\x81\x8FI\x97\xB9\x83t\x83\x8c\x81[\x83\x80\x00\x00\x00"; + + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5b00.mUnk_04.x); + debugHierarchy->GetChildNode(1, description4, id, &data_ov000_020e5b00.mUnk_04.x, 8, 0, 0x2000, 0); + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5b00.mUnk_04.y); + debugHierarchy->GetChildNode(1, description5, id, &data_ov000_020e5b00.mUnk_04.y, 8, 0, unk1 / 2, 0); + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5b00.mUnk_04.z); + debugHierarchy->GetChildNode(1, description6, id, &data_ov000_020e5b00.mUnk_04.z, 8, unk1 / 2, unk1, 0); + + // Number of tears [verb] "ビリビリ回数" + const char *description7 = "\x83r\x83\x8A\x83r\x83\x8A\x89\xF1\x90\x94\x00\x00\x00"; + + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->GetChildNode(0, description7, id, &data_ov000_020e5aec, 6, 0, 0x14, 0); + + // Tear [verb] playback speed "ビリビリ再生速度" + const char *description8 = "\x83r\x83\x8A\x83r\x83\x8A\x8D\xC4\x90\xB6\x91\xAC\x93x\x00\x00\x00"; + + debugHierarchy = this->GetDebugHierarchy0(); + debugHierarchy->vfunc_3c(id, &data_ov000_020e5adc.mUnk_04.x); + debugHierarchy->GetChildNode(1, description8, id, &data_ov000_020e5adc.mUnk_04.x, 8, 0, 0x2000, 0); + this->GetDebugHierarchy0(); + this->GetDebugHierarchy0(); + this->GetDebugHierarchy0(); + this->GetDebugHierarchy0(); + this->GetDebugHierarchy0(); + this->GetDebugHierarchy1(); +} + +ARM void LinkStateDamage::OnStateEnter() { + this->func_ov00_020a8a4c(&data_ov000_020e5b10, 1); + this->func_ov00_020a8a4c(&data_ov000_020e5b20, 1); + this->func_ov00_020a8a4c(&data_ov000_020e5b30, 1); + this->func_ov00_020a8a4c(&data_ov000_020e5b40, 1); + this->func_ov00_020a8a4c(&data_ov000_020e5b50, 1); +} + +ARM void LinkStateDamage::OnStateLeave(s32 param1) {} + +ARM void LinkStateDamage::func_ov00_020ac9e4(unk32 param1) { + if (!this->func_ov005_02110f50(this->mUnk_30, param1, this->mUnk_22, (u32 *) this->mUnk_b0)) { + this->ChangeLinkState(LinkStateId_Move); + } else { + s32 unkInt = mUnk_2c; + UnkStruct_027e0fd4 *unkPtr = this->func_ov00_020a8d40(); + unkPtr->mUnk_09c = unkInt; + if (data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 47) { + this->func_ov005_0210f7b8(); + } + } +} + +ARM void RespawnLink(LinkStateDamage *linkState) { + Vec3p new_pos; + + PlayerControlData *ctrlData = linkState->GetPlayerControlData(); + Vec3p *pos = linkState->GetPlayerPos(); + Vec3p_Add(pos, &ctrlData->mLastJumpLocation, &new_pos); + linkState->mUnk_3c.SetTranslation(&new_pos); +} + +#pragma readonly_strings on +ARM void LinkStateDamage::SetLinkFrozenMaterial() { + void *model = mUnk_3c.GetLcdcAddress(); + u32 materialsOffset = *(u32 *) ((u32) model + 8); + void *materialList = (void *) ((u32) model + materialsOffset + 4); + unk32 unkVar1 = func_0201e388(materialList, "link_ice1"); + unk32 unkVar2 = data_ov000_020e9360.func_ov000_02079e68(1); + void *model2 = mUnk_3c.GetLcdcAddress(); + func_02019534(model2, unkVar1, unkVar2); +} +#pragma readonly_strings reset + +ARM void LinkStateDamage::vfunc_30(unk32 param1) { + if (mUnk_18 == 6) { + Vec3p *playerPos = this->GetPlayerPos(); + Vec3p unkPos; + unkPos.x = playerPos->x; + unkPos.y = playerPos->y; + unkPos.z = playerPos->z; + unkPos.y += 0x999; + data_ov000_020e9c88.func_ov000_0207b89c(param1, &unkPos, (void (*)(void *)) &RespawnLink, this); + } +} + +ARM void LinkStateDamage::func_ov00_020acb6c(Vec3p *param1, unk32 param2) {} + +ARM void LinkStateDamage::Knockback(Vec3p *knockbackVec, unk32 param2) { + this->mUnk_18 = 2; + Vec3p *playerVel = this->GetPlayerVel(); + playerVel->x = knockbackVec->x; + playerVel->y = knockbackVec->y; + playerVel->z = knockbackVec->z; + s16 groundAngle = FX_Atan2Idx(knockbackVec->x, knockbackVec->z); + s16 *playerAngle = this->GetPlayerAngle(); + *playerAngle = groundAngle - 0x8000; + this->mUnk_24[12] = 0; + this->mUnk_22 = param2; +} + +ARM bool LinkStateDamage::vfunc_24(s32 param1) { + switch (param1) { + case 3: + return false; + case 2: + return mUnk_18 != 0xd; + default: + break; + } + + return false; +} + +ARM bool LinkStateDamage::vfunc_20(s32 param1) { + if (this->func_ov00_020a8b80()) { + if (this->GetCurrentCharacterHealth() <= 0) { + if (gGame.mModeId == 2) { + if (this->GetPlayerVel()->y <= 0) { + if (gItemManager->HasPurplePotion()) { + mUnk_18 = 0xe; + } else { + mUnk_18 = 0xf; + } + this->func_ov00_020a82ac(); + } else { + return false; + } + } else { + this->func_ov00_020a82ac(); + mUnk_18 = 0xe; + } + return true; + } + if (mUnk_32 > 0) { + this->func_ov00_020a82ac(); + mUnk_18 = 0xe; + return true; + } + } + return false; +} + +ARM void LinkStateDamage::func_ov00_020acfe8(bool param1) { + if (param1) { + this->func_ov00_020a8a4c(&data_ov000_020e5b00, 1); + } else { + this->func_ov00_020a8a4c(&data_ov000_020e5af0, 1); + } +} + +ARM LinkStateId LinkStateDamage::GetId() { + return LinkStateId_Damage; +}