From 4a764f9d58cb16343c02afb3592aad7aabf66d6d Mon Sep 17 00:00:00 2001 From: Aetias Date: Tue, 18 Feb 2025 18:33:12 +0100 Subject: [PATCH] PlayerControl: Decomp 80% --- config/eur/arm9/overlays/ov000/symbols.txt | 16 +-- config/eur/arm9/overlays/ov014/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 16 +-- config/usa/arm9/overlays/ov014/symbols.txt | 2 +- include/Actor/Navi/ActorNaviBase.hpp | 2 +- include/DTCM/UnkStruct_027e0c68.hpp | 2 +- include/DTCM/UnkStruct_027e0ffc.hpp | 3 +- include/Map/MapManager.hpp | 2 +- include/Player/EquipItem.hpp | 2 +- include/Player/PlayerControl.hpp | 4 +- src/00_Core/Actor/Navi/ActorNaviBase.cpp | 2 +- src/00_Core/Map/MapManager.cpp | 2 +- src/00_Core/Player/EquipItem.cpp | 2 +- src/00_Core/Player/PlayerControl.cpp | 138 +++++++++++++-------- 14 files changed, 117 insertions(+), 78 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index db19cea9..03a85e3f 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -609,7 +609,7 @@ _ZN10MapManager18func_ov00_02083bd4Ev kind:function(arm,size=0x28) addr:0x2083bd _ZN10MapManager18func_ov00_02083bfcEv kind:function(arm,size=0x28) addr:0x2083bfc _ZN10MapManager18func_ov00_02083c24Ei kind:function(arm,size=0x2c) addr:0x2083c24 _ZN10MapManager18func_ov00_02083c50Ei kind:function(arm,size=0x2c) addr:0x2083c50 -_ZN10MapManager18func_ov00_02083c7cEP5Vec3pi kind:function(arm,size=0x6c) addr:0x2083c7c +_ZN10MapManager18func_ov00_02083c7cEP5Vec3p5Vec2b kind:function(arm,size=0x6c) addr:0x2083c7c _ZN10MapManager18func_ov00_02083ce8Ecccci kind:function(arm,size=0x14c) addr:0x2083ce8 _ZN10MapManager18func_ov00_02083e34Ecci kind:function(arm,size=0x24) addr:0x2083e34 _ZN10MapManager16MapData_vfunc_60Ev kind:function(arm,size=0x18) addr:0x2083e58 @@ -623,7 +623,7 @@ _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p kind:function(arm,size=0x74) ad _ZN10MapManager18GetTileWorldBoundsEP5Vec2bP4AABB kind:function(arm,size=0x64) addr:0x2084024 _ZN10MapManager16MapData_vfunc_54Ev kind:function(arm,size=0x18) addr:0x2084088 _ZN10MapManager18func_ov00_020840a0Ecci kind:function(arm,size=0x24) addr:0x20840a0 -_ZN10MapManager16MapData_vfunc_78Ev kind:function(arm,size=0x18) addr:0x20840c4 +_ZN10MapManager16MapData_vfunc_78EP5Vec2b kind:function(arm,size=0x18) addr:0x20840c4 _ZN10MapManager18func_ov00_020840dcEv kind:function(arm,size=0x24) addr:0x20840dc _ZN10MapManager18func_ov00_02084100EiPS_ kind:function(arm,size=0x14) addr:0x2084100 _ZN10MapManager17GetMapData_Unk_48Ev kind:function(arm,size=0xc) addr:0x2084114 @@ -2202,7 +2202,7 @@ _ZN13PlayerControl18func_ov00_020afad8EP5Vec3p kind:function(arm,size=0x94) addr _ZN13PlayerControl18func_ov00_020afb6cEv kind:function(arm,size=0x31c) addr:0x20afb6c _ZN13PlayerControl18func_ov00_020afe88Eib kind:function(arm,size=0x64) addr:0x20afe88 _ZN13PlayerControl18func_ov00_020afeecEib kind:function(arm,size=0xa4) addr:0x20afeec -_ZN13PlayerControl18func_ov00_020aff90EP8Cylinderi kind:function(arm,size=0x5c) addr:0x20aff90 +_ZN13PlayerControl18func_ov00_020aff90EP5Vec3pi kind:function(arm,size=0x5c) addr:0x20aff90 _ZN13PlayerControl18func_ov00_020affecEP5Vec3piiS1_ kind:function(arm,size=0x160) addr:0x20affec _ZN13PlayerControl18func_ov00_020b014cEP5Vec3p kind:function(arm,size=0xd0) addr:0x20b014c _ZN13PlayerControl8ResetAimEv kind:function(arm,size=0x24) addr:0x20b021c @@ -2479,7 +2479,7 @@ _ZN13ActorNaviBase8vfunc_84Ev kind:function(arm,size=0x18) addr:0x20ba5d4 _ZN13ActorNaviBase8vfunc_78Ev kind:function(arm,size=0x288) addr:0x20ba5ec _ZN13ActorNaviBase8vfunc_bcEici kind:function(arm,size=0x400) addr:0x20ba874 _ZN13ActorNaviBase8vfunc_74Ev kind:function(arm,size=0x34) addr:0x20bac74 -_ZN13ActorNaviBase19func_ov000_020baca8EP8Cylinderi kind:function(arm,size=0x70) addr:0x20baca8 +_ZN13ActorNaviBase19func_ov000_020baca8EP5Vec3pi kind:function(arm,size=0x70) addr:0x20baca8 _ZN13ActorNaviBase19func_ov000_020bad18Ev kind:function(arm,size=0x2c) addr:0x20bad18 _ZN13ActorNaviBase8vfunc_90Ev kind:function(arm,size=0x224) addr:0x20bad44 _ZN13ActorNaviBase8vfunc_94Ev kind:function(arm,size=0x144) addr:0x20baf68 @@ -2738,7 +2738,7 @@ _ZN9EquipItem8vfunc_2cEv kind:function(arm,size=0x8) addr:0x20be964 _ZN9EquipItem8vfunc_34EPs kind:function(arm,size=0x4) addr:0x20be96c _ZNK9EquipItem8vfunc_40Ev kind:function(arm,size=0x8) addr:0x20be970 _ZNK9EquipItem8vfunc_44Ei kind:function(arm,size=0x8) addr:0x20be978 -_ZNK9EquipItem8vfunc_48Ei kind:function(arm,size=0x8) addr:0x20be980 +_ZNK9EquipItem8vfunc_48Eii kind:function(arm,size=0x8) addr:0x20be980 _ZNK9EquipItem8vfunc_4cEv kind:function(arm,size=0x8) addr:0x20be988 _ZN9EquipItem12GetPlayerPosEv kind:function(arm,size=0xc) addr:0x20be990 _ZN9EquipItem19func_ov000_020be99cEP5Vec3p kind:function(arm,size=0x48) addr:0x20be99c @@ -3324,8 +3324,8 @@ _ZN18UnkStruct_027e0ffc19func_ov000_020cebccEjsi kind:function(arm,size=0x3c) ad func_ov000_020cec08 kind:function(arm,size=0x58) addr:0x20cec08 func_ov000_020cec60 kind:function(arm,size=0x78) addr:0x20cec60 func_ov000_020cecd8 kind:function(arm,size=0x8c) addr:0x20cecd8 -func_ov000_020ced64 kind:function(arm,size=0x18) addr:0x20ced64 -func_ov000_020ced7c kind:function(arm,size=0x40) addr:0x20ced7c +_ZN18UnkStruct_027e0ffc19func_ov000_020ced64EP8Cylinderjj kind:function(arm,size=0x18) addr:0x20ced64 +_ZN18UnkStruct_027e0ffc19func_ov000_020ced7cEP5Vec3piii kind:function(arm,size=0x40) addr:0x20ced7c func_ov000_020cedbc kind:function(arm,size=0x54) addr:0x20cedbc func_ov000_020cee10 kind:function(arm,size=0x48) addr:0x20cee10 func_ov000_020cee58 kind:function(arm,size=0x88) addr:0x20cee58 @@ -5002,7 +5002,7 @@ data_ov000_020e6118 kind:data(any) addr:0x20e6118 data_ov000_020e611c kind:data(any) addr:0x20e611c data_ov000_020e6120 kind:data(any) addr:0x20e6120 data_ov000_020e6124 kind:data(any) addr:0x20e6124 -data_ov000_020e6148 kind:data(any) addr:0x20e6148 +@1518 kind:data(any) addr:0x20e6148 data_ov000_020e6158 kind:data(any) addr:0x20e6158 data_ov000_020e6174 kind:data(any) addr:0x20e6174 data_ov000_020e6178 kind:data(any) addr:0x20e6178 diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 49e3cd68..3d9f4a65 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -846,7 +846,7 @@ func_ov014_0213ccd8 kind:function(arm,size=0xe8) addr:0x213ccd8 func_ov014_0213cdc0 kind:function(arm,size=0x3c) addr:0x213cdc0 func_ov014_0213cdfc kind:function(arm,size=0x5c) addr:0x213cdfc func_ov014_0213ce58 kind:function(arm,size=0x18) addr:0x213ce58 -func_ov014_0213ce70 kind:function(arm,size=0xbc) addr:0x213ce70 +_ZN24UnkStruct_ov015_0213ce4c11GetInstanceEv kind:function(arm,size=0xbc) addr:0x213ce70 func_ov014_0213cf2c kind:function(arm,size=0x5c) addr:0x213cf2c _ZN10EquipScoopC2Ev kind:function(thumb,size=0x14) addr:0x213cf88 _ZN10EquipScoopD1Ev kind:function(thumb,size=0xc) addr:0x213cf9c diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 31a2ea13..d85dda03 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -609,7 +609,7 @@ _ZN10MapManager18func_ov00_02083bd4Ev kind:function(arm,size=0x28) addr:0x2083b7 _ZN10MapManager18func_ov00_02083bfcEv kind:function(arm,size=0x28) addr:0x2083b9c _ZN10MapManager18func_ov00_02083c24Ei kind:function(arm,size=0x2c) addr:0x2083bc4 _ZN10MapManager18func_ov00_02083c50Ei kind:function(arm,size=0x2c) addr:0x2083bf0 -_ZN10MapManager18func_ov00_02083c7cEP5Vec3pi kind:function(arm,size=0x6c) addr:0x2083c1c +_ZN10MapManager18func_ov00_02083c7cEP5Vec3p5Vec2b kind:function(arm,size=0x6c) addr:0x2083c1c _ZN10MapManager18func_ov00_02083ce8Ecccci kind:function(arm,size=0x14c) addr:0x2083c88 _ZN10MapManager18func_ov00_02083e34Ecci kind:function(arm,size=0x24) addr:0x2083dd4 _ZN10MapManager16MapData_vfunc_60Ev kind:function(arm,size=0x18) addr:0x2083df8 @@ -623,7 +623,7 @@ _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p kind:function(arm,size=0x74) ad _ZN10MapManager18GetTileWorldBoundsEP5Vec2bP4AABB kind:function(arm,size=0x64) addr:0x2083fc4 _ZN10MapManager16MapData_vfunc_54Ev kind:function(arm,size=0x18) addr:0x2084028 _ZN10MapManager18func_ov00_020840a0Ecci kind:function(arm,size=0x24) addr:0x2084040 -_ZN10MapManager16MapData_vfunc_78Ev kind:function(arm,size=0x18) addr:0x2084064 +_ZN10MapManager16MapData_vfunc_78EP5Vec2b kind:function(arm,size=0x18) addr:0x2084064 _ZN10MapManager18func_ov00_020840dcEv kind:function(arm,size=0x24) addr:0x208407c _ZN10MapManager18func_ov00_02084100EiPS_ kind:function(arm,size=0x14) addr:0x20840a0 _ZN10MapManager17GetMapData_Unk_48Ev kind:function(arm,size=0xc) addr:0x20840b4 @@ -2202,7 +2202,7 @@ _ZN13PlayerControl18func_ov00_020afad8EP5Vec3p kind:function(arm,size=0x94) addr _ZN13PlayerControl18func_ov00_020afb6cEv kind:function(arm,size=0x31c) addr:0x20afb0c _ZN13PlayerControl18func_ov00_020afe88Eib kind:function(arm,size=0x64) addr:0x20afe28 _ZN13PlayerControl18func_ov00_020afeecEib kind:function(arm,size=0xa4) addr:0x20afe8c -_ZN13PlayerControl18func_ov00_020aff90EP8Cylinderi kind:function(arm,size=0x5c) addr:0x20aff30 +_ZN13PlayerControl18func_ov00_020aff90EP5Vec3pi kind:function(arm,size=0x5c) addr:0x20aff30 _ZN13PlayerControl18func_ov00_020affecEP5Vec3piiS1_ kind:function(arm,size=0x160) addr:0x20aff8c _ZN13PlayerControl18func_ov00_020b014cEP5Vec3p kind:function(arm,size=0xd0) addr:0x20b00ec _ZN13PlayerControl8ResetAimEv kind:function(arm,size=0x24) addr:0x20b01bc @@ -2479,7 +2479,7 @@ _ZN13ActorNaviBase8vfunc_84Ev kind:function(arm,size=0x18) addr:0x20ba574 _ZN13ActorNaviBase8vfunc_78Ev kind:function(arm,size=0x288) addr:0x20ba58c _ZN13ActorNaviBase8vfunc_bcEici kind:function(arm,size=0x400) addr:0x20ba814 _ZN13ActorNaviBase8vfunc_74Ev kind:function(arm,size=0x34) addr:0x20bac14 -_ZN13ActorNaviBase19func_ov000_020baca8EP8Cylinderi kind:function(arm,size=0x70) addr:0x20bac48 +_ZN13ActorNaviBase19func_ov000_020baca8EP5Vec3pi kind:function(arm,size=0x70) addr:0x20bac48 _ZN13ActorNaviBase19func_ov000_020bad18Ev kind:function(arm,size=0x2c) addr:0x20bacb8 _ZN13ActorNaviBase8vfunc_90Ev kind:function(arm,size=0x224) addr:0x20bace4 _ZN13ActorNaviBase8vfunc_94Ev kind:function(arm,size=0x144) addr:0x20baf08 @@ -2640,7 +2640,7 @@ _ZN9EquipItem8vfunc_2cEv kind:function(arm,size=0x8) addr:0x20be904 _ZN9EquipItem8vfunc_34EPs kind:function(arm,size=0x4) addr:0x20be90c _ZNK9EquipItem8vfunc_40Ev kind:function(arm,size=0x8) addr:0x20be910 _ZNK9EquipItem8vfunc_44Ei kind:function(arm,size=0x8) addr:0x20be918 -_ZNK9EquipItem8vfunc_48Ei kind:function(arm,size=0x8) addr:0x20be920 +_ZNK9EquipItem8vfunc_48Eii kind:function(arm,size=0x8) addr:0x20be920 _ZNK9EquipItem8vfunc_4cEv kind:function(arm,size=0x8) addr:0x20be928 _ZN9EquipItem12GetPlayerPosEv kind:function(arm,size=0xc) addr:0x20be930 _ZN9EquipItem19func_ov000_020be99cEP5Vec3p kind:function(arm,size=0x48) addr:0x20be93c @@ -3226,8 +3226,8 @@ _ZN18UnkStruct_027e0ffc19func_ov000_020cebccEjsi kind:function(arm,size=0x3c) ad func_ov000_020cec08 kind:function(arm,size=0x58) addr:0x20ceba8 func_ov000_020cec60 kind:function(arm,size=0x78) addr:0x20cec00 func_ov000_020cecd8 kind:function(arm,size=0x8c) addr:0x20cec78 -func_ov000_020ced64 kind:function(arm,size=0x18) addr:0x20ced04 -func_ov000_020ced7c kind:function(arm,size=0x40) addr:0x20ced1c +_ZN18UnkStruct_027e0ffc19func_ov000_020ced64EP8Cylinderjj kind:function(arm,size=0x18) addr:0x20ced04 +_ZN18UnkStruct_027e0ffc19func_ov000_020ced7cEP5Vec3piii kind:function(arm,size=0x40) addr:0x20ced1c func_ov000_020cedbc kind:function(arm,size=0x54) addr:0x20ced5c func_ov000_020cee10 kind:function(arm,size=0x48) addr:0x20cedb0 func_ov000_020cee58 kind:function(arm,size=0x88) addr:0x20cedf8 @@ -4904,7 +4904,7 @@ data_ov000_020e6118 kind:data(any) addr:0x20e60b8 data_ov000_020e611c kind:data(any) addr:0x20e60bc data_ov000_020e6120 kind:data(any) addr:0x20e60c0 data_ov000_020e6124 kind:data(any) addr:0x20e60c4 -data_ov000_020e6148 kind:data(any) addr:0x20e60e8 +@1518 kind:data(any) addr:0x20e60e8 data_ov000_020e6158 kind:data(any) addr:0x20e60f8 data_ov000_020e6174 kind:data(any) addr:0x20e6114 data_ov000_020e6178 kind:data(any) addr:0x20e6118 diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 0ba25400..daeb725a 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -846,7 +846,7 @@ func_ov014_0213ccd8 kind:function(arm,size=0xe8) addr:0x213cc34 func_ov014_0213cdc0 kind:function(arm,size=0x3c) addr:0x213cd1c func_ov014_0213cdfc kind:function(arm,size=0x5c) addr:0x213cd58 func_ov014_0213ce58 kind:function(arm,size=0x18) addr:0x213cdb4 -func_ov014_0213ce70 kind:function(arm,size=0xbc) addr:0x213cdcc +_ZN24UnkStruct_ov015_0213ce4c11GetInstanceEv kind:function(arm,size=0xbc) addr:0x213cdcc func_ov014_0213cf2c kind:function(arm,size=0x5c) addr:0x213ce88 _ZN10EquipScoopC2Ev kind:function(thumb,size=0x14) addr:0x213cee4 _ZN10EquipScoopD1Ev kind:function(thumb,size=0xc) addr:0x213cef8 diff --git a/include/Actor/Navi/ActorNaviBase.hpp b/include/Actor/Navi/ActorNaviBase.hpp index 1571fdc0..95a34c6c 100644 --- a/include/Actor/Navi/ActorNaviBase.hpp +++ b/include/Actor/Navi/ActorNaviBase.hpp @@ -97,7 +97,7 @@ public: bool func_ov000_020ba458(); void func_ov000_020ba4e4(); void func_ov000_020ba53c(); - void func_ov000_020baca8(Cylinder *param1, unk32 param2); + void func_ov000_020baca8(Vec3p *param1, unk32 param2); void func_ov000_020bad18(); static void func_ov000_020bb0ac(); static void func_ov000_020bb0e0(); diff --git a/include/DTCM/UnkStruct_027e0c68.hpp b/include/DTCM/UnkStruct_027e0c68.hpp index c052b79c..e172e51e 100644 --- a/include/DTCM/UnkStruct_027e0c68.hpp +++ b/include/DTCM/UnkStruct_027e0c68.hpp @@ -24,4 +24,4 @@ struct UnkStruct_027e0c68 { /* 4c */ }; -extern UnkStruct_027e0c68 *data_027e0c68; +extern UnkStruct_027e0c68 data_027e0c68; diff --git a/include/DTCM/UnkStruct_027e0ffc.hpp b/include/DTCM/UnkStruct_027e0ffc.hpp index d422ae19..463d9ec8 100644 --- a/include/DTCM/UnkStruct_027e0ffc.hpp +++ b/include/DTCM/UnkStruct_027e0ffc.hpp @@ -20,7 +20,8 @@ struct UnkStruct_027e0ffc { /* 39 */ void func_ov000_020cebcc(u32 param1, unk16 param2, unk32 param3); - void func_ov000_020ced64(Cylinder *param1, u32 param2); + void func_ov000_020ced64(Cylinder *param1, u32 param2, u32 param3); + void func_ov000_020ced7c(Vec3p *param1, s32 param2, s32 param3, unk32 param4); }; extern UnkStruct_027e0ffc data_027e0ffc; diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index f597a37a..5fdbcabf 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -180,7 +180,7 @@ public: void GetTileWorldBounds(Vec2b *tile, AABB *tileBounds); unk8 MapData_vfunc_54(); unk8 func_ov00_020840a0(unk8 param_2, unk8 param_3, unk32 param_4); - unk32 MapData_vfunc_78(); + unk32 MapData_vfunc_78(Vec2b *param1); static unk8 func_ov00_020840dc(); static unk8 func_ov00_02084100(unk32 param_1, MapManager *param_2); unk8 GetMapData_Unk_48(); diff --git a/include/Player/EquipItem.hpp b/include/Player/EquipItem.hpp index 21f114da..6702bc48 100644 --- a/include/Player/EquipItem.hpp +++ b/include/Player/EquipItem.hpp @@ -34,7 +34,7 @@ public: /* 3c */ virtual bool GetHitbox(Cylinder *hitbox) const; /* 40 */ virtual unk32 vfunc_40() const; /* 44 */ virtual unk32 vfunc_44(unk32 param1) const; - /* 48 */ virtual unk32 vfunc_48() const; + /* 48 */ virtual unk32 vfunc_48(unk32 param1) const; /* 4c */ virtual s32 vfunc_4c() const; /* 50 */ diff --git a/include/Player/PlayerControl.hpp b/include/Player/PlayerControl.hpp index 962a3fe0..11dd6488 100644 --- a/include/Player/PlayerControl.hpp +++ b/include/Player/PlayerControl.hpp @@ -61,7 +61,7 @@ public: /* 9e */ unk8 mUnk_9e[2]; /* a0 */ void *mFollowObject; /* a4 */ q20 mFollowDist; - /* a8 */ u16 mFollowStuckTimer; + /* a8 */ s16 mFollowStuckTimer; /* aa */ s16 mCutsceneEndTimer; /* ac */ s16 mUnk_ac; /* ae */ unk16 mUnk_ae; @@ -96,7 +96,7 @@ public: void func_ov00_020afb6c(); bool func_ov00_020afe88(s32 param1, bool param2); bool func_ov00_020afeec(unk32 param1, bool param2); - void func_ov00_020aff90(Cylinder *param1, unk32 param2); + void func_ov00_020aff90(Vec3p *param1, unk32 param2); void func_ov00_020affec(Vec3p *param1, s32 y, s32 param3, Vec3p *param4); void func_ov00_020b014c(Vec3p *param1); void ResetAim(); diff --git a/src/00_Core/Actor/Navi/ActorNaviBase.cpp b/src/00_Core/Actor/Navi/ActorNaviBase.cpp index 242fe27a..677d677b 100644 --- a/src/00_Core/Actor/Navi/ActorNaviBase.cpp +++ b/src/00_Core/Actor/Navi/ActorNaviBase.cpp @@ -37,7 +37,7 @@ void ActorNaviBase::vfunc_84() {} bool ActorNaviBase::vfunc_78() {} bool ActorNaviBase::vfunc_bc(unk32 param1, unk8 param2, s32 param3) {} void ActorNaviBase::vfunc_74() {} -void ActorNaviBase::func_ov000_020baca8(Cylinder *param1, unk32 param2) {} +void ActorNaviBase::func_ov000_020baca8(Vec3p *param1, unk32 param2) {} void ActorNaviBase::func_ov000_020bad18() {} bool ActorNaviBase::vfunc_90() {} void ActorNaviBase::vfunc_94() {} diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index c40f60cd..b392ba54 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -135,7 +135,7 @@ unk8 MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *pa void MapManager::GetTileWorldBounds(Vec2b *tile, AABB *tileBounds) {} unk8 MapManager::MapData_vfunc_54() {} unk8 MapManager::func_ov00_020840a0(unk8 param_2, unk8 param_3, unk32 param_4) {} -unk32 MapManager::MapData_vfunc_78() {} +unk32 MapManager::MapData_vfunc_78(Vec2b *param1) {} unk8 MapManager::func_ov00_020840dc() {} unk8 MapManager::func_ov00_02084100(unk32 param_1, MapManager *param_2) {} unk8 MapManager::GetMapData_Unk_48() {} diff --git a/src/00_Core/Player/EquipItem.cpp b/src/00_Core/Player/EquipItem.cpp index 50afc0ab..9256b13a 100644 --- a/src/00_Core/Player/EquipItem.cpp +++ b/src/00_Core/Player/EquipItem.cpp @@ -9,7 +9,7 @@ u32 EquipItem::vfunc_2c() {} void EquipItem::vfunc_34(unk16 *param1) {} unk32 EquipItem::vfunc_40() const {} unk32 EquipItem::vfunc_44(unk32 param1) const {} -unk32 EquipItem::vfunc_48() const {} +unk32 EquipItem::vfunc_48(unk32 param1) const {} s32 EquipItem::vfunc_4c() const {} Vec3p *EquipItem::GetPlayerPos() {} void EquipItem::func_ov000_020be99c(Vec3p *param1) {} diff --git a/src/00_Core/Player/PlayerControl.cpp b/src/00_Core/Player/PlayerControl.cpp index b2ccb8a5..72baf060 100644 --- a/src/00_Core/Player/PlayerControl.cpp +++ b/src/00_Core/Player/PlayerControl.cpp @@ -92,19 +92,20 @@ ARM void PlayerControl::func_ov00_020af06c() { if (mUnk_7a) { mUnk_7b = usingEquipItem; } - if (gAdventureFlags->func_ov00_02097738() || data_027e0c68->mUnk_04 != 0) { + if (gAdventureFlags->func_ov00_02097738() || data_027e0c68.mUnk_04 != 0) { if (data_027e0d38->func_ov000_02078b40() != 2) { mUsingEquipItem = false; } return; } ItemManager *itemManager = gItemManager; - if (itemManager->mEquippedItem == ItemFlag_PotionA) { + ItemFlag equippedItem = itemManager->mEquippedItem; + if (equippedItem == ItemFlag_PotionA) { if (itemManager->HasPotion(0)) { mUsingEquipItem = true; return; } - } else if (itemManager->mEquippedItem == ItemFlag_PotionB) { + } else if (equippedItem == ItemFlag_PotionB) { if (itemManager->HasPotion(1)) { mUsingEquipItem = true; return; @@ -112,7 +113,7 @@ ARM void PlayerControl::func_ov00_020af06c() { } if (data_027e0d38->func_ov000_02078b40() == 2) { mUnk_7b = true; - mUnk_7b = (mUnk_7b & itemManager->func_ov00_020ad790(1)) != 0; + mUnk_7b = (mUnk_7b & gItemManager->func_ov00_020ad790(1)) != 0; } else { if (((data_027e05f8.mUnk_0 & 0x300) != 0) && mUnk_7e != 0 && func_ov00_020aeef8()) { mUnk_7b = true; @@ -126,18 +127,21 @@ ARM void PlayerControl::func_ov00_020af06c() { } } } - mUnk_7b = (mUnk_7b & itemManager->func_ov00_020ad790(1)) != 0; + mUnk_7b = (mUnk_7b & gItemManager->func_ov00_020ad790(1)) != 0; - if (itemManager->mEquippedItem == ItemFlag_Hammer && !mUsingEquipItem && mUnk_7b == true) { - ActorNaviBase *courageFairy = itemManager->GetFairy(FairyId_Courage); + if (equippedItem == ItemFlag_Hammer && !usingEquipItem && mUnk_7b == true) { + ActorNaviBase *courageFairy = gItemManager->GetFairy(FairyId_Courage); if (courageFairy != NULL) { - mAimWorld.x = courageFairy->mPos.x; - mAimWorld.y = gPlayerPos.y + FLOAT_TO_Q20(0.5); - mAimWorld.z = courageFairy->mPos.z; + q20 x = courageFairy->mPos.x; + q20 y = gPlayerPos.y + FLOAT_TO_Q20(0.5); + q20 z = courageFairy->mPos.z; + mAimWorld.x = x; + mAimWorld.y = y; + mAimWorld.z = z; } } } - if (!mUnk_7a) { + if (mUnk_7a) { mUsingEquipItem = mUnk_7b; } } @@ -176,9 +180,9 @@ bool PlayerControl::func_ov00_020af2d4(u32 param1, bool param2) { if (mUnk_7c) { bool unk1 = true; - bool unk2 = true; + bool unk2 = false; if ((param1 & 0x2) != 0 && (data_02056be4[data_027e077c.mUnk_0] & 0x1) != 0) { - unk2 = false; + unk2 = true; } if (!unk2 && ((param1 & 0x1) == 0 || !this->func_ov00_020aeef8() || !data_027e103c->mUnk_24)) { unk1 = false; @@ -242,7 +246,7 @@ ARM void PlayerControl::func_ov00_020af538(bool param1, u8 param2) { mUnk_7e = param2; mUnk_7d = param1; if (mUnk_78) { - bool unk = gAdventureFlags->func_ov00_02097738() || data_027e0c68->mUnk_04 ? false : true; + bool unk = gAdventureFlags->func_ov00_02097738() || data_027e0c68.mUnk_04 ? false : true; if (unk) { if (!this->func_ov00_020af4a4()) { mUnk_7c = false; @@ -317,17 +321,19 @@ ARM bool PlayerControl::func_ov00_020af778() { return false; } - bool bVar1 = false; - EquipItem *equipItem; + bool bVar1 = false; + EquipItem *equipItem = NULL; if ((mFlags & TouchFlag_UntouchedNow) != 0 && mTouchDuration < 21) { s32 dx = mTouchLastX - mTouchFastX; s32 dy = mTouchLastY - mTouchFastY; if (dx * dx + dy * dy < 100) { - bVar1 = !this->func_ov00_020af2d4(7, true); - if (!bVar1 && mUsingEquipItem) { - ItemFlag equipId = gPlayer->GetEquipId(); - if (equipId != ItemFlag_None) { - equipItem = gItemManager->GetEquipItem(equipId); + if (this->func_ov00_020af2d4(7, true)) { + bVar1 = true; + if (mUsingEquipItem) { + ItemFlag equipId = gPlayer->GetEquipId(); + if (equipId != ItemFlag_None) { + equipItem = gItemManager->GetEquipItem(equipId); + } } } } @@ -358,13 +364,13 @@ ARM bool PlayerControl::func_ov00_020af778() { return true; } } else { - if (equipItem->vfunc_48()) { + if (equipItem->vfunc_48(iVar4)) { this->func_ov00_020af6e4(&vec, followDistance, uVar4); return true; } if (followDistance == 0 && equipItem->vfunc_40()) { this->ApplyTouchWorld(&vec, 0); - this->func_ov00_020af6e4(&vec, 0, uVar4); + this->func_ov00_020af6e4(&vec, followDistance, uVar4); return true; } } @@ -396,17 +402,16 @@ ARM bool PlayerControl::func_ov00_020afad8(Vec3p *param1) { ARM void PlayerControl::func_ov00_020afb6c() { bool iVar1 = this->func_ov00_020af778(); Actor *followActor = gActorManager->GetActor(&mFollowRef); - FairyId fairyId = gItemManager->GetEquippedFairy(); - ActorNaviBase *fairy = gItemManager->GetFairy(fairyId); + ItemManager *itemMgr = gItemManager; + FairyId fairyId = itemMgr->GetEquippedFairy(); + ActorNaviBase *fairy = itemMgr->GetFairy(fairyId); - if (followActor == NULL && fairy != NULL) { + if (followActor == NULL && !mFollowing && fairy != NULL) { fairy->func_ov000_020bad18(); } q20 followDist = mFollowDist; - if (followActor == NULL) { - mFollowRef.Reset(); - } else { + if (followActor != NULL) { followDist = Vec3p_Distance(&gPlayerPos, &followActor->mPos); Cylinder followHitbox; followActor->GetHitbox(&followHitbox); @@ -417,47 +422,80 @@ ARM void PlayerControl::func_ov00_020afb6c() { switch (followActor->mUnk_12c) { case 0: mFollowRef.Reset(); break; case 1: iVar8 = 1; break; - case 2: - iVar8 = 3; - followHitbox.pos.y += followHitbox.size; - uVar9 = 0; - break; - case 3: - case 4: - iVar8 = 2; - followHitbox.pos.y += followHitbox.size; - uVar9 = 2; - break; case 5: iVar8 = 2; uVar9 = 1; followHitbox.pos.y += followActor->mYOffset; break; + case 2: + iVar8 = 3; + followHitbox.pos.y += followHitbox.size; + uVar9 = 0; + break; + default: + iVar8 = 2; + followHitbox.pos.y += followHitbox.size; + uVar9 = 2; + break; } if (iVar8 != 0 && gPlayerLink->GetCurrentCharacter() == PlayerCharacter_Link) { - this->func_ov00_020aff90(&followHitbox, iVar8); + this->func_ov00_020aff90(&followHitbox.pos, iVar8); if (iVar1) { - data_027e0ffc.func_ov000_020ced64(&followHitbox, followActor->mRef.id); + data_027e0ffc.func_ov000_020ced64(&followHitbox, followActor->mRef.id, uVar9); } } + } else { + mFollowRef.Reset(); } - if (!mFollowing) { - mFollowObject = NULL; - } else { - mFollowObject = (void *) gMapManager->MapData_vfunc_78(); + if (mFollowing) { + mFollowObject = (void *) gMapManager->MapData_vfunc_78(&mUnk_9c); Vec3p local_3c; s32 iVar2; s32 iVar7; - if (mFollowObject == NULL) { + if (mFollowObject != NULL) { + local_3c = *(Vec3p *) ((u32) mFollowObject + 0x18); + void *piVar4 = (*(void *(**) (void *) )((*(u32 *) mFollowObject) + 0x54))(mFollowObject); + if (piVar4 == NULL) { + iVar7 = 0; + } else { + iVar7 = (*(s32(**)(void *))((*(u32 *) piVar4) + 0x44))(piVar4); + } + local_3c.y += iVar7; + if (*(s8 *) ((u32) mFollowObject + 0x12) == 1) { + iVar2 = 1; + iVar7 = 3; + } else { + iVar2 = 2; + iVar7 = 2; + } + } else { local_3c.y = gPlayerPos.y; Vec2b local_44 = mUnk_9c; gMapManager->func_ov00_02083c7c(&local_3c, local_44); iVar2 = 2; iVar7 = 3; - } else { + } + + if (iVar2 != 0 && gPlayerLink->GetCurrentCharacter() == PlayerCharacter_Link) { + this->func_ov00_020aff90(&local_3c, iVar2); + if (iVar1) { + data_027e0ffc.func_ov000_020ced7c(&local_3c, mUnk_9c.x, mUnk_9c.y, iVar7); + } + } + followDist = Vec3p_Distance(&gPlayerPos, &local_3c); + } else { + mFollowObject = NULL; + } + + if (mFollowStuckTimer > 0 && mFollowDist - followDist <= FLOAT_TO_Q20(0.01)) { + mFollowStuckTimer -= 1; + if (mFollowStuckTimer <= 0) { + this->StopFollowing(); } } + + mFollowDist = followDist; } ARM bool PlayerControl::func_ov00_020afe88(s32 param1, bool param2) { @@ -490,7 +528,7 @@ ARM bool PlayerControl::func_ov00_020afeec(unk32 param1, bool param2) { } } -ARM void PlayerControl::func_ov00_020aff90(Cylinder *param1, unk32 param2) { +ARM void PlayerControl::func_ov00_020aff90(Vec3p *param1, unk32 param2) { if (data_027e0d38->func_ov000_02078b40() == 2) { return; } @@ -509,8 +547,8 @@ ARM void PlayerControl::func_ov00_020affec(Vec3p *param1, s32 y, s32 param3, Vec Vec3p_Axpy(y, &mUnk_44, &mTouchWorld, &local_24); Vec3p local_30; - local_30.x = param4->x - local_24.x; local_30.y = 0; + local_30.x = param4->x - local_24.x; local_30.z = param4->z - local_24.z; q20 iVar2 = Vec3p_Length(&local_30); if (iVar2 <= param3) {