{
int skill;
int i;
+ int curradv;
+ int prevadv;
int tmpskills[P_NUM_SKILLS];
(void) memset((genericptr_t) tmpskills, 0, sizeof(tmpskills));
P_SKILL(skill)--; /* drop skill one level */
/* refund slots used for skill */
u.weapon_slots += slots_required(skill);
- /* drain a random proportion of skill training */
- if (P_ADVANCE(skill))
- P_ADVANCE(skill) = rn2(P_ADVANCE(skill));
+ /* drain skill training to a value appropriate for new level */
+ curradv = practice_needed_to_advance(P_SKILL(skill));
+ prevadv = practice_needed_to_advance(P_SKILL(skill) - 1);
+ if (P_ADVANCE(skill) >= curradv)
+ P_ADVANCE(skill) = prevadv + rn2(curradv - prevadv);
}
}