]> granicus.if.org Git - nethack/commitdiff
do not mark multiple luckstones as the prize in mines-end
authornhmall <nhmall@nethack.org>
Sat, 25 May 2019 15:58:32 +0000 (11:58 -0400)
committernhmall <nhmall@nethack.org>
Sat, 25 May 2019 15:58:32 +0000 (11:58 -0400)
if one of the random objects happened to be a luckstone then
it and the explicit one got marked as a prize.

Following this change, only one will be marked as the prize,
but a follow-up on the order of things in mines.des may be
warranted to ensure it is the explicitly placed luckstone.

doc/fixes36.3
src/sp_lev.c

index 28564e3dab0f8f4ac4418245f46de55d9d488a5d..ebbf1c95baceb131ba527cb69a1ce8b698b91c42 100644 (file)
@@ -21,6 +21,8 @@ xans fly, but could not reach your feet if you flew
 adjust vortex database entry to be consistent with fire and energy vortices
 when co-located with a boulder you could sometimes swap places with pets of
        any size
+on rare occasions, multiple mines-end luckstones were being marked as the
+       prize and triggering an impossible() on a public server
 
 
 Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
index cd952108c6014e9440c93b0b762cc1458f7b3c8b..dbab1dfdc3c6dbdfda8ccb6fc016cd4411087002 100644 (file)
@@ -2044,11 +2044,13 @@ struct mkroom *croom;
            might be short-circuited if a monster brings object to hero) */
         if (Is_mineend_level(&u.uz)) {
             if (otmp->otyp == iflags.mines_prize_type) {
-                otmp->record_achieve_special = MINES_PRIZE;
-                /* prevent stacking; cleared when achievement is recorded */
-                otmp->nomerge = 1;
-                if (++mines_prize_count > 1)
-                    impossible(prize_warning, "mines end");
+                if (!mines_prize_count++) {
+                    /* Note: the first luckstone on lev will become the prize
+                             even if its not the explicit one, but random */
+                    otmp->record_achieve_special = MINES_PRIZE;
+                    /* prevent stacking; cleared when achievement is recorded */
+                    otmp->nomerge = 1;
+                }
             }
         } else if (Is_sokoend_level(&u.uz)) {
             if (otmp->otyp == iflags.soko_prize_type1) {