diff --git a/src/map/status.cpp b/src/map/status.cpp index ba51680d5a..6939e96b4d 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -2402,8 +2402,14 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat temp_aspd = (float)(sqrt(temp_aspd) * 0.25f) + 0xc4; if ((skill_lv = pc_checkskill(sd,SA_ADVANCEDBOOK)) > 0 && sd->status.weapon == W_BOOK) val += (skill_lv - 1) / 2 + 1; + if ((skill_lv = pc_checkskill(sd, SG_DEVIL)) > 0 && pc_is_maxjoblv(sd)) + val += 1 + skill_lv; if ((skill_lv = pc_checkskill(sd,GS_SINGLEACTION)) > 0 && (sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE)) val += ((skill_lv + 1) / 2); + if (pc_isriding(sd)) + val -= 50 - 10 * pc_checkskill(sd, KN_CAVALIERMASTERY); + else if (pc_isridingdragon(sd)) + val -= 25 - 5 * pc_checkskill(sd, RK_DRAGONTRAINING); amotion = ((int)(temp_aspd + ((float)(status_calc_aspd(&sd->bl, &sd->sc, true) + val) * status->agi / 200)) - min(amotion, 200)); #else // Angra Manyu disregards aspd_base and similar @@ -4117,6 +4123,7 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) base_status->amotion = cap_value(i,pc_maxaspd(sd),2000); // Relative modifiers from passive skills + // Renewal modifiers are handled in status_base_amotion_pc #ifndef RENEWAL_ASPD if((skill=pc_checkskill(sd,SA_ADVANCEDBOOK))>0 && sd->status.weapon == W_BOOK) base_status->aspd_rate -= 5*skill; @@ -4129,13 +4136,6 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) base_status->aspd_rate += 500-100*pc_checkskill(sd,KN_CAVALIERMASTERY); else if(pc_isridingdragon(sd)) base_status->aspd_rate += 250-50*pc_checkskill(sd,RK_DRAGONTRAINING); -#else // Needs more info - if((skill = pc_checkskill(sd,SG_DEVIL)) > 0 && pc_is_maxjoblv(sd)) - base_status->aspd_rate += 30*skill; - if(pc_isriding(sd)) - base_status->aspd_rate -= 500-100*pc_checkskill(sd,KN_CAVALIERMASTERY); - else if(pc_isridingdragon(sd)) - base_status->aspd_rate -= 250-50*pc_checkskill(sd,RK_DRAGONTRAINING); #endif base_status->adelay = 2*base_status->amotion;