From 8c92d2921f8aa8a54e7dc57e611f962b648232da Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 17 Feb 2017 12:24:24 -0800 Subject: [PATCH] fix #H5082 - growing into opposite sex monster When a female dwarf grows (via level gain) into a dwarf lord, it changes sex as well as base monster form because all dwarf lords are male. The earlier fix for #H4276 (16-Mar-2016, to give an alternate grow-up message acknowledging the change) used the wrong monster form (monst's old one instead of new one). --- doc/fixes36.1 | 3 +++ src/makemon.c | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 4c2a18fb9..3a0149e98 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -391,6 +391,9 @@ when picking a destination for #jump, '$' to show valid dest. is more accurate enchant armor gave "your pair of boots/gloves glow", should have been "glows" when autopickup is overridden in a shop, always-pick-up exceptions and pickup_thrown still picked unpaid items up +the fix for giving an alternate grow up message when a monster becomes a new + form with the opposite sex (female gnome into male gnome lord, for + example) had the logic wrong Platform- and/or Interface-Specific Fixes diff --git a/src/makemon.c b/src/makemon.c index 3422cb2bf..c60adfa1f 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1793,11 +1793,11 @@ struct monst *mtmp, *victim; else if (lev_limit > 49) lev_limit = (ptr->mlevel > 49 ? 50 : 49); - /* new form might force gender change */ - fem = is_male(ptr) ? 0 : is_female(ptr) ? 1 : mtmp->female; - if ((int) ++mtmp->m_lev >= mons[newtype].mlevel && newtype != oldtype) { ptr = &mons[newtype]; + /* new form might force gender change */ + fem = is_male(ptr) ? 0 : is_female(ptr) ? 1 : mtmp->female; + if (mvitals[newtype].mvflags & G_GENOD) { /* allow G_EXTINCT */ if (canspotmon(mtmp)) pline("As %s grows up into %s, %s %s!", mon_nam(mtmp), @@ -1829,8 +1829,9 @@ struct monst *mtmp, *victim; set_mon_data(mtmp, ptr, 1); /* preserve intrinsics */ newsym(mtmp->mx, mtmp->my); /* color may change */ lev_limit = (int) mtmp->m_lev; /* never undo increment */ + + mtmp->female = fem; /* gender might be changing */ } - mtmp->female = fem; /* gender might be changing */ /* sanity checks */ if ((int) mtmp->m_lev > lev_limit) { -- 2.40.0