feedback if a named, shape-shifted vampire reverted to original shape rather
than dying when engulfed could say "Dracula turns into Dracula"
adjust archeologist and valkyrie starting intrinsics
+once per game if receiving killing blow from near-full hp, leave 1 hp
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
extern void end_running(boolean);
extern void nomul(int);
extern void unmul(const char *);
+extern int saving_grace(int);
extern void losehp(int, const char *, schar);
extern int weight_cap(void);
extern int inv_weight(void);
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
-#define EDITLEVEL 75
+#define EDITLEVEL 76
/*
* Development status possibilities.
Bitfield(uinvulnerable, 1); /* you're invulnerable (praying) */
Bitfield(uburied, 1); /* you're buried */
Bitfield(uedibility, 1); /* blessed food detect; sense unsafe food */
- /* 1 free bit! */
+ Bitfield(usaving_grace, 1); /* prevents death once */
unsigned udg_cnt; /* how long you have been demigod */
struct u_event uevent; /* certain events have happened */
}
}
+/* once per game, if receiving a killing blow from above 90% HP,
+ allow the hero to survive with 1 HP */
+int
+saving_grace(int dmg)
+{
+ if (!u.usaving_grace && (u.uhp <= dmg)
+ && (u.uhp * 100 / u.uhpmax) > 90) {
+ dmg = u.uhp - 1;
+ u.usaving_grace = TRUE; /* used up */
+ }
+ return dmg;
+}
+
void
losehp(int n, const char *knam, schar k_format)
{
return;
}
+ n = saving_grace(n);
u.uhp -= n;
if (u.uhp > u.uhpmax)
u.uhpmax = u.uhp; /* perhaps n was negative */
if (u.mh < 1)
rehumanize();
} else {
+ n = saving_grace(n);
u.uhp -= n;
if (u.uhp < 1)
done_in_by(mtmp, DIED);