From f1c7b3cc72e87c139b4ff5069f594d9cee1724c9 Mon Sep 17 00:00:00 2001 From: Alessevan <44125445+Alessevan@users.noreply.github.com> Date: Fri, 24 Jul 2026 02:36:43 +0200 Subject: [PATCH] Decompiling NTTZ actor and part of TGTZ (#121) * feat: decompiling NTTZ * feat: progress TGTZ * feat: progress * style: cleanup * feat: name parameter in header * refactor: cleanup unused class * feat: increase sinit * feat: remove extern --- config/eur/arm9/overlays/ov000/symbols.txt | 8 +- config/eur/arm9/overlays/ov017/symbols.txt | 2 +- config/eur/arm9/overlays/ov031/delinks.txt | 3 + config/eur/arm9/overlays/ov031/relocs.txt | 6 +- config/eur/arm9/overlays/ov031/symbols.txt | 48 +- config/jp/arm9/overlays/ov000/symbols.txt | 6 +- config/jp/arm9/overlays/ov017/symbols.txt | 2 +- config/jp/arm9/overlays/ov031/delinks.txt | 3 + config/jp/arm9/overlays/ov031/relocs.txt | 2 +- config/jp/arm9/overlays/ov031/symbols.txt | 42 +- include/Actor/Actor.hpp | 10 +- include/Actor/ActorEventIcon.hpp | 2 +- include/Actor/ActorUnkNTTZ.hpp | 27 +- include/Actor/ActorUnkTGTZ.hpp | 75 ++- include/Render/ModelRender.hpp | 3 +- include/Unknown/Common.hpp | 4 +- include/Unknown/UnkStruct_027e09a8.hpp | 1 + src/000_Second/Actor/Actor.cpp | 2 +- .../Train/UnkStruct_027e0d00_20.cpp | 10 +- .../Train/UnkTrainSystem2_024.cpp | 2 +- src/031_Land/Actor/ActorUnkNTTZ.cpp | 52 ++- src/031_Land/Actor/ActorUnkTGTZ.cpp | 439 +++++++++++++++++- .../PlayerSceneChange.cpp | 10 +- 23 files changed, 609 insertions(+), 150 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index d0dc6a2e..de7b8297 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -108,7 +108,7 @@ _ZN11ModelRender19func_ov000_02057d20Eh kind:function(thumb,size=0x1c) addr:0x02 _ZN11ModelRender19func_ov000_02057d3cEP18G3d_BoneMtxStruct_ kind:function(arm,size=0x30) addr:0x02057d3c func_ov000_02057d6c kind:function(arm,size=0x18) addr:0x02057d6c _ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x18) addr:0x02057d84 -func_ov000_02057d9c kind:function(arm,size=0x2c) addr:0x02057d9c +_ZN11ModelRender19func_ov000_02057d9cEv kind:function(arm,size=0x2c) addr:0x02057d9c _ZN11ModelRender8vfunc_10EP7VecFx32P5Mat3pS1_ kind:function(arm,size=0x7c) addr:0x02057dc8 _ZN11ModelRender8vfunc_14EP5Mat3pP7VecFx32 kind:function(arm,size=0x64) addr:0x02057e44 _ZN11ModelRender8vfunc_18EP7VecFx32 kind:function(arm,size=0x1c) addr:0x02057ea8 @@ -1049,7 +1049,7 @@ func_ov000_02071594 kind:function(arm,size=0x7c) addr:0x02071594 func_ov000_02071610 kind:function(arm,size=0x4c) addr:0x02071610 func_ov000_0207165c kind:function(arm,size=0x2c) addr:0x0207165c func_ov000_02071688 kind:function(arm,size=0x54) addr:0x02071688 -func_ov000_020716dc kind:function(arm,size=0x24) addr:0x020716dc +_ZN18UnkStruct_027e09a819func_ov000_020716dcEi kind:function(arm,size=0x24) addr:0x020716dc func_ov000_02071700 kind:function(arm,size=0x48) addr:0x02071700 func_ov000_02071748 kind:function(arm,size=0x2c) addr:0x02071748 func_ov000_02071774 kind:function(arm,size=0x58) addr:0x02071774 @@ -2322,7 +2322,7 @@ _ZN5Actor8vfunc_20Ev kind:function(arm,size=0x4) addr:0x020984b4 _ZN5Actor8vfunc_24Ev kind:function(arm,size=0x4) addr:0x020984b8 _ZN5Actor8vfunc_28Ev kind:function(arm,size=0x4) addr:0x020984bc _ZN5Actor8vfunc_2CEi kind:function(arm,size=0x4) addr:0x020984c0 -_ZN5Actor8vfunc_30Ev kind:function(arm,size=0x4) addr:0x020984c4 +_ZN5Actor8vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0x4) addr:0x020984c4 _ZN5Actor8vfunc_34Ev kind:function(arm,size=0x8) addr:0x020984c8 _ZN5Actor19func_ov000_020984d0Ev kind:function(arm,size=0x20) addr:0x020984d0 _ZN5Actor19func_ov000_020984f0Ev kind:function(arm,size=0x28) addr:0x020984f0 @@ -2353,7 +2353,7 @@ _ZN5Actor19func_ov000_02098b8cEii kind:function(arm,size=0x184) addr:0x02098b8c func_ov000_02098d10 kind:function(arm,size=0x6c) addr:0x02098d10 func_ov000_02098d7c kind:function(arm,size=0x1b8) addr:0x02098d7c func_ov000_02098f34 kind:function(arm,size=0xd0) addr:0x02098f34 -_ZN14Actor_Derived28vfunc_30Ev kind:function(arm,size=0xc) addr:0x02099004 +_ZN14Actor_Derived28vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0xc) addr:0x02099004 func_ov000_02099010 kind:function(arm,size=0xb0) addr:0x02099010 func_ov000_020990c0 kind:function(arm,size=0x21c) addr:0x020990c0 func_ov000_020992dc kind:function(arm,size=0x90) addr:0x020992dc diff --git a/config/eur/arm9/overlays/ov017/symbols.txt b/config/eur/arm9/overlays/ov017/symbols.txt index b375064d..b66fb213 100644 --- a/config/eur/arm9/overlays/ov017/symbols.txt +++ b/config/eur/arm9/overlays/ov017/symbols.txt @@ -83,7 +83,7 @@ _ZN5Actor8vfunc_14Ev kind:function(arm,size=0x4c) addr:0x020bfd50 func_ov017_020bfd9c kind:function(arm,size=0x130) addr:0x020bfd9c _ZN5Actor8vfunc_48Ev kind:function(arm,size=0x80) addr:0x020bfecc _ZN14ActorEventIcon8vfunc_24Ev kind:function(arm,size=0xc) addr:0x020bff4c -_ZN14ActorEventIcon8vfunc_30Ev kind:function(arm,size=0xd4) addr:0x020bff58 +_ZN14ActorEventIcon8vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0xd4) addr:0x020bff58 func_ov017_020c002c kind:function(arm,size=0x50) addr:0x020c002c func_ov017_020c007c kind:function(arm,size=0x60) addr:0x020c007c func_ov017_020c00dc kind:function(arm,size=0xec) addr:0x020c00dc diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index c96b7d0e..9c05d0d5 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -112,15 +112,18 @@ src/031_Land/Actor/ActorUnkATTG.cpp: .bss start:0x02116abc end:0x02116b08 src/031_Land/Actor/ActorUnkNTTZ.cpp: + complete .text start:0x020f6108 end:0x020f6284 .init start:0x021115e8 end:0x02111638 .ctor start:0x021127dc end:0x021127e0 + .data start:0x02114504 end:0x02114584 .bss start:0x02116b08 end:0x02116b64 src/031_Land/Actor/ActorUnkTGTZ.cpp: .text start:0x020f6834 end:0x020f7474 .init start:0x0211165c end:0x021116c0 .ctor start:0x021127e4 end:0x021127e8 + .data start:0x021145a4 end:0x0211465c .bss start:0x02116b64 end:0x02116c54 src/031_Land/Actor/ActorUnkSWCH.cpp: diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt index 4fea3f95..5e42590e 100644 --- a/config/eur/arm9/overlays/ov031/relocs.txt +++ b/config/eur/arm9/overlays/ov031/relocs.txt @@ -3230,7 +3230,7 @@ from:0x020f6248 kind:arm_call to:0x02098488 module:overlay(0) from:0x020f625c kind:arm_call to:0x02098488 module:overlay(0) from:0x020f6264 kind:arm_call to:0x02011ff4 module:main from:0x020f6278 kind:arm_call to:0x02097724 module:overlay(0) -from:0x020f62dc kind:load to:0x02114594 module:overlay(31) +from:0x020f62dc kind:load to:0x0211458c module:overlay(31) add:0x8 from:0x020f62e0 kind:load to:0x02114584 module:overlay(31) from:0x020f633c kind:arm_call to:0x01fff3b4 module:itcm from:0x020f635c kind:arm_call to:0x02071b30 module:overlay(0) @@ -3262,7 +3262,7 @@ from:0x020f6960 kind:arm_call to:0x01ffa06c module:itcm from:0x020f696c kind:arm_call to:0x0209862c module:overlay(0) from:0x020f6978 kind:load to:0x02114600 add:0x8 module:overlay(31) from:0x020f697c kind:load to:0x02116b7c module:overlay(31) -from:0x020f6980 kind:load to:0x021145dc module:overlay(31) +from:0x020f6980 kind:load to:0x021145d4 module:overlay(31) add:0x8 from:0x020f698c kind:arm_call_thumb to:0x02057bd4 module:overlay(0) from:0x020f69fc kind:arm_call_thumb to:0x01ffa1a0 module:itcm from:0x020f6a1c kind:arm_call to:0x0205fc20 module:overlay(0) @@ -5330,7 +5330,7 @@ from:0x02108a7c kind:arm_call to:0x0207c018 module:overlay(0) from:0x02108ac8 kind:arm_call to:0x01ffa06c module:itcm from:0x02108ad4 kind:load to:0x02115e74 module:overlay(31) from:0x02108ad8 kind:load to:0x021184e8 module:overlay(31) -from:0x02108adc kind:load to:0x021145dc module:overlay(31) +from:0x02108adc kind:load to:0x021145d4 module:overlay(31) add:0x8 from:0x02108ae0 kind:load to:0x02113f10 add:0x8 module:overlay(31) from:0x02108b10 kind:arm_call to:0x01ffedf4 module:itcm from:0x02108b84 kind:arm_call_thumb to:0x01ffa1a0 module:itcm diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index ba1c04b4..8db85a61 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -995,9 +995,9 @@ _ZN19ActorProfileUnkNTTZ10GetProfileEv kind:function(arm,size=0xc) addr:0x020f61 _ZN19ActorProfileUnkNTTZ6CreateEv kind:function(arm,size=0x24) addr:0x020f6114 _ZN19ActorProfileUnkNTTZC1Ev kind:function(arm,size=0x28) addr:0x020f6138 _ZN12ActorUnkNTTZC1Ev kind:function(arm,size=0x30) addr:0x020f6160 -_ZN12ActorUnkNTTZ19func_ov031_020f6190Ev kind:function(arm,size=0x8) addr:0x020f6190 -_ZN12ActorUnkNTTZ19func_ov031_020f6198Ev kind:function(arm,size=0x4) addr:0x020f6198 -_ZN12ActorUnkNTTZ19func_ov031_020f619cEv kind:function(arm,size=0x4) addr:0x020f619c +_ZN12ActorUnkNTTZ8vfunc_18Ei kind:function(arm,size=0x8) addr:0x020f6190 +_ZN12ActorUnkNTTZ8vfunc_20Ev kind:function(arm,size=0x4) addr:0x020f6198 +_ZN12ActorUnkNTTZ8vfunc_2CEi kind:function(arm,size=0x4) addr:0x020f619c _ZN12ActorUnkNTTZ19func_ov031_020f61a0Ev kind:function(arm,size=0x50) addr:0x020f61a0 _ZN12ActorUnkNTTZ19func_ov031_020f61f0Ev kind:function(arm,size=0x50) addr:0x020f61f0 _ZN12ActorUnkNTTZD1Ev kind:function(arm,size=0x14) addr:0x020f6240 @@ -1021,21 +1021,21 @@ _ZN19ActorProfileUnkTGTZ10GetProfileEv kind:function(arm,size=0xc) addr:0x020f68 _ZN19ActorProfileUnkTGTZ6CreateEv kind:function(arm,size=0x24) addr:0x020f6840 _ZN19ActorProfileUnkTGTZC1Ev kind:function(arm,size=0x44) addr:0x020f6864 _ZN12ActorUnkTGTZC1Ev kind:function(arm,size=0xdc) addr:0x020f68a8 -_ZN12ActorUnkTGTZ19func_ov031_020f6984Ev kind:function(arm,size=0x14) addr:0x020f6984 -_ZN12ActorUnkTGTZ19func_ov031_020f6998Ev kind:function(arm,size=0x14c) addr:0x020f6998 -_ZN12ActorUnkTGTZ19func_ov031_020f6ae4Ev kind:function(arm,size=0x364) addr:0x020f6ae4 -_ZN12ActorUnkTGTZ19func_ov031_020f6e48Ev kind:function(arm,size=0x14) addr:0x020f6e48 -_ZN12ActorUnkTGTZ19func_ov031_020f6e5cEv kind:function(arm,size=0x4c) addr:0x020f6e5c -_ZN12ActorUnkTGTZ19func_ov031_020f6ea8Ev kind:function(arm,size=0x78) addr:0x020f6ea8 -_ZN12ActorUnkTGTZ19func_ov031_020f6f20Ev kind:function(arm,size=0x250) addr:0x020f6f20 -_ZN12ActorUnkTGTZ19func_ov031_020f7170Ev kind:function(arm,size=0x138) addr:0x020f7170 -_ZN12ActorUnkTGTZ19func_ov031_020f72a8Ev kind:function(arm,size=0xb0) addr:0x020f72a8 +_ZN24ActorUnkTGTZ_ModelRenderD1Ev kind:function(arm,size=0x14) addr:0x020f6984 +_ZN12ActorUnkTGTZ8vfunc_18Ei kind:function(arm,size=0x14c) addr:0x020f6998 +_ZN12ActorUnkTGTZ8vfunc_20Ev kind:function(arm,size=0x364) addr:0x020f6ae4 +_ZN12ActorUnkTGTZ8vfunc_24Ev kind:function(arm,size=0x14) addr:0x020f6e48 +_ZN12ActorUnkTGTZ19func_ov031_020f6e5cE8ActorRef kind:function(arm,size=0x4c) addr:0x020f6e5c +_ZN12ActorUnkTGTZ19func_ov031_020f6ea8EP8ActorReftPK7VecFx32st kind:function(arm,size=0x78) addr:0x020f6ea8 +_ZN12ActorUnkTGTZ19func_ov031_020f6f20Ei kind:function(arm,size=0x250) addr:0x020f6f20 +_ZN12ActorUnkTGTZ8vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0x138) addr:0x020f7170 +_ZN12ActorUnkTGTZ8vfunc_2CEi kind:function(arm,size=0xb0) addr:0x020f72a8 _ZN12ActorUnkTGTZ19func_ov031_020f7358Ev kind:function(arm,size=0x8c) addr:0x020f7358 _ZN12ActorUnkTGTZ19func_ov031_020f73e4Ev kind:function(arm,size=0xc) addr:0x020f73e4 _ZN12ActorUnkTGTZ19func_ov031_020f73f0Ev kind:function(arm,size=0xc) addr:0x020f73f0 -_ZN12ActorUnkTGTZD0Ev kind:function(arm,size=0x1c) addr:0x020f73fc +_ZN24ActorUnkTGTZ_ModelRenderD0Ev kind:function(arm,size=0x1c) addr:0x020f73fc _ZN12ActorUnkTGTZD1Ev kind:function(arm,size=0x20) addr:0x020f7418 -_ZN12ActorUnkTGTZ19func_ov031_020f7438Ev kind:function(arm,size=0x28) addr:0x020f7438 +_ZN12ActorUnkTGTZD0Ev kind:function(arm,size=0x28) addr:0x020f7438 _ZN19ActorProfileUnkTGTZD1Ev kind:function(arm,size=0x14) addr:0x020f7460 func_ov031_020f7474 kind:function(arm,size=0x20) addr:0x020f7474 func_ov031_020f7494 kind:function(arm,size=0x40) addr:0x020f7494 @@ -2086,7 +2086,7 @@ __sinit_ActorPot.cpp kind:function(arm,size=0x50) addr:0x021114a8 __sinit_ActorUnkNITF.cpp kind:function(arm,size=0x50) addr:0x021114f8 __sinit_ActorShotArrow.cpp kind:function(arm,size=0x50) addr:0x02111548 __sinit_ActorUnkATTG.cpp kind:function(arm,size=0x50) addr:0x02111598 -__sinit_ActorUnkNTTZ.cpp kind:function(arm,size=0x50) addr:0x021115e8 +__sinit_ActorUnkNTTZ.cpp kind:function(arm,size=0x50) addr:0x021115e8 local __sinit_ov031_02111638 kind:function(arm,size=0x24) addr:0x02111638 __sinit_ActorUnkTGTZ.cpp kind:function(arm,size=0x64) addr:0x0211165c __sinit_ActorUnkSWCH.cpp kind:function(arm,size=0x50) addr:0x021116c0 @@ -2150,7 +2150,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x02112724 .p__sinit_ActorUnkNITF.cpp kind:data(word) addr:0x021127d0 .p__sinit_ActorShotArrow.cpp kind:data(word) addr:0x021127d4 .p__sinit_ActorUnkATTG.cpp kind:data(word) addr:0x021127d8 -.p__sinit_ActorUnkNTTZ.cpp kind:data(word) addr:0x021127dc +.p__sinit_ActorUnkNTTZ.cpp kind:data(word) addr:0x021127dc local .p__sinit_ov031_02111638 kind:data(word) addr:0x021127e0 .p__sinit_ActorUnkTGTZ.cpp kind:data(word) addr:0x021127e4 .p__sinit_ActorUnkSWCH.cpp kind:data(word) addr:0x021127e8 @@ -2359,15 +2359,15 @@ _ZTV19data_ov031_02114424 kind:data(any) addr:0x0211441c _ZTV19data_ov031_02114438 kind:data(any) addr:0x02114438 data_ov031_0211449c kind:data(any) addr:0x0211449c _ZTV19data_ov031_021144a0 kind:data(any) addr:0x021144a0 -_ZTV19data_ov031_02114504 kind:data(any) addr:0x02114504 -_ZTV19data_ov031_02114528 kind:data(any) addr:0x02114528 +_ZTV19ActorProfileUnkNTTZ kind:data(any) addr:0x02114504 +_ZTV12ActorUnkNTTZ kind:data(any) addr:0x02114528 data_ov031_02114584 kind:data(any) addr:0x02114584 -data_ov031_02114594 kind:data(any) addr:0x02114594 +_ZTV19data_ov031_02114594 kind:data(any) addr:0x0211458c data_ov031_021145a4 kind:data(any) addr:0x021145a4 -data_ov031_021145a8 kind:data(any) addr:0x021145a8 -_ZTV19data_ov031_021145b0 kind:data(any) addr:0x021145b0 -data_ov031_021145dc kind:data(any) addr:0x021145dc -_ZTV19data_ov031_02114600 kind:data(any) addr:0x02114600 +@3969 kind:data(byte[7]) addr:0x021145a8 +_ZTV19ActorProfileUnkTGTZ kind:data(any) addr:0x021145b0 +_ZTV24ActorUnkTGTZ_ModelRender kind:data(any) addr:0x021145d4 +_ZTV12ActorUnkTGTZ kind:data(any) addr:0x02114600 _ZTV19data_ov031_0211465c kind:data(any) addr:0x0211465c _ZTV19data_ov031_021146b8 kind:data(any) addr:0x021146b8 ambiguous _ZTV19data_ov031_02114718 kind:data(any) addr:0x02114718 ambiguous @@ -2574,7 +2574,7 @@ _ZGVN15ProfileInstanceI19ActorProfileUnkATTGE8sProfileE kind:bss addr:0x02116abc @10866 kind:bss addr:0x02116ac0 _ZN15ProfileInstanceI19ActorProfileUnkATTGE8sProfileE kind:bss addr:0x02116acc _ZGVN15ProfileInstanceI19ActorProfileUnkNTTZE8sProfileE kind:bss addr:0x02116b08 -@10872 kind:bss addr:0x02116b0c +@10872 kind:bss addr:0x02116b0c local _ZN15ProfileInstanceI19ActorProfileUnkNTTZE8sProfileE kind:bss addr:0x02116b18 data_ov031_02116b54 kind:bss addr:0x02116b54 data_ov031_02116b58 kind:bss addr:0x02116b58 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index c89a27af..5e49b683 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -1050,7 +1050,7 @@ func_ov000_02072c4c kind:function(arm,size=0x7c) addr:0x02072c4c func_ov000_02072cc8 kind:function(arm,size=0x4c) addr:0x02072cc8 func_ov000_02072d14 kind:function(arm,size=0x2c) addr:0x02072d14 func_ov000_02072d40 kind:function(arm,size=0x54) addr:0x02072d40 -func_ov000_02072d94 kind:function(arm,size=0x24) addr:0x02072d94 +_ZN18UnkStruct_027e09a819func_ov000_020716dcEi kind:function(arm,size=0x24) addr:0x02072d94 func_ov000_02072db8 kind:function(arm,size=0x48) addr:0x02072db8 func_ov000_02072e00 kind:function(arm,size=0x2c) addr:0x02072e00 func_ov000_02072e2c kind:function(arm,size=0x58) addr:0x02072e2c @@ -2319,7 +2319,7 @@ _ZN5Actor8vfunc_20Ev kind:function(arm,size=0x4) addr:0x02099c5c _ZN5Actor8vfunc_24Ev kind:function(arm,size=0x4) addr:0x02099c60 _ZN5Actor8vfunc_28Ev kind:function(arm,size=0x4) addr:0x02099c64 _ZN5Actor8vfunc_2CEi kind:function(arm,size=0x4) addr:0x02099c68 -_ZN5Actor8vfunc_30Ev kind:function(arm,size=0x4) addr:0x02099c6c +_ZN5Actor8vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0x4) addr:0x02099c6c _ZN5Actor8vfunc_34Ev kind:function(arm,size=0x8) addr:0x02099c70 _ZN5Actor19func_ov000_020984d0Ev kind:function(arm,size=0x20) addr:0x02099c78 _ZN5Actor19func_ov000_020984f0Ev kind:function(arm,size=0x28) addr:0x02099c98 @@ -2350,7 +2350,7 @@ _ZN5Actor19func_ov000_02098b8cEii kind:function(arm,size=0x1a8) addr:0x0209a334 func_ov000_0209a4dc kind:function(arm,size=0x6c) addr:0x0209a4dc func_ov000_0209a548 kind:function(arm,size=0x1b8) addr:0x0209a548 func_ov000_0209a700 kind:function(arm,size=0xd0) addr:0x0209a700 -_ZN14Actor_Derived28vfunc_30Ev kind:function(arm,size=0xc) addr:0x0209a7d0 +_ZN14Actor_Derived28vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0xc) addr:0x0209a7d0 func_ov000_0209a7dc kind:function(arm,size=0xb0) addr:0x0209a7dc func_ov000_0209a88c kind:function(arm,size=0x21c) addr:0x0209a88c func_ov000_0209aaa8 kind:function(arm,size=0x90) addr:0x0209aaa8 diff --git a/config/jp/arm9/overlays/ov017/symbols.txt b/config/jp/arm9/overlays/ov017/symbols.txt index 5373cd82..faab24f3 100644 --- a/config/jp/arm9/overlays/ov017/symbols.txt +++ b/config/jp/arm9/overlays/ov017/symbols.txt @@ -83,7 +83,7 @@ _ZN5Actor8vfunc_14Ev kind:function(arm,size=0x4c) addr:0x020c157c func_ov017_020c15c8 kind:function(arm,size=0x130) addr:0x020c15c8 _ZN5Actor8vfunc_48Ev kind:function(arm,size=0x80) addr:0x020c16f8 _ZN14ActorEventIcon8vfunc_24Ev kind:function(arm,size=0xc) addr:0x020c1778 -_ZN14ActorEventIcon8vfunc_30Ev kind:function(arm,size=0xd4) addr:0x020c1784 +_ZN14ActorEventIcon8vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0xd4) addr:0x020c1784 func_ov017_020c1858 kind:function(arm,size=0x50) addr:0x020c1858 func_ov017_020c18a8 kind:function(arm,size=0x60) addr:0x020c18a8 func_ov017_020c1908 kind:function(arm,size=0xec) addr:0x020c1908 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index 722249ce..6ecdd2ae 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -109,15 +109,18 @@ src/031_Land/Actor/ActorUnkATTG.cpp: .bss start:0x0211885c end:0x021188a8 src/031_Land/Actor/ActorUnkNTTZ.cpp: + complete .text start:0x020f7ba8 end:0x020f7d24 .init start:0x02113358 end:0x021133a8 .ctor start:0x02114568 end:0x0211456c + .data start:0x021162a4 end:0x02116324 .bss start:0x021188a8 end:0x02118904 src/031_Land/Actor/ActorUnkTGTZ.cpp: .text start:0x020f82d4 end:0x020f8ea4 .init start:0x021133cc end:0x0211344c .ctor start:0x02114570 end:0x02114574 + .data start:0x02116344 end:0x021163d0 .bss start:0x02118904 end:0x021189f4 src/031_Land/Actor/ActorUnkSWCH.cpp: diff --git a/config/jp/arm9/overlays/ov031/relocs.txt b/config/jp/arm9/overlays/ov031/relocs.txt index 8e383ba9..203085d6 100644 --- a/config/jp/arm9/overlays/ov031/relocs.txt +++ b/config/jp/arm9/overlays/ov031/relocs.txt @@ -3235,7 +3235,7 @@ from:0x020f7ce8 kind:arm_call to:0x02099c30 module:overlay(0) from:0x020f7cfc kind:arm_call to:0x02099c30 module:overlay(0) from:0x020f7d04 kind:arm_call to:0x02011ff4 module:main from:0x020f7d18 kind:arm_call to:0x02098ecc module:overlay(0) -from:0x020f7d7c kind:load to:0x02116334 module:overlay(31) +from:0x020f7d7c kind:load to:0x0211632c module:overlay(31) add:0x8 from:0x020f7d80 kind:load to:0x02116324 module:overlay(31) from:0x020f7ddc kind:arm_call to:0x01fff3b4 module:itcm from:0x020f7dfc kind:arm_call to:0x020731e8 module:overlay(0) diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index f6beff85..58287885 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -995,9 +995,9 @@ _ZN19ActorProfileUnkNTTZ10GetProfileEv kind:function(arm,size=0xc) addr:0x020f7b _ZN19ActorProfileUnkNTTZ6CreateEv kind:function(arm,size=0x24) addr:0x020f7bb4 _ZN19ActorProfileUnkNTTZC1Ev kind:function(arm,size=0x28) addr:0x020f7bd8 _ZN12ActorUnkNTTZC1Ev kind:function(arm,size=0x30) addr:0x020f7c00 -_ZN12ActorUnkNTTZ19func_ov031_020f6190Ev kind:function(arm,size=0x8) addr:0x020f7c30 -_ZN12ActorUnkNTTZ19func_ov031_020f6198Ev kind:function(arm,size=0x4) addr:0x020f7c38 -_ZN12ActorUnkNTTZ19func_ov031_020f619cEv kind:function(arm,size=0x4) addr:0x020f7c3c +_ZN12ActorUnkNTTZ8vfunc_18Ei kind:function(arm,size=0x8) addr:0x020f7c30 +_ZN12ActorUnkNTTZ8vfunc_20Ev kind:function(arm,size=0x4) addr:0x020f7c38 +_ZN12ActorUnkNTTZ8vfunc_2CEi kind:function(arm,size=0x4) addr:0x020f7c3c _ZN12ActorUnkNTTZ19func_ov031_020f61a0Ev kind:function(arm,size=0x50) addr:0x020f7c40 _ZN12ActorUnkNTTZ19func_ov031_020f61f0Ev kind:function(arm,size=0x50) addr:0x020f7c90 _ZN12ActorUnkNTTZD1Ev kind:function(arm,size=0x14) addr:0x020f7ce0 @@ -1021,14 +1021,14 @@ _ZN19ActorProfileUnkTGTZ10GetProfileEv kind:function(arm,size=0xc) addr:0x020f82 _ZN19ActorProfileUnkTGTZ6CreateEv kind:function(arm,size=0x24) addr:0x020f82e0 _ZN19ActorProfileUnkTGTZC1Ev kind:function(arm,size=0x44) addr:0x020f8304 _ZN12ActorUnkTGTZC1Ev kind:function(arm,size=0xd4) addr:0x020f8348 -_ZN12ActorUnkTGTZ19func_ov031_020f6998Ev kind:function(arm,size=0x148) addr:0x020f841c -_ZN12ActorUnkTGTZ19func_ov031_020f6ae4Ev kind:function(arm,size=0x354) addr:0x020f8564 -_ZN12ActorUnkTGTZ19func_ov031_020f6e48Ev kind:function(arm,size=0x14) addr:0x020f88b8 -_ZN12ActorUnkTGTZ19func_ov031_020f6e5cEv kind:function(arm,size=0x4c) addr:0x020f88cc -_ZN12ActorUnkTGTZ19func_ov031_020f6ea8Ev kind:function(arm,size=0x78) addr:0x020f8918 -_ZN12ActorUnkTGTZ19func_ov031_020f6f20Ev kind:function(arm,size=0x22c) addr:0x020f8990 -_ZN12ActorUnkTGTZ19func_ov031_020f7170Ev kind:function(arm,size=0x138) addr:0x020f8bbc -_ZN12ActorUnkTGTZ19func_ov031_020f72a8Ev kind:function(arm,size=0xb0) addr:0x020f8cf4 +_ZN12ActorUnkTGTZ8vfunc_18Ei kind:function(arm,size=0x148) addr:0x020f841c +_ZN12ActorUnkTGTZ8vfunc_20Ev kind:function(arm,size=0x354) addr:0x020f8564 +_ZN12ActorUnkTGTZ8vfunc_24Ev kind:function(arm,size=0x14) addr:0x020f88b8 +_ZN12ActorUnkTGTZ19func_ov031_020f6e5cE8ActorRef kind:function(arm,size=0x4c) addr:0x020f88cc +_ZN12ActorUnkTGTZ19func_ov031_020f6ea8EP8ActorReftPK7VecFx32st kind:function(arm,size=0x78) addr:0x020f8918 +_ZN12ActorUnkTGTZ19func_ov031_020f6f20Ei kind:function(arm,size=0x22c) addr:0x020f8990 +_ZN12ActorUnkTGTZ8vfunc_30EP14Actor_vfunc_30 kind:function(arm,size=0x138) addr:0x020f8bbc +_ZN12ActorUnkTGTZ8vfunc_2CEi kind:function(arm,size=0xb0) addr:0x020f8cf4 _ZN12ActorUnkTGTZ19func_ov031_020f7358Ev kind:function(arm,size=0x8c) addr:0x020f8da4 _ZN12ActorUnkTGTZ19func_ov031_020f73e4Ev kind:function(arm,size=0xc) addr:0x020f8e30 _ZN12ActorUnkTGTZ19func_ov031_020f73f0Ev kind:function(arm,size=0xc) addr:0x020f8e3c @@ -2083,7 +2083,7 @@ __sinit_ActorPot.cpp kind:function(arm,size=0x50) addr:0x02113218 __sinit_ActorUnkNITF.cpp kind:function(arm,size=0x50) addr:0x02113268 __sinit_ActorShotArrow.cpp kind:function(arm,size=0x50) addr:0x021132b8 __sinit_ActorUnkATTG.cpp kind:function(arm,size=0x50) addr:0x02113308 -__sinit_ActorUnkNTTZ.cpp kind:function(arm,size=0x50) addr:0x02113358 +__sinit_ActorUnkNTTZ.cpp kind:function(arm,size=0x50) addr:0x02113358 local __sinit_ov031_021133a8 kind:function(arm,size=0x24) addr:0x021133a8 __sinit_ActorUnkTGTZ.cpp kind:function(arm,size=0x80) addr:0x021133cc __sinit_ActorUnkSWCH.cpp kind:function(arm,size=0x50) addr:0x0211344c @@ -2147,7 +2147,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x021144b0 .p__sinit_ActorUnkNITF.cpp kind:data(word) addr:0x0211455c .p__sinit_ActorShotArrow.cpp kind:data(word) addr:0x02114560 .p__sinit_ActorUnkATTG.cpp kind:data(word) addr:0x02114564 -.p__sinit_ActorUnkNTTZ.cpp kind:data(word) addr:0x02114568 +.p__sinit_ActorUnkNTTZ.cpp kind:data(word) addr:0x02114568 local .p__sinit_ov031_021133a8 kind:data(word) addr:0x0211456c .p__sinit_ActorUnkTGTZ.cpp kind:data(word) addr:0x02114570 .p__sinit_ActorUnkSWCH.cpp kind:data(word) addr:0x02114574 @@ -2356,13 +2356,13 @@ _ZTV19data_ov031_021161c4 kind:data(any) addr:0x021161bc _ZTV19data_ov031_021161d8 kind:data(any) addr:0x021161d8 data_ov031_0211623c kind:data(any) addr:0x0211623c _ZTV19data_ov031_02116240 kind:data(any) addr:0x02116240 -_ZTV19data_ov031_021162a4 kind:data(any) addr:0x021162a4 -_ZTV19data_ov031_021162c8 kind:data(any) addr:0x021162c8 +_ZTV19ActorProfileUnkNTTZ kind:data(any) addr:0x021162a4 +_ZTV12ActorUnkNTTZ kind:data(any) addr:0x021162c8 data_ov031_02116324 kind:data(any) addr:0x02116324 -data_ov031_02116334 kind:data(any) addr:0x02116334 +_ZTV19data_ov031_02116334 kind:data(any) addr:0x0211632c data_ov031_02116344 kind:data(any) addr:0x02116344 -_ZTV19data_ov031_02116350 kind:data(any) addr:0x02116350 -_ZTV19data_ov031_02116374 kind:data(any) addr:0x02116374 +_ZTV19ActorProfileUnkTGTZ kind:data(any) addr:0x02116350 +_ZTV12ActorUnkTGTZ kind:data(any) addr:0x02116374 _ZTV19data_ov031_021163d0 kind:data(any) addr:0x021163d0 _ZTV19data_ov031_0211642c kind:data(any) addr:0x0211642c ambiguous _ZTV19data_ov031_0211648c kind:data(any) addr:0x0211648c ambiguous @@ -2569,10 +2569,10 @@ _ZGVN15ProfileInstanceI19ActorProfileUnkATTGE8sProfileE kind:bss addr:0x0211885c @30866 kind:bss addr:0x02118860 _ZN15ProfileInstanceI19ActorProfileUnkATTGE8sProfileE kind:bss addr:0x0211886c _ZGVN15ProfileInstanceI19ActorProfileUnkNTTZE8sProfileE kind:bss addr:0x021188a8 -@30872 kind:bss addr:0x021188ac +@30872 kind:bss addr:0x021188ac local _ZN15ProfileInstanceI19ActorProfileUnkNTTZE8sProfileE kind:bss addr:0x021188b8 -data_ov031_021188f4 kind:bss addr:0x021188f4 -data_ov031_021188f8 kind:bss addr:0x021188f8 +data_ov031_02116b54 kind:bss addr:0x021188f4 +data_ov031_02116b58 kind:bss addr:0x021188f8 _ZGVN15ProfileInstanceI19ActorProfileUnkTGTZE8sProfileE kind:bss addr:0x02118904 @30878 kind:bss addr:0x02118910 _ZN15ProfileInstanceI19ActorProfileUnkTGTZE8sProfileE kind:bss addr:0x0211891c diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index fa47a118..87bd82ab 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -118,6 +118,12 @@ public: /* 0A */ }; +class Actor_vfunc_30 { +public: + /* 00 */ s8 mUnk_00; + /* 01 */ s8 mUnk_01; +}; + typedef s16 ActorState; #define ActorState_None -1 @@ -162,7 +168,7 @@ public: /* 24 */ virtual void vfunc_24(); /* 28 */ virtual void vfunc_28(); /* 2C */ virtual void vfunc_2C(unk32 param1); - /* 30 */ virtual void vfunc_30(); + /* 30 */ virtual void vfunc_30(Actor_vfunc_30 *param1); /* 34 */ virtual unk32 vfunc_34(); /* 38 */ virtual bool Grab(ActorGrabParams grabParams); /* 3C */ virtual bool Drop(ActorGrabParams grabParams, const VecFx32 *pVel); @@ -288,7 +294,7 @@ public: Actor_Derived2(); - /* 30 */ virtual void vfunc_30(); + /* 30 */ virtual void vfunc_30(Actor_vfunc_30 *param1); /* 4C */ WEAK virtual ~Actor_Derived2() {} /* 54 */ virtual void vfunc_54(); }; diff --git a/include/Actor/ActorEventIcon.hpp b/include/Actor/ActorEventIcon.hpp index 70e21da0..187e9076 100644 --- a/include/Actor/ActorEventIcon.hpp +++ b/include/Actor/ActorEventIcon.hpp @@ -18,7 +18,7 @@ public: /* 18 */ virtual bool vfunc_18(unk32 param1) override; /* 20 */ virtual void vfunc_20() override; /* 24 */ virtual void vfunc_24() override; - /* 30 */ virtual void vfunc_30() override; + /* 30 */ virtual void vfunc_30(Actor_vfunc_30 *param1) override; /* 4C */ virtual ~ActorEventIcon() override; void func_ov000_0209c014(void); diff --git a/include/Actor/ActorUnkNTTZ.hpp b/include/Actor/ActorUnkNTTZ.hpp index 1c3728e1..c82cab02 100644 --- a/include/Actor/ActorUnkNTTZ.hpp +++ b/include/Actor/ActorUnkNTTZ.hpp @@ -1,5 +1,3 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "Actor/Actor.hpp" @@ -7,30 +5,20 @@ #include "global.h" #include "types.h" -class ActorUnkNTTZ_C4 : public Actor_C4 { -public: - ActorUnkNTTZ_C4(Actor *param1); - - /* 00 */ virtual bool vfunc_00(ActorRef ref, unk32 param2) override; - /* 04 */ virtual bool vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0C(unk32 param1) override; -}; - class ActorUnkNTTZ : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ unk32 mUnk_94; + /* 98 */ ActorUnkNTTZ(); - /* 4C */ virtual ~ActorUnkNTTZ() override; + /* 18 */ virtual bool vfunc_18(unk32 param1) override; + /* 20 */ virtual void vfunc_20() override; + /* 2C */ virtual void vfunc_2C(unk32 param1) override; - void func_ov031_020f6190(void); - void func_ov031_020f6198(void); - void func_ov031_020f619c(void); - void func_ov031_020f61a0(void); - void func_ov031_020f61f0(void); + void func_ov031_020f61a0(); + void func_ov031_020f61f0(); }; class ActorProfileUnkNTTZ : public ActorProfile { @@ -38,7 +26,6 @@ public: /* 00 (base) */ ActorProfileUnkNTTZ(); - ~ActorProfileUnkNTTZ(); /* 0C */ virtual Actor *Create(); diff --git a/include/Actor/ActorUnkTGTZ.hpp b/include/Actor/ActorUnkTGTZ.hpp index c8232abb..8ea5fbda 100644 --- a/include/Actor/ActorUnkTGTZ.hpp +++ b/include/Actor/ActorUnkTGTZ.hpp @@ -1,44 +1,70 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "ActorUnkNTTZ.hpp" #include "global.h" #include "types.h" -class ActorUnkTGTZ_C4 : public Actor_C4 { +class ActorUnkTGTZ_ModelRender : public ModelRender_Derived1 { public: - ActorUnkTGTZ_C4(Actor *param1); + /* 00 (base) */ + /* 6C */ - /* 00 */ virtual bool vfunc_00(ActorRef ref, unk32 param2) override; - /* 04 */ virtual bool vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0C(unk32 param1) override; + ActorUnkTGTZ_ModelRender(G3d_Model *pModel, unk32 param2, void *param3) : + ModelRender_Derived1(pModel, param2, param3) {} }; class ActorUnkTGTZ : public Actor { public: - /* 00 (base) */ - /* 94 */ + /* 000 (base) */ +#if IS_JP + /* 094 */ UnkSystem6_Derived2 mUnk_094; + /* 09C */ bool mUnk_09C; +#else + /* 094 */ ActorUnkTGTZ_ModelRender mUnk_094; + /* 100 */ STRUCT_PAD(0x100, 0x190); +#endif + /* 190 */ Mat3p mUnk_190; + /* 1B4 */ ActorUnkNTTZ *mUnk_1B4; + /* 1B8 */ unk32 mUnk_1B8; + /* 1BC */ unk32 mUnk_1BC; + /* 1C0 */ volatile u16 mUnk_1C0; + /* 1C2 */ u16 mUnk_1C2; + /* 1CC */ fx32 mUnk_1C4; + /* 1C8 */ UnkStruct_ov019_020d24c8_28_258_00 *mUnk_1C8; + /* 1CC */ unk32 mUnk_1CC; + /* 1D0 */ volatile u16 mUnk_1D0; + /* 1D2 */ u16 mUnk_1D2; + /* 1D4 */ u16 mUnk_1D4; + /* 1D6 */ u16 mUnk_1D6; + /* 1D8 */ bool mUnk_1D8; + /* 1DC */ ActorRef mUnk_1DC; + /* 1E0 */ ActorUnkTGTZ(); - /* 4C */ virtual ~ActorUnkTGTZ() override; + /* 18 */ virtual bool vfunc_18(unk32 param1) override; + /* 20 */ virtual void vfunc_20() override; + /* 24 */ virtual void vfunc_24() override; + /* 30 */ virtual void vfunc_2C(unk32 param1) override; + /* 34 */ virtual void vfunc_30(Actor_vfunc_30 *param1) override; - void func_ov031_020f6984(void); - void func_ov031_020f6998(void); - void func_ov031_020f6ae4(void); - void func_ov031_020f6e48(void); - void func_ov031_020f6e5c(void); - void func_ov031_020f6ea8(void); - void func_ov031_020f6f20(void); - void func_ov031_020f7170(void); - void func_ov031_020f72a8(void); - void func_ov031_020f7358(void); - void func_ov031_020f73e4(void); - void func_ov031_020f73f0(void); - void func_ov031_020f7438(void); + bool IsInternalTimerOut() { + if (this->mUnk_1D0 < this->mUnk_1D2) { + ++this->mUnk_1D0; + return false; + } + return true; + } + + void func_ov031_020f6984(); + static void func_ov031_020f6e5c(ActorRef param1); + static void func_ov031_020f6ea8(ActorRef *param0, u16 param1, const VecFx32 *param2, s16 param3, u16 param4); + void func_ov031_020f6f20(unk32 param1); + void func_ov031_020f7358(); + void func_ov031_020f73e4(); + void func_ov031_020f73f0(); }; class ActorProfileUnkTGTZ : public ActorProfile_Derived1 { @@ -46,7 +72,6 @@ public: /* 00 (base) */ ActorProfileUnkTGTZ(); - ~ActorProfileUnkTGTZ(); /* 0C */ virtual Actor *Create(); diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index 62b9b96f..99e3e9e6 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -74,6 +74,7 @@ public: void func_ov000_02057c38(unk32 param1, unk32 param2); void func_ov000_02057d20(u8 numBones); void func_ov000_02057d3c(G3d_BoneMtxStruct *pCacheJntAnm); + void func_ov000_02057d9c(); void func_ov000_0209a7b8(void *param1, UnkSystem4_UnkCallback param2); void func_ov000_02057c98(UnkSystem5 *param1); }; @@ -186,7 +187,7 @@ public: /* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1) override; unk32 func_ov000_0205a778(const char *param1); - void *func_ov000_0205a7a8(unk32 param1); + VecFx32 *func_ov000_0205a7a8(unk32 param1); }; class ModelRender_Derived2 : public ModelRender_Derived1 { diff --git a/include/Unknown/Common.hpp b/include/Unknown/Common.hpp index 45663ad3..511d4aed 100644 --- a/include/Unknown/Common.hpp +++ b/include/Unknown/Common.hpp @@ -216,7 +216,7 @@ public: struct UnkStruct_ov019_020d24c8_28_258_00 { /* 00 */ void *mUnk_00; /* 04 */ unk32 mUnk_04; - /* 08 */ + /* 0C */ UnkStruct_ov019_020d24c8_28_258_00() {} @@ -889,7 +889,7 @@ struct UnkStruct_StackTitleScreen { class MapObject; struct UnkStackStruct1 { - /* 00 */ unk8 mUnk_00; + /* 00 */ u8 mUnk_00; /* 01 */ unk8 mUnk_01; /* 02 */ unk8 mUnk_02; /* 03 */ unk8 mUnk_03; diff --git a/include/Unknown/UnkStruct_027e09a8.hpp b/include/Unknown/UnkStruct_027e09a8.hpp index f127d75e..8ebd91b4 100644 --- a/include/Unknown/UnkStruct_027e09a8.hpp +++ b/include/Unknown/UnkStruct_027e09a8.hpp @@ -7,6 +7,7 @@ class UnkStruct_027e09a8 : public AutoInstance { public: // overlay 0 void func_ov000_020713bc(); + void func_ov000_020716dc(unk32 param1); void func_ov000_02071b30(unk32 param1, VecFx32 *pPos, unk32 param3); void func_ov000_02071d34(void *param1, unk32 param2, VecFx32 *pPos, unk32 param4); void func_ov000_02071eac(VecFx32 *pPos); diff --git a/src/000_Second/Actor/Actor.cpp b/src/000_Second/Actor/Actor.cpp index 17779fbc..fedd0d84 100644 --- a/src/000_Second/Actor/Actor.cpp +++ b/src/000_Second/Actor/Actor.cpp @@ -60,7 +60,7 @@ void Actor::vfunc_28() {} void Actor::vfunc_2C(unk32 param1) {} -void Actor::vfunc_30() {} +void Actor::vfunc_30(Actor_vfunc_30 *param1) {} unk32 Actor::vfunc_34() { return 1; diff --git a/src/024_MainGame/Train/UnkStruct_027e0d00_20.cpp b/src/024_MainGame/Train/UnkStruct_027e0d00_20.cpp index 43450e0a..80ab014f 100644 --- a/src/024_MainGame/Train/UnkStruct_027e0d00_20.cpp +++ b/src/024_MainGame/Train/UnkStruct_027e0d00_20.cpp @@ -43,18 +43,18 @@ UnkStruct_027e0d00_20::UnkStruct_027e0d00_20(unk32 param1, unk32 param2) : void UnkStruct_027e0d00_20::func_ov024_020d4fa0(void *param1, unk32 param2) { u8 unknown[0x90]; ModelRender_Derived2 local_120(G3d_GetModelPtr(this->mUnk_50), 0x0C, unknown); - void *iVar2; - void *iVar3; - s32 temp; + VecFx32 *iVar2; + VecFx32 *iVar3; + fx32 temp; iVar2 = local_120.func_ov000_0205a7a8(local_120.func_ov000_0205a778("rear_point")); iVar3 = local_120.func_ov000_0205a7a8(local_120.func_ov000_0205a778("front_point")); - temp = (*(u32 *) ((u8 *) iVar3 + 8)) - (*(u32 *) ((u8 *) iVar2 + 8)); + temp = iVar3->z - iVar2->z; this->mUnk_B0 = temp; iVar2 = local_120.func_ov000_0205a7a8(local_120.func_ov000_0205a778("rear_point")); iVar3 = local_120.func_ov000_0205a7a8(local_120.func_ov000_0205a778("front_point")); - temp = (*(u32 *) ((u8 *) iVar3 + 8)) + (*(u32 *) ((u8 *) iVar2 + 8)); + temp = iVar3->z + iVar2->z; this->mUnk_B4 = temp / 2; if (*(volatile unk32 *) &this->mUnk_94 != 0) { diff --git a/src/024_MainGame/Train/UnkTrainSystem2_024.cpp b/src/024_MainGame/Train/UnkTrainSystem2_024.cpp index 71c73e45..de2e779c 100644 --- a/src/024_MainGame/Train/UnkTrainSystem2_024.cpp +++ b/src/024_MainGame/Train/UnkTrainSystem2_024.cpp @@ -43,7 +43,7 @@ UnkTrainSystem2::UnkTrainSystem2() : UnkTrainSystem2::~UnkTrainSystem2() {} -extern "C" void func_01ff916c(void *, int, int); +extern "C" bool func_01ff916c(void *, int, int); void UnkTrainSystem2::func_ov024_020d5990() { if (this->func_ov024_020d5c40()) { diff --git a/src/031_Land/Actor/ActorUnkNTTZ.cpp b/src/031_Land/Actor/ActorUnkNTTZ.cpp index f311ab63..85f2da40 100644 --- a/src/031_Land/Actor/ActorUnkNTTZ.cpp +++ b/src/031_Land/Actor/ActorUnkNTTZ.cpp @@ -1,10 +1,14 @@ -//! TODO: This file was generated automatically and might contain errors - #include "Actor/ActorUnkNTTZ.hpp" + +#include "Actor/ActorManager.hpp" +#include "Actor/ActorUnkTGTZ.hpp" #include "System/SysNew.hpp" DECL_PROFILE(ActorProfileUnkNTTZ); +unk32 data_ov031_02116b58[0x3]; +unk32 data_ov031_02116b54; + Actor *ActorProfileUnkNTTZ::Create() { return new(HeapIndex_2) ActorUnkNTTZ(); } @@ -12,13 +16,41 @@ Actor *ActorProfileUnkNTTZ::Create() { ActorProfileUnkNTTZ::ActorProfileUnkNTTZ() : ActorProfile(ActorId_NTTZ) {} -ActorUnkNTTZ::ActorUnkNTTZ() {} +ActorUnkNTTZ::ActorUnkNTTZ() : + mUnk_94(0x0) { + this->func_ov000_0209862c(0x0); +} -void ActorUnkNTTZ::func_ov031_020f6190(void) {} -void ActorUnkNTTZ::func_ov031_020f6198(void) {} -void ActorUnkNTTZ::func_ov031_020f619c(void) {} -void ActorUnkNTTZ::func_ov031_020f61a0(void) {} -void ActorUnkNTTZ::func_ov031_020f61f0(void) {} +bool ActorUnkNTTZ::vfunc_18(unk32 param1) { + return true; +} -ActorUnkNTTZ::~ActorUnkNTTZ() {} -ActorProfileUnkNTTZ::~ActorProfileUnkNTTZ() {} +void ActorUnkNTTZ::vfunc_20() {} + +void ActorUnkNTTZ::vfunc_2C(unk32 param1) {} + +void ActorUnkNTTZ::func_ov031_020f61a0() { + if (this->mUnk_5C.mUnk_28.type == 0x0) { + return; + } + + ActorUnkTGTZ *actorTGTZ = (ActorUnkTGTZ *) gpActorManager->func_01fff3b4(this->mUnk_5C.mUnk_28); + if (actorTGTZ == NULL || actorTGTZ->GetActorId() != ActorId_TGTZ) { + return; + } + + actorTGTZ->func_ov031_020f73e4(); +} + +void ActorUnkNTTZ::func_ov031_020f61f0() { + if (this->mUnk_5C.mUnk_28.type == 0x0) { + return; + } + + ActorUnkTGTZ *actorTGTZ = (ActorUnkTGTZ *) gpActorManager->func_01fff3b4(this->mUnk_5C.mUnk_28); + if (actorTGTZ == NULL || actorTGTZ->GetActorId() != ActorId_TGTZ) { + return; + } + + actorTGTZ->func_ov031_020f73f0(); +} diff --git a/src/031_Land/Actor/ActorUnkTGTZ.cpp b/src/031_Land/Actor/ActorUnkTGTZ.cpp index 4115e837..248a1aa9 100644 --- a/src/031_Land/Actor/ActorUnkTGTZ.cpp +++ b/src/031_Land/Actor/ActorUnkTGTZ.cpp @@ -1,7 +1,40 @@ -//! TODO: This file was generated automatically and might contain errors - #include "Actor/ActorUnkTGTZ.hpp" + +#include "Actor/ActorManager.hpp" +#include "Actor/ActorUnkNTTZ.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_0204af1c.hpp" +#include "Unknown/UnkStruct_027e0998.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e09b8.hpp" + +struct UnkStruct_ov000_02077590 { + /* 00 */ s16 mUnk_00; + /* 02 */ s16 mUnk_02; + /* 04 */ s16 mUnk_04; + /* 06 */ s16 mUnk_06; + /* 08 */ unk32 mUnk_08; + /* 0C */ VecFx32 mUnk_0C; + /* 18 */ u16 mUnk_18; + /* 1A */ u16 mUnk_1A; + /* 1C */ u16 mUnk_1C; + /* 1E */ u16 mUnk_1E; +}; + +extern "C" bool func_01ff916c(void *, int, int); +extern "C" void func_01ff9638(VecFx32 *, s16); +extern "C" void func_01ffa7a0(VecFx32 *, Mat3p *, VecFx32 *); +extern "C" void func_ov000_02072fd0(UnkStackStruct1 *); +extern "C" UnkStruct_ov000_02077590 *func_ov000_02077590(unk32); + +#if IS_JP +static const Vec3p data_ov031_02116344(FLOAT_TO_FX32(1.5f), FLOAT_TO_FX32(2.0f), FLOAT_TO_FX32(0.0f)); +#else +static unk32 data_ov031_02114584[0x2] = {0}; +static const char *data_ov031_021145a4 = "target"; +#endif +unk32 data_ov031_02116b54 = 0x0; +UnkStruct_ov019_020d24c8_28_258_00 data_ov031_02116b58(NULL, 0); DECL_PROFILE(ActorProfileUnkTGTZ); @@ -10,23 +43,391 @@ Actor *ActorProfileUnkTGTZ::Create() { } ActorProfileUnkTGTZ::ActorProfileUnkTGTZ() : - ActorProfile_Derived1(ActorId_TGTZ) {} + ActorProfile_Derived1(ActorId_TGTZ) { + this->mUnk_04.Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(2.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.5f)); +} -ActorUnkTGTZ::ActorUnkTGTZ() {} +// non-matching +ActorUnkTGTZ::ActorUnkTGTZ() : +#if IS_JP + mUnk_094(NULL), + mUnk_09C(true), +#else + mUnk_094(NULL, 0xC, NULL), +#endif + mUnk_1B4(NULL), + mUnk_1B8(0x0), + mUnk_1BC(-0x1), + mUnk_1C0(0x0), + mUnk_1C2(0x0), + mUnk_1C4(FLOAT_TO_FX32(0.0f)), + mUnk_1CC(0x0), + mUnk_1D0(0x0), + mUnk_1D2(0x0), + mUnk_1D4(0x0), + mUnk_1D6(0x0), + mUnk_1D8(false), + mUnk_1DC(0x0) { + Mat3p_InitIdentity(&this->mUnk_190); + this->func_ov000_0209862c(0x0); +} -void ActorUnkTGTZ::func_ov031_020f6984(void) {} -void ActorUnkTGTZ::func_ov031_020f6998(void) {} -void ActorUnkTGTZ::func_ov031_020f6ae4(void) {} -void ActorUnkTGTZ::func_ov031_020f6e48(void) {} -void ActorUnkTGTZ::func_ov031_020f6e5c(void) {} -void ActorUnkTGTZ::func_ov031_020f6ea8(void) {} -void ActorUnkTGTZ::func_ov031_020f6f20(void) {} -void ActorUnkTGTZ::func_ov031_020f7170(void) {} -void ActorUnkTGTZ::func_ov031_020f72a8(void) {} -void ActorUnkTGTZ::func_ov031_020f7358(void) {} -void ActorUnkTGTZ::func_ov031_020f73e4(void) {} -void ActorUnkTGTZ::func_ov031_020f73f0(void) {} -void ActorUnkTGTZ::func_ov031_020f7438(void) {} +// non-matching +void ActorUnkTGTZ::func_ov031_020f6984() {} -ActorUnkTGTZ::~ActorUnkTGTZ() {} -ActorProfileUnkTGTZ::~ActorProfileUnkTGTZ() {} +// non-matching +bool ActorUnkTGTZ::vfunc_18(unk32 param1) { + if (this->mUnk_5C.mUnk_1A[0] != 0x0) { + this->mPos.y = MUL_FX32(this->mUnk_5C.mUnk_1A[0] << 0xC, 0x1333); + } + Mat3p_InitYRotation(&this->mUnk_190, SIN((u16) this->mAngle), COS((u16) this->mAngle)); + data_ov031_02116b58.func_ov000_0205fc20(0x5D, 0x32, NULL, NULL); + ((UnkStruct_ov019_020d24c8_28_258_00 *) GET_PROFILE(ActorProfileUnkNTTZ))->func_ov000_0205fc20(0x5D, 0x31, NULL, NULL); + + unk32 temp_r3_2 = this->mUnk_5C.mParams[1]; + unk32 temp_r0 = (u16) (((s16) this->mAngle + 0x2000)) >> 0xE; + if ((temp_r0 != 0) && (temp_r0 != 2)) { + this->mUnk_1C8 = (UnkStruct_ov019_020d24c8_28_258_00 *) GET_PROFILE(ActorProfileUnkNTTZ); + } else { + this->mUnk_1C8 = &data_ov031_02116b58; + } + if (temp_r3_2 != 0) { + unk32 temp_r1_3 = this->mUnk_5C.mParams[2]; + if (temp_r1_3 != 0) { + this->mUnk_1D4 = temp_r1_3; + } + this->mUnk_1CC = 1; + this->mUnk_1D6 = temp_r3_2; + if (temp_r1_3 == 0) { + this->mUnk_1D4 = temp_r3_2; + } + } + if (this->mUnk_5C.mUnk_1A[0] == 0 || !this->func_ov000_02098a60(0x0)) { + this->func_ov031_020f6f20(0x2); + } else { + this->func_ov031_020f6f20(0x0); + } + + return true; +} + +// non-matching +void ActorUnkTGTZ::vfunc_20() { + switch (this->mUnk_1B8) { + case 0x0: + if (!this->func_ov000_02098a60(0x0)) { + break; + } + UnkStackStruct1 stack; + func_ov000_02072fd0(&stack); + + stack.mUnk_08 = 0x4B; + stack.mUnk_00 = 0x80; + stack.mUnk_3A = 0x7; + + UnkStruct_ov000_02077590 *r3 = func_ov000_02077590(0x1); + stack.mUnk_18 = r3->mUnk_00; + stack.mUnk_1A = r3->mUnk_02; + stack.mUnk_1C = r3->mUnk_04; + stack.mUnk_1E = r3->mUnk_06; + stack.mUnk_20 = r3->mUnk_08; + + stack.mUnk_24 = r3->mUnk_0C; + + u16 unk_1A = r3->mUnk_1A; + u16 unk_18 = r3->mUnk_18; + stack.mUnk_30 = unk_18; + stack.mUnk_32 = unk_1A; + + u16 unk_1C = r3->mUnk_1C; + u16 unk_1E = r3->mUnk_1E; + stack.mUnk_36 = unk_1E; + stack.mUnk_34 = unk_1C; + stack.mUnk_38 |= 0x80; + + stack.mUnk_0C.x = this->mPos.x; + stack.mUnk_0C.y = this->mPos.y; + stack.mUnk_0C.z = this->mPos.z; + stack.mUnk_0C.y = this->mPos.y + FLOAT_TO_FX32(1.0f); + this->mUnk_1BC = data_027e09b8->func_ov000_02073388(&stack, 0x0); + this->func_ov031_020f6f20(0x1); + break; + case 0x2: + if (this->mUnk_5C.mUnk_1A[0] == 0x0) { + break; + } + if (this->func_ov000_02098a60(0x0)) { + break; + } + if (this->mUnk_1B4 != NULL) { + this->mUnk_1B4->func_ov000_020984d0(); + this->mUnk_1B4 = NULL; + } + this->func_ov031_020f6f20(0x0); + break; + case 0x1: + if (data_027e09b8->func_ov000_020732ec(this->mUnk_1BC) == 0x0) { + return; + } + u16 var1 = this->mUnk_1C2; + u16 var2 = this->mUnk_1C0; + if (var2 >= var1) { + data_027e09a8->func_ov000_02071b30(0xF0, &this->mPos, 0x0); + this->func_ov031_020f6f20(0x2); + if (!this->mUnk_5C.mUnk_0F) { + return; + } + data_027e09a8->func_ov000_020716dc(0x1E); + return; + } + if (var2 >= var1) { + func_01ff916c(&this->mUnk_1C4, 0x0, 0x333); + } + break; + case 0x3: + if (!this->IsInternalTimerOut()) { + break; + } + this->func_ov031_020f6f20(0x5); + break; + case 0x5: + if (this->mUnk_1D8) { + break; + } + if (!func_01ff916c(&this->mUnk_1C4, 0x1000, 0x19A)) { + break; + } + this->func_ov031_020f6f20(0x6); + break; + case 0x4: + if (this->mUnk_1D8) { + break; + } + if (!func_01ff916c(&this->mUnk_1C4, -0x1000, 0x19A)) { + break; + } + this->func_ov031_020f6f20(0x3); + break; + case 0x6: + if (!this->IsInternalTimerOut()) { + break; + } + this->func_ov031_020f6f20(0x4); + break; + default: + break; + } + if (this->mUnk_1CC == 0x1) { + ActorUnkNTTZ *actor = this->mUnk_1B4; + VecFx32 vecSp0C = actor->mPos; + vecSp0C.y = this->mPos.y + this->mUnk_1C4 + FLOAT_TO_FX32(1.5f); + + VecFx32 vecSp00 = vecSp0C; + VecFx32_Init(vecSp00.x, vecSp00.y, vecSp00.z, &actor->mPos); + VecFx32_Init(vecSp00.x, vecSp00.y, vecSp00.z, &actor->mPrevPos); + } + if (this->mUnk_1C0 < this->mUnk_1C2) { + ++this->mUnk_1C0; + } +} + +void ActorUnkTGTZ::vfunc_24() { + this->vfunc_20(); +} + +void ActorUnkTGTZ::func_ov031_020f6e5c(ActorRef param1) { + if (param1.type_index == 0x0) { + return; + } + Actor *actor = gpActorManager->func_01fff3b4(param1); + if (actor != NULL) { + UNSET_FLAG(actor->mFlags, ActorFlag_Alive); + } +} + +void ActorUnkTGTZ::func_ov031_020f6ea8(ActorRef *param0, u16 param1, const VecFx32 *param2, s16 param3, u16 param4) { + ActorParams params; + + params.mUnk_28 = 0; + params.func_ov000_020975f8(); + + params.mInitialPos.x = param2->x; + params.mInitialPos.y = param2->y; + params.mInitialPos.z = param2->z; + + params.mParams[0] = param1; + params.mParams[1] = param3; + params.mParams[2] = param4; + + Actor::func_ov000_020973f4(param0, &data_ov000_020b539c_eur, ActorId_EventIcon, ¶ms, 0); +} + +void ActorUnkTGTZ::func_ov031_020f6f20(unk32 param1) { + this->mUnk_1B8 = param1; + this->mUnk_1C2 = 0xFFFF; + this->mUnk_1C0 = 0x0; + + switch (param1) { + case 0x0: + this->mUnk_1BC = -0x1; + this->mUnk_1C4 = FLOAT_TO_FX32(3.0f); + UNSET_FLAG(this->mFlags, ActorFlag_Visible); + this->func_ov031_020f6e5c(this->mUnk_1DC); + this->mUnk_1DC = 0x0; + break; + case 0x1: + this->mUnk_1C2 = 0x1E; + this->mUnk_1C0 = 0x0; + SET_FLAG(this->mFlags, ActorFlag_Visible); + ActorRef ref; + this->func_ov031_020f6ea8(&ref, 0x0, &this->mPos, 0x0, 0x1); + this->mUnk_1DC = ref; + break; + case 0x2: + this->mUnk_1BC = -0x1; + this->mUnk_1C4 = FLOAT_TO_FX32(0.0f); + SET_FLAG(this->mFlags, ActorFlag_Visible); + + VecFx32 vec1; +#if IS_JP + func_01ffa7a0((VecFx32 *) &data_ov031_02116344, &this->mUnk_190, &vec1); +#else + this->mUnk_094.func_ov000_02057d9c(); + VecFx32 *pVec = this->mUnk_094.func_ov000_0205a7a8(this->mUnk_094.func_ov000_0205a778(data_ov031_021145a4)); + func_01ffa7a0(pVec, &this->mUnk_190, &vec1); +#endif + + vec1.y -= FLOAT_TO_FX32(0.5f); + + this->func_ov031_020f7358(); + + VecFx32 vec2; + vec2.x = vec1.x + this->mPos.x; + vec2.y = vec1.y + this->mPos.y; + vec2.z = vec1.z + this->mPos.z; + + VecFx32 vec3 = vec2; + + ActorUnkNTTZ *actor = this->mUnk_1B4; + VecFx32_Init(vec3.x, vec3.y, vec3.z, &actor->mPos); + VecFx32_Init(vec3.x, vec3.y, vec3.z, &actor->mPrevPos); + + if (this->mUnk_1CC != 0x1) { + break; + } + + this->func_ov031_020f6f20(0x3); + break; + case 0x3: + this->mUnk_1C4 = FLOAT_TO_FX32(-1.0002f); + SET_FLAG(this->mFlags, ActorFlag_Visible); + this->mUnk_1D2 = this->mUnk_1D4; + this->mUnk_1D0 = 0x0; + break; + case 0x5: + data_027e09a8->func_ov000_02071b30(0x10E, &this->mPos, 0x0); + break; + case 0x4: + data_027e09a8->func_ov000_02071b30(0x10F, &this->mPos, 0x0); + SET_FLAG(this->mFlags, ActorFlag_Visible); + break; + case 0x6: + this->mUnk_1C4 = FLOAT_TO_FX32(1.0f); + this->mUnk_1D2 = this->mUnk_1D6; + this->mUnk_1D0 = 0x0; + break; + default: + break; + } +} + +// non-matching +void ActorUnkTGTZ::vfunc_30(Actor_vfunc_30 *param1) { + if (this->mUnk_1B8 == 0x0) { + return; + } + unk32 var; + if (this->mUnk_1C8->mUnk_04 & 0x1) { + var = 0x1; + } else { + var = 0x0; + } + + if (param1->mUnk_00 != var || param1->mUnk_01 != var) { + return; + } + Vec2s vec2s; + + if (!data_027e0998->vfunc_00(&this->mPos, &vec2s, (u16 *) &this->mRef)) { + return; + } + + unk32 var_r5 = 0; + unk32 var_r6 = 0; + switch (((u16) (((s16) this->mAngle + 0x2000)) >> 0xE)) { + case 0x3: + var_r5 = 0x10000 >> 0x10; + break; + case 0x0: + var_r6 = -0x10000 >> 0x10; + break; + default: + break; + } + + data_027e0998->func_ov000_02061a70(); + + data_0204af1c.func_0201aa44(this->mUnk_1C8, NULL, 0x2, NULL); +} + +void ActorUnkTGTZ::vfunc_2C(unk32 param1) { + if (!this->func_01fff5d0(param1, 0x0)) { + return; + } + VecFx32 vec1; + + if (this->mUnk_1CC == 0x0) { + VecFx32_Init(-this->mUnk_1C4, FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &vec1); + func_01ff9638(&vec1, this->mAngle); + } else { + VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &vec1); + func_01ff9638(&vec1, this->mAngle); + vec1.y = this->mUnk_1C4; + } + + VecFx32 vec2 = this->mPos; + + VecFx32_Add(&vec2, &vec1, &vec2); + + this->mUnk_094.vfunc_14(&this->mUnk_190, &vec2); +} + +void ActorUnkTGTZ::func_ov031_020f7358() { + ActorParams params; + ActorRef ref; + + params.mUnk_28 = 0x0; + params.func_ov000_020975f8(); + + params.mInitialAngle = this->mAngle; + params.mUnk_28 = this->mRef; + + Actor::func_ov000_020973f4(&ref, &data_ov000_020b539c_eur, ActorId_NTTZ, ¶ms, 0x0); + + ActorUnkNTTZ *actor = (ActorUnkNTTZ *) gpActorManager->func_01fff3b4(ref); + this->mUnk_1B4 = actor; + + u16 value = this->mUnk_5C.mParams[0]; + if (value == 0x0) { + value = 0x2; + } + this->mUnk_1B4->mUnk_94 = value << 0xC; +} + +void ActorUnkTGTZ::func_ov031_020f73e4() { + this->mUnk_1D8 = true; +} + +void ActorUnkTGTZ::func_ov031_020f73f0() { + this->mUnk_1D8 = false; +} diff --git a/src/112_PlayerSceneChange/PlayerSceneChange.cpp b/src/112_PlayerSceneChange/PlayerSceneChange.cpp index b61ef973..68d2cc46 100644 --- a/src/112_PlayerSceneChange/PlayerSceneChange.cpp +++ b/src/112_PlayerSceneChange/PlayerSceneChange.cpp @@ -68,9 +68,9 @@ extern fx16 data_0203e964[]; extern fx16 data_02041964[]; extern fx16 data_0203f964[]; extern fx16 data_0203feb0[]; -extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, void *); -extern "C" void func_01ff9638(void *, s16); -extern "C" void func_01ff9770(void *); +extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, VecFx32 *); +extern "C" void func_01ff9638(VecFx32 *, s16); +extern "C" void func_01ff9770(VecFx32 *); extern unk32 data_ov000_020b3000; extern "C" bool func_ov000_02080998(VecFx32 *); extern "C" void func_01ff930c(UnkStruct_ov000_0208f820_40 *, unk16, unk32); @@ -213,11 +213,11 @@ void PlayerSceneChange::vfunc_0C(UnkStruct_PlayerGet_vfunc_0C_param1 *param1) { this->mUnk_AC = true; } - unk32 sp78; + VecFx32 sp78; unk16 temp_r8_2 = this->mUnk_A8 - 0x8000; func_01ffb714(this->mUnk_34, (VecFx32 *) &this->mUnk_70, &sp78); func_01ff9638(&sp78, -temp_r8_2); - this->mUnk_9C.x = -sp78; + this->mUnk_9C.x = -sp78.x; this->mUnk_9C.y = 0; this->mUnk_9C.z = 0; func_01ff9638(&this->mUnk_9C, temp_r8_2);