Merge branch 'main' into pr/85

This commit is contained in:
elijah-thomas774
2024-11-08 20:28:55 -05:00
121 changed files with 8404 additions and 2446 deletions
+2 -1
View File
@@ -1,9 +1,11 @@
{
"[c]": {
"files.autoSave": "onFocusChange",
"files.encoding": "utf8",
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
},
"[cpp]": {
"files.autoSave": "onFocusChange",
"files.encoding": "utf8",
"editor.defaultFormatter": "xaver.clang-format"
},
@@ -11,7 +13,6 @@
// "editor.defaultFormatter": "ms-python.black-formatter"
// },
// "editor.tabSize": 2,
"files.autoSave": "onFocusChange",
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.associations": {
@@ -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
+13 -13
View File
@@ -8,15 +8,15 @@ __dt__23sFState_c<10dAcBombf_c>Fv = .text:0x000001F0; // type:function size:0x58
__dt__26sFStateFct_c<10dAcBombf_c>Fv = .text:0x00000250; // type:function size:0x6C
__dt__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002C0; // type:function size:0xA0
__dt__49sFStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000360; // type:function size:0xA4
fn_17_410 = .text:0x00000410; // type:function size:0x68
AcBombf__init1 = .text:0x00000480; // type:function size:0x184
createHeap__10dAcBombf_cFv = .text:0x00000410; // type:function size:0x68
actorCreate__10dAcBombf_cFv = .text:0x00000480; // type:function size:0x184
changeState__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000610; // type:function size:0x10
AcBombf__init2 = .text:0x00000620; // type:function size:0x2A4
fn_17_8D0 = .text:0x000008D0; // type:function size:0x8
fn_17_8E0 = .text:0x000008E0; // type:function size:0x138
actorPostCreate__10dAcBombf_cFv = .text:0x00000620; // type:function size:0x2A4
doDelete__10dAcBombf_cFv = .text:0x000008D0; // type:function size:0x8
actorExecute__10dAcBombf_cFv = .text:0x000008E0; // type:function size:0x138
executeState__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000A20; // type:function size:0x10
fn_17_A30 = .text:0x00000A30; // type:function size:0x50
AcBombf__regrowBomb = .text:0x00000A80; // type:function size:0x124
draw__10dAcBombf_cFv = .text:0x00000A30; // type:function size:0x50
regrowBomb__10dAcBombf_cFv = .text:0x00000A80; // type:function size:0x124
initializeState_Wait__10dAcBombf_cFv = .text:0x00000BB0; // type:function size:0x4
executeState_Wait__10dAcBombf_cFv = .text:0x00000BC0; // type:function size:0x2DC
finalizeState_Wait__10dAcBombf_cFv = .text:0x00000EA0; // type:function size:0x4
@@ -36,7 +36,7 @@ getOldStateID__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,
finalizeState__25sFStateID_c<10dAcBombf_c>CFR10dAcBombf_c = .text:0x000010D0; // type:function size:0x30
executeState__25sFStateID_c<10dAcBombf_c>CFR10dAcBombf_c = .text:0x00001100; // type:function size:0x30
initializeState__25sFStateID_c<10dAcBombf_c>CFR10dAcBombf_c = .text:0x00001130; // type:function size:0x30
__sinit_\d_a_bombf_cpp = .text:0x00001160; // type:function size:0x10C scope:local
__sinit_\d_a_bombf_cpp = .text:0x00001160; // type:function size:0x10C
__dt__25sFStateID_c<10dAcBombf_c>Fv = .text:0x00001270; // type:function size:0x58
isSameName__25sFStateID_c<10dAcBombf_c>CFPCc = .text:0x000012D0; // type:function size:0x88
_ctors = .ctors:0x00000000; // type:label scope:global
@@ -49,11 +49,11 @@ g_profile_BOMBF = .data:0x00000000; // type:object size:0x10 data:4byte
lbl_17_data_10 = .data:0x00000010; // type:object size:0xC
lbl_17_data_1C = .data:0x0000001C; // type:object size:0xC
lbl_17_data_28 = .data:0x00000028; // type:object size:0x18 data:string
lbl_17_data_40 = .data:0x00000040; // type:object size:0x80
lbl_17_data_C0 = .data:0x000000C0; // type:object size:0x30
lbl_17_data_F0 = .data:0x000000F0; // type:object size:0x30
lbl_17_data_120 = .data:0x00000120; // type:object size:0x18
lbl_17_data_138 = .data:0x00000138; // type:object size:0x58
__vt__10dAcBombf_c = .data:0x00000040; // type:object size:0x80
__vt__49sFStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c> = .data:0x000000C0; // type:object size:0x30
__vt__79sStateMgr_c<10dAcBombf_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x000000F0; // type:object size:0x30
__vt__26sFStateFct_c<10dAcBombf_c> = .data:0x00000120; // type:object size:0x18
__vt__23sFState_c<10dAcBombf_c> = .data:0x00000138; // type:object size:0x58
lbl_17_data_190 = .data:0x00000190; // type:object size:0x34
lbl_17_data_1C4 = .data:0x000001C4; // type:object size:0x8
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+35 -3
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+9 -7
View File
@@ -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
View File
@@ -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
View File
@@ -2,18 +2,40 @@
#define D_A_BOMBF_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_bomb.h"
#include "d/col/c/c_bg_s_poly_info.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/time_area_mgr.h"
class dAcBombf_c : public dAcObjBase_c {
public:
dAcBombf_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcBombf_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int actorExecute() override;
virtual int draw() override;
virtual int doDelete() override;
virtual int actorCreate() override;
virtual int actorPostCreate() override;
STATE_FUNC_DECLARE(dAcBombf_c, Wait);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcBombf_c);
void regrowBomb();
/* 0x330 */ m3d::smdl_c mModel;
/* 0x34C */ STATE_MGR_DECLARE(dAcBombf_c);
/* 0x388 */ dAcRef_c<dAcBomb_c> mBombRef;
/* 0x394 */ UNKWORD field_0x394;
/* 0x398 */ cBgS_PolyInfo field_0x398;
/* 0x3C4 */ TimeAreaStruct mTimeAreaStruct;
/* 0x3D0 */ bool field_0x3D0;
/* 0x3D1 */ u8 mDespawnSceneFlag;
/* 0x3D2 */ u8 field_0x3D2;
/* 0x3D3 */ u8 field_0x3D3;
/* 0x3D4 */ u8 field_0x3D4;
};
#endif
+3 -2
View File
@@ -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;
+60
View File
@@ -0,0 +1,60 @@
#ifndef D_A_OBJ_ARROW_H
#define D_A_OBJ_ARROW_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_bg_s_poly_info.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateID.hpp"
#include "toBeSorted/effects_struct.h"
class dAcArrow_c : public dAcObjBase_c {
public:
dAcArrow_c() : mPolyInfo(), mStateMgr(*this, sStateID::null) {}
virtual ~dAcArrow_c();
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
STATE_FUNC_DECLARE(dAcArrow_c, Wait);
STATE_FUNC_DECLARE(dAcArrow_c, Move);
STATE_FUNC_DECLARE(dAcArrow_c, ActorStop);
STATE_FUNC_DECLARE(dAcArrow_c, BgStop);
STATE_FUNC_DECLARE(dAcArrow_c, Bound);
void hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB);
public:
static cCcD_SrcGObj sCcSrcInf;
static dCcD_SrcCps sCc1;
static const dCcD_SrcSph sCc2;
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mModel;
/* 0x350 */ dAcRef_c<dAcObjBase_c> mRef1;
/* 0x35C */ dCcD_Cps mCcCps;
/* 0x4CC */ dCcD_Sph mCcSph;
/* 0x61C */ cBgS_PolyInfo mPolyInfo; // ??
/* 0x648 */ EffectsStruct mEffects;
/* 0x67C */ u32 field_0x67C;
/* 0x680 */ u8 mSubType;
/* 0x681 */ u8 field_0x681;
/* 0x682 */ u8 mDespawnTimer;
/* 0x684 */ s16 field_0x684;
/* 0x686 */ u8 field_0x686[0x688 - 0x686];
/* 0x688 */ u16 field_0x688;
/* 0x68A */ u16 field_0x68A;
/* 0x68C */ u8 field_0x68C[0x6A8 - 0x68C];
/* 0x6A8 */ f32 field_0x6A8;
/* 0x6AC */ u8 field_0x6AC[0x6F8 - 0x6AC];
/* 0x6F8 */ dAcRef_c<dAcObjBase_c> mRef2;
/* 0x704 */ STATE_MGR_DECLARE(dAcArrow_c);
};
#endif
+11 -2
View File
@@ -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);
};
+2
View File
@@ -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
+3 -3
View File
@@ -2,7 +2,7 @@
#define D_A_O_SPIKE_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "m/m_vec.h"
#include "nw4r/g3d/g3d_resfile.h"
@@ -25,11 +25,11 @@ public:
static const mVec3_c sVec2;
private:
static dCcD_SrcAabb sCcSrc;
static dCcD_SrcUnk sCcSrc;
nw4r::g3d::ResFile mResFile;
m3d::smdl_c mMdl;
dCcD_Aabb mCollision;
dCcD_Unk mCollision;
STATE_MGR_DECLARE(dAcOspike_c);
};
+1 -1
View File
@@ -3,7 +3,7 @@
#include "c/c_math.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/g3d_resfile.h"
#include "s/s_State.hpp"
+20 -1
View File
@@ -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
+1 -1
View File
@@ -3,7 +3,7 @@
#include "c/c_math.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_anmtexsrt.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
+73 -3
View File
@@ -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
+12
View File
@@ -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 &);
+4
View File
@@ -488,6 +488,10 @@ public:
return mFlags & GROUND_HIT;
}
dBgS_GndChk &GetGnd() {
return mGnd;
}
public:
/* 0x040 */ u32 mFlags;
/* 0x044 */ mVec3_c *mpPos;
+1
View File
@@ -2,6 +2,7 @@
#define C_BG_S_POLY_INFO_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_bg_w.h"
#include "d/col/c/c_m3d_g_pla.h"
#include "m/m_vec.h"
+946
View File
@@ -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
View File
@@ -1,7 +1,20 @@
#ifndef C_CC_S_H
#define C_CC_S_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_cc_d.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
/**
* This still seems to be exist, but looks like was heavily revised.
* No more virtual functions
* a couple more entry arrays (a Matrix one and a model one)
*
* This file is largely here to support future changes?
* - dCcS copies and pastes the content. Otherwise the ctor is weird
*/
enum WeightType {
WeightType_0 = 0,
@@ -9,52 +22,53 @@ enum WeightType {
WeightType_2 = 2,
};
// class cCcS {
// public:
// /* 0x0000 */ cCcD_Obj *mpObjAt[0x100];
// /* 0x0400 */ cCcD_Obj *mpObjTg[0x300];
// /* 0x1000 */ cCcD_Obj *mpObjCo[0x100];
// /* 0x1400 */ cCcD_Obj *mpObj[0x500];
// /* 0x2800 */ u16 mObjAtCount;
// /* 0x2802 */ u16 mObjTgCount;
// /* 0x2804 */ u16 mObjCoCount;
// /* 0x2806 */ u16 mObjCount;
// /* 0x2808 */ cCcD_DivideArea mDivideArea;
// /* 0x2848 vtable */
class cCcS {
public:
/* 0x0000 */ cCcD_Obj *mpObjAt[0x200];
/* 0x0800 */ cCcD_Obj *mpObjTg[0x300];
/* 0x1400 */ cCcD_Obj *mpObjCo[0x200];
/* 0x1c00 */ cCcD_Obj *mpObj[0x340];
/* 0x2900 */ UNKTYPE *mpUnk[0x100];
/* 0x2D00 */ u16 mObjAtCount;
/* 0x2d02 */ u16 mObjTgCount;
/* 0x2D04 */ u16 mObjCoCount;
/* 0x2D06 */ u16 mObjCount;
/* 0x2D08 */ u32 mUnkCount;
/* 0x2D0C */ cCcD_DivideArea mDivideArea;
/* 0x2D4C */ bool mbAreaSet;
/* 0x2D50 */ mMtx_c mAreas[16][2]; // could be a structure?
/* 0x3350 */ int mAreaCount;
// /* 80264A6C */ cCcS();
// /* 80264A94 */ void Ct();
// /* 80264B60 */ void Dt();
// /* 80264B80 */ WeightType GetWt(u8) const;
// /* 80264BA8 */ void Set(cCcD_Obj *);
// /* 80264C5C */ void ClrCoHitInf();
// /* 80264CF0 */ void ClrTgHitInf();
// /* 80264D90 */ void ClrAtHitInf();
// /* 80264E2C */ bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
// /* 80264F40 */ void ChkAtTg();
// /* 8026515C */ bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
// /* 80265230 */ void ChkCo();
// /* 802653A0 vt[2] */ virtual void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *);
// /* 802653C8 */ void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *);
// /* 802655E4 */ void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// /* 80265750 vt[3]*/ virtual void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// /* 80265BB4 */ void CalcArea();
// /* 80265CCC */ void Move();
// /* 80265D30 */ void DrawClear();
// /* 80265DF8 vt[4] */ virtual void
// SetCoGObjInf(bool, bool, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *);
// /* 80265DFC vt[5] */ virtual void
// SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *,
// cCcD_GStts *, cCcD_GStts *, cXyz *);
// /* 80265E00 vt[6] */ virtual bool
// ChkNoHitGAtTg(cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_GStts *, cCcD_GStts *);
// /* 80265E08 vt[7] */ virtual bool
// ChkAtTgHitAfterCross(bool, bool, cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *,
// cCcD_GStts *);
// /* 80265E10 vt[8] */ virtual bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *);
// /* 80030BDC vt[9] */ virtual ~cCcS() {}
// /* 80265E18 vt[10] */ virtual void MoveAfterCheck();
// /* 80265DF4 vt[11] */ virtual void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *);
// }; // Size = 0x284C
cCcS() {}
void Ct();
void Dt();
void Set(cCcD_Obj *);
void ChkCo(mVec3_c *, dAcObjBase_c *);
bool fn_80357c90(mVec3_c *, mVec3_c *, u32, UNKTYPE *);
// WeightType GetWt(u8) const;
// void ClrCoHitInf();
// void ClrTgHitInf();
// void ClrAtHitInf();
// bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
// void ChkAtTg();
// bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
// void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *);
// void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *);
// void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// void CalcArea();
// void Move();
// void DrawClear();
// void SetCoGObjInf(bool, bool, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts
// *); void SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *,
// cCcD_Stts *, cCcD_GStts *, cCcD_GStts *, cXyz *); bool ChkNoHitGAtTg(cCcD_ObjInf const *, cCcD_ObjInf const *,
// cCcD_GStts *, cCcD_GStts *); bool ChkAtTgHitAfterCross(bool, bool, cCcD_ObjInf const *, cCcD_ObjInf const *,
// cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *); bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *); ~cCcS() {} void
// MoveAfterCheck(); void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *);
};
#endif /* C_CC_S_H */
+48 -42
View File
@@ -3,7 +3,8 @@
#include "common.h"
#include "math.h"
#include "nw4r/math.h"
#include "nw4r/math.h" // IWYU pragma: export
#include "nw4r/types_nw4r.h"
class cM3dGAab;
class cM3dGCps;
@@ -19,64 +20,69 @@ struct cM3d_Range;
extern const f32 G_CM3D_F_ABS_MIN;
bool cM3d_Len2dSqPntAndSegLine(f32, f32, f32, f32, f32, f32, f32 *, f32 *, f32 *);
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *, f32 *);
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla *, const nw4r::math::VEC3 *);
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, f32 *, f32 *);
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla &, const nw4r::math::VEC3 *);
void cM3d_CalcPla(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *);
int cM3d_Check_LinLin(const cM3dGLin *, const cM3dGLin *, f32 *, f32 *);
bool cM3d_Cross_LinPla(const cM3dGLin *, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool);
int cM3d_Check_LinLin(const cM3dGLin &, const cM3dGLin *, f32 *, f32 *);
bool cM3d_Cross_LinPla(const cM3dGLin &, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool);
bool cM3d_Cross_MinMaxBoxLine(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *);
bool cM3d_InclusionCheckPosIn3PosBox3d(
const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, f32
);
bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri_Front(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *);
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_LinTri(const cM3dGLin *, const cM3dGTri *, nw4r::math::VEC3 *, bool, bool);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *);
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_LinTri(const cM3dGLin &, const cM3dGTri &, nw4r::math::VEC3 *, bool, bool);
bool cM3d_Cross_LinTri(
const cM3dGLin *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const cM3dGPla *,
const cM3dGLin &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const cM3dGPla *,
nw4r::math::VEC3 *, bool, bool
);
bool cM3d_Cross_LinTri_Easy(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_Cross_SphPnt(const cM3dGSph *, const nw4r::math::VEC3 *);
bool cM3d_Cross_LinSph(const cM3dGLin *, const cM3dGSph *, nw4r::math::VEC3 *);
bool cM3d_Cross_SphPnt(const cM3dGSph &, const nw4r::math::VEC3 *);
bool cM3d_Cross_LinSph(const cM3dGLin &, const cM3dGSph &, nw4r::math::VEC3 *);
bool cM3d_Cross_LinSph_CrossPos(const cM3dGSph &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, f32 *);
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, nw4r::math::VEC3 *);
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *);
bool cM3d_Cross_SphTri(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, f32 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylTri(const cM3dGCyl *, const cM3dGTri *, nw4r::math::VEC3 *);
int cM3d_Cross_CylLin(const cM3dGCyl *, const cM3dGLin *, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
int cM3d_Cross_CylPntPnt(const cM3dGCyl *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylPnt(const cM3dGCyl *, const nw4r::math::VEC3 *);
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, f32 *);
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, nw4r::math::VEC3 *);
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *);
bool cM3d_Cross_SphTri(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, f32 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, nw4r::math::VEC3 *);
bool cM3d_Cross_CylTri(const cM3dGCyl &, const cM3dGTri &, nw4r::math::VEC3 *);
int cM3d_Cross_CylLin(const cM3dGCyl &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
int cM3d_Cross_CylPntPnt(const cM3dGCyl &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylPnt(const cM3dGCyl &, const nw4r::math::VEC3 &);
bool cM3d_Cross_CpsCps(const cM3dGCps &, const cM3dGCps &, nw4r::math::VEC3 *, f32 *, f32 *);
bool cM3d_Cross_CpsCyl(const cM3dGCps &, const cM3dGCyl &, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsSph_CrossPos(const cM3dGCps &, const cM3dGSph &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsSph(const cM3dGCps &, const cM3dGSph &, nw4r::math::VEC3 *);
bool cM3d_Cross_TriTri(const cM3dGTri &, const cM3dGTri &, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsTri(const cM3dGCps &, cM3dGTri, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsTri(const cM3dGCps &, const cM3dGTri &, nw4r::math::VEC3 *);
void cM3d_CalcVecZAngle(const nw4r::math::VEC3 &, mAng3_c *);
void cM3d_PlaneCrossLineProcWork(f32, f32, f32, f32, f32, f32, f32, f32 *, f32 *);
int cM3d_2PlaneCrossLine(const cM3dGPla &, const cM3dGPla &, cM3dGLin *);
bool cM3d_3PlaneCrossPos(const cM3dGPla &, const cM3dGPla &, const cM3dGPla &, nw4r::math::VEC3 *);
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *);
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
f32 cM3d_lineVsPosSuisenCross(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
bool fn_803354e0(cM3dGUnk *, cM3dGUnk *, nw4r::math::VEC3 *);
bool fn_80336110(cM3dGCyl *, cM3dGUnk *, nw4r::math::VEC3 *);
bool fn_803364e0(cM3dGCyl *, cM3dGUnk *, f32 *);
bool fn_80336d90(cM3dGCps *, cM3dGUnk *, nw4r::math::VEC3 *);
bool fn_80337690(cM3dGUnk *, cM3dGSph *, nw4r::math::VEC3 *);
bool fn_80337780(cM3dGUnk *, cM3dGSph *, f32 *);
bool cM3d_Cross_UnkTri(const cM3dGUnk &, cM3dGTri &, nw4r::math::VEC3 *);
bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, nw4r::math::VEC3 *);
bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, f32 *);
bool cM3d_Cross_CpsUnk(const cM3dGCps &, cM3dGUnk &, nw4r::math::VEC3 *);
bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, nw4r::math::VEC3 *);
bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, f32 *);
bool cM3d_Normalize(nw4r::math::VEC3 *);
void cM3d_Normalize_Ex(nw4r::math::VEC3 *);
inline bool cM3d_IsZero(f32 f) {
return fabsf(f) < G_CM3D_F_ABS_MIN;
@@ -89,9 +95,9 @@ inline bool cM3d_IsZero_inverted(f32 param_0) {
inline void
cM3d_InDivPos1(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) {
nw4r::math::VEC3 tmp;
VEC3Scale(&tmp, pVecB, pF);
VEC3Add(pOut, &tmp, pVecA);
nw4r::math::VEC3 tmp2;
VEC3Scale(&tmp2, pVecB, pF);
VEC3Add(pOut, &tmp2, pVecA);
}
inline void
cM3d_InDivPos2(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) {
+19 -2
View File
@@ -5,7 +5,7 @@
#include "d/col/c/c_m3d.h"
#include "d/col/c/c_m3d_g_lin.h"
#include "d/col/c/c_m3d_g_sph.h"
#include "m/m_vec.h"
// Axis aligned bounding box
class cM3dGAab {
@@ -23,7 +23,6 @@ public:
bool CrossY(const mVec3_c &) const;
bool UnderPlaneYUnder(f32) const;
bool TopPlaneYUnder(f32) const;
void SetMinMax(const cM3dGAab &);
void SetMin(const mVec3_c &min);
void SetMax(const mVec3_c &max);
void CalcCenter(mVec3_c &) const;
@@ -32,6 +31,11 @@ public:
void Set(const cM3dGSph &);
bool Cross(const mVec3_c &) const;
void SetMinMax(const cM3dGAab &aab) {
SetMin(aab.mMin);
SetMax(aab.mMax);
}
void SetMinMax(const mVec3_c &minMax) {
SetMin(minMax);
SetMax(minMax);
@@ -46,6 +50,19 @@ public:
mMax.x = -1000000000.0f;
}
const mVec3_c &GetMax() const {
return mMax;
}
mVec3_c &GetMax() {
return mMax;
}
const mVec3_c &GetMin() const {
return mMin;
}
mVec3_c &GetMin() {
return mMin;
}
const mVec3_c *GetMaxP(void) const {
return &mMax;
}
+1 -1
View File
@@ -18,7 +18,7 @@ public:
void Set(const mVec3_c &, const mVec3_c &, f32);
void SetR(f32 r);
void Set_0x1C(f32);
bool fn_80337f30(cM3dGUnk *, mVec3_c *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool fn_80337f40(const mVec3_c &) const;
f32 GetR() const {
+11 -2
View File
@@ -17,14 +17,23 @@ public:
void SetH(f32);
void SetR(f32);
bool fn_803380e0(cM3dGUnk *, mVec3_c *);
bool fn_803380f0(cM3dGUnk *, f32 *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool Cross(cM3dGUnk &, f32 *);
bool Cross(const mVec3_c &) const;
void Clamp(const mVec3_c &, mVec3_c &) const;
const mVec3_c &GetC() const {
return mCenter;
}
mVec3_c &GetC() {
return mCenter;
}
f32 GetH() const {
return mHeight;
}
f32 GetR() const {
return mRadius;
}
};
#endif
+12 -10
View File
@@ -3,14 +3,16 @@
#include "common.h"
#include "m/m_vec.h"
#include "nw4r/types_nw4r.h"
class cM3dGLin {
public:
typedef nw4r::math::VEC3 VEC3;
typedef EGG::Vector3f Vector3f;
/* 0x00 */ mVec3_c mStart;
/* 0x0C */ mVec3_c mEnd;
// Needs to be mutable for cCcD_CpsAttr::GetPos and cCcD_CpsAttr::GetShapeAccess
/* 0x00 */ mutable mVec3_c mStart;
/* 0x0C */ mutable mVec3_c mEnd;
cM3dGLin() {}
@@ -32,34 +34,34 @@ public:
mEnd = *pEnd;
}
nw4r::math::VEC3 &GetStart() {
mVec3_c &GetStart() {
return mStart;
}
const nw4r::math::VEC3 &GetStart() const {
const mVec3_c &GetStart() const {
return mStart;
}
nw4r::math::VEC3 *GetStartP(void) {
mVec3_c *GetStartP(void) {
return &mStart;
}
const nw4r::math::VEC3 *GetStartP(void) const {
const mVec3_c *GetStartP(void) const {
return &mStart;
}
nw4r::math::VEC3 &GetEnd() {
mVec3_c &GetEnd() {
return mEnd;
}
const nw4r::math::VEC3 &GetEnd() const {
const mVec3_c &GetEnd() const {
return mEnd;
}
nw4r::math::VEC3 *GetEndP(void) {
mVec3_c *GetEndP(void) {
return &mEnd;
}
const nw4r::math::VEC3 *GetEndP(void) const {
const mVec3_c *GetEndP(void) const {
return &mEnd;
}
};
+11 -4
View File
@@ -3,6 +3,7 @@
#include "c/c_math.h"
#include "d/col/c/c_m3d.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
// Plane with a normal
@@ -36,6 +37,12 @@ public:
const mVec3_c *GetNP() const {
return &mNormal;
}
mVec3_c &GetN() {
return mNormal;
}
const mVec3_c &GetN() const {
return mNormal;
}
f32 GetD() const {
return mD;
}
@@ -46,13 +53,13 @@ public:
return ((-mNormal.x * param_1->x - mNormal.z * param_1->z) - mD) / mNormal.y;
}
s32 GetAngleY() const {
return cM::atan2s(mNormal.x, mNormal.z);
}
f32 GetXZDist() const {
return EGG::Math<f32>::sqrt(mNormal.x * mNormal.x + mNormal.z * mNormal.z);
}
s32 GetAngleY() const {
return mAng(cM::atan2s(mNormal.x, mNormal.z));
}
};
#endif
+9 -2
View File
@@ -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;
+13 -2
View File
@@ -3,6 +3,7 @@
#include "common.h"
#include "d/col/c/c_m3d_g_pla.h"
#include "m/m_vec.h"
class cM3dGTri : public cM3dGPla {
typedef nw4r::math::VEC3 VecType;
@@ -12,13 +13,23 @@ public:
/* 0x1C */ VecType mB;
/* 0x28 */ VecType mC;
const mVec3_c &GetPntA() const {
return *(mVec3_c *)&mA;
}
const mVec3_c &GetPntB() const {
return *(mVec3_c *)&mB;
}
const mVec3_c &GetPntC() const {
return *(mVec3_c *)&mC;
}
cM3dGTri() {}
void SetPos(const VecType *, const VecType *, const VecType *);
void SetBg(const VecType *, const VecType *, const VecType *, const cM3dGPla *pla);
bool cross(const cM3dGLin *lin, VecType *xyz, bool param_2, bool param_3) const {
return cM3d_Cross_LinTri(lin, this, xyz, param_2, param_3);
bool cross(const cM3dGLin &lin, VecType *xyz, bool param_2, bool param_3) const {
return cM3d_Cross_LinTri(lin, *this, xyz, param_2, param_3);
}
};
+10 -10
View File
@@ -2,10 +2,11 @@
#define C_M3D_G_UNK_H
#include "common.h"
#include "d/col/c/c_m3d.h"
#include "d/col/c/c_m3d_g_lin.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
struct cM3dGCps;
struct cM3dGCyl;
struct cM3dGSph;
@@ -16,8 +17,7 @@ public:
/* 0x30 */ mMtx_c mInvMtx;
/* 0x60 */ mVec3_c mMin;
/* 0x6C */ mVec3_c mMax;
/* 0x78 */ mVec3_c mField_0x78;
/* 0x84 */ mVec3_c mField_0x84;
/* 0x78 */ cM3dGLin mLin;
/* 0x90 */ mVec3_c mField_0x90;
/* 0x9C */ mVec3_c mField_0x9C;
/* 0xA8 */ mVec3_c mField_0xA8;
@@ -34,13 +34,13 @@ public:
void Update();
void GetStartEnd(mVec3_c &, mVec3_c &);
void fn_80338c30(cM3dGCps *, mVec3_c *);
bool fn_80338c40(cM3dGUnk *, mVec3_c *);
bool fn_80338ca0(/* TODO */);
bool fn_80338cb0(cM3dGCyl *, mVec3_c *);
bool fn_80338cc0(cM3dGCyl *, f32 *);
bool fn_80338cd0(cM3dGSph *, mVec3_c *);
bool fn_80338ce0(cM3dGSph *, f32 *);
bool Cross(cM3dGCps &, mVec3_c *);
bool Cross(cM3dGTri &, mVec3_c *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool Cross(cM3dGCyl &, mVec3_c *);
bool Cross(cM3dGCyl &, f32 *);
bool Cross(cM3dGSph &, mVec3_c *);
bool Cross(cM3dGSph &, f32 *);
void Set(const mMtx_c &);
void Set(const mVec3_c &, const mAng &);
+59 -487
View File
@@ -1,517 +1,89 @@
#ifndef D_CC_D_H
#define D_CC_D_H
#include "d/a/d_a_base.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/col/c/c_m3d_g_cps.h"
#include "d/col/c/c_m3d_g_cyl.h"
#include "d/col/c/c_m3d_g_sph.h"
#include "d/col/c/c_m3d_g_unk.h"
#include "f/f_base_id.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d.h"
#include "m/m_vec.h"
// Largely modeled off
// https://github.com/zeldaret/tp/blob/main/include/SSystem/SComponent/c_cc_d.h
// https://github.com/zeldaret/tp/blob/main/include/d/cc/d_cc_d.h
// - the SComponent/d split seems to not exist anymore in SS, so we'll just
// go with the d names for this merger of the two
struct dCcD_SrcCps {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x44 */ cCcD_SrcCpsAttr mCpsInf;
};
class dCcD_DivideInfo {
private:
/* 0x00 */ u32 mXDivInfo;
/* 0x04 */ u32 mYDivInfo;
/* 0x08 */ u32 mZDivInfo;
/* 0x0C vtable */
// Capsule
class dCcD_Cps : public cCcD_Obj, public cCcD_CpsAttr {
public:
/* 80328120 */ dCcD_DivideInfo();
/* 80328130 */ virtual ~dCcD_DivideInfo();
// void Set(u32, u32, u32);
// bool Chk(dCcD_DivideInfo const &) const;
}; // Size = 0x10
dCcD_Cps();
virtual ~dCcD_Cps();
class dCcD_DivideArea : public cM3dGAab {
private:
/* 0x18 */ bool mXDiffIsZero;
/* 0x1C */ f32 mScaledXDiff;
/* 0x20 */ f32 mInvScaledXDiff;
/* 0x24 */ bool mYDiffIsZero;
/* 0x28 */ f32 mScaledYDiff;
/* 0x2C */ f32 mInvScaledYDiff;
/* 0x30 */ bool mZDiffIsZero;
/* 0x34 */ f32 mScaledZDiff;
/* 0x38 */ f32 mInvScaledZDiff;
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcCps &src);
void unknownCalc();
};
struct dCcD_SrcTri {
/* 0x00 */ cCcD_SrcGObj mObjInf;
};
class dCcD_Tri : public cCcD_Obj, public cCcD_TriAttr {
public:
/* vt at 0x3C */
dCcD_DivideArea();
virtual ~dCcD_DivideArea();
/* 803281c0 */ void SetArea(cM3dGAab const &);
/* 803282d0 */ void CalcDivideInfo(dCcD_DivideInfo *, cM3dGAab const &, u32);
/* 80328470 */ void CalcDivideInfoOverArea(dCcD_DivideInfo *, cM3dGAab const &);
}; // Size = 0x40
dCcD_Tri();
virtual ~dCcD_Tri();
class dCcD_GAtTgCoCommonBase {
protected:
/* 0x00 */ u32 field_0x00;
/* 0x04 */ s8 mEffCounter;
/* 0x08 */ dAcRef_c<dAcBase_c> mActor;
/* 0x14 */ u32 field_0x14;
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcTri &src);
};
struct dCcD_SrcCyl {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcCylAttr mCylInf;
};
// Cylinder
class dCcD_Cyl : public cCcD_Obj, public cCcD_CylAttr {
public:
dCcD_GAtTgCoCommonBase();
virtual ~dCcD_GAtTgCoCommonBase();
dCcD_Cyl();
virtual ~dCcD_Cyl();
void resetEffCounter() {
mEffCounter = 0;
}
void resetField0x14() {
field_0x14 = 0;
}
u32 getField0x14() {
return field_0x14;
}
void decreaseCount();
void unlink();
dAcBase_c *getActor();
void setActor(dAcBase_c *);
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcCyl &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
};
struct dCcD_SrcGAtTgCoCommonBase {
/* 0x0 */ u32 mGFlag;
}; // Size: 0x4
struct dCcD_SrcGObjAt {
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
/* 0x04 */ u32 field_0x04;
/* 0x08 */ u32 field_0x08;
/* 0x0C */ u8 mSe; // Sound Effect ID
/* 0x0D */ u8 mHitMark; // Hit Mark particle ID
/* 0x0E */ u8 mSpl;
/* 0x0F */ u8 mMtrl;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ s16 field_0x12;
struct dCcD_SrcSph {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcSphAttr mSphInf;
};
struct dCcD_SrcGObjTg {
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
/* 0x04 */ u32 field_0x04;
/* 0x08 */ u16 field_0x08;
/* 0x10 */ u16 field_0x0A;
/* 0x0C */ u16 field_0x0C;
/* 0x0E */ u16 field_0x0E;
};
struct dCcD_SrcGObjCo {
/* 0x0 */ dCcD_SrcGAtTgCoCommonBase mBase;
};
struct dCcD_SrcGObjInf {
/* 0x00 */ dCcD_SrcGObjAt mGObjAt;
/* 0x14 */ dCcD_SrcGObjTg mGObjTg;
/* 0x24 */ dCcD_SrcGObjCo mGObjCo;
};
class dCcD_GObjAt : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjAt mSrc;
/* 0x30 */ mVec3_c mHitPos;
/* 0x3C */ mVec3_c mVec;
/* 0x48 */ mVec3_c mRVec;
/* 0x54 */ u8 field_0x4C[0x58 - 0x54];
/* 0x58 */ u32 field_0x58;
// Sphere
class dCcD_Sph : public cCcD_Obj, public cCcD_SphAttr {
public:
dCcD_GObjAt();
virtual ~dCcD_GObjAt();
dCcD_Sph();
virtual ~dCcD_Sph();
void clearFlag() {
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
}
mVec3_c *GetHitPosP() {
return &mHitPos;
}
void SetSomeVec(const mVec3_c &p) {
mVec = p;
}
mVec3_c *GetSomeVec() {
return &mVec;
}
void init(const dCcD_SrcGObjAt *);
void setSomeAtFlags(u32 flags);
void adjustHitPos(f32 dx, f32 dz);
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcSph &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
};
class dCcD_GObjTg : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjTg mSrc;
/* 0x2C */ u8 field_0x2C[0x38 - 0x2C];
/* 0x38 */ mVec3_c mHitPos;
/* 0x44 */ u32 field_0x44;
/* 0x48 */ u16 field_0x48;
/* 0x4A */ u8 field_0x4A;
/* 0x4B */ u8 field_0x4B;
/* 0x4C */ u32 field_0x4C;
/* 0x50 */ u32 field_0x50;
/* 0x54 */ u32 field_0x54;
/* 0x58 */ u32 field_0x58;
/* 0x5C */ u8 field_0x5C[0x6C - 0x5C];
/* 0x6C */ mVec3_c field_0x6C;
/* 0x78 */ u32 field_0x78;
public:
dCcD_GObjTg();
virtual ~dCcD_GObjTg();
void clearFlag() {
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
}
void setFlag(u32 f) {
mSrc.field_0x04 |= f;
}
void set0x4C(u32 val) {
field_0x4C = val;
}
void setSrcFlag(u32 flag) {
mSrc.base.mGFlag = flag;
}
void setSrc0x0A(u32 flag) {
mSrc.field_0x0A = flag;
}
u32 get0x58() {
return field_0x58;
}
void init(const dCcD_SrcGObjTg *);
void adjustHitPos(f32 dx, f32 dz);
struct dCcD_SrcUnk {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcUnkAttr mUnkInf;
};
class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjCo mSrc;
/* 0x20 */ u32 field_0x20;
/* 0x24 */ u16 field_0x24;
/* 0x28 */ u32 field_0x28;
class dCcD_Unk : public cCcD_Obj, public cCcD_UnkAttr {
public:
dCcD_GObjCo();
virtual ~dCcD_GObjCo();
void clearFlag() {
mSrc.mBase.mGFlag = mSrc.mBase.mGFlag & 0xFFFFFFFE;
}
void setFlag(u32 f) {
mSrc.mBase.mGFlag |= f;
}
void init(const dCcD_SrcGObjCo *);
void setSomeAtFlags(u32 flags);
void adjustHitPos(f32 dx, f32 dz);
dCcD_Unk();
virtual ~dCcD_Unk();
void SetGFlag(u32 flag) {
mSrc.mBase.mGFlag = flag;
}
};
virtual cCcD_ShapeAttr *GetShapeAttr() override;
class dCcD_ShapeAttr {
public:
/* 0x00 */ u8 UNK_0x00[0x18 - 0x00];
/* 0x18 */ dCcD_DivideInfo field_0x18;
dCcD_ShapeAttr();
/* vt 0x08 */ virtual ~dCcD_ShapeAttr();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C();
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10();
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() = 0;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() = 0;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() = 0;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() = 0;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() = 0;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28(); // 0x80329110
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() = 0;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() = 0;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() = 0;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() = 0;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() = 0;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter(); // 0x80329120
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() = 0;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() = 0;
/* vt 0x4C */ virtual void getShapeAccess(); // 0x80329090
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() = 0;
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54(); // 0x803290F0
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() = 0;
static mVec3_c m_virtual_center;
};
// This is in dAcObjBase_c @ 0x1c0
struct UnkCCDStruct {
u32 field_0x00;
u32 field_0x04;
u32 field_0x08;
u32 field_0x0C;
/* 0x10 */ mVec3_c field_0x10;
/* 0x1C */ mVec3_c field_0x1C;
/* 0x28 */ mVec3_c posIncrements;
dAcBase_c *field_0x34;
s32 field_0x38;
UnkCCDStruct(dAcBase_c *);
void postExecute();
void reset();
fBaseID_e getId();
u32 getSomething(int);
void setField0x38ToMagicValue() {
field_0x38 = 0xD;
}
void setField0x38(s32 val) {
field_0x38 = val;
}
};
// Object Info
class dCcD_GObjInf {
protected:
/* 0x000 */ dCcD_GObjAt mGObjAt;
/* 0x05C */ dCcD_GObjTg mGObjTg;
/* 0x0D8 */ dCcD_GObjCo mGObjCo;
/* 0x104 */ UnkCCDStruct *field_0x104;
/* 0x108 */ u32 field_0x108;
public:
dCcD_GObjInf();
/* vt 0x08 */ virtual ~dCcD_GObjInf();
/* vt 0x0C */ virtual void *dCcD_GObjInf_0x0C() = 0;
/* vt 0x10 */ virtual void dCcD_GObjInf_0x10(); // 0x80328d30
void clear();
void init(const dCcD_SrcGObjInf &src);
static bool weirdConditionCheck(dAcBase_c *ac, u32);
inline void initUnk(UnkCCDStruct &src) {
field_0x104 = &src;
}
inline void clearCoFlag() {
mGObjCo.clearFlag();
}
void setTgCoFlag(u32 f) {
mGObjTg.setFlag(f);
mGObjCo.setFlag(f);
}
inline void setSomeDefendValue(u32 val) {
mGObjTg.set0x4C(val);
}
inline void setAtVec(const mVec3_c &p) {
mGObjAt.SetSomeVec(p);
}
inline void setTgFlag(u32 flag) {
mGObjTg.setSrcFlag(flag);
}
inline mVec3_c *getAtVec() {
return mGObjAt.GetSomeVec();
}
bool someInteractCheck() {
return ((mGObjTg.getField0x14() & 1) != 0 && mGObjTg.getActor() != nullptr);
}
void setTgField0x0A(u32 val) {
mGObjTg.setSrc0x0A(val);
}
void ResetAtHit();
void ResetTgHit();
void ResetCoHit();
mVec3_c *GetAtHitPosP();
mVec3_c *GetAtHitPosP2();
dAcBase_c *GetAtActor();
bool CheckCollidedMask(u32 mask);
dAcBase_c *GetTgActor();
dAcBase_c *GetCoActor();
void adjustHitPos(f32 dx, f32 dz);
};
struct dCcD_SrcCylAttr {
public:
/* 0x00 */ f32 mRadius;
/* 0x04 */ f32 mHeight;
}; // Size = 0x8
struct dCcD_SrcSphAttr {
/* 0x00 */ f32 mRadius;
}; // Size = 0x4
struct dCcD_SrcAabbAttr {
/* 0x00 */ f32 minX, minY, minZ, maxX, maxY, maxZ;
}; // Size = 0x18
struct dCcD_SrcUnk1Attr {};
class cM3dGUnk1 {
public:
/* 0x00 */ cM3dGCps mCps;
/* 0x28 */ mVec3_c mVirtualCenter;
cM3dGUnk1();
};
class cM3dGUnk2 {
public:
};
// Unk1
class dCcD_ShapeAttr1 : public dCcD_ShapeAttr, public cM3dGUnk1 {
public:
dCcD_ShapeAttr1();
void init(const dCcD_SrcUnk1Attr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr1();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Unk1
class dCcD_ShapeAttr2 : public dCcD_ShapeAttr, public cM3dGUnk2 {
public:
dCcD_ShapeAttr2();
/* vt 0x08 */ virtual ~dCcD_ShapeAttr2();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
// /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Aabb
class dCcD_ShapeAttr5 : public dCcD_ShapeAttr, public cM3dGUnk {
public:
dCcD_ShapeAttr5();
void init(const dCcD_SrcAabbAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr5();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
// /* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Cyl
class dCcD_ShapeAttr3 : public dCcD_ShapeAttr, public cM3dGCyl {
public:
dCcD_ShapeAttr3();
void init(const dCcD_SrcCylAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr3();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Sph
class dCcD_ShapeAttr4 : public dCcD_ShapeAttr, public cM3dGSph {
public:
dCcD_ShapeAttr4();
void init(const dCcD_SrcSphAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr4();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
void Set(const dCcD_SrcUnk &src);
};
#endif
+104
View File
@@ -0,0 +1,104 @@
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_cc_d.h"
#include "m/m_vec.h"
typedef void (*dCcMassS_ObjCallback)(dAcObjBase_c *, mVec3_c *, u32);
class dCcMassS_Obj {
private:
/* 0x00 */ cCcD_Obj *mpObj;
/* 0x04 */ u8 mPriority;
/* 0x08 */ dCcMassS_ObjCallback mpCallback;
/* 0x0C */ cCcD_DivideInfo mDivideInfo;
/* 0x1C vtable*/
public:
dCcMassS_Obj();
virtual ~dCcMassS_Obj();
void Set(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback);
void Clear();
cCcD_Obj *GetObj() {
return mpObj;
}
u8 GetPriority() const {
return mPriority;
}
dCcMassS_ObjCallback GetCallback() const {
return mpCallback;
}
cCcD_DivideInfo &GetDivideInfo() {
return mDivideInfo;
}
};
class dCcMassS_HitInf {
private:
/* 0x00 */ cCcD_Obj *mpArea;
/* 0x04 */ cCcD_Obj *mpAtObj;
/* 0x08 */ cCcD_Obj *mpCoObj;
/* 0x0C */ f32 mCoHitLen;
/* 0x10 vtable */
public:
dCcMassS_HitInf();
virtual ~dCcMassS_HitInf();
void ClearPointer();
void SetAreaHitObj(cCcD_Obj *obj) {
mpArea = obj;
}
void SetCoHitObj(cCcD_Obj *obj) {
mpCoObj = obj;
}
void SetAtHitObj(cCcD_Obj *obj) {
mpAtObj = obj;
}
void SetCoHitLen(f32 len) {
mCoHitLen = len;
}
cCcD_Obj *GetAtHitObj() const {
return mpAtObj;
}
};
class dCcMassS_Mng {
public:
/* 0x0000 */ cCcD_DivideArea mDivideArea;
/* 0x0040 */ s32 mMassObjCount;
/* 0x0044 */ dCcMassS_Obj mMassObjs[20];
/* 0x02C4 */ s32 mMassAreaCount;
/* 0x02C8 */ dCcMassS_Obj mMassAreas[5];
/* 0x0368 */ cCcD_CylAttr mCylAttr;
/* 0x03A8 */ u8 field_0x3A8;
/* 0x03A9 */ u8 field_0x3A9;
/* 0x03AA */ u8 field_0x3AA;
/* 0x03AB */ u8 mResultCam;
/* 0x03AC */ Vec mCamTopPos;
/* 0x03B8 */ f32 mCamTopDist;
/* 0x03BC */ Vec mCamBottomPos;
/* 0x03C8 */ f32 mCamBottomDist;
/* 0x03CC */ cCcD_CpsAttr mCpsAttr;
/* 0x042C */ cCcD_DivideInfo mDivideInfo;
/* 0x043C vtable */
public:
dCcMassS_Mng();
virtual ~dCcMassS_Mng();
void Ct();
void SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3);
void Prepare();
u32 Chk(mVec3_c *p_xyz, dAcObjBase_c **p_actor, dCcMassS_HitInf *p_hitInf);
void Clear();
// Not original names, but made distinct for clarity (original was just one `Set)
void SetObj(cCcD_Obj *p_obj, u8 priority);
void SetArea(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback);
// void SetCam(cM3dGCps const &cps);
// u8 GetResultCam() const;
// void GetCamTopPos(Vec *p_out);
};
-13
View File
@@ -1,13 +0,0 @@
#ifndef TOSORT_D_CC_MGR_H
#define TOSORT_D_CC_MGR_H
#include "d/col/cc/d_cc_d.h"
class ColliderManager {
public:
static ColliderManager *getColliderManager();
void addCollider(dCcD_GObjInf *collider);
};
#endif
+78
View File
@@ -0,0 +1,78 @@
#include "common.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_mass_s.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
struct mMtxPair {
mMtx_c mMtx;
mMtx_c mInv;
};
class dCcS {
private:
/* 0x0000 */ cCcD_Obj *mpObjAt[0x200];
/* 0x0800 */ cCcD_Obj *mpObjTg[0x300];
/* 0x1400 */ cCcD_Obj *mpObjCo[0x200];
/* 0x1c00 */ cCcD_Obj *mpObj[0x340];
/* 0x2900 */ UNKTYPE *mpUnk[0x100];
/* 0x2D00 */ u16 mObjAtCount;
/* 0x2d02 */ u16 mObjTgCount;
/* 0x2D04 */ u16 mObjCoCount;
/* 0x2D06 */ u16 mObjCount;
/* 0x2D08 */ u32 mUnkCount;
/* 0x2D0C */ cCcD_DivideArea mDivideArea;
/* 0x2D4C */ bool mbAreaSet;
/* 0x2D50 */ mMtxPair mAreas[16]; // could be a structure?
/* 0x3350 */ int mAreaCount;
/* 0x3354*/ dCcMassS_Mng mMassMng;
public:
dCcS();
virtual ~dCcS();
// This is a remnant of cCcS, which dCcS::Ct calls. Idk the correct layout
void Ct_cCcS();
void Ct();
void Dt();
static bool ChkRemoveActor(dAcObjBase_c *pActor);
static bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
static bool ChkAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *);
void ChkAtTg();
static bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
static void SetCoCommonHitInf(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32);
void ChkCo();
static bool ChkSheildFrontRange(cCcD_Obj *, cCcD_Obj *);
static bool ChkShield(cCcD_Obj *, cCcD_Obj *, cCcD_ShieldChkCallback *);
static bool ChkAtTgHitAfterCross(bool, bool, cCcD_Obj *, cCcD_Obj *);
static void SetCoObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *);
static void SetPosCorrect(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32);
static void CalcParticleAngle(cCcD_Obj *, cCcD_Obj *, mAng3_c *, bool);
static void fn_80356fd0(mVec3_c *, cCcD_Obj *, cCcD_Obj *);
static u32 ProcAtTgHitmark(cCcD_Obj *, cCcD_Obj *, mVec3_c *, u32, mVec3_c *);
static void SetAtTgObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, mVec3_c *, bool);
bool ChkCamera(mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32);
bool
ChkCameraPoint(const mVec3_c &, const mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32);
bool ChkCo(const mVec3_c &, dAcObjBase_c *);
bool fn_80357c90(const mVec3_c &, const mVec3_c &, u32, UNKTYPE **);
void Set(cCcD_Obj *);
void MoveAfterCheck();
void RemoveDeadObj();
void CalcArea();
void Move();
void MassClear();
void SetArea(mMtx_c *);
void ClearArea();
void AdjustHitPos();
static dCcS *GetInstance();
static dCcS *sInstance;
};
-89
View File
@@ -1,89 +0,0 @@
#ifndef D_CC_SHAPE_COLLIDERS_H
#define D_CC_SHAPE_COLLIDERS_H
#include "d/col/cc/d_cc_d.h"
#include "m/m_vec.h"
struct dCcD_SrcUnk {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x44 */ dCcD_SrcUnk1Attr mUnk1Inf;
}; // Size: ???
class dCcD_Unk1 : public dCcD_GObjInf, public dCcD_ShapeAttr1 {
public:
dCcD_Unk1();
virtual ~dCcD_Unk1();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcUnk &src);
void unknownCalc();
};
struct dCcD_SrcEmpty {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
}; // Size: 0x40
// Not sure what this is, the init function
// doesn't call the shape initializer
class dCcD_Empty : public dCcD_GObjInf, public dCcD_ShapeAttr2 {
public:
dCcD_Empty();
virtual ~dCcD_Empty();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcEmpty &src);
};
struct dCcD_SrcCyl {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x40 */ dCcD_SrcCylAttr mCylAttr;
}; // Size: 0x44
// Cylinder
class dCcD_Cyl : public dCcD_GObjInf, public dCcD_ShapeAttr3 {
public:
dCcD_Cyl();
virtual ~dCcD_Cyl();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcCyl &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
};
struct dCcD_SrcSph {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x40 */ dCcD_SrcSphAttr mSphAttr;
}; // Size: 0x44
// Sphere
class dCcD_Sph : public dCcD_GObjInf, public dCcD_ShapeAttr4 {
public:
dCcD_Sph();
virtual ~dCcD_Sph();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcSph &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
};
struct dCcD_SrcAabb {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x40 */ dCcD_SrcAabbAttr mAabbAttr;
}; // Size: 0x58
class dCcD_Aabb : public dCcD_GObjInf, public dCcD_ShapeAttr5 {
public:
dCcD_Aabb();
virtual ~dCcD_Aabb();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcAabb &src);
};
#endif
+9
View File
@@ -0,0 +1,9 @@
#include "m/m3d/m_shadow.h"
// This is unofficial, idk if this is close, but this is a common shadow extension.
//
class dShadowCircle_c : public m3d::mShadowCircle_c {
public:
dShadowCircle_c() {}
virtual ~dShadowCircle_c() {}
};
+148
View File
@@ -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
+118
View File
@@ -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
+4
View File
@@ -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;
+3 -1
View File
@@ -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();
+13 -3
View File
@@ -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
+53 -4
View File
@@ -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 -2
View File
@@ -2,7 +2,7 @@
#define D_T_REACTION_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/dowsing_target.h"
@@ -36,7 +36,7 @@ private:
return params & 0xFF;
}
int getParam0x08() {
u32 getParam0x08() {
return (params >> 8) & 0xFF;
}
+2 -4
View File
@@ -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;
};
+1
View File
@@ -2,6 +2,7 @@
#define EGG_MATH_H
#include "common.h"
#include "math.h"
namespace EGG {
-1
View File
@@ -5,7 +5,6 @@
#include "egg/math/eggQuat.h"
#include "egg/math/eggVector.h"
namespace EGG {
struct Matrix34f {
+21 -30
View File
@@ -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;
};
+8 -3
View File
@@ -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;
+5
View File
@@ -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
+5
View File
@@ -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
+5
View File
@@ -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
+5
View File
@@ -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
+6
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+6
View File
@@ -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
View File
@@ -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;
+4
View File
@@ -84,6 +84,10 @@ public:
mAlpha = value;
}
u8 GetGlobalAlpha() const {
return mGlbAlpha;
}
const Size &GetSize() const {
return mSize;
}
+1
View File
@@ -1,5 +1,6 @@
#ifndef NW4R_MATH_ARITHMETIC_H
#define NW4R_MATH_ARITHMETIC_H
#include "math.h"
#include "nw4r/types_nw4r.h" // IWYU pragma: export
#include "rvl/OS.h" // IWYU pragma: export
-189
View File
@@ -1,189 +0,0 @@
#ifndef NW4R_TYPES_H
#define NW4R_TYPES_H
namespace nw4r {
namespace ut {
template <typename T>
struct TextWriterBase;
template <typename T>
struct TagProcessorBase;
struct Color;
struct FileStream;
namespace detail {
struct RuntimeTypeInfo;
}
} // namespace ut
namespace ef {
struct DrawOrder;
struct DrawInfo;
struct DrawStrategy;
struct DrawStrategyImpl;
struct DrawStrategyBuilder;
struct Effect;
struct EffectSystem;
struct EffectProject;
struct Emitter;
struct EmitterDrawSetting;
struct EmitFormBuilder;
struct ResEmitter;
struct EmitterResource;
struct EmitterForm;
struct EmitterInheritSetting;
struct Particle;
struct ParticleManager;
struct MemoryManager;
struct MemoryManagerBase;
} // namespace ef
namespace math {
class VEC2;
class VEC3;
class MTX33;
class MTX34;
class AABB;
class FRUSTUM;
} // namespace math
namespace snd {
struct FxBase;
struct SoundPlayer;
struct SoundHandle;
struct SeqSoundHandle;
struct SoundArchive;
struct SoundArchivePlayer;
struct Sound3DActor;
struct Sound3DListener;
struct Sound3DManager;
struct SoundHandle;
struct StrmSoundHandle;
struct WaveSoundHandle;
namespace detail {
struct BasicSound;
struct BasicPlayer;
struct ChannelManager;
struct SeqSound;
struct SeqPlayer;
struct MmlParser;
struct MmlSeqTrack;
struct SeqTrack;
struct SeqTrackAllocator;
template <typename T>
struct SoundInstanceManager;
struct StrmBufferPool;
struct StrmSound;
struct NoteOnCallback;
struct PlayerHeap;
struct SoundArchiveFileReader;
struct SoundThread;
struct WaveSound;
struct StrmPlayer;
struct WsdPlayer;
} // namespace detail
} // namespace snd
namespace g3d {
struct AnmObjVis;
struct AnmObjVisNode;
struct AnmObjVisOR;
struct AnmObjVisRes;
struct AnmObj;
struct AnmObjChr;
struct FuncObjCalcWorld;
struct AnmScn;
struct AnmScnRes;
struct CameraAnmResult;
struct Draw1Mat1ShpSwap;
struct DrawResMdlReplacement;
struct FogAnmResult;
struct ResFile;
struct ResMdl;
struct ResPltt;
struct ResTex;
struct ResTexSrt;
struct ResMat;
struct ResTexPlttInfo;
struct ResShp;
struct ResFog;
struct ResAnmChr;
struct ResAnmVis;
struct ResAnmClr;
struct ResAnmTexPat;
struct ResAnmTexSrt;
struct ResAnmShp;
struct ResAnmScn;
struct ResAnmFog;
struct ResAnmCamera;
struct ResVtxPos;
struct ResVtxNrm;
struct ResVtxClr;
struct ResVtxTexCoord;
struct ClrAnmResult;
struct TexPatAnmResult;
struct TexSrtAnmResult;
struct ScnMdl1Mat1Shp;
struct TexSrt;
struct TexSrtTypedef;
struct LightObj;
struct LightAnmResult;
struct LightSet;
struct LightSetting;
struct LightSetData;
struct AmbLightObj;
struct AmbLightAnmResult;
struct Fog;
struct ScnRoot;
struct ScnProc;
struct ScnLeaf;
struct ScnObj;
struct ScnRfl;
struct ScnGroup;
struct ScnMdlSimple;
struct ScnMdl;
struct IScnObjGather;
struct IScnObjCallback;
namespace G3DState {
struct IndMtxOp;
}
} // namespace g3d
namespace lyt {
struct Size;
namespace detail {
struct PaneBase;
struct TexCoordAry;
} // namespace detail
namespace res {
struct Group;
struct Pane;
struct Bounding;
struct AnimationBlock;
struct BinaryFileHeader;
} // namespace res
struct Group;
struct GroupContainer;
struct Pane;
struct DrawInfo;
struct AnimResource;
struct AnimTransform;
struct AnimTransformBasic;
struct AnimationLink;
struct ResourceAccessor;
struct ArcResourceAccessor;
struct FontRefLink;
struct Material;
struct Layout;
struct Bounding;
struct ResBlockSet;
struct TexMap;
} // namespace lyt
} // namespace nw4r
#endif
+1
View File
@@ -1,5 +1,6 @@
#ifndef NW4R_TYPES_H
#define NW4R_TYPES_H
#include "common.h"
#define NW4R_BYTEORDER_BIG 0xFEFF
+3 -1
View File
@@ -1,14 +1,16 @@
#ifndef RVL_SDK_OS_ERROR_H
#define RVL_SDK_OS_ERROR_H
#include "__va_arg.h"
#include "common.h"
#ifdef __cplusplus
extern "C" {
#endif
// Forward declarations
typedef struct OSContext;
typedef struct OSContext OSContext;
#define OSError(...) OSPanic(__FILE__, __LINE__, __VA_ARGS__)
#define OSAssert(exp, ...) \
+8
View File
@@ -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
+2 -4
View File
@@ -25,10 +25,8 @@
mStateMgr.getStateID(); \
}
#define UI_STATE_MGR_DECLARE(class_name) \
sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
#define UI_STATE_MGR_DECLARE(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
#define STATE_MGR(class_name) \
sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#define STATE_MGR(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#endif
+2
View File
@@ -18,6 +18,8 @@ public:
mpOwner = owner;
}
void remove(bool);
private:
u8 field_0x20[0x28 - 0x20];
/* 0x28 */ dBase_c *mpOwner;
+12 -12
View File
@@ -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();
+10 -10
View File
@@ -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
View File
@@ -1,9 +1,226 @@
#include "d/a/d_a_bombf.h"
#include "common.h"
#include "d/a/d_a_player.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_s_lin_chk.h"
#include "d/flag/sceneflag_manager.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "toBeSorted/time_area_mgr.h"
SPECIAL_ACTOR_PROFILE(BOMBF, dAcBombf_c, fProfile::BOMBF, 0x129, 0, 4099);
STATE_DEFINE(dAcBombf_c, Wait);
bool dAcBombf_c::createHeap() {
nw4r::g3d::ResFile resFile = getOarcResFile("FlowerBomb");
nw4r::g3d::ResMdl resMdl = resFile.GetResMdl("LeafBomb");
return mModel.create(resMdl, &heap_allocator, 0x120, 1, nullptr);
}
int dAcBombf_c::actorCreate() {
mDespawnSceneFlag = (params >> 8) & 0xFF;
field_0x3D4 = (params >> 16) & 0xF;
if (SceneflagManager::sInstance->checkBoolFlag(roomid, mDespawnSceneFlag)) {
return FAILED;
}
CREATE_ALLOCATOR(dAcBombf_c);
field_0x3D2 = (params >> 4) & 0xF;
field_0x3D0 = field_0x3D2 == 1;
if (field_0x3D0) {
mModel.setPriorityDraw(0x82, 0x7F);
}
mStts.SetDefaultRank();
forwardAccel = -2.0f;
forwardMaxSpeed = -80.0f;
mStateMgr.changeState(StateID_Wait);
boundingBox.Set(mVec3_c(-80.0, -50.0f, -80.0f), mVec3_c(80.0, 60.0f, 80.0f));
angle = rotation;
if (mDespawnSceneFlag < 0xFF) {
actor_properties = (actor_properties & ~1) | 4;
}
return SUCCEEDED;
}
int dAcBombf_c::actorPostCreate() {
// Preamble problem
mMtx_c mtx;
mtx.ZXYrotS(rotation.x, rotation.y, rotation.z);
mVec3_c v;
PSMTXMultVecSR(mtx, mVec3_c::Ey, v);
mVec3_c v3 = position + v * 10.0f;
mVec3_c v4 = position - v * 10.0f;
if (dBgS_ObjLinChk::LineCross(&v3, &v4, this)) {
position = dBgS_ObjLinChk::GetInstance().GetLinEnd();
if (rotation.x == 0 && rotation.z == 0 && dBgS_ObjLinChk::ChkGround()) {
cM3dGPla pla;
dBgS::GetInstance()->GetTriPla(dBgS_ObjLinChk::GetInstance(), &pla);
rotation.x = pla.GetAngle(rotation.y);
rotation.z = pla.GetAngle(rotation.y - 0x4000);
}
if (dBgS::GetInstance()->ChkMoveBG(dBgS_ObjLinChk::GetInstance(), false)) {
field_0x398.SetPolyInfo(dBgS_ObjLinChk::GetInstance());
actor_properties = (actor_properties & ~1) | 4;
}
mLightingInfo.mLightingCode = dBgS::GetInstance()->GetLightingCode(dBgS_ObjLinChk::GetInstance());
}
if (field_0x3D2 == 0 || field_0x3D2 == 2) {
bool b = dTimeAreaMgr_c::sInstance->fn_800B9B60(roomid, position);
if (b) {
mTimeAreaStruct.field_0x00 = 1.0f;
}
if ((b && field_0x3D2 == 2) || (!b && field_0x3D2 == 0)) {
mModel.setScale(0.0001f, 0.0001f, 0.0001f);
if (mBombRef.get() != nullptr) {
mBombRef.get()->mField_0xA50 = 0.0001f;
}
}
}
updateMatrix();
mModel.setLocalMtx(mWorldMtx);
regrowBomb();
if (mBombRef.get() != nullptr) {
mBombRef.get()->mScale.set(0.95f, 0.95f, 0.95f);
}
return SUCCEEDED;
}
int dAcBombf_c::doDelete() {
return SUCCEEDED;
}
int dAcBombf_c::actorExecute() {
if (field_0x3D3 != 0) {
mMtx_c &mtx = mWorldMtx;
mtx.getTranslation(position);
dAcBomb_c *bomb = mBombRef.get();
if (bomb != nullptr) {
bomb->setTransformFromFlower(mtx);
}
mModel.setLocalMtx(mWorldMtx);
poscopy2 = position;
poscopy3 = position;
field_0x3D3 = 0;
} else {
if (dBgS::GetInstance()->ChkMoveBG(field_0x398, true)) {
dBgS::GetInstance()->MoveBgTransPos(field_0x398, true, &position, &angle, &rotation);
updateMatrix();
dAcBomb_c *bomb = mBombRef.get();
if (bomb != nullptr) {
bomb->setTransformFromFlower(mWorldMtx);
}
mModel.setLocalMtx(mWorldMtx);
poscopy2 = position;
poscopy3 = position;
}
}
mStateMgr.executeState();
return SUCCEEDED;
}
int dAcBombf_c::draw() {
if (field_0x3D0 != 0 && (dAcPy_c::LINK->mActionFlagsCont & 0x400000) == 0) {
return SUCCEEDED;
}
drawModelType1(&mModel);
return SUCCEEDED;
}
void dAcBombf_c::regrowBomb() {
// These params are hell
s8 viewclip_idx = (actor_properties & 1) != 0 ? viewclip_index : -1;
u32 actorParams1;
actorParams1 = 1;
if (field_0x3D0) {
actorParams1 = 2;
}
dAcObjBase_c *ac = dAcObjBase_c::create(
"Bomb", roomid, actorParams1, &position, nullptr, nullptr, 0xFFFFFFFF, 0xFFFF, viewclip_idx
);
mBombRef.link(static_cast<dAcBomb_c *>(ac));
dAcBomb_c *bomb = mBombRef.get();
if (bomb != nullptr) {
field_0x394 = 0x3C;
bomb->setTransformFromFlower(mWorldMtx);
if ((actor_properties & 1) != 0) {
bomb->actor_properties |= 1;
}
if (field_0x3D4 == 0) {
bomb->mField_0xA44 *= 1.5f;
}
}
}
void dAcBombf_c::initializeState_Wait() {}
void dAcBombf_c::executeState_Wait() {}
extern "C" void fn_800298B0(u16, mVec3_c *, mVec3_c *, u32, u32, u32, u32, u32);
extern "C" u16 lbl_8057A750;
void dAcBombf_c::executeState_Wait() {
// Stack problems
if (SceneflagManager::sInstance->checkBoolFlag(roomid, mDespawnSceneFlag)) {
deleteRequest();
dAcBomb_c *bomb = mBombRef.get();
if (bomb != nullptr) {
bomb->deleteRequest();
bomb->mEffect1.remove(true);
bomb->mEffect2.remove(true);
}
return;
}
f32 scaleFactor = mScale.x;
if (field_0x3D2 == 0 || field_0x3D2 == 2) {
mVec3_c m;
PSMTXMultVecSR(mWorldMtx, mVec3_c::Ey, m);
mVec3_c m3 = position + (m * 30.0f);
if (mTimeAreaStruct.check(roomid, m3, 0, 30.0f, 0.1f) && field_0x3D4 != 1) {
if (mTimeAreaStruct.field_0x04 == 1) {
playSound(0xC0A);
} else {
playSound(0xC0B);
}
fn_800298B0(lbl_8057A750, &position, nullptr, 0, 0, 0, 0, 0);
}
scaleFactor *= mTimeAreaStruct.field_0x00;
if (field_0x3D2 == 2) {
scaleFactor = 1.0f - scaleFactor;
}
scaleFactor = nw4r::ut::Max(scaleFactor, 0.0001f);
mModel.setScale(scaleFactor, scaleFactor, scaleFactor);
}
dAcBomb_c *bomb = mBombRef.get();
if (bomb != nullptr) {
if (!bomb->mStateMgr.isState(dAcBomb_c::StateID_FlowerWait) && field_0x3D0 == 0) {
mBombRef.unlink();
field_0x394 = 0x3C;
}
} else {
if (field_0x394 != 0) {
field_0x394--;
} else if (field_0x3D0 == 0 || dAcPy_c::LINK->getSquareDistanceTo(position) > 22500.0f) {
regrowBomb();
}
}
bomb = mBombRef.get();
if (bomb != nullptr) {
bomb->mField_0xA50 = scaleFactor;
}
}
void dAcBombf_c::finalizeState_Wait() {}
-5
View File
@@ -2,7 +2,6 @@
#include "s/s_Math.h"
SPECIAL_ACTOR_PROFILE(OBJ_MOLE_SOIL, dAcOmoleSoil_c, fProfile::OBJ_MOLE_SOIL, 0x008B, 0, 6);
STATE_DEFINE(dAcOmoleSoil_c, Wait);
@@ -24,10 +23,6 @@ bool dAcOmoleSoil_c::createHeap() {
return true;
}
bool intToBool(int a) {
return a;
}
int dAcOmoleSoil_c::create() {
CREATE_ALLOCATOR(dAcOmoleSoil_c);
+1 -1
View File
@@ -50,7 +50,7 @@ int dAcOPoolCock_c::actorExecute() {
mStateMgr.executeState();
calcVelocity();
position += velocity;
position += mCCdStruct.posIncrements;
position += mStts.mCcMove;
updateMatrix();
mMtx_c mdl1Transform;
mMtx_c mdl2Transform;
+1 -1
View File
@@ -39,7 +39,7 @@ int dAcOring_c::actorExecute() {
mStateMgr.executeState();
calcVelocity();
position += velocity;
position += mCCdStruct.posIncrements;
position += mStts.mCcMove;
updateMatrix();
mModel.setLocalMtx(mWorldMtx);
return SUCCEEDED;
+11 -12
View File
@@ -1,14 +1,13 @@
#include "d/a/obj/d_a_obj_spike.h"
#include "d/col/cc/d_cc_mgr.h"
#include "d/col/cc/d_cc_s.h"
SPECIAL_ACTOR_PROFILE(OBJ_SPIKE, dAcOspike_c, fProfile::OBJ_SPIKE, 0x1D9, 0, 2);
// clang-format off
dCcD_SrcAabb dAcOspike_c::sCcSrc = {
{{{0x400}, 0x2003F, 0, 1, 0, 0, 0, 0, 0},
{{0xFEB77DFF}, 0x111, 0x06, 0x407, 0, 0},
dCcD_SrcUnk dAcOspike_c::sCcSrc = {
{{0x400, 0x2003F, {0, 0, 0}, 1, 0, 0, 0, 0},
{0xFEB77DFF, 0x111, 0x06, 0x407, 0, },
{0}},
{-1.0f, -246.0f, -472.0f, 73.0f, 255.0f, 482.0f}};
// clang-format on
@@ -30,15 +29,15 @@ int dAcOspike_c::create() {
return FAILED;
}
mCCdStruct.setField0x38ToMagicValue();
mCollision.init(sCcSrc);
mCollision.initUnk(mCCdStruct);
mStts.SetDefaultRank();
mCollision.Set(sCcSrc);
mCollision.SetStts(mStts);
updateMatrix();
mMdl.setLocalMtx(mWorldMtx);
mVec3_c tmp;
PSMTXMultVecSR(mWorldMtx.m, mVec3_c::Ex, tmp);
mCollision.setAtVec(tmp);
mCollision.SetAtVec(tmp);
mMtx_c mtx;
mtx.XrotS(rotation.x);
@@ -63,7 +62,7 @@ int dAcOspike_c::create() {
tmp3.z = copy;
}
mCollision.Set(tmp2, tmp3);
mCollision.cM3dGUnk::Set(tmp2, tmp3);
mStateMgr.changeState(StateID_Wait);
boundingBox.Set(mVec3_c(-10.0f, -250.0f, -480.0f), mVec3_c(80.0f, 260.0f, 490.0f));
return SUCCEEDED;
@@ -75,8 +74,8 @@ int dAcOspike_c::doDelete() {
int dAcOspike_c::actorExecute() {
mStateMgr.executeState();
mCollision.Set(position, rotation.y);
ColliderManager::getColliderManager()->addCollider(&mCollision);
mCollision.cM3dGUnk::Set(position, rotation.y);
dCcS::GetInstance()->Set(&mCollision);
return 1;
}
+45 -17
View File
@@ -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);
}
+127 -4
View File
@@ -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() {}
+9 -10
View File
@@ -1,16 +1,15 @@
#include "d/a/obj/d_a_obj_triforce.h"
#include "c/c_math.h"
#include "d/col/cc/d_cc_mgr.h"
#include "d/col/cc/d_cc_s.h"
#include "m/m_vec.h"
SPECIAL_ACTOR_PROFILE(OBJ_TRIFORCE, dAcOtriforce_c, fProfile::OBJ_TRIFORCE, 0x15D, 0, 4);
// clang-format off
dCcD_SrcSph dAcOtriforce_c::sCcSrc = {
{{{0}, 0, 0, 0, 0, 0, 0, 0, 0},
{{0xFEB77DFF}, 0x111, 0x06, 0x407, 0, 0},
{{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0xFEB77DFF, 0x111, 0x06, 0x407, 0, 0},
{0xE9}},
{150.0f}};
// clang-format on
@@ -36,13 +35,13 @@ int dAcOtriforce_c::create() {
return FAILED;
}
mCCdStruct.setField0x38ToMagicValue();
mCollision.init(sCcSrc);
mCollision.initUnk(mCCdStruct);
mCollision.clearCoFlag();
mStts.SetDefaultRank();
mCollision.Set(sCcSrc);
mCollision.SetStts(mStts);
mCollision.ClrCoSet();
mStartingOffset = cM::rndInt(sStartingOffsetRange);
mEffects.init(this);
mCollision.setSomeDefendValue(0x2000);
mCollision.SetTg_0x4C(0x2000);
updateMatrix();
mScale.x = sScale;
mScale.y = sScale;
@@ -66,7 +65,7 @@ int dAcOtriforce_c::actorExecute() {
mCollision.SetC(position.x, position.y + 90.0f + zero, position.z);
ColliderManager::getColliderManager()->addCollider(&mCollision);
dCcS::GetInstance()->Set(&mCollision);
updateMatrix();
Mtx m;
PSMTXScale(m, mScale.x, mScale.y, mScale.z);
+393 -3
View File
@@ -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};
}
+3 -4
View File
@@ -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;
}
+35 -43
View File
@@ -4,10 +4,9 @@
#include "c/c_math.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/cc/d_cc_mgr.h"
#include "d/col/cc/d_cc_s.h"
#include "d/flag/sceneflag_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_REACTION, dTgReaction_c, fProfile::TAG_REACTION, 0x0151, 0, 0);
STATE_DEFINE(dTgReaction_c, Wait);
@@ -19,8 +18,8 @@ const f32 dTgReaction_c::sHeight = 100.0f;
// clang-format off
dCcD_SrcCyl dTgReaction_c::sCcSrc = {
{{{0}, 0, 0, 0, 0, 0, 0, 0, 0},
{{0x10000}, 0x213, 0, 0x8, 0x8, 0},
{{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0x10000, 0x213, 0, 0x8, 0x8,},
{0xE8}},
{dTgReaction_c::sRadius, dTgReaction_c::sHeight}
};
@@ -43,7 +42,7 @@ int dTgReaction_c::create() {
return FAILED;
}
if (getReactType() != REACT_GUST_BELLOWS) {
if (getReactType() != REACT_UNDERWATER) {
if (getSceneFlag() >= 0xFF) {
return FAILED;
}
@@ -74,29 +73,31 @@ int dTgReaction_c::create() {
}
}
mCCdStruct.setField0x38(0);
mCollision.init(sCcSrc);
mCollision.initUnk(mCCdStruct);
mStts.SetRank(0);
mCollision.Set(sCcSrc);
mCollision.SetStts(mStts);
switch (getReactType()) {
case REACT_BONK:
mCollision.setTgFlag(0x80);
mCollision.setTgField0x0A(0);
mCollision.SetR(sCcSrc.mCylAttr.mRadius * mScale.x);
mCollision.SetH(mScale.y * sCcSrc.mCylAttr.mHeight);
break;
case REACT_SLINGSHOT:
mCollision.setTgFlag(0x10000);
mCollision.setTgField0x0A(8);
mCollision.SetR(sCcSrc.mCylAttr.mRadius * mScale.x);
mCollision.SetH(mScale.y * sCcSrc.mCylAttr.mHeight);
mCollision.SetTgFlag(0x80);
mCollision.SetTgFlag_0xA(0);
mCollision.SetR(sCcSrc.mCylInf.mRadius * mScale.x);
mCollision.SetH(sCcSrc.mCylInf.mHeight * mScale.y);
break;
case REACT_GUST_BELLOWS:
mCollision.setTgFlag(0x100000);
mCollision.setTgField0x0A(0);
mCollision.SetR(sCcSrc.mCylAttr.mRadius * mScale.x);
mCollision.SetH(mScale.y * sCcSrc.mCylAttr.mHeight);
mCollision.SetTgFlag(0x10000);
mCollision.SetTgFlag_0xA(8);
mCollision.SetR(sCcSrc.mCylInf.mRadius * mScale.x);
mCollision.SetH(sCcSrc.mCylInf.mHeight * mScale.y);
break;
case REACT_UNDERWATER:
mCollision.SetTgFlag(0x100000);
mCollision.SetTgFlag_0xA(0);
mCollision.SetR(sCcSrc.mCylInf.mRadius * mScale.x);
mCollision.SetH(sCcSrc.mCylInf.mHeight * mScale.y);
break;
case REACT_BONK:
case REACT_4: break;
}
int item = getParam0x10();
@@ -111,8 +112,8 @@ int dTgReaction_c::create() {
}
mVec3_c dwsOffset;
if (!getParam0x14()) {
field_0x4E4 = mScale.y * sCcSrc.mCylAttr.mHeight * 0.5f;
dwsOffset = mVec3_c(0.0f, 0.5f * sCcSrc.mCylAttr.mHeight, 0.0f);
field_0x4E4 = mScale.y * sCcSrc.mCylInf.mHeight * 0.5f;
dwsOffset = mVec3_c(0.0f, sCcSrc.mCylInf.mHeight * 0.5f, 0.0f);
} else {
dwsOffset = mVec3_c::Zero;
}
@@ -210,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);
+1 -1
View File
@@ -149,7 +149,7 @@ bool dTgSndAr_c::checkAlg3(const mVec3_c &pos) {
unk.Set(b, c, mScale.x * 100.0f);
f32 d;
if (cM3d_Len3dSqPntAndSegLine(&unk, &a, &q, &d, nullptr)) {
if (cM3d_Len3dSqPntAndSegLine(unk, a, q, &d, nullptr)) {
// At the cylindrical part of the capsule, just check the distance to
// the line
return d < radius;
+3 -3
View File
@@ -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);
}
+5 -15
View File
@@ -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);
}
}
+3 -4
View File
@@ -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)) {
+131
View File
@@ -0,0 +1,131 @@
#include "d/a/obj/d_a_obj_arrow.h"
#include "c/c_math.h"
#include "d/a/d_a_player.h"
#include "d/col/c/c_cc_d.h"
SPECIAL_ACTOR_PROFILE(ARROW, dAcArrow_c, fProfile::ARROW, 0x126, 0, 0x80);
STATE_DEFINE(dAcArrow_c, Wait);
STATE_DEFINE(dAcArrow_c, Move);
STATE_DEFINE(dAcArrow_c, ActorStop);
STATE_DEFINE(dAcArrow_c, BgStop);
STATE_DEFINE(dAcArrow_c, Bound);
// clang-format off
cCcD_SrcGObj dAcArrow_c::sCcSrcInf = {
{0x2000, 0x8BB, 0x15000000, 0, 0, 0, 0, 0, 0},
{0xFEB75C7F, 0x210, 0, 0x407, 0, 0},
{0},
};
dCcD_SrcCps dAcArrow_c::sCc1 = {
dAcArrow_c::sCcSrcInf,
{5.0f},
};
const dCcD_SrcSph dAcArrow_c::sCc2 = {
{{0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0},
{0x2, 0x211, 0, 0x407, 0, 0},
{0xC28}},
{100.0f},
};
// clang-format on
bool hitCallback(dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB) {
static_cast<dAcArrow_c *>(i_actorA)->hitCallback(i_objInfA, i_actorB, i_objInfB);
return true;
}
bool dAcArrow_c::createHeap() {
mResFile = getOarcResFile("Alink");
nw4r::g3d::ResMdl mdl(nullptr);
if ((mSubType & 0x10) != 0) {
mdl = mResFile.GetResMdl("EquipPachinkoBullet");
} else {
mdl = mResFile.GetResMdl("EquipArrow");
}
// ?
bool ok = mModel.create(mdl, &heap_allocator, 0x120);
if (!ok) {
ok = false;
}
return ok;
}
extern "C" void fn_8025E5E0(void *);
int dAcArrow_c::create() {
mSubType = params & 0xFF;
CREATE_ALLOCATOR(dAcArrow_c);
field_0x67C |= 4;
mStts.SetRank(2);
mCcCps.Set(sCc1);
mCcCps.SetStts(mStts);
mCcCps.SetAtFlag(0x2000);
mCcCps.SetAtCallback(::hitCallback);
mCcSph.Set(sCc2);
mCcSph.SetStts(mStts);
if (mSubType == 0x11) {
mStateMgr.changeState(StateID_Move);
} else {
mStateMgr.changeState(StateID_Wait);
}
boundingBox.Set(mVec3_c(-6.0f, -6.0f, 0.0f), mVec3_c(6.0f, 6.0f, 110.0f));
field_0x684 = -1;
field_0x68A = 300;
f32 rnd = cM::rndF(20.0f);
field_0x688 = 50.0f - rnd;
field_0x6A8 = 80.0f;
mDespawnTimer = 10;
fn_8025E5E0(this);
return SUCCEEDED;
}
dAcArrow_c::~dAcArrow_c() {}
void dAcArrow_c::hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB) {}
int dAcArrow_c::doDelete() {
// TODO
return SUCCEEDED;
}
int dAcArrow_c::actorExecute() {
mStateMgr.executeState();
// TODO
return SUCCEEDED;
}
int dAcArrow_c::draw() {
return SUCCEEDED;
}
void dAcArrow_c::initializeState_Wait() {}
void dAcArrow_c::executeState_Wait() {}
void dAcArrow_c::finalizeState_Wait() {}
void dAcArrow_c::initializeState_Move() {}
void dAcArrow_c::executeState_Move() {}
void dAcArrow_c::finalizeState_Move() {}
void dAcArrow_c::initializeState_ActorStop() {}
void dAcArrow_c::executeState_ActorStop() {}
void dAcArrow_c::finalizeState_ActorStop() {}
void dAcArrow_c::initializeState_BgStop() {}
void dAcArrow_c::executeState_BgStop() {}
void dAcArrow_c::finalizeState_BgStop() {}
void dAcArrow_c::initializeState_Bound() {}
void dAcArrow_c::executeState_Bound() {}
void dAcArrow_c::finalizeState_Bound() {}
+20
View File
@@ -0,0 +1,20 @@
#include "d/a/obj/d_a_obj_bomb.h"
#include "f/f_base.h"
#include "f/f_profile.h"
#include "f/f_profile_name.h"
#include "s/s_State.hpp"
SPECIAL_ACTOR_PROFILE(BOMB, dAcBomb_c, fProfile::BOMB, 0x128, 0, 2);
STATE_DEFINE(dAcBomb_c, Wait);
STATE_DEFINE(dAcBomb_c, FlowerWait);
STATE_DEFINE(dAcBomb_c, Explode);
STATE_DEFINE(dAcBomb_c, Carry);
STATE_DEFINE(dAcBomb_c, WindCarry);
bool dAcBomb_c::createHeap() {}
int dAcBomb_c::create() {
return SUCCEEDED;
}
+4 -5
View File
@@ -2,7 +2,6 @@
#include "d/a/d_a_player.h"
SPECIAL_ACTOR_PROFILE(OBJ_FAIRY, dAcObjFairy_c, fProfile::OBJ_FAIRY, 0x166, 0, 2);
STATE_DEFINE(dAcObjFairy_c, Wait);
@@ -53,7 +52,8 @@ int dAcObjFairy_c::draw() {
if (!isCuring()) {
static mQuat_c rot(0.0f, 0.0f, 0.0f, 10.0f);
drawShadow(mShadow, nullptr, mWorldMtx, &rot, -1, -1, -1, -1, -1, position.y - field_0x4B0);
f32 f = field_0x4B0;
drawShadow(mShadow, nullptr, mWorldMtx, &rot, -1, -1, -1, -1, -1, position.y - f);
}
}
@@ -96,14 +96,13 @@ void dAcObjFairy_c::executeState_CatchDemo() {
}
void dAcObjFairy_c::finalizeState_CatchDemo() {
field_0xB89 = 0;
// TODO collision
mObjectActorFlags &= ~0x00000200;
}
bool dAcObjFairy_c::shouldAvoidLink() const {
// TODO shuffles
if (dAcPy_c::LINK->isUsingBugnet()) {
const mVec3_c &bugNetPos = dAcPy_c::LINK->getBugNetPos();
const mVec3_c dist = bugNetPos - position;
mVec3_c dist = dAcPy_c::LINK->getBugNetPos() - position;
bool isClose = false;
if (dist.mag() < 100.0f && velocity.dot(dist) > 0.0f) {
isClose = true;
+6 -7
View File
@@ -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);
}
}
+2 -2
View File
@@ -492,8 +492,8 @@ void cBgW::RwgLineCheck(int polyIdx, cBgS_LinChk *pLine) {
cBgD_Vtx_t *vtxTbl = mpVtxTbl;
mVec3_c cross_pos;
if (cM3d_Cross_LinTri(
&pLine->mLin, &vtxTbl[triTbl[polyIdx].mVtxIdx0], &vtxTbl[triTbl[polyIdx].mVtxIdx1],
&vtxTbl[triTbl[polyIdx].mVtxIdx2], &mpTri[polyIdx], &cross_pos, pLine->ChkFrontFlag(),
pLine->mLin, vtxTbl[triTbl[polyIdx].mVtxIdx0], vtxTbl[triTbl[polyIdx].mVtxIdx1],
vtxTbl[triTbl[polyIdx].mVtxIdx2], &mpTri[polyIdx], cross_pos, pLine->ChkFrontFlag(),
pLine->ChkBackFlag()
)) {
dBgPc pc = *mpPolyCodes.GetDBgPc(mpBgd->mTriTbl[polyIdx].mId);
+1 -1
View File
@@ -101,7 +101,7 @@ bool dBgWTime::LineCheck(cBgS_LinChk *pLine) {
lin.Set(linStart, linEnd);
mVec3_c vec0;
mVec3_c vec1;
if (!cM3d_Cross_CylLin(&mCyl, &lin, vec0, vec1)) {
if (!cM3d_Cross_CylLin(mCyl, lin, vec0, vec1)) {
return false;
}
if (!fn_803537a0(&vec0, pLine)) {
File diff suppressed because it is too large Load Diff
+36 -13
View File
@@ -14,6 +14,7 @@
#include "math.h"
#include "nw4r/math/math_types.h"
#include "rvl/MTX.h" // IWYU pragma: export
#include "rvl/MTX/vec.h"
using namespace nw4r::math;
using namespace EGG;
@@ -145,38 +146,40 @@ bool cM3d_Cross_LinSph_CrossPos(const cM3dGSph &, const cM3dGLin &, VEC3 *, VEC3
// TODO - returns false to satisfy warning
return false;
}
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, f32 *) {
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, f32 *) {
// TODO - returns false to satisfy warning
return false;
}
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, VEC3 *, f32 *) {
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, VEC3 *, f32 *) {
// TODO - returns false to satisfy warning
return false;
}
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *) {
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *) {
// TODO - returns false to satisfy warning
return false;
}
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *, f32 *) {
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *, f32 *) {
// TODO - returns false to satisfy warning
return false;
}
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, VEC3 *) {
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, VEC3 *) {
// TODO - returns false to satisfy warning
return false;
}
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph *pSph, const cM3dGTri *pTri, VEC3 *pPnt) {
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph &pSph, const cM3dGTri &pTri, VEC3 *pPnt) {
VEC3 scale, add;
PSVECAdd(pTri->mA, pTri->mB, add);
PSVECAdd(pTri.mA, pTri.mB, add);
PSVECScale(add, scale, 0.5f);
f32 mag = VEC3DistSq(&scale, &pSph->GetC());
const f32 mag = VEC3DistSq(&scale, &pSph.GetC());
if (cM3d_IsZero(mag)) {
*pPnt = pSph->GetC();
*pPnt = pSph.GetC();
return;
}
f32 a = pSph->GetR() / mag;
cM3d_InDivPos2(&pSph->GetC(), &scale, a, pPnt);
const f32 rad = pSph.GetR();
f32 a = rad / mag;
cM3d_InDivPos2(&pSph.GetC(), &scale, a, pPnt);
}
bool cM3d_Cross_SphTri(const cM3dGSph *, const cM3dGTri *, VEC3 *, f32 *, VEC3 *) {
// TODO - returns false to satisfy warning
@@ -218,7 +221,7 @@ bool cM3d_Cross_TriTri(const cM3dGTri &, const cM3dGTri &, VEC3 *) {
// TODO - returns false to satisfy warning
return false;
}
bool cM3d_Cross_CpsTri(const cM3dGCps &, cM3dGTri, VEC3 *) {
bool cM3d_Cross_CpsTri(const cM3dGCps &, const cM3dGTri &, VEC3 *) {
// TODO - returns false to satisfy warning
return false;
}
@@ -232,7 +235,7 @@ bool cM3d_3PlaneCrossPos(const cM3dGPla &, const cM3dGPla &, const cM3dGPla &, V
// TODO - returns false to satisfy warning
return false;
}
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin *, const VEC3 *, VEC3 *) {
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin &, const VEC3 &, VEC3 *) {
// TODO - returns 0.0f to satisfy warning
return 0.0f;
}
@@ -240,3 +243,23 @@ f32 cM3d_lineVsPosSuisenCross(const VEC3 &, const VEC3 &, const VEC3 &, VEC3 *)
// TODO - returns 0.0f to satisfy warning
return 0.0f;
}
bool cM3d_Normalize(nw4r::math::VEC3 *pPnt) {
f32 mag = PSVECMag(*pPnt);
if (cM3d_IsZero(mag)) {
return true;
}
mag = 1.f / mag;
pPnt->x *= mag;
pPnt->y *= mag;
pPnt->z *= mag;
return false;
}
void cM3d_Normalize_Ex(nw4r::math::VEC3 *pPnt) {
if (cM3d_Normalize(pPnt)) {
pPnt->x = 1.0f;
pPnt->y = 0.0f;
pPnt->z = 0.0f;
}
}

Some files were not shown because too many files have changed in this diff Show More