*** empty log message ***
This commit is contained in:
899
src/drawing.c
Normal file
899
src/drawing.c
Normal file
@@ -0,0 +1,899 @@
|
||||
/* SCCS Id: @(#)drawing.c 3.3 1999/12/02 */
|
||||
/* Copyright (c) NetHack Development Team 1992. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "hack.h"
|
||||
#include "tcap.h"
|
||||
|
||||
/* Relevent header information in rm.h and objclass.h. */
|
||||
|
||||
#ifdef C
|
||||
#undef C
|
||||
#endif
|
||||
|
||||
#ifdef TEXTCOLOR
|
||||
#define C(n) n
|
||||
#else
|
||||
#define C(n)
|
||||
#endif
|
||||
|
||||
#define g_FILLER(symbol) 0
|
||||
|
||||
uchar oc_syms[MAXOCLASSES] = DUMMY; /* the current object display symbols */
|
||||
uchar showsyms[MAXPCHARS] = DUMMY; /* the current feature display symbols */
|
||||
uchar monsyms[MAXMCLASSES] = DUMMY; /* the current monster display symbols */
|
||||
uchar warnsyms[WARNCOUNT] = DUMMY; /* the current warning display symbols */
|
||||
|
||||
/* Default object class symbols. See objclass.h. */
|
||||
const char def_oc_syms[MAXOCLASSES] = {
|
||||
/* 0*/ '\0', /* placeholder for the "random class" */
|
||||
ILLOBJ_SYM,
|
||||
WEAPON_SYM,
|
||||
ARMOR_SYM,
|
||||
RING_SYM,
|
||||
/* 5*/ AMULET_SYM,
|
||||
TOOL_SYM,
|
||||
FOOD_SYM,
|
||||
POTION_SYM,
|
||||
SCROLL_SYM,
|
||||
/*10*/ SPBOOK_SYM,
|
||||
WAND_SYM,
|
||||
GOLD_SYM,
|
||||
GEM_SYM,
|
||||
ROCK_SYM,
|
||||
/*15*/ BALL_SYM,
|
||||
CHAIN_SYM,
|
||||
VENOM_SYM
|
||||
};
|
||||
|
||||
const char *invisexplain = "remembered, unseen, creature";
|
||||
|
||||
/* Object descriptions. Used in do_look(). */
|
||||
const char *objexplain[] = { /* these match def_oc_syms, above */
|
||||
/* 0*/ 0,
|
||||
"strange object",
|
||||
"weapon",
|
||||
"suit or piece of armor",
|
||||
"ring",
|
||||
/* 5*/ "amulet",
|
||||
"useful item (pick-axe, key, lamp...)",
|
||||
"piece of food",
|
||||
"potion",
|
||||
"scroll",
|
||||
/*10*/ "spellbook",
|
||||
"wand",
|
||||
"pile of coins",
|
||||
"gem or rock",
|
||||
"boulder or statue",
|
||||
/*15*/ "iron ball",
|
||||
"iron chain",
|
||||
"splash of venom"
|
||||
};
|
||||
|
||||
/* Object class names. Used in object_detect(). */
|
||||
const char *oclass_names[] = {
|
||||
/* 0*/ 0,
|
||||
"illegal objects",
|
||||
"weapons",
|
||||
"armor",
|
||||
"rings",
|
||||
/* 5*/ "amulets",
|
||||
"tools",
|
||||
"food",
|
||||
"potions",
|
||||
"scrolls",
|
||||
/*10*/ "spellbooks",
|
||||
"wands",
|
||||
"coins",
|
||||
"rocks",
|
||||
"large stones",
|
||||
/*15*/ "iron balls",
|
||||
"chains",
|
||||
"venoms"
|
||||
};
|
||||
|
||||
/* Default monster class symbols. See monsym.h. */
|
||||
const char def_monsyms[MAXMCLASSES] = {
|
||||
'\0', /* holder */
|
||||
DEF_ANT,
|
||||
DEF_BLOB,
|
||||
DEF_COCKATRICE,
|
||||
DEF_DOG,
|
||||
DEF_EYE,
|
||||
DEF_FELINE,
|
||||
DEF_GREMLIN,
|
||||
DEF_HUMANOID,
|
||||
DEF_IMP,
|
||||
DEF_JELLY, /* 10 */
|
||||
DEF_KOBOLD,
|
||||
DEF_LEPRECHAUN,
|
||||
DEF_MIMIC,
|
||||
DEF_NYMPH,
|
||||
DEF_ORC,
|
||||
DEF_PIERCER,
|
||||
DEF_QUADRUPED,
|
||||
DEF_RODENT,
|
||||
DEF_SPIDER,
|
||||
DEF_TRAPPER, /* 20 */
|
||||
DEF_UNICORN,
|
||||
DEF_VORTEX,
|
||||
DEF_WORM,
|
||||
DEF_XAN,
|
||||
DEF_LIGHT,
|
||||
DEF_ZRUTY,
|
||||
DEF_ANGEL,
|
||||
DEF_BAT,
|
||||
DEF_CENTAUR,
|
||||
DEF_DRAGON, /* 30 */
|
||||
DEF_ELEMENTAL,
|
||||
DEF_FUNGUS,
|
||||
DEF_GNOME,
|
||||
DEF_GIANT,
|
||||
'\0',
|
||||
DEF_JABBERWOCK,
|
||||
DEF_KOP,
|
||||
DEF_LICH,
|
||||
DEF_MUMMY,
|
||||
DEF_NAGA, /* 40 */
|
||||
DEF_OGRE,
|
||||
DEF_PUDDING,
|
||||
DEF_QUANTMECH,
|
||||
DEF_RUSTMONST,
|
||||
DEF_SNAKE,
|
||||
DEF_TROLL,
|
||||
DEF_UMBER,
|
||||
DEF_VAMPIRE,
|
||||
DEF_WRAITH,
|
||||
DEF_XORN, /* 50 */
|
||||
DEF_YETI,
|
||||
DEF_ZOMBIE,
|
||||
DEF_HUMAN,
|
||||
DEF_GHOST,
|
||||
DEF_GOLEM,
|
||||
DEF_DEMON,
|
||||
DEF_EEL,
|
||||
DEF_LIZARD,
|
||||
DEF_WORM_TAIL,
|
||||
DEF_MIMIC_DEF, /* 60 */
|
||||
};
|
||||
|
||||
/* The explanations below are also used when the user gives a string
|
||||
* for blessed genocide, so no text should wholly contain any later
|
||||
* text. They should also always contain obvious names (eg. cat/feline).
|
||||
*/
|
||||
const char *monexplain[MAXMCLASSES] = {
|
||||
0,
|
||||
"ant or other insect", "blob", "cockatrice",
|
||||
"dog or other canine", "eye or sphere", "cat or other feline",
|
||||
"gremlin", "humanoid", "imp or minor demon",
|
||||
"jelly", "kobold", "leprechaun",
|
||||
"mimic", "nymph", "orc",
|
||||
"piercer", "quadruped", "rodent",
|
||||
"spider", "trapper or lurker above", "unicorn or horse",
|
||||
"vortex", "worm", "xan or other mythical/fantastic insect",
|
||||
"light", "zruty",
|
||||
|
||||
"angelic being", "bat or bird", "centaur",
|
||||
"dragon", "elemental", "fungus or mold",
|
||||
"gnome", "giant humanoid", 0,
|
||||
"jabberwock", "Keystone Kop", "lich",
|
||||
"mummy", "naga", "ogre",
|
||||
"pudding or ooze", "quantum mechanic", "rust monster or disenchanter",
|
||||
"snake", "troll", "umber hulk",
|
||||
"vampire", "wraith", "xorn",
|
||||
"yeti, ape or other large beast", "zombie",
|
||||
|
||||
"human or elf", "ghost", "golem",
|
||||
"major demon", "sea monster", "lizard",
|
||||
"long worm tail", "mimic"
|
||||
};
|
||||
|
||||
const struct symdef def_warnsyms[WARNCOUNT] = {
|
||||
{'0', "unknown creature causing you worry", C(CLR_WHITE)}, /* white warning */
|
||||
{'1', "unknown creature causing you concern", C(CLR_RED)}, /* pink warning */
|
||||
{'2', "unknown creature causing you anxiety", C(CLR_RED)}, /* red warning */
|
||||
{'3', "unknown creature causing you disquiet", C(CLR_RED)}, /* ruby warning */
|
||||
{'4', "unknown creature causing you alarm",
|
||||
C(CLR_MAGENTA)}, /* purple warning */
|
||||
{'5', "unknown creature causing you dread",
|
||||
C(CLR_BRIGHT_MAGENTA)} /* black warning */
|
||||
};
|
||||
|
||||
/*
|
||||
* Default screen symbols with explanations and colors.
|
||||
* Note: {ibm|dec|mac}_graphics[] arrays also depend on this symbol order.
|
||||
*/
|
||||
const struct symdef defsyms[MAXPCHARS] = {
|
||||
/* 0*/ {' ', "dark part of a room",C(NO_COLOR)}, /* stone */
|
||||
{'|', "wall", C(CLR_GRAY)}, /* vwall */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* hwall */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* tlcorn */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* trcorn */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* blcorn */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* brcorn */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* crwall */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* tuwall */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* tdwall */
|
||||
/*10*/ {'|', "wall", C(CLR_GRAY)}, /* tlwall */
|
||||
{'|', "wall", C(CLR_GRAY)}, /* trwall */
|
||||
{'.', "doorway", C(CLR_GRAY)}, /* ndoor */
|
||||
{'-', "open door", C(CLR_BROWN)}, /* vodoor */
|
||||
{'|', "open door", C(CLR_BROWN)}, /* hodoor */
|
||||
{'+', "closed door", C(CLR_BROWN)}, /* vcdoor */
|
||||
{'+', "closed door", C(CLR_BROWN)}, /* hcdoor */
|
||||
{'#', "iron bars", C(HI_METAL)}, /* bars */
|
||||
{'#', "tree", C(CLR_GREEN)}, /* tree */
|
||||
{'.', "floor of a room",C(CLR_GRAY)}, /* room */
|
||||
/*20*/ {'#', "corridor", C(CLR_GRAY)}, /* dark corr */
|
||||
{'#', "lit corridor", C(CLR_GRAY)}, /* lit corr */
|
||||
{'<', "staircase up", C(CLR_GRAY)}, /* upstair */
|
||||
{'>', "staircase down", C(CLR_GRAY)}, /* dnstair */
|
||||
{'<', "ladder up", C(CLR_BROWN)}, /* upladder */
|
||||
{'>', "ladder down", C(CLR_BROWN)}, /* dnladder */
|
||||
{'_', "altar", C(CLR_GRAY)}, /* altar */
|
||||
{'|', "grave", C(CLR_GRAY)}, /* grave */
|
||||
{'\\', "opulent throne",C(HI_GOLD)}, /* throne */
|
||||
#ifdef SINKS
|
||||
{'#', "sink", C(CLR_GRAY)}, /* sink */
|
||||
#else
|
||||
{'#', "", C(CLR_GRAY)}, /* sink */
|
||||
#endif
|
||||
/*30*/ {'{', "fountain", C(CLR_BLUE)}, /* fountain */
|
||||
{'}', "water", C(CLR_BLUE)}, /* pool */
|
||||
{'.', "ice", C(CLR_CYAN)}, /* ice */
|
||||
{'}', "molten lava", C(CLR_RED)}, /* lava */
|
||||
{'.', "lowered drawbridge",C(CLR_BROWN)}, /* vodbridge */
|
||||
{'.', "lowered drawbridge",C(CLR_BROWN)}, /* hodbridge */
|
||||
{'#', "raised drawbridge",C(CLR_BROWN)},/* vcdbridge */
|
||||
{'#', "raised drawbridge",C(CLR_BROWN)},/* hcdbridge */
|
||||
{' ', "air", C(CLR_CYAN)}, /* open air */
|
||||
{'#', "cloud", C(CLR_GRAY)}, /* [part of] a cloud */
|
||||
/*40*/ {'}', "water", C(CLR_BLUE)}, /* under water */
|
||||
{'^', "arrow trap", C(HI_METAL)}, /* trap */
|
||||
{'^', "dart trap", C(HI_METAL)}, /* trap */
|
||||
{'^', "falling rock trap",C(CLR_GRAY)}, /* trap */
|
||||
{'^', "squeaky board", C(CLR_BROWN)}, /* trap */
|
||||
{'^', "bear 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 */
|
||||
{'^', "rust trap", C(CLR_BLUE)}, /* trap */
|
||||
/*50*/ {'^', "fire trap", C(CLR_ORANGE)}, /* trap */
|
||||
{'^', "pit", C(CLR_BLACK)}, /* trap */
|
||||
{'^', "spiked pit", C(CLR_BLACK)}, /* trap */
|
||||
{'^', "hole", C(CLR_BROWN)}, /* trap */
|
||||
{'^', "trap door", C(CLR_BROWN)}, /* trap */
|
||||
{'^', "teleportation trap", C(CLR_MAGENTA)}, /* trap */
|
||||
{'^', "level teleporter", C(CLR_MAGENTA)}, /* trap */
|
||||
{'^', "magic portal", C(CLR_BRIGHT_MAGENTA)}, /* trap */
|
||||
{'"', "web", C(CLR_GRAY)}, /* web */
|
||||
{'^', "statue trap", C(CLR_GRAY)}, /* trap */
|
||||
/*60*/ {'^', "magic trap", C(HI_ZAP)}, /* trap */
|
||||
{'^', "anti-magic field", C(HI_ZAP)}, /* trap */
|
||||
{'^', "polymorph trap", C(CLR_BRIGHT_GREEN)}, /* trap */
|
||||
{'|', "wall", C(CLR_GRAY)}, /* vbeam */
|
||||
{'-', "wall", C(CLR_GRAY)}, /* hbeam */
|
||||
{'\\',"wall", C(CLR_GRAY)}, /* lslant */
|
||||
{'/', "wall", C(CLR_GRAY)}, /* rslant */
|
||||
{'*', "", C(CLR_WHITE)}, /* dig beam */
|
||||
{'!', "", C(CLR_WHITE)}, /* camera flash beam */
|
||||
{')', "", C(HI_WOOD)}, /* boomerang open left */
|
||||
/*70*/ {'(', "", C(HI_WOOD)}, /* boomerang open right */
|
||||
{'0', "", C(HI_ZAP)}, /* 4 magic shield symbols */
|
||||
{'#', "", C(HI_ZAP)},
|
||||
{'@', "", C(HI_ZAP)},
|
||||
{'*', "", C(HI_ZAP)},
|
||||
{'/', "", C(CLR_GREEN)}, /* swallow top left */
|
||||
{'-', "", C(CLR_GREEN)}, /* swallow top center */
|
||||
{'\\', "", C(CLR_GREEN)}, /* swallow top right */
|
||||
{'|', "", C(CLR_GREEN)}, /* swallow middle left */
|
||||
{'|', "", C(CLR_GREEN)}, /* swallow middle right */
|
||||
/*80*/ {'\\', "", C(CLR_GREEN)}, /* swallow bottom left */
|
||||
{'-', "", C(CLR_GREEN)}, /* swallow bottom center*/
|
||||
{'/', "", C(CLR_GREEN)}, /* swallow bottom right */
|
||||
{'/', "", C(CLR_ORANGE)}, /* explosion top left */
|
||||
{'-', "", C(CLR_ORANGE)}, /* explosion top center */
|
||||
{'\\', "", C(CLR_ORANGE)}, /* explosion top right */
|
||||
{'|', "", C(CLR_ORANGE)}, /* explosion middle left */
|
||||
{' ', "", C(CLR_ORANGE)}, /* explosion middle center*/
|
||||
{'|', "", C(CLR_ORANGE)}, /* explosion middle right */
|
||||
{'\\', "", C(CLR_ORANGE)}, /* explosion bottom left */
|
||||
/*90*/ {'-', "", C(CLR_ORANGE)}, /* explosion bottom center*/
|
||||
{'/', "", C(CLR_ORANGE)}, /* explosion bottom right */
|
||||
/*
|
||||
* Note: Additions to this array should be reflected in the
|
||||
* {ibm,dec,mac}_graphics[] arrays below.
|
||||
*/
|
||||
};
|
||||
|
||||
#undef C
|
||||
|
||||
#ifdef ASCIIGRAPH
|
||||
|
||||
#ifdef PC9800
|
||||
void NDECL((*ibmgraphics_mode_callback)) = 0; /* set in tty_start_screen() */
|
||||
#endif /* PC9800 */
|
||||
|
||||
static uchar ibm_graphics[MAXPCHARS] = {
|
||||
/* 0*/ g_FILLER(S_stone),
|
||||
0xb3, /* S_vwall: meta-3, vertical rule */
|
||||
0xc4, /* S_hwall: meta-D, horizontal rule */
|
||||
0xda, /* S_tlcorn: meta-Z, top left corner */
|
||||
0xbf, /* S_trcorn: meta-?, top right corner */
|
||||
0xc0, /* S_blcorn: meta-@, bottom left */
|
||||
0xd9, /* S_brcorn: meta-Y, bottom right */
|
||||
0xc5, /* S_crwall: meta-E, cross */
|
||||
0xc1, /* S_tuwall: meta-A, T up */
|
||||
0xc2, /* S_tdwall: meta-B, T down */
|
||||
/*10*/ 0xb4, /* S_tlwall: meta-4, T left */
|
||||
0xc3, /* S_trwall: meta-C, T right */
|
||||
0xfa, /* S_ndoor: meta-z, centered dot */
|
||||
0xfe, /* S_vodoor: meta-~, small centered square */
|
||||
0xfe, /* S_hodoor: meta-~, small centered square */
|
||||
g_FILLER(S_vcdoor),
|
||||
g_FILLER(S_hcdoor),
|
||||
240, /* S_bars: equivalence symbol */
|
||||
241, /* S_tree: plus or minus symbol */
|
||||
0xfa, /* S_room: meta-z, centered dot */
|
||||
/*20*/ 0xb0, /* S_corr: meta-0, light shading */
|
||||
0xb1, /* S_litcorr: meta-1, medium shading */
|
||||
g_FILLER(S_upstair),
|
||||
g_FILLER(S_dnstair),
|
||||
g_FILLER(S_upladder),
|
||||
g_FILLER(S_dnladder),
|
||||
g_FILLER(S_altar),
|
||||
g_FILLER(S_grave),
|
||||
g_FILLER(S_throne),
|
||||
g_FILLER(S_sink),
|
||||
/*30*/ 0xf4, /* S_fountain: meta-t, integral top half */
|
||||
0xf7, /* S_pool: meta-w, approx. equals */
|
||||
0xfa, /* S_ice: meta-z, centered dot */
|
||||
0xf7, /* S_lava: meta-w, approx. equals */
|
||||
0xfa, /* S_vodbridge: meta-z, centered dot */
|
||||
0xfa, /* S_hodbridge: meta-z, centered dot */
|
||||
g_FILLER(S_vcdbridge),
|
||||
g_FILLER(S_hcdbridge),
|
||||
g_FILLER(S_air),
|
||||
g_FILLER(S_cloud),
|
||||
/*40*/ 0xf7, /* S_water: meta-w, approx. equals */
|
||||
g_FILLER(S_arrow_trap),
|
||||
g_FILLER(S_dart_trap),
|
||||
g_FILLER(S_falling_rock_trap),
|
||||
g_FILLER(S_squeaky_board),
|
||||
g_FILLER(S_bear_trap),
|
||||
g_FILLER(S_land_mine),
|
||||
g_FILLER(S_rolling_boulder_trap),
|
||||
g_FILLER(S_sleeping_gas_trap),
|
||||
g_FILLER(S_rust_trap),
|
||||
/*50*/ g_FILLER(S_fire_trap),
|
||||
g_FILLER(S_pit),
|
||||
g_FILLER(S_spiked_pit),
|
||||
g_FILLER(S_hole),
|
||||
g_FILLER(S_trap_door),
|
||||
g_FILLER(S_teleportation_trap),
|
||||
g_FILLER(S_level_teleporter),
|
||||
g_FILLER(S_magic_portal),
|
||||
g_FILLER(S_web),
|
||||
g_FILLER(S_statue_trap),
|
||||
/*60*/ g_FILLER(S_magic_trap),
|
||||
g_FILLER(S_anti_magic_trap),
|
||||
g_FILLER(S_polymorph_trap),
|
||||
0xb3, /* S_vbeam: meta-3, vertical rule */
|
||||
0xc4, /* S_hbeam: meta-D, horizontal rule */
|
||||
g_FILLER(S_lslant),
|
||||
g_FILLER(S_rslant),
|
||||
g_FILLER(S_digbeam),
|
||||
g_FILLER(S_flashbeam),
|
||||
g_FILLER(S_boomleft),
|
||||
/*70*/ g_FILLER(S_boomright),
|
||||
g_FILLER(S_ss1),
|
||||
g_FILLER(S_ss2),
|
||||
g_FILLER(S_ss3),
|
||||
g_FILLER(S_ss4),
|
||||
g_FILLER(S_sw_tl),
|
||||
g_FILLER(S_sw_tc),
|
||||
g_FILLER(S_sw_tr),
|
||||
0xb3, /* S_sw_ml: meta-3, vertical rule */
|
||||
0xb3, /* S_sw_mr: meta-3, vertical rule */
|
||||
/*80*/ g_FILLER(S_sw_bl),
|
||||
g_FILLER(S_sw_bc),
|
||||
g_FILLER(S_sw_br),
|
||||
g_FILLER(S_explode1),
|
||||
g_FILLER(S_explode2),
|
||||
g_FILLER(S_explode3),
|
||||
0xb3, /* S_explode4: meta-3, vertical rule */
|
||||
g_FILLER(S_explode5),
|
||||
0xb3, /* S_explode6: meta-3, vertical rule */
|
||||
g_FILLER(S_explode7),
|
||||
/*90*/ g_FILLER(S_explode8),
|
||||
g_FILLER(S_explode9)
|
||||
};
|
||||
#endif /* ASCIIGRAPH */
|
||||
|
||||
#ifdef TERMLIB
|
||||
void NDECL((*decgraphics_mode_callback)) = 0; /* set in tty_start_screen() */
|
||||
|
||||
static uchar dec_graphics[MAXPCHARS] = {
|
||||
/* 0*/ g_FILLER(S_stone),
|
||||
0xf8, /* S_vwall: meta-x, vertical rule */
|
||||
0xf1, /* S_hwall: meta-q, horizontal rule */
|
||||
0xec, /* S_tlcorn: meta-l, top left corner */
|
||||
0xeb, /* S_trcorn: meta-k, top right corner */
|
||||
0xed, /* S_blcorn: meta-m, bottom left */
|
||||
0xea, /* S_brcorn: meta-j, bottom right */
|
||||
0xee, /* S_crwall: meta-n, cross */
|
||||
0xf6, /* S_tuwall: meta-v, T up */
|
||||
0xf7, /* S_tdwall: meta-w, T down */
|
||||
/*10*/ 0xf5, /* S_tlwall: meta-u, T left */
|
||||
0xf4, /* S_trwall: meta-t, T right */
|
||||
0xfe, /* S_ndoor: meta-~, centered dot */
|
||||
0xe1, /* S_vodoor: meta-a, solid block */
|
||||
0xe1, /* S_hodoor: meta-a, solid block */
|
||||
g_FILLER(S_vcdoor),
|
||||
g_FILLER(S_hcdoor),
|
||||
0xfb, /* S_bars: meta-{, small pi */
|
||||
0xe7, /* S_tree: meta-g, plus-or-minus */
|
||||
0xfe, /* S_room: meta-~, centered dot */
|
||||
/*20*/ g_FILLER(S_corr),
|
||||
g_FILLER(S_litcorr),
|
||||
g_FILLER(S_upstair),
|
||||
g_FILLER(S_dnstair),
|
||||
0xf9, /* S_upladder: meta-y, greater-than-or-equals */
|
||||
0xfa, /* S_dnladder: meta-z, less-than-or-equals */
|
||||
g_FILLER(S_altar), /* 0xc3, \E)3: meta-C, dagger */
|
||||
g_FILLER(S_grave),
|
||||
g_FILLER(S_throne),
|
||||
g_FILLER(S_sink),
|
||||
/*30*/ g_FILLER(S_fountain), /* 0xdb, \E)3: meta-[, integral top half */
|
||||
0xe0, /* S_pool: meta-\, diamond */
|
||||
0xfe, /* S_ice: meta-~, centered dot */
|
||||
0xe0, /* S_lava: meta-\, diamond */
|
||||
0xfe, /* S_vodbridge: meta-~, centered dot */
|
||||
0xfe, /* S_hodbridge: meta-~, centered dot */
|
||||
g_FILLER(S_vcdbridge),
|
||||
g_FILLER(S_hcdbridge),
|
||||
g_FILLER(S_air),
|
||||
g_FILLER(S_cloud),
|
||||
/*40*/ 0xe0, /* S_water: meta-\, diamond */
|
||||
g_FILLER(S_arrow_trap),
|
||||
g_FILLER(S_dart_trap),
|
||||
g_FILLER(S_falling_rock_trap),
|
||||
g_FILLER(S_squeaky_board),
|
||||
g_FILLER(S_bear_trap),
|
||||
g_FILLER(S_land_mine),
|
||||
g_FILLER(S_rolling_boulder_trap),
|
||||
g_FILLER(S_sleeping_gas_trap),
|
||||
g_FILLER(S_rust_trap),
|
||||
/*50*/ g_FILLER(S_fire_trap),
|
||||
g_FILLER(S_pit),
|
||||
g_FILLER(S_spiked_pit),
|
||||
g_FILLER(S_hole),
|
||||
g_FILLER(S_trap_door),
|
||||
g_FILLER(S_teleportation_trap),
|
||||
g_FILLER(S_level_teleporter),
|
||||
g_FILLER(S_magic_portal),
|
||||
g_FILLER(S_web), /* 0xbd, \E)3: meta-=, int'l currency */
|
||||
g_FILLER(S_statue_trap),
|
||||
/*60*/ g_FILLER(S_magic_trap),
|
||||
g_FILLER(S_anti_magic_trap),
|
||||
g_FILLER(S_polymorph_trap),
|
||||
0xf8, /* S_vbeam: meta-x, vertical rule */
|
||||
0xf1, /* S_hbeam: meta-q, horizontal rule */
|
||||
g_FILLER(S_lslant),
|
||||
g_FILLER(S_rslant),
|
||||
g_FILLER(S_digbeam),
|
||||
g_FILLER(S_flashbeam),
|
||||
g_FILLER(S_boomleft),
|
||||
/*70*/ g_FILLER(S_boomright),
|
||||
g_FILLER(S_ss1),
|
||||
g_FILLER(S_ss2),
|
||||
g_FILLER(S_ss3),
|
||||
g_FILLER(S_ss4),
|
||||
g_FILLER(S_sw_tl),
|
||||
0xef, /* S_sw_tc: meta-o, high horizontal line */
|
||||
g_FILLER(S_sw_tr),
|
||||
0xf8, /* S_sw_ml: meta-x, vertical rule */
|
||||
0xf8, /* S_sw_mr: meta-x, vertical rule */
|
||||
/*80*/ g_FILLER(S_sw_bl),
|
||||
0xf3, /* S_sw_bc: meta-s, low horizontal line */
|
||||
g_FILLER(S_sw_br),
|
||||
g_FILLER(S_explode1),
|
||||
0xef, /* S_explode2: meta-o, high horizontal line */
|
||||
g_FILLER(S_explode3),
|
||||
0xf8, /* S_explode4: meta-x, vertical rule */
|
||||
g_FILLER(S_explode5),
|
||||
0xf8, /* S_explode6: meta-x, vertical rule */
|
||||
g_FILLER(S_explode7),
|
||||
/*90*/ 0xf3, /* S_explode8: meta-s, low horizontal line */
|
||||
g_FILLER(S_explode9)
|
||||
};
|
||||
#endif /* TERMLIB */
|
||||
|
||||
#ifdef MAC_GRAPHICS_ENV
|
||||
static uchar mac_graphics[MAXPCHARS] = {
|
||||
/* 0*/ g_FILLER(S_stone),
|
||||
0xba, /* S_vwall */
|
||||
0xcd, /* S_hwall */
|
||||
0xc9, /* S_tlcorn */
|
||||
0xbb, /* S_trcorn */
|
||||
0xc8, /* S_blcorn */
|
||||
0xbc, /* S_brcorn */
|
||||
0xce, /* S_crwall */
|
||||
0xca, /* S_tuwall */
|
||||
0xcb, /* S_tdwall */
|
||||
/*10*/ 0xb9, /* S_tlwall */
|
||||
0xcc, /* S_trwall */
|
||||
0xb0, /* S_ndoor */
|
||||
0xee, /* S_vodoor */
|
||||
0xee, /* S_hodoor */
|
||||
0xef, /* S_vcdoor */
|
||||
0xef, /* S_hcdoor */
|
||||
0xf0, /* S_bars: equivalency symbol */
|
||||
0xf1, /* S_tree: plus-or-minus */
|
||||
g_FILLER(S_Room),
|
||||
/*20*/ 0xB0, /* S_corr */
|
||||
g_FILLER(S_litcorr),
|
||||
g_FILLER(S_upstair),
|
||||
g_FILLER(S_dnstair),
|
||||
g_FILLER(S_upladder),
|
||||
g_FILLER(S_dnladder),
|
||||
g_FILLER(S_altar),
|
||||
0xef, /* S_grave: same as open door */
|
||||
g_FILLER(S_throne),
|
||||
g_FILLER(S_sink),
|
||||
/*30*/ g_FILLER(S_fountain),
|
||||
0xe0, /* S_pool */
|
||||
g_FILLER(S_ice),
|
||||
g_FILLER(S_lava),
|
||||
g_FILLER(S_vodbridge),
|
||||
g_FILLER(S_hodbridge),
|
||||
g_FILLER(S_vcdbridge),
|
||||
g_FILLER(S_hcdbridge),
|
||||
g_FILLER(S_air),
|
||||
g_FILLER(S_cloud),
|
||||
/*40*/ g_FILLER(S_water),
|
||||
g_FILLER(S_arrow_trap),
|
||||
g_FILLER(S_dart_trap),
|
||||
g_FILLER(S_falling_rock_trap),
|
||||
g_FILLER(S_squeaky_board),
|
||||
g_FILLER(S_bear_trap),
|
||||
g_FILLER(S_land_mine),
|
||||
g_FILLER(S_rolling_boulder_trap),
|
||||
g_FILLER(S_sleeping_gas_trap),
|
||||
g_FILLER(S_rust_trap),
|
||||
/*50*/ g_FILLER(S_fire_trap),
|
||||
g_FILLER(S_pit),
|
||||
g_FILLER(S_spiked_pit),
|
||||
g_FILLER(S_hole),
|
||||
g_FILLER(S_trap_door),
|
||||
g_FILLER(S_teleportation_trap),
|
||||
g_FILLER(S_level_teleporter),
|
||||
g_FILLER(S_magic_portal),
|
||||
g_FILLER(S_web),
|
||||
g_FILLER(S_statue_trap),
|
||||
/*60*/ g_FILLER(S_magic_trap),
|
||||
g_FILLER(S_anti_magic_trap),
|
||||
g_FILLER(S_polymorph_trap),
|
||||
g_FILLER(S_vbeam),
|
||||
g_FILLER(S_hbeam),
|
||||
g_FILLER(S_lslant),
|
||||
g_FILLER(S_rslant),
|
||||
g_FILLER(S_digbeam),
|
||||
g_FILLER(S_flashbeam),
|
||||
g_FILLER(S_boomleft),
|
||||
/*70*/ g_FILLER(S_boomright),
|
||||
g_FILLER(S_ss1),
|
||||
g_FILLER(S_ss2),
|
||||
g_FILLER(S_ss3),
|
||||
g_FILLER(S_ss4),
|
||||
g_FILLER(S_sw_tl),
|
||||
g_FILLER(S_sw_tc),
|
||||
g_FILLER(S_sw_tr),
|
||||
g_FILLER(S_sw_ml),
|
||||
g_FILLER(S_sw_mr),
|
||||
/*80*/ g_FILLER(S_sw_bl),
|
||||
g_FILLER(S_sw_bc),
|
||||
g_FILLER(S_sw_br),
|
||||
g_FILLER(S_explode1),
|
||||
g_FILLER(S_explode2),
|
||||
g_FILLER(S_explode3),
|
||||
g_FILLER(S_explode4),
|
||||
g_FILLER(S_explode5),
|
||||
g_FILLER(S_explode6),
|
||||
g_FILLER(S_explode7),
|
||||
/*90*/ g_FILLER(S_explode8),
|
||||
g_FILLER(S_explode9)
|
||||
};
|
||||
#endif /* MAC_GRAPHICS_ENV */
|
||||
|
||||
#ifdef PC9800
|
||||
void NDECL((*ascgraphics_mode_callback)) = 0; /* set in tty_start_screen() */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Convert the given character to an object class. If the character is not
|
||||
* recognized, then MAXOCLASSES is returned. Used in invent.c, options.c,
|
||||
* pickup.c, sp_lev.c, and lev_main.c.
|
||||
*/
|
||||
int
|
||||
def_char_to_objclass(ch)
|
||||
char ch;
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < MAXOCLASSES; i++)
|
||||
if (ch == def_oc_syms[i]) break;
|
||||
return i;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a character into a monster class. This returns the _first_
|
||||
* match made. If there are are no matches, return MAXMCLASSES.
|
||||
*/
|
||||
int
|
||||
def_char_to_monclass(ch)
|
||||
char ch;
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < MAXMCLASSES; i++)
|
||||
if (def_monsyms[i] == ch) break;
|
||||
return i;
|
||||
}
|
||||
|
||||
void
|
||||
assign_graphics(graph_chars, glth, maxlen, offset)
|
||||
register uchar *graph_chars;
|
||||
int glth, maxlen, offset;
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < maxlen; i++)
|
||||
showsyms[i+offset] = (((i < glth) && graph_chars[i]) ?
|
||||
graph_chars[i] : defsyms[i+offset].sym);
|
||||
}
|
||||
|
||||
void
|
||||
switch_graphics(gr_set_flag)
|
||||
int gr_set_flag;
|
||||
{
|
||||
switch (gr_set_flag) {
|
||||
default:
|
||||
case ASCII_GRAPHICS:
|
||||
assign_graphics((uchar *)0, 0, MAXPCHARS, 0);
|
||||
#ifdef PC9800
|
||||
if (ascgraphics_mode_callback) (*ascgraphics_mode_callback)();
|
||||
#endif
|
||||
break;
|
||||
#ifdef ASCIIGRAPH
|
||||
case IBM_GRAPHICS:
|
||||
/*
|
||||
* Use the nice IBM Extended ASCII line-drawing characters (codepage 437).
|
||||
*
|
||||
* OS/2 defaults to a multilingual character set (codepage 850, corresponding
|
||||
* to the ISO 8859 character set. We should probably do a VioSetCp() call to
|
||||
* set the codepage to 437.
|
||||
*/
|
||||
iflags.IBMgraphics = TRUE;
|
||||
iflags.DECgraphics = FALSE;
|
||||
assign_graphics(ibm_graphics, SIZE(ibm_graphics), MAXPCHARS, 0);
|
||||
#ifdef PC9800
|
||||
if (ibmgraphics_mode_callback) (*ibmgraphics_mode_callback)();
|
||||
#endif
|
||||
break;
|
||||
#endif /* ASCIIGRAPH */
|
||||
#ifdef TERMLIB
|
||||
case DEC_GRAPHICS:
|
||||
/*
|
||||
* Use the VT100 line drawing character set.
|
||||
*/
|
||||
iflags.DECgraphics = TRUE;
|
||||
iflags.IBMgraphics = FALSE;
|
||||
assign_graphics(dec_graphics, SIZE(dec_graphics), MAXPCHARS, 0);
|
||||
if (decgraphics_mode_callback) (*decgraphics_mode_callback)();
|
||||
break;
|
||||
#endif /* TERMLIB */
|
||||
#ifdef MAC_GRAPHICS_ENV
|
||||
case MAC_GRAPHICS:
|
||||
assign_graphics(mac_graphics, SIZE(mac_graphics), MAXPCHARS, 0);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#ifdef REINCARNATION
|
||||
|
||||
/*
|
||||
* saved display symbols for objects & features.
|
||||
*/
|
||||
static uchar save_oc_syms[MAXOCLASSES] = DUMMY;
|
||||
static uchar save_showsyms[MAXPCHARS] = DUMMY;
|
||||
static uchar save_monsyms[MAXPCHARS] = DUMMY;
|
||||
|
||||
static const uchar r_oc_syms[MAXOCLASSES] = {
|
||||
/* 0*/ '\0',
|
||||
ILLOBJ_SYM,
|
||||
WEAPON_SYM,
|
||||
']', /* armor */
|
||||
RING_SYM,
|
||||
/* 5*/ ',', /* amulet */
|
||||
TOOL_SYM,
|
||||
':', /* food */
|
||||
POTION_SYM,
|
||||
SCROLL_SYM,
|
||||
/*10*/ SPBOOK_SYM,
|
||||
WAND_SYM,
|
||||
GEM_SYM, /* gold -- yes it's the same as gems */
|
||||
GEM_SYM,
|
||||
ROCK_SYM,
|
||||
/*15*/ BALL_SYM,
|
||||
CHAIN_SYM,
|
||||
VENOM_SYM
|
||||
};
|
||||
|
||||
# ifdef ASCIIGRAPH
|
||||
/* Rogue level graphics. Under IBM graphics mode, use the symbols that were
|
||||
* used for Rogue on the IBM PC. Unfortunately, this can't be completely
|
||||
* done because some of these are control characters--armor and rings under
|
||||
* DOS, and a whole bunch of them under Linux. Use the TTY Rogue characters
|
||||
* for those cases.
|
||||
*/
|
||||
static const uchar IBM_r_oc_syms[MAXOCLASSES] = { /* a la EPYX Rogue */
|
||||
/* 0*/ '\0',
|
||||
ILLOBJ_SYM,
|
||||
# if defined(MSDOS) || defined(WIN32) || defined(OS2)
|
||||
0x18, /* weapon: up arrow */
|
||||
/* 0x0a, */ ARMOR_SYM, /* armor: Vert rect with o */
|
||||
/* 0x09, */ RING_SYM, /* ring: circle with arrow */
|
||||
/* 5*/ 0x0c, /* amulet: "female" symbol */
|
||||
TOOL_SYM,
|
||||
0x05, /* food: club (as in cards) */
|
||||
0xad, /* potion: upside down '!' */
|
||||
0x0e, /* scroll: musical note */
|
||||
/*10*/ SPBOOK_SYM,
|
||||
0xe7, /* wand: greek tau */
|
||||
0x0f, /* gold: yes it's the same as gems */
|
||||
0x0f, /* gems: fancy '*' */
|
||||
# else
|
||||
')', /* weapon */
|
||||
ARMOR_SYM, /* armor */
|
||||
RING_SYM, /* ring */
|
||||
/* 5*/ ',', /* amulet */
|
||||
TOOL_SYM,
|
||||
':', /* food */
|
||||
0xad, /* potion: upside down '!' */
|
||||
SCROLL_SYM, /* scroll */
|
||||
/*10*/ SPBOOK_SYM,
|
||||
0xe7, /* wand: greek tau */
|
||||
GEM_SYM, /* gold: yes it's the same as gems */
|
||||
GEM_SYM, /* gems */
|
||||
# endif
|
||||
ROCK_SYM,
|
||||
/*15*/ BALL_SYM,
|
||||
CHAIN_SYM,
|
||||
VENOM_SYM
|
||||
};
|
||||
# endif /* ASCIIGRAPH */
|
||||
|
||||
void
|
||||
assign_rogue_graphics(is_rlevel)
|
||||
boolean is_rlevel;
|
||||
{
|
||||
/* Adjust graphics display characters on Rogue levels */
|
||||
|
||||
if (is_rlevel) {
|
||||
register int i;
|
||||
|
||||
(void) memcpy((genericptr_t)save_showsyms,
|
||||
(genericptr_t)showsyms, sizeof showsyms);
|
||||
(void) memcpy((genericptr_t)save_oc_syms,
|
||||
(genericptr_t)oc_syms, sizeof oc_syms);
|
||||
(void) memcpy((genericptr_t)save_monsyms,
|
||||
(genericptr_t)monsyms, sizeof monsyms);
|
||||
|
||||
/* Use a loop: char != uchar on some machines. */
|
||||
for (i = 0; i < MAXMCLASSES; i++)
|
||||
monsyms[i] = def_monsyms[i];
|
||||
# ifdef ASCIIGRAPH
|
||||
if (iflags.IBMgraphics
|
||||
# if defined(USE_TILES) && defined(MSDOS)
|
||||
&& !iflags.grmode
|
||||
# endif
|
||||
)
|
||||
monsyms[S_HUMAN] = 0x01; /* smiley face */
|
||||
# endif
|
||||
for (i = 0; i < MAXPCHARS; i++)
|
||||
showsyms[i] = defsyms[i].sym;
|
||||
|
||||
/*
|
||||
* Some day if these rogue showsyms get much more extensive than this,
|
||||
* we may want to create r_showsyms, and IBM_r_showsyms arrays to hold
|
||||
* all of this info and to simply initialize it via a for() loop like r_oc_syms.
|
||||
*/
|
||||
|
||||
# ifdef ASCIIGRAPH
|
||||
if (!iflags.IBMgraphics
|
||||
# if defined(USE_TILES) && defined(MSDOS)
|
||||
|| iflags.grmode
|
||||
# endif
|
||||
) {
|
||||
# endif
|
||||
showsyms[S_vodoor] = showsyms[S_hodoor] = showsyms[S_ndoor] = '+';
|
||||
showsyms[S_upstair] = showsyms[S_dnstair] = '%';
|
||||
# ifdef ASCIIGRAPH
|
||||
} else {
|
||||
/* a la EPYX Rogue */
|
||||
showsyms[S_vwall] = 0xba; /* all walls now use */
|
||||
showsyms[S_hwall] = 0xcd; /* double line graphics */
|
||||
showsyms[S_tlcorn] = 0xc9;
|
||||
showsyms[S_trcorn] = 0xbb;
|
||||
showsyms[S_blcorn] = 0xc8;
|
||||
showsyms[S_brcorn] = 0xbc;
|
||||
showsyms[S_crwall] = 0xce;
|
||||
showsyms[S_tuwall] = 0xca;
|
||||
showsyms[S_tdwall] = 0xcb;
|
||||
showsyms[S_tlwall] = 0xb9;
|
||||
showsyms[S_trwall] = 0xcc;
|
||||
showsyms[S_ndoor] = 0xce;
|
||||
showsyms[S_vodoor] = 0xce;
|
||||
showsyms[S_hodoor] = 0xce;
|
||||
showsyms[S_room] = 0xfa; /* centered dot */
|
||||
showsyms[S_corr] = 0xb1;
|
||||
showsyms[S_litcorr] = 0xb2;
|
||||
showsyms[S_upstair] = 0xf0; /* Greek Xi */
|
||||
showsyms[S_dnstair] = 0xf0;
|
||||
showsyms[S_arrow_trap] = 0x04; /* diamond (cards) */
|
||||
showsyms[S_dart_trap] = 0x04;
|
||||
showsyms[S_falling_rock_trap] = 0x04;
|
||||
showsyms[S_squeaky_board] = 0x04;
|
||||
showsyms[S_bear_trap] = 0x04;
|
||||
showsyms[S_land_mine] = 0x04;
|
||||
showsyms[S_rolling_boulder_trap] = 0x04;
|
||||
showsyms[S_sleeping_gas_trap] = 0x04;
|
||||
showsyms[S_rust_trap] = 0x04;
|
||||
showsyms[S_fire_trap] = 0x04;
|
||||
showsyms[S_pit] = 0x04;
|
||||
showsyms[S_spiked_pit] = 0x04;
|
||||
showsyms[S_hole] = 0x04;
|
||||
showsyms[S_trap_door] = 0x04;
|
||||
showsyms[S_teleportation_trap] = 0x04;
|
||||
showsyms[S_level_teleporter] = 0x04;
|
||||
showsyms[S_magic_portal] = 0x04;
|
||||
showsyms[S_web] = 0x04;
|
||||
showsyms[S_statue_trap] = 0x04;
|
||||
showsyms[S_magic_trap] = 0x04;
|
||||
showsyms[S_anti_magic_trap] = 0x04;
|
||||
showsyms[S_polymorph_trap] = 0x04;
|
||||
}
|
||||
#endif /* ASCIIGRAPH */
|
||||
|
||||
for (i = 0; i < MAXOCLASSES; i++) {
|
||||
#ifdef ASCIIGRAPH
|
||||
if (iflags.IBMgraphics
|
||||
# if defined(USE_TILES) && defined(MSDOS)
|
||||
&& !iflags.grmode
|
||||
# endif
|
||||
)
|
||||
oc_syms[i] = IBM_r_oc_syms[i];
|
||||
else
|
||||
#endif /* ASCIIGRAPH */
|
||||
oc_syms[i] = r_oc_syms[i];
|
||||
}
|
||||
#if defined(MSDOS) && defined(USE_TILES)
|
||||
if (iflags.grmode) tileview(FALSE);
|
||||
#endif
|
||||
} else {
|
||||
(void) memcpy((genericptr_t)showsyms,
|
||||
(genericptr_t)save_showsyms, sizeof showsyms);
|
||||
(void) memcpy((genericptr_t)oc_syms,
|
||||
(genericptr_t)save_oc_syms, sizeof oc_syms);
|
||||
(void) memcpy((genericptr_t)monsyms,
|
||||
(genericptr_t)save_monsyms, sizeof monsyms);
|
||||
#if defined(MSDOS) && defined(USE_TILES)
|
||||
if (iflags.grmode) tileview(TRUE);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif /* REINCARNATION */
|
||||
|
||||
/*drawing.c*/
|
||||
Reference in New Issue
Block a user