diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index bc746fd2..86f66af6 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -210,9 +210,9 @@ func_01fff520 kind:function(arm,size=0x64) addr:0x01fff520 _ZN9MapObject14GetMapObjectIdEv kind:function(arm,size=0xc) addr:0x01fff584 func_01fff590 kind:function(arm,size=0x40) addr:0x01fff590 _ZN10ActorRupee13func_01fff5d0Eii kind:function(arm,size=0x3c) addr:0x01fff5d0 -func_01fff60c kind:function(arm,size=0x8c) addr:0x01fff60c +_ZN18UnkStruct_027e09b413func_01fff60cEiiihii kind:function(arm,size=0x8c) addr:0x01fff60c func_01fff698 kind:function(arm,size=0x38) addr:0x01fff698 -func_01fff6d0 kind:function(arm,size=0x74) addr:0x01fff6d0 +_ZN21UnkStruct_027e0cd8_1013func_01fff6d0EP5Vec3pPiS2_ kind:function(arm,size=0x74) addr:0x01fff6d0 func_01fff744 kind:function(arm,size=0x20) addr:0x01fff744 func_01fff764 kind:function(arm,size=0xec) addr:0x01fff764 func_01fff850 kind:function(arm,size=0x158) addr:0x01fff850 diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 098dd3b7..39917415 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -57,6 +57,10 @@ src/000_Second/Actor/ActorUnkEFIK.cpp: .data start:0x020b342c end:0x020b34b0 .bss start:0x020b5ce4 end:0x020b5d30 +src/000_Second/MapObject/MapObject.cpp: + .text start:0x0209cfe0 end:0x0209d700 + .data start:0x020b3588 end:0x020b35c8 + src/000_Second/MapObject/MapObjectSwitchStep.cpp: .text start:0x0209dce0 end:0x0209e3f8 .rodata start:0x020af550 end:0x020af574 diff --git a/config/eur/arm9/overlays/ov000/relocs.txt b/config/eur/arm9/overlays/ov000/relocs.txt index 22368167..9b6b9002 100644 --- a/config/eur/arm9/overlays/ov000/relocs.txt +++ b/config/eur/arm9/overlays/ov000/relocs.txt @@ -7151,7 +7151,7 @@ from:0x0209cfa4 kind:load to:0x020b3578 module:overlay(0) from:0x0209cfa8 kind:load to:0x020b3580 module:overlay(0) from:0x0209d008 kind:arm_call to:0x0209c7c8 module:overlay(0) from:0x0209d060 kind:arm_call to:0x02028cdc module:main -from:0x0209d08c kind:load to:0x020b3590 module:overlay(0) +from:0x0209d08c kind:load to:0x020b3588 add:0x8 module:overlay(0) from:0x0209d090 kind:load to:0x020b5d34 module:overlay(0) from:0x0209d0a0 kind:arm_call to:0x02011ff4 module:main from:0x0209d0f4 kind:arm_call to:0x01fff6d0 module:itcm @@ -7197,7 +7197,7 @@ from:0x0209d6f8 kind:arm_call to:0x01ffb6e4 module:itcm from:0x0209d708 kind:arm_call to:0x0209cfe0 module:overlay(0) from:0x0209d730 kind:arm_call to:0x0209da78 module:overlay(0) from:0x0209d740 kind:arm_call to:0x0209da78 module:overlay(0) -from:0x0209d74c kind:load to:0x020b35d0 module:overlay(0) +from:0x0209d74c kind:load to:0x020b35c8 add:0x8 module:overlay(0) from:0x0209d758 kind:arm_call to:0x0209d0ac module:overlay(0) from:0x0209d760 kind:arm_call to:0x02011ff4 module:main from:0x0209d774 kind:arm_call to:0x0209d0ac module:overlay(0) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 9b53e6a3..2dab51da 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -488,7 +488,7 @@ func_ov000_02061828 kind:function(thumb,size=0x28) addr:0x02061828 func_ov000_02061850 kind:function(arm,size=0x18) addr:0x02061850 func_ov000_02061868 kind:function(arm,size=0x1e0) addr:0x02061868 func_ov000_02061a48 kind:function(arm,size=0x28) addr:0x02061a48 -func_ov000_02061a70 kind:function(arm,size=0xc) addr:0x02061a70 +_ZN18UnkStruct_027e099819func_ov000_02061a70Ev kind:function(arm,size=0xc) addr:0x02061a70 func_ov000_02061a7c kind:function(arm,size=0x10) addr:0x02061a7c _ZN26GameModeManagerBase_104_0CD1Ev kind:function(arm,size=0x18) addr:0x02061a8c _ZN26GameModeManagerBase_104_0CD0Ev kind:function(arm,size=0x20) addr:0x02061aa4 @@ -1416,7 +1416,7 @@ func_ov000_0207bffc kind:function(arm,size=0x4) addr:0x0207bffc func_ov000_0207c000 kind:function(arm,size=0x8) addr:0x0207c000 func_ov000_0207c008 kind:function(arm,size=0x8) addr:0x0207c008 func_ov000_0207c010 kind:function(arm,size=0x8) addr:0x0207c010 -_ZN24MapObjectProfile_D4_BaseC2Ev kind:function(arm,size=0x30) addr:0x0207c018 +_ZN17MapObject_10_BaseC2Ev kind:function(arm,size=0x30) addr:0x0207c018 func_ov000_0207c048 kind:function(arm,size=0x30) addr:0x0207c048 func_ov000_0207c078 kind:function(arm,size=0x38) addr:0x0207c078 func_ov000_0207c0b0 kind:function(arm,size=0x54) addr:0x0207c0b0 @@ -1557,7 +1557,7 @@ func_ov000_02080098 kind:function(arm,size=0xc8) addr:0x02080098 func_ov000_02080160 kind:function(arm,size=0x20) addr:0x02080160 _ZN21UnkStruct_027e0cd8_0c19func_ov000_02080180EPv kind:function(arm,size=0x10) addr:0x02080180 func_ov000_02080190 kind:function(arm,size=0x20) addr:0x02080190 -func_ov000_020801b0 kind:function(arm,size=0x60) addr:0x020801b0 +_ZN21UnkStruct_027e0cd8_0c19func_ov000_020801b0EP5Vec2bii kind:function(arm,size=0x60) addr:0x020801b0 func_ov000_02080210 kind:function(arm,size=0x78) addr:0x02080210 func_ov000_02080288 kind:function(arm,size=0x64) addr:0x02080288 func_ov000_020802ec kind:function(arm,size=0x78) addr:0x020802ec @@ -1638,8 +1638,8 @@ _ZN18UnkStruct_027e0cd819func_ov000_02081e30Eii kind:function(arm,size=0x8c) add func_ov000_02081ebc kind:function(arm,size=0x10) addr:0x02081ebc _ZN18UnkStruct_027e0cd819func_ov000_02081eccEsi kind:function(arm,size=0x10) addr:0x02081ecc func_ov000_02081edc kind:function(arm,size=0x10) addr:0x02081edc -func_ov000_02081eec kind:function(arm,size=0x50) addr:0x02081eec -func_ov000_02081f3c kind:function(arm,size=0x4c) addr:0x02081f3c +_ZN18UnkStruct_027e0cd819func_ov000_02081eecEsii kind:function(arm,size=0x50) addr:0x02081eec +_ZN18UnkStruct_027e0cd819func_ov000_02081f3cEsi kind:function(arm,size=0x4c) addr:0x02081f3c func_ov000_02081f88 kind:function(arm,size=0x90) addr:0x02081f88 func_ov000_02082018 kind:function(arm,size=0x10c) addr:0x02082018 func_ov000_02082124 kind:function(arm,size=0x40) addr:0x02082124 @@ -2511,7 +2511,7 @@ func_ov000_0209c820 kind:function(arm,size=0x8) addr:0x0209c820 func_ov000_0209c828 kind:function(arm,size=0x8c) addr:0x0209c828 func_ov000_0209c8b4 kind:function(arm,size=0x28) addr:0x0209c8b4 func_ov000_0209c8dc kind:function(arm,size=0x8) addr:0x0209c8dc -func_ov000_0209c8e4 kind:function(arm,size=0x8) addr:0x0209c8e4 +_ZN16MapObjectProfile19func_ov000_0209c8e4EP12MapObject_20 kind:function(arm,size=0x8) addr:0x0209c8e4 func_ov000_0209c8ec kind:function(arm,size=0x70) addr:0x0209c8ec func_ov000_0209c95c kind:function(arm,size=0x14) addr:0x0209c95c func_ov000_0209c970 kind:function(arm,size=0x2c) addr:0x0209c970 @@ -2553,28 +2553,28 @@ _ZN9MapObjectD0Ev kind:function(arm,size=0x14) addr:0x0209d098 _ZN9MapObjectD2Ev kind:function(arm,size=0x4) addr:0x0209d0ac _ZN9MapObject8vfunc_00Ev kind:function(arm,size=0x8) addr:0x0209d0b0 _ZN9MapObject8vfunc_04Ev kind:function(arm,size=0x4) addr:0x0209d0b8 -_ZN9MapObject19func_ov000_0209d0bcEv kind:function(arm,size=0x58) addr:0x0209d0bc +_ZN9MapObject19func_ov000_0209d0bcEP5Vec2bPS_ kind:function(arm,size=0x58) addr:0x0209d0bc _ZN9MapObject19func_ov000_0209d114Ev kind:function(arm,size=0x18) addr:0x0209d114 _ZN9MapObject19func_ov000_0209d12cEv kind:function(arm,size=0x18) addr:0x0209d12c -_ZN9MapObject19func_ov000_0209d144Ev kind:function(arm,size=0x88) addr:0x0209d144 +_ZN9MapObject19func_ov000_0209d144EP5Vec2sii kind:function(arm,size=0x88) addr:0x0209d144 _ZN9MapObject8vfunc_1CEv kind:function(arm,size=0x8) addr:0x0209d1cc _ZN9MapObject8vfunc_20Ev kind:function(arm,size=0x4) addr:0x0209d1d4 _ZN9MapObject8vfunc_24Ev kind:function(arm,size=0xc) addr:0x0209d1d8 _ZN9MapObject8vfunc_28Ev kind:function(arm,size=0x8) addr:0x0209d1e4 -_ZN9MapObject8vfunc_2CEv kind:function(arm,size=0x40) addr:0x0209d1ec -_ZN9MapObject19func_ov000_0209d22cEv kind:function(arm,size=0x48) addr:0x0209d22c -_ZN9MapObject19func_ov000_0209d274Ev kind:function(arm,size=0x28) addr:0x0209d274 +_ZN9MapObject8vfunc_2CEP5Vec3p kind:function(arm,size=0x40) addr:0x0209d1ec +_ZN9MapObject19func_ov000_0209d22cEPsPS_i kind:function(arm,size=0x48) addr:0x0209d22c +_ZN9MapObject19func_ov000_0209d274Ei kind:function(arm,size=0x28) addr:0x0209d274 _ZN9MapObject19func_ov000_0209d29cEi kind:function(arm,size=0x28) addr:0x0209d29c _ZN9MapObject19func_ov000_0209d2c4Eii kind:function(arm,size=0x2c) addr:0x0209d2c4 -_ZN9MapObject19func_ov000_0209d2f0Ev kind:function(arm,size=0xc4) addr:0x0209d2f0 -_ZN9MapObject19func_ov000_0209d3b4Ev kind:function(arm,size=0x80) addr:0x0209d3b4 -_ZN9MapObject19func_ov000_0209d434Ev kind:function(arm,size=0xe4) addr:0x0209d434 -_ZN9MapObject19func_ov000_0209d518Ev kind:function(arm,size=0x34) addr:0x0209d518 -_ZN9MapObject19func_ov000_0209d54cEv kind:function(arm,size=0x7c) addr:0x0209d54c -_ZN9MapObject19func_ov000_0209d5c8Ev kind:function(arm,size=0x4c) addr:0x0209d5c8 -_ZN9MapObject19func_ov000_0209d614Ev kind:function(arm,size=0x54) addr:0x0209d614 +_ZN9MapObject19func_ov000_0209d2f0EiiP5Vec2b kind:function(arm,size=0xc4) addr:0x0209d2f0 +_ZN9MapObject19func_ov000_0209d3b4Eii kind:function(arm,size=0x80) addr:0x0209d3b4 +_ZN9MapObject19func_ov000_0209d434EPcP34UnkStruct_ov019_020d24c8_28_258_00i kind:function(arm,size=0xe4) addr:0x0209d434 +_ZN9MapObject19func_ov000_0209d518Eiiih kind:function(arm,size=0x34) addr:0x0209d518 +_ZN9MapObject19func_ov000_0209d54cEitP5Vec3pst kind:function(arm,size=0x7c) addr:0x0209d54c +_ZN9MapObject19func_ov000_0209d5c8E8ActorRef kind:function(arm,size=0x4c) addr:0x0209d5c8 +_ZN9MapObject19func_ov000_0209d614Ei kind:function(arm,size=0x54) addr:0x0209d614 _ZN9MapObject19func_ov000_0209d668Ev kind:function(arm,size=0x44) addr:0x0209d668 -_ZN9MapObject19func_ov000_0209d6acEv kind:function(arm,size=0x54) addr:0x0209d6ac +_ZN9MapObject19func_ov000_0209d6acEP5Vec3p kind:function(arm,size=0x54) addr:0x0209d6ac func_ov000_0209d700 kind:function(arm,size=0x50) addr:0x0209d700 _ZN19func_ov000_0209d750D0Ev kind:function(arm,size=0x1c) addr:0x0209d750 _ZN19func_ov000_0209d76cD2Ev kind:function(arm,size=0x14) addr:0x0209d76c @@ -3694,13 +3694,13 @@ data_ov000_020b3568 kind:data(any) addr:0x020b3568 data_ov000_020b3570 kind:data(any) addr:0x020b3570 data_ov000_020b3578 kind:data(any) addr:0x020b3578 data_ov000_020b3580 kind:data(any) addr:0x020b3580 -data_ov000_020b3590 kind:data(any) addr:0x020b3590 -data_ov000_020b35d0 kind:data(any) addr:0x020b35d0 +_ZTV9MapObject kind:data(any) addr:0x020b3588 +data_ov000_020b35d0 kind:data(any) addr:0x020b35c8 data_ov000_020b3630 kind:data(any) addr:0x020b3630 data_ov000_020b363c kind:data(any) addr:0x020b363c _ZTV26MapObjectProfileSwitchStep kind:data(any) addr:0x020b3678 _ZTV31MapObjectProfileSwitchStep_Base kind:data(any) addr:0x020b3694 -_ZTV19MapObjectProfile_D4 kind:data(any) addr:0x020b36b0 +_ZTV12MapObject_10 kind:data(any) addr:0x020b36b0 _ZTV22MapObjectSwitchStep_40 kind:data(any) addr:0x020b36d8 _ZTV19MapObjectSwitchStep kind:data(any) addr:0x020b3704 _ZTV26MapObjectProfileMiniBlocks kind:data(any) addr:0x020b3744 diff --git a/config/jp/arm9/itcm/symbols.txt b/config/jp/arm9/itcm/symbols.txt index bc746fd2..86f66af6 100644 --- a/config/jp/arm9/itcm/symbols.txt +++ b/config/jp/arm9/itcm/symbols.txt @@ -210,9 +210,9 @@ func_01fff520 kind:function(arm,size=0x64) addr:0x01fff520 _ZN9MapObject14GetMapObjectIdEv kind:function(arm,size=0xc) addr:0x01fff584 func_01fff590 kind:function(arm,size=0x40) addr:0x01fff590 _ZN10ActorRupee13func_01fff5d0Eii kind:function(arm,size=0x3c) addr:0x01fff5d0 -func_01fff60c kind:function(arm,size=0x8c) addr:0x01fff60c +_ZN18UnkStruct_027e09b413func_01fff60cEiiihii kind:function(arm,size=0x8c) addr:0x01fff60c func_01fff698 kind:function(arm,size=0x38) addr:0x01fff698 -func_01fff6d0 kind:function(arm,size=0x74) addr:0x01fff6d0 +_ZN21UnkStruct_027e0cd8_1013func_01fff6d0EP5Vec3pPiS2_ kind:function(arm,size=0x74) addr:0x01fff6d0 func_01fff744 kind:function(arm,size=0x20) addr:0x01fff744 func_01fff764 kind:function(arm,size=0xec) addr:0x01fff764 func_01fff850 kind:function(arm,size=0x158) addr:0x01fff850 diff --git a/config/jp/arm9/overlays/ov000/delinks.txt b/config/jp/arm9/overlays/ov000/delinks.txt index 52812839..344306e7 100644 --- a/config/jp/arm9/overlays/ov000/delinks.txt +++ b/config/jp/arm9/overlays/ov000/delinks.txt @@ -56,6 +56,10 @@ src/000_Second/Actor/ActorUnkEFIK.cpp: .data start:0x020b4c2c end:0x020b4cb0 .bss start:0x020b74f4 end:0x020b7540 +src/000_Second/MapObject/MapObject.cpp: + .text start:0x0209e7a4 end:0x0209eec4 + .data start:0x020b4d88 end:0x020b4dc8 + src/000_Second/MapObject/MapObjectSwitchStep.cpp: .text start:0x0209f4a4 end:0x0209fbbc .rodata start:0x020af548 end:0x020af56c diff --git a/config/jp/arm9/overlays/ov000/relocs.txt b/config/jp/arm9/overlays/ov000/relocs.txt index 3d8a8bb5..02352231 100644 --- a/config/jp/arm9/overlays/ov000/relocs.txt +++ b/config/jp/arm9/overlays/ov000/relocs.txt @@ -7152,7 +7152,7 @@ from:0x0209e768 kind:load to:0x020b4d78 module:overlay(0) from:0x0209e76c kind:load to:0x020b4d80 module:overlay(0) from:0x0209e7cc kind:arm_call to:0x0209df94 module:overlay(0) from:0x0209e824 kind:arm_call to:0x0202a20c module:main -from:0x0209e850 kind:load to:0x020b4d90 module:overlay(0) +from:0x0209e850 kind:load to:0x020b4d88 add:0x8 module:overlay(0) from:0x0209e854 kind:load to:0x020b7544 module:overlay(0) from:0x0209e864 kind:arm_call to:0x02011ff4 module:main from:0x0209e8b8 kind:arm_call to:0x01fff6d0 module:itcm @@ -7198,7 +7198,7 @@ from:0x0209eebc kind:arm_call to:0x01ffb6e4 module:itcm from:0x0209eecc kind:arm_call to:0x0209e7a4 module:overlay(0) from:0x0209eef4 kind:arm_call to:0x0209f23c module:overlay(0) from:0x0209ef04 kind:arm_call to:0x0209f23c module:overlay(0) -from:0x0209ef10 kind:load to:0x020b4dd0 module:overlay(0) +from:0x0209ef10 kind:load to:0x020b4dc8 add:0x8 module:overlay(0) from:0x0209ef1c kind:arm_call to:0x0209e870 module:overlay(0) from:0x0209ef24 kind:arm_call to:0x02011ff4 module:main from:0x0209ef38 kind:arm_call to:0x0209e870 module:overlay(0) diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 6c3fd35f..363349e5 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -488,7 +488,7 @@ func_ov000_02062db0 kind:function(thumb,size=0x28) addr:0x02062db0 func_ov000_02062dd8 kind:function(arm,size=0x18) addr:0x02062dd8 func_ov000_02062df0 kind:function(arm,size=0x1e0) addr:0x02062df0 func_ov000_02062fd0 kind:function(arm,size=0x28) addr:0x02062fd0 -func_ov000_02062ff8 kind:function(arm,size=0xc) addr:0x02062ff8 +_ZN18UnkStruct_027e099819func_ov000_02061a70Ev kind:function(arm,size=0xc) addr:0x02062ff8 func_ov000_02063004 kind:function(arm,size=0x10) addr:0x02063004 _ZN26GameModeManagerBase_104_0CD1Ev kind:function(arm,size=0x18) addr:0x02063014 _ZN26GameModeManagerBase_104_0CD0Ev kind:function(arm,size=0x20) addr:0x0206302c @@ -1414,7 +1414,7 @@ func_ov000_0207d6b4 kind:function(arm,size=0x4) addr:0x0207d6b4 func_ov000_0207d6b8 kind:function(arm,size=0x8) addr:0x0207d6b8 func_ov000_0207d6c0 kind:function(arm,size=0x8) addr:0x0207d6c0 func_ov000_0207d6c8 kind:function(arm,size=0x8) addr:0x0207d6c8 -_ZN24MapObjectProfile_D4_BaseC2Ev kind:function(arm,size=0x30) addr:0x0207d6d0 +_ZN17MapObject_10_BaseC2Ev kind:function(arm,size=0x30) addr:0x0207d6d0 func_ov000_0207d700 kind:function(arm,size=0x30) addr:0x0207d700 func_ov000_0207d730 kind:function(arm,size=0x38) addr:0x0207d730 func_ov000_0207d768 kind:function(arm,size=0x54) addr:0x0207d768 @@ -1555,7 +1555,7 @@ func_ov000_02081750 kind:function(arm,size=0xc8) addr:0x02081750 func_ov000_02081818 kind:function(arm,size=0x20) addr:0x02081818 _ZN21UnkStruct_027e0cd8_0c19func_ov000_02080180EPv kind:function(arm,size=0x10) addr:0x02081838 func_ov000_02081848 kind:function(arm,size=0x20) addr:0x02081848 -func_ov000_02081868 kind:function(arm,size=0x60) addr:0x02081868 +_ZN21UnkStruct_027e0cd8_0c19func_ov000_020801b0EP5Vec2bii kind:function(arm,size=0x60) addr:0x02081868 func_ov000_020818c8 kind:function(arm,size=0x78) addr:0x020818c8 func_ov000_02081940 kind:function(arm,size=0x64) addr:0x02081940 func_ov000_020819a4 kind:function(arm,size=0x78) addr:0x020819a4 @@ -1636,8 +1636,8 @@ _ZN18UnkStruct_027e0cd819func_ov000_02081e30Eii kind:function(arm,size=0x8c) add func_ov000_02083574 kind:function(arm,size=0x10) addr:0x02083574 _ZN18UnkStruct_027e0cd819func_ov000_02081eccEsi kind:function(arm,size=0x10) addr:0x02083584 func_ov000_02083594 kind:function(arm,size=0x10) addr:0x02083594 -func_ov000_020835a4 kind:function(arm,size=0x50) addr:0x020835a4 -func_ov000_020835f4 kind:function(arm,size=0x4c) addr:0x020835f4 +_ZN18UnkStruct_027e0cd819func_ov000_02081eecEsii kind:function(arm,size=0x50) addr:0x020835a4 +_ZN18UnkStruct_027e0cd819func_ov000_02081f3cEsi kind:function(arm,size=0x4c) addr:0x020835f4 func_ov000_02083640 kind:function(arm,size=0x90) addr:0x02083640 func_ov000_020836d0 kind:function(arm,size=0x10c) addr:0x020836d0 func_ov000_020837dc kind:function(arm,size=0x40) addr:0x020837dc @@ -2549,28 +2549,28 @@ _ZN9MapObjectD0Ev kind:function(arm,size=0x14) addr:0x0209e85c _ZN9MapObjectD2Ev kind:function(arm,size=0x4) addr:0x0209e870 _ZN9MapObject8vfunc_00Ev kind:function(arm,size=0x8) addr:0x0209e874 _ZN9MapObject8vfunc_04Ev kind:function(arm,size=0x4) addr:0x0209e87c -_ZN9MapObject19func_ov000_0209d0bcEv kind:function(arm,size=0x58) addr:0x0209e880 +_ZN9MapObject19func_ov000_0209d0bcEP5Vec2bPS_ kind:function(arm,size=0x58) addr:0x0209e880 _ZN9MapObject19func_ov000_0209d114Ev kind:function(arm,size=0x18) addr:0x0209e8d8 _ZN9MapObject19func_ov000_0209d12cEv kind:function(arm,size=0x18) addr:0x0209e8f0 -_ZN9MapObject19func_ov000_0209d144Ev kind:function(arm,size=0x88) addr:0x0209e908 +_ZN9MapObject19func_ov000_0209d144EP5Vec2sii kind:function(arm,size=0x88) addr:0x0209e908 _ZN9MapObject8vfunc_1CEv kind:function(arm,size=0x8) addr:0x0209e990 _ZN9MapObject8vfunc_20Ev kind:function(arm,size=0x4) addr:0x0209e998 _ZN9MapObject8vfunc_24Ev kind:function(arm,size=0xc) addr:0x0209e99c _ZN9MapObject8vfunc_28Ev kind:function(arm,size=0x8) addr:0x0209e9a8 -_ZN9MapObject8vfunc_2CEv kind:function(arm,size=0x40) addr:0x0209e9b0 -_ZN9MapObject19func_ov000_0209d22cEv kind:function(arm,size=0x48) addr:0x0209e9f0 -_ZN9MapObject19func_ov000_0209d274Ev kind:function(arm,size=0x28) addr:0x0209ea38 +_ZN9MapObject8vfunc_2CEP5Vec3p kind:function(arm,size=0x40) addr:0x0209e9b0 +_ZN9MapObject19func_ov000_0209d22cEPsPS_i kind:function(arm,size=0x48) addr:0x0209e9f0 +_ZN9MapObject19func_ov000_0209d274Ei kind:function(arm,size=0x28) addr:0x0209ea38 _ZN9MapObject19func_ov000_0209d29cEi kind:function(arm,size=0x28) addr:0x0209ea60 _ZN9MapObject19func_ov000_0209d2c4Eii kind:function(arm,size=0x2c) addr:0x0209ea88 -_ZN9MapObject19func_ov000_0209d2f0Ev kind:function(arm,size=0xc4) addr:0x0209eab4 -_ZN9MapObject19func_ov000_0209d3b4Ev kind:function(arm,size=0x80) addr:0x0209eb78 -_ZN9MapObject19func_ov000_0209d434Ev kind:function(arm,size=0xe4) addr:0x0209ebf8 -_ZN9MapObject19func_ov000_0209d518Ev kind:function(arm,size=0x34) addr:0x0209ecdc -_ZN9MapObject19func_ov000_0209d54cEv kind:function(arm,size=0x7c) addr:0x0209ed10 -_ZN9MapObject19func_ov000_0209d5c8Ev kind:function(arm,size=0x4c) addr:0x0209ed8c -_ZN9MapObject19func_ov000_0209d614Ev kind:function(arm,size=0x54) addr:0x0209edd8 +_ZN9MapObject19func_ov000_0209d2f0EiiP5Vec2b kind:function(arm,size=0xc4) addr:0x0209eab4 +_ZN9MapObject19func_ov000_0209d3b4Eii kind:function(arm,size=0x80) addr:0x0209eb78 +_ZN9MapObject19func_ov000_0209d434EPcP34UnkStruct_ov019_020d24c8_28_258_00i kind:function(arm,size=0xe4) addr:0x0209ebf8 +_ZN9MapObject19func_ov000_0209d518Eiiih kind:function(arm,size=0x34) addr:0x0209ecdc +_ZN9MapObject19func_ov000_0209d54cEitP5Vec3pst kind:function(arm,size=0x7c) addr:0x0209ed10 +_ZN9MapObject19func_ov000_0209d5c8E8ActorRef kind:function(arm,size=0x4c) addr:0x0209ed8c +_ZN9MapObject19func_ov000_0209d614Ei kind:function(arm,size=0x54) addr:0x0209edd8 _ZN9MapObject19func_ov000_0209d668Ev kind:function(arm,size=0x44) addr:0x0209ee2c -_ZN9MapObject19func_ov000_0209d6acEv kind:function(arm,size=0x54) addr:0x0209ee70 +_ZN9MapObject19func_ov000_0209d6acEP5Vec3p kind:function(arm,size=0x54) addr:0x0209ee70 func_ov000_0209eec4 kind:function(arm,size=0x50) addr:0x0209eec4 _ZN19func_ov000_0209ef14D0Ev kind:function(arm,size=0x1c) addr:0x0209ef14 _ZN19func_ov000_0209ef30D2Ev kind:function(arm,size=0x14) addr:0x0209ef30 @@ -3694,13 +3694,13 @@ data_ov000_020b4d68 kind:data(any) addr:0x020b4d68 data_ov000_020b4d70 kind:data(any) addr:0x020b4d70 data_ov000_020b4d78 kind:data(any) addr:0x020b4d78 data_ov000_020b4d80 kind:data(any) addr:0x020b4d80 -data_ov000_020b4d90 kind:data(any) addr:0x020b4d90 -data_ov000_020b4dd0 kind:data(any) addr:0x020b4dd0 +_ZTV9MapObject kind:data(any) addr:0x020b4d88 +data_ov000_020b4dd0 kind:data(any) addr:0x020b4dc8 data_ov000_020b4e30 kind:data(any) addr:0x020b4e30 data_ov000_020b4e3c kind:data(any) addr:0x020b4e3c _ZTV26MapObjectProfileSwitchStep kind:data(any) addr:0x020b4e78 _ZTV31MapObjectProfileSwitchStep_Base kind:data(any) addr:0x020b4e94 -_ZTV19MapObjectProfile_D4 kind:data(any) addr:0x020b4eb0 +_ZTV12MapObject_10 kind:data(any) addr:0x020b4eb0 _ZTV22MapObjectSwitchStep_40 kind:data(any) addr:0x020b4ed8 _ZTV19MapObjectSwitchStep kind:data(any) addr:0x020b4f04 _ZTV26MapObjectProfileMiniBlocks kind:data(any) addr:0x020b4f44 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index e4f14a52..0e28fbf0 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -41,7 +41,8 @@ public: class Actor_5c_temp : public Actor_5c_Base { public: /* 00 (base) */ - /* 10 */ STRUCT_PAD(0x10, 0x28); + /* 10 */ unk16 mUnk_10; + /* 14 */ STRUCT_PAD(0x14, 0x28); /* 28 */ unk32 mUnk_28; Actor_5c_temp() {}; diff --git a/include/Actor/ActorRef.hpp b/include/Actor/ActorRef.hpp index 446cc47f..48cc9488 100644 --- a/include/Actor/ActorRef.hpp +++ b/include/Actor/ActorRef.hpp @@ -2,22 +2,26 @@ #include "types.h" -#define ACTOR_INDEX_MASK 0x3fff +#define ACTOR_INDEX_MASK 0x3FFF struct ActorRef { - /* 0 */ s16 index; - /* 2 */ s16 id; + /* 0 */ u16 index; + /* 2 */ u16 id; /* 4 */ - inline void Reset() { + void Reset() { *(u32 *) this = 0; } - inline bool operator==(const ActorRef &other) const { + bool operator==(const ActorRef &other) const { return this->index == other.index && this->id == other.id; } - inline bool operator!=(const ActorRef &other) const { + bool operator!=(const ActorRef &other) const { return !(*this == other); } + + u32 Get32() { + return *(u32 *) this; + } }; diff --git a/include/MapObject/MapObject.hpp b/include/MapObject/MapObject.hpp index 791b61a2..f7bfffba 100644 --- a/include/MapObject/MapObject.hpp +++ b/include/MapObject/MapObject.hpp @@ -1,5 +1,6 @@ #pragma once +#include "Actor/ActorRef.hpp" #include "Map/MapObjectId.hpp" #include "MapObject/MapObjectProfile.hpp" #include "Physics/Cylinder.hpp" @@ -9,6 +10,8 @@ #include "nitro/math.h" #include "types.h" +class MapObjectProfile; + typedef u16 MapObjFlags; enum MapObjFlag_ { MapObjFlag_Alive = FLAG(0, 0), @@ -45,26 +48,79 @@ enum MapObjFlag_ { MapObjFlag_31 = FLAG(0, 31), }; +class MapObject_10_Base { +public: + /* 00 (vtable) */ + /* 04 */ unk8 mUnk_04; + /* 05 */ unk8 mUnk_05; + /* 06 */ unk8 mUnk_06; + /* 07 */ unk8 mUnk_07; + /* 08 */ unk32 mUnk_08; + /* 0C */ + + MapObject_10_Base(); // func_ov000_0207c018 + + // data_ov000_020b2854 + /* 00 */ virtual void vfunc_00() = 0; + /* 04 */ virtual void vfunc_04() = 0; + /* 08 */ virtual void vfunc_08() = 0; + /* 0C */ virtual void vfunc_0C() = 0; + /* 10 */ virtual void vfunc_10(Cylinder *param1) = 0; + /* 14 */ virtual void vfunc_14() = 0; + /* 18 */ virtual void vfunc_18(Vec3p *param1) = 0; + /* 1C */ virtual void vfunc_1C(Vec3p *param1) = 0; + /* 20 */ +}; + +class MapObject_10 : public MapObject_10_Base { +public: + /* 00 (vtable) */ + /* 0C */ + + MapObject_10() {} + ~MapObject_10() {} + + // data_ov031_02113f18 + /* 00 */ virtual void vfunc_00(); + /* 04 */ virtual void vfunc_04(); + /* 08 */ virtual void vfunc_08(); + /* 0C */ virtual void vfunc_0C(); + /* 10 */ virtual void vfunc_10(Cylinder *param1); + /* 14 */ virtual void vfunc_14(); + /* 18 */ virtual void vfunc_18(Vec3p *param1); + /* 1C */ virtual void vfunc_1C(Vec3p *param1); + /* 20 */ +}; + +class MapObject_20 { +public: + /* 00 */ u16 mUnk_00; + /* 02 */ u16 mUnk_02; + /* 04 */ unk32 mUnk_04; + /* 08 */ u8 mUnk_08[2]; + /* 0A */ u16 mUnk_0A[2]; + /* 0E */ unk16 mUnk_0E; + /* 10 */ unk32 mUnk_10; + /* 14 */ s16 mUnk_14; + /* 16 */ unk16 mUnk_16; + /* 18 */ + + MapObject_20() {} +}; + class MapObject : public SysObject { public: /* 00 (vtable) */ /* 04 */ Vec3p mPos; - /* 10 */ void *mUnk_10; + /* 10 */ MapObject_10 *mUnk_10; /* 14 */ unk16 mUnk_14; /* 16 */ unk16 mUnk_16; - /* 18 */ unk8 mUnk_18; // bool? when set Link walks to the map object when touched - /* 19 */ unk8 mUnk_19; + /* 18 */ unk8 mUnk_18[2]; // bools? when set Link walks to the map object when touched /* 1A */ unk8 mUnk_1A; /* 1B */ unk8 mUnk_1B; /* 1C */ MapObjFlags mFlags[1]; /* 1E */ unk16 mUnk_1E; - /* 20 */ u16 mUnk_20; - /* 22 */ u16 mUnk_22; - /* 24 */ unk32 mUnk_24; - /* 28 */ unk32 mUnk_28; - /* 2C */ unk32 mUnk_2C; - /* 30 */ unk32 mUnk_30; - /* 34 */ unk32 mUnk_34; + /* 20 */ MapObject_20 mUnk_20; /* 38 */ unk8 mUnk_38; /* 38 */ unk8 mUnk_39; /* 3A */ Vec2b mUnk_3A; @@ -79,11 +135,11 @@ public: /* 10 */ virtual void vfunc_10(); /* 14 */ virtual void vfunc_14(); /* 18 */ virtual void vfunc_18(); - /* 1C */ virtual void vfunc_1C(); + /* 1C */ virtual bool vfunc_1C(); /* 20 */ virtual void vfunc_20(); /* 24 */ virtual void vfunc_24(); - /* 28 */ virtual void vfunc_28(); - /* 2C */ virtual void vfunc_2C(); + /* 28 */ virtual bool vfunc_28(); + /* 2C */ virtual bool vfunc_2C(Vec3p *param1); /* 30 */ virtual ~MapObject(); /* 38 */ @@ -91,23 +147,24 @@ public: MapObjectId GetMapObjectId(); - void func_ov000_0209d0bc(); - void func_ov000_0209d114(); - void func_ov000_0209d12c(); - void func_ov000_0209d144(); - void func_ov000_0209d22c(); - void func_ov000_0209d274(); + bool func_ov000_0209d114(); + bool func_ov000_0209d12c(); + bool func_ov000_0209d144(Vec2s *param1, unk32 param2, unk32 param3); + void func_ov000_0209d274(unk32 param1); unk32 func_ov000_0209d29c(unk32 param1); void func_ov000_0209d2c4(unk32 param1, unk32 param2); - void func_ov000_0209d2f0(); - void func_ov000_0209d3b4(); - void func_ov000_0209d434(); - void func_ov000_0209d518(); - void func_ov000_0209d54c(); - void func_ov000_0209d5c8(); - void func_ov000_0209d614(); - void func_ov000_0209d668(); + void func_ov000_0209d2f0(unk32 param1, unk32 param2, Vec2b *param3); + void func_ov000_0209d3b4(unk32 param1, q20 size); + void func_ov000_0209d434(s8 *param1, UnkStruct_ov019_020d24c8_28_258_00 *param2, unk32 param3); + void func_ov000_0209d518(unk32 param1, unk32 param2, unk32 param3, u8 param4); + void func_ov000_0209d54c(unk32 param1, u16 param2, Vec3p *param3, s16 param4, u16 param5); + void func_ov000_0209d5c8(ActorRef ref); + void func_ov000_0209d614(unk32 param1); + bool func_ov000_0209d668(); void func_ov000_0209d6ac(Vec3p *param1); void func_ov031_02103878(); + + static void func_ov000_0209d0bc(Vec2b *param1, MapObject *thisx); + static void func_ov000_0209d22c(unk16 *param1, MapObject *thisx, unk32 param2); }; diff --git a/include/MapObject/MapObjectProfile.hpp b/include/MapObject/MapObjectProfile.hpp index 04c725a2..7849a0da 100644 --- a/include/MapObject/MapObjectProfile.hpp +++ b/include/MapObject/MapObjectProfile.hpp @@ -9,48 +9,7 @@ #include "types.h" class MapObject; - -class MapObjectProfile_D4_Base { -public: - /* 00 (vtable) */ - /* 04 */ unk8 mUnk_04; - /* 05 */ unk8 mUnk_05; - /* 06 */ unk8 mUnk_06; - /* 07 */ unk8 mUnk_07; - /* 08 */ unk32 mUnk_08; - /* 0C */ - - MapObjectProfile_D4_Base(); // func_ov000_0207c018 - - // data_ov000_020b2854 - /* 00 */ virtual void vfunc_00(void) = 0; - /* 04 */ virtual void vfunc_04(void) = 0; - /* 08 */ virtual void vfunc_08(void) = 0; - /* 0C */ virtual void vfunc_0C(void) = 0; - /* 10 */ virtual void vfunc_10(void) = 0; - /* 14 */ virtual void vfunc_14(void) = 0; - /* 18 */ virtual void vfunc_18(void) = 0; - /* 1C */ virtual void vfunc_1C(void) = 0; - /* 20 */ -}; - -class MapObjectProfile_D4 : public MapObjectProfile_D4_Base { -public: - /* 00 (base) */ - /* 0C */ - - MapObjectProfile_D4() {} - ~MapObjectProfile_D4() {} - - /* 00 */ virtual void vfunc_00(void); - /* 04 */ virtual void vfunc_04(void); - /* 08 */ virtual void vfunc_08(void); - /* 0C */ virtual void vfunc_0C(void); - /* 10 */ virtual void vfunc_10(void); - /* 14 */ virtual void vfunc_14(void); - /* 18 */ virtual void vfunc_18(void); - /* 1C */ virtual void vfunc_1C(void); -}; +class MapObject_20; class MapObjectProfile : public SysObject { public: @@ -80,6 +39,8 @@ public: /* 0C */ virtual void vfunc_0C(); /* 10 */ virtual void vfunc_10(); /* 14 */ + + unk32 func_ov000_0209c8e4(MapObject_20 *param1); }; class MapObjectProfile_Derived2_20; diff --git a/include/MapObject/MapObjectSwitchStep.hpp b/include/MapObject/MapObjectSwitchStep.hpp index fbe47fb1..6b45ebf7 100644 --- a/include/MapObject/MapObjectSwitchStep.hpp +++ b/include/MapObject/MapObjectSwitchStep.hpp @@ -55,7 +55,7 @@ public: class MapObjectProfileSwitchStep_Base : public MapObjectProfile_Derived2 { public: /* 00 (base) */ - /* D4 */ MapObjectProfile_D4 mUnk_D4; + /* D4 */ MapObject_10 mUnk_D4; MapObjectProfileSwitchStep_Base(MapObjectId mapObjId) : MapObjectProfile_Derived2(mapObjId, mapObjId) {} diff --git a/include/Physics/Cylinder.hpp b/include/Physics/Cylinder.hpp index f2467697..56f9c25d 100644 --- a/include/Physics/Cylinder.hpp +++ b/include/Physics/Cylinder.hpp @@ -8,8 +8,12 @@ struct Cylinder { Vec3p pos; q20 size; // height and radius - inline Cylinder() {} - inline Cylinder(q20 size) { + Cylinder() {} + Cylinder(q20 size) { + this->Init(size); + } + + void Init(q20 size) { pos.x = 0; pos.y = size; pos.z = 0; @@ -17,7 +21,7 @@ struct Cylinder { this->size = size; } - inline void MakeEmpty() { + void MakeEmpty() { pos = gVec3p_ZERO; size = -1; } diff --git a/include/Unknown/UnkStruct_027e0998.hpp b/include/Unknown/UnkStruct_027e0998.hpp index b0286a96..6f123ffd 100644 --- a/include/Unknown/UnkStruct_027e0998.hpp +++ b/include/Unknown/UnkStruct_027e0998.hpp @@ -13,6 +13,8 @@ public: /* 00 */ virtual bool vfunc_00(Vec3p *pPos, void *param2, void *param3); /* 04 */ + + unk32 func_ov000_02061a70(); }; extern UnkStruct_027e0998 *data_027e0998; diff --git a/include/Unknown/UnkStruct_027e09b4.hpp b/include/Unknown/UnkStruct_027e09b4.hpp new file mode 100644 index 00000000..da338d22 --- /dev/null +++ b/include/Unknown/UnkStruct_027e09b4.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class UnkStruct_027e09b4 { +public: + /* 00 */ unk32 mUnk_00; + + UnkStruct_027e09b4(); + ~UnkStruct_027e09b4(); + + void func_01fff60c(unk32 param1, unk32 param2, unk32 param3, u8 param4, unk32 param5, unk32 param6); +}; + +extern UnkStruct_027e09b4 *data_027e09b4; diff --git a/include/Unknown/UnkStruct_027e0cd8.hpp b/include/Unknown/UnkStruct_027e0cd8.hpp index 9d23e06d..941d07ef 100644 --- a/include/Unknown/UnkStruct_027e0cd8.hpp +++ b/include/Unknown/UnkStruct_027e0cd8.hpp @@ -85,6 +85,14 @@ public: bool func_ov000_02080658(unk32 param1, UnkStruct_SceneChange1 *param2); void func_ov000_020808f4(void *param1, void *param2, unk32 param3); unk32 func_ov000_02080a44(); + void func_ov000_020801b0(Vec2b *param1, unk32 param2, unk32 param3); +}; + +class UnkStruct_027e0cd8_10 { +public: + /* 00 */ unk32 mUnk_00; + + void func_01fff6d0(Vec3p *param1, s32 *param2, s32 *param3); }; class UnkStruct_027e0cd8 { @@ -92,12 +100,16 @@ public: /* 00 */ unk32 mUnk_00; /* 04 */ unk32 *mUnk_04; /* 08 */ unk32 mUnk_08; - /* 0c */ UnkStruct_027e0cd8_0c *mUnk_0c; - /* 10 */ + /* 0C */ UnkStruct_027e0cd8_0c *mUnk_0c; + /* 10 */ UnkStruct_027e0cd8_10 *mUnk_10; + /* 14 */ STRUCT_PAD(0x14, 0x4C); + /* 4C */ unk32 func_ov000_02081e30(unk32 param1, unk32 param2); void func_ov000_02081d7c(unk32 param1, unk32 param2, unk32 param3); void func_ov000_02081ecc(unk16 param1, unk32 param2); + void func_ov000_02081eec(unk16 param1, unk32 param2, unk32 param3); + bool func_ov000_02081f3c(unk16 param1, unk32 param2); }; extern UnkStruct_027e0cd8 *data_027e0cd8; diff --git a/include/Unknown/UnkStruct_ov000_020b5d34.hpp b/include/Unknown/UnkStruct_ov000_020b5d34.hpp new file mode 100644 index 00000000..3d1eb0f1 --- /dev/null +++ b/include/Unknown/UnkStruct_ov000_020b5d34.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include "global.h" +#include "types.h" + +class MapObject_20; + +class UnkStruct_ov000_020b5d34_00 { +public: + unk32 *mUnk_00; + MapObject_20 *mUnk_04; + Vec3p *mUnk_08; + unk16 mUnk_0C; +}; + +class UnkStruct_ov000_020b5d34_0C { +public: + unk16 mUnk_00; +}; + +class UnkStruct_ov000_020b5d34 { +public: + /* 00 */ UnkStruct_ov000_020b5d34_00 *mUnk_00; + /* 04 */ MapObjectProfile *mpProfile; + /* 08 */ unk32 mUnk_08; + UnkStruct_ov000_020b5d34_0C *mUnk_0C; + + UnkStruct_ov000_020b5d34(); + ~UnkStruct_ov000_020b5d34(); +}; + +extern UnkStruct_ov000_020b5d34 data_ov000_020b5d34; diff --git a/include/flags.h b/include/flags.h index 1bb5e197..bea11e0f 100644 --- a/include/flags.h +++ b/include/flags.h @@ -25,4 +25,4 @@ #define GET_FLAGS_IMPL2(N, ...) GET_FLAGS_##N(__VA_ARGS__) #define GET_FLAGS_IMPL(N, ...) GET_FLAGS_IMPL2(N, __VA_ARGS__) #define GET_FLAGS(...) GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__) -#define SET_FLAGS(arr, ...) (*(u32 *) arr = GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__)) +#define SET_FLAGS(arr, ...) (*(arr) = GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__)) diff --git a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp index 7a88bcf3..410d5e41 100644 --- a/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp +++ b/src/000_Second/Actor/ActorUnk_ov000_020a8bb0.cpp @@ -97,10 +97,10 @@ ARM void ActorUnk_ov000_020a8bb0::func_ov000_020a8df0(ActorRef param1, unk32 par if (this->mRef != param1) { this->vfunc_b4(); - this->mUnk_0bc = param1; - this->mUnk_0c0.x = 0; - this->mUnk_0c0.y = 0; - this->mUnk_0c0.z = 0; + *(u32 *) &this->mUnk_0bc = param1.Get32(); + this->mUnk_0c0.x = 0; + this->mUnk_0c0.y = 0; + this->mUnk_0c0.z = 0; this->mUnk_0b0 |= 1; } } diff --git a/src/000_Second/MapObject/MapObject.cpp b/src/000_Second/MapObject/MapObject.cpp new file mode 100644 index 00000000..fef4a853 --- /dev/null +++ b/src/000_Second/MapObject/MapObject.cpp @@ -0,0 +1,314 @@ +#include "MapObject/MapObject.hpp" +#include "Actor/Actor.hpp" +#include "Actor/ActorManager.hpp" +#include "Physics/Cylinder.hpp" +#include "Unknown/UnkMemFuncs.h" +#include "Unknown/UnkStruct_0204af1c.hpp" +#include "Unknown/UnkStruct_027e0998.hpp" +#include "Unknown/UnkStruct_027e09b4.hpp" +#include "Unknown/UnkStruct_027e0cd8.hpp" +#include "Unknown/UnkStruct_027e0ce0.hpp" +#include "Unknown/UnkStruct_ov000_020b5d34.hpp" + +extern "C" void func_ov000_0209c7c8(void *); +extern "C" void func_01ffb714(Vec3p *, Vec3p *, void *); +extern "C" void func_01ffb9cc(Vec3p *, Vec3p *); +extern "C" u16 func_01ffbbe0(q20 x, q20 z); +extern "C" void func_01ffecdc(unk32 param1, Cylinder *param2); +extern "C" bool func_01ffd768(unk32, void *, void *, unk8); + +extern "C" void func_ov000_020973f4(void *, void *, u32, void *, int); //! TODO: solve oddity + +struct UnkStruct { + u32 *mUnk_00; + MapObject_20 *mUnk_04; + Vec3p *mUnk_08; +}; + +// https://decomp.me/scratch/4do9S +ARM MapObject::MapObject() { + this->mUnk_10 = NULL; + this->mUnk_16 = -1; + this->mFlags[0] = 0; + func_ov000_0209c7c8(&this->mUnk_20); + *(u32 *) &this->mUnk_38 = 0; + + UnkStruct_ov000_020b5d34 *ptr1 = &data_ov000_020b5d34; + this->mpProfile = ptr1->mpProfile; + + UnkStruct *ptr2 = (UnkStruct *) ptr1->mUnk_00; + + *(u32 *) &this->mUnk_38 = *ptr2->mUnk_00; + + Vec3p *ptr = ptr2->mUnk_08; + this->mPos.x = ptr->x; + this->mPos.y = ptr->y; + this->mPos.z = ptr->z; + + this->mUnk_14 = ptr1->mUnk_0C->mUnk_00; + _MI_CpuCopy(ptr2->mUnk_04, &this->mUnk_20, sizeof(MapObject_20)); + + for (int i = 0; i < ARRAY_LEN(this->mUnk_18); i++) { + this->mUnk_18[i] = 0; + } + + SET_FLAGS(this->mFlags, MapObjFlag_Alive, MapObjFlag_1, MapObjFlag_2); +} + +ARM MapObject::~MapObject() {} + +ARM bool MapObject::vfunc_00() { + return true; +} + +ARM bool MapObject::vfunc_04() {} + +ARM void MapObject::func_ov000_0209d0bc(Vec2b *param1, MapObject *thisx) { + Vec3p pos; + Vec2p out; + + UnkStruct_027e0cd8_10 *t = data_027e0cd8->mUnk_10; + pos.coords = thisx->mPos.coords; + t->func_01fff6d0(&pos, (q20 *) &out.y, (q20 *) &out.x); + + Vec2p temp; + temp.y = out.x; + temp.x = out.y; + param1->x = temp.x; + param1->y = temp.y; +} + +ARM bool MapObject::func_ov000_0209d114() { + bool result[2]; + MapObject::func_ov000_0209d0bc((Vec2b *) &result, this); + return result[0]; +} + +ARM bool MapObject::func_ov000_0209d12c() { + bool result[2]; + MapObject::func_ov000_0209d0bc((Vec2b *) &result, this); + return result[1]; +} + +ARM bool MapObject::func_ov000_0209d144(Vec2s *param1, unk32 param2, unk32 param3) { + if (this->mUnk_10 != NULL) { + u32 stack[5]; + + stack[3] = 0; + stack[0] = 0; + stack[1] = 0; + stack[2] = 0; + + this->vfunc_2C((Vec3p *) &stack); + unk8 value = this->mpProfile->mUnk_04[param2]; + Vec2s stack2; + + stack2.x = param1->x; + stack2.y = param1->y; + + return func_01ffd768(param3, &stack, &stack2, value); + } + + return false; +} + +ARM bool MapObject::vfunc_1C() { + return true; +} + +ARM void MapObject::vfunc_20() {} + +ARM void MapObject::vfunc_24() { + *(u32 *) this = 0; // ???? +} + +ARM bool MapObject::vfunc_28() { + return false; +} + +ARM bool MapObject::vfunc_2C(Vec3p *param1) { + if (this->mUnk_10 != NULL) { + this->mUnk_10->vfunc_18(param1); + Vec3p_Add(param1, &this->mPos, param1); + return true; + } + + return false; +} + +ARM void MapObject::func_ov000_0209d22c(unk16 *param1, MapObject *thisx, unk32 param2) { + Vec3p local_18; + func_01ffb714(data_027e0ce0->func_01fff148(param2), &thisx->mPos, &local_18); + *param1 = func_01ffbbe0(local_18.x, local_18.z); +} + +ARM void MapObject::func_ov000_0209d274(unk32 param1) { + func_01ffb9cc(&this->mPos, data_027e0ce0->func_01fff148(param1)); +} + +ARM unk32 MapObject::func_ov000_0209d29c(unk32 param1) { + data_027e0cd8->func_ov000_02081e30(this->mUnk_20.mUnk_0A[param1], this->mUnk_20.mUnk_08[param1]); +} + +ARM void MapObject::func_ov000_0209d2c4(unk32 param1, unk32 param2) { + data_027e0cd8->func_ov000_02081d7c(this->mUnk_20.mUnk_0A[param1], this->mUnk_20.mUnk_08[param1], param2); +} + +ARM void MapObject::func_ov000_0209d2f0(unk32 param1, unk32 param2, Vec2b *param3) { + UnkStruct_027e0cd8_0c *temp_r5 = data_027e0cd8->mUnk_0c; + Vec2b sp0(0, 0); + + sp0.x = this->mUnk_3A.x; + + s32 tempX = param3->x; + tempX += this->mUnk_3A.x; + + if (this->mUnk_3A.x < tempX) { + do { + sp0.y = this->mUnk_3A.y; + + s32 tempY = param3->y; + tempY += this->mUnk_3A.y; + + if (this->mUnk_3A.y < tempY) { + do { + temp_r5->func_ov000_020801b0(&sp0, param1, param2); + } while (++sp0.y < param3->y + this->mUnk_3A.y); + } + } while (++sp0.x < param3->x + this->mUnk_3A.x); + } +} + +ARM void MapObject::func_ov000_0209d3b4(unk32 param1, q20 size) { + Cylinder spC; + + if (this->mUnk_10 != NULL) { + this->mUnk_10->vfunc_10(&spC); + } else { + spC.Init(FLOAT_TO_Q20(0.5f)); + } + + Vec3p_Add(&spC.pos, &this->mPos, &spC.pos); + spC.size += size; + + func_01ffecdc(param1, &spC); +} + +struct stack_struct { + /* 00 */ unk16 mUnk_00; + /* 02 */ unk16 mUnk_02; + /* 04 */ unk8 mUnk_04; + /* 05 */ unk8 mUnk_05; + /* 06 */ u16 mUnk_06; + /* 08 */ +}; + +ARM void MapObject::func_ov000_0209d434(s8 *param1, UnkStruct_ov019_020d24c8_28_258_00 *param2, unk32 param3) { + unk32 sp10; + stack_struct spC; + s32 var_r2; + + if (!GET_FLAG(this->mFlags, MapObjFlag_5)) { + return; + } + + if (param2->mUnk_04 & 1) { + var_r2 = 1; + } else { + var_r2 = 0; + } + + if (param1[0] != var_r2 && param1[1] != var_r2) { + return; + } + + if (data_027e0998->vfunc_00(&this->mPos, &sp10, &this->mUnk_38)) { + spC.mUnk_06 = 0x00; + MI_CpuFill32(0, &spC, sizeof(spC)); + spC.mUnk_05 = -1; + *(unk32 *) &spC.mUnk_00 = data_027e0998->func_ov000_02061a70(); + spC.mUnk_06 |= 0x01; + data_0204af1c.func_0201aa44(param2, &sp10, param3, &spC); + } +} + +ARM void MapObject::func_ov000_0209d518(unk32 param1, unk32 param2, unk32 param3, u8 param4) { + data_027e09b4->func_01fff60c(param1, param2, param3, param4, 0, 0); +} + +struct TempStruct { + Vec3p pos; + u16 param_r2; + s16 extra_s16; + u16 extra_u16; + STRUCT_PAD(0x16, 0x28); + unk32 mUnk_28; + void func_ov000_020975f8(); +}; + +// non-matching +ARM void MapObject::func_ov000_0209d54c(unk32 param1, u16 param2, Vec3p *param3, s16 param4, u16 param5) { + TempStruct local_4c; + local_4c.mUnk_28 = 0; + local_4c.func_ov000_020975f8(); + local_4c.pos.x = param3->x; + local_4c.pos.y = param3->y; + local_4c.pos.z = param3->z; + local_4c.param_r2 = param2; + local_4c.extra_s16 = param4; + local_4c.extra_u16 = param5; + func_ov000_020973f4(this, &data_ov000_020b539c, ActorId_EventIcon, &local_4c, 0); +} + +ARM void MapObject::func_ov000_0209d5c8(ActorRef ref) { + if (ref.index != 0) { + Actor *pActor = gpActorManager->func_01fff3b4(ref.Get32()); + + if (pActor != NULL) { + UNSET_FLAG(pActor->mFlags, ActorFlag_Alive); + } + } +} + +ARM void MapObject::func_ov000_0209d614(unk32 param1) { + if (this->mUnk_20.mUnk_14 < 0) { + return; + } + + if (this->mpProfile->mUnk_0E == -1) { + return; + } + + UnkStruct_027e0cd8 *pUVar1 = data_027e0cd8; + unk32 uVar2 = this->mpProfile->func_ov000_0209c8e4(&this->mUnk_20); + pUVar1->func_ov000_02081eec(this->mUnk_20.mUnk_14, uVar2, param1); +} + +ARM bool MapObject::func_ov000_0209d668() { + if (this->mpProfile->mUnk_0E == -1) { + return false; + } + + UnkStruct_027e0cd8 *pUVar1 = data_027e0cd8; + unk32 uVar2 = this->mpProfile->func_ov000_0209c8e4(&this->mUnk_20); + return pUVar1->func_ov000_02081f3c(this->mUnk_20.mUnk_14, uVar2); +} + +ARM void MapObject::func_ov000_0209d6ac(Vec3p *param1) { + if (this->mUnk_10 == NULL) { + volatile Vec3p *tempPos = &this->mPos; + Vec3p pos; + + pos.x = tempPos->x; + pos.y = tempPos->y; + pos.z = tempPos->z; + + param1->x = pos.x; + param1->y = pos.y; + param1->z = pos.z; + return; + } + + this->mUnk_10->vfunc_1C(param1); + Vec3p_Add(param1, &this->mPos, param1); +} diff --git a/src/000_Second/MapObject/MapObjectMiniBlocks.cpp b/src/000_Second/MapObject/MapObjectMiniBlocks.cpp index 02ce2328..70ff51d7 100644 --- a/src/000_Second/MapObject/MapObjectMiniBlocks.cpp +++ b/src/000_Second/MapObject/MapObjectMiniBlocks.cpp @@ -37,11 +37,12 @@ ARM MapObjectMiniBlocks::MapObjectMiniBlocks() : } ARM bool MapObjectMiniBlocks::vfunc_00(void) { - GET_PROFILE(MapObjectProfileMiniBlocks)->func_ov000_0209ccd8(this->mUnk_22, data_ov000_020af574[this->mUnk_22]); + GET_PROFILE(MapObjectProfileMiniBlocks) + ->func_ov000_0209ccd8(this->mUnk_20.mUnk_02, data_ov000_020af574[this->mUnk_20.mUnk_02]); UnkStruct_027e0cd8_0c *pUnkStruct_027e0cd8_0c = data_027e0cd8->mUnk_0c; u8 uVar6; - if (this->mUnk_22 != MiniBlocksVariant_BLKF) { + if (this->mUnk_20.mUnk_02 != MiniBlocksVariant_BLKF) { Vec2b vec(this->mUnk_3A.x, this->mUnk_3A.y); this->mPos.y = pUnkStruct_027e0cd8_0c->func_01ffedf4(&vec); } @@ -49,7 +50,7 @@ ARM bool MapObjectMiniBlocks::vfunc_00(void) { Vec3p vec(FLOAT_TO_Q20(0.0f), FLOAT_TO_Q20(0.0f), FLOAT_TO_Q20(0.0f)); uVar6 = 0; - switch (this->mUnk_20) { + switch (this->mUnk_20.mUnk_00) { case 4: case 5: case 6: @@ -63,7 +64,7 @@ ARM bool MapObjectMiniBlocks::vfunc_00(void) { uVar6 = 2; break; default: - if (this->mUnk_22 == MiniBlocksVariant_BLKF) { + if (this->mUnk_20.mUnk_02 == MiniBlocksVariant_BLKF) { vec.x = FLOAT_TO_Q20(0.0f); vec.y = FLOAT_TO_Q20(0.0f); vec.z = -FLOAT_TO_Q20(0.375f); @@ -75,7 +76,8 @@ ARM bool MapObjectMiniBlocks::vfunc_00(void) { break; } - MapObjectProfile_Derived2_20_Base_50 *ptr = GET_PROFILE(MapObjectProfileMiniBlocks)->vfunc_1C(this->mUnk_22)->mUnk_50; + MapObjectProfile_Derived2_20_Base_50 *ptr = + GET_PROFILE(MapObjectProfileMiniBlocks)->vfunc_1C(this->mUnk_20.mUnk_02)->mUnk_50; void *var_r1; if (ptr != NULL) { u16 *temp_r1 = (u16 *) ((u8 *) ptr + 8); @@ -102,7 +104,7 @@ next: unk32 var_r0_2; unk32 var_r0; - switch (this->mUnk_20) { + switch (this->mUnk_20.mUnk_00) { case 1: case 6: case 8: diff --git a/src/000_Second/MapObject/MapObjectSwitchStep.cpp b/src/000_Second/MapObject/MapObjectSwitchStep.cpp index 1514f40d..92aa5626 100644 --- a/src/000_Second/MapObject/MapObjectSwitchStep.cpp +++ b/src/000_Second/MapObject/MapObjectSwitchStep.cpp @@ -121,7 +121,7 @@ end: } ARM MapObjectSwitchStep::~MapObjectSwitchStep() { - if (this->mUnk_20 == 2) { + if (this->mUnk_20.mUnk_00 == 2) { this->func_ov000_0209e11c(0, 1); this->func_ov000_0209d2c4(0, 0); } @@ -129,10 +129,10 @@ ARM MapObjectSwitchStep::~MapObjectSwitchStep() { ARM bool MapObjectSwitchStep::vfunc_00(void) { SET_FLAG(this->mFlags, MapObjFlag_9); - this->mUnk_18 = 1; + this->mUnk_18[0] = 1; SET_FLAG(this->mFlags, MapObjFlag_10); - this->mUnk_19 = 1; + this->mUnk_18[1] = 1; if (this->func_ov000_0209d29c(0)) { this->func_ov000_0209e11c(2, 1); @@ -182,8 +182,8 @@ ARM void MapObjectSwitchStep::func_ov000_0209e11c(unk32 param1, unk32 param2) { this->mUnk_EA = 1; } - if (this->mUnk_20 == 2) { - this->mUnk_E6 = this->mUnk_22; + if (this->mUnk_20.mUnk_00 == 2) { + this->mUnk_E6 = this->mUnk_20.mUnk_02; this->mUnk_E4 = 0; } diff --git a/tools/configure.py b/tools/configure.py index 7b48493d..a3f3916f 100755 --- a/tools/configure.py +++ b/tools/configure.py @@ -155,6 +155,7 @@ config.libs = [ Object("000_Second/Actor/ActorEventIcon.cpp"), Object("000_Second/Actor/ActorUnkSWOB.cpp"), Object("000_Second/Actor/ActorUnkSWTM.cpp"), + Object("000_Second/MapObject/MapObject.cpp"), Object("000_Second/MapObject/MapObjectSwitchStep.cpp"), Object("000_Second/MapObject/MapObjectMiniBlocks.cpp"), ]