wizard mode light source bug

In wizard mode if you're already polymorphed and you choose your
role's form when polymorphing again, polyself() calls rehumanize()
to restore your original shape.  rehumanize() turns off any light
the hero is emitting from polymorph form.  After it returned,
polyself() then tried to do the same thing based on a cached value.
If the previous form had been emitting light, that resulted in an
impossible() warning "del_light_source: not found type=1, id=N".

Couldn't happen in normal play because a request to polymorph into
any role monster is usually rejected; it's only honored in wizard
mode for current role.  Noticed when testing something while in
gold dragon form but this bug predates addition of that monster.

Clear the cached value when rehumanize() returns to polyself().
This commit is contained in:
PatR
2021-08-04 13:26:56 -07:00
parent e16b98b61d
commit fdf0bfd8a4
2 changed files with 6 additions and 1 deletions

View File

@@ -423,7 +423,7 @@ polyself(int psflags)
old_light = emits_light(g.youmonst.data);
mntmp = NON_PM;
if (formrevert){
if (formrevert) {
mntmp = g.youmonst.cham;
monsterpoly = TRUE;
controllable_poly = FALSE;
@@ -469,6 +469,7 @@ polyself(int psflags)
/* in wizard mode, picking own role while poly'd reverts to
normal without newman()'s chance of level or sex change */
rehumanize();
old_light = 0; /* rehumanize() extinguishes u-as-mon light */
goto made_change;
} else if (iswere && (were_beastie(mntmp) == u.ulycn
|| mntmp == counter_were(u.ulycn)