From 7803163df28c8c5d872f30173eecd774efbcf245 Mon Sep 17 00:00:00 2001 From: Yanis <35189056+Yanis002@users.noreply.github.com> Date: Wed, 21 Jan 2026 20:50:26 +0100 Subject: [PATCH] Decompile some of UnkSystem1 (#28) --- config/eur/arm9/overlays/ov000/delinks.txt | 9 + config/eur/arm9/overlays/ov000/relocs.txt | 14 +- config/eur/arm9/overlays/ov000/symbols.txt | 42 ++--- config/jp/arm9/overlays/ov000/delinks.txt | 8 + config/jp/arm9/overlays/ov000/relocs.txt | 12 +- config/jp/arm9/overlays/ov000/symbols.txt | 42 ++--- include/Message/BMG.hpp | 168 ++++++++++++++++++ include/Unknown/UnkStruct_ov000_02067bc4.hpp | 21 ++- include/Unknown/UnkSystem1.hpp | 75 ++++---- src/000_Second/UnkSystem1_Base.cpp | 68 +++++++ src/000_Second/UnkSystem1_Derived1.cpp | 56 ++++++ .../019_UnkSystem1_ov019_Derived1.cpp | 2 +- tools/configure.py | 2 + 13 files changed, 426 insertions(+), 93 deletions(-) create mode 100644 include/Message/BMG.hpp create mode 100644 src/000_Second/UnkSystem1_Base.cpp create mode 100644 src/000_Second/UnkSystem1_Derived1.cpp diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 211495cb..0f134475 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -14,6 +14,15 @@ src/000_Second/Game/GameModeManagerBase_104.cpp: .text start:0x02061ae4 end:0x02061ce0 .data start:0x020b1e58 end:0x020b1e7c +src/000_Second/UnkSystem1_Base.cpp: + .text start:0x020667b0 end:0x02067244 + .data start:0x020b2070 end:0x020b209c + +src/000_Second/UnkSystem1_Derived1.cpp: + complete + .text start:0x02067244 end:0x020674a8 + .data start:0x020b209c end:0x020b20d0 + src/000_Second/Actor/Actor.cpp: .text start:0x02098388 end:0x02098654 .data start:0x020b30e4 end:0x020b3148 diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 2d672ec5..aae46642 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -1761,7 +1761,7 @@ from:0x02066734 kind:arm_call to:0x0206665c module:overlay(0) from:0x02066768 kind:arm_call to:0x0203d210 module:main from:0x02066774 kind:load to:0x02066778 module:overlay(0) from:0x02066780 kind:arm_call_thumb to:0x0201556c module:main -from:0x020667d0 kind:load to:0x020b2078 module:overlay(0) +from:0x020667d0 kind:load to:0x020b2070 add:8 module:overlay(0) from:0x02066878 kind:arm_call to:0x02066a08 module:overlay(0) from:0x020669a4 kind:arm_call to:0x020669dc module:overlay(0) from:0x020669ac kind:load to:0x020b504c module:overlay(0) @@ -1801,21 +1801,21 @@ from:0x02067228 kind:load to:0x027e0d04 module:dtcm from:0x0206722c kind:load to:0x020b62a8 module:overlay(0) from:0x02067230 kind:load to:0x020d78c2 module:overlay(24) from:0x02067258 kind:arm_call to:0x020667b0 module:overlay(0) -from:0x02067274 kind:load to:0x020b20a4 module:overlay(0) +from:0x02067274 kind:load to:0x020b209c add:8 module:overlay(0) from:0x0206728c kind:arm_call to:0x020667b0 module:overlay(0) -from:0x020672a8 kind:load to:0x020b20a4 module:overlay(0) +from:0x020672a8 kind:load to:0x020b209c add:8 module:overlay(0) from:0x020672c4 kind:arm_call to:0x020669b4 module:overlay(0) from:0x020672dc kind:arm_call to:0x02067e60 module:overlay(0) -from:0x020672ec kind:load to:0x020b20a4 module:overlay(0) +from:0x020672ec kind:load to:0x020b209c add:8 module:overlay(0) from:0x020672f0 kind:load to:0x020b504c module:overlay(0) from:0x0206730c kind:arm_call to:0x020669b4 module:overlay(0) from:0x02067324 kind:arm_call to:0x02067e60 module:overlay(0) from:0x0206732c kind:arm_call to:0x02011ff4 module:main -from:0x0206733c kind:load to:0x020b20a4 module:overlay(0) +from:0x0206733c kind:load to:0x020b209c add:8 module:overlay(0) from:0x02067340 kind:load to:0x020b504c module:overlay(0) from:0x0206735c kind:arm_call to:0x020669b4 module:overlay(0) from:0x02067374 kind:arm_call to:0x02067e60 module:overlay(0) -from:0x02067384 kind:load to:0x020b20a4 module:overlay(0) +from:0x02067384 kind:load to:0x020b209c add:8 module:overlay(0) from:0x02067388 kind:load to:0x020b504c module:overlay(0) from:0x0206739c kind:arm_call to:0x020669b4 module:overlay(0) from:0x020673b8 kind:arm_call to:0x02067e60 module:overlay(0) @@ -10736,7 +10736,7 @@ from:0x020b4014 kind:load to:0x020b3be4 module:overlay(0) from:0x020b401c kind:load to:0x020b3c2c module:overlay(0) from:0x020b4024 kind:load to:0x020b3a24 module:overlay(0) from:0x020b402c kind:load to:0x020b38b4 module:overlay(0) -from:0x020b4034 kind:load to:0x020b38a4 module:overlay(0) +from:0x020b4034 kind:load to:0x020b389c add:8 module:overlay(0) from:0x020b403c kind:load to:0x020b38c4 module:overlay(0) from:0x020b4044 kind:load to:0x020b3a34 module:overlay(0) from:0x020b404c kind:load to:0x020b38f4 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 8d597b35..89d6f56f 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -686,28 +686,28 @@ func_ov000_02066714 kind:function(arm,size=0x40) addr:0x02066714 func_ov000_02066754 kind:function(arm,size=0x24) addr:0x02066754 func_ov000_02066778 kind:function(arm,size=0x14) addr:0x02066778 func_ov000_0206678c kind:function(arm,size=0x24) addr:0x0206678c -func_ov000_020667b0 kind:function(arm,size=0x28) addr:0x020667b0 -_ZN21UnkSystem1_ov000_Base8vfunc_00Ev kind:function(arm,size=0x1c) addr:0x020667d8 +_ZN21UnkSystem1_ov000_BaseC2Ei kind:function(arm,size=0x28) addr:0x020667b0 +_ZN21UnkSystem1_ov000_Base8vfunc_00Ei kind:function(arm,size=0x1c) addr:0x020667d8 _ZN21UnkSystem1_ov000_Base8vfunc_04Ev kind:function(arm,size=0x1c0) addr:0x020667f4 -func_ov000_020669b4 kind:function(arm,size=0x18) addr:0x020669b4 -func_ov000_020669cc kind:function(arm,size=0x4) addr:0x020669cc -func_ov000_020669d0 kind:function(arm,size=0x8) addr:0x020669d0 +_ZN21UnkSystem1_ov000_Base19func_ov000_020669b4EPh kind:function(arm,size=0x18) addr:0x020669b4 +_ZN21UnkSystem1_ov000_Base8vfunc_08Ei kind:function(arm,size=0x4) addr:0x020669cc +_ZN21UnkSystem1_ov000_Base8vfunc_0CEv kind:function(arm,size=0x8) addr:0x020669d0 _ZN21UnkSystem1_ov000_Base8vfunc_18Ev kind:function(arm,size=0x4) addr:0x020669d8 -func_ov000_020669dc kind:function(arm,size=0x2c) addr:0x020669dc -func_ov000_02066a08 kind:function(arm,size=0x54) addr:0x02066a08 -func_ov000_02066a5c kind:function(arm,size=0x3a0) addr:0x02066a5c -_ZN21UnkSystem1_ov000_Base8vfunc_14Ev kind:function(arm,size=0x438) addr:0x02066dfc -func_ov000_02067234 kind:function(arm,size=0x8) addr:0x02067234 +_ZN21UnkSystem1_ov000_Base19func_ov000_020669dcEv kind:function(arm,size=0x2c) addr:0x020669dc +_ZN21UnkSystem1_ov000_Base19func_ov000_02066a08EP10UnkStruct5 kind:function(arm,size=0x54) addr:0x02066a08 +_ZN21UnkSystem1_ov000_Base8vfunc_10EPt kind:function(arm,size=0x3a0) addr:0x02066a5c +_ZN21UnkSystem1_ov000_Base8vfunc_14EPv kind:function(arm,size=0x438) addr:0x02066dfc +_ZN21UnkSystem1_ov000_Base8vfunc_1CEjii kind:function(arm,size=0x8) addr:0x02067234 _ZN21UnkSystem1_ov000_Base8vfunc_20Eiii kind:function(arm,size=0x8) addr:0x0206723c -_ZN25UnkSystem1_ov000_Derived1C2Eii kind:function(arm,size=0x34) addr:0x02067244 -func_ov000_02067278 kind:function(arm,size=0x34) addr:0x02067278 -func_ov000_020672ac kind:function(arm,size=0x48) addr:0x020672ac -func_ov000_020672f4 kind:function(arm,size=0x50) addr:0x020672f4 +_ZN25UnkSystem1_ov000_Derived1C2EiPN24UnkStruct_ov000_02067bc410UnkStruct1E kind:function(arm,size=0x34) addr:0x02067244 +_ZN25UnkSystem1_ov000_Derived1C1EiPN24UnkStruct_ov000_02067bc410UnkStruct1E kind:function(arm,size=0x34) addr:0x02067278 +_ZN25UnkSystem1_ov000_Derived1D1Ev kind:function(arm,size=0x48) addr:0x020672ac +_ZN25UnkSystem1_ov000_Derived1D0Ev kind:function(arm,size=0x50) addr:0x020672f4 _ZN25UnkSystem1_ov000_Derived1D2Ev kind:function(arm,size=0x48) addr:0x02067344 -func_ov000_0206738c kind:function(arm,size=0x3c) addr:0x0206738c -func_ov000_020673c8 kind:function(arm,size=0x6c) addr:0x020673c8 +_ZN25UnkSystem1_ov000_Derived119func_ov000_0206738cEv kind:function(arm,size=0x3c) addr:0x0206738c +_ZN25UnkSystem1_ov000_Derived18vfunc_08Ei kind:function(arm,size=0x6c) addr:0x020673c8 _ZN25UnkSystem1_ov000_Derived18vfunc_0CEv kind:function(arm,size=0x40) addr:0x02067434 -_ZN25UnkSystem1_ov000_Derived18vfunc_10Ev kind:function(arm,size=0x34) addr:0x02067474 +_ZN25UnkSystem1_ov000_Derived18vfunc_10EPt kind:function(arm,size=0x34) addr:0x02067474 func_ov000_020674a8 kind:function(arm,size=0xc0) addr:0x020674a8 func_ov000_02067568 kind:function(arm,size=0x14) addr:0x02067568 func_ov000_0206757c kind:function(arm,size=0x60) addr:0x0206757c @@ -733,13 +733,13 @@ func_ov000_02067c9c kind:function(arm,size=0x5c) addr:0x02067c9c _ZN24UnkStruct_ov000_020b504c19func_ov000_02067cf8EiiPN24UnkStruct_ov000_02067bc410UnkStruct1E kind:function(arm,size=0x168) addr:0x02067cf8 _ZN24UnkStruct_ov000_020b504c19func_ov000_02067e60Ehi kind:function(arm,size=0xfc) addr:0x02067e60 func_ov000_02067f5c kind:function(arm,size=0x2c) addr:0x02067f5c -func_ov000_02067f88 kind:function(arm,size=0xe0) addr:0x02067f88 +_ZN24UnkStruct_ov000_020b504c19func_ov000_02067f88Eii kind:function(arm,size=0xe0) addr:0x02067f88 func_ov000_02068068 kind:function(arm,size=0x14) addr:0x02068068 _ZN24UnkStruct_ov000_020b504c19func_ov000_0206807cEPvS0_ kind:function(arm,size=0x48) addr:0x0206807c func_ov000_020680c4 kind:function(arm,size=0xd0) addr:0x020680c4 func_ov000_02068194 kind:function(arm,size=0x98) addr:0x02068194 func_ov000_0206822c kind:function(arm,size=0x94) addr:0x0206822c -_ZN24UnkStruct_ov000_02067bc419func_ov000_020682c0Ei kind:function(arm,size=0x24) addr:0x020682c0 +_ZN24UnkStruct_ov000_020b504c19func_ov000_020682c0Ei kind:function(arm,size=0x24) addr:0x020682c0 func_ov000_020682e4 kind:function(arm,size=0x2c) addr:0x020682e4 func_ov000_02068310 kind:function(arm,size=0x44) addr:0x02068310 func_ov000_02068354 kind:function(arm,size=0x24) addr:0x02068354 @@ -3483,8 +3483,8 @@ data_ov000_020b2038 kind:data(any) addr:0x020b2038 data_ov000_020b2048 kind:data(any) addr:0x020b2048 data_ov000_020b2060 kind:data(any) addr:0x020b2060 data_ov000_020b2068 kind:data(any) addr:0x020b2068 -data_ov000_020b2078 kind:data(any) addr:0x020b2078 -data_ov000_020b20a4 kind:data(any) addr:0x020b20a4 +_ZTV21UnkSystem1_ov000_Base kind:data(any) addr:0x020b2070 +_ZTV25UnkSystem1_ov000_Derived1 kind:data(any) addr:0x020b209c data_ov000_020b20d0 kind:data(any) addr:0x020b20d0 data_ov000_020b20dc kind:data(any) addr:0x020b20dc data_ov000_020b20e4 kind:data(any) addr:0x020b20e4 diff --git a/config/jp/arm9/overlays/ov000/delinks.txt b/config/jp/arm9/overlays/ov000/delinks.txt index 88fcc3bb..1c6f120d 100644 --- a/config/jp/arm9/overlays/ov000/delinks.txt +++ b/config/jp/arm9/overlays/ov000/delinks.txt @@ -14,6 +14,14 @@ src/000_Second/Game/GameModeManagerBase_104.cpp: .text start:0x0206306c end:0x02063268 .data start:0x020b3658 end:0x020b367c +src/000_Second/UnkSystem1_Base.cpp: + .text start:0x02067d38 end:0x020687e0 + .data start:0x020b3870 end:0x020b389c + +src/000_Second/UnkSystem1_Derived1.cpp: + .text start:0x020687e0 end:0x02068a44 + .data start:0x020b389c end:0x020b38d0 + src/000_Second/Actor/Actor.cpp: .text start:0x02099b30 end:0x02099dfc .data start:0x020b48e4 end:0x020b4948 diff --git a/config/jp/arm9/overlays/ov000/relocs.txt b/config/jp/arm9/overlays/ov000/relocs.txt index d8b27fee..410c48c6 100644 --- a/config/jp/arm9/overlays/ov000/relocs.txt +++ b/config/jp/arm9/overlays/ov000/relocs.txt @@ -1761,7 +1761,7 @@ from:0x02067cbc kind:arm_call to:0x02067be4 module:overlay(0) from:0x02067cf0 kind:arm_call to:0x0203e740 module:main from:0x02067cfc kind:load to:0x02067d00 module:overlay(0) from:0x02067d08 kind:arm_call_thumb to:0x02015504 module:main -from:0x02067d58 kind:load to:0x020b3878 module:overlay(0) +from:0x02067d58 kind:load to:0x020b3870 add:8 module:overlay(0) from:0x02067e00 kind:arm_call to:0x02067f90 module:overlay(0) from:0x02067f2c kind:arm_call to:0x02067f64 module:overlay(0) from:0x02067f34 kind:load to:0x020b684c module:overlay(0) @@ -1801,21 +1801,21 @@ from:0x020687c4 kind:load to:0x027e0d04 module:dtcm from:0x020687c8 kind:load to:0x020b7ab8 module:overlay(0) from:0x020687cc kind:load to:0x020d9266 module:overlay(24) from:0x020687f4 kind:arm_call to:0x02067d38 module:overlay(0) -from:0x02068810 kind:load to:0x020b38a4 module:overlay(0) +from:0x02068810 kind:load to:0x020b389c add:8 module:overlay(0) from:0x02068828 kind:arm_call to:0x02067d38 module:overlay(0) -from:0x02068844 kind:load to:0x020b38a4 module:overlay(0) +from:0x02068844 kind:load to:0x020b389c add:8 module:overlay(0) from:0x02068860 kind:arm_call to:0x02067f3c module:overlay(0) from:0x02068878 kind:arm_call to:0x02069404 module:overlay(0) -from:0x02068888 kind:load to:0x020b38a4 module:overlay(0) +from:0x02068888 kind:load to:0x020b389c add:8 module:overlay(0) from:0x0206888c kind:load to:0x020b684c module:overlay(0) from:0x020688a8 kind:arm_call to:0x02067f3c module:overlay(0) from:0x020688c0 kind:arm_call to:0x02069404 module:overlay(0) from:0x020688c8 kind:arm_call to:0x02011ff4 module:main -from:0x020688d8 kind:load to:0x020b38a4 module:overlay(0) +from:0x020688d8 kind:load to:0x020b389c add:8 module:overlay(0) from:0x020688dc kind:load to:0x020b684c module:overlay(0) from:0x020688f8 kind:arm_call to:0x02067f3c module:overlay(0) from:0x02068910 kind:arm_call to:0x02069404 module:overlay(0) -from:0x02068920 kind:load to:0x020b38a4 module:overlay(0) +from:0x02068920 kind:load to:0x020b389c add:8 module:overlay(0) from:0x02068924 kind:load to:0x020b684c module:overlay(0) from:0x02068938 kind:arm_call to:0x02067f3c module:overlay(0) from:0x02068954 kind:arm_call to:0x02069404 module:overlay(0) diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 556edea6..3deeb8fd 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -686,28 +686,28 @@ func_ov000_02067c9c kind:function(arm,size=0x40) addr:0x02067c9c func_ov000_02067cdc kind:function(arm,size=0x24) addr:0x02067cdc func_ov000_02067d00 kind:function(arm,size=0x14) addr:0x02067d00 func_ov000_02067d14 kind:function(arm,size=0x24) addr:0x02067d14 -func_ov000_02067d38 kind:function(arm,size=0x28) addr:0x02067d38 -_ZN21UnkSystem1_ov000_Base8vfunc_00Ev kind:function(arm,size=0x1c) addr:0x02067d60 +_ZN21UnkSystem1_ov000_BaseC2Ei kind:function(arm,size=0x28) addr:0x02067d38 +_ZN21UnkSystem1_ov000_Base8vfunc_00Ei kind:function(arm,size=0x1c) addr:0x02067d60 _ZN21UnkSystem1_ov000_Base8vfunc_04Ev kind:function(arm,size=0x1c0) addr:0x02067d7c -func_ov000_02067f3c kind:function(arm,size=0x18) addr:0x02067f3c -func_ov000_02067f54 kind:function(arm,size=0x4) addr:0x02067f54 -func_ov000_02067f58 kind:function(arm,size=0x8) addr:0x02067f58 +_ZN21UnkSystem1_ov000_Base19func_ov000_020669b4EPh kind:function(arm,size=0x18) addr:0x02067f3c +_ZN21UnkSystem1_ov000_Base8vfunc_08Ei kind:function(arm,size=0x4) addr:0x02067f54 +_ZN21UnkSystem1_ov000_Base8vfunc_0CEv kind:function(arm,size=0x8) addr:0x02067f58 _ZN21UnkSystem1_ov000_Base8vfunc_18Ev kind:function(arm,size=0x4) addr:0x02067f60 -func_ov000_02067f64 kind:function(arm,size=0x2c) addr:0x02067f64 -func_ov000_02067f90 kind:function(arm,size=0x54) addr:0x02067f90 -func_ov000_02067fe4 kind:function(arm,size=0x3a0) addr:0x02067fe4 -_ZN21UnkSystem1_ov000_Base8vfunc_14Ev kind:function(arm,size=0x44c) addr:0x02068384 -func_ov000_020687d0 kind:function(arm,size=0x8) addr:0x020687d0 +_ZN21UnkSystem1_ov000_Base19func_ov000_020669dcEv kind:function(arm,size=0x2c) addr:0x02067f64 +_ZN21UnkSystem1_ov000_Base19func_ov000_02066a08EP10UnkStruct5 kind:function(arm,size=0x54) addr:0x02067f90 +_ZN21UnkSystem1_ov000_Base8vfunc_10EPt kind:function(arm,size=0x3a0) addr:0x02067fe4 +_ZN21UnkSystem1_ov000_Base8vfunc_14EPv kind:function(arm,size=0x44c) addr:0x02068384 +_ZN21UnkSystem1_ov000_Base8vfunc_1CEjii kind:function(arm,size=0x8) addr:0x020687d0 _ZN21UnkSystem1_ov000_Base8vfunc_20Eiii kind:function(arm,size=0x8) addr:0x020687d8 -_ZN25UnkSystem1_ov000_Derived1C2Eii kind:function(arm,size=0x34) addr:0x020687e0 -func_ov000_02068814 kind:function(arm,size=0x34) addr:0x02068814 -func_ov000_02068848 kind:function(arm,size=0x48) addr:0x02068848 -func_ov000_02068890 kind:function(arm,size=0x50) addr:0x02068890 +_ZN25UnkSystem1_ov000_Derived1C2EiPN24UnkStruct_ov000_02067bc410UnkStruct1E kind:function(arm,size=0x34) addr:0x020687e0 +_ZN25UnkSystem1_ov000_Derived1C1EiPN24UnkStruct_ov000_02067bc410UnkStruct1E kind:function(arm,size=0x34) addr:0x02068814 +_ZN25UnkSystem1_ov000_Derived1D1Ev kind:function(arm,size=0x48) addr:0x02068848 +_ZN25UnkSystem1_ov000_Derived1D0Ev kind:function(arm,size=0x50) addr:0x02068890 _ZN25UnkSystem1_ov000_Derived1D2Ev kind:function(arm,size=0x48) addr:0x020688e0 -func_ov000_02068928 kind:function(arm,size=0x3c) addr:0x02068928 -func_ov000_02068964 kind:function(arm,size=0x6c) addr:0x02068964 +_ZN25UnkSystem1_ov000_Derived119func_ov000_0206738cEv kind:function(arm,size=0x3c) addr:0x02068928 +_ZN25UnkSystem1_ov000_Derived18vfunc_08Ei kind:function(arm,size=0x6c) addr:0x02068964 _ZN25UnkSystem1_ov000_Derived18vfunc_0CEv kind:function(arm,size=0x40) addr:0x020689d0 -_ZN25UnkSystem1_ov000_Derived18vfunc_10Ev kind:function(arm,size=0x34) addr:0x02068a10 +_ZN25UnkSystem1_ov000_Derived18vfunc_10EPt kind:function(arm,size=0x34) addr:0x02068a10 func_ov000_02068a44 kind:function(arm,size=0xc0) addr:0x02068a44 func_ov000_02068b04 kind:function(arm,size=0x14) addr:0x02068b04 func_ov000_02068b18 kind:function(arm,size=0x60) addr:0x02068b18 @@ -734,13 +734,13 @@ func_ov000_02069240 kind:function(arm,size=0x5c) addr:0x02069240 _ZN24UnkStruct_ov000_020b504c19func_ov000_02067cf8EiiPN24UnkStruct_ov000_02067bc410UnkStruct1E kind:function(arm,size=0x168) addr:0x0206929c _ZN24UnkStruct_ov000_020b504c19func_ov000_02067e60Ehi kind:function(arm,size=0xfc) addr:0x02069404 func_ov000_02069500 kind:function(arm,size=0x2c) addr:0x02069500 -func_ov000_0206952c kind:function(arm,size=0xe0) addr:0x0206952c +_ZN24UnkStruct_ov000_020b504c19func_ov000_02067f88Eii kind:function(arm,size=0xe0) addr:0x0206952c func_ov000_0206960c kind:function(arm,size=0x14) addr:0x0206960c _ZN24UnkStruct_ov000_020b504c19func_ov000_0206807cEPvS0_ kind:function(arm,size=0x48) addr:0x02069620 func_ov000_02069668 kind:function(arm,size=0xd0) addr:0x02069668 func_ov000_02069738 kind:function(arm,size=0x98) addr:0x02069738 func_ov000_020697d0 kind:function(arm,size=0x94) addr:0x020697d0 -_ZN24UnkStruct_ov000_02067bc419func_ov000_020682c0Ei kind:function(arm,size=0x24) addr:0x02069864 +_ZN24UnkStruct_ov000_020b504c19func_ov000_020682c0Ei kind:function(arm,size=0x24) addr:0x02069864 func_ov000_02069888 kind:function(arm,size=0x2c) addr:0x02069888 func_ov000_020698b4 kind:function(arm,size=0x44) addr:0x020698b4 func_ov000_020698f8 kind:function(arm,size=0x24) addr:0x020698f8 @@ -3483,8 +3483,8 @@ data_ov000_020b3838 kind:data(any) addr:0x020b3838 data_ov000_020b3848 kind:data(any) addr:0x020b3848 data_ov000_020b3860 kind:data(any) addr:0x020b3860 data_ov000_020b3868 kind:data(any) addr:0x020b3868 -data_ov000_020b3878 kind:data(any) addr:0x020b3878 -data_ov000_020b38a4 kind:data(any) addr:0x020b38a4 +_ZTV21UnkSystem1_ov000_Base kind:data(any) addr:0x020b3870 +_ZTV25UnkSystem1_ov000_Derived1 kind:data(any) addr:0x020b389c data_ov000_020b38d0 kind:data(any) addr:0x020b38d0 data_ov000_020b38dc kind:data(any) addr:0x020b38dc data_ov000_020b38e4 kind:data(any) addr:0x020b38e4 diff --git a/include/Message/BMG.hpp b/include/Message/BMG.hpp new file mode 100644 index 00000000..75a8d5e2 --- /dev/null +++ b/include/Message/BMG.hpp @@ -0,0 +1,168 @@ +#pragma once + +#include "System/SysNew.hpp" +#include "global.h" +#include "types.h" + +#define BMG_MAGIC "MESGbmg1" +#define BMG_GET_INF1(pGroups, flags) ((pGroups)->entries[(flags) >> 0x10].func_02037258((flags) & 0xFFFF)) +#define BMG_GET_MSG_OFFSET(pGroups, flags) (BMG_GET_INF1((pGroups), (flags))->offset) +#define BMG_GET_MSG_ADDR(pGroups, flags) \ + ((u32) (pGroups)->entries[(flags) >> 0x10].pDAT1 + (BMG_GET_MSG_OFFSET((pGroups), (flags)) & ~1)) + +enum BMGTag { + /* "INF1" */ BMG_TAG_INF1 = '1FNI', + /* "FLW1" */ BMG_TAG_FLW1 = '1WLF', + /* "FLI1" */ BMG_TAG_FLI1 = '1ILF', + /* "DAT1" */ BMG_TAG_DAT1 = '1TAD', + /* "MID1" */ BMG_TAG_MID1 = '1DIM', + /* "STR1" */ BMG_TAG_STR1 = '1RTS', +}; + +enum BMGEncoding { + /* 1 */ BMG_ENCODING_CP1252 = 1, + /* 2 */ BMG_ENCODING_UTF16_BE, + /* 3 */ BMG_ENCODING_SHIFT_JIS, + /* 4 */ BMG_ENCODING_UTF8, + /* 5 */ BMG_ENCODING_MAX +}; + +//! TODO: find if this is still a thing +typedef enum BMGFileIndex { + /* 0 */ BMG_FILE_INDEX_0, + /* 34 */ BMG_FILE_INDEX_MAX +} BMGFileIndex; + +struct SectionBase { + /* 00 */ u32 tag; // "INF1", "DAT1", ... + /* 04 */ u32 size; // the size of the section + /* 08 */ +}; + +struct BMGHeader { + /* 00 */ char magic[8]; // always "MESGbmg1" + /* 08 */ u32 fileSize; // the size of the BMG file + /* 0C */ u32 numSections; // the number of sections (INF1, DAT1, ...) + /* 10 */ u8 encoding; // see `BMGEncoding` + /* 11 */ u8 unk_11[0x0F]; // alignment padding? + /* 20 */ +}; + +struct EntryINF1 { + /* 00 */ u32 offset; // relative to the end of the DAT1 header + /* 04 */ u8 mUnk_04; // flags/attributes? (+0x04 to +0x06) + /* 05 */ u8 mUnk_05; + /* 06 */ u8 mUnk_06; + /* 07 */ u8 mUnk_07; + /* 08 */ +}; + +struct SectionINF1 { + /* 00 */ SectionBase base; + /* 08 */ u16 numEntries; + /* 0A */ u16 entrySize; + /* 0C */ u16 groupId; + /* 0E */ u8 colorId; + /* 0F */ u8 mUnk_0F[0x1]; // alignment padding? + /* 10 */ EntryINF1 *entries; + /* 14 */ +}; + +enum InstrType { + /* 1 */ FLW1_TYPE_SHOW_MSG = 1, + /* 2 */ FLW1_TYPE_BRANCH = 2, + /* 3 */ FLW1_TYPE_EVENT = 3, + /* 4 */ +}; + +struct InstrShowMsg { + /* 01 */ u8 bmgFileIndex; // index into sBMGFiles + /* 02 */ u16 msgIndex; // index of INF1 entry + /* 04 */ s16 nextIndex; // index of FLW1 entry, 0xFFFF stops the conversation + /* 06 */ s16 nextBMGFileIndex; // index into sBMGFiles + /* 08 */ +}; + +struct InstrBranch { + /* 01 */ u8 mUnk_01; + /* 02 */ u16 funcIndex; // index of the query function to run + /* 04 */ u16 funcArg; // the argument to use in the function + /* 06 */ u16 flwEntry; // the index of the second section table to be used next in the conversation. + /* 08 */ +}; + +struct InstrEvent { + /* 01 */ u8 funcIndex; // index of the query function to run + /* 02 */ u16 flwEntry; // the index of the second section table to be used next in the conversation. + /* 04 */ u32 funcArg; // the argument to use in the function + /* 08 */ +}; + +struct FLW1Instr { + /* 00 */ u8 type; // see InstrType + /* 01 */ union { + InstrShowMsg showMsg; + InstrBranch branch; + InstrEvent event; + }; + /* 09 */ +}; + +struct SectionFLW1 { + /* 00 */ SectionBase base; + /* 04 */ u16 numInstructions; + /* 08 */ u16 numLabels; + /* 0C */ u32 mUnk_0C; // always zero? + /* 10 */ FLW1Instr *instructions; + /* 14 */ s16 *flwEntries; + /* 18 */ s8 *bmgFileIndices; + /* 1C */ +}; + +struct EntryFLI1 { + /* 00 */ u32 msgFlowID; + /* 04 */ u32 msgFlowNodeIndex; + /* 08 */ +}; + +struct SectionFLI1 { + /* 00 */ SectionBase base; + /* 04 */ u16 numEntries; + /* 08 */ u16 entrySize; + /* 0C */ u32 mUnk_0C; // always zero? + /* 10 */ EntryFLI1 *entries; + /* 14 */ +}; + +struct EntryDAT1 { + /* 00 */ char *text; + /* 04 */ +}; + +struct SectionDAT1 { + /* 00 */ SectionBase base; + /* 08 */ EntryDAT1 *entries; + /* 0C */ +}; + +struct BMGFileInfo { + /* 00 */ BMGHeader *pHeader; // pointer to the file's header + /* 04 */ SectionINF1 *pINF1; // pointer to the data informations (INF -> informations) + /* 08 */ SectionFLW1 *pFLW1; // pointer to the message flow data (FLW -> flow) + /* 0C */ SectionFLI1 *pFLI1; // pointer to the message flow index table (FLI -> flow index table) + /* 10 */ SectionDAT1 *pDAT1; // pointer to the data (DAT -> data) + /* 14 */ BMGHeader *mUnk_14; // same as pHeader (?) + /* 18 */ s16 mUnk_18; // stores `func_020372F0`->param_3 value (currently undetermined purpose) + /* 1A */ s16 groupId; // stores the group id + /* 1C */ +}; + +class BMGGroups : public SysObject { +public: + /* 00 */ BMGFileInfo *entries; // accessed with `groupId` + /* 04 */ s32 numEntries; + /* 08 */ + + BMGGroups(); + ~BMGGroups(); +}; diff --git a/include/Unknown/UnkStruct_ov000_02067bc4.hpp b/include/Unknown/UnkStruct_ov000_02067bc4.hpp index cec0bf94..08d91619 100644 --- a/include/Unknown/UnkStruct_ov000_02067bc4.hpp +++ b/include/Unknown/UnkStruct_ov000_02067bc4.hpp @@ -2,6 +2,7 @@ #include "Game/GameModeManager.hpp" #include "Item/Item.hpp" +#include "Message/BMG.hpp" #include "System/SysNew.hpp" #include "Unknown/UnkStruct_02049b18.hpp" #include "global.h" @@ -34,14 +35,22 @@ public: unk8 mUnk_0E; unk8 mUnk_0F; - UnkStruct1(unk32 param1) { + UnkStruct1(unk32 param1, unk32 param2) { mUnk_00 = 0; - mUnk_08 = -1; + mUnk_08 = param1; mUnk_0C = 0; mUnk_0D = 0; mUnk_04 = 0; } + UnkStruct1(unk32 param1) { + mUnk_00 = 0; + mUnk_04 = param1; + mUnk_08 = param1; + mUnk_0C = 0; + mUnk_0D = 0; + } + UnkStruct1() { mUnk_00 = 0; mUnk_08 = -1; @@ -71,9 +80,9 @@ typedef void (*UnkCallback2)(); class UnkStruct_ov000_020b504c_Sub3 : public SysObject { public: - /* 00 */ unk32 mUnk_00; - /* 04 */ unk32 mUnk_04; - /* 08 */ unk32 mUnk_08; + /* 00 */ SectionINF1 *mUnk_00; + /* 04 */ BMGHeader *mUnk_04; + /* 08 */ BMGHeader *mUnk_08; /* 0C */ unk32 mUnk_0C; /* 10 */ unk32 mUnk_10; /* 14 */ @@ -119,6 +128,8 @@ public: void func_ov000_0206807c(void *param1, void *param2); void func_ov000_0206807c(void *param1, unk32 param2); + unk32 func_ov000_02067f88(unk32 param1, unk32 param2); + void func_ov001_020be668(void); void func_ov001_020be6f4(void); }; diff --git a/include/Unknown/UnkSystem1.hpp b/include/Unknown/UnkSystem1.hpp index bfccee99..a7db29cb 100644 --- a/include/Unknown/UnkSystem1.hpp +++ b/include/Unknown/UnkSystem1.hpp @@ -5,21 +5,34 @@ #include "global.h" #include "types.h" -// seems to be a filesystem targeting the save file +struct UnkStruct5 { + unk8 mUnk_00; + u8 mUnk_01; + u16 mUnk_02; + + u16 mUnk_04; + u8 mUnk_06; +}; // data_ov000_020b2078 class UnkSystem1_ov000_Base : public SysObject { public: /* 00 (vtable) */ + /* 04 */ unk16 mUnk_04; + /* 06 */ u16 mUnk_06; + /* 08 */ unk32 mUnk_08; - UnkSystem1_ov000_Base(unk32 param1, unk32 param2); + UnkSystem1_ov000_Base(unk32 param1); + bool func_ov000_020669b4(u8 *param1); + void func_ov000_020669dc(); + unk32 func_ov000_02066a08(UnkStruct5 *param1); - /* 00 */ virtual void vfunc_00(); // func_ov000_020667d8 + /* 00 */ virtual void vfunc_00(unk32 param1); // func_ov000_020667d8 /* 04 */ virtual void vfunc_04(); // func_ov000_020667f4 /* 08 */ virtual void vfunc_08(unk32 param1); // func_ov000_020669cc - /* 0C */ virtual void vfunc_0C(); // func_ov000_020669d0 - /* 10 */ virtual void vfunc_10(); // func_ov000_02066a5c - /* 14 */ virtual void vfunc_14(); // func_ov000_02066dfc + /* 0C */ virtual unk32 vfunc_0C(); // func_ov000_020669d0 + /* 10 */ virtual unk32 vfunc_10(u16 *param1); // func_ov000_02066a5c + /* 14 */ virtual unk32 vfunc_14(void *param1); // func_ov000_02066dfc /* 18 */ virtual void vfunc_18(); // func_ov000_020669d8 /* 1C */ virtual unk32 vfunc_1C(u32 param1, unk32 param2, unk32 param3); // func_ov000_02067234 /* 20 */ virtual unk32 vfunc_20(unk32 param1, unk32 param2, unk32 param3); // func_ov000_0206723c @@ -30,21 +43,19 @@ public: class UnkSystem1_ov000_Derived1 : public UnkSystem1_ov000_Base { public: /* 00 (base) */ - /* 04 */ unk16 mUnk_04; - /* 06 */ unk16 mUnk_06; - /* 08 */ unk32 mUnk_08; - /* 0C */ unk32 mUnk_0C; + /* 0C */ UnkStruct_ov000_02067bc4::UnkStruct1 *mUnk_0C; /* 10 */ unk16 mUnk_10; /* 12 */ unk8 mUnk_12; // file slot index /* 13 */ unk8 mUnk_13; /* 14 */ UnkSystem1_ov000_Derived1(); - UnkSystem1_ov000_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov000_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); + void func_ov000_0206738c(); /* 08 */ virtual void vfunc_08(unk32 param1) override; // func_ov000_020673c8 - /* 0C */ virtual void vfunc_0C() override; // func_ov000_02067434 - /* 10 */ virtual void vfunc_10() override; // func_ov000_02067474 + /* 0C */ virtual unk32 vfunc_0C() override; // func_ov000_02067434 + /* 10 */ virtual unk32 vfunc_10(u16 *param1) override; // func_ov000_02067474 /* 24 */ virtual ~UnkSystem1_ov000_Derived1(); // func_ov000_020672ac & func_ov000_020672f4 }; @@ -56,7 +67,7 @@ public: UnkSystem1_ov000_Derived2(unk32 param1, unk32 param2); /* 08 */ virtual void vfunc_08(unk32 param1) override; // func_ov000_0209fbec - /* 0C */ virtual void vfunc_0C() override; // func_ov000_0209fcdc + /* 0C */ virtual unk32 vfunc_0C() override; // func_ov000_0209fcdc /* 24 */ virtual ~UnkSystem1_ov000_Derived2() override; // func_ov000_0209fb18 & func_ov000_0209fb5c }; @@ -65,7 +76,7 @@ class UnkSystem1_ov010 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov010(unk32 param1, unk32 param2); + UnkSystem1_ov010(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 08 */ virtual void vfunc_08(unk32 param1) override; // func_ov010_020b8844 /* 1C */ virtual unk32 vfunc_1C(u32 param1, unk32 param2, unk32 param3) override; // func_ov010_020b8878 @@ -76,7 +87,7 @@ class UnkSystem1_ov010_Derived1 : public UnkSystem1_ov010 { public: /* 00 (base) */ - UnkSystem1_ov010_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov010_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov010_Derived1() override; // func_ov010_020b88b0 }; @@ -85,7 +96,7 @@ class UnkSystem1_ov016 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov016(unk32 param1, unk32 param2); + UnkSystem1_ov016(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov016() override; // func_ov016_020b7650 }; @@ -94,7 +105,7 @@ class UnkSystem1_ov016_Derived1 : public UnkSystem1_ov016 { public: /* 00 (base) */ - UnkSystem1_ov016_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov016_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov016_Derived1() override; // func_ov016_020b7664 /* 2C */ virtual void vfunc_2C(); // func_ov016_020b776c }; @@ -105,7 +116,7 @@ public: /* 00 (base) */ UnkSystem1_ov019_1(); - UnkSystem1_ov019_1(unk32 param1, unk32 param2) : + UnkSystem1_ov019_1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2) : UnkSystem1_ov000_Derived1(param1, param2) {} /* 24 */ virtual ~UnkSystem1_ov019_1() override {} // func_ov019_020c4914 @@ -121,7 +132,7 @@ public: /* 1C */ UnkSystem1_ov019_Derived1(); - UnkSystem1_ov019_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov019_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); void func_ov019_020c5200(); unk32 func_ov019_020c5540(bool param1, unk16 param2); @@ -137,7 +148,7 @@ class UnkSystem1_ov019_2 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov019_2(unk32 param1, unk32 param2) : + UnkSystem1_ov019_2(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2) : UnkSystem1_ov000_Derived1(param1, param2) {} /* 24 */ virtual ~UnkSystem1_ov019_2() override {} // func_ov019_020c4c38 @@ -166,7 +177,7 @@ public: /* 00 (base) */ /* 14 */ - UnkSystem1_ov019_3(unk32 param1, unk32 param2) : + UnkSystem1_ov019_3(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2) : UnkSystem1_ov000_Derived1(param1, param2) {} /* 24 */ virtual ~UnkSystem1_ov019_3() override {} // func_ov019_020c5fd0 @@ -201,7 +212,7 @@ class UnkSystem1_ov036 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov036(unk32 param1, unk32 param2); + UnkSystem1_ov036(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov036() override; // func_ov036_0211eb68 }; @@ -210,7 +221,7 @@ class UnkSystem1_ov036_Derived1 : public UnkSystem1_ov036 { public: /* 00 (base) */ - UnkSystem1_ov036_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov036_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov036_Derived1() override; // func_ov036_02120c18 }; @@ -220,7 +231,7 @@ class UnkSystem1_ov056 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov056(unk32 param1, unk32 param2); + UnkSystem1_ov056(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov056() override; // func_ov056_0213b910 }; @@ -229,7 +240,7 @@ class UnkSystem1_ov056_Derived1 : public UnkSystem1_ov056 { public: /* 00 (base) */ - UnkSystem1_ov056_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov056_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov056_Derived1() override; // func_ov056_0213d4dc }; @@ -239,7 +250,7 @@ class UnkSystem1_ov059 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov059(unk32 param1, unk32 param2); + UnkSystem1_ov059(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov059() override; // func_ov059_021605c8 (?) }; @@ -248,7 +259,7 @@ class UnkSystem1_ov059_Derived1 : public UnkSystem1_ov059 { public: /* 00 (base) */ - UnkSystem1_ov059_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov059_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov059_Derived1() override; // func_ov059_02160d98 }; @@ -258,7 +269,7 @@ class UnkSystem1_ov062 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov062(unk32 param1, unk32 param2); + UnkSystem1_ov062(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov062() override; // func_ov062_0215cf18 }; @@ -267,7 +278,7 @@ class UnkSystem1_ov062_Derived1 : public UnkSystem1_ov062 { public: /* 00 (base) */ - UnkSystem1_ov062_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov062_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov062_Derived1() override; // func_ov062_0215e734 }; @@ -277,7 +288,7 @@ class UnkSystem1_ov063 : public UnkSystem1_ov000_Derived1 { public: /* 00 (base) */ - UnkSystem1_ov063(unk32 param1, unk32 param2); + UnkSystem1_ov063(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov063() override; // func_ov063_0215f1c0 }; @@ -286,7 +297,7 @@ class UnkSystem1_ov063_Derived1 : public UnkSystem1_ov063 { public: /* 00 (base) */ - UnkSystem1_ov063_Derived1(unk32 param1, unk32 param2); + UnkSystem1_ov063_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2); /* 24 */ virtual ~UnkSystem1_ov063_Derived1() override; // func_ov063_0215f29c }; diff --git a/src/000_Second/UnkSystem1_Base.cpp b/src/000_Second/UnkSystem1_Base.cpp new file mode 100644 index 00000000..98647f2c --- /dev/null +++ b/src/000_Second/UnkSystem1_Base.cpp @@ -0,0 +1,68 @@ +#include "Unknown/UnkStruct_ov000_02067bc4.hpp" +#include "Unknown/UnkSystem1.hpp" + +ARM UnkSystem1_ov000_Base::UnkSystem1_ov000_Base(unk32 param1) { + this->mUnk_04 = 0; + this->mUnk_06 = -1; + this->mUnk_08 = param1; +} + +ARM void UnkSystem1_ov000_Base::vfunc_00(unk32 param1) { + this->mUnk_08 = param1; + this->mUnk_04 = 0; + this->mUnk_06 = -1; +} + +ARM void UnkSystem1_ov000_Base::vfunc_04() {} + +ARM bool UnkSystem1_ov000_Base::func_ov000_020669b4(u8 *param1) { + u16 unk_06 = this->mUnk_06; + + if (unk_06 <= 0xFF) { + *param1 = unk_06; + return true; + } + + return false; +} + +ARM void UnkSystem1_ov000_Base::vfunc_08(unk32 param1) {} + +ARM unk32 UnkSystem1_ov000_Base::vfunc_0C() { + return 0; +} + +ARM void UnkSystem1_ov000_Base::vfunc_18() {} + +ARM void UnkSystem1_ov000_Base::func_ov000_020669dc() { + this->vfunc_18(); + this->mUnk_06 = -1; + this->mUnk_08 = -1; +} + +ARM unk32 UnkSystem1_ov000_Base::func_ov000_02066a08(UnkStruct5 *param1) { + if (this->mUnk_04 == 0) { + this->vfunc_08((param1->mUnk_01 << 16) | param1->mUnk_02); + this->mUnk_04++; + } else { + return this->vfunc_0C(); + } + + return 0; +} + +ARM unk32 UnkSystem1_ov000_Base::vfunc_10(u16 *param1) { + return -1; +} + +ARM unk32 UnkSystem1_ov000_Base::vfunc_14(void *param1) { + return 1; +} + +ARM unk32 UnkSystem1_ov000_Base::vfunc_1C(u32 param1, unk32 param2, unk32 param3) { + return 1; +} + +ARM unk32 UnkSystem1_ov000_Base::vfunc_20(unk32 param1, unk32 param2, unk32 param3) { + return -1; +} diff --git a/src/000_Second/UnkSystem1_Derived1.cpp b/src/000_Second/UnkSystem1_Derived1.cpp new file mode 100644 index 00000000..52ef8ec5 --- /dev/null +++ b/src/000_Second/UnkSystem1_Derived1.cpp @@ -0,0 +1,56 @@ +#include "Unknown/UnkStruct_ov000_02067bc4.hpp" +#include "Unknown/UnkSystem1.hpp" + +ARM UnkSystem1_ov000_Derived1::UnkSystem1_ov000_Derived1(unk32 param1, UnkStruct_ov000_02067bc4::UnkStruct1 *param2) : + UnkSystem1_ov000_Base(-1) { + this->mUnk_0C = param2; + this->mUnk_10 = param1; +} + +ARM UnkSystem1_ov000_Derived1::~UnkSystem1_ov000_Derived1() { + u8 local_10[4]; + + if (this->func_ov000_020669b4(local_10)) { + data_ov000_020b504c.func_ov000_02067e60(local_10[0], this->mUnk_10); + } +} + +ARM void UnkSystem1_ov000_Derived1::func_ov000_0206738c() { + u8 local_10[4]; + + if (this->func_ov000_020669b4(local_10)) { + data_ov000_020b504c.func_ov000_02067e60(local_10[0], this->mUnk_10); + } +} + +ARM void UnkSystem1_ov000_Derived1::vfunc_08(unk32 param1) { + if (this->mUnk_0C != 0) { + this->mUnk_06 = data_ov000_020b504c.func_ov000_02067cf8(param1, this->mUnk_10, this->mUnk_0C); + } else { + UnkStruct_ov000_02067bc4::UnkStruct1 local_18(-1); + this->mUnk_06 = data_ov000_020b504c.func_ov000_02067cf8(param1, this->mUnk_10, &local_18); + } +} + +ARM unk32 UnkSystem1_ov000_Derived1::vfunc_0C() { + u8 local_10[4]; + + if (this->func_ov000_020669b4(local_10)) { + return data_ov000_020b504c.func_ov000_02067f88(local_10[0], this->mUnk_10); + } + + return 0; +} + +ARM unk32 UnkSystem1_ov000_Derived1::vfunc_10(u16 *param1) { + switch (param1[1]) { + case 1: + case 2: + case 3: + return data_ov000_020b504c.func_ov000_020682c0(this->mUnk_10); + default: + break; + } + + return this->UnkSystem1_ov000_Base::vfunc_10(param1); +} diff --git a/src/019_MainSelect/019_UnkSystem1_ov019_Derived1.cpp b/src/019_MainSelect/019_UnkSystem1_ov019_Derived1.cpp index ac21364f..b5478a71 100644 --- a/src/019_MainSelect/019_UnkSystem1_ov019_Derived1.cpp +++ b/src/019_MainSelect/019_UnkSystem1_ov019_Derived1.cpp @@ -126,7 +126,7 @@ ARM unk32 UnkSystem1_ov019_Derived1::func_ov019_020c5540(bool param1, unk16 para ARM void UnkSystem1_ov019_Derived1::func_ov019_020c5590(unk32 param1, unk32 param2, unk32 param3) { data_02049bd4.mUnk_04++; - UnkStruct_ov000_02067bc4::UnkStruct1 auStack_20(param3); + UnkStruct_ov000_02067bc4::UnkStruct1 auStack_20(-1, param3); this->mUnk_1A = data_ov000_020b504c.func_ov000_02067cf8(param1, this->mUnk_10, &auStack_20); data_ov000_020b504c.func_ov000_02067bc4(this->mUnk_10)->func_02021bec(1); data_ov000_020b504c.func_ov000_02067bc4(this->mUnk_10)->func_02021c08(); diff --git a/tools/configure.py b/tools/configure.py index bdf1bacb..b73268fd 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -139,6 +139,8 @@ config.libs = [ [ Object("000_Second/Game/GameModeManagerBase_104_0C.cpp"), Object("000_Second/Game/GameModeManagerBase_104.cpp"), + Object("000_Second/UnkSystem1_Base.cpp"), + Object("000_Second/UnkSystem1_Derived1.cpp"), Object("000_Second/Actor/Actor.cpp"), Object("000_Second/Actor/ActorManager.cpp"), Object("000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp"),