diff --git a/src/weapon.c b/src/weapon.c index 4c4eebdc4..657f0cc89 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -1363,6 +1363,8 @@ drain_weapon_skill(int n) /* number of skills to drain */ { int skill; int i; + int curradv; + int prevadv; int tmpskills[P_NUM_SKILLS]; (void) memset((genericptr_t) tmpskills, 0, sizeof(tmpskills)); @@ -1382,9 +1384,11 @@ drain_weapon_skill(int n) /* number of skills to drain */ 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); } }