Updated CC collision (#80)
Some checks failed
Build / build (SOUE01) (push) Has been cancelled

* c_cc_d soooo close

* d_cc_shape_colliders -> d_cc_d

* ported over changes from #43

* Oops, didnt save

* use better collision functions in bombf

* bombf fixes

* bombf actorPostCreate matching

* fix

* small fix for cCcD_UnkAttr Set function

* more cleanup(?) for c_cc_d

* d_cc_mass_s OK

* Initial d_cc_s setup

* some easy funcs

---------

Co-authored-by: robojumper <robojumper@gmail.com>
This commit is contained in:
Elijah Thomas 2024-11-01 17:07:16 -04:00 committed by GitHub
parent 1d17e35316
commit 8a3710824b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
74 changed files with 4523 additions and 1963 deletions

View File

@ -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": {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -438,11 +438,11 @@ config.libs = [
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 @@ config.libs = [
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 @@ config.libs = [
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,

View File

@ -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<dAcBomb_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

View File

@ -223,6 +223,7 @@ public:
/* 0x35C */ u32 mForceOrPreventActionFlags;
/* 0x360 */ UNKWORD field_0x360;
/* 0x364 */ u32 mActionFlags;
/* 0x368 */ u32 mActionFlagsCont;
inline bool checkFlags0x340(u32 mask) const {
return (someFlags_0x340 & mask) != 0;

View File

@ -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<dAcObjBase_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<dAcObjBase_c> mRef2;
/* 0x704 */ STATE_MGR_DECLARE(dAcArrow_c);
};
#endif

View File

@ -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 @@ public:
/* 0x1B0 */ u8 unk_0x1B0[0x1C0 - 0x1B0];
/* 0x1C0 */ UnkCCDStruct mCCdStruct;
/* 0x1C0 */ cCcD_Stts mStts;
/* 0x1FC */ mVec3_c mStartingPos;
/* 0x208 */ mAng3_c mStartingRot;

View File

@ -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 @@ public:
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);
};

View File

@ -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 @@ public:
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);
};

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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<dAcObjBase_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

View File

@ -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 */
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;
// /* 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
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 */

View File

@ -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) {

View File

@ -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 @@ public:
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 @@ public:
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 @@ public:
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;
}

View File

@ -18,7 +18,7 @@ public:
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 {

View File

@ -17,14 +17,23 @@ public:
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

View File

@ -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 @@ public:
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;
}
};

View File

@ -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 @@ public:
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 @@ public:
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<f32>::sqrt(mNormal.x * mNormal.x + mNormal.z * mNormal.z);
}
mAng GetAngleY() const {
return cM::atan2s(mNormal.x, mNormal.z);
}
};
#endif

View File

@ -20,14 +20,17 @@ public:
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;

View File

