+
+void PlayerSkill::gain_riding_skill_exp_on_melee_attack(const monster_race *r_ptr)
+{
+ auto now_exp = this->player_ptr->skill_exp[SKILL_RIDING];
+ auto max_exp = s_info[enum2i(this->player_ptr->pclass)].s_max[SKILL_RIDING];
+ if (now_exp >= max_exp)
+ return;
+
+ auto riding_level = r_info[this->player_ptr->current_floor_ptr->m_list[this->player_ptr->riding].r_idx].level;
+ int inc = 0;
+
+ if ((now_exp / 200 - 5) < r_ptr->level)
+ inc += 1;
+
+ if ((now_exp / 100) < riding_level) {
+ if ((now_exp / 100 + 15) < riding_level)
+ inc += 1 + (riding_level - (now_exp / 100 + 15));
+ else
+ inc += 1;
+ }
+
+ this->player_ptr->skill_exp[SKILL_RIDING] = std::min<SUB_EXP>(max_exp, now_exp + inc);
+ set_bits(this->player_ptr->update, PU_BONUS);
+}
+
+void PlayerSkill::gain_riding_skill_exp_on_range_attack()
+{
+ auto now_exp = this->player_ptr->skill_exp[SKILL_RIDING];
+ auto max_exp = s_info[enum2i(this->player_ptr->pclass)].s_max[SKILL_RIDING];
+ if (now_exp >= max_exp)
+ return;
+
+ if (((this->player_ptr->skill_exp[SKILL_RIDING] - (RIDING_EXP_BEGINNER * 2)) / 200 < r_info[this->player_ptr->current_floor_ptr->m_list[this->player_ptr->riding].r_idx].level) && one_in_(2)) {
+ this->player_ptr->skill_exp[SKILL_RIDING] += 1;
+ set_bits(this->player_ptr->update, PU_BONUS);
+ }
+}
+
+void PlayerSkill::gain_riding_skill_exp_on_fall_off_check(HIT_POINT dam)
+{
+ auto now_exp = this->player_ptr->skill_exp[SKILL_RIDING];
+ auto max_exp = s_info[enum2i(this->player_ptr->pclass)].s_max[SKILL_RIDING];
+ if (now_exp >= max_exp || max_exp <= 1000)
+ return;
+
+ auto riding_level = r_info[this->player_ptr->current_floor_ptr->m_list[this->player_ptr->riding].r_idx].level;
+
+ if ((dam / 2 + riding_level) <= (now_exp / 30 + 10))
+ return;
+
+ int inc = 0;
+ if ((now_exp / 100 + 15) < riding_level)
+ inc += 1 + (riding_level - (now_exp / 100 + 15));
+ else
+ inc += 1;
+
+ player_ptr->skill_exp[SKILL_RIDING] = std::min<SUB_EXP>(max_exp, now_exp + inc);
+ set_bits(this->player_ptr->update, PU_BONUS);
+}