Merge remote-tracking branch 'origin/NetHack-3.6.0'
This commit is contained in:
174
dat/symbols
174
dat/symbols
@@ -386,6 +386,180 @@ start: NHAccess
|
||||
S_explode9: \047
|
||||
finish
|
||||
|
||||
# All symbols are spaces
|
||||
start: Blank
|
||||
Description: Completely blank symbols
|
||||
S_air: \032
|
||||
S_altar: \032
|
||||
S_amulet: \032
|
||||
S_angel: \032
|
||||
S_ant: \032
|
||||
S_anti_magic_trap: \032
|
||||
S_armor: \032
|
||||
S_armour: \032
|
||||
S_arrow_trap: \032
|
||||
S_ball: \032
|
||||
S_bars: \032
|
||||
S_bat: \032
|
||||
S_bear_trap: \032
|
||||
S_blcorn: \032
|
||||
S_blob: \032
|
||||
S_book: \032
|
||||
S_boomleft: \032
|
||||
S_boomright: \032
|
||||
S_boulder: \032
|
||||
S_brcorn: \032
|
||||
S_centaur: \032
|
||||
S_chain: \032
|
||||
S_cloud: \032
|
||||
S_cockatrice: \032
|
||||
S_coin: \032
|
||||
S_corr: \032
|
||||
S_crwall: \032
|
||||
S_darkroom: \032
|
||||
S_dart_trap: \032
|
||||
S_demon: \032
|
||||
S_digbeam: \032
|
||||
S_dnladder: \032
|
||||
S_dnstair: \032
|
||||
S_dog: \032
|
||||
S_dragon: \032
|
||||
S_eel: \032
|
||||
S_elemental: \032
|
||||
S_explode1: \032
|
||||
S_explode2: \032
|
||||
S_explode3: \032
|
||||
S_explode4: \032
|
||||
S_explode5: \032
|
||||
S_explode6: \032
|
||||
S_explode7: \032
|
||||
S_explode8: \032
|
||||
S_explode9: \032
|
||||
S_eye: \032
|
||||
S_falling_rock_trap: \032
|
||||
S_feline: \032
|
||||
S_fire_trap: \032
|
||||
S_flashbeam: \032
|
||||
S_food: \032
|
||||
S_fountain: \032
|
||||
S_fungus: \032
|
||||
S_gem: \032
|
||||
S_ghost: \032
|
||||
S_giant: \032
|
||||
S_gnome: \032
|
||||
S_golem: \032
|
||||
S_grave: \032
|
||||
S_gremlin: \032
|
||||
S_hbeam: \032
|
||||
S_hcdbridge: \032
|
||||
S_hcdoor: \032
|
||||
S_hodoor: \032
|
||||
S_hole: \032
|
||||
S_human: \032
|
||||
S_humanoid: \032
|
||||
S_hwall: \032
|
||||
S_imp: \032
|
||||
S_invisible: \032
|
||||
S_jabberwock: \032
|
||||
S_jelly: \032
|
||||
S_kobold: \032
|
||||
S_kop: \032
|
||||
S_land_mine: \032
|
||||
S_lava: \032
|
||||
S_leprechaun: \032
|
||||
S_level_teleporter: \032
|
||||
S_lich: \032
|
||||
S_light: \032
|
||||
S_litcorr: \032
|
||||
S_lizard: \032
|
||||
S_lslant: \032
|
||||
S_magic_portal: \032
|
||||
S_magic_trap: \032
|
||||
S_mimic: \032
|
||||
S_mimic_def: \032
|
||||
S_mummy: \032
|
||||
S_naga: \032
|
||||
S_ndoor: \032
|
||||
S_nymph: \032
|
||||
S_ogre: \032
|
||||
S_orc: \032
|
||||
S_piercer: \032
|
||||
S_pit: \032
|
||||
S_poisoncloud: \032
|
||||
S_polymorph_trap: \032
|
||||
S_pool: \032
|
||||
S_potion: \032
|
||||
S_pudding: \032
|
||||
S_quadruped: \032
|
||||
S_quantmech: \032
|
||||
S_ring: \032
|
||||
S_rock: \032
|
||||
S_rodent: \032
|
||||
S_rolling_boulder_trap: \032
|
||||
S_room: \032
|
||||
S_rslant: \032
|
||||
S_rust_trap: \032
|
||||
S_rustmonst: \032
|
||||
S_scroll: \032
|
||||
S_sink: \032
|
||||
S_sleeping_gas_trap: \032
|
||||
S_snake: \032
|
||||
S_spider: \032
|
||||
S_spiked_pit: \032
|
||||
S_squeaky_board: \032
|
||||
S_ss1: \032
|
||||
S_ss2: \032
|
||||
S_ss3: \032
|
||||
S_ss4: \032
|
||||
S_statue_trap: \032
|
||||
S_stone: \032
|
||||
S_sw_bc: \032
|
||||
S_sw_bl: \032
|
||||
S_sw_br: \032
|
||||
S_sw_ml: \032
|
||||
S_sw_mr: \032
|
||||
S_sw_tc: \032
|
||||
S_sw_tl: \032
|
||||
S_sw_tr: \032
|
||||
S_tdwall: \032
|
||||
S_teleportation_trap: \032
|
||||
S_throne: \032
|
||||
S_tlcorn: \032
|
||||
S_tlwall: \032
|
||||
S_tool: \032
|
||||
S_trap_door: \032
|
||||
S_trapper: \032
|
||||
S_trcorn: \032
|
||||
S_tree: \032
|
||||
S_troll: \032
|
||||
S_trwall: \032
|
||||
S_tuwall: \032
|
||||
S_umber: \032
|
||||
S_unicorn: \032
|
||||
S_upladder: \032
|
||||
S_upstair: \032
|
||||
S_vampire: \032
|
||||
S_vbeam: \032
|
||||
S_vcdbridge: \032
|
||||
S_vcdoor: \032
|
||||
S_vibrating_square: \032
|
||||
S_vodoor: \032
|
||||
S_vortex: \032
|
||||
S_vwall: \032
|
||||
S_wand: \032
|
||||
S_water: \032
|
||||
S_weapon: \032
|
||||
S_web: \032
|
||||
S_worm: \032
|
||||
S_worm_tail: \032
|
||||
S_wraith: \032
|
||||
S_xan: \032
|
||||
S_xorn: \032
|
||||
S_yeti: \032
|
||||
S_zombie: \032
|
||||
S_zruty: \032
|
||||
finish
|
||||
|
||||
start: plain
|
||||
Description: Same as Default symbols, except '+' for corner walls
|
||||
S_tlcorn: '+'
|
||||
|
||||
@@ -2698,6 +2698,7 @@ The possible settings are:
|
||||
.sd
|
||||
.si
|
||||
.CC c "compass ('east' or '3s' or '2n,4w');"
|
||||
.CC f "full compass ('east' or '3south' or '2north,4west');"
|
||||
.CC m "map <x,y> (map column x=0 is not used);"
|
||||
.CC s "screen [row,column] (row is offset to match tty usage);"
|
||||
.CC n "none (no coordinates shown) [default]."
|
||||
@@ -3186,6 +3187,7 @@ c S_cockatrice (cockatrice)
|
||||
$ S_coin (pile of coins)
|
||||
# S_corr (corridor)
|
||||
- S_crwall (wall)
|
||||
# S_darkroom (dark room)
|
||||
^ S_dart_trap (dart trap)
|
||||
& S_demon (major demon)
|
||||
* S_digbeam (dig beam)
|
||||
|
||||
@@ -3230,6 +3230,7 @@ The possible settings are:
|
||||
%.sd
|
||||
%.si
|
||||
{\tt c} --- \verb#compass ('east' or '3s' or '2n,4w')#;\\
|
||||
{\tt f} --- \verb#full compass ('east' or '3south' or '2north,4west')#;\\
|
||||
{\tt m} --- \verb#map <x,y> (map column x=0 is not used)#;\\
|
||||
{\tt s} --- \verb#screen [row,column] (row is offset to match tty usage)#;\\
|
||||
{\tt n} --- \verb#none (no coordinates shown) [default]#.
|
||||
@@ -3827,6 +3828,7 @@ Default & Symbol Name & Description\\
|
||||
\verb@$@ & S\verb+_+coin & (pile of coins)\\
|
||||
\verb@#@ & S\verb+_+corr & (corridor)\\
|
||||
\verb@-@ & S\verb+_+crwall & (wall)\\
|
||||
\verb@-@ & S\verb+_+darkroom & (dark room)\\
|
||||
\verb@^@ & S\verb+_+dart\verb+_+trap & (dart trap)\\
|
||||
\verb@&@ & S\verb+_+demon & (major demon)\\
|
||||
\verb@*@ & S\verb+_+digbeam & (dig beam)\\
|
||||
|
||||
@@ -339,6 +339,11 @@ change ing_suffix() to not double final 'w' when adding 'ing' ('t=' yielded
|
||||
using 'D' to drop when not carrying anything finished (after doing nothing)
|
||||
without giving any feedback for menustyles "full" and "partial"
|
||||
"you hear a distant <musical note> squeak" might actually be nearby
|
||||
differentiate symset and roguesymset option menu prompts
|
||||
don't show monster vs. monster attack message, if the message refers to
|
||||
a monster that cannot be sensed by the hero
|
||||
umber hulk gazing at hidden mimic forces mimic to unhide
|
||||
show some timed hero properties in wizard-mode #timeout
|
||||
|
||||
|
||||
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
|
||||
@@ -488,6 +493,9 @@ prevent diagonal jumping through open doorways
|
||||
different liquids when hallucinating
|
||||
when moving a cursor for travel target, show if there is no known travel
|
||||
path to that location, if "autodescribe" is on
|
||||
show the reason why travel was interrupted if mention_walls is on
|
||||
random horses have a tiny chance of being generated saddled
|
||||
give feedback just before timed levitation runs out
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific New Features
|
||||
@@ -505,6 +513,7 @@ X11: NetHack*extcmd_height_delta resource can be used to adjust initial size
|
||||
X11: status display split into three columns to accomodate Stone/Deaf/Lev/&c;
|
||||
NetHack*status_condition.foreground, .background, and .showGrip
|
||||
resources replaced by status_condition[1-3].*
|
||||
X11: more terminal-like default resources
|
||||
|
||||
|
||||
NetHack Community Patches (or Variation) Included
|
||||
|
||||
@@ -173,6 +173,7 @@ struct sysflag {
|
||||
#define GPCOORDS_NONE 'n'
|
||||
#define GPCOORDS_MAP 'm'
|
||||
#define GPCOORDS_COMPASS 'c'
|
||||
#define GPCOORDS_COMFULL 'f'
|
||||
#define GPCOORDS_SCREEN 's'
|
||||
|
||||
struct instance_flags {
|
||||
|
||||
@@ -102,6 +102,14 @@
|
||||
#define CXN_ARTICLE 8 /* include a/an/the prefix */
|
||||
#define CXN_NOCORPSE 16 /* suppress " corpse" suffix */
|
||||
|
||||
/* getpos() return values */
|
||||
enum getpos_retval {
|
||||
LOOK_TRADITIONAL = 0, /* '.' -- ask about "more info?" */
|
||||
LOOK_QUICK, /* ',' -- skip "more info?" */
|
||||
LOOK_ONCE, /* ';' -- skip and stop looping */
|
||||
LOOK_VERBOSE /* ':' -- show more info w/o asking */
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the way the game ends. If these are rearranged, the arrays
|
||||
* in end.c and topten.c will need to be changed. Some parts of the
|
||||
|
||||
13
src/cmd.c
13
src/cmd.c
@@ -3747,6 +3747,16 @@ char c;
|
||||
return (boolean) (c == C('r') || (Cmd.num_pad && c == C('l')));
|
||||
}
|
||||
|
||||
boolean
|
||||
prefix_cmd(c)
|
||||
char c;
|
||||
{
|
||||
return (boolean) (c == 'g' || c == 'G'
|
||||
|| c == 'm' || c == 'M'
|
||||
|| c == 'F'
|
||||
|| (Cmd.num_pad && (c == '5' || c == '-')));
|
||||
}
|
||||
|
||||
/*
|
||||
* uses getdir() but unlike getdir() it specifically
|
||||
* produces coordinates using the direction from getdir()
|
||||
@@ -4193,8 +4203,7 @@ parse()
|
||||
|
||||
in_line[0] = foo;
|
||||
in_line[1] = '\0';
|
||||
if (foo == 'g' || foo == 'G' || foo == 'm' || foo == 'M' || foo == 'F'
|
||||
|| (Cmd.num_pad && (foo == '5' || foo == '-'))) {
|
||||
if (prefix_cmd(foo)) {
|
||||
foo = readchar();
|
||||
savech((char) foo);
|
||||
in_line[1] = foo;
|
||||
|
||||
@@ -54,28 +54,28 @@ const char *goal;
|
||||
boolean doing_what_is;
|
||||
winid tmpwin = create_nhwindow(NHW_MENU);
|
||||
|
||||
Sprintf(sbuf, "Use [%c%c%c%c] to move the cursor to %s.", /* hjkl */
|
||||
Sprintf(sbuf, "Use '%c', '%c', '%c', '%c' to move the cursor to %s.", /* hjkl */
|
||||
Cmd.move_W, Cmd.move_S, Cmd.move_N, Cmd.move_E, goal);
|
||||
putstr(tmpwin, 0, sbuf);
|
||||
putstr(tmpwin, 0, "Use [HJKL] to move the cursor 8 units at a time.");
|
||||
putstr(tmpwin, 0, "Or enter a background symbol (ex. <).");
|
||||
putstr(tmpwin, 0, "Use @ to move the cursor on yourself.");
|
||||
putstr(tmpwin, 0, "Use 'H', 'J', 'K', 'L' to move the cursor 8 units at a time.");
|
||||
putstr(tmpwin, 0, "Or enter a background symbol (ex. '<').");
|
||||
putstr(tmpwin, 0, "Use '@' to move the cursor on yourself.");
|
||||
if (!iflags.terrainmode || (iflags.terrainmode & TER_MON) != 0)
|
||||
putstr(tmpwin, 0, "Use m or M to move the cursor to next monster.");
|
||||
putstr(tmpwin, 0, "Use 'm' or 'M' to move the cursor to next monster.");
|
||||
if (!iflags.terrainmode || (iflags.terrainmode & TER_OBJ) != 0)
|
||||
putstr(tmpwin, 0, "Use o or O to move the cursor to next object.");
|
||||
putstr(tmpwin, 0, "Use 'o' or 'O' to move the cursor to next object.");
|
||||
if (!iflags.terrainmode || (iflags.terrainmode & TER_MAP) != 0) {
|
||||
/* both of these are primarily useful when choosing a travel
|
||||
destination for the '_' command */
|
||||
putstr(tmpwin, 0,
|
||||
"Use d or D to move the cursor to next door or doorway.");
|
||||
"Use 'd' or 'D' to move the cursor to next door or doorway.");
|
||||
putstr(tmpwin, 0,
|
||||
"Use x or X to move the cursor to unexplored location.");
|
||||
"Use 'x' or 'X' to move the cursor to unexplored location.");
|
||||
}
|
||||
if (!iflags.terrainmode) {
|
||||
if (getpos_hilitefunc)
|
||||
putstr(tmpwin, 0, "Use $ to display valid locations.");
|
||||
putstr(tmpwin, 0, "Use # to toggle automatic description.");
|
||||
putstr(tmpwin, 0, "Use '$' to display valid locations.");
|
||||
putstr(tmpwin, 0, "Use '#' to toggle automatic description.");
|
||||
if (iflags.cmdassist) /* assisting the '/' command, I suppose... */
|
||||
putstr(tmpwin, 0,
|
||||
(iflags.getpos_coords == GPCOORDS_NONE)
|
||||
@@ -84,20 +84,20 @@ const char *goal;
|
||||
/* disgusting hack; the alternate selection characters work for any
|
||||
getpos call, but only matter for dowhatis (and doquickwhatis) */
|
||||
doing_what_is = (goal == what_is_an_unknown_object);
|
||||
Sprintf(sbuf, "Type a .%s when you are at the right place.",
|
||||
doing_what_is ? " or , or ; or :" : "");
|
||||
Sprintf(sbuf, "Type a '.'%s when you are at the right place.",
|
||||
doing_what_is ? " or ',' or ';' or ':'" : "");
|
||||
putstr(tmpwin, 0, sbuf);
|
||||
if (doing_what_is) {
|
||||
putstr(tmpwin, 0,
|
||||
" : describe current spot, show 'more info', move to another spot.");
|
||||
" ':' describe current spot, show 'more info', move to another spot.");
|
||||
Sprintf(sbuf,
|
||||
" . describe current spot,%s move to another spot;",
|
||||
" '.' describe current spot,%s move to another spot;",
|
||||
flags.help ? " prompt if 'more info'," : "");
|
||||
putstr(tmpwin, 0, sbuf);
|
||||
putstr(tmpwin, 0,
|
||||
" , describe current spot, move to another spot;");
|
||||
" ',' describe current spot, move to another spot;");
|
||||
putstr(tmpwin, 0,
|
||||
" ; describe current spot, stop looking at things;");
|
||||
" ';' describe current spot, stop looking at things;");
|
||||
}
|
||||
}
|
||||
if (!force)
|
||||
@@ -232,11 +232,11 @@ int gloc;
|
||||
}
|
||||
|
||||
char *
|
||||
dxdy_to_dist_descr(dx, dy)
|
||||
dxdy_to_dist_descr(dx, dy, fulldir)
|
||||
int dx, dy;
|
||||
boolean fulldir;
|
||||
{
|
||||
/* [12] suffices, but guard against long translation for direction-name */
|
||||
static char buf[20];
|
||||
static char buf[30];
|
||||
int dst;
|
||||
|
||||
if (!dx && !dy) {
|
||||
@@ -245,18 +245,23 @@ int dx, dy;
|
||||
/* explicit direction; 'one step' is implicit */
|
||||
Sprintf(buf, "%s", directionname(dst));
|
||||
} else {
|
||||
const char *dirnames[4][2] = {
|
||||
{ "n", "north" },
|
||||
{ "s", "south" },
|
||||
{ "w", "west" },
|
||||
{ "e", "east" } };
|
||||
buf[0] = '\0';
|
||||
/* 9999: protect buf[] against overflow caused by invalid values */
|
||||
if (dy) {
|
||||
if (abs(dy) > 9999)
|
||||
dy = sgn(dy) * 9999;
|
||||
Sprintf(eos(buf), "%d%c%s", abs(dy), (dy > 0) ? 's' : 'n',
|
||||
Sprintf(eos(buf), "%d%s%s", abs(dy), dirnames[(dy > 0)][fulldir],
|
||||
dx ? "," : "");
|
||||
}
|
||||
if (dx) {
|
||||
if (abs(dx) > 9999)
|
||||
dx = sgn(dx) * 9999;
|
||||
Sprintf(eos(buf), "%d%c", abs(dx), (dx > 0) ? 'e' : 'w');
|
||||
Sprintf(eos(buf), "%d%s", abs(dx), dirnames[2 + (dx > 0)][fulldir]);
|
||||
}
|
||||
}
|
||||
return buf;
|
||||
@@ -275,11 +280,13 @@ char *outbuf, cmode;
|
||||
switch (cmode) {
|
||||
default:
|
||||
break;
|
||||
case GPCOORDS_COMFULL:
|
||||
case GPCOORDS_COMPASS:
|
||||
/* "east", "3s", "2n,4w" */
|
||||
dx = x - u.ux;
|
||||
dy = y - u.uy;
|
||||
Sprintf(outbuf, "(%s)", dxdy_to_dist_descr(dx, dy));
|
||||
Sprintf(outbuf, "(%s)",
|
||||
dxdy_to_dist_descr(dx, dy, cmode == GPCOORDS_COMFULL));
|
||||
break;
|
||||
case GPCOORDS_MAP: /* x,y */
|
||||
/* upper left corner of map is <1,0>;
|
||||
@@ -346,7 +353,7 @@ const char *goal;
|
||||
if (!goal)
|
||||
goal = "desired location";
|
||||
if (flags.verbose) {
|
||||
pline("(For instructions type a ?)");
|
||||
pline("(For instructions type a '?')");
|
||||
msg_given = TRUE;
|
||||
}
|
||||
cx = ccp->x;
|
||||
@@ -561,7 +568,7 @@ const char *goal;
|
||||
if (!force)
|
||||
Strcpy(note, "aborted");
|
||||
else
|
||||
Sprintf(note, "use %c%c%c%c or .", /* hjkl */
|
||||
Sprintf(note, "use '%c', '%c', '%c', '%c' or '.'", /* hjkl */
|
||||
Cmd.move_W, Cmd.move_S, Cmd.move_N,
|
||||
Cmd.move_E);
|
||||
pline("Unknown direction: '%s' (%s).", visctrl((char) c),
|
||||
|
||||
@@ -498,7 +498,7 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */
|
||||
} else if (mdef == &youmonst) {
|
||||
Your("brain is eaten!");
|
||||
} else { /* monster against monster */
|
||||
if (visflag)
|
||||
if (visflag && canspotmon(mdef))
|
||||
pline("%s brain is eaten!", s_suffix(Monnam(mdef)));
|
||||
}
|
||||
|
||||
@@ -512,7 +512,7 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */
|
||||
} else {
|
||||
/* no need to check for poly_when_stoned or Stone_resistance;
|
||||
mind flayers don't have those capabilities */
|
||||
if (visflag)
|
||||
if (visflag && canseemon(magr))
|
||||
pline("%s turns to stone!", Monnam(magr));
|
||||
monstone(magr);
|
||||
if (magr->mhp > 0) {
|
||||
@@ -597,7 +597,7 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */
|
||||
* monster mind flayer is eating another monster's brain
|
||||
*/
|
||||
if (mindless(pd)) {
|
||||
if (visflag)
|
||||
if (visflag && canspotmon(mdef))
|
||||
pline("%s doesn't notice.", Monnam(mdef));
|
||||
return MM_MISS;
|
||||
} else if (is_rider(pd)) {
|
||||
@@ -609,7 +609,7 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */
|
||||
} else {
|
||||
*dmg_p += xtra_dmg;
|
||||
give_nutrit = TRUE;
|
||||
if (*dmg_p >= mdef->mhp && visflag)
|
||||
if (*dmg_p >= mdef->mhp && visflag && canspotmon(mdef))
|
||||
pline("%s last thought fades away...",
|
||||
s_suffix(Monnam(mdef)));
|
||||
}
|
||||
|
||||
@@ -1302,6 +1302,13 @@ int mmflags;
|
||||
m_initweap(mtmp); /* equip with weapons / armor */
|
||||
m_initinv(mtmp); /* add on a few special items incl. more armor */
|
||||
m_dowear(mtmp, TRUE);
|
||||
|
||||
if (!rn2(100) && is_domestic(ptr)
|
||||
&& can_saddle(mtmp) && !which_armor(mtmp, W_SADDLE)) {
|
||||
struct obj *otmp = mksobj(SADDLE, TRUE, FALSE);
|
||||
put_saddle_on_mon(otmp, mtmp);
|
||||
}
|
||||
|
||||
} else {
|
||||
/* no initial inventory is allowed */
|
||||
if (mtmp->minvent)
|
||||
|
||||
91
src/mhitm.c
91
src/mhitm.c
@@ -410,7 +410,7 @@ register struct monst *magr, *mdef;
|
||||
&& mdef->mhp > 1
|
||||
&& !mdef->mcan) {
|
||||
if (clone_mon(mdef, 0, 0)) {
|
||||
if (vis) {
|
||||
if (vis && canspotmon(mdef)) {
|
||||
char buf[BUFSZ];
|
||||
|
||||
Strcpy(buf, Monnam(mdef));
|
||||
@@ -587,13 +587,17 @@ struct attack *mattk;
|
||||
char buf[BUFSZ];
|
||||
|
||||
if (vis) {
|
||||
if (mdef->data->mlet == S_MIMIC
|
||||
&& mdef->m_ap_type != M_AP_NOTHING)
|
||||
seemimic(mdef);
|
||||
Sprintf(buf, "%s gazes at", Monnam(magr));
|
||||
pline("%s %s...", buf, mon_nam(mdef));
|
||||
pline("%s %s...", buf,
|
||||
canspotmon(mdef) ? mon_nam(mdef) : "something");
|
||||
}
|
||||
|
||||
if (magr->mcan || !magr->mcansee || !mdef->mcansee
|
||||
|| (magr->minvis && !perceives(mdef->data)) || mdef->msleeping) {
|
||||
if (vis)
|
||||
if (vis && canspotmon(mdef))
|
||||
pline("but nothing happens.");
|
||||
return MM_MISS;
|
||||
}
|
||||
@@ -689,8 +693,10 @@ register struct attack *mattk;
|
||||
if (vis) {
|
||||
/* 'it' -- previous form is no longer available and
|
||||
using that would be excessively verbose */
|
||||
pline("%s expels it.", Monnam(magr));
|
||||
pline("It turns into %s.", a_monnam(mdef));
|
||||
pline("%s expels %s.", Monnam(magr),
|
||||
canspotmon(mdef) ? "it" : something);
|
||||
if (canspotmon(mdef))
|
||||
pline("It turns into %s.", a_monnam(mdef));
|
||||
}
|
||||
return MM_HIT; /* bypass mdamagem() */
|
||||
}
|
||||
@@ -806,7 +812,7 @@ register struct attack *mattk;
|
||||
mon_to_stone(magr);
|
||||
return MM_HIT; /* no damage during the polymorph */
|
||||
}
|
||||
if (vis)
|
||||
if (vis && canspotmon(magr))
|
||||
pline("%s turns to stone!", Monnam(magr));
|
||||
monstone(magr);
|
||||
if (magr->mhp > 0)
|
||||
@@ -825,7 +831,7 @@ register struct attack *mattk;
|
||||
case AD_DGST:
|
||||
/* eating a Rider or its corpse is fatal */
|
||||
if (is_rider(pd)) {
|
||||
if (vis)
|
||||
if (vis && canseemon(magr))
|
||||
pline("%s %s!", Monnam(magr),
|
||||
(pd == &mons[PM_FAMINE])
|
||||
? "belches feebly, shrivels up and dies"
|
||||
@@ -921,10 +927,10 @@ register struct attack *mattk;
|
||||
tmp = 0;
|
||||
break;
|
||||
}
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s is %s!", Monnam(mdef), on_fire(pd, mattk));
|
||||
if (pd == &mons[PM_STRAW_GOLEM] || pd == &mons[PM_PAPER_GOLEM]) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s burns completely!", Monnam(mdef));
|
||||
mondied(mdef);
|
||||
if (mdef->mhp > 0)
|
||||
@@ -936,7 +942,7 @@ register struct attack *mattk;
|
||||
tmp += destroy_mitem(mdef, SCROLL_CLASS, AD_FIRE);
|
||||
tmp += destroy_mitem(mdef, SPBOOK_CLASS, AD_FIRE);
|
||||
if (resists_fire(mdef)) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline_The("fire doesn't seem to burn %s!", mon_nam(mdef));
|
||||
shieldeff(mdef->mx, mdef->my);
|
||||
golemeffects(mdef, AD_FIRE, tmp);
|
||||
@@ -950,10 +956,10 @@ register struct attack *mattk;
|
||||
tmp = 0;
|
||||
break;
|
||||
}
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s is covered in frost!", Monnam(mdef));
|
||||
if (resists_cold(mdef)) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline_The("frost doesn't seem to chill %s!", mon_nam(mdef));
|
||||
shieldeff(mdef->mx, mdef->my);
|
||||
golemeffects(mdef, AD_COLD, tmp);
|
||||
@@ -966,11 +972,11 @@ register struct attack *mattk;
|
||||
tmp = 0;
|
||||
break;
|
||||
}
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s gets zapped!", Monnam(mdef));
|
||||
tmp += destroy_mitem(mdef, WAND_CLASS, AD_ELEC);
|
||||
if (resists_elec(mdef)) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline_The("zap doesn't shock %s!", mon_nam(mdef));
|
||||
shieldeff(mdef->mx, mdef->my);
|
||||
golemeffects(mdef, AD_ELEC, tmp);
|
||||
@@ -985,11 +991,11 @@ register struct attack *mattk;
|
||||
break;
|
||||
}
|
||||
if (resists_acid(mdef)) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s is covered in %s, but it seems harmless.",
|
||||
Monnam(mdef), hliquid("acid"));
|
||||
tmp = 0;
|
||||
} else if (vis) {
|
||||
} else if (vis && canseemon(mdef)) {
|
||||
pline("%s is covered in %s!", Monnam(mdef), hliquid("acid"));
|
||||
pline("It burns %s!", mon_nam(mdef));
|
||||
}
|
||||
@@ -1002,7 +1008,7 @@ register struct attack *mattk;
|
||||
if (magr->mcan)
|
||||
break;
|
||||
if (pd == &mons[PM_IRON_GOLEM]) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s falls to pieces!", Monnam(mdef));
|
||||
mondied(mdef);
|
||||
if (mdef->mhp > 0)
|
||||
@@ -1026,7 +1032,7 @@ register struct attack *mattk;
|
||||
if (magr->mcan)
|
||||
break;
|
||||
if (pd == &mons[PM_WOOD_GOLEM] || pd == &mons[PM_LEATHER_GOLEM]) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s falls to pieces!", Monnam(mdef));
|
||||
mondied(mdef);
|
||||
if (mdef->mhp > 0)
|
||||
@@ -1052,7 +1058,7 @@ register struct attack *mattk;
|
||||
break;
|
||||
}
|
||||
if (!resists_ston(mdef)) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s turns to stone!", Monnam(mdef));
|
||||
monstone(mdef);
|
||||
post_stone:
|
||||
@@ -1067,20 +1073,21 @@ register struct attack *mattk;
|
||||
case AD_TLPT:
|
||||
if (!cancelled && tmp < mdef->mhp && !tele_restrict(mdef)) {
|
||||
char mdef_Monnam[BUFSZ];
|
||||
boolean wasseen = canspotmon(mdef);
|
||||
/* save the name before monster teleports, otherwise
|
||||
we'll get "it" in the suddenly disappears message */
|
||||
if (vis)
|
||||
if (vis && wasseen)
|
||||
Strcpy(mdef_Monnam, Monnam(mdef));
|
||||
mdef->mstrategy &= ~STRAT_WAITFORU;
|
||||
(void) rloc(mdef, TRUE);
|
||||
if (vis && !canspotmon(mdef) && mdef != u.usteed)
|
||||
if (vis && wasseen && !canspotmon(mdef) && mdef != u.usteed)
|
||||
pline("%s suddenly disappears!", mdef_Monnam);
|
||||
}
|
||||
break;
|
||||
case AD_SLEE:
|
||||
if (!cancelled && !mdef->msleeping
|
||||
&& sleep_monst(mdef, rnd(10), -1)) {
|
||||
if (vis) {
|
||||
if (vis && canspotmon(mdef)) {
|
||||
Strcpy(buf, Monnam(mdef));
|
||||
pline("%s is put to sleep by %s.", buf, mon_nam(magr));
|
||||
}
|
||||
@@ -1090,7 +1097,7 @@ register struct attack *mattk;
|
||||
break;
|
||||
case AD_PLYS:
|
||||
if (!cancelled && mdef->mcanmove) {
|
||||
if (vis) {
|
||||
if (vis && canspotmon(mdef)) {
|
||||
Strcpy(buf, Monnam(mdef));
|
||||
pline("%s is frozen by %s.", buf, mon_nam(magr));
|
||||
}
|
||||
@@ -1103,7 +1110,7 @@ register struct attack *mattk;
|
||||
|
||||
mon_adjust_speed(mdef, -1, (struct obj *) 0);
|
||||
mdef->mstrategy &= ~STRAT_WAITFORU;
|
||||
if (mdef->mspeed != oldspeed && vis)
|
||||
if (mdef->mspeed != oldspeed && vis && canspotmon(mdef))
|
||||
pline("%s slows down.", Monnam(mdef));
|
||||
}
|
||||
break;
|
||||
@@ -1113,7 +1120,7 @@ register struct attack *mattk;
|
||||
* we still should check for it).
|
||||
*/
|
||||
if (!magr->mcan && !mdef->mconf && !magr->mspec_used) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s looks confused.", Monnam(mdef));
|
||||
mdef->mconf = 1;
|
||||
mdef->mstrategy &= ~STRAT_WAITFORU;
|
||||
@@ -1123,7 +1130,7 @@ register struct attack *mattk;
|
||||
if (can_blnd(magr, mdef, mattk->aatyp, (struct obj *) 0)) {
|
||||
register unsigned rnd_tmp;
|
||||
|
||||
if (vis && mdef->mcansee)
|
||||
if (vis && mdef->mcansee && canspotmon(mdef))
|
||||
pline("%s is blinded.", Monnam(mdef));
|
||||
rnd_tmp = d((int) mattk->damn, (int) mattk->damd);
|
||||
if ((rnd_tmp += mdef->mblinded) > 127)
|
||||
@@ -1136,7 +1143,7 @@ register struct attack *mattk;
|
||||
break;
|
||||
case AD_HALU:
|
||||
if (!magr->mcan && haseyes(pd) && mdef->mcansee) {
|
||||
if (vis)
|
||||
if (vis && canseemon(mdef))
|
||||
pline("%s looks %sconfused.", Monnam(mdef),
|
||||
mdef->mconf ? "more " : "");
|
||||
mdef->mconf = 1;
|
||||
@@ -1153,7 +1160,7 @@ register struct attack *mattk;
|
||||
if (is_were(pd) && pd->mlet != S_HUMAN)
|
||||
were_change(mdef);
|
||||
if (pd == &mons[PM_CLAY_GOLEM]) {
|
||||
if (vis) {
|
||||
if (vis && canseemon(mdef)) {
|
||||
pline("Some writing vanishes from %s head!",
|
||||
s_suffix(mon_nam(mdef)));
|
||||
pline("%s is destroyed!", Monnam(mdef));
|
||||
@@ -1169,7 +1176,7 @@ register struct attack *mattk;
|
||||
if (!Deaf) {
|
||||
if (!vis)
|
||||
You_hear("laughter.");
|
||||
else
|
||||
else if (canseemon(magr))
|
||||
pline("%s chuckles.", Monnam(magr));
|
||||
}
|
||||
}
|
||||
@@ -1190,20 +1197,21 @@ register struct attack *mattk;
|
||||
add_to_minv(magr, gold);
|
||||
}
|
||||
mdef->mstrategy &= ~STRAT_WAITFORU;
|
||||
if (vis) {
|
||||
if (vis && canseemon(mdef)) {
|
||||
Strcpy(buf, Monnam(magr));
|
||||
pline("%s steals some gold from %s.", buf, mon_nam(mdef));
|
||||
}
|
||||
if (!tele_restrict(magr)) {
|
||||
boolean couldspot = canspotmon(magr);
|
||||
(void) rloc(magr, TRUE);
|
||||
if (vis && !canspotmon(magr))
|
||||
if (vis && couldspot && !canspotmon(magr))
|
||||
pline("%s suddenly disappears!", buf);
|
||||
}
|
||||
break;
|
||||
case AD_DRLI:
|
||||
if (!cancelled && !rn2(3) && !resists_drli(mdef)) {
|
||||
tmp = d(2, 6);
|
||||
if (vis)
|
||||
if (vis && canspotmon(mdef))
|
||||
pline("%s suddenly seems weaker!", Monnam(mdef));
|
||||
mdef->mhpmax -= tmp;
|
||||
if (mdef->m_lev == 0)
|
||||
@@ -1247,7 +1255,7 @@ register struct attack *mattk;
|
||||
if (vis)
|
||||
Strcpy(onambuf, doname(otmp));
|
||||
(void) add_to_minv(magr, otmp);
|
||||
if (vis) {
|
||||
if (vis && canseemon(mdef)) {
|
||||
Strcpy(buf, Monnam(magr));
|
||||
pline("%s steals %s from %s!", buf, onambuf, mdefnambuf);
|
||||
}
|
||||
@@ -1258,8 +1266,9 @@ register struct attack *mattk;
|
||||
return (MM_DEF_DIED
|
||||
| (grow_up(magr, mdef) ? 0 : MM_AGR_DIED));
|
||||
if (pa->mlet == S_NYMPH && !tele_restrict(magr)) {
|
||||
boolean couldspot = canspotmon(magr);
|
||||
(void) rloc(magr, TRUE);
|
||||
if (vis && !canspotmon(magr))
|
||||
if (vis && couldspot && !canspotmon(magr))
|
||||
pline("%s suddenly disappears!", buf);
|
||||
}
|
||||
}
|
||||
@@ -1267,25 +1276,25 @@ register struct attack *mattk;
|
||||
break;
|
||||
case AD_DREN:
|
||||
if (!cancelled && !rn2(4))
|
||||
xdrainenergym(mdef, vis && mattk->aatyp != AT_ENGL);
|
||||
xdrainenergym(mdef, vis && canspotmon(mdef) && mattk->aatyp != AT_ENGL);
|
||||
tmp = 0;
|
||||
break;
|
||||
case AD_DRST:
|
||||
case AD_DRDX:
|
||||
case AD_DRCO:
|
||||
if (!cancelled && !rn2(8)) {
|
||||
if (vis)
|
||||
if (vis && canspotmon(magr))
|
||||
pline("%s %s was poisoned!", s_suffix(Monnam(magr)),
|
||||
mpoisons_subj(magr, mattk));
|
||||
if (resists_poison(mdef)) {
|
||||
if (vis)
|
||||
if (vis && canspotmon(mdef) && canspotmon(magr))
|
||||
pline_The("poison doesn't seem to affect %s.",
|
||||
mon_nam(mdef));
|
||||
} else {
|
||||
if (rn2(10))
|
||||
tmp += rn1(10, 6);
|
||||
else {
|
||||
if (vis)
|
||||
if (vis && canspotmon(mdef))
|
||||
pline_The("poison was deadly...");
|
||||
tmp = mdef->mhp;
|
||||
}
|
||||
@@ -1294,14 +1303,14 @@ register struct attack *mattk;
|
||||
break;
|
||||
case AD_DRIN:
|
||||
if (notonhead || !has_head(pd)) {
|
||||
if (vis)
|
||||
if (vis && canspotmon(mdef))
|
||||
pline("%s doesn't seem harmed.", Monnam(mdef));
|
||||
/* Not clear what to do for green slimes */
|
||||
tmp = 0;
|
||||
break;
|
||||
}
|
||||
if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
|
||||
if (vis) {
|
||||
if (vis && canspotmon(magr) && canseemon(mdef)) {
|
||||
Strcpy(buf, s_suffix(Monnam(mdef)));
|
||||
pline("%s helmet blocks %s attack to %s head.", buf,
|
||||
s_suffix(mon_nam(magr)), mhis(mdef));
|
||||
@@ -1315,7 +1324,7 @@ register struct attack *mattk;
|
||||
break; /* physical damage only */
|
||||
if (!rn2(4) && !slimeproof(pd)) {
|
||||
if (!munslime(mdef, FALSE) && mdef->mhp > 0) {
|
||||
if (newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, vis))
|
||||
if (newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, vis && canseemon(mdef)))
|
||||
pd = mdef->data;
|
||||
mdef->mstrategy &= ~STRAT_WAITFORU;
|
||||
res = MM_HIT;
|
||||
|
||||
@@ -1768,6 +1768,23 @@ char **opp;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check if character c is illegal as a menu command key */
|
||||
boolean
|
||||
illegal_menu_cmd_key(c)
|
||||
char c;
|
||||
{
|
||||
if (c == 0 || c == '\r' || c == '\n' || c == '\033'
|
||||
|| c == ' ' || digit(c) || (letter(c) && c != '@'))
|
||||
return TRUE;
|
||||
else { /* reject default object class symbols */
|
||||
int j;
|
||||
for (j = 1; j < MAXOCLASSES; j++)
|
||||
if (c == def_oc_syms[j].sym)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
parseoptions(opts, tinitial, tfrom_file)
|
||||
register char *opts;
|
||||
@@ -2362,7 +2379,8 @@ boolean tinitial, tfrom_file;
|
||||
return;
|
||||
} else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
|
||||
static char gpcoords[] = { GPCOORDS_NONE, GPCOORDS_COMPASS,
|
||||
GPCOORDS_MAP, GPCOORDS_SCREEN, '\0' };
|
||||
GPCOORDS_COMFULL, GPCOORDS_MAP,
|
||||
GPCOORDS_SCREEN, '\0' };
|
||||
char c = lowc(*op);
|
||||
|
||||
if (c && index(gpcoords, c))
|
||||
@@ -3225,22 +3243,11 @@ boolean tinitial, tfrom_file;
|
||||
} else if ((op = string_for_opt(opts, FALSE)) != 0) {
|
||||
int j;
|
||||
char c, op_buf[BUFSZ];
|
||||
boolean isbad = FALSE;
|
||||
|
||||
escapes(op, op_buf);
|
||||
c = *op_buf;
|
||||
|
||||
if (c == 0 || c == '\r' || c == '\n' || c == '\033'
|
||||
|| c == ' ' || digit(c) || (letter(c) && c != '@'))
|
||||
isbad = TRUE;
|
||||
else /* reject default object class symbols */
|
||||
for (j = 1; j < MAXOCLASSES; j++)
|
||||
if (c == def_oc_syms[i].sym) {
|
||||
isbad = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (isbad)
|
||||
if (illegal_menu_cmd_key(c))
|
||||
badoption(opts);
|
||||
else
|
||||
add_menu_cmd_alias(c, default_menu_cmd_info[i].cmd);
|
||||
@@ -4104,6 +4111,10 @@ boolean setinitial, setfromfile;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMPASS,
|
||||
0, ATR_NONE, "compass ('east' or '3s' or '2n,4w')",
|
||||
(gp == GPCOORDS_COMPASS) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
any.a_char = GPCOORDS_COMFULL;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMFULL,
|
||||
0, ATR_NONE, "full compass ('east' or '3south' or '2north,4west')",
|
||||
(gp == GPCOORDS_COMFULL) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||
any.a_char = GPCOORDS_MAP;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_MAP,
|
||||
0, ATR_NONE, "map <x,y>",
|
||||
@@ -4561,7 +4572,8 @@ boolean setinitial, setfromfile;
|
||||
}
|
||||
sl = sl->next;
|
||||
}
|
||||
end_menu(tmpwin, "Select symbol set:");
|
||||
Sprintf(buf, "Select %ssymbol set:", rogueflag ? "rogue level " : "");
|
||||
end_menu(tmpwin, buf);
|
||||
if (select_menu(tmpwin, PICK_ONE, &symset_pick) > 0) {
|
||||
chosen = symset_pick->item.a_int - 2;
|
||||
free((genericptr_t) symset_pick);
|
||||
@@ -4916,6 +4928,7 @@ char *buf;
|
||||
Sprintf(buf, "%s",
|
||||
(iflags.getpos_coords == GPCOORDS_MAP) ? "map"
|
||||
: (iflags.getpos_coords == GPCOORDS_COMPASS) ? "compass"
|
||||
: (iflags.getpos_coords == GPCOORDS_COMFULL) ? "full compass"
|
||||
: (iflags.getpos_coords == GPCOORDS_SCREEN) ? "screen"
|
||||
: "none");
|
||||
} else if (!strcmp(optname, "scores")) {
|
||||
|
||||
240
src/pager.c
240
src/pager.c
@@ -18,8 +18,17 @@ STATIC_DCL void FDECL(checkfile, (char *, struct permonst *,
|
||||
BOOLEAN_P, BOOLEAN_P));
|
||||
STATIC_DCL void FDECL(look_all, (BOOLEAN_P,BOOLEAN_P));
|
||||
STATIC_DCL void NDECL(whatdoes_help);
|
||||
STATIC_DCL boolean FDECL(help_menu, (int *));
|
||||
STATIC_DCL void NDECL(docontact);
|
||||
STATIC_DCL void NDECL(dispfile_help);
|
||||
STATIC_DCL void NDECL(dispfile_shelp);
|
||||
STATIC_DCL void NDECL(dispfile_optionfile);
|
||||
STATIC_DCL void NDECL(dispfile_license);
|
||||
STATIC_DCL void NDECL(dispfile_debughelp);
|
||||
STATIC_DCL void NDECL(hmenu_doextversion);
|
||||
STATIC_DCL void NDECL(hmenu_dohistory);
|
||||
STATIC_DCL void NDECL(hmenu_dowhatis);
|
||||
STATIC_DCL void NDECL(hmenu_dowhatdoes);
|
||||
STATIC_DCL void NDECL(hmenu_doextlist);
|
||||
#ifdef PORT_HELP
|
||||
extern void NDECL(port_help);
|
||||
#endif
|
||||
@@ -53,6 +62,8 @@ const char *new_str;
|
||||
return 0;
|
||||
|
||||
space_left = BUFSZ - strlen(buf) - 1;
|
||||
if (space_left < 1)
|
||||
return 0;
|
||||
(void) strncat(buf, " or ", space_left);
|
||||
(void) strncat(buf, new_str, space_left - 4);
|
||||
return 1;
|
||||
@@ -918,6 +929,10 @@ const char **firstmatch;
|
||||
* If we are looking at the screen, follow multiple possibilities or
|
||||
* an ambiguous explanation by something more detailed.
|
||||
*/
|
||||
|
||||
if (found > 4)
|
||||
Sprintf(out_str, "%s", "That can be many things");
|
||||
|
||||
didlook:
|
||||
if (looked) {
|
||||
if (found > 1 || need_to_look) {
|
||||
@@ -943,12 +958,6 @@ const char **firstmatch;
|
||||
return found;
|
||||
}
|
||||
|
||||
/* getpos() return values */
|
||||
#define LOOK_TRADITIONAL 0 /* '.' -- ask about "more info?" */
|
||||
#define LOOK_QUICK 1 /* ',' -- skip "more info?" */
|
||||
#define LOOK_ONCE 2 /* ';' -- skip and stop looping */
|
||||
#define LOOK_VERBOSE 3 /* ':' -- show more info w/o asking */
|
||||
|
||||
/* also used by getpos hack in do_name.c */
|
||||
const char what_is_an_unknown_object[] = "an unknown object";
|
||||
|
||||
@@ -1636,123 +1645,124 @@ docontact()
|
||||
destroy_nhwindow(cwin);
|
||||
}
|
||||
|
||||
/* data for help_menu() */
|
||||
static const char *help_menu_items[] = {
|
||||
/* 0*/ "About NetHack (version information).",
|
||||
/* 1*/ "Long description of the game and commands.",
|
||||
/* 2*/ "List of game commands.",
|
||||
/* 3*/ "Concise history of NetHack.",
|
||||
/* 4*/ "Info on a character in the game display.",
|
||||
/* 5*/ "Info on what a given key does.",
|
||||
/* 6*/ "List of game options.",
|
||||
/* 7*/ "Longer explanation of game options.",
|
||||
/* 8*/ "List of extended commands.",
|
||||
/* 9*/ "The NetHack license.",
|
||||
/* 10*/ "Support information.",
|
||||
#ifdef PORT_HELP
|
||||
"%s-specific help and commands.",
|
||||
#define PORT_HELP_ID 100
|
||||
#define WIZHLP_SLOT 12
|
||||
#else
|
||||
#define WIZHLP_SLOT 11
|
||||
#endif
|
||||
"List of wizard-mode commands.", "", (char *) 0
|
||||
};
|
||||
|
||||
STATIC_OVL boolean
|
||||
help_menu(sel)
|
||||
int *sel;
|
||||
void
|
||||
dispfile_help()
|
||||
{
|
||||
winid tmpwin = create_nhwindow(NHW_MENU);
|
||||
#ifdef PORT_HELP
|
||||
char helpbuf[QBUFSZ];
|
||||
#endif
|
||||
int i, n;
|
||||
menu_item *selected;
|
||||
anything any;
|
||||
|
||||
any = zeroany; /* zero all bits */
|
||||
start_menu(tmpwin);
|
||||
if (!wizard)
|
||||
help_menu_items[WIZHLP_SLOT] = "",
|
||||
help_menu_items[WIZHLP_SLOT + 1] = (char *) 0;
|
||||
for (i = 0; help_menu_items[i]; i++)
|
||||
#ifdef PORT_HELP
|
||||
/* port-specific line has a %s in it for the PORT_ID */
|
||||
if (help_menu_items[i][0] == '%') {
|
||||
Sprintf(helpbuf, help_menu_items[i], PORT_ID);
|
||||
any.a_int = PORT_HELP_ID + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, helpbuf,
|
||||
MENU_UNSELECTED);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
any.a_int = (*help_menu_items[i]) ? i + 1 : 0;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
help_menu_items[i], MENU_UNSELECTED);
|
||||
}
|
||||
end_menu(tmpwin, "Select one item:");
|
||||
n = select_menu(tmpwin, PICK_ONE, &selected);
|
||||
destroy_nhwindow(tmpwin);
|
||||
if (n > 0) {
|
||||
*sel = selected[0].item.a_int - 1;
|
||||
free((genericptr_t) selected);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
display_file(HELP, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
dispfile_shelp()
|
||||
{
|
||||
display_file(SHELP, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
dispfile_optionfile()
|
||||
{
|
||||
display_file(OPTIONFILE, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
dispfile_license()
|
||||
{
|
||||
display_file(LICENSE, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
dispfile_debughelp()
|
||||
{
|
||||
display_file(DEBUGHELP, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
hmenu_doextversion()
|
||||
{
|
||||
(void) doextversion();
|
||||
}
|
||||
|
||||
void
|
||||
hmenu_dohistory()
|
||||
{
|
||||
(void) dohistory();
|
||||
}
|
||||
|
||||
void
|
||||
hmenu_dowhatis()
|
||||
{
|
||||
(void) dowhatis();
|
||||
}
|
||||
|
||||
void
|
||||
hmenu_dowhatdoes()
|
||||
{
|
||||
(void) dowhatdoes();
|
||||
}
|
||||
|
||||
void
|
||||
hmenu_doextlist()
|
||||
{
|
||||
(void) doextlist();
|
||||
}
|
||||
|
||||
/* data for dohelp() */
|
||||
static struct {
|
||||
void (*f)();
|
||||
const char *text;
|
||||
} help_menu_items[] = {
|
||||
{ hmenu_doextversion, "About NetHack (version information)." },
|
||||
{ dispfile_help, "Long description of the game and commands." },
|
||||
{ dispfile_shelp, "List of game commands." },
|
||||
{ hmenu_dohistory, "Concise history of NetHack." },
|
||||
{ hmenu_dowhatis, "Info on a character in the game display." },
|
||||
{ hmenu_dowhatdoes, "Info on what a given key does." },
|
||||
{ option_help, "List of game options." },
|
||||
{ dispfile_optionfile, "Longer explanation of game options." },
|
||||
{ hmenu_doextlist, "List of extended commands." },
|
||||
{ dispfile_license, "The NetHack license." },
|
||||
{ docontact, "Support information." },
|
||||
#ifdef PORT_HELP
|
||||
{ port_help, "%s-specific help and commands." },
|
||||
#endif
|
||||
{ dispfile_debughelp, "List of wizard-mode commands." },
|
||||
{ NULL, (char *) 0 }
|
||||
};
|
||||
|
||||
/* the '?' command */
|
||||
int
|
||||
dohelp()
|
||||
{
|
||||
int sel = 0;
|
||||
winid tmpwin = create_nhwindow(NHW_MENU);
|
||||
char helpbuf[QBUFSZ];
|
||||
int i, n;
|
||||
menu_item *selected;
|
||||
anything any;
|
||||
int sel;
|
||||
char *bufptr;
|
||||
|
||||
if (help_menu(&sel)) {
|
||||
switch (sel) {
|
||||
case 0:
|
||||
(void) doextversion();
|
||||
break;
|
||||
case 1:
|
||||
display_file(HELP, TRUE);
|
||||
break;
|
||||
case 2:
|
||||
display_file(SHELP, TRUE);
|
||||
break;
|
||||
case 3:
|
||||
(void) dohistory();
|
||||
break;
|
||||
case 4:
|
||||
(void) dowhatis();
|
||||
break;
|
||||
case 5:
|
||||
(void) dowhatdoes();
|
||||
break;
|
||||
case 6:
|
||||
option_help();
|
||||
break;
|
||||
case 7:
|
||||
display_file(OPTIONFILE, TRUE);
|
||||
break;
|
||||
case 8:
|
||||
(void) doextlist();
|
||||
break;
|
||||
case 9:
|
||||
display_file(LICENSE, TRUE);
|
||||
break;
|
||||
case 10:
|
||||
(void) docontact();
|
||||
break;
|
||||
#ifdef PORT_HELP
|
||||
case PORT_HELP_ID:
|
||||
port_help();
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
/* handle slot 11 or 12 */
|
||||
display_file(DEBUGHELP, TRUE);
|
||||
break;
|
||||
any = zeroany; /* zero all bits */
|
||||
start_menu(tmpwin);
|
||||
|
||||
for (i = 0; help_menu_items[i].text; i++) {
|
||||
if (!wizard && help_menu_items[i].f == dispfile_debughelp)
|
||||
continue;
|
||||
if (help_menu_items[i].text[0] == '%') {
|
||||
Sprintf(helpbuf, help_menu_items[i].text, PORT_ID);
|
||||
bufptr = helpbuf;
|
||||
} else {
|
||||
bufptr = (char *)help_menu_items[i].text;
|
||||
}
|
||||
any.a_int = i + 1;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
bufptr, MENU_UNSELECTED);
|
||||
}
|
||||
end_menu(tmpwin, "Select one item:");
|
||||
n = select_menu(tmpwin, PICK_ONE, &selected);
|
||||
destroy_nhwindow(tmpwin);
|
||||
if (n > 0) {
|
||||
sel = selected[0].item.a_int - 1;
|
||||
free((genericptr_t) selected);
|
||||
(void)(*help_menu_items[sel].f)();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
STATIC_DCL void NDECL(stoned_dialogue);
|
||||
STATIC_DCL void NDECL(vomiting_dialogue);
|
||||
STATIC_DCL void NDECL(choke_dialogue);
|
||||
STATIC_DCL void NDECL(levitation_dialogue);
|
||||
STATIC_DCL void NDECL(slime_dialogue);
|
||||
STATIC_DCL void NDECL(slip_or_trip);
|
||||
STATIC_DCL void FDECL(see_lamp_flicker, (struct obj *, const char *));
|
||||
@@ -122,14 +123,18 @@ vomiting_dialogue()
|
||||
}
|
||||
|
||||
static NEARDATA const char *const choke_texts[] = {
|
||||
"You find it hard to breathe.", "You're gasping for air.",
|
||||
"You can no longer breathe.", "You're turning %s.", "You suffocate."
|
||||
"You find it hard to breathe.",
|
||||
"You're gasping for air.",
|
||||
"You can no longer breathe.",
|
||||
"You're turning %s.",
|
||||
"You suffocate."
|
||||
};
|
||||
|
||||
static NEARDATA const char *const choke_texts2[] = {
|
||||
"Your %s is becoming constricted.",
|
||||
"Your blood is having trouble reaching your brain.",
|
||||
"The pressure on your %s increases.", "Your consciousness is fading.",
|
||||
"The pressure on your %s increases.",
|
||||
"Your consciousness is fading.",
|
||||
"You suffocate."
|
||||
};
|
||||
|
||||
@@ -153,6 +158,36 @@ choke_dialogue()
|
||||
exercise(A_STR, FALSE);
|
||||
}
|
||||
|
||||
static NEARDATA const char *const levi_texts[] = {
|
||||
"You float slightly lower.",
|
||||
"You wobble unsteadily %s the %s."
|
||||
};
|
||||
|
||||
STATIC_OVL void
|
||||
levitation_dialogue()
|
||||
{
|
||||
/* -1 because the last message comes via float_down() */
|
||||
long i = (((HLevitation & TIMEOUT) - 1L) / 2L);
|
||||
|
||||
if (ELevitation)
|
||||
return;
|
||||
|
||||
if (!ACCESSIBLE(levl[u.ux][u.uy].typ)
|
||||
&& !is_pool_or_lava(u.ux,u.uy))
|
||||
return;
|
||||
|
||||
if (((HLevitation & TIMEOUT) % 2L) && i > 0L && i <= SIZE(levi_texts)) {
|
||||
const char *s = levi_texts[SIZE(levi_texts) - i];
|
||||
if (index(s, '%')) {
|
||||
boolean danger = is_pool_or_lava(u.ux, u.uy)
|
||||
&& !Is_waterlevel(&u.uz);
|
||||
pline(s, danger ? "over" : "in",
|
||||
danger ? surface(u.ux, u.uy) : "air");
|
||||
} else
|
||||
pline1(s);
|
||||
}
|
||||
}
|
||||
|
||||
static NEARDATA const char *const slime_texts[] = {
|
||||
"You are turning a little %s.", /* 5 */
|
||||
"Your limbs are getting oozy.", /* 4 */
|
||||
@@ -238,6 +273,8 @@ nh_timeout()
|
||||
vomiting_dialogue();
|
||||
if (Strangled)
|
||||
choke_dialogue();
|
||||
if (Levitation)
|
||||
levitation_dialogue();
|
||||
if (u.mtimedone && !--u.mtimedone) {
|
||||
if (Unchanging)
|
||||
u.mtimedone = rnd(100 * youmonst.data->mlevel + 1);
|
||||
@@ -1453,6 +1490,26 @@ timer_element *base;
|
||||
}
|
||||
}
|
||||
|
||||
static boolean print_prop_header = TRUE;
|
||||
void
|
||||
print_prop(win, text, prop)
|
||||
winid win;
|
||||
const char *text;
|
||||
long prop;
|
||||
{
|
||||
char buf[BUFSZ];
|
||||
if (prop & TIMEOUT) {
|
||||
if (print_prop_header) {
|
||||
putstr(win, 0, "");
|
||||
putstr(win, 0, "Properties:");
|
||||
putstr(win, 0, "");
|
||||
print_prop_header = FALSE;
|
||||
}
|
||||
Sprintf(buf, " %10s: %ld", text, (prop & TIMEOUT));
|
||||
putstr(win, 0, buf);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
wiz_timeout_queue()
|
||||
{
|
||||
@@ -1470,6 +1527,13 @@ wiz_timeout_queue()
|
||||
putstr(win, 0, "");
|
||||
print_queue(win, timer_base);
|
||||
|
||||
print_prop_header = TRUE;
|
||||
print_prop(win, "Levitation", HLevitation);
|
||||
print_prop(win, "Stoned", Stoned);
|
||||
print_prop(win, "Vomiting", Vomiting);
|
||||
print_prop(win, "Strangled", Strangled);
|
||||
print_prop(win, "Slimed", Slimed);
|
||||
|
||||
display_nhwindow(win, FALSE);
|
||||
destroy_nhwindow(win);
|
||||
|
||||
|
||||
@@ -1,17 +1,28 @@
|
||||
! $NHDT-Date: 1457079198 2016/03/04 08:13:18 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.11 $
|
||||
|
||||
#define NETHACK_FONT -*-fixed-medium-*-*-*-15-*-*-*-*-*-*-*
|
||||
#define NETHACK_CLR_FG grey
|
||||
#define NETHACK_CLR_BG black
|
||||
#define NETHACK_CLR_QUIT red
|
||||
#define NETHACK_CLR_RANDOM green
|
||||
#define NETHACK_CLR_HELP green
|
||||
#define NETHACK_BTN_SHAPE roundedRectangle
|
||||
#define NETHACK_BTN_ROUND 20
|
||||
#define NETHACK_CMD_BORDER 0
|
||||
|
||||
! The display_file, tombstone, and menu windows are all formatted assuming
|
||||
! a fixed width font. Text windows may or may not be formatted as above.
|
||||
! The rip window applies if the GRAPHIC_TOMBSTONE option is turned on, and
|
||||
! requires a 12 pixel font for correct appearance.
|
||||
!
|
||||
NetHack*font: variable
|
||||
NetHack*display_file*font: fixed
|
||||
NetHack*tombstone*font: fixed
|
||||
NetHack*text*rip*font: -*-times-medium-r-*-*-12-*-*-*-*-*-*-*
|
||||
NetHack*menu*font: fixed
|
||||
NetHack*text*font: fixed
|
||||
NetHack*map*font: nh10
|
||||
NetHack*font: NETHACK_FONT
|
||||
NetHack*display_file*font: NETHACK_FONT
|
||||
NetHack*map*font: NETHACK_FONT
|
||||
NetHack*text*font: NETHACK_FONT
|
||||
NetHack*menu*font: NETHACK_FONT
|
||||
NetHack*tombstone*font: NETHACK_FONT
|
||||
NetHack*text*rip*font: -*-times-medium-r-*-*-12-*-*-*-*-*-*-*
|
||||
NetHack*text*borderWidth: 0
|
||||
|
||||
! tile_file names a file containing full-color tiles for the map.
|
||||
! If you use a 100dpi (or greater) monitor you may wish to double the
|
||||
@@ -35,7 +46,7 @@ NetHack.tile_file: x11tiles
|
||||
! The image file
|
||||
!NetHack.tombstone: rip.xpm
|
||||
! Text starts at (tombtext_x, tombtext_y) and subsequent lines
|
||||
! are displaced by (tombtext_dx, tombtext_dy) pixels. If you
|
||||
! are displaced by (tombtext_dx, tombtext_dy) pixels.
|
||||
!NetHack.tombtext_x: 155
|
||||
!NetHack.tombtext_y: 78
|
||||
!NetHack.tombtext_dx: 0
|
||||
@@ -73,7 +84,7 @@ NetHack*slow: True
|
||||
! as part of the map when no prompt is active, then invert foreground and
|
||||
! background to stand out when a prompt is issued and waiting for a response.
|
||||
! If 'slow' is False, 'highlight_prompt' will have no effect.
|
||||
NetHack*highlight_prompt: True
|
||||
NetHack*highlight_prompt: False
|
||||
|
||||
! The number of lines the message window will show without scrolling.
|
||||
!NetHack*message_lines: 12
|
||||
@@ -92,103 +103,105 @@ NetHack*highlight_prompt: True
|
||||
!NetHack*map*rows: 21
|
||||
!NetHack*map*columns: 80
|
||||
|
||||
! Parts of the fancy status display.
|
||||
!
|
||||
NetHack*status_condition1.borderWidth: 0
|
||||
NetHack*status_condition2.borderWidth: 0
|
||||
NetHack*status_condition3.borderWidth: 0
|
||||
NetHack*status_leftover.borderWidth: 0
|
||||
NetHack*status_info*borderWidth: 0
|
||||
NetHack*background: NETHACK_CLR_BG
|
||||
NetHack*foreground: NETHACK_CLR_FG
|
||||
|
||||
! Sample color screen entries.
|
||||
!
|
||||
NetHack*nethack.background: wheat
|
||||
NetHack*map*yellow: gold
|
||||
NetHack*map*brown: tan
|
||||
NetHack*map*gray: grey85
|
||||
NetHack*map*foreground: wheat
|
||||
NetHack*map*background: grey40
|
||||
NetHack*yn_prompt*borderWidth: 0
|
||||
|
||||
NetHack*fancy_status.skipAdjust: True
|
||||
NetHack*fancy_status.background: wheat
|
||||
NetHack*status_info*foreground: Sienna
|
||||
NetHack*status_info*background: wheat
|
||||
NetHack*status_info.background: wheat
|
||||
NetHack*status_attributes*foreground: black
|
||||
NetHack*status_attributes*background: white
|
||||
NetHack*status_condition1*foreground: red
|
||||
NetHack*status_condition1*background: wheat
|
||||
NetHack*status_condition2*foreground: black
|
||||
NetHack*status_condition2*background: wheat
|
||||
NetHack*status_condition3*foreground: black
|
||||
NetHack*status_condition3*background: wheat
|
||||
NetHack*Scrollbar*foreground: Sienna
|
||||
NetHack*Scrollbar*background: wheat
|
||||
NetHack*status_info*showGrip: False
|
||||
NetHack*status_attributes*showGrip: False
|
||||
NetHack*status_condition1*showGrip: False
|
||||
NetHack*status_condition2*showGrip: False
|
||||
NetHack*status_condition3*showGrip: False
|
||||
NetHack*Scrollbar*foreground: gray40
|
||||
NetHack*Scrollbar*background: gray10
|
||||
|
||||
NetHack*player_selection*random.borderColor: blue
|
||||
NetHack*player_selection*random.borderWidth: 2
|
||||
NetHack*player_selection*random.foreground: blue
|
||||
NetHack*player_selection*random.accelerators: #override\n\
|
||||
<Key>Return: set() notify() unset()
|
||||
NetHack*player_selection*quit.borderColor: blue
|
||||
NetHack*player_selection*quit.foreground: blue
|
||||
NetHack*player_selection*Command.borderColor: red
|
||||
NetHack*player_selection*Command.foreground: red
|
||||
NetHack*player_selection*quit.accelerators: #override\n\
|
||||
<Key>Escape: set() notify() unset()
|
||||
NetHack*fancy_status*background: NETHACK_CLR_BG
|
||||
NetHack*fancy_status*foreground: NETHACK_CLR_FG
|
||||
NetHack*fancy_status.skipAdjust: True
|
||||
|
||||
NetHack*race_selection*random.borderColor: blue
|
||||
NetHack*race_selection*random.borderWidth: 2
|
||||
NetHack*race_selection*random.foreground: blue
|
||||
NetHack*race_selection*random.accelerators: #override\n\
|
||||
<Key>Return: set() notify() unset()
|
||||
NetHack*race_selection*quit.borderColor: blue
|
||||
NetHack*race_selection*quit.foreground: blue
|
||||
NetHack*race_selection*Command.borderColor: red
|
||||
NetHack*race_selection*Command.foreground: red
|
||||
NetHack*race_selection*quit.accelerators: #override\n\
|
||||
<Key>Escape: set() notify() unset()
|
||||
NetHack*showGrip: False
|
||||
|
||||
NetHack*gender_selection*random.borderColor: blue
|
||||
NetHack*gender_selection*random.borderWidth: 2
|
||||
NetHack*gender_selection*random.foreground: blue
|
||||
NetHack*gender_selection*random.accelerators: #override\n\
|
||||
<Key>Return: set() notify() unset()
|
||||
NetHack*gender_selection*quit.borderColor: blue
|
||||
NetHack*gender_selection*quit.foreground: blue
|
||||
NetHack*gender_selection*Command.borderColor: red
|
||||
NetHack*gender_selection*Command.foreground: red
|
||||
NetHack*gender_selection*quit.accelerators: #override\n\
|
||||
<Key>Escape: set() notify() unset()
|
||||
! text input prompt window
|
||||
NetHack*response*textSink*background: red
|
||||
NetHack*response*foreground: NETHACK_CLR_FG
|
||||
NetHack*response*background: NETHACK_CLR_BG
|
||||
NetHack*response*borderColor: NETHACK_CLR_FG
|
||||
NetHack*response*borderWidth: 1
|
||||
|
||||
NetHack*alignment_selection*random.borderColor: blue
|
||||
NetHack*alignment_selection*random.borderWidth: 2
|
||||
NetHack*alignment_selection*random.foreground: blue
|
||||
NetHack*alignment_selection*random.accelerators: #override\n\
|
||||
<Key>Return: set() notify() unset()
|
||||
NetHack*alignment_selection*quit.borderColor: blue
|
||||
NetHack*alignment_selection*quit.foreground: blue
|
||||
NetHack*alignment_selection*Command.borderColor: red
|
||||
NetHack*alignment_selection*Command.foreground: red
|
||||
NetHack*alignment_selection*quit.accelerators: #override\n\
|
||||
<Key>Escape: set() notify() unset()
|
||||
! role selection window
|
||||
NetHack*player_selection*random.foreground: NETHACK_CLR_RANDOM
|
||||
NetHack*player_selection*random.background: black
|
||||
NetHack*player_selection*random.borderColor: NETHACK_CLR_RANDOM
|
||||
NetHack*player_selection*random.borderWidth: 1
|
||||
NetHack*player_selection*random.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*player_selection*random.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*player_selection*quit.foreground: NETHACK_CLR_QUIT
|
||||
NetHack*player_selection*quit.borderColor: NETHACK_CLR_QUIT
|
||||
NetHack*player_selection*quit.borderWidth: 1
|
||||
NetHack*player_selection*quit.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*player_selection*quit.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*player_selection*Command.foreground: NETHACK_CLR_FG
|
||||
NetHack*player_selection*Command.borderColor: NETHACK_CLR_FG
|
||||
NetHack*player_selection*Command.borderWidth: NETHACK_CMD_BORDER
|
||||
|
||||
NetHack*extended_commands*dismiss.borderColor: blue
|
||||
NetHack*extended_commands*dismiss.foreground: blue
|
||||
NetHack*extended_commands*help.borderColor: blue
|
||||
NetHack*extended_commands*help.foreground: blue
|
||||
NetHack*extended_commands*Command.borderColor: red
|
||||
NetHack*extended_commands*Command.foreground: red
|
||||
NetHack*extended_commands*help.accelerators: #override\n\
|
||||
:<Key>?: set() notify() unset()
|
||||
NetHack*extended_commands*dismiss.accelerators: #override\n\
|
||||
<Key>Escape: set() notify() unset()
|
||||
!
|
||||
! race selection window
|
||||
NetHack*race_selection*random.foreground: NETHACK_CLR_RANDOM
|
||||
NetHack*race_selection*random.background: black
|
||||
NetHack*race_selection*random.borderColor: NETHACK_CLR_RANDOM
|
||||
NetHack*race_selection*random.borderWidth: 1
|
||||
NetHack*race_selection*random.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*race_selection*random.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*race_selection*quit.foreground: NETHACK_CLR_QUIT
|
||||
NetHack*race_selection*quit.borderColor: NETHACK_CLR_QUIT
|
||||
NetHack*race_selection*quit.borderWidth: 1
|
||||
NetHack*race_selection*quit.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*race_selection*quit.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*race_selection*Command.foreground: NETHACK_CLR_FG
|
||||
NetHack*race_selection*Command.borderColor: NETHACK_CLR_FG
|
||||
NetHack*race_selection*Command.borderWidth: NETHACK_CMD_BORDER
|
||||
|
||||
! gender selection window
|
||||
NetHack*gender_selection*random.foreground: NETHACK_CLR_RANDOM
|
||||
NetHack*gender_selection*random.background: black
|
||||
NetHack*gender_selection*random.borderColor: NETHACK_CLR_RANDOM
|
||||
NetHack*gender_selection*random.borderWidth: 1
|
||||
NetHack*gender_selection*random.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*gender_selection*random.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*gender_selection*quit.foreground: NETHACK_CLR_QUIT
|
||||
NetHack*gender_selection*quit.borderColor: NETHACK_CLR_QUIT
|
||||
NetHack*gender_selection*quit.borderWidth: 1
|
||||
NetHack*gender_selection*quit.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*gender_selection*quit.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*gender_selection*Command.foreground: NETHACK_CLR_FG
|
||||
NetHack*gender_selection*Command.borderColor: NETHACK_CLR_FG
|
||||
NetHack*gender_selection*Command.borderWidth: NETHACK_CMD_BORDER
|
||||
|
||||
! alignment selection window
|
||||
NetHack*alignment_selection*random.foreground: NETHACK_CLR_RANDOM
|
||||
NetHack*alignment_selection*random.background: black
|
||||
NetHack*alignment_selection*random.borderColor: NETHACK_CLR_RANDOM
|
||||
NetHack*alignment_selection*random.borderWidth: 1
|
||||
NetHack*alignment_selection*random.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*alignment_selection*random.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*alignment_selection*quit.foreground: NETHACK_CLR_QUIT
|
||||
NetHack*alignment_selection*quit.borderColor: NETHACK_CLR_QUIT
|
||||
NetHack*alignment_selection*quit.borderWidth: 1
|
||||
NetHack*alignment_selection*quit.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*alignment_selection*quit.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*alignment_selection*Command.foreground: NETHACK_CLR_FG
|
||||
NetHack*alignment_selection*Command.borderColor: NETHACK_CLR_FG
|
||||
NetHack*alignment_selection*Command.borderWidth: NETHACK_CMD_BORDER
|
||||
|
||||
! extended commands window
|
||||
NetHack*extended_commands*dismiss.foreground: NETHACK_CLR_QUIT
|
||||
NetHack*extended_commands*dismiss.borderColor: NETHACK_CLR_QUIT
|
||||
NetHack*extended_commands*dismiss.borderWidth: 1
|
||||
NetHack*extended_commands*dismiss.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*extended_commands*dismiss.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*extended_commands*help.foreground: NETHACK_CLR_HELP
|
||||
NetHack*extended_commands*help.borderColor: NETHACK_CLR_HELP
|
||||
NetHack*extended_commands*help.borderWidth: 1
|
||||
NetHack*extended_commands*help.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*extended_commands*help.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
NetHack*extended_commands*Command.foreground: NETHACK_CLR_FG
|
||||
NetHack*extended_commands*Command.borderColor: NETHACK_CLR_FG
|
||||
NetHack*extended_commands*Command.borderWidth: NETHACK_CMD_BORDER
|
||||
! The extended command menu may be too big to fit on the screen so need
|
||||
! a vertical scroll bar. When truncated, its height will be as tall as
|
||||
! possible unless height_delta is non-zero, in which case there will be
|
||||
@@ -197,13 +210,64 @@ NetHack*extended_commands*dismiss.accelerators: #override\n\
|
||||
! obscuring the bottom of the menu.
|
||||
NetHack*extcmd_height_delta: 75
|
||||
|
||||
!
|
||||
! menu buttons
|
||||
NetHack*OK.foreground: green
|
||||
NetHack*OK.borderColor: green
|
||||
NetHack*OK.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*OK.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
NetHack*okay.foreground: green
|
||||
NetHack*okay.borderColor: green
|
||||
NetHack*okay.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*okay.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
NetHack*cancel.foreground: red
|
||||
NetHack*cancel.borderColor: red
|
||||
NetHack*cancel.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*cancel.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
NetHack*all.foreground: green
|
||||
NetHack*all.borderColor: green
|
||||
NetHack*all.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*all.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
NetHack*none.foreground: green
|
||||
NetHack*none.borderColor: green
|
||||
NetHack*none.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*none.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
NetHack*invert.foreground: green
|
||||
NetHack*invert.borderColor: green
|
||||
NetHack*invert.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*invert.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
NetHack*search.foreground: green
|
||||
NetHack*search.borderColor: green
|
||||
NetHack*search.shapeStyle: NETHACK_BTN_SHAPE
|
||||
NetHack*search.cornerRoundPercent: NETHACK_BTN_ROUND
|
||||
|
||||
! map colors
|
||||
! The foreground color is used as "no color".
|
||||
NetHack*map*foreground: NETHACK_CLR_FG
|
||||
NetHack*map*background: NETHACK_CLR_BG
|
||||
|
||||
NetHack*map*black: grey15
|
||||
NetHack*map*red: red3
|
||||
NetHack*map*green: green3
|
||||
NetHack*map*brown: DarkOrange3
|
||||
NetHack*map*blue: blue3
|
||||
NetHack*map*magenta: magenta3
|
||||
NetHack*map*cyan: cyan3
|
||||
NetHack*map*gray: gray50
|
||||
NetHack*map*orange: yellow
|
||||
NetHack*map*bright_green: green
|
||||
NetHack*map*yellow: yellow
|
||||
NetHack*map*bright_blue: blue
|
||||
NetHack*map*bright_magenta: magenta
|
||||
NetHack*map*bright_cyan: cyan
|
||||
NetHack*map*white: white
|
||||
!
|
||||
! The following are the default 15 colors that the nethack map uses.
|
||||
! If they don't look good on your screen, change them.
|
||||
!
|
||||
! The foreground color is used as "no color".
|
||||
!
|
||||
!NetHack*map*black: black
|
||||
!NetHack*map*red: red
|
||||
!NetHack*map*green: pale green
|
||||
|
||||
Reference in New Issue
Block a user