diff --git a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt index 33d4f584..69398a65 100644 --- a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt +++ b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt @@ -3,43 +3,43 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global _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 -fn_155_F0 = .text:0x000000F0; // type:function size:0x40 +__dt__7mVec3_cFv = .text:0x000000F0; // type:function size:0x40 dAcEKs_c_classInit__Fv = .text:0x00000130; // type:function size:0x190 -fn_155_2C0 = .text:0x000002C0; // type:function size:0x58 +__dt__15dShadowCircle_cFv = .text:0x000002C0; // type:function size:0x58 __dt__20sFState_c<8dAcEKs_c>Fv = .text:0x00000320; // type:function size:0x58 __dt__23sFStateFct_c<8dAcEKs_c>Fv = .text:0x00000380; // type:function size:0x6C __dt__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000003F0; // type:function size:0xA0 __dt__46sFStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000490; // type:function size:0xA4 -fn_155_540 = .text:0x00000540; // type:function size:0x5C -fn_155_5A0 = .text:0x000005A0; // type:function size:0x4 +__dt__14dWaterEffect_cFv = .text:0x00000540; // type:function size:0x5C +__ct__7mVec3_cFv = .text:0x000005A0; // type:function size:0x4 restorePosRotFromCopy__8dAcEKs_cFv = .text:0x000005B0; // type:function size:0x134 linkKiesuTag__8dAcEKs_cFP13dTgKiesuTag_c = .text:0x000006F0; // type:function size:0x8 setStartingState__8dAcEKs_cFv = .text:0x00000700; // type:function size:0x1A8 changeState__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000008B0; // type:function size:0x10 setIdleState__8dAcEKs_cFv = .text:0x000008C0; // type:function size:0xCC getLineCrossYRange__8dAcEKs_cFRC7mVec3_cf = .text:0x00000990; // type:function size:0xD0 -fn_155_A60 = .text:0x00000A60; // type:function size:0x6B0 +fn_155_A60__8dAcEKs_cFv = .text:0x00000A60; // type:function size:0x6B0 getStateID__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001110; // type:function size:0x10 -fn_155_1120 = .text:0x00001120; // type:function size:0x1C -fn_155_1140 = .text:0x00001140; // type:function size:0x12C -fn_155_1270 = .text:0x00001270; // type:function size:0x54 -fn_155_12D0 = .text:0x000012D0; // type:function size:0xA0 -fn_155_1370 = .text:0x00001370; // type:function size:0x58 -fn_155_13D0 = .text:0x000013D0; // type:function size:0x58 -fn_155_1430 = .text:0x00001430; // type:function size:0x38 -fn_155_1470 = .text:0x00001470; // type:function size:0x80C -fn_155_1C80 = .text:0x00001C80; // type:function size:0x5E4 -fn_155_2270 = .text:0x00002270; // type:function size:0x754 -fn_155_29D0 = .text:0x000029D0; // type:function size:0x1A8 -fn_155_2B80 = .text:0x00002B80; // type:function size:0x1E0 +calcTimer__4sLibFPUc_Uc = .text:0x00001120; // type:function size:0x1C +kill__8dAcEKs_cFb = .text:0x00001140; // type:function size:0x12C +chaseTargetY__8dAcEKs_cFff = .text:0x00001270; // type:function size:0x54 +playBlinkAnm__8dAcEKs_cFv = .text:0x000012D0; // type:function size:0xA0 +soundSqueak__8dAcEKs_cFv = .text:0x00001370; // type:function size:0x58 +soundStun__8dAcEKs_cFv = .text:0x000013D0; // type:function size:0x58 +fn_155_1430__8dAcEKs_cFv = .text:0x00001430; // type:function size:0x38 +fn_155_1470__8dAcEKs_cFv = .text:0x00001470; // type:function size:0x80C +fn_155_1C80__8dAcEKs_cFv = .text:0x00001C80; // type:function size:0x5E4 +fn_155_2270__8dAcEKs_cFv = .text:0x00002270; // type:function size:0x754 +fn_155_29D0__8dAcEKs_cFl = .text:0x000029D0; // type:function size:0x1A8 +fn_155_2B80__8dAcEKs_cFbl = .text:0x00002B80; // type:function size:0x1E0 fn_155_2D60__8dAcEKs_cFv = .text:0x00002D60; // type:function size:0x138 fn_155_2EA0__8dAcEKs_cFv = .text:0x00002EA0; // type:function size:0x118 isOutsideRange__8dAcEKs_cFv = .text:0x00002FC0; // type:function size:0x84 isNotWaitingNorDamage__8dAcEKs_cFv = .text:0x00003050; // type:function size:0xAC isTargeted__8dAcEKs_cFv = .text:0x00003100; // type:function size:0xF4 -ChkWall__8dAcEKs_cFv = .text:0x00003200; // type:function size:0xA4 -ChkGnd__8dAcEKs_cFv = .text:0x000032B0; // type:function size:0x94 -ChkRoof__8dAcEKs_cFv = .text:0x00003350; // type:function size:0x94 +checkWallCross__8dAcEKs_cFv = .text:0x00003200; // type:function size:0xA4 +adjustTargetGnd__8dAcEKs_cFv = .text:0x000032B0; // type:function size:0x94 +adjustTargetRoof__8dAcEKs_cFv = .text:0x00003350; // type:function size:0x94 ChkHit__8dAcEKs_cFv = .text:0x000033F0; // type:function size:0x68 fn_155_3460__8dAcEKs_cFv = .text:0x00003460; // type:function size:0x14 fn_155_3480__8dAcEKs_cFv = .text:0x00003480; // type:function size:0x34 @@ -58,13 +58,13 @@ setPitchYawToPoint__8dAcEKs_cFRC7mVec3_c = .text:0x00003B70; // type:function si fn_155_3BD0__8dAcEKs_cFRC7mVec3_c = .text:0x00003BD0; // type:function size:0x10 fn_155_3BE0__8dAcEKs_cFRC7mVec3_c = .text:0x00003BE0; // type:function size:0x178 setBlink__8dAcEKs_cFUc = .text:0x00003D60; // type:function size:0xA8 -fn_155_3E10 = .text:0x00003E10; // type:function size:0x1C -fn_155_3E30 = .text:0x00003E30; // type:function size:0x24 -fn_155_3E60 = .text:0x00003E60; // type:function size:0x2C +checkPathPntParam__8dAcEKs_cFUl = .text:0x00003E10; // type:function size:0x1C +fn_155_3E30__8dAcEKs_cFv = .text:0x00003E30; // type:function size:0x24 +clampRotationX__8dAcEKs_cFv = .text:0x00003E60; // type:function size:0x2C fn_155_3E90__8dAcEKs_cFv = .text:0x00003E90; // type:function size:0x24 fn_155_3EC0__8dAcEKs_cFv = .text:0x00003EC0; // type:function size:0x24 -fn_155_3EF0 = .text:0x00003EF0; // type:function size:0x5C -fn_155_3F50 = .text:0x00003F50; // type:function size:0x10C +fn_155_3EF0__8dAcEKs_cFv = .text:0x00003EF0; // type:function size:0x5C +fn_155_3F50__8dAcEKs_cFv = .text:0x00003F50; // type:function size:0x10C AcEKs__initModels = .text:0x00004060; // type:function size:0x120 AcEKs__init1 = .text:0x00004180; // type:function size:0x57C AcEKs__init2 = .text:0x00004700; // type:function size:0x178 @@ -174,27 +174,30 @@ lbl_155_data_188 = .data:0x00000188; // type:object size:0x7 data:string lbl_155_data_190 = .data:0x00000190; // type:object size:0x8 data:string lbl_155_data_198 = .data:0x00000198; // type:object size:0x4 data:4byte lbl_155_data_19C = .data:0x0000019C; // type:object size:0x4 data:4byte -AcEKs__vtable = .data:0x000001A0; // type:object size:0x90 -lbl_155_data_230 = .data:0x00000230; // type:object size:0x30 -lbl_155_data_260 = .data:0x00000260; // type:object size:0x30 -lbl_155_data_290 = .data:0x00000290; // type:object size:0x18 -lbl_155_data_2A8 = .data:0x000002A8; // type:object size:0x18 -lbl_155_data_2C0 = .data:0x000002C0; // type:object size:0xC -lbl_155_data_2CC = .data:0x000002CC; // type:object size:0x388 +__vt__8dAcEKs_c = .data:0x000001A0; // type:object size:0x90 +__vt__46sFStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c> = .data:0x00000230; // type:object size:0x30 +__vt__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000260; // type:object size:0x30 +__vt__23sFStateFct_c<8dAcEKs_c> = .data:0x00000290; // type:object size:0x18 +__vt__20sFState_c<8dAcEKs_c> = .data:0x000002A8; // type:object size:0x18 +__vt__14dWaterEffect_c = .data:0x000002C0; // type:object size:0xC +__vt__15dShadowCircle_c = .data:0x000002CC; // type:object size:0x388 lbl_155_data_654 = .data:0x00000654; // type:object size:0x34 __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global lbl_155_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte -AcEKs__StateID_Wait = .bss:0x00000018; // type:object size:0x40 data:4byte -AcEKs__StateID_WakeUp = .bss:0x00000058; // type:object size:0x40 data:4byte -AcEKs__StateID_ReturnToWait = .bss:0x00000098; // type:object size:0x40 data:4byte -AcEKs__StateID_WaitReady = .bss:0x000000D8; // type:object size:0x80 data:4byte -AcEKs__StateID_Chase = .bss:0x00000158; // type:object size:0x40 data:4byte -AcEKs__StateID_ChaseAttack = .bss:0x00000198; // type:object size:0x40 data:4byte -AcEKs__StateID_Fighting = .bss:0x000001D8; // type:object size:0x40 data:4byte -AcEKs__StateID_AttackReady = .bss:0x00000218; // type:object size:0x40 data:4byte -AcEKs__StateID_Attack = .bss:0x00000258; // type:object size:0x40 data:4byte -AcEKs__StateID_Damage = .bss:0x00000298; // type:object size:0x40 data:4byte -AcEKs__StateID_Stun = .bss:0x000002D8; // type:object size:0xB0 data:4byte +StateID_Wait__8dAcEKs_c = .bss:0x00000018; // type:object size:0x30 data:4byte +StateID_WakeUp__8dAcEKs_c = .bss:0x00000058; // type:object size:0x30 data:4byte +StateID_ReturnToWait__8dAcEKs_c = .bss:0x00000098; // type:object size:0x30 data:4byte +StateID_WaitReady__8dAcEKs_c = .bss:0x000000D8; // type:object size:0x30 data:4byte +StateID_Move__8dAcEKs_c = .bss:0x00000118; // type:object size:0x30 data:4byte +StateID_Chase__8dAcEKs_c = .bss:0x00000158; // type:object size:0x30 data:4byte +StateID_ChaseAttack__8dAcEKs_c = .bss:0x00000198; // type:object size:0x30 data:4byte +StateID_Fighting__8dAcEKs_c = .bss:0x000001D8; // type:object size:0x30 data:4byte +StateID_AttackReady__8dAcEKs_c = .bss:0x00000218; // type:object size:0x30 data:4byte +StateID_Attack__8dAcEKs_c = .bss:0x00000258; // type:object size:0x30 data:4byte +StateID_Damage__8dAcEKs_c = .bss:0x00000298; // type:object size:0x30 data:4byte +StateID_Stun__8dAcEKs_c = .bss:0x000002D8; // type:object size:0x30 data:4byte +StateID_WindBlow__8dAcEKs_c = .bss:0x00000318; // type:object size:0x30 data:4byte +StateID_PathMove__8dAcEKs_c = .bss:0x00000358; // type:object size:0x30 data:4byte lbl_155_bss_388 = .bss:0x00000388; // type:object size:0x1 data:byte lbl_155_bss_389 = .bss:0x00000389; // type:object size:0x1 data:byte lbl_155_bss_38A = .bss:0x0000038A; // type:object size:0x1 data:byte diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index bad4ce91..64adb455 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -1159,8 +1159,8 @@ fn_8002F710 = .text:0x8002F710; // type:function size:0x110 checkRefArrayAtIndex__17daPlayerActBase_cFv = .text:0x8002F820; // type:function size:0x8 sizeOfActorRefs_16__17daPlayerActBase_cFv = .text:0x8002F830; // type:function size:0x8 fn_8002F840 = .text:0x8002F840; // type:function size:0x8 -fn_8002F850 = .text:0x8002F850; // type:function size:0x70 -fn_8002F8C0 = .text:0x8002F8C0; // type:function size:0x70 +playDeathEffect0__11dAcEnBase_cFRC7mVec3_cPC7mVec3_cb = .text:0x8002F850; // type:function size:0x70 +playDeathEffect1__11dAcEnBase_cFRC7mVec3_cPC7mVec3_cb = .text:0x8002F8C0; // type:function size:0x70 fn_8002F930 = .text:0x8002F930; // type:function size:0xB4 ActorEnemyBase__setEndat = .text:0x8002F9F0; // type:function size:0x88 fn_8002FA80 = .text:0x8002FA80; // type:function size:0xB4 @@ -1180,9 +1180,9 @@ fn_80030390 = .text:0x80030390; // type:function size:0x64 fn_80030400__11dAcEnBase_cFRQ23m3d5mdl_cUcbUc = .text:0x80030400; // type:function size:0x168 fn_80030570 = .text:0x80030570; // type:function size:0x144 fn_800306C0 = .text:0x800306C0; // type:function size:0x10 -fn_800306D0 = .text:0x800306D0; // type:function size:0x24 -fn_80030700 = .text:0x80030700; // type:function size:0x24 -attackPlayerOrScrapper__11dAcEnBase_cFf = .text:0x80030730; // type:function size:0xB0 +fn_800306D0__11dAcEnBase_cFv = .text:0x800306D0; // type:function size:0x24 +fn_80030700__11dAcEnBase_cFv = .text:0x80030700; // type:function size:0x24 +targetPlayerOrScrapper__11dAcEnBase_cFf = .text:0x80030730; // type:function size:0xB0 fn_800307E0 = .text:0x800307E0; // type:function size:0x34 fn_80030820 = .text:0x80030820; // type:function size:0x14 fn_80030840 = .text:0x80030840; // type:function size:0x13C @@ -10102,7 +10102,7 @@ fn_8018B1D0 = .text:0x8018B1D0; // type:function size:0x60 fn_8018B230 = .text:0x8018B230; // type:function size:0x74 ActorLink__handleHotPumpkinSoup = .text:0x8018B2B0; // type:function size:0xE4 fn_8018B3A0 = .text:0x8018B3A0; // type:function size:0x80 -shouldDropItemForChance = .text:0x8018B420; // type:function size:0x84 +tryDropItem__Ff = .text:0x8018B420; // type:function size:0x84 getMaxBeaconCount__Fv = .text:0x8018B4B0; // type:function size:0x44 doesStageForbidBeaconPlacement__Fv = .text:0x8018B500; // type:function size:0x40 getBeaconPosition__FUl = .text:0x8018B540; // type:function size:0x60 diff --git a/include/d/a/e/d_a_e_ks.h b/include/d/a/e/d_a_e_ks.h index 21f29941..05e94685 100644 --- a/include/d/a/e/d_a_e_ks.h +++ b/include/d/a/e/d_a_e_ks.h @@ -43,25 +43,46 @@ public: STATE_FUNC_DECLARE(dAcEKs_c, WindBlow); STATE_FUNC_DECLARE(dAcEKs_c, PathMove); + STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEKs_c); + STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEKs_c); + public: void linkKiesuTag(dTgKiesuTag_c *pTgKs); void setStartingState(); void setIdleState(); + void fn_155_A60(); + f32 getLineCrossYRange(const mVec3_c &pos, f32 range); + void kill(bool dropItem); + void chaseTargetY(f32, f32); + void playBlinkAnm(); + void soundSqueak(); + void soundStun(); + void fn_155_1430(); + + void fn_155_1470(); + + // Move impl? + void fn_155_1C80(); + /* 0 -> blink_1, 1 -> blink_2, 2 -> blink_3*/ void setBlink(u8 blink); void setBlinkChecked(u8 blink); + + void fn_155_2270(); + /* p1 = 0 -> just LineCross return check, 1 -> increment field_0xDCB till 10 then return check*/ bool fn_155_29D0(s32 p1); + bool fn_155_2B80(bool b, s32 p1); bool fn_155_2D60(bool b, s32 p1); bool fn_155_2EA0(); bool isOutsideRange(); bool isNotWaitingNorDamage(); bool isTargeted(); - bool ChkWall(); - void ChkGnd(); - void ChkRoof(); + bool checkWallCross(); + void adjustTargetGnd(); + void adjustTargetRoof(); bool ChkHit(); void fn_155_3460(); void fn_155_3480(); @@ -79,9 +100,17 @@ public: void setPitchYawToPoint(const mVec3_c &pnt); void fn_155_3BD0(const mVec3_c &); void fn_155_3BE0(const mVec3_c &); + void clampRotationX(); + bool checkPathPntParam(u32 param); + void fn_155_3E30(); void fn_155_3E90(); void fn_155_3EC0(); + /* Some Timestone Check */ + bool fn_155_3EF0(); + + void fn_155_3F50(); + private: /* 0x378 */ dAcRef_c mTgRef; /* 0x384 */ nw4r::g3d::ResFile mResFile; @@ -101,44 +130,112 @@ private: /* 0xAA8 */ u8 field_0xAB0; /* 0xAB1 */ u8 _0xAB1[0xB14 - 0xAB1]; /* 0xB14 */ mVec3_c mPnts[10]; - /* 0xB8C */ u8 _0xB8C[0xBB0 - 0xB8C]; - /* 0xBB0 */ mVec3_c field_0xBB0; + /* 0xB8C */ mVec3_c field_0xB8C; + /* 0xB98 */ u8 _0xB98[0xBB0 - 0xB98]; + /* 0xBB0 */ mVec3_c mTargetPos; /* 0xBBC */ mVec3_c field_0xBBC; - /* 0xBC8 */ u8 _0xBC8[0xBF8 - 0xBC8]; + /* 0xBC8 */ mVec3_c field_0xBC8; + /* 0xBD4 */ mVec3_c field_0xBD4; + /* 0xBE0 */ mVec3_c field_0xBE0; + /* 0xBEC */ mVec3_c field_0xBEC; /* 0xBF8 */ mVec3_c field_0xBF8; - /* 0xC04 */ u8 _0xC04[0xC28 - 0xC04]; + /* 0xC04 */ mVec3_c field_0xC04; + /* 0xC10 */ mVec3_c field_0xC10; + /* 0xC1C */ mVec3_c field_0xC1C; /* 0xC28 */ mVec3_c field_0xC28; /* 0xC34 */ mAng mPitch_0xC34; /* 0xC36 */ mAng mYaw_0xC36; /* 0xC38 */ u8 _0xC38[0xC3C - 0xC38]; /* 0xC3C */ f32 field_0xC3C; /* 0xC40 */ f32 field_0xC40; - /* 0xC44 */ u8 _0xC44[0xD1C - 0xC44]; + /* 0xC44 */ f32 field_0xC44; + /* 0xC48 */ f32 field_0xC48; + /* 0xC4C */ u8 _0xC4C[0xC70 - 0xC4C]; + /* 0xC70 */ f32 field_0xC70; + /* 0xC74 */ u8 _0xC74[0xD00 - 0xC74]; + /* 0xD00 */ f32 field_0xD00; + /* 0xD04 */ f32 field_0xD04; + /* 0xD08 */ f32 field_0xD08; + /* 0xD0C */ f32 field_0xD0C; + /* 0xD10 */ f32 field_0xD10; + /* 0xD14 */ f32 field_0xD14; + /* 0xD18 */ f32 field_0xD18; /* 0xD1C */ f32 field_0xD1C; /* 0xD20 */ f32 field_0xD20; /* 0xD24 */ u8 _0xD24[0xD32 - 0xD24]; /* 0xD32 */ s16 mTimer; - /* 0xD34 */ u8 _0xD34[0xD60 - 0xD34]; + /* 0xD34 */ u8 _0xD34[0xD52 - 0xD34]; + /* 0xD52 */ s16 field_0xD52; + /* 0xD54 */ s16 field_0xD54; + /* 0xD56 */ u8 _0xD56[0xD5E - 0xD56]; + /* 0xD5E */ s16 field_0xD5E; /* 0xD60 */ s16 field_0xD60; - /* 0xD62 */ u8 _0xD62[0xDA6 - 0xD62]; + /* 0xD62 */ u8 _0xD62[0xD6A - 0xD62]; + /* 0xD6A */ s16 field_0xD6A; + /* 0xD6C */ s16 field_0xD6C; + /* 0xD6E */ s16 field_0xD6E; + /* 0xD70 */ s16 field_0xD70; + /* 0xD72 */ s16 field_0xD72; + /* 0xD74 */ s16 field_0xD74; + /* 0xD76 */ s16 field_0xD76; + /* 0xD78 */ s16 mBlinkTimer; + /* 0xD7A */ s16 field_0xD7A; + /* 0xD7C */ s16 field_0xD7C; + /* 0xD7E */ s16 mSqueakSoundTimer; + /* 0xD80 */ s16 mStunSoundTimer; + /* 0xD82 */ s16 field_0xD82; + /* 0xD84 */ s16 field_0xD84; + /* 0xD86 */ s16 field_0xD86; + /* 0xD88 */ s16 field_0xD88; + /* 0xD8A */ s16 field_0xD8A; + /* 0xD8C */ s16 field_0xD8C; + /* 0xD8E */ s16 field_0xD8E; + /* 0xD90 */ s16 field_0xD90; + /* 0xD92 */ s16 field_0xD92; + /* 0xD94 */ s16 field_0xD94; + /* 0xD96 */ s16 field_0xD96; + /* 0xD98 */ s16 field_0xD98; + /* 0xD9A */ s16 field_0xD9A; + /* 0xD9C */ s16 field_0xD9C; + /* 0xD9E */ s16 field_0xD9E; + /* 0xDA0 */ s16 field_0xDA0; + /* 0xDA2 */ u8 _0xDA2[0xDA5 - 0xDA2]; + /* 0xDA5 */ u8 field_0xDA5; /* 0xDA6 */ u8 field_0xDA6; /* 0xDA7 */ u8 field_0xDA7; /* 0xDA8 */ u8 field_0xDA8; /* 0xDA9 */ u8 field_0xDA9; - /* 0xDAA */ u8 _0xDAA[0xDB1 - 0xDAA]; + /* 0xDAA */ u8 _0xDAA[0xDAF - 0xDAA]; + /* 0xDAF */ u8 field_0xDAF; + /* 0xDB0 */ u8 field_0xDB0; /* 0xDB1 */ u8 field_0xDB1; /* 0xDB2 */ u8 field_0xDB2; - /* 0xDB3 */ u8 _0xDB3[0xDBB - 0xDB3]; + /* 0xDB3 */ u8 field_0xDB3; + /* 0xDB4 */ u8 field_0xDB4; + /* 0xDB5 */ u8 field_0xDB5; + /* 0xDB6 */ u8 field_0xDB6; + /* 0xDB7 */ u8 field_0xDB7; + /* 0xDB8 */ u8 field_0xDB8; + /* 0xDB9 */ u8 field_0xDB9; + /* 0xDBA */ u8 field_0xDBA; /* 0xDBB */ u8 field_0xDBB; /* 0xDBC */ u8 mType; - /* 0xDBD */ u8 _0xDBD[0xDC0 - 0xDBD]; - /* 0xDC2 */ u8 mCurrentAnmTexPat; // blink + /* 0xDBD */ u8 field_0xDBD; + /* 0xDBE */ u8 field_0xDBE; + /* 0xDBF */ u8 field_0xDBF; + /* 0xDC0 */ u8 mCurrentAnmTexPat; // blink /* 0xDC1 */ u8 field_0xDC1; /* 0xDC2 */ u8 mCurrentState; /* 0xDC3 */ u8 mNextState; - /* 0xDC4 */ u8 _0xDC4[0xDC7 - 0xDC4]; + /* 0xDC4 */ u8 field_0xDC4; + /* 0xDC5 */ u8 field_0xDC5; + /* 0xDC6 */ u8 field_0xDC6; /* 0xDC7 */ u8 mStartingState; - /* 0xDC8 */ u8 _0xDC8[0xDCF - 0xDB8]; + /* 0xDC8 */ u8 field_0xDC8; + /* 0xDC9 */ u8 field_0xDC9; + /* 0xDCA */ u8 field_0xDCA; + /* 0xDCB */ u8 field_0xDCB; + /* 0xDCC */ u8 _0xDCC[0xDCF - 0xDCC]; /* 0xDCF */ u8 field_0xDCF; /* 0xDD0 */ u8 _0xDD0[0xDD4 - 0xDD0]; /* 0xDD4 */ mVec3_c mHomePos; diff --git a/include/d/a/e/d_a_en_base.h b/include/d/a/e/d_a_en_base.h index d94633c6..3dc5d670 100644 --- a/include/d/a/e/d_a_en_base.h +++ b/include/d/a/e/d_a_en_base.h @@ -68,6 +68,9 @@ public: dAcBomb_c *getBombWithinRadius(f32 radius); // fn_8002f700 + void playDeathEffect0(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill); + void playDeathEffect1(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill); + // Deals with dealing damage to Enemy // Returns a value 0-13 (similar to mStts rank?) int fn_8002FDE0(cCcD_Obj &mCc, u16 *pTgOut); @@ -75,9 +78,9 @@ public: // Returns 0-3 based on collision int fn_800301b0(const mVec3_c &pos, mAng ang, bool, f32); void fn_80030400(m3d::mdl_c &, u8, bool, u8); - void fn_800306d0(); + void fn_800306D0(); void fn_80030700(); - dAcObjBase_c *attackPlayerOrScrapper(f32 biasToScrapper); + dAcObjBase_c *targetPlayerOrScrapper(f32 biasToScrapper); static void fn_80030980(m3d::mdl_c &, s32, bool markDirty); void fn_80030c20(u32 flags, f32, f32, f32, f32); diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h index b2ae203d..fab81e6d 100644 --- a/include/d/a/obj/d_a_obj_base.h +++ b/include/d/a/obj/d_a_obj_base.h @@ -101,6 +101,9 @@ public: mVec3_c &getStartingPosition() { return mStartingPos; } + const mVec3_c &getStartingPos() const { + return mStartingPos; + } void setStartingPosition(const mVec3_c &v) { mStartingPos = v; } diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index 7d8c49e9..362d88b1 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -813,7 +813,7 @@ public: bool ChkTgBit23() const; bool ChkTgBit24() const; bool ChkTgBit25() const; - u16 GetTgSoundID() const; + s32 GetTgSoundID() const; s16 GetTg_0x6A() const; bool ChkTgBit8() const; u8 GetTg_0x4A() const; diff --git a/include/d/d_pouch.h b/include/d/d_pouch.h index 3b3ae555..1c10c91f 100644 --- a/include/d/d_pouch.h +++ b/include/d/d_pouch.h @@ -25,6 +25,8 @@ bool swapStockItems(s32 slot1, s32 slot2); void sortStock(); +bool tryDropItem(f32 chance); + #define ITEM_CHECK_SLOT_NONE 60 u16 itemCheckFindItemSlot(ITEM_ID item); diff --git a/include/d/t/d_t_ks.h b/include/d/t/d_t_ks.h index e0b066c0..bfa0afb9 100644 --- a/include/d/t/d_t_ks.h +++ b/include/d/t/d_t_ks.h @@ -1,9 +1,16 @@ #ifndef D_T_KS_H #define D_T_KS_H +#include "d/a/d_a_base.h" #include "d/t/d_tg.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" #include "s/s_State.hpp" +#include "toBeSorted/d_path.h" +#include "toBeSorted/time_area_mgr.h" +class dAcEKs_c; class dTgKiesuTag_c : public dTg_c { public: dTgKiesuTag_c() : mStateMgr(*this) {} @@ -17,8 +24,77 @@ public: STATE_FUNC_DECLARE(dTgKiesuTag_c, ControlPathMove); STATE_FUNC_DECLARE(dTgKiesuTag_c, DoNothing); + /* fn_154_8B0 */ + mVec3_c &getSpawnKsPosition(); + + void incrementField_0x456() { + field_0x456++; + } + private: - /* 0x??? */ STATE_MGR_DECLARE(dTgKiesuTag_c); + /* 0x0FC */ STATE_MGR_DECLARE(dTgKiesuTag_c); + /* 0x138 */ dAcRef_c mKsRefs[16]; + /* 0x1F8 */ mMtx_c mAreaMtx; + /* 0x228 */ ActorOnRail_Ext mRail; + /* 0x25C */ TimeAreaStruct mTimeArea; + /* 0x268 */ mMtx_c field_0x268; + + /* 0x31C */ mVec3_c field_0x31C; + /* 0x328 */ mVec3_c field_0x328; + /* 0x334 */ mVec3_c field_0x334; + /* 0x340 */ mVec3_c field_0x340; + /* 0x34C */ mVec3_c field_0x34C; + + /* 0x37C */ mVec3_c mTargetPosition; + /* 0x388 */ mVec3_c mSpawnKsPosition; + + /* 0x3A0 */ mAng3_c mSpawnKsAngle; + /* 0x3A8 */ mAng3_c field_0x3A8; + /* 0x3AC */ mAng field_0x3AC; // pitch + /* 0x3AE */ mAng field_0x3AE; // yaw + + /* 0x3B4 */ f32 field_0x3B4; + /* 0x3B8 */ f32 field_0x3B8; // Y pos offset + /* 0x3BC */ f32 field_0x3BC; // X/Z scale + /* 0x3C0 */ f32 field_0x3C0; // Y scale + + /* 0x3D8 */ f32 field_0x3D8; // Y scale + /* 0x3DC */ f32 field_0x3DC; // X/Z scale + + /* 0x3EC */ mVec3_c field_0x3EC; + + /* 0x44C */ s16 field_0x448; + + // Related to Control? + /* 0x44C */ s16 field_0x44C; + /* 0x44E */ s16 field_0x44E; + /* 0x450 */ s16 field_0x450; + + // Related to ControlFighting? + /* 0x452 */ s16 field_0x452; + /* 0x454 */ s16 field_0x454; + /* 0x456 */ s16 field_0x456; + /* 0x458 */ s16 field_0x458; + /* 0x45A */ s16 field_0x45A; + /* 0x45C */ s16 field_0x45C; + /* 0x45E */ s16 field_0x45E; + + /* 0x460 */ s16 field_0x460; + /* 0x462 */ s16 mMaxKsToLink; + + /* 0x468 */ s16 field_0x468; + + /* 0x46C */ s16 mNumKsAlive; + /* 0x46E */ s16 field435_0x46e; + + /* 0x44A */ s16 mNumKsControl; + + /* 0x474 */ bool field_0x474; + /* 0x47E */ bool mbAllKsActive; + + /* 0x48A */ u8 field_0x48A; // Related to getting spawnPos/ Type? + + /* 0x48E */ u8 mNumKsActive; }; #endif diff --git a/src/REL/d/a/e/d_a_e_ks.cpp b/src/REL/d/a/e/d_a_e_ks.cpp index fd0ae575..c68673ad 100644 --- a/src/REL/d/a/e/d_a_e_ks.cpp +++ b/src/REL/d/a/e/d_a_e_ks.cpp @@ -4,20 +4,101 @@ #include "c/c_math.h" #include "common.h" #include "d/a/d_a_base.h" +#include "d/a/d_a_itembase.h" #include "d/a/d_a_player.h" #include "d/a/obj/d_a_obj_base.h" #include "d/col/bg/d_bg_s.h" #include "d/col/bg/d_bg_s_gnd_chk.h" #include "d/col/bg/d_bg_s_lin_chk.h" #include "d/col/bg/d_bg_s_roof_chk.h" +#include "d/col/bg/d_bg_s_wtr_chk.h" +#include "d/col/c/c_cc_d.h" +#include "d/d_light_env.h" +#include "d/d_pouch.h" +#include "d/snd/d_snd_wzsound.h" #include "d/t/d_t_ks.h" #include "f/f_profile_name.h" #include "m/m3d/m_fanm.h" +#include "m/m_angle.h" #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resanmtexpat.h" +#include "s/s_Math.h" #include "toBeSorted/attention.h" +#include "toBeSorted/d_emitter.h" +#include "toBeSorted/event_manager.h" #include "toBeSorted/time_area_mgr.h" +struct dAcEKs_HIO_c { + f32 _0x00; // 400.0 + s16 _0x04; // 0h + s16 _0x06; // FFh + s16 _0x08; // A0h + s16 _0x0A; // 50h + s16 _0x0C; // FFh + s16 _0x0E; // 64h + s16 _0x10; // FFh + s16 _0x12; // FFh + s16 _0x14; // FFh + f32 _0x18; // 1.2 + f32 _0x1C; // 1.5 + f32 _0x20; // 1.0 + f32 _0x24; // 1.0 + f32 _0x28; // -35.0 + f32 _0x2C; // 30.0 + f32 _0x30; // 1.0 + s16 _0x34; // 71Ch + s16 _0x36; // 0h + f32 _0x38; // 30.0 + f32 _0x3C; // 15.0 + f32 _0x40; // 0.0 + f32 _0x44; // 100.0 + f32 _0x48; // 150.0 + f32 _0x4C; // 250.0 + f32 _0x50; // 150.0 + f32 _0x54; // 120.0 + f32 _0x58; // 3.5 + f32 _0x5C; // 3.5 + f32 _0x60; // 3.5 + f32 _0x64; // 10.0 + f32 _0x68; // 20.0 + f32 _0x6C; // 35.0 + f32 _0x70; // 7.0 + f32 _0x74; // 200.0 + f32 _0x78; // 10.0 + f32 _0x7C; // 0.0 + f32 _0x80; // 0.5 + s16 _0x84; // 1555h + s16 _0x86; // 0h + f32 _0x88; // 500.0 + f32 _0x8C; // 150.0 + f32 _0x90; // 150.0 + f32 _0x94; // 3000.0 + f32 _0x98; // 120.0 + f32 _0x9C; // 1.0 + s16 _0xA0; // Fh + s16 _0xA2; // AABh + f32 _0xA4; // 1.0 + s16 _0xA8; // 1Eh + s16 _0xAA; // AABh + f32 _0xAC; // 300.0 + f32 _0xB0; // 3.0 + s16 _0xB4; // 3h + s16 _0xB6; // 1h + f32 _0xB8; // 0.0099999998 + f32 _0xBC; // 100.0 + s16 _0xC0; // AABh + s16 _0xC2; // 0h + f32 _0xC4; // -0.5 + + static const dAcEKs_HIO_c sInstance; +}; +const dAcEKs_HIO_c dAcEKs_HIO_c::sInstance = { + 400.0, 0, 0xFF, 0xA0, 0x50, 0xFF, 0x64, 0xFF, 0xFF, 0xFF, 1.2, 1.5, 1.0, 1.0, -35.0, + 30.0, 1.0, 0x71C, 0, 30.0, 15.0, 0.0, 100.0, 150.0, 250.0, 150.0, 120.0, 3.5, 3.5, 3.5, + 10.0, 20.0, 35.0, 7.0, 200.0, 10.0, 0.0, 0.5, 0x1555, 0x0, 500.0, 150.0, 150.0, 3000.0, 120.0, + 1.0, 0xF, 0xAAB, 1.0, 0x1E, 0xAAB, 300.0, 3.0, 0x3, 0x1, 0.0099999998, 100.0, 0xAAB, 0, -0.5, +}; + SPECIAL_ACTOR_PROFILE(E_KS, dAcEKs_c, fProfile::E_KS, 0xFE, 0, 4099); STATE_DEFINE(dAcEKs_c, Wait); @@ -35,6 +116,9 @@ STATE_DEFINE(dAcEKs_c, Stun); STATE_DEFINE(dAcEKs_c, WindBlow); STATE_DEFINE(dAcEKs_c, PathMove); +bool dAcEKs_c::lbl_155_bss_388; +bool dAcEKs_c::lbl_155_bss_389; + bool dAcEKs_c::restorePosRotFromCopy() { if (field_0xDCF == 0) { if (dTimeAreaMgr_c::GetInstance()->fn_800B9B60(mRoomID, mPosition) != 0) { @@ -42,7 +126,7 @@ bool dAcEKs_c::restorePosRotFromCopy() { mSph.ClrCoSet(); mSph.ClrTgSet(); mSph.ClrAtSet(); - fn_800306d0(); + fn_800306D0(); if (mType == 1 || mType == 2) { field_0xD20 = 0.f; field_0xDE4 = 0.f; @@ -69,7 +153,7 @@ void dAcEKs_c::setStartingState() { mTimer = cM::rndInt(1000); switch (mStartingState) { case 0: { - mStateMgr.changeState(StateID_Move); + changeState(StateID_Move); mCurrentState = mStartingState; mAcch.ClrRoofNone(); mAcch.SetField_0xD4(55.f); @@ -77,7 +161,7 @@ void dAcEKs_c::setStartingState() { mAcchCir.SetWall(20.f, 60.f); } break; case 1: { - mStateMgr.changeState(StateID_Wait); + changeState(StateID_Wait); mCurrentState = mStartingState; if ((s32)getFromParams(30, 0x3) == 1) { field_0xDB1 = 1; @@ -94,10 +178,10 @@ void dAcEKs_c::setStartingState() { mAcch.SetField_0xD4(55.f); mAcch.SetGroundUpY(30.f); mAcchCir.SetWall(20.f, 60.f); - mStateMgr.changeState(StateID_PathMove); + changeState(StateID_PathMove); } break; default: { - mStateMgr.changeState(StateID_Move); + changeState(StateID_Move); mCurrentState = mStartingState; } break; } @@ -108,19 +192,19 @@ void dAcEKs_c::setStartingState() { void dAcEKs_c::setIdleState() { switch (mStartingState) { case 0: { - mStateMgr.changeState(StateID_Move); + changeState(StateID_Move); mCurrentState = 0; } break; case 1: { - mStateMgr.changeState(StateID_ReturnToWait); + changeState(StateID_ReturnToWait); mCurrentState = 5; } break; case 2: { - mStateMgr.changeState(StateID_PathMove); + changeState(StateID_PathMove); mCurrentState = 2; } break; default: { - mStateMgr.changeState(StateID_Move); + changeState(StateID_Move); mCurrentState = 0; } break; } @@ -140,17 +224,737 @@ f32 dAcEKs_c::getLineCrossYRange(const mVec3_c &pos, f32 range) { if (dBgS::GetInstance()->LineCross(&linChk)) { return linChk.GetLinEnd().y; } else { - return mStartingPos.y; + return getStartingPos().y; } } -// idk. +void dAcEKs_c::fn_155_A60() { + if (sLib::calcTimer(&field_0xDBD)) { + return; + } + + s32 s = fn_8002FDE0(mSph, nullptr); + if (s == 6 || s == 7) { + return; + } + switch (s) { + case 12: + case 13: + if (mSph.ChkTgHit() && mSph.ChkTgAtHitType(AT_TYPE_SWORD)) { + return; + } + default: + field_0xDBD = 5; + dJEffManager_c::spawnHitMarkEffect(0, mSph, nullptr, true); + + if (!mSph.ChkTgHit()) { + return; + } + + field_0xD96 = mSph.GetTgAtHitDir().atan2sX_Z(); + field_0xD98 = mSph.GetTgAtHitDir().atan2sY_XZ(); + field_0xD98 = -field_0xD98; + + if (mSph.ChkTgAtHitType(AT_TYPE_SWORD)) { + s16 a = 0; + s16 x = -cLib::targetAngleX(mPosition, dAcPy_c::GetLink()->mPosition); + + if (mSph.GetTgSoundID() == 0x01) { + x += 0x2000; + } else if (mSph.GetTgSoundID() == 0x80) { + a = 0x1000; + x += 0x1000; + } else if (mSph.GetTgSoundID() == 0x40) { + a = 0x2000; + } else if (mSph.GetTgSoundID() == 0x20) { + a = 0x1000; + x += -0x1000; + } else if (mSph.GetTgSoundID() == 0x10) { + x += -0x2000; + } else if (mSph.GetTgSoundID() == 0x08) { + a = -0x1000; + x += -0x1000; + } else if (mSph.GetTgSoundID() == 0x04) { + a = -0x2000; + } else if (mSph.GetTgSoundID() == 0x02) { + a = -0x1000; + x += 0x1000; + } else if (mSph.GetTgSoundID() == 0x100) { + x += -0x4000; + } + + field_0xD92 = x * 0.5f; + field_0xD94 = a * 0.5f; + + if (mHealth == 0) { + if (!isState(StateID_Wait)) { + mVelocity.y += 30.f; + } + changeState(StateID_Damage); + if (field_0xD86 > 0) { + field_0xDA9 = 1; + } + mSpeed = 65.f; + mAcchCir.SetWall(20.f, 60.f); + mAcceleration = -6.f; + field_0xD5E = 5; + mAcch.SetGroundUpY(0.f); + + unsetActorProperty(AC_PROP_0x1); + mSph.ClrTgSet(); + } else { + if (!isState(StateID_Wait)) { + mVelocity.y += 30.f; + } + changeState(StateID_Damage); + if (field_0xD86 > 0) { + field_0xDA9 = 1; + } + mRotation.x += field_0xD98 * 0.5f; + mRotation.y += field_0xD96 * 0.5f; + mSpeed = 30.f; + field_0xDC6 = 8; + field_0xDBF = 8; + } + } else { + if (mSph.ChkTgAtHitType(AT_TYPE_WHIP)) { + field_0xDB6 = 1; + } + mHealth = 0; + if (isState(StateID_Wait)) { + changeState(StateID_Damage); + if (field_0xD86 > 0) { + field_0xDA9 = 1; + } + if (mHealth == 0) { + mAcceleration = -4.f; + field_0xD92 = field_0xD98 * 0.2f; + field_0xD94 = field_0xD96 * 0.1f; + } + } else { + changeState(StateID_Damage); + + if (field_0xD86 > 0) { + field_0xDA9 = 1; + } + if (mHealth == 0) { + mSpeed = 65.f; + mAcchCir.SetWall(20, 60); + mAcceleration = -6.f; + field_0xD5E = 5; + mAcch.SetGroundUpY(0); + unsetActorProperty(AC_PROP_0x1); + mSph.ClrTgSet(); + } + field_0xD92 = field_0xD98 * 0.2f; + field_0xD94 = field_0xD96 * 0.1f; + mVelocity.y += 30.f; + } + } + break; + case 0: { + return; + } + } +} + +// TODO (I dont want to mess with Item stuff with the other PR open) +extern "C" void spawnDrop(ITEM_ID, s32 roomId, const mVec3_c &pos, const mAng3_c &rot); + +void dAcEKs_c::kill(bool dropItem) { + dLightEnv_c::GetPInstance()->setBPM8_Type4(&mPosition); + mTgRef.unlink(); + + if (field_0xDB6 != 0) { + killWithFlagNoItemDrop(); + } else if (dropItem == true) { + if (mType == 3) { + if (tryDropItem(0.05f)) { + spawnDrop(ITEM_EVIL_CRYSTAL, mRoomID, mPosition, mAngle); + } + } else { + if (tryDropItem(0.05f)) { + spawnDrop(ITEM_MONSTER_CLAW, mRoomID, mPosition, mAngle); + } + } + } else { + killWithFlagNoItemDrop(); + } + + static mVec3_c deathEffectScale(0.8, 0.8, 0.8); + playDeathEffect0(mPosition, &deathEffectScale, false); +} + +void dAcEKs_c::chaseTargetY(f32 ratio, f32 maxStepSize) { + sLib::addCalcScaledDiff(&mPosition.y, mTargetPos.y, ratio, maxStepSize); + sLib::addCalcAngle(mAngle.y.ref(), mYaw_0xC36, 10, 0x38E); +} + +void dAcEKs_c::playBlinkAnm() { + mAnmTexPat.play(); + if (mAnmTexPat.isStop(0)) { + if (mCurrentAnmTexPat == 2) { + setBlink(0); + } + + mBlinkTimer--; + if (mBlinkTimer <= 0) { + mAnmTexPat.setFrame(0, 0); + mBlinkTimer = cM::rndInt(75) + 15; + } + } +} + +void dAcEKs_c::soundSqueak() { + if (mSqueakSoundTimer > 0) { + mSqueakSoundTimer--; + } else { + startSound(SE_EKs_V_NAKU); + mSqueakSoundTimer = cM::rndInt(20) + 20; + } +} + +void dAcEKs_c::soundStun() { + if (mStunSoundTimer > 0) { + mStunSoundTimer--; + } else { + startSound(SE_EKs_V_FAINT); + mStunSoundTimer = cM::rndInt(20) + 20; + } +} + +void dAcEKs_c::fn_155_1430() { + field_0xD6C = cM::rndInt(1) + 3; +} + +void dAcEKs_c::fn_155_1470() { + field_0xD52--; + + if (field_0xD54 > 0) { + field_0xD54--; + } + + if (field_0xD90 > 0) { + field_0xD90--; + } + + if (field_0xDA6 != 0) { + if (!transitionToNextState()) { + if (field_0xD54 <= 0) { + f32 yDiff = getStartingPos().y - mPosition.y; + if (yDiff >= 0.f && yDiff <= 150.f) { + field_0xDC1 = 0; + if (getStartingPos().squareDistanceToXZ(mPosition) < 6400.f) { + changeState(StateID_WaitReady); + mCurrentState = 1; + return; + } + } else { + if (yDiff < 0.f) { + field_0xDC1 = 2; + } + } + } + adjustTargetGnd(); + adjustTargetRoof(); + setPitchYawToPoint(mTargetPos); + chaseTargetY(0.1f, 3.0f); + sLib::addCalcAngle(mRotation.y.ref(), mYaw_0xC36, 10, 0x38E); + sLib::addCalcAngle(mRotation.x.ref(), mPitch_0xC34, 12, 0xB6); + clampRotationX(); + } + } else { + field_0xB8C.set(mPnts[field_0xD9E]); + f32 f = mPosition.squareDistance(field_0xB8C); + + if (checkWallCross()) { + field_0xDB7++; + if (field_0xDB7 < 5) { + field_0xDC1 = 0; + + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + + adjustTargetGnd(); + adjustTargetRoof(); + } else if (field_0xDB7 < 10) { + field_0xDC1 = 1; + + fn_155_3BD0(mVec3_c(cM::rndFX(300), cM::rndFX(300), -cM::rndF(300))); + + field_0xD52 = cM::rndInt(20) + 20; + + adjustTargetGnd(); + adjustTargetRoof(); + } + if (field_0xDB7 > 20) { + field_0xDB7 = 0; + } + } + + if (field_0xD54 <= 0) { + f32 yDiff = getStartingPos().y - mPosition.y; + if (yDiff >= 0.f && yDiff <= 150.f) { + field_0xDC1 = 0; + if (field_0xD9E == 0) { + if (getStartingPos().squareDistanceToXZ(mPosition) < 6400.f) { + changeState(StateID_WaitReady); + return; + } + } + } else { + if (yDiff < 0.f) { + field_0xDC1 = 2; + } + } + } + + if (!checkBeyondRadius(getStartingPos(), 490000) && field_0xD54 <= 0 && field_0xD90 <= 0) { + if (fn_155_2B80(true, 0)) { + changeState(StateID_Chase); + return; + } + field_0xD90 = 3; + } + + if (field_0xDC1 == 0) { + if (checkBeyondRadius(getStartingPos(), 490000) && field_0xD52 <= 0) { + field_0xDA0++; + if (field_0xDA0 > 5) { + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.y = field_0xB8C.y + cM::rndFX(30); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + field_0xDA0 = 0; + } else { + mTargetPos.x = field_0xB8C.x + cM::rndFX(30); + mTargetPos.y = field_0xB8C.y + cM::rndFX(30); + mTargetPos.z = field_0xB8C.z + cM::rndFX(30); + } + field_0xD52 = cM::rndInt(20) + 20; + adjustTargetGnd(); + adjustTargetRoof(); + } + } else if (field_0xDC1 == 2) { + field_0xDBA++; + if (field_0xDBA < 20) { + if (field_0xDBA % 2) { + field_0xDC1 = 0; + fn_155_3BD0(mVec3_c(cM::rndFX(800), cM::rndFX(400), cM::rndFX(800))); + adjustTargetGnd(); + adjustTargetRoof(); + } + } else if (field_0xDBA < 40) { + if (field_0xDBA % 2) { + fn_155_3BD0(mVec3_c(cM::rndFX(800), -cM::rndF(400), cM::rndFX(800))); + field_0xD52 = cM::rndInt(20) + 20; + adjustTargetGnd(); + adjustTargetRoof(); + } + } + + if (field_0xDBA > 60) { + field_0xDBA = 0; + field_0xDC1 = 0; + } + } + + if (field_0xD52 <= 0) { + if (field_0xD9E > 0) { + mVec3_c startPos = mPosition; + for (s32 i = 0; i <= field_0xD9E; ++i) { + if (!dBgS_ObjLinChk::LineCross(&startPos, &mPnts[i], nullptr)) { + field_0xD9E = i; + field_0xB8C.set(mPnts[field_0xD9E]); + } + } + } + + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.y = field_0xB8C.y + cM::rndFX(400); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + + field_0xDC1 = 0; + + field_0xD52 = cM::rndInt(20) + 20; + + adjustTargetGnd(); + adjustTargetRoof(); + } + + setPitchYawToPoint(mTargetPos); + chaseTargetY(0.1f, 3.0f); + sLib::addCalcAngle(mRotation.y.ref(), mYaw_0xC36, 10, 0x38E); + sLib::addCalcAngle(mRotation.x.ref(), mPitch_0xC34, 12, 0xB6); + clampRotationX(); + + if (field_0xD9E != 0 && f < 2500.f) { + field_0xD9E--; + } + } +} + +void dAcEKs_c::fn_155_1C80() { + if (field_0xDC8 != 0) { + field_0xDC8--; + field_0xDA5 = 1; + } else { + field_0xDA5 = 0; + } + + if (field_0xD52 > 0) { + field_0xD52--; + } + + if (field_0xD90 > 0) { + field_0xD90--; + } + + if (field_0xDA6 != 0) { + adjustTargetGnd(); + adjustTargetRoof(); + if (field_0xDC8 > 120 || !transitionToNextState()) { + setPitchYawToPoint(mTargetPos); + chaseTargetY(field_0xD00 + 0.1f, field_0xD04 + 3.0f); + sLib::addCalcAngle(mRotation.y.ref(), mYaw_0xC36, 10, 0x38E); + sLib::addCalcAngle(mRotation.x.ref(), mPitch_0xC34, 12, 0xB6); + clampRotationX(); + } + } else { + if (field_0xD54 > 0) { + field_0xD54--; + } + + field_0xB8C.set(mPnts[field_0xD9E]); + + f32 f = mPosition.squareDistance(field_0xB8C); + if (checkWallCross()) { + field_0xDB7++; + if (field_0xDB7 < 5) { + field_0xDC1 = 0; + + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.y = field_0xB8C.y + cM::rndF(400); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + + adjustTargetGnd(); + adjustTargetRoof(); + } else if (field_0xDB7 < 10) { + field_0xDC1 = 1; + + fn_155_3BD0(mVec3_c(cM::rndFX(200), cM::rndFX(200), cM::rndF(-300))); + + field_0xD52 = cM::rndInt(20) + 20; + + adjustTargetGnd(); + adjustTargetRoof(); + } else if (field_0xDB7 > 20) { + field_0xDB7 = 0; + } + } + + if (field_0xDC1 == 0) { + if (checkBeyondRadius(getStartingPos(), 490000)) { + if (field_0xD52 <= 0) { + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.y = field_0xB8C.y + cM::rndFX(400); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + field_0xD52 = cM::rndInt(20) + 20; + adjustTargetGnd(); + adjustTargetRoof(); + } + } else { + if (field_0xDC8 <= 120 && field_0xD54 <= 0 && field_0xD90 <= 0) { + if (fn_155_2B80(true, 0)) { + changeState(StateID_Chase); + return; + } + field_0xD90 = 3; + } + } + } + + if (field_0xD52 <= 0) { + if (field_0xD9E > 0) { + mVec3_c startPos = mPosition; + for (s32 i = 0; i <= field_0xD9E; ++i) { + if (!dBgS_ObjLinChk::LineCross(&startPos, &mPnts[i], nullptr)) { + field_0xD9E = i; + field_0xB8C.set(mPnts[field_0xD9E]); + } + } + } + + field_0xDC1 = 0; + + field_0xD52 = cM::rndInt(20) + 20; + + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.y = field_0xB8C.y + cM::rndFX(400); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + + field_0xD52 = cM::rndInt(20) + 20; // Set twice lol + + adjustTargetGnd(); + adjustTargetRoof(); + } + + if (mTargetPos.squareDistanceToXZ(mPosition) < 10000.f) { + mTargetPos.x = field_0xB8C.x + cM::rndFX(800); + mTargetPos.y = field_0xB8C.y + cM::rndFX(400); + mTargetPos.z = field_0xB8C.z + cM::rndFX(800); + + adjustTargetGnd(); + adjustTargetRoof(); + } + + setPitchYawToPoint(mTargetPos); + chaseTargetY(field_0xD00 + 0.1f, field_0xD04 + 3.0f); + sLib::addCalcAngle(mRotation.y.ref(), mYaw_0xC36, 10, 0x38E); + sLib::addCalcAngle(mRotation.x.ref(), mPitch_0xC34, 12, 0xB6); + clampRotationX(); + + if (field_0xD9E != 0 && f < 2500.f) { + field_0xD9E--; + } + } +} + +void dAcEKs_c::fn_155_2270() { + // NONMATCHING + if (field_0xD6A > 0) { + field_0xD6A--; + } + + dAcObjBase_c *pTarget = targetPlayerOrScrapper(0.f); + field_0xBF8.set(pTarget->mPosition + field_0xBEC); + + mAng y = cLib::targetAngleY(mPosition, mTargetPos); + y = y - mRotation.y; + if (field_0xDA6 != 0) { + if (transitionToNextState()) { + if (mType == 2) { + fn_155_3EC0(); + field_0xDA9 = 1; + } + } else { + if (field_0xDC5 != 0) { + field_0xDC5--; + } else { + if (field_0xDAF != 0 && dAcPy_c::GetLink()->checkCurrentAction(/* SHIELD_BASH*/ 73)) { + ; + mWorldMtx.multVecSR(mVec3_c(0, 0, -250), field_0xC1C); + mTargetPos += field_0xC1C; + field_0xDC5 = 20; + } + } + + if (field_0xD6A <= 0) { + if (lbl_155_bss_389) { + field_0xC70 = 0.f; + if (field_0xD6A <= 0) { + field_0xC70 = 0.f; + if (isTargeted()) { + field_0xD6C -= 2; + } else { + field_0xD6C -= 1; + } + + if (field_0xD6C <= 0) { + fn_155_3460(); + if (mTgRef.isLinked()) { + mTgRef.get()->incrementField_0x456(); + } + changeState(StateID_AttackReady); + mCurrentState = 9; + + if (mType == 2) { + fn_155_3EC0(); + field_0xDA9 = 1; + } + return; + } + } + } + fn_155_3BE0(field_0xBC8); + field_0xD6A = cM::rndInt(30) + 15; + adjustTargetGnd(); + adjustTargetRoof(); + } + + if (field_0xD9A > 0) { + field_0xC70 = 0.f; + } else { + sLib::addCalcScaledDiff(&field_0xC70, 35, 1, 3); + } + cLib::addCalcPos2(&mPosition, mTargetPos, 0.1, field_0xC70); + setPitchYawToPoint(field_0xBF8); + sLib::addCalcAngle(mAngle.y.ref(), mYaw_0xC36, 12, 0x1555); + sLib::addCalcAngle(mRotation.y.ref(), mYaw_0xC36, 12, 0x1555); + sLib::addCalcAngle(mRotation.x.ref(), 0, 12, 0x1555); + // ?? + if (u16(y + 0x3FFF) <= 0x7FFE) { + y = mRotation.x + 0xAAA; + } else { + y = mRotation.x - 0xAAA; + } + sLib::addCalcAngle(mRotation.x.ref(), y, 12, 0x1555); + } + } else { + if (field_0xD90 > 0) { + field_0xD90--; + } + if (field_0xDC5 != 0) { + field_0xDC5--; + } else { + if (dAcPy_c::GetLink()->checkCurrentAction(/* SHIELD_BASH*/ 73)) { + ; + mWorldMtx.multVecSR(mVec3_c(0, 0, -250), field_0xC1C); + mTargetPos += field_0xC1C; + field_0xDC5 = 20; + } + } + f32 r = field_0xC44 + 1600.f; + if (checkBeyondRadius(getStartingPos(), r * r)) { + setIdleState(); + } else { + if (field_0xD90 <= 0) { + if (!fn_155_2B80(true, 1)) { + setIdleState(); + return; + } + field_0xD90 = 3; + } + + if (dAcPy_c::GetLink()->checkFlags0x340(0x100)) { + if (isOutsideRange()) { + changeState(StateID_Chase); + return; + } + } else { + if (field_0xDB3 == 0 && dBgS_WtrChk::CheckPos(&mPosition, true, 100, -2000)) { + field_0xD10 = dBgS_WtrChk::GetWaterHeight(); + field_0xDB3 = 1; + } + } + if (field_0xD6A <= 0) { + field_0xC70 = 0.f; + if (lbl_155_bss_388) { + fn_155_1430(); + } else { + if (isTargeted()) { + field_0xD6C -= 2; + } else { + field_0xD6C -= 1; + } + if (field_0xD6C <= 0 && dAcPy_c::GetLink()->checkFlags0x340(0x100) && + field_0xBF8.squareDistanceToXZ(mPosition) < 160000.f) { + fn_155_3460(); + changeState(StateID_AttackReady); + return; + } + } + field_0xBC8.set(cM::rndFX(250), cM::rndF(150) + 100.f, cM::rndF(120) + 150.f); + fn_155_3BE0(field_0xBC8); + + if (!dAcPy_c::GetLink()->checkFlags0x340(0x100)) { + mTargetPos.y = field_0xD10 + 50.f; + } + field_0xD6A = cM::rndInt(30) + 15; + adjustTargetGnd(); + adjustTargetRoof(); + } + if (field_0xD9A > 0) { + field_0xC70 = 0.f; + } else { + sLib::addCalcScaledDiff(&field_0xC70, 20, 1, 1); + } + + cLib::addCalcPos2(&mPosition, mTargetPos, 0.1, field_0xC70); + setPitchYawToPoint(field_0xBF8); + sLib::addCalcAngle(mAngle.y.ref(), mYaw_0xC36, 12, 0x1555); + sLib::addCalcAngle(mRotation.y.ref(), mYaw_0xC36, 12, 0x1555); + sLib::addCalcAngle(mRotation.x.ref(), 0, 12, 0x1555); + + // ?? + if (u16(y + 0x3FFF) <= 0x7FFE) { + y = mRotation.x + 0xAAA; + } else { + y = mRotation.x - 0xAAA; + } + sLib::addCalcAngle(mRotation.x.ref(), y, 12, 0x1555); + } + } +} + +bool dAcEKs_c::fn_155_29D0(s32 p1) { + dAcObjBase_c *pTarget = targetPlayerOrScrapper(0.f); + field_0xBF8.set(pTarget->mPosition); + field_0xBF8.y += 100.f; + + dBgS_ObjLinChk linChk; + if (isState(StateID_Wait)) { + mVec3_c start = mPosition; + start.y -= 70.f; + linChk.Set(&start, &field_0xBF8, nullptr); + } else { + linChk.Set(&mPosition, &field_0xBF8, nullptr); + } + linChk.OnBackFlag(); + + switch (p1) { + case 0: { + if (dBgS::GetInstance()->LineCross(&linChk)) { + return true; + } + } break; + case 1: { + if (dBgS::GetInstance()->LineCross(&linChk)) { + field_0xDCB++; + } else { + field_0xDCB = 0; + } + if (field_0xDCB > 10) { + field_0xDCB = 0; + + return true; + } + } break; + } + return false; +} + +bool dAcEKs_c::fn_155_2B80(bool b, s32 p1) { + f32 f0 = field_0xDA5 != 0 ? field_0xC48 + 1200.f : 700.f; + dAcObjBase_c *pTarget = targetPlayerOrScrapper(0.f); + field_0xBF8.set(pTarget->mPosition); + if (field_0xBF8.squareDistanceToXZ(mPosition) < f0 * f0) { + f32 f2 = mPosition.y - field_0xBF8.y; + if (f2 >= -300.f && f2 <= 1500.f) { + if (dAcPy_c::GetLink()->isRecovering() || + /* cannot be EventManager::isInEventOtherThan0Or7 */ + (EventManager::isInEvent() && !EventManager::isInEvent0Or7())) { + return false; + } + if (fn_155_3EF0()) { + return false; + } + if (b) { + if (!fn_155_29D0(p1)) { + return true; + } + } else { + return true; + } + } + } + return false; +} bool dAcEKs_c::fn_155_2D60(bool b, s32 p1) { f32 f0 = field_0xC40 + 1500.f; f32 f1 = field_0xC3C + 700.f; - dAcObjBase_c *pObj = attackPlayerOrScrapper(0.f); - field_0xBF8.set(pObj->mPosition); + dAcObjBase_c *pTarget = targetPlayerOrScrapper(0.f); + field_0xBF8.set(pTarget->mPosition); if (field_0xBF8.squareDistanceToXZ(mPosition) < f1 * f1) { f32 f2 = field_0xBF8.y - mPosition.y; if (f2 <= 0.f && f2 > -f0) { @@ -169,9 +973,9 @@ bool dAcEKs_c::fn_155_2D60(bool b, s32 p1) { bool dAcEKs_c::fn_155_2EA0() { f32 f0 = field_0xC40 + 1500.f; f32 f1 = field_0xC3C + 700.f; - dAcObjBase_c *pObj = dAcPy_c::GetLink()->getBeetleInFlight(); - if (pObj) { - field_0xC28.set(pObj->mPosition); + dAcObjBase_c *pTarget = dAcPy_c::GetLink()->getBeetleInFlight(); + if (pTarget) { + field_0xC28.set(pTarget->mPosition); field_0xD1C = field_0xC28.squareDistanceToXZ(mPosition); if (field_0xD1C < f1 * f1) { f32 f2 = field_0xC28.y - mPosition.y; @@ -184,11 +988,11 @@ bool dAcEKs_c::fn_155_2EA0() { } bool dAcEKs_c::isOutsideRange() { - return attackPlayerOrScrapper(0.f)->mPosition.squareDistanceToXZ(mPosition) > 360000.f; + return targetPlayerOrScrapper(0.f)->mPosition.squareDistanceToXZ(mPosition) > 360000.f; } bool dAcEKs_c::isNotWaitingNorDamage() { - if (!(mStateMgr.isState(StateID_Wait) || mStateMgr.isState(StateID_Damage))) { + if (!(isState(StateID_Wait) || isState(StateID_Damage))) { return true; } return false; @@ -206,7 +1010,7 @@ bool dAcEKs_c::isTargeted() { return false; } -bool dAcEKs_c::ChkWall() { +bool dAcEKs_c::checkWallCross() { field_0xDBB++; if (field_0xDBB > 5) { field_0xDBB = 0; @@ -220,25 +1024,25 @@ bool dAcEKs_c::ChkWall() { return false; } -void dAcEKs_c::ChkGnd() { +void dAcEKs_c::adjustTargetGnd() { dBgS_ObjGndChk gndChk; - mVec3_c pos = field_0xBB0; + mVec3_c pos = mTargetPos; pos.y += 150.f; gndChk.SetPos(&pos); f32 chk = dBgS::GetInstance()->GroundCross(&gndChk); - if (field_0xBB0.y < chk + 120.f) { - field_0xBB0.y = chk + 120.f; + if (mTargetPos.y < chk + 120.f) { + mTargetPos.y = chk + 120.f; } } -void dAcEKs_c::ChkRoof() { +void dAcEKs_c::adjustTargetRoof() { dBgS_ObjRoofChk roofChk; - mVec3_c pos = field_0xBB0; + mVec3_c pos = mTargetPos; pos.y -= 150.f; roofChk.SetPos(&pos); f32 chk = dBgS::GetInstance()->RoofChk(&roofChk); - if (field_0xBB0.y > chk - 120.f) { - field_0xBB0.y = chk - 120.f; + if (mTargetPos.y > chk - 120.f) { + mTargetPos.y = chk - 120.f; } } @@ -268,19 +1072,19 @@ void dAcEKs_c::fn_155_3480() { bool dAcEKs_c::transitionToNextState() { if (mCurrentState != mNextState) { switch (mNextState) { - case 0: mStateMgr.changeState(StateID_Move); break; - case 1: mStateMgr.changeState(StateID_Wait); break; - case 2: mStateMgr.changeState(StateID_PathMove); break; - case 4: mStateMgr.changeState(StateID_WakeUp); break; - case 5: mStateMgr.changeState(StateID_ReturnToWait); break; - case 6: mStateMgr.changeState(StateID_Chase); break; - case 7: mStateMgr.changeState(StateID_ChaseAttack); break; - case 8: mStateMgr.changeState(StateID_Fighting); break; - case 9: mStateMgr.changeState(StateID_AttackReady); break; - case 10: mStateMgr.changeState(StateID_Attack); break; - case 11: mStateMgr.changeState(StateID_Damage); break; - case 12: mStateMgr.changeState(StateID_Stun); break; - case 13: mStateMgr.changeState(StateID_WindBlow); break; + case 0: changeState(StateID_Move); break; + case 1: changeState(StateID_Wait); break; + case 4: changeState(StateID_WakeUp); break; + case 5: changeState(StateID_ReturnToWait); break; + case 6: changeState(StateID_Chase); break; + case 7: changeState(StateID_ChaseAttack); break; + case 8: changeState(StateID_Fighting); break; + case 9: changeState(StateID_AttackReady); break; + case 10: changeState(StateID_Attack); break; + case 11: changeState(StateID_Damage); break; + case 12: changeState(StateID_Stun); break; + case 13: changeState(StateID_WindBlow); break; + case 2: changeState(StateID_PathMove); break; } mCurrentState = mNextState; return true; @@ -360,11 +1164,9 @@ void dAcEKs_c::setBlinkChecked(u8 blink) { void dAcEKs_c::fn_155_3900(s32 p0) { switch (p0) { case 0: { - if (!(mStateMgr.isState(StateID_Stun) || mStateMgr.isState(StateID_Damage) || - mStateMgr.isState(StateID_ReturnToWait) || mStateMgr.isState(StateID_Chase) || - mStateMgr.isState(StateID_ChaseAttack) || mStateMgr.isState(StateID_Fighting) || - mStateMgr.isState(StateID_AttackReady) || mStateMgr.isState(StateID_Attack) || - mStateMgr.isState(StateID_WindBlow))) { + if (!(isState(StateID_Stun) || isState(StateID_Damage) || isState(StateID_ReturnToWait) || + isState(StateID_Chase) || isState(StateID_ChaseAttack) || isState(StateID_Fighting) || + isState(StateID_AttackReady) || isState(StateID_Attack) || isState(StateID_WindBlow))) { setActorProperty(AC_PROP_0x1); } else { field_0xDB2 = 1; @@ -382,12 +1184,12 @@ void dAcEKs_c::setPitchYawToPoint(const mVec3_c &pnt) { } void dAcEKs_c::fn_155_3BD0(const mVec3_c &pnt) { - mWorldMtx.multVec(pnt, field_0xBB0); + mWorldMtx.multVec(pnt, mTargetPos); } void dAcEKs_c::fn_155_3BE0(const mVec3_c &pnt) { - if (mStateMgr.isState(StateID_AttackReady) || mStateMgr.isState(StateID_Attack)) { - dAcObjBase_c *pAttack = attackPlayerOrScrapper(0.f); + if (isState(StateID_AttackReady) || isState(StateID_Attack)) { + dAcObjBase_c *pAttack = targetPlayerOrScrapper(0.f); if (pAttack->isPlayer()) { mVec3_c v = static_cast(pAttack)->getCenterTranslation(); pAttack->mWorldMtx.multVecSR(pnt, field_0xBBC); @@ -396,8 +1198,8 @@ void dAcEKs_c::fn_155_3BE0(const mVec3_c &pnt) { pAttack->mWorldMtx.multVec(pnt, field_0xBBC); } } else { - dAcObjBase_c *pAttack = attackPlayerOrScrapper(0.f); - pAttack->mWorldMtx.multVec(pnt, field_0xBB0); + dAcObjBase_c *pAttack = targetPlayerOrScrapper(0.f); + pAttack->mWorldMtx.multVec(pnt, mTargetPos); } } @@ -412,6 +1214,25 @@ void dAcEKs_c::setBlink(u8 blink) { mAnmTexPat.setAnm(mMdl.getModel(), pat, 0, m3d::PLAY_MODE_4); } +bool dAcEKs_c::checkPathPntParam(u32 param) { + return param != 0 && param < 0xFF; +} + +void dAcEKs_c::fn_155_3E30() { + if (field_0xDB2 != 0) { + setActorProperty(AC_PROP_0x1); + } + field_0xDB2 = 0; +} + +void dAcEKs_c::clampRotationX() { + if (mRotation.x >= 0xE39) { + mRotation.x.set(0xE39); + } else if (mRotation.x <= -0xE39) { + mRotation.x.set(-0xE39); + } +} + void dAcEKs_c::fn_155_3E90() { mSph.OnTgElectric(); mSph.SetTg_0x50(2); @@ -424,6 +1245,31 @@ void dAcEKs_c::fn_155_3EC0() { mSph.ClrCo_0x8000(); } +bool dAcEKs_c::fn_155_3EF0() { + if (field_0xDCF == 0 && dTimeAreaMgr_c::GetInstance()->fn_800B9B60(mRoomID, dAcPy_c::GetLink()->mPosition)) { + return true; + } else { + return false; + } +} + +void dAcEKs_c::fn_155_3F50() { + if ((field_0xD9C & 1) == 0 && field_0xD9E < 9) { + mVec3_c end = mPosition; + if (dBgS_ObjLinChk::LineCross(&mPnts[field_0xD9E], &end, nullptr)) { + field_0xD9E++; + mPnts[field_0xD9E].set(end); + } + } + + if (field_0xD9E != 0 && ((field_0xD9C + 4) & 7) == 0) { + mVec3_c end = mPosition; + if (!dBgS_ObjLinChk::LineCross(&mPnts[field_0xD9E - 1], &end, nullptr)) { + field_0xD9E--; + } + } +} + void dAcEKs_c::initializeState_Wait() {} void dAcEKs_c::executeState_Wait() {} void dAcEKs_c::finalizeState_Wait() {} diff --git a/src/REL/d/a/e/d_a_e_sm.cpp b/src/REL/d/a/e/d_a_e_sm.cpp index fec93ee2..11c7d558 100644 --- a/src/REL/d/a/e/d_a_e_sm.cpp +++ b/src/REL/d/a/e/d_a_e_sm.cpp @@ -285,7 +285,7 @@ int dAcEsm_c::actorPostCreate() { } else { mTimeArea.setField0x00(0.f); field_0xB8C = 0.f; - fn_800306d0(); + fn_800306D0(); } } break; case 2: { @@ -293,7 +293,7 @@ int dAcEsm_c::actorPostCreate() { if (dTimeAreaMgr_c::GetInstance()->fn_800B9B60(getRoomId(), getPosition())) { field_0xB8C = 0.f; mTimeArea.setField0x00(0.f); - fn_800306d0(); + fn_800306D0(); } else { field_0xB8C = 1.f; mTimeArea.setField0x00(1.f); @@ -309,7 +309,7 @@ int dAcEsm_c::actorPostCreate() { if (field_0xBBF == 1 || field_0xBBF == 3) { unsetActorProperty(AC_PROP_0x1); - fn_800306d0(); + fn_800306D0(); setBattleBgmRelated(0); } @@ -370,7 +370,7 @@ int dAcEsm_c::actorExecute() { if (timeCheck != 0) { if (field_0xBBF == 3) { if (checkInteractionFlags(INTERACT_0x4)) { - fn_800306d0(); + fn_800306D0(); } return SUCCEEDED; } @@ -392,7 +392,7 @@ int dAcEsm_c::actorExecute() { if (timeCheck > 0) { startSound(SE_TIMESLIP_TIMESLIP); - fn_800306d0(); + fn_800306D0(); } else { startSound(SE_TIMESLIP_TIMESLIP_REV); fn_80030700(); @@ -401,7 +401,7 @@ int dAcEsm_c::actorExecute() { if (field_0xBBF == 3 && mTimeArea.isNearZero()) { if (checkInteractionFlags(INTERACT_0x4)) { - fn_800306d0(); + fn_800306D0(); } return SUCCEEDED; } diff --git a/src/d/col/c/c_cc_d.cpp b/src/d/col/c/c_cc_d.cpp index e54f258e..ebf84503 100644 --- a/src/d/col/c/c_cc_d.cpp +++ b/src/d/col/c/c_cc_d.cpp @@ -486,7 +486,7 @@ bool cCcD_Obj::ChkTgBit25() const { return mTg.MskAtHitSPrm(0x2000000); } -u16 cCcD_Obj::GetTgSoundID() const { +s32 cCcD_Obj::GetTgSoundID() const { return mTg.mAtHitSrc.field_0x10; }