-/* NetHack 3.6 drawing.c $NHDT-Date: 1447124657 2015/11/10 03:04:17 $ $NHDT-Branch: master $:$NHDT-Revision: 1.49 $ */
+/* NetHack 3.6 drawing.c $NHDT-Date: 1573943500 2019/11/16 22:31:40 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.64 $ */
/* Copyright (c) NetHack Development Team 1992. */
/* NetHack may be freely redistributed. See license for details. */
+/* JNetHack Copyright */
+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2023 */
+/* JNetHack may be freely redistributed. See license for details. */
+
#include "hack.h"
#include "tcap.h"
int currentgraphics = 0;
nhsym showsyms[SYM_MAX] = DUMMY; /* symbols to be displayed */
-nhsym l_syms[SYM_MAX] = DUMMY; /* loaded symbols */
-nhsym r_syms[SYM_MAX] = DUMMY; /* rogue symbols */
-
+nhsym primary_syms[SYM_MAX] = DUMMY; /* primary symbols */
+nhsym rogue_syms[SYM_MAX] = DUMMY; /* rogue symbols */
+nhsym ov_primary_syms[SYM_MAX] = DUMMY; /* overides via config SYMBOL */
+nhsym ov_rogue_syms[SYM_MAX] = DUMMY; /* overides via config ROGUESYMBOL */
nhsym warnsyms[WARNCOUNT] = DUMMY; /* the current warning display symbols */
-const char invisexplain[] = "remembered, unseen, creature";
-
+#if 0 /*JP:T*/
+const char invisexplain[] = "remembered, unseen, creature",
+ altinvisexplain[] = "unseen creature"; /* for clairvoyance */
+#else
+const char invisexplain[] = "\8ao\82¦\82Ä\82¢\82é\82ª\8c©\82¦\82Ä\82¢\82È\82¢\89ö\95¨",
+ altinvisexplain[] = "\8c©\82¦\82Ä\82¢\82È\82¢\89ö\95¨"; /* for clairvoyance */
+#endif
+
/* Default object class symbols. See objclass.h.
* {symbol, name, explain}
* name: used in object_detect().
*/
const struct class_sym def_oc_syms[MAXOCLASSES] = {
{ '\0', "", "" }, /* placeholder for the "random class" */
+/*JP
{ ILLOBJ_SYM, "illegal objects", "strange object" },
+*/
+ { ILLOBJ_SYM, "\8aï\96\82È\95¨\91Ì", "\8aï\96\82È\95¨\91Ì" },
+/*JP
{ WEAPON_SYM, "weapons", "weapon" },
+*/
+ { WEAPON_SYM, "\95\90\8aí", "\95\90\8aí" },
+/*JP
{ ARMOR_SYM, "armor", "suit or piece of armor" },
+*/
+ { ARMOR_SYM, "\8aZ", "\95\9e\82Ü\82½\82Í\8aZ\82Ì\82½\82®\82¢" },
+/*JP
{ RING_SYM, "rings", "ring" },
+*/
+ { RING_SYM, "\8ew\97Ö", "\8ew\97Ö" },
+/*JP
{ AMULET_SYM, "amulets", "amulet" },
+*/
+ { AMULET_SYM, "\96\82\8f\9c\82¯", "\96\82\8f\9c\82¯" },
+/*JP
{ TOOL_SYM, "tools", "useful item (pick-axe, key, lamp...)" },
+*/
+ { TOOL_SYM, "\93¹\8bï", "\95Ö\97\98\82È\93¹\8bï(\82Â\82é\82Í\82µ\81C\8c®\81C\83\89\83\93\83v\81D\81D\81D)" },
+/*JP
{ FOOD_SYM, "food", "piece of food" },
+*/
+ { FOOD_SYM, "\90H\97¿", "\90H\97¿" },
+/*JP
{ POTION_SYM, "potions", "potion" },
+*/
+ { POTION_SYM, "\96ò", "\96ò" },
+/*JP
{ SCROLL_SYM, "scrolls", "scroll" },
+*/
+ { SCROLL_SYM, "\8aª\95¨", "\8aª\95¨" },
+/*JP
{ SPBOOK_SYM, "spellbooks", "spellbook" },
+*/
+ { SPBOOK_SYM, "\96\82\96@\8f\91", "\96\82\96@\8f\91" },
+/*JP
{ WAND_SYM, "wands", "wand" },
+*/
+ { WAND_SYM, "\8fñ", "\8fñ" },
+/*JP
{ GOLD_SYM, "coins", "pile of coins" },
+*/
+ { GOLD_SYM, "\8bà\89Ý", "\8bà\89Ý\82Ì\8eR" },
+/*JP
{ GEM_SYM, "rocks", "gem or rock" },
+*/
+ { GEM_SYM, "\90Î", "\95ó\90Î\82Ü\82½\82Í\90Î" },
+/*JP
{ ROCK_SYM, "large stones", "boulder or statue" },
+*/
+ { ROCK_SYM, "\8b\90\90Î", "\8aâ\82Ü\82½\82Í\91\9c" },
+/*JP
{ BALL_SYM, "iron balls", "iron ball" },
+*/
+ { BALL_SYM, "\93S\8b\85", "\93S\8b\85" },
+/*JP
{ CHAIN_SYM, "chains", "iron chain" },
+*/
+ { CHAIN_SYM, "\8d½", "\93S\82Ì\8d½" },
+/*JP
{ VENOM_SYM, "venoms", "splash of venom" }
+*/
+ { VENOM_SYM, "\93Å", "\93Å\89t" }
};
/* Default monster class symbols. See monsym.h. */
const struct class_sym def_monsyms[MAXMCLASSES] = {
{ '\0', "", "" },
+/*JP
{ DEF_ANT, "", "ant or other insect" },
+*/
+ { DEF_ANT, "", "\8ba\82Ü\82½\82Í\91¼\82Ì\8d©\92\8e" },
+/*JP
{ DEF_BLOB, "", "blob" },
+*/
+ { DEF_BLOB, "", "\83u\83\8d\83b\83u" },
+/*JP
{ DEF_COCKATRICE, "", "cockatrice" },
+*/
+ { DEF_COCKATRICE, "", "\83R\83J\83g\83\8a\83X" },
+/*JP
{ DEF_DOG, "", "dog or other canine" },
+*/
+ { DEF_DOG, "", "\8c¢\82Ü\82½\82Í\83C\83k\89È\82Ì\93®\95¨" },
+/*JP
{ DEF_EYE, "", "eye or sphere" },
+*/
+ { DEF_EYE, "", "\96Ú\82Ü\82½\82Í\8b\85\91Ì" },
+/*JP
{ DEF_FELINE, "", "cat or other feline" },
+*/
+ { DEF_FELINE, "", "\94L\82Ü\82½\82Í\83l\83R\89È\82Ì\93®\95¨" },
+/*JP
{ DEF_GREMLIN, "", "gremlin" },
+*/
+ { DEF_GREMLIN, "", "\83O\83\8c\83\80\83\8a\83\93" },
+/*JP
{ DEF_HUMANOID, "", "humanoid" },
+*/
+ { DEF_HUMANOID, "", "\83q\83\85\81[\83}\83m\83C\83h" },
+/*JP
{ DEF_IMP, "", "imp or minor demon" },
+*/
+ { DEF_IMP, "", "\83C\83\93\83v\82Ü\82½\82Í\89º\8b\89\88«\96\82" },
+/*JP
{ DEF_JELLY, "", "jelly" },
+*/
+ { DEF_JELLY, "", "\83[\83\8a\81[" },
+/*JP
{ DEF_KOBOLD, "", "kobold" },
+*/
+ { DEF_KOBOLD, "", "\83R\83{\83\8b\83g" },
+/*JP
{ DEF_LEPRECHAUN, "", "leprechaun" },
+*/
+ { DEF_LEPRECHAUN, "", "\83\8c\83v\83\89\83R\81[\83\93" },
+/*JP
{ DEF_MIMIC, "", "mimic" },
+*/
+ { DEF_MIMIC, "", "\83~\83~\83b\83N" },
+/*JP
{ DEF_NYMPH, "", "nymph" },
+*/
+ { DEF_NYMPH, "", "\83j\83\93\83t" },
+/*JP
{ DEF_ORC, "", "orc" },
+*/
+ { DEF_ORC, "", "\83I\81[\83N" },
+/*JP
{ DEF_PIERCER, "", "piercer" },
+*/
+ { DEF_PIERCER, "", "\8c\8a\8bò\82¢" },
+/*JP
{ DEF_QUADRUPED, "", "quadruped" },
+*/
+ { DEF_QUADRUPED, "", "\8el\91«\93®\95¨" },
+/*JP
{ DEF_RODENT, "", "rodent" },
+*/
+ { DEF_RODENT, "", "ê\96\8e\95\93®\95¨" },
+/*JP
{ DEF_SPIDER, "", "arachnid or centipede" },
+*/
+ { DEF_SPIDER, "", "\83N\83\82\8c`\97Þ\93®\95¨\82Ü\82½\82Í\83\80\83J\83f" },
+/*JP
{ DEF_TRAPPER, "", "trapper or lurker above" },
+*/
+ { DEF_TRAPPER, "", "\83g\83\89\83b\83p\81[\82Ü\82½\82Í\83\89\81[\83J\81[" },
+/*JP
{ DEF_UNICORN, "", "unicorn or horse" },
+*/
+ { DEF_UNICORN, "", "\83\86\83j\83R\81[\83\93\82Ü\82½\82Í\94n" },
+/*JP
{ DEF_VORTEX, "", "vortex" },
+*/
+ { DEF_VORTEX, "", "\89Q" },
+/*JP
{ DEF_WORM, "", "worm" },
+*/
+ { DEF_WORM, "", "\83\8f\81[\83\80" },
+/*JP
{ DEF_XAN, "", "xan or other mythical/fantastic insect" },
+*/
+ { DEF_XAN, "", "\83U\83\93\82Ü\82½\82Í\90_\98b\82â\83t\83@\83\93\83^\83W\81[\82Ì\8d©\92\8e" },
+/*JP
{ DEF_LIGHT, "", "light" },
+*/
+ { DEF_LIGHT, "", "\8cõ" },
+/*JP
{ DEF_ZRUTY, "", "zruty" },
+*/
+ { DEF_ZRUTY, "", "\83Y\83\8b\83e\83B" },
+/*JP
{ DEF_ANGEL, "", "angelic being" },
+*/
+ { DEF_ANGEL, "", "\93V\8eg" },
+/*JP
{ DEF_BAT, "", "bat or bird" },
+*/
+ { DEF_BAT, "", "\82±\82¤\82à\82è\82Ü\82½\82Í\92¹" },
+/*JP
{ DEF_CENTAUR, "", "centaur" },
+*/
+ { DEF_CENTAUR, "", "\83P\83\93\83^\83E\83\8d\83X" },
+/*JP
{ DEF_DRAGON, "", "dragon" },
+*/
+ { DEF_DRAGON, "", "\83h\83\89\83S\83\93" },
+/*JP
{ DEF_ELEMENTAL, "", "elemental" },
+*/
+ { DEF_ELEMENTAL, "", "\90¸\97ì" },
+/*JP
{ DEF_FUNGUS, "", "fungus or mold" },
+*/
+ { DEF_FUNGUS, "", "\83L\83m\83R\82Ü\82½\82Í\83\82\81[\83\8b\83h" },
+/*JP
{ DEF_GNOME, "", "gnome" },
+*/
+ { DEF_GNOME, "", "\83m\81[\83\80" },
+/*JP
{ DEF_GIANT, "", "giant humanoid" },
+*/
+ { DEF_GIANT, "", "\8b\90\90l" },
+/*JP
{ '\0', "", "invisible monster" },
+*/
+ { '\0', "", "\93§\96¾\82È\89ö\95¨" },
+/*JP
{ DEF_JABBERWOCK, "", "jabberwock" },
+*/
+ { DEF_JABBERWOCK, "", "\83W\83\83\83o\83E\83H\83b\83N" },
+/*JP
{ DEF_KOP, "", "Keystone Kop" },
+*/
+ { DEF_KOP, "", "\8cx\94õ\88õ" },
+/*JP
{ DEF_LICH, "", "lich" },
+*/
+ { DEF_LICH, "", "\83\8a\83b\83`" },
+/*JP
{ DEF_MUMMY, "", "mummy" },
+*/
+ { DEF_MUMMY, "", "\83~\83C\83\89" },
+/*JP
{ DEF_NAGA, "", "naga" },
+*/
+ { DEF_NAGA, "", "\83i\81[\83K" },
+/*JP
{ DEF_OGRE, "", "ogre" },
+*/
+ { DEF_OGRE, "", "\83I\81[\83K" },
+/*JP
{ DEF_PUDDING, "", "pudding or ooze" },
+*/
+ { DEF_PUDDING, "", "\83v\83\8a\83\93\82Ü\82½\82Í\83E\81[\83Y" },
+/*JP
{ DEF_QUANTMECH, "", "quantum mechanic" },
+*/
+ { DEF_QUANTMECH, "", "\97Ê\8eq\8fê" },
+/*JP
{ DEF_RUSTMONST, "", "rust monster or disenchanter" },
+*/
+ { DEF_RUSTMONST, "", "\8eK\82Ì\89ö\95¨\82Ü\82½\82Í\8bz\96\82\82Ì\89ö\95¨" },
+/*JP
{ DEF_SNAKE, "", "snake" },
+*/
+ { DEF_SNAKE, "", "\83w\83r" },
+/*JP
{ DEF_TROLL, "", "troll" },
+*/
+ { DEF_TROLL, "", "\83g\83\8d\83\8b" },
+/*JP
{ DEF_UMBER, "", "umber hulk" },
+*/
+ { DEF_UMBER, "", "\83A\83\93\83o\81[\83n\83\8b\83N" },
+/*JP
{ DEF_VAMPIRE, "", "vampire" },
+*/
+ { DEF_VAMPIRE, "", "\8bz\8c\8c\8bS" },
+/*JP
{ DEF_WRAITH, "", "wraith" },
+*/
+ { DEF_WRAITH, "", "\83\8c\83C\83X" },
+/*JP
{ DEF_XORN, "", "xorn" },
+*/
+ { DEF_XORN, "", "\83]\81[\83\93" },
+/*JP
{ DEF_YETI, "", "apelike creature" },
+*/
+ { DEF_YETI, "", "\89\8e\82Ì\82æ\82¤\82È\90¶\95¨" },
+/*JP
{ DEF_ZOMBIE, "", "zombie" },
+*/
+ { DEF_ZOMBIE, "", "\83]\83\93\83r" },
+/*JP
{ DEF_HUMAN, "", "human or elf" },
+*/
+ { DEF_HUMAN, "", "\90l\8aÔ\82Ü\82½\82Í\83G\83\8b\83t" },
+/*JP
{ DEF_GHOST, "", "ghost" },
+*/
+ { DEF_GHOST, "", "\88«\96\82" },
+/*JP
{ DEF_GOLEM, "", "golem" },
+*/
+ { DEF_GOLEM, "", "\83S\81[\83\8c\83\80" },
+/*JP
{ DEF_DEMON, "", "major demon" },
+*/
+ { DEF_DEMON, "", "\88«\96\82" },
+/*JP
{ DEF_EEL, "", "sea monster" },
+*/
+ { DEF_EEL, "", "\8aC\82Ì\89ö\95¨" },
+/*JP
{ DEF_LIZARD, "", "lizard" },
+*/
+ { DEF_LIZARD, "", "\83g\83J\83Q" },
+/*JP
{ DEF_WORM_TAIL, "", "long worm tail" },
+*/
+ { DEF_WORM_TAIL, "", "\83\8d\83\93\83O\83\8f\81[\83\80\82Ì\90K\94ö" },
+/*JP
{ DEF_MIMIC_DEF, "", "mimic" },
+*/
+ { DEF_MIMIC_DEF, "", "\83~\83~\83b\83N" },
};
const struct symdef def_warnsyms[WARNCOUNT] = {
/* white warning */
+/*JP
{ '0', "unknown creature causing you worry", C(CLR_WHITE) },
+*/
+ { '0', "\82 \82È\82½\82ª\8bC\82É\82µ\82Ä\82¢\82é\93ä\82Ì\89ö\95¨", C(CLR_WHITE)},
/* pink warning */
+/*JP
{ '1', "unknown creature causing you concern", C(CLR_RED) },
+*/
+ { '1', "\82 \82È\82½\82ª\90S\94z\82µ\82Ä\82¢\82é\93ä\82Ì\89ö\95¨", C(CLR_RED)},
/* red warning */
+/*JP
{ '2', "unknown creature causing you anxiety", C(CLR_RED) },
+*/
+ { '2', "\82 \82È\82½\82ª\8c\9c\94O\82µ\82Ä\82¢\82é\93ä\82Ì\89ö\95¨", C(CLR_RED)},
/* ruby warning */
+/*JP
{ '3', "unknown creature causing you disquiet", C(CLR_RED) },
+*/
+ { '3', "\82 \82È\82½\82ª\8bC\82ð\82à\82ñ\82Å\82¢\82é\93ä\82Ì\89ö\95¨", C(CLR_RED)},
/* purple warning */
+/*JP
{ '4', "unknown creature causing you alarm", C(CLR_MAGENTA) },
+*/
+ { '4', "\82 \82È\82½\82ª\8b°\82ê\82Ä\82¢\82é\93ä\82Ì\89ö\95¨", C(CLR_MAGENTA)},
/* black warning */
+/*JP
{ '5', "unknown creature causing you dread", C(CLR_BRIGHT_MAGENTA) },
+*/
+ { '5', "\82 \82È\82½\82ª\94ñ\8fí\82É\8b°\82ê\82Ä\82¢\82é\93ä\82Ì\89ö\95¨", C(CLR_BRIGHT_MAGENTA)},
};
/*
* Default screen symbols with explanations and colors.
*/
const struct symdef defsyms[MAXPCHARS] = {
+#if 0 /*JP:T*/
/* 0*/ { ' ', "dark part of a room", C(NO_COLOR) }, /* stone */
{ '|', "wall", C(CLR_GRAY) }, /* vwall */
{ '-', "wall", C(CLR_GRAY) }, /* hwall */
{ '-', "wall", C(CLR_GRAY) }, /* crwall */
{ '-', "wall", C(CLR_GRAY) }, /* tuwall */
{ '-', "wall", C(CLR_GRAY) }, /* tdwall */
+#else
+/* 0*/ { ' ', "\95\94\89®\82Ì\88Ã\82¢\95\94\95ª", C(NO_COLOR) }, /* stone */
+ { '|', "\95Ç", C(CLR_GRAY) }, /* vwall */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* hwall */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* tlcorn */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* trcorn */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* blcorn */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* brcorn */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* crwall */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* tuwall */
+ { '-', "\95Ç", C(CLR_GRAY) }, /* tdwall */
+#endif
+#if 0 /*JP:T*/
/*10*/ { '|', "wall", C(CLR_GRAY) }, /* tlwall */
{ '|', "wall", C(CLR_GRAY) }, /* trwall */
{ '.', "doorway", C(CLR_GRAY) }, /* ndoor */
{ '#', "iron bars", C(HI_METAL) }, /* bars */
{ '#', "tree", C(CLR_GREEN) }, /* tree */
{ '.', "floor of a room", C(CLR_GRAY) }, /* room */
+#else
+/*10*/ { '|', "\95Ç", C(CLR_GRAY) }, /* tlwall */
+ { '|', "\95Ç", C(CLR_GRAY) }, /* trwall */
+ { '.', "\8fo\93ü\8cû", C(CLR_GRAY) }, /* ndoor */
+ { '-', "\8aJ\82¢\82½\94à", C(CLR_BROWN) }, /* vodoor */
+ { '|', "\8aJ\82¢\82½\94à", C(CLR_BROWN) }, /* hodoor */
+ { '+', "\95Â\82¶\82½\94à", C(CLR_BROWN) }, /* vcdoor */
+ { '+', "\95Â\82¶\82½\94à", C(CLR_BROWN) }, /* hcdoor */
+ { '#', "\93S\96_", C(HI_METAL) }, /* bars */
+ { '#', "\96Ø", C(CLR_GREEN) }, /* tree */
+ { '.', "\95\94\89®\82Ì\8f°", C(CLR_GRAY) }, /* room */
+#endif
+#if 0 /*JP:T*/
/*20*/ { '.', "dark part of a room", C(CLR_BLACK) }, /* dark room */
{ '#', "corridor", C(CLR_GRAY) }, /* dark corr */
{ '#', "lit corridor", C(CLR_GRAY) }, /* lit corr (see mapglyph.c) */
{ '<', "ladder up", C(CLR_BROWN) }, /* upladder */
{ '>', "ladder down", C(CLR_BROWN) }, /* dnladder */
{ '_', "altar", C(CLR_GRAY) }, /* altar */
- { '|', "grave", C(CLR_GRAY) }, /* grave */
+ { '|', "grave", C(CLR_WHITE) }, /* grave */
{ '\\', "opulent throne", C(HI_GOLD) }, /* throne */
+#else
+/*20*/ { '.', "\95\94\89®\82Ì\88Ã\82¢\95\94\95ª", C(CLR_BLACK) }, /* dark room */
+ { '#', "\92Ê\98H", C(CLR_GRAY) }, /* dark corr */
+ { '#', "\96¾\82é\82¢\92Ê\98H", C(CLR_GRAY) }, /* lit corr (see mapglyph.c) */
+ { '<', "\8fã\82è\8aK\92i", C(CLR_GRAY) }, /* upstair */
+ { '>', "\89º\82è\8aK\92i", C(CLR_GRAY) }, /* dnstair */
+ { '<', "\8fã\82è\82Í\82µ\82²", C(CLR_BROWN) }, /* upladder */
+ { '>', "\89º\82è\82Í\82µ\82²", C(CLR_BROWN) }, /* dnladder */
+ { '_', "\8dÕ\92d", C(CLR_GRAY) }, /* altar */
+ { '|', "\95æ", C(CLR_WHITE) }, /* grave */
+ { '\\', "\89Ø\82â\82©\82È\8bÊ\8dÀ", C(HI_GOLD) }, /* throne */
+#endif
+#if 0 /*JP:T*/
/*30*/ { '#', "sink", C(CLR_GRAY) }, /* sink */
- { '{', "fountain", C(CLR_BLUE) }, /* fountain */
+ { '{', "fountain", C(CLR_BRIGHT_BLUE) }, /* fountain */
{ '}', "water", C(CLR_BLUE) }, /* pool */
{ '.', "ice", C(CLR_CYAN) }, /* ice */
{ '}', "molten lava", C(CLR_RED) }, /* lava */
{ '#', "raised drawbridge", C(CLR_BROWN) }, /* vcdbridge */
{ '#', "raised drawbridge", C(CLR_BROWN) }, /* hcdbridge */
{ ' ', "air", C(CLR_CYAN) }, /* open air */
+#else
+/*30*/ { '#', "\97¬\82µ\91ä", C(CLR_GRAY) }, /* sink */
+ { '{', "\90ò", C(CLR_BRIGHT_BLUE) }, /* fountain */
+ { '}', "\90\85\82Ì\82½\82Ü\82Á\82½\8fê\8f\8a", C(CLR_BLUE) }, /* pool */
+ { '.', "\95X", C(CLR_CYAN) }, /* ice */
+ { '}', "\97n\8aâ", C(CLR_RED) }, /* lava */
+ { '.', "\8d~\82è\82Ä\82¢\82é\92µ\82Ë\8b´", C(CLR_BROWN) }, /* vodbridge */
+ { '.', "\8d~\82è\82Ä\82¢\82é\92µ\82Ë\8b´", C(CLR_BROWN) }, /* hodbridge */
+ { '#', "\8fã\82Á\82Ä\82¢\82é\92µ\82Ë\8b´", C(CLR_BROWN) }, /* vcdbridge */
+ { '#', "\8fã\82Á\82Ä\82¢\82é\92µ\82Ë\8b´", C(CLR_BROWN) }, /* hcdbridge */
+ { ' ', "\8bó\8bC\82Ì\82½\82Ü\82Á\82½\8fê\8f\8a", C(CLR_CYAN) }, /* open air */
+#endif
+#if 0 /*JP:T*/
/*40*/ { '#', "cloud", C(CLR_GRAY) }, /* [part of] a cloud */
{ '}', "water", C(CLR_BLUE) }, /* under water */
{ '^', "arrow trap", C(HI_METAL) }, /* trap */
{ '^', "land mine", C(CLR_RED) }, /* trap */
{ '^', "rolling boulder trap", C(CLR_GRAY) }, /* trap */
{ '^', "sleeping gas trap", C(HI_ZAP) }, /* trap */
+#else
+/*40*/ { '#', "\89_", C(CLR_GRAY) }, /* [part of] a cloud */
+ { '}', "\90\85", C(CLR_BLUE) }, /* under water */
+ { '^', "\96î\82Ìã©", C(HI_METAL) }, /* trap */
+ { '^', "\93\8a\82°\96î\82Ìã©", C(HI_METAL) }, /* trap */
+ { '^', "\97\8e\90Î\82Ìã©", C(CLR_GRAY) }, /* trap */
+ { '^', "\82«\82µ\82Þ\94Â", C(CLR_BROWN) }, /* trap */
+ { '^', "\8cF\82Ìã©", C(HI_METAL) }, /* trap */
+ { '^', "\92n\97\8b", C(CLR_RED) }, /* trap */
+ { '^', "\8b\90\8aâ\82Ìã©", C(CLR_GRAY) }, /* trap */
+ { '^', "\90\87\96°\83K\83X\82Ìã©", C(HI_ZAP) }, /* trap */
+#endif
+#if 0 /*JP:T*/
/*50*/ { '^', "rust trap", C(CLR_BLUE) }, /* trap */
{ '^', "fire trap", C(CLR_ORANGE) }, /* trap */
{ '^', "pit", C(CLR_BLACK) }, /* trap */
{ '^', "level teleporter", C(CLR_MAGENTA) }, /* trap */
{ '^', "magic portal", C(CLR_BRIGHT_MAGENTA) }, /* trap */
{ '"', "web", C(CLR_GRAY) }, /* web */
+#else
+/*50*/ { '^', "\95\85\90H\82Ìã©", C(CLR_BLUE) }, /* trap */
+ { '^', "\89Î\82Ìã©", C(CLR_ORANGE) }, /* trap */
+ { '^', "\97\8e\82µ\8c\8a", C(CLR_BLACK) }, /* trap */
+ { '^', "\83g\83Q\82¾\82ç\82¯\82Ì\97\8e\82µ\8c\8a", C(CLR_BLACK) }, /* trap */
+ { '^', "\8c\8a", C(CLR_BROWN) }, /* trap */
+ { '^', "\97\8e\82µ\94à", C(CLR_BROWN) }, /* trap */
+ { '^', "\8fu\8aÔ\88Ú\93®\82Ìã©", C(CLR_MAGENTA) }, /* trap */
+ { '^', "\95Ê\82Ì\8aK\82Ö\82Ì\8fu\8aÔ\88Ú\93®\82Ìã©", C(CLR_MAGENTA) }, /* trap */
+ { '^', "\96\82\96@\82Ì\93ü\8cû", C(CLR_BRIGHT_MAGENTA) }, /* trap */
+ { '"', "\82\82à\82Ì\91\83", C(CLR_GRAY) }, /* web */
+#endif
+#if 0 /*JP:T*/
/*60*/ { '^', "statue trap", C(CLR_GRAY) }, /* trap */
{ '^', "magic trap", C(HI_ZAP) }, /* trap */
{ '^', "anti-magic field", C(HI_ZAP) }, /* trap */
{ '^', "polymorph trap", C(CLR_BRIGHT_GREEN) }, /* trap */
- { '^', "vibrating square", C(CLR_YELLOW) }, /* trap */
- { '|', "wall", C(CLR_GRAY) }, /* vbeam */
- { '-', "wall", C(CLR_GRAY) }, /* hbeam */
- { '\\', "wall", C(CLR_GRAY) }, /* lslant */
- { '/', "wall", C(CLR_GRAY) }, /* rslant */
+ { '~', "vibrating square", C(CLR_MAGENTA) }, /* "trap" */
+ /* zap colors are changed by mapglyph() to match type of beam */
+ { '|', "", C(CLR_GRAY) }, /* vbeam */
+ { '-', "", C(CLR_GRAY) }, /* hbeam */
+ { '\\', "", C(CLR_GRAY) }, /* lslant */
+ { '/', "", C(CLR_GRAY) }, /* rslant */
+ { '*', "", C(CLR_WHITE) }, /* dig beam */
+ { '!', "", C(CLR_WHITE) }, /* camera flash beam */
+ { ')', "", C(HI_WOOD) }, /* boomerang open left */
+#else
+/*60*/ { '^', "\92¤\91\9c\82Ìã©", C(CLR_GRAY) }, /* trap */
+ { '^', "\96\82\96@\82Ìã©", C(HI_ZAP) }, /* trap */
+ { '^', "\94½\96\82\96@\8bó\8aÔ\82Ìã©", C(HI_ZAP) }, /* trap */
+ { '^', "\95Ï\89»\82Ìã©", C(CLR_BRIGHT_GREEN) }, /* trap */
+ { '~', "\90U\93®\82µ\82Ä\82¢\82é\8fê\8f\8a", C(CLR_MAGENTA) }, /* "trap" */
+ /* zap colors are changed by mapglyph() to match type of beam */
+ { '|', "", C(CLR_GRAY) }, /* vbeam */
+ { '-', "", C(CLR_GRAY) }, /* hbeam */
+ { '\\', "", C(CLR_GRAY) }, /* lslant */
+ { '/', "", C(CLR_GRAY) }, /* rslant */
{ '*', "", C(CLR_WHITE) }, /* dig beam */
{ '!', "", C(CLR_WHITE) }, /* camera flash beam */
{ ')', "", C(HI_WOOD) }, /* boomerang open left */
+#endif
/*70*/ { '(', "", C(HI_WOOD) }, /* boomerang open right */
{ '0', "", C(HI_ZAP) }, /* 4 magic shield symbols */
{ '#', "", C(HI_ZAP) },
{ '@', "", C(HI_ZAP) },
{ '*', "", C(HI_ZAP) },
+#if 0 /*JP:T*/
{ '#', "poison cloud", C(CLR_BRIGHT_GREEN) }, /* part of a cloud */
{ '?', "valid position", C(CLR_BRIGHT_GREEN) }, /* target position */
+#else
+ { '#', "\93Å\89_", C(CLR_BRIGHT_GREEN) }, /* part of a cloud */
+ { '?', "\97L\8cø\82È\88Ê\92u", C(CLR_BRIGHT_GREEN) }, /* target position */
+#endif
+ /* swallow colors are changed by mapglyph() to match engulfing monst */
{ '/', "", C(CLR_GREEN) }, /* swallow top left */
{ '-', "", C(CLR_GREEN) }, /* swallow top center */
{ '\\', "", C(CLR_GREEN) }, /* swallow top right */
{ '\\', "", C(CLR_GREEN) }, /* swallow bottom left */
{ '-', "", C(CLR_GREEN) }, /* swallow bottom center */
{ '/', "", C(CLR_GREEN) }, /* swallow bottom right */
+ /* explosion colors are changed by mapglyph() to match type of expl. */
{ '/', "", C(CLR_ORANGE) }, /* explosion top left */
{ '-', "", C(CLR_ORANGE) }, /* explosion top center */
{ '\\', "", C(CLR_ORANGE) }, /* explosion top right */
#undef C
-#ifdef TERMLIB
+#if defined(TERMLIB) || defined(CURSES_GRAPHICS)
void NDECL((*decgraphics_mode_callback)) = 0; /* set in tty_start_screen() */
-#endif /* TERMLIB */
+#endif /* TERMLIB || CURSES */
#ifdef PC9800
void NDECL((*ibmgraphics_mode_callback)) = 0; /* set in tty_start_screen() */
void NDECL((*ascgraphics_mode_callback)) = 0; /* set in tty_start_screen() */
#endif
+#ifdef CURSES_GRAPHICS
+void NDECL((*cursesgraphics_mode_callback)) = 0;
+#endif
+
/*
* Convert the given character to an object class. If the character is not
* recognized, then MAXOCLASSES is returned. Used in detect.c, invent.c,
* init_symbols()
* Sets the current display symbols, the
* loadable symbols to the default NetHack
- * symbols, including the r_syms rogue level
+ * symbols, including the rogue_syms rogue level
* symbols. This would typically be done
* immediately after execution begins. Any
* previously loaded external symbol sets are
*
* If (arg != 0), which is the normal expected
* usage, then showsyms are taken from the
- * adjustable display symbols found in l_syms.
- * l_syms may have been loaded from an external
+ * adjustable display symbols found in primary_syms.
+ * primary_syms may have been loaded from an external
* symbol file by config file options or interactively
* in the Options menu.
*
* out of other {rogue} level display modes.
*
* If arg is ROGUESET, this places the rogue level
- * symbols from r_syms into showsyms.
+ * symbols from rogue_syms into showsyms.
*
* If arg is PRIMARY, this places the symbols
* from l_monsyms into showsyms.
*
- * update_l_symset()
- * Update a member of the loadable (l_*) symbol set.
+ * update_primary_symset()
+ * Update a member of the primary(primary_*) symbol set.
+ *
+ * update_rogue_symset()
+ * Update a member of the rogue (rogue_*) symbol set.
+ *
+ * update_ov_primary_symset()
+ * Update a member of the overrides for primary symbol set.
*
- * update_r_symset()
- * Update a member of the rogue (r_*) symbol set.
+ * update_ov_rogue_symset()
+ * Update a member of the overrides for rogue symbol set.
*
*/
void
init_symbols()
{
- init_l_symbols();
+ init_ov_primary_symbols();
+ init_ov_rogue_symbols();
+ init_primary_symbols();
init_showsyms();
- init_r_symbols();
-}
-
-void
-update_bouldersym()
-{
- showsyms[SYM_BOULDER + SYM_OFF_X] = iflags.bouldersym;
- l_syms[SYM_BOULDER + SYM_OFF_X] = iflags.bouldersym;
- r_syms[SYM_BOULDER + SYM_OFF_X] = iflags.bouldersym;
+ init_rogue_symbols();
}
void
showsyms[i + SYM_OFF_M] = def_monsyms[i].sym;
for (i = 0; i < WARNCOUNT; i++)
showsyms[i + SYM_OFF_W] = def_warnsyms[i].sym;
- for (i = 0; i < MAXOTHER; i++) {
- if (i == SYM_BOULDER)
- showsyms[i + SYM_OFF_X] = iflags.bouldersym
- ? iflags.bouldersym
- : def_oc_syms[ROCK_CLASS].sym;
- else if (i == SYM_INVISIBLE)
- showsyms[i + SYM_OFF_X] = DEF_INVISIBLE;
+ for (i = 0; i < MAXOTHER; i++)
+ showsyms[i + SYM_OFF_X] = get_othersym(i, PRIMARY);
+}
+
+/* initialize defaults for the overrides to the rogue symset */
+void
+init_ov_rogue_symbols()
+{
+ register int i;
+
+ for (i = 0; i < SYM_MAX; i++)
+ ov_rogue_syms[i] = (nhsym) 0;
+}
+/* initialize defaults for the overrides to the primary symset */
+void
+init_ov_primary_symbols()
+{
+ register int i;
+
+ for (i = 0; i < SYM_MAX; i++)
+ ov_primary_syms[i] = (nhsym) 0;
+}
+
+nhsym
+get_othersym(idx, which_set)
+int idx, which_set;
+{
+ nhsym sym = (nhsym) 0;
+ int oidx = idx + SYM_OFF_X;
+
+ if (which_set == ROGUESET)
+ sym = ov_rogue_syms[oidx] ? ov_rogue_syms[oidx]
+ : rogue_syms[oidx];
+ else
+ sym = ov_primary_syms[oidx] ? ov_primary_syms[oidx]
+ : primary_syms[oidx];
+ if (!sym) {
+ switch(idx) {
+ case SYM_BOULDER:
+ sym = def_oc_syms[ROCK_CLASS].sym;
+ break;
+ case SYM_INVISIBLE:
+ sym = DEF_INVISIBLE;
+ break;
+ }
}
+ return sym;
}
-/* initialize defaults for the loadable symset */
+/* initialize defaults for the primary symset */
void
-init_l_symbols()
+init_primary_symbols()
{
register int i;
for (i = 0; i < MAXPCHARS; i++)
- l_syms[i + SYM_OFF_P] = defsyms[i].sym;
+ primary_syms[i + SYM_OFF_P] = defsyms[i].sym;
for (i = 0; i < MAXOCLASSES; i++)
- l_syms[i + SYM_OFF_O] = def_oc_syms[i].sym;
+ primary_syms[i + SYM_OFF_O] = def_oc_syms[i].sym;
for (i = 0; i < MAXMCLASSES; i++)
- l_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
+ primary_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
for (i = 0; i < WARNCOUNT; i++)
- l_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
- for (i = 0; i < MAXOTHER; i++) {
- if (i == SYM_BOULDER)
- l_syms[i + SYM_OFF_X] = iflags.bouldersym
- ? iflags.bouldersym
- : def_oc_syms[ROCK_CLASS].sym;
- else if (i == SYM_INVISIBLE)
- l_syms[i + SYM_OFF_X] = DEF_INVISIBLE;
- }
+ primary_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
+ for (i = 0; i < MAXOTHER; i++)
+ primary_syms[i + SYM_OFF_X] = get_othersym(i, PRIMARY);
clear_symsetentry(PRIMARY, FALSE);
}
+/* initialize defaults for the rogue symset */
void
-init_r_symbols()
+init_rogue_symbols()
{
register int i;
later by the roguesymbols option */
for (i = 0; i < MAXPCHARS; i++)
- r_syms[i + SYM_OFF_P] = defsyms[i].sym;
- r_syms[S_vodoor] = r_syms[S_hodoor] = r_syms[S_ndoor] = '+';
- r_syms[S_upstair] = r_syms[S_dnstair] = '%';
+ rogue_syms[i + SYM_OFF_P] = defsyms[i].sym;
+ rogue_syms[S_vodoor] = rogue_syms[S_hodoor] = rogue_syms[S_ndoor] = '+';
+ rogue_syms[S_upstair] = rogue_syms[S_dnstair] = '%';
for (i = 0; i < MAXOCLASSES; i++)
- r_syms[i + SYM_OFF_O] = def_r_oc_syms[i];
+ rogue_syms[i + SYM_OFF_O] = def_r_oc_syms[i];
for (i = 0; i < MAXMCLASSES; i++)
- r_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
+ rogue_syms[i + SYM_OFF_M] = def_monsyms[i].sym;
for (i = 0; i < WARNCOUNT; i++)
- r_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
- for (i = 0; i < MAXOTHER; i++) {
- if (i == SYM_BOULDER)
- r_syms[i + SYM_OFF_X] = iflags.bouldersym
- ? iflags.bouldersym
- : def_oc_syms[ROCK_CLASS].sym;
- else if (i == SYM_INVISIBLE)
- r_syms[i + SYM_OFF_X] = DEF_INVISIBLE;
- }
+ rogue_syms[i + SYM_OFF_W] = def_warnsyms[i].sym;
+ for (i = 0; i < MAXOTHER; i++)
+ rogue_syms[i + SYM_OFF_X] = get_othersym(i, ROGUESET);
clear_symsetentry(ROGUESET, FALSE);
/* default on Rogue level is no color
/* Adjust graphics display characters on Rogue levels */
for (i = 0; i < SYM_MAX; i++)
- showsyms[i] = r_syms[i];
+ showsyms[i] = ov_rogue_syms[i] ? ov_rogue_syms[i]
+ : rogue_syms[i];
#if defined(MSDOS) && defined(USE_TILES)
if (iflags.grmode)
case PRIMARY:
default:
for (i = 0; i < SYM_MAX; i++)
- showsyms[i] = l_syms[i];
+ showsyms[i] = ov_primary_syms[i] ? ov_primary_syms[i]
+ : primary_syms[i];
#if defined(MSDOS) && defined(USE_TILES)
if (iflags.grmode)
if (nondefault) {
for (i = 0; i < SYM_MAX; i++)
- showsyms[i] = l_syms[i];
+ showsyms[i] = ov_primary_syms[i] ? ov_primary_syms[i]
+ : primary_syms[i];
#ifdef PC9800
if (SYMHANDLING(H_IBM) && ibmgraphics_mode_callback)
(*ibmgraphics_mode_callback)();
- else if (!symset[currentgraphics].name && ascgraphics_mode_callback)
+ else if (SYMHANDLING(H_UNK) && ascgraphics_mode_callback)
(*ascgraphics_mode_callback)();
#endif
-#ifdef TERMLIB
+#if defined(TERMLIB) || defined(CURSES_GRAPHICS)
+ /* curses doesn't assign any routine to dec..._callback but
+ probably does the expected initialization under the hood
+ for terminals capable of rendering DECgraphics */
if (SYMHANDLING(H_DEC) && decgraphics_mode_callback)
(*decgraphics_mode_callback)();
+# ifdef CURSES_GRAPHICS
+ /* there aren't any symbol sets with CURS handling, and the
+ curses interface never assigns a routine to curses..._callback */
+ if (SYMHANDLING(H_CURS) && cursesgraphics_mode_callback)
+ (*cursesgraphics_mode_callback)();
+# endif
#endif
- } else
- init_symbols();
+ } else {
+ init_primary_symbols();
+ init_showsyms();
+ }
+}
+
+void
+update_ov_primary_symset(symp, val)
+struct symparse *symp;
+int val;
+{
+ ov_primary_syms[symp->idx] = val;
+}
+
+void
+update_ov_rogue_symset(symp, val)
+struct symparse *symp;
+int val;
+{
+ ov_rogue_syms[symp->idx] = val;
}
void
-update_l_symset(symp, val)
+update_primary_symset(symp, val)
struct symparse *symp;
int val;
{
- l_syms[symp->idx] = val;
+ primary_syms[symp->idx] = val;
}
void
-update_r_symset(symp, val)
+update_rogue_symset(symp, val)
struct symparse *symp;
int val;
{
- r_syms[symp->idx] = val;
+ rogue_syms[symp->idx] = val;
}
void
* to this array at the matching offset.
*/
const char *known_handling[] = {
- "UNKNOWN", /* H_UNK */
- "IBM", /* H_IBM */
- "DEC", /* H_DEC */
+ "UNKNOWN", /* H_UNK */
+ "IBM", /* H_IBM */
+ "DEC", /* H_DEC */
+ "CURS", /* H_CURS */
+ "MAC", /* H_MAC -- pre-OSX MACgraphics */
(const char *) 0,
};
{ SYM_PCHAR, S_bars, "S_bars" },
{ SYM_PCHAR, S_tree, "S_tree" },
{ SYM_PCHAR, S_room, "S_room" },
+ { SYM_PCHAR, S_darkroom, "S_darkroom" },
{ SYM_PCHAR, S_corr, "S_corr" },
{ SYM_PCHAR, S_litcorr, "S_litcorr" },
{ SYM_PCHAR, S_upstair, "S_upstair" },
{ SYM_PCHAR, S_magic_trap, "S_magic_trap" },
{ SYM_PCHAR, S_anti_magic_trap, "S_anti_magic_trap" },
{ SYM_PCHAR, S_polymorph_trap, "S_polymorph_trap" },
+ { SYM_PCHAR, S_vibrating_square, "S_vibrating_square" },
{ SYM_PCHAR, S_vbeam, "S_vbeam" },
{ SYM_PCHAR, S_hbeam, "S_hbeam" },
{ SYM_PCHAR, S_lslant, "S_lslant" },
{ SYM_PCHAR, S_explode7, "S_explode7" },
{ SYM_PCHAR, S_explode8, "S_explode8" },
{ SYM_PCHAR, S_explode9, "S_explode9" },
+ { SYM_OC, ILLOBJ_CLASS + SYM_OFF_O, "S_strange_obj" },
{ SYM_OC, WEAPON_CLASS + SYM_OFF_O, "S_weapon" },
{ SYM_OC, ARMOR_CLASS + SYM_OFF_O, "S_armor" },
{ SYM_OC, ARMOR_CLASS + SYM_OFF_O, "S_armour" },
{ SYM_MON, S_MIMIC_DEF + SYM_OFF_M, "S_mimic_def" },
{ SYM_OTH, SYM_BOULDER + SYM_OFF_X, "S_boulder" },
{ SYM_OTH, SYM_INVISIBLE + SYM_OFF_X, "S_invisible" },
+ { SYM_OTH, SYM_PET_OVERRIDE + SYM_OFF_X, "S_pet_override" },
+ { SYM_OTH, SYM_HERO_OVERRIDE + SYM_OFF_X, "S_hero_override" },
{ 0, 0, (const char *) 0 } /* fence post */
};