d_a_horse debug improvements (#3127)

This commit is contained in:
Max Roncace
2026-03-11 06:16:11 -04:00
committed by GitHub
parent d27c7c4c29
commit 01654335d4
4 changed files with 273 additions and 93 deletions
+58 -3
View File
@@ -300,7 +300,9 @@ m__14daHorse_hio_c0 = .rodata:0x00000060; // type:object size:0x124 scope:global
@LOCAL@setReinPos__13daHorseRein_cFi@reinGravity = .rodata:0x000003E0; // type:object size:0x4 scope:local
cNullVec__6Z2Calc = .rodata:0x000003E4; // type:object size:0xC scope:global
@46916 = .rodata:0x000003F0; // type:object size:0x4 scope:local
lbl_253_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x18
@LOCAL@signaling_NaN__Q23std17numeric_limits<d>Fv@x = .rodata:0x000003F8; // type:object size:0x8 align:8 data:float
@LOCAL@signaling_NaN_2__Q23std17numeric_limits<d>Fv@x = .rodata:0x00000400; // type:object size:0x8 align:8 data:float
@LOCAL@signaling_NaN__Q23std17numeric_limits<f>Fv@x = .rodata:0x00000408; // type:object size:0x4 align:4 data:float
l_autoUpHeight = .data:0x00000000; // type:object size:0x4 scope:global
@129761 = .data:0x00000004; // type:object size:0x9 scope:local
@129764 = .data:0x00000010; // type:object size:0xB scope:local
@@ -462,23 +464,76 @@ __vt__18mDoExt_3DlineMat_c = .data:0x00000890; // type:object size:0x14 scope:gl
@134169 = .data:0x00000B38; // type:object size:0xC scope:local
@134170 = .data:0x00000B7C; // type:object size:0xB scope:local data:string
@134171 = .data:0x00000B9C; // type:object size:0xD scope:local data:string
lbl_253_data_BA9 = .data:0x00000BA9; // type:object size:0x263
@STRING@getActor__7dDemo_cFUc@2 = .data:0x00000BB8; // type:object size:0x5 scope:local data:string
@STRING@getActor__7dDemo_cFUc@1 = .data:0x00000BC0; // type:object size:0x9 scope:local data:string
@STRING@getActor__7dDemo_cFUc@0 = .data:0x00000BCC; // type:object size:0xE scope:local data:string
@STRING@getActor__7dDemo_cFUc = .data:0x00000BDC; // type:object size:0x9 scope:local data:string
@STRING@getJointNodePointer__12J3DJointTreeCFUs@2 = .data:0x00000BE8; // type:object size:0x5 scope:local data:string
@STRING@getJointNodePointer__12J3DJointTreeCFUs@1 = .data:0x00000BF0; // type:object size:0xF scope:local data:string
@STRING@getJointNodePointer__12J3DJointTreeCFUs@0 = .data:0x00000C00; // type:object size:0x14 scope:local data:string
@STRING@getJointNodePointer__12J3DJointTreeCFUs = .data:0x00000C14; // type:object size:0xF scope:local data:string
@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs@2 = .data:0x00000C24; // type:object size:0x5 scope:local data:string
@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs@1 = .data:0x00000C2C; // type:object size:0x14 scope:local data:string
@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs@0 = .data:0x00000C40; // type:object size:0x14 scope:local data:string
@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs = .data:0x00000C54; // type:object size:0x14 scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform@2 = .data:0x00000C68; // type:object size:0x5 scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform@1 = .data:0x00000C70; // type:object size:0xB scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform@0 = .data:0x00000C7C; // type:object size:0x1B scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform = .data:0x00000C98; // type:object size:0xB scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFv@2 = .data:0x00000CA4; // type:object size:0x5 scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFv@1 = .data:0x00000CAC; // type:object size:0xB scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFv@0 = .data:0x00000CB8; // type:object size:0x1B scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFv = .data:0x00000CD4; // type:object size:0xB scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform@2 = .data:0x00000CE0; // type:object size:0x5 scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform@1 = .data:0x00000CE8; // type:object size:0xB scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform@0 = .data:0x00000CF4; // type:object size:0x1B scope:local data:string
@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform = .data:0x00000D10; // type:object size:0xB scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFUc@2 = .data:0x00000D1C; // type:object size:0x5 scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFUc@1 = .data:0x00000D24; // type:object size:0xB scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFUc@0 = .data:0x00000D30; // type:object size:0x1B scope:local data:string
@STRING@getAnmTransform__10J3DMtxCalcFUc = .data:0x00000D4C; // type:object size:0xB scope:local data:string
@STRING@setWeight__10J3DMtxCalcFUcf@2 = .data:0x00000D58; // type:object size:0x5 scope:local data:string
@STRING@setWeight__10J3DMtxCalcFUcf@1 = .data:0x00000D60; // type:object size:0xB scope:local data:string
@STRING@setWeight__10J3DMtxCalcFUcf@0 = .data:0x00000D6C; // type:object size:0x1B scope:local data:string
@STRING@setWeight__10J3DMtxCalcFUcf = .data:0x00000D88; // type:object size:0xB scope:local data:string
@STRING@getWeight__10J3DMtxCalcCFUc@2 = .data:0x00000D94; // type:object size:0x5 scope:local data:string
@STRING@getWeight__10J3DMtxCalcCFUc@1 = .data:0x00000D9C; // type:object size:0xB scope:local data:string
@STRING@getWeight__10J3DMtxCalcCFUc@0 = .data:0x00000DA8; // type:object size:0x1B scope:local data:string
@STRING@getWeight__10J3DMtxCalcCFUc = .data:0x00000DC4; // type:object size:0xB scope:local data:string
@STRING@getJoint__10J3DMtxCalcFv@2 = .data:0x00000DD0; // type:object size:0x5 scope:local data:string
@STRING@getJoint__10J3DMtxCalcFv@1 = .data:0x00000DD8; // type:object size:0xB scope:local data:string
@STRING@getJoint__10J3DMtxCalcFv@0 = .data:0x00000DE4; // type:object size:0x16 scope:local data:string
@STRING@getJoint__10J3DMtxCalcFv = .data:0x00000DFC; // type:object size:0xB scope:local data:string
@STRING@showAssert__12JUTAssertionFUlPCciPCc = .data:0x00000E08; // type:object size:0x3 scope:local data:string
...bss.0 = .bss:0x00000000; // type:label scope:local
l_debugMode = .bss:0x00000000; // type:object size:0x4 scope:global
l_frontFootOffset = .bss:0x00000004; // type:object size:0xC scope:global
l_backFootOffset = .bss:0x00000010; // type:object size:0xC scope:global
lbl_253_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte
@GUARD@setBodyPart__9daHorse_cFv@localEyePos = .bss:0x0000001C; // type:object size:0x1 data:byte
@LOCAL@setBodyPart__9daHorse_cFv@localEyePos = .bss:0x00000020; // type:object size:0xC scope:local
@GUARD@setEffect__9daHorse_cFv@runScale = .bss:0x0000002C; // type:object size:0x1 scope:local data:byte
@LOCAL@setEffect__9daHorse_cFv@runScale = .bss:0x00000030; // type:object size:0xC scope:local
@GUARD@setEffect__9daHorse_cFv@landScale@0 = .bss:0x0000003C; // type:object size:0x1 scope:local data:byte
@LOCAL@setEffect__9daHorse_cFv@landScale@0 = .bss:0x00000040; // type:object size:0xC scope:local
@GUARD@setEffect__9daHorse_cFv@grassRunScale@1 = .bss:0x0000004C; // type:object size:0x1 scope:local data:byte
@LOCAL@setEffect__9daHorse_cFv@grassRunScale@1 = .bss:0x00000050; // type:object size:0xC scope:local
@GUARD@setEffect__9daHorse_cFv@waterDirection@2 = .bss:0x0000005C; // type:object size:0x1 scope:local data:byte
@LOCAL@setEffect__9daHorse_cFv@waterDirection@2 = .bss:0x00000060; // type:object size:0xC scope:local
@GUARD@setReinPosMoveInit__9daHorse_cFi@reinLeftStart = .bss:0x0000006C; // type:object size:0x1 scope:local data:byte
@LOCAL@setReinPosMoveInit__9daHorse_cFi@reinLeftStart = .bss:0x00000070; // type:object size:0xC scope:local
@GUARD@setReinPosMoveInit__9daHorse_cFi@reinRightStart@0 = .bss:0x0000007C; // type:object size:0x1 scope:local data:byte
@LOCAL@setReinPosMoveInit__9daHorse_cFi@reinRightStart@0 = .bss:0x00000080; // type:object size:0xC scope:local
@GUARD@setReinPosMoveInit__9daHorse_cFi@localNeckLeft@1 = .bss:0x0000008C; // type:object size:0x1 scope:local data:byte
@LOCAL@setReinPosMoveInit__9daHorse_cFi@localNeckLeft@1 = .bss:0x00000090; // type:object size:0xC scope:local
@GUARD@setReinPosMoveInit__9daHorse_cFi@localNeckRight@2 = .bss:0x0000009C; // type:object size:0x1 scope:local data:byte
@LOCAL@setReinPosMoveInit__9daHorse_cFi@localNeckRight@2 = .bss:0x000000A0; // type:object size:0xC scope:local
@GUARD@setReinPosNormalSubstance__9daHorse_cFv@saddleLeft = .bss:0x000000AC; // type:object size:0x1 scope:local data:byte
@LOCAL@setReinPosNormalSubstance__9daHorse_cFv@saddleLeft = .bss:0x000000B0; // type:object size:0xC scope:local
@GUARD@setReinPosNormalSubstance__9daHorse_cFv@saddleRight@0 = .bss:0x000000BC; // type:object size:0x1 scope:local data:byte
@LOCAL@setReinPosNormalSubstance__9daHorse_cFv@saddleRight@0 = .bss:0x000000C0; // type:object size:0xC scope:local
@GUARD@bgCheck__9daHorse_cFv@localCenterPos = .bss:0x000000CC; // type:object size:0x1 scope:local data:byte
@LOCAL@bgCheck__9daHorse_cFv@localCenterPos = .bss:0x000000D0; // type:object size:0xC scope:local
@GUARD@bgCheck__9daHorse_cFv@localFrontPos@0 = .bss:0x000000DC; // type:object size:0x1 scope:local data:byte
@LOCAL@bgCheck__9daHorse_cFv@localFrontPos@0 = .bss:0x000000E0; // type:object size:0xC scope:local
@GUARD@bgCheck__9daHorse_cFv@localBackPos@1 = .bss:0x000000EC; // type:object size:0x1 scope:local data:byte
@LOCAL@bgCheck__9daHorse_cFv@localBackPos@1 = .bss:0x000000F0; // type:object size:0xC scope:local
+2 -2
View File
@@ -539,10 +539,10 @@ public:
/* 0x0C4 */ f32 boar_jump_height;
/* 0x0C8 */ f32 water_depth_limit;
/* 0x0CC */ f32 enemy_search_range;
/* 0x0D0 */ f32 m0D0;
/* 0x0D0 */ f32 climb_step;
/* 0x0D4 */ f32 floor_angle_limit;
/* 0x0D8 */ f32 dash_anm_speed;
/* 0x0DC */ f32 field_0xdc;
/* 0x0DC */ f32 min_walk_rate;
/* 0x0E0 */ f32 walk_min_speed;
/* 0x0E4 */ f32 cliff_jump_anm_speed;
/* 0x0E8 */ f32 cliff_jump_start_frame;
+2 -5
View File
@@ -393,12 +393,9 @@ void daAlink_c::setCrawlMoveAngle() {
sp2C.set(sp20.x - sp38.x, dComIfG_Bgsp().GroundCross(&mLinkGndChk) - sp38.y,
sp20.z - sp38.z);
#else
// Likely fakematch:
// Fakematch:
// dBgS::GroundCross is implicitly inlined to cBgS::GroundCross, but for some
// reason here that breaks instruction ordering. This is the only place in the code
// where it causes issues.
// It _is_ possible that this is caused by an actual version difference in Shield, given
// that the Wii versions need the cast but Shield prod does not.
// reason here that breaks instruction ordering. See also daHorse_c::checkHorseNoMove.
sp2C.set(sp20.x - sp38.x, ((cBgS&)dComIfG_Bgsp()).GroundCross(&mLinkGndChk) - sp38.y,
sp20.z - sp38.z);
#endif
+211 -83
View File
@@ -51,11 +51,9 @@
#define ANM_HS_WALK_FAST 34
#define ANM_HS_WALK_SLOW 35
static void strippedFunc()
{
extern void F(f32*);
f32 v[3] = {0.0f};
F(v);
static f32* strippedFunc() {
f32 v[3] = {};
return v;
}
static char const l_arcName[] = "Horse";
@@ -66,6 +64,94 @@ const u16 daHorse_c::m_footJointTable[] = {
const f32 daHorse_c::m_callLimitDistance2 = 640000.0f;
static f32 l_autoUpHeight = 50.0f;
#if DEBUG
void daHorse_hio_c::genMessage(JORMContext* ctx) {
ctx->genSlider("最高速度", &m.max_speed, 0.0f, 100.0f);
ctx->genSlider("待機A速度", &m.wait_anm_speed, 0.0f, 10.0f);
ctx->genSlider("歩きA速度", &m.walk_anm_speed, 0.0f, 10.0f);
ctx->genSlider("速歩A速度", &m.fast_walk_anm_speed, 0.0f, 10.0f);
ctx->genSlider("走りA速度", &m.run_anm_speed, 0.0f, 10.0f);
ctx->genSlider("速走A速度", &m.fast_run_anm_speed, 0.0, 10.0f);
ctx->genSlider("後歩A速度", &m.backwalk_anm_speed, 0.0f, 10.0f);
ctx->genSlider("待機→歩き率", &m.wait_to_walk_rate, 0.0f, 1.0f);
ctx->genSlider("歩き→速歩率", &m.walk_to_fastwalk_rate, 0.0f, 1.0f);
ctx->genSlider("速歩→走り率", &m.fastwalk_to_run_rate, 0.0f, 1.0f);
ctx->genSlider("走り→速走率", &m.run_to_fastrun_rate, 0.0f, 1.1f);
ctx->genSlider("歩き最低合成率", &m.min_walk_rate, 0.0f, 1.0f);
ctx->genSlider("歩き最低速度", &m.walk_min_speed, 0.0f, 10.0f);
ctx->genSlider("歩き走り補間", &m.walk_run_interpolation, 0.0f, 30.0f);
ctx->genSlider("ダッシュA速度", &m.dash_anm_speed, 0.0f, 10.0f);
ctx->genSlider("旋回最大", &m.max_turn, 0, 0x7fff);
ctx->genSlider("旋回最小", &m.min_turn, 0, 0x7fff);
ctx->genSlider("加速", &m.acceleration, 0.0f, 10.0f);
ctx->genSlider("減速", &m.deceleration, 0.0f, 10.0f);
ctx->genSlider("停止減速", &m.stopping_deceleration, 0.0f, 10.0f);
ctx->genSlider("後退最大速度", &m.max_backward_speed, 0.0f, 100.0f);
ctx->genSlider("後退加速最大", &m.max_backward_acceleration, 0.0f, 10.0f);
ctx->genSlider("後退待機→歩き率", &m.backward_idle_to_walk_rate, 0.0f, 1.1f);
ctx->genSlider("急停止A速度", &m.faststop_anm_speed, 0.0f, 10.0f);
ctx->genSlider("急停止補間", &m.faststop_interpolation, 0.0f, 10.0f);
ctx->genSlider("急停止CF", &m.fast_stop_cancel_frame, 0.0f, 54.0f);
ctx->genSlider("急停止立A速度", &m.faststop_stand_anm_speed, 0.0f, 10.0f);
ctx->genSlider("急停止立CF", &m.faststop_stand_cancel_frame, 0.0f, 130.0f);
ctx->genSlider("急停止減速(遅)", &m.faststop_deceleration_slow, 0.0f, 20.0f);
ctx->genSlider("急停止減速(速)", &m.faststop_deceleration, 0.0f, 20.0f);
ctx->genSlider("立A速度", &m.stand_anm_speed, 0.0f, 10.0f);
ctx->genSlider("立CF", &m.stand_cancel_frame, 0.0f, 120.0f);
ctx->genSlider("立補間", &m.stand_interpolation, 0.0f, 10.0f);
ctx->genSlider("鞭加速時間", &m.lash_acceleration_time, 0, 0x7fff);
ctx->genSlider("鞭追加速度", &m.add_lash_speed, 0.0f, 100.0f);
ctx->genSlider("鞭加速度", &m.lash_acceleration, 0.0f, 20.0f);
ctx->genSlider("鞭最低速度", &m.min_lash_speed, 0.0f, 100.0f);
ctx->genSlider("ジャンプA速度", &m.jump_anm_speed, 0.0f, 10.0f);
ctx->genSlider("ジャンプ開始F", &m.jump_start_frame, 0.0f, 7.0f);
ctx->genSlider("ジャンプ終了F", &m.jump_end_frame, 0, 7);
ctx->genSlider("ジャンプ補間", &m.jump_interpolation, 0.0f, 10.0f);
ctx->genSlider("空中開始F", &m.air_start_frame, 0.0f, 5.0f);
ctx->genSlider("空中終了F", &m.air_end_frame, 6, 14);
ctx->genSlider("空中補間", &m.air_interpolation, 0.0f, 20.0f);
ctx->genSlider("着地A速度", &m.land_anm_speed, 0.0f, 10.0f);
ctx->genSlider("着地開始F", &m.land_start_frame, 0.0f, 8.0f);
ctx->genSlider("着地終了F", &m.land_end_frame, 0, 8);
ctx->genSlider("着地CF", &m.land_cancel_frame, 0.0f, 9.0f);
ctx->genSlider("着地補間", &m.land_interpolation, 0.0f, 10.0f);
ctx->genSlider("拍車回復時間", &m.spur_recovery_time, 0, 0x7fff);
ctx->genSlider("全拍車回復時間", &m.full_spur_recovery_time, 0, 0x7fff);
ctx->genSlider("連続拍車回復時間", &m.continuous_spur_recovery_time, 0, 0x7fff);
ctx->genSlider("猪ジャンプ水平", &m.boar_jump_horizontal, 0.0f, 1000.0f);
ctx->genSlider("猪ジャンプ高さ", &m.boar_jump_height, 0.0f, 1000.0f);
ctx->genSlider("崖立ち上がり速度", &m.cliff_rise_rate, 0.0f, 100.0f);
ctx->genSlider("限界床角度", &m.floor_angle_limit, 0.0f, 90.0f);
ctx->genSlider("限界水深", &m.water_depth_limit, 0.0f, 200.0f);
ctx->genSlider("敵検索範囲", &m.enemy_search_range, 0.0f, 2000.0f);
ctx->genSlider("段差登り", &m.climb_step, 0.0f, 100.0f);
ctx->genSlider("崖ジャンプ水平", &m.cliff_jump_horizontal, 0.0f, 1000.0f);
ctx->genSlider("崖ジャンプ垂直", &m.cliff_jump_vertical, 0.0f, 1000.0f);
ctx->genSlider("ジャンプA速度(崖)", &m.cliff_jump_anm_speed, 0.0f, 10.0f);
ctx->genSlider("ジャンプ開始F(崖)", &m.cliff_jump_start_frame, 0.0f, 7.0f);
ctx->genSlider("ジャンプ終了F(崖)", &m.cliff_jump_end_frame, 0, 7);
ctx->genSlider("ジャンプ補間(崖)", &m.cliff_jump_interpolation, 0.0f, 10.0f);
ctx->genSlider("空中A速度(崖)", &m.cliff_air_anm_speed, 0.0f, 10.0f);
ctx->genSlider("空中開始F(崖)", &m.cliff_air_start_frame, 0.0f, 14.0f);
ctx->genSlider("空中終了F(崖)", &m.cliff_air_end_frame, 0, 14);
ctx->genSlider("空中補間(崖)", &m.cliff_air_interpolation, 0.0f, 20.0f);
ctx->genSlider("着地A速度(崖)", &m.cliff_land_anm_speed, 0.0f, 10.0f);
ctx->genSlider("着地開始F(崖)", &m.cliff_land_start_frame, 0.0f, 8.0f);
ctx->genSlider("着地終了F(崖)", &m.cliff_land_end_frame, 0, 8);
ctx->genSlider("着地CF(崖)", &m.cliff_land_cancel_frame, 0.0f, 9.0f);
ctx->genSlider("着地補間(崖)", &m.cliff_land_interpolation, 0.0f, 10.0f);
ctx->genSlider("ジャンプ最低時間", &m.min_jump_time, 1, 30);
ctx->genLabel("カカリコ村内", 0x4000001);
ctx->genSlider("最高速度", &m.kakariko_max_speed, 0.0f, 100.0f);
ctx->genSlider("走りA速度", &m.kakariko_run_anm_speed, 0.0f, 10.0f);
ctx->genSlider("速走A速度", &m.kakariko_fastrun_anm_speed, 0.0f, 10.0f);
ctx->genSlider("鞭加速時間", &m.kakariko_lash_acceleration_time, 0, 0x7fff);
ctx->genSlider("鞭追加速度", &m.kakariko_add_lash_speed, 0.0f, 100.0f);
}
#endif
const daHorse_hio_c1 daHorse_hio_c0::m = {
600,
50,
@@ -150,6 +236,14 @@ const daHorse_hio_c1 daHorse_hio_c0::m = {
};
void daHorseRein_c::setReinPos(int param_0) {
static const f32 reinGravity = -4.5f;
static const f32 topPowerRate = 5.5f;
static const f32 reinLength = 5.5f;
static const f32 reinRate = 1.2f;
static const f32 kansei = 0.2f;
static const f32 frontRate = 3.0f;
static const f32 decNeckRate = 20.0f / 17.0f;
cXyz* var_r27 = &field_0x0[0][param_0] + 1;
cXyz spE0 = *field_0x0[0] - *var_r27;
@@ -158,9 +252,9 @@ void daHorseRein_c::setReinPos(int param_0) {
f32 var_f31 = (f32)param_0 / (f32)field_0x8[0];
f32 var_f30 = var_f31 * var_f31;
spE0 *= (1.0f - var_f30) * 3.0f;
spE0 *= (1.0f - var_f30) * frontRate;
spE0.y += -4.5f;
spE0.y += reinGravity;
spE0.x += var_f30 * field_0x10;
spE0.z += var_f30 * field_0x14;
@@ -175,22 +269,22 @@ void daHorseRein_c::setReinPos(int param_0) {
spBC.normalizeZP();
spC8 += spBC * field_0x18;
field_0x18 -= 1.1764706f;
field_0x18 -= decNeckRate;
}
spC8.normalizeZP();
*var_r28 = *var_r27 + (spC8 * 5.5f);
*var_r28 = *var_r27 + (spC8 * reinLength);
spC8 = *var_r28 - *field_0x0[0];
f32 var_f29 = spC8.abs();
f32 var_f28 = (f32)param_0 * 5.5f * 1.2f;
f32 var_f28 = (f32)param_0 * topPowerRate * reinRate;
if (var_f29 > var_f28) {
spC8 *= var_f28 / var_f29;
*var_r28 = ((*field_0x0[0] + spC8) * (1.0f - var_f31)) + (*var_r28 * var_f31);
}
*var_r25 = (*var_r28 - spD4) * 0.2f;
*var_r25 = (*var_r28 - spD4) * kansei;
}
void daHorseRein_c::setReinPosPart(int param_0) {
@@ -213,8 +307,6 @@ void daHorseRein_c::setReinPosPart(int param_0) {
}
}
static f32 l_autoUpHeight = 50.0f;
static dCcD_SrcCyl l_cylSrc = {
{
{0x0, {{AT_TYPE_HORSE, 0x1, 0x12}, {0xd8fbfdff, 0x9}, 0x79}}, // mObj
@@ -1562,7 +1654,7 @@ void daHorse_c::setMoveAnime(f32 i_morf) {
} else {
ratio = var_f31 / m_hio->m.wait_to_walk_rate;
if (m_procID != PROC_WAIT_e && speedF > 0.05f) {
ratio = m_hio->m.field_0xdc + (ratio * (1.0f - m_hio->m.field_0xdc));
ratio = m_hio->m.min_walk_rate + (ratio * (1.0f - m_hio->m.min_walk_rate));
}
setDoubleAnime(ratio, m_hio->m.wait_anm_speed, m_hio->m.walk_anm_speed, ANM_HS_WAIT_01, ANM_HS_WALK_SLOW, i_morf);
}
@@ -1631,7 +1723,7 @@ void daHorse_c::setMoveAnime(f32 i_morf) {
}
}
int daHorse_c::checkHorseNoMove(int param_0) {
int daHorse_c::checkHorseNoMove(BOOL forward) {
cXyz sp50;
cXyz sp44;
@@ -1658,9 +1750,18 @@ int daHorse_c::checkHorseNoMove(int param_0) {
f32 var_f27;
f32 var_f31;
f32 var_f30;
if (param_0 != 0) {
if (checkEndResetStateFlg0(ERFLG0_UNK_200) || (checkStateFlg0(FLG0_UNK_100000) && (m_procID == PROC_MOVE_e || m_procID == PROC_TURN_e || m_procID == PROC_STOP_e) && ((current.pos.z < -33500.0f && abs(shape_angle.y) > 0x4000) || (current.pos.z > -20500.0f && abs(shape_angle.y) < 0x4000)))) {
static const f32 noMoveCresDis = 500.0f;
static const f32 noMoveStopDis = 100.0f;
static const f32 noMoveCresBackDis = 200.0f;
static const f32 checkOffsetY = 200.0f;
if (forward) {
if (checkEndResetStateFlg0(ERFLG0_UNK_200) ||
(checkStateFlg0(FLG0_UNK_100000) &&
(m_procID == PROC_MOVE_e || m_procID == PROC_TURN_e || m_procID == PROC_STOP_e) &&
((current.pos.z < -33500.0f && abs(shape_angle.y) > 0x4000) ||
(current.pos.z > -20500.0f && abs(shape_angle.y) < 0x4000)))) {
return 3;
}
@@ -1672,6 +1773,7 @@ int daHorse_c::checkHorseNoMove(int param_0) {
}
var_f31 *= var_f31;
// not sure if these floats should be/be derived from named constants
var_f31 = 200.0f + (300.0f * var_f31);
var_f29 = cM_ssin(current.angle.y);
var_f28 = cM_scos(current.angle.y);
@@ -1680,15 +1782,15 @@ int daHorse_c::checkHorseNoMove(int param_0) {
} else {
var_f29 = -cM_ssin(current.angle.y);
var_f28 = -cM_scos(current.angle.y);
sp28 = 200.0f * cM_ssin(spA);
var_f27 = 200.0f * cM_scos(spA);
sp28 = noMoveCresBackDis * cM_ssin(spA);
var_f27 = noMoveCresBackDis * cM_scos(spA);
}
daAlink_c* player = daAlink_getAlinkActorClass();
cXyz start(current.pos.x, current.pos.y + m_acchcir[0].GetWallH(), current.pos.z);
if (daAlink_c::getMoveBGActorName(m_acch.m_gnd, 0) == fpcNm_OBJ_BRG_e) {
start.y = 200.0f + current.pos.y;
start.y = checkOffsetY + current.pos.y;
}
cXyz end(start.x + (var_f27 * var_f29), start.y + sp28, start.z + (var_f27 * var_f28));
@@ -1701,6 +1803,7 @@ int daHorse_c::checkHorseNoMove(int param_0) {
// An alternative way to match the instruction order is by changing dBgS::LineCross's return
// type to BOOL while keeping cBgS::LineCross's return type as bool, but that breaks other
// functions that call dBgS::LineCross.
// See also daAlink_c::setCrawlMoveAngle.
BOOL line_cross = dComIfG_Bgsp().cBgS::LineCross(&m_linechk);
offStateFlg0(FLG0_UNK_100);
@@ -1709,9 +1812,11 @@ int daHorse_c::checkHorseNoMove(int param_0) {
dComIfG_Bgsp().GetTriPla(m_linechk, &plane);
sp50 = m_linechk.GetCross();
if (cBgW_CheckBWall(plane.mNormal.y) && ((param_0 != 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) > 0x6000) || (param_0 == 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) < 0x2000))) {
if (cBgW_CheckBWall(plane.mNormal.y) &&
((forward != 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) > 0x6000) ||
(forward == 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) < 0x2000))) {
m_linechk.Set(&start, &end, this);
if (m_procID == PROC_MOVE_e && param_0 != 0 && !dComIfG_Bgsp().LineCross(&m_linechk)) {
if (m_procID == PROC_MOVE_e && forward != 0 && !dComIfG_Bgsp().LineCross(&m_linechk)) {
if (sp50.abs2(start) < 23716.0f) {
return 4;
}
@@ -1731,13 +1836,13 @@ int daHorse_c::checkHorseNoMove(int param_0) {
var_f30 = 50.0f;
}
sp50.y = 200.0f + current.pos.y;
sp50.y = checkOffsetY + current.pos.y;
f32 sp18;
if (param_0 != 0 && speedF > (0.5f * m_normalMaxSpeedF)) {
sp18 = 500.0;
if (forward != 0 && speedF > (0.5f * m_normalMaxSpeedF)) {
sp18 = noMoveCresDis;
} else {
sp18 = 200.0f;
sp18 = noMoveCresBackDis;
}
while (var_f30 < sp18) {
@@ -1754,8 +1859,8 @@ int daHorse_c::checkHorseNoMove(int param_0) {
if (!checkStateFlg0(FLG0_UNK_1)) {
for (int i = 0; i < m_scnChg_num; i++) {
if (m_scnChg_buffer[i]->checkArea(&sp50)) {
if (var_f30 <= 101.0f) {
if (param_0 != 0 && !player->checkHorseGetOffMode()) {
if (var_f30 <= noMoveStopDis + 1) {
if (forward != 0 && !player->checkHorseGetOffMode()) {
onStateFlg0(FLG0_UNK_40000);
field_0x1704 = 30;
}
@@ -1768,10 +1873,11 @@ int daHorse_c::checkHorseNoMove(int param_0) {
if (fopAcM_gc_c::getHorseNoEntry() ||
(!checkStateFlg0(FLG0_UNK_1) && dComIfG_Bgsp().GetExitId(*fopAcM_gc_c::getGroundCheck()) != 0x3F) ||
(sp8 > sp14 && daAlink_c::getMoveBGActorName(*fopAcM_gc_c::getGroundCheck(), 1) != fpcNm_OBJ_BRG_e && dComIfG_Bgsp().GetSpecialCode(*fopAcM_gc_c::getGroundCheck()) != 2))
(sp8 > sp14 && daAlink_c::getMoveBGActorName(*fopAcM_gc_c::getGroundCheck(), 1) != fpcNm_OBJ_BRG_e &&
dComIfG_Bgsp().GetSpecialCode(*fopAcM_gc_c::getGroundCheck()) != 2))
{
if (var_f30 <= 101.0f) {
if (sp8 > sp14 && param_0 != 0) {
if (var_f30 <= noMoveStopDis + 1) {
if (sp8 > sp14 && forward != 0) {
onStateFlg0(FLG0_UNK_40000);
field_0x1704 = 30;
}
@@ -1782,8 +1888,8 @@ int daHorse_c::checkHorseNoMove(int param_0) {
if (fopAcM_wt_c::waterCheck(&sp50)) {
if (fopAcM_wt_c::getWaterY() - fopAcM_gc_c::getGroundY() > m_hio->m.water_depth_limit) {
if (var_f30 <= 101.0f) {
if (param_0 != 0) {
if (var_f30 <= noMoveStopDis + 1) {
if (forward != 0) {
onStateFlg0(FLG0_UNK_40000);
field_0x1704 = 30;
}
@@ -1799,13 +1905,15 @@ int daHorse_c::checkHorseNoMove(int param_0) {
if (hstop->getActiveFlg()) {
fpoAcM_relativePos(hstop, &sp50, &sp44);
if (sp44.y >= -200.0f && sp44.y <= (400.0f + hstop->scale.y) && fabsf(sp44.x) <= hstop->scale.x && fabsf(sp44.z) <= hstop->scale.z) {
if (param_0 != 0 && speedF > 0.0f && m_procID == PROC_MOVE_e) {
if (sp44.y >= -checkOffsetY &&
sp44.y <= (checkOffsetY * 2 + hstop->scale.y) &&
fabsf(sp44.x) <= hstop->scale.x && fabsf(sp44.z) <= hstop->scale.z) {
if (forward != 0 && speedF > 0.0f && m_procID == PROC_MOVE_e) {
onStateFlg0(FLG0_UNK_200);
hstop->onTagStop();
}
if (var_f30 <= 101.0f) {
if (var_f30 <= noMoveStopDis + 1) {
return 2;
}
return 1;
@@ -1817,7 +1925,7 @@ int daHorse_c::checkHorseNoMove(int param_0) {
var_f30 += 25.0f;
}
return rt;
return rt;
}
BOOL daHorse_c::checkTurnPlayerState() {
@@ -1826,7 +1934,7 @@ BOOL daHorse_c::checkTurnPlayerState() {
}
int daHorse_c::setSpeedAndAngle() {
int var_r28 = checkHorseNoMove(1);
int var_r28 = checkHorseNoMove(TRUE);
if (var_r28 == 3) {
if (checkStateFlg0(FLG0_UNK_2)) {
return 3;
@@ -1856,7 +1964,7 @@ int daHorse_c::setSpeedAndAngle() {
)
{
if (speedF < 0.0f) {
var_r28 = checkHorseNoMove(0);
var_r28 = checkHorseNoMove(FALSE);
if (var_r28 == 2) {
speedF = 0.0f;
} else if (var_r28 == 1) {
@@ -2011,7 +2119,7 @@ int daHorse_c::setSpeedAndAngle() {
field_0x1704--;
if (field_0x1704 == 0) {
offStateFlg0(FLG0_UNK_40000);
} else if (checkHorseNoMove(0) == 2) {
} else if (checkHorseNoMove(FALSE) == 2) {
offStateFlg0(FLG0_UNK_40000);
field_0x1704 = 0;
speedF = 0.0f;
@@ -2023,7 +2131,7 @@ int daHorse_c::setSpeedAndAngle() {
} else if (!checkStateFlg0(FLG0_UNK_8) && (checkTurnInput() || checkStateFlg0(daHorse_FLG0(FLG0_UNK_100000 | FLG0_UNK_200000))) && checkTurnPlayerState() && speedF > (0.2f * -m_hio->m.max_backward_speed)) {
return 1;
} else {
int spC = checkHorseNoMove(0);
int spC = checkHorseNoMove(FALSE);
if (spC == 0) {
if (!checkStateFlg0(daHorse_FLG0(FLG0_UNK_100000 | FLG0_UNK_200000))) {
cLib_chaseF(&speedF, -m_hio->m.max_backward_speed, m_hio->m.max_backward_acceleration);
@@ -2167,12 +2275,14 @@ void daHorse_c::setMatrix() {
}
if (checkStateFlg0(FLG0_UNK_1) && checkStateFlg0(FLG0_RODEO_MODE) && m_procID == PROC_MOVE_e) {
static const s16 rodeoRunAngleZ = 1500;
if (checkStateFlg0(FLG0_RODEO_LEFT)) {
if (var_r29 < 1500) {
var_r29 = 1500;
if (var_r29 < rodeoRunAngleZ) {
var_r29 = rodeoRunAngleZ;
}
} else if (var_r29 > -1500) {
var_r29 = -1500;
} else if (var_r29 > -rodeoRunAngleZ) {
var_r29 = -rodeoRunAngleZ;
}
}
@@ -2697,9 +2807,9 @@ void daHorse_c::footBgCheck() {
footdata_p = m_footData;
mDoMtx_multVec(m_model->getAnmMtx(6), &l_frontFootOffset, &m_footData[0].field_0xc);
mDoMtx_multVec(m_model->getAnmMtx(0xA), &l_frontFootOffset, &m_footData[1].field_0xc);
mDoMtx_multVec(m_model->getAnmMtx(0x1E), &l_backFootOffset, &m_footData[2].field_0xc);
mDoMtx_multVec(m_model->getAnmMtx(0x22), &l_backFootOffset, &m_footData[3].field_0xc);
mDoMtx_multVec(m_model->getAnmMtx(10), &l_frontFootOffset, &m_footData[1].field_0xc);
mDoMtx_multVec(m_model->getAnmMtx(30), &l_backFootOffset, &m_footData[2].field_0xc);
mDoMtx_multVec(m_model->getAnmMtx(34), &l_backFootOffset, &m_footData[3].field_0xc);
cXyz sp7C = current.pos - old.pos;
@@ -2778,11 +2888,13 @@ void daHorse_c::footBgCheck() {
if (checkResetStateFlg0(RFLG0_TURN_STAND)) {
spA = 0;
} else {
static const s16 shapeLimitAngle = 0x1C72;
spA = field_0x1714;
if (spA > 0x1C72) {
spA = 0x1C72;
} else if (spA < -0x1C72) {
spA = -0x1C72;
if (spA > shapeLimitAngle) {
spA = shapeLimitAngle;
} else if (spA < -shapeLimitAngle) {
spA = -shapeLimitAngle;
}
}
@@ -2817,11 +2929,15 @@ void daHorse_c::setReinPosMoveInit(int param_0) {
static cXyz localNeckLeft(10.0f, 10.0f, 35.0f);
static cXyz localNeckRight(10.0f, 10.0f, -35.0f);
static const f32 sideOffset = 10.0f;
static const f32 onHandSideOffset = 1.0f;
static const f32 neckSideOffset = 10.0f;
mDoMtx_multVec(m_model->getAnmMtx(0xF), &reinLeftStart, m_rein[0].field_0x0[0]);
mDoMtx_multVec(m_model->getAnmMtx(0xF), &reinRightStart, m_rein[1].field_0x0[0]);
s16 spC = field_0x170e + 0x4000;
f32 var_f31 = 10.0f;
f32 var_f31 = sideOffset;
f32 var_f30;
f32 temp_f28 = cM_ssin(spC);
f32 temp_f27 = cM_scos(spC);
@@ -2832,7 +2948,7 @@ void daHorse_c::setReinPosMoveInit(int param_0) {
}
if (param_0 != 3) {
var_f31 += 1.0f;
var_f31 += onHandSideOffset;
}
var_f30 = var_f31;
@@ -2841,12 +2957,12 @@ void daHorse_c::setReinPosMoveInit(int param_0) {
if (field_0x1712 > 0) {
mDoMtx_multVec(m_model->getAnmMtx(0xB), &localNeckRight, &m_rein[1].field_0x1c);
m_rein[1].field_0x18 = 20.0f * temp_f29;
var_f30 += 10.0f * temp_f29;
m_rein[1].field_0x18 = sideOffset * 2 * temp_f29;
var_f30 += neckSideOffset * temp_f29;
} else if (field_0x1712 < 0) {
mDoMtx_multVec(m_model->getAnmMtx(0xB), &localNeckLeft, &m_rein[0].field_0x1c);
m_rein[0].field_0x18 = 20.0f * temp_f29;
var_f31 += 10.0f * temp_f29;
m_rein[0].field_0x18 = sideOffset * 2 * temp_f29;
var_f31 += neckSideOffset * temp_f29;
}
m_rein[0].field_0x10 = var_f31 * temp_f28;
@@ -2902,6 +3018,9 @@ void daHorse_c::copyReinPos() {
}
void daHorse_c::setReinPosHandSubstance(int param_0) {
static const int handSideCnt = 20;
static const int oneHandSideCnt = 24;
static const Vec zeldaLocalLeft = {3.0f, -0.5f, -5.0f};
static const Vec zeldaLocalRight = {3.0f, -0.5f, 5.0f};
@@ -2916,15 +3035,15 @@ void daHorse_c::setReinPosHandSubstance(int param_0) {
int var_r25;
int var_r24;
if (param_0 & 1) {
var_r25 = var_r29 + 20;
var_r25 = var_r29 + handSideCnt;
} else {
var_r25 = var_r29 + 24;
var_r25 = var_r29 + oneHandSideCnt;
}
if (param_0 & 2) {
var_r24 = 20 - var_r29;
var_r24 = handSideCnt - var_r29;
} else {
var_r24 = 24 - var_r29;
var_r24 = oneHandSideCnt - var_r29;
}
if (param_0 & 4) {
@@ -2975,6 +3094,7 @@ void daHorse_c::setReinPosHandSubstance(int param_0) {
void daHorse_c::setReinPosNormalSubstance() {
static cXyz saddleLeft(29.0f, -2.0f, 30.0f);
static cXyz saddleRight(29.0f, 2.0f, 30.0f);
static const int sideCount = 24;
if (!checkStateFlg0(FLG0_UNK_1) && getZeldaActor() != NULL) {
if (((daHoZelda_c*)getZeldaActor())->checkSingleRide()) {
@@ -2985,20 +3105,20 @@ void daHorse_c::setReinPosNormalSubstance() {
setReinPosMoveInit(0);
mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleLeft, m_rein[0].field_0x0[0] + 24);
m_rein[0].setReinPosPart(24);
mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleLeft, m_rein[0].field_0x0[0] + sideCount);
m_rein[0].setReinPosPart(sideCount);
mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleRight, m_rein[1].field_0x0[0] + 24);
m_rein[1].setReinPosPart(24);
mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleRight, m_rein[1].field_0x0[0] + sideCount);
m_rein[1].setReinPosPart(sideCount);
*m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][24];
*m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][sideCount];
m_rein[2].setReinPosPart(0);
if (checkResetStateFlg0(RFLG0_UNK_1)) {
for (int i = 0; i < 5; i++) {
m_rein[0].setReinPosPart(24);
m_rein[1].setReinPosPart(24);
*m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][24];
m_rein[0].setReinPosPart(sideCount);
m_rein[1].setReinPosPart(sideCount);
*m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][sideCount];
m_rein[2].setReinPosPart(0);
}
}
@@ -3123,7 +3243,7 @@ BOOL daHorse_c::checkTurnAfterFastMove(f32 param_0) {
return procTurnInit(0);
}
if (temp_r29 < 0x2000 && !checkHorseNoMove(1)) {
if (temp_r29 < 0x2000 && !checkHorseNoMove(TRUE)) {
speedF = m_hio->m.fastwalk_to_run_rate * m_normalMaxSpeedF;
return procMoveInit();
}
@@ -3301,6 +3421,8 @@ void daHorse_c::savePos() {
}
int daHorse_c::callHorseSubstance(cXyz const* i_pos) {
static const f32 initDistance2 = SQUARE(2000.0f);
int room_no = dComIfGp_roomControl_getStayNo();
if (checkStateFlg0(FLG0_RODEO_MODE) ||
(daAlink_c::checkStageName("F_SP108") && (room_no == 5 || room_no == 6 || room_no == 11 || room_no == 14)) ||
@@ -3323,7 +3445,7 @@ int daHorse_c::callHorseSubstance(cXyz const* i_pos) {
}
}
if (m_path != NULL && (checkStateFlg0(FLG0_NO_DRAW_WAIT) || dist_xz2 > SQUARE(2000.0f))) {
if (m_path != NULL && (checkStateFlg0(FLG0_NO_DRAW_WAIT) || dist_xz2 > initDistance2)) {
daAlink_c* player = daAlink_getAlinkActorClass();
Vec* farthest_pos;
Vec* path_pnt_pos;
@@ -3335,7 +3457,7 @@ int daHorse_c::callHorseSubstance(cXyz const* i_pos) {
f32 farthest_sqdist;
f32 sqdist = (x_dist * x_dist) + (z_dist * z_dist);
if (i == 0 || (farthest_sqdist > sqdist && sqdist > SQUARE(2000.0f))) {
if (i == 0 || (farthest_sqdist > sqdist && sqdist > initDistance2)) {
farthest_sqdist = sqdist;
farthest_pos = path_pnt_pos;
}
@@ -3710,9 +3832,12 @@ int daHorse_c::procStop() {
{7, 18, 26}
};
static const f32 stopEffEndFrame = 29.0f;
static const f32 stopStandEffEndFrame = 32.0f;
const unk_foot_eff_t* var_r29;
daPy_frameCtrl_c* frame_ctrl = &m_frameCtrl[0];
int var_r25 = checkHorseNoMove(1);
int var_r25 = checkHorseNoMove(TRUE);
if (var_r25 == 2) {
speedF = 0.0f;
@@ -3763,10 +3888,10 @@ int daHorse_c::procStop() {
field_0x16b7 = 2;
}
var_r29 = stopStandFootEffectFrame;
var_f30 = 32.0f;
var_f30 = stopStandEffEndFrame;
} else {
var_r29 = stopFootEffectFrame;
var_f30 = 29.0f;
var_f30 = stopEffEndFrame;
}
}
@@ -3789,6 +3914,9 @@ int daHorse_c::procStop() {
}
int daHorse_c::procTurnInit(int param_0) {
static const f32 turnRateStop = DEG_TO_RAD(6);
static const f32 turnRateStand = DEG_TO_RAD(45.0f / 8.0f);
if (checkEndResetStateFlg0(ERFLG0_RIDE_RUN_FLG)) {
speedF = 0.0f;
return 0;
@@ -3801,7 +3929,7 @@ int daHorse_c::procTurnInit(int param_0) {
setSingleAnime(ANM_HS_STAND, m_hio->m.stand_anm_speed, 0.0f, -1, m_hio->m.stand_interpolation, 0);
field_0x1774 = 52.0f;
field_0x1778 = 0.09817477f;
field_0x1778 = turnRateStand;
field_0x177C = m_hio->m.stand_cancel_frame;
field_0x1780 = 20.0f;
field_0x1784 = 53.0f;
@@ -3857,7 +3985,7 @@ int daHorse_c::procTurn() {
onResetStateFlg0(RFLG0_ENEMY_SEARCH);
}
int sp14 = checkHorseNoMove(1);
int sp14 = checkHorseNoMove(TRUE);
if (m_anmIdx[0] == ANM_HS_STAND) {
if (frame_ctrl->checkPass(8.0f) && !checkInputOnR()) {
@@ -3945,7 +4073,7 @@ int daHorse_c::procTurn() {
s16 spA = shape_angle.x;
for (int i = 0; i < 8; i++) {
if (checkHorseNoMove(1) == 2) {
if (checkHorseNoMove(TRUE) == 2) {
current.pos = old.pos;
break;
}
@@ -4099,7 +4227,7 @@ int daHorse_c::procLandInit(f32 i_speedF, BOOL param_1) {
int daHorse_c::procLand() {
daPy_frameCtrl_c* frame_ctrl = &m_frameCtrl[0];
int temp_r3 = checkHorseNoMove(1);
int temp_r3 = checkHorseNoMove(TRUE);
if (temp_r3 == 2) {
speedF = 0.0f;
@@ -4242,7 +4370,7 @@ int daHorse_c::execute() {
daAlink_c* player_p = daAlink_getAlinkActorClass();
#if PLATFORM_SHIELD || PLATFORM_WII
l_autoUpHeight = m_hio->m.m0D0;
l_autoUpHeight = m_hio->m.climb_step;
m_acchcir[0].SetWall(l_autoUpHeight + 0.1f, 60.0f);
if (checkStateFlg0(FLG0_UNK_2000)) {
m_normalMaxSpeedF = m_hio->m.kakariko_max_speed;
@@ -4341,7 +4469,7 @@ int daHorse_c::execute() {
s16 old_angle_y = current.angle.y;
for (int i = 0; i < 8; i++) {
if (checkHorseNoMove(1) == 2) {
if (checkHorseNoMove(TRUE) == 2) {
current.pos -= *m_cc_stts.GetCCMoveP();
break;
}