summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_e_ws.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-07-12 12:40:29 -0700
committerGitHub <noreply@github.com>2025-07-12 22:40:29 +0300
commit898b4fa3e3c597b48de707b3855930e2568e1b1c (patch)
tree03cf38478809c496af3b6a68b4a78520c93220e0 /src/d/actor/d_a_e_ws.cpp
parent92e14253cacb86575f422b40269cf8a6909e044c (diff)
e_ws mostly done (#2529)
Diffstat (limited to 'src/d/actor/d_a_e_ws.cpp')
-rw-r--r--src/d/actor/d_a_e_ws.cpp1660
1 files changed, 873 insertions, 787 deletions
diff --git a/src/d/actor/d_a_e_ws.cpp b/src/d/actor/d_a_e_ws.cpp
index 998166bf5a..bb9c38717d 100644
--- a/src/d/actor/d_a_e_ws.cpp
+++ b/src/d/actor/d_a_e_ws.cpp
@@ -4,909 +4,995 @@
*/
#include "d/actor/d_a_e_ws.h"
-#include "dol2asm.h"
+#include "d/actor/d_a_obj_carry.h"
+#include <cmath.h>
+
UNK_REL_DATA;
#include "f_op/f_op_actor_enemy.h"
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__12daE_WS_HIO_cFv();
-extern "C" void draw__8daE_WS_cFv();
-extern "C" static void daE_WS_Draw__FP8daE_WS_c();
-extern "C" void setBck__8daE_WS_cFiUcff();
-extern "C" void setFootSound__8daE_WS_cFv();
-extern "C" void setActionMode__8daE_WS_cFi();
-extern "C" void calcTargetDist__8daE_WS_cF4cXyz4cXyz();
-extern "C" void calcTargetAngle__8daE_WS_cF4cXyz4cXyz();
-extern "C" void checkInSearchRange__8daE_WS_cF4cXyz4cXyz();
-extern "C" void checkPlayerPos__8daE_WS_cFv();
-extern "C" void checkAttackEnd__8daE_WS_cFv();
-extern "C" void executeWait__8daE_WS_cFv();
-extern "C" void executeAttack__8daE_WS_cFv();
-extern "C" void executeDown__8daE_WS_cFv();
-extern "C" void executeWindDown__8daE_WS_cFv();
-extern "C" void damage_check__8daE_WS_cFv();
-extern "C" void action__8daE_WS_cFv();
-extern "C" void mtx_set__8daE_WS_cFv();
-extern "C" void cc_set__8daE_WS_cFv();
-extern "C" void execute__8daE_WS_cFv();
-extern "C" static void daE_WS_Execute__FP8daE_WS_c();
-extern "C" void checkInitialWall__8daE_WS_cFv();
-extern "C" void __dt__8cM3dGPlaFv();
-extern "C" void checkBeforeBg__8daE_WS_cFs();
-extern "C" void checkWall__8daE_WS_cFv();
-extern "C" static bool daE_WS_IsDelete__FP8daE_WS_c();
-extern "C" void _delete__8daE_WS_cFv();
-extern "C" static void daE_WS_Delete__FP8daE_WS_c();
-extern "C" void CreateHeap__8daE_WS_cFv();
-extern "C" static void useHeapInit__FP10fopAc_ac_c();
-extern "C" void create__8daE_WS_cFv();
-extern "C" void __dt__8cM3dGSphFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void __dt__12dBgS_ObjAcchFv();
-extern "C" void __dt__12dBgS_AcchCirFv();
-extern "C" static void daE_WS_Create__FP8daE_WS_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void __dt__12daE_WS_HIO_cFv();
-extern "C" void __sinit_d_a_e_ws_cpp();
-extern "C" static void func_807E6EC8();
-extern "C" static void func_807E6ED0();
-extern "C" extern char const* const d_a_e_ws__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_XrotS__FPA4_fs();
-extern "C" void mDoMtx_XrotM__FPA4_fs();
-extern "C" void mDoMtx_YrotS__FPA4_fs();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void transM__14mDoMtx_stack_cFfff();
-extern "C" void scaleM__14mDoMtx_stack_cFfff();
-extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
-extern "C" void
-__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl();
-extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff();
-extern "C" void play__16mDoExt_McaMorfSOFUlSc();
-extern "C" void entryDL__16mDoExt_McaMorfSOFv();
-extern "C" void modelCalc__16mDoExt_McaMorfSOFv();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void fopAcM_delete__FP10fopAc_ac_c();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff();
-extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff();
-extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz();
-extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void
-dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void
-set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
-extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
-extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
-extern "C" void GetWallCode__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void __ct__12dBgS_AcchCirFv();
-extern "C" void SetWall__12dBgS_AcchCirFff();
-extern "C" void __dt__9dBgS_AcchFv();
-extern "C" void __ct__9dBgS_AcchFv();
-extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
-extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
-extern "C" void SetGroundUpY__9dBgS_AcchFf();
-extern "C" void __ct__11dBgS_GndChkFv();
-extern "C" void __dt__11dBgS_GndChkFv();
-extern "C" void __ct__11dBgS_LinChkFv();
-extern "C" void __dt__11dBgS_LinChkFv();
-extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Move__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkAtHit__12dCcD_GObjInfFv();
-extern "C" void GetAtHitObj__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph();
-extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void dKy_darkworld_check__Fv();
-extern "C" void GetAc__8cCcD_ObjFv();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __pl__4cXyzCFRC3Vec();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void cM_atan2s__Fff();
-extern "C" void cM_rndF__Ff();
-extern "C" void cM_rndFX__Ff();
-extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
-extern "C" void __dt__13cBgS_PolyInfoFv();
-extern "C" void __dt__8cM3dGCirFv();
-extern "C" void SetC__8cM3dGSphFRC4cXyz();
-extern "C" void SetR__8cM3dGSphFf();
-extern "C" void cLib_addCalc2__FPffff();
-extern "C" void cLib_chaseAngleS__FPsss();
-extern "C" void cLib_offsetPos__FP4cXyzPC4cXyzsPC4cXyz();
-extern "C" void cLib_distanceAngleS__Fss();
-extern "C" void __ct__15Z2CreatureEnemyFv();
-extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc();
-extern "C" void setLinkSearch__15Z2CreatureEnemyFb();
-extern "C" void setEnemyName__15Z2CreatureEnemyFPCc();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void checkPass__12J3DFrameCtrlFf();
-extern "C" void _savegpr_19();
-extern "C" void _savegpr_25();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_19();
-extern "C" void _restgpr_25();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Sph[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_SphAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32];
-extern "C" u8 m_midnaActor__9daPy_py_c[4];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 807E732C-807E7330 00002C 0004+00 0/2 0/0 0/0 .rodata @3823 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3823 = 4.0f / 5.0f;
-COMPILER_STRIP_GATE(0x807E732C, &lit_3823);
-#pragma pop
-
-/* 807E7330-807E7334 000030 0004+00 0/3 0/0 0/0 .rodata @3824 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3824 = 50.0f;
-COMPILER_STRIP_GATE(0x807E7330, &lit_3824);
-#pragma pop
-
-/* 807E7334-807E7338 000034 0004+00 0/1 0/0 0/0 .rodata @3825 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3825 = 300.0f;
-COMPILER_STRIP_GATE(0x807E7334, &lit_3825);
-#pragma pop
-
-/* 807E7338-807E733C 000038 0004+00 1/4 0/0 0/0 .rodata @3826 */
-SECTION_RODATA static f32 const lit_3826 = 200.0f;
-COMPILER_STRIP_GATE(0x807E7338, &lit_3826);
-
-/* 807E733C-807E7340 00003C 0004+00 0/1 0/0 0/0 .rodata @3827 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3827 = 270.0f;
-COMPILER_STRIP_GATE(0x807E733C, &lit_3827);
-#pragma pop
-
-/* 807E7340-807E7344 000040 0004+00 0/1 0/0 0/0 .rodata @3828 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3828 = 18200.0f;
-COMPILER_STRIP_GATE(0x807E7340, &lit_3828);
-#pragma pop
-
-/* 807E7344-807E7348 000044 0004+00 0/1 0/0 0/0 .rodata @3829 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3829 = 10.0f;
-COMPILER_STRIP_GATE(0x807E7344, &lit_3829);
-#pragma pop
-
+namespace {
/* 807E7448-807E7488 000038 0040+00 1/1 0/0 0/0 .data cc_ws_src__22@unnamed@d_a_e_ws_cpp@
*/
-SECTION_DATA static u8 data_807E7448[64] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D,
- 0xD8, 0xF9, 0xFD, 0xF5, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00,
+static dCcD_SrcSph cc_ws_src = {
+ {
+ {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0xD}, {0xD8F9FDF5, 0x3}, 0x75}}, // mObj
+ {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
+ {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
+ {0x0}, // mGObjCo
+ }, // mObjInf
+ {
+ {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
+ } // mSphAttr
};
/* 807E7488-807E74C8 000078 0040+00 1/1 0/0 0/0 .data cc_bokkuri_src__22@unnamed@d_a_e_ws_cpp@ */
-SECTION_DATA static u8 data_807E7488[64] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00,
-};
-
-/* 807E74C8-807E74E4 -00001 001C+00 1/1 0/0 0/0 .data @4268 */
-SECTION_DATA static void* lit_4268[7] = {
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0x88),
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0xC8),
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0xE0),
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0x22C),
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0x278),
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0x290),
- (void*)(((char*)executeWait__8daE_WS_cFv) + 0x2D8),
-};
-
-/* 807E74E4-807E7504 -00001 0020+00 1/0 0/0 0/0 .data l_daE_WS_Method */
-static actor_method_class l_daE_WS_Method = {
- (process_method_func)daE_WS_Create__FP8daE_WS_c,
- (process_method_func)daE_WS_Delete__FP8daE_WS_c,
- (process_method_func)daE_WS_Execute__FP8daE_WS_c,
- (process_method_func)daE_WS_IsDelete__FP8daE_WS_c,
- (process_method_func)daE_WS_Draw__FP8daE_WS_c,
-};
-
-/* 807E7504-807E7534 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_WS */
-extern actor_process_profile_definition g_profile_E_WS = {
- fpcLy_CURRENT_e, // mLayerID
- 7, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_E_WS, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daE_WS_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 200, // mPriority
- &l_daE_WS_Method, // sub_method
- 0x00050100, // mStatus
- fopAc_ENEMY_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 807E7534-807E7540 000124 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */
-SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_AcchCirFv,
-};
-
-/* 807E7540-807E754C 000130 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 807E754C-807E7558 00013C 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
-/* 807E7558-807E7564 000148 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
-SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGSphFv,
-};
-
-/* 807E7564-807E7570 000154 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 807E7570-807E7594 000160 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */
-SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_ObjAcchFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_807E6ED0,
- (void*)NULL,
- (void*)NULL,
- (void*)func_807E6EC8,
-};
-
-/* 807E7594-807E75A0 000184 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGPla */
-SECTION_DATA extern void* __vt__8cM3dGPla[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGPlaFv,
-};
-
-/* 807E75A0-807E75AC 000190 000C+00 2/2 0/0 0/0 .data __vt__12daE_WS_HIO_c */
-SECTION_DATA extern void* __vt__12daE_WS_HIO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12daE_WS_HIO_cFv,
+static dCcD_SrcSph cc_bokkuri_src = {
+ {
+ {0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0x0}, {0x20008, 0x3}, 0x0}}, // mObj
+ {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
+ {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
+ {0x0}, // mGObjCo
+ }, // mObjInf
+ {
+ {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
+ } // mSphAttr
};
+}
/* 807E3A0C-807E3A6C 0000EC 0060+00 1/1 0/0 0/0 .text __ct__12daE_WS_HIO_cFv */
daE_WS_HIO_c::daE_WS_HIO_c() {
- // NONMATCHING
+ id = -1;
+ base_size = 0.8f;
+ move_range = 50.0f;
+ search_range = 300.0f;
+ search_y_range = 200.0f;
+ dist_to_ground = 270.0f;
+ debug_ON = false;
+ search_angle = 18200;
+ attack_speed = 10.0f;
}
-/* ############################################################################################## */
-/* 807E7348-807E734C 000048 0004+00 0/1 0/0 0/0 .rodata @3871 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3871 = 400.0f;
-COMPILER_STRIP_GATE(0x807E7348, &lit_3871);
-#pragma pop
-
/* 807E3A6C-807E3C00 00014C 0194+00 1/1 0/0 0/0 .text draw__8daE_WS_cFv */
-void daE_WS_c::draw() {
- // NONMATCHING
+int daE_WS_c::draw() {
+ J3DModel* model_p = mpModelMorf->getModel();
+ g_env_light.settingTevStruct(0, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(model_p, &tevStr);
+
+ if (mDownColor) {
+ J3DModelData* modelData_p = model_p->getModelData();
+ for (u16 i = 0; i < modelData_p->getMaterialNum(); i++) {
+ J3DMaterial* material_p = modelData_p->getMaterialNodePointer(i);
+ material_p->getTevColor(0)->r = mDownColor;
+ material_p->getTevColor(0)->g = mDownColor;
+ material_p->getTevColor(0)->b = mDownColor;
+ }
+ }
+
+ mpModelMorf->entryDL();
+
+ cXyz sp8;
+ sp8.set(current.pos.x, 100.0f + current.pos.y, current.pos.z);
+ mShadowId = dComIfGd_setShadow(mShadowId, 1, model_p, &sp8, 400.0f, 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
+ return 1;
}
/* 807E3C00-807E3C20 0002E0 0020+00 1/0 0/0 0/0 .text daE_WS_Draw__FP8daE_WS_c */
-static void daE_WS_Draw(daE_WS_c* param_0) {
- // NONMATCHING
+static int daE_WS_Draw(daE_WS_c* a_this) {
+ return a_this->draw();
}
-/* ############################################################################################## */
-/* 807E734C-807E7350 00004C 0004+00 1/1 0/0 0/0 .rodata @3885 */
-SECTION_RODATA static f32 const lit_3885 = -1.0f;
-COMPILER_STRIP_GATE(0x807E734C, &lit_3885);
-
-/* 807E7404-807E7404 000104 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_807E7404 = "E_WS";
-#pragma pop
-
/* 807E3C20-807E3CC4 000300 00A4+00 4/4 0/0 0/0 .text setBck__8daE_WS_cFiUcff */
-void daE_WS_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 807E7350-807E7354 000050 0004+00 0/1 0/0 0/0 .rodata @3952 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3952 = 4.5f;
-COMPILER_STRIP_GATE(0x807E7350, &lit_3952);
-#pragma pop
-
-/* 807E7354-807E7358 000054 0004+00 0/2 0/0 0/0 .rodata @3953 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3953 = 7.5f;
-COMPILER_STRIP_GATE(0x807E7354, &lit_3953);
-#pragma pop
-
-/* 807E7358-807E735C 000058 0004+00 0/1 0/0 0/0 .rodata @3954 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3954 = 9.0f;
-COMPILER_STRIP_GATE(0x807E7358, &lit_3954);
-#pragma pop
-
-/* 807E735C-807E7360 00005C 0004+00 0/1 0/0 0/0 .rodata @3955 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3955 = 13.5f;
-COMPILER_STRIP_GATE(0x807E735C, &lit_3955);
-#pragma pop
-
-/* 807E7360-807E7364 000060 0004+00 0/1 0/0 0/0 .rodata @3956 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3956 = 16.0f;
-COMPILER_STRIP_GATE(0x807E7360, &lit_3956);
-#pragma pop
-
-/* 807E7364-807E7368 000064 0004+00 0/1 0/0 0/0 .rodata @3957 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3957 = 19.0f;
-COMPILER_STRIP_GATE(0x807E7364, &lit_3957);
-#pragma pop
-
-/* 807E7368-807E736C 000068 0004+00 0/1 0/0 0/0 .rodata @3958 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3958 = 23.5f;
-COMPILER_STRIP_GATE(0x807E7368, &lit_3958);
-#pragma pop
-
-/* 807E736C-807E7370 00006C 0004+00 0/2 0/0 0/0 .rodata @3959 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3959 = 25.0f;
-COMPILER_STRIP_GATE(0x807E736C, &lit_3959);
-#pragma pop
-
-/* 807E7370-807E7374 000070 0004+00 0/1 0/0 0/0 .rodata @3960 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3960 = 28.0f;
-COMPILER_STRIP_GATE(0x807E7370, &lit_3960);
-#pragma pop
-
-/* 807E7374-807E7378 000074 0004+00 0/1 0/0 0/0 .rodata @3961 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3961 = 32.5f;
-COMPILER_STRIP_GATE(0x807E7374, &lit_3961);
-#pragma pop
-
-/* 807E7378-807E737C 000078 0004+00 0/1 0/0 0/0 .rodata @3962 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3962 = 36.0f;
-COMPILER_STRIP_GATE(0x807E7378, &lit_3962);
-#pragma pop
-
-/* 807E737C-807E7380 00007C 0004+00 0/1 0/0 0/0 .rodata @3963 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3963 = 39.5f;
-COMPILER_STRIP_GATE(0x807E737C, &lit_3963);
-#pragma pop
-
-/* 807E7380-807E7384 000080 0004+00 1/3 0/0 0/0 .rodata @3964 */
-SECTION_RODATA static f32 const lit_3964 = 0.5f;
-COMPILER_STRIP_GATE(0x807E7380, &lit_3964);
-
-/* 807E7384-807E7388 000084 0004+00 0/1 0/0 0/0 .rodata @3965 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3965 = 6.0f;
-COMPILER_STRIP_GATE(0x807E7384, &lit_3965);
-#pragma pop
-
-/* 807E7388-807E738C 000088 0004+00 0/1 0/0 0/0 .rodata @3966 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3966 = 11.0f;
-COMPILER_STRIP_GATE(0x807E7388, &lit_3966);
-#pragma pop
-
-/* 807E738C-807E7390 00008C 0004+00 0/1 0/0 0/0 .rodata @3967 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3967 = 21.0f;
-COMPILER_STRIP_GATE(0x807E738C, &lit_3967);
-#pragma pop
-
-/* 807E7390-807E7394 000090 0004+00 0/1 0/0 0/0 .rodata @3968 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3968 = 26.5f;
-COMPILER_STRIP_GATE(0x807E7390, &lit_3968);
-#pragma pop
-
-/* 807E7394-807E7398 000094 0004+00 0/1 0/0 0/0 .rodata @3969 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3969 = 31.0f;
-COMPILER_STRIP_GATE(0x807E7394, &lit_3969);
-#pragma pop
+void daE_WS_c::setBck(int i_anm, u8 i_mode, f32 i_morf, f32 i_speed) {
+ mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_WS", i_anm), i_mode, i_morf, i_speed, 0.0f, -1.0f);
+}
/* 807E3CC4-807E3F90 0003A4 02CC+00 2/2 0/0 0/0 .text setFootSound__8daE_WS_cFv */
void daE_WS_c::setFootSound() {
- // NONMATCHING
+ if (mpModelMorf->getAnm() == dComIfG_getObjectRes("E_WS", 7)) {
+ if (mpModelMorf->checkFrame(0.0f) ||
+ mpModelMorf->checkFrame(4.5f) ||
+ mpModelMorf->checkFrame(7.5f) ||
+ mpModelMorf->checkFrame(9.0f) ||
+ mpModelMorf->checkFrame(13.5f) ||
+ mpModelMorf->checkFrame(16.0f) ||
+ mpModelMorf->checkFrame(19.0f) ||
+ mpModelMorf->checkFrame(23.5f) ||
+ mpModelMorf->checkFrame(25.0f) ||
+ mpModelMorf->checkFrame(28.0f) ||
+ mpModelMorf->checkFrame(32.5f) ||
+ mpModelMorf->checkFrame(36.0f) ||
+ mpModelMorf->checkFrame(39.5f))
+ {
+ mSound.startCreatureSound(Z2SE_EN_WS_FOOTNOTE, 0, -1);
+ }
+ } else if (mpModelMorf->getAnm() == dComIfG_getObjectRes("E_WS", 8)) {
+ if (mpModelMorf->checkFrame(0.5f) ||
+ mpModelMorf->checkFrame(6.0f) ||
+ mpModelMorf->checkFrame(11.0f) ||
+ mpModelMorf->checkFrame(16.0f) ||
+ mpModelMorf->checkFrame(21.0f) ||
+ mpModelMorf->checkFrame(26.5f) ||
+ mpModelMorf->checkFrame(31.0f))
+ {
+ mSound.startCreatureSound(Z2SE_EN_WS_FOOTNOTE, 0, -1);
+ }
+ }
}
/* 807E3F90-807E3FAC 000670 001C+00 5/5 0/0 0/0 .text setActionMode__8daE_WS_cFi */
-void daE_WS_c::setActionMode(int param_0) {
- // NONMATCHING
+void daE_WS_c::setActionMode(int i_action) {
+ if (mAction != i_action) {
+ mAction = i_action;
+ mMode = 0;
+ }
}
/* 807E3FAC-807E40C8 00068C 011C+00 4/4 0/0 0/0 .text calcTargetDist__8daE_WS_cF4cXyz4cXyz */
-void daE_WS_c::calcTargetDist(cXyz param_0, cXyz param_1) {
- // NONMATCHING
+f32 daE_WS_c::calcTargetDist(cXyz i_basePos, cXyz i_targetPos) {
+ return i_basePos.abs(i_targetPos);
}
/* 807E40C8-807E416C 0007A8 00A4+00 3/3 0/0 0/0 .text calcTargetAngle__8daE_WS_cF4cXyz4cXyz */
-void daE_WS_c::calcTargetAngle(cXyz param_0, cXyz param_1) {
- // NONMATCHING
+s16 daE_WS_c::calcTargetAngle(cXyz i_basePos, cXyz i_targetPos) {
+ cXyz sp1C;
+ cXyz sp10 = i_targetPos - i_basePos;
+
+ mDoMtx_stack_c::XrotS(-field_0x668.x);
+ mDoMtx_stack_c::YrotM(-field_0x668.y);
+ mDoMtx_stack_c::multVec(&sp10, &sp1C);
+ return cM_atan2s(sp1C.x, sp1C.z);
}
-/* ############################################################################################## */
/* 807E75B8-807E75BC 000008 0004+00 2/2 0/0 0/0 .bss None */
-static u8 data_807E75B8[4];
-
-/* 807E75BC-807E75C8 00000C 000C+00 1/1 0/0 0/0 .bss @3818 */
-static u8 lit_3818[12];
+static u8 l_HIOInit;
/* 807E75C8-807E75F0 000018 0028+00 7/7 0/0 0/0 .bss l_HIO */
-static u8 l_HIO[40];
+static daE_WS_HIO_c l_HIO;
/* 807E416C-807E4224 00084C 00B8+00 3/3 0/0 0/0 .text checkInSearchRange__8daE_WS_cF4cXyz4cXyz */
-void daE_WS_c::checkInSearchRange(cXyz param_0, cXyz param_1) {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 807E7398-807E73A0 000098 0004+04 0/1 0/0 0/0 .rodata @4145 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4145[1 + 1 /* padding */] = {
- 150.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x807E7398, &lit_4145);
-#pragma pop
-
-/* 807E73A0-807E73A8 0000A0 0008+00 0/1 0/0 0/0 .rodata @4147 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4147[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x807E73A0, &lit_4147);
-#pragma pop
+bool daE_WS_c::checkInSearchRange(cXyz i_basePos, cXyz i_targetPos) {
+ if (calcTargetDist(i_basePos, i_targetPos) < l_HIO.search_range && std::abs(i_basePos.y - i_targetPos.y) < l_HIO.search_y_range) {
+ return true;
+ }
+
+ return false;
+}
/* 807E4224-807E4568 000904 0344+00 1/1 0/0 0/0 .text checkPlayerPos__8daE_WS_cFv */
-void daE_WS_c::checkPlayerPos() {
- // NONMATCHING
+int daE_WS_c::checkPlayerPos() {
+ cXyz player_pos;
+ mDoMtx_stack_c::copy(daPy_getLinkPlayerActorClass()->getModelJointMtx(0));
+ mDoMtx_stack_c::multVecZero(&player_pos);
+
+ if ((daPy_getPlayerActorClass()->checkClimbMove() ||
+ dComIfGp_checkPlayerStatus1(0, 0x2000000) ||
+ dComIfGp_checkPlayerStatus1(0, 0x10000) ||
+ calcTargetDist(current.pos, player_pos) < 150.0f) &&
+ checkInSearchRange(player_pos, field_0x65c) && checkInSearchRange(current.pos, field_0x65c))
+ {
+ dBgS_GndChk gndchk;
+ cXyz gndpos;
+
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(field_0x66e);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f);
+ mDoMtx_stack_c::multVecZero(&gndpos);
+
+ gndchk.SetPos(&gndpos);
+ gndpos.y = dComIfG_Bgsp().GroundCross(&gndchk);
+ if (current.pos.y - gndpos.y > l_HIO.dist_to_ground) {
+ if (cLib_distanceAngleS(shape_angle.y, calcTargetAngle(current.pos, player_pos)) < l_HIO.search_angle) {
+ return 1;
+ }
+
+ if (calcTargetDist(current.pos, player_pos) < 150.0f) {
+ return 2;
+ }
+ }
+ }
+
+ return 0;
}
/* 807E4568-807E470C 000C48 01A4+00 1/1 0/0 0/0 .text checkAttackEnd__8daE_WS_cFv */
-void daE_WS_c::checkAttackEnd() {
- // NONMATCHING
+// NONMATCHING
+bool daE_WS_c::checkAttackEnd() {
+ cXyz player_pos;
+ mDoMtx_stack_c::copy(daPy_getLinkPlayerActorClass()->getModelJointMtx(0));
+ mDoMtx_stack_c::multVecZero(&player_pos);
+
+ if (!(daPy_getPlayerActorClass()->checkClimbMove() ||
+ dComIfGp_checkPlayerStatus1(0, 0x02000000) ||
+ dComIfGp_checkPlayerStatus1(0, 0x10000) ||
+ calcTargetDist(current.pos, player_pos) < 200.0f) ||
+ (!checkInSearchRange(current.pos, field_0x65c) || checkBeforeBg(shape_angle.y)))
+ {
+ setActionMode(ACTION_WAIT_e);
+ speedF = 0.0f;
+ return true;
+ }
+
+ return false;
}
-/* ############################################################################################## */
-/* 807E73A8-807E73AC 0000A8 0004+00 0/4 0/0 0/0 .rodata @4263 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4263 = 3.0f;
-COMPILER_STRIP_GATE(0x807E73A8, &lit_4263);
-#pragma pop
-
/* 807E470C-807E4AB8 000DEC 03AC+00 2/1 0/0 0/0 .text executeWait__8daE_WS_cFv */
void daE_WS_c::executeWait() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 807E73AC-807E73B0 0000AC 0004+00 0/0 0/0 0/0 .rodata @4264 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4264 = 32768.0f;
-COMPILER_STRIP_GATE(0x807E73AC, &lit_4264);
-#pragma pop
-
-/* 807E73B0-807E73B4 0000B0 0004+00 0/0 0/0 0/0 .rodata @4265 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4265 = 12.0f / 5.0f;
-COMPILER_STRIP_GATE(0x807E73B0, &lit_4265);
-#pragma pop
-
-/* 807E73B4-807E73B8 0000B4 0004+00 0/0 0/0 0/0 .rodata @4266 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4266 = 6.0f / 5.0f;
-COMPILER_STRIP_GATE(0x807E73B4, &lit_4266);
-#pragma pop
-
-/* 807E73B8-807E73BC 0000B8 0004+00 0/1 0/0 0/0 .rodata @4267 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4267 = 20.0f;
-COMPILER_STRIP_GATE(0x807E73B8, &lit_4267);
-#pragma pop
-
-/* 807E73BC-807E73C0 0000BC 0004+00 0/1 0/0 0/0 .rodata @4366 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4366 = 3.5f;
-COMPILER_STRIP_GATE(0x807E73BC, &lit_4366);
-#pragma pop
+ int temp_r3 = checkPlayerPos();
+ if (temp_r3 == 1) {
+ setActionMode(ACTION_ATTACK_e);
+ return;
+ }
+
+ if (temp_r3 == 2 && mMode != 3 && mMode != 4) {
+ mMode = 2;
+ }
+
+ switch (mMode) {
+ case 0:
+ field_0x68c = 50.0f + cM_rndF(50.0f);
+ setBck(9, 2, 3.0f, 1.0f);
+ mMode = 1;
+ /* fallthrough */
+ case 1:
+ if (field_0x68c == 0) {
+ mMode = 2;
+ }
+ break;
+ case 2:
+ speedF = 0.0f;
+ field_0x690 = 0;
+ mTargetAngle = shape_angle.y + cM_rndFX(32768.0f);
+
+ if (temp_r3 == 2) {
+ mTargetStep = 0x200;
+ setBck(8, 2, 3.0f, 2.4f);
+ } else {
+ if (calcTargetDist(current.pos, field_0x65c) >= l_HIO.move_range) {
+ mTargetAngle = calcTargetAngle(current.pos, field_0x65c);
+ field_0x690 = 1;
+ }
+ mTargetStep = 0x100;
+ setBck(8, 2, 3.0f, 1.2f);
+ }
+
+ mMode = 3;
+ /* fallthrough */
+ case 3:
+ setFootSound();
+
+ if (cLib_chaseAngleS(&shape_angle.y, mTargetAngle, mTargetStep)) {
+ mMode = 4;
+ field_0x68c = 10;
+ setBck(9, 2, 3.0f, 1.0f);
+ }
+ break;
+ case 4:
+ if (field_0x68c == 0) {
+ mMode = 5;
+ }
+ break;
+ case 5:
+ mMode = 6;
+ speedF = 3.0f;
+ field_0x68c = 20.0f + cM_rndF(10.0f);
+ setBck(7, 2, 3.0f, 1.0f);
+ /* fallthrough */
+ case 6:
+ setFootSound();
+
+ if (field_0x690 == 0) {
+ if (calcTargetDist(current.pos, field_0x65c) >= l_HIO.move_range) {
+ field_0x68c = 0;
+ }
+ }
+
+ if (checkBeforeBg(shape_angle.y)) {
+ field_0x68c = 0;
+ }
+
+ if (field_0x68c == 0) {
+ speedF = 0.0f;
+ mMode = 0;
+ }
+ break;
+ }
+
+ current.angle.y = shape_angle.y;
+}
/* 807E4AB8-807E4E68 001198 03B0+00 1/1 0/0 0/0 .text executeAttack__8daE_WS_cFv */
+// NONMATCHING
void daE_WS_c::executeAttack() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 807E73C0-807E73C4 0000C0 0004+00 0/2 0/0 0/0 .rodata @4442 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4442 = 4.0f;
-COMPILER_STRIP_GATE(0x807E73C0, &lit_4442);
-#pragma pop
-
-/* 807E73C4-807E73C8 0000C4 0004+00 0/2 0/0 0/0 .rodata @4443 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4443 = 5.0f;
-COMPILER_STRIP_GATE(0x807E73C4, &lit_4443);
-#pragma pop
-
-/* 807E73C8-807E73CC 0000C8 0004+00 0/2 0/0 0/0 .rodata @4444 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4444 = -3.0f;
-COMPILER_STRIP_GATE(0x807E73C8, &lit_4444);
-#pragma pop
-
-/* 807E73CC-807E73D0 0000CC 0004+00 0/2 0/0 0/0 .rodata @4445 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4445 = 2.0f;
-COMPILER_STRIP_GATE(0x807E73CC, &lit_4445);
-#pragma pop
-
-/* 807E73D0-807E73D4 0000D0 0004+00 0/2 0/0 0/0 .rodata @4446 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4446 = 12.0f;
-COMPILER_STRIP_GATE(0x807E73D0, &lit_4446);
-#pragma pop
-
-/* 807E73D4-807E73D8 0000D4 0004+00 0/2 0/0 0/0 .rodata @4447 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4447 = -20.0f;
-COMPILER_STRIP_GATE(0x807E73D4, &lit_4447);
-#pragma pop
-
-/* 807E73D8-807E73DC 0000D8 0004+00 0/2 0/0 0/0 .rodata @4448 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4448 = 2.0f / 5.0f;
-COMPILER_STRIP_GATE(0x807E73D8, &lit_4448);
-#pragma pop
+ cXyz player_pos;
+ mDoMtx_stack_c::copy(daPy_getLinkPlayerActorClass()->getModelJointMtx(0));
+ mDoMtx_stack_c::multVecZero(&player_pos);
+
+ switch (mMode) {
+ case 0:
+ setBck(8, 2, 3.0f, 3.5f);
+ mMode = 1;
+ speedF = 0.0f;
+ /* fallthrough */
+ case 1:
+ setFootSound();
+
+ if (!checkAttackEnd()) {
+ if (cLib_chaseAngleS(&shape_angle.y, calcTargetAngle(current.pos, player_pos), 0x300)) {
+ mMode = 2;
+ setBck(10, 2, 3.0f, 1.0f);
+ mSound.startCreatureVoice(Z2SE_EN_WS_V_YOKOKU, -1);
+ field_0x68c = 10;
+ }
+ }
+ break;
+ case 2:
+ if (field_0x68c == 0) {
+ speedF = l_HIO.attack_speed * mBodyScale;
+ setBck(7, 2, 3.0f, 3.0f);
+ mMode = 3;
+ }
+
+ if (checkAttackEnd()) {
+ return;
+ }
+
+ break;
+ case 3:
+ setFootSound();
+ cLib_chaseAngleS(&shape_angle.y, calcTargetAngle(current.pos, player_pos), 0x400);
+
+ if (checkBeforeBg(shape_angle.y) || (mCcSph.ChkAtHit() && fopAcM_GetName(dCc_GetAc(mCcSph.GetAtHitObj()->GetAc())) == PROC_ALINK) || !checkInSearchRange(current.pos, field_0x65c)) {
+ mMode = 4;
+ speedF = 0.0f;
+ setBck(4, 0, 3.0f, 1.0f);
+ break;
+ }
+
+ if (checkAttackEnd()) {
+ return;
+ }
+ break;
+ case 4:
+ if (mpModelMorf->checkFrame(7.5f)) {
+ mSound.startCreatureVoice(Z2SE_EN_WS_V_ATTACK, -1);
+ }
+
+ if (mpModelMorf->isStop()) {
+ setActionMode(ACTION_WAIT_e);
+ }
+ break;
+ }
+
+ current.angle.y = shape_angle.y;
+}
/* 807E4E68-807E5294 001548 042C+00 1/1 0/0 0/0 .text executeDown__8daE_WS_cFv */
void daE_WS_c::executeDown() {
- // NONMATCHING
+ mInvulnerabilityTimer = 10;
+
+ switch (mMode) {
+ case 0:
+ mCcSph.OffAtSetBit();
+ mCcSph.OffTgSetBit();
+ mCcBokkuriSph.OffTgSetBit();
+
+ mMode = 1;
+ speed.y = 0.0f;
+ speedF = 0.0f;
+ setBck(5, 0, 0.0f, 1.0f);
+
+ mSound.startCreatureVoice(Z2SE_EN_WS_V_DAMAGE, -1);
+ /* fallthrough */
+ case 1:
+ if (mpModelMorf->isStop()) {
+ mAcchCir.SetWall(0.0f, 4.0f);
+ current.angle.y = field_0x668.y;
+ setBck(6, 0, 3.0f, 0.0f);
+ mSound.startCreatureVoice(Z2SE_EN_WS_V_DEATH, -1);
+ speedF = 5.0f;
+ gravity = -3.0f;
+ mAcch.SetGroundUpY(25.0f * mBodyScale);
+ mMode = 2;
+ attention_info.flags = 0;
+ }
+ return;
+ case 2:
+ if (abs(shape_angle.y) < 0x4000) {
+ cLib_chaseAngleS(&shape_angle.y, 0, 0x200);
+ cLib_chaseAngleS(&shape_angle.x, 0x4000, 0x400);
+ } else {
+ cLib_chaseAngleS(&shape_angle.y, -0x8000, 0x200);
+ cLib_chaseAngleS(&shape_angle.x, -0x4000, 0x400);
+ }
+
+ if (mAcch.ChkGroundHit()) {
+ speedF = 3.0f + cM_rndF(2.0f);
+ speed.y = 12.0f;
+ mMode = 3;
+ field_0x68c = 30;
+ setBck(6, 0, 5.0f, 1.0f);
+ mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1);
+ }
+ break;
+ case 3:
+ if (abs(shape_angle.y) < 0x4000) {
+ cLib_chaseAngleS(&shape_angle.y, 0, 0x200);
+ cLib_chaseAngleS(&shape_angle.x, 0x4000, 0x400);
+ } else {
+ cLib_chaseAngleS(&shape_angle.y, -0x8000, 0x200);
+ cLib_chaseAngleS(&shape_angle.x, -0x4000, 0x400);
+ }
+
+ if (mAcch.ChkGroundHit()) {
+ mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1);
+
+ if (abs(shape_angle.y) < 0x4000) {
+ shape_angle.y = 0;
+ shape_angle.x = 0x4000;
+ } else {
+ shape_angle.y = -0x8000;
+ shape_angle.x = -0x4000;
+ }
+
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ mMode = 4;
+ return;
+ }
+ break;
+ case 4:
+ cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
+
+ if (mpModelMorf->isStop()) {
+ field_0x68c = 15;
+ mMode = 5;
+ return;
+ }
+ break;
+ case 5:
+ cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
+
+ if (field_0x68c == 0) {
+ fopAcM_delete(this);
+ fopAcM_createDisappear(this, &current.pos, 7, 0, 7);
+
+ if (mSwbit != 0xFF && !dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
+ dComIfGs_onSwitch(mSwbit, fopAcM_GetRoomNo(this));
+ }
+ }
+ break;
+ }
}
-/* ############################################################################################## */
-/* 807E73DC-807E73E0 0000DC 0004+00 0/1 0/0 0/0 .rodata @4507 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4507 = 30.0f;
-COMPILER_STRIP_GATE(0x807E73DC, &lit_4507);
-#pragma pop
-
/* 807E5294-807E56D0 001974 043C+00 1/1 0/0 0/0 .text executeWindDown__8daE_WS_cFv */
void daE_WS_c::executeWindDown() {
- // NONMATCHING
+ mInvulnerabilityTimer = 10;
+
+ switch (mMode) {
+ case 0:
+ mCcSph.OffAtSetBit();
+ mCcSph.OffTgSetBit();
+ mCcBokkuriSph.OffTgSetBit();
+
+ mAcchCir.SetWall(0.0f, 4.0f);
+ mMode = 1;
+ setBck(7, 2, 3.0f, 1.0f);
+
+ mSound.startCreatureVoice(Z2SE_EN_WS_V_DAMAGE, -1);
+ field_0x68c = 5;
+ mAcch.SetGroundUpY(20.0f);
+ attention_info.flags = 0;
+ speed.y = 0.0f;
+ speedF = 5.0f;
+ current.angle.y = field_0x668.y;
+ mTargetStep = -0x800;
+ break;
+ case 1:
+ shape_angle.y += mTargetStep;
+ cLib_chaseAngleS(&field_0x66e.y, 0, 0x400);
+ cLib_chaseAngleS(&field_0x66e.x, 0, 0x400);
+ shape_angle.x += 0x800;
+ shape_angle.z += 0x800;
+ speed.y = 30.0f;
+
+ if (field_0x68c == 0) {
+ mMode = 2;
+ gravity = -3.0f;
+ }
+ break;
+ case 2:
+ shape_angle.y += mTargetStep;
+ cLib_chaseAngleS(&field_0x66e.y, 0, 0x400);
+ cLib_chaseAngleS(&field_0x66e.x, 0, 0x400);
+ cLib_chaseAngleS(&shape_angle.x, -0x8000, 0x400);
+ cLib_chaseAngleS(&shape_angle.z, 0, 0x400);
+
+ if (mAcch.ChkGroundHit()) {
+ speedF = 3.0f + cM_rndF(2.0f);
+ speed.y = 12.0f;
+ mMode = 3;
+ field_0x68c = 30;
+ setBck(6, 0, 5.0f, 1.0f);
+ mSound.startCreatureVoice(Z2SE_EN_WS_V_DEATH, -1);
+ mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1);
+ }
+ break;
+ case 3:
+ shape_angle.y += mTargetStep;
+ cLib_chaseAngleS(&mTargetStep, 0, 0x80);
+ cLib_chaseAngleS(&shape_angle.x, -0x8000, 0x400);
+ cLib_chaseAngleS(&shape_angle.z, 0, 0x400);
+
+ if (mAcch.ChkGroundHit()) {
+ mSound.startCreatureSound(Z2SE_CM_BODYFALL_S, 0, -1);
+ shape_angle.x = -0x8000;
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ mMode = 4;
+ }
+ break;
+ case 4:
+ cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
+ shape_angle.y += mTargetStep;
+ cLib_chaseAngleS(&mTargetStep, 0, 0x80);
+ shape_angle.y += mTargetStep;
+
+ if (mpModelMorf->isStop()) {
+ field_0x68c = 15;
+ mMode = 5;
+ }
+ break;
+ case 5:
+ cLib_addCalc2(&mDownColor, -20.0f, 1.0f, 0.4f);
+ if (field_0x68c == 0) {
+ fopAcM_delete(this);
+ fopAcM_createDisappear(this, &current.pos, 7, 0, 7);
+
+ if (mSwbit != 0xFF && !dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
+ dComIfGs_onSwitch(mSwbit, fopAcM_GetRoomNo(this));
+ }
+ }
+ break;
+ }
}
/* 807E56D0-807E58AC 001DB0 01DC+00 1/1 0/0 0/0 .text damage_check__8daE_WS_cFv */
void daE_WS_c::damage_check() {
- // NONMATCHING
+ if (mInvulnerabilityTimer == 0) {
+ if (mAction == ACTION_DOWN_e || mAction == ACTION_WIND_DOWN_e) {
+ return;
+ }
+
+ mCcStts.Move();
+
+ if (mCcBokkuriSph.ChkTgHit()) {
+ mAtInfo.mpCollider = mCcBokkuriSph.GetTgHitObj();
+
+ if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_20000)) {
+ dComIfGp_setHitMark(1, this, &eyePos, NULL, NULL, 0);
+ dScnPly_c::setPauseTimer(4);
+ mSound.startCreatureSound(Z2SE_EN_ST_SHELL_BREAK, 0, -1);
+ } else if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_THROW_OBJ)) {
+ fopAc_ac_c* throwobj_p = dCc_GetAc(mAtInfo.mpCollider->GetAc());
+ if (fopAcM_GetName(throwobj_p) == PROC_Obj_Carry && ((daObjCarry_c*)throwobj_p)->getType() == daObjCarry_c::TYPE_BOKKURI) {
+ mSound.startCreatureSound(Z2SE_EN_ST_SHELL_BREAK, 0, -1);
+ }
+ }
+
+ cc_at_check(this, &mAtInfo);
+ setActionMode(ACTION_DOWN_e);
+ return;
+ }
+
+ if (mCcSph.ChkTgHit()) {
+ mAtInfo.mpCollider = mCcSph.GetTgHitObj();
+ cc_at_check(this, &mAtInfo);
+
+ if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_WOLF_ATTACK | AT_TYPE_WOLF_CUT_TURN | AT_TYPE_10000000 | AT_TYPE_MIDNA_LOCK)) {
+ mInvulnerabilityTimer = 20;
+ } else {
+ mInvulnerabilityTimer = 10;
+ }
+
+ if (mAtInfo.mAttackPower <= 1) {
+ mInvulnerabilityTimer = KREG_S(8) + 10;
+ }
+
+ if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG)) {
+ setActionMode(ACTION_WIND_DOWN_e);
+ } else {
+ setActionMode(ACTION_DOWN_e);
+ }
+ }
+ }
}
/* 807E58AC-807E5A3C 001F8C 0190+00 1/1 0/0 0/0 .text action__8daE_WS_cFv */
void daE_WS_c::action() {
- // NONMATCHING
+ attention_info.distances[fopAc_attn_BATTLE_e] = 46;
+ damage_check();
+ field_0x566 = 0;
+
+ switch (mAction) {
+ case ACTION_WAIT_e:
+ executeWait();
+ break;
+ case ACTION_ATTACK_e:
+ field_0x566 = 1;
+ executeAttack();
+ break;
+ case ACTION_DOWN_e:
+ executeDown();
+ break;
+ case ACTION_WIND_DOWN_e:
+ executeWindDown();
+ break;
+ }
+
+ mSound.setLinkSearch(field_0x566);
+
+ if (mAction != ACTION_DOWN_e && mAction != ACTION_WIND_DOWN_e) {
+ cXyz sp14;
+ mDoMtx_stack_c::YrotS(field_0x668.y);
+ mDoMtx_stack_c::XrotM(field_0x668.x);
+ mDoMtx_stack_c::YrotM(current.angle.y);
+
+ cXyz sp8(0.0f, 0.0f, speedF);
+ mDoMtx_stack_c::multVec(&sp8, &sp14);
+ speed = sp14;
+ current.pos += speed;
+ } else {
+ fopAcM_posMoveF(this, NULL);
+ }
+
+ mAcch.CrrPos(dComIfG_Bgsp());
+ mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
}
/* 807E5A3C-807E5AAC 00211C 0070+00 2/2 0/0 0/0 .text mtx_set__8daE_WS_cFv */
void daE_WS_c::mtx_set() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 807E73E0-807E73E4 0000E0 0004+00 0/1 0/0 0/0 .rodata @4632 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4632 = 15.0f;
-COMPILER_STRIP_GATE(0x807E73E0, &lit_4632);
-#pragma pop
-
-/* 807E73E4-807E73E8 0000E4 0004+00 0/1 0/0 0/0 .rodata @4633 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4633 = 90.0f;
-COMPILER_STRIP_GATE(0x807E73E4, &lit_4633);
-#pragma pop
-
-/* 807E73E8-807E73EC 0000E8 0004+00 0/1 0/0 0/0 .rodata @4634 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4634 = -15.0f;
-COMPILER_STRIP_GATE(0x807E73E8, &lit_4634);
-#pragma pop
-
-/* 807E73EC-807E73F0 0000EC 0004+00 0/1 0/0 0/0 .rodata @4635 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4635 = -10.0f;
-COMPILER_STRIP_GATE(0x807E73EC, &lit_4635);
-#pragma pop
-
-/* 807E73F0-807E73F4 0000F0 0004+00 0/1 0/0 0/0 .rodata @4636 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4636 = 35.0f;
-COMPILER_STRIP_GATE(0x807E73F0, &lit_4636);
-#pragma pop
-
-/* 807E73F4-807E73F8 0000F4 0004+00 0/1 0/0 0/0 .rodata @4637 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4637 = 60.0f;
-COMPILER_STRIP_GATE(0x807E73F4, &lit_4637);
-#pragma pop
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(field_0x66e);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::scaleM(mBodyScale, mBodyScale, mBodyScale);
+
+ J3DModel* model_p = mpModelMorf->getModel();
+ model_p->setBaseTRMtx(mDoMtx_stack_c::get());
+ mpModelMorf->modelCalc();
+}
/* 807E5AAC-807E5C0C 00218C 0160+00 1/1 0/0 0/0 .text cc_set__8daE_WS_cFv */
void daE_WS_c::cc_set() {
- // NONMATCHING
+ cXyz mae;
+ cXyz ato;
+ J3DModel* model_p = mpModelMorf->getModel();
+
+ mDoMtx_stack_c::YrotS(field_0x668.y);
+ mDoMtx_stack_c::XrotM(field_0x668.x);
+ mae.set(0.0f, 15.0f + nREG_F(10), 0.0f);
+ mDoMtx_stack_c::multVec(&mae, &ato);
+ attention_info.position = current.pos + ato;
+ attention_info.position.y += 90.0f * mBodyScale;
+
+ MTXCopy(model_p->getAnmMtx(1), mDoMtx_stack_c::get());
+ mae.set(-15.0f + nREG_F(5), -10.0f + nREG_F(6), nREG_F(7));
+ mDoMtx_stack_c::multVec(&mae, &eyePos);
+
+ mCcSph.SetC(eyePos);
+ mCcSph.SetR(35.0f);
+ dComIfG_Ccsp()->Set(&mCcSph);
+
+ mCcBokkuriSph.SetC(eyePos);
+ mCcBokkuriSph.SetR(60.0f);
+ dComIfG_Ccsp()->Set(&mCcBokkuriSph);
}
/* 807E5C0C-807E5CB8 0022EC 00AC+00 1/1 0/0 0/0 .text execute__8daE_WS_cFv */
-void daE_WS_c::execute() {
- // NONMATCHING
+int daE_WS_c::execute() {
+ if (field_0x68c != 0) {
+ field_0x68c--;
+ }
+
+ if (mInvulnerabilityTimer != 0) {
+ mInvulnerabilityTimer--;
+ }
+
+ action();
+ mtx_set();
+ cc_set();
+
+ cXyz effpos(current.pos);
+ cXyz effsize(0.5f, 0.5f, 0.5f);
+ setMidnaBindEffect(this, &mSound, &effpos, &effsize);
+ return 1;
}
/* 807E5CB8-807E5CD8 002398 0020+00 1/0 0/0 0/0 .text daE_WS_Execute__FP8daE_WS_c */
-static void daE_WS_Execute(daE_WS_c* param_0) {
- // NONMATCHING
+static int daE_WS_Execute(daE_WS_c* a_this) {
+ return a_this->execute();
}
/* 807E5CD8-807E5F70 0023B8 0298+00 1/1 0/0 0/0 .text checkInitialWall__8daE_WS_cFv */
void daE_WS_c::checkInitialWall() {
- // NONMATCHING
-}
+ cXyz endpos;
+ cXyz offset(0.0f, 0.0f, 200.0f);
+ dBgS_LinChk linchk;
-/* 807E5F70-807E5FB8 002650 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */
-// cM3dGPla::~cM3dGPla() {
-extern "C" void __dt__8cM3dGPlaFv() {
- // NONMATCHING
-}
+ for (int i = 0; i < 4; i++) {
+ cLib_offsetPos(&endpos, &current.pos, (shape_angle.y + (i << 14)), &offset);
+ linchk.Set(&current.pos, &endpos, NULL);
-/* ############################################################################################## */
-/* 807E73F8-807E73FC 0000F8 0004+00 0/1 0/0 0/0 .rodata @4908 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4908 = -40.0f;
-COMPILER_STRIP_GATE(0x807E73F8, &lit_4908);
-#pragma pop
+ if (dComIfG_Bgsp().LineCross(&linchk)) {
+ if (field_0x691 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
+ return;
+ }
-/* 807E5FB8-807E63F8 002698 0440+00 3/3 0/0 0/0 .text checkBeforeBg__8daE_WS_cFs */
-void daE_WS_c::checkBeforeBg(s16 param_0) {
- // NONMATCHING
-}
+ current.pos = linchk.GetCross();
-/* ############################################################################################## */
-/* 807E73FC-807E7400 0000FC 0004+00 0/1 0/0 0/0 .rodata @4989 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4989 = -150.0f;
-COMPILER_STRIP_GATE(0x807E73FC, &lit_4989);
-#pragma pop
+ cM3dGPla tri;
+ dComIfG_Bgsp().GetTriPla(linchk, &tri);
-/* 807E63F8-807E66AC 002AD8 02B4+00 1/1 0/0 0/0 .text checkWall__8daE_WS_cFv */
-void daE_WS_c::checkWall() {
- // NONMATCHING
+ cXyz* tri_np = tri.GetNP();
+ field_0x668.y = cM_atan2s(tri_np->x, tri_np->z);
+ field_0x668.x = cM_atan2s(tri_np->absXZ(), tri_np->y);
+ field_0x66e = field_0x668;
+ return;
+ }
+ }
}
-/* 807E66AC-807E66B4 002D8C 0008+00 1/0 0/0 0/0 .text daE_WS_IsDelete__FP8daE_WS_c */
-static bool daE_WS_IsDelete(daE_WS_c* param_0) {
- return true;
+/* 807E5FB8-807E63F8 002698 0440+00 3/3 0/0 0/0 .text checkBeforeBg__8daE_WS_cFs */
+bool daE_WS_c::checkBeforeBg(s16 i_angle) {
+ dBgS_LinChk linchk;
+ cXyz sp68;
+ cXyz sp5C;
+ cXyz endpos;
+ cXyz startpos;
+
+ if (!speedF) {
+ return false;
+ }
+
+ mDoMtx_stack_c::YrotS(field_0x668.y);
+ mDoMtx_stack_c::XrotM(field_0x668.x);
+ mDoMtx_stack_c::YrotM(i_angle);
+ sp68.set(0.0f, 50.0f * mBodyScale, 0.0f);
+ mDoMtx_stack_c::multVec(&sp68, &startpos);
+ startpos += current.pos;
+
+ mDoMtx_stack_c::YrotS(field_0x668.y);
+ mDoMtx_stack_c::XrotM(field_0x668.x);
+ mDoMtx_stack_c::YrotM(i_angle);
+ sp68.set(0.0f, 0.0f, 50.0f * mBodyScale);
+ mDoMtx_stack_c::multVec(&sp68, &sp5C);
+
+ sp68.set(sp5C.x, 0.0f, sp5C.z);
+ endpos = startpos + sp68;
+
+ linchk.Set(&startpos, &endpos, NULL);
+ if (dComIfG_Bgsp().LineCross(&linchk)) {
+ return 1;
+ }
+
+ if (sp5C.y > 0.0f) {
+ sp68.set(0.0f, 50.0f * mBodyScale, 0.0f);
+ } else {
+ sp68.set(0.0f, -l_HIO.dist_to_ground, 0.0f);
+ }
+
+ endpos = startpos + sp68;
+ linchk.Set(&startpos, &endpos, NULL);
+ if (dComIfG_Bgsp().LineCross(&linchk)) {
+ return true;
+ }
+
+ mDoMtx_stack_c::YrotS(field_0x668.y);
+ mDoMtx_stack_c::XrotM(field_0x668.x);
+ mDoMtx_stack_c::YrotM(i_angle);
+ sp68.set(0.0f, 50.0f * mBodyScale, 100.0f * mBodyScale);
+ mDoMtx_stack_c::multVec(&sp68, &sp5C);
+ startpos = current.pos + sp5C;
+
+ cXyz sp38(0.0f, -40.0f * mBodyScale, 100.0f * mBodyScale);
+ mDoMtx_stack_c::multVec(&sp38, &sp5C);
+ endpos = current.pos + sp5C;
+
+ linchk.Set(&startpos, &endpos, NULL);
+ if (!dComIfG_Bgsp().LineCross(&linchk)) {
+ return true;
+ }
+
+ if (field_0x691 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
+ return true;
+ }
+
+ cM3dGPla tri;
+ dComIfG_Bgsp().GetTriPla(linchk, &tri);
+
+ cXyz* tri_np = tri.GetNP();
+ cLib_chaseAngleS(&field_0x66e.y, cM_atan2s(tri_np->x, tri_np->z), 0x100);
+ checkWall();
+ return false;
}
-/* 807E66B4-807E6728 002D94 0074+00 1/1 0/0 0/0 .text _delete__8daE_WS_cFv */
-void daE_WS_c::_delete() {
- // NONMATCHING
-}
+/* 807E63F8-807E66AC 002AD8 02B4+00 1/1 0/0 0/0 .text checkWall__8daE_WS_cFv */
+bool daE_WS_c::checkWall() {
+ cXyz startpos;
+ cXyz endpos;
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(field_0x66e);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
-/* 807E6728-807E6748 002E08 0020+00 1/0 0/0 0/0 .text daE_WS_Delete__FP8daE_WS_c */
-static void daE_WS_Delete(daE_WS_c* param_0) {
- // NONMATCHING
-}
+ mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f);
+ mDoMtx_stack_c::multVecZero(&startpos);
-/* 807E6748-807E6840 002E28 00F8+00 1/1 0/0 0/0 .text CreateHeap__8daE_WS_cFv */
-void daE_WS_c::CreateHeap() {
- // NONMATCHING
-}
+ mDoMtx_stack_c::transM(0.0f, -150.0f, 0.0f);
+ mDoMtx_stack_c::multVecZero(&endpos);
-/* 807E6840-807E6860 002F20 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
-static void useHeapInit(fopAc_ac_c* param_0) {
- // NONMATCHING
-}
+ dBgS_LinChk linchk;
+ linchk.Set(&startpos, &endpos, NULL);
+ if (dComIfG_Bgsp().LineCross(&linchk)) {
+ if (field_0x691 == 0 && dComIfG_Bgsp().GetWallCode(linchk) != 1 && dComIfG_Bgsp().GetWallCode(linchk) != 4) {
+ return false;
+ }
-/* ############################################################################################## */
-/* 807E7400-807E7404 000100 0004+00 0/1 0/0 0/0 .rodata @5154 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5154 = -200.0f;
-COMPILER_STRIP_GATE(0x807E7400, &lit_5154);
-#pragma pop
+ current.pos = linchk.GetCross();
+
+ cM3dGPla tri;
+ dComIfG_Bgsp().GetTriPla(linchk, &tri);
-/* 807E7404-807E7404 000104 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_807E7409 = "E_ws";
-#pragma pop
+ cXyz* tri_np = tri.GetNP();
+ field_0x668.y = cM_atan2s(tri_np->x, tri_np->z);
+ field_0x668.x = cM_atan2s(tri_np->absXZ(), tri_np->y);
+ return true;
+ }
-/* 807E6860-807E6C10 002F40 03B0+00 1/1 0/0 0/0 .text create__8daE_WS_cFv */
-void daE_WS_c::create() {
- // NONMATCHING
+ return false;
}
-/* 807E6C10-807E6C58 0032F0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
+/* 807E66AC-807E66B4 002D8C 0008+00 1/0 0/0 0/0 .text daE_WS_IsDelete__FP8daE_WS_c */
+static int daE_WS_IsDelete(daE_WS_c* a_this) {
+ return 1;
}
-/* 807E6C58-807E6CA0 003338 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
+/* 807E66B4-807E6728 002D94 0074+00 1/1 0/0 0/0 .text _delete__8daE_WS_cFv */
+int daE_WS_c::_delete() {
+ dComIfG_resDelete(&mPhase, "E_WS");
-/* 807E6CA0-807E6CFC 003380 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
-}
+ if (mHIOInit) {
+ l_HIOInit = false;
+ mDoHIO_DELETE_CHILD(l_HIO.id);
+ }
-/* 807E6CFC-807E6D6C 0033DC 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
-// dBgS_ObjAcch::~dBgS_ObjAcch() {
-extern "C" void __dt__12dBgS_ObjAcchFv() {
- // NONMATCHING
-}
+ if (heap != NULL) {
+ mSound.deleteObject();
+ }
-/* 807E6D6C-807E6DDC 00344C 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */
-// dBgS_AcchCir::~dBgS_AcchCir() {
-extern "C" void __dt__12dBgS_AcchCirFv() {
- // NONMATCHING
+ return 1;
}
-/* 807E6DDC-807E6DFC 0034BC 0020+00 1/0 0/0 0/0 .text daE_WS_Create__FP8daE_WS_c */
-static void daE_WS_Create(daE_WS_c* param_0) {
- // NONMATCHING
+/* 807E6728-807E6748 002E08 0020+00 1/0 0/0 0/0 .text daE_WS_Delete__FP8daE_WS_c */
+static int daE_WS_Delete(daE_WS_c* a_this) {
+ return a_this->_delete();
}
-/* 807E6DFC-807E6E44 0034DC 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-}
+/* 807E6748-807E6840 002E28 00F8+00 1/1 0/0 0/0 .text CreateHeap__8daE_WS_cFv */
+int daE_WS_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_WS", 0xD);
+ JUT_ASSERT(1401, modelData != 0);
-/* 807E6E44-807E6E8C 003524 0048+00 2/1 0/0 0/0 .text __dt__12daE_WS_HIO_cFv */
-daE_WS_HIO_c::~daE_WS_HIO_c() {
- // NONMATCHING
-}
+ mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_WS", 7), 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084);
+ if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) {
+ return 0;
+ }
-/* 807E6E8C-807E6EC8 00356C 003C+00 0/0 1/0 0/0 .text __sinit_d_a_e_ws_cpp */
-void __sinit_d_a_e_ws_cpp() {
- // NONMATCHING
+ return 1;
}
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x807E6E8C, __sinit_d_a_e_ws_cpp);
-#pragma pop
+/* 807E6840-807E6860 002F20 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
+static int useHeapInit(fopAc_ac_c* i_this) {
+ return ((daE_WS_c*)i_this)->CreateHeap();
+}
-/* 807E6EC8-807E6ED0 0035A8 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_807E6EC8() {
- // NONMATCHING
+/* 807E6860-807E6C10 002F40 03B0+00 1/1 0/0 0/0 .text create__8daE_WS_cFv */
+int daE_WS_c::create() {
+ fopAcM_SetupActor(this, daE_WS_c);
+
+ int phase_state = dComIfG_resLoad(&mPhase, "E_WS");
+ if (phase_state == cPhs_COMPLEATE_e) {
+ OS_REPORT("E_WS PARAM %x\n", fopAcM_GetParam(this));
+
+ mSwbit = (fopAcM_GetParam(this) & 0xFF00) >> 8;
+ if (mSwbit != 0xFF && dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
+ OS_REPORT("E_WS やられ後なので再セットしません\n");
+ return cPhs_ERROR_e;
+ }
+
+ if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1B60)) {
+ return cPhs_ERROR_e;
+ }
+
+ if (!l_HIOInit) {
+ l_HIOInit = true;
+ mHIOInit = true;
+ l_HIO.id = mDoHIO_CREATE_CHILD("スタルウォール", &l_HIO);
+ }
+
+ field_0x691 = fopAcM_GetParam(this);
+ if (field_0x691 == 0xFF) {
+ field_0x691 = 0;
+ }
+
+ if (((fopAcM_GetParam(this) & 0xFF0000) >> 0x10) == 1) {
+ mBodyScale = 0.5f;
+ } else {
+ mBodyScale = 0.8f;
+ }
+
+ attention_info.flags = 4;
+ fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx());
+ fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f);
+ fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f);
+
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL);
+ mAcchCir.SetWall(0.0f, 0.0f);
+
+ health = 10;
+ field_0x560 = 10;
+
+ mCcStts.Init(100, 0, this);
+ mCcSph.Set(cc_ws_src);
+ mCcSph.SetStts(&mCcStts);
+ mCcBokkuriSph.Set(cc_bokkuri_src);
+ mCcBokkuriSph.SetStts(&mCcStts);
+
+ mSound.init(&current.pos, &eyePos, 3, 1);
+ mSound.setEnemyName("E_ws");
+
+ mAtInfo.mpSound = &mSound;
+ mAtInfo.mPowerType = 1;
+
+ setActionMode(ACTION_WAIT_e);
+ checkInitialWall();
+
+ field_0x65c = current.pos;
+ speed.y = 0.0f;
+ gravity = 0.0f;
+ mtx_set();
+ }
+
+ return phase_state;
}
-/* 807E6ED0-807E6ED8 0035B0 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_807E6ED0() {
- // NONMATCHING
+/* 807E6DDC-807E6DFC 0034BC 0020+00 1/0 0/0 0/0 .text daE_WS_Create__FP8daE_WS_c */
+static int daE_WS_Create(daE_WS_c* a_this) {
+ return a_this->create();
}
-/* 807E7404-807E7404 000104 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 807E74E4-807E7504 -00001 0020+00 1/0 0/0 0/0 .data l_daE_WS_Method */
+static actor_method_class l_daE_WS_Method = {
+ (process_method_func)daE_WS_Create,
+ (process_method_func)daE_WS_Delete,
+ (process_method_func)daE_WS_Execute,
+ (process_method_func)daE_WS_IsDelete,
+ (process_method_func)daE_WS_Draw,
+};
+
+/* 807E7504-807E7534 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_WS */
+extern actor_process_profile_definition g_profile_E_WS = {
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_E_WS, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daE_WS_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 200, // mPriority
+ &l_daE_WS_Method, // sub_method
+ 0x00050100, // mStatus
+ fopAc_ENEMY_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};