summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2024-09-28 00:19:00 +0200
committerGitHub <noreply@github.com>2024-09-27 18:19:00 -0400
commit3829ee6d4854a18bb6c19ffd1e250632946c0206 (patch)
tree219ed1485d604a50bbb232bcd3e44d54dcaebdf6
parent0f9ef3d33c5772d5240bfa1ff209d81abc934376 (diff)
Rough dynamic collision setup (#24)
* Rough collider shape setup * d_a_obj_toD3_stone_figure OK * Cleanup * Cleanup 2
-rw-r--r--config/SOUE01/rels/d_a_obj_spikeNP/splits.txt3
-rw-r--r--config/SOUE01/rels/d_a_obj_spikeNP/symbols.txt94
-rw-r--r--config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/splits.txt3
-rw-r--r--config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/symbols.txt117
-rw-r--r--config/SOUE01/rels/d_a_obj_triforceNP/splits.txt2
-rw-r--r--config/SOUE01/rels/d_a_obj_triforceNP/symbols.txt28
-rw-r--r--config/SOUE01/splits.txt25
-rw-r--r--config/SOUE01/symbols.txt486
-rw-r--r--configure.py11
-rw-r--r--include/d/a/obj/d_a_obj_base.h14
-rw-r--r--include/d/a/obj/d_a_obj_spike.h38
-rw-r--r--include/d/a/obj/d_a_obj_toD3_stone_figure.h47
-rw-r--r--include/d/a/obj/d_a_obj_triforce.h43
-rw-r--r--include/d/d_base.h2
-rw-r--r--include/m/m_angle.h9
-rw-r--r--include/m/m_vec.h5
-rw-r--r--include/nw4r/math/math_triangular.h1
-rw-r--r--include/rvl/MTX/mtxvec.h1
-rw-r--r--include/rvl/MTX/vec.h1
-rw-r--r--include/toBeSorted/attention.h16
-rw-r--r--include/toBeSorted/cc/d_cc_d.h519
-rw-r--r--include/toBeSorted/cc/d_cc_m3d.h7
-rw-r--r--include/toBeSorted/cc/d_cc_m3d_g_cyl.h24
-rw-r--r--include/toBeSorted/cc/d_cc_m3d_g_sph.h23
-rw-r--r--include/toBeSorted/cc/d_cc_mgr.h13
-rw-r--r--include/toBeSorted/cc/d_cc_shape_colliders.h89
-rw-r--r--include/toBeSorted/effects_struct.h28
-rw-r--r--include/toBeSorted/event_manager.h16
-rw-r--r--include/toBeSorted/scgame.h3
-rw-r--r--src/REL/d/a/obj/d_a_obj_pool_cock.cpp2
-rw-r--r--src/REL/d/a/obj/d_a_obj_ring.cpp2
-rw-r--r--src/REL/d/a/obj/d_a_obj_spike.cpp88
-rw-r--r--src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp139
-rw-r--r--src/REL/d/a/obj/d_a_obj_triforce.cpp81
-rw-r--r--src/REL/d/t/d_t_sound_area.cpp21
-rw-r--r--src/d/a/d_a_base.cpp4
-rw-r--r--src/d/a/obj/d_a_obj_switch.cpp4
-rw-r--r--src/d/d_base.cpp4
-rw-r--r--src/toBeSorted/cc/d_cc_d.cpp395
-rw-r--r--src/toBeSorted/cc/d_cc_m3d.cpp33
-rw-r--r--src/toBeSorted/cc/d_cc_m3d_g_cyl.cpp26
-rw-r--r--src/toBeSorted/cc/d_cc_m3d_g_sph.cpp26
-rw-r--r--src/toBeSorted/cc/d_cc_shape_colliders.cpp106
-rw-r--r--tools/rel_sieve.py6
44 files changed, 2215 insertions, 390 deletions
diff --git a/config/SOUE01/rels/d_a_obj_spikeNP/splits.txt b/config/SOUE01/rels/d_a_obj_spikeNP/splits.txt
index 3ccbe037..2a897273 100644
--- a/config/SOUE01/rels/d_a_obj_spikeNP/splits.txt
+++ b/config/SOUE01/rels/d_a_obj_spikeNP/splits.txt
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
REL/d/a/obj/d_a_obj_spike.cpp:
.text start:0x000000F0 end:0x00000BF8
.ctors start:0x00000000 end:0x00000004
+ .rodata start:0x00000000 end:0x00000030
+ .data start:0x00000000 end:0x000001FC
+ .bss start:0x00000008 end:0x00000060
diff --git a/config/SOUE01/rels/d_a_obj_spikeNP/symbols.txt b/config/SOUE01/rels/d_a_obj_spikeNP/symbols.txt
index b61d11f0..35fe668d 100644
--- a/config/SOUE01/rels/d_a_obj_spikeNP/symbols.txt
+++ b/config/SOUE01/rels/d_a_obj_spikeNP/symbols.txt
@@ -3,53 +3,55 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
-fn_372_F0 = .text:0x000000F0; // type:function size:0xC8
-fn_372_1C0 = .text:0x000001C0; // type:function size:0x58
-fn_372_220 = .text:0x00000220; // type:function size:0x6C
-fn_372_290 = .text:0x00000290; // type:function size:0xA0
-fn_372_330 = .text:0x00000330; // type:function size:0xA4
-fn_372_3E0 = .text:0x000003E0; // type:function size:0x80
-fn_372_460 = .text:0x00000460; // type:function size:0x1C0
-fn_372_620 = .text:0x00000620; // type:function size:0x10
-fn_372_630 = .text:0x00000630; // type:function size:0x8
-fn_372_640 = .text:0x00000640; // type:function size:0x5C
-fn_372_6A0 = .text:0x000006A0; // type:function size:0x10
-fn_372_6B0 = .text:0x000006B0; // type:function size:0x28
-fn_372_6E0 = .text:0x000006E0; // type:function size:0x4
-fn_372_6F0 = .text:0x000006F0; // type:function size:0x4
-fn_372_700 = .text:0x00000700; // type:function size:0x4
-fn_372_710 = .text:0x00000710; // type:function size:0xD8
-fn_372_7F0 = .text:0x000007F0; // type:function size:0x10
-fn_372_800 = .text:0x00000800; // type:function size:0x60
-fn_372_860 = .text:0x00000860; // type:function size:0xC
-fn_372_870 = .text:0x00000870; // type:function size:0x1C
-fn_372_890 = .text:0x00000890; // type:function size:0x1C
-fn_372_8B0 = .text:0x000008B0; // type:function size:0x1C
-fn_372_8D0 = .text:0x000008D0; // type:function size:0x10
-fn_372_8E0 = .text:0x000008E0; // type:function size:0x10
-fn_372_8F0 = .text:0x000008F0; // type:function size:0x10
-fn_372_900 = .text:0x00000900; // type:function size:0x10
-fn_372_910 = .text:0x00000910; // type:function size:0x10
-fn_372_920 = .text:0x00000920; // type:function size:0x10
-fn_372_930 = .text:0x00000930; // type:function size:0x30
-fn_372_960 = .text:0x00000960; // type:function size:0x30
-fn_372_990 = .text:0x00000990; // type:function size:0x30
-fn_372_9C0 = .text:0x000009C0; // type:function size:0x144
-fn_372_B10 = .text:0x00000B10; // type:function size:0x58
-fn_372_B70 = .text:0x00000B70; // type:function size:0x88
+dAcOspike_c_classInit__Fv = .text:0x000000F0; // type:function size:0xC8
+__dt__24sFState_c<11dAcOspike_c>Fv = .text:0x000001C0; // type:function size:0x58
+__dt__27sFStateFct_c<11dAcOspike_c>Fv = .text:0x00000220; // type:function size:0x6C
+__dt__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000290; // type:function size:0xA0
+__dt__50sFStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000330; // type:function size:0xA4
+createHeap__11dAcOspike_cFv = .text:0x000003E0; // type:function size:0x80
+create__11dAcOspike_cFv = .text:0x00000460; // type:function size:0x1C0
+changeState__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000620; // type:function size:0x10
+doDelete__11dAcOspike_cFv = .text:0x00000630; // type:function size:0x8
+actorExecute__11dAcOspike_cFv = .text:0x00000640; // type:function size:0x5C
+executeState__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000006A0; // type:function size:0x10
+draw__11dAcOspike_cFv = .text:0x000006B0; // type:function size:0x28
+initializeState_Wait__11dAcOspike_cFv = .text:0x000006E0; // type:function size:0x4
+executeState_Wait__11dAcOspike_cFv = .text:0x000006F0; // type:function size:0x4
+finalizeState_Wait__11dAcOspike_cFv = .text:0x00000700; // type:function size:0x4
+__dt__11dAcOspike_cFv = .text:0x00000710; // type:function size:0xD8
+getStateID__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000007F0; // type:function size:0x10
+build__27sFStateFct_c<11dAcOspike_c>FRC12sStateIDIf_c = .text:0x00000800; // type:function size:0x60
+dispose__27sFStateFct_c<11dAcOspike_c>FRP10sStateIf_c = .text:0x00000860; // type:function size:0xC
+initialize__24sFState_c<11dAcOspike_c>Fv = .text:0x00000870; // type:function size:0x1C
+execute__24sFState_c<11dAcOspike_c>Fv = .text:0x00000890; // type:function size:0x1C
+finalize__24sFState_c<11dAcOspike_c>Fv = .text:0x000008B0; // type:function size:0x1C
+initializeState__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008D0; // type:function size:0x10
+finalizeState__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008E0; // type:function size:0x10
+refreshState__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008F0; // type:function size:0x10
+getState__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000900; // type:function size:0x10
+getNewStateID__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000910; // type:function size:0x10
+getOldStateID__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000920; // type:function size:0x10
+finalizeState__26sFStateID_c<11dAcOspike_c>CFR11dAcOspike_c = .text:0x00000930; // type:function size:0x30
+executeState__26sFStateID_c<11dAcOspike_c>CFR11dAcOspike_c = .text:0x00000960; // type:function size:0x30
+initializeState__26sFStateID_c<11dAcOspike_c>CFR11dAcOspike_c = .text:0x00000990; // type:function size:0x30
+__sinit_\d_a_obj_spike_cpp = .text:0x000009C0; // type:function size:0x144 scope:local
+__dt__26sFStateID_c<11dAcOspike_c>Fv = .text:0x00000B10; // type:function size:0x58
+isSameName__26sFStateID_c<11dAcOspike_c>CFPCc = .text:0x00000B70; // type:function size:0x88
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
-lbl_372_rodata_0 = .rodata:0x00000000; // type:object size:0x30 data:float
-lbl_372_data_0 = .data:0x00000000; // type:object size:0x10 data:4byte
-lbl_372_data_10 = .data:0x00000010; // type:object size:0x40
-lbl_372_data_50 = .data:0x00000050; // type:object size:0xC
-lbl_372_data_5C = .data:0x0000005C; // type:object size:0x1C
-lbl_372_data_78 = .data:0x00000078; // type:object size:0x80
-lbl_372_data_F8 = .data:0x000000F8; // type:object size:0x30
-lbl_372_data_128 = .data:0x00000128; // type:object size:0x30
-lbl_372_data_158 = .data:0x00000158; // type:object size:0x18
-lbl_372_data_170 = .data:0x00000170; // type:object size:0x58
-lbl_372_data_1C8 = .data:0x000001C8; // type:object size:0x34
+lbl_372_rodata_0 = .rodata:0x00000000; // type:object size:0x30 scope:local data:float
+g_profile_OBJ_SPIKE = .data:0x00000000; // type:object size:0x10 data:4byte
+sCcSrc__11dAcOspike_c = .data:0x00000010; // type:object size:0x40
+lbl_372_data_50 = .data:0x00000050; // type:object size:0xC scope:local
+lbl_372_data_5C = .data:0x0000005C; // type:object size:0x1C scope:local
+__vt__11dAcOspike_c = .data:0x00000078; // type:object size:0x80
+__vt__50sFStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c> = .data:0x000000F8; // type:object size:0x30
+__vt__80sStateMgr_c<11dAcOspike_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000128; // type:object size:0x30
+__vt__27sFStateFct_c<11dAcOspike_c> = .data:0x00000158; // type:object size:0x14
+__vt__24sFState_c<11dAcOspike_c> = .data:0x00000170; // type:object size:0x18
+__vt__26sFStateID_c<11dAcOspike_c> = .data:0x000001C8; // type:object size:0x34
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
-lbl_372_bss_8 = .bss:0x00000008; // type:object size:0x58 data:4byte
+sVec1__11dAcOspike_c = .bss:0x00000008; // type:object size:0xC data:4byte
+sVec2__11dAcOspike_c = .bss:0x00000014; // type:object size:0xC data:4byte
+StateID_Wait__11dAcOspike_c = .bss:0x00000030; // type:object size:0x30 data:4byte
diff --git a/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/splits.txt b/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/splits.txt
index 760878b7..e0089e55 100644
--- a/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/splits.txt
+++ b/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/splits.txt
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp:
.text start:0x000000F0 end:0x00000F08
.ctors start:0x00000000 end:0x00000004
+ .rodata start:0x00000000 end:0x00000020
+ .data start:0x00000000 end:0x00000278
+ .bss start:0x00000008 end:0x00000088
diff --git a/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/symbols.txt b/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/symbols.txt
index 091484c7..20ae02c1 100644
--- a/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/symbols.txt
+++ b/config/SOUE01/rels/d_a_obj_toD3_stone_figureNP/symbols.txt
@@ -3,63 +3,68 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
-fn_609_F0 = .text:0x000000F0; // type:function size:0xC8
-fn_609_1C0 = .text:0x000001C0; // type:function size:0x58
-fn_609_220 = .text:0x00000220; // type:function size:0x6C
-fn_609_290 = .text:0x00000290; // type:function size:0xA0
-fn_609_330 = .text:0x00000330; // type:function size:0xA4
-fn_609_3E0 = .text:0x000003E0; // type:function size:0x88
-fn_609_470 = .text:0x00000470; // type:function size:0x1C4
-fn_609_640 = .text:0x00000640; // type:function size:0x10
-fn_609_650 = .text:0x00000650; // type:function size:0x8
-fn_609_660 = .text:0x00000660; // type:function size:0x4C
-fn_609_6B0 = .text:0x000006B0; // type:function size:0x10
-fn_609_6C0 = .text:0x000006C0; // type:function size:0x3C
-fn_609_700 = .text:0x00000700; // type:function size:0x58
-fn_609_760 = .text:0x00000760; // type:function size:0xDC
-fn_609_840 = .text:0x00000840; // type:function size:0x4
-fn_609_850 = .text:0x00000850; // type:function size:0x4
-fn_609_860 = .text:0x00000860; // type:function size:0x4
-fn_609_870 = .text:0x00000870; // type:function size:0x4
-fn_609_880 = .text:0x00000880; // type:function size:0x20
-fn_609_8A0 = .text:0x000008A0; // type:function size:0x48
-fn_609_8F0 = .text:0x000008F0; // type:function size:0x70
-fn_609_960 = .text:0x00000960; // type:function size:0x30
-fn_609_990 = .text:0x00000990; // type:function size:0xD8
-fn_609_A70 = .text:0x00000A70; // type:function size:0x10
-fn_609_A80 = .text:0x00000A80; // type:function size:0x60
-fn_609_AE0 = .text:0x00000AE0; // type:function size:0xC
-fn_609_AF0 = .text:0x00000AF0; // type:function size:0x1C
-fn_609_B10 = .text:0x00000B10; // type:function size:0x1C
-fn_609_B30 = .text:0x00000B30; // type:function size:0x1C
-fn_609_B50 = .text:0x00000B50; // type:function size:0x10
-fn_609_B60 = .text:0x00000B60; // type:function size:0x10
-fn_609_B70 = .text:0x00000B70; // type:function size:0x10
-fn_609_B80 = .text:0x00000B80; // type:function size:0x10
-fn_609_B90 = .text:0x00000B90; // type:function size:0x10
-fn_609_BA0 = .text:0x00000BA0; // type:function size:0x10
-fn_609_BB0 = .text:0x00000BB0; // type:function size:0x30
-fn_609_BE0 = .text:0x00000BE0; // type:function size:0x30
-fn_609_C10 = .text:0x00000C10; // type:function size:0x30
-fn_609_C40 = .text:0x00000C40; // type:function size:0x1D4
-fn_609_E20 = .text:0x00000E20; // type:function size:0x58
-fn_609_E80 = .text:0x00000E80; // type:function size:0x88
+dAcOtoD3StoneFigure_c_classInit__Fv = .text:0x000000F0; // type:function size:0xC8
+__dt__34sFState_c<21dAcOtoD3StoneFigure_c>Fv = .text:0x000001C0; // type:function size:0x58
+__dt__37sFStateFct_c<21dAcOtoD3StoneFigure_c>Fv = .text:0x00000220; // type:function size:0x6C
+__dt__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000290; // type:function size:0xA0
+__dt__60sFStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000330; // type:function size:0xA4
+createHeap__21dAcOtoD3StoneFigure_cFv = .text:0x000003E0; // type:function size:0x88
+create__21dAcOtoD3StoneFigure_cFv = .text:0x00000470; // type:function size:0x1C4
+changeState__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000640; // type:function size:0x10
+doDelete__21dAcOtoD3StoneFigure_cFv = .text:0x00000650; // type:function size:0x8
+actorExecute__21dAcOtoD3StoneFigure_cFv = .text:0x00000660; // type:function size:0x4C
+executeState__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000006B0; // type:function size:0x10
+draw__21dAcOtoD3StoneFigure_cFv = .text:0x000006C0; // type:function size:0x3C
+initializeState_OneEye__21dAcOtoD3StoneFigure_cFv = .text:0x00000700; // type:function size:0x58
+executeState_OneEye__21dAcOtoD3StoneFigure_cFv = .text:0x00000760; // type:function size:0xDC
+finalizeState_OneEye__21dAcOtoD3StoneFigure_cFv = .text:0x00000840; // type:function size:0x4
+initializeState_Eyes__21dAcOtoD3StoneFigure_cFv = .text:0x00000850; // type:function size:0x4
+executeState_Eyes__21dAcOtoD3StoneFigure_cFv = .text:0x00000860; // type:function size:0x4
+finalizeState_Eyes__21dAcOtoD3StoneFigure_cFv = .text:0x00000870; // type:function size:0x4
+getModelName__21dAcOtoD3StoneFigure_cCFv = .text:0x00000880; // type:function size:0x20
+isStoneOfTrialsPlaced__21dAcOtoD3StoneFigure_cCFv = .text:0x000008A0; // type:function size:0x48
+doInteraction__21dAcOtoD3StoneFigure_cFl = .text:0x000008F0; // type:function size:0x70
+hasStoneOfTrials__21dAcOtoD3StoneFigure_cCFv = .text:0x00000960; // type:function size:0x30
+__dt__21dAcOtoD3StoneFigure_cFv = .text:0x00000990; // type:function size:0xD8
+getStateID__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000A70; // type:function size:0x10
+build__37sFStateFct_c<21dAcOtoD3StoneFigure_c>FRC12sStateIDIf_c = .text:0x00000A80; // type:function size:0x60
+dispose__37sFStateFct_c<21dAcOtoD3StoneFigure_c>FRP10sStateIf_c = .text:0x00000AE0; // type:function size:0xC
+initialize__34sFState_c<21dAcOtoD3StoneFigure_c>Fv = .text:0x00000AF0; // type:function size:0x1C
+execute__34sFState_c<21dAcOtoD3StoneFigure_c>Fv = .text:0x00000B10; // type:function size:0x1C
+finalize__34sFState_c<21dAcOtoD3StoneFigure_c>Fv = .text:0x00000B30; // type:function size:0x1C
+initializeState__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000B50; // type:function size:0x10
+finalizeState__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000B60; // type:function size:0x10
+refreshState__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000B70; // type:function size:0x10
+getState__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000B80; // type:function size:0x10
+getNewStateID__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000B90; // type:function size:0x10
+getOldStateID__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000BA0; // type:function size:0x10
+finalizeState__36sFStateID_c<21dAcOtoD3StoneFigure_c>CFR21dAcOtoD3StoneFigure_c = .text:0x00000BB0; // type:function size:0x30
+executeState__36sFStateID_c<21dAcOtoD3StoneFigure_c>CFR21dAcOtoD3StoneFigure_c = .text:0x00000BE0; // type:function size:0x30
+initializeState__36sFStateID_c<21dAcOtoD3StoneFigure_c>CFR21dAcOtoD3StoneFigure_c = .text:0x00000C10; // type:function size:0x30
+__sinit_\d_a_obj_toD3_stone_figure_cpp = .text:0x00000C40; // type:function size:0x1D4 scope:local
+__dt__36sFStateID_c<21dAcOtoD3StoneFigure_c>Fv = .text:0x00000E20; // type:function size:0x58
+isSameName__36sFStateID_c<21dAcOtoD3StoneFigure_c>CFPCc = .text:0x00000E80; // type:function size:0x88
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
-lbl_609_rodata_0 = .rodata:0x00000000; // type:object size:0x20 data:float
-lbl_609_data_0 = .data:0x00000000; // type:object size:0x48 data:float
-lbl_609_data_48 = .data:0x00000048; // type:object size:0x30
-lbl_609_data_78 = .data:0x00000078; // type:object size:0xC data:string
-lbl_609_data_84 = .data:0x00000084; // type:object size:0xC
-lbl_609_data_90 = .data:0x00000090; // type:object size:0x10
-lbl_609_data_A0 = .data:0x000000A0; // type:object size:0x80
-lbl_609_data_120 = .data:0x00000120; // type:object size:0x30
-lbl_609_data_150 = .data:0x00000150; // type:object size:0x30
-lbl_609_data_180 = .data:0x00000180; // type:object size:0x18
-lbl_609_data_198 = .data:0x00000198; // type:object size:0xAC
-lbl_609_data_244 = .data:0x00000244; // type:object size:0x34
+lbl_609_rodata_0 = .rodata:0x00000000; // type:object size:0x20 scope:local data:float
+g_profile_OBJ_TOD3_STONE = .data:0x00000000; // type:object size:0x10 data:4byte
+sRadius__21dAcOtoD3StoneFigure_c = .data:0x00000010; // type:object size:0x4 data:float
+sHeight__21dAcOtoD3StoneFigure_c = .data:0x00000014; // type:object size:0x4 data:float
+sCcSrc__21dAcOtoD3StoneFigure_c = .data:0x00000018; // type:object size:0x30
+lbl_609_data_48 = .data:0x00000048; // type:object size:0xA scope:local data:string
+lbl_609_data_54 = .data:0x00000054; // type:object size:0x23 scope:local data:string
+lbl_609_data_78 = .data:0x00000078; // type:object size:0xC scope:local data:string
+lbl_609_data_84 = .data:0x00000084; // type:object size:0xC scope:local data:string
+lbl_609_data_90 = .data:0x00000090; // type:object size:0x10 scope:local data:string
+__vt__21dAcOtoD3StoneFigure_c = .data:0x000000A0; // type:object size:0x80
+__vt__60sFStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c> = .data:0x00000120; // type:object size:0x30
+__vt__90sStateMgr_c<21dAcOtoD3StoneFigure_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000150; // type:object size:0x30
+__vt__37sFStateFct_c<21dAcOtoD3StoneFigure_c> = .data:0x00000180; // type:object size:0x14
+__vt__34sFState_c<21dAcOtoD3StoneFigure_c> = .data:0x00000198; // type:object size:0x18
+__vt__36sFStateID_c<21dAcOtoD3StoneFigure_c> = .data:0x00000244; // type:object size:0x34
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
-lbl_609_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
-lbl_609_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
-lbl_609_bss_58 = .bss:0x00000058; // type:object size:0x30 data:4byte
+lbl_609_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local data:4byte
+StateID_OneEye__21dAcOtoD3StoneFigure_c = .bss:0x00000018; // type:object size:0x30 data:4byte
+lbl_609_bss_48 = .bss:0x00000048; // type:object size:0x10 scope:local data:4byte
+StateID_Eyes__21dAcOtoD3StoneFigure_c = .bss:0x00000058; // type:object size:0x30 data:4byte
diff --git a/config/SOUE01/rels/d_a_obj_triforceNP/splits.txt b/config/SOUE01/rels/d_a_obj_triforceNP/splits.txt
index 1427d7d9..272206d3 100644
--- a/config/SOUE01/rels/d_a_obj_triforceNP/splits.txt
+++ b/config/SOUE01/rels/d_a_obj_triforceNP/splits.txt
@@ -11,3 +11,5 @@ REL/executor.c:
REL/d/a/obj/d_a_obj_triforce.cpp:
.text start:0x00000070 end:0x0000050C
+ .rodata start:0x00000000 end:0x00000028
+ .data start:0x00000000 end:0x000000E8
diff --git a/config/SOUE01/rels/d_a_obj_triforceNP/symbols.txt b/config/SOUE01/rels/d_a_obj_triforceNP/symbols.txt
index 59c88a03..e6e9d62c 100644
--- a/config/SOUE01/rels/d_a_obj_triforceNP/symbols.txt
+++ b/config/SOUE01/rels/d_a_obj_triforceNP/symbols.txt
@@ -1,19 +1,19 @@
_prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
-fn_625_70 = .text:0x00000070; // type:function size:0xA0
-fn_625_110 = .text:0x00000110; // type:function size:0xDC
-fn_625_1F0 = .text:0x000001F0; // type:function size:0xBC
-fn_625_2B0 = .text:0x000002B0; // type:function size:0x8
-fn_625_2C0 = .text:0x000002C0; // type:function size:0x18C
-fn_625_450 = .text:0x00000450; // type:function size:0x28
-fn_625_480 = .text:0x00000480; // type:function size:0x8C
+dAcOtriforce_c_classInit__Fv = .text:0x00000070; // type:function size:0xA0
+createHeap__14dAcOtriforce_cFv = .text:0x00000110; // type:function size:0xDC
+create__14dAcOtriforce_cFv = .text:0x000001F0; // type:function size:0xBC
+doDelete__14dAcOtriforce_cFv = .text:0x000002B0; // type:function size:0x8
+actorExecute__14dAcOtriforce_cFv = .text:0x000002C0; // type:function size:0x18C
+draw__14dAcOtriforce_cFv = .text:0x00000450; // type:function size:0x28
+__dt__14dAcOtriforce_cFv = .text:0x00000480; // type:function size:0x8C
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
-lbl_625_rodata_0 = .rodata:0x00000000; // type:object size:0xC data:float
-lbl_625_rodata_C = .rodata:0x0000000C; // type:object size:0x1C data:float
-lbl_625_data_0 = .data:0x00000000; // type:object size:0x10
-lbl_625_data_10 = .data:0x00000010; // type:object size:0x2C
-lbl_625_data_3C = .data:0x0000003C; // type:object size:0xC
-lbl_625_data_48 = .data:0x00000048; // type:object size:0x20
-lbl_625_data_68 = .data:0x00000068; // type:object size:0x80
+lbl_625_rodata_0 = .rodata:0x00000000; // type:object size:0xC scope:local data:float
+lbl_625_rodata_C = .rodata:0x0000000C; // type:object size:0x1C scope:local data:float
+g_profile_OBJ_TRIFORCE = .data:0x00000000; // type:object size:0x10
+sCcSrc__14dAcOtriforce_c = .data:0x00000010; // type:object size:0x2C
+lbl_625_data_3C = .data:0x0000003C; // type:object size:0xC scope:local
+lbl_625_data_48 = .data:0x00000048; // type:object size:0x20 scope:local
+__vt__14dAcOtriforce_c = .data:0x00000068; // type:object size:0x80
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index 7493e4bb..fc0eb072 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -515,6 +515,31 @@ m/m_pad.cpp:
.sdata2 start:0x8057CDF8 end:0x8057CE00
.bss start:0x805CB0B8 end:0x805CB1F8
+toBeSorted/cc/d_cc_d.cpp:
+ .text start:0x80328120 end:0x8032BC78
+ .ctors start:0x804DB8F8 end:0x804DB8FC
+ .rodata start:0x804F0AF0 end:0x804F0B80
+ .data start:0x805473D8 end:0x80547668
+ .sdata2 start:0x8057CF98 end:0x8057CFBC
+ .bss start:0x805D0128 end:0x805D0134
+
+toBeSorted/cc/d_cc_unknown.cpp:
+ .text start:0x8032BEC0 end:0x8032BF00
+ .data start:0x80547668 end:0x80547678
+
+toBeSorted/cc/d_cc_m3d.cpp:
+ .text start:0x8032BF00 end:0x80337B58
+
+toBeSorted/cc/d_cc_m3d_g_cyl.cpp:
+ .text start:0x80338020 end:0x80338348
+
+toBeSorted/cc/d_cc_m3d_g_sph.cpp:
+ .text start:0x80338680 end:0x803388D8
+
+toBeSorted/cc/d_cc_shape_colliders.cpp:
+ .text start:0x80353B50 end:0x80354298
+ .data start:0x80548340 end:0x80548580
+
rvl/CX/cx.c:
.text start:0x803CEE90 end:0x803D0B20
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index d04c946a..c47e5690 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -919,9 +919,9 @@ fn_80027490 = .text:0x80027490; // type:function size:0x40
fn_800274D0 = .text:0x800274D0; // type:function size:0x40
fn_80027510 = .text:0x80027510; // type:function size:0x4C
fn_80027560 = .text:0x80027560; // type:function size:0x5C
-fn_800275C0 = .text:0x800275C0; // type:function size:0x44
+__ct__13EffectsStructFv = .text:0x800275C0; // type:function size:0x44
fn_80027610 = .text:0x80027610; // type:function size:0x44
-fn_80027660 = .text:0x80027660; // type:function size:0x78
+__dt__13EffectsStructFv = .text:0x80027660; // type:function size:0x78
fn_800276E0 = .text:0x800276E0; // type:function size:0x84
fn_80027770 = .text:0x80027770; // type:function size:0xE8
fn_80027860 = .text:0x80027860; // type:function size:0xC8
@@ -2090,7 +2090,7 @@ preExecute__7dBase_cFv = .text:0x80050890; // type:function size:0x60
postExecute__7dBase_cFQ27fBase_c12MAIN_STATE_e = .text:0x800508F0; // type:function size:0x28
preDraw__7dBase_cFv = .text:0x80050920; // type:function size:0x60
resetFlags__7dBase_cFv = .text:0x80050980; // type:function size:0x14
-isActorPlayer__7dBase_cFR7dBase_c = .text:0x800509A0; // type:function size:0x14
+isActorPlayer__7dBase_cFv = .text:0x800509A0; // type:function size:0x14
loadAsyncCallback__7dBase_cFv = .text:0x800509C0; // type:function size:0x8
unloadCallback__7dBase_cFv = .text:0x800509D0; // type:function size:0x4
initLoader__7dBase_cFv = .text:0x800509E0; // type:function size:0x1C
@@ -3371,8 +3371,8 @@ fn_80096AB0 = .text:0x80096AB0; // type:function size:0x88
fn_80096B40 = .text:0x80096B40; // type:function size:0x80
fn_80096BC0 = .text:0x80096BC0; // type:function size:0x18
fn_80096BE0 = .text:0x80096BE0; // type:function size:0x20
-fn_80096C00 = .text:0x80096C00; // type:function size:0x28
-fn_80096C30 = .text:0x80096C30; // type:function size:0x28
+addTarget__12dAttention_cFP9dAcBase_clffff = .text:0x80096C00; // type:function size:0x28
+addTarget__12dAttention_cFP9dAcBase_clfff = .text:0x80096C30; // type:function size:0x28
fn_80096C60 = .text:0x80096C60; // type:function size:0x30
fn_80096C90 = .text:0x80096C90; // type:function size:0x34
fn_80096CD0 = .text:0x80096CD0; // type:function size:0x30
@@ -3562,7 +3562,7 @@ fn_8009EB10 = .text:0x8009EB10; // type:function size:0xC
fn_8009EB20 = .text:0x8009EB20; // type:function size:0x8
fn_8009EB30 = .text:0x8009EB30; // type:function size:0x36C
fn_8009EEA0 = .text:0x8009EEA0; // type:function size:0x53C
-alsoSetAsCurrentEvent = .text:0x8009F3E0; // type:function size:0x470
+alsoSetAsCurrentEvent__12EventManagerFP9dAcBase_cP5EventPv = .text:0x8009F3E0; // type:function size:0x470
fn_8009F850 = .text:0x8009F850; // type:function size:0x134
fn_8009F990 = .text:0x8009F990; // type:function size:0x80
fn_8009FA10 = .text:0x8009FA10; // type:function size:0x8
@@ -3570,7 +3570,7 @@ fn_8009FA20 = .text:0x8009FA20; // type:function size:0x1A0
fn_8009FBC0 = .text:0x8009FBC0; // type:function size:0x120
fn_8009FCE0 = .text:0x8009FCE0; // type:function size:0x11C
fn_8009FE00 = .text:0x8009FE00; // type:function size:0x124
-fn_8009FF30 = .text:0x8009FF30; // type:function size:0x10C
+isInEvent__12EventManagerFP9dAcBase_cPCc = .text:0x8009FF30; // type:function size:0x10C
fn_800A0040 = .text:0x800A0040; // type:function size:0x114
fn_800A0160 = .text:0x800A0160; // type:function size:0xB8
fn_800A0220 = .text:0x800A0220; // type:function size:0x64
@@ -11179,7 +11179,7 @@ fn_801BAE60 = .text:0x801BAE60; // type:function size:0x90
fn_801BAEF0 = .text:0x801BAEF0; // type:function size:0x50
fn_801BAF40 = .text:0x801BAF40; // type:function size:0x54
fn_801BAFA0 = .text:0x801BAFA0; // type:function size:0xDC
-fn_801BB080 = .text:0x801BB080; // type:function size:0xC0
+triggerExit__6ScGameFlUcll = .text:0x801BB080; // type:function size:0xC0
fn_801BB140 = .text:0x801BB140; // type:function size:0x154
fn_801BB2A0 = .text:0x801BB2A0; // type:function size:0x28
fn_801BB2D0 = .text:0x801BB2D0; // type:function size:0x8
@@ -17290,7 +17290,7 @@ atan2s__2cMFff = .text:0x802E0AF0; // type:function size:0x1BC
fn_802E0CB0 = .text:0x802E0CB0; // type:function size:0x48
fn_802E0D00 = .text:0x802E0D00; // type:function size:0x8
rnd__2cMFv = .text:0x802E0D10; // type:function size:0x8
-fn_802E0D20 = .text:0x802E0D20; // type:function size:0x58
+rndInt__2cMFi = .text:0x802E0D20; // type:function size:0x58
rndF__2cMFf = .text:0x802E0D80; // type:function size:0x38
fn_802E0DC0 = .text:0x802E0DC0; // type:function size:0x48
fn_802E0E10 = .text:0x802E0E10; // type:function size:0xC
@@ -17838,12 +17838,12 @@ createDylinkHeap__5mHeapFUlPQ23EGG4Heap = .text:0x802F15C0; // type:function siz
createAssertHeap__5mHeapFPQ23EGG4Heap = .text:0x802F15F0; // type:function size:0x50
makeHeapOnCurrentGameHeap__5mHeapFUlPCcUlUl = .text:0x802F1640; // type:function size:0x20
fn_802F1660 = .text:0x802F1660; // type:function size:0x44
-fn_802F16B0 = .text:0x802F16B0; // type:function size:0xBC
+XrotS__6mMtx_cFRC4mAng = .text:0x802F16B0; // type:function size:0xBC
fn_802F1770 = .text:0x802F1770; // type:function size:0x4C
fn_802F17C0 = .text:0x802F17C0; // type:function size:0xBC
YrotM__6mMtx_cFRC4mAng = .text:0x802F1880; // type:function size:0x4C
fn_802F18D0 = .text:0x802F18D0; // type:function size:0xBC
-fn_802F1990 = .text:0x802F1990; // type:function size:0x4C
+ZrotM__6mMtx_cFRC4mAng = .text:0x802F1990; // type:function size:0x4C
fn_802F19E0 = .text:0x802F19E0; // type:function size:0x60
fn_802F1A40 = .text:0x802F1A40; // type:function size:0x60
fn_802F1AA0 = .text:0x802F1AA0; // type:function size:0x60
@@ -18739,35 +18739,35 @@ fn_80328090 = .text:0x80328090; // type:function size:0x40
fn_803280D0 = .text:0x803280D0; // type:function size:0x8
fn_803280E0 = .text:0x803280E0; // type:function size:0xC
fn_803280F0 = .text:0x803280F0; // type:function size:0x24
-fn_80328120 = .text:0x80328120; // type:function size:0x10
-fn_80328130 = .text:0x80328130; // type:function size:0x40
-fn_80328170 = .text:0x80328170; // type:function size:0x10
-fn_80328180 = .text:0x80328180; // type:function size:0x40
-fn_803281C0 = .text:0x803281C0; // type:function size:0x104
+__ct__15dCcD_DivideInfoFv = .text:0x80328120; // type:function size:0x10
+__dt__15dCcD_DivideInfoFv = .text:0x80328130; // type:function size:0x40
+__ct__15dCcD_DivideAreaFv = .text:0x80328170; // type:function size:0x10
+__dt__15dCcD_DivideAreaFv = .text:0x80328180; // type:function size:0x40
+SetArea__15dCcD_DivideAreaFRC4Aabb = .text:0x803281C0; // type:function size:0x104
fn_803282D0 = .text:0x803282D0; // type:function size:0x198
fn_80328470 = .text:0x80328470; // type:function size:0x1E0
-fn_80328650 = .text:0x80328650; // type:function size:0x4C
-fn_803286A0 = .text:0x803286A0; // type:function size:0x20
-fn_803286C0 = .text:0x803286C0; // type:function size:0x1C
+__ct__12UnkCCDStructFP9dAcBase_c = .text:0x80328650; // type:function size:0x4C
+postExecute__12UnkCCDStructFv = .text:0x803286A0; // type:function size:0x20
+getId__12UnkCCDStructFv = .text:0x803286C0; // type:function size:0x1C
fn_803286E0 = .text:0x803286E0; // type:function size:0xA0
-fn_80328780 = .text:0x80328780; // type:function size:0x54
-fn_803287E0 = .text:0x803287E0; // type:function size:0xD4
-fn_803288C0 = .text:0x803288C0; // type:function size:0x2C
-fn_803288F0 = .text:0x803288F0; // type:function size:0x94
-fn_80328990 = .text:0x80328990; // type:function size:0x8
-fn_803289A0 = .text:0x803289A0; // type:function size:0x14
-fn_803289C0 = .text:0x803289C0; // type:function size:0x8
-fn_803289D0 = .text:0x803289D0; // type:function size:0x18
-fn_803289F0 = .text:0x803289F0; // type:function size:0x58
-fn_80328A50 = .text:0x80328A50; // type:function size:0x7C
-fn_80328AD0 = .text:0x80328AD0; // type:function size:0x58
-fn_80328B30 = .text:0x80328B30; // type:function size:0x28
-fn_80328B60 = .text:0x80328B60; // type:function size:0x50
-fn_80328BB0 = .text:0x80328BB0; // type:function size:0x48
-fn_80328C00 = .text:0x80328C00; // type:function size:0x4C
-fn_80328C50 = .text:0x80328C50; // type:function size:0x4C
-fn_80328CA0 = .text:0x80328CA0; // type:function size:0x8
-fn_80328CB0 = .text:0x80328CB0; // type:function size:0x8
+reset__12UnkCCDStructFv = .text:0x80328780; // type:function size:0x54
+getSomething__12UnkCCDStructFi = .text:0x803287E0; // type:function size:0xD4
+__ct__22dCcD_GAtTgCoCommonBaseFv = .text:0x803288C0; // type:function size:0x2C
+__dt__22dCcD_GAtTgCoCommonBaseFv = .text:0x803288F0; // type:function size:0x94
+unlink__22dCcD_GAtTgCoCommonBaseFv = .text:0x80328990; // type:function size:0x8
+setActor__22dCcD_GAtTgCoCommonBaseFP9dAcBase_c = .text:0x803289A0; // type:function size:0x14
+getActor__22dCcD_GAtTgCoCommonBaseFv = .text:0x803289C0; // type:function size:0x8
+decreaseCount__22dCcD_GAtTgCoCommonBaseFv = .text:0x803289D0; // type:function size:0x18
+__ct__12dCcD_GObjInfFv = .text:0x803289F0; // type:function size:0x58
+__dt__12dCcD_GObjInfFv = .text:0x80328A50; // type:function size:0x7C
+weirdConditionCheck__12dCcD_GObjInfFP9dAcBase_cUl = .text:0x80328AD0; // type:function size:0x58
+clear__12dCcD_GObjInfFv = .text:0x80328B30; // type:function size:0x28
+init__12dCcD_GObjInfFRC15dCcD_SrcGObjInf = .text:0x80328B60; // type:function size:0x50
+ResetAtHit__12dCcD_GObjInfFv = .text:0x80328BB0; // type:function size:0x48
+ResetTgHit__12dCcD_GObjInfFv = .text:0x80328C00; // type:function size:0x4C
+ResetCoHit__12dCcD_GObjInfFv = .text:0x80328C50; // type:function size:0x4C
+GetAtHitPosP__12dCcD_GObjInfFv = .text:0x80328CA0; // type:function size:0x8
+GetAtHitPosP2__12dCcD_GObjInfFv = .text:0x80328CB0; // type:function size:0x8
fn_80328CC0 = .text:0x80328CC0; // type:function size:0xC
fn_80328CD0 = .text:0x80328CD0; // type:function size:0xC
fn_80328CE0 = .text:0x80328CE0; // type:function size:0xC
@@ -18775,7 +18775,7 @@ fn_80328CF0 = .text:0x80328CF0; // type:function size:0x8
fn_80328D00 = .text:0x80328D00; // type:function size:0x8
fn_80328D10 = .text:0x80328D10; // type:function size:0xC
fn_80328D20 = .text:0x80328D20; // type:function size:0xC
-fn_80328D30 = .text:0x80328D30; // type:function size:0x4
+dCcD_GObjInf_0x10__12dCcD_GObjInfFv = .text:0x80328D30; // type:function size:0x4
fn_80328D40 = .text:0x80328D40; // type:function size:0xC
fn_80328D50 = .text:0x80328D50; // type:function size:0x8
fn_80328D60 = .text:0x80328D60; // type:function size:0xC
@@ -18785,7 +18785,7 @@ fn_80328D90 = .text:0x80328D90; // type:function size:0xC
fn_80328DA0 = .text:0x80328DA0; // type:function size:0xC
fn_80328DB0 = .text:0x80328DB0; // type:function size:0xC
fn_80328DC0 = .text:0x80328DC0; // type:function size:0xC
-fn_80328DD0 = .text:0x80328DD0; // type:function size:0x4
+GetAtActor__12dCcD_GObjInfFv = .text:0x80328DD0; // type:function size:0x4
fn_80328DE0 = .text:0x80328DE0; // type:function size:0x18
fn_80328E00 = .text:0x80328E00; // type:function size:0x8
fn_80328E10 = .text:0x80328E10; // type:function size:0xC
@@ -18803,155 +18803,155 @@ fn_80328EC0 = .text:0x80328EC0; // type:function size:0x8
fn_80328ED0 = .text:0x80328ED0; // type:function size:0x8
fn_80328EE0 = .text:0x80328EE0; // type:function size:0xC
fn_80328EF0 = .text:0x80328EF0; // type:function size:0x8
-fn_80328F00 = .text:0x80328F00; // type:function size:0x8
+GetTgActor__12dCcD_GObjInfFv = .text:0x80328F00; // type:function size:0x8
fn_80328F10 = .text:0x80328F10; // type:function size:0x8
-fn_80328F20 = .text:0x80328F20; // type:function size:0x8
+GetCoActor__12dCcD_GObjInfFv = .text:0x80328F20; // type:function size:0x8
fn_80328F30 = .text:0x80328F30; // type:function size:0xC
fn_80328F40 = .text:0x80328F40; // type:function size:0x14
fn_80328F60 = .text:0x80328F60; // type:function size:0xC
-fn_80328F70 = .text:0x80328F70; // type:function size:0x64
-fn_80328FE0 = .text:0x80328FE0; // type:function size:0x40
-fn_80329020 = .text:0x80329020; // type:function size:0x5C
+adjustHitPos__12dCcD_GObjInfFff = .text:0x80328F70; // type:function size:0x64
+__ct__14dCcD_ShapeAttrFv = .text:0x80328FE0; // type:function size:0x40
+__dt__14dCcD_ShapeAttrFv = .text:0x80329020; // type:function size:0x5C
fn_80329080 = .text:0x80329080; // type:function size:0x8
-fn_80329090 = .text:0x80329090; // type:function size:0x5C
-fn_803290F0 = .text:0x803290F0; // type:function size:0x8
+getShapeAccess__14dCcD_ShapeAttrFv = .text:0x80329090; // type:function size:0x5C
+dCcD_ShapeAttr_0x54__14dCcD_ShapeAttrFv = .text:0x803290F0; // type:function size:0x8
fn_80329100 = .text:0x80329100; // type:function size:0x8
fn_80329110 = .text:0x80329110; // type:function size:0x8
-fn_80329120 = .text:0x80329120; // type:function size:0xC
-fn_80329130 = .text:0x80329130; // type:function size:0x3C
-fn_80329170 = .text:0x80329170; // type:function size:0x58
-fn_803291D0 = .text:0x803291D0; // type:function size:0x458
-fn_80329630 = .text:0x80329630; // type:function size:0x1C
-fn_80329650 = .text:0x80329650; // type:function size:0x10
-fn_80329660 = .text:0x80329660; // type:function size:0x10
-fn_80329670 = .text:0x80329670; // type:function size:0x18
-fn_80329690 = .text:0x80329690; // type:function size:0xC
-fn_803296A0 = .text:0x803296A0; // type:function size:0x10
-fn_803296B0 = .text:0x803296B0; // type:function size:0x1C
-fn_803296D0 = .text:0x803296D0; // type:function size:0x8
-fn_803296E0 = .text:0x803296E0; // type:function size:0x8
-fn_803296F0 = .text:0x803296F0; // type:function size:0x8
-fn_80329700 = .text:0x80329700; // type:function size:0x8
-fn_80329710 = .text:0x80329710; // type:function size:0x8
-fn_80329720 = .text:0x80329720; // type:function size:0xD4
-fn_80329800 = .text:0x80329800; // type:function size:0x98
-fn_803298A0 = .text:0x803298A0; // type:function size:0x54
-fn_80329900 = .text:0x80329900; // type:function size:0x1C
-fn_80329920 = .text:0x80329920; // type:function size:0x4C
-fn_80329970 = .text:0x80329970; // type:function size:0x4C
-fn_803299C0 = .text:0x803299C0; // type:function size:0x40
-fn_80329A00 = .text:0x80329A00; // type:function size:0x58
-fn_80329A60 = .text:0x80329A60; // type:function size:0x1B0
-fn_80329C10 = .text:0x80329C10; // type:function size:0x1C
-fn_80329C30 = .text:0x80329C30; // type:function size:0xC
-fn_80329C40 = .text:0x80329C40; // type:function size:0xC
-fn_80329C50 = .text:0x80329C50; // type:function size:0xC
-fn_80329C60 = .text:0x80329C60; // type:function size:0xC
-fn_80329C70 = .text:0x80329C70; // type:function size:0xC
-fn_80329C80 = .text:0x80329C80; // type:function size:0x1C
-fn_80329CA0 = .text:0x80329CA0; // type:function size:0x84
-fn_80329D30 = .text:0x80329D30; // type:function size:0x8
-fn_80329D40 = .text:0x80329D40; // type:function size:0x8
-fn_80329D50 = .text:0x80329D50; // type:function size:0xC
-fn_80329D60 = .text:0x80329D60; // type:function size:0xC
-fn_80329D70 = .text:0x80329D70; // type:function size:0x164
-fn_80329EE0 = .text:0x80329EE0; // type:function size:0x18
-fn_80329F00 = .text:0x80329F00; // type:function size:0x1C
-fn_80329F20 = .text:0x80329F20; // type:function size:0x5C
-fn_80329F80 = .text:0x80329F80; // type:function size:0x8
-fn_80329F90 = .text:0x80329F90; // type:function size:0x8
-fn_80329FA0 = .text:0x80329FA0; // type:function size:0x44
-fn_80329FF0 = .text:0x80329FF0; // type:function size:0x58
-fn_8032A050 = .text:0x8032A050; // type:function size:0x5C
-fn_8032A0B0 = .text:0x8032A0B0; // type:function size:0x8
-fn_8032A0C0 = .text:0x8032A0C0; // type:function size:0x1C
-fn_8032A0E0 = .text:0x8032A0E0; // type:function size:0x1C
-fn_8032A100 = .text:0x8032A100; // type:function size:0x8
+getVirtualCenter__14dCcD_ShapeAttrFv = .text:0x80329120; // type:function size:0xC
+__ct__15dCcD_ShapeAttr2Fv = .text:0x80329130; // type:function size:0x3C
+__dt__15dCcD_ShapeAttr2Fv = .text:0x80329170; // type:function size:0x58
+dCcD_ShapeAttr_0x0C__15dCcD_ShapeAttr2Fv = .text:0x803291D0; // type:function size:0x458
+dCcD_ShapeAttr_0x10__15dCcD_ShapeAttr2Fv = .text:0x80329630; // type:function size:0x1C
+dCcD_ShapeAttr_0x14__15dCcD_ShapeAttr2Fv = .text:0x80329650; // type:function size:0x10
+dCcD_ShapeAttr_0x20__15dCcD_ShapeAttr2Fv = .text:0x80329660; // type:function size:0x10
+dCcD_ShapeAttr_0x24__15dCcD_ShapeAttr2Fv = .text:0x80329670; // type:function size:0x18
+dCcD_ShapeAttr_0x18__15dCcD_ShapeAttr2Fv = .text:0x80329690; // type:function size:0xC
+dCcD_ShapeAttr_0x1C__15dCcD_ShapeAttr2Fv = .text:0x803296A0; // type:function size:0x10
+dCcD_ShapeAttr_0x28__15dCcD_ShapeAttr2Fv = .text:0x803296B0; // type:function size:0x1C
+dCcD_ShapeAttr_0x2C__15dCcD_ShapeAttr2Fv = .text:0x803296D0; // type:function size:0x8
+dCcD_ShapeAttr_0x30__15dCcD_ShapeAttr2Fv = .text:0x803296E0; // type:function size:0x8
+dCcD_ShapeAttr_0x34__15dCcD_ShapeAttr2Fv = .text:0x803296F0; // type:function size:0x8
+dCcD_ShapeAttr_0x38__15dCcD_ShapeAttr2Fv = .text:0x80329700; // type:function size:0x8
+dCcD_ShapeAttr_0x3C__15dCcD_ShapeAttr2Fv = .text:0x80329710; // type:function size:0x8
+dCcD_ShapeAttr_0x44__15dCcD_ShapeAttr2Fv = .text:0x80329720; // type:function size:0xD4
+dCcD_ShapeAttr_0x48__15dCcD_ShapeAttr2Fv = .text:0x80329800; // type:function size:0x98
+getShapeAccess__15dCcD_ShapeAttr2Fv = .text:0x803298A0; // type:function size:0x54
+dCcD_ShapeAttr_0x50__15dCcD_ShapeAttr2Fv = .text:0x80329900; // type:function size:0x1C
+dCcD_ShapeAttr_0x58__15dCcD_ShapeAttr2Fv = .text:0x80329920; // type:function size:0x4C
+__ct__15dCcD_ShapeAttr5Fv = .text:0x80329970; // type:function size:0x4C
+__dt__9cM3dGAabbFv = .text:0x803299C0; // type:function size:0x40
+__dt__15dCcD_ShapeAttr5Fv = .text:0x80329A00; // type:function size:0x58
+dCcD_ShapeAttr_0x0C__15dCcD_ShapeAttr5Fv = .text:0x80329A60; // type:function size:0x1B0
+dCcD_ShapeAttr_0x10__15dCcD_ShapeAttr5Fv = .text:0x80329C10; // type:function size:0x1C
+dCcD_ShapeAttr_0x14__15dCcD_ShapeAttr5Fv = .text:0x80329C30; // type:function size:0xC
+dCcD_ShapeAttr_0x18__15dCcD_ShapeAttr5Fv = .text:0x80329C40; // type:function size:0xC
+dCcD_ShapeAttr_0x1C__15dCcD_ShapeAttr5Fv = .text:0x80329C50; // type:function size:0xC
+dCcD_ShapeAttr_0x20__15dCcD_ShapeAttr5Fv = .text:0x80329C60; // type:function size:0xC
+dCcD_ShapeAttr_0x24__15dCcD_ShapeAttr5Fv = .text:0x80329C70; // type:function size:0xC
+dCcD_ShapeAttr_0x28__15dCcD_ShapeAttr5Fv = .text:0x80329C80; // type:function size:0x1C
+dCcD_ShapeAttr_0x2C__15dCcD_ShapeAttr5Fv = .text:0x80329CA0; // type:function size:0x84
+dCcD_ShapeAttr_0x30__15dCcD_ShapeAttr5Fv = .text:0x80329D30; // type:function size:0x8
+dCcD_ShapeAttr_0x34__15dCcD_ShapeAttr5Fv = .text:0x80329D40; // type:function size:0x8
+dCcD_ShapeAttr_0x38__15dCcD_ShapeAttr5Fv = .text:0x80329D50; // type:function size:0xC
+dCcD_ShapeAttr_0x3C__15dCcD_ShapeAttr5Fv = .text:0x80329D60; // type:function size:0xC
+dCcD_ShapeAttr_0x44__15dCcD_ShapeAttr5Fv = .text:0x80329D70; // type:function size:0x164
+dCcD_ShapeAttr_0x48__15dCcD_ShapeAttr5Fv = .text:0x80329EE0; // type:function size:0x18
+dCcD_ShapeAttr_0x50__15dCcD_ShapeAttr5Fv = .text:0x80329F00; // type:function size:0x1C
+init__15dCcD_ShapeAttr5FRC16dCcD_SrcAabbAttr = .text:0x80329F20; // type:function size:0x5C
+getVirtualCenter__15dCcD_ShapeAttr5Fv = .text:0x80329F80; // type:function size:0x8
+dCcD_ShapeAttr_0x58__15dCcD_ShapeAttr5Fv = .text:0x80329F90; // type:function size:0x8
+__ct__15dCcD_ShapeAttr1Fv = .text:0x80329FA0; // type:function size:0x44
+__dt__15dCcD_ShapeAttr1Fv = .text:0x80329FF0; // type:function size:0x58
+init__15dCcD_ShapeAttr1FRC16dCcD_SrcUnk1Attr = .text:0x8032A050; // type:function size:0x5C
+getVirtualCenter__15dCcD_ShapeAttr1Fv = .text:0x8032A0B0; // type:function size:0x8
+dCcD_ShapeAttr_0x10__15dCcD_ShapeAttr1Fv = .text:0x8032A0C0; // type:function size:0x1C
+dCcD_ShapeAttr_0x28__15dCcD_ShapeAttr1Fv = .text:0x8032A0E0; // type:function size:0x1C
+dCcD_ShapeAttr_0x30__15dCcD_ShapeAttr1Fv = .text:0x8032A100; // type:function size:0x8
fn_8032A110 = .text:0x8032A110; // type:function size:0x308
-fn_8032A420 = .text:0x8032A420; // type:function size:0x28C
-fn_8032A6B0 = .text:0x8032A6B0; // type:function size:0x14
-fn_8032A6D0 = .text:0x8032A6D0; // type:function size:0xC
-fn_8032A6E0 = .text:0x8032A6E0; // type:function size:0xC
-fn_8032A6F0 = .text:0x8032A6F0; // type:function size:0xC
-fn_8032A700 = .text:0x8032A700; // type:function size:0xC
+dCcD_ShapeAttr_0x0C__15dCcD_ShapeAttr1Fv = .text:0x8032A420; // type:function size:0x28C
+dCcD_ShapeAttr_0x14__15dCcD_ShapeAttr1Fv = .text:0x8032A6B0; // type:function size:0x14
+dCcD_ShapeAttr_0x20__15dCcD_ShapeAttr1Fv = .text:0x8032A6D0; // type:function size:0xC
+dCcD_ShapeAttr_0x24__15dCcD_ShapeAttr1Fv = .text:0x8032A6E0; // type:function size:0xC
+dCcD_ShapeAttr_0x18__15dCcD_ShapeAttr1Fv = .text:0x8032A6F0; // type:function size:0xC
+dCcD_ShapeAttr_0x1C__15dCcD_ShapeAttr1Fv = .text:0x8032A700; // type:function size:0xC
fn_8032A710 = .text:0x8032A710; // type:function size:0xB0
fn_8032A7C0 = .text:0x8032A7C0; // type:function size:0xBC
-fn_8032A880 = .text:0x8032A880; // type:function size:0xA4
-fn_8032A930 = .text:0x8032A930; // type:function size:0x84
-fn_8032A9C0 = .text:0x8032A9C0; // type:function size:0x8C
-fn_8032AA50 = .text:0x8032AA50; // type:function size:0x8C
-fn_8032AAE0 = .text:0x8032AAE0; // type:function size:0x90
-fn_8032AB70 = .text:0x8032AB70; // type:function size:0x188
-fn_8032AD00 = .text:0x8032AD00; // type:function size:0x1C
-fn_8032AD20 = .text:0x8032AD20; // type:function size:0x50
-fn_8032AD70 = .text:0x8032AD70; // type:function size:0x34
-fn_8032ADB0 = .text:0x8032ADB0; // type:function size:0x3C
-fn_8032ADF0 = .text:0x8032ADF0; // type:function size:0x58
-fn_8032AE50 = .text:0x8032AE50; // type:function size:0x68
-fn_8032AEC0 = .text:0x8032AEC0; // type:function size:0x8
-fn_8032AED0 = .text:0x8032AED0; // type:function size:0x28
-fn_8032AF00 = .text:0x8032AF00; // type:function size:0x1C
-fn_8032AF20 = .text:0x8032AF20; // type:function size:0x10
-fn_8032AF30 = .text:0x8032AF30; // type:function size:0xC
-fn_8032AF40 = .text:0x8032AF40; // type:function size:0x2C
-fn_8032AF70 = .text:0x8032AF70; // type:function size:0xC
-fn_8032AF80 = .text:0x8032AF80; // type:function size:0xC
-fn_8032AF90 = .text:0x8032AF90; // type:function size:0x1C
-fn_8032AFB0 = .text:0x8032AFB0; // type:function size:0x8
-fn_8032AFC0 = .text:0x8032AFC0; // type:function size:0xC
-fn_8032AFD0 = .text:0x8032AFD0; // type:function size:0xC
-fn_8032AFE0 = .text:0x8032AFE0; // type:function size:0x84
-fn_8032B070 = .text:0x8032B070; // type:function size:0xC
-fn_8032B080 = .text:0x8032B080; // type:function size:0x64
-fn_8032B0F0 = .text:0x8032B0F0; // type:function size:0xE8
-fn_8032B1E0 = .text:0x8032B1E0; // type:function size:0x5C
-fn_8032B240 = .text:0x8032B240; // type:function size:0x1C
-fn_8032B260 = .text:0x8032B260; // type:function size:0x1C
-fn_8032B280 = .text:0x8032B280; // type:function size:0x44
-fn_8032B2D0 = .text:0x8032B2D0; // type:function size:0x58
-fn_8032B330 = .text:0x8032B330; // type:function size:0x50
-fn_8032B380 = .text:0x8032B380; // type:function size:0x8
-fn_8032B390 = .text:0x8032B390; // type:function size:0x190
-fn_8032B520 = .text:0x8032B520; // type:function size:0x1C
-fn_8032B540 = .text:0x8032B540; // type:function size:0x10
-fn_8032B550 = .text:0x8032B550; // type:function size:0x30
-fn_8032B580 = .text:0x8032B580; // type:function size:0x10
-fn_8032B590 = .text:0x8032B590; // type:function size:0x14
-fn_8032B5B0 = .text:0x8032B5B0; // type:function size:0xC
-fn_8032B5C0 = .text:0x8032B5C0; // type:function size:0x1C
-fn_8032B5E0 = .text:0x8032B5E0; // type:function size:0x8
-fn_8032B5F0 = .text:0x8032B5F0; // type:function size:0x10
-fn_8032B600 = .text:0x8032B600; // type:function size:0xC
-fn_8032B610 = .text:0x8032B610; // type:function size:0x8C
-fn_8032B6A0 = .text:0x8032B6A0; // type:function size:0xC
-fn_8032B6B0 = .text:0x8032B6B0; // type:function size:0x8
-fn_8032B6C0 = .text:0x8032B6C0; // type:function size:0xA4
-fn_8032B770 = .text:0x8032B770; // type:function size:0x58
-fn_8032B7D0 = .text:0x8032B7D0; // type:function size:0x1C
-fn_8032B7F0 = .text:0x8032B7F0; // type:function size:0x20
-fn_8032B810 = .text:0x8032B810; // type:function size:0x1C
-fn_8032B830 = .text:0x8032B830; // type:function size:0x44
-fn_8032B880 = .text:0x8032B880; // type:function size:0x58
-fn_8032B8E0 = .text:0x8032B8E0; // type:function size:0x94
-fn_8032B980 = .text:0x8032B980; // type:function size:0x14
-fn_8032B9A0 = .text:0x8032B9A0; // type:function size:0x1C
-fn_8032B9C0 = .text:0x8032B9C0; // type:function size:0x6C
-fn_8032BA30 = .text:0x8032BA30; // type:function size:0x58
-fn_8032BA90 = .text:0x8032BA90; // type:function size:0x64
-fn_8032BB00 = .text:0x8032BB00; // type:function size:0x34
-fn_8032BB40 = .text:0x8032BB40; // type:function size:0x48
-fn_8032BB90 = .text:0x8032BB90; // type:function size:0x58
-fn_8032BBF0 = .text:0x8032BBF0; // type:function size:0x18
-fn_8032BC10 = .text:0x8032BC10; // type:function size:0x1C
-fn_8032BC30 = .text:0x8032BC30; // type:function size:0x4
-fn_8032BC40 = .text:0x8032BC40; // type:function size:0x2C
-fn_8032BC70 = .text:0x8032BC70; // type:function size:0x8
+dCcD_ShapeAttr_0x2C__15dCcD_ShapeAttr1Fv = .text:0x8032A880; // type:function size:0xA4
+dCcD_ShapeAttr_0x38__15dCcD_ShapeAttr1Fv = .text:0x8032A930; // type:function size:0x84
+dCcD_ShapeAttr_0x3C__15dCcD_ShapeAttr1Fv = .text:0x8032A9C0; // type:function size:0x8C
+dCcD_ShapeAttr_0x34__15dCcD_ShapeAttr1Fv = .text:0x8032AA50; // type:function size:0x8C
+dCcD_ShapeAttr_0x44__15dCcD_ShapeAttr1Fv = .text:0x8032AAE0; // type:function size:0x90
+dCcD_ShapeAttr_0x48__15dCcD_ShapeAttr1Fv = .text:0x8032AB70; // type:function size:0x188
+dCcD_ShapeAttr_0x50__15dCcD_ShapeAttr1Fv = .text:0x8032AD00; // type:function size:0x1C
+getShapeAccess__15dCcD_ShapeAttr1Fv = .text:0x8032AD20; // type:function size:0x50
+dCcD_ShapeAttr_0x58__15dCcD_ShapeAttr1Fv = .text:0x8032AD70; // type:function size:0x34
+__ct__15dCcD_ShapeAttr3Fv = .text:0x8032ADB0; // type:function size:0x3C
+__dt__15dCcD_ShapeAttr3Fv = .text:0x8032ADF0; // type:function size:0x58
+init__15dCcD_ShapeAttr3FRC15dCcD_SrcCylAttr = .text:0x8032AE50; // type:function size:0x68
+getVirtualCenter__15dCcD_ShapeAttr3Fv = .text:0x8032AEC0; // type:function size:0x8
+dCcD_ShapeAttr_0x0C__15dCcD_ShapeAttr3Fv = .text:0x8032AED0; // type:function size:0x28
+dCcD_ShapeAttr_0x10__15dCcD_ShapeAttr3Fv = .text:0x8032AF00; // type:function size:0x1C
+dCcD_ShapeAttr_0x14__15dCcD_ShapeAttr3Fv = .text:0x8032AF20; // type:function size:0x10
+dCcD_ShapeAttr_0x20__15dCcD_ShapeAttr3Fv = .text:0x8032AF30; // type:function size:0xC
+dCcD_ShapeAttr_0x24__15dCcD_ShapeAttr3Fv = .text:0x8032AF40; // type:function size:0x2C
+dCcD_ShapeAttr_0x18__15dCcD_ShapeAttr3Fv = .text:0x8032AF70; // type:function size:0xC
+dCcD_ShapeAttr_0x1C__15dCcD_ShapeAttr3Fv = .text:0x8032AF80; // type:function size:0xC
+dCcD_ShapeAttr_0x28__15dCcD_ShapeAttr3Fv = .text:0x8032AF90; // type:function size:0x1C
+dCcD_ShapeAttr_0x30__15dCcD_ShapeAttr3Fv = .text:0x8032AFB0; // type:function size:0x8
+dCcD_ShapeAttr_0x38__15dCcD_ShapeAttr3Fv = .text:0x8032AFC0; // type:function size:0xC
+dCcD_ShapeAttr_0x3C__15dCcD_ShapeAttr3Fv = .text:0x8032AFD0; // type:function size:0xC
+dCcD_ShapeAttr_0x2C__15dCcD_ShapeAttr3Fv = .text:0x8032AFE0; // type:function size:0x84
+dCcD_ShapeAttr_0x34__15dCcD_ShapeAttr3Fv = .text:0x8032B070; // type:function size:0xC
+dCcD_ShapeAttr_0x44__15dCcD_ShapeAttr3Fv = .text:0x8032B080; // type:function size:0x64
+dCcD_ShapeAttr_0x48__15dCcD_ShapeAttr3Fv = .text:0x8032B0F0; // type:function size:0xE8
+getShapeAccess__15dCcD_ShapeAttr3Fv = .text:0x8032B1E0; // type:function size:0x5C
+dCcD_ShapeAttr_0x50__15dCcD_ShapeAttr3Fv = .text:0x8032B240; // type:function size:0x1C
+dCcD_ShapeAttr_0x58__15dCcD_ShapeAttr3Fv = .text:0x8032B260; // type:function size:0x1C
+__ct__15dCcD_ShapeAttr4Fv = .text:0x8032B280; // type:function size:0x44
+__dt__15dCcD_ShapeAttr4Fv = .text:0x8032B2D0; // type:function size:0x58
+init__15dCcD_ShapeAttr4FRC15dCcD_SrcSphAttr = .text:0x8032B330; // type:function size:0x50
+getVirtualCenter__15dCcD_ShapeAttr4Fv = .text:0x8032B380; // type:function size:0x8
+dCcD_ShapeAttr_0x0C__15dCcD_ShapeAttr4Fv = .text:0x8032B390; // type:function size:0x190
+dCcD_ShapeAttr_0x10__15dCcD_ShapeAttr4Fv = .text:0x8032B520; // type:function size:0x1C
+dCcD_ShapeAttr_0x14__15dCcD_ShapeAttr4Fv = .text:0x8032B540; // type:function size:0x10
+dCcD_ShapeAttr_0x20__15dCcD_ShapeAttr4Fv = .text:0x8032B550; // type:function size:0x30
+dCcD_ShapeAttr_0x24__15dCcD_ShapeAttr4Fv = .text:0x8032B580; // type:function size:0x10
+dCcD_ShapeAttr_0x18__15dCcD_ShapeAttr4Fv = .text:0x8032B590; // type:function size:0x14
+dCcD_ShapeAttr_0x1C__15dCcD_ShapeAttr4Fv = .text:0x8032B5B0; // type:function size:0xC
+dCcD_ShapeAttr_0x28__15dCcD_ShapeAttr4Fv = .text:0x8032B5C0; // type:function size:0x1C
+dCcD_ShapeAttr_0x30__15dCcD_ShapeAttr4Fv = .text:0x8032B5E0; // type:function size:0x8
+dCcD_ShapeAttr_0x38__15dCcD_ShapeAttr4Fv = .text:0x8032B5F0; // type:function size:0x10
+dCcD_ShapeAttr_0x3C__15dCcD_ShapeAttr4Fv = .text:0x8032B600; // type:function size:0xC
+dCcD_ShapeAttr_0x2C__15dCcD_ShapeAttr4Fv = .text:0x8032B610; // type:function size:0x8C
+dCcD_ShapeAttr_0x34__15dCcD_ShapeAttr4Fv = .text:0x8032B6A0; // type:function size:0xC
+dCcD_ShapeAttr_0x44__15dCcD_ShapeAttr4Fv = .text:0x8032B6B0; // type:function size:0x8
+dCcD_ShapeAttr_0x48__15dCcD_ShapeAttr4Fv = .text:0x8032B6C0; // type:function size:0xA4
+getShapeAccess__15dCcD_ShapeAttr4Fv = .text:0x8032B770; // type:function size:0x58
+dCcD_ShapeAttr_0x50__15dCcD_ShapeAttr4Fv = .text:0x8032B7D0; // type:function size:0x1C
+dCcD_ShapeAttr_0x54__15dCcD_ShapeAttr4Fv = .text:0x8032B7F0; // type:function size:0x20
+dCcD_ShapeAttr_0x58__15dCcD_ShapeAttr4Fv = .text:0x8032B810; // type:function size:0x1C
+__ct__11dCcD_GObjAtFv = .text:0x8032B830; // type:function size:0x44
+__dt__11dCcD_GObjAtFv = .text:0x8032B880; // type:function size:0x58
+init__11dCcD_GObjAtFPC14dCcD_SrcGObjAt = .text:0x8032B8E0; // type:function size:0x94
+setSomeAtFlags__11dCcD_GObjAtFUl = .text:0x8032B980; // type:function size:0x14
+adjustHitPos__11dCcD_GObjAtFff = .text:0x8032B9A0; // type:function size:0x1C
+__ct__11dCcD_GObjTgFv = .text:0x8032B9C0; // type:function size:0x6C
+__dt__11dCcD_GObjTgFv = .text:0x8032BA30; // type:function size:0x58
+init__11dCcD_GObjTgFPC14dCcD_SrcGObjTg = .text:0x8032BA90; // type:function size:0x64
+adjustHitPos__11dCcD_GObjTgFff = .text:0x8032BB00; // type:function size:0x34
+__ct__11dCcD_GObjCoFv = .text:0x8032BB40; // type:function size:0x48
+__dt__11dCcD_GObjCoFv = .text:0x8032BB90; // type:function size:0x58
+init__11dCcD_GObjCoFPC14dCcD_SrcGObjCo = .text:0x8032BBF0; // type:function size:0x18
+setSomeAtFlags__11dCcD_GObjCoFUl = .text:0x8032BC10; // type:function size:0x1C
+adjustHitPos__11dCcD_GObjCoFff = .text:0x8032BC30; // type:function size:0x4
+__sinit_\d_cc_d_cpp = .text:0x8032BC40; // type:function size:0x2C
+@44@__dt__15dCcD_ShapeAttr5Fv = .text:0x8032BC70; // type:function size:0x8
fn_8032BC80 = .text:0x8032BC80; // type:function size:0x238
fn_8032BEC0 = .text:0x8032BEC0; // type:function size:0x40
-fn_8032BF00 = .text:0x8032BF00; // type:function size:0xB0
-fn_8032BFB0 = .text:0x8032BFB0; // type:function size:0x11C
-fn_8032C0D0 = .text:0x8032C0D0; // type:function size:0x84
-fn_8032C160 = .text:0x8032C160; // type:function size:0x10C
+cM3d_Len2dSqPntAndSegLine = .text:0x8032BF00; // type:function size:0xB0
+cM3d_Len3dSqPntAndSegLine = .text:0x8032BFB0; // type:function size:0x11C
+cM3d_SignedLenPlaAndPos = .text:0x8032C0D0; // type:function size:0x84
+cM3d_CalcPla__FPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3Pf = .text:0x8032C160; // type:function size:0x10C
fn_8032C270 = .text:0x8032C270; // type:function size:0x298
fn_8032C510 = .text:0x8032C510; // type:function size:0x1D0
fn_8032C6E0 = .text:0x8032C6E0; // type:function size:0xD34
@@ -19029,10 +19029,10 @@ fn_80337EE0 = .text:0x80337EE0; // type:function size:0x8
fn_80337EF0 = .text:0x80337EF0; // type:function size:0x34
fn_80337F30 = .text:0x80337F30; // type:function size:0x4
fn_80337F40 = .text:0x80337F40; // type:function size:0xD8
-fn_80338020 = .text:0x80338020; // type:function size:0x5C
-fn_80338080 = .text:0x80338080; // type:function size:0x1C
-fn_803380A0 = .text:0x803380A0; // type:function size:0x18
-fn_803380C0 = .text:0x803380C0; // type:function size:0x18
+setC__8cM3dGCylFRC7mVec3_cff = .text:0x80338020; // type:function size:0x5C
+setC__8cM3dGCylFRC7mVec3_c = .text:0x80338080; // type:function size:0x1C
+setH__8cM3dGCylFf = .text:0x803380A0; // type:function size:0x18
+setR__8cM3dGCylFf = .text:0x803380C0; // type:function size:0x18
fn_803380E0 = .text:0x803380E0; // type:function size:0x4
fn_803380F0 = .text:0x803380F0; // type:function size:0x4
fn_80338100 = .text:0x80338100; // type:function size:0x6C
@@ -19045,11 +19045,11 @@ fn_80338430 = .text:0x80338430; // type:function size:0xE8
fn_80338520 = .text:0x80338520; // type:function size:0x58
fn_80338580 = .text:0x80338580; // type:function size:0xAC
fn_80338630 = .text:0x80338630; // type:function size:0x48
-fn_80338680 = .text:0x80338680; // type:function size:0xC
-fn_80338690 = .text:0x80338690; // type:function size:0x1C
-fn_803386B0 = .text:0x803386B0; // type:function size:0x44
-fn_80338700 = .text:0x80338700; // type:function size:0x18
-fn_80338720 = .text:0x80338720; // type:function size:0x30
+__ct__8cM3dGSphFv = .text:0x80338680; // type:function size:0xC
+setC__8cM3dGSphFRC7mVec3_c = .text:0x80338690; // type:function size:0x1C
+set__8cM3dGSphFRC7mVec3_cf = .text:0x803386B0; // type:function size:0x44
+setR__8cM3dGSphFf = .text:0x80338700; // type:function size:0x18
+setC__8cM3dGSphFfff = .text:0x80338720; // type:function size:0x30
fn_80338750 = .text:0x80338750; // type:function size:0x10
fn_80338760 = .text:0x80338760; // type:function size:0x10
fn_80338770 = .text:0x80338770; // type:function size:0x6C
@@ -19058,7 +19058,7 @@ fn_803387F0 = .text:0x803387F0; // type:function size:0xE0
fn_803388D0 = .text:0x803388D0; // type:function size:0x8
fn_803388E0 = .text:0x803388E0; // type:function size:0x60
fn_80338940 = .text:0x80338940; // type:function size:0xB4
-fn_80338A00 = .text:0x80338A00; // type:function size:0x144
+setMinMax__9cM3dGAabbFRC7mVec3_cRC7mVec3_c = .text:0x80338A00; // type:function size:0x144
fn_80338B50 = .text:0x80338B50; // type:function size:0xA0
fn_80338BF0 = .text:0x80338BF0; // type:function size:0x34
fn_80338C30 = .text:0x80338C30; // type:function size:0x10
@@ -19069,7 +19069,7 @@ fn_80338CC0 = .text:0x80338CC0; // type:function size:0x10
fn_80338CD0 = .text:0x80338CD0; // type:function size:0x4
fn_80338CE0 = .text:0x80338CE0; // type:function size:0x4
fn_80338CF0 = .text:0x80338CF0; // type:function size:0x64
-fn_80338D60 = .text:0x80338D60; // type:function size:0x78
+setWithYRot__9cM3dGAabbFRC7mVec3_cRC4mAng = .text:0x80338D60; // type:function size:0x78
fn_80338DE0 = .text:0x80338DE0; // type:function size:0xBC
fn_80338EA0 = .text:0x80338EA0; // type:function size:0x90
fn_80338F30 = .text:0x80338F30; // type:function size:0x1C
@@ -19693,38 +19693,38 @@ fn_80353920 = .text:0x80353920; // type:function size:0xDC
fn_80353A00 = .text:0x80353A00; // type:function size:0x128
fn_80353B30 = .text:0x80353B30; // type:function size:0x8
fn_80353B40 = .text:0x80353B40; // type:function size:0x4
-fn_80353B50 = .text:0x80353B50; // type:function size:0x4C
-fn_80353BA0 = .text:0x80353BA0; // type:function size:0x68
-fn_80353C10 = .text:0x80353C10; // type:function size:0x44
-fn_80353C60 = .text:0x80353C60; // type:function size:0x10
-fn_80353C70 = .text:0x80353C70; // type:function size:0x14
-fn_80353C90 = .text:0x80353C90; // type:function size:0x4C
-fn_80353CE0 = .text:0x80353CE0; // type:function size:0x68
-fn_80353D50 = .text:0x80353D50; // type:function size:0x4
-fn_80353D60 = .text:0x80353D60; // type:function size:0x10
-fn_80353D70 = .text:0x80353D70; // type:function size:0x4C
-fn_80353DC0 = .text:0x80353DC0; // type:function size:0x68
-fn_80353E30 = .text:0x80353E30; // type:function size:0x44
-fn_80353E80 = .text:0x80353E80; // type:function size:0x10
-fn_80353E90 = .text:0x80353E90; // type:function size:0x28
-fn_80353EC0 = .text:0x80353EC0; // type:function size:0x64
-fn_80353F30 = .text:0x80353F30; // type:function size:0x4C
-fn_80353F80 = .text:0x80353F80; // type:function size:0x68
-fn_80353FF0 = .text:0x80353FF0; // type:function size:0x44
-fn_80354040 = .text:0x80354040; // type:function size:0x28
-fn_80354070 = .text:0x80354070; // type:function size:0x64
-fn_803540E0 = .text:0x803540E0; // type:function size:0x20
-fn_80354100 = .text:0x80354100; // type:function size:0x10
-fn_80354110 = .text:0x80354110; // type:function size:0x54
-fn_80354170 = .text:0x80354170; // type:function size:0x68
-fn_803541E0 = .text:0x803541E0; // type:function size:0x44
-fn_80354230 = .text:0x80354230; // type:function size:0x10
-fn_80354240 = .text:0x80354240; // type:function size:0x8
-fn_80354250 = .text:0x80354250; // type:function size:0x8
-fn_80354260 = .text:0x80354260; // type:function size:0x8
-fn_80354270 = .text:0x80354270; // type:function size:0x8
-fn_80354280 = .text:0x80354280; // type:function size:0x8
-fn_80354290 = .text:0x80354290; // type:function size:0x8
+__ct__9dCcD_Unk1Fv = .text:0x80353B50; // type:function size:0x4C
+__dt__9dCcD_Unk1Fv = .text:0x80353BA0; // type:function size:0x68
+init__9dCcD_Unk1FRC11dCcD_SrcUnk = .text:0x80353C10; // type:function size:0x44
+dCcD_GObjInf_0x0C__9dCcD_Unk1Fv = .text:0x80353C60; // type:function size:0x10
+unknownCalc__9dCcD_Unk1Fv = .text:0x80353C70; // type:function size:0x14
+__ct__10dCcD_EmptyFv = .text:0x80353C90; // type:function size:0x4C
+__dt__10dCcD_EmptyFv = .text:0x80353CE0; // type:function size:0x68
+init__10dCcD_EmptyFRC13dCcD_SrcEmpty = .text:0x80353D50; // type:function size:0x4
+dCcD_GObjInf_0x0C__10dCcD_EmptyFv = .text:0x80353D60; // type:function size:0x10
+__ct__8dCcD_CylFv = .text:0x80353D70; // type:function size:0x4C
+__dt__8dCcD_CylFv = .text:0x80353DC0; // type:function size:0x68
+init__8dCcD_CylFRC11dCcD_SrcCyl = .text:0x80353E30; // type:function size:0x44
+dCcD_GObjInf_0x0C__8dCcD_CylFv = .text:0x80353E80; // type:function size:0x10
+setCenter__8dCcD_CylFRC7mVec3_c = .text:0x80353E90; // type:function size:0x28
+moveCenter__8dCcD_CylFRC7mVec3_c = .text:0x80353EC0; // type:function size:0x64
+__ct__8dCcD_SphFv = .text:0x80353F30; // type:function size:0x4C
+__dt__8dCcD_SphFv = .text:0x80353F80; // type:function size:0x68
+init__8dCcD_SphFRC11dCcD_SrcSph = .text:0x80353FF0; // type:function size:0x44
+setCenter__8dCcD_SphFRC7mVec3_c = .text:0x80354040; // type:function size:0x28
+moveCenter__8dCcD_SphFRC7mVec3_c = .text:0x80354070; // type:function size:0x64
+setCenterAndAtVec__8dCcD_SphFRC7mVec3_cRC7mVec3_c = .text:0x803540E0; // type:function size:0x20
+dCcD_GObjInf_0x0C__8dCcD_SphFv = .text:0x80354100; // type:function size:0x10
+__ct__9dCcD_AabbFv = .text:0x80354110; // type:function size:0x54
+__dt__9dCcD_AabbFv = .text:0x80354170; // type:function size:0x68
+init__9dCcD_AabbFRC12dCcD_SrcAabb = .text:0x803541E0; // type:function size:0x44
+dCcD_GObjInf_0x0C__9dCcD_AabbFv = .text:0x80354230; // type:function size:0x10
+@272@__dt__9dCcD_Unk1Fv = .text:0x80354240; // type:function size:0x8
+@272@__dt__10dCcD_EmptyFv = .text:0x80354250; // type:function size:0x8
+@272@__dt__8dCcD_CylFv = .text:0x80354260; // type:function size:0x8
+@272@__dt__8dCcD_SphFv = .text:0x80354270; // type:function size:0x8
+@316@__dt__9dCcD_AabbFv = .text:0x80354280; // type:function size:0x8
+@272@__dt__9dCcD_AabbFv = .text:0x80354290; // type:function size:0x8
fn_803542A0 = .text:0x803542A0; // type:function size:0x14
fn_803542C0 = .text:0x803542C0; // type:function size:0x54
fn_80354320 = .text:0x80354320; // type:function size:0x54
@@ -19746,7 +19746,7 @@ fn_80354990 = .text:0x80354990; // type:function size:0x504
fn_80354EA0 = .text:0x80354EA0; // type:function size:0xAC
fn_80354F50 = .text:0x80354F50; // type:function size:0x9C
fn_80354FF0 = .text:0x80354FF0; // type:function size:0x90
-fn_80355080 = .text:0x80355080; // type:function size:0x8
+getColliderManager__15ColliderManagerFv = .text:0x80355080; // type:function size:0x8
fn_80355090 = .text:0x80355090; // type:function size:0x428
fn_803554C0 = .text:0x803554C0; // type:function size:0x4C
fn_80355510 = .text:0x80355510; // type:function size:0x70
@@ -19772,7 +19772,7 @@ fn_80357600 = .text:0x80357600; // type:function size:0x1E8
fn_803577F0 = .text:0x803577F0; // type:function size:0x2D4
fn_80357AD0 = .text:0x80357AD0; // type:function size:0x1B4
fn_80357C90 = .text:0x80357C90; // type:function size:0x218
-fn_80357EB0 = .text:0x80357EB0; // type:function size:0x13C
+addCollider__15ColliderManagerFP12dCcD_GObjInf = .text:0x80357EB0; // type:function size:0x13C
fn_80357FF0 = .text:0x80357FF0; // type:function size:0x4
fn_80358000 = .text:0x80358000; // type:function size:0x1DC
fn_803581E0 = .text:0x803581E0; // type:function size:0x1D0
@@ -36068,19 +36068,19 @@ lbl_80547398 = .data:0x80547398; // type:object size:0x10
lbl_805473A8 = .data:0x805473A8; // type:object size:0x10
lbl_805473B8 = .data:0x805473B8; // type:object size:0x10
lbl_805473C8 = .data:0x805473C8; // type:object size:0x10
-lbl_805473D8 = .data:0x805473D8; // type:object size:0x5C
-lbl_80547434 = .data:0x80547434; // type:object size:0x5C
-lbl_80547490 = .data:0x80547490; // type:object size:0x68
-lbl_805474F8 = .data:0x805474F8; // type:object size:0x5C
-lbl_80547554 = .data:0x80547554; // type:object size:0x5C
-lbl_805475B0 = .data:0x805475B0; // type:object size:0x14
-lbl_805475C4 = .data:0x805475C4; // type:object size:0x5C
-lbl_80547620 = .data:0x80547620; // type:object size:0xC
-lbl_8054762C = .data:0x8054762C; // type:object size:0xC
-lbl_80547638 = .data:0x80547638; // type:object size:0xC
-lbl_80547644 = .data:0x80547644; // type:object size:0xC
-lbl_80547650 = .data:0x80547650; // type:object size:0xC
-lbl_8054765C = .data:0x8054765C; // type:object size:0xC
+__vt__15dCcD_ShapeAttr4 = .data:0x805473D8; // type:object size:0x5C
+__vt__15dCcD_ShapeAttr3 = .data:0x80547434; // type:object size:0x5C
+__vt__15dCcD_ShapeAttr5 = .data:0x80547490; // type:object size:0x68
+__vt__15dCcD_ShapeAttr2 = .data:0x805474F8; // type:object size:0x5C
+__vt__15dCcD_ShapeAttr1 = .data:0x80547554; // type:object size:0x5C
+__vt__12dCcD_GObjInf = .data:0x805475B0; // type:object size:0x14
+__vt__14dCcD_ShapeAttr = .data:0x805475C4; // type:object size:0x5C
+__vt__11dCcD_GObjCo = .data:0x80547620; // type:object size:0xC
+__vt__11dCcD_GObjTg = .data:0x8054762C; // type:object size:0xC
+__vt__11dCcD_GObjAt = .data:0x80547638; // type:object size:0xC
+__vt__22dCcD_GAtTgCoCommonBase = .data:0x80547644; // type:object size:0xC
+__vt__15dCcD_DivideArea = .data:0x80547650; // type:object size:0xC
+__vt__15dCcD_DivideInfo = .data:0x8054765C; // type:object size:0xC
lbl_80547668 = .data:0x80547668; // type:object size:0x10
lbl_80547678 = .data:0x80547678; // type:object size:0x10
lbl_80547688 = .data:0x80547688; // type:object size:0x10
@@ -36136,11 +36136,11 @@ lbl_80547F10 = .data:0x80547F10; // type:object size:0x108
lbl_80548018 = .data:0x80548018; // type:object size:0x108
lbl_80548120 = .data:0x80548120; // type:object size:0x118
lbl_80548238 = .data:0x80548238; // type:object size:0x108
-lbl_80548340 = .data:0x80548340; // type:object size:0x80
-lbl_805483C0 = .data:0x805483C0; // type:object size:0x70
-lbl_80548430 = .data:0x80548430; // type:object size:0x70
-lbl_805484A0 = .data:0x805484A0; // type:object size:0x70
-lbl_80548510 = .data:0x80548510; // type:object size:0x70
+__vt__9dCcD_Aabb = .data:0x80548340; // type:object size:0x7C
+__vt__8dCcD_Sph = .data:0x805483C0; // type:object size:0x70
+__vt__8dCcD_Cyl = .data:0x80548430; // type:object size:0x70
+__vt__10dCcD_Empty = .data:0x805484A0; // type:object size:0x70
+__vt__9dCcD_Unk1 = .data:0x80548510; // type:object size:0x70
lbl_80548580 = .data:0x80548580; // type:object size:0xC
lbl_8054858C = .data:0x8054858C; // type:object size:0xC
lbl_80548598 = .data:0x80548598; // type:object size:0x10
@@ -39885,7 +39885,7 @@ lbl_8057535C = .sbss:0x8057535C; // type:object size:0x4 data:4byte
lbl_80575360 = .sbss:0x80575360; // type:object size:0x4 data:4byte
lbl_80575364 = .sbss:0x80575364; // type:object size:0x4 data:4byte
lbl_80575368 = .sbss:0x80575368; // type:object size:0x8 data:4byte
-lbl_80575370 = .sbss:0x80575370; // type:object size:0x8 data:4byte
+sInstance__12dAttention_c = .sbss:0x80575370; // type:object size:0x8 data:4byte
lbl_80575378 = .sbss:0x80575378; // type:object size:0x4 data:4byte
lbl_8057537C = .sbss:0x8057537C; // type:object size:0xC data:byte
lbl_80575388 = .sbss:0x80575388; // type:object size:0x8 data:byte
@@ -40076,7 +40076,7 @@ lbl_80575787 = .sbss:0x80575787; // type:object size:0x1 data:byte
lbl_80575788 = .sbss:0x80575788; // type:object size:0x4 data:4byte
LINK__7dAcPy_c = .sbss:0x8057578C; // type:object size:0x4 data:4byte
lbl_80575790 = .sbss:0x80575790; // type:object size:0x4 data:4byte
-lbl_80575794 = .sbss:0x80575794; // type:object size:0x4 data:4byte
+sInstance__6ScGame = .sbss:0x80575794; // type:object size:0x4 data:4byte
lbl_80575798 = .sbss:0x80575798; // type:object size:0x4 data:4byte
lbl_8057579C = .sbss:0x8057579C; // type:object size:0x1 data:byte
lbl_8057579D = .sbss:0x8057579D; // type:object size:0x1 data:byte
@@ -45991,7 +45991,7 @@ lbl_8057CFA8 = .sdata2:0x8057CFA8; // type:object size:0x4 data:float
lbl_8057CFAC = .sdata2:0x8057CFAC; // type:object size:0x4 data:float
lbl_8057CFB0 = .sdata2:0x8057CFB0; // type:object size:0x4 data:float
lbl_8057CFB4 = .sdata2:0x8057CFB4; // type:object size:0x4 data:float
-lbl_8057CFB8 = .sdata2:0x8057CFB8; // type:object size:0x8 data:float
+lbl_8057CFB8 = .sdata2:0x8057CFB8; // type:object size:0x4 data:float
lbl_8057CFC0 = .sdata2:0x8057CFC0; // type:object size:0x4 data:float
lbl_8057CFC4 = .sdata2:0x8057CFC4; // type:object size:0x4 data:float
lbl_8057CFC8 = .sdata2:0x8057CFC8; // type:object size:0x8 data:float
@@ -49196,7 +49196,7 @@ lbl_805CED68 = .bss:0x805CED68; // type:object size:0x48
lbl_805CEDB0 = .bss:0x805CEDB0; // type:object size:0x1318
lbl_805D00C8 = .bss:0x805D00C8; // type:object size:0x30
lbl_805D00F8 = .bss:0x805D00F8; // type:object size:0x30
-lbl_805D0128 = .bss:0x805D0128; // type:object size:0x10 data:float
+m_virtual_center__14dCcD_ShapeAttr = .bss:0x805D0128; // type:object size:0xC data:float
lbl_805D0138 = .bss:0x805D0138; // type:object size:0x7C data:4byte
lbl_805D01B4 = .bss:0x805D01B4; // type:object size:0x14 data:4byte
lbl_805D01C8 = .bss:0x805D01C8; // type:object size:0x10
diff --git a/configure.py b/configure.py
index 1b98f6cc..bddfee25 100644
--- a/configure.py
+++ b/configure.py
@@ -344,6 +344,11 @@ config.libs = [
Object(Matching, "toBeSorted/counters/slingshot_seed_counter.cpp"),
Object(Matching, "toBeSorted/counters/key_piece_counter.cpp"),
Object(Matching, "toBeSorted/counters/extra_wallet_counter.cpp"),
+ Object(NonMatching, "toBeSorted/cc/d_cc_d.cpp"),
+ Object(NonMatching, "toBeSorted/cc/d_cc_m3d.cpp"),
+ Object(NonMatching, "toBeSorted/cc/d_cc_m3d_g_cyl.cpp"),
+ Object(NonMatching, "toBeSorted/cc/d_cc_m3d_g_sph.cpp"),
+ Object(Matching, "toBeSorted/cc/d_cc_shape_colliders.cpp"),
Object(NonMatching, "toBeSorted/file_manager.cpp"),
Object(NonMatching, "toBeSorted/save_manager.cpp"),
Object(Matching, "DynamicLink.cpp"),
@@ -1165,7 +1170,7 @@ config.libs = [
Rel(Matching, "d_a_obj_smoke", "REL/d/a/obj/d_a_obj_smoke.cpp"),
Rel(NonMatching, "d_a_obj_soil", "REL/d/a/obj/d_a_obj_soil.cpp"),
Rel(NonMatching, "d_a_obj_spider_line", "REL/d/a/obj/d_a_obj_spider_line.cpp"),
- Rel(NonMatching, "d_a_obj_spike", "REL/d/a/obj/d_a_obj_spike.cpp"),
+ Rel(Matching, "d_a_obj_spike", "REL/d/a/obj/d_a_obj_spike.cpp"),
Rel(NonMatching, "d_a_obj_stage_cover", "REL/d/a/obj/d_a_obj_stage_cover.cpp"),
Rel(NonMatching, "d_a_obj_stage_crack", "REL/d/a/obj/d_a_obj_stage_crack.cpp"),
Rel(NonMatching, "d_a_obj_stage_debris", "REL/d/a/obj/d_a_obj_stage_debris.cpp"),
@@ -1216,7 +1221,7 @@ config.libs = [
Rel(NonMatching, "d_a_obj_time_door_before", "REL/d/a/obj/d_a_obj_time_door_before.cpp"),
Rel(NonMatching, "d_a_obj_time_stage_bg", "REL/d/a/obj/d_a_obj_time_stage_bg.cpp"),
Rel(NonMatching, "d_a_obj_time_stone", "REL/d/a/obj/d_a_obj_time_stone.cpp"),
- Rel(NonMatching, "d_a_obj_toD3_stone_figure", "REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp"),
+ Rel(Matching, "d_a_obj_toD3_stone_figure", "REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp"),
Rel(NonMatching, "d_a_obj_toge_trap", "REL/d/a/obj/d_a_obj_toge_trap.cpp"),
Rel(NonMatching, "d_a_obj_tornado", "REL/d/a/obj/d_a_obj_tornado.cpp"),
Rel(NonMatching, "d_a_obj_tower_bomb", "REL/d/a/obj/d_a_obj_tower_bomb.cpp"),
@@ -1227,7 +1232,7 @@ config.libs = [
Rel(NonMatching, "d_a_obj_trap_rock_1", "REL/d/a/obj/d_a_obj_trap_rock_1.cpp"),
Rel(NonMatching, "d_a_obj_treasure_island", "REL/d/a/obj/d_a_obj_treasure_island.cpp"),
Rel(NonMatching, "d_a_obj_treasure_island_b", "REL/d/a/obj/d_a_obj_treasure_island_b.cpp"),
- Rel(NonMatching, "d_a_obj_triforce", "REL/d/a/obj/d_a_obj_triforce.cpp"),
+ Rel(Matching, "d_a_obj_triforce", "REL/d/a/obj/d_a_obj_triforce.cpp"),
Rel(NonMatching, "d_a_obj_trolley", "REL/d/a/obj/d_a_obj_trolley.cpp"),
Rel(NonMatching, "d_a_obj_trolley_shutter", "REL/d/a/obj/d_a_obj_trolley_shutter.cpp"),
Rel(NonMatching, "d_a_obj_truck", "REL/d/a/obj/d_a_obj_truck.cpp"),
diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h
index a5a8666c..09467d6b 100644
--- a/include/d/a/obj/d_a_obj_base.h
+++ b/include/d/a/obj/d_a_obj_base.h
@@ -2,11 +2,14 @@
#define D_A_OBJ_BASE_H
#include "d/a/d_a_base.h"
+#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m3d/m_smdl.h"
#include "m/m3d/m_shadow.h"
+#include "m/m_vec.h"
#include "m/types_m.h"
#include "nw4r/g3d/g3d_resfile.h"
+#include "toBeSorted/cc/d_cc_d.h"
// Size: 0xA8
struct ActorCarryStruct {
@@ -21,7 +24,7 @@ struct ActorCarryStruct {
/* 0x58 */ mMtx_c field_0x58;
/* 0x88 */ s32 isCarried;
/* 0x8C */ u8 field_0x8C[0x10]; // mQuat_c
- /* 0x9C */ void *dtor; // ???
+ /* 0x9C */ void *dtor; // ???
/* 0xA0 */ u32 field_0xA0;
/* 0xA4 */ u32 field_0xA4;
@@ -57,11 +60,12 @@ public:
/* 0x1A8 */ f32 field_0x1A8;
/* 0x1AC */ u32 mObjectActorFlags;
- u8 unk_0x1B0[0x1E8 - 0x1B0];
+ u8 unk_0x1B0[0x1C0 - 0x1B0];
- /* 0x1E8 */ mVec3_c posIncrements;
+ /* 0x1C0 */ UnkCCDStruct mCCdStruct;
- u8 unk_0x1F4[0x210 - 0x1F4];
+ mVec3_c mStartingPos;
+ mAng3_c mStartingRot;
/* 0x210 */ ActorCarryStruct mActorCarryInfo;
@@ -136,7 +140,7 @@ protected:
// Actors' createHeap functions often have patterns that can be matched with this macro
#define TRY_CREATE(thing) do { bool result = (thing); if (!result) return result; } while (0)
-
+// Use this in actors' createHeap functions
#define CREATE_ALLOCATOR(className) do { if (!initAllocatorWork1Heap(-1, #className "::m_allocator", 0x20)) { return FAILED; } } while (0)
#endif
diff --git a/include/d/a/obj/d_a_obj_spike.h b/include/d/a/obj/d_a_obj_spike.h
new file mode 100644
index 00000000..779e8501
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_spike.h
@@ -0,0 +1,38 @@
+#ifndef D_A_O_SPIKE_H
+#define D_A_O_SPIKE_H
+
+#include <d/a/obj/d_a_obj_base.h>
+#include <m/m3d/m_smdl.h>
+#include <m/m_vec.h>
+#include <nw4r/g3d/g3d_resfile.h>
+#include <s/s_State.hpp>
+#include <s/s_StateID.hpp>
+#include <toBeSorted/cc/d_cc_shape_colliders.h>
+
+
+class dAcOspike_c : public dAcObjBase_c {
+public:
+ dAcOspike_c() : mStateMgr(*this, sStateID::null) {}
+ virtual ~dAcOspike_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+ STATE_FUNC_DECLARE(dAcOspike_c, Wait);
+
+ static const mVec3_c sVec1;
+ static const mVec3_c sVec2;
+
+private:
+ static dCcD_SrcAabb sCcSrc;
+
+ nw4r::g3d::ResFile mResFile;
+ m3d::smdl_c mMdl;
+ dCcD_Aabb mCollision;
+
+ STATE_MGR_DECLARE(dAcOspike_c);
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_toD3_stone_figure.h b/include/d/a/obj/d_a_obj_toD3_stone_figure.h
new file mode 100644
index 00000000..efbeab47
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_toD3_stone_figure.h
@@ -0,0 +1,47 @@
+#ifndef D_A_O_TTOD3_STONE_FIGURE_H
+#define D_A_O_TTOD3_STONE_FIGURE_H
+
+#include <c/c_math.h>
+#include <d/a/obj/d_a_obj_base.h>
+#include <m/m3d/m_smdl.h>
+#include <nw4r/g3d/g3d_resfile.h>
+#include <s/s_State.hpp>
+#include <s/s_StateMgr.hpp>
+#include <toBeSorted/cc/d_cc_shape_colliders.h>
+
+
+class dAcOtoD3StoneFigure_c : public dAcObjBase_c {
+public:
+ dAcOtoD3StoneFigure_c() : mStateMgr(*this, sStateID::null) {}
+ virtual ~dAcOtoD3StoneFigure_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+ virtual void doInteraction(s32) override;
+
+ STATE_FUNC_DECLARE(dAcOtoD3StoneFigure_c, OneEye);
+ STATE_FUNC_DECLARE(dAcOtoD3StoneFigure_c, Eyes);
+
+private:
+ f32 getYPos() {
+ return position.y + sHeight;
+ }
+
+ const char *getModelName() const;
+ bool isStoneOfTrialsPlaced() const;
+ bool hasStoneOfTrials() const;
+ static f32 sRadius;
+ static f32 sHeight;
+ static dCcD_SrcCyl sCcSrc;
+
+ nw4r::g3d::ResFile mResFile;
+ m3d::smdl_c mMdl;
+ STATE_MGR_DECLARE(dAcOtoD3StoneFigure_c);
+ dCcD_Cyl mCollision;
+ s8 mExitId;
+ bool mIsSkyKeepAlreadyOpen;
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_triforce.h b/include/d/a/obj/d_a_obj_triforce.h
new file mode 100644
index 00000000..2b036536
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_triforce.h
@@ -0,0 +1,43 @@
+#ifndef D_A_O_TRIFORCE_H
+#define D_A_O_TRIFORCE_H
+
+#include <c/c_math.h>
+#include <d/a/obj/d_a_obj_base.h>
+#include <m/m3d/m_anmtexsrt.h>
+#include <m/m3d/m_smdl.h>
+#include <m/m_angle.h>
+#include <nw4r/g3d/g3d_resfile.h>
+#include <toBeSorted/cc/d_cc_shape_colliders.h>
+#include <toBeSorted/effects_struct.h>
+
+class dAcOtriforce_c : public dAcObjBase_c {
+public:
+ dAcOtriforce_c() {}
+ virtual ~dAcOtriforce_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+private:
+ f32 getBounceScalar() const {
+ int zero = 0;
+ return (23.0f + zero + -3.0f);
+ }
+
+ static dCcD_SrcSph sCcSrc;
+
+ static const f32 sScale;
+ static const f32 sAmpNeg;
+ static const u32 sStartingOffsetRange;
+
+ nw4r::g3d::ResFile mResFile;
+ m3d::smdl_c mMdl;
+ dCcD_Sph mCollision;
+ EffectsStruct mEffects;
+ m3d::anmTexSrt_c mAnm;
+ mAng mStartingOffset;
+};
+
+#endif
diff --git a/include/d/d_base.h b/include/d/d_base.h
index 6f753108..c57ea39a 100644
--- a/include/d/d_base.h
+++ b/include/d/d_base.h
@@ -20,7 +20,7 @@ public:
public:
/* 80050980 */ static void resetFlags();
- /* 800509a0 */ static bool isActorPlayer(dBase_c &);
+ /* 800509a0 */ bool isActorPlayer();
/* 800509e0 */ static void initLoader();
/* 80050a00 */ static dBase_c *createBase(ProfileName, dBase_c *, u32, u8);
/* 80050a10 */ static dBase_c *createRoot(ProfileName, u32, u8);
diff --git a/include/m/m_angle.h b/include/m/m_angle.h
index 514fa6d0..2b0c98c9 100644
--- a/include/m/m_angle.h
+++ b/include/m/m_angle.h
@@ -2,6 +2,7 @@
#define M_ANGLE_H
#include <common.h>
+#include <nw4r/math/math_triangular.h>
struct mAng {
mAng() {}
@@ -12,6 +13,14 @@ struct mAng {
}
s32 step(s16 target, s32 steps, s16 max, s16 min);
+ inline f32 sin() const {
+ return nw4r::math::SinIdx(*this);
+ }
+
+ inline f32 cos() const {
+ return nw4r::math::CosIdx(*this);
+ }
+
s16 mVal;
};
diff --git a/include/m/m_vec.h b/include/m/m_vec.h
index f27b498c..44be26c3 100644
--- a/include/m/m_vec.h
+++ b/include/m/m_vec.h
@@ -61,6 +61,11 @@ public:
return (Vec *)&x;
}
+ /// @brief Vec cast operator.
+ operator Vec() const {
+ return *(Vec *)&x;
+ }
+
operator EGG::Vector3f *() {
return (EGG::Vector3f *)&x;
}
diff --git a/include/nw4r/math/math_triangular.h b/include/nw4r/math/math_triangular.h
index ff450d87..c79b0915 100644
--- a/include/nw4r/math/math_triangular.h
+++ b/include/nw4r/math/math_triangular.h
@@ -1,6 +1,7 @@
#ifndef NW4R_MATH_TRIANGULAR_H
#define NW4R_MATH_TRIANGULAR_H
#include <MSL_C/math.h>
+#include <nw4r/math/math_arithmetic.h>
#include <nw4r/types_nw4r.h>
#define NW4R_MATH_PI M_PI
diff --git a/include/rvl/MTX/mtxvec.h b/include/rvl/MTX/mtxvec.h
index ff00123f..b744d6f4 100644
--- a/include/rvl/MTX/mtxvec.h
+++ b/include/rvl/MTX/mtxvec.h
@@ -7,6 +7,7 @@ extern "C" {
#endif
void PSMTXMultVec(const Mtx, const Vec *, Vec *);
+void PSMTXMultVecSR(const Mtx, const Vec *, Vec *);
#ifdef __cplusplus
}
diff --git a/include/rvl/MTX/vec.h b/include/rvl/MTX/vec.h
index cfc4410c..bed89af0 100644
--- a/include/rvl/MTX/vec.h
+++ b/include/rvl/MTX/vec.h
@@ -7,6 +7,7 @@ extern "C" {
#endif
void PSVECAdd(const Vec *, const Vec *, Vec *);
+void PSVECSubtract(const Vec *, const Vec *, Vec *);
void PSVECScale(const Vec *, Vec *, f32);
void PSVECNormalize(const Vec *, Vec *);
f32 PSVECMag(const Vec *);
diff --git a/include/toBeSorted/attention.h b/include/toBeSorted/attention.h
new file mode 100644
index 00000000..5c09489f
--- /dev/null
+++ b/include/toBeSorted/attention.h
@@ -0,0 +1,16 @@
+#ifndef ATTENTION_H
+#define ATTENTION_H
+
+#include <common.h>
+
+class dAcBase_c;
+
+class dAttention_c {
+public:
+ static dAttention_c *sInstance;
+
+ void addTarget(dAcBase_c *target, s32, f32, f32, f32);
+ void addTarget(dAcBase_c *target, s32, f32, f32, f32, f32);
+};
+
+#endif
diff --git a/include/toBeSorted/cc/d_cc_d.h b/include/toBeSorted/cc/d_cc_d.h
new file mode 100644
index 00000000..be1d8452
--- /dev/null
+++ b/include/toBeSorted/cc/d_cc_d.h
@@ -0,0 +1,519 @@
+#ifndef TOSORT_D_CC_D_H
+#define TOSORT_D_CC_D_H
+
+#include <d/a/d_a_base.h>
+#include <f/f_base_id.h>
+#include <m/m_mtx.h>
+#include <m/m_vec.h>
+#include <nw4r/math/math_types.h>
+#include <toBeSorted/cc/d_cc_m3d_g_cyl.h>
+#include <toBeSorted/cc/d_cc_m3d_g_sph.h>
+
+// Largely modeled off
+// https://github.com/zeldaret/tp/blob/main/include/SSystem/SComponent/c_cc_d.h
+// https://github.com/zeldaret/tp/blob/main/include/d/cc/d_cc_d.h
+// - the SComponent/d split seems to not exist anymore in SS, so we'll just
+// go with the d names for this merger of the two
+
+class dCcD_DivideInfo {
+private:
+ /* 0x00 */ u32 mXDivInfo;
+ /* 0x04 */ u32 mYDivInfo;
+ /* 0x08 */ u32 mZDivInfo;
+ /* 0x0C vtable */
+public:
+ /* 80328120 */ dCcD_DivideInfo();
+ /* 80328130 */ virtual ~dCcD_DivideInfo();
+ // void Set(u32, u32, u32);
+ // bool Chk(dCcD_DivideInfo const &) const;
+}; // Size = 0x10
+
+// This Aabb type really could be anything
+struct Aabb {
+ mVec3_c mMin;
+ mVec3_c mMax;
+
+ void Set(mVec3_c const &a, mVec3_c const &b) {
+ mMin = a;
+ mMax = b;
+ }
+}; // Size = 0x18
+
+class dCcD_DivideArea : public Aabb {
+private:
+ /* 0x18 */ bool mXDiffIsZero;
+ /* 0x1C */ f32 mScaledXDiff;
+ /* 0x20 */ f32 mInvScaledXDiff;
+ /* 0x24 */ bool mYDiffIsZero;
+ /* 0x28 */ f32 mScaledYDiff;
+ /* 0x2C */ f32 mInvScaledYDiff;
+ /* 0x30 */ bool mZDiffIsZero;
+ /* 0x34 */ f32 mScaledZDiff;
+ /* 0x38 */ f32 mInvScaledZDiff;
+
+public:
+ /* vt at 0x3C */
+ dCcD_DivideArea();
+ virtual ~dCcD_DivideArea();
+ /* 803281c0 */ void SetArea(Aabb const &);
+ /* 803282d0 */ void CalcDivideInfo(dCcD_DivideInfo *, Aabb const &, u32);
+ /* 80328470 */ void CalcDivideInfoOverArea(dCcD_DivideInfo *, Aabb const &);
+}; // Size = 0x40
+
+class dCcD_GAtTgCoCommonBase {
+protected:
+ /* 0x00 */ u32 field_0x00;
+ /* 0x04 */ s8 mEffCounter;
+ /* 0x08 */ dAcRef_c<dAcBase_c> mActor;
+ /* 0x14 */ u32 field_0x14;
+
+public:
+ dCcD_GAtTgCoCommonBase();
+ virtual ~dCcD_GAtTgCoCommonBase();
+
+ void resetEffCounter() {
+ mEffCounter = 0;
+ }
+ void resetField0x14() {
+ field_0x14 = 0;
+ }
+ void decreaseCount();
+ void unlink();
+ dAcBase_c *getActor();
+ void setActor(dAcBase_c *);
+};
+
+struct dCcD_SrcGAtTgCoCommonBase {
+ /* 0x0 */ u32 mGFlag;
+}; // Size: 0x4
+
+struct dCcD_SrcGObjAt {
+ /* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
+ /* 0x04 */ u32 field_0x04;
+ /* 0x08 */ u32 field_0x08;
+ /* 0x0C */ u8 mSe; // Sound Effect ID
+ /* 0x0D */ u8 mHitMark; // Hit Mark particle ID
+ /* 0x0E */ u8 mSpl;
+ /* 0x0F */ u8 mMtrl;
+ /* 0x10 */ u16 field_0x10;
+ /* 0x12 */ s16 field_0x12;
+};
+
+struct dCcD_SrcGObjTg {
+ /* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
+ /* 0x04 */ u32 field_0x04;
+ /* 0x08 */ u32 field_0x08;
+ /* 0x0C */ u16 field_0x0C;
+ /* 0x0E */ u16 field_0x0E;
+};
+
+struct dCcD_SrcGObjCo {
+ /* 0x0 */ dCcD_SrcGAtTgCoCommonBase mBase;
+};
+
+struct dCcD_SrcGObjInf {
+ /* 0x00 */ dCcD_SrcGObjAt mGObjAt;
+ /* 0x14 */ dCcD_SrcGObjTg mGObjTg;
+ /* 0x24 */ dCcD_SrcGObjCo mGObjCo;
+};
+
+class dCcD_GObjAt : public dCcD_GAtTgCoCommonBase {
+private:
+ /* 0x1C */ dCcD_SrcGObjAt mSrc;
+ /* 0x30 */ mVec3_c mHitPos;
+ /* 0x3C */ mVec3_c mVec;
+ /* 0x48 */ mVec3_c mRVec;
+ /* 0x54 */ u8 field_0x4C[0x58 - 0x54];
+ /* 0x58 */ u32 field_0x58;
+
+public:
+ dCcD_GObjAt();
+ virtual ~dCcD_GObjAt();
+
+ void clearFlag() {
+ mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
+ }
+ mVec3_c *GetHitPosP() {
+ return &mHitPos;
+ }
+ void SetSomeVec(const mVec3_c &p) {
+ mVec = p;
+ }
+ mVec3_c *GetSomeVec() {
+ return &mVec;
+ }
+ void init(const dCcD_SrcGObjAt *);
+ void setSomeAtFlags(u32 flags);
+ void adjustHitPos(f32 dx, f32 dz);
+};
+
+class dCcD_GObjTg : public dCcD_GAtTgCoCommonBase {
+private:
+ /* 0x1C */ dCcD_SrcGObjTg mSrc;
+ /* 0x2C */ u8 field_0x2C[0x38 - 0x2C];
+ /* 0x38 */ mVec3_c mHitPos;
+ /* 0x44 */ u32 field_0x44;
+ /* 0x48 */ u16 field_0x48;
+ /* 0x4A */ u8 field_0x4A;
+ /* 0x4B */ u8 field_0x4B;
+ /* 0x4C */ u32 field_0x4C;
+ /* 0x50 */ u32 field_0x50;
+ /* 0x54 */ u32 field_0x54;
+ /* 0x58 */ u8 field_0x58[0x6C - 0x58];
+ /* 0x6C */ mVec3_c field_0x6C;
+ /* 0x78 */ u32 field_0x78;
+
+public:
+ dCcD_GObjTg();
+ virtual ~dCcD_GObjTg();
+ void clearFlag() {
+ mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
+ }
+ void setFlag(u32 f) {
+ mSrc.field_0x04 |= f;
+ }
+ void set0x4C(u32 val) {
+ field_0x4C = val;
+ }
+ void init(const dCcD_SrcGObjTg *);
+ void adjustHitPos(f32 dx, f32 dz);
+};
+
+class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase {
+private:
+ /* 0x1C */ dCcD_SrcGObjCo mSrc;
+ /* 0x20 */ u32 field_0x20;
+ /* 0x24 */ u16 field_0x24;
+ /* 0x28 */ u32 field_0x28;
+
+public:
+ dCcD_GObjCo();
+ virtual ~dCcD_GObjCo();
+ void clearFlag() {
+ mSrc.mBase.mGFlag = mSrc.mBase.mGFlag & 0xFFFFFFFE;
+ }
+ void setFlag(u32 f) {
+ mSrc.mBase.mGFlag |= f;
+ }
+ void init(const dCcD_SrcGObjCo *);
+ void setSomeAtFlags(u32 flags);
+ void adjustHitPos(f32 dx, f32 dz);
+
+ void SetGFlag(u32 flag) {
+ mSrc.mBase.mGFlag = flag;
+ }
+};
+
+class dCcD_ShapeAttr {
+public:
+ /* 0x00 */ u8 UNK_0x00[0x18 - 0x00];
+ /* 0x18 */ dCcD_DivideInfo field_0x18;
+
+ dCcD_ShapeAttr();
+
+ /* vt 0x08 */ virtual ~dCcD_ShapeAttr();
+ /* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C();
+ /* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10();
+ /* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() = 0;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() = 0;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() = 0;
+ /* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() = 0;
+ /* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() = 0;
+ /* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28(); // 0x80329110
+ /* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() = 0;
+ /* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() = 0;
+ /* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() = 0;
+ /* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() = 0;
+ /* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() = 0;
+ /* vt 0x40 */ virtual mVec3_c *getVirtualCenter(); // 0x80329120
+ /* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() = 0;
+ /* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() = 0;
+ /* vt 0x4C */ virtual void getShapeAccess(); // 0x80329090
+ /* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() = 0;
+ /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54(); // 0x803290F0
+ /* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() = 0;
+
+ static mVec3_c m_virtual_center;
+};
+
+// This is in dAcObjBase_c @ 0x1c0
+struct UnkCCDStruct {
+ u32 field_0x00;
+ u32 field_0x04;
+ u32 field_0x08;
+ u32 field_0x0C;
+ /* 0x10 */ mVec3_c field_0x10;
+ /* 0x1C */ mVec3_c field_0x1C;
+ /* 0x28 */ mVec3_c posIncrements;
+ dAcBase_c *field_0x34;
+ s32 field_0x38;
+
+ UnkCCDStruct(dAcBase_c *);
+
+ void postExecute();
+ void reset();
+ fBaseID_e getId();
+ u32 getSomething(int);
+
+ void setField0x38ToMagicValue() {
+ field_0x38 = 0xD;
+ }
+};
+
+// Object Info
+class dCcD_GObjInf {
+protected:
+ /* 0x000 */ dCcD_GObjAt mGObjAt;
+ /* 0x05C */ dCcD_GObjTg mGObjTg;
+ /* 0x0D8 */ dCcD_GObjCo mGObjCo;
+ /* 0x104 */ UnkCCDStruct *field_0x104;
+ /* 0x108 */ u32 field_0x108;
+
+public:
+ dCcD_GObjInf();
+ /* vt 0x08 */ virtual ~dCcD_GObjInf();
+ /* vt 0x0C */ virtual void *dCcD_GObjInf_0x0C() = 0;
+ /* vt 0x10 */ virtual void dCcD_GObjInf_0x10(); // 0x80328d30
+
+ void clear();
+ void init(const dCcD_SrcGObjInf &src);
+ static bool weirdConditionCheck(dAcBase_c *ac, u32);
+
+ inline void initUnk(UnkCCDStruct &src) {
+ field_0x104 = &src;
+ }
+
+ inline void clearCoFlag() {
+ mGObjCo.clearFlag();
+ }
+
+ void setTgCoFlag(u32 f) {
+ mGObjTg.setFlag(f);
+ mGObjCo.setFlag(f);
+ }
+
+ inline void setSomeDefendValue(u32 val) {
+ mGObjTg.set0x4C(val);
+ }
+
+ inline void setAtVec(const mVec3_c &p) {
+ mGObjAt.SetSomeVec(p);
+ }
+
+ inline mVec3_c *getAtVec() {
+ return mGObjAt.GetSomeVec();
+ }
+
+ void ResetAtHit();
+ void ResetTgHit();
+ void ResetCoHit();
+
+ mVec3_c *GetAtHitPosP();
+ mVec3_c *GetAtHitPosP2();
+
+ dAcBase_c *GetAtActor();
+ dAcBase_c *GetTgActor();
+ dAcBase_c *GetCoActor();
+
+ void adjustHitPos(f32 dx, f32 dz);
+};
+
+struct dCcD_SrcCylAttr {
+public:
+ /* 0x00 */ f32 mRadius;
+ /* 0x04 */ f32 mHeight;
+}; // Size = 0x8
+
+struct dCcD_SrcSphAttr {
+ /* 0x00 */ f32 mRadius;
+}; // Size = 0x4
+
+class cM3dGAabb {
+public:
+ /* 0x00 */ mMtx_c mMtx1;
+ /* 0x30 */ mMtx_c mMtx2;
+ /* 0x60 */ mVec3_c mMin;
+ /* 0x6C */ mVec3_c mMax;
+ /* 0x78 */ u8 field_0x78[0xB8 - 0x78];
+ /* 0xB8 */ mVec3_c mVirtualCenter;
+ /* 0xC4 */ u32 field_0xC4;
+
+ cM3dGAabb();
+ /* vt 0xC8 */
+ virtual ~cM3dGAabb() {}
+
+ void setWithYRot(const mVec3_c &translation, const mAng &rot);
+ void setMinMax(const mVec3_c &min, const mVec3_c &max);
+};
+
+struct dCcD_SrcAabbAttr {
+ /* 0x00 */ f32 minX, minY, minZ, maxX, maxY, maxZ;
+}; // Size = 0x18
+
+struct dCcD_SrcUnk1Attr {};
+
+class cM3dGUnk1 {
+public:
+ /* 0x00 */ mVec3_c field_0x00;
+ /* 0x0C */ mVec3_c field_0x0C;
+ /* 0x18 */ f32 field_0x18;
+ /* 0x1C */ f32 field_0x1C;
+ /* 0x20 */ u8 field_0x20;
+ /* 0x24 */ u32 field_0x24;
+ /* 0x28 */ mVec3_c mVirtualCenter;
+ cM3dGUnk1();
+};
+
+class cM3dGUnk2 {
+public:
+};
+
+// Unk1
+class dCcD_ShapeAttr1 : public dCcD_ShapeAttr, public cM3dGUnk1 {
+public:
+ dCcD_ShapeAttr1();
+
+ void init(const dCcD_SrcUnk1Attr &);
+
+ /* vt 0x08 */ virtual ~dCcD_ShapeAttr1();
+ /* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
+ /* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
+ /* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
+ /* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
+ /* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
+ /* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
+ /* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
+ /* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
+ /* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
+ /* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
+ /* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
+ /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
+ /* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
+ /* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
+ /* vt 0x4C */ virtual void getShapeAccess() override;
+ /* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
+ // /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
+ /* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
+};
+
+// Unk1
+class dCcD_ShapeAttr2 : public dCcD_ShapeAttr, public cM3dGUnk2 {
+public:
+ dCcD_ShapeAttr2();
+
+ /* vt 0x08 */ virtual ~dCcD_ShapeAttr2();
+ /* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
+ /* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
+ /* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
+ /* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
+ /* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
+ /* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
+ /* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
+ /* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
+ /* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
+ /* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
+ /* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
+ // /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
+ /* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
+ /* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
+ /* vt 0x4C */ virtual void getShapeAccess() override;
+ /* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
+ // /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
+ /* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
+};
+
+// Aabb
+class dCcD_ShapeAttr5 : public dCcD_ShapeAttr, public cM3dGAabb {
+public:
+ dCcD_ShapeAttr5();
+
+ void init(const dCcD_SrcAabbAttr &);
+
+ /* vt 0x08 */ virtual ~dCcD_ShapeAttr5();
+ /* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
+ /* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
+ /* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
+ /* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
+ /* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
+ /* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
+ /* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
+ /* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
+ /* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
+ /* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
+ /* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
+ /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
+ /* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
+ /* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
+ // /* vt 0x4C */ virtual void getShapeAccess() override;
+ /* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
+ // /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
+ /* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
+};
+
+// Cyl
+class dCcD_ShapeAttr3 : public dCcD_ShapeAttr, public cM3dGCyl {
+public:
+ dCcD_ShapeAttr3();
+
+ void init(const dCcD_SrcCylAttr &);
+
+ /* vt 0x08 */ virtual ~dCcD_ShapeAttr3();
+ /* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
+ /* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
+ /* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
+ /* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
+ /* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
+ /* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
+ /* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
+ /* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
+ /* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
+ /* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
+ /* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
+ /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
+ /* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
+ /* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
+ /* vt 0x4C */ virtual void getShapeAccess() override;
+ /* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
+ // /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
+ /* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
+};
+
+// Sph
+class dCcD_ShapeAttr4 : public dCcD_ShapeAttr, public cM3dGSph {
+public:
+ dCcD_ShapeAttr4();
+
+ void init(const dCcD_SrcSphAttr &);
+
+ /* vt 0x08 */ virtual ~dCcD_ShapeAttr4();
+ /* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
+ /* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
+ /* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
+ /* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
+ /* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
+ /* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
+ /* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
+ /* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
+ /* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
+ /* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
+ /* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
+ /* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
+ /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
+ /* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
+ /* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
+ /* vt 0x4C */ virtual void getShapeAccess() override;
+ /* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
+ /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
+ /* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
+};
+
+#endif
diff --git a/include/toBeSorted/cc/d_cc_m3d.h b/include/toBeSorted/cc/d_cc_m3d.h
new file mode 100644
index 00000000..84459238
--- /dev/null
+++ b/include/toBeSorted/cc/d_cc_m3d.h
@@ -0,0 +1,7 @@
+#ifndef TOSORT_D_CC_M3D_H
+#define TOSORT_D_CC_M3D_H
+
+
+
+
+#endif
diff --git a/include/toBeSorted/cc/d_cc_m3d_g_cyl.h b/include/toBeSorted/cc/d_cc_m3d_g_cyl.h
new file mode 100644
index 00000000..ad23d4a0
--- /dev/null
+++ b/include/toBeSorted/cc/d_cc_m3d_g_cyl.h
@@ -0,0 +1,24 @@
+#ifndef TO_SORT_D_CC_M3D_G_CYL_H
+#define TO_SORT_D_CC_M3D_G_CYL_H
+
+#include <m/m_vec.h>
+
+class cM3dGCyl {
+public:
+ /* 0x00 */ mVec3_c mCenter;
+ /* 0x0C */ f32 mRadius;
+ /* 0x10 */ f32 mHeight;
+ cM3dGCyl() {}
+
+ void setC(const mVec3_c &, f32 radius, f32 height);
+ void setC(const mVec3_c &);
+ void setH(f32);
+ void setR(f32);
+
+ const mVec3_c &GetC() const {
+ return mCenter;
+ }
+
+}; // Size = 0x14
+
+#endif
diff --git a/include/toBeSorted/cc/d_cc_m3d_g_sph.h b/include/toBeSorted/cc/d_cc_m3d_g_sph.h
new file mode 100644
index 00000000..812f63b7
--- /dev/null
+++ b/include/toBeSorted/cc/d_cc_m3d_g_sph.h
@@ -0,0 +1,23 @@
+#ifndef TO_SORT_D_CC_M3D_G_SPH_H
+#define TO_SORT_D_CC_M3D_G_SPH_H
+
+#include <m/m_vec.h>
+
+class cM3dGSph {
+public:
+ /* 0x00 */ mVec3_c mCenter;
+ /* 0x0C */ f32 mRadius;
+ /* 0x10 */ f32 field_0x10;
+ cM3dGSph();
+
+ void setR(f32);
+ void set(const mVec3_c &, f32);
+ void setC(const mVec3_c &);
+ void setC(f32, f32, f32);
+ const mVec3_c &GetC() const {
+ return mCenter;
+ }
+
+}; // Size = 0x14
+
+#endif
diff --git a/include/toBeSorted/cc/d_cc_mgr.h b/include/toBeSorted/cc/d_cc_mgr.h
new file mode 100644
index 00000000..25686613
--- /dev/null
+++ b/include/toBeSorted/cc/d_cc_mgr.h
@@ -0,0 +1,13 @@
+#ifndef TOSORT_D_CC_MGR_H
+#define TOSORT_D_CC_MGR_H
+
+#include <toBeSorted/cc/d_cc_d.h>
+
+class ColliderManager {
+public:
+ static ColliderManager *getColliderManager();
+
+ void addCollider(dCcD_GObjInf *collider);
+};
+
+#endif
diff --git a/include/toBeSorted/cc/d_cc_shape_colliders.h b/include/toBeSorted/cc/d_cc_shape_colliders.h
new file mode 100644
index 00000000..d46efe3b
--- /dev/null
+++ b/include/toBeSorted/cc/d_cc_shape_colliders.h
@@ -0,0 +1,89 @@
+#ifndef D_CC_SHAPE_COLLIDERS_H
+#define D_CC_SHAPE_COLLIDERS_H
+
+#include <m/m_vec.h>
+#include <toBeSorted/cc/d_cc_d.h>
+
+struct dCcD_SrcUnk {
+ /* 0x00 */ dCcD_SrcGObjInf mObjInf;
+ /* 0x44 */ dCcD_SrcUnk1Attr mUnk1Inf;
+}; // Size: ???
+
+class dCcD_Unk1 : public dCcD_GObjInf, public dCcD_ShapeAttr1 {
+public:
+ dCcD_Unk1();
+ virtual ~dCcD_Unk1();
+
+ virtual void *dCcD_GObjInf_0x0C() override;
+
+ void init(const dCcD_SrcUnk &src);
+ void unknownCalc();
+};
+
+struct dCcD_SrcEmpty {
+ /* 0x00 */ dCcD_SrcGObjInf mObjInf;
+}; // Size: 0x40
+
+// Not sure what this is, the init function
+// doesn't call the shape initializer
+class dCcD_Empty : public dCcD_GObjInf, public dCcD_ShapeAttr2 {
+public:
+ dCcD_Empty();
+ virtual ~dCcD_Empty();
+
+ virtual void *dCcD_GObjInf_0x0C() override;
+
+ void init(const dCcD_SrcEmpty &src);
+};
+
+struct dCcD_SrcCyl {
+ /* 0x00 */ dCcD_SrcGObjInf mObjInf;
+ /* 0x40 */ dCcD_SrcCylAttr mCylAttr;
+}; // Size: 0x44
+
+// Cylinder
+class dCcD_Cyl : public dCcD_GObjInf, public dCcD_ShapeAttr3 {
+public:
+ dCcD_Cyl();
+ virtual ~dCcD_Cyl();
+
+ virtual void *dCcD_GObjInf_0x0C() override;
+ void init(const dCcD_SrcCyl &src);
+ void setCenter(const mVec3_c &);
+ void moveCenter(const mVec3_c &);
+};
+
+struct dCcD_SrcSph {
+ /* 0x00 */ dCcD_SrcGObjInf mObjInf;
+ /* 0x40 */ dCcD_SrcSphAttr mSphAttr;
+}; // Size: 0x44
+
+// Sphere
+class dCcD_Sph : public dCcD_GObjInf, public dCcD_ShapeAttr4 {
+public:
+ dCcD_Sph();
+ virtual ~dCcD_Sph();
+
+ virtual void *dCcD_GObjInf_0x0C() override;
+ void init(const dCcD_SrcSph &src);
+ void setCenter(const mVec3_c &);
+ void moveCenter(const mVec3_c &);
+ void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
+};
+
+struct dCcD_SrcAabb {
+ /* 0x00 */ dCcD_SrcGObjInf mObjInf;
+ /* 0x40 */ dCcD_SrcAabbAttr mAabbAttr;
+}; // Size: 0x58
+
+class dCcD_Aabb : public dCcD_GObjInf, public dCcD_ShapeAttr5 {
+public:
+ dCcD_Aabb();
+ virtual ~dCcD_Aabb();
+
+ virtual void *dCcD_GObjInf_0x0C() override;
+
+ void init(const dCcD_SrcAabb &src);
+};
+
+#endif
diff --git a/include/toBeSorted/effects_struct.h b/include/toBeSorted/effects_struct.h
new file mode 100644
index 00000000..49773237
--- /dev/null
+++ b/include/toBeSorted/effects_struct.h
@@ -0,0 +1,28 @@
+#ifndef EFFECTS_STRUCT_H
+#define EFFECTS_STRUCT_H
+
+#include <common.h>
+#include <d/a/d_a_base.h>
+
+
+class EffectsStruct {
+private:
+ u8 field_0x00[0x1C - 0x00];
+
+public:
+ // vt at 0x1C
+ EffectsStruct();
+ EffectsStruct(dAcBase_c *);
+ virtual ~EffectsStruct();
+
+ inline void init(dAcBase_c *owner) {
+ mpOwner = owner;
+ }
+
+private:
+ u8 field_0x20[0x28 - 0x20];
+ /* 0x28 */ dAcBase_c *mpOwner;
+ u8 field_0x2C[0x34 - 0x2C];
+};
+
+#endif
diff --git a/include/toBeSorted/event_manager.h b/include/toBeSorted/event_manager.h
new file mode 100644
index 00000000..e95d8db4
--- /dev/null
+++ b/include/toBeSorted/event_manager.h
@@ -0,0 +1,16 @@
+#ifndef EVENT_MANAGER_H
+#define EVENT_MANAGER_H
+
+#include <toBeSorted/event.h>
+
+class dAcBase_c;
+
+class EventManager {
+public:
+ static bool isInEvent(dAcBase_c *actor, const char *eventName);
+ static bool alsoSetAsCurrentEvent(dAcBase_c *actor, Event *event, void *unknown);
+
+ static EventManager *sInstance;
+};
+
+#endif
diff --git a/include/toBeSorted/scgame.h b/include/toBeSorted/scgame.h
index 8ac27782..6572366c 100644
--- a/include/toBeSorted/scgame.h
+++ b/include/toBeSorted/scgame.h
@@ -7,7 +7,7 @@ struct SpawnInfo {
/* 0x00 */ char stageName[32]; // Probably SizedString<32>
/* 0x20 */ s16 transitionFadeFrames;
/* 0x22 */ s8 room;
- /* 0x23 */ s8 layer;
+ /* 0x23 */ u8 layer;
/* 0x24 */ s8 entrance;
/* 0x25 */ s8 night;
/* 0x26 */ s8 trial;
@@ -26,6 +26,7 @@ public:
static ScGame *sInstance;
static bool isCurrentStage(const char *stageName);
+ void triggerExit(s32 room, u8 exitIndex, s32 forcedNight = 2, s32 forcedTrial = 2);
};
#endif
diff --git a/src/REL/d/a/obj/d_a_obj_pool_cock.cpp b/src/REL/d/a/obj/d_a_obj_pool_cock.cpp
index 9f674a22..b632301e 100644
--- a/src/REL/d/a/obj/d_a_obj_pool_cock.cpp
+++ b/src/REL/d/a/obj/d_a_obj_pool_cock.cpp
@@ -48,7 +48,7 @@ int dAcOPoolCock_c::actorExecute() {
mStateMgr.executeState();
calcVelocity();
position += velocity;
- position += posIncrements;
+ position += mCCdStruct.posIncrements;
updateMatrix();
mMtx_c mdl1Transform;
mMtx_c mdl2Transform;
diff --git a/src/REL/d/a/obj/d_a_obj_ring.cpp b/src/REL/d/a/obj/d_a_obj_ring.cpp
index 6d153ac3..9bc13a04 100644
--- a/src/REL/d/a/obj/d_a_obj_ring.cpp
+++ b/src/REL/d/a/obj/d_a_obj_ring.cpp
@@ -37,7 +37,7 @@ int dAcOring_c::actorExecute() {
mStateMgr.executeState();
calcVelocity();
position += velocity;
- position += posIncrements;
+ position += mCCdStruct.posIncrements;
updateMatrix();
mModel.setLocalMtx(worldMatrix);
return SUCCEEDED;
diff --git a/src/REL/d/a/obj/d_a_obj_spike.cpp b/src/REL/d/a/obj/d_a_obj_spike.cpp
index e69de29b..baabdf99 100644
--- a/src/REL/d/a/obj/d_a_obj_spike.cpp
+++ b/src/REL/d/a/obj/d_a_obj_spike.cpp
@@ -0,0 +1,88 @@
+#include <d/a/obj/d_a_obj_spike.h>
+#include <toBeSorted/cc/d_cc_mgr.h>
+
+SPECIAL_ACTOR_PROFILE(OBJ_SPIKE, dAcOspike_c, fProfile::OBJ_SPIKE, 0x1D9, 0, 2);
+
+// clang-format off
+dCcD_SrcAabb dAcOspike_c::sCcSrc = {
+ {{{0x400}, 0x2003F, 0, 1, 0, 0, 0, 0, 0},
+ {{0xFEB77DFF}, 0x111, 0x60407, 0, 0},
+ {0}},
+ {-1.0f, -246.0f, -472.0f, 73.0f, 255.0f, 482.0f}};
+// clang-format on
+
+const mVec3_c dAcOspike_c::sVec1 = mVec3_c(-1.0f, -246.0f, -472.0f);
+const mVec3_c dAcOspike_c::sVec2 = mVec3_c(73.0f, 255.0f, 482.0f);
+
+STATE_DEFINE(dAcOspike_c, Wait);
+
+bool dAcOspike_c::createHeap() {
+ mResFile = getOarcResFile("SpikeD101");
+ nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("SpikeD101");
+ TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+ return true;
+}
+
+int dAcOspike_c::create() {
+ if (!initAllocatorWork1Heap(-1, "dAcOspike_c::m_allocator", 0x20)) {
+ return FAILED;
+ }
+
+ mCCdStruct.setField0x38ToMagicValue();
+ mCollision.init(sCcSrc);
+ mCollision.initUnk(mCCdStruct);
+
+ updateMatrix();
+ mMdl.setLocalMtx(worldMatrix);
+ mVec3_c tmp;
+ PSMTXMultVecSR(worldMatrix.m, mVec3_c::Ex, tmp);
+ mCollision.setAtVec(tmp);
+
+ mMtx_c mtx;
+ mtx.XrotS(rotation.x);
+ mtx.ZrotM(rotation.z);
+ mVec3_c tmp2, tmp3;
+ PSMTXMultVecSR(mtx.m, sVec1, tmp2);
+ PSMTXMultVecSR(mtx.m, sVec2, tmp3);
+
+ if (tmp2.x > tmp3.x) {
+ f32 copy = tmp2.x;
+ tmp2.x = tmp3.x;
+ tmp3.x = copy;
+ }
+ if (tmp2.y > tmp3.y) {
+ f32 copy = tmp2.y;
+ tmp2.y = tmp3.y;
+ tmp3.y = copy;
+ }
+ if (tmp2.z > tmp3.z) {
+ f32 copy = tmp2.z;
+ tmp2.z = tmp3.z;
+ tmp3.z = copy;
+ }
+
+ mCollision.setMinMax(tmp2, tmp3);
+ mStateMgr.changeState(StateID_Wait);
+ setBoundingBox(mVec3_c(-10.0f, -250.0f, -480.0f), mVec3_c(80.0f, 260.0f, 490.0f));
+ return SUCCEEDED;
+}
+
+int dAcOspike_c::doDelete() {
+ return 1;
+}
+
+int dAcOspike_c::actorExecute() {
+ mStateMgr.executeState();
+ mCollision.setWithYRot(position, rotation.y);
+ ColliderManager::getColliderManager()->addCollider(&mCollision);
+ return 1;
+}
+
+int dAcOspike_c::draw() {
+ drawModelType1(&mMdl);
+ return 1;
+}
+
+void dAcOspike_c::initializeState_Wait() {}
+void dAcOspike_c::executeState_Wait() {}
+void dAcOspike_c::finalizeState_Wait() {}
diff --git a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp
index e69de29b..898286d6 100644
--- a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp
+++ b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp
@@ -0,0 +1,139 @@
+#include <d/a/obj/d_a_obj_toD3_stone_figure.h>
+#include <toBeSorted/attention.h>
+#include <toBeSorted/cc/d_cc_mgr.h>
+#include <toBeSorted/event.h>
+#include <toBeSorted/event_manager.h>
+#include <toBeSorted/scgame.h>
+#include <toBeSorted/item_story_flag_manager.h>
+
+SPECIAL_ACTOR_PROFILE(OBJ_TOD3_STONE, dAcOtoD3StoneFigure_c, fProfile::OBJ_TOD3_STONE, 0x1B3, 0, 0);
+
+STATE_DEFINE(dAcOtoD3StoneFigure_c, OneEye);
+STATE_DEFINE(dAcOtoD3StoneFigure_c, Eyes);
+
+f32 dAcOtoD3StoneFigure_c::sRadius = 85.0f;
+f32 dAcOtoD3StoneFigure_c::sHeight = 290.0f;
+
+// clang-format off
+dCcD_SrcCyl dAcOtoD3StoneFigure_c::sCcSrc = {
+ {{{0}, 0, 0, 0, 0, 0, 0, 0, 0},
+ {{0xFEB77DFF}, 0x1000111, 0x60407, 0, 0},
+ {0xE9}},
+ {dAcOtoD3StoneFigure_c::sRadius, dAcOtoD3StoneFigure_c::sHeight}
+};
+// clang-format on
+
+bool dAcOtoD3StoneFigure_c::createHeap() {
+ const char *modelName = getModelName();
+ mResFile = getOarcResFile("BirdObjD3");
+ nw4r::g3d::ResMdl mdl = mResFile.GetResMdl(modelName);
+ TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+ return true;
+}
+
+int dAcOtoD3StoneFigure_c::create() {
+ mIsSkyKeepAlreadyOpen = isStoneOfTrialsPlaced();
+ mExitId = params & 0xFF;
+ updateMatrix();
+ if (!initAllocatorWork1Heap(-1, "dAcOtoD3StoneFigure_c::m_allocator", 0x20)) {
+ return FAILED;
+ }
+
+ mMdl.setLocalMtx(worldMatrix);
+ mCCdStruct.setField0x38ToMagicValue();
+ mCollision.init(sCcSrc);
+ mCollision.initUnk(mCCdStruct);
+ int zero = 0;
+ mCollision.setC(position);
+ mCollision.setR(dAcOtoD3StoneFigure_c::sRadius + zero);
+ mCollision.setH(dAcOtoD3StoneFigure_c::sHeight + zero);
+ ColliderManager::getColliderManager()->addCollider(&mCollision);
+ // mCollision.clearCoFlag();
+ mCollision.setTgCoFlag(1);
+
+ // ???
+ f32 a, b, c;
+ c = position.z;
+ b = getYPos();
+ b += zero;
+ a = position.x;
+ poscopy2.x = a;
+ poscopy2.y = b;
+ poscopy2.z = c;
+ poscopy3.x = a;
+ poscopy3.y = b;
+ poscopy3.z = c;
+ // poscopy3 = poscopy2;
+ mCollision.setSomeDefendValue(0x2000);
+
+ if (!mIsSkyKeepAlreadyOpen) {
+ mStateMgr.changeState(StateID_OneEye);
+ } else {
+ mStateMgr.changeState(StateID_Eyes);
+ }
+
+ return SUCCEEDED;
+}
+
+int dAcOtoD3StoneFigure_c::doDelete() {
+ return 1;
+}
+
+int dAcOtoD3StoneFigure_c::actorExecute() {
+ mStateMgr.executeState();
+ ColliderManager::getColliderManager()->addCollider(&mCollision);
+ return 1;
+}
+
+int dAcOtoD3StoneFigure_c::draw() {
+ if (ScGame::currentSpawnInfo.layer != 0x12) {
+ drawModelType1(&mMdl);
+ }
+ return 1;
+}
+
+void dAcOtoD3StoneFigure_c::initializeState_OneEye() {
+ if (ScGame::currentSpawnInfo.night == 1) {
+ rotation.y.mVal += -0x8000;
+ updateMatrix();
+ mMdl.setLocalMtx(worldMatrix);
+ }
+}
+
+void dAcOtoD3StoneFigure_c::executeState_OneEye() {
+ if (EventManager::isInEvent(this, "D3OpenStart")) {
+ ScGame::sInstance->triggerExit(roomid, mExitId);
+ } else {
+ if (hasStoneOfTrials() && ScGame::currentSpawnInfo.night != 1) {
+ // These are interaction related
+ -0.0f;
+ dAttention_c::sInstance->addTarget(this, 1, 300.0f, 50.0f, -100.0f, 100.0f);
+ dAttention_c::sInstance->addTarget(this, 1, 200.0f, -100.0f, 100.0f);
+ }
+ }
+}
+void dAcOtoD3StoneFigure_c::finalizeState_OneEye() {}
+
+void dAcOtoD3StoneFigure_c::initializeState_Eyes() {}
+void dAcOtoD3StoneFigure_c::executeState_Eyes() {}
+void dAcOtoD3StoneFigure_c::finalizeState_Eyes() {}
+
+const char *dAcOtoD3StoneFigure_c::getModelName() const {
+ return mIsSkyKeepAlreadyOpen ? "BirdObjD3B" : "BirdObjD3A";
+}
+
+bool dAcOtoD3StoneFigure_c::isStoneOfTrialsPlaced() const {
+ return StoryFlagManager::sInstance->getCounterOrFlag(22);
+}
+
+void dAcOtoD3StoneFigure_c::doInteraction(s32 arg) {
+ if (arg == 5) {
+ Event event = Event("D3OpenStart", 100, 0x100001, nullptr, nullptr);
+ EventManager::alsoSetAsCurrentEvent(this, &event, nullptr);
+ }
+}
+
+extern "C" s32 fn_80251B70(s32);
+bool dAcOtoD3StoneFigure_c::hasStoneOfTrials() const {
+ return fn_80251B70(0xB4);
+}
diff --git a/src/REL/d/a/obj/d_a_obj_triforce.cpp b/src/REL/d/a/obj/d_a_obj_triforce.cpp
index e69de29b..23506d57 100644
--- a/src/REL/d/a/obj/d_a_obj_triforce.cpp
+++ b/src/REL/d/a/obj/d_a_obj_triforce.cpp
@@ -0,0 +1,81 @@
+#include <c/c_math.h>
+#include <d/a/obj/d_a_obj_triforce.h>
+#include <m/m_vec.h>
+#include <toBeSorted/cc/d_cc_mgr.h>
+
+SPECIAL_ACTOR_PROFILE(OBJ_TRIFORCE, dAcOtriforce_c, fProfile::OBJ_TRIFORCE, 0x15D, 0, 4);
+
+// clang-format off
+dCcD_SrcSph dAcOtriforce_c::sCcSrc = {
+ {{{0}, 0, 0, 0, 0, 0, 0, 0, 0},
+ {{0xFEB77DFF}, 0x111, 0x60407, 0, 0},
+ {0xE9}},
+ {150.0f}};
+// clang-format on
+
+const f32 dAcOtriforce_c::sScale = 6.5f;
+const f32 dAcOtriforce_c::sAmpNeg = -3.0f;
+const u32 dAcOtriforce_c::sStartingOffsetRange = 0x10000;
+
+// const f32 dAcOtriforce_c::sAmpPos = 23.0f;
+
+bool dAcOtriforce_c::createHeap() {
+ mResFile = getOarcResFile("TriForce");
+ nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("TriForce");
+ TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x324));
+ nw4r::g3d::ResAnmTexSrt anm = mResFile.GetResAnmTexSrt("TriForce");
+ TRY_CREATE(mAnm.create(mdl, anm, &heap_allocator, nullptr, 1));
+ mMdl.setAnm(mAnm);
+ return true;
+}
+
+int dAcOtriforce_c::create() {
+ if (!initAllocatorWork1Heap(-1, "dAcOtriforce_c::m_allocator", 0x20)) {
+ return FAILED;
+ }
+
+ mCCdStruct.setField0x38ToMagicValue();
+ mCollision.init(sCcSrc);
+ mCollision.initUnk(mCCdStruct);
+ mCollision.clearCoFlag();
+ mStartingOffset = cM::rndInt(sStartingOffsetRange);
+ mEffects.init(this);
+ mCollision.setSomeDefendValue(0x2000);
+ updateMatrix();
+ scale.x = sScale;
+ scale.y = sScale;
+ scale.z = sScale;
+ mMdl.setLocalMtx(worldMatrix);
+ return SUCCEEDED;
+}
+
+int dAcOtriforce_c::doDelete() {
+ return 1;
+}
+
+extern const u16 lbl_8057AB3E;
+extern "C" void fn_80029AE0(EffectsStruct *, u16, mMtx_c *, void *, void *);
+
+int dAcOtriforce_c::actorExecute() {
+ int zero = 0;
+ mVec3_c offset = mVec3_c::Ey * (mStartingOffset.sin() * getBounceScalar());
+ position = mStartingPos + offset;
+ mStartingOffset.mVal += 0x16C;
+
+ mCollision.setC(position.x, position.y + 90.0f + zero, position.z);
+
+ ColliderManager::getColliderManager()->addCollider(&mCollision);
+ updateMatrix();
+ Mtx m;
+ PSMTXScale(m, scale.x, scale.y, scale.z);
+ PSMTXConcat(worldMatrix.m, m, worldMatrix.m);
+ mMdl.setLocalMtx(worldMatrix);
+ mAnm.play();
+ fn_80029AE0(&mEffects, lbl_8057AB3E, &worldMatrix, nullptr, nullptr);
+ return 1;
+}
+
+int dAcOtriforce_c::draw() {
+ drawModelType1(&mMdl);
+ return 1;
+}
diff --git a/src/REL/d/t/d_t_sound_area.cpp b/src/REL/d/t/d_t_sound_area.cpp
index ccdba2c2..a484171d 100644
--- a/src/REL/d/t/d_t_sound_area.cpp
+++ b/src/REL/d/t/d_t_sound_area.cpp
@@ -11,7 +11,6 @@ void float_ordering() {
0.01f;
}
-
int dTgSndAr_c::create() {
scale *= 0.01f;
if (dTgSndMg_c::sInstance == nullptr) {
@@ -34,9 +33,8 @@ int dTgSndAr_c::create() {
if ((base = fManager_c::searchBaseByGroupType(ACTOR, base)) == nullptr) {
break;
}
- // This has got to be just a member function
dAcBase_c *ac = static_cast<dAcBase_c *>(base);
- if (!dBase_c::isActorPlayer(*ac) && checkPosInArea(ac->position)) {
+ if (!ac->isActorPlayer() && checkPosInArea(ac->position)) {
ac->setBit_field_0xE8(params & 0xFF);
}
}
@@ -142,26 +140,31 @@ struct UnkStruct {
extern "C" void fn_80337EA0(UnkStruct *);
extern "C" void fn_80337EF0(UnkStruct *, mVec3_c &, mVec3_c &, f32);
-extern "C" int fn_8032BFB0(UnkStruct *, EGG::Vector3f &, f32 *, f32 &, int);
+extern "C" int cM3d_Len3dSqPntAndSegLine(UnkStruct *, Vec &, Vec *, f32 *, f32 *);
-// ???
+// Capsule
bool dTgSndAr_c::checkAlg3(const mVec3_c &pos) {
- f32 q[4];
- UnkStruct unk;
+ Vec q;
f32 radius = scale.x * 100.0f;
radius = radius * radius;
- EGG::Vector3f a = pos;
+ Vec a = pos;
+
+ UnkStruct unk;
fn_80337EA0(&unk);
+ // Line between b and c
mVec3_c b = *mRail.getPntPosForIndex(0);
mVec3_c c = *mRail.getPntPosForIndex(1);
fn_80337EF0(&unk, b, c, scale.x * 100.0f);
f32 d;
- if (fn_8032BFB0(&unk, a, q, d, 0)) {
+ if (cM3d_Len3dSqPntAndSegLine(&unk, a, &q, &d, nullptr)) {
+ // At the cylindrical part of the capsule, just check the distance to
+ // the line
return d < radius;
} else {
+ // Otherwise check if we are within the spheres around the endpoints
f32 distSq = PSVECSquareDistance(unk.vec, pos);
if (distSq < radius) {
return true;
diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp
index 3c4c247d..41584bfa 100644
--- a/src/d/a/d_a_base.cpp
+++ b/src/d/a/d_a_base.cpp
@@ -4,6 +4,7 @@
#include "f/f_list_nd.h"
#include "m/m_vec.h"
#include "toBeSorted/event.h"
+#include "toBeSorted/event_manager.h"
#include "toBeSorted/file_manager.h"
#include "toBeSorted/misc_flag_managers.h"
#include "toBeSorted/scgame.h"
@@ -32,7 +33,6 @@ extern "C" s16 targetAngleX(mVec3_c *, mVec3_c *);
extern "C" bool checkCollision(mVec3_c *pos);
extern "C" s8 collisionCheckGetRoom();
extern "C" dRoom *getRoomByIndex(RoomManager *mgr, s8 roomid);
-extern "C" bool alsoSetAsCurrentEvent(dAcBase_c *, Event *, void *);
bool dAcBase_c::createHeap() {
return true;
@@ -547,7 +547,7 @@ void dAcBase_c::unkVirtFunc_0x6C() {}
void dAcBase_c::doInteraction(s32 param) {
if (param == 4 || param == 5 || param == 12) {
Event event = Event("DefaultTalk", 400, 0x100001, nullptr, nullptr);
- alsoSetAsCurrentEvent(this, &event, nullptr);
+ EventManager::alsoSetAsCurrentEvent(this, &event, nullptr);
}
}
diff --git a/src/d/a/obj/d_a_obj_switch.cpp b/src/d/a/obj/d_a_obj_switch.cpp
index 9bbce3d6..6dfb1e94 100644
--- a/src/d/a/obj/d_a_obj_switch.cpp
+++ b/src/d/a/obj/d_a_obj_switch.cpp
@@ -26,7 +26,7 @@ void dAcOswMdlCallback_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip *manip, n
}
static bool isPushableBlock(dAcBase_c *actor) {
- return dBase_c::isActorPlayer(*actor) || actor->profile_name == fProfile::OBJ_PUSH_BLOCK ||
+ return actor->isActorPlayer() || actor->profile_name == fProfile::OBJ_PUSH_BLOCK ||
actor->profile_name == fProfile::OBJ_KIBAKO;
}
@@ -34,7 +34,7 @@ void dAcOsw_c::interactCallback(void *unknown, dAcBase_c *actor, dAcObjBase_c *i
if (!isPushableBlock(interactor)) {
return;
}
- dAcPy_c *link = dBase_c::isActorPlayer(*interactor) ? static_cast<dAcPy_c *>(interactor) : nullptr;
+ dAcPy_c *link = interactor->isActorPlayer() ? static_cast<dAcPy_c *>(interactor) : nullptr;
dAcOsw_c *sw = static_cast<dAcOsw_c *>(actor);
// halp
diff --git a/src/d/d_base.cpp b/src/d/d_base.cpp
index 41c03e5a..2e1701b4 100644
--- a/src/d/d_base.cpp
+++ b/src/d/d_base.cpp
@@ -53,8 +53,8 @@ void dBase_c::resetFlags() {
s_NextExecuteControlFlags = 0;
}
-bool dBase_c::isActorPlayer(dBase_c &base) {
- return base.profile_name == fProfile::PLAYER;
+bool dBase_c::isActorPlayer() {
+ return profile_name == fProfile::PLAYER;
}
int dBase_c::loadAsyncCallback() {
diff --git a/src/toBeSorted/cc/d_cc_d.cpp b/src/toBeSorted/cc/d_cc_d.cpp
new file mode 100644
index 00000000..5a894ad0
--- /dev/null
+++ b/src/toBeSorted/cc/d_cc_d.cpp
@@ -0,0 +1,395 @@
+#include <d/a/d_a_base.h>
+#include <f/f_base_id.h>
+#include <m/m_vec.h>
+#include <toBeSorted/cc/d_cc_d.h>
+
+inline bool cM3d_IsZero(f32 f);
+
+mVec3_c dCcD_ShapeAttr::m_virtual_center = mVec3_c::Zero;
+
+dCcD_DivideInfo::dCcD_DivideInfo() {}
+dCcD_DivideInfo::~dCcD_DivideInfo() {}
+
+dCcD_DivideArea::dCcD_DivideArea() {}
+dCcD_DivideArea::~dCcD_DivideArea() {}
+
+void d_cc_d_float_order() {
+ 1.0f / 32.0f;
+ 1.0f;
+ 0.0f;
+ FLT_EPSILON;
+ 1.0f / 3.0f;
+ 1.0e9f;
+ -1.0e9f;
+ -1.0f;
+ 0.5f;
+}
+
+// Very certain
+void dCcD_DivideArea::SetArea(Aabb const &aab) {
+ Set(aab.mMin, aab.mMax);
+
+ mScaledXDiff = 1.0f / 32.0f * (mMax.x - mMin.x);
+ mXDiffIsZero = cM3d_IsZero(mScaledXDiff);
+ if (!mXDiffIsZero) {
+ mInvScaledXDiff = 1.0f / mScaledXDiff;
+ }
+
+ mScaledYDiff = 1.0f / 32.0f * (mMax.y - mMin.y);
+ mYDiffIsZero = cM3d_IsZero(mScaledYDiff);
+ if (!mYDiffIsZero) {
+ mInvScaledYDiff = 1.0f / mScaledYDiff;
+ }
+
+ mScaledZDiff = 1.0f / 32.0f * (mMax.z - mMin.z);
+ mZDiffIsZero = cM3d_IsZero(mScaledZDiff);
+ if (!mZDiffIsZero) {
+ mInvScaledZDiff = 1.0f / mScaledZDiff;
+ }
+}
+
+inline bool cM3d_IsZero(f32 f) {
+ return fabsf(f) < FLT_EPSILON;
+}
+
+static u32 const l_base[32] = {
+ 0x00000001,
+ 0x00000003,
+ 0x00000007,
+ 0x0000000F,
+ 0x0000001F,
+ 0x0000003F,
+ 0x0000007F,
+ 0x000000FF,
+ 0x000001FF,
+ 0x000003FF,
+ 0x000007FF,
+ 0x00000FFF,
+ 0x00001FFF,
+ 0x00003FFF,
+ 0x00007FFF,
+ 0x0000FFFF,
+ 0x0001FFFF,
+ 0x0003FFFF,
+ 0x0007FFFF,
+ 0x000FFFFF,
+ 0x001FFFFF,
+ 0x003FFFFF,
+ 0x007FFFFF,
+ 0x00FFFFFF,
+ 0x01FFFFFF,
+ 0x03FFFFFF,
+ 0x07FFFFFF,
+ 0x0FFFFFFF,
+ 0x1FFFFFFF,
+ 0x3FFFFFFF,
+ 0x7FFFFFFF,
+ 0xFFFFFFFF,
+};
+
+// TODO
+
+UnkCCDStruct::UnkCCDStruct(dAcBase_c *arg) : field_0x00(0), field_0x04(0), field_0x08(0), field_0x0C(0) {
+ field_0x38 = 0;
+ field_0x34 = arg;
+ reset();
+}
+
+void UnkCCDStruct::postExecute() {
+ field_0x04 = field_0x00;
+ field_0x00 = 0;
+ field_0x0C = field_0x08;
+ field_0x08 = 0;
+}
+
+void UnkCCDStruct::reset() {
+ field_0x10 = mVec3_c::Zero;
+ field_0x1C = mVec3_c::Zero;
+ posIncrements = mVec3_c::Zero;
+}
+
+fBaseID_e UnkCCDStruct::getId() {
+ if (field_0x34 != nullptr) {
+ return field_0x34->unique_ID;
+ }
+ return (fBaseID_e)0;
+}
+
+static u32 const sth[] = {0x4B, 0x5A, 0x64, 0x00};
+
+u32 UnkCCDStruct::getSomething(int arg) {
+ if (field_0x38 == 0x0D || arg == 0) {
+ return 0;
+ }
+
+ if (field_0x38 == 0 || arg == 0x0D) {
+ return 100;
+ }
+
+ if (field_0x38 == arg) {
+ return 50;
+ }
+
+ if (field_0x38 == 0x0C || arg == 0x01) {
+ return 0;
+ }
+
+ if (field_0x38 == 1 || arg == 0x0C) {
+ return 100;
+ }
+
+ arg = arg - field_0x38;
+ if (arg > 0) {
+ return sth[(arg <= 3 ? arg : 3) - 1];
+ } else {
+ return 100 - sth[(-arg <= 3 ? -arg : 3) - 1];
+ }
+}
+
+dCcD_GAtTgCoCommonBase::dCcD_GAtTgCoCommonBase() : field_0x00(0), field_0x14(0), mEffCounter(0) {}
+
+dCcD_GAtTgCoCommonBase::~dCcD_GAtTgCoCommonBase() {
+ unlink();
+ field_0x14 = 0;
+ unlink();
+ decreaseCount();
+ field_0x00 = 0;
+}
+
+void dCcD_GAtTgCoCommonBase::unlink() {
+ mActor.unlink();
+}
+
+void dCcD_GAtTgCoCommonBase::setActor(dAcBase_c *actor) {
+ field_0x14 |= 1;
+ mActor.link(actor);
+}
+
+dAcBase_c *dCcD_GAtTgCoCommonBase::getActor() {
+ return mActor.get();
+}
+
+void dCcD_GAtTgCoCommonBase::decreaseCount() {
+ if (mEffCounter <= 0) {
+ return;
+ }
+ mEffCounter--;
+}
+
+dCcD_GObjInf::dCcD_GObjInf() {
+ field_0x104 = nullptr;
+ field_0x108 = 0;
+}
+
+dCcD_GObjInf::~dCcD_GObjInf() {
+ field_0x104 = nullptr;
+}
+
+bool dCcD_GObjInf::weirdConditionCheck(dAcBase_c *ac, u32 arg) {
+ return ac != nullptr && ac->isActorPlayer() && arg == 2;
+}
+
+void dCcD_GObjInf::clear() {
+ mGObjAt.clearFlag();
+ mGObjTg.clearFlag();
+ mGObjCo.clearFlag();
+}
+
+void dCcD_GObjInf::init(const dCcD_SrcGObjInf &src) {
+ mGObjAt.init(&src.mGObjAt);
+ mGObjTg.init(&src.mGObjTg);
+ mGObjCo.init(&src.mGObjCo);
+}
+
+void dCcD_GObjInf::ResetAtHit() {
+ mGObjAt.resetField0x14();
+ mGObjAt.unlink();
+ mGObjAt.decreaseCount();
+ mGObjAt.resetEffCounter();
+}
+
+void dCcD_GObjInf::ResetTgHit() {
+ mGObjTg.resetField0x14();
+ mGObjTg.unlink();
+ mGObjTg.decreaseCount();
+ mGObjTg.resetEffCounter();
+}
+
+void dCcD_GObjInf::ResetCoHit() {
+ mGObjCo.resetField0x14();
+ mGObjCo.unlink();
+ mGObjCo.decreaseCount();
+ mGObjCo.resetEffCounter();
+}
+
+mVec3_c *dCcD_GObjInf::GetAtHitPosP() {
+ return mGObjAt.GetHitPosP();
+}
+
+mVec3_c *dCcD_GObjInf::GetAtHitPosP2() {
+ return mGObjAt.GetHitPosP();
+}
+
+void dCcD_GObjInf::dCcD_GObjInf_0x10() {}
+
+dAcBase_c *dCcD_GObjInf::GetAtActor() {
+ return mGObjAt.getActor();
+}
+
+dAcBase_c *dCcD_GObjInf::GetTgActor() {
+ return mGObjTg.getActor();
+}
+
+dAcBase_c *dCcD_GObjInf::GetCoActor() {
+ return mGObjCo.getActor();
+}
+
+void dCcD_GObjInf::adjustHitPos(f32 dx, f32 dz) {
+ mGObjAt.adjustHitPos(dx, dz);
+ mGObjTg.adjustHitPos(dx, dz);
+ mGObjCo.adjustHitPos(dx, dz);
+}
+
+/**
+ *
+ * Geometric shape colliders
+ *
+ */
+
+dCcD_ShapeAttr::dCcD_ShapeAttr() {}
+
+dCcD_ShapeAttr::~dCcD_ShapeAttr() {}
+
+mVec3_c *dCcD_ShapeAttr::getVirtualCenter() {
+ return &m_virtual_center;
+}
+
+dCcD_ShapeAttr2::dCcD_ShapeAttr2() {}
+dCcD_ShapeAttr2::~dCcD_ShapeAttr2() {}
+
+dCcD_ShapeAttr5::dCcD_ShapeAttr5() {}
+dCcD_ShapeAttr5::~dCcD_ShapeAttr5() {}
+
+void dCcD_ShapeAttr5::init(const dCcD_SrcAabbAttr &src) {
+ setMinMax(mVec3_c(src.minX, src.minY, src.minZ), mVec3_c(src.maxX, src.maxY, src.maxZ));
+}
+
+mVec3_c *dCcD_ShapeAttr5::getVirtualCenter() {
+ return &mVirtualCenter;
+}
+
+dCcD_ShapeAttr1::dCcD_ShapeAttr1() {}
+dCcD_ShapeAttr1::~dCcD_ShapeAttr1() {}
+
+mVec3_c *dCcD_ShapeAttr1::getVirtualCenter() {
+ return &mVirtualCenter;
+}
+
+dCcD_ShapeAttr3::dCcD_ShapeAttr3() {}
+
+dCcD_ShapeAttr3::~dCcD_ShapeAttr3() {}
+
+void dCcD_ShapeAttr3::init(const dCcD_SrcCylAttr &src) {
+ setR(src.mRadius);
+ setH(src.mHeight);
+ mVec3_c v;
+ v.z = 0.0f;
+ v.y = 0.0f;
+ v.x = 0.0f;
+ setC(v);
+}
+
+mVec3_c *dCcD_ShapeAttr3::getVirtualCenter() {
+ return &mCenter;
+}
+
+dCcD_ShapeAttr4::dCcD_ShapeAttr4() {}
+dCcD_ShapeAttr4::~dCcD_ShapeAttr4() {}
+
+void dCcD_ShapeAttr4::init(const dCcD_SrcSphAttr &src) {
+ setR(src.mRadius);
+ mVec3_c v;
+ v.z = 0.0f;
+ v.y = 0.0f;
+ v.x = 0.0f;
+ setC(v);
+}
+
+mVec3_c *dCcD_ShapeAttr4::getVirtualCenter() {
+ return &mCenter;
+}
+
+/**
+ *
+ * At/Tg/Co collider
+ *
+ */
+
+dCcD_GObjAt::dCcD_GObjAt() {
+ field_0x58 = 0;
+}
+
+dCcD_GObjAt::~dCcD_GObjAt() {}
+
+void dCcD_GObjAt::init(const dCcD_SrcGObjAt *src) {
+ mEffCounter = 0;
+ mSrc = *src;
+ mHitPos = mVec3_c::Zero;
+}
+
+void dCcD_GObjAt::setSomeAtFlags(u32 flags) {
+ mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFC1 | flags;
+}
+
+void dCcD_GObjAt::adjustHitPos(f32 dx, f32 dz) {
+ mHitPos.x += dx;
+ mHitPos.z += dz;
+}
+
+dCcD_GObjTg::dCcD_GObjTg() {
+ field_0x44 = 0;
+ field_0x4A = 0;
+ field_0x4B = 0;
+ field_0x4C = 0;
+ field_0x50 = 0;
+ field_0x54 = 0;
+ field_0x6C.x = 0.0f;
+ field_0x6C.y = 0.0f;
+ field_0x6C.z = 0.0f;
+ field_0x78 = 0;
+}
+
+dCcD_GObjTg::~dCcD_GObjTg() {}
+
+void dCcD_GObjTg::init(const dCcD_SrcGObjTg *src) {
+ mEffCounter = 0;
+ mSrc = *src;
+ field_0x4C = 0;
+ mHitPos = mVec3_c::Zero;
+ field_0x44 = 0;
+ field_0x48 = 0x4000;
+}
+
+void dCcD_GObjTg::adjustHitPos(f32 dx, f32 dz) {
+ mHitPos.x += dx;
+ mHitPos.z += dz;
+ field_0x6C.x += dx;
+ field_0x6C.z += dz;
+}
+
+dCcD_GObjCo::dCcD_GObjCo() {
+ field_0x20 = 0;
+ field_0x28 = 0;
+}
+
+dCcD_GObjCo::~dCcD_GObjCo() {}
+
+void dCcD_GObjCo::init(const dCcD_SrcGObjCo *src) {
+ mEffCounter = 0;
+ mSrc = *src;
+ setSomeAtFlags(src->mBase.mGFlag & 0x1E0);
+}
+
+void dCcD_GObjCo::setSomeAtFlags(u32 flags) {}
+
+void dCcD_GObjCo::adjustHitPos(f32 dx, f32 dz) {}
diff --git a/src/toBeSorted/cc/d_cc_m3d.cpp b/src/toBeSorted/cc/d_cc_m3d.cpp
new file mode 100644
index 00000000..1f2ab896
--- /dev/null
+++ b/src/toBeSorted/cc/d_cc_m3d.cpp
@@ -0,0 +1,33 @@
+#include <math.h>
+#include <nw4r/math/math_types.h>
+#include <rvl/MTX.h>
+
+
+using namespace nw4r::math;
+
+inline VEC3 cM3d_Cross(const VEC3 *pVecA, const VEC3 *pVecB, const VEC3 *pVecC, VEC3 *pVecOut) {
+ VEC3 tmp1;
+ VEC3 tmp2;
+ VEC3Sub(&tmp1, pVecB, pVecA);
+ VEC3Sub(&tmp2, pVecC, pVecA);
+
+ VEC3Cross(pVecOut, &tmp1, &tmp2);
+}
+
+inline f32 cM3d_Dot(const VEC3 *pVecA, const VEC3 *pVecB) {
+ return VEC3Dot(pVecA, pVecB);
+}
+
+void cM3d_CalcPla(const VEC3 *pVecA, const VEC3 *pVecB, const VEC3 *pVecC, VEC3 *pVecOut, f32 *pD) {
+ cM3d_Cross(pVecA, pVecB, pVecC, pVecOut);
+ f32 mag = VEC3Len(pVecOut);
+ if (fabsf(mag) > 0.05f) {
+ VEC3Scale(pVecOut, pVecOut, 1.0f / mag);
+ *pD = -cM3d_Dot(pVecOut, pVecA);
+ } else {
+ pVecOut->y = 0.0f;
+ *pD = 0.0f;
+ pVecOut->z = 0.0f;
+ pVecOut->x = 0.0f;
+ }
+}
diff --git a/src/toBeSorted/cc/d_cc_m3d_g_cyl.cpp b/src/toBeSorted/cc/d_cc_m3d_g_cyl.cpp
new file mode 100644
index 00000000..f166c335
--- /dev/null
+++ b/src/toBeSorted/cc/d_cc_m3d_g_cyl.cpp
@@ -0,0 +1,26 @@
+#include <m/m_vec.h>
+#include <toBeSorted/cc/d_cc_m3d_g_cyl.h>
+
+void cM3dGCyl::setC(const mVec3_c &c, f32 radius, f32 height) {
+ setC(c);
+ setR(radius);
+ setH(height);
+}
+
+void cM3dGCyl::setC(const mVec3_c &c) {
+ mCenter = c;
+}
+
+void cM3dGCyl::setH(f32 h) {
+ if (h < 0.0f) {
+ h = 0.0f;
+ }
+ mHeight = h;
+}
+
+void cM3dGCyl::setR(f32 r) {
+ if (r < 0.0f) {
+ r = 0.0f;
+ }
+ mRadius = r;
+}
diff --git a/src/toBeSorted/cc/d_cc_m3d_g_sph.cpp b/src/toBeSorted/cc/d_cc_m3d_g_sph.cpp
new file mode 100644
index 00000000..b4f12a06
--- /dev/null
+++ b/src/toBeSorted/cc/d_cc_m3d_g_sph.cpp
@@ -0,0 +1,26 @@
+#include <m/m_vec.h>
+#include <toBeSorted/cc/d_cc_m3d_g_sph.h>
+
+cM3dGSph::cM3dGSph() {
+ field_0x10 = 1.0f;
+}
+
+void cM3dGSph::setC(const mVec3_c &c) {
+ mCenter = c;
+}
+
+void cM3dGSph::set(const mVec3_c &c, f32 r) {
+ setC(c);
+ setR(r);
+}
+
+void cM3dGSph::setR(f32 r) {
+ if (r < 0.0f) {
+ r = 0.0f;
+ }
+ mRadius = r;
+}
+
+void cM3dGSph::setC(f32 x, f32 y, f32 z) {
+ setC(mVec3_c(x, y, z));
+}
diff --git a/src/toBeSorted/cc/d_cc_shape_colliders.cpp b/src/toBeSorted/cc/d_cc_shape_colliders.cpp
new file mode 100644
index 00000000..3d9ddfe5
--- /dev/null
+++ b/src/toBeSorted/cc/d_cc_shape_colliders.cpp
@@ -0,0 +1,106 @@
+#include <m/m_vec.h>
+#include <toBeSorted/cc/d_cc_d.h>
+#include <toBeSorted/cc/d_cc_shape_colliders.h>
+
+dCcD_Unk1::dCcD_Unk1() {}
+dCcD_Unk1::~dCcD_Unk1() {}
+
+void dCcD_Unk1::init(const dCcD_SrcUnk &src) {
+ dCcD_GObjInf::init(src.mObjInf);
+ dCcD_ShapeAttr1::init(src.mUnk1Inf);
+}
+
+void *dCcD_Unk1::dCcD_GObjInf_0x0C() {
+ if (this != nullptr) {
+ return &UNK_0x00;
+ }
+ return this;
+}
+
+void dCcD_Unk1::unknownCalc() {
+ PSVECSubtract(*&field_0x0C, *&field_0x00, *getAtVec());
+}
+
+dCcD_Empty::dCcD_Empty() {}
+dCcD_Empty::~dCcD_Empty() {}
+
+void dCcD_Empty::init(const dCcD_SrcEmpty &src) {
+ dCcD_GObjInf::init(src.mObjInf);
+}
+
+void *dCcD_Empty::dCcD_GObjInf_0x0C() {
+ if (this != nullptr) {
+ return &UNK_0x00;
+ }
+ return this;
+}
+
+dCcD_Cyl::dCcD_Cyl() {}
+dCcD_Cyl::~dCcD_Cyl() {}
+
+void dCcD_Cyl::init(const dCcD_SrcCyl &src) {
+ dCcD_GObjInf::init(src.mObjInf);
+ dCcD_ShapeAttr3::init(src.mCylAttr);
+}
+
+void *dCcD_Cyl::dCcD_GObjInf_0x0C() {
+ if (this != nullptr) {
+ return &UNK_0x00;
+ }
+ return this;
+}
+
+void dCcD_Cyl::setCenter(const mVec3_c &c) {
+ setAtVec(mVec3_c::Zero);
+ setC(c);
+}
+
+void dCcD_Cyl::moveCenter(const mVec3_c &c) {
+ setAtVec(c - GetC());
+ setC(c);
+}
+
+dCcD_Sph::dCcD_Sph() {}
+dCcD_Sph::~dCcD_Sph() {}
+
+void dCcD_Sph::init(const dCcD_SrcSph &src) {
+ dCcD_GObjInf::init(src.mObjInf);
+ dCcD_ShapeAttr4::init(src.mSphAttr);
+}
+
+void dCcD_Sph::setCenter(const mVec3_c &c) {
+ setAtVec(mVec3_c::Zero);
+ setC(c);
+}
+
+void dCcD_Sph::moveCenter(const mVec3_c &c) {
+ setAtVec(c - GetC());
+ setC(c);
+}
+
+void dCcD_Sph::setCenterAndAtVec(const mVec3_c &a, const mVec3_c &b) {
+ setAtVec(b);
+ setC(a);
+}
+
+void *dCcD_Sph::dCcD_GObjInf_0x0C() {
+ if (this != nullptr) {
+ return &UNK_0x00;
+ }
+ return this;
+}
+
+dCcD_Aabb::dCcD_Aabb() {}
+dCcD_Aabb::~dCcD_Aabb() {}
+
+void dCcD_Aabb::init(const dCcD_SrcAabb &src) {
+ dCcD_GObjInf::init(src.mObjInf);
+ dCcD_ShapeAttr5::init(src.mAabbAttr);
+}
+
+void *dCcD_Aabb::dCcD_GObjInf_0x0C() {
+ if (this != nullptr) {
+ return &UNK_0x00;
+ }
+ return this;
+}
diff --git a/tools/rel_sieve.py b/tools/rel_sieve.py
index da10f0cf..e9d62617 100644
--- a/tools/rel_sieve.py
+++ b/tools/rel_sieve.py
@@ -27,9 +27,6 @@ import os
import pathlib
BLOCKING_SYMBOLS = [
- ['fn_80353D70', 'UnkCollider::ctor'],
- ['fn_80353F30', 'UnkCollider::ctor2'],
- ['fn_80353FF0', 'UnkCollider::init'],
['fn_800C3EC0', 'ActorEventFlowManagerRelated::checkEventFinished'],
['fn_800275C0', 'EffectsStruct::ctor'],
['fn_80027610', 'EffectsStruct::ctor'],
@@ -44,7 +41,6 @@ BLOCKING_SYMBOLS = [
['fn_800C43D0', 'ActorEventFlowManagerRelated *FUN_800c43d0'],
['fn_8037DCC0', 'EnemySoundMgr'],
['fn_800A6690', 'ActorOnRail::ctor'],
- ['fn_80355080', 'getColliderManager'],
['fn_800975D0', 'initializeDowsingTarget'],
['fn_800A0680', 'getCurrentEventActor'],
['fn_80390FE0', 'something harp sound'],
@@ -52,6 +48,8 @@ BLOCKING_SYMBOLS = [
['fn_800225F0', 'something light'],
['fn_80179250', 'shutter fence list'],
['fn_8033AB50', 'getCollisionCheckContext'],
+ ['fn_8033F150', 'fn_8033F150'],
+ ['fn_80341040', 'fn_80341040'],
['fn_383_D10', 'getAcOStageSink_ptr'],
]