mirror of
https://github.com/zeldaret/ss
synced 2026-10-07 21:30:59 -04:00
Merge pull request #348 from elijah-thomas774/ghirahum-stuff
Ghirahim stuff
This commit is contained in:
@@ -4,36 +4,36 @@ _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
|
||||
dAcGirahimuSwordBeam_c_classInit__Fv = .text:0x000000F0; // type:function size:0x15C
|
||||
fn_240_250 = .text:0x00000250; // type:function size:0x58
|
||||
fn_240_2B0 = .text:0x000002B0; // type:function size:0x90
|
||||
__dt__15dShadowCircle_cFv = .text:0x00000250; // type:function size:0x58
|
||||
__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x000002B0; // type:function size:0x90
|
||||
__dt__35sFState_c<22dAcGirahimuSwordBeam_c>Fv = .text:0x00000340; // type:function size:0x58
|
||||
__dt__38sFStateFct_c<22dAcGirahimuSwordBeam_c>Fv = .text:0x000003A0; // type:function size:0x6C
|
||||
__dt__91sStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000410; // type:function size:0xA0
|
||||
__dt__61sFStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c>Fv = .text:0x000004B0; // type:function size:0xA4
|
||||
fn_240_560 = .text:0x00000560; // type:function size:0x8
|
||||
fn_240_570 = .text:0x00000570; // type:function size:0x1EC
|
||||
createHeap__22dAcGirahimuSwordBeam_cFv = .text:0x00000560; // type:function size:0x8
|
||||
create__22dAcGirahimuSwordBeam_cFv = .text:0x00000570; // type:function size:0x1EC
|
||||
changeState__91sStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000760; // type:function size:0x10
|
||||
fn_240_770 = .text:0x00000770; // type:function size:0x8
|
||||
fn_240_780 = .text:0x00000780; // type:function size:0x5A4
|
||||
doDelete__22dAcGirahimuSwordBeam_cFv = .text:0x00000770; // type:function size:0x8
|
||||
actorExecute__22dAcGirahimuSwordBeam_cFv = .text:0x00000780; // type:function size:0x5A4
|
||||
executeState__91sStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000D30; // type:function size:0x10
|
||||
getStateID__91sStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000D40; // type:function size:0x10
|
||||
fn_240_D50 = .text:0x00000D50; // type:function size:0x8C
|
||||
draw__22dAcGirahimuSwordBeam_cFv = .text:0x00000D50; // type:function size:0x8C
|
||||
initializeState_BulletMove__22dAcGirahimuSwordBeam_cFv = .text:0x00000DE0; // type:function size:0xA8
|
||||
executeState_BulletMove__22dAcGirahimuSwordBeam_cFv = .text:0x00000E90; // type:function size:0x10C
|
||||
finalizeState_BulletMove__22dAcGirahimuSwordBeam_cFv = .text:0x00000FA0; // type:function size:0x4
|
||||
initializeState_Damage__22dAcGirahimuSwordBeam_cFv = .text:0x00000FB0; // type:function size:0x28
|
||||
executeState_Damage__22dAcGirahimuSwordBeam_cFv = .text:0x00000FE0; // type:function size:0x4
|
||||
finalizeState_Damage__22dAcGirahimuSwordBeam_cFv = .text:0x00000FF0; // type:function size:0x4
|
||||
fn_240_1000 = .text:0x00001000; // type:function size:0xC0
|
||||
fn_240_10C0 = .text:0x000010C0; // type:function size:0x6C
|
||||
fn_240_1130 = .text:0x00001130; // type:function size:0x24
|
||||
fn_240_1160 = .text:0x00001160; // type:function size:0x8C
|
||||
fn_240_11F0 = .text:0x000011F0; // type:function size:0x18C
|
||||
fn_240_1380 = .text:0x00001380; // type:function size:0x338
|
||||
fn_240_16C0 = .text:0x000016C0; // type:function size:0x44
|
||||
fn_240_1710 = .text:0x00001710; // type:function size:0xA8
|
||||
fn_240_17C0 = .text:0x000017C0; // type:function size:0x44
|
||||
fn_240_1810 = .text:0x00001810; // type:function size:0xD0C
|
||||
swordBeamReturn__22dAcGirahimuSwordBeam_cFl = .text:0x00001000; // type:function size:0xC0
|
||||
startMoveEmitters__22dAcGirahimuSwordBeam_cFv = .text:0x000010C0; // type:function size:0x6C
|
||||
startDisappearEmitter__22dAcGirahimuSwordBeam_cFv = .text:0x00001130; // type:function size:0x24
|
||||
transformMatrix__22dAcGirahimuSwordBeam_cFv = .text:0x00001160; // type:function size:0x8C
|
||||
fn_240_11F0__22dAcGirahimuSwordBeam_cFv = .text:0x000011F0; // type:function size:0x18C
|
||||
fn_240_1380__22dAcGirahimuSwordBeam_cFv = .text:0x00001380; // type:function size:0x338
|
||||
fn_240_16C0__22dAcGirahimuSwordBeam_cFv = .text:0x000016C0; // type:function size:0x44
|
||||
fn_240_1710__22dAcGirahimuSwordBeam_cFv = .text:0x00001710; // type:function size:0xA8
|
||||
fn_240_17C0__22dAcGirahimuSwordBeam_cFl = .text:0x000017C0; // type:function size:0x44
|
||||
fn_240_1810__22dAcGirahimuSwordBeam_cFUlR7mAng3_cRC4mAng = .text:0x00001810; // type:function size:0xD0C
|
||||
__dt__22dAcGirahimuSwordBeam_cFv = .text:0x00002520; // type:function size:0x1A4
|
||||
build__38sFStateFct_c<22dAcGirahimuSwordBeam_c>FRC12sStateIDIf_c = .text:0x000026D0; // type:function size:0x60
|
||||
dispose__38sFStateFct_c<22dAcGirahimuSwordBeam_c>FRP10sStateIf_c = .text:0x00002730; // type:function size:0xC
|
||||
@@ -52,7 +52,7 @@ initializeState__37sFStateID_c<22dAcGirahimuSwordBeam_c>CFR22dAcGirahimuSwordBea
|
||||
__sinit_\d_a_girahimu_sword_beam_cpp = .text:0x00002890; // type:function size:0x1C8 scope:local
|
||||
__dt__37sFStateID_c<22dAcGirahimuSwordBeam_c>Fv = .text:0x00002A60; // type:function size:0x58
|
||||
isSameName__37sFStateID_c<22dAcGirahimuSwordBeam_c>CFPCc = .text:0x00002AC0; // type:function size:0x88
|
||||
fn_240_2B50 = .text:0x00002B50; // type:function size:0x8
|
||||
@272@__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00002B50; // type:function size:0x8
|
||||
_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
|
||||
@@ -69,16 +69,16 @@ lbl_240_data_9C = .data:0x0000009C; // type:object size:0x4 data:4byte
|
||||
lbl_240_data_A0 = .data:0x000000A0; // type:object size:0x4 data:4byte
|
||||
lbl_240_data_A4 = .data:0x000000A4; // type:object size:0x4 data:4byte
|
||||
lbl_240_data_A8 = .data:0x000000A8; // type:object size:0x30 data:4byte
|
||||
lbl_240_data_D8 = .data:0x000000D8; // type:object size:0x80
|
||||
lbl_240_data_158 = .data:0x00000158; // type:object size:0x30
|
||||
lbl_240_data_188 = .data:0x00000188; // type:object size:0x30
|
||||
lbl_240_data_1B8 = .data:0x000001B8; // type:object size:0x18
|
||||
lbl_240_data_1D0 = .data:0x000001D0; // type:object size:0x18
|
||||
lbl_240_data_1E8 = .data:0x000001E8; // type:object size:0x70
|
||||
lbl_240_data_258 = .data:0x00000258; // type:object size:0xA8
|
||||
__vt__22dAcGirahimuSwordBeam_c = .data:0x000000D8; // type:object size:0x80
|
||||
__vt__61sFStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c> = .data:0x00000158; // type:object size:0x30
|
||||
__vt__91sStateMgr_c<22dAcGirahimuSwordBeam_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000188; // type:object size:0x30
|
||||
__vt__38sFStateFct_c<22dAcGirahimuSwordBeam_c> = .data:0x000001B8; // type:object size:0x18
|
||||
__vt__35sFState_c<22dAcGirahimuSwordBeam_c> = .data:0x000001D0; // type:object size:0x18
|
||||
__vt__22dCcD_Linked<8dCcD_Cps> = .data:0x000001E8; // type:object size:0x70
|
||||
__vt__15dShadowCircle_c = .data:0x00000258; // type:object size:0xA8
|
||||
lbl_240_data_300 = .data:0x00000300; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_240_bss_8 = .bss:0x00000008; // type:object size:0x10 data:2byte
|
||||
lbl_240_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
lbl_240_bss_58 = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
lbl_240_bss_88 = .bss:0x00000088; // type:object size:0x2 data:2byte
|
||||
StateID_BulletMove__22dAcGirahimuSwordBeam_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
StateID_Damage__22dAcGirahimuSwordBeam_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
sSomeAngle = .bss:0x00000088; // type:object size:0x2 data:2byte
|
||||
|
||||
@@ -8,17 +8,17 @@ __dt__32sFState_c<19dAcOGirahimuFloor_c>Fv = .text:0x00000240; // type:function
|
||||
__dt__35sFStateFct_c<19dAcOGirahimuFloor_c>Fv = .text:0x000002A0; // type:function size:0x6C
|
||||
__dt__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000310; // type:function size:0xA0
|
||||
__dt__58sFStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003B0; // type:function size:0xA4
|
||||
fn_604_460 = .text:0x00000460; // type:function size:0x64
|
||||
AcOGirahimuFloor__initModels = .text:0x000004D0; // type:function size:0x28C
|
||||
AcOGirahimuFloor__init1 = .text:0x00000760; // type:function size:0x1D4
|
||||
__ct__Q23m3d11anmMatClr_cFv = .text:0x00000460; // type:function size:0x64
|
||||
createHeap__19dAcOGirahimuFloor_cFv = .text:0x000004D0; // type:function size:0x28C
|
||||
actorCreate__19dAcOGirahimuFloor_cFv = .text:0x00000760; // type:function size:0x1D4
|
||||
changeState__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000940; // type:function size:0x10
|
||||
AcOGirahimuFloor__init2 = .text:0x00000950; // type:function size:0x12C
|
||||
fn_604_A80 = .text:0x00000A80; // type:function size:0x8
|
||||
AcOGirahimuFloor__update = .text:0x00000A90; // type:function size:0x39C
|
||||
actorPostCreate__19dAcOGirahimuFloor_cFv = .text:0x00000950; // type:function size:0x12C
|
||||
doDelete__19dAcOGirahimuFloor_cFv = .text:0x00000A80; // type:function size:0x8
|
||||
actorExecute__19dAcOGirahimuFloor_cFv = .text:0x00000A90; // type:function size:0x39C
|
||||
getStateID__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000E30; // type:function size:0x10
|
||||
executeState__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000E40; // type:function size:0x10
|
||||
cLib_calcTimer<u8> = .text:0x00000E50; // type:function size:0x1C
|
||||
AcOGirahimuFloor__draw = .text:0x00000E70; // type:function size:0x28
|
||||
calcTimer<Uc>__4sLibFPUc_Uc = .text:0x00000E50; // type:function size:0x1C
|
||||
draw__19dAcOGirahimuFloor_cFv = .text:0x00000E70; // type:function size:0x28
|
||||
initializeState_Wait__19dAcOGirahimuFloor_cFv = .text:0x00000EA0; // type:function size:0x60
|
||||
executeState_Wait__19dAcOGirahimuFloor_cFv = .text:0x00000F00; // type:function size:0x78
|
||||
finalizeState_Wait__19dAcOGirahimuFloor_cFv = .text:0x00000F80; // type:function size:0x4
|
||||
@@ -34,11 +34,11 @@ finalizeState_Broken__19dAcOGirahimuFloor_cFv = .text:0x000013A0; // type:functi
|
||||
initializeState_Move__19dAcOGirahimuFloor_cFv = .text:0x000013B0; // type:function size:0x4
|
||||
executeState_Move__19dAcOGirahimuFloor_cFv = .text:0x000013C0; // type:function size:0xA0
|
||||
finalizeState_Move__19dAcOGirahimuFloor_cFv = .text:0x00001460; // type:function size:0x4
|
||||
fn_604_1470 = .text:0x00001470; // type:function size:0x1A0
|
||||
AcOGirahimuFloor__checkNoOtherFloor = .text:0x00001610; // type:function size:0x28
|
||||
checksToSeeIfLinkIsInFinalBlow = .text:0x00001640; // type:function size:0xF0
|
||||
AcOGirahimuFloor__movePlatform = .text:0x00001730; // type:function size:0x54
|
||||
fn_604_1790 = .text:0x00001790; // type:function size:0x98
|
||||
isPlayerAndGhirahimOffFloor__19dAcOGirahimuFloor_cFv = .text:0x00001470; // type:function size:0x1A0
|
||||
isGenerateNoChild__19dAcOGirahimuFloor_cFv = .text:0x00001610; // type:function size:0x28
|
||||
isSuccessfulFinalBlow__19dAcOGirahimuFloor_cFv = .text:0x00001640; // type:function size:0xF0
|
||||
movePosition__19dAcOGirahimuFloor_cFv = .text:0x00001730; // type:function size:0x54
|
||||
doShatter__19dAcOGirahimuFloor_cFv = .text:0x00001790; // type:function size:0x98
|
||||
__dt__19dAcOGirahimuFloor_cFv = .text:0x00001830; // type:function size:0x128
|
||||
build__35sFStateFct_c<19dAcOGirahimuFloor_c>FRC12sStateIDIf_c = .text:0x00001960; // type:function size:0x60
|
||||
dispose__35sFStateFct_c<19dAcOGirahimuFloor_c>FRP10sStateIf_c = .text:0x000019C0; // type:function size:0xC
|
||||
@@ -72,14 +72,16 @@ lbl_604_data_10 = .data:0x00000010; // type:object size:0xA data:string
|
||||
lbl_604_data_20 = .data:0x00000020; // type:object size:0x10 data:string
|
||||
lbl_604_data_30 = .data:0x00000030; // type:object size:0x40
|
||||
lbl_604_data_70 = .data:0x00000070; // type:object size:0x21 data:string
|
||||
AcOGirahimuFloor__vtable = .data:0x00000098; // type:object size:0x80
|
||||
lbl_604_data_118 = .data:0x00000118; // type:object size:0x30
|
||||
lbl_604_data_148 = .data:0x00000148; // type:object size:0x30
|
||||
lbl_604_data_178 = .data:0x00000178; // type:object size:0x18
|
||||
lbl_604_data_190 = .data:0x00000190; // type:object size:0x184
|
||||
__vt__19dAcOGirahimuFloor_c = .data:0x00000098; // type:object size:0x80
|
||||
__vt__58sFStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c> = .data:0x00000118; // type:object size:0x30
|
||||
__vt__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000148; // type:object size:0x30
|
||||
__vt__35sFStateFct_c<19dAcOGirahimuFloor_c> = .data:0x00000178; // type:object size:0x18
|
||||
__vt__32sFState_c<19dAcOGirahimuFloor_c> = .data:0x00000190; // type:object size:0x184
|
||||
lbl_604_data_314 = .data:0x00000314; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_604_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
AcOGirahimuFloor__StateID_Wait = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
AcOGirahimuFloor__StateID_Return = .bss:0x00000058; // type:object size:0x40 data:4byte
|
||||
AcOGirahimuFloor__StateID_Generate = .bss:0x00000098; // type:object size:0xB0 data:4byte
|
||||
StateID_Wait__19dAcOGirahimuFloor_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
StateID_Return__19dAcOGirahimuFloor_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
StateID_Generate__19dAcOGirahimuFloor_c = .bss:0x00000098; // type:object size:0x30 data:4byte
|
||||
StateID_Broken__19dAcOGirahimuFloor_c = .bss:0x000000D8; // type:object size:0x30 data:4byte
|
||||
StateID_Move__19dAcOGirahimuFloor_c = .bss:0x00000118; // type:object size:0x30 data:4byte
|
||||
|
||||
@@ -4,19 +4,19 @@ _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
|
||||
dAcObjGirahimuKnife_c_classInit__Fv = .text:0x000000F0; // type:function size:0x150
|
||||
fn_239_240 = .text:0x00000240; // type:function size:0x58
|
||||
fn_239_2A0 = .text:0x000002A0; // type:function size:0x90
|
||||
__dt__15dShadowCircle_cFv = .text:0x00000240; // type:function size:0x58
|
||||
__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x000002A0; // type:function size:0x90
|
||||
__dt__34sFState_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00000330; // type:function size:0x58
|
||||
__dt__37sFStateFct_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00000390; // type:function size:0x6C
|
||||
__dt__90sStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000400; // type:function size:0xA0
|
||||
__dt__60sFStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c>Fv = .text:0x000004A0; // type:function size:0xA4
|
||||
AcObjGirahimuKnife__initModels = .text:0x00000550; // type:function size:0x84
|
||||
AcObjGirahimuKnife__init = .text:0x000005E0; // type:function size:0x74
|
||||
createHeap__21dAcObjGirahimuKnife_cFv = .text:0x00000550; // type:function size:0x84
|
||||
create__21dAcObjGirahimuKnife_cFv = .text:0x000005E0; // type:function size:0x74
|
||||
changeState__90sStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000660; // type:function size:0x10
|
||||
AcObjGirahimuKnife__initCollidersAndEffects = .text:0x00000670; // type:function size:0x170
|
||||
AcObjGirahimuKnife__update = .text:0x000007E0; // type:function size:0x1C4
|
||||
init__21dAcObjGirahimuKnife_cFv = .text:0x00000670; // type:function size:0x170
|
||||
actorExecute__21dAcObjGirahimuKnife_cFv = .text:0x000007E0; // type:function size:0x1C4
|
||||
executeState__90sStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000009B0; // type:function size:0x10
|
||||
AcObjGirahimuKnife__draw = .text:0x000009C0; // type:function size:0xC8
|
||||
draw__21dAcObjGirahimuKnife_cFv = .text:0x000009C0; // type:function size:0xC8
|
||||
initializeState_Wait__21dAcObjGirahimuKnife_cFv = .text:0x00000A90; // type:function size:0x64
|
||||
executeState_Wait__21dAcObjGirahimuKnife_cFv = .text:0x00000B00; // type:function size:0x110
|
||||
finalizeState_Wait__21dAcObjGirahimuKnife_cFv = .text:0x00000C10; // type:function size:0x48
|
||||
@@ -28,14 +28,14 @@ executeState_AttackEnd__21dAcObjGirahimuKnife_cFv = .text:0x00000FA0; // type:fu
|
||||
finalizeState_AttackEnd__21dAcObjGirahimuKnife_cFv = .text:0x00001010; // type:function size:0x4
|
||||
initializeState_Return__21dAcObjGirahimuKnife_cFv = .text:0x00001020; // type:function size:0x148
|
||||
executeState_Return__21dAcObjGirahimuKnife_cFv = .text:0x00001170; // type:function size:0x13C
|
||||
fn_239_12B0 = .text:0x000012B0; // type:function size:0x48
|
||||
ChkAtHit__8cCcD_ObjFv = .text:0x000012B0; // type:function size:0x48
|
||||
finalizeState_Return__21dAcObjGirahimuKnife_cFv = .text:0x00001300; // type:function size:0x4
|
||||
initializeState_Hit__21dAcObjGirahimuKnife_cFv = .text:0x00001310; // type:function size:0x3C
|
||||
executeState_Hit__21dAcObjGirahimuKnife_cFv = .text:0x00001350; // type:function size:0xC8
|
||||
finalizeState_Hit__21dAcObjGirahimuKnife_cFv = .text:0x00001420; // type:function size:0x4
|
||||
initializeState_SpinWait__21dAcObjGirahimuKnife_cFv = .text:0x00001430; // type:function size:0x6C
|
||||
executeState_SpinWait__21dAcObjGirahimuKnife_cFv = .text:0x000014A0; // type:function size:0x120
|
||||
fn_239_15C0 = .text:0x000015C0; // type:function size:0x4C
|
||||
ChkTgHit__8cCcD_ObjFv = .text:0x000015C0; // type:function size:0x4C
|
||||
finalizeState_SpinWait__21dAcObjGirahimuKnife_cFv = .text:0x00001610; // type:function size:0x48
|
||||
initializeState_SpinWaitPreAttack__21dAcObjGirahimuKnife_cFv = .text:0x00001660; // type:function size:0x34
|
||||
executeState_SpinWaitPreAttack__21dAcObjGirahimuKnife_cFv = .text:0x000016A0; // type:function size:0x104
|
||||
@@ -49,29 +49,29 @@ finalizeState_FreeWait__21dAcObjGirahimuKnife_cFv = .text:0x00001A60; // type:fu
|
||||
initializeState_CircleWait__21dAcObjGirahimuKnife_cFv = .text:0x00001AB0; // type:function size:0x84
|
||||
executeState_CircleWait__21dAcObjGirahimuKnife_cFv = .text:0x00001B40; // type:function size:0xAC
|
||||
finalizeState_CircleWait__21dAcObjGirahimuKnife_cFv = .text:0x00001BF0; // type:function size:0x50
|
||||
fn_239_1C40 = .text:0x00001C40; // type:function size:0x170
|
||||
fn_239_1DB0 = .text:0x00001DB0; // type:function size:0x198
|
||||
fn_239_1F50 = .text:0x00001F50; // type:function size:0x1C0
|
||||
fn_239_2110 = .text:0x00002110; // type:function size:0x224
|
||||
fn_239_2340 = .text:0x00002340; // type:function size:0x1C
|
||||
fn_239_2360 = .text:0x00002360; // type:function size:0xF4
|
||||
fn_239_2460 = .text:0x00002460; // type:function size:0x154
|
||||
AcObjGirahimuKnife__isInWaitState = .text:0x000025C0; // type:function size:0x134
|
||||
fn_239_1C40__21dAcObjGirahimuKnife_cFv = .text:0x00001C40; // type:function size:0x170
|
||||
fn_239_1DB0__21dAcObjGirahimuKnife_cFRC7mVec3_cRC7mVec3_c = .text:0x00001DB0; // type:function size:0x198
|
||||
fn_239_1F50__21dAcObjGirahimuKnife_cFRC7mVec3_cf = .text:0x00001F50; // type:function size:0x1C0
|
||||
fn_239_2110__21dAcObjGirahimuKnife_cFRC7mVec3_cfs = .text:0x00002110; // type:function size:0x224
|
||||
setTarget__21dAcObjGirahimuKnife_cFRC7mVec3_c = .text:0x00002340; // type:function size:0x1C
|
||||
fn_239_2360__21dAcObjGirahimuKnife_cFbbf = .text:0x00002360; // type:function size:0xF4
|
||||
fn_239_2460__21dAcObjGirahimuKnife_cFbbf = .text:0x00002460; // type:function size:0x154
|
||||
isWaiting__21dAcObjGirahimuKnife_cFv = .text:0x000025C0; // type:function size:0x134
|
||||
getStateID__90sStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00002700; // type:function size:0x10
|
||||
fn_239_2710 = .text:0x00002710; // type:function size:0x44
|
||||
fn_239_2760 = .text:0x00002760; // type:function size:0x198
|
||||
fn_239_2900 = .text:0x00002900; // type:function size:0xC8
|
||||
fn_239_29D0 = .text:0x000029D0; // type:function size:0x138
|
||||
fn_239_2B10 = .text:0x00002B10; // type:function size:0x510
|
||||
AcObjGirahimuKnife__playerAttackMatchesDartAlignmentMaybe = .text:0x00003020; // type:function size:0x224
|
||||
fn_239_3250 = .text:0x00003250; // type:function size:0x20
|
||||
fn_239_3270 = .text:0x00003270; // type:function size:0x18
|
||||
fn_239_3290 = .text:0x00003290; // type:function size:0x1CC
|
||||
fn_239_3460 = .text:0x00003460; // type:function size:0x1AC
|
||||
fn_239_3610 = .text:0x00003610; // type:function size:0x8
|
||||
fn_239_3620 = .text:0x00003620; // type:function size:0x4
|
||||
fn_239_3630 = .text:0x00003630; // type:function size:0x4
|
||||
AcObjGirahimuKnife__getEnemyLink = .text:0x00003640; // type:function size:0x8
|
||||
isCircleWait__21dAcObjGirahimuKnife_cFv = .text:0x00002710; // type:function size:0x44
|
||||
lineCheck__21dAcObjGirahimuKnife_cFv = .text:0x00002760; // type:function size:0x198
|
||||
updateMdlMatrix__21dAcObjGirahimuKnife_cFv = .text:0x00002900; // type:function size:0xC8
|
||||
startEmitters__21dAcObjGirahimuKnife_cFv = .text:0x000029D0; // type:function size:0x138
|
||||
fn_239_2B10__21dAcObjGirahimuKnife_cFv = .text:0x00002B10; // type:function size:0x510
|
||||
checkCutDir__21dAcObjGirahimuKnife_cFl = .text:0x00003020; // type:function size:0x224
|
||||
setWait__21dAcObjGirahimuKnife_cFv = .text:0x00003250; // type:function size:0x20
|
||||
setSpinWaitPreAttack__21dAcObjGirahimuKnife_cFv = .text:0x00003270; // type:function size:0x18
|
||||
getReflectForce__21dAcObjGirahimuKnife_cFR8cCcD_ObjfR7mVec3_c = .text:0x00003290; // type:function size:0x1CC
|
||||
adjustVelocity__21dAcObjGirahimuKnife_cFRC7mVec3_cff = .text:0x00003460; // type:function size:0x1AC
|
||||
vt_0x88__11dAcEnBase_cFi = .text:0x00003610; // type:function size:0x8
|
||||
vt_0x84__11dAcEnBase_cFv = .text:0x00003620; // type:function size:0x4
|
||||
vt_0x80__11dAcEnBase_cFv = .text:0x00003630; // type:function size:0x4
|
||||
getObjectListEntry__11dAcEnBase_cFv = .text:0x00003640; // type:function size:0x8
|
||||
__dt__21dAcObjGirahimuKnife_cFv = .text:0x00003650; // type:function size:0x188
|
||||
build__37sFStateFct_c<21dAcObjGirahimuKnife_c>FRC12sStateIDIf_c = .text:0x000037E0; // type:function size:0x60
|
||||
dispose__37sFStateFct_c<21dAcObjGirahimuKnife_c>FRP10sStateIf_c = .text:0x00003840; // type:function size:0xC
|
||||
@@ -90,7 +90,7 @@ initializeState__36sFStateID_c<21dAcObjGirahimuKnife_c>CFR21dAcObjGirahimuKnife_
|
||||
__sinit_\d_a_obj_girahimu_knife_cpp = .text:0x000039A0; // type:function size:0x7A0 scope:local
|
||||
__dt__36sFStateID_c<21dAcObjGirahimuKnife_c>Fv = .text:0x00004140; // type:function size:0x58
|
||||
isSameName__36sFStateID_c<21dAcObjGirahimuKnife_c>CFPCc = .text:0x000041A0; // type:function size:0x88
|
||||
fn_239_4230 = .text:0x00004230; // type:function size:0x8
|
||||
@272@__dt__22dCcD_Linked<8dCcD_Sph>Fv = .text:0x00004230; // type:function size:0x8
|
||||
_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
|
||||
@@ -108,7 +108,7 @@ lbl_239_rodata_50 = .rodata:0x00000050; // type:object size:0x4 align:4 data:flo
|
||||
lbl_239_rodata_54 = .rodata:0x00000054; // type:object size:0xC align:4 data:float
|
||||
lbl_239_rodata_60 = .rodata:0x00000060; // type:object size:0x4 align:4 data:float
|
||||
lbl_239_rodata_64 = .rodata:0x00000064; // type:object size:0x34 align:4 data:float
|
||||
lbl_239_data_0 = .data:0x00000000; // type:object size:0x30 data:4byte
|
||||
sSrcSph = .data:0x00000000; // type:object size:0x30 data:4byte
|
||||
g_profile_OBJ_GH_KNIFE = .data:0x00000030; // type:object size:0x10
|
||||
lbl_239_data_40 = .data:0x00000040; // type:object size:0xD data:string
|
||||
lbl_239_data_50 = .data:0x00000050; // type:object size:0xE data:string
|
||||
@@ -116,22 +116,27 @@ lbl_239_data_60 = .data:0x00000060; // type:object size:0x23 data:string
|
||||
lbl_239_data_84 = .data:0x00000084; // type:object size:0x4 data:4byte
|
||||
lbl_239_data_88 = .data:0x00000088; // type:object size:0xC data:4byte
|
||||
lbl_239_data_94 = .data:0x00000094; // type:object size:0xC data:4byte
|
||||
AcObjGirahimuKnife__vtable = .data:0x000000A0; // type:object size:0x90
|
||||
lbl_239_data_130 = .data:0x00000130; // type:object size:0x30
|
||||
lbl_239_data_160 = .data:0x00000160; // type:object size:0x30
|
||||
lbl_239_data_190 = .data:0x00000190; // type:object size:0x18
|
||||
lbl_239_data_1A8 = .data:0x000001A8; // type:object size:0x18
|
||||
lbl_239_data_1C0 = .data:0x000001C0; // type:object size:0x70
|
||||
lbl_239_data_230 = .data:0x00000230; // type:object size:0x314
|
||||
__vt__21dAcObjGirahimuKnife_c = .data:0x000000A0; // type:object size:0x90
|
||||
__vt__60sFStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c> = .data:0x00000130; // type:object size:0x30
|
||||
__vt__90sStateMgr_c<21dAcObjGirahimuKnife_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000160; // type:object size:0x30
|
||||
__vt__37sFStateFct_c<21dAcObjGirahimuKnife_c> = .data:0x00000190; // type:object size:0x18
|
||||
__vt__34sFState_c<21dAcObjGirahimuKnife_c> = .data:0x000001A8; // type:object size:0x18
|
||||
__vt__22dCcD_Linked<8dCcD_Sph> = .data:0x000001C0; // type:object size:0x70
|
||||
__vt__15dShadowCircle_c = .data:0x00000230; // type:object size:0x314
|
||||
lbl_239_data_544 = .data:0x00000544; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_239_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte
|
||||
lbl_239_bss_10 = .bss:0x00000010; // type:object size:0x2 data:2byte
|
||||
lbl_239_bss_12 = .bss:0x00000012; // type:object size:0xE data:2byte
|
||||
AcObjGirahimuKnife__STATE_WAIT = .bss:0x00000020; // type:object size:0x80 data:4byte
|
||||
AcObjGirahimuKnife__STATE_SPIN_WAIT_PRE_ATTACK = .bss:0x000000A0; // type:object size:0xC0 data:4byte
|
||||
AcObjGirahimuKnife__STATE_ATTACK = .bss:0x00000160; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuKnife__STATE_ATTACK_END = .bss:0x000001A0; // type:object size:0xC0 data:4byte
|
||||
AcObjGirahimuKnife__STATE_CIRCLE_WAIT = .bss:0x00000260; // type:object size:0x30 data:4byte
|
||||
sSomething0__21dAcObjGirahimuKnife_c = .bss:0x00000008; // type:object size:0x8 data:4byte
|
||||
sSomething1__21dAcObjGirahimuKnife_c = .bss:0x00000010; // type:object size:0x2 data:2byte
|
||||
sSomething2__21dAcObjGirahimuKnife_c = .bss:0x00000012; // type:object size:0xE data:2byte
|
||||
StateID_Wait__21dAcObjGirahimuKnife_c = .bss:0x00000020; // type:object size:0x30 data:4byte
|
||||
StateID_SpinWait__21dAcObjGirahimuKnife_c = .bss:0x00000060; // type:object size:0x30 data:4byte
|
||||
StateID_SpinWaitPreAttack__21dAcObjGirahimuKnife_c = .bss:0x000000A0; // type:object size:0x30 data:4byte
|
||||
StateID_SpinFreeWait__21dAcObjGirahimuKnife_c = .bss:0x000000E0; // type:object size:0x30 data:4byte
|
||||
StateID_FreeWait__21dAcObjGirahimuKnife_c = .bss:0x00000120; // type:object size:0x30 data:4byte
|
||||
StateID_Attack__21dAcObjGirahimuKnife_c = .bss:0x00000160; // type:object size:0x30 data:4byte
|
||||
StateID_AttackEnd__21dAcObjGirahimuKnife_c = .bss:0x000001A0; // type:object size:0x30 data:4byte
|
||||
StateID_Return__21dAcObjGirahimuKnife_c = .bss:0x000001E0; // type:object size:0x30 data:4byte
|
||||
StateID_Hit__21dAcObjGirahimuKnife_c = .bss:0x00000220; // type:object size:0x30 data:4byte
|
||||
StateID_CircleWait__21dAcObjGirahimuKnife_c = .bss:0x00000260; // type:object size:0x30 data:4byte
|
||||
lbl_239_bss_290 = .bss:0x00000290; // type:object size:0x8 data:byte
|
||||
lbl_239_bss_298 = .bss:0x00000298; // type:object size:0x10 align:4 data:float
|
||||
|
||||
@@ -4,23 +4,23 @@ _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
|
||||
dAcObjGirahimuSwordLink_c_classInit__Fv = .text:0x000000F0; // type:function size:0x1A4
|
||||
fn_238_2A0 = .text:0x000002A0; // type:function size:0x84
|
||||
fn_238_330 = .text:0x00000330; // type:function size:0x58
|
||||
fn_238_390 = .text:0x00000390; // type:function size:0x90
|
||||
fn_238_420 = .text:0x00000420; // type:function size:0xCC
|
||||
fn_238_4F0 = .text:0x000004F0; // type:function size:0x58
|
||||
__dt__26dSwordSwingEffectProcMgr_cFv = .text:0x000002A0; // type:function size:0x84
|
||||
__ct__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00000330; // type:function size:0x58
|
||||
__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00000390; // type:function size:0x90
|
||||
__dt__16dEnemySwordMdl_cFv = .text:0x00000420; // type:function size:0xCC
|
||||
__dt__15dShadowCircle_cFv = .text:0x000004F0; // type:function size:0x58
|
||||
__dt__38sFState_c<25dAcObjGirahimuSwordLink_c>Fv = .text:0x00000550; // type:function size:0x58
|
||||
__dt__41sFStateFct_c<25dAcObjGirahimuSwordLink_c>Fv = .text:0x000005B0; // type:function size:0x6C
|
||||
__dt__94sStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000620; // type:function size:0xA0
|
||||
__dt__64sFStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c>Fv = .text:0x000006C0; // type:function size:0xA4
|
||||
AcObjGirahimuSwordLink__initModels = .text:0x00000770; // type:function size:0xB4
|
||||
AcObjGirahimuSwordLink__init = .text:0x00000830; // type:function size:0x74
|
||||
createHeap__25dAcObjGirahimuSwordLink_cFv = .text:0x00000770; // type:function size:0xB4
|
||||
create__25dAcObjGirahimuSwordLink_cFv = .text:0x00000830; // type:function size:0x74
|
||||
changeState__94sStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000008B0; // type:function size:0x10
|
||||
AcObjGirahimuSwordLink__boundingBoxStuff = .text:0x000008C0; // type:function size:0x100
|
||||
AcObjGirahimuSwordLink__update = .text:0x000009C0; // type:function size:0x108
|
||||
init__25dAcObjGirahimuSwordLink_cFv = .text:0x000008C0; // type:function size:0x100
|
||||
actorExecute__25dAcObjGirahimuSwordLink_cFv = .text:0x000009C0; // type:function size:0x108
|
||||
executeState__94sStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000AD0; // type:function size:0x10
|
||||
getStateID__94sStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000AE0; // type:function size:0x10
|
||||
AcObjGirahimuSwordLink__draw = .text:0x00000AF0; // type:function size:0x104
|
||||
draw__25dAcObjGirahimuSwordLink_cFv = .text:0x00000AF0; // type:function size:0x104
|
||||
initializeState_Hide__25dAcObjGirahimuSwordLink_cFv = .text:0x00000C00; // type:function size:0x4
|
||||
executeState_Hide__25dAcObjGirahimuSwordLink_cFv = .text:0x00000C10; // type:function size:0x4
|
||||
finalizeState_Hide__25dAcObjGirahimuSwordLink_cFv = .text:0x00000C20; // type:function size:0x4
|
||||
@@ -35,7 +35,7 @@ executeState_Throw__25dAcObjGirahimuSwordLink_cFv = .text:0x00000E00; // type:fu
|
||||
finalizeState_Throw__25dAcObjGirahimuSwordLink_cFv = .text:0x00000F60; // type:function size:0xC
|
||||
initializeState_AtThrow__25dAcObjGirahimuSwordLink_cFv = .text:0x00000F70; // type:function size:0x3C
|
||||
executeState_AtThrow__25dAcObjGirahimuSwordLink_cFv = .text:0x00000FB0; // type:function size:0x278
|
||||
fn_238_1230 = .text:0x00001230; // type:function size:0x48
|
||||
ChkAtHit__8cCcD_ObjFv = .text:0x00001230; // type:function size:0x48
|
||||
finalizeState_AtThrow__25dAcObjGirahimuSwordLink_cFv = .text:0x00001280; // type:function size:0xC
|
||||
initializeState_Stick__25dAcObjGirahimuSwordLink_cFv = .text:0x00001290; // type:function size:0x50
|
||||
executeState_Stick__25dAcObjGirahimuSwordLink_cFv = .text:0x000012E0; // type:function size:0x14C
|
||||
@@ -43,18 +43,18 @@ finalizeState_Stick__25dAcObjGirahimuSwordLink_cFv = .text:0x00001430; // type:f
|
||||
initializeState_Reflect__25dAcObjGirahimuSwordLink_cFv = .text:0x00001440; // type:function size:0x74
|
||||
executeState_Reflect__25dAcObjGirahimuSwordLink_cFv = .text:0x000014C0; // type:function size:0x3F0
|
||||
finalizeState_Reflect__25dAcObjGirahimuSwordLink_cFv = .text:0x000018B0; // type:function size:0xC
|
||||
AcObjGirahimuSwordLink__setStateEquip = .text:0x000018C0; // type:function size:0x18
|
||||
AcObjGirahimuSwordLink__setStateGetSword = .text:0x000018E0; // type:function size:0x18
|
||||
AcObjGirahimuSwordLink__setStateHide = .text:0x00001900; // type:function size:0x18
|
||||
AcObjGirahimuSwordLink__setStateThrow = .text:0x00001920; // type:function size:0x5C
|
||||
AcObjGirahimuSwordLink__setStateAtThrow = .text:0x00001980; // type:function size:0x48
|
||||
fn_238_19D0 = .text:0x000019D0; // type:function size:0x4
|
||||
fn_238_19E0 = .text:0x000019E0; // type:function size:0xA4
|
||||
AcObjGirahimuSwordLink__setSwordModelMatrixMaybe = .text:0x00001A90; // type:function size:0xE0
|
||||
AcObjGirahimuSwordLink__isInStateHide = .text:0x00001B70; // type:function size:0x44
|
||||
AcObjGirahimuSwordLink__isInStateStick = .text:0x00001BC0; // type:function size:0x44
|
||||
fn_238_1C10 = .text:0x00001C10; // type:function size:0x1D0
|
||||
AcObjGirahimuSwordLink__someCollisionCheck = .text:0x00001DE0; // type:function size:0x420
|
||||
setEquip__25dAcObjGirahimuSwordLink_cFv = .text:0x000018C0; // type:function size:0x18
|
||||
setGetSword__25dAcObjGirahimuSwordLink_cFv = .text:0x000018E0; // type:function size:0x18
|
||||
setHide__25dAcObjGirahimuSwordLink_cFv = .text:0x00001900; // type:function size:0x18
|
||||
setThrow__25dAcObjGirahimuSwordLink_cFRC7mVec3_c4mAngf = .text:0x00001920; // type:function size:0x5C
|
||||
setAtThrow__25dAcObjGirahimuSwordLink_cFRC7mVec3_c = .text:0x00001980; // type:function size:0x48
|
||||
fn_238_19D0__25dAcObjGirahimuSwordLink_cFv = .text:0x000019D0; // type:function size:0x4
|
||||
updateModelMatrix__25dAcObjGirahimuSwordLink_cFv = .text:0x000019E0; // type:function size:0xA4
|
||||
setTransform__25dAcObjGirahimuSwordLink_cFRC6mMtx_cRC7mVec3_c = .text:0x00001A90; // type:function size:0xE0
|
||||
isHide__25dAcObjGirahimuSwordLink_cFv = .text:0x00001B70; // type:function size:0x44
|
||||
isStick__25dAcObjGirahimuSwordLink_cFv = .text:0x00001BC0; // type:function size:0x44
|
||||
reflect__25dAcObjGirahimuSwordLink_cFRC7mVec3_cfff = .text:0x00001C10; // type:function size:0x1D0
|
||||
lineCheck__25dAcObjGirahimuSwordLink_cFv = .text:0x00001DE0; // type:function size:0x420
|
||||
__dt__25dAcObjGirahimuSwordLink_cFv = .text:0x00002200; // type:function size:0x170
|
||||
build__41sFStateFct_c<25dAcObjGirahimuSwordLink_c>FRC12sStateIDIf_c = .text:0x00002370; // type:function size:0x60
|
||||
dispose__41sFStateFct_c<25dAcObjGirahimuSwordLink_c>FRP10sStateIf_c = .text:0x000023D0; // type:function size:0xC
|
||||
@@ -73,7 +73,7 @@ initializeState__40sFStateID_c<25dAcObjGirahimuSwordLink_c>CFR25dAcObjGirahimuSw
|
||||
__sinit_\d_a_obj_girahimu_sword_link_cpp = .text:0x00002530; // type:function size:0x56C scope:local
|
||||
__dt__40sFStateID_c<25dAcObjGirahimuSwordLink_c>Fv = .text:0x00002AA0; // type:function size:0x58
|
||||
isSameName__40sFStateID_c<25dAcObjGirahimuSwordLink_c>CFPCc = .text:0x00002B00; // type:function size:0x88
|
||||
fn_238_2B90 = .text:0x00002B90; // type:function size:0x8
|
||||
@272@__dt__22dCcD_Linked<8dCcD_Cps>Fv = .text:0x00002B90; // type:function size:0x8
|
||||
_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
|
||||
@@ -88,22 +88,22 @@ lbl_238_data_40 = .data:0x00000040; // type:object size:0x4 data:4byte
|
||||
lbl_238_data_44 = .data:0x00000044; // type:object size:0xC data:4byte
|
||||
lbl_238_data_50 = .data:0x00000050; // type:object size:0x1C data:4byte
|
||||
lbl_238_data_6C = .data:0x0000006C; // type:object size:0x4 data:4byte
|
||||
AcObjGirahimuSwordLink__vtable = .data:0x00000070; // type:object size:0x80
|
||||
lbl_238_data_F0 = .data:0x000000F0; // type:object size:0x30
|
||||
lbl_238_data_120 = .data:0x00000120; // type:object size:0x30
|
||||
lbl_238_data_150 = .data:0x00000150; // type:object size:0x18
|
||||
lbl_238_data_168 = .data:0x00000168; // type:object size:0x18
|
||||
lbl_238_data_180 = .data:0x00000180; // type:object size:0x10
|
||||
lbl_238_data_190 = .data:0x00000190; // type:object size:0x70
|
||||
lbl_238_data_200 = .data:0x00000200; // type:object size:0xC
|
||||
lbl_238_data_20C = .data:0x0000020C; // type:object size:0x23C
|
||||
__vt__25dAcObjGirahimuSwordLink_c = .data:0x00000070; // type:object size:0x80
|
||||
__vt__64sFStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c> = .data:0x000000F0; // type:object size:0x30
|
||||
__vt__94sStateMgr_c<25dAcObjGirahimuSwordLink_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000120; // type:object size:0x30
|
||||
__vt__41sFStateFct_c<25dAcObjGirahimuSwordLink_c> = .data:0x00000150; // type:object size:0x18
|
||||
__vt__38sFState_c<25dAcObjGirahimuSwordLink_c> = .data:0x00000168; // type:object size:0x18
|
||||
__vt__16dEnemySwordMdl_c = .data:0x00000180; // type:object size:0x10
|
||||
__vt__22dCcD_Linked<8dCcD_Cps> = .data:0x00000190; // type:object size:0x70
|
||||
__vt__26dSwordSwingEffectProcMgr_c = .data:0x00000200; // type:object size:0xC
|
||||
__vt__15dShadowCircle_c = .data:0x0000020C; // type:object size:0x23C
|
||||
lbl_238_data_448 = .data:0x00000448; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_238_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_HIDE = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_EQUIP = .bss:0x00000058; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_GET_SWORD = .bss:0x00000098; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_THROW = .bss:0x000000D8; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_AT_THROW = .bss:0x00000118; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_STICK = .bss:0x00000158; // type:object size:0x40 data:4byte
|
||||
AcObjGirahimuSwordLink__STATE_REFLECT = .bss:0x00000198; // type:object size:0x48 data:4byte
|
||||
StateID_Hide__25dAcObjGirahimuSwordLink_c = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
StateID_Equip__25dAcObjGirahimuSwordLink_c = .bss:0x00000058; // type:object size:0x40 data:4byte
|
||||
StateID_GetSword__25dAcObjGirahimuSwordLink_c = .bss:0x00000098; // type:object size:0x40 data:4byte
|
||||
StateID_Throw__25dAcObjGirahimuSwordLink_c = .bss:0x000000D8; // type:object size:0x40 data:4byte
|
||||
StateID_AtThrow__25dAcObjGirahimuSwordLink_c = .bss:0x00000118; // type:object size:0x40 data:4byte
|
||||
StateID_Stick__25dAcObjGirahimuSwordLink_c = .bss:0x00000158; // type:object size:0x40 data:4byte
|
||||
StateID_Reflect__25dAcObjGirahimuSwordLink_c = .bss:0x00000198; // type:object size:0x48 data:4byte
|
||||
|
||||
@@ -1120,10 +1120,10 @@ getObjectListEntry__12dAcObjBase_cFv = .text:0x8002E5B0; // type:function size:0
|
||||
restorePosRotFromCopy__12dAcObjBase_cFv = .text:0x8002E5C0; // type:function size:0x70
|
||||
create__12dAcObjBase_cFQ28fProfile14PROFILE_NAME_eUlUlPC7mVec3_cPC7mAng3_cPC7mVec3_cUl = .text:0x8002E630; // type:function size:0x98
|
||||
create__12dAcObjBase_cFPCcUlUlPC7mVec3_cPC7mAng3_cPC7mVec3_cUlUsSc = .text:0x8002E6D0; // type:function size:0xA0
|
||||
ActorObjectBase__findObject = .text:0x8002E770; // type:function size:0x7C
|
||||
findObject__12dAcObjBase_cFQ28fProfile14PROFILE_NAME_eP9fLiMgBa_cP12dAcObjBase_c = .text:0x8002E770; // type:function size:0x7C
|
||||
getNextObject__12dAcObjBase_cFP9fLiMgBa_cP12dAcObjBase_c = .text:0x8002E7F0; // type:function size:0x58
|
||||
isPlayer__12dAcObjBase_cFv = .text:0x8002E850; // type:function size:0x14
|
||||
ActorObjectBase__calcVelocity = .text:0x8002E870; // type:function size:0x68
|
||||
calcVelocity__12dAcObjBase_cFRC7mVec3_cf = .text:0x8002E870; // type:function size:0x68
|
||||
calcVelocity__12dAcObjBase_cFv = .text:0x8002E8E0; // type:function size:0xB8
|
||||
updateMatrix__12dAcObjBase_cFv = .text:0x8002E9A0; // type:function size:0x58
|
||||
ActorObjectBase__setDefaultCullDistance = .text:0x8002EA00; // type:function size:0xC
|
||||
@@ -3051,7 +3051,7 @@ createSwingEntries__26dSwordSwingEffectProcMgr_cFRC7mVec3_cRC7mVec3_c = .text:0x
|
||||
calc__26dSwordSwingEffectProcMgr_cFRC7mVec3_cRC7mVec3_c = .text:0x8006B310; // type:function size:0x94
|
||||
entry__26dSwordSwingEffectProcMgr_cFv = .text:0x8006B3B0; // type:function size:0x10
|
||||
create__16dEnemySwordMdl_cFP12mAllocator_cPvPCcUlRC7mVec3_cRC7mVec3_cR9cCcD_SttsPQ23EGG7ResTIMGiPUl = .text:0x8006B3C0; // type:function size:0x140
|
||||
create__16dEnemySwordMdl_cFP12mAllocator_cQ34nw4r3g3d7ResFilePCcUlRC7mVec3_cRC7mVec3_cR9cCcD_SttsPQ23EGG7ResTIMGiPUl = .text:0x8006B500; // type:function size:0x13C
|
||||
create__16dEnemySwordMdl_cFP12mAllocator_cRQ34nw4r3g3d7ResFilePCcUlRC7mVec3_cRC7mVec3_cR9cCcD_SttsPQ23EGG7ResTIMGiPUl = .text:0x8006B500; // type:function size:0x13C
|
||||
enableAttack__16dEnemySwordMdl_cFv = .text:0x8006B640; // type:function size:0x20
|
||||
fn_8006B660__16dEnemySwordMdl_cFiiiiiiiiif = .text:0x8006B660; // type:function size:0xB4
|
||||
setDamageMaybe__16dEnemySwordMdl_cFUc = .text:0x8006B720; // type:function size:0x10
|
||||
@@ -3059,7 +3059,7 @@ fn_8006B730 = .text:0x8006B730; // type:function size:0x5C
|
||||
fn_8006B790 = .text:0x8006B790; // type:function size:0x10
|
||||
fn_8006B7A0__16dEnemySwordMdl_cFUl = .text:0x8006B7A0; // type:function size:0x5C
|
||||
fn_8006B800__16dEnemySwordMdl_cFUl = .text:0x8006B800; // type:function size:0x10
|
||||
fn_8006B810 = .text:0x8006B810; // type:function size:0x5C
|
||||
SetGrp__16dEnemySwordMdl_cFUl = .text:0x8006B810; // type:function size:0x5C
|
||||
fn_8006B870 = .text:0x8006B870; // type:function size:0x10
|
||||
calc__16dEnemySwordMdl_cFRC6mMtx_cRC7mVec3_cb = .text:0x8006B880; // type:function size:0x2A8
|
||||
entry__16dEnemySwordMdl_cFP12dAcObjBase_cP15dShadowCircle_cP9mSphere_c = .text:0x8006BB30; // type:function size:0xA4
|
||||
|
||||
+1
-1
@@ -2521,7 +2521,7 @@ config.libs = [
|
||||
Rel(NonMatching, "d_a_obj_fruit_tree", "REL/d/a/obj/d_a_obj_fruit_tree.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_gear", "REL/d/a/obj/d_a_obj_gear.cpp"),
|
||||
Rel(
|
||||
NonMatching, "d_a_obj_girahimu_floor", "REL/d/a/obj/d_a_obj_girahimu_floor.cpp"
|
||||
Matching, "d_a_obj_girahimu_floor", "REL/d/a/obj/d_a_obj_girahimu_floor.cpp"
|
||||
),
|
||||
Rel(
|
||||
NonMatching, "d_a_obj_girahimu_knife", "REL/d/a/obj/d_a_obj_girahimu_knife.cpp"
|
||||
|
||||
@@ -9,8 +9,14 @@ public:
|
||||
dAcGirahimu2_c() : mStateMgr(*this) {}
|
||||
virtual ~dAcGirahimu2_c() {}
|
||||
|
||||
void setField_0xD52(u16 val) {
|
||||
field_0xD52 = val;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcGirahimu2_c);
|
||||
|
||||
/* 0xD52 */ u16 field_0xD52;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,19 +1,83 @@
|
||||
#ifndef D_A_GIRAHIMU_SWORD_BEAM_H
|
||||
#define D_A_GIRAHIMU_SWORD_BEAM_H
|
||||
|
||||
#include "c/c_lib.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_cc.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
class dAcGirahimuSwordBeam_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcGirahimuSwordBeam_c() : mStateMgr(*this) {}
|
||||
virtual ~dAcGirahimuSwordBeam_c() {}
|
||||
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcGirahimuSwordBeam_c, BulletMove);
|
||||
STATE_FUNC_DECLARE(dAcGirahimuSwordBeam_c, Damage);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcGirahimuSwordBeam_c);
|
||||
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcGirahimuSwordBeam_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcGirahimuSwordBeam_c);
|
||||
|
||||
void swordBeamReturn(s32);
|
||||
void startMoveEmitters();
|
||||
void startDisappearEmitter();
|
||||
void transformMatrix();
|
||||
void fn_240_11F0();
|
||||
void fn_240_1380();
|
||||
void fn_240_16C0();
|
||||
void fn_240_1710();
|
||||
void fn_240_17C0(s32);
|
||||
void fn_240_1810(u32, mAng3_c &, const mAng &);
|
||||
|
||||
void setB00(s16 x, s16 y, s16 z) {
|
||||
field_0xB00 = x;
|
||||
field_0xB02 = y;
|
||||
field_0xB04 = z;
|
||||
}
|
||||
|
||||
mAng getLinkedAngle() const {
|
||||
return (cLib::targetAngleY(mPosition, field_0xAF4.get()->mPosition));
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcGirahimuSwordBeam_c);
|
||||
/* 0x330 */ dShadowCircle_c mShadow;
|
||||
/* 0x338 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x394 */ dBgS_ObjAcch mAcch;
|
||||
/* 0x744 */ dCcD_Linked<dCcD_Cps> mCps0;
|
||||
/* 0x8C4 */ dCcD_Linked<dCcD_Cps> mCps1;
|
||||
/* 0xA40 */ dColliderLinkedList mCollider;
|
||||
/* 0xA50 */ STATE_MGR_DECLARE(dAcGirahimuSwordBeam_c);
|
||||
/* 0xA8C */ dEmitter_c mEmitter0;
|
||||
/* 0xAC0 */ dEmitter_c mEmitter1;
|
||||
/* 0xAF4 */ dAcObjRef_c field_0xAF4;
|
||||
/* 0xB00 */ s16 field_0xB00;
|
||||
/* 0xB02 */ s16 field_0xB02;
|
||||
/* 0xB04 */ s16 field_0xB04;
|
||||
/* 0xB06 */ s16 field_0xB06;
|
||||
/* 0xB08 */ s16 field_0xB08;
|
||||
/* 0xB0A */ s16 field_0xB0A;
|
||||
/* 0xB0C */ f32 field_0xB0C;
|
||||
/* 0xB10 */ s32 field_0xB10;
|
||||
/* 0xB14 */ mAng field_0xB14;
|
||||
/* 0xB16 */ s16 field_0xB16;
|
||||
/* 0xB18 */ u16 field_0xB18;
|
||||
/* 0xB1C */ s32 field_0xB1C;
|
||||
/* 0xB20 */ s32 field_0xB20;
|
||||
/* 0xB24 */ u8 field_0xB24;
|
||||
/* 0xB25 */ u8 field_0xB25;
|
||||
/* 0xB26 */ u8 field_0xB26;
|
||||
/* 0xB27 */ u8 field_0xB27;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -100,6 +100,9 @@ public:
|
||||
static dAcEnBase_c *GetNextEnemy(dAcEnBase_c *pParent) {
|
||||
return static_cast<dAcEnBase_c *>(getNextObject(&sEnemyList, pParent));
|
||||
}
|
||||
static dAcEnBase_c *FindEnemy(fProfile::PROFILE_NAME_e profile, dAcEnBase_c *pParent = nullptr) {
|
||||
return static_cast<dAcEnBase_c *>(findObject(profile, &sEnemyList, pParent));
|
||||
}
|
||||
|
||||
protected:
|
||||
// TODO: Make accessors for this list to auto-convert to dAcEnBase?
|
||||
|
||||
@@ -203,16 +203,17 @@ public:
|
||||
const mVec3_c *scale, u32 params2, u32 roomId
|
||||
);
|
||||
|
||||
static dAcObjBase_c *findObject(fProfile::PROFILE_NAME_e actorId, fLiNdBa_c *refList, dAcObjBase_c *parent);
|
||||
static dAcObjBase_c *findObject(fProfile::PROFILE_NAME_e actorId, fLiMgBa_c *refList, dAcObjBase_c *parent);
|
||||
static dAcObjBase_c *getNextObject(fLiMgBa_c *ref, dAcObjBase_c *parent);
|
||||
bool isPlayer();
|
||||
void calcVelocity(mVec3_c &pos, f32 speed);
|
||||
void calcVelocity(const mVec3_c &pos, f32 speed);
|
||||
void calcVelocity();
|
||||
void updateMatrix();
|
||||
void setDefaultCullDistance();
|
||||
void fn_8002EA30(f32, f32, f32, f32, f32, void *);
|
||||
void fn_8002EA60(void *);
|
||||
void fn_8002EB30(void *);
|
||||
|
||||
void putInODesert(f32 depth, mVec3_c *position);
|
||||
void fn_8002ECD0(m3d::smdl_c *smdl, UNKWORD);
|
||||
// Disabling makes Items and Link Disappear
|
||||
|
||||
@@ -1,22 +1,85 @@
|
||||
#ifndef D_A_OBJ_GIRAHIMU_FLOOR_H
|
||||
#define D_A_OBJ_GIRAHIMU_FLOOR_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "m/m3d/m_anmmatclr.h"
|
||||
#include "m/m3d/m_anmtexsrt.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dAcGirahimu3First_c;
|
||||
class dAcOGirahimuFloor_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOGirahimuFloor_c() : mStateMgr(*this) {}
|
||||
virtual ~dAcOGirahimuFloor_c() {}
|
||||
|
||||
enum Type_e {
|
||||
TYPE_Normal,
|
||||
TYPE_Generate,
|
||||
TYPE_Max
|
||||
};
|
||||
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorCreate() override;
|
||||
virtual int actorPostCreate() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Return);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Generate);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Broken);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Move);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcOGirahimuFloor_c);
|
||||
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcOGirahimuFloor_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcOGirahimuFloor_c);
|
||||
STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcOGirahimuFloor_c);
|
||||
|
||||
// Used to request deletion upon both Player and Boss off the platform
|
||||
bool isPlayerAndGhirahimOffFloor();
|
||||
|
||||
// If it is the generate type and there is no linked child
|
||||
bool isGenerateNoChild();
|
||||
|
||||
// Checks if Link is in a final blow state and has connected
|
||||
// with something other than the platform (like ghirahim)
|
||||
bool isSuccessfulFinalBlow();
|
||||
|
||||
// Moves the position to the target destinaton
|
||||
void movePosition();
|
||||
|
||||
// Breaks the platform, releases mBg and requests deletion
|
||||
void doShatter();
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOGirahimuFloor_c);
|
||||
/* 0x330 */ nw4r::g3d::ResFile mRes;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dBgW mBg[3];
|
||||
/* 0x980 */ STATE_MGR_DECLARE(dAcOGirahimuFloor_c);
|
||||
/* 0x9BC */ m3d::anmTexSrt_c mAnmTexSrt;
|
||||
/* 0x9E8 */ m3d::anmMatClr_c mAnmMatClr[3];
|
||||
/* 0xA6C */ dAcRef_c<dAcGirahimu3First_c> mGhirahimRef;
|
||||
/* 0xA78 */ dAcRef_c<dAcOGirahimuFloor_c> mChild;
|
||||
/* 0xA64 */ mVec3_c mHomePos;
|
||||
/* 0xA90 */ mVec3_c mTargetPos;
|
||||
/* 0xA9C */ mVec3_c mScaleBg0;
|
||||
/* 0xAA8 */ mVec3_c mScaleBg1;
|
||||
/* 0xAB4 */ f32 mMoveRate;
|
||||
/* 0xAB4 */ f32 mGndHeight;
|
||||
/* 0xABC */ u8 mType;
|
||||
/* 0xABD */ u8 field_0xABD;
|
||||
/* 0xABE */ u8 field_0xABE;
|
||||
/* 0xAC0 */ s32 field_0xAC0;
|
||||
/* 0xAC4 */ bool mbIsHome;
|
||||
/* 0xAC5 */ bool mbMediumSize;
|
||||
/* 0xAC6 */ bool mbRequestShatter;
|
||||
/* 0xAC7 */ bool mbRequestMove;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,13 +2,28 @@
|
||||
#define D_A_OBJ_GIRAHIMU_KNIFE_H
|
||||
|
||||
#include "d/a/e/d_a_en_base.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_cc.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
class dAcObjGirahimuKnife_c : public dAcEnBase_c {
|
||||
public:
|
||||
dAcObjGirahimuKnife_c() : mStateMgr(*this) {}
|
||||
dAcObjGirahimuKnife_c() : mGlowEmitter(this), mTrailEmitter(this), mStateMgr(*this) {}
|
||||
virtual ~dAcObjGirahimuKnife_c() {}
|
||||
|
||||
virtual int create() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuKnife_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuKnife_c, SpinWait);
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuKnife_c, SpinWaitPreAttack);
|
||||
@@ -20,8 +35,75 @@ public:
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuKnife_c, Hit);
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuKnife_c, CircleWait);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcObjGirahimuKnife_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcObjGirahimuKnife_c);
|
||||
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcObjGirahimuKnife_c);
|
||||
STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcObjGirahimuKnife_c);
|
||||
|
||||
void init();
|
||||
|
||||
void fn_239_1C40();
|
||||
void fn_239_1DB0(const mVec3_c &base, const mVec3_c &target);
|
||||
void fn_239_1F50(const mVec3_c &target, f32 add);
|
||||
void fn_239_2110(const mVec3_c &target, f32 add, s16 ang);
|
||||
void setTarget(const mVec3_c &t);
|
||||
void fn_239_2360(bool, bool, f32 zVel);
|
||||
void fn_239_2460(bool, bool, f32 velMult);
|
||||
bool isWaiting();
|
||||
bool isCircleWait();
|
||||
bool lineCheck();
|
||||
void updateMdlMatrix();
|
||||
void startEmitters();
|
||||
void fn_239_2B10();
|
||||
bool checkCutDir(s32 cutDir);
|
||||
void setWait();
|
||||
void setSpinWaitPreAttack();
|
||||
void getReflectForce(cCcD_Obj &cc, f32 forceMult, mVec3_c &outforce);
|
||||
void adjustVelocity(const mVec3_c &force, f32 yVel, f32 forwardVel);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcObjGirahimuKnife_c);
|
||||
/* 0x378 */ m3d::smdl_c mMdl;
|
||||
/* 0x394 */ dShadowCircle_c mShadow;
|
||||
/* 0x39C */ dEmitter_c mGlowEmitter;
|
||||
/* 0x3D0 */ dEmitter_c mTrailEmitter;
|
||||
/* 0x404 */ dCcD_Linked<dCcD_Sph> mSph0;
|
||||
/* 0x564 */ dCcD_Linked<dCcD_Sph> mSph1;
|
||||
/* 0x6C0 */ dColliderLinkedList mCollider;
|
||||
/* 0x6D0 */ s16 field_0x6D0;
|
||||
/* 0x6D2 */ u16 mGlowEmitterId;
|
||||
/* 0x6D4 */ u16 mTrailEmitterId;
|
||||
/* 0x6D6 */ u16 field_0x6D6;
|
||||
/* 0x6D8 */ mVec3_c field_0x6D8;
|
||||
/* 0x6E4 */ mVec3_c field_0x6E4;
|
||||
/* 0x6F0 */ mAng3_c field_0x6F0;
|
||||
/* 0x6F6 */ mAng3_c field_0x6F6;
|
||||
/* 0x7FC */ u8 _0x6FC[0x704 - 0x6FC];
|
||||
/* 0x704 */ mQuat_c field_0x704;
|
||||
/* 0x714 */ mMtx_c field_0x714;
|
||||
/* 0x744 */ mVec3_c field_0x744;
|
||||
/* 0x750 */ mVec3_c field_0x750;
|
||||
/* 0x75C */ mVec3_c field_0x75C;
|
||||
/* 0x768 */ mVec3_c field_0x768;
|
||||
/* 0x774 */ f32 field_0x774;
|
||||
/* 0x778 */ s16 field_0x778;
|
||||
/* 0x77C */ f32 field_0x77C;
|
||||
/* 0x780 */ mAng field_0x780;
|
||||
/* 0x784 */ s32 field_0x784;
|
||||
/* 0x788 */ s32 mState;
|
||||
/* 0x78C */ bool field_0x78C;
|
||||
/* 0x78D */ bool field_0x78D;
|
||||
/* 0x78E */ bool field_0x78E;
|
||||
/* 0x78F */ bool field_0x78F;
|
||||
/* 0x790 */ bool field_0x790;
|
||||
/* 0x791 */ bool field_0x791;
|
||||
/* 0x792 */ bool field_0x792;
|
||||
/* 0x793 */ bool field_0x793;
|
||||
/* 0x794 */ STATE_MGR_DECLARE(dAcObjGirahimuKnife_c);
|
||||
|
||||
static s32 sSomething0;
|
||||
static s32 sSomething0_1;
|
||||
static mAng sSomething1;
|
||||
static s16 sSomething2;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,13 +2,41 @@
|
||||
#define D_A_OBJ_GIRAHIMU_SWORD_LINK_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s_acch.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
#include "toBeSorted/d_enemy_sword_mdl.h"
|
||||
|
||||
class dAcObjGirahimuSwordLink_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcObjGirahimuSwordLink_c() : mStateMgr(*this) {}
|
||||
dAcObjGirahimuSwordLink_c() : mEmitter(this), mStateMgr(*this) {}
|
||||
virtual ~dAcObjGirahimuSwordLink_c() {}
|
||||
|
||||
virtual int create() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
void init();
|
||||
|
||||
void setEquip();
|
||||
void setGetSword();
|
||||
void setHide();
|
||||
void setThrow(const mVec3_c &force, mAng angle, f32 rate);
|
||||
void setAtThrow(const mVec3_c &velocity);
|
||||
void fn_238_19D0();
|
||||
void updateModelMatrix();
|
||||
void setTransform(const mMtx_c &mtx, const mVec3_c &pos);
|
||||
bool isHide();
|
||||
bool isStick();
|
||||
void reflect(const mVec3_c &rot, f32 gravity, f32, f32 force);
|
||||
bool lineCheck();
|
||||
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Hide);
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Equip);
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, GetSword);
|
||||
@@ -17,8 +45,32 @@ public:
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Stick);
|
||||
STATE_FUNC_DECLARE(dAcObjGirahimuSwordLink_c, Reflect);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcObjGirahimuSwordLink_c);
|
||||
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcObjGirahimuSwordLink_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcObjGirahimuSwordLink_c);
|
||||
STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcObjGirahimuSwordLink_c);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcObjGirahimuSwordLink_c);
|
||||
/* 0x330 */ dEnemySwordMdl_c mMdl;
|
||||
/* 0x86C */ dShadowCircle_c mShadow;
|
||||
/* 0x874 */ dEmitter_c mEmitter;
|
||||
|
||||
/* 0x8A8 */ s16 field_0x8A8;
|
||||
/* 0x8AA */ s16 field_0x8AA;
|
||||
/* 0x8AC */ u16 mTrailEmitterID;
|
||||
/* 0x8B0 */ mMtx_c field_0x8B0;
|
||||
/* 0x8E0 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x93C */ dBgS_ObjAcch mAcch;
|
||||
|
||||
/* 0xCEC */ mVec3_c mGhirahimPos;
|
||||
/* 0xCF8 */ mAng3_c mAngleCopy;
|
||||
/* 0xD00 */ mQuat_c field_0xD00;
|
||||
/* 0xD10 */ mAng field_0xD10;
|
||||
/* 0xD14 */ mVec3_c field_0xD14;
|
||||
/* 0xD20 */ u8 field_0xD20[4];
|
||||
/* 0xD24 */ mAng field_0xD24;
|
||||
/* 0xD26 */ bool field_0xD26;
|
||||
/* 0xD28 */ STATE_MGR_DECLARE(dAcObjGirahimuSwordLink_c);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -574,6 +574,9 @@ public:
|
||||
void SetInfo_0x0(u8 val) {
|
||||
mSrc.mInfo.field_0x0 = val;
|
||||
}
|
||||
void SetSrc_0xE(u8 val) {
|
||||
mSrc.field_0xE = val;
|
||||
}
|
||||
|
||||
const cCcD_SrcGObjAt &GetSrc() const {
|
||||
return mSrc;
|
||||
@@ -883,6 +886,10 @@ public:
|
||||
void SetAtFlag(u32 flag) {
|
||||
mAt.SetSPrm(flag);
|
||||
}
|
||||
|
||||
void SetAtFlag2(u32 flag) {
|
||||
mAt.SetAtFlag(flag);
|
||||
}
|
||||
void SetAtGrp(u32 grp) {
|
||||
mAt.SetAtFlag(GetAtGrp() | grp);
|
||||
}
|
||||
@@ -1039,13 +1046,16 @@ public:
|
||||
void SetAtInfo_0x0(u8 amount) {
|
||||
mAt.SetInfo_0x0(amount);
|
||||
}
|
||||
void SetAt_0xE(u8 val) {
|
||||
mAt.SetSrc_0xE(val);
|
||||
}
|
||||
|
||||
void SetAtDamage(u8 amount) {
|
||||
mAt.SetAtDamage(amount);
|
||||
}
|
||||
void SetAtModifier(u16 modifier) {
|
||||
mAt.SetSrcModifer(modifier);
|
||||
}
|
||||
}
|
||||
|
||||
// Tg
|
||||
|
||||
|
||||
@@ -664,6 +664,12 @@ public:
|
||||
bool isAttackingSpin() const {
|
||||
return isAttackingSpinHorizontal() || isAttackingSpinVertical();
|
||||
}
|
||||
bool isAttackingHorizontal() const {
|
||||
return isAttackingLeft() || isAttackingRight();
|
||||
}
|
||||
bool isAttackingVertical() const {
|
||||
return isAttackingUp() || isAttackingDown();
|
||||
}
|
||||
void setBonkRelatedAnimFlag(bool b);
|
||||
void setPosYRot(const mVec3_c &pos, mAng rot, bool force = false, UNKWORD = 0, UNKWORD = 0);
|
||||
void setTransform(const mMtx_c &mtx, bool force, UNKWORD, UNKWORD);
|
||||
@@ -678,7 +684,8 @@ public:
|
||||
|
||||
static s32 getCurrentTunicType();
|
||||
static s32 getCurrentSwordType();
|
||||
static const char *getSwordName(s32);
|
||||
|
||||
static const char *getSwordName(s32 = sCurrentSword);
|
||||
static s32 getCurrentlyEquippedShieldType();
|
||||
|
||||
static const mColor &getEarringsColor();
|
||||
|
||||
@@ -112,6 +112,9 @@ public:
|
||||
f32 radian_c() const {
|
||||
return mVal * sAngToRad;
|
||||
}
|
||||
f32 normal_c() const {
|
||||
return mVal * sAngToNorm;
|
||||
}
|
||||
|
||||
public:
|
||||
static s16 d2s(f32 deg) {
|
||||
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
cCcD_Stts &stts, EGG::ResTIMG *pImg, int nView, u32 *pSize
|
||||
);
|
||||
bool create(
|
||||
mAllocator_c *alloc, nw4r::g3d::ResFile resFile, const char *mdlName, u32 bufferOption, const mVec3_c &v1,
|
||||
mAllocator_c *alloc, nw4r::g3d::ResFile &resFile, const char *mdlName, u32 bufferOption, const mVec3_c &v1,
|
||||
const mVec3_c &v2, cCcD_Stts &stts, EGG::ResTIMG *pImg, int nView, u32 *pSize
|
||||
);
|
||||
|
||||
@@ -60,14 +60,18 @@ public:
|
||||
void setDamageMaybe(u8 damage);
|
||||
void fn_8006B7A0(u32);
|
||||
void fn_8006B800(u32);
|
||||
void SetGrp(u32);
|
||||
|
||||
void enable() {
|
||||
enableAttack();
|
||||
mProc.setActive(true);
|
||||
}
|
||||
|
||||
void disable() {
|
||||
void setInactive() {
|
||||
mIsActive = false;
|
||||
}
|
||||
void disable() {
|
||||
setInactive();
|
||||
mProc.setActive(false);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,13 +1,680 @@
|
||||
#include "d/a/d_a_girahimu_sword_beam.h"
|
||||
|
||||
#include "c/c_lib.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/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_cc.h"
|
||||
#include "d/d_vec.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_sphere.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(GH_SWORD_BEAM, dAcGirahimuSwordBeam_c, fProfile::GH_SWORD_BEAM, 0x116, 0, 0);
|
||||
|
||||
STATE_DEFINE(dAcGirahimuSwordBeam_c, BulletMove);
|
||||
STATE_DEFINE(dAcGirahimuSwordBeam_c, Damage);
|
||||
|
||||
void dAcGirahimuSwordBeam_c::initializeState_BulletMove() {}
|
||||
void dAcGirahimuSwordBeam_c::executeState_BulletMove() {}
|
||||
static dCcD_SrcCps sSrcCps0 = {
|
||||
{
|
||||
{AT_TYPE_DAMAGE, 0x1000D, {0, 0, 0}, 4, 0, 0, 0, CUT_DIR_NONE, 0},
|
||||
{~(AT_TYPE_COMMON0 | AT_TYPE_DAMAGE), 0x111, {0, 0, 0x407}, 0, CUT_DIR_NONE},
|
||||
{0},
|
||||
},
|
||||
{20.0f},
|
||||
};
|
||||
static dCcD_SrcCps sSrcCps1 = {
|
||||
{
|
||||
{AT_TYPE_DAMAGE, 0x1001D, {0, 0, 0}, 4, 0, 0, 0, CUT_DIR_NONE, 0},
|
||||
{(AT_TYPE_0x800000 | AT_TYPE_0x40 | AT_TYPE_SWORD), 0x111, {0, 0, 0x407}, 0, CUT_DIR_NONE},
|
||||
{0},
|
||||
},
|
||||
{50.0f},
|
||||
};
|
||||
|
||||
struct dAcGirahimuSwordBeam_HIO_c {
|
||||
f32 f0;
|
||||
f32 f1;
|
||||
u16 s0;
|
||||
u16 s1;
|
||||
|
||||
static const dAcGirahimuSwordBeam_HIO_c sInstance;
|
||||
};
|
||||
const dAcGirahimuSwordBeam_HIO_c dAcGirahimuSwordBeam_HIO_c::sInstance = {1.17f, 1.21f, 20, 15};
|
||||
|
||||
static mAng sSomeAngle = 0;
|
||||
|
||||
bool dAcGirahimuSwordBeam_c::createHeap() {
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcGirahimuSwordBeam_c::create() {
|
||||
mAngle.y = getXZAngleToPlayer();
|
||||
field_0xB1C = getFromParams(0, 0xF);
|
||||
CREATE_ALLOCATOR(dAcGirahimuSwordBeam_c);
|
||||
mAcch.Set(this, 1, &mAcchCir);
|
||||
mAcchCir.SetWall(50.0f, 70.0f);
|
||||
mStts.SetRank(3);
|
||||
mCollider.addCc(mCps1, sSrcCps1);
|
||||
mCollider.addCc(mCps0, sSrcCps0);
|
||||
mCollider.SetStts(mStts);
|
||||
|
||||
mCps0.ClrTgSet();
|
||||
mCps0.ClrCoSet();
|
||||
|
||||
mCps1.ClrAtSet();
|
||||
mCps1.ClrCoSet();
|
||||
|
||||
mRotation.x = 0;
|
||||
mRotation.z = 0;
|
||||
if (field_0xB1C == 0) {
|
||||
mRotation.z -= 0x4000;
|
||||
}
|
||||
transformMatrix();
|
||||
mMaxSpeed = -60.0f;
|
||||
|
||||
mEmitter0.init(this);
|
||||
mEmitter1.init(this);
|
||||
|
||||
field_0xB16 = -1;
|
||||
field_0xB24 = 0;
|
||||
field_0xB25 = 0;
|
||||
|
||||
field_0xB00 = 0;
|
||||
field_0xB02 = 0;
|
||||
field_0xB04 = 0;
|
||||
field_0xB26 = 0;
|
||||
field_0xB27 = 0;
|
||||
field_0xB18 = 0;
|
||||
if (field_0xB1C == 1) {
|
||||
field_0xB0C = 250.0f;
|
||||
} else {
|
||||
field_0xB0C = 150.0f;
|
||||
}
|
||||
field_0xB06 = 0;
|
||||
field_0xB08 = 0;
|
||||
field_0xB0A = 0;
|
||||
field_0xB10 = 200;
|
||||
|
||||
startSound(SE_BGh3_SW_BEAM_ATTACK);
|
||||
changeState(StateID_BulletMove);
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcGirahimuSwordBeam_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcGirahimuSwordBeam_c::actorExecute() {
|
||||
s32 _weird_zero = 0;
|
||||
holdSound(SE_BGh3_SW_BEAM_LV);
|
||||
|
||||
if (field_0xB20 == 0 && field_0xB25 == 1) {
|
||||
field_0xB16 = 0xF;
|
||||
field_0xB25 = 0;
|
||||
}
|
||||
|
||||
if (field_0xB18 == 0) {
|
||||
if (mCps1.ChkTgSet() == 0) {
|
||||
mCps1.OnTgSet();
|
||||
}
|
||||
fn_240_11F0();
|
||||
}
|
||||
|
||||
executeState();
|
||||
|
||||
mMtx_c m;
|
||||
m.YrotS(mAngle.y);
|
||||
m.XrotM(-mAngle.x);
|
||||
mVec3_c vel(0.0f, 0.0f, mSpeed);
|
||||
m.multVec(vel, mVelocity);
|
||||
|
||||
mPosition += mVelocity;
|
||||
|
||||
if (field_0xB27 == 0) {
|
||||
mRotation.x = -mAngle.x;
|
||||
mRotation.y = mAngle.y;
|
||||
} else {
|
||||
mRotation.x += field_0xB06;
|
||||
mRotation.z += field_0xB0A;
|
||||
mRotation.y += field_0xB08;
|
||||
field_0xB14 += sSomeAngle;
|
||||
}
|
||||
|
||||
transformMatrix();
|
||||
|
||||
if (isState(StateID_BulletMove)) {
|
||||
startMoveEmitters();
|
||||
|
||||
if (field_0xB24 != 0) {
|
||||
mAcch.SetGroundUpY(_weird_zero + -80.0f);
|
||||
} else if (field_0xB1C == 0) {
|
||||
mAcch.SetGroundUpY(_weird_zero + 60.0f);
|
||||
} else if (field_0xB1C == 1) {
|
||||
mAcch.SetGroundUpY(_weird_zero + 40.0f);
|
||||
}
|
||||
|
||||
mAcch.CrrPos(*dBgS::GetInstance());
|
||||
}
|
||||
|
||||
mMtx_c m1;
|
||||
m1.ZXYrotS(mRotation);
|
||||
m1.ZrotM(0x4000);
|
||||
mVec3_c b1;
|
||||
m1.getBase(1, b1);
|
||||
|
||||
f32 scale1 = 50.0f;
|
||||
b1 *= 110.0f;
|
||||
b1 *= mScale.x;
|
||||
scale1 *= mScale.x;
|
||||
mVec3_c p1 = mPosition;
|
||||
if (field_0xB20 == 0) {
|
||||
getXZCirclePoint(p1, mAngle.y, scale1);
|
||||
}
|
||||
mCps0.Set(p1 + b1, p1 - b1);
|
||||
|
||||
f32 scale0 = 45.0f;
|
||||
scale0 *= mScale.x;
|
||||
b1 *= 0.85f;
|
||||
mVec3_c p0 = p1;
|
||||
getXZCirclePoint(p0, mAngle.y, scale0);
|
||||
mCps1.Set(p0 + b1, p0 - b1);
|
||||
|
||||
;
|
||||
mCollider.registerColliders();
|
||||
if (field_0xB20 != 1) {
|
||||
if (field_0xB16 > 0) {
|
||||
field_0xB16--;
|
||||
if (field_0xB16 < 10) {
|
||||
if (field_0xB26 != 0) {
|
||||
mEmitter0.setFading(10);
|
||||
} else {
|
||||
mEmitter1.setFading(10);
|
||||
}
|
||||
field_0xB10 -= 10.0f;
|
||||
}
|
||||
} else if (field_0xB16 == 0) {
|
||||
deleteRequest();
|
||||
}
|
||||
}
|
||||
|
||||
if (field_0xB18 != 0) {
|
||||
field_0xB18--;
|
||||
if (mCps1.ChkTgSet()) {
|
||||
mCps1.ClrTgSet();
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcGirahimuSwordBeam_c::draw() {
|
||||
mSphere_c sph(mVec3_c(0.0f, 0.0f, 0.0f), field_0xB0C);
|
||||
drawShadow(mShadow, nullptr, mWorldMtx, &sph, -1, field_0xB10, -1, -1, -1, mPosition.y - mAcch.GetGroundH());
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::initializeState_BulletMove() {
|
||||
s32 _weird_zero = 0;
|
||||
mSpeed = 29.0f + _weird_zero;
|
||||
mMtx_c m;
|
||||
m.YrotS(mAngle.y);
|
||||
m.XrotM(-mAngle.x);
|
||||
mVec3_c vel(0.0f, 0.0f, mSpeed);
|
||||
m.multVec(vel, mVelocity);
|
||||
}
|
||||
void dAcGirahimuSwordBeam_c::executeState_BulletMove() {
|
||||
if ((mCps0.ChkAtHit() && !mCps0.GetAtFlag0x8()) || mAcch.ChkGndHit() || mAcch.ChkWallHit(nullptr) ||
|
||||
mAcch.ChkWaterIn()) {
|
||||
mCps0.SetAtRpm(0);
|
||||
mCps0.ClrAtActorInfo();
|
||||
mCps0.SubtractAtEffCounter();
|
||||
|
||||
if (field_0xB26 != 0) {
|
||||
mEmitter0.remove(true);
|
||||
} else {
|
||||
mEmitter1.remove(true);
|
||||
}
|
||||
|
||||
startDisappearEmitter();
|
||||
|
||||
startSound(SE_BGh3_SW_BEAM_DISAPPEAR);
|
||||
changeState(StateID_Damage);
|
||||
}
|
||||
}
|
||||
void dAcGirahimuSwordBeam_c::finalizeState_BulletMove() {}
|
||||
void dAcGirahimuSwordBeam_c::initializeState_Damage() {}
|
||||
void dAcGirahimuSwordBeam_c::executeState_Damage() {}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::initializeState_Damage() {
|
||||
mSpeed = 0.0f;
|
||||
mVelocity.set(0.0f, 0.0f, 0.0f);
|
||||
mCps0.ClrAtSet();
|
||||
}
|
||||
void dAcGirahimuSwordBeam_c::executeState_Damage() {
|
||||
deleteRequest();
|
||||
}
|
||||
void dAcGirahimuSwordBeam_c::finalizeState_Damage() {}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::swordBeamReturn(s32 param1) {
|
||||
if (field_0xB20 == 1) {
|
||||
fn_240_17C0(param1);
|
||||
mAngle.y = getXZAngleToPlayer();
|
||||
mCps0.SetAtGrp(0xC);
|
||||
mCps0.OffAtGrp(0x2);
|
||||
fn_240_16C0();
|
||||
field_0xB20 = 0;
|
||||
field_0xB18 = 10;
|
||||
field_0xB0C += 30.0f;
|
||||
mEmitter0.remove(true);
|
||||
startSound(SE_BGh3_SW_BEAM_RETURN);
|
||||
field_0xB26 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::startMoveEmitters() {
|
||||
if (field_0xB26 != 0) {
|
||||
if (field_0xB27 == 0) {
|
||||
// the beam trail
|
||||
mEmitter0.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_882_, mWorldMtx, nullptr, nullptr);
|
||||
} else {
|
||||
// deflect sparkles?
|
||||
mEmitter0.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_940_, mWorldMtx, nullptr, nullptr);
|
||||
}
|
||||
} else {
|
||||
// the beam trail
|
||||
mEmitter1.holdEffect(PARTICLE_RESOURCE_ID_MAPPING_882_, mWorldMtx, nullptr, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::startDisappearEmitter() {
|
||||
dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_881_, mWorldMtx, nullptr, nullptr, 0, 0);
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::transformMatrix() {
|
||||
mWorldMtx.transS(mPosition);
|
||||
mWorldMtx.ZXYrotM(mRotation);
|
||||
if (field_0xB27) {
|
||||
mWorldMtx.YrotM(field_0xB14);
|
||||
}
|
||||
mWorldMtx.scaleM(mScale);
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::fn_240_11F0() {
|
||||
if (field_0xB20 == 0) {
|
||||
fn_240_1380();
|
||||
}
|
||||
if (mCps1.ChkTgHit()) {
|
||||
if (mCps1.GetTgAtHitType() == AT_TYPE_0x800000) {
|
||||
if (field_0xB26 != 0) {
|
||||
mEmitter0.remove(true);
|
||||
} else {
|
||||
mEmitter1.remove(true);
|
||||
}
|
||||
|
||||
startDisappearEmitter();
|
||||
startSound(SE_BGh3_SW_BEAM_DISAPPEAR);
|
||||
changeState(StateID_Damage);
|
||||
} else if (mCps1.GetTgAtHitType()) {
|
||||
// Assuming this was a another branch
|
||||
}
|
||||
}
|
||||
|
||||
if (mCps0.ChkAtHit() && mCps0.GetAtFlag0x8()) {
|
||||
mAng3_c a0;
|
||||
a0.x = a0.z = 0;
|
||||
if (field_0xAF4.isLinked()) {
|
||||
a0.y = dAcPy_c::GetLink()->mRotation.y;
|
||||
}
|
||||
field_0xB24 = 1;
|
||||
|
||||
mAng3_c a1 = a0;
|
||||
fn_240_1810(0, a1, mRotation.y + 0x4000);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::fn_240_1380() {
|
||||
if (!mCps1.ChkTgHit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCps1.GetTgAtHitType() != AT_TYPE_SWORD) {
|
||||
return;
|
||||
}
|
||||
|
||||
mAng3_c a;
|
||||
a.x = 0;
|
||||
a.y = mCps1.GetTgAtHitDir().atan2sX_Z();
|
||||
a.z = 0;
|
||||
mAng playerAngle = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition);
|
||||
mAng hitAngle = cLib::targetAngleY(mPosition, const_cast<const dCcD_Linked<dCcD_Cps> &>(mCps1).GetTgHitPos());
|
||||
if (field_0xAF4.isLinked()) {
|
||||
cLib::targetAngleY(mPosition, field_0xAF4.get()->mPosition);
|
||||
}
|
||||
|
||||
s32 cutDir = dAcPy_c::GetLink()->getSpecificAttackDirection();
|
||||
switch (cutDir) {
|
||||
case CUT_DIR_U: {
|
||||
if (field_0xB1C == 0) {
|
||||
s32 a = mRotation.y - playerAngle;
|
||||
if (mAng::abs(a) < 0xAAB) {
|
||||
fn_240_1710();
|
||||
} else {
|
||||
field_0xB24 = 0;
|
||||
}
|
||||
} else if (field_0xB1C == 1) {
|
||||
field_0xB24 = 0;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_D: {
|
||||
if (field_0xB1C == 0) {
|
||||
s32 a = mRotation.y - playerAngle;
|
||||
if (mAng::abs(a) < 0xAAB) {
|
||||
fn_240_1710();
|
||||
} else {
|
||||
field_0xB24 = 1;
|
||||
}
|
||||
} else if (field_0xB1C == 1) {
|
||||
field_0xB24 = 1;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_L: {
|
||||
if (field_0xB1C == 0) {
|
||||
field_0xB24 = 0;
|
||||
} else if (field_0xB1C == 1) {
|
||||
s32 a = (mRotation.y + 0x1555) - playerAngle;
|
||||
if (mAng::abs(a) < 0x1C72) {
|
||||
fn_240_1710();
|
||||
} else {
|
||||
field_0xB24 = 0;
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_R: {
|
||||
if (field_0xB1C == 0) {
|
||||
field_0xB24 = 0;
|
||||
} else if (field_0xB1C == 1) {
|
||||
s32 a = (mRotation.y - 0x1555) - playerAngle;
|
||||
if (mAng::abs(a) < 0x1C72) {
|
||||
fn_240_1710();
|
||||
} else {
|
||||
field_0xB24 = 0;
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_LU: field_0xB24 = 0; break;
|
||||
case CUT_DIR_LD: field_0xB24 = 1; break;
|
||||
case CUT_DIR_RU: field_0xB24 = 0; break;
|
||||
case CUT_DIR_RD: field_0xB24 = 1; break;
|
||||
case CUT_DIR_STAB: field_0xB24 = 0; break;
|
||||
default: field_0xB24 = 0; break;
|
||||
}
|
||||
|
||||
mAng3_c a1 = a;
|
||||
mAng a2 = hitAngle;
|
||||
fn_240_1810(cutDir, a1, a2);
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::fn_240_16C0() {
|
||||
mSpeed *= 1.21f;
|
||||
mScale *= 1.17f;
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::fn_240_1710() {
|
||||
if (field_0xB20 == 0) {
|
||||
if (field_0xAF4.isLinked()) {
|
||||
mAngle.y = cLib::targetAngleY(mPosition, field_0xAF4.get()->mPosition);
|
||||
}
|
||||
mCps0.SetAtGrp(2);
|
||||
mCps0.OffAtGrp(0xC);
|
||||
field_0xB18 = 10;
|
||||
field_0xB20 = 1;
|
||||
mEmitter1.remove(true);
|
||||
startSound(SE_BGh3_SW_BEAM_RETURN);
|
||||
field_0xB26 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcGirahimuSwordBeam_c::fn_240_17C0(s32 val) {
|
||||
if (val == (field_0xB1C & 0xFF)) {
|
||||
return;
|
||||
}
|
||||
|
||||
field_0xB1C = val;
|
||||
mRotation.z = 0;
|
||||
if (val == 0) {
|
||||
mRotation.z -= 0x4000;
|
||||
}
|
||||
}
|
||||
|
||||
inline mAng rndAngle(f32 amp) {
|
||||
return cM::rndFX(amp);
|
||||
}
|
||||
void dAcGirahimuSwordBeam_c::fn_240_1810(u32 cutDir, mAng3_c &angle, const mAng &ay) {
|
||||
s32 _weird_zero = 0;
|
||||
mAng3_c inAngle = angle;
|
||||
mAng3_c playerAngle;
|
||||
mAng angleToPlayer = cLib::targetAngleY(mPosition, dAcPy_c::GetLink()->mPosition);
|
||||
mAng relativeAngle = (mRotation.y - 0x4000) - angleToPlayer;
|
||||
mAng angDiff = relativeAngle - mRotation.y;
|
||||
|
||||
if (field_0xB20 != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
field_0xB18 = 10;
|
||||
|
||||
// ???
|
||||
mAng3_c m;
|
||||
mAng &linkedAngleY = m.x;
|
||||
if (field_0xAF4.isLinked()) {
|
||||
linkedAngleY = (cLib::targetAngleY(mPosition, field_0xAF4.get()->mPosition));
|
||||
}
|
||||
|
||||
switch (cutDir) {
|
||||
case CUT_DIR_RD: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f) + 0x1C72;
|
||||
angle.x += 0x700;
|
||||
mRotation.y = angle.y + 0x4E39;
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang < 0x38E4) {
|
||||
field_0xB0A = -0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
field_0xB08 = 0x5B0;
|
||||
} else {
|
||||
field_0xB0A = 0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = -0x2D8;
|
||||
field_0xB08 = 0x889;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_RU: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f) + 0x1C72;
|
||||
angle.x -= 0x900;
|
||||
mRotation.y = angle.y + 0x4E39;
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang < 0x38E4) {
|
||||
field_0xB0A = 0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
} else {
|
||||
field_0xB0A = -0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_R: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f) + 0x1C72;
|
||||
angle.x -= 0x900;
|
||||
if (field_0xB1C == 0) {
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang - 0x3C73 <= 0x71Au) {
|
||||
field_0xB08 = -0x1777;
|
||||
angle.x = 0;
|
||||
} else {
|
||||
field_0xB0A = 0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
}
|
||||
} else {
|
||||
field_0xB06 = -0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_LD: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f) + -0x1C72;
|
||||
angle.x += 0x700;
|
||||
mRotation.y = angle.y + 0x1555;
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang < 0x471C) {
|
||||
field_0xB0A = 0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = -0x222;
|
||||
field_0xB08 = -0x5B0;
|
||||
} else {
|
||||
field_0xB0A = -0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = -0x5B0;
|
||||
field_0xB08 = -0x5B0;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_LU: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f) + -0x1C72;
|
||||
angle.x -= 0x900;
|
||||
mRotation.y = angle.y + 0x1555;
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang < 0x471C) {
|
||||
field_0xB0A = -0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
} else {
|
||||
field_0xB0A = 0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_L: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f) - 0x1C72;
|
||||
angle.x -= 0x900;
|
||||
if (field_0xB1C == 0) {
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang - 0x3C73 <= 0x71Au) {
|
||||
field_0xB08 = 0x1777;
|
||||
angle.x = 0;
|
||||
} else {
|
||||
field_0xB0A = 0x1777;
|
||||
field_0xB0A *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB06 = 0x5B0;
|
||||
}
|
||||
} else {
|
||||
field_0xB06 = 0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_U: {
|
||||
angle.y = linkedAngleY + (182 * rndAngle(11.0f));
|
||||
angle.x -= 0x1500;
|
||||
if (field_0xB1C == 1) {
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang < 0x31C7) {
|
||||
field_0xB0A = 0x1777;
|
||||
} else if (ang < 0x3C72) {
|
||||
mRotation.y = angle.y + 0x6AAB;
|
||||
field_0xB06 = 0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
} else if (ang < 0x438E) {
|
||||
field_0xB06 = 0x1777;
|
||||
} else if (ang < 0x4E39) {
|
||||
mRotation.y = angle.y + 0x1C72;
|
||||
field_0xB06 = -0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
} else {
|
||||
field_0xB0A = -0x1777;
|
||||
}
|
||||
} else {
|
||||
field_0xB08 = 0x1777;
|
||||
field_0xB08 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
}
|
||||
} break;
|
||||
case CUT_DIR_D: {
|
||||
angle.y = linkedAngleY + 182 * rndAngle(11.0f);
|
||||
angle.x += 0x1500;
|
||||
if (field_0xB1C == 1) {
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang < 0x31C7) {
|
||||
field_0xB0A = -0x1777;
|
||||
} else if (ang < 0x38E4) {
|
||||
mRotation.y = angle.y + 0x6AAB;
|
||||
field_0xB06 = -0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
} else if (ang < 0x471C) {
|
||||
field_0xB06 = -0x1777;
|
||||
} else if (ang < 0x4E39) {
|
||||
mRotation.y = angle.y + 0x1C72;
|
||||
field_0xB06 = 0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
} else {
|
||||
field_0xB0A = 0x1777;
|
||||
}
|
||||
} else {
|
||||
field_0xB08 = 0x1777;
|
||||
field_0xB08 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
}
|
||||
} break;
|
||||
default: {
|
||||
s32 ang = relativeAngle.abs();
|
||||
if (ang - 0x38E5 <= 0xE36u) {
|
||||
angle.y = mAng((s32)angleToPlayer) + 182 * rndAngle(31.0f) - 0x8000;
|
||||
} else {
|
||||
angle.y = mAng((s32)angleToPlayer) + 182 * rndAngle(31.0f) - 0x8000;
|
||||
}
|
||||
angle.x += 0x1500;
|
||||
if (field_0xB1C == 1) {
|
||||
field_0xB06 = -0x1777;
|
||||
field_0xB06 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
} else {
|
||||
field_0xB08 = -0x1777;
|
||||
field_0xB08 *= (0.8f + (0.1f * _weird_zero));
|
||||
field_0xB0A = 0x222;
|
||||
}
|
||||
} break;
|
||||
}
|
||||
sSomeAngle = mAng(0x1777);
|
||||
|
||||
mAngle.y = dAcPy_c::GetLink()->mRotation.y;
|
||||
s32 ang = angDiff.abs();
|
||||
if (ang < 0x31C7) {
|
||||
field_0xB02 = angle.y;
|
||||
field_0xB00 = angle.x;
|
||||
} else {
|
||||
setB00(angle.x, inAngle.y, angle.z);
|
||||
}
|
||||
|
||||
mAngle.x = field_0xB00;
|
||||
mAngle.y = field_0xB02;
|
||||
mAngle.z = field_0xB04;
|
||||
|
||||
field_0xB16 = 20;
|
||||
field_0xB20 = 2;
|
||||
mEmitter1.remove(true);
|
||||
field_0xB27 = 1;
|
||||
field_0xB26 = 1;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
#include "d/a/obj/d_a_obj_girahimu_floor.h"
|
||||
|
||||
#include "c/c_lib.h"
|
||||
#include "common.h"
|
||||
#include "d/a/b/d_a_b_girahimu3_first.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_plc.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_manager.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m3d/m_fanm.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resanmclr.h"
|
||||
#include "nw4r/g3d/res/g3d_resanmtexsrt.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/g3d/res/g3d_resmdl.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_GIRAHIMU_FLOOR, dAcOGirahimuFloor_c, fProfile::OBJ_GIRAHIMU_FLOOR, 0x25F, 0, 2);
|
||||
|
||||
STATE_DEFINE(dAcOGirahimuFloor_c, Wait);
|
||||
@@ -8,18 +31,363 @@ STATE_DEFINE(dAcOGirahimuFloor_c, Generate);
|
||||
STATE_DEFINE(dAcOGirahimuFloor_c, Broken);
|
||||
STATE_DEFINE(dAcOGirahimuFloor_c, Move);
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Wait() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Wait() {}
|
||||
static const char *sResAnmNames[3] = {
|
||||
"F403Floor",
|
||||
"F403FloorSpread",
|
||||
"F403FloorSpread2",
|
||||
};
|
||||
|
||||
struct dAcOGirahimuFloor_HIO_c {
|
||||
const f32 field_0x00;
|
||||
const f32 field_0x04;
|
||||
const f32 field_0x08;
|
||||
static const dAcOGirahimuFloor_HIO_c sHio;
|
||||
};
|
||||
const dAcOGirahimuFloor_HIO_c dAcOGirahimuFloor_HIO_c::sHio = {
|
||||
1.0f,
|
||||
10.0f,
|
||||
0.4f,
|
||||
};
|
||||
|
||||
bool dAcOGirahimuFloor_c::createHeap() {
|
||||
mRes = nw4r::g3d::ResFile(getOarcFile("F403Floor", "g3d/model.brres"));
|
||||
nw4r::g3d::ResMdl resMdl = mRes.GetResMdl("F403Floor");
|
||||
TRY_CREATE(mMdl.create(resMdl, &mAllocator, 0x324));
|
||||
|
||||
nw4r::g3d::ResAnmTexSrt resTexSrt = mRes.GetResAnmTexSrt(sResAnmNames[0]);
|
||||
TRY_CREATE(mAnmTexSrt.create(resMdl, resTexSrt, &mAllocator, nullptr, 1));
|
||||
mMdl.setAnm(mAnmTexSrt);
|
||||
mAnmTexSrt.setRate(1.0f, 0);
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
nw4r::g3d::ResAnmClr resAnmClr = mRes.GetResAnmClr(sResAnmNames[i]);
|
||||
TRY_CREATE(mAnmMatClr[i].create(resMdl, resAnmClr, &mAllocator, nullptr, 1));
|
||||
|
||||
mAnmMatClr[i].setAnm(mMdl, resAnmClr, 0, m3d::PLAY_MODE_4);
|
||||
mAnmMatClr[i].setRate(0.0f, 0);
|
||||
mAnmMatClr[i].setFrame(mAnmTexSrt.getFrameMax(i) - 1.0f, 0);
|
||||
mAnmMatClr[i].setPlayMode(m3d::PLAY_MODE_1, 0);
|
||||
}
|
||||
|
||||
cBgD_t *dzb = static_cast<cBgD_t *>(getOarcDZB("F403Floor", "F403Floor"));
|
||||
PLC *plc = static_cast<PLC *>(getOarcPLC("F403Floor", "F403Floor"));
|
||||
updateMatrix();
|
||||
|
||||
mScaleBg0.set(0.5f, 0.5f, 0.5f);
|
||||
mScaleBg1.set(0.735f, 0.735f, 0.735f);
|
||||
TRY_CREATE(!mBg[0].Set(dzb, plc, 1, &mWorldMtx, &mScaleBg0));
|
||||
TRY_CREATE(!mBg[1].Set(dzb, plc, 1, &mWorldMtx, &mScaleBg1));
|
||||
TRY_CREATE(!mBg[2].Set(dzb, plc, 1, &mWorldMtx, &mScale));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::actorCreate() {
|
||||
mType = getFromParams(0, 0x3);
|
||||
if (mType >= TYPE_Max) {
|
||||
mType = TYPE_Normal;
|
||||
}
|
||||
|
||||
CREATE_ALLOCATOR(dAcOGirahimuFloor_c);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].SetCrrFunc(dBgS_MoveBGProc_Typical);
|
||||
}
|
||||
dBgS::GetInstance()->Regist(&mBg[1], this);
|
||||
|
||||
mAnmMatClr[2].setFrame(0.0f, 0);
|
||||
|
||||
mAcceleration = 0.0f;
|
||||
mMaxSpeed = -40.0f;
|
||||
mMdl.setPriorityDraw(0x22, 9);
|
||||
if (mType == TYPE_Generate) {
|
||||
mMdl.setAnm(mAnmMatClr[0]);
|
||||
changeState(StateID_Generate);
|
||||
} else {
|
||||
mMdl.setAnm(mAnmMatClr[1]);
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
|
||||
mBoundingBox.Set(mVec3_c(-2900.0f, -120.0f, -2900.0f), mVec3_c(3100.0f, 100.0f, 2900.0f));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::actorPostCreate() {
|
||||
fBase_c *pActor = nullptr;
|
||||
dAcGirahimu3First_c *pGirahim;
|
||||
while (
|
||||
(pGirahim =
|
||||
static_cast<dAcGirahimu3First_c *>(fManager_c::searchBaseByProfName(fProfile::B_GIRAHIMU3_FIRST, pActor)),
|
||||
pActor = pGirahim)
|
||||
) {
|
||||
if (mPosition.squareDistanceToXZ(pGirahim->getPosition()) < 9000000.0f) {
|
||||
mGhirahimRef.link(pGirahim);
|
||||
}
|
||||
}
|
||||
|
||||
if (mType == TYPE_Generate) {
|
||||
while ((pActor = fManager_c::searchBaseByProfName(fProfile::OBJ_GIRAHIMU_FLOOR, pActor))) {
|
||||
dAcOGirahimuFloor_c *pChild = static_cast<dAcOGirahimuFloor_c *>(pActor);
|
||||
if (pChild != this) {
|
||||
mChild.link(pChild);
|
||||
mHomePos = pChild->mHomePos;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mHomePos = mPosition;
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::actorExecute() {
|
||||
if (!isState(StateID_Broken)) {
|
||||
if (isSuccessfulFinalBlow()) {
|
||||
changeState(StateID_Broken);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (0 == sLib::calcTimer(&field_0xABE)) {
|
||||
field_0xABE = 15;
|
||||
if (isPlayerAndGhirahimOffFloor()) {
|
||||
changeState(StateID_Broken);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
}
|
||||
|
||||
if (mbRequestShatter) {
|
||||
doShatter();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (mbMediumSize) {
|
||||
mAnmMatClr[1].setRate(1.0f, 0);
|
||||
dBgS::GetInstance()->Regist(&mBg[1], this);
|
||||
dBgS::GetInstance()->Release(&mBg[0]);
|
||||
|
||||
if (field_0xAC0 == 1 && mAnmMatClr[1].getFrame(0) == mAnmMatClr[1].getFrameMax(0) - 1.0f) {
|
||||
mMdl.setAnm(mAnmMatClr[2]);
|
||||
mAnmMatClr[2].setRate(1.0f, 0);
|
||||
|
||||
dBgS::GetInstance()->Regist(&mBg[2], this);
|
||||
dBgS::GetInstance()->Release(&mBg[1]);
|
||||
} else {
|
||||
mMdl.setAnm(mAnmMatClr[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isState(StateID_Move) && mbRequestMove) {
|
||||
changeState(StateID_Move);
|
||||
movePosition();
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
}
|
||||
|
||||
executeState();
|
||||
mAnmTexSrt.play();
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mAnmMatClr[i].play();
|
||||
}
|
||||
if (!isState(StateID_Wait)) {
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
} else {
|
||||
updateMatrix();
|
||||
mMdl.setScale(mScale);
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Wait() {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mAnmMatClr[i].setRate(0.0f, 0);
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::executeState_Wait() {
|
||||
if (!mbIsHome && 0 == sLib::calcTimer(&field_0xABD)) {
|
||||
field_0xABD = 15;
|
||||
if (isGenerateNoChild()) {
|
||||
changeState(StateID_Return);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Wait() {}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Return() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Return() {}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Return() {}
|
||||
void dAcOGirahimuFloor_c::initializeState_Generate() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Generate() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Return() {
|
||||
if (!mbRequestMove && cLib::chasePos(mPosition, mHomePos, 10.0f)) {
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Return() {
|
||||
mbIsHome = true;
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Generate() {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mAnmMatClr[i].setFrame(0.0f, 0);
|
||||
if (i != 0) {
|
||||
mAnmMatClr[i].setRate(0.0f, 0);
|
||||
}
|
||||
}
|
||||
mAnmMatClr[0].setRate(1.0f, 0);
|
||||
mMdl.setAnm(mAnmMatClr[0]);
|
||||
}
|
||||
void dAcOGirahimuFloor_c::executeState_Generate() {
|
||||
if (mAnmMatClr[0].getFrame(0) == mAnmMatClr[0].getFrameMax(0) - 1.0f) {
|
||||
mAnmMatClr[0].setRate(0.0f, 0);
|
||||
}
|
||||
if (!mbMediumSize) {
|
||||
dBgS::GetInstance()->Regist(&mBg[0], this);
|
||||
dBgS::GetInstance()->Release(&mBg[1]);
|
||||
dBgS::GetInstance()->Release(&mBg[2]);
|
||||
}
|
||||
if (mAnmMatClr[2].isStop(0)) {
|
||||
if (mAnmMatClr[2].getFrame(0) == mAnmMatClr[2].getFrameMax(0) - 1.0f) {
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Generate() {}
|
||||
void dAcOGirahimuFloor_c::initializeState_Broken() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Broken() {}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Broken() {
|
||||
mAnmMatClr[2].setRate(-1.0f, 0);
|
||||
mScaleBg0.set(0.0f, 0.0f, 0.0f);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
dBgS::GetInstance()->Release(&mBg[i]);
|
||||
}
|
||||
mMdl.setAnm(mAnmMatClr[2]);
|
||||
}
|
||||
void dAcOGirahimuFloor_c::executeState_Broken() {
|
||||
if (mAnmMatClr[2].getFrame(0) == 0.0f) {
|
||||
mAnmMatClr[1].setRate(-1.0f, 0);
|
||||
mAnmMatClr[2].setRate(0.0f, 0);
|
||||
if (mAnmMatClr[1].getFrame(0) == 0.0f) {
|
||||
mAnmMatClr[0].setRate(-1.0f, 0);
|
||||
mAnmMatClr[1].setRate(0.0f, 0);
|
||||
mMdl.setAnm(mAnmMatClr[0]);
|
||||
} else {
|
||||
mMdl.setAnm(mAnmMatClr[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (mAnmMatClr[0].getFrame(0) == 0.0f) {
|
||||
deleteRequest();
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Broken() {}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Move() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Move() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Move() {
|
||||
movePosition();
|
||||
|
||||
if (dBgS_ObjGndChk::CheckPos(mPosition)) {
|
||||
mGndHeight = dBgS_ObjGndChk::GetGroundHeight();
|
||||
if (mPosition.y <= mGndHeight) {
|
||||
doShatter();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
mPosition.y = mGndHeight;
|
||||
doShatter();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mbRequestMove) {
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Move() {}
|
||||
|
||||
bool dAcOGirahimuFloor_c::isPlayerAndGhirahimOffFloor() {
|
||||
const dAcObjBase_c *pObj = nullptr;
|
||||
|
||||
if (dBgS_ObjGndChk::CheckPos(dAcPy_c::GetLink()->mPosition + mVec3_c::Ey * 50.0f)) {
|
||||
pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
|
||||
}
|
||||
if (pObj == this || !(pObj != nullptr && pObj->mProfileName == fProfile::OBJ_GIRAHIMU_FLOOR)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pObj = nullptr;
|
||||
bool bGetObj = mGhirahimRef.isLinked();
|
||||
if (bGetObj) {
|
||||
bGetObj = dBgS_ObjGndChk::CheckPos(mGhirahimRef.get()->mPosition + mVec3_c::Ey * 50.0f);
|
||||
}
|
||||
if (bGetObj) {
|
||||
pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
|
||||
}
|
||||
|
||||
if (pObj == this || !(pObj != nullptr && pObj->mProfileName == fProfile::OBJ_GIRAHIMU_FLOOR)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dAcOGirahimuFloor_c::isGenerateNoChild() {
|
||||
return mType == TYPE_Generate && !mChild.isLinked();
|
||||
}
|
||||
|
||||
bool dAcOGirahimuFloor_c::isSuccessfulFinalBlow() {
|
||||
if (dAcPy_c::GetLink()->checkCurrentAction(96 /* FINAL_BLOW */)) {
|
||||
const dAcObjBase_c *pObj = nullptr;
|
||||
bool bGetObj = mGhirahimRef.isLinked();
|
||||
if (bGetObj) {
|
||||
bGetObj = dBgS_ObjGndChk::CheckPos(mGhirahimRef.get()->mPosition + mVec3_c::Ey * 50.0f);
|
||||
}
|
||||
if (bGetObj) {
|
||||
pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
|
||||
}
|
||||
|
||||
if (pObj != this) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::movePosition() {
|
||||
if (mbRequestMove && cLib::chasePos(mPosition, mTargetPos, mMoveRate)) {
|
||||
mbRequestMove = false;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::doShatter() {
|
||||
dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_876_, mPosition, nullptr, nullptr, nullptr, nullptr, 0, 0);
|
||||
startSound(SE_BGh3_GIRAHIM_STAGE_BREAK);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
dBgS::GetInstance()->Release(&mBg[i]);
|
||||
}
|
||||
deleteRequest();
|
||||
}
|
||||
|
||||
void something() {
|
||||
static const f32 f = 9000000.0f;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,45 @@
|
||||
#include "d/a/obj/d_a_obj_girahimu_knife.h"
|
||||
|
||||
#include "c/c_lib.h"
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "d/a/b/d_a_b_girahimu2.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/e/d_a_en_base.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_lin_chk.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_color.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_sphere.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
static dCcD_SrcSph sSrcSph = {
|
||||
/* mObjInf */
|
||||
{/* mObjAt */ {AT_TYPE_DAMAGE, 0xD, {9, 0, 0}, 2, 0, 0, 0, CUT_DIR_NONE, 0},
|
||||
/* mObjTg */ {~(AT_TYPE_COMMON0 & ~AT_TYPE_WIND), 0x111, {9, 0x18, 0x40F}, 0, CUT_DIR_NONE},
|
||||
/* mObjCo */ {0x25}},
|
||||
/* mSphInf */
|
||||
{30.0f}
|
||||
};
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_GH_KNIFE, dAcObjGirahimuKnife_c, fProfile::OBJ_GH_KNIFE, 0x115, 0, 2);
|
||||
|
||||
s32 dAcObjGirahimuKnife_c::sSomething0;
|
||||
s32 dAcObjGirahimuKnife_c::sSomething0_1;
|
||||
mAng dAcObjGirahimuKnife_c::sSomething1;
|
||||
s16 dAcObjGirahimuKnife_c::sSomething2;
|
||||
|
||||
STATE_DEFINE(dAcObjGirahimuKnife_c, Wait);
|
||||
STATE_DEFINE(dAcObjGirahimuKnife_c, SpinWait);
|
||||
STATE_DEFINE(dAcObjGirahimuKnife_c, SpinWaitPreAttack);
|
||||
@@ -13,33 +51,783 @@ STATE_DEFINE(dAcObjGirahimuKnife_c, Return);
|
||||
STATE_DEFINE(dAcObjGirahimuKnife_c, Hit);
|
||||
STATE_DEFINE(dAcObjGirahimuKnife_c, CircleWait);
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_Wait() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_Wait() {}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_Wait() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_SpinWait() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_SpinWait() {}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_SpinWait() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_SpinWaitPreAttack() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_SpinWaitPreAttack() {}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_SpinWaitPreAttack() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_SpinFreeWait() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_SpinFreeWait() {}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_SpinFreeWait() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_FreeWait() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_FreeWait() {}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_FreeWait() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_Attack() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_Attack() {}
|
||||
bool dAcObjGirahimuKnife_c::createHeap() {
|
||||
nw4r::g3d::ResFile res(nullptr);
|
||||
res = nw4r::g3d::ResFile(getOarcResFile("GirahimKnife"));
|
||||
TRY_CREATE(mMdl.create(res.GetResMdl("GirahimKnifeA"), &mAllocator, 0x20, 1, nullptr));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcObjGirahimuKnife_c::create() {
|
||||
CREATE_ALLOCATOR(dAcObjGirahimuKnife_c);
|
||||
init();
|
||||
changeState(StateID_Wait);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::init() {
|
||||
sSomething2 = 1;
|
||||
field_0x793 = true;
|
||||
field_0x750.set(0.0f, 0.0f, 0.0f);
|
||||
mAcceleration = 0.0f;
|
||||
field_0x792 = true;
|
||||
mStts.SetRank(12);
|
||||
mMaxSpeed = -6000.0f;
|
||||
mBoundingBox.Set(mVec3_c(-100.0f, -100.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
field_0x75C.set(1.2f, 0.0f, 1.2f);
|
||||
field_0x774 = 20.0f;
|
||||
|
||||
mCollider.addCc(mSph1, sSrcSph);
|
||||
mCollider.addCc(mSph0, sSrcSph);
|
||||
mCollider.SetStts(mStts);
|
||||
|
||||
mSph1.SetR(15.0f);
|
||||
mSph0.SetR(30.0f);
|
||||
|
||||
mSph1.OnAtSet();
|
||||
mSph1.ClrTgSet();
|
||||
|
||||
mSph0.ClrAtSet();
|
||||
mSph0.OnTgSet();
|
||||
|
||||
mSph0.SetTg_0x50(2);
|
||||
dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_685_, mPosition, nullptr, nullptr, nullptr, nullptr, 0, 0);
|
||||
}
|
||||
|
||||
int dAcObjGirahimuKnife_c::actorExecute() {
|
||||
field_0x768.set(field_0x75C);
|
||||
if (--field_0x6D0 <= 0) {
|
||||
field_0x6D0 = 0;
|
||||
}
|
||||
|
||||
executeState();
|
||||
|
||||
mVelocity.y -= mAcceleration;
|
||||
mPosition += mVelocity;
|
||||
|
||||
mSph1.SetAtVec(mVelocity);
|
||||
|
||||
mSph1.SetC(mPosition);
|
||||
mSph0.SetC(mPosition);
|
||||
mCollider.registerColliders();
|
||||
|
||||
updateMdlMatrix();
|
||||
startEmitters();
|
||||
|
||||
if (mPosition.y <= -1000.0f) {
|
||||
deleteRequest();
|
||||
}
|
||||
|
||||
mVec3_c compare(1.2f, 1.2f, 1.2f);
|
||||
if (field_0x768 == compare && field_0x75C != compare) {
|
||||
startSound(SE_OGhKf_DISAPPEAR);
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_685_, mPosition, nullptr, nullptr, nullptr, nullptr, 0, 0
|
||||
);
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcObjGirahimuKnife_c::draw() {
|
||||
static mSphere_c sph(mVec3_c(0.0f, 60.0f, 0.0f), 100.0f);
|
||||
f32 f = mPosition.y;
|
||||
drawModelType1(&mMdl);
|
||||
fn_8002edb0(mShadow, mMdl, &sph, -1, -1, f);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_Wait() {
|
||||
field_0x6F6.x = cM::rndInt(64000);
|
||||
field_0x6F6.z = cM::rndInt(64000);
|
||||
|
||||
field_0x778 = cM::rndInt(32000);
|
||||
field_0x774 = 20.0f;
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_Wait() {
|
||||
if (!dAcPy_c::GetLink()->isAttacking()) {
|
||||
mSph0.ClrTgSet();
|
||||
} else {
|
||||
mSph0.OnTgSet();
|
||||
}
|
||||
|
||||
if (mState == 4) {
|
||||
changeState(StateID_SpinWait);
|
||||
} else if (mState == 5) {
|
||||
changeState(StateID_SpinFreeWait);
|
||||
} else if (mState == 6) {
|
||||
changeState(StateID_CircleWait);
|
||||
} else if (mState == 8) {
|
||||
changeState(StateID_FreeWait);
|
||||
} else {
|
||||
fn_239_2B10();
|
||||
fn_239_1DB0(field_0x6D8, field_0x744);
|
||||
field_0x778 += 0x500;
|
||||
fn_239_1C40();
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_Wait() {
|
||||
mSph0.OnTgSet();
|
||||
field_0x714.toQuat(field_0x704);
|
||||
mSph0.SetTg_0x4C(0);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_Attack() {
|
||||
mSph1.OnAtSet();
|
||||
mSph1.ClrCoSet();
|
||||
mSph0.ClrCoSet();
|
||||
|
||||
mAcceleration = 0.0f;
|
||||
field_0x78C = true;
|
||||
|
||||
if (mState != 6) {
|
||||
sSomething2 = 1;
|
||||
}
|
||||
|
||||
if (sSomething2 == 0 || !field_0x793) {
|
||||
mSph1.ClrAtSet();
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_Attack() {
|
||||
holdSound(SE_OGhKf_FLY_LV);
|
||||
|
||||
if (sSomething2 == 0 || !field_0x793) {
|
||||
mSph1.ClrAtSet();
|
||||
}
|
||||
fn_239_2B10();
|
||||
sLib::chase(&field_0x774, 0.0f, 2.0f);
|
||||
field_0x778 += 0x700;
|
||||
if (lineCheck()) {
|
||||
changeState(StateID_AttackEnd);
|
||||
return;
|
||||
}
|
||||
|
||||
if (field_0x790) {
|
||||
mVec3_c v0 = dAcPy_c::GetLink()->mPosition;
|
||||
if (field_0x791) {
|
||||
mVec3_c mod(field_0x744.x, field_0x744.y, 0.0f);
|
||||
mod.rotY(dAcPy_c::GetLink()->mRotation.y + 0x8000);
|
||||
v0 += mod;
|
||||
} else {
|
||||
v0.y += 100.0f;
|
||||
}
|
||||
|
||||
mVec3_c diff = v0 - mPosition;
|
||||
if (diff.dot(mVelocity) > 0.0f) {
|
||||
sLib::chaseAngle(mAngle.y.ref(), diff.atan2sX_Z(), 0x100);
|
||||
mVec3_c vel(0.0f, mVelocity.y, 60.0f);
|
||||
vel.rotY(mAngle.y);
|
||||
mVelocity.set(vel);
|
||||
}
|
||||
}
|
||||
mVec3_c norm = mVelocity;
|
||||
norm.normalizeRS();
|
||||
mQuat_c q;
|
||||
q.slerp(mVec3_c(0.0f, 0.0f, 1.0f), norm, 1.0f);
|
||||
field_0x704.slerpTo(q, 0.5f, field_0x704);
|
||||
field_0x714.fromQuat(field_0x704);
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_Attack() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_AttackEnd() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_AttackEnd() {}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_AttackEnd() {
|
||||
field_0x6D0 = 0x3C;
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.ClrTgSet();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_AttackEnd() {
|
||||
mVelocity.set(0.0f, 0.0f, 0.0f);
|
||||
mAcceleration = 0.0f;
|
||||
if (field_0x6D0 <= 0 && sLib::chase(&field_0x75C.y, 0.0f, 0.1f)) {
|
||||
deleteRequest();
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_AttackEnd() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_Return() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_Return() {}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_Return() {
|
||||
mSph1.SetAt_0xE(0);
|
||||
mAcceleration = 1.0f;
|
||||
|
||||
mVec3_c v0 = field_0x6D8;
|
||||
mVec3_c v1 = mPosition - field_0x6D8;
|
||||
mVec3_c pos(cM::rndFX(50.0f), 100.0f + cM::rndFX(50.0f), -100.0f);
|
||||
pos.rotY(v1.atan2sX_Z());
|
||||
|
||||
v0 += pos;
|
||||
f32 speed = (v1.absXZ() / 500.0f);
|
||||
speed *= 4.0f;
|
||||
calcVelocity(v0, speed);
|
||||
mSph0.ClrTgSet();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_Return() {
|
||||
mSph1.SetAtFlag2(2);
|
||||
mSph1.OnAtSet();
|
||||
mSph0.ClrTgSet();
|
||||
mSph1.SetR(50.0f);
|
||||
if (lineCheck()) {
|
||||
changeState(StateID_AttackEnd);
|
||||
} else if (mSph1.ChkAtHit()) {
|
||||
deleteRequest();
|
||||
} else {
|
||||
mVec3_c norm = mVelocity;
|
||||
norm.normalizeRS();
|
||||
mQuat_c q;
|
||||
q.slerp(mVec3_c(0.0f, 0.0f, 1.0f), norm, 1.0f);
|
||||
field_0x704.slerpTo(q, 0.5f, field_0x704);
|
||||
field_0x714.fromQuat(field_0x704);
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_Return() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_Hit() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_Hit() {}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_Hit() {
|
||||
mAcceleration = 1.0f;
|
||||
mSph1.ClrAtSet();
|
||||
if (mState == 8) {
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.ClrTgSet();
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_Hit() {
|
||||
if (lineCheck()) {
|
||||
changeState(StateID_AttackEnd);
|
||||
return;
|
||||
}
|
||||
mVec3_c norm = mVelocity;
|
||||
norm.normalizeRS();
|
||||
mQuat_c q;
|
||||
f32 f = 20.0f; // Forces rodata pool
|
||||
f = 1.0f;
|
||||
q.slerp(mVec3_c(0.0f, 0.0f, 1.0f), norm, f);
|
||||
field_0x704.slerpTo(q, 0.5f, field_0x704);
|
||||
field_0x714.fromQuat(field_0x704);
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_Hit() {}
|
||||
void dAcObjGirahimuKnife_c::initializeState_CircleWait() {}
|
||||
void dAcObjGirahimuKnife_c::executeState_CircleWait() {}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_CircleWait() {}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_SpinWait() {
|
||||
field_0x6F6.x = cM::rndInt(64000);
|
||||
field_0x6F6.z = cM::rndInt(64000);
|
||||
field_0x778 = cM::rndInt(32000);
|
||||
mSph0.SetTg_0x4C(-1);
|
||||
field_0x774 = 10.0f;
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_SpinWait() {
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.SetR(50.0f);
|
||||
field_0x78F = true;
|
||||
|
||||
if (checkCutDir(dAcPy_c::GetLink()->getSpecificAttackDirection())) {
|
||||
mSph0.OnTgSet();
|
||||
} else {
|
||||
mSph0.ClrTgSet();
|
||||
}
|
||||
|
||||
fn_239_2B10();
|
||||
if (mSph0.ChkTgHit()) {
|
||||
dAcEnBase_c *pEn = FindEnemy(fProfile::B_GIRAHIMU2);
|
||||
if (pEn != nullptr) {
|
||||
static_cast<dAcGirahimu2_c *>(pEn)->setField_0xD52(120);
|
||||
}
|
||||
}
|
||||
fn_239_1DB0(field_0x6D8, field_0x744);
|
||||
field_0x778 += 0x500;
|
||||
fn_239_1C40();
|
||||
if (field_0x792) {
|
||||
holdSound(SE_OGhKf_SPIN_LV);
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_SpinWait() {
|
||||
mSph0.OnTgSet();
|
||||
field_0x714.toQuat(field_0x704);
|
||||
mSph0.SetTg_0x4C(0);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_SpinWaitPreAttack() {
|
||||
mSph0.SetTg_0x4C(-1);
|
||||
field_0x744.x *= 1.5f;
|
||||
field_0x744.z = 50.0f;
|
||||
field_0x792 = false;
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_SpinWaitPreAttack() {
|
||||
if (!dAcPy_c::GetLink()->isAttacking()) {
|
||||
mSph0.ClrTgSet();
|
||||
} else {
|
||||
mSph0.OnTgSet();
|
||||
}
|
||||
|
||||
field_0x778 += 0x500;
|
||||
if (field_0x78E) {
|
||||
mSph1.ClrCoSet();
|
||||
mSph0.ClrCoSet();
|
||||
if (sLib::chase(&field_0x75C.y, 0.0f, 0.1f)) {
|
||||
deleteRequest();
|
||||
}
|
||||
} else {
|
||||
sLib::chase(&field_0x75C.y, 1.2f, 0.1f);
|
||||
}
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.SetR(50.0f);
|
||||
fn_239_2B10();
|
||||
fn_239_1DB0(field_0x6D8, field_0x744);
|
||||
fn_239_1C40();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_SpinWaitPreAttack() {
|
||||
mSph0.OnTgSet();
|
||||
field_0x714.toQuat(field_0x704);
|
||||
mSph0.SetTg_0x4C(0);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_SpinFreeWait() {
|
||||
sSomething0++;
|
||||
field_0x778 = cM::rndInt(32000);
|
||||
mSph0.SetTg_0x4C(-1);
|
||||
// NOTE - This is needed to force the rodata pool loading despite not emitting anything
|
||||
field_0x774 = 20.0f;
|
||||
field_0x774 = 0.0f;
|
||||
sSomething1 += mAng(0x1000);
|
||||
field_0x77C = 120.0f;
|
||||
field_0x780 = sSomething1;
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_SpinFreeWait() {
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.SetR(50.0f);
|
||||
field_0x78F = true;
|
||||
mSph0.ClrTgSet();
|
||||
fn_239_2B10();
|
||||
fn_239_2110(field_0x6D8, 150.0f, 0x4000);
|
||||
fn_239_1C40();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_SpinFreeWait() {
|
||||
sSomething1 = mAng(0);
|
||||
mSph0.OnTgSet();
|
||||
field_0x714.toQuat(field_0x704);
|
||||
mSph0.SetTg_0x4C(0);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::initializeState_FreeWait() {
|
||||
field_0x6F6.x = cM::rndInt(64000);
|
||||
field_0x6F6.z = cM::rndInt(64000);
|
||||
field_0x778 = cM::rndInt(32000);
|
||||
field_0x774 = 10.0f;
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_FreeWait() {
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.SetR(50.0f);
|
||||
field_0x78F = true;
|
||||
fn_239_2B10();
|
||||
fn_239_1DB0(field_0x6D8, field_0x744);
|
||||
field_0x778 += 0x500;
|
||||
fn_239_1C40();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_FreeWait() {
|
||||
mSph0.OnTgSet();
|
||||
field_0x714.toQuat(field_0x704);
|
||||
mSph0.SetTg_0x4C(0);
|
||||
}
|
||||
|
||||
// NONMATCHING
|
||||
void dAcObjGirahimuKnife_c::initializeState_CircleWait() {
|
||||
mSph0.SetTg_0x4C(-1);
|
||||
field_0x774 = 0.0f;
|
||||
// Dont think about it
|
||||
mAng som = sSomething1;
|
||||
mAng newval = som + 0x1000;
|
||||
if (field_0x784 == 7) {
|
||||
newval = som - 0x800;
|
||||
}
|
||||
sSomething1 = newval;
|
||||
field_0x77C = 200.0f;
|
||||
|
||||
field_0x780 = sSomething1;
|
||||
mSph0.OnTgSet();
|
||||
field_0x790 = true;
|
||||
mSph1.ClrCoSet();
|
||||
mSph0.ClrCoSet();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::executeState_CircleWait() {
|
||||
mSph1.ClrAtSet();
|
||||
mSph0.SetR(50.0f);
|
||||
field_0x78F = true;
|
||||
fn_239_2B10();
|
||||
if (field_0x784 == 7) {
|
||||
fn_239_1F50(dAcPy_c::GetLink()->mPosition, 50.0f);
|
||||
} else {
|
||||
fn_239_2110(dAcPy_c::GetLink()->mPosition, 150.0f, 0);
|
||||
}
|
||||
fn_239_1C40();
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::finalizeState_CircleWait() {
|
||||
mSph0.OnTgSet();
|
||||
field_0x714.toQuat(field_0x704);
|
||||
mSph0.SetTg_0x4C(0);
|
||||
sSomething1 = mAng(0);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::fn_239_1C40() {
|
||||
if (field_0x78E != 0) {
|
||||
mSph1.ClrCoSet();
|
||||
mSph0.ClrCoSet();
|
||||
if (sLib::chase(&field_0x75C.y, 0.0f, 0.1f) != false) {
|
||||
deleteRequest();
|
||||
}
|
||||
} else {
|
||||
sLib::chase(&field_0x75C.y, 1.2f, 0.1f);
|
||||
}
|
||||
|
||||
if (field_0x792) {
|
||||
field_0x6F6.x = field_0x6F6.x + 0x1700;
|
||||
field_0x6F6.y = field_0x6F0.y + 0x4000;
|
||||
field_0x6F6.z = field_0x6F6.z + 0x1700;
|
||||
field_0x714.ZXYrotS(field_0x6F6);
|
||||
} else {
|
||||
mVec3_c v = dAcPy_c::GetLink()->mPosition;
|
||||
v.y += 100.0f;
|
||||
mVec3_c norm = v - mPosition;
|
||||
norm.normalizeRS();
|
||||
|
||||
mQuat_c q;
|
||||
q.slerp(mVec3_c(0.0f, 0.0f, 1.0f), norm, 1.0f);
|
||||
field_0x704.slerpTo(q, 0.5f, field_0x704);
|
||||
field_0x714.fromQuat(field_0x704);
|
||||
}
|
||||
}
|
||||
|
||||
// NONMATCHING - UGH
|
||||
void dAcObjGirahimuKnife_c::fn_239_1DB0(const mVec3_c &i_base, const mVec3_c &i_target) {
|
||||
mVec3_c base = i_base;
|
||||
mVec3_c target = i_target;
|
||||
target.rotY(field_0x6F0.y);
|
||||
|
||||
mVec3_c toGoal = 0.05f * (base + target - mPosition);
|
||||
toGoal += mVelocity;
|
||||
toGoal *= 0.9f;
|
||||
|
||||
mVelocity.set(toGoal);
|
||||
mPosition += mVelocity;
|
||||
}
|
||||
|
||||
// NONMATCHING - UGH
|
||||
void dAcObjGirahimuKnife_c::fn_239_1F50(const mVec3_c &i_target, f32 add) {
|
||||
mVec3_c target = i_target;
|
||||
mVec3_c front(0.0f, 0.0f, field_0x77C);
|
||||
|
||||
mMtx_c m;
|
||||
m.YrotS(dAcPy_c::GetLink()->mRotation.y);
|
||||
m.XrotM(field_0x780);
|
||||
m.multVec(front, front);
|
||||
mVec3_c goal = target + front;
|
||||
goal.y += add;
|
||||
mPosition += mVelocity = (mVelocity + (goal - mPosition) * 0.05f) * 0.9f;
|
||||
}
|
||||
|
||||
// NONMATCHING - UGH
|
||||
void dAcObjGirahimuKnife_c::fn_239_2110(const mVec3_c &i_target, f32 add, s16 ang) {
|
||||
if (field_0x792) {
|
||||
field_0x780 += mAng(0x400);
|
||||
}
|
||||
mVec3_c target = i_target;
|
||||
mVec3_c front(0.0f, 0.0f, field_0x77C);
|
||||
|
||||
mMtx_c m;
|
||||
m.YrotS(field_0x6F0.y + field_0x780);
|
||||
m.multVec(front, front);
|
||||
|
||||
m.YrotS(field_0x6F0.y);
|
||||
m.XrotM(ang);
|
||||
m.YrotM(-field_0x6F0.y);
|
||||
m.multVec(front, front);
|
||||
|
||||
mVec3_c goal = target + front;
|
||||
goal.y += add;
|
||||
mVec3_c v = (mVelocity + (goal - mPosition) * 0.05f) * 0.9f;
|
||||
mVelocity.set(v);
|
||||
mPosition += mVelocity;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::setTarget(const mVec3_c &t) {
|
||||
field_0x744.set(t);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::fn_239_2360(bool b0, bool b1, f32 zVel) {
|
||||
if (b0 && !isWaiting()) {
|
||||
return;
|
||||
}
|
||||
|
||||
field_0x790 = b1;
|
||||
field_0x791 = b1;
|
||||
|
||||
changeState(StateID_Attack);
|
||||
field_0x78F = true;
|
||||
mVec3_c diff = dAcPy_c::GetLink()->mPosition - field_0x6D8;
|
||||
mAng toPlayer = diff.atan2sX_Z();
|
||||
mAngle.y = toPlayer;
|
||||
mVelocity.set(0.0f, 0.0f, zVel);
|
||||
mVelocity.rotY(toPlayer);
|
||||
field_0x6D6 = 0xFF;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::fn_239_2460(bool b0, bool b1, f32 velMult) {
|
||||
if (b0 && !isWaiting()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isCircleWait()) {
|
||||
field_0x790 = true;
|
||||
} else {
|
||||
field_0x790 = false;
|
||||
}
|
||||
changeState(StateID_Attack);
|
||||
|
||||
mSph0.SetR(100.f);
|
||||
|
||||
field_0x78F = b1;
|
||||
mVec3_c playerOffset = dAcPy_c::GetLink()->mPosition;
|
||||
playerOffset.y += 100.0f;
|
||||
mVec3_c diff = playerOffset - mPosition;
|
||||
mAngle.y = diff.atan2sX_Z();
|
||||
|
||||
diff.normalizeRS();
|
||||
diff *= velMult;
|
||||
mVelocity.set(diff);
|
||||
field_0x6D6 = 0xFF;
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuKnife_c::isWaiting() {
|
||||
if (getStateID().isEqual(StateID_Wait) || getStateID().isEqual(StateID_SpinWait) ||
|
||||
getStateID().isEqual(StateID_SpinFreeWait) || getStateID().isEqual(StateID_FreeWait) ||
|
||||
getStateID().isEqual(StateID_CircleWait)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuKnife_c::isCircleWait() {
|
||||
return getStateID().isEqual(StateID_CircleWait);
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuKnife_c::lineCheck() {
|
||||
mVec3_c start, end;
|
||||
start = mPosition;
|
||||
mMtx_c m0 = field_0x714;
|
||||
|
||||
mVec3_c offset(0.0f, 0.0f, -72.0f);
|
||||
m0.multVec(offset, offset);
|
||||
offset += mPosition;
|
||||
|
||||
start = offset;
|
||||
end = mPosition;
|
||||
|
||||
dBgS_ObjLinChk linChk;
|
||||
linChk.Set(&start, &end, nullptr);
|
||||
if (dBgS::GetInstance()->LineCross(&linChk)) {
|
||||
mPosition.set(linChk.GetLinEnd());
|
||||
mVelocity.set(0.0f, 0.0f, 0.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::updateMdlMatrix() {
|
||||
mRotation.z = 0x4000;
|
||||
mWorldMtx.transS(mPosition.x, mPosition.y + field_0x774 * mAng(field_0x778).sin(), mPosition.z);
|
||||
mWorldMtx.concat(field_0x714);
|
||||
mWorldMtx.ZXYrotM(mRotation);
|
||||
mWorldMtx.scaleM(field_0x75C);
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::startEmitters() {
|
||||
if (!field_0x792 && cM::isZero(VEC3LenSq(mVelocity))) {
|
||||
return;
|
||||
}
|
||||
mGlowEmitterId = PARTICLE_RESOURCE_ID_MAPPING_686_;
|
||||
mGlowEmitter.holdEffect(mGlowEmitterId, mWorldMtx, nullptr, nullptr);
|
||||
if (field_0x78C) {
|
||||
mTrailEmitterId = PARTICLE_RESOURCE_ID_MAPPING_1_;
|
||||
mWorldMtx.transM(0.0f, 0.0f, -30.0f);
|
||||
mColor c0(0, 0, 0, 0xFF);
|
||||
mColor c1(0, 0, 0, 0xFF);
|
||||
mTrailEmitter.holdEffect(mTrailEmitterId, mWorldMtx, &c0, &c1);
|
||||
mWorldMtx.transM(0.0f, 0.0f, 30.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::fn_239_2B10() {
|
||||
someEnemyDamageCollisionStuffMaybe(mCollider, nullptr);
|
||||
cCcD_Obj *pTgCc = mCollider.findTgHit();
|
||||
if (pTgCc == &mSph0) {
|
||||
switch (mSph0.GetTgAtHitType()) {
|
||||
case AT_TYPE_SWORD:
|
||||
case AT_TYPE_0x800000: {
|
||||
if (getStateID().isEqual(StateID_CircleWait)) {
|
||||
if (checkCutDir(mSph0.GetTgAtCutDir())) {
|
||||
field_0x78D = true;
|
||||
sSomething2 = 0;
|
||||
changeState(StateID_Return);
|
||||
} else if (field_0x792) {
|
||||
mVec3_c force;
|
||||
getReflectForce(mSph0, 20.0f, force);
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y);
|
||||
mVelocity.set(force);
|
||||
} else {
|
||||
mVec3_c force;
|
||||
getReflectForce(mSph0, 100.0f + cM::rndF(20.0f), force);
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y);
|
||||
mVelocity.set(force);
|
||||
changeState(StateID_Hit);
|
||||
}
|
||||
} else if (isWaiting()) {
|
||||
mVec3_c force;
|
||||
getReflectForce(mSph0, 100.0f + cM::rndF(20.0f), force);
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y);
|
||||
mVelocity.set(force);
|
||||
changeState(StateID_Hit);
|
||||
} else if (checkCutDir(mSph0.GetTgAtCutDir())) {
|
||||
field_0x78D = true;
|
||||
sSomething2 = 0;
|
||||
changeState(StateID_Return);
|
||||
} else {
|
||||
mVec3_c force;
|
||||
getReflectForce(mSph0, 100.0f + cM::rndF(20.0f), force);
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y);
|
||||
mVelocity.set(force);
|
||||
if (mState == 8) {
|
||||
field_0x793 = false;
|
||||
} else {
|
||||
sSomething2 = 0;
|
||||
}
|
||||
changeState(StateID_Hit);
|
||||
}
|
||||
} break;
|
||||
case AT_TYPE_BELLOWS: {
|
||||
mVec3_c force(0.0f, 0.0f, 100.0f + cM::rndF(20.0f));
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y);
|
||||
mVelocity.set(force);
|
||||
changeState(StateID_Hit);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
cCcD_Obj *pAtCc = mCollider.findAtHit();
|
||||
if (pAtCc != nullptr) {
|
||||
if (pAtCc->GetAtFlag0x8()) {
|
||||
if (mState == 8) {
|
||||
mVec3_c force = mPosition - dAcPy_c::GetLink()->mPosition;
|
||||
force.y = 0.0f;
|
||||
force.normalizeRS();
|
||||
adjustVelocity(force, 10.0f, 0.2f);
|
||||
changeState(StateID_Hit);
|
||||
} else {
|
||||
field_0x78D = true;
|
||||
changeState(StateID_Return);
|
||||
}
|
||||
} else if (pAtCc->GetAtFlag0x2()) {
|
||||
const dAcPy_c *pPlayer = dAcPy_c::GetLink();
|
||||
s16 angY = cLib::targetAngleY(pPlayer->mPosition, mPosition);
|
||||
s16 diff = pPlayer->mRotation.y - angY;
|
||||
mVec3_c force(0.0f, 0.0f, 1.0f);
|
||||
if (diff >= 0) {
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y + -0x2000);
|
||||
} else {
|
||||
force.rotY(dAcPy_c::GetLink()->mRotation.y + 0x2000);
|
||||
}
|
||||
adjustVelocity(force, 10.0f, 1.0f);
|
||||
changeState(StateID_Hit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuKnife_c::checkCutDir(s32 cutDir) {
|
||||
if (!field_0x78F) {
|
||||
return false;
|
||||
}
|
||||
if (dAcPy_c::GetLink()->isAttackingSpin() && dAcPy_c::GetLink()->isAttackingHorizontal()) {
|
||||
if (field_0x784 == 0 || field_0x784 == 6) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (dAcPy_c::GetLink()->isAttackingSpin() && dAcPy_c::GetLink()->isAttackingVertical()) {
|
||||
if (field_0x784 == 3 || field_0x784 == 7) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
switch (cutDir) {
|
||||
case CUT_DIR_U:
|
||||
case CUT_DIR_D:
|
||||
if (field_0x784 == 3) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case CUT_DIR_RD:
|
||||
case CUT_DIR_LU:
|
||||
if (field_0x784 == 2) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case CUT_DIR_R:
|
||||
case CUT_DIR_L:
|
||||
if (field_0x784 == 0) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case CUT_DIR_RU:
|
||||
case CUT_DIR_LD:
|
||||
if (field_0x784 == 1) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case CUT_DIR_STAB: break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::setWait() {
|
||||
mState = 9;
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::setSpinWaitPreAttack() {
|
||||
changeState(StateID_SpinWaitPreAttack);
|
||||
}
|
||||
void dAcObjGirahimuKnife_c::getReflectForce(cCcD_Obj &cc, f32 forceMult, mVec3_c &outforce) {
|
||||
mVec3_c force;
|
||||
switch (cc.GetTgAtCutDir()) {
|
||||
case CUT_DIR_U: force.set(0.0f, -0.5f, 0.5f); break;
|
||||
case CUT_DIR_D: force.set(0.0f, 0.5f, 0.5f); break;
|
||||
case CUT_DIR_LU: force.set(-0.5f, -0.5f, 0.5f); break;
|
||||
case CUT_DIR_RD: force.set(0.5f, 0.5f, 0.5f); break;
|
||||
case CUT_DIR_L: force.set(-0.5f, 0.0f, 0.5f); break;
|
||||
case CUT_DIR_R: force.set(0.5f, 0.0f, 0.5f); break;
|
||||
case CUT_DIR_LD: force.set(-0.5f, 0.5f, 0.5f); break;
|
||||
case CUT_DIR_RU: force.set(0.5f, -0.5f, 0.5f); break;
|
||||
default: force.set(0.0f, 0.0f, 1.0f); break;
|
||||
}
|
||||
force.normalizeRS();
|
||||
force *= forceMult;
|
||||
outforce.set(force);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuKnife_c::adjustVelocity(const mVec3_c &force, f32 yVel, f32 forwardVel) {
|
||||
mVec3_c v0(-mVelocity.x, 0.0f, -mVelocity.z);
|
||||
|
||||
s32 dirVel = v0.atan2sX_Z();
|
||||
s32 dirForce = force.atan2sX_Z();
|
||||
mAng diff = (s32)(dirVel - dirForce);
|
||||
|
||||
f32 norm = nw4r::math::FAbs(diff.normal_c());
|
||||
if (norm <= 0.1f) {
|
||||
norm = 0.1f;
|
||||
}
|
||||
if (norm >= 1.0f) {
|
||||
norm = 1.0f;
|
||||
}
|
||||
|
||||
f32 mag = 2.0f * v0.dot(force) / force.mag();
|
||||
mVelocity = force * mag - v0;
|
||||
mVelocity.x *= forwardVel + norm;
|
||||
mVelocity.y = yVel;
|
||||
mVelocity.z *= forwardVel + norm;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
#include "d/a/obj/d_a_obj_girahimu_sword_link.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/col/c/c_cc_d.h"
|
||||
#include "d/col/c/c_m3d_g_pla.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_sphere.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_GH_SW_L, dAcObjGirahimuSwordLink_c, fProfile::OBJ_GH_SW_L, 0x114, 0, 2);
|
||||
|
||||
STATE_DEFINE(dAcObjGirahimuSwordLink_c, Hide);
|
||||
@@ -10,24 +29,431 @@ STATE_DEFINE(dAcObjGirahimuSwordLink_c, AtThrow);
|
||||
STATE_DEFINE(dAcObjGirahimuSwordLink_c, Stick);
|
||||
STATE_DEFINE(dAcObjGirahimuSwordLink_c, Reflect);
|
||||
|
||||
bool dAcObjGirahimuSwordLink_c::createHeap() {
|
||||
nw4r::g3d::ResFile res = dAcPy_c::GetLink()->getSwordResFile();
|
||||
TRY_CREATE(mMdl.create(
|
||||
&mAllocator, res, dAcPy_c::getSwordName(), 0x130, mVec3_c::Zero, mVec3_c(100.0f, 0.0f, 0.0f), mStts, nullptr, 1,
|
||||
nullptr
|
||||
));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcObjGirahimuSwordLink_c::create() {
|
||||
CREATE_ALLOCATOR(dAcObjGirahimuSwordLink_c);
|
||||
init();
|
||||
changeState(StateID_Hide);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::init() {
|
||||
mAcceleration = 0.0f;
|
||||
mStts.SetRank(12);
|
||||
mMaxSpeed = -6000.0f;
|
||||
mBoundingBox.Set(mVec3_c(-100.0f, -100.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
mAcch.Set(&mPosition, &mOldPosition, this, 1, &mAcchCir, nullptr, nullptr, nullptr);
|
||||
mAcchCir.SetWall(0.0f, 50.0f);
|
||||
mMdl.fn_8006B660(4, 1, 0, 0, 0, 0, 0, 0x400, 12, 40.0f);
|
||||
}
|
||||
|
||||
int dAcObjGirahimuSwordLink_c::actorExecute() {
|
||||
if (--field_0x8A8 <= 0) {
|
||||
field_0x8A8 = 0;
|
||||
}
|
||||
executeState();
|
||||
fn_238_19D0();
|
||||
mAcch.CrrPos(*dBgS::GetInstance());
|
||||
updateModelMatrix();
|
||||
if (getStateID().isEqual(StateID_Stick)) {
|
||||
mPositionCopy3 = mPosition;
|
||||
mPositionCopy3.y += 50.0f;
|
||||
mPositionCopy2 = mPositionCopy3;
|
||||
|
||||
AttentionManager::GetInstance()->addUnk3Target(*this, 0x2 | 0x1, 600.0f, 50.0f, -200.0f, 200.0f);
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcObjGirahimuSwordLink_c::draw() {
|
||||
if (getStateID().isEqual(StateID_Hide)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
mMdl.entry(this, nullptr, nullptr);
|
||||
static mSphere_c sph(mVec3_c(0.0f, 100.0f, 0.0f), 200.0f);
|
||||
fn_8002edb0(mShadow, mMdl.mMdl, &sph, -1, -1, 0.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Hide() {}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Hide() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Hide() {}
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Equip() {}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Equip() {
|
||||
mAcceleration = 0.0f;
|
||||
mVelocity.set(0.0f, 0.0f, 0.0f);
|
||||
mRotation.set(mAng(0), mAng(0), mAng(0));
|
||||
mMdl.SetGrp(0xC);
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Equip() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Equip() {}
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_GetSword() {}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_GetSword() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_GetSword() {}
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Throw() {}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Throw() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Throw() {}
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_AtThrow() {}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_AtThrow() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_AtThrow() {}
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Stick() {}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Stick() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Stick() {}
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Reflect() {}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Reflect() {}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Reflect() {}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_GetSword() {
|
||||
mAcceleration = 3.0f;
|
||||
mVec3_c v(-7.0f, 112.0f, 36.0f);
|
||||
v.rotY(mAngleCopy.y);
|
||||
v += mGhirahimPos;
|
||||
calcVelocity(v, 29.0f);
|
||||
mMdl.SetGrp(0xC);
|
||||
mRotation.z = 0;
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_GetSword() {
|
||||
mRotation.z -= 0x2000;
|
||||
mVelocity.y -= mAcceleration;
|
||||
mPosition += mVelocity;
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_GetSword() {
|
||||
mRotation.z = 0;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Throw() {
|
||||
field_0x8B0.toQuat(field_0xD00);
|
||||
mMdl.enableAttack();
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Throw() {
|
||||
mVec3_c to(-1.0f, 0.0f, 0.0f);
|
||||
mQuat_c q;
|
||||
mVec3_c from(1.0f, 0.0f, 0.0f);
|
||||
q.slerp(from, to, 1.0f);
|
||||
field_0xD00.slerpTo(q, 0.2f, field_0xD00);
|
||||
field_0x8B0.fromQuat(field_0xD00);
|
||||
|
||||
mVelocity.y -= mAcceleration;
|
||||
mRotation.z += field_0xD10;
|
||||
mPosition += mVelocity;
|
||||
|
||||
if (lineCheck()) {
|
||||
changeState(StateID_Reflect);
|
||||
return;
|
||||
}
|
||||
if (mPosition.y <= mGhirahimPos.y - 500.0f) {
|
||||
mPosition.y = mGhirahimPos.y;
|
||||
field_0xD14.set(0.0f, 1.0f, 0.0f);
|
||||
changeState(StateID_Reflect);
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Throw() {
|
||||
mMdl.setInactive();
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_AtThrow() {
|
||||
field_0x8B0.toQuat(field_0xD00);
|
||||
mMdl.enableAttack();
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_AtThrow() {
|
||||
holdSound(SE_OGhSwL_FLY_LV);
|
||||
|
||||
cCcD_Obj *pCcAt = mMdl.mCcList.findAtHit();
|
||||
if (pCcAt != nullptr) {
|
||||
if (pCcAt->GetAtActor()->isActorPlayer() && pCcAt->GetAtFlag0x2()) {
|
||||
field_0xD14.set(0.0f, 0.0f, 1.0f);
|
||||
field_0xD14.rotY(dAcPy_c::GetLink()->mRotation.y);
|
||||
|
||||
changeState(StateID_Reflect);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
mVec3_c moveDir = mVelocity;
|
||||
moveDir.normalizeRS();
|
||||
(void)mVelocity.mag(); // lol
|
||||
|
||||
mQuat_c q;
|
||||
mVec3_c from(1.0f, 0.0f, 0.0f);
|
||||
q.slerp(from, moveDir, 1.0f);
|
||||
field_0xD00.slerpTo(q, 0.5f, field_0xD00);
|
||||
field_0x8B0.fromQuat(field_0xD00);
|
||||
|
||||
mVelocity.y -= mAcceleration;
|
||||
mPosition += mVelocity;
|
||||
if (lineCheck()) {
|
||||
changeState(StateID_Reflect);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mPosition.y <= mGhirahimPos.y + 5.0f) {
|
||||
field_0xD14.set(0.0f, 1.0f, 0.0f);
|
||||
changeState(StateID_Reflect);
|
||||
return;
|
||||
}
|
||||
|
||||
mTrailEmitterID = PARTICLE_RESOURCE_ID_MAPPING_1_;
|
||||
mWorldMtx.transM(30.0f, 0.0f, 0.0f);
|
||||
mEmitter.holdEffect(mTrailEmitterID, mWorldMtx, nullptr, nullptr);
|
||||
mWorldMtx.transM(-30.0f, 0.0f, 0.0f);
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_AtThrow() {
|
||||
mMdl.setInactive();
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Stick() {
|
||||
startSound(SE_OGhSwL_BOUND);
|
||||
mMdl.setInactive();
|
||||
mAcceleration = 0.0f;
|
||||
mVelocity.set(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Stick() {
|
||||
mVec3_c to(-1.0f, 0.0f, 0.0f);
|
||||
field_0x8B0.multVec(to, to);
|
||||
to.y = 0.0f;
|
||||
to.normalizeRS();
|
||||
|
||||
mQuat_c q;
|
||||
mVec3_c from(-1.0f, 0.0f, 0.0f);
|
||||
q.slerp(from, to, 1.0f);
|
||||
field_0xD00.slerpTo(q, 0.5f, field_0xD00);
|
||||
field_0x8B0.fromQuat(field_0xD00);
|
||||
|
||||
from = mPosition - dAcPy_c::GetLink()->mPosition;
|
||||
if (from.absXZ() < 60.0f) {
|
||||
changeState(StateID_Hide);
|
||||
dAcPy_c::GetLinkM()->relatedToUsingItem0x11();
|
||||
}
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Stick() {
|
||||
mRotation.z = 0;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::initializeState_Reflect() {
|
||||
s32 _weird_zero = 0;
|
||||
reflect(field_0xD14, 3.0f, 10.f + _weird_zero, 0.5f);
|
||||
field_0x8AA = 0;
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::executeState_Reflect() {
|
||||
sLib::chaseAngle(mRotation.z.ref(), 0, 0x1000);
|
||||
mVec3_c direction = mVelocity;
|
||||
|
||||
if (field_0xD26) {
|
||||
mMdl.mCcList.findAtHit();
|
||||
mMdl.SetGrp(0x3E);
|
||||
}
|
||||
|
||||
switch (field_0x8AA) {
|
||||
case 0:
|
||||
field_0xD24 += 0x1000;
|
||||
direction.normalizeRS();
|
||||
// fatll-through
|
||||
case 1:
|
||||
field_0xD24 += 0x1000;
|
||||
direction.normalizeRS();
|
||||
direction.y = field_0xD24.sin() * 0.3f;
|
||||
direction.normalizeRS();
|
||||
break;
|
||||
case 2:
|
||||
field_0xD24 += 0x1000;
|
||||
direction.normalizeRS();
|
||||
direction.y = field_0xD24.sin() * 0.3f;
|
||||
direction.normalizeRS();
|
||||
}
|
||||
mQuat_c q;
|
||||
mVec3_c from(1.0f, 0.0f, 0.0f);
|
||||
q.slerp(from, direction, 1.0f);
|
||||
field_0xD00.slerpTo(q, 0.5f, field_0xD00);
|
||||
field_0x8B0.fromQuat(field_0xD00);
|
||||
|
||||
mVelocity.y -= mAcceleration;
|
||||
mPosition += mVelocity;
|
||||
if (lineCheck()) {
|
||||
if (mPosition.y < 40.0f) {
|
||||
field_0x8AA++;
|
||||
}
|
||||
if (field_0x8AA >= 3) {
|
||||
changeState(StateID_Stick);
|
||||
} else {
|
||||
reflect(field_0xD14, 3.0f, 5.0f, 0.5f);
|
||||
}
|
||||
} else {
|
||||
if (mPosition.y <= mGhirahimPos.y + 5.0f) {
|
||||
mPosition.y = mGhirahimPos.y + 5.0f;
|
||||
field_0xD14.set(0.0f, 1.0f, 0.0f);
|
||||
|
||||
if (mPosition.y < 40.0f) {
|
||||
field_0x8AA++;
|
||||
}
|
||||
if (field_0x8AA < 3) {
|
||||
reflect(field_0xD14, 3.0f, 5.0f, 0.5f);
|
||||
} else {
|
||||
direction.set(1.0f, 0.0f, 0.0f);
|
||||
field_0x8B0.multVec(direction, direction);
|
||||
direction.y = 0.0f;
|
||||
direction.normalizeRS();
|
||||
mQuat_c q;
|
||||
mVec3_c from(1.0f, 0.0f, 0.0f);
|
||||
q.slerp(from, direction, 1.0f);
|
||||
field_0xD00.slerpTo(q, 0.5f, field_0xD00);
|
||||
field_0x8B0.fromQuat(field_0xD00);
|
||||
|
||||
changeState(StateID_Stick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mTrailEmitterID = PARTICLE_RESOURCE_ID_MAPPING_1_;
|
||||
mWorldMtx.transM(30.0f, 0.0f, 0.0f);
|
||||
mEmitter.holdEffect(mTrailEmitterID, mWorldMtx, nullptr, nullptr);
|
||||
mWorldMtx.transM(-30.0f, 0.0f, 0.0f);
|
||||
}
|
||||
void dAcObjGirahimuSwordLink_c::finalizeState_Reflect() {
|
||||
field_0xD26 = false;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::setEquip() {
|
||||
changeState(StateID_Equip);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::setGetSword() {
|
||||
changeState(StateID_GetSword);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::setHide() {
|
||||
changeState(StateID_Hide);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::setThrow(const mVec3_c &force, mAng angle, f32 rate) {
|
||||
mAcceleration = 3.0f;
|
||||
field_0xD10 = angle;
|
||||
calcVelocity(force, rate);
|
||||
changeState(StateID_Throw);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::setAtThrow(const mVec3_c &velocity) {
|
||||
mAcceleration = 0.0f;
|
||||
field_0xD10 = 0;
|
||||
mVelocity.set(velocity);
|
||||
changeState(StateID_AtThrow);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::fn_238_19D0() {
|
||||
return;
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::updateModelMatrix() {
|
||||
mWorldMtx.transS(mPosition.x, mPosition.y, mPosition.z);
|
||||
mWorldMtx.concat(field_0x8B0);
|
||||
mWorldMtx.ZXYrotM(mRotation);
|
||||
mMdl.calc(mWorldMtx, mPosition - mOldPosition, false);
|
||||
}
|
||||
|
||||
void dAcObjGirahimuSwordLink_c::setTransform(const mMtx_c &mtx, const mVec3_c &pos) {
|
||||
field_0x8B0 = mtx;
|
||||
field_0x8B0.ZrotM(-0x4000);
|
||||
field_0x8B0.XrotM(0x4000);
|
||||
setPosition(pos);
|
||||
setOldPosition(pos);
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuSwordLink_c::isHide() {
|
||||
return getStateID().isEqual(StateID_Hide);
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuSwordLink_c::isStick() {
|
||||
return getStateID().isEqual(StateID_Stick);
|
||||
}
|
||||
|
||||
// NONMATCHING
|
||||
void dAcObjGirahimuSwordLink_c::reflect(const mVec3_c &rot, f32 gravity, f32, f32 force) {
|
||||
if (rot.y == 1.0f) {
|
||||
startSound(SE_OGhSwL_BOUND);
|
||||
} else {
|
||||
startSound(SE_OGhSwL_HIT);
|
||||
}
|
||||
|
||||
mVec3_c v0(-mVelocity.x, -mVelocity.y, -mVelocity.z);
|
||||
mAng a1 = v0.atan2sX_Z();
|
||||
mAng a2 = rot.atan2sX_Z();
|
||||
s32 s = a1 - a2;
|
||||
f32 mag = nw4r::math::FAbs(mAng(s).normal_c());
|
||||
if (mag <= 0.1f) {
|
||||
mag = 0.1f;
|
||||
}
|
||||
if (mag >= 1.0f) {
|
||||
mag = 1.0f;
|
||||
}
|
||||
|
||||
f32 m = rot.mag();
|
||||
f32 dot = v0.dot(rot);
|
||||
f32 scale = dot * 2.0f / m;
|
||||
|
||||
mVec3_c v;
|
||||
mVelocity = rot * scale - v0;
|
||||
mVelocity *= force;
|
||||
|
||||
if (gravity < 0.0f) {
|
||||
gravity = -gravity;
|
||||
}
|
||||
mAcceleration = gravity;
|
||||
}
|
||||
|
||||
bool dAcObjGirahimuSwordLink_c::lineCheck() {
|
||||
mMtx_c m = field_0x8B0;
|
||||
m.ZXYrotM(mRotation);
|
||||
|
||||
mVec3_c start, end;
|
||||
start = mPosition;
|
||||
mVec3_c v0(100.0f, 0.0f, 0.0f);
|
||||
m.multVec(v0, v0);
|
||||
v0 += mPosition;
|
||||
end = v0;
|
||||
|
||||
v0.set(0.0f, mVelocity.mag(), 0.0f);
|
||||
m.multVec(v0, v0);
|
||||
v0 += mPosition;
|
||||
start = v0;
|
||||
|
||||
dBgS_ObjLinChk linChk;
|
||||
linChk.Set(&start, &end, nullptr);
|
||||
if (dBgS::GetInstance()->LineCross(&linChk)) {
|
||||
cM3dGPla pla;
|
||||
if (dBgS::GetInstance()->GetTriPla(linChk, &pla)) {
|
||||
field_0xD14.x = pla.GetN().x;
|
||||
field_0xD14.y = pla.GetN().y;
|
||||
field_0xD14.z = pla.GetN().z;
|
||||
}
|
||||
|
||||
if (mVelocity.dot(field_0xD14) < 0.0f) {
|
||||
mVec3_c newPos = linChk.GetLinEnd();
|
||||
mVec3_c v1 = field_0xD14;
|
||||
v1.normalizeRS();
|
||||
v1 *= 5.0f;
|
||||
newPos += v1;
|
||||
mPosition = newPos;
|
||||
if (mPosition.y <= mGhirahimPos.y + 5.0f) {
|
||||
mPosition.y = mGhirahimPos.y + 5.0f;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
linChk.Set(&end, &start, nullptr);
|
||||
if (dBgS::GetInstance()->LineCross(&linChk)) {
|
||||
cM3dGPla pla;
|
||||
if (dBgS::GetInstance()->GetTriPla(linChk, &pla)) {
|
||||
field_0xD14.x = pla.GetN().x;
|
||||
field_0xD14.y = pla.GetN().y;
|
||||
field_0xD14.z = pla.GetN().z;
|
||||
}
|
||||
|
||||
if (mVelocity.dot(field_0xD14) < 0.0f) {
|
||||
mVec3_c newPos = linChk.GetLinEnd();
|
||||
mVec3_c v1 = field_0xD14;
|
||||
v1.normalizeRS();
|
||||
v1.multScalar(5.0f);
|
||||
newPos += v1;
|
||||
mPosition = newPos;
|
||||
if (mPosition.y <= mGhirahimPos.y + 5.0f) {
|
||||
mPosition.y = mGhirahimPos.y + 5.0f;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ bool dEnemySwordMdl_c::create(
|
||||
}
|
||||
|
||||
bool dEnemySwordMdl_c::create(
|
||||
mAllocator_c *alloc, nw4r::g3d::ResFile resFile, const char *mdlName, u32 bufferOption, const mVec3_c &v1,
|
||||
mAllocator_c *alloc, nw4r::g3d::ResFile &resFile, const char *mdlName, u32 bufferOption, const mVec3_c &v1,
|
||||
const mVec3_c &v2, cCcD_Stts &stts, EGG::ResTIMG *pImg, int nView, u32 *pSize
|
||||
) {
|
||||
nw4r::g3d::ResMdl mdl = resFile.GetResMdl(mdlName);
|
||||
|
||||
Reference in New Issue
Block a user