@ -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 @@ public:
/* 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);
}
};

View File

@ -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 @@ public:
/* 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 @@ public:
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 &);

View File

@ -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
struct dCcD_SrcCps {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x44 */ cCcD_SrcCpsAttr mCpsInf;
};
class dCcD_DivideInfo {
private:
/* 0x00 */ u32 mXDivInfo;
/* 0x04 */ u32 mYDivInfo;
/* 0x08 */ u32 mZDivInfo;
/* 0x0C vtable */
// Capsule
class dCcD_Cps : public cCcD_Obj, public cCcD_CpsAttr {
public:
/* 80328120 */ dCcD_DivideInfo();
/* 80328130 */ virtual ~dCcD_DivideInfo();
// void Set(u32, u32, u32);
// bool Chk(dCcD_DivideInfo const &) const;
}; // Size = 0x10
dCcD_Cps();
virtual ~dCcD_Cps();
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;
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcCps &src);
void unknownCalc();
};
struct dCcD_SrcTri {
/* 0x00 */ cCcD_SrcGObj mObjInf;
};
class dCcD_Tri : public cCcD_Obj, public cCcD_TriAttr {
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
dCcD_Tri();
virtual ~dCcD_Tri();
class dCcD_GAtTgCoCommonBase {
protected:
/* 0x00 */ u32 field_0x00;
/* 0x04 */ s8 mEffCounter;
/* 0x08 */ dAcRef_c<dAcBase_c> mActor;
/* 0x14 */ u32 field_0x14;
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcTri &src);
};
struct dCcD_SrcCyl {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcCylAttr mCylInf;
};
// Cylinder
class dCcD_Cyl : public cCcD_Obj, public cCcD_CylAttr {
public:
dCcD_GAtTgCoCommonBase();
virtual ~dCcD_GAtTgCoCommonBase();
dCcD_Cyl();
virtual ~dCcD_Cyl();
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 *);
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcCyl &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
};
struct dCcD_SrcGAtTgCoCommonBase {
/* 0x0 */ u32 mGFlag;
}; // Size: 0x4
struct dCcD_SrcGObjAt {
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
/* 0x04 */ u32 field_0x04;
/* 0x08 */ u32 field_0x08;
/* 0x0C */ u8 mSe; // Sound Effect ID
/* 0x0D */ u8 mHitMark; // Hit Mark particle ID
/* 0x0E */ u8 mSpl;
/* 0x0F */ u8 mMtrl;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ s16 field_0x12;
struct dCcD_SrcSph {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcSphAttr mSphInf;
};
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;
// Sphere
class dCcD_Sph : public cCcD_Obj, public cCcD_SphAttr {
public:
dCcD_GObjAt();
virtual ~dCcD_GObjAt();
dCcD_Sph();
virtual ~dCcD_Sph();
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);
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 &);
};
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);
struct dCcD_SrcUnk {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcUnkAttr mUnkInf;
};
class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjCo mSrc;
/* 0x20 */ u32 field_0x20;
/* 0x24 */ u16 field_0x24;
/* 0x28 */ u32 field_0x28;
class dCcD_Unk : public cCcD_Obj, public cCcD_UnkAttr {
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);
dCcD_Unk();
virtual ~dCcD_Unk();
void SetGFlag(u32 flag) {
mSrc.mBase.mGFlag = flag;
}
};
virtual cCcD_ShapeAttr *GetShapeAttr() override;
class dCcD_ShapeAttr {
public:
/* 0x00 */ u8 UNK_0x00[0x18 - 0x00];
/* 0x18 */ dCcD_DivideInfo field_0x18;
dCcD_ShapeAttr();
/* vt 0x08 */ virtual ~dCcD_ShapeAttr();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C();
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10();
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() = 0;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() = 0;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() = 0;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() = 0;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() = 0;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28(); // 0x80329110
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() = 0;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() = 0;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() = 0;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() = 0;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() = 0;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter(); // 0x80329120
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() = 0;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() = 0;
/* vt 0x4C */ virtual void getShapeAccess(); // 0x80329090
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() = 0;
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54(); // 0x803290F0
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() = 0;
static mVec3_c m_virtual_center;
};
// This is in dAcObjBase_c @ 0x1c0
struct UnkCCDStruct {
u32 field_0x00;
u32 field_0x04;
u32 field_0x08;
u32 field_0x0C;
/* 0x10 */ mVec3_c field_0x10;
/* 0x1C */ mVec3_c field_0x1C;
/* 0x28 */ mVec3_c posIncrements;
dAcBase_c *field_0x34;
s32 field_0x38;
UnkCCDStruct(dAcBase_c *);
void postExecute();
void reset();
fBaseID_e getId();
u32 getSomething(int);
void setField0x38ToMagicValue() {
field_0x38 = 0xD;
}
void setField0x38(s32 val) {
field_0x38 = val;
}
};
// Object Info
class dCcD_GObjInf {
protected:
/* 0x000 */ dCcD_GObjAt mGObjAt;
/* 0x05C */ dCcD_GObjTg mGObjTg;
/* 0x0D8 */ dCcD_GObjCo mGObjCo;
/* 0x104 */ UnkCCDStruct *field_0x104;
/* 0x108 */ u32 field_0x108;
public:
dCcD_GObjInf();
/* vt 0x08 */ virtual ~dCcD_GObjInf();
/* vt 0x0C */ virtual void *dCcD_GObjInf_0x0C() = 0;
/* vt 0x10 */ virtual void dCcD_GObjInf_0x10(); // 0x80328d30
void clear();
void init(const dCcD_SrcGObjInf &src);
static bool weirdConditionCheck(dAcBase_c *ac, u32);
inline void initUnk(UnkCCDStruct &src) {
field_0x104 = &src;
}
inline void clearCoFlag() {
mGObjCo.clearFlag();
}
void setTgCoFlag(u32 f) {
mGObjTg.setFlag(f);
mGObjCo.setFlag(f);
}
inline void setSomeDefendValue(u32 val) {
mGObjTg.set0x4C(val);
}
inline void setAtVec(const mVec3_c &p) {
mGObjAt.SetSomeVec(p);
}
inline 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();
dAcBase_c *GetAtActor();
bool CheckCollidedMask(u32 mask);
dAcBase_c *GetTgActor();
dAcBase_c *GetCoActor();
void adjustHitPos(f32 dx, f32 dz);
};
struct dCcD_SrcCylAttr {
public:
/* 0x00 */ f32 mRadius;
/* 0x04 */ f32 mHeight;
}; // Size = 0x8
struct dCcD_SrcSphAttr {
/* 0x00 */ f32 mRadius;
}; // Size = 0x4
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:
};
// Unk1
class dCcD_ShapeAttr1 : public dCcD_ShapeAttr, public cM3dGUnk1 {
public:
dCcD_ShapeAttr1();
void init(const dCcD_SrcUnk1Attr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr1();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Unk1
class dCcD_ShapeAttr2 : public dCcD_ShapeAttr, public cM3dGUnk2 {
public:
dCcD_ShapeAttr2();
/* vt 0x08 */ virtual ~dCcD_ShapeAttr2();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
// /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Aabb
class dCcD_ShapeAttr5 : public dCcD_ShapeAttr, public cM3dGUnk {
public:
dCcD_ShapeAttr5();
void init(const dCcD_SrcAabbAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr5();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
// /* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Cyl
class dCcD_ShapeAttr3 : public dCcD_ShapeAttr, public cM3dGCyl {
public:
dCcD_ShapeAttr3();
void init(const dCcD_SrcCylAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr3();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Sph
class dCcD_ShapeAttr4 : public dCcD_ShapeAttr, public cM3dGSph {
public:
dCcD_ShapeAttr4();
void init(const dCcD_SrcSphAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr4();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
void Set(const dCcD_SrcUnk &src);
};
#endif

View File

@ -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);
};

View File

@ -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

78
include/d/col/cc/d_cc_s.h Normal file
View File

@ -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;
};

View File

@ -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

9
include/d/d_shadow.h Normal file
View File

@ -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() {}
};

View File

@ -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 @@ private:
return params & 0xFF;
}
int getParam0x08() {
u32 getParam0x08() {
return (params >> 8) & 0xFF;
}

View File

@ -2,6 +2,7 @@
#define EGG_MATH_H
#include "common.h"
#include "math.h"
namespace EGG {

View File

@ -5,7 +5,6 @@
#include "egg/math/eggQuat.h"
#include "egg/math/eggVector.h"
namespace EGG {
struct Matrix34f {

View File

@ -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);

View File

@ -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 @@ public:
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 @@ public:
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 @@ public:
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 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(mAng xRot, mAng yRot,
mAng zRot); ///< Rotates 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 @@ public:
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;
};

View File

@ -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 @@ public:
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 @@ public:
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;

View File

@ -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

View File

@ -1,189 +0,0 @@
#ifndef NW4R_TYPES_H
#define NW4R_TYPES_H
namespace nw4r {
namespace ut {
template <typename T>
struct TextWriterBase;
template <typename T>
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 <typename T>
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

View File

@ -1,5 +1,6 @@
#ifndef NW4R_TYPES_H
#define NW4R_TYPES_H
#include "common.h"
#define NW4R_BYTEORDER_BIG 0xFEFF

View File

@ -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, ...) \

View File

@ -25,10 +25,8 @@
mStateMgr.getStateID(); \
}
#define UI_STATE_MGR_DECLARE(class_name) \
sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
#define UI_STATE_MGR_DECLARE(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
#define STATE_MGR(class_name) \
sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#define STATE_MGR(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#endif

View File

@ -18,6 +18,8 @@ public:
mpOwner = owner;
}
void remove(bool);
private:
u8 field_0x20[0x28 - 0x20];
/* 0x28 */ dBase_c *mpOwner;

View File

@ -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<dAcBomb_c *>(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() {}

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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() {

View File

@ -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;

View File

@ -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)) {

View File

@ -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<dAcArrow_c *>(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() {}

View File

@ -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;
}

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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)) {

File diff suppressed because it is too large Load Diff

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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();
}

View File

@ -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;
void dCcD_Cps::Set(const dCcD_SrcCps &src) {
cCcD_Obj::Set(src.mObjInf);
cCcD_CpsAttr::Set(src.mCpsInf);
}
// 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;
}
cCcD_ShapeAttr *dCcD_Cps::GetShapeAttr() {
return this;
}
inline bool cM3d_IsZero(f32 f) {
return fabsf(f) < FLT_EPSILON;
void dCcD_Cps::unknownCalc() {
PSVECSubtract(mEnd, mStart, mAt.mVec);
}
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,
};
dCcD_Tri::dCcD_Tri() {}
dCcD_Tri::~dCcD_Tri() {}
// 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 dCcD_Tri::Set(const dCcD_SrcTri &src) {
cCcD_Obj::Set(src.mObjInf);
}
void UnkCCDStruct::postExecute() {
field_0x04 = field_0x00;
field_0x00 = 0;
field_0x0C = field_0x08;
field_0x08 = 0;
cCcD_ShapeAttr *dCcD_Tri::GetShapeAttr() {
return this;
}
void UnkCCDStruct::reset() {
field_0x10 = mVec3_c::Zero;
field_0x1C = mVec3_c::Zero;
posIncrements = mVec3_c::Zero;
dCcD_Cyl::dCcD_Cyl() {}
dCcD_Cyl::~dCcD_Cyl() {}
void dCcD_Cyl::Set(const dCcD_SrcCyl &src) {
cCcD_Obj::Set(src.mObjInf);
cCcD_CylAttr::Set(src.mCylInf);
}
fBaseID_e UnkCCDStruct::getId() {
if (field_0x34 != nullptr) {
return field_0x34->unique_ID;
}
return (fBaseID_e)0;
cCcD_ShapeAttr *dCcD_Cyl::GetShapeAttr() {
return this;
}
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];
}
void dCcD_Cyl::setCenter(const mVec3_c &c) {
SetAtVec(mVec3_c::Zero);
SetC(c);
}
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_Cyl::moveCenter(const mVec3_c &c) {
SetAtVec(c - GetC());
SetC(c);
}
void dCcD_GAtTgCoCommonBase::unlink() {
mActor.unlink();
dCcD_Sph::dCcD_Sph() {}
dCcD_Sph::~dCcD_Sph() {}
void dCcD_Sph::Set(const dCcD_SrcSph &src) {
cCcD_Obj::Set(src.mObjInf);
cCcD_SphAttr::Set(src.mSphInf);
}
void dCcD_GAtTgCoCommonBase::setActor(dAcBase_c *actor) {
field_0x14 |= 1;
mActor.link(actor);
void dCcD_Sph::setCenter(const mVec3_c &c) {
SetAtVec(mVec3_c::Zero);
SetC(&c);
}
dAcBase_c *dCcD_GAtTgCoCommonBase::getActor() {
return mActor.get();
void dCcD_Sph::moveCenter(const mVec3_c &c) {
SetAtVec(c - GetC());
SetC(&c);
}
void dCcD_GAtTgCoCommonBase::decreaseCount() {
if (mEffCounter <= 0) {
return;
}
mEffCounter--;
void dCcD_Sph::setCenterAndAtVec(const mVec3_c &a, const mVec3_c &b) {
SetAtVec(b);
SetC(&a);
}
dCcD_GObjInf::dCcD_GObjInf() {
field_0x104 = nullptr;
field_0x108 = 0;
cCcD_ShapeAttr *dCcD_Sph::GetShapeAttr() {
return this;
}
dCcD_GObjInf::~dCcD_GObjInf() {
field_0x104 = nullptr;
dCcD_Unk::dCcD_Unk() {}
dCcD_Unk::~dCcD_Unk() {}
void dCcD_Unk::Set(const dCcD_SrcUnk &src) {
cCcD_Obj::Set(src.mObjInf);
cCcD_UnkAttr::Set(src.mUnkInf);
}
bool dCcD_GObjInf::weirdConditionCheck(dAcBase_c *ac, u32 arg) {
return ac != nullptr && ac->isActorPlayer() && arg == 2;
cCcD_ShapeAttr *dCcD_Unk::GetShapeAttr() {
return this;
}
void dCcD_GObjInf::clear() {
mGObjAt.clearFlag();
mGObjTg.clearFlag();
mGObjCo.clearFlag();
}
void dCcD_GObjInf::init(const dCcD_SrcGObjInf &src) {
mGObjAt.init(&src.mGObjAt);
mGObjTg.init(&src.mGObjTg);
mGObjCo.init(&src.mGObjCo);
}
void dCcD_GObjInf::ResetAtHit() {
mGObjAt.resetField0x14();
mGObjAt.unlink();
mGObjAt.decreaseCount();
mGObjAt.resetEffCounter();
}
void dCcD_GObjInf::ResetTgHit() {
mGObjTg.resetField0x14();
mGObjTg.unlink();
mGObjTg.decreaseCount();
mGObjTg.resetEffCounter();
}
void dCcD_GObjInf::ResetCoHit() {
mGObjCo.resetField0x14();
mGObjCo.unlink();
mGObjCo.decreaseCount();
mGObjCo.resetEffCounter();
}
mVec3_c *dCcD_GObjInf::GetAtHitPosP() {
return mGObjAt.GetHitPosP();
}
mVec3_c *dCcD_GObjInf::GetAtHitPosP2() {
return mGObjAt.GetHitPosP();
}
void dCcD_GObjInf::dCcD_GObjInf_0x10() {}
dAcBase_c *dCcD_GObjInf::GetAtActor() {
return mGObjAt.getActor();
}
bool dCcD_GObjInf::CheckCollidedMask(u32 mask) {
return (mGObjTg.get0x58() & mask);
}
dAcBase_c *dCcD_GObjInf::GetTgActor() {
return mGObjTg.getActor();
}
dAcBase_c *dCcD_GObjInf::GetCoActor() {
return mGObjCo.getActor();
}
void dCcD_GObjInf::adjustHitPos(f32 dx, f32 dz) {
mGObjAt.adjustHitPos(dx, dz);
mGObjTg.adjustHitPos(dx, dz);
mGObjCo.adjustHitPos(dx, dz);
}
/**
*
* Geometric shape colliders
*
*/
dCcD_ShapeAttr::dCcD_ShapeAttr() {}
dCcD_ShapeAttr::~dCcD_ShapeAttr() {}
mVec3_c *dCcD_ShapeAttr::getVirtualCenter() {
return &m_virtual_center;
}
dCcD_ShapeAttr2::dCcD_ShapeAttr2() {}
dCcD_ShapeAttr2::~dCcD_ShapeAttr2() {}
dCcD_ShapeAttr5::dCcD_ShapeAttr5() {}
dCcD_ShapeAttr5::~dCcD_ShapeAttr5() {}
void dCcD_ShapeAttr5::init(const dCcD_SrcAabbAttr &src) {
Set(mVec3_c(src.minX, src.minY, src.minZ), mVec3_c(src.maxX, src.maxY, src.maxZ));
}
mVec3_c *dCcD_ShapeAttr5::getVirtualCenter() {
return &mVirtCenter;
}
dCcD_ShapeAttr1::dCcD_ShapeAttr1() {}
dCcD_ShapeAttr1::~dCcD_ShapeAttr1() {}
mVec3_c *dCcD_ShapeAttr1::getVirtualCenter() {
return &mVirtualCenter;
}
dCcD_ShapeAttr3::dCcD_ShapeAttr3() {}
dCcD_ShapeAttr3::~dCcD_ShapeAttr3() {}
void dCcD_ShapeAttr3::init(const dCcD_SrcCylAttr &src) {
SetR(src.mRadius);
SetH(src.mHeight);
mVec3_c v;
v.z = 0.0f;
v.y = 0.0f;
v.x = 0.0f;
SetC(v);
}
mVec3_c *dCcD_ShapeAttr3::getVirtualCenter() {
return &mCenter;
}
dCcD_ShapeAttr4::dCcD_ShapeAttr4() {}
dCcD_ShapeAttr4::~dCcD_ShapeAttr4() {}
void dCcD_ShapeAttr4::init(const dCcD_SrcSphAttr &src) {
SetR(src.mRadius);
mVec3_c v;
v.z = 0.0f;
v.y = 0.0f;
v.x = 0.0f;
SetC(v);
}
mVec3_c *dCcD_ShapeAttr4::getVirtualCenter() {
return &mCenter;
}
/**
*
* At/Tg/Co collider
*
*/
dCcD_GObjAt::dCcD_GObjAt() {
field_0x58 = 0;
}
dCcD_GObjAt::~dCcD_GObjAt() {}
void dCcD_GObjAt::init(const dCcD_SrcGObjAt *src) {
mEffCounter = 0;
mSrc = *src;
mHitPos = mVec3_c::Zero;
}
void dCcD_GObjAt::setSomeAtFlags(u32 flags) {
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFC1 | flags;
}
void dCcD_GObjAt::adjustHitPos(f32 dx, f32 dz) {
mHitPos.x += dx;
mHitPos.z += dz;
}
dCcD_GObjTg::dCcD_GObjTg() {
field_0x44 = 0;
field_0x4A = 0;
field_0x4B = 0;
field_0x4C = 0;
field_0x50 = 0;
field_0x54 = 0;
field_0x6C.x = 0.0f;
field_0x6C.y = 0.0f;
field_0x6C.z = 0.0f;
field_0x78 = 0;
}
dCcD_GObjTg::~dCcD_GObjTg() {}
void dCcD_GObjTg::init(const dCcD_SrcGObjTg *src) {
mEffCounter = 0;
mSrc = *src;
field_0x4C = 0;
mHitPos = mVec3_c::Zero;
field_0x44 = 0;
field_0x48 = 0x4000;
}
void dCcD_GObjTg::adjustHitPos(f32 dx, f32 dz) {
mHitPos.x += dx;
mHitPos.z += dz;
field_0x6C.x += dx;
field_0x6C.z += dz;
}
dCcD_GObjCo::dCcD_GObjCo() {
field_0x20 = 0;
field_0x28 = 0;
}
dCcD_GObjCo::~dCcD_GObjCo() {}
void dCcD_GObjCo::init(const dCcD_SrcGObjCo *src) {
mEffCounter = 0;
mSrc = *src;
setSomeAtFlags(src->mBase.mGFlag & 0x1E0);
}
void dCcD_GObjCo::setSomeAtFlags(u32 flags) {}
void dCcD_GObjCo::adjustHitPos(f32 dx, f32 dz) {}

View File

@ -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(&divideInfo, 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++;
}
}

180
src/d/col/cc/d_cc_s.cpp Normal file
View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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<mCustomShadow_c &>(mdl).mMtx);
mtx.copyFrom(static_cast<mCustomShadow_c &>(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);

View File

@ -1,4 +1,5 @@
#include "m/m_angle.h"
#include "math.h"
/** 80575c08 */

View File

@ -21,7 +21,7 @@ src_dir = os.path.join(root_dir, "src")
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"