Add petless conduct

Breaks saves.
This commit is contained in:
Pasi Kallinen
2023-04-11 14:21:06 +03:00
parent ffb61612e3
commit 8b32ae98e9
7 changed files with 22 additions and 2 deletions
+1
View File
@@ -2038,6 +2038,7 @@ add a boolean option tips to disable all of the helpful tips
add a tutorial level add a tutorial level
engravings appear on the map display engravings appear on the map display
option to create the character deaf option to create the character deaf
add conduct for petless
Platform- and/or Interface-Specific New Features Platform- and/or Interface-Specific New Features
+1 -1
View File
@@ -17,7 +17,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones * Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files. * and save files.
*/ */
#define EDITLEVEL 81 #define EDITLEVEL 82
/* /*
* Development status possibilities. * Development status possibilities.
+1
View File
@@ -154,6 +154,7 @@ struct u_conduct { /* number of times... */
long wishes; /* used a wish */ long wishes; /* used a wish */
long wisharti; /* wished for an artifact */ long wisharti; /* wished for an artifact */
long sokocheat; /* violated special 'rules' in Sokoban */ long sokocheat; /* violated special 'rules' in Sokoban */
long pets; /* obtained a pet */
/* genocides already listed at end of game */ /* genocides already listed at end of game */
}; };
+2
View File
@@ -59,6 +59,7 @@ initedog(struct monst *mtmp)
EDOG(mtmp)->revivals = 0; EDOG(mtmp)->revivals = 0;
EDOG(mtmp)->mhpmax_penalty = 0; EDOG(mtmp)->mhpmax_penalty = 0;
EDOG(mtmp)->killed_by_u = 0; EDOG(mtmp)->killed_by_u = 0;
u.uconduct.pets++;
} }
static int static int
@@ -152,6 +153,7 @@ make_familiar(struct obj *otmp, coordxy x, coordxy y, boolean quietly)
/* 0,1,2: b=80%,10,10; nc=10%,80,10; c=10%,10,80 */ /* 0,1,2: b=80%,10,10; nc=10%,80,10; c=10%,10,80 */
if (chance > 0) { if (chance > 0) {
mtmp->mtame = 0; /* not tame after all */ mtmp->mtame = 0; /* not tame after all */
u.uconduct.pets--; /* doesn't count as creating a pet */
if (chance == 2) { /* hostile (cursed figurine) */ if (chance == 2) { /* hostile (cursed figurine) */
if (!quietly) if (!quietly)
You("get a bad feeling about this."); You("get a bad feeling about this.");
+3
View File
@@ -2047,6 +2047,9 @@ show_conduct(int final)
you_have_X(buf); you_have_X(buf);
} }
if (!u.uconduct.pets)
you_have_never("had a pet");
ngenocided = num_genocides(); ngenocided = num_genocides();
if (ngenocided == 0) { if (ngenocided == 0) {
you_have_never("genocided any monsters"); you_have_never("genocided any monsters");
+11 -1
View File
@@ -520,7 +520,17 @@ gain_guardian_angel(void)
* [Note: this predates mon->mextra which allows a monster * [Note: this predates mon->mextra which allows a monster
* to have both emin and edog at the same time.] * to have both emin and edog at the same time.]
*/ */
mtmp->mtame = 10; /* Too nasty for the game to unexpectedly break petless conduct on
* the final level of the game. The angel will still appear, but
* won't be tamed. */
if (u.uconduct.pets) {
/* guardian angel -- the one case mtame doesn't
* imply an edog structure, so we don't want to
* call tamedog().
*/
mtmp->mtame = 10;
u.uconduct.pets++;
}
/* for 'hilite_pet'; after making tame, before next message */ /* for 'hilite_pet'; after making tame, before next message */
newsym(mtmp->mx, mtmp->my); newsym(mtmp->mx, mtmp->my);
if (!Blind) if (!Blind)
+3
View File
@@ -439,6 +439,8 @@ encodeconduct(void)
entered-sokoban bit in the 'achieve' field */ entered-sokoban bit in the 'achieve' field */
if (!u.uconduct.sokocheat && sokoban_in_play()) if (!u.uconduct.sokocheat && sokoban_in_play())
e |= 1L << 12; e |= 1L << 12;
if (!u.uconduct.pets)
e |= 1L << 13;
return e; return e;
} }
@@ -594,6 +596,7 @@ encode_extended_conducts(char *buf)
add_achieveX(buf, "deaf", u.uroleplay.deaf); add_achieveX(buf, "deaf", u.uroleplay.deaf);
add_achieveX(buf, "nudist", u.uroleplay.nudist); add_achieveX(buf, "nudist", u.uroleplay.nudist);
add_achieveX(buf, "bonesless", !flags.bones); add_achieveX(buf, "bonesless", !flags.bones);
add_achieveX(buf, "petless", !u.uconduct.pets);
return buf; return buf;
} }