or make ready
with the `Q' command instead. If no weapon is found or the option is
false, the `t' (throw) command is executed instead. (default false)
+.lp blind
+Start the character permanently blind. (default false)
.lp bones
Allow saving and loading bones files. (default true)
.lp boulder
Read the NetHack news file, if present (default on).
Since the news is shown at the beginning of the game, there's no point
in setting this with the `O' command.
+.lp nudist
+Start the character with no armor (default false).
.lp "null "
Send padding nulls to the terminal (default on).
.lp number_pad
with the `Q' command instead. If no weapon is found or the option is
false, the `t' (throw) command is executed instead. (default false)
%.lp
+\item[\ib{blind}]
+Start the character permanently blind. (default false)
+%.lp
\item[\ib{bones}]
Allow saving and loading bones files. (default true)
%.lp
Since the news is shown at the beginning of the game, there's no point
in setting this with the `{\tt O}' command.
%.lp
+\item[\ib{nudist}]
+Start the character with no armor (default false).
+%.lp
\item[\ib{null}]
Send padding nulls to the terminal (default on).
%.lp
something, while a zap upward should
show more explicit reason why player was helpless at death
added new hallucinatory-only gods
+options to create the character blind or nudist
Platform- and/or Interface-Specific New Features
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
-#define EDITLEVEL 59
+#define EDITLEVEL 60
#define COPYRIGHT_BANNER_A \
"NetHack, Copyright 1985-2015"
/* genocides already listed at end of game */
};
+struct u_roleplay {
+ boolean blind; /* permanently blind */
+ boolean nudist; /* has not worn any armor, ever */
+};
+
/*** Unified structure containing role information ***/
struct Role {
/*** Strings that name various things ***/
struct u_event uevent; /* certain events have happened */
struct u_have uhave; /* you're carrying special objects */
struct u_conduct uconduct; /* KMH, conduct */
+ struct u_roleplay uroleplay;
struct attribs acurr, /* your current attributes (eg. str)*/
aexe, /* for gain/loss via "exercise" */
abon, /* your bonus attributes (eg. str) */
#define Blinded u.uprops[BLINDED].intrinsic
#define Blindfolded (ublindf && ublindf->otyp != LENSES)
/* ...means blind because of a cover */
-#define Blind ((Blinded || Blindfolded || !haseyes(youmonst.data)) && \
+#define Blind ((u.uroleplay.blind || Blinded || Blindfolded || !haseyes(youmonst.data)) && \
!(ublindf && ublindf->oartifact == ART_EYES_OF_THE_OVERWORLD))
/* ...the Eyes operate even when you really are blind
or don't have any eyes */
Sprintf(buf, because_of,
obj->oartifact ? bare_artifactname(obj) :
ysimple_name(obj));
+ else if (propidx == BLINDED && u.uroleplay.blind)
+ Sprintf(buf, " from birth");
else if (propidx == BLINDED && Blindfolded_only)
Sprintf(buf, because_of, ysimple_name(ublindf));
en_win = create_nhwindow(NHW_MENU);
putstr(en_win, 0, "Voluntary challenges:");
+ if (u.uroleplay.blind) you_have_been("blind from birth");
+ if (u.uroleplay.nudist) you_have_been("faithfully nudist");
+
if (!u.uconduct.food)
enl_msg(You_, "have gone", "went", " without food", "");
/* But beverages are okay */
#else
{"BIOS", (boolean *)0, FALSE, SET_IN_FILE},
#endif
+ {"blind", &u.uroleplay.blind, FALSE, DISP_IN_GAME},
{"bones", &flags.bones, TRUE, SET_IN_FILE},
#ifdef INSURANCE
{"checkpoint", &flags.ins_chkpt, TRUE, SET_IN_GAME},
#else
{"news", (boolean *)0, FALSE, SET_IN_FILE},
#endif
+ {"nudist", &u.uroleplay.nudist, FALSE, DISP_IN_GAME},
{"null", &flags.null, TRUE, SET_IN_GAME},
#if defined(SYSFLAGS) && defined(MAC)
{"page_wait", &sysflags.page_wait, TRUE, SET_IN_GAME},
&& scroll->oclass != SPBOOK_CLASS) {
pline(silly_thing_to, "read");
return(0);
- } else if (Blind) {
+ } else if (Blind && (scroll->otyp != SPE_BOOK_OF_THE_DEAD)) {
const char *what = 0;
if (scroll->oclass == SPBOOK_CLASS)
what = "mystic runes";
if(u.uachieve.mines_luckstone) r |= 1L << 9;
if(u.uachieve.finish_sokoban) r |= 1L << 10;
if(u.uachieve.killed_medusa) r |= 1L << 11;
+ if(u.uroleplay.blind) r |= 1L << 12;
+ if(u.uroleplay.nudist) r |= 1L << 13;
return r;
}
u_init()
{
register int i;
+ struct u_roleplay tmpuroleplay = u.uroleplay; /* these set by rcfile options */
flags.female = flags.initgend;
flags.beginner = 1;
(void) memset((genericptr_t)&ubirthday, 0, sizeof(ubirthday));
(void) memset((genericptr_t)&urealtime, 0, sizeof(urealtime));
+ u.uroleplay = tmpuroleplay; /* restore options set via rcfile */
+
#if 0 /* documentation of more zero values as desirable */
u.usick_cause[0] = 0;
u.uluck = u.moreluck = 0;
nocreate4 = otyp;
}
+ /* nudist gets no armor */
+ if (u.uroleplay.nudist && obj->oclass == ARMOR_CLASS) {
+ dealloc_obj(obj);
+ trop++;
+ continue;
+ }
+
if (trop->trclass == COIN_CLASS) {
/* no "blessed" or "identified" money */
obj->quan = u.umoney0;
uskin = obj;
/* assert( !uarm ); */
} else {
+ if ((mask & W_ARMOR)) u.uroleplay.nudist = FALSE;
for(wp = worn; wp->w_mask; wp++) if(wp->w_mask & mask) {
oobj = *(wp->w_obj);
if(oobj && !(oobj->owornmask & wp->w_mask))