mirror of
https://github.com/zeldaret/ss
synced 2026-06-23 17:05:14 -04:00
Merge branch 'main' into pr/85
This commit is contained in:
Vendored
+2
-1
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
|
||||
REL/d/a/obj/d_a_obj_trap_rock_1.cpp:
|
||||
.text start:0x000000F0 end:0x00001118
|
||||
.ctors start:0x00000000 end:0x00000004
|
||||
.rodata start:0x00000000 end:0x00000024
|
||||
.data start:0x00000000 end:0x0000028C
|
||||
.bss start:0x00000008 end:0x000000D8
|
||||
|
||||
@@ -8,13 +8,13 @@ __dt__28sFState_c<15dAcOtrapRock1_c>Fv = .text:0x000001C0; // type:function size
|
||||
__dt__31sFStateFct_c<15dAcOtrapRock1_c>Fv = .text:0x00000220; // type:function size:0x6C
|
||||
__dt__84sStateMgr_c<15dAcOtrapRock1_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000290; // type:function size:0xA0
|
||||
__dt__54sFStateMgr_c<15dAcOtrapRock1_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000330; // type:function size:0xA4
|
||||
AcOtrapRock__initModels = .text:0x000003E0; // type:function size:0xE0
|
||||
AcOtrapRock__init = .text:0x000004C0; // type:function size:0x178
|
||||
createHeap__15dAcOtrapRock1_cFv = .text:0x000003E0; // type:function size:0xE0
|
||||
create__15dAcOtrapRock1_cFv = .text:0x000004C0; // type:function size:0x178
|
||||
changeState__84sStateMgr_c<15dAcOtrapRock1_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000640; // type:function size:0x10
|
||||
fn_261_650 = .text:0x00000650; // type:function size:0x8
|
||||
AcOtrapRock__update = .text:0x00000660; // type:function size:0x5C
|
||||
doDelete__15dAcOtrapRock1_cFv = .text:0x00000650; // type:function size:0x8
|
||||
actorExecute__15dAcOtrapRock1_cFv = .text:0x00000660; // type:function size:0x5C
|
||||
executeState__84sStateMgr_c<15dAcOtrapRock1_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000006C0; // type:function size:0x10
|
||||
AcOtrapRock__draw = .text:0x000006D0; // type:function size:0x28
|
||||
draw__15dAcOtrapRock1_cFv = .text:0x000006D0; // type:function size:0x28
|
||||
initializeState_TrapWait__15dAcOtrapRock1_cFv = .text:0x00000700; // type:function size:0x4
|
||||
executeState_TrapWait__15dAcOtrapRock1_cFv = .text:0x00000710; // type:function size:0x74
|
||||
finalizeState_TrapWait__15dAcOtrapRock1_cFv = .text:0x00000790; // type:function size:0x4
|
||||
@@ -46,20 +46,20 @@ isSameName__30sFStateID_c<15dAcOtrapRock1_c>CFPCc = .text:0x00001090; // type:fu
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_261_rodata_0 = .rodata:0x00000000; // type:object size:0xC data:float
|
||||
lbl_261_rodata_C = .rodata:0x0000000C; // type:object size:0x4 data:float
|
||||
lbl_261_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float
|
||||
lbl_261_rodata_18 = .rodata:0x00000018; // type:object size:0xC
|
||||
g_profile_OBJ_TRAP_ROCK_1 = .data:0x00000000; // type:object size:0x50 data:4byte
|
||||
lbl_261_data_50 = .data:0x00000050; // type:object size:0x20
|
||||
lbl_261_data_70 = .data:0x00000070; // type:object size:0x80
|
||||
lbl_261_data_F0 = .data:0x000000F0; // type:object size:0x30
|
||||
lbl_261_data_120 = .data:0x00000120; // type:object size:0x30
|
||||
lbl_261_data_150 = .data:0x00000150; // type:object size:0x18
|
||||
lbl_261_data_168 = .data:0x00000168; // type:object size:0xF0
|
||||
lbl_261_data_258 = .data:0x00000258; // type:object size:0x34
|
||||
lbl_261_rodata_0 = .rodata:0x00000000; // type:object size:0xC scope:local data:float
|
||||
lbl_261_rodata_C = .rodata:0x0000000C; // type:object size:0x4 scope:local data:float
|
||||
lbl_261_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
|
||||
lbl_261_rodata_18 = .rodata:0x00000018; // type:object size:0xC scope:local
|
||||
g_profile_OBJ_TRAP_ROCK_1 = .data:0x00000000; // type:object size:0x10 data:4byte
|
||||
lbl_261_data_50 = .data:0x00000050; // type:object size:0x20 scope:local
|
||||
__vt__15dAcOtrapRock1_c = .data:0x00000070; // type:object size:0x80
|
||||
__vt__54sFStateMgr_c<15dAcOtrapRock1_c,20sStateMethodUsr_FI_c> = .data:0x000000F0; // type:object size:0x30
|
||||
__vt__84sStateMgr_c<15dAcOtrapRock1_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000120; // type:object size:0x30
|
||||
__vt__31sFStateFct_c<15dAcOtrapRock1_c> = .data:0x00000150; // type:object size:0x14
|
||||
__vt__28sFState_c<15dAcOtrapRock1_c> = .data:0x00000168; // type:object size:0x18
|
||||
__vt__30sFStateID_c<15dAcOtrapRock1_c> = .data:0x00000258; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_261_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
lbl_261_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
lbl_261_bss_58 = .bss:0x00000058; // type:object size:0x40 data:4byte
|
||||
lbl_261_bss_98 = .bss:0x00000098; // type:object size:0x40 data:4byte
|
||||
lbl_261_bss_8 = .bss:0x00000008; // type:object size:0xC scope:local data:4byte
|
||||
StateID_TrapWait__15dAcOtrapRock1_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
StateID_TrapAction__15dAcOtrapRock1_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
StateID_TrapReturn__15dAcOtrapRock1_c = .bss:0x00000098; // type:object size:0x30 data:4byte
|
||||
|
||||
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
|
||||
REL/d/a/obj/d_a_obj_tumble_weed.cpp:
|
||||
.text start:0x000000F0 end:0x00002278
|
||||
.ctors start:0x00000000 end:0x00000004
|
||||
.rodata start:0x00000000 end:0x000000AC
|
||||
.data start:0x00000000 end:0x0000024C
|
||||
.bss start:0x00000008 end:0x000000A0
|
||||
|
||||
@@ -4,42 +4,42 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global
|
||||
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
|
||||
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
|
||||
dAcOTumbleWeed_c_classInit__Fv = .text:0x000000F0; // type:function size:0x118
|
||||
fn_475_210 = .text:0x00000210; // type:function size:0x58
|
||||
__dt__15dShadowCircle_cFv = .text:0x00000210; // type:function size:0x58 scope:weak
|
||||
__dt__29sFState_c<16dAcOTumbleWeed_c>Fv = .text:0x00000270; // type:function size:0x58
|
||||
__dt__32sFStateFct_c<16dAcOTumbleWeed_c>Fv = .text:0x000002D0; // type:function size:0x6C
|
||||
__dt__85sStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000340; // type:function size:0xA0
|
||||
__dt__55sFStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003E0; // type:function size:0xA4
|
||||
fn_475_490 = .text:0x00000490; // type:function size:0x80
|
||||
fn_475_510 = .text:0x00000510; // type:function size:0x1D8
|
||||
createHeap__16dAcOTumbleWeed_cFv = .text:0x00000490; // type:function size:0x80
|
||||
actorCreate__16dAcOTumbleWeed_cFv = .text:0x00000510; // type:function size:0x1D8
|
||||
changeState__85sStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000006F0; // type:function size:0x10
|
||||
fn_475_700 = .text:0x00000700; // type:function size:0x8
|
||||
fn_475_710 = .text:0x00000710; // type:function size:0x8
|
||||
fn_475_720 = .text:0x00000720; // type:function size:0x314
|
||||
actorPostCreate__16dAcOTumbleWeed_cFv = .text:0x00000700; // type:function size:0x8
|
||||
doDelete__16dAcOTumbleWeed_cFv = .text:0x00000710; // type:function size:0x8
|
||||
actorExecute__16dAcOTumbleWeed_cFv = .text:0x00000720; // type:function size:0x314
|
||||
executeState__85sStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000A40; // type:function size:0x10
|
||||
fn_475_A50 = .text:0x00000A50; // type:function size:0x1C
|
||||
fn_475_A70 = .text:0x00000A70; // type:function size:0xE4
|
||||
calcTimer<Us>__4sLibFPUs_Us = .text:0x00000A50; // type:function size:0x1C
|
||||
draw__16dAcOTumbleWeed_cFv = .text:0x00000A70; // type:function size:0xE4
|
||||
initializeState_Wait__16dAcOTumbleWeed_cFv = .text:0x00000B60; // type:function size:0xC
|
||||
executeState_Wait__16dAcOTumbleWeed_cFv = .text:0x00000B70; // type:function size:0xD4
|
||||
finalizeState_Wait__16dAcOTumbleWeed_cFv = .text:0x00000C50; // type:function size:0x4
|
||||
initializeState_Slope__16dAcOTumbleWeed_cFv = .text:0x00000C60; // type:function size:0x4
|
||||
executeState_Slope__16dAcOTumbleWeed_cFv = .text:0x00000C70; // type:function size:0xA0
|
||||
finalizeState_Slope__16dAcOTumbleWeed_cFv = .text:0x00000D10; // type:function size:0x4
|
||||
fn_475_D20 = .text:0x00000D20; // type:function size:0x118
|
||||
fn_475_E40 = .text:0x00000E40; // type:function size:0x1C
|
||||
fn_475_E60 = .text:0x00000E60; // type:function size:0x11C
|
||||
fn_475_F80 = .text:0x00000F80; // type:function size:0x6C
|
||||
fn_475_FF0 = .text:0x00000FF0; // type:function size:0x58
|
||||
fn_475_1050 = .text:0x00001050; // type:function size:0x6C
|
||||
fn_475_10C0 = .text:0x000010C0; // type:function size:0x684
|
||||
fn_475_1750 = .text:0x00001750; // type:function size:0x58
|
||||
fn_475_17B0 = .text:0x000017B0; // type:function size:0x1A8
|
||||
fn_475_1960 = .text:0x00001960; // type:function size:0x68
|
||||
fn_475_19D0 = .text:0x000019D0; // type:function size:0xA0
|
||||
fn_475_1A70 = .text:0x00001A70; // type:function size:0x88
|
||||
fn_475_1B00 = .text:0x00001B00; // type:function size:0x4C
|
||||
fn_475_1B50 = .text:0x00001B50; // type:function size:0xD0
|
||||
fn_475_1C20 = .text:0x00001C20; // type:function size:0x1C
|
||||
fn_475_1C40 = .text:0x00001C40; // type:function size:0xAC
|
||||
checkBreak__16dAcOTumbleWeed_cFv = .text:0x00000D20; // type:function size:0x118
|
||||
fn_475_E40__16dAcOTumbleWeed_cCFv = .text:0x00000E40; // type:function size:0x1C
|
||||
checkSlope__16dAcOTumbleWeed_cFv = .text:0x00000E60; // type:function size:0x11C
|
||||
checkCollect__16dAcOTumbleWeed_cFv = .text:0x00000F80; // type:function size:0x6C
|
||||
checkInvalidGround__16dAcOTumbleWeed_cCFv = .text:0x00000FF0; // type:function size:0x58
|
||||
doBreak__16dAcOTumbleWeed_cFv = .text:0x00001050; // type:function size:0x6C
|
||||
calcMatrix__16dAcOTumbleWeed_cFv = .text:0x000010C0; // type:function size:0x684
|
||||
adjustAngle__16dAcOTumbleWeed_cFv = .text:0x00001750; // type:function size:0x58
|
||||
adjustSpeed__16dAcOTumbleWeed_cFv = .text:0x000017B0; // type:function size:0x1A8
|
||||
tumbleBounceMaybe__16dAcOTumbleWeed_cFv = .text:0x00001960; // type:function size:0x68
|
||||
adjustTimeScale__16dAcOTumbleWeed_cFv = .text:0x000019D0; // type:function size:0xA0
|
||||
adjustTumble__16dAcOTumbleWeed_cFRC7mVec3_c = .text:0x00001A70; // type:function size:0x88
|
||||
setWind__16dAcOTumbleWeed_cFRC7mVec3_c = .text:0x00001B00; // type:function size:0x4C
|
||||
calcWind__16dAcOTumbleWeed_cFv = .text:0x00001B50; // type:function size:0xD0
|
||||
calcTimer<Uc>__4sLibFPUc_Uc = .text:0x00001C20; // type:function size:0x1C
|
||||
getPosition__16dAcOTumbleWeed_cCFv = .text:0x00001C40; // type:function size:0xAC
|
||||
__dt__16dAcOTumbleWeed_cFv = .text:0x00001CF0; // type:function size:0x10C
|
||||
getStateID__85sStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001E00; // type:function size:0x10
|
||||
build__32sFStateFct_c<16dAcOTumbleWeed_c>FRC12sStateIDIf_c = .text:0x00001E10; // type:function size:0x60
|
||||
@@ -69,19 +69,21 @@ lbl_475_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float
|
||||
lbl_475_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float
|
||||
lbl_475_rodata_64 = .rodata:0x00000064; // type:object size:0x48 data:float
|
||||
g_profile_OBJ_TUMBLE_WEED = .data:0x00000000; // type:object size:0x10 data:4byte
|
||||
lbl_475_data_10 = .data:0x00000010; // type:object size:0x2C
|
||||
lbl_475_data_3C = .data:0x0000003C; // type:object size:0x10
|
||||
lbl_475_data_4C = .data:0x0000004C; // type:object size:0x24
|
||||
lbl_475_data_70 = .data:0x00000070; // type:object size:0x80
|
||||
lbl_475_data_F0 = .data:0x000000F0; // type:object size:0x30
|
||||
lbl_475_data_120 = .data:0x00000120; // type:object size:0x30
|
||||
lbl_475_data_150 = .data:0x00000150; // type:object size:0x18
|
||||
lbl_475_data_168 = .data:0x00000168; // type:object size:0x18
|
||||
lbl_475_data_180 = .data:0x00000180; // type:object size:0x98
|
||||
lbl_475_data_218 = .data:0x00000218; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_475_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
lbl_475_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
lbl_475_bss_58 = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
lbl_475_bss_88 = .bss:0x00000088; // type:object size:0x8 data:byte
|
||||
lbl_475_bss_90 = .bss:0x00000090; // type:object size:0x10 data:float
|
||||
sSphSrc__16dAcOTumbleWeed_c = .data:0x00000010; // type:object size:0x2C
|
||||
lbl_475_data_3C = .data:0x0000003C; // type:object size:0x10 scope:local
|
||||
lbl_475_data_4C = .data:0x0000004C; // type:object size:0x24 scope:local
|
||||
__vt__16dAcOTumbleWeed_c = .data:0x00000070; // type:object size:0x80
|
||||
__vt__55sFStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c> = .data:0x000000F0; // type:object size:0x30
|
||||
__vt__85sStateMgr_c<16dAcOTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000120; // type:object size:0x30
|
||||
__vt__32sFStateFct_c<16dAcOTumbleWeed_c> = .data:0x00000150; // type:object size:0x14
|
||||
__vt__29sFState_c<16dAcOTumbleWeed_c> = .data:0x00000168; // type:object size:0x18
|
||||
__vt__15dShadowCircle_c = .data:0x00000180; // type:object size:0xC
|
||||
lbl_475_data_18C = .data:0x0000018C; // type:object size:0x8C
|
||||
__vt__31sFStateID_c<16dAcOTumbleWeed_c> = .data:0x00000218; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global data:4byte
|
||||
lbl_475_bss_8 = .bss:0x00000008; // type:object size:0xC data:4byte
|
||||
StateID_Wait__16dAcOTumbleWeed_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
lbl_475_bss_40 = .bss:0x00000048; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Slope__16dAcOTumbleWeed_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
@GUARD@draw__16dAcOTumbleWeed_cFv@shadowRot = .bss:0x00000088; // type:object size:0x1 scope:local data:byte
|
||||
@LOCAL@draw__16dAcOTumbleWeed_cFv@shadowRot = .bss:0x00000090; // type:object size:0x10 scope:local data:float
|
||||
|
||||
@@ -21,7 +21,7 @@ initializeState_Wait__10dTgGekoTagFv = .text:0x00000660; // type:function size:0
|
||||
executeState_Wait__10dTgGekoTagFv = .text:0x00000670; // type:function size:0x4
|
||||
finalizeState_Wait__10dTgGekoTagFv = .text:0x00000680; // type:function size:0x4
|
||||
doExecute__10dTgGekoTagFv = .text:0x00000690; // type:function size:0x1A8
|
||||
calcTimer<Us>__2cMFPUs_Us = .text:0x00000840; // type:function size:0x1C
|
||||
calcTimer<Us>__4sLibFPUs_Us = .text:0x00000840; // type:function size:0x1C
|
||||
__dt__10dTgGekoTagFv = .text:0x00000860; // type:function size:0xE0
|
||||
getStateID__79sStateMgr_c<10dTgGekoTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000940; // type:function size:0x10
|
||||
build__26sFStateFct_c<10dTgGekoTag>FRC12sStateIDIf_c = .text:0x00000950; // type:function size:0x60
|
||||
|
||||
@@ -24,7 +24,7 @@ checkForSlingBellowsItem__13dTgReaction_cFv = .text:0x00000C50; // type:function
|
||||
onDelete__13dTgReaction_cFv = .text:0x00000D60; // type:function size:0x44
|
||||
fn_578_DB0 = .text:0x00000DB0; // type:function size:0xB4
|
||||
spawnHearts__13dTgReaction_cFlRC7mVec3_cl4mAng = .text:0x00000E70; // type:function size:0x184
|
||||
rndRange<4mAng>__F4mAng4mAng_4mAng = .text:0x00001000; // type:function size:0xA4
|
||||
rndRange<4mAng>__2cMF4mAng4mAng_4mAng = .text:0x00001000; // type:function size:0xA4
|
||||
__dt__13dTgReaction_cFv = .text:0x000010B0; // type:function size:0xD8
|
||||
getStateID__82sStateMgr_c<13dTgReaction_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001190; // type:function size:0x10
|
||||
build__29sFStateFct_c<13dTgReaction_c>FRC12sStateIDIf_c = .text:0x000011A0; // type:function size:0x60
|
||||
|
||||
@@ -17,7 +17,7 @@ executeState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,
|
||||
draw__11dTgTouchTagFv = .text:0x00000590; // type:function size:0x8
|
||||
initializeState_Wait__11dTgTouchTagFv = .text:0x000005A0; // type:function size:0xC
|
||||
executeState_Wait__11dTgTouchTagFv = .text:0x000005B0; // type:function size:0x138
|
||||
calcTimer<Us>__2cMFPUs_Us = .text:0x000006F0; // type:function size:0x1C
|
||||
calcTimer<Us>__4sLibFPUs_Us = .text:0x000006F0; // type:function size:0x1C
|
||||
finalizeState_Wait__11dTgTouchTagFv = .text:0x00000710; // type:function size:0x4
|
||||
__dt__11dTgTouchTagFv = .text:0x00000720; // type:function size:0xC8
|
||||
getStateID__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000007F0; // type:function size:0x10
|
||||
|
||||
@@ -14,7 +14,7 @@ changeState__84sStateMgr_c<15dTgTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct
|
||||
doDelete__15dTgTumbleWeed_cFv = .text:0x00000490; // type:function size:0x8
|
||||
actorExecute__15dTgTumbleWeed_cFv = .text:0x000004A0; // type:function size:0x48
|
||||
executeState__84sStateMgr_c<15dTgTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000004F0; // type:function size:0x10
|
||||
decr__FPUs = .text:0x00000500; // type:function size:0x1C
|
||||
calcTimer<Us>__4sLibFPUs_Us = .text:0x00000500; // type:function size:0x1C
|
||||
draw__15dTgTumbleWeed_cFv = .text:0x00000520; // type:function size:0x8
|
||||
initializeState_AreaOut__15dTgTumbleWeed_cFv = .text:0x00000530; // type:function size:0x4
|
||||
executeState_AreaOut__15dTgTumbleWeed_cFv = .text:0x00000540; // type:function size:0xA0
|
||||
|
||||
@@ -192,9 +192,22 @@ d/lyt/d_window.cpp:
|
||||
.data start:0x80510820 end:0x805108B0
|
||||
.sdata2 start:0x805797F0 end:0x805797F8
|
||||
|
||||
d/d_text_writer.cpp:
|
||||
d/d_textunk.cpp:
|
||||
.text start:0x800B1890 end:0x800B20DC
|
||||
.ctors start:0x804DB6D0 end:0x804DB6D4
|
||||
.data start:0x805108C8 end:0x805108D8
|
||||
.sdata start:0x805722D8 end:0x805722E0
|
||||
.sbss start:0x805753B0 end:0x805753B8
|
||||
.sdata2 start:0x805797F8 end:0x80579848
|
||||
.bss start:0x805A6F70 end:0x805A7730
|
||||
|
||||
d/d_tag_processor.cpp:
|
||||
.text start:0x800B35C0 end:0x800B9274
|
||||
.ctors start:0x804DB6D4 end:0x804DB6D8
|
||||
.rodata start:0x804E4C34 end:0x804E4C50
|
||||
.data start:0x805108E8 end:0x805109A0
|
||||
.sdata2 start:0x8057986C end:0x805798D0
|
||||
.bss start:0x805A7730 end:0x805A78B8
|
||||
|
||||
toBeSorted/time_area_mgr.cpp:
|
||||
.text start:0x800B9280 end:0x800BB2A0
|
||||
@@ -207,7 +220,10 @@ d/flag/flag_managers.cpp:
|
||||
|
||||
toBeSorted/special_item_drop_mgr.cpp:
|
||||
.text start:0x800C7B60 end:0x800C82B0
|
||||
.rodata start:0x804E4CC8 end:0x804E4EE0
|
||||
.data start:0x80511C50 end:0x80511C60
|
||||
.sbss start:0x80575438 end:0x80575440
|
||||
.sdata2 start:0x805799B8 end:0x80579AD0
|
||||
|
||||
d/lyt/meter/d_lyt_meter.cpp:
|
||||
.text start:0x800C8950 end:0x800DF8A8
|
||||
@@ -244,7 +260,9 @@ d/lyt/meter/d_lyt_meter_key.cpp:
|
||||
d/lyt/meter/d_lyt_meter_drink.cpp:
|
||||
.text start:0x800E4930 end:0x800E6AC8
|
||||
.ctors start:0x804DB6F0 end:0x804DB6F4
|
||||
.rodata start:0x804E55A0 end:0x804E5640
|
||||
.data start:0x805148B0 end:0x80514D60
|
||||
.sdata2 start:0x80579BA0 end:0x80579BB0
|
||||
.bss start:0x805AA790 end:0x805AA9D0
|
||||
|
||||
d/lyt/meter/d_lyt_meter_remocon_bg.cpp:
|
||||
@@ -342,8 +360,11 @@ d/lyt/d_lyt_msg_window_select_btn.cpp:
|
||||
.text start:0x8011C8D0 end:0x80120988
|
||||
.ctors start:0x804DB73C end:0x804DB740
|
||||
|
||||
d/lyt/d_lyt_msg_window_base.cpp:
|
||||
.text start:0x80120A20 end:0x80120A98
|
||||
|
||||
d/lyt/d_lyt_msg_window_talk.cpp:
|
||||
.text start:0x80120A20 end:0x801223C8
|
||||
.text start:0x80120AA0 end:0x801223C8
|
||||
.ctors start:0x804DB740 end:0x804DB744
|
||||
|
||||
d/lyt/d_lyt_msg_window_link.cpp:
|
||||
@@ -1000,6 +1021,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
|
||||
@@ -1117,10 +1139,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
|
||||
|
||||
|
||||
+544
-531
File diff suppressed because it is too large
Load Diff
+9
-7
@@ -365,6 +365,8 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/d2d.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_textbox.cpp"),
|
||||
Object(Matching, "d/lyt/d_window.cpp"),
|
||||
Object(Matching, "d/d_textunk.cpp"),
|
||||
Object(NonMatching, "d/d_tag_processor.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_unk.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_a_btn.cpp"),
|
||||
@@ -439,11 +441,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"),
|
||||
@@ -466,7 +468,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"),
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1667,7 +1671,7 @@ config.libs = [
|
||||
Rel(
|
||||
NonMatching, "d_a_obj_trap_bird_wood", "REL/d/a/obj/d_a_obj_trap_bird_wood.cpp"
|
||||
),
|
||||
Rel(NonMatching, "d_a_obj_trap_rock_1", "REL/d/a/obj/d_a_obj_trap_rock_1.cpp"),
|
||||
Rel(Matching, "d_a_obj_trap_rock_1", "REL/d/a/obj/d_a_obj_trap_rock_1.cpp"),
|
||||
Rel(
|
||||
NonMatching,
|
||||
"d_a_obj_treasure_island",
|
||||
@@ -1703,9 +1707,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,
|
||||
|
||||
+10
-5
@@ -12,11 +12,16 @@ f32 rndF(f32 max);
|
||||
f32 rndFX(f32 amp);
|
||||
|
||||
template <typename T>
|
||||
T calcTimer(T *value) {
|
||||
if (*(T *)value != 0) {
|
||||
*value = *value - 1;
|
||||
}
|
||||
return *value;
|
||||
T rndRange(T min, T max) {
|
||||
f32 r = cM::rndF(max - min);
|
||||
f32 m = min;
|
||||
m += r;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T minMaxLimit(T val, T min, T max) {
|
||||
return (T)((T)val < (T)min ? (T)min : ((T)val > (T)max ? (T)max : (T)val));
|
||||
}
|
||||
|
||||
} // namespace cM
|
||||
|
||||
+24
-2
@@ -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
|
||||
|
||||
@@ -99,7 +99,7 @@ public:
|
||||
/* vt 0x144 */ virtual void setActorLinkToSomething();
|
||||
/* vt 0x148 */ virtual void applyDamageWithIFrames();
|
||||
/* vt 0x14C */ virtual void vt_0x14C();
|
||||
/* vt 0x150 */ virtual void hasLessThanQuarterHealth();
|
||||
/* vt 0x150 */ virtual bool hasLessThanQuarterHealth(bool);
|
||||
/* vt 0x154 */ virtual void vt_0x154();
|
||||
/* vt 0x158 */ virtual void vt_0x158();
|
||||
/* vt 0x15C */ virtual void vt_0x15C();
|
||||
@@ -179,7 +179,7 @@ public:
|
||||
/* vt 0x284 */ virtual bool isUsingBugnet() const;
|
||||
/* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const;
|
||||
/* vt 0x28C */ virtual bool isUsingBugnet1();
|
||||
/* vt 0x290 */ virtual void bugNetCollectTreasure();
|
||||
/* vt 0x290 */ virtual void bugNetCollectTreasure(u32 itemId);
|
||||
/* vt 0x294 */ virtual void somethingSwitchDials();
|
||||
/* vt 0x298 */ virtual void vt_0x298();
|
||||
/* vt 0x29C */ virtual void getDieLargeDamageDir();
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -2,8 +2,9 @@
|
||||
#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 "egg/math/eggMath.h"
|
||||
#include "m/m3d/m_shadow.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_angle.h"
|
||||
@@ -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;
|
||||
@@ -88,6 +89,14 @@ public:
|
||||
return angle;
|
||||
}
|
||||
|
||||
f32 getVelocityMag() const {
|
||||
return fabsf(nw4r::math::VEC3LenSq(velocity));
|
||||
}
|
||||
|
||||
bool isStopped() const {
|
||||
return getVelocityMag() <= EGG::Math<f32>::epsilon();
|
||||
}
|
||||
|
||||
// could be their own thing?
|
||||
/* 8002de40 */ static void *getOarcFile(const char *oarcName, const char *fileName);
|
||||
/* 8002de60 */ static void *getOarcSubEntry(const char *oarcName, const char *fileName);
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -12,6 +12,8 @@ public:
|
||||
|
||||
static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg);
|
||||
static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot);
|
||||
|
||||
static u32 checkFlag(u32 flag);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#define D_A_OBJ_TRAP_ROCK_1_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
@@ -10,12 +13,28 @@ public:
|
||||
dAcOtrapRock1_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcOtrapRock1_c() {}
|
||||
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOtrapRock1_c, TrapWait);
|
||||
STATE_FUNC_DECLARE(dAcOtrapRock1_c, TrapAction);
|
||||
STATE_FUNC_DECLARE(dAcOtrapRock1_c, TrapReturn);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOtrapRock1_c);
|
||||
/* 0x300 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dBgW mBgW;
|
||||
/* 0x560 */ STATE_MGR_DECLARE(dAcOtrapRock1_c);
|
||||
/* 0x59C */ u8 mActivationSceneFlag;
|
||||
/* 0x59D */ u8 mReturnSceneFlag;
|
||||
/* 0x59E */ s16 field_0x59E;
|
||||
/* 0x5A0 */ s16 field_0x5A0;
|
||||
/* 0x5A2 */ s16 field_0x5A2;
|
||||
/* 0x5A4 */ u8 mFrameCounter;
|
||||
/* 0x5A5 */ s8 field_0x5A5;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1,20 +1,90 @@
|
||||
#ifndef D_A_OBJ_TUMBLE_WEED_H
|
||||
#define D_A_OBJ_TUMBLE_WEED_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/cc/d_cc_d.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/dowsing_target.h"
|
||||
#include "toBeSorted/time_area_mgr.h"
|
||||
|
||||
class dAcOTumbleWeed_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOTumbleWeed_c() : mStateMgr(*this, sStateID::null) {}
|
||||
dAcOTumbleWeed_c() : mDowsingTarget(this, DowsingTarget::SLOT_NONE), mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcOTumbleWeed_c() {}
|
||||
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorCreate() override;
|
||||
virtual int actorPostCreate() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
bool checkCollect();
|
||||
bool checkBreak();
|
||||
void doBreak();
|
||||
|
||||
void adjustTimeScale();
|
||||
void adjustTumble(const mVec3_c &dir);
|
||||
void calcWind();
|
||||
mVec3_c getPosition() const;
|
||||
void calcMatrix();
|
||||
|
||||
void adjustAngle();
|
||||
void adjustSpeed();
|
||||
void tumbleBounceMaybe();
|
||||
|
||||
void setWind(const mVec3_c &);
|
||||
|
||||
bool checkSlope();
|
||||
|
||||
bool fn_475_E40() const;
|
||||
bool checkInvalidGround() const;
|
||||
|
||||
// Look at `isStopped` in dAcObjBase. This may be a diff inline
|
||||
f32 getWindMag() const {
|
||||
return fabsf(nw4r::math::VEC3LenSq(mWind));
|
||||
}
|
||||
bool isWindStop() const {
|
||||
return getWindMag() <= EGG::Math<f32>::epsilon();
|
||||
}
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOTumbleWeed_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOTumbleWeed_c, Slope);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOTumbleWeed_c);
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dShadowCircle_c mShdw;
|
||||
/* 0x358 */ dCcD_Sph mSph;
|
||||
/* 0x4A8 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x504 */ dBgS_ObjAcch mObjAcch;
|
||||
/* 0x8B4 */ DowsingTarget mDowsingTarget;
|
||||
/* 0x8D4 */ STATE_MGR_DECLARE(dAcOTumbleWeed_c);
|
||||
/* 0x910 */ mQuat_c mField_0x910;
|
||||
/* 0x920 */ TimeAreaStruct mTimeArea;
|
||||
/* 0x92C */ mMtx_c mShadowMtx;
|
||||
/* 0x95C */ mVec3_c mWind;
|
||||
/* 0x968 */ mVec3_c mField_0x968;
|
||||
/* 0x974 */ f32 mField_0x974;
|
||||
/* 0x978 */ f32 mField_0x978;
|
||||
/* 0x97C */ f32 mField_0x97C;
|
||||
/* 0x980 */ f32 mField_0x980;
|
||||
/* 0x984 */ f32 mSpeedTarget;
|
||||
/* 0x988 */ u16 mTumbleTimer;
|
||||
/* 0x98A */ u8 mWindTimer;
|
||||
/* 0x98B */ u8 mField_0x98B;
|
||||
/* 0x98C */ u8 mField_0x98C;
|
||||
/* 0x98D */ bool mbOnGround;
|
||||
|
||||
static dCcD_SrcSph sSphSrc;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -27,6 +27,18 @@ enum dBgPc_ECode {
|
||||
/* 0x80000000 */ CODE_UNUSED_8000_0000 = 0x80000000,
|
||||
};
|
||||
|
||||
enum dBgPc_Attribute {
|
||||
POLY_ATTR_NORMAL = 0,
|
||||
POLY_ATTR_SLOPE = 1,
|
||||
POLY_ATTR_LAVA = 7,
|
||||
POLY_ATTR_SAND_SHALLOW = 9,
|
||||
POLY_ATTR_SAND_MED = 10,
|
||||
POLY_ATTR_SAND_DEEP_INSTANT = 11,
|
||||
POLY_ATTR_WATER = 12,
|
||||
POLY_ATTR_DAMAGE = 13,
|
||||
POLY_ATTR_SLOPE_RUN = 15,
|
||||
POLY_ATTR_SAND_DEEP_SLOW = 16,
|
||||
};
|
||||
class dBgPc {
|
||||
public:
|
||||
void setCode(sBgPc &);
|
||||
|
||||
@@ -488,6 +488,10 @@ public:
|
||||
return mFlags & GROUND_HIT;
|
||||
}
|
||||
|
||||
dBgS_GndChk &GetGnd() {
|
||||
return mGnd;
|
||||
}
|
||||
|
||||
public:
|
||||
/* 0x040 */ u32 mFlags;
|
||||
/* 0x044 */ mVec3_c *mpPos;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1,4 +1,950 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
const mVec3_c &GetCcMove() const {
|
||||
return mCcMove;
|
||||
}
|
||||
};
|
||||
|
||||
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_AtType_e {
|
||||
/* 0x 0000 0001 */ AT_TYPE_0x1 = (1 << 0),
|
||||
/* 0x 0000 0002 */ AT_TYPE_0x2 = (1 << 1),
|
||||
/* 0x 0000 0004 */ AT_TYPE_0x4 = (1 << 2),
|
||||
/* 0x 0000 0008 */ AT_TYPE_0x8 = (1 << 3),
|
||||
/* 0x 0000 0010 */ AT_TYPE_0x10 = (1 << 4),
|
||||
/* 0x 0000 0020 */ AT_TYPE_0x20 = (1 << 5),
|
||||
/* 0x 0000 0040 */ AT_TYPE_0x40 = (1 << 6),
|
||||
/* 0x 0000 0080 */ AT_TYPE_0x80 = (1 << 7),
|
||||
/* 0x 0000 0100 */ AT_TYPE_0x100 = (1 << 8),
|
||||
/* 0x 0000 0200 */ AT_TYPE_0x200 = (1 << 9),
|
||||
/* 0x 0000 0400 */ AT_TYPE_0x400 = (1 << 10),
|
||||
/* 0x 0000 0800 */ AT_TYPE_0x800 = (1 << 11),
|
||||
/* 0x 0000 1000 */ AT_TYPE_0x1000 = (1 << 12),
|
||||
/* 0x 0000 2000 */ AT_TYPE_0x2000 = (1 << 13),
|
||||
/* 0x 0000 4000 */ AT_TYPE_0x4000 = (1 << 14),
|
||||
/* 0x 0000 8000 */ AT_TYPE_0x8000 = (1 << 15),
|
||||
/* 0x 0001 0000 */ AT_TYPE_0x10000 = (1 << 16),
|
||||
/* 0x 0002 0000 */ AT_TYPE_0x20000 = (1 << 17),
|
||||
/* 0x 0004 0000 */ AT_TYPE_0x40000 = (1 << 18),
|
||||
/* 0x 0008 0000 */ AT_TYPE_0x80000 = (1 << 19),
|
||||
/* 0x 0010 0000 */ AT_TYPE_0x100000 = (1 << 20),
|
||||
/* 0x 0020 0000 */ AT_TYPE_0x200000 = (1 << 21),
|
||||
/* 0x 0040 0000 */ AT_TYPE_0x400000 = (1 << 22),
|
||||
/* 0x 0080 0000 */ AT_TYPE_0x800000 = (1 << 23),
|
||||
/* 0x 0100 0000 */ AT_TYPE_BUGNET = (1 << 24),
|
||||
/* 0x 0200 0000 */ AT_TYPE_0x2000000 = (1 << 25),
|
||||
/* 0x 0400 0000 */ AT_TYPE_0x4000000 = (1 << 26),
|
||||
/* 0x 0800 0000 */ AT_TYPE_0x8000000 = (1 << 27),
|
||||
};
|
||||
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.MskRPrm(1) != 0 && mTg.GetActor() != nullptr;
|
||||
}
|
||||
bool ChkAtHit() {
|
||||
return mAt.MskRPrm(1) != 0 && mAt.GetActor() != nullptr;
|
||||
}
|
||||
bool ChkCoHit() {
|
||||
return mCo.MskRPrm(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
|
||||
|
||||
+60
-46
@@ -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 */
|
||||
|
||||
+48
-42
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
s32 GetAngleY() const {
|
||||
return mAng(cM::atan2s(mNormal.x, mNormal.z));
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -16,18 +16,25 @@ public:
|
||||
void SetR(f32);
|
||||
void SetC(f32, f32, f32);
|
||||
|
||||
void SetC(const mVec3_c &p) {
|
||||
SetC(&p);
|
||||
}
|
||||
|
||||
f32 GetYDist(f32) const;
|
||||
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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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 &);
|
||||
|
||||
+59
-487
@@ -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
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
@@ -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
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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
|
||||
@@ -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() {}
|
||||
};
|
||||
@@ -0,0 +1,148 @@
|
||||
#ifndef D_TAG_PROCESSOR_H
|
||||
#define D_TAG_PROCESSOR_H
|
||||
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "nw4r/ut/ut_TagProcessorBase.h"
|
||||
#include "nw4r/ut/ut_TextWriterBase.h"
|
||||
|
||||
// inofficial name
|
||||
// size: 0xEF4
|
||||
class dTagProcessor_c : public nw4r::ut::TagProcessorBase<wchar_t> {
|
||||
public:
|
||||
dTagProcessor_c();
|
||||
virtual ~dTagProcessor_c();
|
||||
|
||||
void
|
||||
eventFlowTextProcessingRelated(dTextBox_c *textBox, const wchar_t *src, wchar_t *dest, u32 destLen, u32 *pOutLen);
|
||||
|
||||
virtual nw4r::ut::Operation Process(u16 ch, nw4r::ut::PrintContext<wchar_t> *ctx) override;
|
||||
virtual nw4r::ut::Operation CalcRect(nw4r::ut::Rect *rect, u16 ch, nw4r::ut::PrintContext<wchar_t> *ctx) override;
|
||||
|
||||
nw4r::ut::Operation ProcessTags(nw4r::ut::Rect *rect, u16 ch, nw4r::ut::PrintContext<wchar_t> *ctx);
|
||||
|
||||
void changeScale(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, bool);
|
||||
wchar_t *writeItem(wchar_t *dest, wchar_t *src, s32 *, s32);
|
||||
wchar_t *writeStringArg(wchar_t *dest, wchar_t *src, s32 *, s32);
|
||||
wchar_t *writeNumericArg(wchar_t *dest, wchar_t *src, s32 *, s32);
|
||||
void fn_800B4FF0(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B6450(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, u8 cmdLen, wchar_t *ptr);
|
||||
void makeSpaceForIconMaybe(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, wchar_t *ptr);
|
||||
void fn_800B61D0(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, u8 cmdLen, wchar_t *ptr);
|
||||
void setFramesLeftOnPause(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B5500(u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B5540(wchar_t *ptr);
|
||||
void fn_800B60E0(u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B6110(u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B6140(u8 cmdLen, wchar_t *ptr);
|
||||
void playSound(u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B6170(u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B6190(u8 cmdLen, wchar_t *ptr);
|
||||
void fn_800B61B0(u8 cmdLen, wchar_t *ptr);
|
||||
void setColor(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, u8 cmdLen, wchar_t *ptr);
|
||||
void restoreColor(nw4r::ut::PrintContext<wchar_t> *ctx, u8 windowType);
|
||||
void setScale(nw4r::ut::Rect *rect, nw4r::ut::PrintContext<wchar_t> *ctx, u8 cmdLen, wchar_t *ptr);
|
||||
|
||||
u8 symbolToFontIdx(s32 s);
|
||||
void setStringArg(const wchar_t *arg, s32 index);
|
||||
|
||||
static s32 getNumLines(s32 arg);
|
||||
|
||||
static void getTextCommand(wchar_t _0xe, const wchar_t *src, u8 *outCmdLen, s32 *outCmd, wchar_t **outEndPtr);
|
||||
static void process0xFCommand(wchar_t _0xf, const wchar_t *src, s32 *outCmd);
|
||||
|
||||
static f32 fn_800B8040(s8, u32);
|
||||
wchar_t *fn_800B5FD0(u32, wchar_t *, s32 *);
|
||||
wchar_t *writeTextNormal(const wchar_t *src, wchar_t *dest, s32 *, u8 cmdLen, s32);
|
||||
wchar_t *writeHeroname(wchar_t *dest, s32 *, s32);
|
||||
wchar_t *fn_800B5DD0(wchar_t *dest, wchar_t *src, s32 *, s32);
|
||||
void fn_800B5520(wchar_t *src);
|
||||
void writeIcon(dTextBox_c *textBox, wchar_t *cmd, f32);
|
||||
char fn_800B7880(u32);
|
||||
void fn_800B70D0(nw4r::ut::TextWriterBase<wchar_t> *, nw4r::ut::PrintContext<wchar_t> *ctx, u16 c, s32);
|
||||
|
||||
void resetSomething();
|
||||
void resetSomeFloats();
|
||||
void setNumericArg0(s32 arg);
|
||||
void setNumericArgs(const s32 *args, s32 numArgs);
|
||||
f32 getFloat(s32 i);
|
||||
s32 tickPauseFrame();
|
||||
s32 tick0x830();
|
||||
|
||||
private:
|
||||
/* 0x004 */ dTextBox_c *field_0x004;
|
||||
/* 0x008 */ wchar_t field_0x008[4][256];
|
||||
/* 0x808 */ wchar_t field_0x808[4];
|
||||
/* 0x810 */ f32 field_0x810;
|
||||
/* 0x814 */ f32 field_0x814;
|
||||
/* 0x818 */ f32 field_0x818;
|
||||
/* 0x81C */ s32 field_0x81C;
|
||||
/* 0x820 */ s32 field_0x820;
|
||||
/* 0x824 */ s32 field_0x824;
|
||||
/* 0x828 */ s32 field_0x828;
|
||||
/* 0x82C */ s32 field_0x82C;
|
||||
/* 0x830 */ s32 field_0x830;
|
||||
/* 0x834 */ s32 mPauseFramesLeft;
|
||||
/* 0x838 */ s32 field_0x838;
|
||||
/* 0x83C */ s32 field_0x83C;
|
||||
/* 0x840 */ s32 field_0x840;
|
||||
/* 0x844 */ s32 field_0x844;
|
||||
/* 0x848 */ s32 field_0x848;
|
||||
/* 0x84C */ s32 field_0x84C;
|
||||
/* 0x850 */ s32 field_0x850;
|
||||
/* 0x854 */ s32 field_0x854;
|
||||
/* 0x858 */ s32 field_0x858;
|
||||
/* 0x85C */ s32 field_0x85C;
|
||||
/* 0x860 */ s32 field_0x860;
|
||||
/* 0x864 */ s32 field_0x864;
|
||||
/* 0x868 */ s32 field_0x868;
|
||||
/* 0x86C */ s32 field_0x86C;
|
||||
/* 0x870 */ s32 field_0x870;
|
||||
/* 0x874 */ s32 field_0x874;
|
||||
/* 0x878 */ s32 field_0x878;
|
||||
/* 0x87C */ s32 field_0x87C;
|
||||
/* 0x880 */ s32 field_0x880;
|
||||
/* 0x884 */ s32 field_0x884;
|
||||
/* 0x888 */ s32 field_0x888;
|
||||
/* 0x88C */ s32 field_0x88C;
|
||||
/* 0x890 */ s32 field_0x890;
|
||||
/* 0x894 */ s32 field_0x894;
|
||||
/* 0x898 */ s32 field_0x898;
|
||||
/* 0x89C */ s32 mNumericArgs[10];
|
||||
/* 0x8C4 */ s32 mNumericArgsCopy[10];
|
||||
/* 0x8EC */ s32 field_0x8EC;
|
||||
/* 0x8EC */ s32 field_0x8F0;
|
||||
/* 0x8F4 */ s32 field_0x8F4;
|
||||
/* 0x8F8 */ s32 field_0x8F8;
|
||||
/* 0x8FC */ s32 field_0x8FC;
|
||||
/* 0x900 */ s32 field_0x900;
|
||||
/* 0x904 */ f32 field_0x904;
|
||||
/* 0x908 */ f32 field_0x908;
|
||||
/* 0x90C */ u8 field_0x90C;
|
||||
/* 0x90D */ u8 field_0x90D;
|
||||
/* 0x90E */ u8 field_0x90E;
|
||||
/* 0x90F */ u8 field_0x90F[4];
|
||||
/* 0x914 */ f32 field_0x914[0x32];
|
||||
/* 0x9DC */ s32 mCommandInsert;
|
||||
/* 0x9E0 */ wchar_t mStringArgs[8][64];
|
||||
/* 0xDE0 */ u8 field_0xDE0[0xEE0 - 0xDE0];
|
||||
/* 0xEE0 */ u8 field_0xEE0;
|
||||
/* 0xEE1 */ u8 field_0xEE1;
|
||||
/* 0xEE2 */ u8 field_0xEE2;
|
||||
/* 0xEE3 */ u8 field_0xEE3;
|
||||
/* 0xEE4 */ u8 field_0xEE4;
|
||||
/* 0xEE5 */ u8 field_0xEE5;
|
||||
/* 0xEE6 */ u8 field_0xEE6;
|
||||
/* 0xEE7 */ u8 field_0xEE7;
|
||||
/* 0xEE8 */ u8 field_0xEE8;
|
||||
/* 0xEE9 */ u8 field_0xEE9;
|
||||
/* 0xEEA */ u8 field_0xEEA;
|
||||
/* 0xEEB */ u8 field_0xEEB;
|
||||
/* 0xEEC */ u8 field_0xEEC;
|
||||
/* 0xEED */ u8 field_0xEED;
|
||||
/* 0xEEE */ u8 field_0xEEE;
|
||||
/* 0xEEF */ u8 field_0xEEF;
|
||||
/* 0xEF0 */ u8 field_0xEF0;
|
||||
/* 0xEF1 */ u8 field_0xEF1;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,118 @@
|
||||
#ifndef D_TEXTUNK_H
|
||||
#define D_TEXTUNK_H
|
||||
|
||||
#include "common.h"
|
||||
#include "libms/flowfile.h"
|
||||
#include "libms/msgfile.h"
|
||||
#include "nw4r/ut/ut_Color.h"
|
||||
#include "sized_string.h"
|
||||
|
||||
class UnkTextThing {
|
||||
public:
|
||||
UnkTextThing();
|
||||
virtual ~UnkTextThing() {}
|
||||
|
||||
void destroy();
|
||||
|
||||
inline static f32 getField0x758() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x758;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
inline static f32 getField0x768() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x768;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
inline static f32 getField0x76C() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x76C;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
inline static f32 getFn800B1F70() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->fn_800B1F70();
|
||||
}
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
inline static f32 getFn800B1F10() {
|
||||
return sInstance->fn_800B1F10();
|
||||
}
|
||||
|
||||
private:
|
||||
static UnkTextThing *sInstance;
|
||||
|
||||
void *allocUnk(size_t size, int align);
|
||||
void destroyUnk(void *thing);
|
||||
void destroyFlow(MsbfInfo *flow);
|
||||
void destroyMsg(MsbtInfo *msg);
|
||||
|
||||
f32 fn_800B1F10();
|
||||
f32 fn_800B1F70();
|
||||
f32 fn_800B1FC0();
|
||||
f32 fn_800B1FD0();
|
||||
f32 fn_800B1FE0();
|
||||
f32 fn_800B1FF0();
|
||||
f32 fn_800B2000();
|
||||
f32 fn_800B2010();
|
||||
f32 fn_800B2020();
|
||||
f32 fn_800B2030();
|
||||
f32 fn_800B2040();
|
||||
|
||||
/* 0x004 */ SizedString<0x80> field_0x004;
|
||||
/* 0x084 */ SizedString<0x80> field_0x084;
|
||||
/* 0x104 */ SizedString<0x80> field_0x104;
|
||||
/* 0x184 */ void *field_buf0[82];
|
||||
/* 0x2CC */ void *field_buf4[23];
|
||||
/* 0x328 */ void *field_buf1[80];
|
||||
/* 0x468 */ MsbtInfo *field_buf2[82];
|
||||
/* 0x5B0 */ MsbtInfo *field_buf5[23];
|
||||
/* 0x60C */ MsbfInfo *field_buf3[80];
|
||||
/* 0x74C */ void *field_0x74C;
|
||||
/* 0x750 */ void *field_0x750;
|
||||
/* 0x754 */ f32 field_0x754;
|
||||
/* 0x758 */ f32 field_0x758;
|
||||
/* 0x75C */ f32 field_0x75C;
|
||||
/* 0x760 */ f32 field_0x760;
|
||||
/* 0x764 */ f32 field_0x764;
|
||||
/* 0x768 */ f32 field_0x768;
|
||||
/* 0x76C */ f32 field_0x76C;
|
||||
/* 0x770 */ f32 field_0x770;
|
||||
/* 0x774 */ f32 field_0x774;
|
||||
/* 0x778 */ f32 field_0x778;
|
||||
/* 0x77C */ f32 field_0x77C;
|
||||
/* 0x780 */ f32 field_0x780;
|
||||
/* 0x784 */ f32 field_0x784;
|
||||
/* 0x788 */ f32 field_0x788;
|
||||
/* 0x78C */ f32 field_0x78C;
|
||||
/* 0x790 */ f32 field_0x790;
|
||||
/* 0x794 */ s16 field_0x794;
|
||||
/* 0x796 */ s16 field_0x796;
|
||||
/* 0x798 */ UNKWORD field_0x798;
|
||||
/* 0x79C */ UNKWORD field_0x79C;
|
||||
/* 0x7A0 */ UNKWORD field_0x7A0;
|
||||
/* 0x7A4 */ s16 field_0x7A4;
|
||||
/* 0x7A6 */ s16 field_0x7A6;
|
||||
/* 0x7A8 */ s16 field_0x7A8;
|
||||
/* 0x7AA */ s16 field_0x7AA;
|
||||
/* 0x7AC */ s16 field_0x7AC;
|
||||
/* 0x7AE */ s16 field_0x7AE;
|
||||
/* 0x7B0 */ s16 field_0x7B0;
|
||||
/* 0x7B2 */ bool field_0x7B2;
|
||||
/* 0x7B3 */ bool field_0x7B3;
|
||||
/* 0x7B4 */ bool field_0x7B4;
|
||||
/* 0x7B5 */ bool field_0x7B5;
|
||||
/* 0x7B6 */ bool field_0x7B6;
|
||||
/* 0x7B6 */ bool field_0x7B7;
|
||||
/* 0x7B8 */ nw4r::ut::Color field_0x7B8;
|
||||
/* 0x7BC */ nw4r::ut::Color field_0x7BC;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -262,6 +262,10 @@ struct AnmGroupBase_c {
|
||||
syncAnmFrame();
|
||||
}
|
||||
|
||||
inline f32 getNextFrame() const {
|
||||
return mpFrameCtrl->getNextFrame();
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x04 */ void *field_0x04;
|
||||
/* 0x08 */ m2d::FrameCtrl_c *mpFrameCtrl;
|
||||
|
||||
@@ -10,7 +10,9 @@ public:
|
||||
dLytDobutton_c() : mStateMgr(*this, sStateID::null) {
|
||||
sInstance = this;
|
||||
}
|
||||
virtual ~dLytDobutton_c() {}
|
||||
virtual ~dLytDobutton_c() {
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
bool init(m2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
|
||||
@@ -27,6 +27,14 @@ public:
|
||||
nw4r::lyt::TextBox::SetScale(value);
|
||||
}
|
||||
|
||||
void set0x1F8(u8 val) {
|
||||
field_0x1F8 = val;
|
||||
}
|
||||
|
||||
f32 getMyScale() const {
|
||||
return mScale;
|
||||
}
|
||||
|
||||
static inline f32 GetTranslateX1() {
|
||||
if (lbl_805753B0 != nullptr) {
|
||||
return GetTranslateX1_();
|
||||
@@ -46,11 +54,13 @@ public:
|
||||
private:
|
||||
void MySetScale(const nw4r::math::VEC2 &value);
|
||||
|
||||
d2d::LytBase_c *mpLytBase;
|
||||
u8 field_0x108[0x118 - 0x108];
|
||||
/* 0x104 */ d2d::LytBase_c *mpLytBase;
|
||||
/* 0x108 */ u8 field_0x108[0x118 - 0x108];
|
||||
/* 0x118 */ nw4r::math::VEC2 mTextScale;
|
||||
/* 0x120 */ f32 mScale;
|
||||
u8 field_0x124[0x204 - 0x124];
|
||||
/* 0x124 */ u8 field_0x124[0x1F8 - 0x124];
|
||||
/* 0x1F8 */ u8 field_0x1F8;
|
||||
/* 0x1F9 */ u8 field_0x1F9[0x204 - 0x1F9];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,15 +1,45 @@
|
||||
#ifndef D_LYT_METER_DRINK_H
|
||||
#define D_LYT_METER_DRINK_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
// Size 0x54
|
||||
class dLytMeterDrinkParts_c {
|
||||
friend class dLytMeterDrink_c;
|
||||
|
||||
enum DrinkType_e {
|
||||
TYPE_STAMINA,
|
||||
TYPE_AIR,
|
||||
TYPE_GUARDIAN,
|
||||
TYPE_NONE,
|
||||
};
|
||||
|
||||
enum DrinkFrame_e {
|
||||
FRAME_STAMINA,
|
||||
FRAME_STAMINA_PLUS,
|
||||
FRAME_AIR,
|
||||
FRAME_AIR_PLUS,
|
||||
FRAME_GUARDIAN,
|
||||
FRAME_GUARDIAN_PLUS,
|
||||
FRAME_NONE
|
||||
};
|
||||
|
||||
public:
|
||||
dLytMeterDrinkParts_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterDrinkParts_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
bool isDrinkAboutToExpire() const;
|
||||
DrinkFrame_e getDrinkFrame(DrinkType_e ty) const;
|
||||
void copy(dLytMeterDrinkParts_c *other, dLytMeterDrinkParts_c *third);
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, In);
|
||||
@@ -17,7 +47,11 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, Out);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterDrinkParts_c);
|
||||
/* 0x03C */ u8 field_0x03C[0x18];
|
||||
/* 0x03C */ d2d::AnmGroup_c *mAnmGroups[3];
|
||||
/* 0x048 */ s32 field_0x48;
|
||||
/* 0x04C */ DrinkType_e mDrinkType;
|
||||
/* 0x050 */ u8 field_0x50;
|
||||
/* 0x051 */ u8 field_0x51;
|
||||
};
|
||||
|
||||
class dLytMeterDrink_c {
|
||||
@@ -25,14 +59,23 @@ public:
|
||||
dLytMeterDrink_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterDrink_c() {}
|
||||
|
||||
virtual void BossKey0x8() {}
|
||||
virtual void BossKey0xC() {}
|
||||
virtual d2d::dLytSub *getLyt() {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
bool build(d2d::ResAccIf_c *);
|
||||
bool remove();
|
||||
bool draw();
|
||||
bool execute();
|
||||
|
||||
private:
|
||||
bool fn_800E5C40(int);
|
||||
int getPartForDrinkType(dLytMeterDrinkParts_c::DrinkType_e ty) const;
|
||||
void executeInternal();
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterDrink_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterDrink_c, In);
|
||||
STATE_FUNC_DECLARE(dLytMeterDrink_c, Wait);
|
||||
@@ -42,8 +85,14 @@ private:
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterDrink_c);
|
||||
/* 0x040 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[20];
|
||||
/* 0x5D4 */ u8 field_0x5D4[0x5E4 - 0x5D4];
|
||||
/* 0x5D4 */ nw4r::lyt::Pane *mpPartPanes[3];
|
||||
/* 0x5E0 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x5E4 */ dLytMeterDrinkParts_c mParts[3];
|
||||
/* 0x6E0 */ mVec3_c field_0x6E0;
|
||||
/* 0x6EC */ UNKWORD field_0x6EC;
|
||||
/* 0x6F0 */ s32 field_0x6F0;
|
||||
/* 0x6F4 */ u8 field_0x6F4;
|
||||
/* 0x6F5 */ u8 field_0x6F5[3];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
#ifndef D_T_TUMBLE_WEED_H
|
||||
#define D_T_TUMBLE_WEED_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_tumble_weed.h"
|
||||
#include "d/t/d_tg.h"
|
||||
#include "f/f_list_nd.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dTgTumbleWeed_c : public dTg_c {
|
||||
public:
|
||||
@@ -29,8 +28,7 @@ private:
|
||||
u16 tumbleweedTimer;
|
||||
u16 padding;
|
||||
u16 windTimer;
|
||||
// TODO dAcObjTumbleWeed
|
||||
dAcRef_c<dAcBase_c> childTumbleweed;
|
||||
dAcRef_c<dAcOTumbleWeed_c> childTumbleweed;
|
||||
u16 someField;
|
||||
};
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define EGG_MATH_H
|
||||
|
||||
#include "common.h"
|
||||
#include "math.h"
|
||||
|
||||
namespace EGG {
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "egg/math/eggQuat.h"
|
||||
#include "egg/math/eggVector.h"
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
struct Matrix34f {
|
||||
|
||||
+21
-30
@@ -4,31 +4,32 @@
|
||||
#include "common.h"
|
||||
#include "egg/math/eggVector.h"
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
struct Quatf : public Vector3f {
|
||||
struct Quatf {
|
||||
Quatf() {}
|
||||
Quatf(f32 f, Vector3f v) : w(f), Vector3f(v) {}
|
||||
Quatf(f32 f, f32 x, f32 y, f32 z) : w(f), Vector3f(Vector3f(x, y, z)) {}
|
||||
Quatf(f32 f, const Vector3f &v) : w(f), v(v) {}
|
||||
Quatf(f32 f, f32 x, f32 y, f32 z) : w(f), v(Vector3f(x, y, z)) {}
|
||||
~Quatf() {}
|
||||
|
||||
friend Quatf operator*(const Quatf &q, const Vector3f &vec) {
|
||||
Vector3f crossed = q.cross(vec);
|
||||
Vector3f crossed = q.v.cross(vec);
|
||||
Vector3f scaled = vec * q.w;
|
||||
Quatf ret = Quatf(-q.Vector3f::dot(vec), crossed + scaled);
|
||||
Quatf ret = Quatf(-q.v.dot(vec), crossed + scaled);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// TODO: Implement
|
||||
friend Quatf operator*(const Quatf &u, const Quatf &v) {
|
||||
Vector3f cross = u.cross(v);
|
||||
Vector3f v_mul_w = u.w * v;
|
||||
Vector3f u_mul_w = v.w * v;
|
||||
Vector3f added_2 = u_mul_w + (cross + v_mul_w);
|
||||
Quatf out = Quatf(u.w * v.w - u.Vector3f::dot(v), added_2);
|
||||
return out;
|
||||
};
|
||||
friend Quatf operator*(const Quatf &lhs, const Quatf &rhs) {
|
||||
Vector3f cross = lhs.v.cross(rhs.v);
|
||||
|
||||
Vector3f scaledRhs = lhs.w * rhs.v;
|
||||
Vector3f tmp0 = cross + scaledRhs;
|
||||
|
||||
Vector3f scaledLhs = rhs.w * lhs.v;
|
||||
Vector3f tmp1 = tmp0 + scaledLhs;
|
||||
|
||||
return Quatf(lhs.w * rhs.w - lhs.v.dot(rhs.v), tmp1);
|
||||
}
|
||||
|
||||
/* 8049b390 */ void set(f32 fw, f32 fx, f32 fy, f32 fz);
|
||||
/* */ void set(f32 f, const Vector3f &vec);
|
||||
@@ -47,27 +48,17 @@ struct Quatf : public Vector3f {
|
||||
/* */ void makeVectorRotationLimit(Vector3f &, Vector3f &, f32);
|
||||
/* 8049bbb0 */ void makeVectorRotation(Vector3f &, Vector3f &);
|
||||
|
||||
f32 dot(const Quatf &q) const {
|
||||
return w * w + q.x * q.x + q.y * q.y + q.z * q.z;
|
||||
}
|
||||
f32 length() const {
|
||||
return Math<f32>::sqrt(dot(*this));
|
||||
}
|
||||
void multScalar(f32 s) {
|
||||
w *= s;
|
||||
x *= s;
|
||||
y *= s;
|
||||
z *= s;
|
||||
v.x *= s;
|
||||
v.y *= s;
|
||||
v.z *= s;
|
||||
}
|
||||
void setUnit() {
|
||||
set(1.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
// union {
|
||||
// Vector3f v;
|
||||
// struct {
|
||||
// f32 x, y, z;
|
||||
// };
|
||||
// };
|
||||
|
||||
Vector3f v;
|
||||
f32 w;
|
||||
};
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "egg/math/eggMath.h"
|
||||
#include "nw4r/math.h"
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
struct Vector3f : public nw4r::math::VEC3 {
|
||||
@@ -28,11 +27,11 @@ struct Vector3f : public nw4r::math::VEC3 {
|
||||
}
|
||||
|
||||
friend Vector3f operator*(f32 f, const Vector3f &v) {
|
||||
return v.operator*(f);
|
||||
return Vector3f(v.x * f, v.y * f, v.z * f);
|
||||
}
|
||||
|
||||
// __pl__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
|
||||
Vector3f operator+(const Vector3f &v) {
|
||||
Vector3f operator+(const Vector3f &v) const {
|
||||
return Vector3f(x + v.x, y + v.y, z + v.z);
|
||||
}
|
||||
|
||||
@@ -96,6 +95,12 @@ struct Vector3f : public nw4r::math::VEC3 {
|
||||
multScalar(1.0f / f);
|
||||
}
|
||||
|
||||
f32 angle(const Vector3f &v) const {
|
||||
f32 a = dot(v);
|
||||
f32 b = cross(v).length();
|
||||
return EGG::Math<f32>::abs(EGG::Math<f32>::atan2(b, a));
|
||||
}
|
||||
|
||||
// dot__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
|
||||
f32 dot(const Vector3f &v) const {
|
||||
return x * v.x + y * v.y + z * v.z;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#ifndef LIBMS_COMMONLIB_H
|
||||
#define LIBMS_COMMONLIB_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -49,3 +52,5 @@ int LMSi_GetHashTableIndexFromLabel(const char *label, int tableSize);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#ifndef LIBMS_FLOWFILE_H
|
||||
#define LIBMS_FLOWFILE_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -28,3 +31,5 @@ const unsigned short *LMS_GetBranchPoints(struct MsbfInfo *info, int index);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#ifndef LIBMS_LIBMS_H
|
||||
#define LIBMS_LIBMS_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -15,3 +18,5 @@ void LMSi_MemCopy(char *p1, const char *p2, int n);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#ifndef LIBMS_MSGFILE_H
|
||||
#define LIBMS_MSGFILE_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -22,3 +25,5 @@ struct MsbtAttrInfo *LMS_GetAttribute(struct MsbtInfo *info, int index);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -99,6 +99,12 @@ public:
|
||||
setFrame(actualEnd - (ratio * actualEnd));
|
||||
}
|
||||
|
||||
inline f32 getNextFrame() const {
|
||||
f32 end = mEndFrame;
|
||||
f32 f = mCurrFrame + 1.0f;
|
||||
return f >= end ? 0.0f : f;
|
||||
}
|
||||
|
||||
private:
|
||||
inline bool notLooping() const {
|
||||
return (mFlags & FLAG_NO_LOOP) != 0;
|
||||
|
||||
+53
-1
@@ -1,7 +1,10 @@
|
||||
#ifndef M_ANGLE_H
|
||||
#define M_ANGLE_H
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "math.h"
|
||||
#include "nw4r/math/math_triangular.h"
|
||||
|
||||
struct mAng {
|
||||
@@ -9,6 +12,13 @@ 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));
|
||||
}
|
||||
static mAng fromVec(const mVec3_c &other) {
|
||||
return mAng(cM::atan2s(other.x, other.z));
|
||||
}
|
||||
|
||||
operator s16() const {
|
||||
return mVal;
|
||||
}
|
||||
@@ -25,6 +35,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);
|
||||
|
||||
@@ -38,15 +52,53 @@ struct mAng {
|
||||
|
||||
s16 mVal;
|
||||
|
||||
f32 degree() const {
|
||||
return (360.0f / 65536.0f) * mVal;
|
||||
}
|
||||
|
||||
static mAng fromDeg(f32 deg) {
|
||||
return deg * sDegToAng;
|
||||
}
|
||||
|
||||
static s16 angle(const mVec3_c &a, const mVec3_c &b) {
|
||||
f32 rads = a.angle(b);
|
||||
return fromRad(rads);
|
||||
}
|
||||
|
||||
f32 radian() const {
|
||||
return ((2.f * M_PI) / 65536.0f) * mVal;
|
||||
}
|
||||
static s16 fromRad(f32 rad) {
|
||||
return rad * sRadToAng;
|
||||
}
|
||||
|
||||
static f32 rad2deg(f32 rad) {
|
||||
return rad * (360.f / (2.f * M_PI));
|
||||
}
|
||||
static f32 deg2rad(f32 deg) {
|
||||
return deg * ((2.f * M_PI) / 360.f);
|
||||
}
|
||||
static s16 deg2short(f32 deg) {
|
||||
return deg * (65536.0f / 360.0f);
|
||||
}
|
||||
static f32 short2deg(s16 angle) {
|
||||
return (360.0f / 65536.0f) * angle;
|
||||
}
|
||||
static f32 short2rad(s16 angle) {
|
||||
return ((2.f * M_PI) / 65536.0f) * angle;
|
||||
}
|
||||
static f32 short2norm(s16 angle) {
|
||||
return 3.0517578E-5f * angle;
|
||||
}
|
||||
static s16 rad2short(f32 rad) {
|
||||
return rad * (65536.0f / (2.f * M_PI));
|
||||
}
|
||||
|
||||
private:
|
||||
static const f32 sHalfCircleDeg;
|
||||
static const f32 sAngToDeg;
|
||||
static const f32 sAngToRad;
|
||||
static const f32 NotSure;
|
||||
static const f32 sAngToNorm;
|
||||
static const f32 sDegToRad;
|
||||
static const f32 sDegToAng;
|
||||
static const f32 sRadToAng;
|
||||
|
||||
+28
-39
@@ -7,9 +7,10 @@
|
||||
#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"
|
||||
#include "rvl/MTX/mtx.h"
|
||||
|
||||
class mMtx_c {
|
||||
class mMtx_c : public EGG::Matrix34f {
|
||||
typedef f32 (*MtxRef)[4];
|
||||
typedef const f32 (*MtxRefConst)[4];
|
||||
|
||||
@@ -17,16 +18,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 +27,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 +38,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,21 +64,17 @@ 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;
|
||||
void trans(const mVec3_c &v) {
|
||||
PSMTXTrans(*this, v.x, v.y, v.z);
|
||||
}
|
||||
void trans(f32 x, f32 y, f32 z) {
|
||||
PSMTXTrans(*this, x, y, z);
|
||||
}
|
||||
|
||||
public:
|
||||
union {
|
||||
f32 m[3][4];
|
||||
struct {
|
||||
f32 xx, xy, xz, xw;
|
||||
f32 yx, yy, yz, yw;
|
||||
f32 zx, zy, zz, zw;
|
||||
};
|
||||
};
|
||||
mMtx_c &operator+=(const mMtx_c &rhs) {
|
||||
PSMTXConcat(*this, rhs, *this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
public:
|
||||
static mMtx_c Identity;
|
||||
|
||||
@@ -8,6 +8,12 @@ class mQuat_c : public EGG::Quatf {
|
||||
public:
|
||||
mQuat_c() {}
|
||||
mQuat_c(f32 x, f32 y, f32 z, f32 w) : EGG::Quatf(w, x, y, z) {}
|
||||
mQuat_c &operator=(const EGG::Quatf &rhs) {
|
||||
v = rhs.v;
|
||||
w = rhs.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void fn_802F2780(const mQuat_c &other);
|
||||
};
|
||||
|
||||
|
||||
+23
-1
@@ -1,9 +1,15 @@
|
||||
#ifndef M_VEC_H
|
||||
#define M_VEC_H
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "egg/math/eggMath.h"
|
||||
#include "egg/math/eggVector.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "nw4r/types_nw4r.h"
|
||||
#include "rvl/MTX/vec.h"
|
||||
|
||||
class mAng;
|
||||
|
||||
class mVec3_c : public EGG::Vector3f {
|
||||
public:
|
||||
@@ -148,6 +154,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 +219,16 @@ public:
|
||||
|
||||
void rotY(const mAng &angle);
|
||||
|
||||
void CopyTo(nw4r::math::VEC3 *p) {
|
||||
p->x = x;
|
||||
p->y = y;
|
||||
p->z = z;
|
||||
}
|
||||
|
||||
s16 ang() const {
|
||||
return cM::atan2s(x * x, z * z);
|
||||
}
|
||||
|
||||
static mVec3_c Zero;
|
||||
static mVec3_c Ex;
|
||||
static mVec3_c Ey;
|
||||
|
||||
@@ -84,6 +84,10 @@ public:
|
||||
mAlpha = value;
|
||||
}
|
||||
|
||||
u8 GetGlobalAlpha() const {
|
||||
return mGlbAlpha;
|
||||
}
|
||||
|
||||
const Size &GetSize() const {
|
||||
return mSize;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1,5 +1,6 @@
|
||||
#ifndef NW4R_TYPES_H
|
||||
#define NW4R_TYPES_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define NW4R_BYTEORDER_BIG 0xFEFF
|
||||
|
||||
@@ -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, ...) \
|
||||
|
||||
@@ -22,6 +22,14 @@ void addCalcScaled(float *value, float stepSize, float maxStep);
|
||||
int absDiff(short a1, short a2);
|
||||
BOOL chaseUC(u8 *value, u8 target, u8 stepSize);
|
||||
|
||||
template <typename T>
|
||||
T calcTimer(T *val) {
|
||||
if (*val != 0) {
|
||||
*val -= 1;
|
||||
}
|
||||
return *val;
|
||||
}
|
||||
|
||||
} // namespace sLib
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -18,6 +18,8 @@ public:
|
||||
mpOwner = owner;
|
||||
}
|
||||
|
||||
void remove(bool);
|
||||
|
||||
private:
|
||||
u8 field_0x20[0x28 - 0x20];
|
||||
/* 0x28 */ dBase_c *mpOwner;
|
||||
|
||||
@@ -150,18 +150,18 @@ public:
|
||||
/* 8000B670 */ void setShieldPouchSlot(u8 slot);
|
||||
/* 8000B6A0 */ u8 getShieldPouchSlot();
|
||||
|
||||
/* 8000B6F0 */ void setAirPotionTimer(s16 time);
|
||||
/* 8000B720 */ s16 getAirPotionTimer();
|
||||
/* 8000B770 */ void setAirPotionPlusTimer(s16 time);
|
||||
/* 8000B7A0 */ s16 getAirPotionPlusTimer();
|
||||
/* 8000B7F0 */ void setStaminaPotionTimer(s16 time);
|
||||
/* 8000B820 */ s16 getStaminaPotionTimer();
|
||||
/* 8000B870 */ void setStaminaPotionPlusTimer(s16 time);
|
||||
/* 8000B8A0 */ s16 getStaminaPotionPlusTimer();
|
||||
/* 8000B8F0 */ void setGuardianPotionTimer(s16 time);
|
||||
/* 8000B920 */ s16 getGuardianPotionTimer();
|
||||
/* 8000B970 */ void setGuardianPotionPlusTimer(s16 time);
|
||||
/* 8000B9A0 */ s16 getGuardianPotionPlusTimer();
|
||||
/* 8000B6F0 */ void setAirPotionTimer(u16 time);
|
||||
/* 8000B720 */ u16 getAirPotionTimer();
|
||||
/* 8000B770 */ void setAirPotionPlusTimer(u16 time);
|
||||
/* 8000B7A0 */ u16 getAirPotionPlusTimer();
|
||||
/* 8000B7F0 */ void setStaminaPotionTimer(u16 time);
|
||||
/* 8000B820 */ u16 getStaminaPotionTimer();
|
||||
/* 8000B870 */ void setStaminaPotionPlusTimer(u16 time);
|
||||
/* 8000B8A0 */ u16 getStaminaPotionPlusTimer();
|
||||
/* 8000B8F0 */ void setGuardianPotionTimer(u16 time);
|
||||
/* 8000B920 */ u16 getGuardianPotionTimer();
|
||||
/* 8000B970 */ void setGuardianPotionPlusTimer(u16 time);
|
||||
/* 8000B9A0 */ u16 getGuardianPotionPlusTimer();
|
||||
|
||||
/* 8000B9F0 */ void setDowsingSlotIdx(u8 idx);
|
||||
/* 8000BA20 */ u8 getDowsingSlotIdx();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define SPECIAL_ITEM_DROP_MGR_H
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
class SpecialItemDropMgr {
|
||||
@@ -9,16 +10,15 @@ public:
|
||||
static SpecialItemDropMgr *sInstance;
|
||||
|
||||
SpecialItemDropMgr();
|
||||
static int fn_800C7BB0(SpecialItemDropMgr *mgr, int specialItemId);
|
||||
static short fn_800C7D00(SpecialItemDropMgr *mgr, int specialItemId);
|
||||
static short fn_800C7D20(SpecialItemDropMgr *mgr, int specialItemId);
|
||||
static int giveSpecialDropItem(
|
||||
SpecialItemDropMgr *mgr, int specialItemId, int roomid, mVec3_c *pos, int subtype, s16 *rot, s32 unused
|
||||
);
|
||||
static bool
|
||||
spawnSpecialDropItem(SpecialItemDropMgr *mgr, int specialItemId, int roomid, mVec3_c *pos, int subtype, s16 *rot);
|
||||
static void fn_800C81D0(s16, s16, s16);
|
||||
~SpecialItemDropMgr();
|
||||
virtual ~SpecialItemDropMgr() {}
|
||||
|
||||
static SpecialItemDropMgr *create();
|
||||
|
||||
int fn_800C7BB0(int specialItemId);
|
||||
bool shouldTryExtraHearts(int specialItemId);
|
||||
bool shouldTryExtraRupees(int specialItemId);
|
||||
int giveSpecialDropItem(int specialItemId, int roomid, mVec3_c *pos, int subtype, mAng rot, s32 unused);
|
||||
bool spawnSpecialDropItem(int specialItemId, int roomid, mVec3_c *pos, int subtype, mAng rot);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+218
-1
@@ -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() {}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#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/a/obj/d_a_obj_item.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 +18,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 +72,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 +95,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 +112,7 @@ int dAcOtoD3StoneFigure_c::doDelete() {
|
||||
|
||||
int dAcOtoD3StoneFigure_c::actorExecute() {
|
||||
mStateMgr.executeState();
|
||||
ColliderManager::getColliderManager()->addCollider(&mCollision);
|
||||
dCcS::GetInstance()->Set(&mCollision);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -135,7 +164,6 @@ void dAcOtoD3StoneFigure_c::doInteraction(s32 arg) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" s32 AcItem__checkFlag(s32);
|
||||
bool dAcOtoD3StoneFigure_c::hasStoneOfTrials() const {
|
||||
return AcItem__checkFlag(0xB4);
|
||||
return dAcItem_c::checkFlag(0xB4);
|
||||
}
|
||||
|
||||
@@ -1,17 +1,140 @@
|
||||
#include "d/a/obj/d_a_obj_trap_rock_1.h"
|
||||
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
#include "s/s_Math.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_TRAP_ROCK_1, dAcOtrapRock1_c, fProfile::OBJ_TRAP_ROCK_1, 0x26B, 0, 2);
|
||||
|
||||
STATE_DEFINE(dAcOtrapRock1_c, TrapWait);
|
||||
STATE_DEFINE(dAcOtrapRock1_c, TrapAction);
|
||||
STATE_DEFINE(dAcOtrapRock1_c, TrapReturn);
|
||||
|
||||
bool dAcOtrapRock1_c::createHeap() {
|
||||
mResFile = getOarcResFile("TrapRockRoll");
|
||||
nw4r::g3d::ResMdl m = mResFile.GetResMdl("TrapRockRoll");
|
||||
|
||||
TRY_CREATE(mMdl.create(m, &heap_allocator, 0x120));
|
||||
mMdl.setPriorityDraw(0x1C, 0x09);
|
||||
void *dzb = getOarcFile("TrapRockRoll", "dzb/TrapRockRoll.dzb");
|
||||
void *plc = getOarcFile("TrapRockRoll", "dat/TrapRockRoll.plc");
|
||||
updateMatrix();
|
||||
return !mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, nullptr);
|
||||
}
|
||||
|
||||
int dAcOtrapRock1_c::create() {
|
||||
mActivationSceneFlag = params & 0xFF;
|
||||
mReturnSceneFlag = (params >> 8) & 0xFF;
|
||||
CREATE_ALLOCATOR(dAcOtrapRock1_c);
|
||||
|
||||
mBgW.SetCrrFunc(dBgS_MoveBGProc_Typical);
|
||||
dBgS::GetInstance()->Regist(&mBgW, this);
|
||||
forwardAccel = 0.0f;
|
||||
forwardMaxSpeed = -40.0f;
|
||||
mStateMgr.changeState(StateID_TrapWait);
|
||||
mVec3_c min, max;
|
||||
mMdl.getBounds(&min, &max);
|
||||
static mVec3_c offset = mVec3_c(50.0f, 50.0f, 50.0f);
|
||||
min -= offset;
|
||||
max += offset;
|
||||
boundingBox.Set(min, max);
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOtrapRock1_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOtrapRock1_c::actorExecute() {
|
||||
mStateMgr.executeState();
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
mBgW.Move();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOtrapRock1_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOtrapRock1_c::initializeState_TrapWait() {}
|
||||
void dAcOtrapRock1_c::executeState_TrapWait() {}
|
||||
void dAcOtrapRock1_c::executeState_TrapWait() {
|
||||
if (SceneflagManager::sInstance->checkBoolFlag(roomid, mActivationSceneFlag)) {
|
||||
mStateMgr.changeState(StateID_TrapAction);
|
||||
}
|
||||
}
|
||||
void dAcOtrapRock1_c::finalizeState_TrapWait() {}
|
||||
void dAcOtrapRock1_c::initializeState_TrapAction() {}
|
||||
void dAcOtrapRock1_c::executeState_TrapAction() {}
|
||||
void dAcOtrapRock1_c::initializeState_TrapAction() {
|
||||
mFrameCounter = 0;
|
||||
field_0x59E = 0x2000;
|
||||
field_0x5A0 = 0x2000;
|
||||
field_0x5A5 = 1;
|
||||
field_0x5A2 = 0x2D8;
|
||||
playSound(0xB0E);
|
||||
}
|
||||
|
||||
void dAcOtrapRock1_c::executeState_TrapAction() {
|
||||
if (SceneflagManager::sInstance->checkBoolFlag(roomid, mReturnSceneFlag)) {
|
||||
mStateMgr.changeState(StateID_TrapReturn);
|
||||
} else if (field_0x59E == 0 || mFrameCounter > 4) {
|
||||
// After 5 frames, move rotation.x to 0x4000, then stay until return
|
||||
bool reachedPoint = sLib::chaseAngle(&rotation.x.mVal, 0x4000, 0x14);
|
||||
if (reachedPoint) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
f32 ratio;
|
||||
if (mFrameCounter == 0 && rotation.x < 0x4000) {
|
||||
ratio = 0.1f;
|
||||
} else {
|
||||
f32 b = field_0x5A0;
|
||||
f32 r = (rotation.x - 0x4000) / b;
|
||||
ratio = nw4r::math::FAbs(r);
|
||||
}
|
||||
if (ratio > 1.0f) {
|
||||
ratio = 1.0f;
|
||||
}
|
||||
else if (ratio < 0.1f) {
|
||||
ratio = 0.1f;
|
||||
}
|
||||
s16 newAng = field_0x5A5 * (1.0f - ratio) * field_0x5A2;
|
||||
static const u16 sSomeValue = 0x3C;
|
||||
if (field_0x5A5 > 0) {
|
||||
if ((u16)newAng <= sSomeValue - 1) {
|
||||
newAng = sSomeValue;
|
||||
}
|
||||
} else if ((u16)(newAng + sSomeValue - 1) <= sSomeValue - 1) {
|
||||
newAng = -sSomeValue;
|
||||
}
|
||||
|
||||
rotation.x += (int)newAng;
|
||||
if (field_0x59E > 0 && rotation.x > field_0x59E + 0x4000 ||
|
||||
field_0x59E < 0 && rotation.x < field_0x59E + 0x4000) {
|
||||
rotation.x = field_0x59E + 0x4000;
|
||||
u8 r6 = field_0x5A5;
|
||||
field_0x5A5 = r6 - (r6 * 2);
|
||||
field_0x5A0 = field_0x59E;
|
||||
field_0x59E = field_0x59E - (field_0x59E * 2);
|
||||
if (mFrameCounter >= 1) {
|
||||
field_0x59E = field_0x59E >> 1;
|
||||
field_0x5A2 = field_0x5A2 >> 2;
|
||||
} else {
|
||||
field_0x5A2 = field_0x5A2 * 2 / 3;
|
||||
}
|
||||
mFrameCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOtrapRock1_c::finalizeState_TrapAction() {}
|
||||
void dAcOtrapRock1_c::initializeState_TrapReturn() {}
|
||||
void dAcOtrapRock1_c::executeState_TrapReturn() {}
|
||||
void dAcOtrapRock1_c::executeState_TrapReturn() {
|
||||
bool reachedReturnPoint = sLib::chaseAngle(&rotation.x.mVal, 0, 0x222);
|
||||
if (reachedReturnPoint) {
|
||||
mStateMgr.changeState(StateID_TrapWait);
|
||||
}
|
||||
}
|
||||
void dAcOtrapRock1_c::finalizeState_TrapReturn() {}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,13 +1,403 @@
|
||||
#include "d/a/obj/d_a_obj_tumble_weed.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/c/c_m3d_g_pla.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "egg/math/eggMath.h"
|
||||
#include "egg/math/eggQuat.h"
|
||||
#include "f/f_base.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/math/math_triangular.h"
|
||||
#include "rvl/MTX/mtx.h"
|
||||
#include "rvl/MTX/vec.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/dowsing_target.h"
|
||||
|
||||
void float_ordering() {
|
||||
const f32 arr[] = {5.f, 15.f, 7.f, 0.5f, 0.1f};
|
||||
}
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_TUMBLE_WEED, dAcOTumbleWeed_c, fProfile::OBJ_TUMBLE_WEED, 0x243, 0, 2);
|
||||
|
||||
STATE_DEFINE(dAcOTumbleWeed_c, Wait);
|
||||
STATE_DEFINE(dAcOTumbleWeed_c, Slope);
|
||||
|
||||
void dAcOTumbleWeed_c::initializeState_Wait() {}
|
||||
void dAcOTumbleWeed_c::executeState_Wait() {}
|
||||
dCcD_SrcSph dAcOTumbleWeed_c::sSphSrc = {
|
||||
/* mObjInf */
|
||||
{/* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */ {0xFFB77FFF, 0x111, {8, 0x40F}, 0, 0},
|
||||
/* mObjCo */ {0xE9}},
|
||||
/* mSphInf */
|
||||
{60.f},
|
||||
};
|
||||
|
||||
bool dAcOTumbleWeed_c::createHeap() {
|
||||
mResFile = getOarcResFile("GrassRollDry");
|
||||
TRY_CREATE(mMdl.create(mResFile.GetResMdl("GrassRollDry"), &heap_allocator, 0x120, 1, nullptr));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOTumbleWeed_c::actorCreate() {
|
||||
CREATE_ALLOCATOR(dAcOTumbleWeed_c);
|
||||
|
||||
mObjAcch.Set(this, 1, &mAcchCir);
|
||||
mAcchCir.SetWall(20.f, 60.f);
|
||||
mObjAcch.OffClrSpeedY();
|
||||
mObjAcch.SetGndThinCellingOff();
|
||||
|
||||
mStts.SetRank(3);
|
||||
|
||||
mSph.Set(sSphSrc);
|
||||
mSph.SetStts(mStts);
|
||||
|
||||
mDowsingTarget.initialize(DowsingTarget::SLOT_TREASURE, 0, nullptr, 0.0f);
|
||||
mDowsingTarget.doRegister();
|
||||
|
||||
forwardAccel = -2.f;
|
||||
forwardMaxSpeed = -40.f;
|
||||
|
||||
mField_0x974 = 0.0f;
|
||||
mField_0x98B = true;
|
||||
|
||||
mWind = mVec3_c::Zero;
|
||||
|
||||
mSpeedTarget = cM::rndFX(2.5f) + 15.f;
|
||||
mField_0x978 = cM::rndF(40.f);
|
||||
mField_0x97C = cM::rndFX(0.25f) + 1.f;
|
||||
mTumbleTimer = (150);
|
||||
|
||||
mField_0x910.set(1.f, 0.f, 0.f, 0.f);
|
||||
mScale.set(1.f, 1.f, 1.f);
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
|
||||
boundingBox.Set(mVec3_c(-50.f, -20.f, -50.f), mVec3_c(50.f, 60.f, 50.f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOTumbleWeed_c::actorPostCreate() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOTumbleWeed_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
extern "C" void fn_800247D0(void *, mVec3_c, f32);
|
||||
extern "C" UNKWORD BLUR_AND_PALETTE_MGR;
|
||||
|
||||
int dAcOTumbleWeed_c::actorExecute() {
|
||||
if (!mField_0x98C && !isStopped()) {
|
||||
mField_0x968 = velocity;
|
||||
mField_0x968.y = 0.0f;
|
||||
mField_0x968.normalize();
|
||||
mField_0x98C = true;
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
calcWind();
|
||||
|
||||
sLib::chase(&mField_0x980, 1.f, 0.1f);
|
||||
fn_800247D0(&BLUR_AND_PALETTE_MGR, mField_0x968, mField_0x980);
|
||||
|
||||
calcVelocity();
|
||||
position += velocity;
|
||||
position += mStts.GetCcMove();
|
||||
|
||||
mObjAcch.CrrPos(*dBgS::GetInstance());
|
||||
mField_0x974 += position.y - mOldPosition.y;
|
||||
if (checkCollect()) {
|
||||
dAcPy_c::LINK->bugNetCollectTreasure(0xA3 /* TODO(Item Id) ITEM_TUMBLEWEED */);
|
||||
FUN_8002dcd0();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
if (checkBreak()) {
|
||||
doBreak();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (mSph.ChkTgHit() && mSph.ChkTgAtHitType(AT_TYPE_0x10000 | AT_TYPE_0x200)) {
|
||||
mField_0x974 = 0.f;
|
||||
adjustTumble(mSph.GetTg_0x2C() * 0.06f);
|
||||
}
|
||||
adjustTimeScale();
|
||||
|
||||
// TODO(mObjectActorFlags)
|
||||
if (mObjectActorFlags & 0x2) {
|
||||
// Weak function not being placed right
|
||||
if (sLib::calcTimer(&mTumbleTimer) == 0) {
|
||||
FUN_8002dcd0();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
} else {
|
||||
mTumbleTimer = 150;
|
||||
}
|
||||
mSph.SetC(getPosition());
|
||||
mSph.SetR(mScale.x * 60.f);
|
||||
dCcS::GetInstance()->Set(&mSph);
|
||||
updateMatrix();
|
||||
calcMatrix();
|
||||
playSoundEffect1(0xC2C); // TODO(Sound Id)
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
mMdl.setScale(mScale);
|
||||
mMdl.calc(false);
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOTumbleWeed_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
|
||||
static mQuat_c shadowRot(0.f, 30.f, 0.f, 50.f);
|
||||
if (0.f < mScale.x) {
|
||||
drawShadow(mShdw, nullptr, mShadowMtx, &shadowRot, -1, -1, -1, -1, -1, position.y - mObjAcch.GetGroundH());
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::initializeState_Wait() {
|
||||
mbOnGround = false;
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::executeState_Wait() {
|
||||
if (mObjAcch.ChkGroundLanding() && !mbOnGround) {
|
||||
tumbleBounceMaybe();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mObjAcch.ChkGndHit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
velocity.y = 0.f;
|
||||
mField_0x974 = 0.f;
|
||||
if (checkSlope()) {
|
||||
mStateMgr.changeState(StateID_Slope);
|
||||
} else {
|
||||
adjustSpeed();
|
||||
if (forwardSpeed < 0.1f) {
|
||||
mField_0x98B = false;
|
||||
sLib::chase(&forwardSpeed, 0.f, 0.05f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::finalizeState_Wait() {}
|
||||
|
||||
void dAcOTumbleWeed_c::initializeState_Slope() {}
|
||||
void dAcOTumbleWeed_c::executeState_Slope() {}
|
||||
|
||||
void dAcOTumbleWeed_c::executeState_Slope() {
|
||||
if (mObjAcch.ChkGroundLanding() && !mbOnGround) {
|
||||
tumbleBounceMaybe();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mObjAcch.ChkGndHit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
velocity.y = 0.f;
|
||||
adjustAngle();
|
||||
adjustSpeed();
|
||||
if (!checkSlope()) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::finalizeState_Slope() {}
|
||||
|
||||
bool dAcOTumbleWeed_c::checkBreak() {
|
||||
if (mObjAcch.ChkWallHit(nullptr) && forwardSpeed > 5.f) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mSph.ChkTgHit() && !mSph.ChkTgAtHitType(AT_TYPE_BUGNET)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mObjAcch.ChkGndHit() && mField_0x974 < -300.f) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (fn_475_E40()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mObjAcch.ChkGndHit() && checkInvalidGround()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dAcOTumbleWeed_c::fn_475_E40() const {
|
||||
return mField_0x974 < -10000.f;
|
||||
}
|
||||
|
||||
bool dAcOTumbleWeed_c::checkSlope() {
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.mGnd, &pla);
|
||||
|
||||
mAng ang = mAng::angle(mVec3_c::Ey, pla.GetN());
|
||||
return sLib::absDiff(ang, 0) > mAng::deg2short(1);
|
||||
}
|
||||
|
||||
bool dAcOTumbleWeed_c::checkCollect() {
|
||||
return mSph.ChkTgHit() && mSph.ChkTgAtHitType(AT_TYPE_BUGNET) ? true : false;
|
||||
}
|
||||
|
||||
bool dAcOTumbleWeed_c::checkInvalidGround() const {
|
||||
u32 code = dBgS::GetInstance()->GetSpecialCode(mObjAcch.mGnd);
|
||||
|
||||
return code == POLY_ATTR_LAVA || code == POLY_ATTR_SAND_MED || code == POLY_ATTR_SAND_DEEP_INSTANT ||
|
||||
code == POLY_ATTR_SAND_DEEP_SLOW;
|
||||
}
|
||||
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_743_;
|
||||
extern "C" void fn_800298B0(u16, mVec3_c *, mAng3_c *, u32, u32, u32, u32, u32);
|
||||
|
||||
void dAcOTumbleWeed_c::doBreak() {
|
||||
playSound(0xC2D); // TODO(Sound Id)
|
||||
mVec3_c pos = getPosition();
|
||||
fn_800298B0(PARTICLE_RESOURCE_ID_MAPPING_743_, &pos, nullptr, 0, 0, 0, 0, 0);
|
||||
deleteRequest();
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::calcMatrix() {
|
||||
if (mField_0x98B) {
|
||||
f32 vel_mag = PSVECMag(velocity);
|
||||
f32 f1 = mAng(vel_mag * (mField_0x978 + 200.f)).radian();
|
||||
f32 f2 = mAng(vel_mag * 182.0f * 0.2f).radian();
|
||||
f32 f0 = mAng(angle.y - rotation.y).radian();
|
||||
|
||||
mQuat_c q0, q1, q2, q3;
|
||||
q1.setAxisRotation(mVec3_c::Ey, f0);
|
||||
q0.setAxisRotation(mVec3_c::Ey, -f0);
|
||||
q3.setAxisRotation(mVec3_c::Ex, f1);
|
||||
q2.setAxisRotation(mVec3_c::Ey, f2);
|
||||
|
||||
mField_0x910 = q1 * q3 * q2 * q0 * mField_0x910;
|
||||
}
|
||||
|
||||
mMtx_c mtx0, mtx1, mtx2;
|
||||
mShadowMtx.copyFrom(mWorldMtx);
|
||||
mtx1.trans(getPosition() - position);
|
||||
mShadowMtx += mtx1;
|
||||
mtx0.fromQuat(mField_0x910);
|
||||
mtx2.trans(0.f, 40.f, 0.f);
|
||||
mWorldMtx += mtx2;
|
||||
mWorldMtx += mtx0;
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::adjustAngle() {
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.mGnd, &pla);
|
||||
mVec3_c vel = velocity; // ok?
|
||||
angle.y = mAng::fromVec(velocity);
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::adjustSpeed() {
|
||||
cM3dGPla pla;
|
||||
|
||||
// BUG
|
||||
// the ground angle calculation happens before retrieving the grounds normal
|
||||
// this is probably hard to notice due to the little effect it has.
|
||||
// Effect:
|
||||
// Tumbleweed slows to the target much quicker than intended
|
||||
// Tumbleweed speeds to the target + 5.0f much quicker than intended
|
||||
mAng gndAngle = mAng::angle(mVec3_c::Ey, pla.GetN());
|
||||
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.mGnd, &pla);
|
||||
|
||||
f32 speedStep = 0.5f;
|
||||
f32 step = gndAngle.cos() * speedStep;
|
||||
|
||||
// Flat Ground or not in the direction of the slope
|
||||
// Slows down
|
||||
if (gndAngle < mAng::deg2short(1) ||
|
||||
sLib::absDiff(cM::atan2s(pla.GetN().x, pla.GetN().z), GetAngle().y) > mAng::deg2short(90)) {
|
||||
sLib::chase(&forwardSpeed, mSpeedTarget, step);
|
||||
}
|
||||
// Sloped Ground and in the direction of the slope
|
||||
// Speeds up
|
||||
else {
|
||||
forwardSpeed = cM::minMaxLimit(forwardSpeed + step, mSpeedTarget, mSpeedTarget + 5.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::tumbleBounceMaybe() {
|
||||
velocity.y *= -0.75f;
|
||||
forwardSpeed *= 0.9f;
|
||||
|
||||
if (forwardSpeed < 15.f) {
|
||||
forwardSpeed = mSpeedTarget;
|
||||
}
|
||||
|
||||
mbOnGround = false;
|
||||
if (velocity.y < 5.f) {
|
||||
velocity.y = 0.f;
|
||||
mbOnGround = true;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::adjustTimeScale() {
|
||||
mTimeArea.check(getRoomId(), GetPostion(), 0, 30.f, 0.1f);
|
||||
if (0.f < mTimeArea.getDistMaybe()) {
|
||||
sLib::chase(&mScale.y, 0.f, 0.07f);
|
||||
mScale.z = mScale.y;
|
||||
mScale.x = mScale.y;
|
||||
} else {
|
||||
sLib::chase(&mScale.y, 1.f, 0.07f);
|
||||
mScale.z = mScale.y;
|
||||
mScale.x = mScale.y;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::adjustTumble(const mVec3_c &dir) {
|
||||
mField_0x98B = true;
|
||||
|
||||
velocity.x += dir.x;
|
||||
velocity.z += dir.z;
|
||||
|
||||
forwardSpeed = mField_0x97C * EGG::Math<f32>::sqrt(velocity.x * velocity.x + velocity.z * velocity.z);
|
||||
angle.y = mAng::fromVec(dir);
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::setWind(const mVec3_c &wind) {
|
||||
mWind = wind;
|
||||
mWindTimer = cM::rndInt(10);
|
||||
}
|
||||
|
||||
void dAcOTumbleWeed_c::calcWind() {
|
||||
if (!isWindStop() && sLib::calcTimer(&mWindTimer) == 0) {
|
||||
velocity.y = cM::rndFX(3.0f) + 15.f;
|
||||
forwardSpeed = cM::rndFX(5.0f) + 15.f;
|
||||
|
||||
mWind = mVec3_c::Zero;
|
||||
mField_0x980 = 0.f;
|
||||
}
|
||||
}
|
||||
|
||||
mVec3_c dAcOTumbleWeed_c::getPosition() const {
|
||||
mMtx_c mtx;
|
||||
mVec3_c vec;
|
||||
mtx.ZXYrotS(rotation.x, rotation.y, rotation.z);
|
||||
PSMTXMultVecSR(mtx, mVec3_c::Ey, vec);
|
||||
return position + vec * 40.f;
|
||||
}
|
||||
|
||||
void float_ordering2() {
|
||||
const f32 arr[] = {30.f, 0.07f, 20.f, -10000.f, 5.f};
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#include "d/t/d_t_gekotag.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/e/d_a_e_geko.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "s/s_Math.h"
|
||||
|
||||
#pragma explicit_zero_data on
|
||||
static u32 initialRotX = 0;
|
||||
@@ -60,8 +59,8 @@ void dTgGekoTag::executeState_Wait() {
|
||||
void dTgGekoTag::finalizeState_Wait() {}
|
||||
|
||||
void dTgGekoTag::doExecute() {
|
||||
cM::calcTimer(&mTimer2);
|
||||
if (cM::calcTimer(&mTimer1) != 0) {
|
||||
sLib::calcTimer(&mTimer2);
|
||||
if (sLib::calcTimer(&mTimer1) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,34 +211,27 @@ 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);
|
||||
}
|
||||
|
||||
// TODO move this somewhere
|
||||
template <typename T>
|
||||
T rndRange(T min, T max) {
|
||||
f32 r = cM::rndF(max - min);
|
||||
f32 m = min;
|
||||
m += r;
|
||||
return m;
|
||||
dCcS::GetInstance()->Set(&mCollision);
|
||||
}
|
||||
|
||||
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 {
|
||||
uVar3 = p == 0xFF ? 5 : 6;
|
||||
uVar3 = 6;
|
||||
if ((int)p == 0xFF) {
|
||||
uVar3 = 5;
|
||||
}
|
||||
}
|
||||
mVec3_c spawnPos = position;
|
||||
spawnPos.y += field_0x4E4;
|
||||
@@ -248,7 +242,7 @@ void dTgReaction_c::checkForSlingBellowsItem() {
|
||||
onDelete();
|
||||
}
|
||||
mCollision.SetC(position);
|
||||
ColliderManager::getColliderManager()->addCollider(&mCollision);
|
||||
dCcS::GetInstance()->Set(&mCollision);
|
||||
}
|
||||
|
||||
void dTgReaction_c::onDelete() {
|
||||
@@ -285,9 +279,7 @@ bool dTgReaction_c::spawnHearts(s32 params, const mVec3_c &pos, s32 arg, mAng an
|
||||
tmp2 = mAng(tmp2 / 2);
|
||||
|
||||
for (int i = 0; i < numHearts; i++) {
|
||||
// Note: This is a (presumably templated) rndRange function
|
||||
// that takes and returns a struct mAng
|
||||
mAng offset = rndRange(-tmp2, tmp2);
|
||||
mAng offset = cM::rndRange(-tmp2, tmp2);
|
||||
ang.y = mAng(step) + offset;
|
||||
if (arg == 5) {
|
||||
dAcItem_c::spawnItem(/* HEART */ 0x6, roomid, pos, ang, 0xFFFFFFFF, 1);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#include "d/t/d_t_touch.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "toBeSorted/area_math.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/area_math.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(TOUCH_TAG, dTgTouchTag, fProfile::TOUCH_TAG, 0x028E, 0, 0);
|
||||
|
||||
@@ -59,7 +59,7 @@ void dTgTouchTag::executeState_Wait() {
|
||||
actor = static_cast<dAcBase_c *>(fManager_c::searchBaseByProfName(ACTIVATORS[mActivatorIndex], actor));
|
||||
}
|
||||
|
||||
if (cM::calcTimer(&mFlagTimer) == 0) {
|
||||
if (sLib::calcTimer(&mFlagTimer) == 0) {
|
||||
if (mZoneFlag != 0xFF && SceneflagManager::sInstance->checkBoolFlag(roomid, mZoneFlag)) {
|
||||
SceneflagManager::sInstance->unsetFlag(roomid, mZoneFlag);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "d/t/d_t_tumble_weed.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "s/s_Math.h"
|
||||
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(TUMBLE_WEED_TAG, dTgTumbleWeed_c, fProfile::TUMBLE_WEED_TAG, 0x0244, 0, 0);
|
||||
@@ -17,32 +17,23 @@ int dTgTumbleWeed_c::create() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
u16 decr(u16 *num);
|
||||
|
||||
int dTgTumbleWeed_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dTgTumbleWeed_c::actorExecute() {
|
||||
mStateMgr.executeState();
|
||||
decr(&tumbleweedTimer);
|
||||
sLib::calcTimer(&tumbleweedTimer);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
u16 decr(u16 *num) {
|
||||
if (*num != 0) {
|
||||
(*num)--;
|
||||
}
|
||||
return *num;
|
||||
}
|
||||
|
||||
int dTgTumbleWeed_c::draw() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dTgTumbleWeed_c::initializeState_AreaOut() {}
|
||||
void dTgTumbleWeed_c::executeState_AreaOut() {
|
||||
if (decr(&windTimer) == 0) {
|
||||
if (sLib::calcTimer(&windTimer) == 0) {
|
||||
windTimer = 0x96;
|
||||
if (shouldDoWind()) {
|
||||
mStateMgr.changeState(StateID_Wind);
|
||||
@@ -63,7 +54,7 @@ void dTgTumbleWeed_c::executeState_AreaIn() {
|
||||
}
|
||||
tumbleweedTimer = 600;
|
||||
}
|
||||
if (decr(&windTimer) == 0) {
|
||||
if (sLib::calcTimer(&windTimer) == 0) {
|
||||
windTimer = 0x96;
|
||||
if (shouldDoWind()) {
|
||||
mStateMgr.changeState(StateID_Wind);
|
||||
@@ -76,12 +67,11 @@ void dTgTumbleWeed_c::executeState_AreaIn() {
|
||||
}
|
||||
void dTgTumbleWeed_c::finalizeState_AreaIn() {}
|
||||
|
||||
extern "C" void fn_475_1B00(fBase_c *, mVec3_c &);
|
||||
void dTgTumbleWeed_c::initializeState_Wind() {
|
||||
mVec3_c vec;
|
||||
getWind(&vec);
|
||||
if (childTumbleweed.get() != nullptr) {
|
||||
fn_475_1B00(childTumbleweed.get(), vec);
|
||||
childTumbleweed.get()->setWind(vec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -243,9 +243,8 @@ u32 dAcBase_c::itemDroppingAndGivingRelated(mVec3_c *spawnPos, int subtype) {
|
||||
u32 param2Copy = params2;
|
||||
params2 = param2Copy | 0xFF000000;
|
||||
// mAng3_c rot = {};
|
||||
s16 rot = 0;
|
||||
return SpecialItemDropMgr::giveSpecialDropItem(
|
||||
SpecialItemDropMgr::sInstance, param2Copy >> 0x18, roomid, spawnPos, subtype, &rot, -1
|
||||
return SpecialItemDropMgr::sInstance->giveSpecialDropItem(
|
||||
param2Copy >> 0x18, roomid, spawnPos, subtype, 0, -1
|
||||
);
|
||||
}
|
||||
|
||||
@@ -424,7 +423,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)) {
|
||||
|
||||
@@ -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() {}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
#include "d/a/obj/d_a_obj_switch.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_SW, dAcOsw_c, fProfile::OBJ_SW, 0x12B, 0, 0x1002);
|
||||
|
||||
@@ -68,13 +67,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 +179,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);
|
||||
@@ -269,7 +268,7 @@ void dAcOsw_c::executeState_OffWait() {
|
||||
if (field_0x5F1 != 0) {
|
||||
field_0x5F3 = 1;
|
||||
}
|
||||
if (mSwitchType != 1 && cM::calcTimer(&field_0x5EC) == 0 && field_0x5F3 == 0) {
|
||||
if (mSwitchType != 1 && sLib::calcTimer(&field_0x5EC) == 0 && field_0x5F3 == 0) {
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
+36
-13
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user