that trap required an extra step; the first one ended up as a no-op
punished with ball and chain on the same floor square as a trapped chest
when it exploded resulted in panic "remove_object: obj not on floor"
+see_monsters() wasn't called when you lost the innate warning intrinsic due
+ to level loss
Platform- and/or Interface-Specific Fixes
static long next_check = 600L; /* arbitrary first setting */
STATIC_DCL void NDECL(exerper);
+STATIC_DCL void FDECL(postadjabil, (long *));
/* adjust an attribute; return TRUE if change is made, FALSE otherwise */
boolean
(void)encumber_msg();
}
+void
+postadjabil(ability)
+long *ability;
+{
+ if (!ability) return;
+ if (ability == &(HWarning) || ability == &(HSee_invisible))
+ see_monsters();
+}
+
void
adjabil(oldlevel,newlevel)
int oldlevel, newlevel;
}
while (abil || rabil) {
+ long prevabil;
/* Have we finished with the intrinsics list? */
if (!abil || !abil->ability) {
/* Try the race intrinsics */
rabil = 0;
mask = FROMRACE;
}
-
+ prevabil = *(abil->ability);
if(oldlevel < abil->ulevel && newlevel >= abil->ulevel) {
/* Abilities gained at level 1 can never be lost
* via level loss, only via means that remove _any_
You_feel("less %s!", abil->gainstr);
}
}
+ if (prevabil != *(abil->ability)) /* it changed */
+ postadjabil(abil->ability);
abil++;
}