From: nethack.rankin Date: Sat, 19 Nov 2005 04:38:42 +0000 (+0000) Subject: wishing bit (trunk only) X-Git-Tag: MOVE2GIT~1203 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd4e6a8f1a7043d124c484b7ab73eb25db3652c2;p=nethack wishing bit (trunk only) The code let you wish for trapped containers in wizard mode and tried not to let you do so in normal mode. But it handled the trapped attribute by overloading the poisoned one, so wishing for a "poisoned chest" would produce a trapped chest in any mode. This fixes that by removing the overloading. You can wish for a trapped box/chest (or tin) in wizard mode and you can now also explicitly wish for an untrapped one in any mode. Asking for trapped in normal mode--most likely hoping to seed a dangerous bones file--just negates any preceding "untrapped" handled earlier within the same wish, and specifying "poisoned" for a container no longer has any effect. --- diff --git a/doc/fixes35.0 b/doc/fixes35.0 index b7ba20fd6..ff389d213 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -99,6 +99,7 @@ assigning an artifact name is rejected on objects with similar description to corresponding artifact's type rather than just those of the same type adjust feedback for gas spore explosion when hallucinating traps detected by scroll or crystal ball overlooked carried or buried chests +can't wish for a trapped box/chest/tin by specifying "poisoned" Platform- and/or Interface-Specific Fixes diff --git a/src/objnam.c b/src/objnam.c index f0e4d047b..e7175b1df 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)objnam.c 3.5 2005/10/21 */ +/* SCCS Id: @(#)objnam.c 3.5 2005/11/18 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1835,7 +1835,7 @@ struct obj *no_wish; int isinvisible; #endif int halfeaten, mntmp, contents; - int islit, unlabeled, ishistoric, isdiluted; + int islit, unlabeled, ishistoric, isdiluted, trapped; int tmp, tinv, tvariety; struct fruit *f; int ftype = current_fruit; @@ -1865,7 +1865,8 @@ struct obj *no_wish; isinvisible = #endif ispoisoned = isgreased = eroded = eroded2 = erodeproof = - halfeaten = islit = unlabeled = ishistoric = isdiluted = 0; + halfeaten = islit = unlabeled = ishistoric = isdiluted = + trapped = 0; tvariety = RANDOM_TIN; mntmp = NON_PM; #define UNDEFINED 0 @@ -1935,12 +1936,16 @@ struct obj *no_wish; !strncmpi(bp,"unlabelled ", l=11) || !strncmpi(bp,"blank ", l=6)) { unlabeled = 1; - } else if(!strncmpi(bp, "poisoned ",l=9) + } else if(!strncmpi(bp, "poisoned ",l=9)) { + ispoisoned=1; + /* "trapped" recognized but not honored outside wizard mode */ + } else if(!strncmpi(bp, "trapped ",l=8)) { + trapped = 0; /* undo any previous "untrapped" */ #ifdef WIZARD - || (wizard && !strncmpi(bp, "trapped ",l=8)) + if (wizard) trapped = 1; #endif - ) { - ispoisoned=1; + } else if(!strncmpi(bp, "untrapped ",l=10)) { + trapped = 2; /* not trapped */ } else if(!strncmpi(bp, "greased ",l=8)) { isgreased=1; } else if (!strncmpi(bp, "very ", l=5)) { @@ -2774,12 +2779,15 @@ typfnd: if (ispoisoned) { if (is_poisonable(otmp)) otmp->opoisoned = (Luck >= 0); - else if (Is_box(otmp) || typ == TIN) - otmp->otrapped = 1; else if (oclass == FOOD_CLASS) /* try to taint by making it as old as possible */ otmp->age = 1L; } + /* and [un]trapped */ + if (trapped) { + if (Is_box(otmp) || typ == TIN) + otmp->otrapped = (trapped == 1); + } if (isgreased) otmp->greased = 1;