diff --git a/.vscode/settings.json b/.vscode/settings.json index 13b3e2507..6eeacd5fb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,11 @@ { "[c]": { + "files.autoSave": "onFocusChange", "files.encoding": "utf8", "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd" }, "[cpp]": { + "files.autoSave": "onFocusChange", "files.encoding": "utf8", "editor.defaultFormatter": "xaver.clang-format" }, @@ -11,7 +13,6 @@ // "editor.defaultFormatter": "ms-python.black-formatter" // }, // "editor.tabSize": 2, - "files.autoSave": "onFocusChange", "files.insertFinalNewline": true, "files.trimFinalNewlines": true, "files.associations": { diff --git a/config/SOUE01/rels/d_a_bombfNP/splits.txt b/config/SOUE01/rels/d_a_bombfNP/splits.txt index 252e79491..b2edf4bf9 100644 --- a/config/SOUE01/rels/d_a_bombfNP/splits.txt +++ b/config/SOUE01/rels/d_a_bombfNP/splits.txt @@ -17,3 +17,4 @@ REL/global_destructor_chain.c: REL/d/a/d_a_bombf.cpp: .text start:0x000000F0 end:0x00001358 .ctors start:0x00000000 end:0x00000004 + .rodata start:0x00000000 end:0x00000044 diff --git a/config/SOUE01/rels/d_a_bombfNP/symbols.txt b/config/SOUE01/rels/d_a_bombfNP/symbols.txt index c2f92fe9c..b6b93eec6 100644 --- a/config/SOUE01/rels/d_a_bombfNP/symbols.txt +++ b/config/SOUE01/rels/d_a_bombfNP/symbols.txt @@ -8,15 +8,15 @@ __dt__23sFState_c<10dAcBombf_c>Fv = .text:0x000001F0; // type:function size:0x58 __dt__26sFStateFct_c<10dAcBombf_c>Fv = .text:0x00000250; // type:function size:0x6C __dt__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002C0; // type:function size:0xA0 __dt__49sFStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000360; // type:function size:0xA4 -fn_17_410 = .text:0x00000410; // type:function size:0x68 -AcBombf__init1 = .text:0x00000480; // type:function size:0x184 +createHeap__10dAcBombf_cFv = .text:0x00000410; // type:function size:0x68 +actorCreate__10dAcBombf_cFv = .text:0x00000480; // type:function size:0x184 changeState__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000610; // type:function size:0x10 -AcBombf__init2 = .text:0x00000620; // type:function size:0x2A4 -fn_17_8D0 = .text:0x000008D0; // type:function size:0x8 -fn_17_8E0 = .text:0x000008E0; // type:function size:0x138 +actorPostCreate__10dAcBombf_cFv = .text:0x00000620; // type:function size:0x2A4 +doDelete__10dAcBombf_cFv = .text:0x000008D0; // type:function size:0x8 +actorExecute__10dAcBombf_cFv = .text:0x000008E0; // type:function size:0x138 executeState__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000A20; // type:function size:0x10 -fn_17_A30 = .text:0x00000A30; // type:function size:0x50 -AcBombf__regrowBomb = .text:0x00000A80; // type:function size:0x124 +draw__10dAcBombf_cFv = .text:0x00000A30; // type:function size:0x50 +regrowBomb__10dAcBombf_cFv = .text:0x00000A80; // type:function size:0x124 initializeState_Wait__10dAcBombf_cFv = .text:0x00000BB0; // type:function size:0x4 executeState_Wait__10dAcBombf_cFv = .text:0x00000BC0; // type:function size:0x2DC finalizeState_Wait__10dAcBombf_cFv = .text:0x00000EA0; // type:function size:0x4 @@ -36,7 +36,7 @@ getOldStateID__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c, finalizeState__25sFStateID_c<10dAcBombf_c>CFR10dAcBombf_c = .text:0x000010D0; // type:function size:0x30 executeState__25sFStateID_c<10dAcBombf_c>CFR10dAcBombf_c = .text:0x00001100; // type:function size:0x30 initializeState__25sFStateID_c<10dAcBombf_c>CFR10dAcBombf_c = .text:0x00001130; // type:function size:0x30 -__sinit_\d_a_bombf_cpp = .text:0x00001160; // type:function size:0x10C scope:local +__sinit_\d_a_bombf_cpp = .text:0x00001160; // type:function size:0x10C __dt__25sFStateID_c<10dAcBombf_c>Fv = .text:0x00001270; // type:function size:0x58 isSameName__25sFStateID_c<10dAcBombf_c>CFPCc = .text:0x000012D0; // type:function size:0x88 _ctors = .ctors:0x00000000; // type:label scope:global @@ -49,11 +49,11 @@ g_profile_BOMBF = .data:0x00000000; // type:object size:0x10 data:4byte lbl_17_data_10 = .data:0x00000010; // type:object size:0xC lbl_17_data_1C = .data:0x0000001C; // type:object size:0xC lbl_17_data_28 = .data:0x00000028; // type:object size:0x18 data:string -lbl_17_data_40 = .data:0x00000040; // type:object size:0x80 -lbl_17_data_C0 = .data:0x000000C0; // type:object size:0x30 -lbl_17_data_F0 = .data:0x000000F0; // type:object size:0x30 -lbl_17_data_120 = .data:0x00000120; // type:object size:0x18 -lbl_17_data_138 = .data:0x00000138; // type:object size:0x58 +__vt__10dAcBombf_c = .data:0x00000040; // type:object size:0x80 +__vt__49sFStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c> = .data:0x000000C0; // type:object size:0x30 +__vt__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x000000F0; // type:object size:0x30 +__vt__26sFStateFct_c<10dAcBombf_c> = .data:0x00000120; // type:object size:0x18 +__vt__23sFState_c<10dAcBombf_c> = .data:0x00000138; // type:object size:0x58 lbl_17_data_190 = .data:0x00000190; // type:object size:0x34 lbl_17_data_1C4 = .data:0x000001C4; // type:object size:0x8 __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 3286d0c4c..ff362c437 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -997,6 +997,7 @@ d/col/c/c_m3d_g_lin.cpp: d/col/c/c_m3d_g_pla.cpp: .text start:0x80338430 end:0x80338678 + .sdata2 start:0x8057D048 end:0x8057D04C d/col/c/c_m3d_g_sph.cpp: .text start:0x80338680 end:0x803388D8 @@ -1114,10 +1115,20 @@ d/col/bg/d_bg_w_time.cpp: .sdata2 start:0x8057D230 end:0x8057D240 .bss start:0x805D0F90 end:0x805D0FB4 -d/col/cc/d_cc_shape_colliders.cpp: +d/col/cc/d_cc_d.cpp: .text start:0x80353B50 end:0x80354298 .data start:0x80548340 end:0x80548580 +d/col/cc/d_cc_mass_s.cpp: + .text start:0x803543F0 end:0x80355080 + .data start:0x80548580 end:0x805485A4 + .sdata2 start:0x8057D240 end:0x8057D254 + +d/col/cc/d_cc_s.cpp: + .text start:0x80355080 end:0x80358654 + .data start:0x805485A8 end:0x805485B4 + .sbss start:0x80575D20 end:0x80575D24 + rvl/CX/cx.c: .text start:0x803CEE90 end:0x803D0B20 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 8eed7f28a..8c9ad4ef2 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -920,9 +920,9 @@ fn_800274D0 = .text:0x800274D0; // type:function size:0x40 fn_80027510 = .text:0x80027510; // type:function size:0x4C fn_80027560 = .text:0x80027560; // type:function size:0x5C __ct__13EffectsStructFv = .text:0x800275C0; // type:function size:0x44 -EffectsStruct__ctor = .text:0x80027610; // type:function size:0x44 +__ct__13EffectsStructFP9dAcBase_c = .text:0x80027610; // type:function size:0x44 __dt__13EffectsStructFv = .text:0x80027660; // type:function size:0x78 -fn_800276E0 = .text:0x800276E0; // type:function size:0x84 +remove__13EffectsStructFb = .text:0x800276E0; // type:function size:0x84 fn_80027770 = .text:0x80027770; // type:function size:0xE8 fn_80027860 = .text:0x80027860; // type:function size:0xC8 fn_80027930 = .text:0x80027930; // type:function size:0x130 @@ -13974,8 +13974,8 @@ fn_80258D10 = .text:0x80258D10; // type:function size:0x1C fn_80258D30 = .text:0x80258D30; // type:function size:0x40 AcItem__state_dtor = .text:0x80258D70; // type:function size:0x58 fn_80258DD0 = .text:0x80258DD0; // type:function size:0x88 -AcBomb__ctor = .text:0x80258E60; // type:function size:0x134 -fn_80258FA0 = .text:0x80258FA0; // type:function size:0x58 +dAcBomb_c_classInit__Fv = .text:0x80258E60; // type:function size:0x134 +__dt__21sFState_c<9dAcBomb_c>Fv = .text:0x80258FA0; // type:function size:0x58 fn_80259000 = .text:0x80259000; // type:function size:0x6C fn_80259070 = .text:0x80259070; // type:function size:0xA0 fn_80259110 = .text:0x80259110; // type:function size:0xA4 @@ -13992,7 +13992,7 @@ fn_80259B00 = .text:0x80259B00; // type:function size:0x304 fn_80259E10 = .text:0x80259E10; // type:function size:0x68 fn_80259E80 = .text:0x80259E80; // type:function size:0xB0 fn_80259F30 = .text:0x80259F30; // type:function size:0x58 -fn_80259F90 = .text:0x80259F90; // type:function size:0x150 +setTransformFromFlower__9dAcBomb_cFRC6mMtx_c = .text:0x80259F90; // type:function size:0x150 fn_8025A0E0 = .text:0x8025A0E0; // type:function size:0x20 fn_8025A100 = .text:0x8025A100; // type:function size:0x50 fn_8025A150 = .text:0x8025A150; // type:function size:0x94 @@ -14038,17 +14038,17 @@ fn_8025D0A0 = .text:0x8025D0A0; // type:function size:0x30 AcBomb__sinit = .text:0x8025D0D0; // type:function size:0x420 AcBomb__state_dtor = .text:0x8025D4F0; // type:function size:0x58 fn_8025D550 = .text:0x8025D550; // type:function size:0x88 -AcArrow__ctor = .text:0x8025D5E0; // type:function size:0x110 -fn_8025D6F0 = .text:0x8025D6F0; // type:function size:0x58 -fn_8025D750 = .text:0x8025D750; // type:function size:0x6C -fn_8025D7C0 = .text:0x8025D7C0; // type:function size:0xA0 -fn_8025D860 = .text:0x8025D860; // type:function size:0xA4 -fn_8025D910 = .text:0x8025D910; // type:function size:0x24 -AcArrow__initModels = .text:0x8025D940; // type:function size:0x90 -AcArrow__init = .text:0x8025D9D0; // type:function size:0x184 -fn_8025DB60 = .text:0x8025DB60; // type:function size:0x10 -fn_8025DB70 = .text:0x8025DB70; // type:function size:0x110 -fn_8025DC80 = .text:0x8025DC80; // type:function size:0xA0 +dAcArrow_c_classInit__Fv = .text:0x8025D5E0; // type:function size:0x110 +__dt__23sFState_c<10dAcArrow_c>Fv = .text:0x8025D6F0; // type:function size:0x58 +__dt__26sFStateFct_c<10dAcArrow_c>Fv = .text:0x8025D750; // type:function size:0x6C +__dt__79sStateMgr_c<10dAcArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8025D7C0; // type:function size:0xA0 +__dt__49sFStateMgr_c<10dAcArrow_c,20sStateMethodUsr_FI_c>Fv = .text:0x8025D860; // type:function size:0xA4 +hitCallback__FP12dAcObjBase_cP12dCcD_GObjInfP12dAcObjBase_cP12dCcD_GObjInf = .text:0x8025D910; // type:function size:0x24 +createHeap__10dAcArrow_cFv = .text:0x8025D940; // type:function size:0x90 +create__10dAcArrow_cFv = .text:0x8025D9D0; // type:function size:0x184 +changeState__79sStateMgr_c<10dAcArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8025DB60; // type:function size:0x10 +__dt__10dAcArrow_cFv = .text:0x8025DB70; // type:function size:0x110 +hitCallback__10dAcArrow_cFP12dCcD_GObjInfP12dAcObjBase_cP12dCcD_GObjInf = .text:0x8025DC80; // type:function size:0xA0 fn_8025DD20 = .text:0x8025DD20; // type:function size:0x1AC fn_8025DED0 = .text:0x8025DED0; // type:function size:0x288 fn_8025E160 = .text:0x8025E160; // type:function size:0x480 @@ -14096,9 +14096,9 @@ fn_80260720 = .text:0x80260720; // type:function size:0x10 fn_80260730 = .text:0x80260730; // type:function size:0x30 fn_80260760 = .text:0x80260760; // type:function size:0x30 fn_80260790 = .text:0x80260790; // type:function size:0x30 -AcArrow__initStates = .text:0x802607C0; // type:function size:0x490 -AcArrow__dtor = .text:0x80260C50; // type:function size:0x58 -fn_80260CB0 = .text:0x80260CB0; // type:function size:0x88 +__sinit_\d_a_obj_arrow_cpp = .text:0x802607C0; // type:function size:0x490 scope:local +__dt__25sFStateID_c<10dAcArrow_c>Fv = .text:0x80260C50; // type:function size:0x58 +isSameName__25sFStateID_c<10dAcArrow_c>CFPCc = .text:0x80260CB0; // type:function size:0x88 AcBoomerang__ctor = .text:0x80260D40; // type:function size:0x1CC fn_80260F10 = .text:0x80260F10; // type:function size:0x5C fn_80260F70 = .text:0x80260F70; // type:function size:0x58 @@ -17840,12 +17840,12 @@ createAssertHeap__5mHeapFPQ23EGG4Heap = .text:0x802F15F0; // type:function size: makeHeapOnCurrentGameHeap__5mHeapFUlPCcUlUl = .text:0x802F1640; // type:function size:0x20 mMtx__ctor = .text:0x802F1660; // type:function size:0x44 XrotS__6mMtx_cFRC4mAng = .text:0x802F16B0; // type:function size:0xBC -mMtx__XrotM = .text:0x802F1770; // type:function size:0x4C +XrotM__6mMtx_cFRC4mAng = .text:0x802F1770; // type:function size:0x4C YrotS__6mMtx_cFRC4mAng = .text:0x802F17C0; // type:function size:0xBC YrotM__6mMtx_cFRC4mAng = .text:0x802F1880; // type:function size:0x4C mMtx__ZrotS = .text:0x802F18D0; // type:function size:0xBC ZrotM__6mMtx_cFRC4mAng = .text:0x802F1990; // type:function size:0x4C -mMtx__ZXYrotS = .text:0x802F19E0; // type:function size:0x60 +ZXYrotS__6mMtx_cFRC4mAngRC4mAngRC4mAng = .text:0x802F19E0; // type:function size:0x60 mMtx__ZXYrotM = .text:0x802F1A40; // type:function size:0x60 mMtx__XYZrotS = .text:0x802F1AA0; // type:function size:0x60 mMtx__ZYXrotM = .text:0x802F1B00; // type:function size:0x60 @@ -18740,262 +18740,262 @@ __dt__9cBgW_BgIdFv = .text:0x80328090; // type:function size:0x40 Regist__9cBgW_BgIdFi = .text:0x803280D0; // type:function size:0x8 Release__9cBgW_BgIdFv = .text:0x803280E0; // type:function size:0xC ChkUsed__9cBgW_BgIdCFv = .text:0x803280F0; // type:function size:0x24 -__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 -DivideArea__CalcDivideInfo = .text:0x803282D0; // type:function size:0x198 -DivideArea__CalcArea2 = .text:0x80328470; // type:function size:0x1E0 -__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 -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 -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 -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 -fn_80328D70 = .text:0x80328D70; // type:function size:0xC -fn_80328D80 = .text:0x80328D80; // type:function size:0xC -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 -GetAtActor__12dCcD_GObjInfFv = .text:0x80328DD0; // type:function size:0x4 -CheckCollidedMask__12dCcD_GObjInfFUl = .text:0x80328DE0; // type:function size:0x18 -ActorEnemyBase__getRoomIdCopy = .text:0x80328E00; // type:function size:0x8 -fn_80328E10 = .text:0x80328E10; // type:function size:0xC -UnkCollider__getDamage = .text:0x80328E20; // type:function size:0x8 -UnkCollider__getDamageSpecialFlags = .text:0x80328E30; // type:function size:0x8 -UnkCollider__checkSkywardStrike = .text:0x80328E40; // type:function size:0xC -fn_80328E50 = .text:0x80328E50; // type:function size:0xC -fn_80328E60 = .text:0x80328E60; // type:function size:0xC -fn_80328E70 = .text:0x80328E70; // type:function size:0xC -fn_80328E80 = .text:0x80328E80; // type:function size:0xC -fn_80328E90 = .text:0x80328E90; // type:function size:0xC -fn_80328EA0 = .text:0x80328EA0; // type:function size:0xC -fn_80328EB0 = .text:0x80328EB0; // type:function size:0xC -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 -GetTgActor__12dCcD_GObjInfFv = .text:0x80328F00; // type:function size:0x8 -fn_80328F10 = .text:0x80328F10; // type:function size:0x8 -GetCoActor__12dCcD_GObjInfFv = .text:0x80328F20; // type:function size:0x8 -fn_80328F30 = .text:0x80328F30; // type:function size:0xC -setColliderAtFlags = .text:0x80328F40; // type:function size:0x14 -fn_80328F60 = .text:0x80328F60; // type:function size:0xC -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 -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 -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 +__ct__15cCcD_DivideInfoFv = .text:0x80328120; // type:function size:0x10 +__dt__15cCcD_DivideInfoFv = .text:0x80328130; // type:function size:0x40 +__ct__15cCcD_DivideAreaFv = .text:0x80328170; // type:function size:0x10 +__dt__15cCcD_DivideAreaFv = .text:0x80328180; // type:function size:0x40 +SetArea__15cCcD_DivideAreaFRC8cM3dGAab = .text:0x803281C0; // type:function size:0x104 +CalcDivideInfo__15cCcD_DivideAreaFP15cCcD_DivideInfoRC8cM3dGAab = .text:0x803282D0; // type:function size:0x198 +CalcDivideInfoOverArea__15cCcD_DivideAreaFP15cCcD_DivideInfoRC8cM3dGAab = .text:0x80328470; // type:function size:0x1E0 +__ct__9cCcD_SttsFP12dAcObjBase_c = .text:0x80328650; // type:function size:0x4C +Move__9cCcD_SttsFv = .text:0x803286A0; // type:function size:0x20 +GetID__9cCcD_SttsCFv = .text:0x803286C0; // type:function size:0x1C +PlusCcMove__9cCcD_SttsFfff = .text:0x803286E0; // type:function size:0xA0 +ClrCcMove__9cCcD_SttsFv = .text:0x80328780; // type:function size:0x54 +GetWeight__9cCcD_SttsCFi = .text:0x803287E0; // type:function size:0xD4 +__ct__22cCcD_GAtTgCoCommonBaseFv = .text:0x803288C0; // type:function size:0x2C +__dt__22cCcD_GAtTgCoCommonBaseFv = .text:0x803288F0; // type:function size:0x94 +ClrActorInfo__22cCcD_GAtTgCoCommonBaseFv = .text:0x80328990; // type:function size:0x8 +SetHitActor__22cCcD_GAtTgCoCommonBaseFP12dAcObjBase_c = .text:0x803289A0; // type:function size:0x14 +GetActor__22cCcD_GAtTgCoCommonBaseFv = .text:0x803289C0; // type:function size:0x8 +SubtractEffCounter__22cCcD_GAtTgCoCommonBaseFv = .text:0x803289D0; // type:function size:0x18 +__ct__8cCcD_ObjFv = .text:0x803289F0; // type:function size:0x58 +__dt__8cCcD_ObjFv = .text:0x80328A50; // type:function size:0x7C +fn_80328ad0__8cCcD_ObjFP12dAcObjBase_cUl = .text:0x80328AD0; // type:function size:0x58 +ClrSet__8cCcD_ObjFv = .text:0x80328B30; // type:function size:0x28 +Set__8cCcD_ObjFRC12cCcD_SrcGObj = .text:0x80328B60; // type:function size:0x50 +ClrAtHit__8cCcD_ObjFv = .text:0x80328BB0; // type:function size:0x48 +ClrTgHit__8cCcD_ObjFv = .text:0x80328C00; // type:function size:0x4C +ClrCoHit__8cCcD_ObjFv = .text:0x80328C50; // type:function size:0x4C +GetAtHitPos__8cCcD_ObjCFv = .text:0x80328CA0; // type:function size:0x8 +GetAtHitPos__8cCcD_ObjFv = .text:0x80328CB0; // type:function size:0x8 +GetAtFlag0x2__8cCcD_ObjCFv = .text:0x80328CC0; // type:function size:0xC +GetAtFlag0x4__8cCcD_ObjCFv = .text:0x80328CD0; // type:function size:0xC +GetAtFlag0x8__8cCcD_ObjCFv = .text:0x80328CE0; // type:function size:0xC +GetTgHitPos__8cCcD_ObjCFv = .text:0x80328CF0; // type:function size:0x8 +GetTgHitPos__8cCcD_ObjFv = .text:0x80328D00; // type:function size:0x8 +GetTgFlag0x4__8cCcD_ObjCFv = .text:0x80328D10; // type:function size:0xC +GetTgFlag0x8__8cCcD_ObjCFv = .text:0x80328D20; // type:function size:0xC +GetGObjInfo__8cCcD_ObjFv = .text:0x80328D30; // type:function size:0x4 +ChkAtClawshot__8cCcD_ObjCFv = .text:0x80328D40; // type:function size:0xC +ChkAtClawshotDebug__8cCcD_ObjCFv = .text:0x80328D50; // type:function size:0x8 +ChkAtElectrified__8cCcD_ObjCFv = .text:0x80328D60; // type:function size:0xC +ChkAtElectrifiedExtra__8cCcD_ObjCFv = .text:0x80328D70; // type:function size:0xC +ChkAtWhippable__8cCcD_ObjCFv = .text:0x80328D80; // type:function size:0xC +ChkAtBit24__8cCcD_ObjCFv = .text:0x80328D90; // type:function size:0xC +ChkAtArrowStick__8cCcD_ObjCFv = .text:0x80328DA0; // type:function size:0xC +ChkAtWaterScaleBonk__8cCcD_ObjCFv = .text:0x80328DB0; // type:function size:0xC +ChkAtSwordBonk__8cCcD_ObjCFv = .text:0x80328DC0; // type:function size:0xC +GetAtActor__8cCcD_ObjFv = .text:0x80328DD0; // type:function size:0x4 +ChkTgAtHitType__8cCcD_ObjCFUl = .text:0x80328DE0; // type:function size:0x18 +GetTg_0x58__8cCcD_ObjCFv = .text:0x80328E00; // type:function size:0x8 +ChkTgBit14__8cCcD_ObjCFv = .text:0x80328E10; // type:function size:0xC +GetTgDamage__8cCcD_ObjCFv = .text:0x80328E20; // type:function size:0x8 +GetTgDamageFlags__8cCcD_ObjCFv = .text:0x80328E30; // type:function size:0x8 +ChkTgSkywardStrike__8cCcD_ObjCFv = .text:0x80328E40; // type:function size:0xC +ChkTgBit17__8cCcD_ObjCFv = .text:0x80328E50; // type:function size:0xC +ChkTgBit18__8cCcD_ObjCFv = .text:0x80328E60; // type:function size:0xC +ChkTgBit19__8cCcD_ObjCFv = .text:0x80328E70; // type:function size:0xC +ChkTgBit23__8cCcD_ObjCFv = .text:0x80328E80; // type:function size:0xC +ChkTgBit20__8cCcD_ObjCFv = .text:0x80328E90; // type:function size:0xC +ChkTgBit24__8cCcD_ObjCFv = .text:0x80328EA0; // type:function size:0xC +ChkTgBit25__8cCcD_ObjCFv = .text:0x80328EB0; // type:function size:0xC +GetTgSoundID__8cCcD_ObjCFv = .text:0x80328EC0; // type:function size:0x8 +GetTg_0x6A__8cCcD_ObjCFv = .text:0x80328ED0; // type:function size:0x8 +ChkTgBit8__8cCcD_ObjCFv = .text:0x80328EE0; // type:function size:0xC +GetTg_0x4A__8cCcD_ObjCFv = .text:0x80328EF0; // type:function size:0x8 +GetTgActor__8cCcD_ObjFv = .text:0x80328F00; // type:function size:0x8 +GetTg_0x2C__8cCcD_ObjCFv = .text:0x80328F10; // type:function size:0x8 +GetCoActor__8cCcD_ObjFv = .text:0x80328F20; // type:function size:0x8 +ChkCoBit4__8cCcD_ObjCFv = .text:0x80328F30; // type:function size:0xC +SetAtFlagsUpper__8cCcD_ObjFUl = .text:0x80328F40; // type:function size:0x14 +ChkTgBit1__8cCcD_ObjCFv = .text:0x80328F60; // type:function size:0xC +AdjustHitPos__8cCcD_ObjFff = .text:0x80328F70; // type:function size:0x64 +__ct__14cCcD_ShapeAttrFv = .text:0x80328FE0; // type:function size:0x40 +__dt__14cCcD_ShapeAttrFv = .text:0x80329020; // type:function size:0x5C +Calc__14cCcD_ShapeAttrFRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x80329080; // type:function size:0x8 +GetShapeAccess__14cCcD_ShapeAttrCFPQ214cCcD_ShapeAttr5Shape = .text:0x80329090; // type:function size:0x5C +GetPosBool__14cCcD_ShapeAttrCFP7mVec3_c = .text:0x803290F0; // type:function size:0x8 +CrossAtTg__14cCcD_ShapeAttrFR14cCcD_ShapeAttrP7mVec3_c = .text:0x80329100; // type:function size:0x8 +CrossCo__14cCcD_ShapeAttrFR14cCcD_ShapeAttrPf = .text:0x80329110; // type:function size:0x8 +GetCoP__14cCcD_ShapeAttrFv = .text:0x80329120; // type:function size:0xC +__ct__12cCcD_TriAttrFv = .text:0x80329130; // type:function size:0x3C +__dt__12cCcD_TriAttrFv = .text:0x80329170; // type:function size:0x58 +Calc__12cCcD_TriAttrFRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x803291D0; // type:function size:0x458 +CrossAtTg__12cCcD_TriAttrFR14cCcD_ShapeAttrP7mVec3_c = .text:0x80329630; // type:function size:0x1C +CrossAtTg__12cCcD_TriAttrFR12cCcD_CpsAttrP7mVec3_c = .text:0x80329650; // type:function size:0x10 +CrossAtTg__12cCcD_TriAttrFR12cCcD_CylAttrP7mVec3_c = .text:0x80329660; // type:function size:0x10 +CrossAtTg__12cCcD_TriAttrFR12cCcD_SphAttrP7mVec3_c = .text:0x80329670; // type:function size:0x18 +CrossAtTg__12cCcD_TriAttrFR12cCcD_TriAttrP7mVec3_c = .text:0x80329690; // type:function size:0xC +CrossAtTg__12cCcD_TriAttrFR12cCcD_UnkAttrP7mVec3_c = .text:0x803296A0; // type:function size:0x10 +CrossCo__12cCcD_TriAttrFR14cCcD_ShapeAttrPf = .text:0x803296B0; // type:function size:0x1C +CrossCo__12cCcD_TriAttrFR12cCcD_CpsAttrPf = .text:0x803296D0; // type:function size:0x8 +CrossCo__12cCcD_TriAttrFR12cCcD_TriAttrPf = .text:0x803296E0; // type:function size:0x8 +CrossCo__12cCcD_TriAttrFR12cCcD_UnkAttrPf = .text:0x803296F0; // type:function size:0x8 +CrossCo__12cCcD_TriAttrFR12cCcD_CylAttrPf = .text:0x80329700; // type:function size:0x8 +CrossCo__12cCcD_TriAttrFR12cCcD_SphAttrPf = .text:0x80329710; // type:function size:0x8 +CalcAabBox__12cCcD_TriAttrFv = .text:0x80329720; // type:function size:0xD4 +GetNVec__12cCcD_TriAttrCFRC7mVec3_cP7mVec3_c = .text:0x80329800; // type:function size:0x98 +GetShapeAccess__12cCcD_TriAttrCFPQ214cCcD_ShapeAttr5Shape = .text:0x803298A0; // type:function size:0x54 +GetPos__12cCcD_TriAttrCFPQ34nw4r4math4VEC3 = .text:0x80329900; // type:function size:0x1C +TranslateXZ__12cCcD_TriAttrFff = .text:0x80329920; // type:function size:0x4C +__ct__12cCcD_UnkAttrFv = .text:0x80329970; // type:function size:0x4C __dt__8cM3dGUnkFv = .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 -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 -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 scope:local -@44@__dt__15dCcD_ShapeAttr5Fv = .text:0x8032BC70; // type:function size:0x8 +__dt__12cCcD_UnkAttrFv = .text:0x80329A00; // type:function size:0x58 +Calc__12cCcD_UnkAttrFRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x80329A60; // type:function size:0x1B0 +CrossAtTg__12cCcD_UnkAttrFR14cCcD_ShapeAttrP7mVec3_c = .text:0x80329C10; // type:function size:0x1C +CrossAtTg__12cCcD_UnkAttrFR12cCcD_CpsAttrP7mVec3_c = .text:0x80329C30; // type:function size:0xC +CrossAtTg__12cCcD_UnkAttrFR12cCcD_TriAttrP7mVec3_c = .text:0x80329C40; // type:function size:0xC +CrossAtTg__12cCcD_UnkAttrFR12cCcD_UnkAttrP7mVec3_c = .text:0x80329C50; // type:function size:0xC +CrossAtTg__12cCcD_UnkAttrFR12cCcD_CylAttrP7mVec3_c = .text:0x80329C60; // type:function size:0xC +CrossAtTg__12cCcD_UnkAttrFR12cCcD_SphAttrP7mVec3_c = .text:0x80329C70; // type:function size:0xC +CrossCo__12cCcD_UnkAttrFR14cCcD_ShapeAttrPf = .text:0x80329C80; // type:function size:0x1C +CrossCo__12cCcD_UnkAttrFR12cCcD_CpsAttrPf = .text:0x80329CA0; // type:function size:0x84 +CrossCo__12cCcD_UnkAttrFR12cCcD_TriAttrPf = .text:0x80329D30; // type:function size:0x8 +CrossCo__12cCcD_UnkAttrFR12cCcD_UnkAttrPf = .text:0x80329D40; // type:function size:0x8 +CrossCo__12cCcD_UnkAttrFR12cCcD_CylAttrPf = .text:0x80329D50; // type:function size:0xC +CrossCo__12cCcD_UnkAttrFR12cCcD_SphAttrPf = .text:0x80329D60; // type:function size:0xC +CalcAabBox__12cCcD_UnkAttrFv = .text:0x80329D70; // type:function size:0x164 +GetNVec__12cCcD_UnkAttrCFRC7mVec3_cP7mVec3_c = .text:0x80329EE0; // type:function size:0x18 +GetPos__12cCcD_UnkAttrCFPQ34nw4r4math4VEC3 = .text:0x80329F00; // type:function size:0x1C +Set__12cCcD_UnkAttrFRC15cCcD_SrcUnkAttr = .text:0x80329F20; // type:function size:0x5C +GetCoP__12cCcD_UnkAttrFv = .text:0x80329F80; // type:function size:0x8 +TranslateXZ__12cCcD_UnkAttrFff = .text:0x80329F90; // type:function size:0x8 +__ct__12cCcD_CpsAttrFv = .text:0x80329FA0; // type:function size:0x44 +__dt__12cCcD_CpsAttrFv = .text:0x80329FF0; // type:function size:0x58 +Set__12cCcD_CpsAttrFRC15cCcD_SrcCpsAttr = .text:0x8032A050; // type:function size:0x5C +GetCoP__12cCcD_CpsAttrFv = .text:0x8032A0B0; // type:function size:0x8 +CrossAtTg__12cCcD_CpsAttrFR14cCcD_ShapeAttrP7mVec3_c = .text:0x8032A0C0; // type:function size:0x1C +CrossCo__12cCcD_CpsAttrFR14cCcD_ShapeAttrPf = .text:0x8032A0E0; // type:function size:0x1C +CrossCo__12cCcD_CpsAttrFR12cCcD_TriAttrPf = .text:0x8032A100; // type:function size:0x8 +CalcCyl__FRC8cM3dGCylRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x8032A110; // type:function size:0x308 +Calc__12cCcD_CpsAttrFRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x8032A420; // type:function size:0x28C +CrossAtTg__12cCcD_CpsAttrFR12cCcD_CpsAttrP7mVec3_c = .text:0x8032A6B0; // type:function size:0x14 +CrossAtTg__12cCcD_CpsAttrFR12cCcD_CylAttrP7mVec3_c = .text:0x8032A6D0; // type:function size:0xC +CrossAtTg__12cCcD_CpsAttrFR12cCcD_SphAttrP7mVec3_c = .text:0x8032A6E0; // type:function size:0xC +CrossAtTg__12cCcD_CpsAttrFR12cCcD_TriAttrP7mVec3_c = .text:0x8032A6F0; // type:function size:0xC +CrossAtTg__12cCcD_CpsAttrFR12cCcD_UnkAttrP7mVec3_c = .text:0x8032A700; // type:function size:0xC +SetVirtCenter__12cCcD_CpsAttrFP7mVec3_c = .text:0x8032A710; // type:function size:0xB0 +CrossCoCommon__12cCcD_CpsAttrFR14cCcD_ShapeAttrf = .text:0x8032A7C0; // type:function size:0xBC +CrossCo__12cCcD_CpsAttrFR12cCcD_CpsAttrPf = .text:0x8032A880; // type:function size:0xA4 +CrossCo__12cCcD_CpsAttrFR12cCcD_CylAttrPf = .text:0x8032A930; // type:function size:0x84 +CrossCo__12cCcD_CpsAttrFR12cCcD_SphAttrPf = .text:0x8032A9C0; // type:function size:0x8C +CrossCo__12cCcD_CpsAttrFR12cCcD_UnkAttrPf = .text:0x8032AA50; // type:function size:0x8C +CalcAabBox__12cCcD_CpsAttrFv = .text:0x8032AAE0; // type:function size:0x90 +GetNVec__12cCcD_CpsAttrCFRC7mVec3_cP7mVec3_c = .text:0x8032AB70; // type:function size:0x188 +GetPos__12cCcD_CpsAttrCFPQ34nw4r4math4VEC3 = .text:0x8032AD00; // type:function size:0x1C +GetShapeAccess__12cCcD_CpsAttrCFPQ214cCcD_ShapeAttr5Shape = .text:0x8032AD20; // type:function size:0x50 +TranslateXZ__12cCcD_CpsAttrFff = .text:0x8032AD70; // type:function size:0x34 +__ct__12cCcD_CylAttrFv = .text:0x8032ADB0; // type:function size:0x3C +__dt__12cCcD_CylAttrFv = .text:0x8032ADF0; // type:function size:0x58 +Set__12cCcD_CylAttrFRC15cCcD_SrcCylAttr = .text:0x8032AE50; // type:function size:0x68 +GetCoP__12cCcD_CylAttrFv = .text:0x8032AEC0; // type:function size:0x8 +Calc__12cCcD_CylAttrFRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x8032AED0; // type:function size:0x28 +CrossAtTg__12cCcD_CylAttrFR14cCcD_ShapeAttrP7mVec3_c = .text:0x8032AF00; // type:function size:0x1C +CrossAtTg__12cCcD_CylAttrFR12cCcD_CpsAttrP7mVec3_c = .text:0x8032AF20; // type:function size:0x10 +CrossAtTg__12cCcD_CylAttrFR12cCcD_CylAttrP7mVec3_c = .text:0x8032AF30; // type:function size:0xC +CrossAtTg__12cCcD_CylAttrFR12cCcD_SphAttrP7mVec3_c = .text:0x8032AF40; // type:function size:0x2C +CrossAtTg__12cCcD_CylAttrFR12cCcD_TriAttrP7mVec3_c = .text:0x8032AF70; // type:function size:0xC +CrossAtTg__12cCcD_CylAttrFR12cCcD_UnkAttrP7mVec3_c = .text:0x8032AF80; // type:function size:0xC +CrossCo__12cCcD_CylAttrFR14cCcD_ShapeAttrPf = .text:0x8032AF90; // type:function size:0x1C +CrossCo__12cCcD_CylAttrFR12cCcD_TriAttrPf = .text:0x8032AFB0; // type:function size:0x8 +CrossCo__12cCcD_CylAttrFR12cCcD_CylAttrPf = .text:0x8032AFC0; // type:function size:0xC +CrossCo__12cCcD_CylAttrFR12cCcD_SphAttrPf = .text:0x8032AFD0; // type:function size:0xC +CrossCo__12cCcD_CylAttrFR12cCcD_CpsAttrPf = .text:0x8032AFE0; // type:function size:0x84 +CrossCo__12cCcD_CylAttrFR12cCcD_UnkAttrPf = .text:0x8032B070; // type:function size:0xC +CalcAabBox__12cCcD_CylAttrFv = .text:0x8032B080; // type:function size:0x64 +GetNVec__12cCcD_CylAttrCFRC7mVec3_cP7mVec3_c = .text:0x8032B0F0; // type:function size:0xE8 +GetShapeAccess__12cCcD_CylAttrCFPQ214cCcD_ShapeAttr5Shape = .text:0x8032B1E0; // type:function size:0x5C +GetPos__12cCcD_CylAttrCFPQ34nw4r4math4VEC3 = .text:0x8032B240; // type:function size:0x1C +TranslateXZ__12cCcD_CylAttrFff = .text:0x8032B260; // type:function size:0x1C +__ct__12cCcD_SphAttrFv = .text:0x8032B280; // type:function size:0x44 +__dt__12cCcD_SphAttrFv = .text:0x8032B2D0; // type:function size:0x58 +Set__12cCcD_SphAttrFRC15cCcD_SrcSphAttr = .text:0x8032B330; // type:function size:0x50 +GetCoP__12cCcD_SphAttrFv = .text:0x8032B380; // type:function size:0x8 +Calc__12cCcD_SphAttrFRC7mVec3_cRC7mVec3_cP7mVec3_c = .text:0x8032B390; // type:function size:0x190 +CrossAtTg__12cCcD_SphAttrFR14cCcD_ShapeAttrP7mVec3_c = .text:0x8032B520; // type:function size:0x1C +CrossAtTg__12cCcD_SphAttrFR12cCcD_CpsAttrP7mVec3_c = .text:0x8032B540; // type:function size:0x10 +CrossAtTg__12cCcD_SphAttrFR12cCcD_CylAttrP7mVec3_c = .text:0x8032B550; // type:function size:0x30 +CrossAtTg__12cCcD_SphAttrFR12cCcD_SphAttrP7mVec3_c = .text:0x8032B580; // type:function size:0x10 +CrossAtTg__12cCcD_SphAttrFR12cCcD_TriAttrP7mVec3_c = .text:0x8032B590; // type:function size:0x14 +CrossAtTg__12cCcD_SphAttrFR12cCcD_UnkAttrP7mVec3_c = .text:0x8032B5B0; // type:function size:0xC +CrossCo__12cCcD_SphAttrFR14cCcD_ShapeAttrPf = .text:0x8032B5C0; // type:function size:0x1C +CrossCo__12cCcD_SphAttrFR12cCcD_TriAttrPf = .text:0x8032B5E0; // type:function size:0x8 +CrossCo__12cCcD_SphAttrFR12cCcD_CylAttrPf = .text:0x8032B5F0; // type:function size:0x10 +CrossCo__12cCcD_SphAttrFR12cCcD_SphAttrPf = .text:0x8032B600; // type:function size:0xC +CrossCo__12cCcD_SphAttrFR12cCcD_CpsAttrPf = .text:0x8032B610; // type:function size:0x8C +CrossCo__12cCcD_SphAttrFR12cCcD_UnkAttrPf = .text:0x8032B6A0; // type:function size:0xC +CalcAabBox__12cCcD_SphAttrFv = .text:0x8032B6B0; // type:function size:0x8 +GetNVec__12cCcD_SphAttrCFRC7mVec3_cP7mVec3_c = .text:0x8032B6C0; // type:function size:0xA4 +GetShapeAccess__12cCcD_SphAttrCFPQ214cCcD_ShapeAttr5Shape = .text:0x8032B770; // type:function size:0x58 +GetPos__12cCcD_SphAttrCFPQ34nw4r4math4VEC3 = .text:0x8032B7D0; // type:function size:0x1C +GetPosBool__12cCcD_SphAttrCFP7mVec3_c = .text:0x8032B7F0; // type:function size:0x20 +TranslateXZ__12cCcD_SphAttrFff = .text:0x8032B810; // type:function size:0x1C +__ct__10cCcD_ObjAtFv = .text:0x8032B830; // type:function size:0x44 +__dt__10cCcD_ObjAtFv = .text:0x8032B880; // type:function size:0x58 +Set__10cCcD_ObjAtFRC14cCcD_SrcGObjAt = .text:0x8032B8E0; // type:function size:0x94 +SetAtFlag__10cCcD_ObjAtFUl = .text:0x8032B980; // type:function size:0x14 +AdjustHitPos__10cCcD_ObjAtFff = .text:0x8032B9A0; // type:function size:0x1C +__ct__10cCcD_ObjTgFv = .text:0x8032B9C0; // type:function size:0x6C +__dt__10cCcD_ObjTgFv = .text:0x8032BA30; // type:function size:0x58 +Set__10cCcD_ObjTgFRC14cCcD_SrcGObjTg = .text:0x8032BA90; // type:function size:0x64 +AdjustHitPos__10cCcD_ObjTgFff = .text:0x8032BB00; // type:function size:0x34 +__ct__10cCcD_ObjCoFv = .text:0x8032BB40; // type:function size:0x48 +__dt__10cCcD_ObjCoFv = .text:0x8032BB90; // type:function size:0x58 +Set__10cCcD_ObjCoFRC14cCcD_SrcGObjCo = .text:0x8032BBF0; // type:function size:0x18 +SetCoFlag__10cCcD_ObjCoFUl = .text:0x8032BC10; // type:function size:0x1C +AdjustHitPos__10cCcD_ObjCoFff = .text:0x8032BC30; // type:function size:0x4 +__sinit_\c_cc_d_cpp = .text:0x8032BC40; // type:function size:0x2C scope:local +@44@__dt__12cCcD_UnkAttrFv = .text:0x8032BC70; // type:function size:0x8 cM2d_CrossCirLin__FR8cM2dGCirffffPfPf = .text:0x8032BC80; // type:function size:0x238 fn_8032BEC0 = .text:0x8032BEC0; // type:function size:0x40 cM3d_Len2dSqPntAndSegLine__FffffffPfPfPf = .text:0x8032BF00; // type:function size:0xB0 -cM3d_Len3dSqPntAndSegLine__FPC8cM3dGLinPCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3PfPf = .text:0x8032BFB0; // type:function size:0x11C +cM3d_Len3dSqPntAndSegLine__FRC8cM3dGLinRCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3PfPf = .text:0x8032BFB0; // type:function size:0x11C cM3d_SignedLenPlaAndPos__FPC8cM3dGPlaPCQ34nw4r4math4VEC3 = .text:0x8032C0D0; // type:function size:0x84 cM3d_CalcPla__FPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3Pf = .text:0x8032C160; // type:function size:0x10C cM3d_Check_LinLin__FPC8cM3dGLinPC8cM3dGLinPfPf = .text:0x8032C270; // type:function size:0x298 cM3d_Cross_LinPla__FPC8cM3dGLinPC8cM3dGPlaPQ34nw4r4math4VEC3bb = .text:0x8032C510; // type:function size:0x1D0 cM3d_Cross_MinMaxBoxLine__FPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3 = .text:0x8032C6E0; // type:function size:0xD34 cM3d_InclusionCheckPosIn3PosBox3d__FPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3f = .text:0x8032D420; // type:function size:0x134 -cM3d_CrossX_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3f = .text:0x8032D560; // type:function size:0x224 -cM3d_CrossX_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032D790; // type:function size:0x228 -cM3d_CrossY_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032D9C0; // type:function size:0x228 +cM3d_CrossX_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3f = .text:0x8032D560; // type:function size:0x224 +cM3d_CrossX_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032D790; // type:function size:0x228 +cM3d_CrossY_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032D9C0; // type:function size:0x228 cM3d_CrossY_Tri_Front__FRCQ34nw4r4math4VEC3RCQ34nw4r4math4VEC3RCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3 = .text:0x8032DBF0; // type:function size:0x184 -cM3d_CrossY_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3Pf = .text:0x8032DD80; // type:function size:0x8C -cM3d_CrossY_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3f = .text:0x8032DE10; // type:function size:0x224 -cM3d_CrossY_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3PC10cM3d_RangePf = .text:0x8032E040; // type:function size:0xDC -cM3d_CrossZ_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3f = .text:0x8032E120; // type:function size:0x224 -cM3d_CrossZ_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032E350; // type:function size:0x228 -cM3d_CrossZ_Tri__FPC8cM3dGTriPCQ34nw4r4math4VEC3Pf = .text:0x8032E580; // type:function size:0x8C -cM3d_Cross_LinTri__FPC8cM3dGLinPC8cM3dGTriPQ34nw4r4math4VEC3bb = .text:0x8032E610; // type:function size:0x2F0 -cM3d_Cross_LinTri__FPC8cM3dGLinPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PC8cM3dGTriPQ34nw4r4math4VEC3bb = .text:0x8032E900; // type:function size:0x2E4 -cM3d_Cross_LinTri_Easy__FPC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032EBF0; // type:function size:0xD4 -cM3d_Cross_SphPnt__FPC8cM3dGSphPCQ34nw4r4math4VEC3 = .text:0x8032ECD0; // type:function size:0x44 -cM3d_Cross_LinSph__FPC8cM3dGLinPC8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x8032ED20; // type:function size:0x2CC +cM3d_CrossY_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3Pf = .text:0x8032DD80; // type:function size:0x8C +cM3d_CrossY_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3f = .text:0x8032DE10; // type:function size:0x224 +cM3d_CrossY_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3PC10cM3d_RangePf = .text:0x8032E040; // type:function size:0xDC +cM3d_CrossZ_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3f = .text:0x8032E120; // type:function size:0x224 +cM3d_CrossZ_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032E350; // type:function size:0x228 +cM3d_CrossZ_Tri__FRC8cM3dGTriPCQ34nw4r4math4VEC3Pf = .text:0x8032E580; // type:function size:0x8C +cM3d_Cross_LinTri__FRC8cM3dGLinPC8cM3dGTriPQ34nw4r4math4VEC3bb = .text:0x8032E610; // type:function size:0x2F0 +cM3d_Cross_LinTri__FRC8cM3dGLinPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PC8cM3dGTriPQ34nw4r4math4VEC3bb = .text:0x8032E900; // type:function size:0x2E4 +cM3d_Cross_LinTri_Easy__FRC8cM3dGTriPCQ34nw4r4math4VEC3 = .text:0x8032EBF0; // type:function size:0xD4 +cM3d_Cross_SphPnt__FRC8cM3dGSphPCQ34nw4r4math4VEC3 = .text:0x8032ECD0; // type:function size:0x44 +cM3d_Cross_LinSph__FRC8cM3dGLinPC8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x8032ED20; // type:function size:0x2CC cM3d_Cross_LinSph_CrossPos__FRC8cM3dGSphRC8cM3dGLinPQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x8032EFF0; // type:function size:0x438 -cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphPf = .text:0x8032F430; // type:function size:0x558 -cM3d_Cross_CylSph__FPC8cM3dGCylPC8cM3dGSphPQ34nw4r4math4VEC3Pf = .text:0x8032F990; // type:function size:0x300 -cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPf = .text:0x8032FC90; // type:function size:0xE4 -cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPfPf = .text:0x8032FD80; // type:function size:0x98 -cM3d_Cross_SphSph__FPC8cM3dGSphPC8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x8032FE20; // type:function size:0xE4 -cM3d_CalcSphVsTriCrossPoint__FPC8cM3dGSphPC8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x8032FF10; // type:function size:0xFC -cM3d_Cross_SphTri__FPC8cM3dGSphPC8cM3dGTriPQ34nw4r4math4VEC3PfPQ34nw4r4math4VEC3 = .text:0x80330010; // type:function size:0x330 -cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylPf = .text:0x80330340; // type:function size:0x12C -cM3d_Cross_CylCyl__FPC8cM3dGCylPC8cM3dGCylPQ34nw4r4math4VEC3 = .text:0x80330470; // type:function size:0x1C4 -cM3d_Cross_CylTri__FPC8cM3dGCylPC8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x80330640; // type:function size:0x320 +cM3d_Cross_CylSph__FRC8cM3dGCylRC8cM3dGSphPf = .text:0x8032F430; // type:function size:0x558 +cM3d_Cross_CylSph__FRC8cM3dGCylRC8cM3dGSphPQ34nw4r4math4VEC3Pf = .text:0x8032F990; // type:function size:0x300 +cM3d_Cross_SphSph__FRC8cM3dGSphRC8cM3dGSphPf = .text:0x8032FC90; // type:function size:0xE4 +cM3d_Cross_SphSph__FRC8cM3dGSphRC8cM3dGSphPfPf = .text:0x8032FD80; // type:function size:0x98 +cM3d_Cross_SphSph__FRC8cM3dGSphRC8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x8032FE20; // type:function size:0xE4 +cM3d_CalcSphVsTriCrossPoint__FRC8cM3dGSphRC8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x8032FF10; // type:function size:0xFC +cM3d_Cross_SphTri__FRC8cM3dGSphRC8cM3dGTriPQ34nw4r4math4VEC3PfPQ34nw4r4math4VEC3 = .text:0x80330010; // type:function size:0x330 +cM3d_Cross_CylCyl__FRC8cM3dGCylRC8cM3dGCylPf = .text:0x80330340; // type:function size:0x12C +cM3d_Cross_CylCyl__FRC8cM3dGCylRC8cM3dGCylPQ34nw4r4math4VEC3 = .text:0x80330470; // type:function size:0x1C4 +cM3d_Cross_CylTri__FRC8cM3dGCylRC8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x80330640; // type:function size:0x320 fn_80330960 = .text:0x80330960; // type:function size:0x34 -cM3d_Cross_CylLin__FPC8cM3dGCylPC8cM3dGLinPQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803309A0; // type:function size:0xB30 -cM3d_Cross_CylPntPnt__FPC8cM3dGCylPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803314D0; // type:function size:0x5C -cM3d_Cross_CylPnt__FPC8cM3dGCylPCQ34nw4r4math4VEC3 = .text:0x80331530; // type:function size:0x64 +cM3d_Cross_CylLin__FRC8cM3dGCylRC8cM3dGLinPQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803309A0; // type:function size:0xB30 +cM3d_Cross_CylPntPnt__FRC8cM3dGCylPCQ34nw4r4math4VEC3PCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803314D0; // type:function size:0x5C +cM3d_Cross_CylPnt__FRC8cM3dGCylPCQ34nw4r4math4VEC3 = .text:0x80331530; // type:function size:0x64 fn_803315A0 = .text:0x803315A0; // type:function size:0x9F8 fn_80331FA0 = .text:0x80331FA0; // type:function size:0x2BC -fn_80332260 = .text:0x80332260; // type:function size:0x19C8 +cM3d_Cross_CpsCps__FRC8cM3dGCpsRC8cM3dGCpsPQ34nw4r4math4VEC3PfPf = .text:0x80332260; // type:function size:0x19C8 fn_80333C30 = .text:0x80333C30; // type:function size:0x100 -fn_80333D30 = .text:0x80333D30; // type:function size:0x244 +cM3d_Cross_CpsCyl__FRC8cM3dGCpsRC8cM3dGCylPQ34nw4r4math4VEC3 = .text:0x80333D30; // type:function size:0x244 cM3d_Cross_CpsSph_CrossPos__FRC8cM3dGCpsRC8cM3dGSphRCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x80333F80; // type:function size:0x14C cM3d_Cross_CpsSph__FRC8cM3dGCpsRC8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x803340D0; // type:function size:0x628 cM3d_Cross_TriTri__FRC8cM3dGTriRC8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x80334700; // type:function size:0x2B8 -cM3d_Cross_CpsTri__FRC8cM3dGCps8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x803349C0; // type:function size:0x360 +cM3d_Cross_CpsTri__FRC8cM3dGCpsRC8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x803349C0; // type:function size:0x360 fn_80334D20 = .text:0x80334D20; // type:function size:0x1C4 cM3d_CalcVecZAngle__FRCQ34nw4r4math4VEC3P7mAng3_c = .text:0x80334EF0; // type:function size:0xA0 fn_80334F90 = .text:0x80334F90; // type:function size:0x110 @@ -19003,19 +19003,19 @@ fn_803350A0 = .text:0x803350A0; // type:function size:0x18 cM3d_PlaneCrossLineProcWork__FfffffffPfPf = .text:0x803350C0; // type:function size:0x2C cM3d_2PlaneCrossLine__FRC8cM3dGPlaRC8cM3dGPlaP8cM3dGLin = .text:0x803350F0; // type:function size:0x194 cM3d_3PlaneCrossPos__FRC8cM3dGPlaRC8cM3dGPlaRC8cM3dGPlaPQ34nw4r4math4VEC3 = .text:0x80335290; // type:function size:0x144 -cM3d_lineVsPosSuisenCross__FPC8cM3dGLinPCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803353E0; // type:function size:0x10 +cM3d_lineVsPosSuisenCross__FRC8cM3dGLinRCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803353E0; // type:function size:0x10 cM3d_lineVsPosSuisenCross__FRCQ34nw4r4math4VEC3RCQ34nw4r4math4VEC3RCQ34nw4r4math4VEC3PQ34nw4r4math4VEC3 = .text:0x803353F0; // type:function size:0xEC -fn_803354e0__FP8cM3dGUnkP8cM3dGUnkPQ34nw4r4math4VEC3 = .text:0x803354E0; // type:function size:0xB20 +cM3d_Cross_UnkTri__FRC8cM3dGUnkR8cM3dGTriPQ34nw4r4math4VEC3 = .text:0x803354E0; // type:function size:0xB20 fn_80336000 = .text:0x80336000; // type:function size:0x108 -fn_80336110__FP8cM3dGCylP8cM3dGUnkPQ34nw4r4math4VEC3 = .text:0x80336110; // type:function size:0x3C4 -fn_803364e0__FP8cM3dGCylP8cM3dGUnkPf = .text:0x803364E0; // type:function size:0x858 +cM3d_Cross_CylUnk__FRC8cM3dGCylR8cM3dGUnkPQ34nw4r4math4VEC3 = .text:0x80336110; // type:function size:0x3C4 +cM3d_Cross_CylUnk__FRC8cM3dGCylR8cM3dGUnkPf = .text:0x803364E0; // type:function size:0x858 fn_80336D40 = .text:0x80336D40; // type:function size:0x4C -fn_80336d90__FP8cM3dGCpsP8cM3dGUnkPQ34nw4r4math4VEC3 = .text:0x80336D90; // type:function size:0x68C +cM3d_Cross_CpsUnk__FRC8cM3dGCpsR8cM3dGUnkPQ34nw4r4math4VEC3 = .text:0x80336D90; // type:function size:0x68C fn_80337420 = .text:0x80337420; // type:function size:0x264 -fn_80337690__FP8cM3dGUnkP8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x80337690; // type:function size:0xE4 -fn_80337780__FP8cM3dGUnkP8cM3dGSphPf = .text:0x80337780; // type:function size:0x308 -fn_80337A90 = .text:0x80337A90; // type:function size:0x80 -fn_80337B10 = .text:0x80337B10; // type:function size:0x48 +cM3d_Cross_UnkSph__FRC8cM3dGUnkR8cM3dGSphPQ34nw4r4math4VEC3 = .text:0x80337690; // type:function size:0xE4 +cM3d_Cross_UnkSph__FRC8cM3dGUnkR8cM3dGSphPf = .text:0x80337780; // type:function size:0x308 +cM3d_Normalize__FPQ34nw4r4math4VEC3 = .text:0x80337A90; // type:function size:0x80 +cM3d_Normalize_Ex__FPQ34nw4r4math4VEC3 = .text:0x80337B10; // type:function size:0x48 SetMin__8cM3dGAabFRC7mVec3_c = .text:0x80337B60; // type:function size:0x40 SetMax__8cM3dGAabFRC7mVec3_c = .text:0x80337BA0; // type:function size:0x40 CalcCenter__8cM3dGAabCFR7mVec3_c = .text:0x80337BE0; // type:function size:0x44 @@ -19028,14 +19028,14 @@ __ct__8cM3dGCpsFv = .text:0x80337EA0; // type:function size:0x18 SetR__8cM3dGCpsFf = .text:0x80337EC0; // type:function size:0x20 Set_0x1C__8cM3dGCpsFf = .text:0x80337EE0; // type:function size:0x8 Set__8cM3dGCpsFRC7mVec3_cRC7mVec3_cf = .text:0x80337EF0; // type:function size:0x34 -fn_80337f30__8cM3dGCpsFP8cM3dGUnkP7mVec3_c = .text:0x80337F30; // type:function size:0x4 +Cross__8cM3dGCpsFR8cM3dGUnkP7mVec3_c = .text:0x80337F30; // type:function size:0x4 fn_80337f40__8cM3dGCpsCFRC7mVec3_c = .text:0x80337F40; // type:function size:0xD8 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__8cM3dGCylFP8cM3dGUnkP7mVec3_c = .text:0x803380E0; // type:function size:0x4 -fn_803380f0__8cM3dGCylFP8cM3dGUnkPf = .text:0x803380F0; // type:function size:0x4 +Cross__8cM3dGCylFR8cM3dGUnkP7mVec3_c = .text:0x803380E0; // type:function size:0x4 +Cross__8cM3dGCylFR8cM3dGUnkPf = .text:0x803380F0; // type:function size:0x4 Cross__8cM3dGCylCFRC7mVec3_c = .text:0x80338100; // type:function size:0x6C Clamp__8cM3dGCylCFRC7mVec3_cR7mVec3_c = .text:0x80338170; // type:function size:0x1D8 SetStartEnd__8cM3dGLinFRCQ34nw4r4math4VEC3RCQ34nw4r4math4VEC3 = .text:0x80338350; // type:function size:0x34 @@ -19051,8 +19051,8 @@ SetC__8cM3dGSphFPC7mVec3_c = .text:0x80338690; // type:function size:0x1C Set__8cM3dGSphFPC7mVec3_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__8cM3dGSphFP8cM3dGUnkP7mVec3_c = .text:0x80338750; // type:function size:0x10 -fn_80338760__8cM3dGSphFP8cM3dGUnkPf = .text:0x80338760; // type:function size:0x10 +Cross__8cM3dGSphFR8cM3dGUnkP7mVec3_c = .text:0x80338750; // type:function size:0x10 +Cross__8cM3dGSphFR8cM3dGUnkPf = .text:0x80338760; // type:function size:0x10 GetYDist__8cM3dGSphCFf = .text:0x80338770; // type:function size:0x6C Cross__8cM3dGSphFPC8cM3dGTriPfP7mVec3_c = .text:0x803387E0; // type:function size:0x10 Clamp__8cM3dGSphCFRC7mVec3_cR7mVec3_c = .text:0x803387F0; // type:function size:0xE0 @@ -19062,13 +19062,13 @@ __ct__8cM3dGUnkFv = .text:0x80338940; // type:function size:0xB4 Set__8cM3dGUnkFRC7mVec3_cRC7mVec3_c = .text:0x80338A00; // type:function size:0x144 Update__8cM3dGUnkFv = .text:0x80338B50; // type:function size:0xA0 GetStartEnd__8cM3dGUnkFR7mVec3_cR7mVec3_c = .text:0x80338BF0; // type:function size:0x34 -fn_80338c30__8cM3dGUnkFP8cM3dGCpsP7mVec3_c = .text:0x80338C30; // type:function size:0x10 -fn_80338c40__8cM3dGUnkFP8cM3dGUnkP7mVec3_c = .text:0x80338C40; // type:function size:0x5C -fn_80338ca0__8cM3dGUnkFv = .text:0x80338CA0; // type:function size:0x8 -fn_80338cb0__8cM3dGUnkFP8cM3dGCylP7mVec3_c = .text:0x80338CB0; // type:function size:0x10 -fn_80338cc0__8cM3dGUnkFP8cM3dGCylPf = .text:0x80338CC0; // type:function size:0x10 -fn_80338cd0__8cM3dGUnkFP8cM3dGSphP7mVec3_c = .text:0x80338CD0; // type:function size:0x4 -fn_80338ce0__8cM3dGUnkFP8cM3dGSphPf = .text:0x80338CE0; // type:function size:0x4 +Cross__8cM3dGUnkFR8cM3dGCpsP7mVec3_c = .text:0x80338C30; // type:function size:0x10 +Cross__8cM3dGUnkFR8cM3dGTriP7mVec3_c = .text:0x80338C40; // type:function size:0x5C +Cross__8cM3dGUnkFR8cM3dGUnkP7mVec3_c = .text:0x80338CA0; // type:function size:0x8 +Cross__8cM3dGUnkFR8cM3dGCylP7mVec3_c = .text:0x80338CB0; // type:function size:0x10 +Cross__8cM3dGUnkFR8cM3dGCylPf = .text:0x80338CC0; // type:function size:0x10 +Cross__8cM3dGUnkFR8cM3dGSphP7mVec3_c = .text:0x80338CD0; // type:function size:0x4 +Cross__8cM3dGUnkFR8cM3dGSphPf = .text:0x80338CE0; // type:function size:0x4 Set__8cM3dGUnkFRC6mMtx_c = .text:0x80338CF0; // type:function size:0x64 Set__8cM3dGUnkFRC7mVec3_cRC4mAng = .text:0x80338D60; // type:function size:0x78 Cross__8cM3dGUnkFRC7mVec3_c = .text:0x80338DE0; // type:function size:0xBC @@ -19694,94 +19694,94 @@ fn_80353920 = .text:0x80353920; // type:function size:0xDC fn_80353A00 = .text:0x80353A00; // type:function size:0x128 GetIsDraw__8dBgWTimeFi = .text:0x80353B30; // type:function size:0x8 DrawOnMap__8dBgWTimeFib = .text:0x80353B40; // type:function size:0x4 -__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_CpsFv = .text:0x80353B50; // type:function size:0x4C +__dt__8dCcD_CpsFv = .text:0x80353BA0; // type:function size:0x68 +Set__8dCcD_CpsFRC11dCcD_SrcCps = .text:0x80353C10; // type:function size:0x44 +GetShapeAttr__8dCcD_CpsFv = .text:0x80353C60; // type:function size:0x10 +unknownCalc__8dCcD_CpsFv = .text:0x80353C70; // type:function size:0x14 +__ct__8dCcD_TriFv = .text:0x80353C90; // type:function size:0x4C +__dt__8dCcD_TriFv = .text:0x80353CE0; // type:function size:0x68 +Set__8dCcD_TriFRC11dCcD_SrcTri = .text:0x80353D50; // type:function size:0x4 +GetShapeAttr__8dCcD_TriFv = .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 +Set__8dCcD_CylFRC11dCcD_SrcCyl = .text:0x80353E30; // type:function size:0x44 +GetShapeAttr__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 +Set__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 +GetShapeAttr__8dCcD_SphFv = .text:0x80354100; // type:function size:0x10 +__ct__8dCcD_UnkFv = .text:0x80354110; // type:function size:0x54 +__dt__8dCcD_UnkFv = .text:0x80354170; // type:function size:0x68 +Set__8dCcD_UnkFRC11dCcD_SrcUnk = .text:0x803541E0; // type:function size:0x44 +GetShapeAttr__8dCcD_UnkFv = .text:0x80354230; // type:function size:0x10 +@272@__dt__8dCcD_CpsFv = .text:0x80354240; // type:function size:0x8 +@272@__dt__8dCcD_TriFv = .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 +@316@__dt__8dCcD_UnkFv = .text:0x80354280; // type:function size:0x8 +@272@__dt__8dCcD_UnkFv = .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 fn_80354380 = .text:0x80354380; // type:function size:0x48 fn_803543D0 = .text:0x803543D0; // type:function size:0x14 -fn_803543F0 = .text:0x803543F0; // type:function size:0x40 -fn_80354430 = .text:0x80354430; // type:function size:0x5C -fn_80354490 = .text:0x80354490; // type:function size:0x10 -fn_803544A0 = .text:0x803544A0; // type:function size:0x24 -fn_803544D0 = .text:0x803544D0; // type:function size:0x10 -fn_803544E0 = .text:0x803544E0; // type:function size:0x40 -fn_80354520 = .text:0x80354520; // type:function size:0x1C -fn_80354540 = .text:0x80354540; // type:function size:0xA4 -fn_803545F0 = .text:0x803545F0; // type:function size:0xB4 -fn_803546B0 = .text:0x803546B0; // type:function size:0x30 -fn_803546E0 = .text:0x803546E0; // type:function size:0x68 -fn_80354750 = .text:0x80354750; // type:function size:0x240 -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 -getColliderManager__15ColliderManagerFv = .text:0x80355080; // type:function size:0x8 -ColliderManager__Ct = .text:0x80355090; // type:function size:0x428 -ColliderManager__ctor = .text:0x803554C0; // type:function size:0x4C -fn_80355510 = .text:0x80355510; // type:function size:0x70 -ColliderManager__init = .text:0x80355580; // type:function size:0x3C -fn_803555C0 = .text:0x803555C0; // type:function size:0x34 -fn_80355600 = .text:0x80355600; // type:function size:0x30 -fn_80355630 = .text:0x80355630; // type:function size:0x218 -fn_80355850 = .text:0x80355850; // type:function size:0x1CC -fn_80355A20 = .text:0x80355A20; // type:function size:0x8CC -fn_803562F0 = .text:0x803562F0; // type:function size:0x170 -fn_80356460 = .text:0x80356460; // type:function size:0x138 -ColliderManager__calcHits1 = .text:0x803565A0; // type:function size:0x168 -fn_80356710 = .text:0x80356710; // type:function size:0xD4 -fn_803567F0 = .text:0x803567F0; // type:function size:0xF0 -fn_803568E0 = .text:0x803568E0; // type:function size:0xEC -fn_803569D0 = .text:0x803569D0; // type:function size:0xE8 -fn_80356AC0 = .text:0x80356AC0; // type:function size:0x258 -fn_80356D20 = .text:0x80356D20; // type:function size:0x2A4 -fn_80356FD0 = .text:0x80356FD0; // type:function size:0x184 -fn_80357160 = .text:0x80357160; // type:function size:0x21C -fn_80357380 = .text:0x80357380; // type:function size:0x274 -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 -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 -ColliderManager__CalcArea = .text:0x803581E0; // type:function size:0x1D0 -fn_803583B0 = .text:0x803583B0; // type:function size:0xA4 -fn_80358460 = .text:0x80358460; // type:function size:0x8 -fn_80358470 = .text:0x80358470; // type:function size:0x114 -fn_80358590 = .text:0x80358590; // type:function size:0xC -fn_803585A0 = .text:0x803585A0; // type:function size:0xB4 +__ct__12dCcMassS_ObjFv = .text:0x803543F0; // type:function size:0x40 +__dt__12dCcMassS_ObjFv = .text:0x80354430; // type:function size:0x5C +Set__12dCcMassS_ObjFP8cCcD_ObjUcPFP12dAcObjBase_cP7mVec3_cUl_v = .text:0x80354490; // type:function size:0x10 +Clear__12dCcMassS_ObjFv = .text:0x803544A0; // type:function size:0x24 +__ct__15dCcMassS_HitInfFv = .text:0x803544D0; // type:function size:0x10 +__dt__15dCcMassS_HitInfFv = .text:0x803544E0; // type:function size:0x40 +ClearPointer__15dCcMassS_HitInfFv = .text:0x80354520; // type:function size:0x1C +__ct__12dCcMassS_MngFv = .text:0x80354540; // type:function size:0xA4 +__dt__12dCcMassS_MngFv = .text:0x803545F0; // type:function size:0xB4 +Ct__12dCcMassS_MngFv = .text:0x803546B0; // type:function size:0x30 +SetAttr__12dCcMassS_MngFffUcUc = .text:0x803546E0; // type:function size:0x68 +Prepare__12dCcMassS_MngFv = .text:0x80354750; // type:function size:0x240 +Chk__12dCcMassS_MngFP7mVec3_cPP12dAcObjBase_cP15dCcMassS_HitInf = .text:0x80354990; // type:function size:0x504 +Clear__12dCcMassS_MngFv = .text:0x80354EA0; // type:function size:0xAC +SetObj__12dCcMassS_MngFP8cCcD_ObjUc = .text:0x80354F50; // type:function size:0x9C +SetArea__12dCcMassS_MngFP8cCcD_ObjUcPFP12dAcObjBase_cP7mVec3_cUl_v = .text:0x80354FF0; // type:function size:0x90 +GetInstance__4dCcSFv = .text:0x80355080; // type:function size:0x8 +Ct_cCcS__4dCcSFv = .text:0x80355090; // type:function size:0x428 +__ct__4dCcSFv = .text:0x803554C0; // type:function size:0x4C +__dt__4dCcSFv = .text:0x80355510; // type:function size:0x70 +Ct__4dCcSFv = .text:0x80355580; // type:function size:0x3C +Dt__4dCcSFv = .text:0x803555C0; // type:function size:0x34 +ChkRemoveActor__4dCcSFP12dAcObjBase_c = .text:0x80355600; // type:function size:0x30 +ChkNoHitAtTg__4dCcSFP8cCcD_ObjP8cCcD_Obj = .text:0x80355630; // type:function size:0x218 +ChkAtTgCommonHitInf__4dCcSFP8cCcD_ObjP8cCcD_Obj = .text:0x80355850; // type:function size:0x1CC +ChkAtTg__4dCcSFv = .text:0x80355A20; // type:function size:0x8CC +ChkNoHitCo__4dCcSFP8cCcD_ObjP8cCcD_Obj = .text:0x803562F0; // type:function size:0x170 +SetCoCommonHitInf__4dCcSFP8cCcD_ObjP7mVec3_cP8cCcD_ObjP7mVec3_cf = .text:0x80356460; // type:function size:0x138 +ChkCo__4dCcSFv = .text:0x803565A0; // type:function size:0x168 +ChkSheildFrontRange__4dCcSFP8cCcD_ObjP8cCcD_Obj = .text:0x80356710; // type:function size:0xD4 +ChkShield__4dCcSFP8cCcD_ObjP8cCcD_ObjPPFP12dAcObjBase_cP8cCcD_ObjP12dAcObjBase_cP8cCcD_Obj_i = .text:0x803567F0; // type:function size:0xF0 +ChkAtTgHitAfterCross__4dCcSFbbP8cCcD_ObjP8cCcD_Obj = .text:0x803568E0; // type:function size:0xEC +SetCoObjInf__4dCcSFbbP8cCcD_ObjP8cCcD_Obj = .text:0x803569D0; // type:function size:0xE8 +SetPosCorrect__4dCcSFP8cCcD_ObjP7mVec3_cP8cCcD_ObjP7mVec3_cf = .text:0x80356AC0; // type:function size:0x258 +CalcParticleAngle__4dCcSFP8cCcD_ObjP8cCcD_ObjP7mAng3_cb = .text:0x80356D20; // type:function size:0x2A4 +fn_80356fd0__4dCcSFP7mVec3_cP8cCcD_ObjP8cCcD_Obj = .text:0x80356FD0; // type:function size:0x184 +ProcAtTgHitmark__4dCcSFP8cCcD_ObjP8cCcD_ObjP7mVec3_cUlP7mVec3_c = .text:0x80357160; // type:function size:0x21C +SetAtTgObjInf__4dCcSFbbP8cCcD_ObjP8cCcD_ObjP7mVec3_cb = .text:0x80357380; // type:function size:0x274 +ChkCamera__4dCcSFR7mVec3_cR7mVec3_cP12dAcObjBase_cP12dAcObjBase_cP12dAcObjBase_cf = .text:0x80357600; // type:function size:0x1E8 +ChkCameraPoint__4dCcSFRC7mVec3_cRC7mVec3_cR7mVec3_cP12dAcObjBase_cP12dAcObjBase_cP12dAcObjBase_cf = .text:0x803577F0; // type:function size:0x2D4 +ChkCo__4dCcSFRC7mVec3_cP12dAcObjBase_c = .text:0x80357AD0; // type:function size:0x1B4 +fn_80357c90__4dCcSFRC7mVec3_cRC7mVec3_cUlPPv = .text:0x80357C90; // type:function size:0x218 +Set__4dCcSFP8cCcD_Obj = .text:0x80357EB0; // type:function size:0x13C +MoveAfterCheck__4dCcSFv = .text:0x80357FF0; // type:function size:0x4 +RemoveDeadObj__4dCcSFv = .text:0x80358000; // type:function size:0x1DC +CalcArea__4dCcSFv = .text:0x803581E0; // type:function size:0x1D0 +Move__4dCcSFv = .text:0x803583B0; // type:function size:0xA4 +MassClear__4dCcSFv = .text:0x80358460; // type:function size:0x8 +SetArea__4dCcSFP6mMtx_c = .text:0x80358470; // type:function size:0x114 +ClearArea__4dCcSFv = .text:0x80358590; // type:function size:0xC +AdjustHitPos__4dCcSFv = .text:0x803585A0; // type:function size:0xB4 fn_80358660 = .text:0x80358660; // type:function size:0x1C fn_80358680 = .text:0x80358680; // type:function size:0x2C fn_803586B0 = .text:0x803586B0; // type:function size:0x7C @@ -34378,7 +34378,7 @@ lbl_80533090 = .data:0x80533090; // type:object size:0x18 lbl_805330A8 = .data:0x805330A8; // type:object size:0x18 lbl_805330C0 = .data:0x805330C0; // type:object size:0xC lbl_805330CC = .data:0x805330CC; // type:object size:0xDC -lbl_805331A8 = .data:0x805331A8; // type:object size:0xA0 +__vt__15dShadowCircle_c = .data:0x805331A8; // type:object size:0xA0 scope:weak lbl_80533248 = .data:0x80533248; // type:object size:0xC lbl_80533254 = .data:0x80533254; // type:object size:0x14 lbl_80533268 = .data:0x80533268; // type:object size:0x10 @@ -34413,11 +34413,11 @@ lbl_805344A0 = .data:0x805344A0; // type:object size:0x2C lbl_805344CC = .data:0x805344CC; // type:object size:0xC lbl_805344D8 = .data:0x805344D8; // type:object size:0x18 jumptable_805344F0 = .data:0x805344F0; // type:object size:0x20 scope:local -AcBomb__vtable = .data:0x80534510; // type:object size:0x80 -lbl_80534590 = .data:0x80534590; // type:object size:0x30 -lbl_805345C0 = .data:0x805345C0; // type:object size:0x30 -lbl_805345F0 = .data:0x805345F0; // type:object size:0x18 -lbl_80534608 = .data:0x80534608; // type:object size:0x168 +__vt__9dAcBomb_c = .data:0x80534510; // type:object size:0x80 +__vt__47sFStateMgr_c<9dAcBomb_c,20sStateMethodUsr_FI_c> = .data:0x80534590; // type:object size:0x30 +__vt__77sStateMgr_c<9dAcBomb_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x805345C0; // type:object size:0x30 +__vt__24sFStateFct_c<9dAcBomb_c> = .data:0x805345F0; // type:object size:0x18 +__vt__21sFState_c<9dAcBomb_c> = .data:0x80534608; // type:object size:0x168 lbl_80534770 = .data:0x80534770; // type:object size:0x38 g_profile_ARROW = .data:0x805347A8; // type:object size:0x38 lbl_805347E0 = .data:0x805347E0; // type:object size:0x2C data:4byte @@ -36105,19 +36105,19 @@ __vt__11cBgS_GndChk = .data:0x80547398; // type:object size:0xC __vt__11cBgS_LinChk = .data:0x805473A8; // type:object size:0x10 __vt__13cBgS_ShdwDraw = .data:0x805473B8; // type:object size:0xC __vt__9cBgW_BgId = .data:0x805473C8; // 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 +__vt__12cCcD_SphAttr = .data:0x805473D8; // type:object size:0x5C +__vt__12cCcD_CylAttr = .data:0x80547434; // type:object size:0x5C +__vt__12cCcD_UnkAttr = .data:0x80547490; // type:object size:0x68 +__vt__12cCcD_TriAttr = .data:0x805474F8; // type:object size:0x5C +__vt__12cCcD_CpsAttr = .data:0x80547554; // type:object size:0x5C +__vt__8cCcD_Obj = .data:0x805475B0; // type:object size:0x14 +__vt__14cCcD_ShapeAttr = .data:0x805475C4; // type:object size:0x5C +__vt__10cCcD_ObjCo = .data:0x80547620; // type:object size:0xC +__vt__10cCcD_ObjTg = .data:0x8054762C; // type:object size:0xC +__vt__10cCcD_ObjAt = .data:0x80547638; // type:object size:0xC +__vt__22cCcD_GAtTgCoCommonBase = .data:0x80547644; // type:object size:0xC +__vt__15cCcD_DivideArea = .data:0x80547650; // type:object size:0xC +__vt__15cCcD_DivideInfo = .data:0x8054765C; // type:object size:0xC __vt__8cM2dGCir = .data:0x80547668; // type:object size:0xC __vt__8cM3dGUnk = .data:0x80547678; // type:object size:0xC __vt__10cPartition = .data:0x80547688; // type:object size:0xC @@ -36173,15 +36173,15 @@ __vt__9dBgW_Base = .data:0x80547F10; // type:object size:0x108 __vt__8dBgWKCol = .data:0x80548018; // type:object size:0x108 __vt__6dBgWSv = .data:0x80548120; // type:object size:0x114 __vt__8dBgWTime = .data:0x80548238; // type:object size:0x108 -__vt__9dCcD_Aabb = .data:0x80548340; // type:object size:0x7C +__vt__8dCcD_Unk = .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 -lbl_805485A8 = .data:0x805485A8; // type:object size:0x10 +__vt__8dCcD_Tri = .data:0x805484A0; // type:object size:0x70 +__vt__8dCcD_Cps = .data:0x80548510; // type:object size:0x70 +__vt__12dCcMassS_Mng = .data:0x80548580; // type:object size:0xC +__vt__15dCcMassS_HitInf = .data:0x8054858C; // type:object size:0xC +__vt__12dCcMassS_Obj = .data:0x80548598; // type:object size:0xC +__vt__4dCcS = .data:0x805485A8; // type:object size:0xC lbl_805485B8 = .data:0x805485B8; // type:object size:0xC lbl_805485C4 = .data:0x805485C4; // type:object size:0xC lbl_805485D0 = .data:0x805485D0; // type:object size:0xA8 @@ -40409,7 +40409,7 @@ sSplGrpCheck__4cBgW = .sbss:0x80575D14; // type:object size:0x1 data:byte sSphCheck__4cBgW = .sbss:0x80575D15; // type:object size:0x1 data:byte l_start = .sbss:0x80575D18; // type:object size:0x4 data:4byte l_wcsbuf_num = .sbss:0x80575D1C; // type:object size:0x4 data:4byte -COLLIDER_MANAGER = .sbss:0x80575D20; // type:object size:0x8 data:4byte +sInstance__4dCcS = .sbss:0x80575D20; // type:object size:0x4 data:4byte lbl_80575D28 = .sbss:0x80575D28; // type:object size:0x8 data:4byte lbl_80575D30 = .sbss:0x80575D30; // type:object size:0x8 data:4byte BGM_MGR = .sbss:0x80575D38; // type:object size:0x4 data:4byte @@ -46167,7 +46167,7 @@ lbl_8057D240 = .sdata2:0x8057D240; // type:object size:0x4 data:float lbl_8057D244 = .sdata2:0x8057D244; // type:object size:0x4 data:float lbl_8057D248 = .sdata2:0x8057D248; // type:object size:0x4 data:float lbl_8057D24C = .sdata2:0x8057D24C; // type:object size:0x4 data:float -lbl_8057D250 = .sdata2:0x8057D250; // type:object size:0x8 data:float +lbl_8057D250 = .sdata2:0x8057D250; // type:object size:0x4 data:float lbl_8057D258 = .sdata2:0x8057D258; // type:object size:0x4 data:float lbl_8057D25C = .sdata2:0x8057D25C; // type:object size:0x4 data:float lbl_8057D260 = .sdata2:0x8057D260; // type:object size:0x4 data:float @@ -46180,7 +46180,7 @@ lbl_8057D280 = .sdata2:0x8057D280; // type:object size:0x4 data:float lbl_8057D284 = .sdata2:0x8057D284; // type:object size:0x4 data:float lbl_8057D288 = .sdata2:0x8057D288; // type:object size:0x4 data:float lbl_8057D28C = .sdata2:0x8057D28C; // type:object size:0x4 data:float -lbl_8057D290 = .sdata2:0x8057D290; // type:object size:0x8 data:float +lbl_8057D290 = .sdata2:0x8057D290; // type:object size:0x4 data:float lbl_8057D298 = .sdata2:0x8057D298; // type:object size:0x4 data:float lbl_8057D29C = .sdata2:0x8057D29C; // type:object size:0x4 data:float lbl_8057D2A0 = .sdata2:0x8057D2A0; // type:object size:0x4 data:float @@ -48906,7 +48906,7 @@ AcItem__STATE_WAIT_TURN_OFF = .bss:0x805B4838; // type:object size:0x40 data:4by AcItem__STATE_WAIT_SACRED_DEW_GET_EFFECT = .bss:0x805B4878; // type:object size:0x30 data:4byte lbl_805B48A8 = .bss:0x805B48A8; // type:object size:0x10 AcBomb__STATE_WAIT = .bss:0x805B48B8; // type:object size:0x40 data:4byte -AcBomb__STATE_FLOWER_WAIT = .bss:0x805B48F8; // type:object size:0x40 data:4byte +StateID_FlowerWait__9dAcBomb_c = .bss:0x805B48F8; // type:object size:0x40 data:4byte AcBomb__STATE_EXPLODE = .bss:0x805B4938; // type:object size:0x40 data:4byte AcBomb__STATE_CARRY = .bss:0x805B4978; // type:object size:0x40 data:4byte AcBomb__STATE_WIND_CARRY = .bss:0x805B49B8; // type:object size:0x30 data:4byte @@ -49234,7 +49234,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 -m_virtual_center__14dCcD_ShapeAttr = .bss:0x805D0128; // type:object size:0xC data:float +sVirtualCenter__14cCcD_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:0xC diff --git a/configure.py b/configure.py index 474e5cd1d..1a1589309 100644 --- a/configure.py +++ b/configure.py @@ -438,11 +438,11 @@ def nw4rLib(lib_name, objects, extra_cflags=[]): Object(NonMatching, "d/col/c/c_m2d.cpp"), Object(NonMatching, "d/col/c/c_m3d.cpp"), Object(Matching, "d/col/c/c_m3d_g_aab.cpp"), - Object(NonMatching, "d/col/c/c_m3d_g_cir.cpp"), + # Object(NonMatching, "d/col/c/c_m3d_g_cir.cpp"), Object(Matching, "d/col/c/c_m3d_g_cps.cpp"), Object(Matching, "d/col/c/c_m3d_g_cyl.cpp"), Object(Matching, "d/col/c/c_m3d_g_lin.cpp"), - Object(NonMatching, "d/col/c/c_m3d_g_pla.cpp"), + Object(Matching, "d/col/c/c_m3d_g_pla.cpp"), Object(Matching, "d/col/c/c_m3d_g_sph.cpp"), Object(Matching, "d/col/c/c_m3d_g_tri.cpp"), Object(Matching, "d/col/c/c_m3d_g_unk.cpp"), @@ -465,7 +465,9 @@ def nw4rLib(lib_name, objects, extra_cflags=[]): Object(NonMatching, "d/col/bg/d_bg_w_kcol.cpp"), Object(Matching, "d/col/bg/d_bg_w_sv.cpp"), Object(NonMatching, "d/col/bg/d_bg_w_time.cpp"), - Object(Matching, "d/col/cc/d_cc_shape_colliders.cpp"), + Object(Matching, "d/col/cc/d_cc_d.cpp"), + Object(Matching, "d/col/cc/d_cc_mass_s.cpp"), + Object(NonMatching, "d/col/cc/d_cc_s.cpp"), ], }, { @@ -1702,9 +1704,7 @@ def nw4rLib(lib_name, objects, extra_cflags=[]): Rel(NonMatching, "d_a_obj_under_cloud", "REL/d/a/obj/d_a_obj_under_cloud.cpp"), Rel(NonMatching, "d_a_obj_updown_lava", "REL/d/a/obj/d_a_obj_updown_lava.cpp"), Rel(Matching, "d_a_obj_utajima", "REL/d/a/obj/d_a_obj_utajima.cpp"), - Rel( - Matching, "d_a_obj_utajima_island", "REL/d/a/obj/d_a_obj_utajima_island.cpp" - ), + Rel(Matching, "d_a_obj_utajima_island", "REL/d/a/obj/d_a_obj_utajima_island.cpp"), Rel(Matching, "d_a_obj_utajima_lv2", "REL/d/a/obj/d_a_obj_utajima_lv2.cpp"), Rel( NonMatching, diff --git a/include/d/a/d_a_bombf.h b/include/d/a/d_a_bombf.h index 7306ed031..83ab3a9f9 100644 --- a/include/d/a/d_a_bombf.h +++ b/include/d/a/d_a_bombf.h @@ -2,18 +2,40 @@ #define D_A_BOMBF_H #include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_bomb.h" +#include "d/col/c/c_bg_s_poly_info.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" +#include "toBeSorted/time_area_mgr.h" class dAcBombf_c : public dAcObjBase_c { public: dAcBombf_c() : mStateMgr(*this, sStateID::null) {} virtual ~dAcBombf_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int actorExecute() override; + virtual int draw() override; + virtual int doDelete() override; + + virtual int actorCreate() override; + virtual int actorPostCreate() override; STATE_FUNC_DECLARE(dAcBombf_c, Wait); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcBombf_c); + void regrowBomb(); + + /* 0x330 */ m3d::smdl_c mModel; + /* 0x34C */ STATE_MGR_DECLARE(dAcBombf_c); + /* 0x388 */ dAcRef_c mBombRef; + /* 0x394 */ UNKWORD field_0x394; + /* 0x398 */ cBgS_PolyInfo field_0x398; + /* 0x3C4 */ TimeAreaStruct mTimeAreaStruct; + /* 0x3D0 */ bool field_0x3D0; + /* 0x3D1 */ u8 mDespawnSceneFlag; + /* 0x3D2 */ u8 field_0x3D2; + /* 0x3D3 */ u8 field_0x3D3; + /* 0x3D4 */ u8 field_0x3D4; }; #endif diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index a5969ffdc..adfa8a3e2 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -223,6 +223,7 @@ class dAcPy_c : public dAcObjBase_c { /* 0x35C */ u32 mForceOrPreventActionFlags; /* 0x360 */ UNKWORD field_0x360; /* 0x364 */ u32 mActionFlags; + /* 0x368 */ u32 mActionFlagsCont; inline bool checkFlags0x340(u32 mask) const { return (someFlags_0x340 & mask) != 0; diff --git a/include/d/a/obj/d_a_obj_arrow.h b/include/d/a/obj/d_a_obj_arrow.h new file mode 100644 index 000000000..2cfb6b470 --- /dev/null +++ b/include/d/a/obj/d_a_obj_arrow.h @@ -0,0 +1,60 @@ +#ifndef D_A_OBJ_ARROW_H +#define D_A_OBJ_ARROW_H + +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/c/c_bg_s_poly_info.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/cc/d_cc_d.h" +#include "m/m3d/m_smdl.h" +#include "nw4r/g3d/g3d_resfile.h" +#include "s/s_State.hpp" +#include "s/s_StateID.hpp" +#include "toBeSorted/effects_struct.h" + +class dAcArrow_c : public dAcObjBase_c { +public: + dAcArrow_c() : mPolyInfo(), mStateMgr(*this, sStateID::null) {} + virtual ~dAcArrow_c(); + + virtual bool createHeap() override; + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; + + STATE_FUNC_DECLARE(dAcArrow_c, Wait); + STATE_FUNC_DECLARE(dAcArrow_c, Move); + STATE_FUNC_DECLARE(dAcArrow_c, ActorStop); + STATE_FUNC_DECLARE(dAcArrow_c, BgStop); + STATE_FUNC_DECLARE(dAcArrow_c, Bound); + + void hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB); + +public: + static cCcD_SrcGObj sCcSrcInf; + static dCcD_SrcCps sCc1; + static const dCcD_SrcSph sCc2; + + /* 0x330 */ nw4r::g3d::ResFile mResFile; + /* 0x334 */ m3d::smdl_c mModel; + /* 0x350 */ dAcRef_c mRef1; + /* 0x35C */ dCcD_Cps mCcCps; + /* 0x4CC */ dCcD_Sph mCcSph; + /* 0x61C */ cBgS_PolyInfo mPolyInfo; // ?? + /* 0x648 */ EffectsStruct mEffects; + /* 0x67C */ u32 field_0x67C; + /* 0x680 */ u8 mSubType; + /* 0x681 */ u8 field_0x681; + /* 0x682 */ u8 mDespawnTimer; + /* 0x684 */ s16 field_0x684; + /* 0x686 */ u8 field_0x686[0x688 - 0x686]; + /* 0x688 */ u16 field_0x688; + /* 0x68A */ u16 field_0x68A; + /* 0x68C */ u8 field_0x68C[0x6A8 - 0x68C]; + /* 0x6A8 */ f32 field_0x6A8; + /* 0x6AC */ u8 field_0x6AC[0x6F8 - 0x6AC]; + /* 0x6F8 */ dAcRef_c mRef2; + /* 0x704 */ STATE_MGR_DECLARE(dAcArrow_c); +}; + +#endif diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h index 23555bd96..97d0e5ed0 100644 --- a/include/d/a/obj/d_a_obj_base.h +++ b/include/d/a/obj/d_a_obj_base.h @@ -2,8 +2,8 @@ #define D_A_OBJ_BASE_H #include "d/a/d_a_base.h" +#include "d/col/c/c_cc_d.h" #include "d/col/c/c_m3d_g_aab.h" -#include "d/col/cc/d_cc_d.h" #include "m/m3d/m_shadow.h" #include "m/m3d/m_smdl.h" #include "m/m_angle.h" @@ -11,6 +11,7 @@ #include "m/m_vec.h" #include "m/types_m.h" + // Size: 0xA8 struct ActorCarryStruct { /* 0x00 */ fLiNdBa_c actorLink; @@ -68,7 +69,7 @@ class dAcObjBase_c : public dAcBase_c { /* 0x1B0 */ u8 unk_0x1B0[0x1C0 - 0x1B0]; - /* 0x1C0 */ UnkCCDStruct mCCdStruct; + /* 0x1C0 */ cCcD_Stts mStts; /* 0x1FC */ mVec3_c mStartingPos; /* 0x208 */ mAng3_c mStartingRot; diff --git a/include/d/a/d_a_bomb.h b/include/d/a/obj/d_a_obj_bomb.h similarity index 57% rename from include/d/a/d_a_bomb.h rename to include/d/a/obj/d_a_obj_bomb.h index 3f2ce62df..686a49871 100644 --- a/include/d/a/d_a_bomb.h +++ b/include/d/a/obj/d_a_obj_bomb.h @@ -1,20 +1,32 @@ -#ifndef D_A_BOMB_H -#define D_A_BOMB_H +#ifndef D_A_OBJ_BOMB_H +#define D_A_OBJ_BOMB_H +#include "common.h" #include "d/a/obj/d_a_obj_base.h" #include "d/col/bg/d_bg_s_acch.h" #include "d/col/bg/d_bg_s_lin_chk.h" -#include "d/col/cc/d_cc_shape_colliders.h" +#include "d/col/c/c_bg_s_poly_info.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_shadow.h" #include "m/m3d/m_smdl.h" +#include "m/m_mtx.h" #include "nw4r/g3d/g3d_resfile.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" +#include "s/s_StateID.hpp" #include "toBeSorted/effects_struct.h" +// This may need its own file and could be independent of a bomb +class UnkBombColInfo : public cBgS_PolyInfo { +public: + UnkBombColInfo() : mField_0x10(0), mField_0x14(0), mField_0x18(0) {} + u32 mField_0x10; + u32 mField_0x14; + u32 mField_0x18; +}; class dAcBomb_c : public dAcObjBase_c { public: - dAcBomb_c(); + dAcBomb_c() : mStateMgr(*this, sStateID::null), mSelfRef(this), mEffect1(this), mEffect2(this) {} virtual ~dAcBomb_c(); /* vt 0x08 */ virtual int create() override; @@ -32,19 +44,28 @@ class dAcBomb_c : public dAcObjBase_c { STATE_FUNC_DECLARE(dAcBomb_c, Carry); STATE_FUNC_DECLARE(dAcBomb_c, WindCarry); -private: + void setTransformFromFlower(const mMtx_c &); + +public: /* 0x330 */ nw4r::g3d::ResFile mBrres; /* 0x334 */ m3d::smdl_c mMdl; - /* 0x350 */ u8 _0[0x358 - 0x350]; + /* 0x350 */ dShadowCircle_c mShdw; /* 0x358 */ dBgS_BombAcch mAcch; /* 0x708 */ dBgS_AcchCir mAcchCir; /* 0x764 */ dCcD_Sph mCcDSph; /* 0x8B4 */ mMtx_c mMtx; /* 0x8E4 */ dBgS_BombLinChk mLinChk; - /* 0x97C */ u8 _1[0x9D4 - 0x97C]; + /* 0x97C */ UnkBombColInfo mUnkInfo; + /* 0x9B4 */ u8 _0[0x9B8 - 0x9B4]; + /* 0x9B8 */ dAcBomb_c *mSelfRef; + /* 0x9BC */ u8 _1[0x9D4 - 0x9BC]; /* 0x9D4 */ EffectsStruct mEffect1; /* 0xA08 */ EffectsStruct mEffect2; - /* 0xA3C */ u8 _2[0xA9C - 0xA3C]; + /* 0xA3C */ u8 _2[0xA44 - 0xA3C]; + /* 0xA44 */ s16 mField_0xA44; + /* 0xA46 */ u8 _3[0xA50 - 0xA46]; + /* 0xA50 */ f32 mField_0xA50; + /* 0xA54 */ u8 _4[0xA9C - 0xA54]; /* 0xA9C */ STATE_MGR_DECLARE(dAcBomb_c); }; diff --git a/include/d/a/obj/d_a_obj_spike.h b/include/d/a/obj/d_a_obj_spike.h index cadb8407c..2dace3437 100644 --- a/include/d/a/obj/d_a_obj_spike.h +++ b/include/d/a/obj/d_a_obj_spike.h @@ -2,7 +2,7 @@ #define D_A_O_SPIKE_H #include "d/a/obj/d_a_obj_base.h" -#include "d/col/cc/d_cc_shape_colliders.h" +#include "d/col/cc/d_cc_d.h" #include "m/m3d/m_smdl.h" #include "m/m_vec.h" #include "nw4r/g3d/g3d_resfile.h" @@ -25,11 +25,11 @@ class dAcOspike_c : public dAcObjBase_c { static const mVec3_c sVec2; private: - static dCcD_SrcAabb sCcSrc; + static dCcD_SrcUnk sCcSrc; nw4r::g3d::ResFile mResFile; m3d::smdl_c mMdl; - dCcD_Aabb mCollision; + dCcD_Unk mCollision; STATE_MGR_DECLARE(dAcOspike_c); }; 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 index bdc949767..c796b92e6 100644 --- a/include/d/a/obj/d_a_obj_toD3_stone_figure.h +++ b/include/d/a/obj/d_a_obj_toD3_stone_figure.h @@ -3,7 +3,7 @@ #include "c/c_math.h" #include "d/a/obj/d_a_obj_base.h" -#include "d/col/cc/d_cc_shape_colliders.h" +#include "d/col/cc/d_cc_d.h" #include "m/m3d/m_smdl.h" #include "nw4r/g3d/g3d_resfile.h" #include "s/s_State.hpp" diff --git a/include/d/a/obj/d_a_obj_triforce.h b/include/d/a/obj/d_a_obj_triforce.h index aaa6f6546..eab787bbf 100644 --- a/include/d/a/obj/d_a_obj_triforce.h +++ b/include/d/a/obj/d_a_obj_triforce.h @@ -3,7 +3,7 @@ #include "c/c_math.h" #include "d/a/obj/d_a_obj_base.h" -#include "d/col/cc/d_cc_shape_colliders.h" +#include "d/col/cc/d_cc_d.h" #include "m/m3d/m_anmtexsrt.h" #include "m/m3d/m_smdl.h" #include "m/m_angle.h" diff --git a/include/d/col/c/c_bg_s_poly_info.h b/include/d/col/c/c_bg_s_poly_info.h index 7ab2943fd..25e414523 100644 --- a/include/d/col/c/c_bg_s_poly_info.h +++ b/include/d/col/c/c_bg_s_poly_info.h @@ -2,6 +2,7 @@ #define C_BG_S_POLY_INFO_H #include "common.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/c/c_bg_w.h" #include "d/col/c/c_m3d_g_pla.h" #include "m/m_vec.h" diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index be4685beb..3a1796b16 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -1,4 +1,916 @@ #ifndef C_CC_D_H #define C_CC_D_H +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/col/c/c_m3d.h" +#include "d/col/c/c_m3d_g_aab.h" +#include "d/col/c/c_m3d_g_cps.h" +#include "d/col/c/c_m3d_g_cyl.h" +#include "d/col/c/c_m3d_g_sph.h" +#include "d/col/c/c_m3d_g_tri.h" +#include "d/col/c/c_m3d_g_unk.h" +#include "m/m_vec.h" +#include "nw4r/types_nw4r.h" + +class dAcObjBase_c; + +class cCcD_CpsAttr; +class cCcD_TriAttr; +class cCcD_UnkAttr; +class cCcD_CylAttr; +class cCcD_SphAttr; + +class cCcD_DivideInfo { +private: + /* 0x00 */ u32 mXDivInfo; + /* 0x04 */ u32 mYDivInfo; + /* 0x08 */ u32 mZDivInfo; + /* 0x0C vtable */ +public: + cCcD_DivideInfo(); + virtual ~cCcD_DivideInfo(); + + // Following two funcs were probably inlined based on how other classes went + void Set(u32 xDivInfo, u32 yDivInfo, u32 zDivInfo) { + mXDivInfo = xDivInfo; + mYDivInfo = yDivInfo; + mZDivInfo = zDivInfo; + } + + bool Chk(cCcD_DivideInfo const &other) const { + if ((mXDivInfo & other.mXDivInfo) && (mZDivInfo & other.mZDivInfo) && (mYDivInfo & other.mYDivInfo)) { + return true; + } else { + return false; + } + } +}; + +class cCcD_DivideArea : public cM3dGAab { +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; + /* 0x3C vtable */ + +public: + cCcD_DivideArea(); + virtual ~cCcD_DivideArea(); + void SetArea(cM3dGAab const &); + void CalcDivideInfo(cCcD_DivideInfo *, cM3dGAab const &); + void CalcDivideInfoOverArea(cCcD_DivideInfo *, cM3dGAab const &); +}; + +class cCcD_ShapeAttr { +public: + cM3dGAab mAab; + cCcD_DivideInfo mInfo; + enum ShapeType { + SHAPE_SPHERE = 0, + SHAPE_CYLINDER = 1, + SHAPE_CAPSULE = 2, + SHAPE_TRIANGLE = 3, + SHAPE_DEFAULT = 4, + }; + struct Shape { + ~Shape(); + + /* 0x00 */ int mField_0x00; + /* 0x04 */ mVec3_c mField_0x04; + /* 0x10 */ mVec3_c mField_0x10; + /* 0x1C */ mVec3_c mField_0x1C; + }; + cCcD_ShapeAttr(); + /* vt 0x08 */ virtual ~cCcD_ShapeAttr(); + /* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *); + /* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *); + /* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) = 0; + /* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) = 0; + /* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) = 0; + /* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) = 0; + /* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) = 0; + /* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *); + /* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) = 0; + /* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) = 0; + /* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) = 0; + /* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) = 0; + /* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) = 0; + /* vt 0x40 */ virtual mVec3_c &GetCoP(); + /* vt 0x44 */ virtual void CalcAabBox() = 0; + /* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const = 0; + /* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const; + /* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const = 0; + /* vt 0x54 */ virtual bool GetPosBool(mVec3_c *) const; + /* vt 0x58 */ virtual void TranslateXZ(f32, f32) = 0; + + cM3dGAab &GetWorkAab() { + return mAab; + } + cM3dGAab const &GetWorkAab() const { + return mAab; + } + + static mVec3_c sVirtualCenter; +}; + +struct cCcD_SrcCpsAttr { + f32 mRadius; +}; +class cCcD_CpsAttr : public cCcD_ShapeAttr, public cM3dGCps { +public: + mVec3_c mVirtCenter; + + cCcD_CpsAttr(); + void Set(const cCcD_SrcCpsAttr &src); + void SetVirtCenter(mVec3_c *); + + f32 CrossCoCommon(cCcD_ShapeAttr &, f32); + + /* vt 0x08 */ virtual ~cCcD_CpsAttr(); + /* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override; + /* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override; + /* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override; + /* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override; + /* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override; + /* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override; + /* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override; + /* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override; + /* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override; + /* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override; + /* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override; + /* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override; + /* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override; + /* vt 0x40 */ virtual mVec3_c &GetCoP() override; + /* vt 0x44 */ virtual void CalcAabBox() override; + /* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override; + /* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override; + /* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override; + /* vt 0x58 */ virtual void TranslateXZ(f32, f32) override; +}; + +class cCcD_TriAttr : public cCcD_ShapeAttr, public cM3dGTri { +public: + cCcD_TriAttr(); + /* vt 0x08 */ virtual ~cCcD_TriAttr(); + /* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override; + /* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override; + /* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override; + /* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override; + /* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override; + /* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override; + /* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override; + /* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override; + /* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override; + /* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override; + /* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override; + /* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override; + /* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override; + /* vt 0x44 */ virtual void CalcAabBox() override; + /* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override; + /* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override; + /* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override; + /* vt 0x58 */ virtual void TranslateXZ(f32, f32) override; +}; + +struct cCcD_SrcUnkAttr { + f32 mMinX, mMinY, mMinZ; + f32 mMaxX, mMaxY, mMaxZ; + + mVec3_c &getMin() const { + return *(mVec3_c *)&mMinX; + } + mVec3_c &getMax() const { + return *(mVec3_c *)&mMaxX; + } +}; + +class cCcD_UnkAttr : public cCcD_ShapeAttr, public cM3dGUnk { +public: + cCcD_UnkAttr(); + + void Set(const cCcD_SrcUnkAttr &src); + /* vt 0x08 */ virtual ~cCcD_UnkAttr(); + /* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override; + /* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override; + /* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override; + /* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override; + /* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override; + /* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override; + /* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override; + /* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override; + /* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override; + /* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override; + /* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override; + /* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override; + /* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override; + /* vt 0x40 */ virtual mVec3_c &GetCoP() override; + /* vt 0x44 */ virtual void CalcAabBox() override; + /* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override; + /* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override; + /* vt 0x58 */ virtual void TranslateXZ(f32, f32) override; +}; + +struct cCcD_SrcCylAttr { + f32 mRadius; + f32 mHeight; +}; + +class cCcD_CylAttr : public cCcD_ShapeAttr, public cM3dGCyl { +public: + cCcD_CylAttr(); + void Set(const cCcD_SrcCylAttr &); + /* vt 0x08 */ virtual ~cCcD_CylAttr(); + /* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override; + /* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override; + /* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override; + /* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override; + /* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override; + /* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override; + /* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override; + /* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override; + /* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override; + /* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override; + /* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override; + /* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override; + /* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override; + /* vt 0x40 */ virtual mVec3_c &GetCoP() override; + /* vt 0x44 */ virtual void CalcAabBox() override; + /* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override; + /* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override; + /* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override; + /* vt 0x58 */ virtual void TranslateXZ(f32, f32) override; +}; + +struct cCcD_SrcSphAttr { + f32 mRadius; +}; + +class cCcD_SphAttr : public cCcD_ShapeAttr, public cM3dGSph { +public: + cCcD_SphAttr(); + void Set(const cCcD_SrcSphAttr &); + /* vt 0x08 */ virtual ~cCcD_SphAttr(); + /* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override; + /* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override; + /* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override; + /* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override; + /* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override; + /* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override; + /* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override; + /* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override; + /* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override; + /* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override; + /* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override; + /* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override; + /* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override; + /* vt 0x40 */ virtual mVec3_c &GetCoP() override; + /* vt 0x44 */ virtual void CalcAabBox() override; + /* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override; + /* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override; + /* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override; + /* vt 0x54 */ virtual bool GetPosBool(mVec3_c *) const override; + /* vt 0x58 */ virtual void TranslateXZ(f32, f32) override; +}; + +// This has changed bit +class cCcD_Stts { +public: + /* 0x00 */ int mAtApid; + /* 0x04 */ int mAtOldApid; + /* 0x08 */ int mTgApid; + /* 0x0C */ int mTgOldApid; + /* 0x10 */ mVec3_c mField_0x10; + /* 0x1C */ mVec3_c mField_0x1C; + /* 0x28 */ mVec3_c mCcMove; + /* 0x34 */ dAcObjBase_c *mpActor; + /* 0x38 */ int mRank; + + cCcD_Stts(dAcObjBase_c *); + void Move(); + int GetID() const; + void PlusCcMove(f32, f32, f32); + void ClrCcMove(); + int GetWeight(int) const; // idk what to really call it but it removes the rank table + + void SetDefaultRank() { + mRank = 0xD; + } + void SetRank(int rank) { + mRank = rank; + } + dAcObjBase_c *GetAc() { + return mpActor; + } +}; + +struct cCcD_SrcGObjTgInfo { + /* 0x00 */ u16 mField_0x0; + /* 0x02 */ u16 mField_0x2; +}; + +struct cCcD_SrcGObjTg { + /* 0x00 */ u32 mType; + /* 0x04 */ u32 mSPrm; + /* 0x08 */ cCcD_SrcGObjTgInfo mInfo; + /* 0x0C */ u16 mField_0x0C; + /* 0x0E */ u16 mField_0x0E; +}; + +enum cCcD_AtModifiers_e { + /* 0x 0000 0001 */ AT_MOD_FIRE = (1 << 0), + /* 0x 0000 0002 */ AT_MOD_0x2 = (1 << 1), + /* 0x 0000 0004 */ AT_MOD_ELECTRIC = (1 << 2), + /* 0x 0000 0008 */ AT_MOD_WIND = (1 << 3), + /* 0x 0000 0010 */ AT_MOD_0x10 = (1 << 4), + /* 0x 0000 0020 */ AT_MOD_0x20 = (1 << 5), + /* 0x 0000 0040 */ AT_MOD_WATER = (1 << 6), + /* 0x 0000 0080 */ AT_MOD_0x80 = (1 << 7), + /* 0x 0000 0100 */ AT_MOD_0x100 = (1 << 8), + /* 0x 0000 0200 */ AT_MOD_STINKY = (1 << 9), + /* 0x 0000 0400 */ AT_MOD_CURSED = (1 << 10), +}; +struct cCcD_SrcGObjAtInfo { + /* 0x00 */ u8 mField_0x0; + /* 0x01 */ u8 mField_0x1; + /* 0x02 */ u16 mModifier; +}; + +enum cCcD_AtSPrm { + AT_SPRM_DAMAGE = 0x4, +}; + +struct cCcD_SrcGObjAt { + /* 0x00 */ u32 mType; + /* 0x04 */ u32 mSPrm; + /* 0x08 */ cCcD_SrcGObjAtInfo mInfo; + /* 0x0C */ u8 mDamage; + /* 0x0D */ u8 mField_0xD; + /* 0x0E */ u8 mField_0xE; + /* 0x0F */ u8 mField_0xF; + /* 0x10 */ u16 mField_0x10; + /* 0x12 */ s16 mField_0x12; +}; + +struct cCcD_SrcGObjCo { + /* 0x00 */ u32 mSPrm; +}; + +struct cCcD_SrcGObj { + /* 0x00 */ cCcD_SrcGObjAt mObjAt; + /* 0x14 */ cCcD_SrcGObjTg mObjTg; + /* 0x1C */ cCcD_SrcGObjCo mObjCo; +}; + +class dAcObjBase_c; +class cCcD_Obj; + +typedef bool (*cCcD_HitCallback)( + dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB +); +typedef int (*cCcD_ShieldChkCallback)( + dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB +); + +class cCcD_GAtTgCoCommonBase { +public: + cCcD_HitCallback mHit_cb; + s8 mEffCounter; + dAcRef_c mAc; + u32 mRPrm; + + cCcD_GAtTgCoCommonBase(); + + virtual ~cCcD_GAtTgCoCommonBase(); + void dt() { + mEffCounter = 0; + ClrActorInfo(); + mHit_cb = nullptr; + } + void ClrActorInfo(); + void SetHitActor(dAcObjBase_c *); + dAcObjBase_c *GetActor(); + void SubtractEffCounter(); + + bool ChkEffCounter() { + return mEffCounter > 0; + } + void ClrEffCounter() { + mEffCounter = 0; + } + void SetEffCounterTimer() { + mEffCounter = 5; + } + + u32 MskRPrm(u32 m) const { + return mRPrm & m; + } + void SetRPrm(u32 f) { + mRPrm = f; + } + void OnRPrm(u32 m) { + mRPrm |= m; + } + void OffRPrm(u32 m) { + mRPrm = (mRPrm & ~m) | m; + } +}; + +class cCcD_ObjAt : public cCcD_GAtTgCoCommonBase { +public: + cCcD_ObjAt(); + virtual ~cCcD_ObjAt(); + void Set(const cCcD_SrcGObjAt &); + void SetAtFlag(u32); + void AdjustHitPos(f32, f32); + + void SetVec(const mVec3_c &vec) { + mVec = vec; + } + mVec3_c &GetVec() { + return mVec; + } + + void SetHitPos(mVec3_c &pos) { + mHitPos = pos; + } + mVec3_c &GetHitPos() { + return mHitPos; + } + void ClrSet() { + OffSPrm(1); + } + u32 ChkSet() { + return MskSPrm(1); + } + + void SetCallback(cCcD_HitCallback cb) { + mHit_cb = cb; + } + + u32 MskType(u32 mask) const { + return mSrc.mType & mask; + } + void SetType(u32 flag) { + mSrc.mType = flag; + } + void OnType(u32 m) { + mSrc.mType |= m; + } + void OffType(u32 m) { + mSrc.mType &= ~m; + } + u32 MskSPrm(u32 m) const { + return mSrc.mSPrm & m; + } + void SetSPrm(u32 f) { + mSrc.mSPrm = f; + } + void OnSPrm(u32 m) { + mSrc.mSPrm |= m; + } + void OffSPrm(u32 m) { + mSrc.mSPrm &= ~m; + } + u32 MskTgHitSPrm(u32 m) const { + return mTgHitSrc.mSPrm & m; + } + void SetTgHitSPrm(u32 f) { + mTgHitSrc.mSPrm = f; + } + void OnTgHitSPrm(u32 m) { + mTgHitSrc.mSPrm |= m; + } + void OffTgHitSPrm(u32 m) { + mTgHitSrc.mSPrm &= ~m; + } + + const cCcD_SrcGObjAt &GetSrc() const { + return mSrc; + } + void SetTgHitSrc(const cCcD_SrcGObjTg &src) { + mTgHitSrc = src; + } + const cCcD_SrcGObjTg &GetTgHitSrc() const { + return mTgHitSrc; + } + +public: + /* 0x1C */ cCcD_SrcGObjAt mSrc; + /* 0x30 */ mVec3_c mHitPos; + /* 0x3C */ mVec3_c mVec; + /* 0x48 */ cCcD_SrcGObjTg mTgHitSrc; + /* 0x58 */ cCcD_HitCallback mField_0x58; +}; + +class cCcD_ObjTg : public cCcD_GAtTgCoCommonBase { +public: + cCcD_ObjTg(); + virtual ~cCcD_ObjTg(); + void Set(const cCcD_SrcGObjTg &); + void AdjustHitPos(f32, f32); + + void SetHitPos(mVec3_c &pos) { + mHitPos = pos; + } + mVec3_c &GetHitPos() { + return mHitPos; + } + + u32 GetAtHitType() const { + return mAtHitSrc.mType; + } + + void SetFlag_0xA(u16 flag) { + mSrc.mField_0x0E = flag; + } + + u16 GetFlag_0xA(u16 mask) const { + return mSrc.mField_0x0E & mask; + } + void ClrSet() { + OffSPrm(1); + } + u32 ChkSet() { + return MskSPrm(1); + } + + void Set_0x4C(u32 f) { + mField_0x4C = f; + } + + u32 MskType(u32 mask) const { + return mSrc.mType & mask; + } + void SetType(u32 flag) { + mSrc.mType = flag; + } + void OnType(u32 m) { + mSrc.mType |= m; + } + void OffType(u32 m) { + mSrc.mType &= ~m; + } + u32 MskSPrm(u32 m) const { + return mSrc.mSPrm & m; + } + void SetSPrm(u32 f) { + mSrc.mSPrm = f; + } + void OnSPrm(u32 m) { + mSrc.mSPrm |= m; + } + void OffSPrm(u32 m) { + mSrc.mSPrm &= ~m; + } + u32 MskAtHitSPrm(u32 m) const { + return mAtHitSrc.mSPrm & m; + } + void SetAtHitSPrm(u32 f) { + mAtHitSrc.mSPrm = f; + } + void OnAtHitSPrm(u32 m) { + mAtHitSrc.mSPrm |= m; + } + void OffAtHitSPrm(u32 m) { + mAtHitSrc.mSPrm &= ~m; + } + + const cCcD_SrcGObjTg &GetSrc() const { + return mSrc; + } + void SetAtHitSrc(const cCcD_SrcGObjAt &src) { + mAtHitSrc = src; + } + const cCcD_SrcGObjAt &GetAtHitSrc() const { + return mAtHitSrc; + } + + void Set_0x4B(u8 val) { + mField_0x4B = val; + } + +public: + /* 0x1C */ cCcD_SrcGObjTg mSrc; + /* 0x2C */ mVec3_c mField_0x2C; + /* 0x38 */ mVec3_c mHitPos; + /* 0x44 */ s16 *mShieldFrontRangeYAngle; + /* 0x48 */ s16 mShieldRange; + /* 0x4A */ u8 mField_0x4A; + /* 0x4B */ u8 mField_0x4B; + /* 0x4C */ u32 mField_0x4C; + /* 0x50 */ u32 mField_0x50; + /* 0x54 */ cCcD_ShieldChkCallback mField_0x54; + /* 0x58 */ cCcD_SrcGObjAt mAtHitSrc; + /* 0x6C */ mVec3_c mField_0x6C; + /* 0x78 */ cCcD_HitCallback mField_0x78; +}; + +class cCcD_ObjCo : public cCcD_GAtTgCoCommonBase { +public: + cCcD_ObjCo(); + virtual ~cCcD_ObjCo(); + void Set(const cCcD_SrcGObjCo &); + void SetCoFlag(u32); + void AdjustHitPos(f32, f32); + + void ClrSet() { + OffSPrm(1); + } + u32 ChkSet() { + return MskSPrm(1); + } + u32 MskSPrm(u32 m) const { + return mSrc.mSPrm & m; + } + void SetSPrm(u32 f) { + mSrc.mSPrm = f; + } + void OnSPrm(u32 m) { + mSrc.mSPrm |= m; + } + void OffSPrm(u32 m) { + mSrc.mSPrm &= ~m; + } + + const cCcD_SrcGObjCo &GetSrc() const { + return mSrc; + } + void SetCoHitSrc(const cCcD_SrcGObjCo &src) { + mCoHitSrc = src; + } + +public: + /* 0x1C */ cCcD_SrcGObjCo mSrc; + /* 0x20 */ u32 mGrp; + /* 0x24 */ cCcD_SrcGObjCo mCoHitSrc; + /* 0x28 */ cCcD_HitCallback mField_0x28_callback; +}; + +// Maybe ? +class cCcD_ObjInf { +public: + /* 0x000 */ cCcD_ObjAt mObjAt; + /* 0x05C */ cCcD_ObjTg mObjTg; + /* 0x0D8 */ cCcD_ObjCo mObjCo; +}; + +class cCcD_Obj { +public: + /* 0x000 */ cCcD_ObjAt mAt; + /* 0x05C */ cCcD_ObjTg mTg; + /* 0x0D8 */ cCcD_ObjCo mCo; + /* 0x104 */ cCcD_Stts *mStts; + /* 0x108 */ u32 mField_0x108; + +public: + cCcD_Obj(); + virtual ~cCcD_Obj(); + virtual cCcD_ShapeAttr *GetShapeAttr() = 0; + virtual cCcD_ObjInf *GetGObjInfo(); + void ClrSet(); + void Set(const cCcD_SrcGObj &); + void ClrAtHit(); + void ClrTgHit(); + void ClrCoHit(); + + const mVec3_c &GetAtHitPos() const; + mVec3_c &GetAtHitPos(); + bool GetAtFlag0x2() const; + bool GetAtFlag0x4() const; + bool GetAtFlag0x8() const; + + const mVec3_c &GetTgHitPos() const; + mVec3_c &GetTgHitPos(); + bool GetTgFlag0x4() const; + bool GetTgFlag0x8() const; + + bool ChkAtClawshot() const; + bool ChkAtClawshotDebug() const; + bool ChkAtElectrified() const; + bool ChkAtElectrifiedExtra() const; + bool ChkAtWhippable() const; + bool ChkAtBit24() const; + bool ChkAtArrowStick() const; + bool ChkAtWaterScaleBonk() const; + bool ChkAtSwordBonk() const; + dAcObjBase_c *GetAtActor(); + + bool ChkTgAtHitType(u32) const; + u32 GetTg_0x58() const; + bool ChkTgBit14() const; + u8 GetTgDamage() const; + u16 GetTgDamageFlags() const; + bool ChkTgSkywardStrike() const; + bool ChkTgBit17() const; + bool ChkTgBit18() const; + bool ChkTgBit19() const; + bool ChkTgBit20() const; + bool ChkTgBit23() const; + bool ChkTgBit24() const; + bool ChkTgBit25() const; + u16 GetTgSoundID() const; + s16 GetTg_0x6A() const; + bool ChkTgBit8() const; + u8 GetTg_0x4A() const; + dAcObjBase_c *GetTgActor(); + const mVec3_c &GetTg_0x2C() const; + + dAcObjBase_c *GetCoActor(); + bool ChkCoBit4() const; + + void SetAtFlagsUpper(u32); + bool ChkTgBit1() const; + + void AdjustHitPos(f32, f32); + + static bool fn_80328ad0(dAcObjBase_c *pObj, u32 attype); + + // clang-format off + cCcD_Stts* GetStts() { + return mStts; + } + void SetStts(cCcD_Stts &stts) { mStts = &stts; } + + void SetAtVec(const mVec3_c &vec) { mAt.SetVec(vec); } + + + void OnTgCoFlag(u32 f) { + mTg.OnSPrm(f); + mCo.OnSPrm(f); + } + + void SetTgFlag(u32 flag) { + mTg.SetType(flag); + } + void SetAtFlag(u32 flag) { + mAt.SetSPrm(flag); + } + + void SetTgFlag_0xA(u16 flag) { + mTg.SetFlag_0xA(flag); + } + + bool ChkTgHit() { + return mTg.MskSPrm(1) != 0 && mTg.GetActor() != nullptr; + } + bool ChkAtHit() { + return mAt.MskSPrm(1) != 0 && mAt.GetActor() != nullptr; + } + bool ChkCoHit() { + return mCo.MskSPrm(1) != 0 && mCo.GetActor() != nullptr; + } + + dAcObjBase_c *GetAc() { + if (mStts == nullptr) { + return nullptr; + } else { + return mStts->mpActor; + } + } + + void ClrCoSet() { + mCo.ClrSet(); + } + void ClrAtSet() { + mAt.ClrSet(); + } + void ClrTgSet() { + mTg.ClrSet(); + } + u32 ChkCoSet() { + return mCo.ChkSet(); + } + u32 ChkAtSet() { + return mAt.ChkSet(); + } + u32 ChkTgSet() { + return mTg.ChkSet(); + } + + + bool ChkAtEffCounter() { return mAt.ChkEffCounter(); } + bool ChkTgEffCounter() { return mTg.ChkEffCounter(); } + void ClrAtEffCounter() { mAt.ClrEffCounter(); } + void ClrTgEffCounter() { mTg.ClrEffCounter(); } + void ClrCoEffCounter() { mCo.ClrEffCounter(); } + void SetAtEffCounterTimer() { mAt.SetEffCounterTimer(); } + void SetTgEffCounterTimer() { mTg.SetEffCounterTimer(); } + void SubtractAtEffCounter() { mAt.SubtractEffCounter(); } + void SubtractTgEffCounter() { mTg.SubtractEffCounter(); } + void SubtractCoEffCounter() { mCo.SubtractEffCounter(); } + + void SetTg_0x4C(u32 f) { + mTg.Set_0x4C(f); + } + + void SetAtCallback(cCcD_HitCallback cb) { + mAt.SetCallback(cb); + } + + u32 ChkTgNoAtHitInfSet() const { + return mTg.MskSPrm(0x40); + } + u32 ChkAtNoTgHitInfSet() const { + return mAt.MskSPrm(0x40); + } + u32 ChkCoNoCoHitInfSet() const { + return mCo.MskSPrm(0x800); + } + + // At + + u32 ChkAtNoMass() const { + return mAt.MskSPrm(0x400); + } + u32 GetAtGrp() const { + return mAt.MskSPrm(0x3E); + } + u32 ChkAtNoConHit() const { + return mAt.MskSPrm(0x80); + } + u32 ChkAtStopNoConHit() const { + return mAt.MskSPrm(0x200); + } + u32 ChkAtNoGaurd() const { + return mAt.MskSPrm(0x200000); + } + + // Tg + + u32 GetTgGrp() const { + return mTg.MskSPrm(0x3E); + } + u32 ChkTgNoConHit() const { + return mTg.MskSPrm(0x100); + } + u32 ChkTgStopNoConHit() const { + return mTg.MskSPrm(0x100000); + } + u32 ChkTgShieldFrontRange() const { + return mTg.MskSPrm(0x400); + } + + void SetTg_0x4B(u8 val) { + mTg.Set_0x4B(val); + } + + // Co + + u32 ChkCoSet2() const { + return mCo.MskSPrm(0x800); + } + u32 ChkCoNoCamHit() const { + return mCo.MskSPrm(0x4000); + } + u32 ChkCoSameActorHit() const { + return mCo.MskSPrm(0x1000); + } + + /** + * SET HIT + */ + + // Actor Objs + void SetAtHit(cCcD_Obj *other) { + mAt.SetHitActor(other->GetAc()); + } + void SetTgHit(cCcD_Obj *other) { + mTg.SetHitActor(other->GetAc()); + } + void SetCoHit(cCcD_Obj *other) { + mCo.SetHitActor(other->GetAc()); + } + + // Hit Positions + void SetAtHitPos(mVec3_c &pos) { + mAt.SetHitPos(pos); + } + void SetTgHitPos(mVec3_c &pos) { + mTg.SetHitPos(pos); + } + + /** + * SET SOURCES + */ + + void SetAtTgHitSrc(cCcD_Obj *tg) { + mAt.SetTgHitSrc(tg->mTg.GetSrc()); + } + void SetTgAtHitSrc(cCcD_Obj *at) { + mTg.SetAtHitSrc(at->mAt.GetSrc()); + } + void SetCoCoHitSrc(cCcD_Obj *co) { + mCo.SetCoHitSrc(co->mCo.GetSrc()); + } + + // clang-format on +}; + #endif diff --git a/include/d/col/c/c_cc_s.h b/include/d/col/c/c_cc_s.h index 9eccad820..dea515c76 100644 --- a/include/d/col/c/c_cc_s.h +++ b/include/d/col/c/c_cc_s.h @@ -1,7 +1,20 @@ #ifndef C_CC_S_H #define C_CC_S_H +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/c/c_cc_d.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" + +/** + * This still seems to be exist, but looks like was heavily revised. + * No more virtual functions + * a couple more entry arrays (a Matrix one and a model one) + * + * This file is largely here to support future changes? + * - dCcS copies and pastes the content. Otherwise the ctor is weird + */ enum WeightType { WeightType_0 = 0, @@ -9,52 +22,53 @@ enum WeightType { WeightType_2 = 2, }; -// class cCcS { -// public: -// /* 0x0000 */ cCcD_Obj *mpObjAt[0x100]; -// /* 0x0400 */ cCcD_Obj *mpObjTg[0x300]; -// /* 0x1000 */ cCcD_Obj *mpObjCo[0x100]; -// /* 0x1400 */ cCcD_Obj *mpObj[0x500]; -// /* 0x2800 */ u16 mObjAtCount; -// /* 0x2802 */ u16 mObjTgCount; -// /* 0x2804 */ u16 mObjCoCount; -// /* 0x2806 */ u16 mObjCount; -// /* 0x2808 */ cCcD_DivideArea mDivideArea; -// /* 0x2848 vtable */ - -// /* 80264A6C */ cCcS(); -// /* 80264A94 */ void Ct(); -// /* 80264B60 */ void Dt(); -// /* 80264B80 */ WeightType GetWt(u8) const; -// /* 80264BA8 */ void Set(cCcD_Obj *); -// /* 80264C5C */ void ClrCoHitInf(); -// /* 80264CF0 */ void ClrTgHitInf(); -// /* 80264D90 */ void ClrAtHitInf(); -// /* 80264E2C */ bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *); -// /* 80264F40 */ void ChkAtTg(); -// /* 8026515C */ bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *); -// /* 80265230 */ void ChkCo(); -// /* 802653A0 vt[2] */ virtual void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *); -// /* 802653C8 */ void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *); -// /* 802655E4 */ void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32); -// /* 80265750 vt[3]*/ virtual void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32); -// /* 80265BB4 */ void CalcArea(); -// /* 80265CCC */ void Move(); -// /* 80265D30 */ void DrawClear(); -// /* 80265DF8 vt[4] */ virtual void -// SetCoGObjInf(bool, bool, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *); -// /* 80265DFC vt[5] */ virtual void -// SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *, -// cCcD_GStts *, cCcD_GStts *, cXyz *); -// /* 80265E00 vt[6] */ virtual bool -// ChkNoHitGAtTg(cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_GStts *, cCcD_GStts *); -// /* 80265E08 vt[7] */ virtual bool -// ChkAtTgHitAfterCross(bool, bool, cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, -// cCcD_GStts *); -// /* 80265E10 vt[8] */ virtual bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *); -// /* 80030BDC vt[9] */ virtual ~cCcS() {} -// /* 80265E18 vt[10] */ virtual void MoveAfterCheck(); -// /* 80265DF4 vt[11] */ virtual void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *); -// }; // Size = 0x284C +class cCcS { +public: + /* 0x0000 */ cCcD_Obj *mpObjAt[0x200]; + /* 0x0800 */ cCcD_Obj *mpObjTg[0x300]; + /* 0x1400 */ cCcD_Obj *mpObjCo[0x200]; + /* 0x1c00 */ cCcD_Obj *mpObj[0x340]; + /* 0x2900 */ UNKTYPE *mpUnk[0x100]; + /* 0x2D00 */ u16 mObjAtCount; + /* 0x2d02 */ u16 mObjTgCount; + /* 0x2D04 */ u16 mObjCoCount; + /* 0x2D06 */ u16 mObjCount; + /* 0x2D08 */ u32 mUnkCount; + /* 0x2D0C */ cCcD_DivideArea mDivideArea; + /* 0x2D4C */ bool mbAreaSet; + /* 0x2D50 */ mMtx_c mAreas[16][2]; // could be a structure? + /* 0x3350 */ int mAreaCount; + + cCcS() {} + + void Ct(); + void Dt(); + + void Set(cCcD_Obj *); + + void ChkCo(mVec3_c *, dAcObjBase_c *); + bool fn_80357c90(mVec3_c *, mVec3_c *, u32, UNKTYPE *); + + // WeightType GetWt(u8) const; + // void ClrCoHitInf(); + // void ClrTgHitInf(); + // void ClrAtHitInf(); + // bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *); + // void ChkAtTg(); + // bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *); + // void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *); + // void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *); + // void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32); + // void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32); + // void CalcArea(); + // void Move(); + // void DrawClear(); + // void SetCoGObjInf(bool, bool, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts + // *); void SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *, + // cCcD_Stts *, cCcD_GStts *, cCcD_GStts *, cXyz *); bool ChkNoHitGAtTg(cCcD_ObjInf const *, cCcD_ObjInf const *, + // cCcD_GStts *, cCcD_GStts *); bool ChkAtTgHitAfterCross(bool, bool, cCcD_ObjInf const *, cCcD_ObjInf const *, + // cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *); bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *); ~cCcS() {} void + // MoveAfterCheck(); void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *); +}; #endif /* C_CC_S_H */ diff --git a/include/d/col/c/c_m3d.h b/include/d/col/c/c_m3d.h index c148eef30..cf9c3450f 100644 --- a/include/d/col/c/c_m3d.h +++ b/include/d/col/c/c_m3d.h @@ -3,7 +3,8 @@ #include "common.h" #include "math.h" -#include "nw4r/math.h" +#include "nw4r/math.h" // IWYU pragma: export +#include "nw4r/types_nw4r.h" class cM3dGAab; class cM3dGCps; @@ -19,64 +20,69 @@ struct cM3d_Range; extern const f32 G_CM3D_F_ABS_MIN; bool cM3d_Len2dSqPntAndSegLine(f32, f32, f32, f32, f32, f32, f32 *, f32 *, f32 *); -bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *, f32 *); -f32 cM3d_SignedLenPlaAndPos(const cM3dGPla *, const nw4r::math::VEC3 *); +bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, f32 *, f32 *); +f32 cM3d_SignedLenPlaAndPos(const cM3dGPla &, const nw4r::math::VEC3 *); void cM3d_CalcPla(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *); -int cM3d_Check_LinLin(const cM3dGLin *, const cM3dGLin *, f32 *, f32 *); -bool cM3d_Cross_LinPla(const cM3dGLin *, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool); +int cM3d_Check_LinLin(const cM3dGLin &, const cM3dGLin *, f32 *, f32 *); +bool cM3d_Cross_LinPla(const cM3dGLin &, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool); bool cM3d_Cross_MinMaxBoxLine(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *); bool cM3d_InclusionCheckPosIn3PosBox3d( const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, f32 ); -bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32); -bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *); -bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *); +bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32); +bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *); +bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *); bool cM3d_CrossY_Tri_Front(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 *); -bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *); -bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32); -bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *); -bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32); -bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *); -bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *); -bool cM3d_Cross_LinTri(const cM3dGLin *, const cM3dGTri *, nw4r::math::VEC3 *, bool, bool); +bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *); +bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32); +bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *); +bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32); +bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *); +bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *); +bool cM3d_Cross_LinTri(const cM3dGLin &, const cM3dGTri &, nw4r::math::VEC3 *, bool, bool); bool cM3d_Cross_LinTri( - const cM3dGLin *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const cM3dGPla *, + const cM3dGLin &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool ); bool cM3d_Cross_LinTri_Easy(const cM3dGTri *, const nw4r::math::VEC3 *); -bool cM3d_Cross_SphPnt(const cM3dGSph *, const nw4r::math::VEC3 *); -bool cM3d_Cross_LinSph(const cM3dGLin *, const cM3dGSph *, nw4r::math::VEC3 *); +bool cM3d_Cross_SphPnt(const cM3dGSph &, const nw4r::math::VEC3 *); +bool cM3d_Cross_LinSph(const cM3dGLin &, const cM3dGSph &, nw4r::math::VEC3 *); bool cM3d_Cross_LinSph_CrossPos(const cM3dGSph &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *); -bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, f32 *); -bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, nw4r::math::VEC3 *, f32 *); -bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *); -bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *, f32 *); -bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, nw4r::math::VEC3 *); -void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *); -bool cM3d_Cross_SphTri(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *); -bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, f32 *); -bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, nw4r::math::VEC3 *); -bool cM3d_Cross_CylTri(const cM3dGCyl *, const cM3dGTri *, nw4r::math::VEC3 *); -int cM3d_Cross_CylLin(const cM3dGCyl *, const cM3dGLin *, nw4r::math::VEC3 *, nw4r::math::VEC3 *); -int cM3d_Cross_CylPntPnt(const cM3dGCyl *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, nw4r::math::VEC3 *); -bool cM3d_Cross_CylPnt(const cM3dGCyl *, const nw4r::math::VEC3 *); +bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, f32 *); +bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, nw4r::math::VEC3 *, f32 *); +bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *); +bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *, f32 *); +bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, nw4r::math::VEC3 *); +void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *); +bool cM3d_Cross_SphTri(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *); +bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, f32 *); +bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, nw4r::math::VEC3 *); +bool cM3d_Cross_CylTri(const cM3dGCyl &, const cM3dGTri &, nw4r::math::VEC3 *); +int cM3d_Cross_CylLin(const cM3dGCyl &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *); +int cM3d_Cross_CylPntPnt(const cM3dGCyl &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, nw4r::math::VEC3 *); +bool cM3d_Cross_CylPnt(const cM3dGCyl &, const nw4r::math::VEC3 &); +bool cM3d_Cross_CpsCps(const cM3dGCps &, const cM3dGCps &, nw4r::math::VEC3 *, f32 *, f32 *); +bool cM3d_Cross_CpsCyl(const cM3dGCps &, const cM3dGCyl &, nw4r::math::VEC3 *); bool cM3d_Cross_CpsSph_CrossPos(const cM3dGCps &, const cM3dGSph &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *); bool cM3d_Cross_CpsSph(const cM3dGCps &, const cM3dGSph &, nw4r::math::VEC3 *); bool cM3d_Cross_TriTri(const cM3dGTri &, const cM3dGTri &, nw4r::math::VEC3 *); -bool cM3d_Cross_CpsTri(const cM3dGCps &, cM3dGTri, nw4r::math::VEC3 *); +bool cM3d_Cross_CpsTri(const cM3dGCps &, const cM3dGTri &, nw4r::math::VEC3 *); void cM3d_CalcVecZAngle(const nw4r::math::VEC3 &, mAng3_c *); void cM3d_PlaneCrossLineProcWork(f32, f32, f32, f32, f32, f32, f32, f32 *, f32 *); int cM3d_2PlaneCrossLine(const cM3dGPla &, const cM3dGPla &, cM3dGLin *); bool cM3d_3PlaneCrossPos(const cM3dGPla &, const cM3dGPla &, const cM3dGPla &, nw4r::math::VEC3 *); -f32 cM3d_lineVsPosSuisenCross(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *); +f32 cM3d_lineVsPosSuisenCross(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *); f32 cM3d_lineVsPosSuisenCross(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *); -bool fn_803354e0(cM3dGUnk *, cM3dGUnk *, nw4r::math::VEC3 *); -bool fn_80336110(cM3dGCyl *, cM3dGUnk *, nw4r::math::VEC3 *); -bool fn_803364e0(cM3dGCyl *, cM3dGUnk *, f32 *); -bool fn_80336d90(cM3dGCps *, cM3dGUnk *, nw4r::math::VEC3 *); -bool fn_80337690(cM3dGUnk *, cM3dGSph *, nw4r::math::VEC3 *); -bool fn_80337780(cM3dGUnk *, cM3dGSph *, f32 *); +bool cM3d_Cross_UnkTri(const cM3dGUnk &, cM3dGTri &, nw4r::math::VEC3 *); +bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, nw4r::math::VEC3 *); +bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, f32 *); +bool cM3d_Cross_CpsUnk(const cM3dGCps &, cM3dGUnk &, nw4r::math::VEC3 *); +bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, nw4r::math::VEC3 *); +bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, f32 *); + +bool cM3d_Normalize(nw4r::math::VEC3 *); +void cM3d_Normalize_Ex(nw4r::math::VEC3 *); inline bool cM3d_IsZero(f32 f) { return fabsf(f) < G_CM3D_F_ABS_MIN; @@ -89,9 +95,9 @@ inline bool cM3d_IsZero_inverted(f32 param_0) { inline void cM3d_InDivPos1(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) { - nw4r::math::VEC3 tmp; - VEC3Scale(&tmp, pVecB, pF); - VEC3Add(pOut, &tmp, pVecA); + nw4r::math::VEC3 tmp2; + VEC3Scale(&tmp2, pVecB, pF); + VEC3Add(pOut, &tmp2, pVecA); } inline void cM3d_InDivPos2(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) { diff --git a/include/d/col/c/c_m3d_g_aab.h b/include/d/col/c/c_m3d_g_aab.h index 2afb932f8..6f32e3283 100644 --- a/include/d/col/c/c_m3d_g_aab.h +++ b/include/d/col/c/c_m3d_g_aab.h @@ -5,7 +5,7 @@ #include "d/col/c/c_m3d.h" #include "d/col/c/c_m3d_g_lin.h" #include "d/col/c/c_m3d_g_sph.h" - +#include "m/m_vec.h" // Axis aligned bounding box class cM3dGAab { @@ -23,7 +23,6 @@ class cM3dGAab { bool CrossY(const mVec3_c &) const; bool UnderPlaneYUnder(f32) const; bool TopPlaneYUnder(f32) const; - void SetMinMax(const cM3dGAab &); void SetMin(const mVec3_c &min); void SetMax(const mVec3_c &max); void CalcCenter(mVec3_c &) const; @@ -32,6 +31,11 @@ class cM3dGAab { void Set(const cM3dGSph &); bool Cross(const mVec3_c &) const; + void SetMinMax(const cM3dGAab &aab) { + SetMin(aab.mMin); + SetMax(aab.mMax); + } + void SetMinMax(const mVec3_c &minMax) { SetMin(minMax); SetMax(minMax); @@ -46,6 +50,19 @@ class cM3dGAab { mMax.x = -1000000000.0f; } + const mVec3_c &GetMax() const { + return mMax; + } + mVec3_c &GetMax() { + return mMax; + } + const mVec3_c &GetMin() const { + return mMin; + } + mVec3_c &GetMin() { + return mMin; + } + const mVec3_c *GetMaxP(void) const { return &mMax; } diff --git a/include/d/col/c/c_m3d_g_cps.h b/include/d/col/c/c_m3d_g_cps.h index d700e3bbc..ec0c88c22 100644 --- a/include/d/col/c/c_m3d_g_cps.h +++ b/include/d/col/c/c_m3d_g_cps.h @@ -18,7 +18,7 @@ class cM3dGCps : public cM3dGLin { void Set(const mVec3_c &, const mVec3_c &, f32); void SetR(f32 r); void Set_0x1C(f32); - bool fn_80337f30(cM3dGUnk *, mVec3_c *); + bool Cross(cM3dGUnk &, mVec3_c *); bool fn_80337f40(const mVec3_c &) const; f32 GetR() const { diff --git a/include/d/col/c/c_m3d_g_cyl.h b/include/d/col/c/c_m3d_g_cyl.h index c29412805..a5dfa4862 100644 --- a/include/d/col/c/c_m3d_g_cyl.h +++ b/include/d/col/c/c_m3d_g_cyl.h @@ -17,14 +17,23 @@ class cM3dGCyl { void SetH(f32); void SetR(f32); - bool fn_803380e0(cM3dGUnk *, mVec3_c *); - bool fn_803380f0(cM3dGUnk *, f32 *); + bool Cross(cM3dGUnk &, mVec3_c *); + bool Cross(cM3dGUnk &, f32 *); bool Cross(const mVec3_c &) const; void Clamp(const mVec3_c &, mVec3_c &) const; const mVec3_c &GetC() const { return mCenter; } + mVec3_c &GetC() { + return mCenter; + } + f32 GetH() const { + return mHeight; + } + f32 GetR() const { + return mRadius; + } }; #endif diff --git a/include/d/col/c/c_m3d_g_lin.h b/include/d/col/c/c_m3d_g_lin.h index 02cea6019..8b1d9d46d 100644 --- a/include/d/col/c/c_m3d_g_lin.h +++ b/include/d/col/c/c_m3d_g_lin.h @@ -3,14 +3,16 @@ #include "common.h" #include "m/m_vec.h" +#include "nw4r/types_nw4r.h" class cM3dGLin { public: typedef nw4r::math::VEC3 VEC3; typedef EGG::Vector3f Vector3f; - /* 0x00 */ mVec3_c mStart; - /* 0x0C */ mVec3_c mEnd; + // Needs to be mutable for cCcD_CpsAttr::GetPos and cCcD_CpsAttr::GetShapeAccess + /* 0x00 */ mutable mVec3_c mStart; + /* 0x0C */ mutable mVec3_c mEnd; cM3dGLin() {} @@ -32,34 +34,34 @@ class cM3dGLin { mEnd = *pEnd; } - nw4r::math::VEC3 &GetStart() { + mVec3_c &GetStart() { return mStart; } - const nw4r::math::VEC3 &GetStart() const { + const mVec3_c &GetStart() const { return mStart; } - nw4r::math::VEC3 *GetStartP(void) { + mVec3_c *GetStartP(void) { return &mStart; } - const nw4r::math::VEC3 *GetStartP(void) const { + const mVec3_c *GetStartP(void) const { return &mStart; } - nw4r::math::VEC3 &GetEnd() { + mVec3_c &GetEnd() { return mEnd; } - const nw4r::math::VEC3 &GetEnd() const { + const mVec3_c &GetEnd() const { return mEnd; } - nw4r::math::VEC3 *GetEndP(void) { + mVec3_c *GetEndP(void) { return &mEnd; } - const nw4r::math::VEC3 *GetEndP(void) const { + const mVec3_c *GetEndP(void) const { return &mEnd; } }; diff --git a/include/d/col/c/c_m3d_g_pla.h b/include/d/col/c/c_m3d_g_pla.h index cac47fbe5..9abe43d85 100644 --- a/include/d/col/c/c_m3d_g_pla.h +++ b/include/d/col/c/c_m3d_g_pla.h @@ -3,6 +3,7 @@ #include "c/c_math.h" #include "d/col/c/c_m3d.h" +#include "m/m_angle.h" #include "m/m_vec.h" // Plane with a normal @@ -36,6 +37,12 @@ class cM3dGPla { const mVec3_c *GetNP() const { return &mNormal; } + mVec3_c &GetN() { + return mNormal; + } + const mVec3_c &GetN() const { + return mNormal; + } f32 GetD() const { return mD; } @@ -46,13 +53,13 @@ class cM3dGPla { return ((-mNormal.x * param_1->x - mNormal.z * param_1->z) - mD) / mNormal.y; } - s32 GetAngleY() const { - return cM::atan2s(mNormal.x, mNormal.z); - } - f32 GetXZDist() const { return EGG::Math::sqrt(mNormal.x * mNormal.x + mNormal.z * mNormal.z); } + + mAng GetAngleY() const { + return cM::atan2s(mNormal.x, mNormal.z); + } }; #endif diff --git a/include/d/col/c/c_m3d_g_sph.h b/include/d/col/c/c_m3d_g_sph.h index 43480a97e..0dd60c2eb 100644 --- a/include/d/col/c/c_m3d_g_sph.h +++ b/include/d/col/c/c_m3d_g_sph.h @@ -20,14 +20,17 @@ class cM3dGSph { bool Cross(const cM3dGTri *, f32 *, mVec3_c *); void Clamp(const mVec3_c &, mVec3_c &) const; - bool fn_80338750(cM3dGUnk *, mVec3_c *); - bool fn_80338760(cM3dGUnk *, f32 *); + bool Cross(cM3dGUnk &, mVec3_c *); + bool Cross(cM3dGUnk &, f32 *); void SetRatio(f32); const mVec3_c &GetC() const { return mCenter; } + mVec3_c &GetC() { + return mCenter; + } const f32 &GetR() const { return mRadius; diff --git a/include/d/col/c/c_m3d_g_tri.h b/include/d/col/c/c_m3d_g_tri.h index a6402cdc4..dc90bbb71 100644 --- a/include/d/col/c/c_m3d_g_tri.h +++ b/include/d/col/c/c_m3d_g_tri.h @@ -3,6 +3,7 @@ #include "common.h" #include "d/col/c/c_m3d_g_pla.h" +#include "m/m_vec.h" class cM3dGTri : public cM3dGPla { typedef nw4r::math::VEC3 VecType; @@ -12,13 +13,23 @@ class cM3dGTri : public cM3dGPla { /* 0x1C */ VecType mB; /* 0x28 */ VecType mC; + const mVec3_c &GetPntA() const { + return *(mVec3_c *)&mA; + } + const mVec3_c &GetPntB() const { + return *(mVec3_c *)&mB; + } + const mVec3_c &GetPntC() const { + return *(mVec3_c *)&mC; + } + cM3dGTri() {} void SetPos(const VecType *, const VecType *, const VecType *); void SetBg(const VecType *, const VecType *, const VecType *, const cM3dGPla *pla); - bool cross(const cM3dGLin *lin, VecType *xyz, bool param_2, bool param_3) const { - return cM3d_Cross_LinTri(lin, this, xyz, param_2, param_3); + bool cross(const cM3dGLin &lin, VecType *xyz, bool param_2, bool param_3) const { + return cM3d_Cross_LinTri(lin, *this, xyz, param_2, param_3); } }; diff --git a/include/d/col/c/c_m3d_g_unk.h b/include/d/col/c/c_m3d_g_unk.h index ea0de359f..26533f4be 100644 --- a/include/d/col/c/c_m3d_g_unk.h +++ b/include/d/col/c/c_m3d_g_unk.h @@ -2,10 +2,11 @@ #define C_M3D_G_UNK_H #include "common.h" +#include "d/col/c/c_m3d.h" +#include "d/col/c/c_m3d_g_lin.h" #include "m/m_mtx.h" #include "m/m_vec.h" - struct cM3dGCps; struct cM3dGCyl; struct cM3dGSph; @@ -16,8 +17,7 @@ class cM3dGUnk { /* 0x30 */ mMtx_c mInvMtx; /* 0x60 */ mVec3_c mMin; /* 0x6C */ mVec3_c mMax; - /* 0x78 */ mVec3_c mField_0x78; - /* 0x84 */ mVec3_c mField_0x84; + /* 0x78 */ cM3dGLin mLin; /* 0x90 */ mVec3_c mField_0x90; /* 0x9C */ mVec3_c mField_0x9C; /* 0xA8 */ mVec3_c mField_0xA8; @@ -34,13 +34,13 @@ class cM3dGUnk { void Update(); void GetStartEnd(mVec3_c &, mVec3_c &); - void fn_80338c30(cM3dGCps *, mVec3_c *); - bool fn_80338c40(cM3dGUnk *, mVec3_c *); - bool fn_80338ca0(/* TODO */); - bool fn_80338cb0(cM3dGCyl *, mVec3_c *); - bool fn_80338cc0(cM3dGCyl *, f32 *); - bool fn_80338cd0(cM3dGSph *, mVec3_c *); - bool fn_80338ce0(cM3dGSph *, f32 *); + bool Cross(cM3dGCps &, mVec3_c *); + bool Cross(cM3dGTri &, mVec3_c *); + bool Cross(cM3dGUnk &, mVec3_c *); + bool Cross(cM3dGCyl &, mVec3_c *); + bool Cross(cM3dGCyl &, f32 *); + bool Cross(cM3dGSph &, mVec3_c *); + bool Cross(cM3dGSph &, f32 *); void Set(const mMtx_c &); void Set(const mVec3_c &, const mAng &); diff --git a/include/d/col/cc/d_cc_d.h b/include/d/col/cc/d_cc_d.h index aa760b751..2242323e1 100644 --- a/include/d/col/cc/d_cc_d.h +++ b/include/d/col/cc/d_cc_d.h @@ -1,517 +1,89 @@ #ifndef D_CC_D_H #define D_CC_D_H -#include "d/a/d_a_base.h" -#include "d/col/c/c_m3d_g_aab.h" -#include "d/col/c/c_m3d_g_cps.h" -#include "d/col/c/c_m3d_g_cyl.h" -#include "d/col/c/c_m3d_g_sph.h" -#include "d/col/c/c_m3d_g_unk.h" -#include "f/f_base_id.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/c/c_m3d.h" #include "m/m_vec.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 - -class dCcD_DivideArea : public cM3dGAab { -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(cM3dGAab const &); - /* 803282d0 */ void CalcDivideInfo(dCcD_DivideInfo *, cM3dGAab const &, u32); - /* 80328470 */ void CalcDivideInfoOverArea(dCcD_DivideInfo *, cM3dGAab const &); -}; // Size = 0x40 - -class dCcD_GAtTgCoCommonBase { -protected: - /* 0x00 */ u32 field_0x00; - /* 0x04 */ s8 mEffCounter; - /* 0x08 */ dAcRef_c mActor; - /* 0x14 */ u32 field_0x14; - -public: - dCcD_GAtTgCoCommonBase(); - virtual ~dCcD_GAtTgCoCommonBase(); - - void resetEffCounter() { - mEffCounter = 0; - } - void resetField0x14() { - field_0x14 = 0; - } - u32 getField0x14() { - return field_0x14; - } - void decreaseCount(); - void unlink(); - dAcBase_c *getActor(); - void setActor(dAcBase_c *); +struct dCcD_SrcCps { + /* 0x00 */ cCcD_SrcGObj mObjInf; + /* 0x44 */ cCcD_SrcCpsAttr mCpsInf; }; -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 */ u16 field_0x08; - /* 0x10 */ u16 field_0x0A; - /* 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 */ u32 field_0x58; - /* 0x5C */ u8 field_0x5C[0x6C - 0x5C]; - /* 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 setSrcFlag(u32 flag) { - mSrc.base.mGFlag = flag; - } - void setSrc0x0A(u32 flag) { - mSrc.field_0x0A = flag; - } - u32 get0x58() { - return field_0x58; - } - 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 { +// Capsule +class dCcD_Cps : public cCcD_Obj, public cCcD_CpsAttr { public: - /* 0x00 */ u8 UNK_0x00[0x18 - 0x00]; - /* 0x18 */ dCcD_DivideInfo field_0x18; - - dCcD_ShapeAttr(); + dCcD_Cps(); + virtual ~dCcD_Cps(); - /* 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; + virtual cCcD_ShapeAttr *GetShapeAttr() override; - static mVec3_c m_virtual_center; + void Set(const dCcD_SrcCps &src); + void unknownCalc(); }; -// 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; - } - - void setField0x38(s32 val) { - field_0x38 = val; - } +struct dCcD_SrcTri { + /* 0x00 */ cCcD_SrcGObj mObjInf; }; -// 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; - +class dCcD_Tri : public cCcD_Obj, public cCcD_TriAttr { 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 void setTgFlag(u32 flag) { - mGObjTg.setSrcFlag(flag); - } - - inline mVec3_c *getAtVec() { - return mGObjAt.GetSomeVec(); - } - - bool someInteractCheck() { - return ((mGObjTg.getField0x14() & 1) != 0 && mGObjTg.getActor() != nullptr); - } - - void setTgField0x0A(u32 val) { - mGObjTg.setSrc0x0A(val); - } - - void ResetAtHit(); - void ResetTgHit(); - void ResetCoHit(); - - mVec3_c *GetAtHitPosP(); - mVec3_c *GetAtHitPosP2(); + dCcD_Tri(); + virtual ~dCcD_Tri(); - dAcBase_c *GetAtActor(); - bool CheckCollidedMask(u32 mask); - dAcBase_c *GetTgActor(); - dAcBase_c *GetCoActor(); + virtual cCcD_ShapeAttr *GetShapeAttr() override; - void adjustHitPos(f32 dx, f32 dz); + void Set(const dCcD_SrcTri &src); }; -struct dCcD_SrcCylAttr { -public: - /* 0x00 */ f32 mRadius; - /* 0x04 */ f32 mHeight; -}; // Size = 0x8 - -struct dCcD_SrcSphAttr { - /* 0x00 */ f32 mRadius; -}; // Size = 0x4 - -struct dCcD_SrcAabbAttr { - /* 0x00 */ f32 minX, minY, minZ, maxX, maxY, maxZ; -}; // Size = 0x18 - -struct dCcD_SrcUnk1Attr {}; - -class cM3dGUnk1 { -public: - /* 0x00 */ cM3dGCps mCps; - /* 0x28 */ mVec3_c mVirtualCenter; - cM3dGUnk1(); -}; - -class cM3dGUnk2 { -public: +struct dCcD_SrcCyl { + /* 0x00 */ cCcD_SrcGObj mObjInf; + /* 0x40 */ cCcD_SrcCylAttr mCylInf; }; -// Unk1 -class dCcD_ShapeAttr1 : public dCcD_ShapeAttr, public cM3dGUnk1 { +// Cylinder +class dCcD_Cyl : public cCcD_Obj, public cCcD_CylAttr { public: - dCcD_ShapeAttr1(); - - void init(const dCcD_SrcUnk1Attr &); + dCcD_Cyl(); + virtual ~dCcD_Cyl(); - /* 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; + virtual cCcD_ShapeAttr *GetShapeAttr() override; + void Set(const dCcD_SrcCyl &src); + void setCenter(const mVec3_c &); + void moveCenter(const mVec3_c &); }; -// 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; +struct dCcD_SrcSph { + /* 0x00 */ cCcD_SrcGObj mObjInf; + /* 0x40 */ cCcD_SrcSphAttr mSphInf; }; -// Aabb -class dCcD_ShapeAttr5 : public dCcD_ShapeAttr, public cM3dGUnk { +// Sphere +class dCcD_Sph : public cCcD_Obj, public cCcD_SphAttr { public: - dCcD_ShapeAttr5(); + dCcD_Sph(); + virtual ~dCcD_Sph(); - 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; + virtual cCcD_ShapeAttr *GetShapeAttr() override; + void Set(const dCcD_SrcSph &src); + void setCenter(const mVec3_c &); + void moveCenter(const mVec3_c &); + void setCenterAndAtVec(const mVec3_c &, const mVec3_c &); }; -// 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; +struct dCcD_SrcUnk { + /* 0x00 */ cCcD_SrcGObj mObjInf; + /* 0x40 */ cCcD_SrcUnkAttr mUnkInf; }; -// Sph -class dCcD_ShapeAttr4 : public dCcD_ShapeAttr, public cM3dGSph { +class dCcD_Unk : public cCcD_Obj, public cCcD_UnkAttr { public: - dCcD_ShapeAttr4(); + dCcD_Unk(); + virtual ~dCcD_Unk(); - void init(const dCcD_SrcSphAttr &); + virtual cCcD_ShapeAttr *GetShapeAttr() override; - /* 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; + void Set(const dCcD_SrcUnk &src); }; #endif diff --git a/include/d/col/cc/d_cc_mass_s.h b/include/d/col/cc/d_cc_mass_s.h new file mode 100644 index 000000000..d6c7db551 --- /dev/null +++ b/include/d/col/cc/d_cc_mass_s.h @@ -0,0 +1,104 @@ + +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/c/c_cc_d.h" +#include "m/m_vec.h" + +typedef void (*dCcMassS_ObjCallback)(dAcObjBase_c *, mVec3_c *, u32); + +class dCcMassS_Obj { +private: + /* 0x00 */ cCcD_Obj *mpObj; + /* 0x04 */ u8 mPriority; + /* 0x08 */ dCcMassS_ObjCallback mpCallback; + /* 0x0C */ cCcD_DivideInfo mDivideInfo; + /* 0x1C vtable*/ + +public: + dCcMassS_Obj(); + virtual ~dCcMassS_Obj(); + void Set(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback); + void Clear(); + + cCcD_Obj *GetObj() { + return mpObj; + } + u8 GetPriority() const { + return mPriority; + } + dCcMassS_ObjCallback GetCallback() const { + return mpCallback; + } + cCcD_DivideInfo &GetDivideInfo() { + return mDivideInfo; + } +}; + +class dCcMassS_HitInf { +private: + /* 0x00 */ cCcD_Obj *mpArea; + /* 0x04 */ cCcD_Obj *mpAtObj; + /* 0x08 */ cCcD_Obj *mpCoObj; + /* 0x0C */ f32 mCoHitLen; + /* 0x10 vtable */ +public: + dCcMassS_HitInf(); + virtual ~dCcMassS_HitInf(); + + void ClearPointer(); + void SetAreaHitObj(cCcD_Obj *obj) { + mpArea = obj; + } + void SetCoHitObj(cCcD_Obj *obj) { + mpCoObj = obj; + } + void SetAtHitObj(cCcD_Obj *obj) { + mpAtObj = obj; + } + void SetCoHitLen(f32 len) { + mCoHitLen = len; + } + cCcD_Obj *GetAtHitObj() const { + return mpAtObj; + } +}; + +class dCcMassS_Mng { +public: + /* 0x0000 */ cCcD_DivideArea mDivideArea; + /* 0x0040 */ s32 mMassObjCount; + /* 0x0044 */ dCcMassS_Obj mMassObjs[20]; + /* 0x02C4 */ s32 mMassAreaCount; + /* 0x02C8 */ dCcMassS_Obj mMassAreas[5]; + /* 0x0368 */ cCcD_CylAttr mCylAttr; + /* 0x03A8 */ u8 field_0x3A8; + /* 0x03A9 */ u8 field_0x3A9; + /* 0x03AA */ u8 field_0x3AA; + /* 0x03AB */ u8 mResultCam; + /* 0x03AC */ Vec mCamTopPos; + /* 0x03B8 */ f32 mCamTopDist; + /* 0x03BC */ Vec mCamBottomPos; + /* 0x03C8 */ f32 mCamBottomDist; + /* 0x03CC */ cCcD_CpsAttr mCpsAttr; + /* 0x042C */ cCcD_DivideInfo mDivideInfo; + /* 0x043C vtable */ + +public: + dCcMassS_Mng(); + virtual ~dCcMassS_Mng(); + + void Ct(); + + void SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3); + void Prepare(); + u32 Chk(mVec3_c *p_xyz, dAcObjBase_c **p_actor, dCcMassS_HitInf *p_hitInf); + void Clear(); + + // Not original names, but made distinct for clarity (original was just one `Set) + void SetObj(cCcD_Obj *p_obj, u8 priority); + void SetArea(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback); + + // void SetCam(cM3dGCps const &cps); + // u8 GetResultCam() const; + // void GetCamTopPos(Vec *p_out); +}; diff --git a/include/d/col/cc/d_cc_mgr.h b/include/d/col/cc/d_cc_mgr.h deleted file mode 100644 index 97fd9cfbf..000000000 --- a/include/d/col/cc/d_cc_mgr.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef TOSORT_D_CC_MGR_H -#define TOSORT_D_CC_MGR_H - -#include "d/col/cc/d_cc_d.h" - -class ColliderManager { -public: - static ColliderManager *getColliderManager(); - - void addCollider(dCcD_GObjInf *collider); -}; - -#endif diff --git a/include/d/col/cc/d_cc_s.h b/include/d/col/cc/d_cc_s.h new file mode 100644 index 000000000..7b9096a71 --- /dev/null +++ b/include/d/col/cc/d_cc_s.h @@ -0,0 +1,78 @@ +#include "common.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/cc/d_cc_mass_s.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" + +struct mMtxPair { + mMtx_c mMtx; + mMtx_c mInv; +}; + +class dCcS { +private: + /* 0x0000 */ cCcD_Obj *mpObjAt[0x200]; + /* 0x0800 */ cCcD_Obj *mpObjTg[0x300]; + /* 0x1400 */ cCcD_Obj *mpObjCo[0x200]; + /* 0x1c00 */ cCcD_Obj *mpObj[0x340]; + /* 0x2900 */ UNKTYPE *mpUnk[0x100]; + /* 0x2D00 */ u16 mObjAtCount; + /* 0x2d02 */ u16 mObjTgCount; + /* 0x2D04 */ u16 mObjCoCount; + /* 0x2D06 */ u16 mObjCount; + /* 0x2D08 */ u32 mUnkCount; + /* 0x2D0C */ cCcD_DivideArea mDivideArea; + /* 0x2D4C */ bool mbAreaSet; + /* 0x2D50 */ mMtxPair mAreas[16]; // could be a structure? + /* 0x3350 */ int mAreaCount; + /* 0x3354*/ dCcMassS_Mng mMassMng; + +public: + dCcS(); + virtual ~dCcS(); + + // This is a remnant of cCcS, which dCcS::Ct calls. Idk the correct layout + void Ct_cCcS(); + + void Ct(); + void Dt(); + + static bool ChkRemoveActor(dAcObjBase_c *pActor); + static bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *); + static bool ChkAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *); + void ChkAtTg(); + + static bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *); + static void SetCoCommonHitInf(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32); + void ChkCo(); + + static bool ChkSheildFrontRange(cCcD_Obj *, cCcD_Obj *); + static bool ChkShield(cCcD_Obj *, cCcD_Obj *, cCcD_ShieldChkCallback *); + static bool ChkAtTgHitAfterCross(bool, bool, cCcD_Obj *, cCcD_Obj *); + static void SetCoObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *); + static void SetPosCorrect(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32); + static void CalcParticleAngle(cCcD_Obj *, cCcD_Obj *, mAng3_c *, bool); + static void fn_80356fd0(mVec3_c *, cCcD_Obj *, cCcD_Obj *); + static u32 ProcAtTgHitmark(cCcD_Obj *, cCcD_Obj *, mVec3_c *, u32, mVec3_c *); + static void SetAtTgObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, mVec3_c *, bool); + + bool ChkCamera(mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32); + bool + ChkCameraPoint(const mVec3_c &, const mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32); + + bool ChkCo(const mVec3_c &, dAcObjBase_c *); + bool fn_80357c90(const mVec3_c &, const mVec3_c &, u32, UNKTYPE **); + void Set(cCcD_Obj *); + void MoveAfterCheck(); + void RemoveDeadObj(); + void CalcArea(); + void Move(); + void MassClear(); + void SetArea(mMtx_c *); + void ClearArea(); + void AdjustHitPos(); + + static dCcS *GetInstance(); + static dCcS *sInstance; +}; diff --git a/include/d/col/cc/d_cc_shape_colliders.h b/include/d/col/cc/d_cc_shape_colliders.h deleted file mode 100644 index 44b085b87..000000000 --- a/include/d/col/cc/d_cc_shape_colliders.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef D_CC_SHAPE_COLLIDERS_H -#define D_CC_SHAPE_COLLIDERS_H - -#include "d/col/cc/d_cc_d.h" -#include "m/m_vec.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/d/d_shadow.h b/include/d/d_shadow.h new file mode 100644 index 000000000..e30b8f2c5 --- /dev/null +++ b/include/d/d_shadow.h @@ -0,0 +1,9 @@ +#include "m/m3d/m_shadow.h" + +// This is unofficial, idk if this is close, but this is a common shadow extension. +// +class dShadowCircle_c : public m3d::mShadowCircle_c { +public: + dShadowCircle_c() {} + virtual ~dShadowCircle_c() {} +}; diff --git a/include/d/t/d_t_reaction.h b/include/d/t/d_t_reaction.h index 5c2d344e8..5c307d2e5 100644 --- a/include/d/t/d_t_reaction.h +++ b/include/d/t/d_t_reaction.h @@ -2,7 +2,7 @@ #define D_T_REACTION_H #include "d/a/obj/d_a_obj_base.h" -#include "d/col/cc/d_cc_shape_colliders.h" +#include "d/col/cc/d_cc_d.h" #include "s/s_State.hpp" #include "s/s_StateMgr.hpp" #include "toBeSorted/dowsing_target.h" @@ -36,7 +36,7 @@ class dTgReaction_c : public dAcObjBase_c { return params & 0xFF; } - int getParam0x08() { + u32 getParam0x08() { return (params >> 8) & 0xFF; } diff --git a/include/egg/math/eggMath.h b/include/egg/math/eggMath.h index 32023ac6d..ddab706a2 100644 --- a/include/egg/math/eggMath.h +++ b/include/egg/math/eggMath.h @@ -2,6 +2,7 @@ #define EGG_MATH_H #include "common.h" +#include "math.h" namespace EGG { diff --git a/include/egg/math/eggMatrix.h b/include/egg/math/eggMatrix.h index c2eb29582..890602830 100644 --- a/include/egg/math/eggMatrix.h +++ b/include/egg/math/eggMatrix.h @@ -5,7 +5,6 @@ #include "egg/math/eggQuat.h" #include "egg/math/eggVector.h" - namespace EGG { struct Matrix34f { diff --git a/include/m/m_angle.h b/include/m/m_angle.h index 8a8450c36..2123277bb 100644 --- a/include/m/m_angle.h +++ b/include/m/m_angle.h @@ -1,6 +1,7 @@ #ifndef M_ANGLE_H #define M_ANGLE_H +#include "c/c_math.h" #include "common.h" #include "nw4r/math/math_triangular.h" @@ -9,6 +10,10 @@ struct mAng { mAng(s16 s) : mVal(s) {} mAng(const mAng &other) : mVal(other.mVal) {} + static mAng atan2s(f32 a, f32 b) { + return mAng(cM::atan2s(a, b)); + } + operator s16() const { return mVal; } @@ -25,6 +30,10 @@ struct mAng { mVal += other.mVal; return *this; } + mAng &operator-=(const mAng &other) { + mVal -= other.mVal; + return *this; + } s32 step(s16 target, s32 steps, s16 max, s16 min); diff --git a/include/m/m_mtx.h b/include/m/m_mtx.h index 4288a796e..dd4cdf57d 100644 --- a/include/m/m_mtx.h +++ b/include/m/m_mtx.h @@ -7,9 +7,9 @@ #include "egg/math/eggMatrix.h" #include "m/m_angle.h" #include "m/m_vec.h" -#include "nw4r/nw4r_types.h" +#include "nw4r/types_nw4r.h" -class mMtx_c { +class mMtx_c : public EGG::Matrix34f { typedef f32 (*MtxRef)[4]; typedef const f32 (*MtxRefConst)[4]; @@ -17,16 +17,6 @@ class mMtx_c { mMtx_c(){}; mMtx_c(f32 xx, f32 xy, f32 xz, f32 xw, f32 yx, f32 yy, f32 yz, f32 yw, f32 zx, f32 zy, f32 zz, f32 zw); - // not sure if this breaks anything but we need a matrix type - // with an inline copy assignment operator - void set(const mMtx_c &r) { - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 4; j++) { - m[i][j] = r.m[i][j]; - } - } - } - operator MtxRef() { return (MtxRef)(this); } @@ -36,15 +26,9 @@ class mMtx_c { operator nw4r::math::MTX34 *() { return (nw4r::math::MTX34 *)(this); } - operator EGG::Matrix34f *() { - return (EGG::Matrix34f *)(this); - } operator nw4r::math::MTX34 &() { return *(nw4r::math::MTX34 *)(this); } - operator EGG::Matrix34f &() { - return *(EGG::Matrix34f *)(this); - } void XrotS(const mAng &angle); ///< Generates a rotation matrix for the X axis with the given angle. void XrotM(const mAng &angle); ///< Rotates the matrix on the X axis by the given angle. @@ -53,15 +37,23 @@ class mMtx_c { void ZrotS(const mAng &angle); ///< Generates a rotation matrix for the Z axis with the given angle. void ZrotM(const mAng &angle); ///< Rotates the matrix on the Z axis by the given angle. - void ZXYrotS(mAng xRot, mAng yRot, - mAng zRot); ///< Generates the matrix on the Y, X and Z axes by the given angles. - void ZXYrotM(mAng xRot, mAng yRot, - mAng zRot); ///< Rotates the matrix on the Y, X and Z axes by the given angles. - void XYZrotS(mAng xRot, mAng yRot, - mAng zRot); ///< Generates the matrix on the Z, Y and X axes by the given angles. - - void XYZrotM(mAng xRot, mAng yRot, - mAng zRot); ///< Rotates the matrix on the Z, Y and X axes by the given angles. + void ZXYrotS( + const mAng &xRot, const mAng &yRot, + const mAng &zRot + ); ///< Generates the matrix on the Y, X and Z axes by the given angles. + void ZXYrotM( + const mAng &xRot, const mAng &yRot, + const mAng &zRot + ); ///< Rotates the matrix on the Y, X and Z axes by the given angles. + void XYZrotS( + const mAng &xRot, const mAng &yRot, + const mAng &zRot + ); ///< Generates the matrix on the Z, Y and X axes by the given angles. + + void XYZrotM( + const mAng &xRot, const mAng &yRot, + const mAng &zRot + ); ///< Rotates the matrix on the Z, Y and X axes by the given angles. void toRot(mAng3_c &out) const; ///< Converts the matrix to a rotation vector. @@ -71,22 +63,6 @@ class mMtx_c { void rot(int, int); // does some werrd operation to rotate the matrix bool quatRelated(); - void SetTranslation(const mVec3_c &t) { - m[0][3] = t.x; - m[1][3] = t.y; - m[2][3] = t.z; - } - -public: - union { - f32 m[3][4]; - struct { - f32 xx, xy, xz, xw; - f32 yx, yy, yz, yw; - f32 zx, zy, zz, zw; - }; - }; - public: static mMtx_c Identity; }; diff --git a/include/m/m_vec.h b/include/m/m_vec.h index 4d6e2db11..f9bf3c484 100644 --- a/include/m/m_vec.h +++ b/include/m/m_vec.h @@ -1,9 +1,13 @@ #ifndef M_VEC_H #define M_VEC_H +#include "c/c_math.h" #include "common.h" #include "egg/math/eggVector.h" #include "m/m_angle.h" +#include "nw4r/types_nw4r.h" + +class mAng; class mVec3_c : public EGG::Vector3f { public: @@ -148,6 +152,12 @@ class mVec3_c : public EGG::Vector3f { return *this; } + mVec3_c operator-(f32 f) const { + return mVec3_c(x - f, y - f, z - f); + } + mVec3_c operator+(f32 f) const { + return mVec3_c(x + f, y + f, z + f); + } mVec3_c &operator-=(f32 f) { x -= f; y -= f; @@ -207,6 +217,17 @@ class mVec3_c : public EGG::Vector3f { void rotY(const mAng &angle); + // ??? + s32 getAngleY() const { + return mAng(cM::atan2s(x, z)); + } + + void CopyTo(nw4r::math::VEC3 *p) { + p->x = x; + p->y = y; + p->z = z; + } + static mVec3_c Zero; static mVec3_c Ex; static mVec3_c Ey; diff --git a/include/nw4r/math/math_arithmetic.h b/include/nw4r/math/math_arithmetic.h index e6ce14d32..b18941f24 100644 --- a/include/nw4r/math/math_arithmetic.h +++ b/include/nw4r/math/math_arithmetic.h @@ -1,5 +1,6 @@ #ifndef NW4R_MATH_ARITHMETIC_H #define NW4R_MATH_ARITHMETIC_H + #include "math.h" #include "nw4r/types_nw4r.h" // IWYU pragma: export #include "rvl/OS.h" // IWYU pragma: export diff --git a/include/nw4r/nw4r_types.h b/include/nw4r/nw4r_types.h deleted file mode 100644 index 5d666e6ff..000000000 --- a/include/nw4r/nw4r_types.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef NW4R_TYPES_H -#define NW4R_TYPES_H - -namespace nw4r { -namespace ut { -template -struct TextWriterBase; -template -struct TagProcessorBase; - -struct Color; -struct FileStream; - -namespace detail { -struct RuntimeTypeInfo; -} -} // namespace ut - -namespace ef { -struct DrawOrder; -struct DrawInfo; -struct DrawStrategy; -struct DrawStrategyImpl; -struct DrawStrategyBuilder; -struct Effect; -struct EffectSystem; -struct EffectProject; -struct Emitter; -struct EmitterDrawSetting; -struct EmitFormBuilder; -struct ResEmitter; -struct EmitterResource; -struct EmitterForm; -struct EmitterInheritSetting; -struct Particle; -struct ParticleManager; -struct MemoryManager; -struct MemoryManagerBase; -} // namespace ef - -namespace math { -class VEC2; -class VEC3; -class MTX33; -class MTX34; -class AABB; -class FRUSTUM; -} // namespace math - -namespace snd { -struct FxBase; -struct SoundPlayer; -struct SoundHandle; -struct SeqSoundHandle; -struct SoundArchive; -struct SoundArchivePlayer; -struct Sound3DActor; -struct Sound3DListener; -struct Sound3DManager; -struct SoundHandle; -struct StrmSoundHandle; -struct WaveSoundHandle; - -namespace detail { -struct BasicSound; -struct BasicPlayer; -struct ChannelManager; -struct SeqSound; -struct SeqPlayer; -struct MmlParser; -struct MmlSeqTrack; -struct SeqTrack; -struct SeqTrackAllocator; -template -struct SoundInstanceManager; -struct StrmBufferPool; -struct StrmSound; -struct NoteOnCallback; -struct PlayerHeap; -struct SoundArchiveFileReader; -struct SoundThread; -struct WaveSound; -struct StrmPlayer; -struct WsdPlayer; -} // namespace detail -} // namespace snd - -namespace g3d { -struct AnmObjVis; -struct AnmObjVisNode; -struct AnmObjVisOR; -struct AnmObjVisRes; -struct AnmObj; -struct AnmObjChr; -struct FuncObjCalcWorld; -struct AnmScn; -struct AnmScnRes; -struct CameraAnmResult; -struct Draw1Mat1ShpSwap; -struct DrawResMdlReplacement; -struct FogAnmResult; -struct ResFile; -struct ResMdl; -struct ResPltt; -struct ResTex; -struct ResTexSrt; -struct ResMat; -struct ResTexPlttInfo; -struct ResShp; -struct ResFog; -struct ResAnmChr; -struct ResAnmVis; -struct ResAnmClr; -struct ResAnmTexPat; -struct ResAnmTexSrt; -struct ResAnmShp; -struct ResAnmScn; -struct ResAnmFog; -struct ResAnmCamera; -struct ResVtxPos; -struct ResVtxNrm; -struct ResVtxClr; -struct ResVtxTexCoord; -struct ClrAnmResult; -struct TexPatAnmResult; -struct TexSrtAnmResult; -struct ScnMdl1Mat1Shp; -struct TexSrt; -struct TexSrtTypedef; -struct LightObj; -struct LightAnmResult; -struct LightSet; -struct LightSetting; -struct LightSetData; -struct AmbLightObj; -struct AmbLightAnmResult; -struct Fog; -struct ScnRoot; -struct ScnProc; -struct ScnLeaf; -struct ScnObj; -struct ScnRfl; -struct ScnGroup; -struct ScnMdlSimple; -struct ScnMdl; -struct IScnObjGather; -struct IScnObjCallback; - -namespace G3DState { -struct IndMtxOp; -} -} // namespace g3d - -namespace lyt { -struct Size; - -namespace detail { -struct PaneBase; -struct TexCoordAry; -} // namespace detail - -namespace res { -struct Group; -struct Pane; -struct Bounding; -struct AnimationBlock; -struct BinaryFileHeader; -} // namespace res - -struct Group; -struct GroupContainer; -struct Pane; -struct DrawInfo; -struct AnimResource; -struct AnimTransform; -struct AnimTransformBasic; -struct AnimationLink; -struct ResourceAccessor; -struct ArcResourceAccessor; -struct FontRefLink; -struct Material; -struct Layout; -struct Bounding; -struct ResBlockSet; -struct TexMap; -} // namespace lyt -} // namespace nw4r - -#endif diff --git a/include/nw4r/types_nw4r.h b/include/nw4r/types_nw4r.h index f9a31cf26..4123a7f32 100644 --- a/include/nw4r/types_nw4r.h +++ b/include/nw4r/types_nw4r.h @@ -1,5 +1,6 @@ #ifndef NW4R_TYPES_H #define NW4R_TYPES_H + #include "common.h" #define NW4R_BYTEORDER_BIG 0xFEFF diff --git a/include/rvl/OS/OSError.h b/include/rvl/OS/OSError.h index f26db27e4..d3150d686 100644 --- a/include/rvl/OS/OSError.h +++ b/include/rvl/OS/OSError.h @@ -1,14 +1,16 @@ #ifndef RVL_SDK_OS_ERROR_H #define RVL_SDK_OS_ERROR_H + #include "__va_arg.h" #include "common.h" + #ifdef __cplusplus extern "C" { #endif // Forward declarations -typedef struct OSContext; +typedef struct OSContext OSContext; #define OSError(...) OSPanic(__FILE__, __LINE__, __VA_ARGS__) #define OSAssert(exp, ...) \ diff --git a/include/s/s_State.hpp b/include/s/s_State.hpp index b407ec4b7..76339e3a3 100644 --- a/include/s/s_State.hpp +++ b/include/s/s_State.hpp @@ -25,10 +25,8 @@ mStateMgr.getStateID(); \ } -#define UI_STATE_MGR_DECLARE(class_name) \ - sFStateMgr_c mStateMgr; +#define UI_STATE_MGR_DECLARE(class_name) sFStateMgr_c mStateMgr; -#define STATE_MGR(class_name) \ - sFStateMgr_c +#define STATE_MGR(class_name) sFStateMgr_c #endif diff --git a/include/toBeSorted/effects_struct.h b/include/toBeSorted/effects_struct.h index c920f9611..847d6e691 100644 --- a/include/toBeSorted/effects_struct.h +++ b/include/toBeSorted/effects_struct.h @@ -18,6 +18,8 @@ class EffectsStruct { mpOwner = owner; } + void remove(bool); + private: u8 field_0x20[0x28 - 0x20]; /* 0x28 */ dBase_c *mpOwner; diff --git a/src/REL/d/a/d_a_bombf.cpp b/src/REL/d/a/d_a_bombf.cpp index 0f9ad7c4b..609c3eef2 100644 --- a/src/REL/d/a/d_a_bombf.cpp +++ b/src/REL/d/a/d_a_bombf.cpp @@ -1,9 +1,226 @@ #include "d/a/d_a_bombf.h" +#include "common.h" +#include "d/a/d_a_player.h" +#include "d/col/bg/d_bg_s.h" +#include "d/col/bg/d_bg_s_lin_chk.h" +#include "d/flag/sceneflag_manager.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "toBeSorted/time_area_mgr.h" + SPECIAL_ACTOR_PROFILE(BOMBF, dAcBombf_c, fProfile::BOMBF, 0x129, 0, 4099); STATE_DEFINE(dAcBombf_c, Wait); +bool dAcBombf_c::createHeap() { + nw4r::g3d::ResFile resFile = getOarcResFile("FlowerBomb"); + nw4r::g3d::ResMdl resMdl = resFile.GetResMdl("LeafBomb"); + return mModel.create(resMdl, &heap_allocator, 0x120, 1, nullptr); +} + +int dAcBombf_c::actorCreate() { + mDespawnSceneFlag = (params >> 8) & 0xFF; + field_0x3D4 = (params >> 16) & 0xF; + if (SceneflagManager::sInstance->checkBoolFlag(roomid, mDespawnSceneFlag)) { + return FAILED; + } + + CREATE_ALLOCATOR(dAcBombf_c); + + field_0x3D2 = (params >> 4) & 0xF; + field_0x3D0 = field_0x3D2 == 1; + if (field_0x3D0) { + mModel.setPriorityDraw(0x82, 0x7F); + } + + mStts.SetDefaultRank(); + forwardAccel = -2.0f; + forwardMaxSpeed = -80.0f; + mStateMgr.changeState(StateID_Wait); + boundingBox.Set(mVec3_c(-80.0, -50.0f, -80.0f), mVec3_c(80.0, 60.0f, 80.0f)); + angle = rotation; + if (mDespawnSceneFlag < 0xFF) { + actor_properties = (actor_properties & ~1) | 4; + } + + return SUCCEEDED; +} + +int dAcBombf_c::actorPostCreate() { + // Preamble problem + mMtx_c mtx; + mtx.ZXYrotS(rotation.x, rotation.y, rotation.z); + mVec3_c v; + PSMTXMultVecSR(mtx, mVec3_c::Ey, v); + mVec3_c v3 = position + v * 10.0f; + mVec3_c v4 = position - v * 10.0f; + + if (dBgS_ObjLinChk::LineCross(&v3, &v4, this)) { + position = dBgS_ObjLinChk::GetInstance().GetLinEnd(); + if (rotation.x == 0 && rotation.z == 0 && dBgS_ObjLinChk::ChkGround()) { + cM3dGPla pla; + dBgS::GetInstance()->GetTriPla(dBgS_ObjLinChk::GetInstance(), &pla); + rotation.x = pla.GetAngle(rotation.y); + rotation.z = pla.GetAngle(rotation.y - 0x4000); + } + + if (dBgS::GetInstance()->ChkMoveBG(dBgS_ObjLinChk::GetInstance(), false)) { + field_0x398.SetPolyInfo(dBgS_ObjLinChk::GetInstance()); + actor_properties = (actor_properties & ~1) | 4; + } + mLightingInfo.mLightingCode = dBgS::GetInstance()->GetLightingCode(dBgS_ObjLinChk::GetInstance()); + } + + if (field_0x3D2 == 0 || field_0x3D2 == 2) { + bool b = dTimeAreaMgr_c::sInstance->fn_800B9B60(roomid, position); + if (b) { + mTimeAreaStruct.field_0x00 = 1.0f; + } + if ((b && field_0x3D2 == 2) || (!b && field_0x3D2 == 0)) { + mModel.setScale(0.0001f, 0.0001f, 0.0001f); + if (mBombRef.get() != nullptr) { + mBombRef.get()->mField_0xA50 = 0.0001f; + } + } + } + + updateMatrix(); + mModel.setLocalMtx(mWorldMtx); + regrowBomb(); + if (mBombRef.get() != nullptr) { + mBombRef.get()->mScale.set(0.95f, 0.95f, 0.95f); + } + + return SUCCEEDED; +} + +int dAcBombf_c::doDelete() { + return SUCCEEDED; +} + +int dAcBombf_c::actorExecute() { + if (field_0x3D3 != 0) { + mMtx_c &mtx = mWorldMtx; + mtx.getTranslation(position); + dAcBomb_c *bomb = mBombRef.get(); + if (bomb != nullptr) { + bomb->setTransformFromFlower(mtx); + } + mModel.setLocalMtx(mWorldMtx); + poscopy2 = position; + poscopy3 = position; + field_0x3D3 = 0; + } else { + if (dBgS::GetInstance()->ChkMoveBG(field_0x398, true)) { + dBgS::GetInstance()->MoveBgTransPos(field_0x398, true, &position, &angle, &rotation); + updateMatrix(); + dAcBomb_c *bomb = mBombRef.get(); + if (bomb != nullptr) { + bomb->setTransformFromFlower(mWorldMtx); + } + mModel.setLocalMtx(mWorldMtx); + poscopy2 = position; + poscopy3 = position; + } + } + + mStateMgr.executeState(); + return SUCCEEDED; +} + +int dAcBombf_c::draw() { + if (field_0x3D0 != 0 && (dAcPy_c::LINK->mActionFlagsCont & 0x400000) == 0) { + return SUCCEEDED; + } + drawModelType1(&mModel); + return SUCCEEDED; +} + +void dAcBombf_c::regrowBomb() { + // These params are hell + s8 viewclip_idx = (actor_properties & 1) != 0 ? viewclip_index : -1; + u32 actorParams1; + actorParams1 = 1; + if (field_0x3D0) { + actorParams1 = 2; + } + dAcObjBase_c *ac = dAcObjBase_c::create( + "Bomb", roomid, actorParams1, &position, nullptr, nullptr, 0xFFFFFFFF, 0xFFFF, viewclip_idx + ); + mBombRef.link(static_cast(ac)); + dAcBomb_c *bomb = mBombRef.get(); + if (bomb != nullptr) { + field_0x394 = 0x3C; + bomb->setTransformFromFlower(mWorldMtx); + if ((actor_properties & 1) != 0) { + bomb->actor_properties |= 1; + } + if (field_0x3D4 == 0) { + bomb->mField_0xA44 *= 1.5f; + } + } +} + void dAcBombf_c::initializeState_Wait() {} -void dAcBombf_c::executeState_Wait() {} + +extern "C" void fn_800298B0(u16, mVec3_c *, mVec3_c *, u32, u32, u32, u32, u32); +extern "C" u16 lbl_8057A750; + +void dAcBombf_c::executeState_Wait() { + // Stack problems + if (SceneflagManager::sInstance->checkBoolFlag(roomid, mDespawnSceneFlag)) { + deleteRequest(); + dAcBomb_c *bomb = mBombRef.get(); + if (bomb != nullptr) { + bomb->deleteRequest(); + bomb->mEffect1.remove(true); + bomb->mEffect2.remove(true); + } + return; + } + + f32 scaleFactor = mScale.x; + if (field_0x3D2 == 0 || field_0x3D2 == 2) { + mVec3_c m; + PSMTXMultVecSR(mWorldMtx, mVec3_c::Ey, m); + + mVec3_c m3 = position + (m * 30.0f); + + if (mTimeAreaStruct.check(roomid, m3, 0, 30.0f, 0.1f) && field_0x3D4 != 1) { + if (mTimeAreaStruct.field_0x04 == 1) { + playSound(0xC0A); + } else { + playSound(0xC0B); + } + fn_800298B0(lbl_8057A750, &position, nullptr, 0, 0, 0, 0, 0); + } + + scaleFactor *= mTimeAreaStruct.field_0x00; + if (field_0x3D2 == 2) { + scaleFactor = 1.0f - scaleFactor; + } + scaleFactor = nw4r::ut::Max(scaleFactor, 0.0001f); + mModel.setScale(scaleFactor, scaleFactor, scaleFactor); + } + dAcBomb_c *bomb = mBombRef.get(); + if (bomb != nullptr) { + if (!bomb->mStateMgr.isState(dAcBomb_c::StateID_FlowerWait) && field_0x3D0 == 0) { + mBombRef.unlink(); + field_0x394 = 0x3C; + } + } else { + if (field_0x394 != 0) { + field_0x394--; + } else if (field_0x3D0 == 0 || dAcPy_c::LINK->getSquareDistanceTo(position) > 22500.0f) { + regrowBomb(); + } + } + + bomb = mBombRef.get(); + if (bomb != nullptr) { + bomb->mField_0xA50 = scaleFactor; + } +} + void dAcBombf_c::finalizeState_Wait() {} diff --git a/src/REL/d/a/obj/d_a_obj_mole_soil.cpp b/src/REL/d/a/obj/d_a_obj_mole_soil.cpp index ca3d77625..0999c06a5 100644 --- a/src/REL/d/a/obj/d_a_obj_mole_soil.cpp +++ b/src/REL/d/a/obj/d_a_obj_mole_soil.cpp @@ -2,7 +2,6 @@ #include "s/s_Math.h" - SPECIAL_ACTOR_PROFILE(OBJ_MOLE_SOIL, dAcOmoleSoil_c, fProfile::OBJ_MOLE_SOIL, 0x008B, 0, 6); STATE_DEFINE(dAcOmoleSoil_c, Wait); @@ -24,10 +23,6 @@ bool dAcOmoleSoil_c::createHeap() { return true; } -bool intToBool(int a) { - return a; -} - int dAcOmoleSoil_c::create() { CREATE_ALLOCATOR(dAcOmoleSoil_c); 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 04ab84986..78a110353 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 @@ -50,7 +50,7 @@ int dAcOPoolCock_c::actorExecute() { mStateMgr.executeState(); calcVelocity(); position += velocity; - position += mCCdStruct.posIncrements; + position += mStts.mCcMove; 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 ffc37dfcc..18b8ca1bf 100644 --- a/src/REL/d/a/obj/d_a_obj_ring.cpp +++ b/src/REL/d/a/obj/d_a_obj_ring.cpp @@ -39,7 +39,7 @@ int dAcOring_c::actorExecute() { mStateMgr.executeState(); calcVelocity(); position += velocity; - position += mCCdStruct.posIncrements; + position += mStts.mCcMove; updateMatrix(); mModel.setLocalMtx(mWorldMtx); 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 fe74019dd..060ed803f 100644 --- a/src/REL/d/a/obj/d_a_obj_spike.cpp +++ b/src/REL/d/a/obj/d_a_obj_spike.cpp @@ -1,14 +1,13 @@ #include "d/a/obj/d_a_obj_spike.h" -#include "d/col/cc/d_cc_mgr.h" - +#include "d/col/cc/d_cc_s.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, 0x06, 0x407, 0, 0}, +dCcD_SrcUnk dAcOspike_c::sCcSrc = { + {{0x400, 0x2003F, {0, 0, 0}, 1, 0, 0, 0, 0}, + {0xFEB77DFF, 0x111, 0x06, 0x407, 0, }, {0}}, {-1.0f, -246.0f, -472.0f, 73.0f, 255.0f, 482.0f}}; // clang-format on @@ -30,15 +29,15 @@ int dAcOspike_c::create() { return FAILED; } - mCCdStruct.setField0x38ToMagicValue(); - mCollision.init(sCcSrc); - mCollision.initUnk(mCCdStruct); + mStts.SetDefaultRank(); + mCollision.Set(sCcSrc); + mCollision.SetStts(mStts); updateMatrix(); mMdl.setLocalMtx(mWorldMtx); mVec3_c tmp; PSMTXMultVecSR(mWorldMtx.m, mVec3_c::Ex, tmp); - mCollision.setAtVec(tmp); + mCollision.SetAtVec(tmp); mMtx_c mtx; mtx.XrotS(rotation.x); @@ -63,7 +62,7 @@ int dAcOspike_c::create() { tmp3.z = copy; } - mCollision.Set(tmp2, tmp3); + mCollision.cM3dGUnk::Set(tmp2, tmp3); mStateMgr.changeState(StateID_Wait); boundingBox.Set(mVec3_c(-10.0f, -250.0f, -480.0f), mVec3_c(80.0f, 260.0f, 490.0f)); return SUCCEEDED; @@ -75,8 +74,8 @@ int dAcOspike_c::doDelete() { int dAcOspike_c::actorExecute() { mStateMgr.executeState(); - mCollision.Set(position, rotation.y); - ColliderManager::getColliderManager()->addCollider(&mCollision); + mCollision.cM3dGUnk::Set(position, rotation.y); + dCcS::GetInstance()->Set(&mCollision); return 1; } 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 93fd5c245..9bcff77a8 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 @@ -1,13 +1,12 @@ #include "d/a/obj/d_a_obj_toD3_stone_figure.h" -#include "d/col/cc/d_cc_mgr.h" +#include "d/col/cc/d_cc_s.h" +#include "d/flag/storyflag_manager.h" #include "toBeSorted/attention.h" #include "toBeSorted/event.h" #include "toBeSorted/event_manager.h" -#include "d/flag/storyflag_manager.h" #include "toBeSorted/scgame.h" - SPECIAL_ACTOR_PROFILE(OBJ_TOD3_STONE, dAcOtoD3StoneFigure_c, fProfile::OBJ_TOD3_STONE, 0x1B3, 0, 0); STATE_DEFINE(dAcOtoD3StoneFigure_c, OneEye); @@ -18,10 +17,40 @@ 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, 0x06, 0x407, 0, 0}, - {0xE9}}, - {dAcOtoD3StoneFigure_c::sRadius, dAcOtoD3StoneFigure_c::sHeight} + { + { + 0, + 0, + { + 0, + 0, + 0 + }, + 0, + 0, + 0, + 0, + 0, + 0 + }, + { + 0xFEB77DFF, + 0x1000111, + { + 0x06, + 0x407 + }, + 0, + 0 + }, + { + 0xE9 + } + }, + { + dAcOtoD3StoneFigure_c::sRadius, + dAcOtoD3StoneFigure_c::sHeight + } }; // clang-format on @@ -42,16 +71,15 @@ int dAcOtoD3StoneFigure_c::create() { } mMdl.setLocalMtx(mWorldMtx); - mCCdStruct.setField0x38ToMagicValue(); - mCollision.init(sCcSrc); - mCollision.initUnk(mCCdStruct); + mStts.SetDefaultRank(); + mCollision.Set(sCcSrc); + mCollision.SetStts(mStts); 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); + dCcS::GetInstance()->Set(&mCollision); + mCollision.OnTgCoFlag(1); // ??? f32 a, b, c; @@ -66,7 +94,7 @@ int dAcOtoD3StoneFigure_c::create() { poscopy3.y = b; poscopy3.z = c; // poscopy3 = poscopy2; - mCollision.setSomeDefendValue(0x2000); + mCollision.SetTg_0x4C(0x2000); if (!mIsSkyKeepAlreadyOpen) { mStateMgr.changeState(StateID_OneEye); @@ -83,7 +111,7 @@ int dAcOtoD3StoneFigure_c::doDelete() { int dAcOtoD3StoneFigure_c::actorExecute() { mStateMgr.executeState(); - ColliderManager::getColliderManager()->addCollider(&mCollision); + dCcS::GetInstance()->Set(&mCollision); return SUCCEEDED; } 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 91a69637c..1754ca41c 100644 --- a/src/REL/d/a/obj/d_a_obj_triforce.cpp +++ b/src/REL/d/a/obj/d_a_obj_triforce.cpp @@ -1,16 +1,15 @@ #include "d/a/obj/d_a_obj_triforce.h" #include "c/c_math.h" -#include "d/col/cc/d_cc_mgr.h" +#include "d/col/cc/d_cc_s.h" #include "m/m_vec.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, 0x06, 0x407, 0, 0}, + {{0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0xFEB77DFF, 0x111, 0x06, 0x407, 0, 0}, {0xE9}}, {150.0f}}; // clang-format on @@ -36,13 +35,13 @@ int dAcOtriforce_c::create() { return FAILED; } - mCCdStruct.setField0x38ToMagicValue(); - mCollision.init(sCcSrc); - mCollision.initUnk(mCCdStruct); - mCollision.clearCoFlag(); + mStts.SetDefaultRank(); + mCollision.Set(sCcSrc); + mCollision.SetStts(mStts); + mCollision.ClrCoSet(); mStartingOffset = cM::rndInt(sStartingOffsetRange); mEffects.init(this); - mCollision.setSomeDefendValue(0x2000); + mCollision.SetTg_0x4C(0x2000); updateMatrix(); mScale.x = sScale; mScale.y = sScale; @@ -66,7 +65,7 @@ int dAcOtriforce_c::actorExecute() { mCollision.SetC(position.x, position.y + 90.0f + zero, position.z); - ColliderManager::getColliderManager()->addCollider(&mCollision); + dCcS::GetInstance()->Set(&mCollision); updateMatrix(); Mtx m; PSMTXScale(m, mScale.x, mScale.y, mScale.z); diff --git a/src/REL/d/t/d_t_reaction.cpp b/src/REL/d/t/d_t_reaction.cpp index b09a86cf9..5f9822811 100644 --- a/src/REL/d/t/d_t_reaction.cpp +++ b/src/REL/d/t/d_t_reaction.cpp @@ -4,10 +4,9 @@ #include "c/c_math.h" #include "d/a/d_a_player.h" #include "d/a/obj/d_a_obj_item.h" -#include "d/col/cc/d_cc_mgr.h" +#include "d/col/cc/d_cc_s.h" #include "d/flag/sceneflag_manager.h" - SPECIAL_ACTOR_PROFILE(TAG_REACTION, dTgReaction_c, fProfile::TAG_REACTION, 0x0151, 0, 0); STATE_DEFINE(dTgReaction_c, Wait); @@ -19,8 +18,8 @@ const f32 dTgReaction_c::sHeight = 100.0f; // clang-format off dCcD_SrcCyl dTgReaction_c::sCcSrc = { - {{{0}, 0, 0, 0, 0, 0, 0, 0, 0}, - {{0x10000}, 0x213, 0, 0x8, 0x8, 0}, + {{0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0x10000, 0x213, 0, 0x8, 0x8,}, {0xE8}}, {dTgReaction_c::sRadius, dTgReaction_c::sHeight} }; @@ -43,7 +42,7 @@ int dTgReaction_c::create() { return FAILED; } - if (getReactType() != REACT_GUST_BELLOWS) { + if (getReactType() != REACT_UNDERWATER) { if (getSceneFlag() >= 0xFF) { return FAILED; } @@ -74,29 +73,31 @@ int dTgReaction_c::create() { } } - mCCdStruct.setField0x38(0); - mCollision.init(sCcSrc); - mCollision.initUnk(mCCdStruct); + mStts.SetRank(0); + mCollision.Set(sCcSrc); + mCollision.SetStts(mStts); switch (getReactType()) { - case REACT_BONK: - mCollision.setTgFlag(0x80); - mCollision.setTgField0x0A(0); - mCollision.SetR(sCcSrc.mCylAttr.mRadius * mScale.x); - mCollision.SetH(mScale.y * sCcSrc.mCylAttr.mHeight); - break; case REACT_SLINGSHOT: - mCollision.setTgFlag(0x10000); - mCollision.setTgField0x0A(8); - mCollision.SetR(sCcSrc.mCylAttr.mRadius * mScale.x); - mCollision.SetH(mScale.y * sCcSrc.mCylAttr.mHeight); + mCollision.SetTgFlag(0x80); + mCollision.SetTgFlag_0xA(0); + mCollision.SetR(sCcSrc.mCylInf.mRadius * mScale.x); + mCollision.SetH(sCcSrc.mCylInf.mHeight * mScale.y); break; case REACT_GUST_BELLOWS: - mCollision.setTgFlag(0x100000); - mCollision.setTgField0x0A(0); - mCollision.SetR(sCcSrc.mCylAttr.mRadius * mScale.x); - mCollision.SetH(mScale.y * sCcSrc.mCylAttr.mHeight); + mCollision.SetTgFlag(0x10000); + mCollision.SetTgFlag_0xA(8); + mCollision.SetR(sCcSrc.mCylInf.mRadius * mScale.x); + mCollision.SetH(sCcSrc.mCylInf.mHeight * mScale.y); break; + case REACT_UNDERWATER: + mCollision.SetTgFlag(0x100000); + mCollision.SetTgFlag_0xA(0); + mCollision.SetR(sCcSrc.mCylInf.mRadius * mScale.x); + mCollision.SetH(sCcSrc.mCylInf.mHeight * mScale.y); + break; + case REACT_BONK: + case REACT_4: break; } int item = getParam0x10(); @@ -111,8 +112,8 @@ int dTgReaction_c::create() { } mVec3_c dwsOffset; if (!getParam0x14()) { - field_0x4E4 = mScale.y * sCcSrc.mCylAttr.mHeight * 0.5f; - dwsOffset = mVec3_c(0.0f, 0.5f * sCcSrc.mCylAttr.mHeight, 0.0f); + field_0x4E4 = mScale.y * sCcSrc.mCylInf.mHeight * 0.5f; + dwsOffset = mVec3_c(0.0f, sCcSrc.mCylInf.mHeight * 0.5f, 0.0f); } else { dwsOffset = mVec3_c::Zero; } @@ -210,14 +211,14 @@ void dTgReaction_c::checkForBonkItem() { } void dTgReaction_c::checkForBubble() { - if (mCollision.someInteractCheck() && mCollision.CheckCollidedMask(0x100000)) { + if (mCollision.ChkTgHit() && mCollision.ChkTgAtHitType(0x100000)) { if (dAcPy_c::LINK != nullptr && dAcPy_c::LINK->checkFlags0x350(0x40)) { mVec3_c spawnPos = position; dAcObjBase_c::create(fProfile::OBJ_BUBBLE, roomid, 0x4, &spawnPos, nullptr, nullptr, 0xFFFFFFFF); } } mCollision.SetC(position); - ColliderManager::getColliderManager()->addCollider(&mCollision); + dCcS::GetInstance()->Set(&mCollision); } // TODO move this somewhere @@ -230,14 +231,15 @@ T rndRange(T min, T max) { } void dTgReaction_c::checkForSlingBellowsItem() { - if (mCollision.someInteractCheck()) { + if (mCollision.ChkTgHit()) { + u8 p = getParam0x08(); u32 uVar3; - // mVec3_c pos = position; - int p = getParam0x08(); if (p == 0) { uVar3 = 6; + } else if (uVar3 == 0xFF) { + uVar3 = 5; } else { - uVar3 = p == 0xFF ? 5 : 6; + uVar3 = 6; } mVec3_c spawnPos = position; spawnPos.y += field_0x4E4; @@ -248,7 +250,7 @@ void dTgReaction_c::checkForSlingBellowsItem() { onDelete(); } mCollision.SetC(position); - ColliderManager::getColliderManager()->addCollider(&mCollision); + dCcS::GetInstance()->Set(&mCollision); } void dTgReaction_c::onDelete() { diff --git a/src/REL/d/t/d_t_sound_area.cpp b/src/REL/d/t/d_t_sound_area.cpp index f4cf89c66..b6bb0b015 100644 --- a/src/REL/d/t/d_t_sound_area.cpp +++ b/src/REL/d/t/d_t_sound_area.cpp @@ -149,7 +149,7 @@ bool dTgSndAr_c::checkAlg3(const mVec3_c &pos) { unk.Set(b, c, mScale.x * 100.0f); f32 d; - if (cM3d_Len3dSqPntAndSegLine(&unk, &a, &q, &d, nullptr)) { + 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; diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp index e629b1086..30581cee2 100644 --- a/src/d/a/d_a_base.cpp +++ b/src/d/a/d_a_base.cpp @@ -424,7 +424,7 @@ f32 dAcBase_c::getSquareDistToPlayer() { // Some weirdness with the float registers being used // 8002d4b0 void dAcBase_c::updateRoomId(f32 yOffset) { - if (getConnectParent()->profile_name != 701 /* fProfile::PROFILE_NAME_e::ROOM */) { + if (getConnectParent()->profile_name != fProfile::ROOM) { mVec3_c actorPos(position.x, position.y + yOffset, position.z); if (checkCollision(&actorPos)) { diff --git a/src/d/a/obj/d_a_obj_arrow.cpp b/src/d/a/obj/d_a_obj_arrow.cpp new file mode 100644 index 000000000..bf3a7c44f --- /dev/null +++ b/src/d/a/obj/d_a_obj_arrow.cpp @@ -0,0 +1,131 @@ +#include "d/a/obj/d_a_obj_arrow.h" + +#include "c/c_math.h" +#include "d/a/d_a_player.h" +#include "d/col/c/c_cc_d.h" + +SPECIAL_ACTOR_PROFILE(ARROW, dAcArrow_c, fProfile::ARROW, 0x126, 0, 0x80); + +STATE_DEFINE(dAcArrow_c, Wait); +STATE_DEFINE(dAcArrow_c, Move); +STATE_DEFINE(dAcArrow_c, ActorStop); +STATE_DEFINE(dAcArrow_c, BgStop); +STATE_DEFINE(dAcArrow_c, Bound); + +// clang-format off + +cCcD_SrcGObj dAcArrow_c::sCcSrcInf = { + + {0x2000, 0x8BB, 0x15000000, 0, 0, 0, 0, 0, 0}, + {0xFEB75C7F, 0x210, 0, 0x407, 0, 0}, + {0}, +}; + +dCcD_SrcCps dAcArrow_c::sCc1 = { + dAcArrow_c::sCcSrcInf, + {5.0f}, +}; + +const dCcD_SrcSph dAcArrow_c::sCc2 = { + {{0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0}, + {0x2, 0x211, 0, 0x407, 0, 0}, + {0xC28}}, + {100.0f}, +}; + +// clang-format on + +bool hitCallback(dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB) { + static_cast(i_actorA)->hitCallback(i_objInfA, i_actorB, i_objInfB); + return true; +} + +bool dAcArrow_c::createHeap() { + mResFile = getOarcResFile("Alink"); + nw4r::g3d::ResMdl mdl(nullptr); + if ((mSubType & 0x10) != 0) { + mdl = mResFile.GetResMdl("EquipPachinkoBullet"); + } else { + mdl = mResFile.GetResMdl("EquipArrow"); + } + // ? + bool ok = mModel.create(mdl, &heap_allocator, 0x120); + if (!ok) { + ok = false; + } + return ok; +} + +extern "C" void fn_8025E5E0(void *); + +int dAcArrow_c::create() { + mSubType = params & 0xFF; + CREATE_ALLOCATOR(dAcArrow_c); + + field_0x67C |= 4; + mStts.SetRank(2); + mCcCps.Set(sCc1); + mCcCps.SetStts(mStts); + mCcCps.SetAtFlag(0x2000); + mCcCps.SetAtCallback(::hitCallback); + mCcSph.Set(sCc2); + mCcSph.SetStts(mStts); + + if (mSubType == 0x11) { + mStateMgr.changeState(StateID_Move); + } else { + mStateMgr.changeState(StateID_Wait); + } + + boundingBox.Set(mVec3_c(-6.0f, -6.0f, 0.0f), mVec3_c(6.0f, 6.0f, 110.0f)); + field_0x684 = -1; + field_0x68A = 300; + f32 rnd = cM::rndF(20.0f); + field_0x688 = 50.0f - rnd; + field_0x6A8 = 80.0f; + mDespawnTimer = 10; + fn_8025E5E0(this); + return SUCCEEDED; +} + +dAcArrow_c::~dAcArrow_c() {} + +void dAcArrow_c::hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB) {} + +int dAcArrow_c::doDelete() { + // TODO + + return SUCCEEDED; +} + +int dAcArrow_c::actorExecute() { + mStateMgr.executeState(); + + // TODO + + return SUCCEEDED; +} + +int dAcArrow_c::draw() { + return SUCCEEDED; +} + +void dAcArrow_c::initializeState_Wait() {} +void dAcArrow_c::executeState_Wait() {} +void dAcArrow_c::finalizeState_Wait() {} + +void dAcArrow_c::initializeState_Move() {} +void dAcArrow_c::executeState_Move() {} +void dAcArrow_c::finalizeState_Move() {} + +void dAcArrow_c::initializeState_ActorStop() {} +void dAcArrow_c::executeState_ActorStop() {} +void dAcArrow_c::finalizeState_ActorStop() {} + +void dAcArrow_c::initializeState_BgStop() {} +void dAcArrow_c::executeState_BgStop() {} +void dAcArrow_c::finalizeState_BgStop() {} + +void dAcArrow_c::initializeState_Bound() {} +void dAcArrow_c::executeState_Bound() {} +void dAcArrow_c::finalizeState_Bound() {} diff --git a/src/d/a/obj/d_a_obj_bomb.cpp b/src/d/a/obj/d_a_obj_bomb.cpp new file mode 100644 index 000000000..5b9d6b6f0 --- /dev/null +++ b/src/d/a/obj/d_a_obj_bomb.cpp @@ -0,0 +1,20 @@ +#include "d/a/obj/d_a_obj_bomb.h" + +#include "f/f_base.h" +#include "f/f_profile.h" +#include "f/f_profile_name.h" +#include "s/s_State.hpp" + +SPECIAL_ACTOR_PROFILE(BOMB, dAcBomb_c, fProfile::BOMB, 0x128, 0, 2); + +STATE_DEFINE(dAcBomb_c, Wait); +STATE_DEFINE(dAcBomb_c, FlowerWait); +STATE_DEFINE(dAcBomb_c, Explode); +STATE_DEFINE(dAcBomb_c, Carry); +STATE_DEFINE(dAcBomb_c, WindCarry); + +bool dAcBomb_c::createHeap() {} + +int dAcBomb_c::create() { + return SUCCEEDED; +} diff --git a/src/d/a/obj/d_a_obj_fairy.cpp b/src/d/a/obj/d_a_obj_fairy.cpp index a91d84a2d..8d961727b 100644 --- a/src/d/a/obj/d_a_obj_fairy.cpp +++ b/src/d/a/obj/d_a_obj_fairy.cpp @@ -2,7 +2,6 @@ #include "d/a/d_a_player.h" - SPECIAL_ACTOR_PROFILE(OBJ_FAIRY, dAcObjFairy_c, fProfile::OBJ_FAIRY, 0x166, 0, 2); STATE_DEFINE(dAcObjFairy_c, Wait); @@ -53,7 +52,8 @@ int dAcObjFairy_c::draw() { if (!isCuring()) { static mQuat_c rot(0.0f, 0.0f, 0.0f, 10.0f); - drawShadow(mShadow, nullptr, mWorldMtx, &rot, -1, -1, -1, -1, -1, position.y - field_0x4B0); + f32 f = field_0x4B0; + drawShadow(mShadow, nullptr, mWorldMtx, &rot, -1, -1, -1, -1, -1, position.y - f); } } @@ -96,14 +96,13 @@ void dAcObjFairy_c::executeState_CatchDemo() { } void dAcObjFairy_c::finalizeState_CatchDemo() { field_0xB89 = 0; - // TODO collision + mObjectActorFlags &= ~0x00000200; } bool dAcObjFairy_c::shouldAvoidLink() const { // TODO shuffles if (dAcPy_c::LINK->isUsingBugnet()) { - const mVec3_c &bugNetPos = dAcPy_c::LINK->getBugNetPos(); - const mVec3_c dist = bugNetPos - position; + mVec3_c dist = dAcPy_c::LINK->getBugNetPos() - position; bool isClose = false; if (dist.mag() < 100.0f && velocity.dot(dist) > 0.0f) { isClose = true; diff --git a/src/d/a/obj/d_a_obj_switch.cpp b/src/d/a/obj/d_a_obj_switch.cpp index 0029e81fb..2131d02b3 100644 --- a/src/d/a/obj/d_a_obj_switch.cpp +++ b/src/d/a/obj/d_a_obj_switch.cpp @@ -68,13 +68,13 @@ bool dAcOsw_c::createHeap() { nw4r::g3d::ResMdl resMdl = resFile.GetResMdl(SWITCH_TYPES[mSwitchType]); TRY_CREATE(mModel.create(resMdl, &heap_allocator, 0x20, 1, nullptr)); - field_0x5E8 = mScale.x * - (resMdl.GetResNode("base").mNode.ref().VEC3_0x50.x - resMdl.GetResNode("base").mNode.ref().VEC3_0x44.x); + field_0x5E8 = mScale.x * (resMdl.GetResNode("base").mNode.ref().VEC3_0x50.x - + resMdl.GetResNode("base").mNode.ref().VEC3_0x44.x); cBgD_t *dbzData = (cBgD_t *)getOarcDZB(SWITCH_TYPES[mSwitchType], SWITCH_TYPES[mSwitchType]); PLC *plcData = (PLC *)getOarcPLC(SWITCH_TYPES[mSwitchType], SWITCH_TYPES[mSwitchType]); mScale.set(1.0f, 0.8f, 1.0f); updateMatrix(); - field_0x5B8.set(mWorldMtx); + field_0x5B8.copyFrom(mWorldMtx); mModel.setLocalMtx(mWorldMtx); bool set = mCollision.Set(dbzData, plcData, cBgW::MOVE_BG_e, &field_0x5B8, &mScale); @@ -180,7 +180,7 @@ int dAcOsw_c::actorExecute() { } updateMatrix(); - field_0x5B8.set(mWorldMtx); + field_0x5B8.copyFrom(mWorldMtx); mMtx_c tmp; PSMTXTrans(tmp, 0.0f, mButtonCtrl.mElevation, 0.0f); PSMTXConcat(field_0x5B8, tmp, field_0x5B8); diff --git a/src/d/col/bg/d_bg_w.cpp b/src/d/col/bg/d_bg_w.cpp index a8684c23a..776956579 100644 --- a/src/d/col/bg/d_bg_w.cpp +++ b/src/d/col/bg/d_bg_w.cpp @@ -492,8 +492,8 @@ void cBgW::RwgLineCheck(int polyIdx, cBgS_LinChk *pLine) { cBgD_Vtx_t *vtxTbl = mpVtxTbl; mVec3_c cross_pos; if (cM3d_Cross_LinTri( - &pLine->mLin, &vtxTbl[triTbl[polyIdx].mVtxIdx0], &vtxTbl[triTbl[polyIdx].mVtxIdx1], - &vtxTbl[triTbl[polyIdx].mVtxIdx2], &mpTri[polyIdx], &cross_pos, pLine->ChkFrontFlag(), + pLine->mLin, vtxTbl[triTbl[polyIdx].mVtxIdx0], vtxTbl[triTbl[polyIdx].mVtxIdx1], + vtxTbl[triTbl[polyIdx].mVtxIdx2], &mpTri[polyIdx], cross_pos, pLine->ChkFrontFlag(), pLine->ChkBackFlag() )) { dBgPc pc = *mpPolyCodes.GetDBgPc(mpBgd->mTriTbl[polyIdx].mId); diff --git a/src/d/col/bg/d_bg_w_time.cpp b/src/d/col/bg/d_bg_w_time.cpp index e68f84565..d61a0b3e3 100644 --- a/src/d/col/bg/d_bg_w_time.cpp +++ b/src/d/col/bg/d_bg_w_time.cpp @@ -101,7 +101,7 @@ bool dBgWTime::LineCheck(cBgS_LinChk *pLine) { lin.Set(linStart, linEnd); mVec3_c vec0; mVec3_c vec1; - if (!cM3d_Cross_CylLin(&mCyl, &lin, vec0, vec1)) { + if (!cM3d_Cross_CylLin(mCyl, lin, vec0, vec1)) { return false; } if (!fn_803537a0(&vec0, pLine)) { diff --git a/src/d/col/c/c_cc_d.cpp b/src/d/col/c/c_cc_d.cpp index e69de29bb..67140f50c 100644 --- a/src/d/col/c/c_cc_d.cpp +++ b/src/d/col/c/c_cc_d.cpp @@ -0,0 +1,1494 @@ +#include "d/col/c/c_cc_d.h" + +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/c/c_m3d.h" +#include "d/col/c/c_m3d_g_aab.h" +#include "d/col/c/c_m3d_g_cyl.h" +#include "d/col/c/c_m3d_g_lin.h" +#include "d/col/c/c_m3d_g_unk.h" +#include "egg/math/eggMath.h" +#include "egg/math/eggVector.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "nw4r/types_nw4r.h" +#include "rvl/MTX.h" // IWYU pragma: export +#include "s/s_Math.h" + +// Very Hack ?? +static inline bool IsZero(f32 in) { + return fabsf(in) <= EGG::Math::epsilon(); +} +static inline void MtxTransMinusXYZ(mMtx_c &mtx, f32 x, f32 y, f32 z) { + PSMTXTrans(mtx, -x, -y, -z); +} + +mVec3_c cCcD_ShapeAttr::sVirtualCenter = mVec3_c::Zero; + +cCcD_DivideInfo::cCcD_DivideInfo() {} + +cCcD_DivideInfo::~cCcD_DivideInfo() {} + +cCcD_DivideArea::cCcD_DivideArea() {} + +cCcD_DivideArea::~cCcD_DivideArea() {} + +void cCcD_DivideArea::SetArea(cM3dGAab const &aab) { + Set(aab.mMin, aab.mMax); + + mScaledXDiff = 1.0f / 32.0f * (GetMaxP()->x - GetMinP()->x); + mXDiffIsZero = cM3d_IsZero(mScaledXDiff); + if (!mXDiffIsZero) { + mInvScaledXDiff = 1.0f / mScaledXDiff; + } + + mScaledYDiff = 1.0f / 32.0f * (GetMaxP()->y - GetMinP()->y); + mYDiffIsZero = cM3d_IsZero(mScaledYDiff); + if (!mYDiffIsZero) { + mInvScaledYDiff = 1.0f / mScaledYDiff; + } + + mScaledZDiff = 1.0f / 32.0f * (GetMaxP()->z - GetMinP()->z); + mZDiffIsZero = cM3d_IsZero(mScaledZDiff); + if (!mZDiffIsZero) { + mInvScaledZDiff = 1.0f / mScaledZDiff; + } +} + +static const u32 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, +}; + +void cCcD_DivideArea::CalcDivideInfo(cCcD_DivideInfo *pDivideInfo, const cM3dGAab &aab) { + u32 xDivInfo, yDivInfo, zDivInfo; + if (!mXDiffIsZero) { + s32 var1 = mInvScaledXDiff * (aab.GetMinP()->x - GetMinP()->x); + s32 var3 = mInvScaledXDiff * (aab.GetMaxP()->x - GetMinP()->x); + if (31 < var3) { + var3 = 31; + } + + xDivInfo = l_base[var3]; + if (0 < var1) { + var1--; + xDivInfo &= ~l_base[var1]; + } + } else { + xDivInfo = 0xFFFFFFFF; + } + + if (!mYDiffIsZero) { + s32 var1 = mInvScaledYDiff * (aab.GetMinP()->y - GetMinP()->y); + s32 var3 = mInvScaledYDiff * (aab.GetMaxP()->y - GetMinP()->y); + if (31 < var3) { + var3 = 31; + } + + yDivInfo = l_base[var3]; + if (0 < var1) { + var1--; + yDivInfo &= ~l_base[var1]; + } + } else { + yDivInfo = 0xFFFFFFFF; + } + + if (!mZDiffIsZero) { + s32 var1 = mInvScaledZDiff * (aab.GetMinP()->z - GetMinP()->z); + s32 var3 = mInvScaledZDiff * (aab.GetMaxP()->z - GetMinP()->z); + if (31 < var3) { + var3 = 31; + } + + zDivInfo = l_base[var3]; + if (0 < var1) { + var1--; + zDivInfo &= ~l_base[var1]; + } + } else { + zDivInfo = 0xFFFFFFFF; + } + + pDivideInfo->Set(xDivInfo, yDivInfo, zDivInfo); +} + +void cCcD_DivideArea::CalcDivideInfoOverArea(cCcD_DivideInfo *pDivideInfo, const cM3dGAab &aab) { + u32 xDivInfo, yDivInfo, zDivInfo; + if (!mXDiffIsZero) { + s32 var1 = mInvScaledXDiff * (aab.GetMinP()->x - GetMinP()->x); + s32 var3 = mInvScaledXDiff * (aab.GetMaxP()->x - GetMinP()->x); + if (var3 < 0 || 31 < var1) { + xDivInfo = 0; + } else { + if (31 < var3) { + var3 = 31; + } + xDivInfo = l_base[var3]; + if (0 < var1) { + var1--; + xDivInfo &= ~l_base[var1]; + } + } + } else { + xDivInfo = 0xFFFFFFFF; + } + + if (!mYDiffIsZero) { + s32 var1 = mInvScaledYDiff * (aab.GetMinP()->y - GetMinP()->y); + s32 var3 = mInvScaledYDiff * (aab.GetMaxP()->y - GetMinP()->y); + if (var3 < 0 || 31 < var1) { + yDivInfo = 0; + } else { + if (31 < var3) { + var3 = 31; + } + yDivInfo = l_base[var3]; + if (0 < var1) { + var1--; + yDivInfo &= ~l_base[var1]; + } + } + } else { + yDivInfo = 0xFFFFFFFF; + } + + if (!mZDiffIsZero) { + s32 var1 = mInvScaledZDiff * (aab.GetMinP()->z - GetMinP()->z); + s32 var3 = mInvScaledZDiff * (aab.GetMaxP()->z - GetMinP()->z); + if (var3 < 0 || 31 < var1) { + zDivInfo = 0; + } else { + if (31 < var3) { + var3 = 31; + } + zDivInfo = l_base[var3]; + if (0 < var1) { + var1--; + zDivInfo &= ~l_base[var1]; + } + } + } else { + zDivInfo = 0xFFFFFFFF; + } + + pDivideInfo->Set(xDivInfo, yDivInfo, zDivInfo); +} + +cCcD_Stts::cCcD_Stts(dAcObjBase_c *pObj) { + mAtApid = 0; + mAtOldApid = 0; + mTgApid = 0; + mTgOldApid = 0; + mRank = 0; + mpActor = pObj; + ClrCcMove(); +} + +void cCcD_Stts::Move() { + mAtOldApid = mAtApid; + mAtApid = 0; + mTgOldApid = mTgApid; + mTgApid = 0; +} + +int cCcD_Stts::GetID() const { + if (mpActor) { + return mpActor->getID(); + } + return 0; +} + +void cCcD_Stts::PlusCcMove(f32 x, f32 y, f32 z) { + if (mField_0x10.x > x) { + mField_0x10.x = x; + } else if (mField_0x1C.x < x) { + mField_0x1C.x = x; + } + + if (mField_0x10.y > y) { + mField_0x10.y = y; + } else if (mField_0x1C.y < y) { + mField_0x1C.y = y; + } + + if (mField_0x10.z > z) { + mField_0x10.z = z; + } else if (mField_0x1C.z < z) { + mField_0x1C.z = z; + } + + mCcMove.x = mField_0x10.x + mField_0x1C.x; + mCcMove.y = mField_0x10.y + mField_0x1C.y; + mCcMove.z = mField_0x10.z + mField_0x1C.z; +} + +void cCcD_Stts::ClrCcMove() { + mField_0x10 = mVec3_c::Zero; + mField_0x1C = mVec3_c::Zero; + mCcMove = mVec3_c::Zero; +} + +static const u32 l_ranks[3] = {75, 90, 100}; + +int cCcD_Stts::GetWeight(int inRank) const { + // Current Rank is highest and in is lowest + // - No effect + if (mRank == 13 || inRank == 0) { + return 0; + } + + // Current Rank is lowest and in is highest + // - Fill effect + if (mRank == 0 || inRank == 13) { + return 100; + } + if (mRank == inRank) { + return 50; + } + if (mRank == 12 || inRank == 1) { + return 0; + } + if (mRank == 1 || inRank == 12) { + return 100; + } + + if (inRank != 12) { + int diff = inRank - mRank; + int idx; + if (diff > 0) { + idx = 3; + if (diff <= 3) { + idx = diff; + } + return l_ranks[idx - 1]; + } else { + idx = 3; + if (-diff <= 3) { + idx = -diff; + } + return 100 - l_ranks[idx - 1]; + } + } + // Shouldnt reach here... + return mRank; +} + +cCcD_GAtTgCoCommonBase::cCcD_GAtTgCoCommonBase() : mHit_cb(nullptr), mEffCounter(0), mAc(), mRPrm(0) {} + +cCcD_GAtTgCoCommonBase::~cCcD_GAtTgCoCommonBase() { + ClrActorInfo(); + mRPrm = 0; + ClrActorInfo(); + SubtractEffCounter(); + mHit_cb = nullptr; +} + +void cCcD_GAtTgCoCommonBase::ClrActorInfo() { + mAc.unlink(); +} + +void cCcD_GAtTgCoCommonBase::SetHitActor(dAcObjBase_c *pActor) { + mRPrm |= 1; + mAc.link(pActor); +} + +dAcObjBase_c *cCcD_GAtTgCoCommonBase::GetActor() { + return mAc.get(); +} + +void cCcD_GAtTgCoCommonBase::SubtractEffCounter() { + if (mEffCounter <= 0) { + return; + } + mEffCounter--; +} + +/////////////////////////////////////////////////////////////////////////////// +// Collision Object +/////////////////////////////////////////////////////////////////////////////// + +cCcD_Obj::cCcD_Obj() : mStts(0), mField_0x108(0) {} + +cCcD_Obj::~cCcD_Obj() { + mStts = 0; +} + +bool cCcD_Obj::fn_80328ad0(dAcObjBase_c *pObj, u32 attype) { + bool ret = false; + if (pObj && pObj->isActorPlayer() && attype == 2) { + ret = true; + } + return ret; +} + +void cCcD_Obj::ClrSet() { + mAt.mSrc.mSPrm &= ~1; + mTg.mSrc.mSPrm &= ~1; + mCo.mSrc.mSPrm &= ~1; +} + +void cCcD_Obj::Set(const cCcD_SrcGObj &src) { + mAt.Set(src.mObjAt); + mTg.Set(src.mObjTg); + mCo.Set(src.mObjCo); +} + +void cCcD_Obj::ClrAtHit() { + mAt.mRPrm = 0; + mAt.ClrActorInfo(); + mAt.SubtractEffCounter(); + mAt.ClrEffCounter(); +} +void cCcD_Obj::ClrTgHit() { + mTg.mRPrm = 0; + mTg.ClrActorInfo(); + mTg.SubtractEffCounter(); + mTg.ClrEffCounter(); +} + +void cCcD_Obj::ClrCoHit() { + mCo.mRPrm = 0; + mCo.ClrActorInfo(); + mCo.SubtractEffCounter(); + mCo.ClrEffCounter(); +} + +const mVec3_c &cCcD_Obj::GetAtHitPos() const { + return mAt.mHitPos; +} + +mVec3_c &cCcD_Obj::GetAtHitPos() { + return mAt.mHitPos; +} + +bool cCcD_Obj::GetAtFlag0x2() const { + return mAt.MskRPrm(2); +} + +bool cCcD_Obj::GetAtFlag0x4() const { + return mAt.MskRPrm(4); +} + +bool cCcD_Obj::GetAtFlag0x8() const { + return mAt.MskRPrm(8); +} + +const mVec3_c &cCcD_Obj::GetTgHitPos() const { + return mTg.mHitPos; +} + +mVec3_c &cCcD_Obj::GetTgHitPos() { + return mTg.mHitPos; +} + +bool cCcD_Obj::GetTgFlag0x4() const { + return mTg.MskRPrm(4); +} + +bool cCcD_Obj::GetTgFlag0x8() const { + return mTg.MskRPrm(0x8); +} + +cCcD_ObjInf *cCcD_Obj::GetGObjInfo() { + return (cCcD_ObjInf *)this; +} + +bool cCcD_Obj::ChkAtClawshot() const { + return mAt.MskTgHitSPrm(0x80000); +} + +bool cCcD_Obj::ChkAtClawshotDebug() const { + return false; +} + +bool cCcD_Obj::ChkAtElectrified() const { + return mAt.MskTgHitSPrm(0x40000); +} + +bool cCcD_Obj::ChkAtElectrifiedExtra() const { + return mAt.MskTgHitSPrm(0x8000000); +} + +bool cCcD_Obj::ChkAtWhippable() const { + return mAt.MskTgHitSPrm(0x800000); +} + +bool cCcD_Obj::ChkAtBit24() const { + return mAt.MskTgHitSPrm(0x1000000); +} + +bool cCcD_Obj::ChkAtArrowStick() const { + return mAt.MskTgHitSPrm(0x2000000); +} + +bool cCcD_Obj::ChkAtWaterScaleBonk() const { + return mAt.MskTgHitSPrm(0x4000000); +} + +bool cCcD_Obj::ChkAtSwordBonk() const { + return mAt.MskTgHitSPrm(0x10000); +} + +dAcObjBase_c *cCcD_Obj::GetAtActor() { + return mAt.GetActor(); +} + +bool cCcD_Obj::ChkTgAtHitType(u32 mask) const { + return mTg.mAtHitSrc.mType & mask; +} + +u32 cCcD_Obj::GetTg_0x58() const { + return mTg.mAtHitSrc.mType; +} + +bool cCcD_Obj::ChkTgBit14() const { + return mTg.MskAtHitSPrm(0x4000); +} + +u8 cCcD_Obj::GetTgDamage() const { + return mTg.mAtHitSrc.mDamage; +} + +u16 cCcD_Obj::GetTgDamageFlags() const { + return mTg.mAtHitSrc.mInfo.mModifier; +} + +bool cCcD_Obj::ChkTgSkywardStrike() const { + return mTg.MskAtHitSPrm(0x10000); +} +bool cCcD_Obj::ChkTgBit17() const { + return mTg.MskAtHitSPrm(0x20000); +} + +bool cCcD_Obj::ChkTgBit18() const { + return mTg.MskAtHitSPrm(0x40000); +} + +bool cCcD_Obj::ChkTgBit19() const { + return mTg.MskAtHitSPrm(0x80000); +} + +bool cCcD_Obj::ChkTgBit23() const { + return mTg.MskAtHitSPrm(0x800000); +} + +bool cCcD_Obj::ChkTgBit20() const { + return mTg.MskAtHitSPrm(0x100000); +} + +bool cCcD_Obj::ChkTgBit24() const { + return mTg.MskAtHitSPrm(0x1000000); +} + +bool cCcD_Obj::ChkTgBit25() const { + return mTg.MskAtHitSPrm(0x2000000); +} + +u16 cCcD_Obj::GetTgSoundID() const { + return mTg.mAtHitSrc.mField_0x10; +} + +s16 cCcD_Obj::GetTg_0x6A() const { + return mTg.mAtHitSrc.mField_0x12; +} + +bool cCcD_Obj::ChkTgBit8() const { + return mTg.MskAtHitSPrm(0x100); +} + +u8 cCcD_Obj::GetTg_0x4A() const { + return mTg.mField_0x4A; +} + +dAcObjBase_c *cCcD_Obj::GetTgActor() { + return mTg.GetActor(); +} + +const mVec3_c &cCcD_Obj::GetTg_0x2C() const { + return mTg.mField_0x2C; +} + +dAcObjBase_c *cCcD_Obj::GetCoActor() { + return mCo.GetActor(); +} + +bool cCcD_Obj::ChkCoBit4() const { + return mCo.mCoHitSrc.mSPrm >> 4 & 1; +} + +void cCcD_Obj::SetAtFlagsUpper(u32 flags) { + mAt.OffSPrm(0x3FF0000); + mAt.OnSPrm(flags); +} + +bool cCcD_Obj::ChkTgBit1() const { + return mTg.MskRPrm(2); +} + +void cCcD_Obj::AdjustHitPos(f32 x, f32 z) { + mAt.AdjustHitPos(x, z); + mTg.AdjustHitPos(x, z); + mCo.AdjustHitPos(x, z); +} + +/////////////////////////////////////////////////////////////////////////////// +// Base Shape Attribute +/////////////////////////////////////////////////////////////////////////////// + +cCcD_ShapeAttr::cCcD_ShapeAttr() {} + +cCcD_ShapeAttr::~cCcD_ShapeAttr() {} + +bool cCcD_ShapeAttr::Calc(const mVec3_c &, const mVec3_c &, mVec3_c *pOut) { + return false; +} + +void cCcD_ShapeAttr::GetShapeAccess(cCcD_ShapeAttr::Shape *pShape) const { + pShape->mField_0x00 = 4; + pShape->mField_0x04 = mVec3_c::Zero; + pShape->mField_0x10 = mVec3_c::Zero; + pShape->mField_0x1C = mVec3_c::Zero; +} + +bool cCcD_ShapeAttr::GetPosBool(mVec3_c *pOut) const { + return false; +} + +bool cCcD_ShapeAttr::CrossAtTg(cCcD_ShapeAttr &shapeAttr, mVec3_c *pOut) { + return false; +} + +bool cCcD_ShapeAttr::CrossCo(cCcD_ShapeAttr &shapeAttr, f32 *pOut) { + return false; +} + +mVec3_c &cCcD_ShapeAttr::GetCoP() { + return sVirtualCenter; +} + +/////////////////////////////////////////////////////////////////////////////// +// Triangle Shape Attribute +/////////////////////////////////////////////////////////////////////////////// + +cCcD_TriAttr::cCcD_TriAttr() {} + +cCcD_TriAttr::~cCcD_TriAttr() {} + +bool cCcD_TriAttr::Calc(const mVec3_c &start, const mVec3_c &end, mVec3_c *pOut) { + bool bVar1 = false; + mVec3_c tmp0, tmp1; + if (!CrossInfLin(start, end, *pOut)) { + bVar1 = true; + + } else { + mVec3_c a = GetPntA() - *pOut; + mVec3_c b = GetPntB() - *pOut; + mVec3_c c = GetPntC() - *pOut; + + mVec3_c a_x_b = a.cross(b); + mVec3_c b_x_c = b.cross(c); + mVec3_c c_x_a = c.cross(a); + + f32 dot0 = a_x_b.dot(b_x_c); + f32 dot1 = b_x_c.dot(c_x_a); + f32 dot2 = c_x_a.dot(a_x_b); + + if (!(dot0 > 0.0f && dot1 > 0.0f && dot2 > 0.0f)) { + if (dot0 <= 0.f && dot1 <= 0.0f && dot2 <= 0.0f) { + bVar1 = true; + } else if (dot0 > 0.0f) { + tmp0 = GetPntA(); + tmp1 = GetPntC(); + } else if (dot1 > 0.0f) { + tmp0 = GetPntA(); + tmp1 = GetPntB(); + } else { + tmp0 = GetPntC(); + tmp1 = GetPntB(); + } + mVec3_c tmp2 = tmp1 - tmp0; + f32 mag = tmp2.squaredLength(); + if (IsZero(mag)) { + bVar1 = true; + } else { + mag = tmp2.dot(*pOut - tmp0) / mag; + f32 scale = mag < 0.0f ? 0.0f : mag > 1.0f ? 1.0f : mag; + tmp2 *= scale; + *pOut = tmp0 + tmp2; + } + } + } + if (bVar1) { + *pOut = (GetPntA() + GetPntB() + GetPntC()) * (1.f / 3.f); + } +} + +bool cCcD_TriAttr::CrossAtTg(cCcD_ShapeAttr &shapeAttr, mVec3_c *pOut) { + return shapeAttr.CrossAtTg(*this, pOut); +} + +bool cCcD_TriAttr::CrossAtTg(cCcD_CpsAttr &cpsAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsTri(cpsAttr, *this, pOut); +} + +bool cCcD_TriAttr::CrossAtTg(cCcD_CylAttr &cylAttr, mVec3_c *pOut) { + return cM3d_Cross_CylTri(cylAttr, *this, pOut); +} + +bool cCcD_TriAttr::CrossAtTg(cCcD_SphAttr &sphAttr, mVec3_c *pOut) { + return cM3d_Cross_SphTri(sphAttr, *this, pOut, nullptr, nullptr); +} + +bool cCcD_TriAttr::CrossAtTg(cCcD_TriAttr &triAttr, mVec3_c *pOut) { + return cM3d_Cross_TriTri(*this, triAttr, pOut); +} + +bool cCcD_TriAttr::CrossAtTg(cCcD_UnkAttr &unkAttr, mVec3_c *pOut) { + return cM3d_Cross_UnkTri(unkAttr, *this, pOut); +} + +bool cCcD_TriAttr::CrossCo(cCcD_ShapeAttr &shapeAttr, f32 *pOut) { + return shapeAttr.CrossCo(*this, pOut); +} + +bool cCcD_TriAttr::CrossCo(cCcD_CpsAttr &cpsAttr, f32 *pOut) { + return false; +} + +bool cCcD_TriAttr::CrossCo(cCcD_TriAttr &triAttr, f32 *pOut) { + return false; +} + +bool cCcD_TriAttr::CrossCo(cCcD_UnkAttr &unkAttr, f32 *pOut) { + return false; +} + +bool cCcD_TriAttr::CrossCo(cCcD_CylAttr &cylAttr, f32 *pOut) { + return false; +} + +bool cCcD_TriAttr::CrossCo(cCcD_SphAttr &sphAttr, f32 *pOut) { + return false; +} + +void cCcD_TriAttr::CalcAabBox() { + mVec3_c a, b, c; + mAab.ClearForMinMax(); + + a = GetPntA(); + mAab.SetMinMax(a); + + b = GetPntB(); + mAab.SetMinMax(b); + + c = GetPntC(); + mAab.SetMinMax(c); +} + +bool cCcD_TriAttr::GetNVec(const mVec3_c &pnt, mVec3_c *pOut) const { + if (getPlaneFunc(pnt) >= 0.f) { + *pOut = GetN(); + } else { + *pOut = GetN(); + PSVECScale(*pOut, *pOut, -1.0f); + } + return true; +} + +void cCcD_TriAttr::GetShapeAccess(cCcD_ShapeAttr::Shape *pShape) const { + pShape->mField_0x00 = SHAPE_TRIANGLE; + pShape->mField_0x04 = GetPntA(); + pShape->mField_0x10 = GetPntB(); + pShape->mField_0x1C = GetPntC(); +} + +void cCcD_TriAttr::GetPos(nw4r::math::VEC3 *pOut) const { + *pOut = GetPntA(); +} + +void cCcD_TriAttr::TranslateXZ(f32 x, f32 z) { + mA.x += x; + mA.z += z; + mB.x += x; + mB.z += z; + mC.x += x; + mC.z += z; +} + +/////////////////////////////////////////////////////////////////////////////// +// Unk Shape Attribute +/////////////////////////////////////////////////////////////////////////////// + +cCcD_UnkAttr::cCcD_UnkAttr() {} + +cCcD_UnkAttr::~cCcD_UnkAttr() {} + +bool cCcD_UnkAttr::Calc(const mVec3_c &start, const mVec3_c &end, mVec3_c *pOut) { + mVec3_c tmp0, tmp1; + const mMtx_c &inv = mInvMtx; + PSMTXMultVec(inv, start, tmp0); + PSMTXMultVec(inv, end, tmp1); + for (int i = 0; i < 3; i++) { + bool tmp0Min = tmp0(i) < mMin(i); + bool tmp0Max = tmp0(i) > mMax(i); + + bool tmp1Min = tmp1(i) < mMin(i); + bool tmp1Max = tmp1(i) > mMax(i); + + if (tmp0Min) { + if (tmp1Max) { + f32 t = (tmp0(i) + tmp1(i)) * 0.5f; + (*pOut)(i) = t < mMin(i) ? mMin(i) : t > mMax(i) ? mMax(i) : t; + + } else { + (*pOut)(i) = mMin(i); + } + } else if (tmp0Max) { + if (tmp1Min) { + f32 t = (tmp0(i) + tmp1(i)) * 0.5f; + (*pOut)(i) = t < mMin(i) ? mMin(i) : t > mMax(i) ? mMax(i) : t; + + } else { + (*pOut)(i) = mMax(i); + } + } else if (tmp1Min) { + (*pOut)(i) = mMin(i); + } else if (tmp1Max) { + (*pOut)(i) = mMax(i); + } else { + (*pOut)(i) = (tmp0(i) + tmp1(i)) * 0.5f; + } + } + PSMTXMultVec(mMtx, *pOut, *pOut); + return true; +} + +bool cCcD_UnkAttr::CrossAtTg(cCcD_ShapeAttr &shapeAttr, mVec3_c *pOut) { + return shapeAttr.CrossAtTg(*this, pOut); +} + +bool cCcD_UnkAttr::CrossAtTg(cCcD_CpsAttr &cpsAttr, mVec3_c *pOut) { + return Cross(cpsAttr, pOut); +} + +bool cCcD_UnkAttr::CrossAtTg(cCcD_TriAttr &triAttr, mVec3_c *pOut) { + return Cross(triAttr, pOut); +} + +bool cCcD_UnkAttr::CrossAtTg(cCcD_UnkAttr &unkAttr, mVec3_c *pOut) { + return Cross(unkAttr, pOut); +} + +bool cCcD_UnkAttr::CrossAtTg(cCcD_CylAttr &cylAttr, mVec3_c *pOut) { + return Cross(cylAttr, pOut); +} + +bool cCcD_UnkAttr::CrossAtTg(cCcD_SphAttr &sphAttr, mVec3_c *pOut) { + return Cross(sphAttr, pOut); +} + +bool cCcD_UnkAttr::CrossCo(cCcD_ShapeAttr &shapeAttr, f32 *pOut) { + return shapeAttr.CrossCo(*this, pOut); +} + +bool cCcD_UnkAttr::CrossCo(cCcD_CpsAttr &cpsAttr, f32 *pOut) { + mVec3_c pos; + if (cM3dGUnk::Cross(cpsAttr, &pos)) { + cpsAttr.SetVirtCenter(&pos); + *pOut = cpsAttr.CrossCoCommon(*this, mField_0xC4); + mField_0xC4 = 0.0f; + } + return false; +} + +bool cCcD_UnkAttr::CrossCo(cCcD_TriAttr &triAttr, f32 *pOut) { + return false; +} + +bool cCcD_UnkAttr::CrossCo(cCcD_UnkAttr &unkAttr, f32 *pOut) { + return false; +} + +bool cCcD_UnkAttr::CrossCo(cCcD_CylAttr &cylAttr, f32 *pOut) { + return cM3dGUnk::Cross(cylAttr, pOut); +} + +bool cCcD_UnkAttr::CrossCo(cCcD_SphAttr &sphAttr, f32 *pOut) { + return cM3dGUnk::Cross(sphAttr, pOut); +} + +void cCcD_UnkAttr::CalcAabBox() { + mAab.ClearForMinMax(); + mVec3_c start, end; + GetStartEnd(start, end); + mMtx_c &mtx = mMtx; + mVec3_c a; + + a = start; + PSMTXMultVec(mtx, a, a); + mAab.SetMinMax(a); + + a = end; + PSMTXMultVec(mtx, a, a); + mAab.SetMinMax(a); + + a.x = start.x; + a.y = start.y; + a.z = end.z; + PSMTXMultVec(mtx, a, a); + mAab.SetMinMax(a); + + a.x = end.x; + a.y = end.y; + a.z = start.z; + PSMTXMultVec(mtx, a, a); + mAab.SetMinMax(a); +} + +bool cCcD_UnkAttr::GetNVec(const mVec3_c &, mVec3_c *pOut) const { + pOut->set(0.f, 0.f, 0.f); + return false; +} + +void cCcD_UnkAttr::GetPos(nw4r::math::VEC3 *pPos) const { + *pPos = mLin.GetStart(); +} + +void cCcD_UnkAttr::Set(const cCcD_SrcUnkAttr &src) { + mVec3_c min = src.getMin(); + mVec3_c max = src.getMax(); + + cM3dGUnk::Set(min, max); +} + +mVec3_c &cCcD_UnkAttr::GetCoP() { + return mVirtCenter; +} + +void cCcD_UnkAttr::TranslateXZ(f32 x, f32 z) { + cM3dGUnk::fn_80338f30(x, z); +} + +/////////////////////////////////////////////////////////////////////////////// +// Capsule Shape Attribute +/////////////////////////////////////////////////////////////////////////////// + +cCcD_CpsAttr::cCcD_CpsAttr() {} + +cCcD_CpsAttr::~cCcD_CpsAttr() {} + +void cCcD_CpsAttr::Set(const cCcD_SrcCpsAttr &src) { + cM3dGCps::SetR(src.mRadius); + // I dont like this + nw4r::math::VEC3 a; + a.z = 0.0f; + a.y = 0.0f; + a.x = 0.0f; + GetEnd() = GetStart() = a; +} + +mVec3_c &cCcD_CpsAttr::GetCoP() { + return mVirtCenter; +} + +bool cCcD_CpsAttr::CrossAtTg(cCcD_ShapeAttr &shapeAttr, mVec3_c *pOut) { + return shapeAttr.CrossAtTg(*this, pOut); +} + +bool cCcD_CpsAttr::CrossCo(cCcD_ShapeAttr &shapeAttr, f32 *pOut) { + return shapeAttr.CrossCo(*this, pOut); +} + +bool cCcD_CpsAttr::CrossCo(cCcD_TriAttr &triAttr, f32 *pOut) { + return false; +} + +void CalcCyl(const cM3dGCyl &cyl, const mVec3_c &start, const mVec3_c &end, mVec3_c *pOut) { + cM3dGLin lin; + mVec3_c pos; + lin.Set(start, end); + + f32 radius = cyl.GetR(); + f32 height = cyl.GetC().y + cyl.GetH(); + + if (cM3d_Cross_CylLin(cyl, lin, *pOut, pos)) { + return; + } + + if (height < start.y && height < end.y) { + pOut->y = height; + } else if (cyl.GetC().y > start.y && cyl.GetC().y > end.y) { + pOut->y = cyl.GetC().y; + } else { + bool startValid = sLib::isInRange(start.y, cyl.GetC().y, height); + bool endValid = sLib::isInRange(end.y, cyl.GetC().y, height); + if (startValid && endValid) { + pOut->y = (start.y + end.y) * 0.5f; + } else if (startValid) { + pOut->y = start.y; + } else { + pOut->y = end.y; + } + } + mVec3_c start_center = start - cyl.GetC(); + f32 start_dist = EGG::Math::sqrt(start_center.x * start_center.x + start_center.z * start_center.z); + + mVec3_c end_center = end - cyl.GetC(); + f32 end_dist = EGG::Math::sqrt(end_center.x * end_center.x + end_center.z * end_center.z); + + if (start_dist < radius) { + if (end_dist < radius) { + pOut->x = (start.x + end.x) * 0.5f; + pOut->z = (start.z + end.z) * 0.5f; + } else { + pOut->x = start.x; + pOut->z = start.z; + } + } else if (end_dist < radius) { + pOut->x = end.x; + pOut->z = end.z; + } else if (start_dist < end_dist) { + start_center.normalize(); + start_center *= radius; + pOut->x = start_center.x + cyl.GetC().x; + pOut->z = start_center.z + cyl.GetC().z; + } else { + end_center.normalize(); + end_center *= radius; + pOut->x = end_center.x + cyl.GetC().x; + pOut->z = end_center.z + cyl.GetC().z; + } +} + +bool cCcD_CpsAttr::Calc(const mVec3_c &start, const mVec3_c &end, mVec3_c *pOut) { + const mVec3_c &startRef = GetStart(); + const mVec3_c &endRef = GetEnd(); + + mMtx_c mtx0; + mVec3_c tmp0 = GetEnd() - GetStart(); + mVec3_c tmp1; + mVec3_c tmp2; + mVec3_c tmp3; + mVec3_c tmp4; + cM3dGCyl cyl; + bool bInverse; + + f32 dist = EGG::Math::sqrt(tmp0.x * tmp0.x + tmp0.z * tmp0.z); + if (IsZero(dist)) { + tmp1 = start; + tmp2 = end; + if (endRef.y > startRef.y) { + tmp3 = startRef; + tmp4 = endRef; + } else { + tmp3 = endRef; + tmp4 = startRef; + } + bInverse = false; + } else { + PSMTXTrans(mtx0, startRef.x, startRef.y, startRef.z); + mtx0.XrotM(mAng::atan2s(-dist, tmp0.y)); + mtx0.YrotM(mAng::atan2s(-tmp0.x, tmp0.z)); + + mMtx_c mtx1; + + MtxTransMinusXYZ(mtx1, startRef.x, startRef.y, startRef.z); + PSMTXConcat(mtx0, mtx1, mtx0); + PSMTXMultVec(mtx0, start, tmp1); + PSMTXMultVec(mtx0, end, tmp2); + tmp3 = GetStart(); + PSMTXMultVec(mtx0, GetEnd(), tmp4); + bInverse = true; + } + tmp3.y -= GetR() * 0.5f; + tmp4.y += GetR() * 0.5f; + cyl.SetC(tmp3, GetR(), tmp4.y - tmp3.y); + CalcCyl(cyl, tmp1, tmp2, pOut); + if (bInverse) { + PSMTXInverse(mtx0, mtx0); + PSMTXMultVec(mtx0, *pOut, *pOut); + } + return true; +} + +bool cCcD_CpsAttr::CrossAtTg(cCcD_CpsAttr &cpsAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsCps(*this, cpsAttr, pOut, nullptr, nullptr); +} + +bool cCcD_CpsAttr::CrossAtTg(cCcD_CylAttr &cylAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsCyl(*this, cylAttr, pOut); +} + +bool cCcD_CpsAttr::CrossAtTg(cCcD_SphAttr &sphAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsSph(*this, sphAttr, pOut); +} + +bool cCcD_CpsAttr::CrossAtTg(cCcD_TriAttr &triAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsTri(*this, triAttr, pOut); +} + +bool cCcD_CpsAttr::CrossAtTg(cCcD_UnkAttr &unkAttr, mVec3_c *pOut) { + return cM3dGCps::Cross(unkAttr, pOut); +} + +void cCcD_CpsAttr::SetVirtCenter(mVec3_c *pOut) { + if (mField_0x20) { + mVirtCenter = *pOut; + mField_0x20 = 0; + } else { + f32 dist = cM3d_lineVsPosSuisenCross(*this, *pOut, &mVirtCenter); + if (dist < 0.f) { + mVirtCenter = GetStart(); + } else if (dist > 1.f) { + mVirtCenter = GetEnd(); + } + } +} + +f32 cCcD_CpsAttr::CrossCoCommon(cCcD_ShapeAttr &attr, f32 r) { + mVec3_c tmp = mVirtCenter - attr.GetCoP(); + f32 mag = (r + mField_0x1C) - EGG::Math::sqrt(tmp.x * tmp.x + tmp.z * tmp.z); + + if (mag < 0.0f) { + mag = 0.0f; + } + Set_0x1C(mRadius); + return mag; +} + +bool cCcD_CpsAttr::CrossCo(cCcD_CpsAttr &cpsAttr, f32 *pOut) { + mVec3_c pos; + if (cM3d_Cross_CpsCps(*this, cpsAttr, &pos, nullptr, nullptr)) { + SetVirtCenter(&pos); + cpsAttr.SetVirtCenter(&pos); + *pOut = CrossCoCommon(cpsAttr, cpsAttr.mField_0x1C); + cpsAttr.Set_0x1C(cpsAttr.GetR()); + return true; + } + return false; +} + +bool cCcD_CpsAttr::CrossCo(cCcD_CylAttr &cylAttr, f32 *pOut) { + mVec3_c pos; + if (cM3d_Cross_CpsCyl(*this, cylAttr, &pos)) { + SetVirtCenter(&pos); + *pOut = CrossCoCommon(cylAttr, cylAttr.GetR()); + return true; + } + return false; +} + +bool cCcD_CpsAttr::CrossCo(cCcD_SphAttr &sphAttr, f32 *pOut) { + mVec3_c pos; + if (cM3d_Cross_CpsSph(*this, sphAttr, &pos)) { + SetVirtCenter(&pos); + *pOut = CrossCoCommon(sphAttr, sphAttr.GetYDist(pos.y)); + + return true; + } + return false; +} + +bool cCcD_CpsAttr::CrossCo(cCcD_UnkAttr &unkAttr, f32 *pOut) { + mVec3_c pos; + if (cM3dGCps::Cross(unkAttr, &pos)) { + SetVirtCenter(&pos); + *pOut = CrossCoCommon(unkAttr, unkAttr.mField_0xC4); + unkAttr.mField_0xC4 = 0.0f; + return true; + } + return false; +} + +void cCcD_CpsAttr::CalcAabBox() { + mAab.ClearForMinMax(); + mAab.SetMinMax(GetStart()); + mAab.SetMinMax(GetEnd()); + mAab.PlusR(GetR()); +} + +bool cCcD_CpsAttr::GetNVec(const mVec3_c ¶m0, mVec3_c *pOut) const { + mVec3_c tmp1; + PSVECSubtract(GetEnd(), GetStart(), tmp1); + f32 sqMag = PSVECDotProduct(tmp1, tmp1); + if (cM3d_IsZero(sqMag)) { + return false; + } + + mVec3_c tmp2; + PSVECSubtract(param0, GetStart(), tmp2); + f32 sqDist = PSVECDotProduct(tmp2, tmp1) / sqMag; + mVec3_c tmp3; + if (sqDist < 0.f) { + tmp3 = GetStart(); + } else if (sqDist > 1.f) { + tmp3 = GetEnd(); + } else { + PSVECScale(tmp1, tmp1, sqDist); + PSVECAdd(tmp1, GetStart(), tmp3); + } + + PSVECSubtract(param0, tmp3, *pOut); + if (cM3d_IsZero(PSVECMag(*pOut))) { + pOut->set(0.f, 0.f, 0.f); + return false; + } else { + PSVECNormalize(*pOut, *pOut); + return true; + } +} + +void cCcD_CpsAttr::GetPos(nw4r::math::VEC3 *pOut) const { + *pOut = GetStart(); +} + +void cCcD_CpsAttr::GetShapeAccess(cCcD_ShapeAttr::Shape *pShape) const { + pShape->mField_0x00 = SHAPE_CAPSULE; + pShape->mField_0x04 = GetStart(); + pShape->mField_0x10 = GetEnd(); + pShape->mField_0x1C.set(GetR(), 0.f, 0.f); +} + +void cCcD_CpsAttr::TranslateXZ(f32 x, f32 z) { + GetStart().x += x; + GetStart().z += z; + + GetEnd().x += x; + GetEnd().z += z; +} + +/////////////////////////////////////////////////////////////////////////////// +// Cylinder Shape Attribute +/////////////////////////////////////////////////////////////////////////////// + +cCcD_CylAttr::cCcD_CylAttr() {} + +cCcD_CylAttr::~cCcD_CylAttr() {} + +void cCcD_CylAttr::Set(const cCcD_SrcCylAttr &src) { + SetR(src.mRadius); + SetH(src.mHeight); + mVec3_c a; + a.z = 0.0f; + a.y = 0.0f; + a.x = 0.0f; + SetC(a); +} + +mVec3_c &cCcD_CylAttr::GetCoP() { + return mCenter; +} + +bool cCcD_CylAttr::Calc(const mVec3_c ¶m0, const mVec3_c ¶m1, mVec3_c *pOut) { + CalcCyl(*this, param0, param1, pOut); + return true; +} + +bool cCcD_CylAttr::CrossAtTg(cCcD_ShapeAttr &shapeAttr, mVec3_c *pOut) { + return shapeAttr.CrossAtTg(*this, pOut); +} + +bool cCcD_CylAttr::CrossAtTg(cCcD_CpsAttr &cpsAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsCyl(cpsAttr, *this, pOut); +} + +bool cCcD_CylAttr::CrossAtTg(cCcD_CylAttr &cylAttr, mVec3_c *pOut) { + return cM3d_Cross_CylCyl(*this, cylAttr, pOut); +} + +bool cCcD_CylAttr::CrossAtTg(cCcD_SphAttr &sphAttr, mVec3_c *pOut) { + f32 f; + return cM3d_Cross_CylSph(*this, sphAttr, pOut, &f); +} + +bool cCcD_CylAttr::CrossAtTg(cCcD_TriAttr &triAttr, mVec3_c *pOut) { + return cM3d_Cross_CylTri(*this, triAttr, pOut); +} + +bool cCcD_CylAttr::CrossAtTg(cCcD_UnkAttr &unkAttr, mVec3_c *pOut) { + return cM3dGCyl::Cross(unkAttr, pOut); +} + +bool cCcD_CylAttr::CrossCo(cCcD_ShapeAttr &shapeAttr, f32 *pOut) { + return shapeAttr.CrossCo(*this, pOut); +} + +bool cCcD_CylAttr::CrossCo(cCcD_TriAttr &triAttr, f32 *pOut) { + return false; +} + +bool cCcD_CylAttr::CrossCo(cCcD_CylAttr &cylAttr, f32 *pOut) { + return cM3d_Cross_CylCyl(*this, cylAttr, pOut); +} + +bool cCcD_CylAttr::CrossCo(cCcD_SphAttr &sphAttr, f32 *pOut) { + return cM3d_Cross_CylSph(*this, sphAttr, pOut); +} + +bool cCcD_CylAttr::CrossCo(cCcD_CpsAttr &cpsAttr, f32 *pOut) { + mVec3_c pos; + if (cM3d_Cross_CpsCyl(cpsAttr, *this, &pos)) { + cpsAttr.SetVirtCenter(&pos); + *pOut = cpsAttr.CrossCoCommon(*this, GetR()); + return true; + } + return false; +} + +bool cCcD_CylAttr::CrossCo(cCcD_UnkAttr &unkAttr, f32 *pOut) { + cM3dGCyl::Cross(unkAttr, pOut); +} + +void cCcD_CylAttr::CalcAabBox() { + mVec3_c max; + mVec3_c min; + min.x = GetC().x - GetR(); + min.y = GetC().y; + min.z = GetC().z - GetR(); + + max.x = GetC().x + GetR(); + max.y = GetC().y + GetH(); + max.z = GetC().z + GetR(); + mAab.Set(min, max); +} + +bool cCcD_CylAttr::GetNVec(const mVec3_c ¶m0, mVec3_c *pOut) const { + mVec3_c vec; + if (GetC().y > param0.y) { + vec = GetC(); + } else if (GetC().y + GetH() < param0.y) { + vec = GetC(); + vec.y = GetC().y + GetH(); + + } else { + vec = GetC(); + vec.y = param0.y; + } + PSVECSubtract(param0, vec, *pOut); + if (cM3d_IsZero(PSVECMag(*pOut))) { + pOut->set(0.f, 0.f, 0.f); + return false; + } else { + PSVECNormalize(*pOut, *pOut); + return true; + } +} + +void cCcD_CylAttr::GetShapeAccess(cCcD_ShapeAttr::Shape *pShape) const { + pShape->mField_0x00 = SHAPE_CYLINDER; + pShape->mField_0x04 = GetC(); + pShape->mField_0x10 = mVec3_c::Zero; + pShape->mField_0x1C.set(GetR(), GetH(), 0.f); +} + +void cCcD_CylAttr::GetPos(nw4r::math::VEC3 *pOut) const { + *pOut = GetC(); +} + +void cCcD_CylAttr::TranslateXZ(f32 x, f32 z) { + GetC().x += x; + GetC().z += z; +} + +/////////////////////////////////////////////////////////////////////////////// +// Sphere Shape Attribute +/////////////////////////////////////////////////////////////////////////////// + +cCcD_SphAttr::cCcD_SphAttr() {} + +cCcD_SphAttr::~cCcD_SphAttr() {} + +void cCcD_SphAttr::Set(const cCcD_SrcSphAttr &src) { + SetR(src.mRadius); + mVec3_c a; + a.z = 0.0f; + a.y = 0.0f; + a.x = 0.0f; + SetC(&a); +} + +mVec3_c &cCcD_SphAttr::GetCoP() { + return mCenter; +} + +bool cCcD_SphAttr::Calc(const mVec3_c ¶m0, const mVec3_c ¶m1, mVec3_c *pOut) { + cM3dGLin lin; + mVec3_c vec; + lin.Set(param0, param1); + + if (!cM3d_Cross_LinSph_CrossPos(*this, lin, pOut, &vec)) { + mVec3_c a = (param0 + param1) * 0.5f; + f32 f; + cM3d_Len3dSqPntAndSegLine(lin, GetC(), &a, &f, nullptr); + a -= GetC(); + a.normalize(); + f32 radius = GetR(); + *pOut = GetC() + a * radius; + } + return true; +} + +bool cCcD_SphAttr::CrossAtTg(cCcD_ShapeAttr &shapeAttr, mVec3_c *pOut) { + return shapeAttr.CrossAtTg(*this, pOut); +} + +bool cCcD_SphAttr::CrossAtTg(cCcD_CpsAttr &cpsAttr, mVec3_c *pOut) { + return cM3d_Cross_CpsSph(cpsAttr, *this, pOut); +} + +bool cCcD_SphAttr::CrossAtTg(cCcD_CylAttr &cylAttr, mVec3_c *pOut) { + f32 f; + return cM3d_Cross_CylSph(cylAttr, *this, pOut, &f); +} + +bool cCcD_SphAttr::CrossAtTg(cCcD_SphAttr &sphAttr, mVec3_c *pOut) { + return cM3d_Cross_SphSph(sphAttr, *this, pOut); +} + +bool cCcD_SphAttr::CrossAtTg(cCcD_TriAttr &triAttr, mVec3_c *pOut) { + return cM3d_Cross_SphTri(*this, triAttr, pOut, nullptr, nullptr); +} + +bool cCcD_SphAttr::CrossAtTg(cCcD_UnkAttr &unkAttr, mVec3_c *pOut) { + return cM3dGSph::Cross(unkAttr, pOut); +} + +bool cCcD_SphAttr::CrossCo(cCcD_ShapeAttr &shapeAttr, f32 *pOut) { + return shapeAttr.CrossCo(*this, pOut); +} + +bool cCcD_SphAttr::CrossCo(cCcD_TriAttr &triAttr, f32 *pOut) { + return false; +} + +bool cCcD_SphAttr::CrossCo(cCcD_CylAttr &cylAttr, f32 *pOut) { + return cM3d_Cross_CylSph(cylAttr, *this, pOut); +} + +bool cCcD_SphAttr::CrossCo(cCcD_SphAttr &sphAttr, f32 *pOut) { + return cM3d_Cross_SphSph(*this, sphAttr, pOut); +} + +bool cCcD_SphAttr::CrossCo(cCcD_CpsAttr &cpsAttr, f32 *pOut) { + mVec3_c pos; + if (cM3d_Cross_CpsSph(cpsAttr, *this, &pos)) { + cpsAttr.SetVirtCenter(&pos); + *pOut = cpsAttr.CrossCoCommon(*this, cM3dGSph::GetYDist(pos.y)); + return true; + } + return false; +} + +bool cCcD_SphAttr::CrossCo(cCcD_UnkAttr &unkAttr, f32 *pOut) { + return cM3dGSph::Cross(unkAttr, pOut); +} + +void cCcD_SphAttr::CalcAabBox() { + mAab.Set(*this); +} + +bool cCcD_SphAttr::GetNVec(const mVec3_c ¶m0, mVec3_c *param1) const { + param1->x = param0.x - GetC().x; + param1->y = param0.y - GetC().y; + param1->z = param0.z - GetC().z; + if (cM3d_IsZero(PSVECMag(*param1))) { + param1->set(0.0f, 0.0f, 0.0f); + return false; + } else { + PSVECNormalize(*param1, *param1); + return true; + } +} + +void cCcD_SphAttr::GetShapeAccess(cCcD_ShapeAttr::Shape *pShape) const { + pShape->mField_0x00 = SHAPE_SPHERE; + pShape->mField_0x04 = GetC(); + pShape->mField_0x10 = mVec3_c::Zero; + pShape->mField_0x1C.set(GetR(), 0.0f, 0.0f); +} + +void cCcD_SphAttr::GetPos(nw4r::math::VEC3 *pPos) const { + *pPos = GetC(); +} + +bool cCcD_SphAttr::GetPosBool(mVec3_c *pPos) const { + *pPos = GetC(); + return true; +} + +void cCcD_SphAttr::TranslateXZ(f32 x, f32 z) { + GetC().x += x; + GetC().z += z; +} + +/////////////////////////////////////////////////////////////////////////////// +// Attack/Defense/Collide Object Info +/////////////////////////////////////////////////////////////////////////////// + +cCcD_ObjAt::cCcD_ObjAt() { + mField_0x58 = 0; +} + +cCcD_ObjAt::~cCcD_ObjAt() {} + +void cCcD_ObjAt::Set(const cCcD_SrcGObjAt &info) { + mEffCounter = 0; + mSrc = info; + mHitPos = mVec3_c::Zero; +} + +void cCcD_ObjAt::SetAtFlag(u32 flag) { + mSrc.mSPrm = mSrc.mSPrm & ~0x3E | flag; +} + +void cCcD_ObjAt::AdjustHitPos(f32 x, f32 z) { + mHitPos.x += x; + mHitPos.z += z; +} + +cCcD_ObjTg::cCcD_ObjTg() + : mShieldFrontRangeYAngle(nullptr), mField_0x4A(0), mField_0x4B(0), mField_0x4C(0), mField_0x50(0), mField_0x54(0), + mField_0x6C(0.f, 0.f, 0.f), mField_0x78(0) {} + +cCcD_ObjTg::~cCcD_ObjTg() {} + +void cCcD_ObjTg::Set(const cCcD_SrcGObjTg &src) { + mEffCounter = 0; + mSrc = src; + mField_0x4C = 0; + mHitPos = mVec3_c::Zero; + mShieldFrontRangeYAngle = nullptr; + mShieldRange = 0x4000; +} + +void cCcD_ObjTg::AdjustHitPos(f32 x, f32 z) { + mHitPos.x += x; + mHitPos.z += z; + + mField_0x6C.x += x; + mField_0x6C.z += z; +} + +cCcD_ObjCo::cCcD_ObjCo() { + mGrp = 0; + mField_0x28_callback = 0; +} + +cCcD_ObjCo::~cCcD_ObjCo() {} + +void cCcD_ObjCo::Set(const cCcD_SrcGObjCo &src) { + mEffCounter = 0; + mSrc = src; + SetCoFlag(mSrc.mSPrm & 0x1e0); +} + +void cCcD_ObjCo::SetCoFlag(u32 flag) { + mSrc.mSPrm = mSrc.mSPrm & ~0x1E0 | flag; + mGrp = (mSrc.mSPrm & 0x1E0) >> 4; +} + +void cCcD_ObjCo::AdjustHitPos(f32, f32) {} diff --git a/src/d/col/c/c_m3d.cpp b/src/d/col/c/c_m3d.cpp index d23860d96..ca55d2da5 100644 --- a/src/d/col/c/c_m3d.cpp +++ b/src/d/col/c/c_m3d.cpp @@ -14,6 +14,7 @@ #include "math.h" #include "nw4r/math/math_types.h" #include "rvl/MTX.h" // IWYU pragma: export +#include "rvl/MTX/vec.h" using namespace nw4r::math; using namespace EGG; @@ -145,38 +146,40 @@ bool cM3d_Cross_LinSph_CrossPos(const cM3dGSph &, const cM3dGLin &, VEC3 *, VEC3 // TODO - returns false to satisfy warning return false; } -bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, f32 *) { +bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, f32 *) { // TODO - returns false to satisfy warning return false; } -bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, VEC3 *, f32 *) { +bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, VEC3 *, f32 *) { // TODO - returns false to satisfy warning return false; } -bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *) { +bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *) { // TODO - returns false to satisfy warning return false; } -bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *, f32 *) { +bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *, f32 *) { // TODO - returns false to satisfy warning return false; } -bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, VEC3 *) { +bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, VEC3 *) { // TODO - returns false to satisfy warning return false; } -void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph *pSph, const cM3dGTri *pTri, VEC3 *pPnt) { +void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph &pSph, const cM3dGTri &pTri, VEC3 *pPnt) { VEC3 scale, add; - PSVECAdd(pTri->mA, pTri->mB, add); + PSVECAdd(pTri.mA, pTri.mB, add); PSVECScale(add, scale, 0.5f); - f32 mag = VEC3DistSq(&scale, &pSph->GetC()); + const f32 mag = VEC3DistSq(&scale, &pSph.GetC()); if (cM3d_IsZero(mag)) { - *pPnt = pSph->GetC(); + *pPnt = pSph.GetC(); return; } - f32 a = pSph->GetR() / mag; - cM3d_InDivPos2(&pSph->GetC(), &scale, a, pPnt); + const f32 rad = pSph.GetR(); + f32 a = rad / mag; + + cM3d_InDivPos2(&pSph.GetC(), &scale, a, pPnt); } bool cM3d_Cross_SphTri(const cM3dGSph *, const cM3dGTri *, VEC3 *, f32 *, VEC3 *) { // TODO - returns false to satisfy warning @@ -218,7 +221,7 @@ bool cM3d_Cross_TriTri(const cM3dGTri &, const cM3dGTri &, VEC3 *) { // TODO - returns false to satisfy warning return false; } -bool cM3d_Cross_CpsTri(const cM3dGCps &, cM3dGTri, VEC3 *) { +bool cM3d_Cross_CpsTri(const cM3dGCps &, const cM3dGTri &, VEC3 *) { // TODO - returns false to satisfy warning return false; } @@ -232,7 +235,7 @@ bool cM3d_3PlaneCrossPos(const cM3dGPla &, const cM3dGPla &, const cM3dGPla &, V // TODO - returns false to satisfy warning return false; } -f32 cM3d_lineVsPosSuisenCross(const cM3dGLin *, const VEC3 *, VEC3 *) { +f32 cM3d_lineVsPosSuisenCross(const cM3dGLin &, const VEC3 &, VEC3 *) { // TODO - returns 0.0f to satisfy warning return 0.0f; } @@ -240,3 +243,23 @@ f32 cM3d_lineVsPosSuisenCross(const VEC3 &, const VEC3 &, const VEC3 &, VEC3 *) // TODO - returns 0.0f to satisfy warning return 0.0f; } + +bool cM3d_Normalize(nw4r::math::VEC3 *pPnt) { + f32 mag = PSVECMag(*pPnt); + if (cM3d_IsZero(mag)) { + return true; + } + mag = 1.f / mag; + pPnt->x *= mag; + pPnt->y *= mag; + pPnt->z *= mag; + return false; +} + +void cM3d_Normalize_Ex(nw4r::math::VEC3 *pPnt) { + if (cM3d_Normalize(pPnt)) { + pPnt->x = 1.0f; + pPnt->y = 0.0f; + pPnt->z = 0.0f; + } +} diff --git a/src/d/col/c/c_m3d_g_cps.cpp b/src/d/col/c/c_m3d_g_cps.cpp index 82d144806..cb33b19b2 100644 --- a/src/d/col/c/c_m3d_g_cps.cpp +++ b/src/d/col/c/c_m3d_g_cps.cpp @@ -26,8 +26,8 @@ void cM3dGCps::Set(const mVec3_c &start, const mVec3_c &end, f32 r) { SetR(r); } -bool cM3dGCps::fn_80337f30(cM3dGUnk *unk, mVec3_c *vec) { - return fn_80336d90(this, unk, vec); +bool cM3dGCps::Cross(cM3dGUnk &unk, mVec3_c *vec) { + return cM3d_Cross_CpsUnk(*this, unk, vec); } bool cM3dGCps::fn_80337f40(const mVec3_c &v) const { @@ -40,7 +40,7 @@ bool cM3dGCps::fn_80337f40(const mVec3_c &v) const { } f32 tmp; mVec3_c tmpv; - if (cM3d_Len3dSqPntAndSegLine(this, v, tmpv, &tmp, nullptr) && tmp <= r2) { + if (cM3d_Len3dSqPntAndSegLine(*this, v, tmpv, &tmp, nullptr) && tmp <= r2) { return true; } return false; diff --git a/src/d/col/c/c_m3d_g_cyl.cpp b/src/d/col/c/c_m3d_g_cyl.cpp index 6a4bfdf62..9399e1920 100644 --- a/src/d/col/c/c_m3d_g_cyl.cpp +++ b/src/d/col/c/c_m3d_g_cyl.cpp @@ -27,12 +27,12 @@ void cM3dGCyl::SetR(f32 r) { mRadius = r; } -bool cM3dGCyl::fn_803380e0(cM3dGUnk *unk, mVec3_c *vec) { - return fn_80336110(this, unk, vec); +bool cM3dGCyl::Cross(cM3dGUnk &unk, mVec3_c *vec) { + return cM3d_Cross_CylUnk(*this, unk, vec); } -bool cM3dGCyl::fn_803380f0(cM3dGUnk *unk, f32 *vec) { - return fn_803364e0(this, unk, vec); +bool cM3dGCyl::Cross(cM3dGUnk &unk, f32 *vec) { + return cM3d_Cross_CylUnk(*this, unk, vec); } bool cM3dGCyl::Cross(const mVec3_c &pnt) const { diff --git a/src/d/col/c/c_m3d_g_pla.cpp b/src/d/col/c/c_m3d_g_pla.cpp index 0773ca4ae..a9b87fd23 100644 --- a/src/d/col/c/c_m3d_g_pla.cpp +++ b/src/d/col/c/c_m3d_g_pla.cpp @@ -2,6 +2,8 @@ #include "d/col/c/c_m3d_g_pla.h" #include "d/col/c/c_m3d.h" +#include "m/m_angle.h" +#include "m/m_vec.h" bool cM3dGPla::CrossInfLin(const mVec3_c &start, const mVec3_c &end, mVec3_c &out) const { f32 tmp1 = getPlaneFunc(start); @@ -27,11 +29,11 @@ bool cM3dGPla::getCrossYLessD(const mVec3_c &point, f32 *out) const { } mAng cM3dGPla::GetAngle(mAng ang) const { - mAng angleY = GetAngleY(); - // Regswap + mAng angleY = mNormal.getAngleY(); + angleY = angleY - ang; - f32 dist = GetXZDist() * angleY.cos(); - return cM::atan2s(dist, mNormal.y); + + return cM::atan2s(GetXZDist() * angleY.cos(), mNormal.y); } mAng cM3dGPla::GetNegativeAngle(mAng ang) const { diff --git a/src/d/col/c/c_m3d_g_sph.cpp b/src/d/col/c/c_m3d_g_sph.cpp index cc1d1c1d7..5f377f98b 100644 --- a/src/d/col/c/c_m3d_g_sph.cpp +++ b/src/d/col/c/c_m3d_g_sph.cpp @@ -27,12 +27,12 @@ void cM3dGSph::SetC(f32 x, f32 y, f32 z) { SetC(&c); } -bool cM3dGSph::fn_80338750(cM3dGUnk *pUnk, mVec3_c *pOut) { - return fn_80337690(pUnk, this, pOut); +bool cM3dGSph::Cross(cM3dGUnk &pUnk, mVec3_c *pOut) { + return cM3d_Cross_UnkSph(pUnk, *this, pOut); } -bool cM3dGSph::fn_80338760(cM3dGUnk *pUnk, f32 *pOut) { - return fn_80337780(pUnk, this, pOut); +bool cM3dGSph::Cross(cM3dGUnk &pUnk, f32 *pOut) { + return cM3d_Cross_UnkSph(pUnk, *this, pOut); } f32 cM3dGSph::GetYDist(f32 r) const { @@ -44,7 +44,7 @@ f32 cM3dGSph::GetYDist(f32 r) const { } bool cM3dGSph::Cross(const cM3dGTri *pTri, f32 *p2, mVec3_c *p3) { - return cM3d_Cross_SphTri(this, pTri, nullptr, p2, p3); + return cM3d_Cross_SphTri(*this, *pTri, nullptr, p2, p3); } void cM3dGSph::Clamp(const mVec3_c &in, mVec3_c &out) const { diff --git a/src/d/col/c/c_m3d_g_unk.cpp b/src/d/col/c/c_m3d_g_unk.cpp index c1e5fe04e..776a028a1 100644 --- a/src/d/col/c/c_m3d_g_unk.cpp +++ b/src/d/col/c/c_m3d_g_unk.cpp @@ -2,12 +2,14 @@ #include "d/col/c/c_m3d.h" #include "d/col/c/c_m3d_g_aab.h" +#include "m/m_vec.h" +#include "nw4r/types_nw4r.h" cM3dGUnk::cM3dGUnk() { mMin.set(0.0f, 0.0f, 0.0f); mMax.set(0.0f, 0.0f, 0.0f); - mField_0x78.set(0.0f, 0.0f, 0.0f); - mField_0x84.set(0.0f, 0.0f, 0.0f); + mLin.GetStart().set(0.0f, 0.0f, 0.0f); + mLin.GetEnd().set(0.0f, 0.0f, 0.0f); mField_0x90.set(0.0f, 0.0f, 0.0f); mField_0x9C.set(0.0f, 0.0f, 0.0f); mField_0xA8.set(0.0f, 0.0f, 0.0f); @@ -22,9 +24,9 @@ void cM3dGUnk::Set(const mVec3_c &vA, const mVec3_c &vB) { mMin = vA; mMax = vB; - mField_0x84 = (mMin + mMax) * 0.5f; - mField_0x90 = mMin - mField_0x84; - mField_0x9C = mMax - mField_0x84; + mLin.GetEnd() = (mMin + mMax) * 0.5f; + mField_0x90 = mMin - mLin.GetEnd(); + mField_0x9C = mMax - mLin.GetEnd(); mField_0xA8 = (mMax - mMin) * 0.5f; Update(); @@ -34,9 +36,9 @@ void cM3dGUnk::Update() { mVec3_c a, b; PSMTXMultVec(mMtx, mMin, a); PSMTXMultVec(mMtx, mMax, b); - mField_0x78.x = (a.x + b.x) * 0.5f; - mField_0x78.y = (a.y + b.y) * 0.5f; - mField_0x78.z = (a.z + b.z) * 0.5f; + mLin.GetStart().x = (a.x + b.x) * 0.5f; + mLin.GetStart().y = (a.y + b.y) * 0.5f; + mLin.GetStart().z = (a.z + b.z) * 0.5f; if (!PSMTXInverse(mMtx, mInvMtx)) { PSMTXIdentity(mInvMtx); } @@ -47,41 +49,41 @@ void cM3dGUnk::GetStartEnd(mVec3_c &start, mVec3_c &end) { end = mMax; } -void cM3dGUnk::fn_80338c30(cM3dGCps *pCps, mVec3_c *pVec) { - fn_80336d90(pCps, this, pVec); +bool cM3dGUnk::Cross(cM3dGCps &pCps, mVec3_c *pVec) { + return cM3d_Cross_CpsUnk(pCps, *this, pVec); } -bool cM3dGUnk::fn_80338c40(cM3dGUnk *pUnk, mVec3_c *pVec) { +bool cM3dGUnk::Cross(cM3dGTri &pUnk, mVec3_c *pVec) { nw4r::math::VEC3 tmp; - if (fn_803354e0(this, pUnk, &tmp)) { + if (cM3d_Cross_UnkTri(*this, pUnk, &tmp)) { *pVec = tmp; return true; } return false; } -bool cM3dGUnk::fn_80338ca0() { +bool cM3dGUnk::Cross(cM3dGUnk &pUnk, mVec3_c *pVec) { return false; } -bool cM3dGUnk::fn_80338cb0(cM3dGCyl *pCyl, mVec3_c *pVec) { - return fn_80336110(pCyl, this, pVec); +bool cM3dGUnk::Cross(cM3dGCyl &pCyl, mVec3_c *pVec) { + return cM3d_Cross_CylUnk(pCyl, *this, pVec); } -bool cM3dGUnk::fn_80338cc0(cM3dGCyl *pCyl, f32 *pF) { - return fn_803364e0(pCyl, this, pF); +bool cM3dGUnk::Cross(cM3dGCyl &pCyl, f32 *pF) { + return cM3d_Cross_CylUnk(pCyl, *this, pF); } -bool cM3dGUnk::fn_80338cd0(cM3dGSph *pSph, mVec3_c *pVec) { - return fn_80337690(this, pSph, pVec); +bool cM3dGUnk::Cross(cM3dGSph &pSph, mVec3_c *pVec) { + return cM3d_Cross_UnkSph(*this, pSph, pVec); } -bool cM3dGUnk::fn_80338ce0(cM3dGSph *pSph, f32 *pF) { - return fn_80337780(this, pSph, pF); +bool cM3dGUnk::Cross(cM3dGSph &pSph, f32 *pF) { + return cM3d_Cross_UnkSph(*this, pSph, pF); } void cM3dGUnk::Set(const mMtx_c &mtx) { - mMtx.set(mtx); + mMtx.copyFrom(mtx); Update(); } @@ -89,7 +91,7 @@ void cM3dGUnk::Set(const mVec3_c &vec, const mAng &ang) { mMtx_c mtx; PSMTXIdentity(mtx); mtx.YrotS(ang); - mtx.SetTranslation(vec); + mtx.setTranslation(vec); Set(mtx); } @@ -127,7 +129,7 @@ void cM3dGUnk::Clamp(const mVec3_c &in, mVec3_c &out) { } void cM3dGUnk::fn_80338f30(f32 f0, f32 f1) { - mMtx.xw += f0; - mMtx.zw += f1; + mMtx(0, 3) += f0; + mMtx(2, 3) += f1; Update(); } diff --git a/src/d/col/cc/d_cc_d.cpp b/src/d/col/cc/d_cc_d.cpp index e7c935eb8..3524192f9 100644 --- a/src/d/col/cc/d_cc_d.cpp +++ b/src/d/col/cc/d_cc_d.cpp @@ -1,373 +1,92 @@ #include "d/col/cc/d_cc_d.h" -#include "d/a/d_a_base.h" -#include "f/f_base_id.h" +#include "d/col/c/c_cc_d.h" #include "m/m_vec.h" +dCcD_Cps::dCcD_Cps() {} +dCcD_Cps::~dCcD_Cps() {} -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(cM3dGAab 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_Cps::Set(const dCcD_SrcCps &src) { + cCcD_Obj::Set(src.mObjInf); + cCcD_CpsAttr::Set(src.mCpsInf); } -void dCcD_GObjInf::clear() { - mGObjAt.clearFlag(); - mGObjTg.clearFlag(); - mGObjCo.clearFlag(); +cCcD_ShapeAttr *dCcD_Cps::GetShapeAttr() { + return this; } -void dCcD_GObjInf::init(const dCcD_SrcGObjInf &src) { - mGObjAt.init(&src.mGObjAt); - mGObjTg.init(&src.mGObjTg); - mGObjCo.init(&src.mGObjCo); +void dCcD_Cps::unknownCalc() { + PSVECSubtract(mEnd, mStart, mAt.mVec); } -void dCcD_GObjInf::ResetAtHit() { - mGObjAt.resetField0x14(); - mGObjAt.unlink(); - mGObjAt.decreaseCount(); - mGObjAt.resetEffCounter(); -} - -void dCcD_GObjInf::ResetTgHit() { - mGObjTg.resetField0x14(); - mGObjTg.unlink(); - mGObjTg.decreaseCount(); - mGObjTg.resetEffCounter(); -} +dCcD_Tri::dCcD_Tri() {} +dCcD_Tri::~dCcD_Tri() {} -void dCcD_GObjInf::ResetCoHit() { - mGObjCo.resetField0x14(); - mGObjCo.unlink(); - mGObjCo.decreaseCount(); - mGObjCo.resetEffCounter(); +void dCcD_Tri::Set(const dCcD_SrcTri &src) { + cCcD_Obj::Set(src.mObjInf); } -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(); +cCcD_ShapeAttr *dCcD_Tri::GetShapeAttr() { + return this; } -bool dCcD_GObjInf::CheckCollidedMask(u32 mask) { - return (mGObjTg.get0x58() & mask); -} +dCcD_Cyl::dCcD_Cyl() {} +dCcD_Cyl::~dCcD_Cyl() {} -dAcBase_c *dCcD_GObjInf::GetTgActor() { - return mGObjTg.getActor(); +void dCcD_Cyl::Set(const dCcD_SrcCyl &src) { + cCcD_Obj::Set(src.mObjInf); + cCcD_CylAttr::Set(src.mCylInf); } -dAcBase_c *dCcD_GObjInf::GetCoActor() { - return mGObjCo.getActor(); +cCcD_ShapeAttr *dCcD_Cyl::GetShapeAttr() { + return this; } -void dCcD_GObjInf::adjustHitPos(f32 dx, f32 dz) { - mGObjAt.adjustHitPos(dx, dz); - mGObjTg.adjustHitPos(dx, dz); - mGObjCo.adjustHitPos(dx, dz); +void dCcD_Cyl::setCenter(const mVec3_c &c) { + SetAtVec(mVec3_c::Zero); + SetC(c); } -/** - * - * Geometric shape colliders - * - */ - -dCcD_ShapeAttr::dCcD_ShapeAttr() {} - -dCcD_ShapeAttr::~dCcD_ShapeAttr() {} - -mVec3_c *dCcD_ShapeAttr::getVirtualCenter() { - return &m_virtual_center; +void dCcD_Cyl::moveCenter(const mVec3_c &c) { + SetAtVec(c - GetC()); + SetC(c); } -dCcD_ShapeAttr2::dCcD_ShapeAttr2() {} -dCcD_ShapeAttr2::~dCcD_ShapeAttr2() {} - -dCcD_ShapeAttr5::dCcD_ShapeAttr5() {} -dCcD_ShapeAttr5::~dCcD_ShapeAttr5() {} +dCcD_Sph::dCcD_Sph() {} +dCcD_Sph::~dCcD_Sph() {} -void dCcD_ShapeAttr5::init(const dCcD_SrcAabbAttr &src) { - Set(mVec3_c(src.minX, src.minY, src.minZ), mVec3_c(src.maxX, src.maxY, src.maxZ)); +void dCcD_Sph::Set(const dCcD_SrcSph &src) { + cCcD_Obj::Set(src.mObjInf); + cCcD_SphAttr::Set(src.mSphInf); } -mVec3_c *dCcD_ShapeAttr5::getVirtualCenter() { - return &mVirtCenter; +void dCcD_Sph::setCenter(const mVec3_c &c) { + SetAtVec(mVec3_c::Zero); + SetC(&c); } -dCcD_ShapeAttr1::dCcD_ShapeAttr1() {} -dCcD_ShapeAttr1::~dCcD_ShapeAttr1() {} - -mVec3_c *dCcD_ShapeAttr1::getVirtualCenter() { - return &mVirtualCenter; +void dCcD_Sph::moveCenter(const mVec3_c &c) { + SetAtVec(c - GetC()); + SetC(&c); } -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); +void dCcD_Sph::setCenterAndAtVec(const mVec3_c &a, const mVec3_c &b) { + SetAtVec(b); + SetC(&a); } -mVec3_c *dCcD_ShapeAttr3::getVirtualCenter() { - return &mCenter; +cCcD_ShapeAttr *dCcD_Sph::GetShapeAttr() { + return this; } -dCcD_ShapeAttr4::dCcD_ShapeAttr4() {} -dCcD_ShapeAttr4::~dCcD_ShapeAttr4() {} +dCcD_Unk::dCcD_Unk() {} +dCcD_Unk::~dCcD_Unk() {} -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); +void dCcD_Unk::Set(const dCcD_SrcUnk &src) { + cCcD_Obj::Set(src.mObjInf); + cCcD_UnkAttr::Set(src.mUnkInf); } -mVec3_c *dCcD_ShapeAttr4::getVirtualCenter() { - return &mCenter; -} - -/** - * - * At/Tg/Co collider - * - */ - -dCcD_GObjAt::dCcD_GObjAt() { - field_0x58 = 0; +cCcD_ShapeAttr *dCcD_Unk::GetShapeAttr() { + return this; } - -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/d/col/cc/d_cc_mass_s.cpp b/src/d/col/cc/d_cc_mass_s.cpp new file mode 100644 index 000000000..02377e717 --- /dev/null +++ b/src/d/col/cc/d_cc_mass_s.cpp @@ -0,0 +1,276 @@ +#include "d/col/cc/d_cc_mass_s.h" + +#include "common.h" +#include "m/m_vec.h" +#include "rvl/MTX/vec.h" + +/////////////////////////////////////////////////////////////////////////////// +// Obj +/////////////////////////////////////////////////////////////////////////////// + +dCcMassS_Obj::dCcMassS_Obj() {} + +dCcMassS_Obj::~dCcMassS_Obj() {} + +void dCcMassS_Obj::Set(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback) { + mpObj = p_obj; + mPriority = priority; + mpCallback = callback; +} + +void dCcMassS_Obj::Clear() { + mpObj = nullptr; + mPriority = 5; + mpCallback = nullptr; + mDivideInfo.Set(0, 0, 0); +} + +/////////////////////////////////////////////////////////////////////////////// +// Hit Info +/////////////////////////////////////////////////////////////////////////////// + +dCcMassS_HitInf::dCcMassS_HitInf() {} + +dCcMassS_HitInf::~dCcMassS_HitInf() {} + +void dCcMassS_HitInf::ClearPointer() { + mpArea = nullptr; + mpAtObj = nullptr; + mpCoObj = nullptr; + mCoHitLen = 0.0f; +} + +/////////////////////////////////////////////////////////////////////////////// +// Manager +/////////////////////////////////////////////////////////////////////////////// + +dCcMassS_Mng::dCcMassS_Mng() { + Ct(); +} + +dCcMassS_Mng ::~dCcMassS_Mng() {} + +void dCcMassS_Mng::Ct() { + field_0x3AA = 0; + mResultCam = 0; + mCamTopPos.x = 0.0f; + mCamTopPos.y = -1000000000.0f; + mCamTopPos.z = 0.0f; + + mCamBottomPos.x = 0.0f; + mCamBottomPos.y = -1000000000.0f; + mCamBottomPos.z = 0.0f; + + Clear(); +} + +void dCcMassS_Mng::SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3) { + mCylAttr.SetR(radius); + mCylAttr.SetH(height); + field_0x3A8 = param_2; + field_0x3A9 = param_3; +} + +void dCcMassS_Mng::Prepare() { + cM3dGAab aab; + aab.ClearForMinMax(); + + for (dCcMassS_Obj *pObj = mMassObjs; pObj < mMassObjs + mMassObjCount; ++pObj) { + cCcD_ShapeAttr *objShape = pObj->GetObj()->GetShapeAttr(); + objShape->CalcAabBox(); + aab.SetMinMax(objShape->GetWorkAab()); + } + + for (dCcMassS_Obj *pObj = mMassAreas; pObj < mMassAreas + mMassAreaCount; ++pObj) { + cCcD_ShapeAttr *objShape = pObj->GetObj()->GetShapeAttr(); + objShape->CalcAabBox(); + aab.SetMinMax(objShape->GetWorkAab()); + } + + if (field_0x3AA & 1) { + mCpsAttr.CalcAabBox(); + aab.SetMinMax(mCpsAttr.GetWorkAab()); + } + + mDivideArea.SetArea(aab); + for (dCcMassS_Obj *pObj = mMassObjs; pObj < mMassObjs + mMassObjCount; ++pObj) { + cCcD_ShapeAttr *objShape = pObj->GetObj()->GetShapeAttr(); + cCcD_DivideInfo *divideInfo = &pObj->GetDivideInfo(); + mDivideArea.CalcDivideInfo(divideInfo, objShape->GetWorkAab()); + } + + for (dCcMassS_Obj *pObj = mMassAreas; pObj < mMassAreas + mMassAreaCount; ++pObj) { + cCcD_ShapeAttr *objShape = pObj->GetObj()->GetShapeAttr(); + cCcD_DivideInfo *divideInfo = &pObj->GetDivideInfo(); + mDivideArea.CalcDivideInfo(divideInfo, objShape->GetWorkAab()); + } + + if (field_0x3AA & 1) { + mDivideArea.CalcDivideInfo(&mDivideInfo, mCpsAttr.GetWorkAab()); + } + + mCamTopPos.x = 0.0f; + mCamTopPos.y = -1000000000.0f; + mCamTopPos.z = 0.0f; + mCamTopDist = 1000000000.0f; + + mCamBottomPos.x = 0.0f; + mCamBottomPos.y = -1000000000.0f; + mCamBottomPos.z = 0.0f; + mCamBottomDist = 1000000000.0f; +} + +u32 dCcMassS_Mng::Chk(mVec3_c *p_xyz, dAcObjBase_c **p_actor, dCcMassS_HitInf *p_hitInf) { + cCcD_DivideInfo divideInfo; + u32 flagsMaybe = 0; + *p_actor = NULL; + + mCylAttr.SetC(*p_xyz); + mCylAttr.CalcAabBox(); + + mDivideArea.CalcDivideInfoOverArea(÷Info, mCylAttr.GetWorkAab()); + p_hitInf->ClearPointer(); + + if (field_0x3A8 & 8) { + for (dCcMassS_Obj *massObj = mMassAreas; massObj < mMassAreas + mMassAreaCount; ++massObj) { + if (massObj->GetDivideInfo().Chk(divideInfo)) { + cCcD_Obj *obj = massObj->GetObj(); + cCcD_ShapeAttr *objShape = obj->GetShapeAttr(); + f32 f; + if (obj->ChkCoSet() && mCylAttr.CrossCo(*objShape, &f)) { + flagsMaybe |= 4; + *p_actor = obj->GetStts()->GetAc(); + if (p_hitInf != NULL) { + p_hitInf->SetAreaHitObj(obj); + } + + if (massObj->GetCallback() != NULL) { + massObj->GetCallback()(obj->GetStts()->GetAc(), p_xyz, field_0x3A9); + } + } + } + } + } + + for (dCcMassS_Obj *massObj = mMassObjs; massObj < mMassObjs + mMassObjCount; ++massObj) { + if (massObj->GetDivideInfo().Chk(divideInfo)) { + cCcD_Obj *obj = massObj->GetObj(); + cCcD_ShapeAttr *objShape = obj->GetShapeAttr(); + mVec3_c unusedVec; + if (obj->ChkAtSet() && !obj->ChkAtNoMass() && (field_0x3A8 & 1)) { + *p_actor = obj->GetStts()->GetAc(); + } + if (obj->ChkAtSet() && !obj->ChkAtNoMass() && mCylAttr.CrossAtTg(*objShape, &unusedVec) && + (field_0x3A8 & 1)) { + flagsMaybe |= 1; + *p_actor = obj->GetStts()->GetAc(); + if (p_hitInf != NULL) { + p_hitInf->SetAtHitObj(obj); + } + } + + f32 f; + if (obj->ChkCoSet() && mCylAttr.CrossCo(*objShape, &f) && (field_0x3A8 & 2)) { + flagsMaybe |= 2; + *p_actor = obj->GetStts()->GetAc(); + + if (field_0x3A8 & 0x10) { + mVec3_c vec; + PSVECSubtract((*p_actor)->GetPostion(), *p_xyz, vec); + vec.y = 0; + f32 vecMag = PSVECMag(vec); + if (cM3d_IsZero(vecMag)) { + vec.x = 1; + } else { + PSVECScale(vec, vec, f / vecMag); + } + obj->GetStts()->PlusCcMove(vec.x, vec.y, vec.z); + } + + if (p_hitInf != NULL) { + p_hitInf->SetCoHitObj(obj); + p_hitInf->SetCoHitLen(f); + } + } + } + } + + f32 f; + if ((field_0x3AA & 1) && mDivideInfo.Chk(divideInfo) && mCylAttr.CrossCo(mCpsAttr, &f)) { + mResultCam |= 1; + mResultCam |= 1 << (field_0x3A9 + 1); + + if ((mResultCam & 2) || (mResultCam & 8)) { + Vec tmpVec; + f32 plusH = p_xyz->y + mCylAttr.GetH(); + tmpVec.x = p_xyz->x; + tmpVec.y = plusH; + tmpVec.z = p_xyz->z; + + if (mCamTopPos.y < (20.0f + plusH)) { + f32 newCamTopDist = PSVECSquareDistance(&tmpVec, *mCpsAttr.GetStartP()); + if (mCamTopDist > newCamTopDist) { + mCamTopDist = newCamTopDist; + mCamTopPos = tmpVec; + } + } + + if (mCamBottomPos.y < (20.0f + plusH)) { + f32 newCamBottomDist = PSVECSquareDistance(&tmpVec, *mCpsAttr.GetEndP()); + if (mCamBottomDist > newCamBottomDist) { + mCamBottomDist = newCamBottomDist; + mCamBottomPos = tmpVec; + } + } + } + } + + return flagsMaybe; +} + +void dCcMassS_Mng::Clear() { + mMassObjCount = 0; + mMassAreaCount = 0; + + for (int i = 0; i < (s32)ARRAY_LENGTH(mMassObjs); ++i) { + mMassObjs[i].Clear(); + } + + for (int i = 0; i < (s32)ARRAY_LENGTH(mMassAreas); ++i) { + mMassAreas[i].Clear(); + } + + mCylAttr.SetR(0.0f); + mCylAttr.SetH(0.0f); + field_0x3A8 = 0; + field_0x3A9 = 4; +} + +void dCcMassS_Mng::SetObj(cCcD_Obj *p_obj, u8 priority) { + if (mMassObjCount >= (s32)ARRAY_LENGTH(mMassObjs)) { + for (int i = 0; i < (s32)ARRAY_LENGTH(mMassObjs); ++i) { + int prevPrio = mMassObjs[i].GetPriority(); + if (prevPrio > priority || (prevPrio == priority)) { + mMassObjs[i].Set(p_obj, priority, nullptr); + break; + } + } + } else { + mMassObjs[mMassObjCount].Set(p_obj, priority, nullptr); + mMassObjCount++; + } +} + +void dCcMassS_Mng::SetArea(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback) { + if (mMassAreaCount >= (s32)ARRAY_LENGTH(mMassAreas)) { + for (int i = 0; i < (s32)ARRAY_LENGTH(mMassAreas); ++i) { + if (mMassAreas[i].GetPriority() > priority) { + mMassAreas[i].Set(p_obj, priority, callback); + break; + } + } + } else { + mMassAreas[mMassAreaCount].Set(p_obj, priority, callback); + mMassAreaCount++; + } +} diff --git a/src/d/col/cc/d_cc_s.cpp b/src/d/col/cc/d_cc_s.cpp new file mode 100644 index 000000000..8889c8765 --- /dev/null +++ b/src/d/col/cc/d_cc_s.cpp @@ -0,0 +1,180 @@ +#include "d/col/cc/d_cc_s.h" + +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/c/c_m3d_g_aab.h" +#include "f/f_base.h" +#include "rvl/MTX/mtx.h" + +dCcS *dCcS::sInstance; + +dCcS *dCcS::GetInstance() { + return sInstance; +} + +void dCcS::Ct_cCcS() { + for (cCcD_Obj **end = mpObjAt + ARRAY_LENGTH(mpObjAt), **obj = mpObjAt; obj < end; ++obj) { + *obj = nullptr; + } + mObjAtCount = 0; + + for (cCcD_Obj **end = mpObjTg + ARRAY_LENGTH(mpObjTg), **obj = mpObjTg; obj < end; ++obj) { + *obj = nullptr; + } + mObjTgCount = 0; + + for (cCcD_Obj **end = mpObjCo + ARRAY_LENGTH(mpObjCo), **obj = mpObjCo; obj < end; ++obj) { + *obj = nullptr; + } + mObjCoCount = 0; + + for (cCcD_Obj **end = mpObj + ARRAY_LENGTH(mpObj), **obj = mpObj; obj < end; ++obj) { + *obj = nullptr; + } + mObjCount = 0; + + for (UNKTYPE **end = mpUnk + ARRAY_LENGTH(mpUnk), **obj = mpUnk; obj < end; ++obj) { + *obj = nullptr; + } + mUnkCount = 0; +} + +dCcS::dCcS() { + sInstance = this; +} + +dCcS::~dCcS() { + sInstance = nullptr; +} + +void dCcS::Ct() { + Ct_cCcS(); + mMassMng.Ct(); + ClearArea(); +} + +void dCcS::Dt() { + Ct_cCcS(); + ClearArea(); +} + +bool dCcS::ChkRemoveActor(dAcObjBase_c *pActor) { + bool ret = false; + if (pActor && (pActor->delete_request || pActor->lifecycle_state == fBase_c::TO_BE_DELETED)) { + ret = true; + } + return ret; +} + +bool dCcS::ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *) {} + +bool dCcS::ChkAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *) {} + +void dCcS::ChkAtTg() {} + +bool dCcS::ChkNoHitCo(cCcD_Obj *, cCcD_Obj *) {} + +void dCcS::SetCoCommonHitInf(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32) {} + +void dCcS::ChkCo() {} + +bool dCcS::ChkSheildFrontRange(cCcD_Obj *, cCcD_Obj *) {} + +bool dCcS::ChkShield(cCcD_Obj *, cCcD_Obj *, cCcD_ShieldChkCallback *) {} + +bool dCcS::ChkAtTgHitAfterCross(bool, bool, cCcD_Obj *, cCcD_Obj *) {} + +void dCcS::SetCoObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *) {} + +void dCcS::SetPosCorrect(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32) {} + +void dCcS::CalcParticleAngle(cCcD_Obj *, cCcD_Obj *, mAng3_c *, bool) {} + +void dCcS::fn_80356fd0(mVec3_c *, cCcD_Obj *, cCcD_Obj *) {} + +u32 dCcS::ProcAtTgHitmark(cCcD_Obj *, cCcD_Obj *, mVec3_c *, u32, mVec3_c *) {} + +void dCcS::SetAtTgObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, mVec3_c *, bool) {} + +bool dCcS::ChkCamera(mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32) {} + +bool dCcS::ChkCameraPoint( + const mVec3_c &, const mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32 +) {} + +bool dCcS::ChkCo(const mVec3_c &, dAcObjBase_c *) {} + +bool dCcS::fn_80357c90(const mVec3_c &, const mVec3_c &, u32, UNKTYPE **) {} + +void dCcS::Set(cCcD_Obj *) {} + +void dCcS::MoveAfterCheck() {} + +void dCcS::RemoveDeadObj() {} + +void dCcS::CalcArea() { + if (mbAreaSet) { + return; + } + + cM3dGAab aab; + aab.ClearForMinMax(); + for (cCcD_Obj **obj = mpObj; obj < mpObj + mObjCount; ++obj) { + cCcD_ShapeAttr *attr = (*obj)->GetShapeAttr(); + attr->CalcAabBox(); + aab.SetMinMax(attr->GetWorkAab()); + } + // TODO +} + +void dCcS::Move() { + RemoveDeadObj(); + CalcArea(); + ChkAtTg(); + ChkCo(); + for (int i = 0; i < mObjTgCount; ++i) { + mpObjTg[i]->SetTg_0x4B(0); + } + MoveAfterCheck(); + AdjustHitPos(); + mObjAtCount = 0; + mObjTgCount = 0; + mObjCoCount = 0; + mObjCount = 0; + mUnkCount = 0; + mbAreaSet = false; + ClearArea(); +} + +void dCcS::MassClear() { + mMassMng.Clear(); +} + +void dCcS::SetArea(mMtx_c *pMtx) { + if (mAreaCount >= 16) { + return; + } + + // non-match: Huh + mAreas[mAreaCount].mInv = mAreas[mAreaCount].mMtx = *pMtx; + + PSMTXInverse(mAreas[mAreaCount].mInv, mAreas[mAreaCount].mInv); + mAreaCount++; +} + +void dCcS::ClearArea() { + mAreaCount = 0; +} + +extern "C" void *STAGE_MANAGER; +extern "C" bool fn_8019A7A0(void *stg, f32 *, f32 *); +void dCcS::AdjustHitPos() { + f32 x, z; + if (STAGE_MANAGER && fn_8019A7A0(STAGE_MANAGER, &x, &z)) { + for (cCcD_Obj **obj = mpObj; obj < mpObj + mObjCount; ++obj) { + (*obj)->AdjustHitPos(x, z); + (*obj)->GetShapeAttr()->TranslateXZ(x, z); + } + } +} diff --git a/src/d/col/cc/d_cc_shape_colliders.cpp b/src/d/col/cc/d_cc_shape_colliders.cpp deleted file mode 100644 index ad53e5745..000000000 --- a/src/d/col/cc/d_cc_shape_colliders.cpp +++ /dev/null @@ -1,108 +0,0 @@ -#include "d/col/cc/d_cc_shape_colliders.h" - -#include "d/col/cc/d_cc_d.h" -#include "m/m_vec.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(mCps.mEnd, mCps.mStart, *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/src/m/m3d/m_shadow.cpp b/src/m/m3d/m_shadow.cpp index b95c1f448..01e3d932a 100644 --- a/src/m/m3d/m_shadow.cpp +++ b/src/m/m3d/m_shadow.cpp @@ -10,7 +10,6 @@ #include "nw4r/g3d/g3d_scnmdlsmpl.h" #include "nw4r/g3d/g3d_state.h" - // All of this is completely made up, as we don't have symbols for this TU // (contrary to the rest of m3d and most of nw4r::g3d) @@ -362,7 +361,7 @@ void mShadow_c::drawAllShadows() { GXSetCullMode(GX_CULL_BACK); GXSetDither(0); GXSetClipMode(GX_CLIP_DISABLE); - GXLoadPosMtxImm(mMtx_c::Identity.m, 0); + GXLoadPosMtxImm(mMtx_c::Identity, 0); GXSetCurrentMtx(0); Mtx44 mtx; C_MTXOrtho(mtx, 0.0f, wid, 0.0f, wid, 0.0f, 1.0f); @@ -484,7 +483,7 @@ bool mShadowChild_c::addMdl(scnLeaf_c &mdl, const mQuat_c &quat) { if (mdl.getType() == 0) { mdl.getLocalMtx(mtx); } else { - mtx.set(static_cast(mdl).mMtx); + mtx.copyFrom(static_cast(mdl).mMtx); } // TODO this copy is a bit weird (reads members in a different order) @@ -614,7 +613,7 @@ void mCustomShadow_c::calc(mMtx_c mtx, mMtx_c &mtx2) { // TODO some shuffles mVec3_c trans; - mtx2.set(mMtx); + mtx2.copyFrom(mMtx); mVec3_c offset(0.0f, 0.0f, 0.0f); offset.y = field_0x48; PSMTXMultVec(mtx2, offset, trans); diff --git a/src/m/m_angle.cpp b/src/m/m_angle.cpp index 5ec73aa3b..77319d485 100644 --- a/src/m/m_angle.cpp +++ b/src/m/m_angle.cpp @@ -1,4 +1,5 @@ #include "m/m_angle.h" + #include "math.h" /** 80575c08 */ diff --git a/tools/decompctx.py b/tools/decompctx.py index a857b8a25..184d4bcd1 100644 --- a/tools/decompctx.py +++ b/tools/decompctx.py @@ -21,7 +21,7 @@ include_dirs = [ os.path.join(root_dir, "include"), # Add additional include directories here - os.path.join(root_dir, "src"), + os.path.join(root_dir, "src"), os.path.join(root_dir, "src", "PowerPC_EABI_Support", "MetroTRK"), os.path.join( root_dir, "src", "PowerPC_EABI_Support", "MSL", "MSL_C", "MSL_Common", "Include"