From: nhmall Date: Sat, 26 Dec 2020 16:23:23 +0000 (-0500) Subject: pmnames mons gender naming plus a window port interface change X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0c3b964;p=nethack pmnames mons gender naming plus a window port interface change add MALE, FEMALE, and gender-neutral names for individual monster species to the mons array. The gender-neutral name (NEUTRAL) is mandatory, the MALE and FEMALE versions are not. replace code uses of the mname field of permonst with one of the three potentially-available gender-specific names. consolidate some separate mons entries that differed only by species into a single mons entry (caveman, cavewoman and priest,priestess etc.) consolidate several "* lord" and "* queen/* king" monst entries into their single species, and allow both genders on some where it makes some sense (there is probably more work and cleanup to come out of this at some point, and the chosen gender-neutral name variations are not cast in stone if someone has better suggestions). related function or macro additions: pmname(pm, gender) to get the gender variation of the permonst name. It guards against monsters that haven't got anything except NEUTRAL naming and falls back to the NEUTRAL version if FEMALE and MALE versions are missing. Ugender to obtain the current hero gender. Mgender(mtmp) to obtain the gender of a monster While the code can safely refer directly to pmnames[NEUTRAL] safely in the code because it always exists, the other two (pmnames[MALE] and pmnames[FEMALE] may not exist so use: pmname(ptr, gidx) where -ptr is a permonst * -gidx is an index into the pmnames array field of the permonst struct pmname() checks for a valid index and checks for null-pointers for pmnames[MALE] and pmnames[FEMALE], and will fall back to pmnames[NEUTRAL] if the pointer requested if the requested variation is unavailable, or if the gidx is out-of-range. Allow code to specify makemon flags to request female or male (via MM_MALE and MM_FEMALE flags respectively)to makedefs, since the species alone doesn't distinguish male/female anymore. Specifying MM_MALE or MM_FEMALE won't override the pm M2_MALE and M2_FEMALE flags on a mons[] entry. male and female tiles have been added to win/share/monsters.txt. The majority are duplicated placeholders except for those that were separate mons entries before. Perhaps someone will contribute artwork in the future to make the male and female variations visually distinguishable. tilemapping via has the MALE tile indexes in the glyph2tile[] array produced at build time. If a window port has information that the FEMALE tile is required, it just has to increment the index returned from the glyph2tile[] array by 1. statues already preserved gender of the monster through STATUE_FEMALE and STATUE_MALE, so ensure that pmnames takes that into consideration. I expect some refinement will be required after broad play-testing puts it to the test. consolidate caveman,cavewoman and priest,priestess monst.c entries etc This commit will require a bump of editlevel in patchlevel.h because it alters the index numbers of the monsters due to the consolidation of some. Those index numbers are saved in some other structures, even though the mons[] array itself is not part of the savefile. Window Port Interface Change Also add a parameter to print_glyph to convey additional information beyond the glyph to the window ports. Every single window port was calling back to mapglyph for the information anyway, so just included it in the interface and produce the information right in the display core. The mapglyph() function uses will be eliminated, although there are still some in the code yet to be dealt with. win32, tty, x11, Qt, msdos window ports have all had adjustments done to utilize the new parameter instead of calling mapglyph, but some of those window ports have not been thoroughly tested since the changes. Interface change additional info: print_glyph(window, x, y, glyph, bkglyph, *glyphmod) -- Print the glyph at (x,y) on the given window. Glyphs are integers at the interface, mapped to whatever the window- port wants (symbol, font, color, attributes, ...there's a 1-1 map between glyphs and distinct things on the map). -- bkglyph is a background glyph for potential use by some graphical or tiled environments to allow the depiction to fall against a background consistent with the grid around x,y. If bkglyph is NO_GLYPH, then the parameter should be ignored (do nothing with it). -- glyphmod provides extended information about the glyph that window ports can use to enhance the display in various ways. unsigned int glyphmod[NUM_GLYPHMOD] where: glyphmod[GM_TTYCHAR] is the text characters associated with the original NetHack display. glyphmod[GM_FLAGS] are the special flags that denote additional information that window ports can use. glyphmod[GM_COLOR] is the text character color associated with the original NetHack display. Support for including the glyphmod info in the display glyph buffer alongside the glyph itself was added and is the default operation. That can be turned off by defining UNBUFFERED_GLYPHMOD at compile time. With UNBUFFERED_GLYPHMOD operation, a call will be placed to map_glyphmod() immediately prior to every print_glyph() call. --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index f538e48a5..d86b9d5ec 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -703,6 +703,12 @@ include an indication of monsters' health during farlook feedback (including a monster: "killed by {an uninjured newt,a heavily injured mumak}" make DOAGAIN (^A) become unconditional; commenting it out in config.h makes it be bound to NUL, a no-op, but allows BIND=k:repeat to set it to k +add support for a single monster species to have distinct male, female, + and gender-neutral naming terms +add support for a single monster species to have distinct male and female + tiles +consolidate several monsters that differed only by their gender into their + single species Platform- and/or Interface-Specific New Features @@ -730,6 +736,10 @@ Qt: add Filter, Layout, and Reset buttons to the extended command selector; mode only"; Layout redisplays the grid of command buttons, toggling from down columns to across rows or vice versa; Reset puts both back to their default settings and clears any pending typed input +tiles: male and female variations in monsters.txt; tested only with tile2bmp + conversion utility so far; also supported by tilemap utility to + generate tile.c; some window-port modifications still required to + integrate the male and female tile capability into the window port Unix: can define NOSUSPEND in config.h or src/Makefile's CFLAGS to prevent unixconf.h from enabling SUSPEND without need to modify unixconf.h @@ -824,5 +834,8 @@ move 'restoring' to the program_state struct; add corresponding 'saving'; unify special attack damages from separate you-hit-monster, monster-hits-you, and monster-hits-monster into functions by damage type unify trap effects for hero and monster stepping on the trap by trap type - - +replace the single permonst mname field with male, female, and gender-neutral + names pmnames[NUM_MGENDERS] fields +add a new glyphmod parameter to window interface *_print_glyph() to be used + to provide additional details to the window port beyond the glyph; + begin to phase out the mapglyph() calls from within windows ports diff --git a/doc/window.doc b/doc/window.doc index 1f376a5bd..bd55a5ac0 100644 --- a/doc/window.doc +++ b/doc/window.doc @@ -192,7 +192,7 @@ int nh_poskey(int *x, int *y, int *mod) B. High-level routines: -print_glyph(window, x, y, glyph, bkglyph) +print_glyph(window, x, y, glyph, bkglyph, glyphmod[3]) -- Print the glyph at (x,y) on the given window. Glyphs are integers at the interface, mapped to whatever the window- port wants (symbol, font, color, attributes, ...there's @@ -202,7 +202,10 @@ print_glyph(window, x, y, glyph, bkglyph) to fall against a background consistent with the grid around x,y. If bkglyph is NO_GLYPH, then the parameter should be ignored (do nothing with it). - + -- glyphmod (glyphmod[NUM_GLYPHNOD]) provides extended + information about the glyph that window ports can use to + enhance the display in various ways. + char yn_function(const char *ques, const char *choices, char default) -- Print a prompt made up of ques, choices and default. Read a single character response that is contained in diff --git a/include/artilist.h b/include/artilist.h index d3a5e7ab2..c95f41775 100644 --- a/include/artilist.h +++ b/include/artilist.h @@ -180,7 +180,7 @@ static NEARDATA struct artifact artilist[] = { A("The Sceptre of Might", MACE, (SPFX_NOGEN | SPFX_RESTR | SPFX_INTEL | SPFX_DALIGN), 0, 0, PHYS(5, 0), - DFNS(AD_MAGM), NO_CARY, CONFLICT, A_LAWFUL, PM_CAVEMAN, NON_PM, 2500L, + DFNS(AD_MAGM), NO_CARY, CONFLICT, A_LAWFUL, PM_CAVE_DWELLER, NON_PM, 2500L, NO_COLOR), #if 0 /* OBSOLETE */ @@ -210,7 +210,7 @@ A("The Palantir of Westernesse", CRYSTAL_BALL, A("The Mitre of Holiness", HELM_OF_BRILLIANCE, (SPFX_NOGEN | SPFX_RESTR | SPFX_DFLAG2 | SPFX_INTEL | SPFX_PROTECT), 0, M2_UNDEAD, NO_ATTK, NO_DFNS, CARY(AD_FIRE), ENERGY_BOOST, A_LAWFUL, - PM_PRIEST, NON_PM, 2000L, NO_COLOR), + PM_CLERIC, NON_PM, 2000L, NO_COLOR), A("The Longbow of Diana", BOW, (SPFX_NOGEN | SPFX_RESTR | SPFX_INTEL | SPFX_REFLECT), SPFX_ESP, 0, diff --git a/include/decl.h b/include/decl.h index 71147ce18..0a9b61ba9 100644 --- a/include/decl.h +++ b/include/decl.h @@ -524,6 +524,9 @@ struct trapinfo { typedef struct { xchar gnew; /* perhaps move this bit into the rm structure. */ int glyph; +#ifndef UNBUFFERED_GLYPHMOD + unsigned glyphmod[NUM_GLYPHMOD]; +#endif } gbuf_entry; enum vanq_order_modes { diff --git a/include/display.h b/include/display.h index 28c02becd..1c944c276 100644 --- a/include/display.h +++ b/include/display.h @@ -475,4 +475,27 @@ enum explosion_types { #define glyph_is_unexplored(glyph) ((glyph) == GLYPH_UNEXPLORED) #define glyph_is_nothing(glyph) ((glyph) == GLYPH_NOTHING) +/* flags for map_glyphmod */ + +/* mgflags for altering map_glyphmod() internal behaviour */ +#define MG_FLAG_NORMAL 0x00 +#define MG_FLAG_NOOVERRIDE 0x01 +#define MG_FLAG_RETURNIDX 0x02 + +/* Special mapped glyph flags encoded in glyphmod[GM_FLAGS] by map_glyphmod() */ +#define MG_CORPSE 0x0001 +#define MG_INVIS 0x0002 +#define MG_DETECT 0x0004 +#define MG_PET 0x0008 +#define MG_RIDDEN 0x0010 +#define MG_STATUE 0x0020 +#define MG_OBJPILE 0x0040 /* more than one stack of objects */ +#define MG_BW_LAVA 0x0080 /* 'black & white lava': highlight lava if it + can't be distringuished from water by color */ +#define MG_BW_ICE 0x0100 /* similar for ice vs floor */ +#define MG_NOTHING 0x0200 /* char represents GLYPH_NOTHING */ +#define MG_UNEXPL 0x0400 /* char represents GLYPH_UNEXPLORED */ +#define MG_FEMALE 0x0800 /* represents a female mon,detected mon,pet,ridden */ +#define MG_BADXY 0x1000 /* bad coordinates were passed */ + #endif /* DISPLAY_H */ diff --git a/include/extern.h b/include/extern.h index ac8b1e723..cf66dd4ff 100644 --- a/include/extern.h +++ b/include/extern.h @@ -374,6 +374,7 @@ E void NDECL(reglyph_darkroom); E void NDECL(set_wall_state); E void FDECL(unset_seenv, (struct rm *, int, int, int, int)); E int FDECL(warning_of, (struct monst *)); +E void FDECL(map_glyphmod, (XCHAR_P, XCHAR_P, int, unsigned, unsigned *)); /* ### do.c ### */ @@ -415,8 +416,8 @@ E char *FDECL(coord_desc, (int, int, char *, CHAR_P)); E boolean FDECL(getpos_menu, (coord *, int)); E int FDECL(getpos, (coord *, BOOLEAN_P, const char *)); E void FDECL(getpos_sethilite, (void (*f)(int), boolean (*d)(int,int))); -E void FDECL(new_mname, (struct monst *, int)); -E void FDECL(free_mname, (struct monst *)); +E void FDECL(new_mgivenname, (struct monst *, int)); +E void FDECL(free_mgivenname, (struct monst *)); E void FDECL(new_oname, (struct obj *, int)); E void FDECL(free_oname, (struct obj *)); E const char *FDECL(safe_oname, (struct obj *)); @@ -457,6 +458,10 @@ E struct monst *FDECL(christen_orc, (struct monst *, const char *, const char *)); E const char *FDECL(noveltitle, (int *)); E const char *FDECL(lookup_novel, (const char *, int *)); +#ifndef PMNAME_MACROS +E int FDECL(Mgender, (struct monst *)); +E const char *FDECL(pmname, (struct permonst *, int)); +#endif /* PMNAME_MACROS */ /* ### do_wear.c ### */ @@ -1516,8 +1521,8 @@ E boolean FDECL(dmgtype, (struct permonst *, int)); E int FDECL(max_passive_dmg, (struct monst *, struct monst *)); E boolean FDECL(same_race, (struct permonst *, struct permonst *)); E int FDECL(monsndx, (struct permonst *)); -E int FDECL(name_to_mon, (const char *)); -E int FDECL(name_to_monplus, (const char *, const char **)); +E int FDECL(name_to_mon, (const char *, int *)); +E int FDECL(name_to_monplus, (const char *, const char **, int *)); E int FDECL(name_to_monclass, (const char *, int *)); E int FDECL(gender, (struct monst *)); E int FDECL(pronoun_gender, (struct monst *, unsigned)); diff --git a/include/hack.h b/include/hack.h index 0917b93c4..aa9b57106 100644 --- a/include/hack.h +++ b/include/hack.h @@ -79,24 +79,6 @@ enum dismount_types { DISMOUNT_BYCHOICE = 6 }; -/* mgflags for mapglyph() */ -#define MG_FLAG_NORMAL 0x00 -#define MG_FLAG_NOOVERRIDE 0x01 - -/* Special returns from mapglyph() */ -#define MG_CORPSE 0x0001 -#define MG_INVIS 0x0002 -#define MG_DETECT 0x0004 -#define MG_PET 0x0008 -#define MG_RIDDEN 0x0010 -#define MG_STATUE 0x0020 -#define MG_OBJPILE 0x0040 /* more than one stack of objects */ -#define MG_BW_LAVA 0x0080 /* 'black & white lava': highlight lava if it - can't be distringuished from water by color */ -#define MG_BW_ICE 0x0100 /* similar for ice vs floor */ -#define MG_NOTHING 0x0200 /* char represents GLYPH_NOTHING */ -#define MG_UNEXPL 0x0400 /* char represents GLYPH_UNEXPLORED */ - /* sellobj_state() states */ #define SELL_NORMAL (0) #define SELL_DELIBERATE (1) @@ -216,6 +198,9 @@ typedef struct { #define SYM_OFF_X (SYM_OFF_W + WARNCOUNT) #define SYM_MAX (SYM_OFF_X + MAXOTHER) +/* glyphmod entries */ +enum { GM_FLAGS, GM_TTYCHAR, GM_COLOR, NUM_GLYPHMOD }; + #include "rect.h" #include "region.h" #include "decl.h" @@ -293,10 +278,12 @@ typedef struct sortloot_item Loot; #define MM_ASLEEP 0x002000L /* monsters should be generated asleep */ #define MM_NOGRP 0x004000L /* suppress creation of monster groups */ #define MM_NOTAIL 0x008000L /* if a long worm, don't give it a tail */ +#define MM_MALE 0x010000L /* male variation */ +#define MM_FEMALE 0x020000L /* female variation */ /* if more MM_ flag masks are added, skip or renumber the GP_ one(s) */ -#define GP_ALLOW_XY 0x010000L /* [actually used by enexto() to decide whether +#define GP_ALLOW_XY 0x040000L /* [actually used by enexto() to decide whether * to make an extra call to goodpos()] */ -#define GP_ALLOW_U 0x020000L /* don't reject hero's location */ +#define GP_ALLOW_U 0x080000L /* don't reject hero's location */ /* flags for make_corpse() and mkcorpstat() */ #define CORPSTAT_NONE 0x00 diff --git a/include/mextra.h b/include/mextra.h index 0ade0adf7..cc4d715ae 100644 --- a/include/mextra.h +++ b/include/mextra.h @@ -175,7 +175,7 @@ struct edog { ** mextra.h -- collection of all monster extensions */ struct mextra { - char *mname; + char *mgivenname; struct egd *egd; struct epri *epri; struct eshk *eshk; @@ -186,7 +186,7 @@ struct mextra { * or an alignment mask for one posing as an altar */ }; -#define MNAME(mon) ((mon)->mextra->mname) +#define MGIVENNAME(mon) ((mon)->mextra->mgivenname) #define EGD(mon) ((mon)->mextra->egd) #define EPRI(mon) ((mon)->mextra->epri) #define ESHK(mon) ((mon)->mextra->eshk) @@ -194,7 +194,7 @@ struct mextra { #define EDOG(mon) ((mon)->mextra->edog) #define MCORPSENM(mon) ((mon)->mextra->mcorpsenm) -#define has_mname(mon) ((mon)->mextra && MNAME(mon)) +#define has_mgivenname(mon) ((mon)->mextra && MGIVENNAME(mon)) #define has_egd(mon) ((mon)->mextra && EGD(mon)) #define has_epri(mon) ((mon)->mextra && EPRI(mon)) #define has_eshk(mon) ((mon)->mextra && ESHK(mon)) diff --git a/include/monflag.h b/include/monflag.h index a243dc8a4..d7a1a88f5 100644 --- a/include/monflag.h +++ b/include/monflag.h @@ -205,6 +205,9 @@ enum ms_sounds { #define G_GONE (G_GENOD | G_EXTINCT) #define MV_KNOWS_EGG 0x08 /* player recognizes egg of this monster type */ +enum mgender { MALE, FEMALE, NEUTRAL, + NUM_MGENDERS }; + /* *INDENT-ON* */ /* clang-format on */ #endif /* MONFLAG_H */ diff --git a/include/monst.h b/include/monst.h index 6842162ca..66f51f469 100644 --- a/include/monst.h +++ b/include/monst.h @@ -184,7 +184,7 @@ struct monst { #define DEADMONSTER(mon) ((mon)->mhp < 1) #define is_starting_pet(mon) ((mon)->m_id == g.context.startingpet_mid) #define is_vampshifter(mon) \ - ((mon)->cham == PM_VAMPIRE || (mon)->cham == PM_VAMPIRE_LORD \ + ((mon)->cham == PM_VAMPIRE || (mon)->cham == PM_VAMPIRE_LEADER \ || (mon)->cham == PM_VLAD_THE_IMPALER) #define vampshifted(mon) (is_vampshifter((mon)) && !is_vampire((mon)->data)) @@ -220,4 +220,8 @@ struct monst { #define montoostrong(monindx, lev) (mons[monindx].difficulty > lev) #define montooweak(monindx, lev) (mons[monindx].difficulty < lev) +#ifdef PMNAME_MACROS +#define Mgender(mon) ((mon)->female ? FEMALE : MALE) +#endif + #endif /* MONST_H */ diff --git a/include/patchlevel.h b/include/patchlevel.h index d6969198b..a7b4c2da8 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -17,7 +17,7 @@ * Incrementing EDITLEVEL can be used to force invalidation of old bones * and save files. */ -#define EDITLEVEL 29 +#define EDITLEVEL 30 /* * Development status possibilities. diff --git a/include/permonst.h b/include/permonst.h index 5125f1339..0a017c68a 100644 --- a/include/permonst.h +++ b/include/permonst.h @@ -40,7 +40,7 @@ struct attack { #include "monflag.h" struct permonst { - const char *mname; /* full name */ + const char *pmnames[NUM_MGENDERS]; char mlet; /* symbol */ schar mlevel, /* base monster level */ mmove, /* move speed */ @@ -78,4 +78,8 @@ extern NEARDATA struct permonst mons[]; /* the master list of monster types */ /* mons[SPECIAL_PM] through mons[NUMMONS-1], inclusive, are never generated randomly and cannot be polymorphed into */ +#ifdef PMNAME_MACROS +#define pmname(pm,g) ((((g) == MALE || (g) == FEMALE) && (pm)->pmnames[g]) \ + ? (pm)->pmnames[g] : (pm)->pmnames[NEUTRAL]) +#endif #endif /* PERMONST_H */ diff --git a/include/winX.h b/include/winX.h index 7cf1c2885..3f29dce75 100644 --- a/include/winX.h +++ b/include/winX.h @@ -453,7 +453,8 @@ E void NDECL(X11_wait_synch); #ifdef CLIPPING E void FDECL(X11_cliparound, (int, int)); #endif -E void FDECL(X11_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int)); +E void FDECL(X11_print_glyph, (winid, XCHAR_P, XCHAR_P, + int, int, unsigned *)); E void FDECL(X11_raw_print, (const char *)); E void FDECL(X11_raw_print_bold, (const char *)); E int NDECL(X11_nhgetch); diff --git a/include/wincurs.h b/include/wincurs.h index 4e5ce4e78..001c813e6 100644 --- a/include/wincurs.h +++ b/include/wincurs.h @@ -90,7 +90,7 @@ extern void curses_mark_synch(void); extern void curses_wait_synch(void); extern void curses_cliparound(int x, int y); extern void curses_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, - int glyph, int bkglyph); + int glyph, int bkglyph, unsigned *glyphmod); extern void curses_raw_print(const char *str); extern void curses_raw_print_bold(const char *str); extern int curses_nhgetch(void); diff --git a/include/wingem.h b/include/wingem.h index 6a0a517f7..f433e1cc6 100644 --- a/include/wingem.h +++ b/include/wingem.h @@ -84,7 +84,8 @@ E void FDECL(Gem_cliparound, (int, int)); #ifdef POSITIONBAR E void FDECL(Gem_update_positionbar, (char *)); #endif -E void FDECL(Gem_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int)); +E void FDECL(Gem_print_glyph, (winid, XCHAR_P, XCHAR_P, + int, int, unsigned *)); E void FDECL(Gem_raw_print, (const char *)); E void FDECL(Gem_raw_print_bold, (const char *)); E int NDECL(Gem_nhgetch); diff --git a/include/winprocs.h b/include/winprocs.h index fa6652c05..728e35067 100644 --- a/include/winprocs.h +++ b/include/winprocs.h @@ -45,7 +45,8 @@ struct window_procs { #ifdef POSITIONBAR void FDECL((*win_update_positionbar), (char *)); #endif - void FDECL((*win_print_glyph), (winid, XCHAR_P, XCHAR_P, int, int)); + void FDECL((*win_print_glyph), (winid, XCHAR_P, XCHAR_P, + int, int, unsigned *)); void FDECL((*win_raw_print), (const char *)); void FDECL((*win_raw_print_bold), (const char *)); int NDECL((*win_nhgetch)); @@ -345,7 +346,8 @@ struct chain_procs { #ifdef POSITIONBAR void FDECL((*win_update_positionbar), (CARGS, char *)); #endif - void FDECL((*win_print_glyph), (CARGS, winid, XCHAR_P, XCHAR_P, int, int)); + void FDECL((*win_print_glyph), (CARGS, winid, XCHAR_P, XCHAR_P, + int, int, unsigned *)); void FDECL((*win_raw_print), (CARGS, const char *)); void FDECL((*win_raw_print_bold), (CARGS, const char *)); int FDECL((*win_nhgetch), (CARGS)); @@ -420,7 +422,8 @@ extern void FDECL(safe_cliparound, (int, int)); #ifdef POSITIONBAR extern void FDECL(safe_update_positionbar, (char *)); #endif -extern void FDECL(safe_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int)); +extern void FDECL(safe_print_glyph, (winid, XCHAR_P, XCHAR_P, + int, int, unsigned *)); extern void FDECL(safe_raw_print, (const char *)); extern void FDECL(safe_raw_print_bold, (const char *)); extern int NDECL(safe_nhgetch); diff --git a/include/wintty.h b/include/wintty.h index 2d0b05fd2..5d1d444d0 100644 --- a/include/wintty.h +++ b/include/wintty.h @@ -211,7 +211,7 @@ E void FDECL(tty_cliparound, (int, int)); #ifdef POSITIONBAR E void FDECL(tty_update_positionbar, (char *)); #endif -E void FDECL(tty_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int)); +E void FDECL(tty_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int, unsigned *)); E void FDECL(tty_raw_print, (const char *)); E void FDECL(tty_raw_print_bold, (const char *)); E int NDECL(tty_nhgetch); diff --git a/include/you.h b/include/you.h index 0d9686f88..79d3737ff 100644 --- a/include/you.h +++ b/include/you.h @@ -479,5 +479,6 @@ struct you { }; /* end of `struct you' */ #define Upolyd (u.umonnum != u.umonster) +#define Ugender ((Upolyd ? u.mfemale : flags.female) ? 1 : 0) #endif /* YOU_H */ diff --git a/src/apply.c b/src/apply.c index daa2b9c4b..737836f15 100644 --- a/src/apply.c +++ b/src/apply.c @@ -272,7 +272,7 @@ int rx, ry, *resp; humanoid(mptr) ? "person" : "creature"); what = buf; } else { - what = mptr->mname; + what = pmname(mptr, NEUTRAL); if (!type_is_pname(mptr)) what = The(what); } @@ -408,7 +408,7 @@ register struct obj *obj; || odummy->otyp == LENSES); break; case M_AP_MONSTER: /* ignore Hallucination here */ - what = mons[mtmp->mappearance].mname; + what = pmname(&mons[mtmp->mappearance], Mgender(mtmp)); break; case M_AP_FURNITURE: what = defsyms[mtmp->mappearance].explanation; @@ -904,7 +904,7 @@ struct obj *obj; } else if (u.uhs >= WEAK) { You(look_str, "undernourished"); } else if (Upolyd) { - You("look like %s.", an(mons[u.umonnum].mname)); + You("look like %s.", an(pmname(&mons[u.umonnum], Ugender))); } else { You("look as %s as ever.", uvisage); } @@ -985,8 +985,8 @@ struct obj *obj; if (vis) pline("%s confuses itself!", Monnam(mtmp)); mtmp->mconf = 1; - } else if (monable && (mlet == S_NYMPH || mtmp->data == &mons[PM_SUCCUBUS] - || mtmp->data == &mons[PM_INCUBUS])) { + } else if (monable && + (mlet == S_NYMPH || mtmp->data == &mons[PM_AMOROUS_DEMON])) { if (vis) { char buf[BUFSZ]; /* "She" or "He" */ @@ -1951,12 +1951,12 @@ struct obj *obj; if (poly_when_stoned(g.youmonst.data)) You("tin %s without wearing gloves.", - an(mons[corpse->corpsenm].mname)); + an(mons[corpse->corpsenm].pmnames[NEUTRAL])); else { pline("Tinning %s without wearing gloves is a fatal mistake...", - an(mons[corpse->corpsenm].mname)); + an(mons[corpse->corpsenm].pmnames[NEUTRAL])); Sprintf(kbuf, "trying to tin %s without gloves", - an(mons[corpse->corpsenm].mname)); + an(mons[corpse->corpsenm].pmnames[NEUTRAL])); } instapetrify(kbuf); } @@ -2895,7 +2895,7 @@ struct obj *obj; char kbuf[BUFSZ]; Sprintf(kbuf, "%s corpse", - an(mons[otmp->corpsenm].mname)); + an(mons[otmp->corpsenm].pmnames[NEUTRAL])); pline("Snatching %s is a fatal mistake.", kbuf); instapetrify(kbuf); } diff --git a/src/attrib.c b/src/attrib.c index 551992bf7..759296702 100644 --- a/src/attrib.c +++ b/src/attrib.c @@ -298,7 +298,7 @@ boolean thrown_weapon; /* thrown weapons are less deadly */ } /* suppress killer prefix if it already has one */ - i = name_to_mon(pkiller); + i = name_to_mon(pkiller, (int *) 0); if (i >= LOW_PM && (mons[i].geno & G_UNIQ)) { kprefix = KILLED_BY; if (!type_is_pname(&mons[i])) @@ -709,11 +709,11 @@ int r; } roleabils[] = { { PM_ARCHEOLOGIST, arc_abil }, { PM_BARBARIAN, bar_abil }, - { PM_CAVEMAN, cav_abil }, + { PM_CAVE_DWELLER, cav_abil }, { PM_HEALER, hea_abil }, { PM_KNIGHT, kni_abil }, { PM_MONK, mon_abil }, - { PM_PRIEST, pri_abil }, + { PM_CLERIC, pri_abil }, { PM_RANGER, ran_abil }, { PM_ROGUE, rog_abil }, { PM_SAMURAI, sam_abil }, @@ -1054,8 +1054,8 @@ int x; #endif } else if (x == A_CHA) { if (tmp < 18 - && (g.youmonst.data->mlet == S_NYMPH || u.umonnum == PM_SUCCUBUS - || u.umonnum == PM_INCUBUS)) + && (g.youmonst.data->mlet == S_NYMPH + || u.umonnum == PM_AMOROUS_DEMON)) return (schar) 18; } else if (x == A_CON) { if (uwep && uwep->oartifact == ART_OGRESMASHER) diff --git a/src/bones.c b/src/bones.c index ca5a818cc..93c23b962 100644 --- a/src/bones.c +++ b/src/bones.c @@ -617,12 +617,12 @@ getbones() * set to the magic DEFUNCT_MONSTER cookie value. */ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { - if (has_mname(mtmp)) - sanitize_name(MNAME(mtmp)); + if (has_mgivenname(mtmp)) + sanitize_name(MGIVENNAME(mtmp)); if (mtmp->mhpmax == DEFUNCT_MONSTER) { if (wizard) { debugpline1("Removing defunct monster %s from bones.", - mtmp->data->mname); + mtmp->data->pmnames[NEUTRAL]); } mongone(mtmp); } else diff --git a/src/botl.c b/src/botl.c index 23dd6906c..ab225740c 100644 --- a/src/botl.c +++ b/src/botl.c @@ -67,7 +67,7 @@ do_statusline1() char mbot[BUFSZ]; int k = 0; - Strcpy(mbot, mons[u.umonnum].mname); + Strcpy(mbot, pmname(&mons[u.umonnum], Ugender)); while (mbot[k] != 0) { if ((k == 0 || (k > 0 && mbot[k - 1] == ' ')) && 'a' <= mbot[k] && mbot[k] <= 'z') @@ -719,7 +719,7 @@ bot_via_windowport() */ Strcpy(nb = buf, g.plname); nb[0] = highc(nb[0]); - titl = !Upolyd ? rank() : mons[u.umonnum].mname; + titl = !Upolyd ? rank() : pmname(&mons[u.umonnum], Ugender); i = (int) (strlen(buf) + sizeof " the " + strlen(titl) - sizeof ""); /* if "Name the Rank/monster" is too long, we truncate the name but always keep at least 10 characters of it; when hitpintbar is diff --git a/src/cmd.c b/src/cmd.c index 493a10faa..0ae12b0db 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -2623,8 +2623,8 @@ boolean incl_wsegs; if (mtmp->mextra) { sz += (int) sizeof (struct mextra); - if (MNAME(mtmp)) - sz += (int) strlen(MNAME(mtmp)) + 1; + if (MGIVENNAME(mtmp)) + sz += (int) strlen(MGIVENNAME(mtmp)) + 1; if (EGD(mtmp)) sz += (int) sizeof (struct egd); if (EPRI(mtmp)) @@ -4241,7 +4241,7 @@ boolean doit; #if 0 if (Upolyd) { /* before objects */ Sprintf(buf, "Use %s special ability", - s_suffix(mons[u.umonnum].mname)); + s_suffix(pmname(&mons[u.umonnum], Ugender))); add_herecmd_menuitem(win, domonability, buf); } #endif diff --git a/src/detect.c b/src/detect.c index ddf52e59f..db5e84895 100644 --- a/src/detect.c +++ b/src/detect.c @@ -2005,12 +2005,13 @@ dump_map() blankrow = TRUE; /* assume blank until we discover otherwise */ lastnonblank = -1; /* buf[] index rather than map's x */ for (x = 1; x < COLNO; x++) { - int ch, color; - unsigned special; + int ch; + unsigned glyphmod[NUM_GLYPHMOD]; glyph = reveal_terrain_getglyph(x, y, FALSE, u.uswallow, default_glyph, subset); - (void) mapglyph(glyph, &ch, &color, &special, x, y, 0); + map_glyphmod(x, y, glyph, 0, glyphmod); + ch = (int) glyphmod[GM_TTYCHAR]; buf[x - 1] = ch; if (ch != ' ') { blankrow = FALSE; diff --git a/src/display.c b/src/display.c index 1e0ac89e7..8a98c8f55 100644 --- a/src/display.c +++ b/src/display.c @@ -132,6 +132,9 @@ static void FDECL(display_warning, (struct monst *)); static int FDECL(check_pos, (int, int, int)); static int FDECL(get_bk_glyph, (XCHAR_P, XCHAR_P)); static int FDECL(tether_glyph, (int, int)); +#ifdef UNBUFFERED_GLYPHMOD +static unsigned *FDECL(glyphmod_at, (XCHAR_P, XCHAR_P, int)); +#endif /*#define WA_VERBOSE*/ /* give (x,y) locations for all "bad" spots */ #ifdef WA_VERBOSE @@ -1367,6 +1370,17 @@ see_traps() } } +static unsigned no_gm[NUM_GLYPHMOD] = + {MG_BADXY, (unsigned) ' ', (unsigned) NO_COLOR}; +#ifndef UNBUFFERED_GLYPHMOD +#define Glyphmod_at(x,y,glyph) ( \ + ((x) < 0 || (y) < 0 || (x) >= COLNO || (y) >= ROWNO) \ + ? &no_gm[0] : &g.gbuf[(y)][(x)].glyphmod[0]) +#else +static unsigned gm[NUM_GLYPHMOD]; +#define Glyphmod_at(x,y,glyph) glyphmod_at(x, y, glyph) +#endif + /* * Put the cursor on the hero. Flush all accumulated glyphs before doing it. */ @@ -1462,7 +1476,8 @@ redraw_map() for (y = 0; y < ROWNO; ++y) for (x = 1; x < COLNO; ++x) { glyph = glyph_at(x, y); /* not levl[x][y].glyph */ - print_glyph(WIN_MAP, x, y, glyph, get_bk_glyph(x, y)); + print_glyph(WIN_MAP, x, y, glyph, get_bk_glyph(x, y), + Glyphmod_at(x, y, glyph)); } flush_screen(1); } @@ -1524,6 +1539,10 @@ void show_glyph(x, y, glyph) int x, y, glyph; { +#ifndef UNBUFFERED_GLYPHMOD + unsigned glyphmod[NUM_GLYPHMOD]; +#endif + /* * Check for bad positions and glyphs. */ @@ -1578,7 +1597,6 @@ int x, y, glyph; text = "monster"; offset = glyph; } - impossible("show_glyph: bad pos %d %d with glyph %d [%s %d].", x, y, glyph, text, offset); return; @@ -1589,10 +1607,27 @@ int x, y, glyph; MAX_GLYPH, x, y); return; } +#ifndef UNBUFFERED_GLYPHMOD + /* without UNBUFFERED_GLYPHMOD defined the glyphmod values are buffered + alongside the glyphs themselves for better performance, increased + buffer size */ + map_glyphmod(x, y, glyph, 0, glyphmod); +#endif - if (g.gbuf[y][x].glyph != glyph || iflags.use_background_glyph) { + if (g.gbuf[y][x].glyph != glyph +#ifndef UNBUFFERED_GLYPHMOD + /* I don't think we have to test for changes in TTYCHAR or COLOR + because they typically only change if the glyph changed */ + || g.gbuf[y][x].glyphmod[GM_FLAGS] != glyphmod[GM_FLAGS] +#endif + || iflags.use_background_glyph ) { g.gbuf[y][x].glyph = glyph; g.gbuf[y][x].gnew = 1; +#ifndef UNBUFFERED_GLYPHMOD + g.gbuf[y][x].glyphmod[GM_FLAGS] = glyphmod[GM_FLAGS]; + g.gbuf[y][x].glyphmod[GM_TTYCHAR] = glyphmod[GM_TTYCHAR]; + g.gbuf[y][x].glyphmod[GM_COLOR] = glyphmod[GM_COLOR]; +#endif if (g.gbuf_start[y] > x) g.gbuf_start[y] = x; if (g.gbuf_stop[y] < x) @@ -1614,6 +1649,14 @@ int x, y, glyph; } \ } +static gbuf_entry nul_gbuf = { + 0, /* gnew */ + GLYPH_UNEXPLORED, /* glyph */ +#ifndef UNBUFFERED_GLYPHMOD + {(unsigned) ' ', (unsigned) NO_COLOR, MG_UNEXPL}, +#endif +}; + /* * Turn the 3rd screen into UNEXPLORED that needs to be refreshed. */ @@ -1621,15 +1664,25 @@ void clear_glyph_buffer() { register int x, y; - register gbuf_entry *gptr, nul_gbuf; - int ch = ' ', color = NO_COLOR; - unsigned special = 0; - - (void) mapglyph(GLYPH_UNEXPLORED, &ch, &color, &special, 0, 0, 0); - nul_gbuf.gnew = (ch != ' ' || color != NO_COLOR - || (special & ~MG_UNEXPL) != 0) ? 1 : 0; - nul_gbuf.glyph = GLYPH_UNEXPLORED; + gbuf_entry *gptr = &g.gbuf[0][0]; + unsigned *gmptr = +#ifndef UNBUFFERED_GLYPHMOD + &gptr->glyphmod[0]; +#else + &gm[0]; + map_glyphmod(0, 0, GLYPH_UNEXPLORED, 0, gmptr); +#endif +#ifndef UNBUFFERED_GLYPHMOD + nul_gbuf.gnew = (gmptr[GM_TTYCHAR] != nul_gbuf.glyphmod[GM_TTYCHAR] + || gmptr[GM_COLOR] != nul_gbuf.glyphmod[GM_COLOR] + || gmptr[GM_FLAGS] != nul_gbuf.glyphmod[GM_FLAGS]) +#else + nul_gbuf.gnew = (gmptr[GM_TTYCHAR] != ' ' + || gmptr[GM_COLOR] != NO_COLOR + || (gmptr[GM_FLAGS] & ~MG_UNEXPL) != 0) +#endif + ? 1 : 0; for (y = 0; y < ROWNO; y++) { gptr = &g.gbuf[y][0]; for (x = COLNO; x; x--) { @@ -1648,16 +1701,31 @@ int start, stop, y; { register int x, glyph; register boolean force; - int ch = ' ', color = NO_COLOR; - unsigned special = 0; - - (void) mapglyph(GLYPH_UNEXPLORED, &ch, &color, &special, 0, 0, 0); - force = (ch != ' ' || color != NO_COLOR || (special & ~MG_UNEXPL) != 0); + gbuf_entry *gptr = &g.gbuf[0][0]; + unsigned *gmptr = +#ifndef UNBUFFERED_GLYPHMOD + &gptr->glyphmod[0]; +#else + &gm[0]; + map_glyphmod(0, 0, GLYPH_UNEXPLORED, 0, gmptr); +#endif +#ifndef UNBUFFERED_GLYPHMOD + force = (gmptr[GM_TTYCHAR] != nul_gbuf.glyphmod[GM_TTYCHAR] + || gmptr[GM_COLOR] != nul_gbuf.glyphmod[GM_COLOR] + || gmptr[GM_FLAGS] != nul_gbuf.glyphmod[GM_FLAGS]) +#else + force = (gmptr[GM_TTYCHAR] != ' ' + || gmptr[GM_COLOR] != NO_COLOR + || (gmptr[GM_FLAGS] & ~MG_UNEXPL) != 0) +#endif + ? 1 : 0; for (x = start; x <= stop; x++) { - glyph = g.gbuf[y][x].glyph; + gptr = &g.gbuf[y][x]; + glyph = gptr->glyph; if (force || glyph != GLYPH_UNEXPLORED) - print_glyph(WIN_MAP, x, y, glyph, get_bk_glyph(x, y)); + print_glyph(WIN_MAP, x, y, glyph, + get_bk_glyph(x, y), Glyphmod_at(x, y, glyph)); } } @@ -1712,7 +1780,8 @@ int cursor_on_u; for (; x <= g.gbuf_stop[y]; gptr++, x++) if (gptr->gnew) { - print_glyph(WIN_MAP, x, y, gptr->glyph, get_bk_glyph(x, y)); + print_glyph(WIN_MAP, x, y, gptr->glyph, + get_bk_glyph(x, y), Glyphmod_at(x, y, gptr->glyph)); gptr->gnew = 0; } } @@ -1930,6 +1999,17 @@ xchar x, y; return g.gbuf[y][x].glyph; } +#ifdef UNBUFFERED_GLYPHMOD +unsigned * +glyphmod_at(x, y, glyph) +xchar x, y; +int glyph; +{ + map_glyphmod(x, y, glyph, 0, gm); + return &gm[0]; +} +#endif + /* * This will be used to get the glyph for the background so that * it can potentially be merged into graphical window ports to @@ -2002,6 +2082,361 @@ xchar x, y; return bkglyph; } +#define HI_DOMESTIC CLR_WHITE /* monst.c */ +#ifdef TEXTCOLOR +static const int explcolors[] = { + CLR_BLACK, /* dark */ + CLR_GREEN, /* noxious */ + CLR_BROWN, /* muddy */ + CLR_BLUE, /* wet */ + CLR_MAGENTA, /* magical */ + CLR_ORANGE, /* fiery */ + CLR_WHITE, /* frosty */ +}; + +#define zap_color(n) color = iflags.use_color ? zapcolors[n] : NO_COLOR +#define cmap_color(n) color = iflags.use_color ? defsyms[n].color : NO_COLOR +#define obj_color(n) color = iflags.use_color ? objects[n].oc_color : NO_COLOR +#define mon_color(n) color = iflags.use_color ? mons[n].mcolor : NO_COLOR +#define invis_color(n) color = NO_COLOR +#define pet_color(n) color = iflags.use_color ? mons[n].mcolor : NO_COLOR +#define warn_color(n) \ + color = iflags.use_color ? def_warnsyms[n].color : NO_COLOR +#define explode_color(n) color = iflags.use_color ? explcolors[n] : NO_COLOR + +#else /* no text color */ + +#define zap_color(n) +#define cmap_color(n) +#define obj_color(n) +#define mon_color(n) +#define invis_color(n) +#define pet_color(c) +#define warn_color(n) +#define explode_color(n) +#endif + +#if defined(USE_TILES) && defined(MSDOS) +#define HAS_ROGUE_IBM_GRAPHICS \ + (g.currentgraphics == ROGUESET && SYMHANDLING(H_IBM) && !iflags.grmode) +#else +#define HAS_ROGUE_IBM_GRAPHICS \ + (g.currentgraphics == ROGUESET && SYMHANDLING(H_IBM)) +#endif + +#define is_objpile(x,y) (!Hallucination && g.level.objects[(x)][(y)] \ + && g.level.objects[(x)][(y)]->nexthere) + +#define GMAP_SET 0x00000001 +#define GMAP_ROGUELEVEL 0x00000002 +#define GMAP_ALTARCOLOR 0x00000004 + +void +map_glyphmod(x, y, glyph, mgflags, glyphmod) +xchar x, y; +int glyph; +unsigned mgflags, *glyphmod; +{ + register int offset, idx; + int color = NO_COLOR; + unsigned special = 0; + struct obj *obj; /* only used for STATUE */ + + /* condense multiple tests in macro version down to single */ + boolean has_rogue_ibm_graphics = HAS_ROGUE_IBM_GRAPHICS, + is_you = (x == u.ux && y == u.uy), + has_rogue_color = (has_rogue_ibm_graphics + && g.symset[g.currentgraphics].nocolor == 0), + do_mon_checks = FALSE; + + if (x < 0 || y < 0 || x >= COLNO || y >= ROWNO) { + glyphmod[GM_FLAGS] = MG_BADXY; + glyphmod[GM_COLOR] = NO_COLOR; + glyphmod[GM_TTYCHAR] = ' '; + return; + } + + if (!g.glyphmap_perlevel_flags) { + /* + * GMAP_SET 0x00000001 + * GMAP_ROGUELEVEL 0x00000002 + * GMAP_ALTARCOLOR 0x00000004 + */ + g.glyphmap_perlevel_flags |= GMAP_SET; + + if (Is_rogue_level(&u.uz)) { + g.glyphmap_perlevel_flags |= GMAP_ROGUELEVEL; + } else if ((Is_astralevel(&u.uz) || Is_sanctum(&u.uz))) { + g.glyphmap_perlevel_flags |= GMAP_ALTARCOLOR; + } + } + + /* + * Map the glyph to a character and color. + * + * Warning: For speed, this makes an assumption on the order of + * offsets. The order is set in display.h. + */ + if ((offset = (glyph - GLYPH_NOTHING_OFF)) >= 0) { + idx = SYM_NOTHING + SYM_OFF_X; + color = NO_COLOR; + special |= MG_NOTHING; + } else if ((offset = (glyph - GLYPH_UNEXPLORED_OFF)) >= 0) { + idx = SYM_UNEXPLORED + SYM_OFF_X; + color = NO_COLOR; + special |= MG_UNEXPL; + } else if ((offset = (glyph - GLYPH_STATUE_OFF)) >= 0) { /* a statue */ + idx = mons[offset].mlet + SYM_OFF_M; + if (has_rogue_color) + color = CLR_RED; + else + obj_color(STATUE); + special |= MG_STATUE; + if (is_objpile(x,y)) + special |= MG_OBJPILE; + if ((obj = sobj_at(STATUE, x, y)) && (obj->spe & STATUE_FEMALE)) + special |= MG_FEMALE; + } else if ((offset = (glyph - GLYPH_WARNING_OFF)) >= 0) { /* warn flash */ + idx = offset + SYM_OFF_W; + if (has_rogue_color) + color = NO_COLOR; + else + warn_color(offset); + } else if ((offset = (glyph - GLYPH_SWALLOW_OFF)) >= 0) { /* swallow */ + /* see swallow_to_glyph() in display.c */ + idx = (S_sw_tl + (offset & 0x7)) + SYM_OFF_P; + if (has_rogue_color && iflags.use_color) + color = NO_COLOR; + else + mon_color(offset >> 3); + } else if ((offset = (glyph - GLYPH_ZAP_OFF)) >= 0) { /* zap beam */ + /* see zapdir_to_glyph() in display.c */ + idx = (S_vbeam + (offset & 0x3)) + SYM_OFF_P; + if (has_rogue_color && iflags.use_color) + color = NO_COLOR; + else + zap_color((offset >> 2)); + } else if ((offset = (glyph - GLYPH_EXPLODE_OFF)) >= 0) { /* explosion */ + idx = ((offset % MAXEXPCHARS) + S_explode1) + SYM_OFF_P; + explode_color(offset / MAXEXPCHARS); + } else if ((offset = (glyph - GLYPH_CMAP_OFF)) >= 0) { /* cmap */ + idx = offset + SYM_OFF_P; + if (has_rogue_color && iflags.use_color) { + if (offset >= S_vwall && offset <= S_hcdoor) + color = CLR_BROWN; + else if (offset >= S_arrow_trap && offset <= S_polymorph_trap) + color = CLR_MAGENTA; + else if (offset == S_corr || offset == S_litcorr) + color = CLR_GRAY; + else if (offset >= S_room && offset <= S_water + && offset != S_darkroom) + color = CLR_GREEN; + else + color = NO_COLOR; +#ifdef TEXTCOLOR + /* provide a visible difference if normal and lit corridor + use the same symbol */ + } else if (iflags.use_color && offset == S_litcorr + && g.showsyms[idx] == g.showsyms[S_corr + SYM_OFF_P]) { + color = CLR_WHITE; +#endif + /* try to provide a visible difference between water and lava + if they use the same symbol and color is disabled */ + } else if (!iflags.use_color && offset == S_lava + && (g.showsyms[idx] == g.showsyms[S_pool + SYM_OFF_P] + || g.showsyms[idx] + == g.showsyms[S_water + SYM_OFF_P])) { + special |= MG_BW_LAVA; + /* similar for floor [what about empty doorway?] and ice */ + } else if (!iflags.use_color && offset == S_ice + && (g.showsyms[idx] == g.showsyms[S_room + SYM_OFF_P] + || g.showsyms[idx] + == g.showsyms[S_darkroom + SYM_OFF_P])) { + special |= MG_BW_ICE; + } else if (offset == S_altar && iflags.use_color) { + int amsk = altarmask_at(x, y); /* might be a mimic */ + + if ((g.glyphmap_perlevel_flags & GMAP_ALTARCOLOR) + && (amsk & AM_SHRINE) != 0) { + /* high altar */ + color = CLR_BRIGHT_MAGENTA; + } else { + switch (amsk & AM_MASK) { +#if 0 /* + * On OSX with TERM=xterm-color256 these render as + * white -> tty: gray, curses: ok + * gray -> both tty and curses: black + * black -> both tty and curses: blue + * red -> both tty and curses: ok. + * Since the colors have specific associations (with the + * unicorns matched with each alignment), we shouldn't use + * scrambled colors and we don't have sufficient information + * to handle platform-specific color variations. + */ + case AM_LAWFUL: /* 4 */ + color = CLR_WHITE; + break; + case AM_NEUTRAL: /* 2 */ + color = CLR_GRAY; + break; + case AM_CHAOTIC: /* 1 */ + color = CLR_BLACK; + break; +#else /* !0: TEMP? */ + case AM_LAWFUL: /* 4 */ + case AM_NEUTRAL: /* 2 */ + case AM_CHAOTIC: /* 1 */ + cmap_color(S_altar); /* gray */ + break; +#endif /* 0 */ + case AM_NONE: /* 0 */ + color = CLR_RED; + break; + default: /* 3, 5..7 -- shouldn't happen but 3 was possible + * prior to 3.6.3 (due to faulty sink polymorph) */ + color = NO_COLOR; + break; + } + } + } else { + cmap_color(offset); + } + } else if ((offset = (glyph - GLYPH_OBJ_OFF)) >= 0) { /* object */ + idx = objects[offset].oc_class + SYM_OFF_O; + if (offset == BOULDER) + idx = SYM_BOULDER + SYM_OFF_X; + if (has_rogue_color && iflags.use_color) { + switch (objects[offset].oc_class) { + case COIN_CLASS: + color = CLR_YELLOW; + break; + case FOOD_CLASS: + color = CLR_RED; + break; + default: + color = CLR_BRIGHT_BLUE; + break; + } + } else + obj_color(offset); + if (offset != BOULDER && is_objpile(x,y)) + special |= MG_OBJPILE; + } else if ((offset = (glyph - GLYPH_RIDDEN_OFF)) >= 0) { /* mon ridden */ + idx = mons[offset].mlet + SYM_OFF_M; + if (has_rogue_color) + /* This currently implies that the hero is here -- monsters */ + /* don't ride (yet...). Should we set it to yellow like in */ + /* the monster case below? There is no equivalent in rogue. */ + color = NO_COLOR; /* no need to check iflags.use_color */ + else + mon_color(offset); + special |= MG_RIDDEN; + do_mon_checks = TRUE; + } else if ((offset = (glyph - GLYPH_BODY_OFF)) >= 0) { /* a corpse */ + idx = objects[CORPSE].oc_class + SYM_OFF_O; + if (has_rogue_color && iflags.use_color) + color = CLR_RED; + else + mon_color(offset); + special |= MG_CORPSE; + if (is_objpile(x,y)) + special |= MG_OBJPILE; + } else if ((offset = (glyph - GLYPH_DETECT_OFF)) >= 0) { /* mon detect */ + idx = mons[offset].mlet + SYM_OFF_M; + if (has_rogue_color) + color = NO_COLOR; /* no need to check iflags.use_color */ + else + mon_color(offset); + /* Disabled for now; anyone want to get reverse video to work? */ + /* is_reverse = TRUE; */ + special |= MG_DETECT; + do_mon_checks = TRUE; + } else if ((offset = (glyph - GLYPH_INVIS_OFF)) >= 0) { /* invisible */ + idx = SYM_INVISIBLE + SYM_OFF_X; + if (has_rogue_color) + color = NO_COLOR; /* no need to check iflags.use_color */ + else + invis_color(offset); + special |= MG_INVIS; + } else if ((offset = (glyph - GLYPH_PET_OFF)) >= 0) { /* a pet */ + idx = mons[offset].mlet + SYM_OFF_M; + if (has_rogue_color) + color = NO_COLOR; /* no need to check iflags.use_color */ + else + pet_color(offset); + special |= MG_PET; + do_mon_checks = TRUE; + } else { /* a monster */ + idx = mons[glyph].mlet + SYM_OFF_M; + if (has_rogue_color && iflags.use_color) { + if (is_you) + /* actually player should be yellow-on-gray if in corridor */ + color = CLR_YELLOW; + else + color = NO_COLOR; + } else { + mon_color(glyph); +#ifdef TEXTCOLOR + /* special case the hero for `showrace' option */ + if (iflags.use_color && is_you && flags.showrace && !Upolyd) + color = HI_DOMESTIC; +#endif + } + do_mon_checks = TRUE; + } + + if (do_mon_checks) { + struct monst *m; + + if (is_you) { + if (Ugender == FEMALE) + special |= MG_FEMALE; + } else { + /* when hero is riding, steed will be shown at hero's location + but has not been placed on the map so m_at() won't find it */ + m = (x == u.ux && y == u.uy && u.usteed) ? u.usteed : m_at(x, y); + if (m) { + if (!Hallucination) { + if (m->female) + special |= MG_FEMALE; + } else if (rn2_on_display_rng(2)) { + special |= MG_FEMALE; + } + } + } + } + /* These were requested by a blind player to enhance screen reader use */ + if (sysopt.accessibility == 1 && !(mgflags & MG_FLAG_NOOVERRIDE)) { + int ovidx; + + if ((special & MG_PET) != 0) { + ovidx = SYM_PET_OVERRIDE + SYM_OFF_X; + if ((g.glyphmap_perlevel_flags & GMAP_ROGUELEVEL) + ? g.ov_rogue_syms[ovidx] + : g.ov_primary_syms[ovidx]) + idx = ovidx; + } + if (is_you) { + ovidx = SYM_HERO_OVERRIDE + SYM_OFF_X; + if ((g.glyphmap_perlevel_flags & GMAP_ROGUELEVEL) + ? g.ov_rogue_syms[ovidx] + : g.ov_primary_syms[ovidx]) + idx = ovidx; + } + } + + glyphmod[GM_TTYCHAR] = ((mgflags & MG_FLAG_RETURNIDX) != 0) ? idx : g.showsyms[idx]; + +#ifdef TEXTCOLOR + /* Turn off color if no color defined, or rogue level w/o PC graphics. */ + if (!has_color(color) + || ((g.glyphmap_perlevel_flags & GMAP_ROGUELEVEL) && !has_rogue_color)) +#endif + color = NO_COLOR; + glyphmod[GM_COLOR] = color; + glyphmod[GM_FLAGS] = special; +} + /* ------------------------------------------------------------------------ */ /* Wall Angle ------------------------------------------------------------- */ diff --git a/src/do_name.c b/src/do_name.c index c4c2f654c..8a757fb7e 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -18,7 +18,7 @@ static void NDECL(gloc_filter_done); static boolean FDECL(gather_locs_interesting, (int, int, int)); static void FDECL(gather_locs, (coord **, int *, int)); static void FDECL(auto_describe, (int, int)); -static void NDECL(do_mname); +static void NDECL(do_mgivenname); static boolean FDECL(alreadynamed, (struct monst *, char *, char *)); static void FDECL(do_oname, (struct obj *)); static char *FDECL(docall_xname, (struct obj *)); @@ -996,7 +996,7 @@ const char *goal; /* allocate space for a monster's name; removes old name if there is one */ void -new_mname(mon, lth) +new_mgivenname(mon, lth) struct monst *mon; int lth; /* desired length (caller handles adding 1 for terminator) */ { @@ -1005,23 +1005,23 @@ int lth; /* desired length (caller handles adding 1 for terminator) */ if (!mon->mextra) mon->mextra = newmextra(); else - free_mname(mon); /* already has mextra, might also have name */ - MNAME(mon) = (char *) alloc((unsigned) lth); + free_mgivenname(mon); /* already has mextra, might also have name */ + MGIVENNAME(mon) = (char *) alloc((unsigned) lth); } else { /* zero length: the new name is empty; get rid of the old name */ - if (has_mname(mon)) - free_mname(mon); + if (has_mgivenname(mon)) + free_mgivenname(mon); } } /* release a monster's name; retains mextra even if all fields are now null */ void -free_mname(mon) +free_mgivenname(mon) struct monst *mon; { - if (has_mname(mon)) { - free((genericptr_t) MNAME(mon)); - MNAME(mon) = (char *) 0; + if (has_mgivenname(mon)) { + free((genericptr_t) MGIVENNAME(mon)); + MGIVENNAME(mon) = (char *) 0; } } @@ -1087,14 +1087,14 @@ const char *name; name = strncpy(buf, name, PL_PSIZ - 1); buf[PL_PSIZ - 1] = '\0'; } - new_mname(mtmp, lth); /* removes old name if one is present */ + new_mgivenname(mtmp, lth); /* removes old name if one is present */ if (lth) - Strcpy(MNAME(mtmp), name); + Strcpy(MGIVENNAME(mtmp), name); return mtmp; } /* check whether user-supplied name matches or nearly matches an unnameable - monster's name; if so, give an alternate reject message for do_mname() */ + monster's name; if so, give an alternate reject message for do_mgivenname() */ static boolean alreadynamed(mtmp, monnambuf, usrbuf) struct monst *mtmp; @@ -1126,7 +1126,7 @@ char *monnambuf, *usrbuf; /* allow player to assign a name to some chosen monster */ static void -do_mname() +do_mgivenname() { char buf[BUFSZ], monnambuf[BUFSZ], qbuf[QBUFSZ]; coord cc; @@ -1170,8 +1170,8 @@ do_mname() buf[0] = '\0'; #ifdef EDIT_GETLIN /* if there's an existing name, make it be the default answer */ - if (has_mname(mtmp)) - Strcpy(buf, MNAME(mtmp)); + if (has_mgivenname(mtmp)) + Strcpy(buf, MGIVENNAME(mtmp)); #endif getlin(qbuf, buf); if (!*buf || *buf == '\033') @@ -1398,7 +1398,7 @@ docallcmd() case 'q': break; case 'm': /* name a visible monster */ - do_mname(); + do_mgivenname(); break; case 'i': /* name an individual object in inventory */ allowall[0] = ALL_CLASSES; @@ -1661,7 +1661,7 @@ boolean called; { char *buf = nextmbuf(); struct permonst *mdat = mtmp->data; - const char *pm_name = mdat->mname; + const char *pm_name = pmname(mdat, Mgender(mtmp)); boolean do_hallu, do_invis, do_it, do_saddle, do_name; boolean name_at_start, has_adjectives; char *bp; @@ -1706,12 +1706,14 @@ boolean called; name += 4; return strcpy(buf, name); } +#if 0 /* an "aligned priest" not flagged as a priest or minion should be "priest" or "priestess" (normally handled by priestname()) */ - if (mdat == &mons[PM_ALIGNED_PRIEST]) + if (mdat == &mons[PM_ALIGNED_CLERIC]) pm_name = mtmp->female ? "priestess" : "priest"; - else if (mdat == &mons[PM_HIGH_PRIEST] && mtmp->female) + else if (mdat == &mons[PM_HIGH_CLERIC] && mtmp->female) pm_name = "high priestess"; +#endif /* Shopkeepers: use shopkeeper name. For normal shopkeepers, just * "Asidonhopo"; for unusual ones, "Asidonhopo the invisible @@ -1755,8 +1757,8 @@ boolean called; Strcat(buf, rname); name_at_start = bogon_is_pname(rnamecode); - } else if (do_name && has_mname(mtmp)) { - char *name = MNAME(mtmp); + } else if (do_name && has_mgivenname(mtmp)) { + char *name = MGIVENNAME(mtmp); if (mdat == &mons[PM_GHOST]) { Sprintf(eos(buf), "%s ghost", s_suffix(name)); @@ -1829,7 +1831,7 @@ l_monnam(mtmp) struct monst *mtmp; { return x_monnam(mtmp, ARTICLE_NONE, (char *) 0, - (has_mname(mtmp)) ? SUPPRESS_SADDLE : 0, TRUE); + (has_mgivenname(mtmp)) ? SUPPRESS_SADDLE : 0, TRUE); } char * @@ -1837,7 +1839,7 @@ mon_nam(mtmp) struct monst *mtmp; { return x_monnam(mtmp, ARTICLE_THE, (char *) 0, - (has_mname(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE); + (has_mgivenname(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE); } /* print the name as if mon_nam() was called, but assume that the player @@ -1849,7 +1851,7 @@ noit_mon_nam(mtmp) struct monst *mtmp; { return x_monnam(mtmp, ARTICLE_THE, (char *) 0, - (has_mname(mtmp)) ? (SUPPRESS_SADDLE | SUPPRESS_IT) + (has_mgivenname(mtmp)) ? (SUPPRESS_SADDLE | SUPPRESS_IT) : SUPPRESS_IT, FALSE); } @@ -1900,7 +1902,7 @@ struct monst *mtmp; int prefix, suppression_flag; prefix = mtmp->mtame ? ARTICLE_YOUR : ARTICLE_THE; - suppression_flag = (has_mname(mtmp) + suppression_flag = (has_mgivenname(mtmp) /* "saddled" is redundant when mounted */ || mtmp == u.usteed) ? SUPPRESS_SADDLE @@ -1915,7 +1917,7 @@ struct monst *mtmp; const char *adj; { char *bp = x_monnam(mtmp, ARTICLE_THE, adj, - has_mname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE); + has_mgivenname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE); *bp = highc(*bp); return bp; @@ -1926,7 +1928,7 @@ a_monnam(mtmp) struct monst *mtmp; { return x_monnam(mtmp, ARTICLE_A, (char *) 0, - has_mname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE); + has_mgivenname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE); } char * @@ -1950,7 +1952,7 @@ char *outbuf; /* high priest(ess)'s identity is concealed on the Astral Plane, unless you're adjacent (overridden for hallucination which does its own obfuscation) */ - if (mon->data == &mons[PM_HIGH_PRIEST] && !Hallucination + if (mon->data == &mons[PM_HIGH_CLERIC] && !Hallucination && Is_astralevel(&u.uz) && distu(mon->mx, mon->my) > 2) { Strcpy(outbuf, article == ARTICLE_THE ? "the " : ""); Strcat(outbuf, mon->female ? "high priestess" : "high priest"); @@ -2048,37 +2050,65 @@ boolean ckloc; } else if (ckloc && ptr == &mons[PM_LONG_WORM] && g.level.monsters[mon->mx][mon->my] != mon) { Sprintf(outbuf, "%s <%d,%d>", - mons[PM_LONG_WORM_TAIL].mname, mon->mx, mon->my); + pmname(&mons[PM_LONG_WORM_TAIL], Mgender(mon)), mon->mx, mon->my); } else { Sprintf(outbuf, "%s%s <%d,%d>", mon->mtame ? "tame " : mon->mpeaceful ? "peaceful " : "", - mon->data->mname, mon->mx, mon->my); + pmname(mon->data, Mgender(mon)), mon->mx, mon->my); if (mon->cham != NON_PM) - Sprintf(eos(outbuf), "{%s}", mons[mon->cham].mname); + Sprintf(eos(outbuf), "{%s}", pmname(&mons[mon->cham], Mgender(mon))); } return outbuf; } +#ifndef PMNAME_MACROS +int +Mgender(mtmp) +struct monst *mtmp; +{ + int mgender = MALE; + + if (mtmp == &g.youmonst) { + if (Upolyd ? u.mfemale : flags.female) + mgender = FEMALE; + } else if (mtmp->female) { + mgender = FEMALE; + } + return mgender; +} + +const char * +pmname(pm, mgender) +struct permonst *pm; +int mgender; +{ + if ((mgender >= MALE && mgender < NUM_MGENDERS) && pm->pmnames[mgender]) + return pm->pmnames[mgender]; + else + return pm->pmnames[NEUTRAL]; +} +#endif /* PMNAME_MACROS */ + /* fake monsters used to be in a hard-coded array, now in a data file */ char * bogusmon(buf, code) char *buf, *code; { static const char bogon_codes[] = "-_+|="; /* see dat/bonusmon.txt */ - char *mname = buf; + char *mnam = buf; if (code) *code = '\0'; /* might fail (return empty buf[]) if the file isn't available */ get_rnd_text(BOGUSMONFILE, buf, rn2_on_display_rng); - if (!*mname) { + if (!*mnam) { Strcpy(buf, "bogon"); - } else if (index(bogon_codes, *mname)) { /* strip prefix if present */ + } else if (index(bogon_codes, *mnam)) { /* strip prefix if present */ if (code) - *code = *mname; - ++mname; + *code = *mnam; + ++mnam; } - return mname; + return mnam; } /* return a random monster name, for hallucination */ @@ -2087,7 +2117,7 @@ rndmonnam(code) char *code; { static char buf[BUFSZ]; - char *mname; + char *mnam; int name; #define BOGUSMONSIZE 100 /* arbitrary */ @@ -2100,11 +2130,11 @@ char *code; && (type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN))); if (name >= SPECIAL_PM) { - mname = bogusmon(buf, code); + mnam = bogusmon(buf, code); } else { - mname = strcpy(buf, mons[name].mname); + mnam = strcpy(buf, pmname(&mons[name], rn2_on_display_rng(2))); } - return mname; + return mnam; #undef BOGUSMONSIZE } diff --git a/src/do_wear.c b/src/do_wear.c index 670fc6aa8..044b363d6 100644 --- a/src/do_wear.c +++ b/src/do_wear.c @@ -428,7 +428,7 @@ Helmet_on(VOID_ARGS) inventory; do so now [set_bknown() calls update_inventory()] */ if (Blind) set_bknown(uarmh, 0); /* lose bknown if previously set */ - else if (Role_if(PM_PRIEST)) + else if (Role_if(PM_CLERIC)) set_bknown(uarmh, 1); /* (bknown should already be set) */ else if (uarmh->bknown) update_inventory(); /* keep bknown as-is; display the curse */ @@ -766,6 +766,8 @@ Amulet_on() You("are suddenly very %s!", flags.female ? "feminine" : "masculine"); g.context.botl = 1; + newsym(u.ux, u.uy); /* glyphmon flag and tile may have gone + from male to female or vice versa */ } else /* already polymorphed into single-gender monster; only changed the character's base sex */ diff --git a/src/dog.c b/src/dog.c index 450996168..50ffd00c9 100644 --- a/src/dog.c +++ b/src/dog.c @@ -170,7 +170,7 @@ makedog() /* default pet names */ if (!*petname && pettype == PM_LITTLE_DOG) { /* All of these names were for dogs. */ - if (Role_if(PM_CAVEMAN)) + if (Role_if(PM_CAVE_DWELLER)) petname = "Slasher"; /* The Warrior */ if (Role_if(PM_SAMURAI)) petname = "Hachi"; /* Shibuya Station */ diff --git a/src/dogmove.c b/src/dogmove.c index 363bbcd5c..8d255ec3e 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -1429,7 +1429,8 @@ struct monst *mtmp; && OBJ_NAME(objects[mtmp->mappearance])) ? an(OBJ_NAME(objects[mtmp->mappearance])) : (M_AP_TYPE(mtmp) == M_AP_MONSTER) - ? an(mons[mtmp->mappearance].mname) + ? an(pmname(&mons[mtmp->mappearance], + Mgender(mtmp))) : something, cansee(mtmp->mx, mtmp->my) ? "" : "has ", cansee(mtmp->mx, mtmp->my) ? "" : "ed", diff --git a/src/dokick.c b/src/dokick.c index 765316522..c685fa201 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -1159,9 +1159,6 @@ dokick() } if (IS_SINK(g.maploc->typ)) { int gend = poly_gender(); - short washerndx = (gend == 1 || (gend == 2 && rn2(2))) - ? PM_INCUBUS - : PM_SUCCUBUS; if (Levitation) goto dumb; @@ -1185,10 +1182,12 @@ dokick() g.maploc->looted |= S_LPUDDING; return 1; } else if (!(g.maploc->looted & S_LDWASHER) && !rn2(3) - && !(g.mvitals[washerndx].mvflags & G_GONE)) { + && !(g.mvitals[PM_AMOROUS_DEMON].mvflags & G_GONE)) { /* can't resist... */ pline("%s returns!", (Blind ? Something : "The dish washer")); - if (makemon(&mons[washerndx], x, y, NO_MM_FLAGS)) + if (makemon(&mons[PM_AMOROUS_DEMON], x, y, + (gend == 1 || (gend == 2 && rn2(2))) + ? MM_FEMALE : MM_MALE)) newsym(x, y); g.maploc->looted |= S_LDWASHER; exercise(A_DEX, TRUE); @@ -1746,7 +1745,7 @@ unsigned long deliverflags; /* special treatment for orcs and their kind */ if ((otmp->corpsenm & M2_ORC) != 0 && has_oname(otmp)) { - if (!has_mname(mtmp)) { + if (!has_mgivenname(mtmp)) { if (at_crime_scene || !rn2(2)) mtmp = christen_orc(mtmp, at_crime_scene ? ONAME(otmp) diff --git a/src/dothrow.c b/src/dothrow.c index c3695658d..8318bafb3 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -39,7 +39,7 @@ struct obj *launcher; /* can be NULL */ schar skill = objects[ammo->otyp].oc_skill; switch (pm) { - case PM_CAVEMAN: + case PM_CAVE_DWELLER: /* give bonus for low-tech gear */ if (skill == -P_SLING || skill == P_SPEAR) multishot++; @@ -158,7 +158,7 @@ int shotlimit; : obj->oclass == WEAPON_CLASS) && !(Confusion || Stunned)) { /* some roles don't get a volley bonus until becoming expert */ - weakmultishot = (Role_if(PM_WIZARD) || Role_if(PM_PRIEST) + weakmultishot = (Role_if(PM_WIZARD) || Role_if(PM_CLERIC) || (Role_if(PM_HEALER) && skill != P_KNIFE) || (Role_if(PM_TOURIST) && skill != -P_DART) /* poor dexterity also inhibits multishot */ diff --git a/src/eat.c b/src/eat.c index f73c4d1d5..13628642b 100644 --- a/src/eat.c +++ b/src/eat.c @@ -40,7 +40,7 @@ static int FDECL(tin_variety, (struct obj *, BOOLEAN_P)); static boolean FDECL(maybe_cannibal, (int, BOOLEAN_P)); /* also used to see if you're allowed to eat cats and dogs */ -#define CANNIBAL_ALLOWED() (Role_if(PM_CAVEMAN) || Race_if(PM_ORC)) +#define CANNIBAL_ALLOWED() (Role_if(PM_CAVE_DWELLER) || Race_if(PM_ORC)) /* monster types that cause hero to be turned into stone if eaten */ #define flesh_petrifies(pm) (touch_petrifies(pm) || (pm) == &mons[PM_MEDUSA]) @@ -516,7 +516,8 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */ tentacle-touch should have been caught before reaching this far) */ if (magr == &g.youmonst) { if (!Stone_resistance && !Stoned) - make_stoned(5L, (char *) 0, KILLED_BY_AN, pd->mname); + make_stoned(5L, (char *) 0, KILLED_BY_AN, + pmname(pd, Mgender(mdef))); } else { /* no need to check for poly_when_stoned or Stone_resistance; mind flayers don't have those capabilities */ @@ -546,7 +547,8 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */ return MM_MISS; } else if (is_rider(pd)) { pline("Ingesting that is fatal."); - Sprintf(g.killer.name, "unwisely ate the brain of %s", pd->mname); + Sprintf(g.killer.name, "unwisely ate the brain of %s", + pmname(pd, Mgender(mdef))); g.killer.format = NO_KILLER_PREFIX; done(DIED); /* life-saving needed to reach here */ @@ -676,7 +678,8 @@ register int pm; if (!Stone_resistance && !(poly_when_stoned(g.youmonst.data) && polymon(PM_STONE_GOLEM))) { - Sprintf(g.killer.name, "tasting %s meat", mons[pm].mname); + Sprintf(g.killer.name, "tasting %s meat", + mons[pm].pmnames[NEUTRAL]); g.killer.format = KILLED_BY; You("turn to stone."); done(STONING); @@ -695,7 +698,8 @@ register int pm; case PM_LARGE_CAT: /* cannibals are allowed to eat domestic animals without penalty */ if (!CANNIBAL_ALLOWED()) { - You_feel("that eating the %s was a bad idea.", mons[pm].mname); + You_feel("that eating the %s was a bad idea.", + mons[pm].pmnames[NEUTRAL]); HAggravate_monster |= FROMOUTSIDE; } break; @@ -707,7 +711,8 @@ register int pm; case PM_PESTILENCE: case PM_FAMINE: { pline("Eating that is instantly fatal."); - Sprintf(g.killer.name, "unwisely ate the body of %s", mons[pm].mname); + Sprintf(g.killer.name, "unwisely ate the body of %s", + mons[pm].pmnames[NEUTRAL]); g.killer.format = NO_KILLER_PREFIX; done(DIED); /* life-saving needed to reach here */ @@ -1033,7 +1038,7 @@ int pm; Hallucination ? "You suddenly dread being peeled and mimic %s again!" : "You now prefer mimicking %s again.", - an(Upolyd ? g.youmonst.data->mname : g.urace.noun)); + an(Upolyd ? pmname(g.youmonst.data, Ugender) : g.urace.noun)); g.eatmbuf = dupstr(buf); g.nomovemsg = g.eatmbuf; g.afternmv = eatmdone; @@ -1247,9 +1252,9 @@ char *buf; Strcpy(eos(buf), " of "); } if (vegetarian(&mons[mnum])) - Sprintf(eos(buf), "%s", mons[mnum].mname); + Sprintf(eos(buf), "%s", mons[mnum].pmnames[NEUTRAL]); else - Sprintf(eos(buf), "%s meat", mons[mnum].mname); + Sprintf(eos(buf), "%s meat", mons[mnum].pmnames[NEUTRAL]); } } } @@ -1343,7 +1348,7 @@ const char *mesg; } else if (Hallucination) { what = rndmonnam(NULL); } else { - what = mons[mnum].mname; + what = mons[mnum].pmnames[NEUTRAL]; if (the_unique_pm(&mons[mnum])) which = 2; else if (type_is_pname(&mons[mnum])) @@ -1370,7 +1375,7 @@ const char *mesg; g.context.victual.fullwarn = g.context.victual.eating = g.context.victual.doreset = FALSE; - You("consume %s %s.", tintxts[r].txt, mons[mnum].mname); + You("consume %s %s.", tintxts[r].txt, mons[mnum].pmnames[NEUTRAL]); eating_conducts(&mons[mnum]); @@ -2254,7 +2259,7 @@ struct obj *otmp; && polymon(PM_STONE_GOLEM))) { if (!Stoned) { Sprintf(g.killer.name, "%s egg", - mons[otmp->corpsenm].mname); + mons[otmp->corpsenm].pmnames[NEUTRAL]); make_stoned(5L, (char *) 0, KILLED_BY_AN, g.killer.name); } } diff --git a/src/end.c b/src/end.c index 50f593280..f362a07c6 100644 --- a/src/end.c +++ b/src/end.c @@ -409,13 +409,13 @@ int how; /* "killed by the high priest of Crom" is okay, "killed by the high priest" alone isn't */ if ((mptr->geno & G_UNIQ) != 0 && !(imitator && !mimicker) - && !(mptr == &mons[PM_HIGH_PRIEST] && !mtmp->ispriest)) { + && !(mptr == &mons[PM_HIGH_CLERIC] && !mtmp->ispriest)) { if (!type_is_pname(mptr)) Strcat(buf, "the "); g.killer.format = KILLED_BY; } /* _the_ ghost of Dudley */ - if (mptr == &mons[PM_GHOST] && has_mname(mtmp)) { + if (mptr == &mons[PM_GHOST] && has_mgivenname(mtmp)) { Strcat(buf, "the "); g.killer.format = KILLED_BY; } @@ -427,14 +427,15 @@ int how; if (imitator) { char shape[BUFSZ]; - const char *realnm = champtr->mname, *fakenm = mptr->mname; + const char *realnm = pmname(champtr, Mgender(mtmp)), + *fakenm = pmname(mptr, Mgender(mtmp)); boolean alt = is_vampshifter(mtmp); if (mimicker) { /* realnm is already correct because champtr==mptr; set up fake mptr for type_is_pname/the_unique_pm */ mptr = &mons[mtmp->mappearance]; - fakenm = mptr->mname; + fakenm = pmname(mptr, Mgender(mtmp)); } else if (alt && strstri(realnm, "vampire") && !strcmp(fakenm, "vampire bat")) { /* special case: use "vampire in bat form" in preference @@ -459,8 +460,8 @@ int how; mptr = mtmp->data; /* reset for mimicker case */ } else if (mptr == &mons[PM_GHOST]) { Strcat(buf, "ghost"); - if (has_mname(mtmp)) - Sprintf(eos(buf), " of %s", MNAME(mtmp)); + if (has_mgivenname(mtmp)) + Sprintf(eos(buf), " of %s", MGIVENNAME(mtmp)); } else if (mtmp->isshk) { const char *shknm = shkname(mtmp), *honorific = shkname_is_pname(mtmp) ? "" @@ -473,9 +474,9 @@ int how; it overrides the effect of Hallucination on priestname() */ Strcat(buf, m_monnam(mtmp)); } else { - Strcat(buf, mptr->mname); - if (has_mname(mtmp)) - Sprintf(eos(buf), " called %s", MNAME(mtmp)); + Strcat(buf, pmname(mptr, Mgender(mtmp))); + if (has_mgivenname(mtmp)) + Sprintf(eos(buf), " called %s", MGIVENNAME(mtmp)); } Strcpy(g.killer.name, buf); @@ -1414,7 +1415,7 @@ int how; (u.ugrave_arise != PM_GREEN_SLIME) ? "body rises from the dead" : "revenant persists", - an(mons[u.ugrave_arise].mname)); + an(pmname(&mons[u.ugrave_arise], Ugender))); display_nhwindow(WIN_MESSAGE, FALSE); } diff --git a/src/exper.c b/src/exper.c index de4404ab4..ea2dcc6bb 100644 --- a/src/exper.c +++ b/src/exper.c @@ -28,7 +28,7 @@ enermod(en) int en; { switch (Role_switch) { - case PM_PRIEST: + case PM_CLERIC: case PM_WIZARD: return (2 * en); case PM_HEALER: diff --git a/src/explode.c b/src/explode.c index 8abe642fd..30dc6b92c 100644 --- a/src/explode.c +++ b/src/explode.c @@ -66,7 +66,7 @@ int expltype; type = 0; } switch (Role_switch) { - case PM_PRIEST: + case PM_CLERIC: case PM_MONK: case PM_WIZARD: damu /= 5; diff --git a/src/files.c b/src/files.c index dd7245861..f995f8d1a 100644 --- a/src/files.c +++ b/src/files.c @@ -3089,7 +3089,7 @@ struct obj *obj; /* subset of starting inventory pre-ID */ obj->dknown = 1; - if (Role_if(PM_PRIEST)) + if (Role_if(PM_CLERIC)) obj->bknown = 1; /* ok to bypass set_bknown() */ /* same criteria as lift_object()'s check for available inventory slot */ if (obj->oclass != COIN_CLASS && inv_cnt(FALSE) >= 52 diff --git a/src/hack.c b/src/hack.c index 7d766ec31..30ea83a96 100644 --- a/src/hack.c +++ b/src/hack.c @@ -1913,10 +1913,10 @@ domove_core() You("%s %s.", mtmp->mpeaceful ? "swap places with" : "frighten", x_monnam(mtmp, mtmp->mtame ? ARTICLE_YOUR - : (!has_mname(mtmp) && !type_is_pname(mtmp->data)) + : (!has_mgivenname(mtmp) && !type_is_pname(mtmp->data)) ? ARTICLE_THE : ARTICLE_NONE, (mtmp->mpeaceful && !mtmp->mtame) ? "peaceful" : 0, - has_mname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE)); + has_mgivenname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE)); /* check for displacing it into pools and traps */ switch (minliquid(mtmp) ? 2 : mintrap(mtmp)) { @@ -3071,7 +3071,8 @@ const char *msg_override; if life-saved while poly'd and Unchanging (explore or wizard mode declining to die since can't be both Unchanging and Lifesaved) */ if (Upolyd && !strncmpi(g.nomovemsg, "You survived that ", 18)) - You("are %s.", an(mons[u.umonnum].mname)); /* (ignore Hallu) */ + You("are %s.", + an(pmname(&mons[u.umonnum], Ugender))); /* (ignore Hallu) */ } g.nomovemsg = 0; u.usleep = 0; diff --git a/src/insight.c b/src/insight.c index 57cd5596e..fd5bbfd3e 100644 --- a/src/insight.c +++ b/src/insight.c @@ -327,10 +327,12 @@ int final; if (!is_male(uasmon) && !is_female(uasmon) && !is_neuter(uasmon)) Sprintf(tmpbuf, "%s ", genders[flags.female ? 1 : 0].adj); if (altphrasing) - Sprintf(eos(tmpbuf), "%s in ", mons[g.youmonst.cham].mname); + Sprintf(eos(tmpbuf), "%s in ", + pmname(&mons[g.youmonst.cham], + flags.female ? FEMALE : MALE)); Sprintf(buf, "%s%s%s%s form", !final ? "currently " : "", altphrasing ? just_an(anbuf, tmpbuf) : "in ", - tmpbuf, uasmon->mname); + tmpbuf, pmname(uasmon, flags.female ? FEMALE : MALE)); you_are(buf, ""); } @@ -1367,7 +1369,7 @@ int final; } if (Warn_of_mon && g.context.warntype.speciesidx >= LOW_PM) { Sprintf(buf, "aware of the presence of %s", - makeplural(mons[g.context.warntype.speciesidx].mname)); + makeplural(mons[g.context.warntype.speciesidx].pmnames[NEUTRAL])); you_are(buf, from_what(WARN_OF_MON)); } if (Undead_warning) @@ -1574,10 +1576,14 @@ int final; && u.umonnum == PM_GREEN_SLIME && !Unchanging)) { /* foreign shape (except were-form which is handled below) */ if (!vampshifted(&g.youmonst)) - Sprintf(buf, "polymorphed into %s", an(g.youmonst.data->mname)); + Sprintf(buf, "polymorphed into %s", + an(pmname(g.youmonst.data, + flags.female ? FEMALE : MALE))); else Sprintf(buf, "polymorphed into %s in %s form", - an(mons[g.youmonst.cham].mname), g.youmonst.data->mname); + an(pmname(&mons[g.youmonst.cham], + flags.female ? FEMALE : MALE)), + pmname(g.youmonst.data, flags.female ? FEMALE : MALE)); if (wizard) Sprintf(eos(buf), " (%d)", u.mtimedone); you_are(buf, ""); @@ -1586,7 +1592,8 @@ int final; you_can("lay eggs", ""); if (u.ulycn >= LOW_PM) { /* "you are a werecreature [in beast form]" */ - Strcpy(buf, an(mons[u.ulycn].mname)); + Strcpy(buf, an(pmname(&mons[u.ulycn], + flags.female ? FEMALE : MALE))); if (u.umonnum == u.ulycn) { Strcat(buf, " in beast form"); if (wizard) @@ -2226,15 +2233,16 @@ const genericptr vptr2; res = mstr2 - mstr1; /* monstr high to low */ break; case VANQ_ALPHA_SEP: - uniq1 = ((mons[indx1].geno & G_UNIQ) && indx1 != PM_HIGH_PRIEST); - uniq2 = ((mons[indx2].geno & G_UNIQ) && indx2 != PM_HIGH_PRIEST); + uniq1 = ((mons[indx1].geno & G_UNIQ) && indx1 != PM_HIGH_CLERIC); + uniq2 = ((mons[indx2].geno & G_UNIQ) && indx2 != PM_HIGH_CLERIC); if (uniq1 ^ uniq2) { /* one or other uniq, but not both */ res = uniq2 - uniq1; break; } /* else both unique or neither unique */ /*FALLTHRU*/ case VANQ_ALPHA_MIX: - name1 = mons[indx1].mname, name2 = mons[indx2].mname; + name1 = mons[indx1].pmnames[NEUTRAL], + name2 = mons[indx2].pmnames[NEUTRAL]; res = strcmpi(name1, name2); /* caseblind alhpa, low to high */ break; case VANQ_MCLS_HTOL: @@ -2344,7 +2352,7 @@ doborn() g.mvitals[i].died, g.mvitals[i].born, ((g.mvitals[i].mvflags & G_GONE) == G_EXTINCT) ? 'E' : ((g.mvitals[i].mvflags & G_GONE) == G_GENOD) ? 'G' : ' ', - mons[i].mname); + mons[i].pmnames[NEUTRAL]); putstr(datawin, 0, buf); nborn += g.mvitals[i].born; ndied += g.mvitals[i].died; @@ -2361,7 +2369,7 @@ doborn() /* high priests aren't unique but are flagged as such to simplify something */ #define UniqCritterIndx(mndx) ((mons[mndx].geno & G_UNIQ) \ - && mndx != PM_HIGH_PRIEST) + && mndx != PM_HIGH_CLERIC) #define done_stopprint g.program_state.stopprint @@ -2435,7 +2443,7 @@ boolean ask; if (UniqCritterIndx(i)) { Sprintf(buf, "%s%s", !type_is_pname(&mons[i]) ? "the " : "", - mons[i].mname); + mons[i].pmnames[NEUTRAL]); if (nkilled > 1) { switch (nkilled) { case 2: @@ -2458,10 +2466,10 @@ boolean ask; /* trolls or undead might have come back, but we don't keep track of that */ if (nkilled == 1) - Strcpy(buf, an(mons[i].mname)); + Strcpy(buf, an(mons[i].pmnames[NEUTRAL])); else Sprintf(buf, "%3d %s", nkilled, - makeplural(mons[i].mname)); + makeplural(mons[i].pmnames[NEUTRAL])); } /* number of leading spaces to match 3 digit prefix */ pfx = !strncmpi(buf, "the ", 3) ? 0 @@ -2507,7 +2515,7 @@ num_genocides() ++n; if (UniqCritterIndx(i)) impossible("unique creature '%d: %s' genocided?", - i, mons[i].mname); + i, mons[i].pmnames[NEUTRAL]); } } return n; @@ -2570,7 +2578,7 @@ boolean ask; if (UniqCritterIndx(i)) continue; if (g.mvitals[i].mvflags & G_GONE) { - Sprintf(buf, " %s", makeplural(mons[i].mname)); + Sprintf(buf, " %s", makeplural(mons[i].pmnames[NEUTRAL])); /* * "Extinct" is unfortunate terminology. A species * is marked extinct when its birth limit is reached, diff --git a/src/invent.c b/src/invent.c index 5f14e2f46..8b1a96287 100644 --- a/src/invent.c +++ b/src/invent.c @@ -2980,7 +2980,7 @@ boolean FDECL((*filterfunc), (OBJ_P)); for (; list; list = list->nobj) { /* priests always know bless/curse state */ - if (Role_if(PM_PRIEST)) + if (Role_if(PM_CLERIC)) list->bknown = (list->oclass != COIN_CLASS); /* some actions exclude some or most items */ if (filterfunc && !(*filterfunc)(list)) @@ -3020,7 +3020,7 @@ int *bcp, *ucp, *ccp, *xcp, *ocp; *bcp = *ucp = *ccp = *xcp = *ocp = 0; for ( ; list; list = (by_nexthere ? list->nexthere : list->nobj)) { /* priests always know bless/curse state */ - if (Role_if(PM_PRIEST)) + if (Role_if(PM_CLERIC)) list->bknown = (list->oclass != COIN_CLASS); /* coins are either uncursed or unknown based upon option setting */ if (list->oclass == COIN_CLASS) { @@ -3731,7 +3731,7 @@ register struct obj *otmp, *obj; return FALSE; if (obj->dknown != otmp->dknown - || (obj->bknown != otmp->bknown && !Role_if(PM_PRIEST)) + || (obj->bknown != otmp->bknown && !Role_if(PM_CLERIC)) || obj->oeroded != otmp->oeroded || obj->oeroded2 != otmp->oeroded2 || obj->greased != otmp->greased) return FALSE; diff --git a/src/makemon.c b/src/makemon.c index b9bb36d5f..27f9ad049 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -247,14 +247,14 @@ register struct monst *mtmp; } break; } - if (mm == PM_ELVENKING) { + if (mm == PM_ELVENMONARCH) { if (rn2(3) || (g.in_mklev && Is_earthlevel(&u.uz))) (void) mongets(mtmp, PICK_AXE); if (!rn2(50)) (void) mongets(mtmp, CRYSTAL_BALL); } } else if (ptr->msound == MS_PRIEST - || quest_mon_represents_role(ptr, PM_PRIEST)) { + || quest_mon_represents_role(ptr, PM_CLERIC)) { otmp = mksobj(MACE, FALSE, FALSE); otmp->spe = rnd(3); if (!rn2(2)) @@ -428,7 +428,7 @@ register struct monst *mtmp; } break; case S_OGRE: - if (!rn2(mm == PM_OGRE_KING ? 3 : mm == PM_OGRE_LORD ? 6 : 12)) + if (!rn2(mm == PM_OGRE_TYRANT ? 3 : mm == PM_OGRE_LEADER ? 6 : 12)) (void) mongets(mtmp, BATTLE_AXE); else (void) mongets(mtmp, CLUB); @@ -700,7 +700,7 @@ register struct monst *mtmp; (void) mongets(mtmp, WAN_STRIKING); } } else if (ptr->msound == MS_PRIEST - || quest_mon_represents_role(ptr, PM_PRIEST)) { + || quest_mon_represents_role(ptr, PM_CLERIC)) { (void) mongets(mtmp, rn2(7) ? ROBE : rn2(3) ? CLOAK_OF_PROTECTION : CLOAK_OF_MAGIC_RESISTANCE); @@ -882,8 +882,8 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */ new_light_source(m2->mx, m2->my, emits_light(m2->data), LS_MONSTER, monst_to_any(m2)); /* if 'parent' is named, give the clone the same name */ - if (has_mname(mon)) { - m2 = christen_monst(m2, MNAME(mon)); + if (has_mgivenname(mon)) { + m2 = christen_monst(m2, MGIVENNAME(mon)); } else if (mon->isshk) { m2 = christen_monst(m2, shkname(mon)); } @@ -946,7 +946,7 @@ boolean ghostly; result = ((int) g.mvitals[mndx].born < lim && !gone) ? TRUE : FALSE; /* if it's unique, don't ever make it again */ - if ((mons[mndx].geno & G_UNIQ) != 0 && mndx != PM_HIGH_PRIEST) + if ((mons[mndx].geno & G_UNIQ) != 0 && mndx != PM_HIGH_CLERIC) g.mvitals[mndx].mvflags |= G_EXTINCT; if (g.mvitals[mndx].born < 255 && tally && (!ghostly || result)) @@ -956,7 +956,7 @@ boolean ghostly; && !(g.mvitals[mndx].mvflags & G_EXTINCT)) { if (wizard) { debugpline1("Automatically extinguished %s.", - makeplural(mons[mndx].mname)); + makeplural(mons[mndx].pmnames[NEUTRAL])); } g.mvitals[mndx].mvflags |= G_EXTINCT; } @@ -1184,7 +1184,7 @@ long mmflags; return (struct monst *) 0; if (wizard && (g.mvitals[mndx].mvflags & G_EXTINCT)) { debugpline1("Explicitly creating extinct monster %s.", - mons[mndx].mname); + mons[mndx].pmnames[NEUTRAL]); } } else { /* make a random (common) monster that can survive here. @@ -1236,9 +1236,9 @@ long mmflags; /* set up level and hit points */ newmonhp(mtmp, mndx); - if (is_female(ptr)) + if (is_female(ptr) || ((mmflags & MM_FEMALE) && !is_male(ptr))) mtmp->female = TRUE; - else if (is_male(ptr)) + else if (is_male(ptr) || ((mmflags & MM_MALE) && !is_female(ptr))) mtmp->female = FALSE; /* leader and nemesis gender is usually hardcoded in mons[], but for ones which can be random, it has already been chosen @@ -1369,7 +1369,7 @@ long mmflags; types; make sure their extended data is initialized to something sensible if caller hasn't specified MM_EPRI|MM_EMIN (when they're specified, caller intends to handle this itself) */ - if ((mndx == PM_ALIGNED_PRIEST || mndx == PM_HIGH_PRIEST) + if ((mndx == PM_ALIGNED_CLERIC || mndx == PM_HIGH_CLERIC) ? !(mmflags & (MM_EPRI | MM_EMIN)) : (mndx == PM_ANGEL && !(mmflags & MM_EMIN) && !rn2(3))) { struct emin *eminp; @@ -1857,8 +1857,11 @@ struct monst *mtmp, *victim; oldtype = monsndx(ptr); newtype = (oldtype == PM_KILLER_BEE && !victim) ? PM_QUEEN_BEE : little_to_big(oldtype); +#if 0 + /* gender-neutral PM_CLERIC now */ if (newtype == PM_PRIEST && mtmp->female) newtype = PM_PRIESTESS; +#endif /* growth limits differ depending on method of advancement */ if (victim) { /* killed a monster */ @@ -1914,7 +1917,7 @@ struct monst *mtmp, *victim; if (g.mvitals[newtype].mvflags & G_GENOD) { /* allow G_EXTINCT */ if (canspotmon(mtmp)) pline("As %s grows up into %s, %s %s!", mon_nam(mtmp), - an(ptr->mname), mhe(mtmp), + an(pmname(ptr, Mgender(mtmp))), mhe(mtmp), nonliving(ptr) ? "expires" : "dies"); set_mon_data(mtmp, ptr); /* keep g.mvitals[] accurate */ mondied(mtmp); @@ -1932,7 +1935,7 @@ struct monst *mtmp, *victim; (can't happen with 3.6.0 mons[], but perhaps slightly less sexist if prepared for it...) */ : (fem && !mtmp->female) ? "female " : "", - ptr->mname); + pmname(ptr, fem)); pline("%s %s %s.", upstart(y_monnam(mtmp)), (fem != mtmp->female) ? "changes into" : humanoid(ptr) ? "becomes" diff --git a/src/mapglyph.c b/src/mapglyph.c index 291a11f36..a28c94670 100644 --- a/src/mapglyph.c +++ b/src/mapglyph.c @@ -77,9 +77,10 @@ unsigned mgflags; unsigned special = 0; /* condense multiple tests in macro version down to single */ boolean has_rogue_ibm_graphics = HAS_ROGUE_IBM_GRAPHICS, - is_you = (x == u.ux && y == u.uy), + is_you = (x == u.ux && y == u.uy && !u.usteed), has_rogue_color = (has_rogue_ibm_graphics - && g.symset[g.currentgraphics].nocolor == 0); + && g.symset[g.currentgraphics].nocolor == 0), + do_mon_checks = FALSE; if (!g.glyphmap_perlevel_flags) { /* @@ -254,6 +255,7 @@ unsigned mgflags; else mon_color(offset); special |= MG_RIDDEN; + do_mon_checks = TRUE; } else if ((offset = (glyph - GLYPH_BODY_OFF)) >= 0) { /* a corpse */ idx = objects[CORPSE].oc_class + SYM_OFF_O; if (has_rogue_color && iflags.use_color) @@ -272,6 +274,7 @@ unsigned mgflags; /* Disabled for now; anyone want to get reverse video to work? */ /* is_reverse = TRUE; */ special |= MG_DETECT; + do_mon_checks = TRUE; } else if ((offset = (glyph - GLYPH_INVIS_OFF)) >= 0) { /* invisible */ idx = SYM_INVISIBLE + SYM_OFF_X; if (has_rogue_color) @@ -286,6 +289,7 @@ unsigned mgflags; else pet_color(offset); special |= MG_PET; + do_mon_checks = TRUE; } else { /* a monster */ idx = mons[glyph].mlet + SYM_OFF_M; if (has_rogue_color && iflags.use_color) { @@ -302,6 +306,21 @@ unsigned mgflags; color = HI_DOMESTIC; #endif } + do_mon_checks = TRUE; + } + if (do_mon_checks) { + struct monst *m; + + if (is_you) { + if (Ugender == FEMALE) + special |= MG_FEMALE; + } else { + /* when hero is riding, steed will be shown at hero's location + but has not been placed on the map so m_at() won't find it */ + m = (x == u.ux && y == u.uy && u.usteed) ? u.usteed : m_at(x, y); + if (m && m->female) + special |= MG_FEMALE; + } } /* These were requested by a blind player to enhance screen reader use */ @@ -354,14 +373,14 @@ const char *str; { static const char hex[] = "00112233445566778899aAbBcCdDeEfF"; char *put = buf; + unsigned glyphmod[NUM_GLYPHMOD]; if (!str) return strcpy(buf, ""); while (*str) { if (*str == '\\') { - int rndchk, dcount, so, gv, ch = 0, oc = 0; - unsigned os = 0; + int rndchk, dcount, so, gv; const char *dp, *save_str; save_str = str++; @@ -380,7 +399,8 @@ const char *str; gv = (gv * 16) + ((int) (dp - hex) / 2); else break; - so = mapglyph(gv, &ch, &oc, &os, 0, 0, 0); + map_glyphmod(0, 0, gv, MG_FLAG_RETURNIDX, glyphmod); + so = glyphmod[GM_TTYCHAR]; *put++ = g.showsyms[so]; /* 'str' is ready for the next loop iteration and '*str' should not be copied at the end of this iteration */ diff --git a/src/mhitu.c b/src/mhitu.c index 89d77dd2d..f4260cbc1 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -510,12 +510,12 @@ register struct monst *mtmp; pline( "Wait, %s! There's a hidden %s named %s there!", m_monnam(mtmp), - g.youmonst.data->mname, g.plname); + pmname(g.youmonst.data, Ugender), g.plname); else pline( "Wait, %s! There's a %s named %s hiding under %s!", - m_monnam(mtmp), g.youmonst.data->mname, g.plname, - doname(g.level.objects[u.ux][u.uy])); + m_monnam(mtmp), pmname(g.youmonst.data, Ugender), + g.plname, doname(g.level.objects[u.ux][u.uy])); if (obj) obj->spe = save_spe; } else @@ -537,7 +537,7 @@ register struct monst *mtmp; pline("It gets stuck on you."); else /* see note about m_monnam() above */ pline("Wait, %s! That's a %s named %s!", m_monnam(mtmp), - g.youmonst.data->mname, g.plname); + pmname(g.youmonst.data, Ugender), g.plname); if (sticky) set_ustuck(mtmp); g.youmonst.m_ap_type = M_AP_NOTHING; @@ -557,13 +557,14 @@ register struct monst *mtmp; : "disturbs you"); else /* see note about m_monnam() above */ pline("Wait, %s! That %s is really %s named %s!", m_monnam(mtmp), - mimic_obj_name(&g.youmonst), an(mons[u.umonnum].mname), - g.plname); + mimic_obj_name(&g.youmonst), + an(pmname(&mons[u.umonnum], Ugender)), g.plname); if (g.multi < 0) { /* this should always be the case */ char buf[BUFSZ]; Sprintf(buf, "You appear to be %s again.", - Upolyd ? (const char *) an(g.youmonst.data->mname) + Upolyd ? (const char *) an(pmname(g.youmonst.data, + flags.female)) : (const char *) "yourself"); unmul(buf); /* immediately stop mimicking */ } @@ -793,8 +794,7 @@ boolean youseeit; */ if (is_demon(mdat)) { - if (mdat != &mons[PM_BALROG] - && mdat != &mons[PM_SUCCUBUS] && mdat != &mons[PM_INCUBUS]) { + if (mdat != &mons[PM_BALROG] && mdat != &mons[PM_AMOROUS_DEMON]) { if (!rn2(13)) (void) msummon(mtmp); } @@ -861,7 +861,7 @@ struct permonst *mdat; return FALSE; } else { make_sick(Sick ? Sick / 3L + 1L : (long) rn1(ACURR(A_CON), 20), - mdat->mname, TRUE, SICK_NONVOMITABLE); + mdat->pmnames[NEUTRAL], TRUE, SICK_NONVOMITABLE); return TRUE; } } @@ -915,7 +915,7 @@ struct monst *mon; via_amul = FALSE, gotprot = is_you ? (EProtection != 0L) /* high priests have innate protection */ - : (mon->data == &mons[PM_HIGH_PRIEST]); + : (mon->data == &mons[PM_HIGH_CLERIC]); for (o = is_you ? g.invent : mon->minvent; o; o = o->nobj) { /* a_can field is only applicable for armor (which must be worn) */ @@ -948,7 +948,7 @@ struct monst *mon; protection is too easy); it confers minimum mc 1 instead of 0 */ if ((is_you && ((HProtection && u.ublessed > 0) || u.uspellprot)) /* aligned priests and angels have innate intrinsic Protection */ - || (mon->data == &mons[PM_ALIGNED_PRIEST] || is_minion(mon->data))) + || (mon->data == &mons[PM_ALIGNED_CLERIC] || is_minion(mon->data))) mc = 1; } return mc; @@ -1034,7 +1034,7 @@ register struct attack *mattk; if (mhm.damage) { if (Half_physical_damage /* Mitre of Holiness */ - || (Role_if(PM_PRIEST) && uarmh && is_quest_artifact(uarmh) + || (Role_if(PM_CLERIC) && uarmh && is_quest_artifact(uarmh) && (is_undead(mtmp->data) || is_demon(mtmp->data) || is_vampshifter(mtmp)))) mhm.damage = (mhm.damage + 1) / 2; @@ -1543,7 +1543,7 @@ struct attack *mattk; break; You("turn to stone..."); g.killer.format = KILLED_BY; - Strcpy(g.killer.name, mtmp->data->mname); + Strcpy(g.killer.name, pmname(mtmp->data, Mgender(mtmp))); done(STONING); } break; @@ -1751,8 +1751,7 @@ struct attack *mattk; /* non-Null: current attack; Null: general capability */ for seduction, both pass the could_seduce() test; incubi/succubi have three attacks, their claw attacks for damage don't pass the test */ - if ((pagr->mlet != S_NYMPH - && pagr != &mons[PM_INCUBUS] && pagr != &mons[PM_SUCCUBUS]) + if ((pagr->mlet != S_NYMPH && pagr != &mons[PM_AMOROUS_DEMON]) || (adtyp != AD_SEDU && adtyp != AD_SSEX && adtyp != AD_SITM)) return 0; @@ -1765,7 +1764,8 @@ doseduce(mon) struct monst *mon; { struct obj *ring, *nring; - boolean fem = (mon->data == &mons[PM_SUCCUBUS]); /* otherwise incubus */ + boolean fem = (mon->data == &mons[PM_AMOROUS_DEMON] + && Mgender(mon) == FEMALE); /* otherwise incubus */ boolean seewho, naked; /* True iff no armor */ int attr_tot, tried_gloves = 0; char qbuf[QBUFSZ], Who[QBUFSZ]; @@ -2232,7 +2232,8 @@ struct attack *mattk; && (perceives(mtmp->data) || !Invis)) { if (Blind) pline("As a blind %s, you cannot defend yourself.", - g.youmonst.data->mname); + pmname(g.youmonst.data, + flags.female ? FEMALE : MALE)); else { if (mon_reflects(mtmp, "Your gaze is reflected by %s %s.")) diff --git a/src/minion.c b/src/minion.c index 03f0b27c0..c6a7dec58 100644 --- a/src/minion.c +++ b/src/minion.c @@ -196,7 +196,7 @@ boolean talk; EMIN(mon)->renegade = FALSE; } } else if (mnum != PM_SHOPKEEPER && mnum != PM_GUARD - && mnum != PM_ALIGNED_PRIEST && mnum != PM_HIGH_PRIEST) { + && mnum != PM_ALIGNED_CLERIC && mnum != PM_HIGH_CLERIC) { /* This was mons[mnum].pxlth == 0 but is this restriction appropriate or necessary now that the structures are separate? */ mon = makemon(&mons[mnum], u.ux, u.uy, MM_EMIN); diff --git a/src/mkmaze.c b/src/mkmaze.c index 4b3e7c588..c79068bf1 100644 --- a/src/mkmaze.c +++ b/src/mkmaze.c @@ -569,7 +569,7 @@ fixup_special() set_corpsenm(otmp, rndmonnum()); } } - } else if (Role_if(PM_PRIEST) && In_quest(&u.uz)) { + } else if (Role_if(PM_CLERIC) && In_quest(&u.uz)) { /* less chance for undead corpses (lured from lower morgues) */ g.level.flags.graveyard = 1; } else if (Is_stronghold(&u.uz)) { @@ -742,7 +742,7 @@ stolen_booty(VOID_ARGS) if (DEADMONSTER(mtmp)) continue; - if (is_orc(mtmp->data) && !has_mname(mtmp) && rn2(10)) { + if (is_orc(mtmp->data) && !has_mgivenname(mtmp) && rn2(10)) { /* * We'll consider the orc captain from the level * description to be the captain of a rival orc horde diff --git a/src/mkroom.c b/src/mkroom.c index d1e7c7cbb..405efb312 100644 --- a/src/mkroom.c +++ b/src/mkroom.c @@ -250,10 +250,10 @@ mk_zoo_thronemon(x,y) int x,y; { int i = rnd(level_difficulty()); - int pm = (i > 9) ? PM_OGRE_KING - : (i > 5) ? PM_ELVENKING - : (i > 2) ? PM_DWARF_KING - : PM_GNOME_KING; + int pm = (i > 9) ? PM_OGRE_TYRANT + : (i > 5) ? PM_ELVENMONARCH + : (i > 2) ? PM_DWARF_RULER + : PM_GNOME_RULER; struct monst *mon = makemon(&mons[pm], x, y, NO_MM_FLAGS); if (mon) { diff --git a/src/mon.c b/src/mon.c index 1676dc072..c6136e779 100644 --- a/src/mon.c +++ b/src/mon.c @@ -84,14 +84,17 @@ const char *msg; /* bad if not fmons list or if not vault guard */ if (strcmp(msg, "fmon") || !mtmp->isgd) impossible("dead monster on %s; %s at <%d,%d>", - msg, mons[mndx].mname, mx, my); + msg, mons[mndx].pmnames[NEUTRAL], + mx, my); #endif return; } if (chk_geno && (g.mvitals[mndx].mvflags & G_GENOD) != 0) - impossible("genocided %s in play (%s)", mons[mndx].mname, msg); + impossible("genocided %s in play (%s)", + pmname(&mons[mndx], Mgender(mtmp)), msg); if (mtmp->mtame && !mtmp->mpeaceful) - impossible("tame %s is not peaceful (%s)", mons[mndx].mname, msg); + impossible("tame %s is not peaceful (%s)", + pmname(&mons[mndx], Mgender(mtmp)), msg); } if (mtmp->isshk && !has_eshk(mtmp)) impossible("shk without eshk (%s)", msg); @@ -151,7 +154,7 @@ const char *msg; but only until the pet finishes eating a mimic corpse */ if (!(is_mimic || mtmp->meating)) impossible("non-mimic (%s) posing as %s (%s)", - mptr->mname, what, msg); + mptr->pmnames[NEUTRAL], what, msg); if (!(accessible(mx, my) || passes_walls(mptr))) { char buf[BUFSZ]; const char *typnam = levltyp_to_name(levl[mx][my].typ); @@ -337,7 +340,7 @@ int mndx; mndx = PM_ELF; break; case PM_VAMPIRE: - case PM_VAMPIRE_LORD: + case PM_VAMPIRE_LEADER: #if 0 /* DEFERRED */ case PM_VAMPIRE_MAGE: #endif @@ -378,7 +381,7 @@ int mndx, mode; mndx = mode ? PM_BARBARIAN : PM_HUMAN; break; case PM_NEANDERTHAL: - mndx = mode ? PM_CAVEMAN : PM_HUMAN; + mndx = mode ? PM_CAVE_DWELLER : PM_HUMAN; break; case PM_ATTENDANT: mndx = mode ? PM_HEALER : PM_HUMAN; @@ -390,7 +393,7 @@ int mndx, mode; mndx = mode ? PM_MONK : PM_HUMAN; break; case PM_ACOLYTE: - mndx = mode ? PM_PRIEST : PM_HUMAN; + mndx = mode ? PM_CLERIC : PM_HUMAN; break; case PM_HUNTER: mndx = mode ? PM_RANGER : PM_HUMAN; @@ -514,7 +517,7 @@ unsigned corpseflags; (void) mksobj_at(WORM_TOOTH, x, y, TRUE, FALSE); goto default_1; case PM_VAMPIRE: - case PM_VAMPIRE_LORD: + case PM_VAMPIRE_LEADER: /* include mtmp in the mkcorpstat() call */ num = undead_to_corpse(mndx); corpstatflags |= CORPSTAT_INIT; @@ -546,19 +549,19 @@ unsigned corpseflags; num = d(2, 6); while (num--) obj = mksobj_at(IRON_CHAIN, x, y, TRUE, FALSE); - free_mname(mtmp); /* don't christen obj */ + free_mgivenname(mtmp); /* don't christen obj */ break; case PM_GLASS_GOLEM: num = d(2, 4); /* very low chance of creating all glass gems */ while (num--) obj = mksobj_at((LAST_GEM + rnd(9)), x, y, TRUE, FALSE); - free_mname(mtmp); + free_mgivenname(mtmp); break; case PM_CLAY_GOLEM: obj = mksobj_at(ROCK, x, y, FALSE, FALSE); obj->quan = (long) (rn2(20) + 50); obj->owt = weight(obj); - free_mname(mtmp); + free_mgivenname(mtmp); break; case PM_STONE_GOLEM: corpstatflags &= ~CORPSTAT_INIT; @@ -570,24 +573,24 @@ unsigned corpseflags; while (num--) { obj = mksobj_at(QUARTERSTAFF, x, y, TRUE, FALSE); } - free_mname(mtmp); + free_mgivenname(mtmp); break; case PM_LEATHER_GOLEM: num = d(2, 4); while (num--) obj = mksobj_at(LEATHER_ARMOR, x, y, TRUE, FALSE); - free_mname(mtmp); + free_mgivenname(mtmp); break; case PM_GOLD_GOLEM: /* Good luck gives more coins */ obj = mkgold((long) (200 - rnl(101)), x, y); - free_mname(mtmp); + free_mgivenname(mtmp); break; case PM_PAPER_GOLEM: num = rnd(4); while (num--) obj = mksobj_at(SCR_BLANK_PAPER, x, y, TRUE, FALSE); - free_mname(mtmp); + free_mgivenname(mtmp); break; /* expired puddings will congeal into a large blob; like dragons, relies on the order remaining consistent */ @@ -604,7 +607,7 @@ unsigned corpseflags; pudding_merge_message(obj, otmp); obj = obj_meld(&obj, &otmp); } - free_mname(mtmp); + free_mgivenname(mtmp); return obj; default: default_1: @@ -635,8 +638,8 @@ unsigned corpseflags; if (g.context.bypasses) bypass_obj(obj); - if (has_mname(mtmp)) - obj = oname(obj, MNAME(mtmp)); + if (has_mgivenname(mtmp)) + obj = oname(obj, MGIVENNAME(mtmp)); /* Avoid "It was hidden under a green mold corpse!" * during Blind combat. An unseen monster referred to as "it" @@ -2118,9 +2121,9 @@ struct monst *mtmp2, *mtmp1; if (!mtmp2->mextra) mtmp2->mextra = newmextra(); - if (MNAME(mtmp1)) { - new_mname(mtmp2, (int) strlen(MNAME(mtmp1)) + 1); - Strcpy(MNAME(mtmp2), MNAME(mtmp1)); + if (MGIVENNAME(mtmp1)) { + new_mgivenname(mtmp2, (int) strlen(MGIVENNAME(mtmp1)) + 1); + Strcpy(MGIVENNAME(mtmp2), MGIVENNAME(mtmp1)); } if (EGD(mtmp1)) { if (!EGD(mtmp2)) @@ -2158,8 +2161,8 @@ struct monst *m; struct mextra *x = m->mextra; if (x) { - if (x->mname) - free((genericptr_t) x->mname); + if (x->mgivenname) + free((genericptr_t) x->mgivenname); if (x->egd) free((genericptr_t) x->egd); if (x->epri) @@ -2514,7 +2517,7 @@ boolean was_swallowed; /* digestion */ if (magr == &g.youmonst) { There("is an explosion in your %s!", body_part(STOMACH)); Sprintf(g.killer.name, "%s explosion", - s_suffix(mdat->mname)); + s_suffix(pmname(mdat, Mgender(mon)))); losehp(Maybe_Half_Phys(tmp), g.killer.name, KILLED_BY_AN); } else { You_hear("an explosion."); @@ -2531,7 +2534,8 @@ boolean was_swallowed; /* digestion */ return FALSE; } - Sprintf(g.killer.name, "%s explosion", s_suffix(mdat->mname)); + Sprintf(g.killer.name, "%s explosion", + s_suffix(pmname(mdat, Mgender(mon)))); g.killer.format = KILLED_BY_AN; explode(mon->mx, mon->my, -1, tmp, MON_EXPLODE, EXPL_NOXIOUS); g.killer.name[0] = '\0'; @@ -2649,8 +2653,8 @@ struct monst *mdef; so that saved monster traits won't retain any stale item-conferred attributes */ otmp = mkcorpstat(STATUE, mdef, mdef->data, x, y, CORPSTAT_NONE); - if (has_mname(mdef)) - otmp = oname(otmp, MNAME(mdef)); + if (has_mgivenname(mdef)) + otmp = oname(otmp, MGIVENNAME(mdef)); while ((obj = oldminvent) != 0) { oldminvent = obj->nobj; obj->nobj = 0; /* avoid merged-> obfree-> dealloc_obj-> panic */ @@ -2798,7 +2802,7 @@ int xkill_flags; /* 1: suppress message, 2: suppress corpse, 4: pacifist */ u.uconduct.killer++; if (!nomsg) { - boolean namedpet = has_mname(mtmp) && !Hallucination; + boolean namedpet = has_mgivenname(mtmp) && !Hallucination; You("%s %s!", nonliving(mtmp->data) ? "destroy" : "kill", @@ -2987,7 +2991,7 @@ struct monst *mtmp; pline("%s solidifies...", Monnam(mtmp)); if (newcham(mtmp, &mons[PM_STONE_GOLEM], FALSE, FALSE)) { if (canseemon(mtmp)) - pline("Now it's %s.", an(mtmp->data->mname)); + pline("Now it's %s.", an(pmname(mtmp->data, Mgender(mtmp)))); } else { if (canseemon(mtmp)) pline("... and returns to normal."); @@ -3415,7 +3419,7 @@ boolean via_attack; } } if (got_mad && !Hallucination) { - const char *who = q_guardian->mname; + const char *who = q_guardian->pmnames[NEUTRAL]; if (got_mad > 1) who = makeplural(who); @@ -3888,7 +3892,7 @@ struct monst *mon; break; /* leave mndx as is */ wolfchance = 3; /*FALLTHRU*/ - case PM_VAMPIRE_LORD: /* vampire lord or Vlad can become wolf */ + case PM_VAMPIRE_LEADER: /* vampire lord or Vlad can become wolf */ if (!rn2(wolfchance) && !uppercase_only) { mndx = PM_WOLF; break; @@ -4039,7 +4043,7 @@ struct monst *mon; mndx = pick_animal(); break; case PM_VLAD_THE_IMPALER: - case PM_VAMPIRE_LORD: + case PM_VAMPIRE_LEADER: case PM_VAMPIRE: mndx = pickvampshape(mon); break; @@ -4097,7 +4101,7 @@ struct monst *mon; mndx = NON_PM; break; } - mndx = name_to_mon(buf); + mndx = name_to_mon(buf, (int *) 0); if (mndx == NON_PM) { /* didn't get a type, so check whether it's a class (single letter or text match with def_monsyms[]) */ @@ -4222,7 +4226,7 @@ boolean msg; /* "The oldmon turns into a newmon!" */ } /* we need this one whether msg is true or not */ Strcpy(l_oldname, x_monnam(mtmp, ARTICLE_THE, (char *) 0, - has_mname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE)); + has_mgivenname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE)); /* mdat = 0 -> caller wants a random monster shape */ if (mdat == 0) { @@ -4255,7 +4259,7 @@ boolean msg; /* "The oldmon turns into a newmon!" */ * polymorphed, so dropping rank for mplayers seems reasonable. */ if (In_endgame(&u.uz) && is_mplayer(olddata) - && has_mname(mtmp) && (p = strstr(MNAME(mtmp), " the ")) != 0) + && has_mgivenname(mtmp) && (p = strstr(MGIVENNAME(mtmp), " the ")) != 0) *p = '\0'; if (mtmp->wormno) { /* throw tail away */ @@ -4646,9 +4650,9 @@ char *str; for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { if (DEADMONSTER(mtmp) - || mtmp->data != &mons[PM_GHOST] || !has_mname(mtmp)) + || mtmp->data != &mons[PM_GHOST] || !has_mgivenname(mtmp)) continue; - if (!strcmpi(MNAME(mtmp), str)) + if (!strcmpi(MGIVENNAME(mtmp), str)) return mtmp; } return (struct monst *) 0; @@ -4694,8 +4698,7 @@ struct permonst *mdat; You("notice a bovine smell."); msg_given = TRUE; break; - case PM_CAVEMAN: - case PM_CAVEWOMAN: + case PM_CAVE_DWELLER: case PM_BARBARIAN: case PM_NEANDERTHAL: You("smell body odor."); diff --git a/src/mondata.c b/src/mondata.c index e15fef59a..e78806dbe 100644 --- a/src/mondata.c +++ b/src/mondata.c @@ -681,15 +681,17 @@ struct permonst *ptr; struct alt_spl { const char *name; short pm_val; + int genderhint; }; /* figure out what type of monster a user-supplied string is specifying; ingore anything past the monster name */ int -name_to_mon(in_str) +name_to_mon(in_str, gender_name_var) const char *in_str; +int *gender_name_var; { - return name_to_monplus(in_str, (const char **) 0); + return name_to_monplus(in_str, (const char **) 0, gender_name_var); } /* figure out what type of monster a user-supplied string is specifying; @@ -697,9 +699,10 @@ const char *in_str; caller wants to strip off the name and it matches one of the alternate names rather the canonical mons[].mname */ int -name_to_monplus(in_str, remainder_p) +name_to_monplus(in_str, remainder_p, gender_name_var) const char *in_str; const char **remainder_p; +int *gender_name_var; { /* Be careful. We must check the entire string in case it was * something such as "ettin zombie corpse". The calling routine @@ -717,7 +720,8 @@ const char **remainder_p; register int mntmp = NON_PM; register char *s, *str, *term; char buf[BUFSZ]; - int len, slen; + int len, slen, mgend; + boolean exact_match = FALSE; if (remainder_p) *remainder_p = (const char *) 0; @@ -749,70 +753,72 @@ const char **remainder_p; { static const struct alt_spl names[] = { /* Alternate spellings */ - { "grey dragon", PM_GRAY_DRAGON }, - { "baby grey dragon", PM_BABY_GRAY_DRAGON }, - { "grey unicorn", PM_GRAY_UNICORN }, - { "grey ooze", PM_GRAY_OOZE }, - { "gray-elf", PM_GREY_ELF }, - { "mindflayer", PM_MIND_FLAYER }, - { "master mindflayer", PM_MASTER_MIND_FLAYER }, + { "grey dragon", PM_GRAY_DRAGON, NEUTRAL }, + { "baby grey dragon", PM_BABY_GRAY_DRAGON, NEUTRAL }, + { "grey unicorn", PM_GRAY_UNICORN, NEUTRAL }, + { "grey ooze", PM_GRAY_OOZE, NEUTRAL }, + { "gray-elf", PM_GREY_ELF, NEUTRAL }, + { "mindflayer", PM_MIND_FLAYER, NEUTRAL }, + { "master mindflayer", PM_MASTER_MIND_FLAYER, NEUTRAL }, /* More alternates; priest and priestess are separate monster types but that isn't the case for {aligned,high} priests */ - { "aligned priestess", PM_ALIGNED_PRIEST }, - { "high priestess", PM_HIGH_PRIEST }, + { "aligned priestess", PM_ALIGNED_CLERIC, NEUTRAL }, + { "high priestess", PM_HIGH_CLERIC, NEUTRAL }, /* Inappropriate singularization by -ves check above */ - { "master of thief", PM_MASTER_OF_THIEVES }, + { "master of thief", PM_MASTER_OF_THIEVES, NEUTRAL }, /* Potential misspellings where we want to avoid falling back to the rank title prefix (input has been singularized) */ - { "master thief", PM_MASTER_OF_THIEVES }, - { "master of assassin", PM_MASTER_ASSASSIN }, + { "master thief", PM_MASTER_OF_THIEVES, NEUTRAL }, + { "master of assassin", PM_MASTER_ASSASSIN, NEUTRAL }, /* Outdated names */ - { "invisible stalker", PM_STALKER }, - { "high-elf", PM_ELVENKING }, /* PM_HIGH_ELF is obsolete */ + { "invisible stalker", PM_STALKER, NEUTRAL }, + { "high-elf", PM_ELVENMONARCH, NEUTRAL }, /* PM_HIGH_ELF is obsolete */ /* other misspellings or incorrect words */ - { "wood-elf", PM_WOODLAND_ELF }, - { "wood elf", PM_WOODLAND_ELF }, - { "woodland nymph", PM_WOOD_NYMPH }, - { "halfling", PM_HOBBIT }, /* potential guess for polyself */ - { "genie", PM_DJINNI }, /* potential guess for ^G/#wizgenesis */ + { "wood-elf", PM_WOODLAND_ELF, NEUTRAL }, + { "wood elf", PM_WOODLAND_ELF, NEUTRAL }, + { "woodland nymph", PM_WOOD_NYMPH, NEUTRAL }, + { "halfling", PM_HOBBIT, NEUTRAL }, /* potential guess for polyself */ + { "genie", PM_DJINNI, NEUTRAL }, /* potential guess for ^G/#wizgenesis */ /* prefix used to workaround duplicate monster names for monsters with alternate forms */ - { "human wererat", PM_HUMAN_WERERAT }, - { "human werejackal", PM_HUMAN_WEREJACKAL }, - { "human werewolf", PM_HUMAN_WEREWOLF }, + { "human wererat", PM_HUMAN_WERERAT, NEUTRAL }, + { "human werejackal", PM_HUMAN_WEREJACKAL, NEUTRAL }, + { "human werewolf", PM_HUMAN_WEREWOLF, NEUTRAL }, /* for completeness */ - { "rat wererat", PM_WERERAT }, - { "jackal werejackal", PM_WEREJACKAL }, - { "wolf werewolf", PM_WEREWOLF }, + { "rat wererat", PM_WERERAT, NEUTRAL }, + { "jackal werejackal", PM_WEREJACKAL, NEUTRAL }, + { "wolf werewolf", PM_WEREWOLF, NEUTRAL }, /* Hyphenated names -- it would be nice to handle these via fuzzymatch() but it isn't able to ignore trailing stuff */ - { "ki rin", PM_KI_RIN }, - { "kirin", PM_KI_RIN }, - { "uruk hai", PM_URUK_HAI }, - { "orc captain", PM_ORC_CAPTAIN }, - { "woodland elf", PM_WOODLAND_ELF }, - { "green elf", PM_GREEN_ELF }, - { "grey elf", PM_GREY_ELF }, - { "gray elf", PM_GREY_ELF }, - { "elf lord", PM_ELF_LORD }, - { "olog hai", PM_OLOG_HAI }, - { "arch lich", PM_ARCH_LICH }, - { "archlich", PM_ARCH_LICH }, + { "ki rin", PM_KI_RIN, NEUTRAL }, + { "kirin", PM_KI_RIN, NEUTRAL }, + { "uruk hai", PM_URUK_HAI, NEUTRAL }, + { "orc captain", PM_ORC_CAPTAIN, NEUTRAL }, + { "woodland elf", PM_WOODLAND_ELF, NEUTRAL }, + { "green elf", PM_GREEN_ELF, NEUTRAL }, + { "grey elf", PM_GREY_ELF, NEUTRAL }, + { "gray elf", PM_GREY_ELF, NEUTRAL }, + { "elf lady", PM_ELF_NOBLE, FEMALE }, + { "elf lord", PM_ELF_NOBLE, MALE }, + { "elf noble", PM_ELF_NOBLE, NEUTRAL }, + { "olog hai", PM_OLOG_HAI, NEUTRAL }, + { "arch lich", PM_ARCH_LICH, NEUTRAL }, + { "archlich", PM_ARCH_LICH, NEUTRAL }, /* Some irregular plurals */ - { "incubi", PM_INCUBUS }, - { "succubi", PM_SUCCUBUS }, - { "violet fungi", PM_VIOLET_FUNGUS }, - { "homunculi", PM_HOMUNCULUS }, - { "baluchitheria", PM_BALUCHITHERIUM }, - { "lurkers above", PM_LURKER_ABOVE }, - { "cavemen", PM_CAVEMAN }, - { "cavewomen", PM_CAVEWOMAN }, - { "watchmen", PM_WATCHMAN }, - { "djinn", PM_DJINNI }, - { "mumakil", PM_MUMAK }, - { "erinyes", PM_ERINYS }, + { "incubi", PM_AMOROUS_DEMON, MALE }, + { "succubi", PM_AMOROUS_DEMON, FEMALE }, + { "violet fungi", PM_VIOLET_FUNGUS, NEUTRAL }, + { "homunculi", PM_HOMUNCULUS, NEUTRAL }, + { "baluchitheria", PM_BALUCHITHERIUM, NEUTRAL }, + { "lurkers above", PM_LURKER_ABOVE, NEUTRAL }, + { "cavemen", PM_CAVE_DWELLER, MALE }, + { "cavewomen", PM_CAVE_DWELLER, FEMALE }, + { "watchmen", PM_WATCHMAN, NEUTRAL }, + { "djinn", PM_DJINNI, NEUTRAL }, + { "mumakil", PM_MUMAK, NEUTRAL }, + { "erinyes", PM_ERINYS, NEUTRAL }, /* end of list */ - { 0, NON_PM } + { 0, NON_PM, NEUTRAL } }; register const struct alt_spl *namep; @@ -823,18 +829,28 @@ const char **remainder_p; && (!str[len] || str[len] == ' ' || str[len] == '\'')) { if (remainder_p) *remainder_p = in_str + (&str[len] - buf); + if (gender_name_var != (int *) 0) + *gender_name_var = namep->genderhint; return namep->pm_val; } } } for (len = 0, i = LOW_PM; i < NUMMONS; i++) { - register int m_i_len = (int) strlen(mons[i].mname); + for (mgend = MALE; mgend < NUM_MGENDERS; mgend++) { + int m_i_len; - if (m_i_len > len && !strncmpi(mons[i].mname, str, m_i_len)) { + if (!mons[i].pmnames[mgend]) + continue; + + m_i_len = (int) strlen(mons[i].pmnames[mgend]); + if (m_i_len > len && !strncmpi(mons[i].pmnames[mgend], str, m_i_len)) { if (m_i_len == slen) { mntmp = i; len = m_i_len; + if (gender_name_var != (int *) 0) + *gender_name_var = mgend; + exact_match = TRUE; break; /* exact match */ } else if (slen > m_i_len && (str[m_i_len] == ' ' @@ -850,6 +866,9 @@ const char **remainder_p; len = m_i_len; } } + } + if (exact_match) + break; } if (mntmp == NON_PM) mntmp = title_to_mon(str, (int *) 0, &len); @@ -868,8 +887,8 @@ int *mndx_p; /* Single letters are matched against def_monsyms[].sym; words or phrases are first matched against def_monsyms[].explain to check class description; if not found there, then against - mons[].mname to test individual monster types. Input can be a - substring of the full description or mname, but to be accepted, + mons[].pmnames[] to test individual monster types. Input can be a + substring of the full description or pmname, but to be accepted, such partial matches must start at beginning of a word. Some class descriptions include "foo or bar" and "foo or other foo" so we don't want to accept "or", "other", "or other" there. */ @@ -881,16 +900,16 @@ int *mndx_p; static NEARDATA const struct alt_spl truematch[] = { /* "long worm" won't match "worm" class but would accidentally match "long worm tail" class before the comparison with monster types */ - { "long worm", PM_LONG_WORM }, + { "long worm", PM_LONG_WORM, NEUTRAL }, /* matches wrong--or at least suboptimal--class */ - { "demon", -S_DEMON }, /* hits "imp or minor demon" */ + { "demon", -S_DEMON, NEUTRAL }, /* hits "imp or minor demon" */ /* matches specific monster (overly restrictive) */ - { "devil", -S_DEMON }, /* always "horned devil" */ + { "devil", -S_DEMON, NEUTRAL }, /* always "horned devil" */ /* some plausible guesses which need help */ - { "bug", -S_XAN }, /* would match bugbear... */ - { "fish", -S_EEL }, /* wouldn't match anything */ + { "bug", -S_XAN, NEUTRAL }, /* would match bugbear... */ + { "fish", -S_EEL, NEUTRAL }, /* wouldn't match anything */ /* end of list */ - { 0, NON_PM } + { 0, NON_PM, NEUTRAL} }; const char *p, *x; int i, len; @@ -941,7 +960,7 @@ int *mndx_p; return i; } /* check individual species names */ - i = name_to_mon(in_str); + i = name_to_mon(in_str, (int *) 0); if (i != NON_PM) { if (mndx_p) *mndx_p = i; @@ -1014,11 +1033,11 @@ static const short grownups[][2] = { { PM_PONY, PM_HORSE }, { PM_HORSE, PM_WARHORSE }, { PM_KOBOLD, PM_LARGE_KOBOLD }, - { PM_LARGE_KOBOLD, PM_KOBOLD_LORD }, - { PM_GNOME, PM_GNOME_LORD }, - { PM_GNOME_LORD, PM_GNOME_KING }, - { PM_DWARF, PM_DWARF_LORD }, - { PM_DWARF_LORD, PM_DWARF_KING }, + { PM_LARGE_KOBOLD, PM_KOBOLD_LEADER }, + { PM_GNOME, PM_GNOME_LEADER }, + { PM_GNOME_LEADER, PM_GNOME_RULER }, + { PM_DWARF, PM_DWARF_LEADER }, + { PM_DWARF_LEADER, PM_DWARF_RULER }, { PM_MIND_FLAYER, PM_MASTER_MIND_FLAYER }, { PM_ORC, PM_ORC_CAPTAIN }, { PM_HILL_ORC, PM_ORC_CAPTAIN }, @@ -1026,17 +1045,17 @@ static const short grownups[][2] = { { PM_URUK_HAI, PM_ORC_CAPTAIN }, { PM_SEWER_RAT, PM_GIANT_RAT }, { PM_CAVE_SPIDER, PM_GIANT_SPIDER }, - { PM_OGRE, PM_OGRE_LORD }, - { PM_OGRE_LORD, PM_OGRE_KING }, - { PM_ELF, PM_ELF_LORD }, - { PM_WOODLAND_ELF, PM_ELF_LORD }, - { PM_GREEN_ELF, PM_ELF_LORD }, - { PM_GREY_ELF, PM_ELF_LORD }, - { PM_ELF_LORD, PM_ELVENKING }, + { PM_OGRE, PM_OGRE_LEADER }, + { PM_OGRE_LEADER, PM_OGRE_TYRANT }, + { PM_ELF, PM_ELF_NOBLE }, + { PM_WOODLAND_ELF, PM_ELF_NOBLE }, + { PM_GREEN_ELF, PM_ELF_NOBLE }, + { PM_GREY_ELF, PM_ELF_NOBLE }, + { PM_ELF_NOBLE, PM_ELVENMONARCH }, { PM_LICH, PM_DEMILICH }, { PM_DEMILICH, PM_MASTER_LICH }, { PM_MASTER_LICH, PM_ARCH_LICH }, - { PM_VAMPIRE, PM_VAMPIRE_LORD }, + { PM_VAMPIRE, PM_VAMPIRE_LEADER }, { PM_BAT, PM_GIANT_BAT }, { PM_BABY_GRAY_DRAGON, PM_GRAY_DRAGON }, { PM_BABY_SILVER_DRAGON, PM_SILVER_DRAGON }, @@ -1063,11 +1082,11 @@ static const short grownups[][2] = { { PM_SERGEANT, PM_LIEUTENANT }, { PM_LIEUTENANT, PM_CAPTAIN }, { PM_WATCHMAN, PM_WATCH_CAPTAIN }, - { PM_ALIGNED_PRIEST, PM_HIGH_PRIEST }, + { PM_ALIGNED_CLERIC, PM_HIGH_CLERIC }, { PM_STUDENT, PM_ARCHEOLOGIST }, { PM_ATTENDANT, PM_HEALER }, { PM_PAGE, PM_KNIGHT }, - { PM_ACOLYTE, PM_PRIEST }, + { PM_ACOLYTE, PM_CLERIC }, { PM_APPRENTICE, PM_WIZARD }, { PM_MANES, PM_LEMURE }, { PM_KEYSTONE_KOP, PM_KOP_SERGEANT }, diff --git a/src/monst.c b/src/monst.c index 1955f37a0..2e44b5413 100644 --- a/src/monst.c +++ b/src/monst.c @@ -45,7 +45,13 @@ */ #define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col) \ { \ - nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, C(col) \ + {(const char *) 0, (const char *) 0, nam}, \ + sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, C(col) \ + } +#define MON3(namm, namf, namn, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col) \ + { \ + {namm, namf, namn}, \ + sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, C(col) \ } /* LVL() and SIZ() collect several fields to cut down on number of args * for MON() @@ -436,7 +442,8 @@ NEARDATA struct permonst mons_init[] = { NO_ATTK), SIZ(1250, 250, MS_GROWL, MZ_LARGE), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BROWN), - MON("dwarf lord", S_HUMANOID, LVL(4, 6, 10, 10, 5), (G_GENO | 2), + MON3("dwarf lord", "dwarf lady", "dwarf leader", + S_HUMANOID, LVL(4, 6, 10, 10, 5), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, @@ -444,12 +451,13 @@ NEARDATA struct permonst mons_init[] = { M2_DWARF | M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 6, CLR_BLUE), - MON("dwarf king", S_HUMANOID, LVL(6, 6, 10, 20, 6), (G_GENO | 1), + MON3("dwarf king", "dwarf queen", "dwarf ruler", + S_HUMANOID, LVL(6, 6, 10, 20, 6), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, - M2_DWARF | M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS + M2_DWARF | M2_STRONG | M2_PRINCE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 8, HI_LORD), MON("mind flayer", S_HUMANOID, LVL(9, 12, 5, 90, -8), (G_GENO | 1), @@ -547,12 +555,13 @@ NEARDATA struct permonst mons_init[] = { SIZ(450, 150, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 2, CLR_RED), - MON("kobold lord", S_KOBOLD, LVL(2, 6, 10, 0, -4), (G_GENO | 1), + MON3("kobold lord", "kobold lady", "kobold leader", + S_KOBOLD, LVL(2, 6, 10, 0, -4), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 200, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, - M2_HOSTILE | M2_LORD | M2_MALE | M2_COLLECT, + M2_HOSTILE | M2_LORD | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 3, HI_LORD), MON("kobold shaman", S_KOBOLD, LVL(2, 6, 6, 10, -4), (G_GENO | 1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -1359,22 +1368,24 @@ NEARDATA struct permonst mons_init[] = { SIZ(650, 100, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_GNOME | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 3, CLR_BROWN), - MON("gnome lord", S_GNOME, LVL(3, 8, 10, 4, 0), (G_GENO | 2), + MON3("gnome lord", "gnome lady", "gnome leader", + S_GNOME, LVL(3, 8, 10, 4, 0), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(700, 120, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_GNOME | M2_LORD | M2_MALE | M2_COLLECT, + M2_GNOME | M2_LORD | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_BLUE), MON("gnomish wizard", S_GNOME, LVL(3, 10, 4, 10, 0), (G_GENO | 1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(700, 120, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, 5, HI_ZAP), - MON("gnome king", S_GNOME, LVL(5, 10, 10, 20, 0), (G_GENO | 1), + MON3("gnome king", "gnome queen", "gnome ruler", + S_GNOME, LVL(5, 10, 10, 20, 0), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(750, 150, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_GNOME | M2_PRINCE | M2_MALE | M2_COLLECT, + M2_GNOME | M2_PRINCE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 6, HI_LORD), #ifdef SPLITMON_1 }; @@ -1681,17 +1692,19 @@ struct permonst _mons2[] = { SIZ(1600, 500, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 7, CLR_BROWN), - MON("ogre lord", S_OGRE, LVL(7, 12, 3, 30, -5), (G_GENO | 2), + MON3("ogre lord", "ogre conqueress", "ogre leader", + S_OGRE, LVL(7, 12, 3, 30, -5), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 700, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, - M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, + M2_STRONG | M2_LORD | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 9, CLR_RED), - MON("ogre king", S_OGRE, LVL(9, 14, 4, 60, -7), (G_GENO | 2), + MON3("ogre king", "ogre queen", "ogre tyrant", + S_OGRE, LVL(9, 14, 4, 60, -7), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 3, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 750, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, - M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, + M2_STRONG | M2_PRINCE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 11, HI_LORD), /* * Puddings @@ -1871,14 +1884,15 @@ struct permonst _mons2[] = { M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_SHAPESHIFTER, M3_INFRAVISIBLE, 12, CLR_RED), - MON("vampire lord", S_VAMPIRE, LVL(12, 14, 0, 50, -9), + MON3("vampire lord", "vampire lady", "vampire leader", + S_VAMPIRE, LVL(12, 14, 0, 50, -9), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_BITE, AD_DRLI, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP | MR_POISON, 0, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD - | M2_MALE | M2_SHAPESHIFTER, + | M2_SHAPESHIFTER, M3_INFRAVISIBLE, 14, CLR_BLUE), #if 0 /* DEFERRED */ MON("vampire mage", S_VAMPIRE, @@ -2187,19 +2201,21 @@ struct permonst _mons2[] = { SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), - MON("elf-lord", S_HUMAN, LVL(8, 12, 10, 20, -9), (G_GENO | G_SGROUP | 2), + MON3("elf-lord", "elf-queen", "elf-noble", + S_HUMAN, LVL(8, 12, 10, 20, -9), (G_GENO | G_SGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, - M2_ELF | M2_STRONG | M2_LORD | M2_MALE | M2_COLLECT, + M2_ELF | M2_STRONG | M2_LORD | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_BRIGHT_BLUE), - MON("Elvenking", S_HUMAN, LVL(9, 12, 10, 25, -10), (G_GENO | 1), + MON3("Elvenking", "Elvenqueen", "Elvenmonarch", + S_HUMAN, LVL(9, 12, 10, 25, -10), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, - M2_ELF | M2_STRONG | M2_PRINCE | M2_MALE | M2_COLLECT, + M2_ELF | M2_STRONG | M2_PRINCE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 11, HI_LORD), MON("doppelganger", S_HUMAN, LVL(9, 12, 5, 20, 0), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 12), @@ -2242,7 +2258,8 @@ struct permonst _mons2[] = { /* aligned priests always have the epri extension attached; individual instantiations should always have either ispriest or isminion set */ - MON("aligned priest", S_HUMAN, LVL(12, 12, 10, 50, 0), G_NOGEN, + MON3("priest", "priestess", "aligned cleric", + S_HUMAN, LVL(12, 12, 10, 50, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 1, 4), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_PRIEST, MZ_HUMAN), MR_ELEC, 0, @@ -2250,7 +2267,8 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_HUMAN | M2_LORD | M2_PEACEFUL | M2_COLLECT, M3_INFRAVISIBLE, 15, CLR_WHITE), /* high priests always have epri and always have ispriest set */ - MON("high priest", S_HUMAN, LVL(25, 15, 7, 70, 0), (G_NOGEN | G_UNIQ), + MON3("high priest", "high priestess", "high cleric", + S_HUMAN, LVL(25, 15, 7, 70, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, NO_ATTK), @@ -2392,10 +2410,12 @@ struct permonst _mons2[] = { #define SEDUCTION_ATTACKS_NO \ A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), \ ATTK(AT_BITE, AD_DRLI, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK) - MON("succubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1), + /* incubus and succubus */ + MON3("incubus", "succubus", "Amorous Demon", + S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1), SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS, - M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE, + M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), MON("horned devil", S_DEMON, LVL(6, 9, -5, 50, 11), (G_HELL | G_NOCORPSE | 2), @@ -2405,11 +2425,6 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_POIS | M1_THICK_HIDE, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, 9, CLR_BROWN), - MON("incubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1), - SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), - MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS, - M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE, - M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), /* Used by AD&D for a type of demon, originally one of the Furies and spelled this way */ MON("erinys", S_DEMON, LVL(7, 12, 2, 30, 10), @@ -2757,19 +2772,13 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, 12, HI_DOMESTIC), - MON("caveman", S_HUMAN, LVL(10, 12, 10, 0, 1), G_NOGEN, + MON3("caveman", "cavewoman", "cave dweller", + S_HUMAN, LVL(10, 12, 10, 0, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, 12, HI_DOMESTIC), - MON("cavewoman", S_HUMAN, LVL(10, 12, 10, 0, 1), G_NOGEN, - A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), - SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, - M1_HUMANOID | M1_OMNIVORE, - M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, + M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("healer", S_HUMAN, LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -2792,19 +2801,13 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT | M2_MALE, M3_INFRAVISIBLE, 11, HI_DOMESTIC), - MON("priest", S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, + MON3("priest", "priestess", "cleric", + S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, 12, HI_DOMESTIC), - MON("priestess", S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, - A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), - SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, - M1_HUMANOID | M1_OMNIVORE, - M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, + M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("ranger", S_HUMAN, LVL(10, 12, 10, 2, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, diff --git a/src/mplayer.c b/src/mplayer.c index 80b995b5d..78f8f84f3 100644 --- a/src/mplayer.c +++ b/src/mplayer.c @@ -53,7 +53,8 @@ dev_name() for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { if (!is_mplayer(mtmp->data)) continue; - if (!strncmp(developers[i], (has_mname(mtmp)) ? MNAME(mtmp) : "", + if (!strncmp(developers[i], + (has_mgivenname(mtmp)) ? MGIVENNAME(mtmp) : "", strlen(developers[i]))) { match = TRUE; break; @@ -176,8 +177,7 @@ register boolean special; if (helm == HELM_OF_BRILLIANCE) helm = STRANGE_OBJECT; break; - case PM_CAVEMAN: - case PM_CAVEWOMAN: + case PM_CAVE_DWELLER: if (rn2(4)) weapon = MACE; else if (rn2(2)) @@ -208,8 +208,7 @@ register boolean special; if (rn2(2)) shield = STRANGE_OBJECT; break; - case PM_PRIEST: - case PM_PRIESTESS: + case PM_CLERIC: if (rn2(2)) weapon = MACE; if (rn2(2)) diff --git a/src/mthrowu.c b/src/mthrowu.c index c5064e37d..bba8fd939 100644 --- a/src/mthrowu.c +++ b/src/mthrowu.c @@ -345,7 +345,8 @@ boolean verbose; /* give message(s) even when you can't see what happened */ if (vis) { if (otmp->otyp == EGG) pline("Splat! %s is hit with %s egg!", Monnam(mtmp), - otmp->known ? an(mons[otmp->corpsenm].mname) : "an"); + otmp->known ? an(mons[otmp->corpsenm].pmnames[NEUTRAL]) + : "an"); else hit(distant_name(otmp, mshot_xname), mtmp, exclam(damage)); } else if (verbose && !g.mtarget) diff --git a/src/muse.c b/src/muse.c index a9fadee8b..91aaa9c8e 100644 --- a/src/muse.c +++ b/src/muse.c @@ -241,7 +241,7 @@ struct obj *otmp; saverole = Role_switch; if (!vismon) { otmp->bknown = 0; - if (Role_if(PM_PRIEST)) + if (Role_if(PM_CLERIC)) Role_switch = 0; } Strcpy(onambuf, singular(otmp, doname)); @@ -2889,7 +2889,9 @@ struct monst *mon; return (ptr->mcolor == CLR_GREEN || ptr->mcolor == CLR_BRIGHT_GREEN); #endif /* approximation */ - if (strstri(ptr->mname, "green")) + if (strstri(ptr->pmnames[NEUTRAL], "green") + || (ptr->pmnames[MALE] && strstri(ptr->pmnames[MALE], "green")) + || (ptr->pmnames[FEMALE] && strstri(ptr->pmnames[FEMALE], "green"))) return TRUE; switch (monsndx(ptr)) { case PM_FOREST_CENTAUR: diff --git a/src/music.c b/src/music.c index dd84b98c6..3dc60efc3 100644 --- a/src/music.c +++ b/src/music.c @@ -387,7 +387,7 @@ int force; You("destroy %s!", mtmp->mtame ? x_monnam(mtmp, ARTICLE_THE, "poor", - has_mname(mtmp) + has_mgivenname(mtmp) ? SUPPRESS_SADDLE : 0, FALSE) : mon_nam(mtmp)); diff --git a/src/nhlobj.c b/src/nhlobj.c index ca9567d8d..03e07401d 100644 --- a/src/nhlobj.c +++ b/src/nhlobj.c @@ -318,7 +318,8 @@ lua_State *L; if (obj->corpsenm != NON_PM && (obj->otyp == TIN || obj->otyp == CORPSE || obj->otyp == EGG || obj->otyp == FIGURINE || obj->otyp == STATUE)) - nhl_add_table_entry_str(L, "corpsenm_name", mons[obj->corpsenm].mname); + nhl_add_table_entry_str(L, "corpsenm_name", + mons[obj->corpsenm].pmnames[NEUTRAL]); /* TODO: leashmon, fromsink, novelidx, record_achieve_special */ nhl_add_table_entry_int(L, "usecount", obj->usecount); /* TODO: spestudied */ diff --git a/src/objnam.c b/src/objnam.c index a99523ef5..2330fa4dc 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -24,7 +24,7 @@ struct _readobjnam_data { int eroded, eroded2, erodeproof, locked, unlocked, broken, real, fake; int halfeaten, mntmp, contents; int islit, unlabeled, ishistoric, isdiluted, trapped; - int tmp, tinv, tvariety; + int tmp, tinv, tvariety, mgend; int wetness, gsize; int ftype; struct obj *otmp; @@ -471,7 +471,7 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */ obj->known = 0; if (!Blind && !g.distantname) obj->dknown = 1; - if (Role_if(PM_PRIEST)) + if (Role_if(PM_CLERIC)) obj->bknown = 1; /* actively avoid set_bknown(); * we mustn't call update_inventory() now because * it would call xname() (via doname()) recursively @@ -528,8 +528,8 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */ char anbuf[10]; /* [4] would be enough: 'a','n',' ','\0' */ Sprintf(eos(buf), " of %s%s", - just_an(anbuf, mons[omndx].mname), - mons[omndx].mname); + just_an(anbuf, mons[omndx].pmnames[NEUTRAL]), + mons[omndx].pmnames[NEUTRAL]); } else if (is_wet_towel(obj)) { if (wizard) Sprintf(eos(buf), " (%d)", obj->spe); @@ -617,6 +617,7 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */ case ROCK_CLASS: if (typ == STATUE && omndx != NON_PM) { char anbuf[10]; + int mgend = (obj->spe & STATUE_FEMALE) ? FEMALE : MALE; Sprintf(buf, "%s%s of %s%s", (Role_if(PM_ARCHEOLOGIST) && (obj->spe & STATUE_HISTORIC)) @@ -627,8 +628,8 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */ ? "" : the_unique_pm(&mons[omndx]) ? "the " - : just_an(anbuf, mons[omndx].mname), - mons[omndx].mname); + : just_an(anbuf, pmname(&mons[omndx], mgend)), + pmname(&mons[omndx], mgend)); } else Strcpy(buf, actualn); break; @@ -822,7 +823,7 @@ struct obj *obj; bufp = distant_name(&bareobj, xname); /* xname(&bareobj) */ if (!strncmp(bufp, "uncursed ", 9)) - bufp += 9; /* Role_if(PM_PRIEST) */ + bufp += 9; /* Role_if(PM_CLERIC) */ objects[otyp].oc_uname = saveobcls.oc_uname; objects[otyp].oc_name_known = saveobcls.oc_name_known; @@ -878,7 +879,7 @@ struct permonst *ptr; /* high priest is unique if it includes "of ", otherwise not (caller needs to handle the 1st possibility; we assume the 2nd); worm tail should be irrelevant but is included for completeness */ - if (ptr == &mons[PM_HIGH_PRIEST] || ptr == &mons[PM_LONG_WORM_TAIL]) + if (ptr == &mons[PM_HIGH_CLERIC] || ptr == &mons[PM_LONG_WORM_TAIL]) uniq = FALSE; /* Wizard no longer needs this; he's flagged as unique these days */ if (ptr == &mons[PM_WIZARD_OF_YENDOR]) @@ -1062,7 +1063,7 @@ unsigned doname_flags; #endif && obj->otyp != FAKE_AMULET_OF_YENDOR && obj->otyp != AMULET_OF_YENDOR - && !Role_if(PM_PRIEST))) + && !Role_if(PM_CLERIC))) Strcat(prefix, "uncursed "); } @@ -1200,7 +1201,7 @@ unsigned doname_flags; #endif if (omndx >= LOW_PM && (known || (g.mvitals[omndx].mvflags & MV_KNOWS_EGG))) { - Strcat(prefix, mons[omndx].mname); + Strcat(prefix, mons[omndx].pmnames[NEUTRAL]); Strcat(prefix, " "); if (obj->spe == 1) Strcat(bp, " (laid by you)"); @@ -1433,21 +1434,21 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */ omit_corpse = (cxn_flags & CXN_NOCORPSE) != 0, possessive = FALSE, glob = (otmp->otyp != CORPSE && otmp->globby); - const char *mname; + const char *mnam; if (glob) { - mname = OBJ_NAME(objects[otmp->otyp]); /* "glob of " */ + mnam = OBJ_NAME(objects[otmp->otyp]); /* "glob of " */ } else if (omndx == NON_PM) { /* paranoia */ - mname = "thing"; + mnam = "thing"; /* [Possible enhancement: check whether corpse has monster traits attached in order to use priestname() for priests and minions.] */ - } else if (omndx == PM_ALIGNED_PRIEST) { + } else if (omndx == PM_ALIGNED_CLERIC) { /* avoid "aligned priest"; it just exposes internal details */ - mname = "priest"; + mnam = "priest"; } else { - mname = mons[omndx].mname; + mnam = mons[omndx].pmnames[NEUTRAL]; if (the_unique_pm(&mons[omndx]) || type_is_pname(&mons[omndx])) { - mname = s_suffix(mname); + mnam = s_suffix(mnam); possessive = TRUE; /* don't precede personal name like "Medusa" with an article */ if (type_is_pname(&mons[omndx])) @@ -1473,13 +1474,13 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */ if (!adjective || !*adjective) { /* normal case: newt corpse */ - Strcat(nambuf, mname); + Strcat(nambuf, mnam); } else { /* adjective positioning depends upon format of monster name */ if (possessive) /* Medusa's cursed partly eaten corpse */ - Sprintf(eos(nambuf), "%s %s", mname, adjective); + Sprintf(eos(nambuf), "%s %s", mnam, adjective); else /* cursed partly eaten troll corpse */ - Sprintf(eos(nambuf), "%s %s", adjective, mname); + Sprintf(eos(nambuf), "%s %s", adjective, mnam); /* in case adjective has a trailing space, squeeze it out */ mungspaces(nambuf); /* doname() might include a count in the adjective argument; @@ -3270,6 +3271,7 @@ struct _readobjnam_data *d; = d->ishistoric = d->isdiluted = d->trapped = d->locked = d->unlocked = d->broken = d->real = d->fake = 0; d->tvariety = RANDOM_TIN; + d->mgend = MALE; d->mntmp = NON_PM; d->contents = UNDEFINED; d->oclass = 0; @@ -3597,7 +3599,8 @@ struct _readobjnam_data *d; || !strcmpi(d->bp, "globs") || !BSTRCMPI(d->bp, d->bp + i - 6, " globs") || (d->p = strstri(d->bp, "glob of ")) != 0 || (d->p = strstri(d->bp, "globs of ")) != 0) { - d->mntmp = name_to_mon(!d->p ? d->bp : (strstri(d->p, " of ") + 4)); + d->mntmp = name_to_mon(!d->p ? d->bp + : (strstri(d->p, " of ") + 4), (int *) 0); /* if we didn't recognize monster type, pick a valid one at random */ if (d->mntmp == NON_PM) d->mntmp = rn1(PM_BLACK_PUDDING - PM_GRAY_OOZE, PM_GRAY_OOZE); @@ -3605,7 +3608,7 @@ struct _readobjnam_data *d; variant (grey ooze) or player used inverted syntax ( glob); if player has given a valid monster type but not valid glob type, object name lookup won't find it and wish attempt will fail */ - Sprintf(d->globbuf, "glob of %s", mons[d->mntmp].mname); + Sprintf(d->globbuf, "glob of %s", mons[d->mntmp].pmnames[NEUTRAL]); d->bp = d->globbuf; d->mntmp = NON_PM; /* not useful for "glob of " object lookup */ d->cnt = 0; /* globs don't stack */ @@ -3631,12 +3634,13 @@ struct _readobjnam_data *d; } else { d->tmp = tin_variety_txt(d->p + 7, &d->tinv); d->tvariety = d->tinv; - d->mntmp = name_to_mon(d->p + 7 + d->tmp); + d->mntmp = name_to_mon(d->p + 7 + d->tmp, &d->mgend); } d->typ = TIN; return 2; /*goto typfnd;*/ } else if ((d->p = strstri(d->bp, " of ")) != 0 - && (d->mntmp = name_to_mon(d->p + 4)) >= LOW_PM) + && (d->mntmp = name_to_mon(d->p + 4, + &d->mgend)) >= LOW_PM) *d->p = 0; } } @@ -3649,7 +3653,8 @@ struct _readobjnam_data *d; const char *rest = 0; if (d->mntmp < LOW_PM && strlen(d->bp) > 2 - && (d->mntmp = name_to_monplus(d->bp, &rest)) >= LOW_PM) { + && (d->mntmp = name_to_monplus(d->bp, &rest, + &d->mgend)) >= LOW_PM) { char *obp = d->bp; /* 'rest' is a pointer past the matching portion; if that was @@ -4280,8 +4285,11 @@ struct obj *no_wish; case LARGE_BOX: case HEAVY_IRON_BALL: case IRON_CHAIN: + break; case STATUE: /* otmp->cobj already done in mksobj() */ + if (d.mgend) + d.otmp->spe |= STATUE_FEMALE; break; #ifdef MAIL_STRUCTURES /* scroll of mail: 0: delivered in-game via external event (or randomly @@ -4355,7 +4363,7 @@ struct obj *no_wish; d.otmp->corpsenm = d.mntmp; if (Has_contents(d.otmp) && verysmall(&mons[d.mntmp])) delete_contents(d.otmp); /* no spellbook */ - d.otmp->spe = d.ishistoric ? STATUE_HISTORIC : 0; + d.otmp->spe |= d.ishistoric ? STATUE_HISTORIC : 0; break; case SCALE_MAIL: /* Dragon mail - depends on the order of objects & dragons. */ diff --git a/src/options.c b/src/options.c index ed0101c4b..d58c4e1f0 100644 --- a/src/options.c +++ b/src/options.c @@ -7376,13 +7376,13 @@ struct fruit *replace_fruit; || !strncmp(g.pl_fruit, "partly eaten ", 13) || (!strncmp(g.pl_fruit, "tin of ", 7) && (!strcmp(g.pl_fruit + 7, "spinach") - || name_to_mon(g.pl_fruit + 7) >= LOW_PM)) + || name_to_mon(g.pl_fruit + 7, (int *) 0) >= LOW_PM)) || !strcmp(g.pl_fruit, "empty tin") || (!strcmp(g.pl_fruit, "glob") || (globpfx > 0 && !strcmp("glob", &g.pl_fruit[globpfx]))) || ((str_end_is(g.pl_fruit, " corpse") || str_end_is(g.pl_fruit, " egg")) - && name_to_mon(g.pl_fruit) >= LOW_PM)) { + && name_to_mon(g.pl_fruit, (int *) 0) >= LOW_PM)) { Strcpy(buf, g.pl_fruit); Strcpy(g.pl_fruit, "candied "); nmcpy(g.pl_fruit + 8, buf, PL_FSIZ - 8); diff --git a/src/pager.c b/src/pager.c index b573bb4aa..197cd4b3c 100644 --- a/src/pager.c +++ b/src/pager.c @@ -89,7 +89,7 @@ char *outbuf; Sprintf(outbuf, "%s%s%s called %s", /* being blinded may hide invisibility from self */ (Invis && (senseself() || !Blind)) ? "invisible " : "", race, - mons[u.umonnum].mname, g.plname); + pmname(&mons[u.umonnum], Ugender), g.plname); if (u.usteed) Sprintf(eos(outbuf), ", mounted on %s", y_monnam(u.usteed)); if (u.uundetected || (Upolyd && U_AP_TYPE)) @@ -167,7 +167,7 @@ char *outbuf; } else if (M_AP_TYPE(mon) == M_AP_MONSTER) { if (altmon) Sprintf(outbuf, ", masquerading as %s", - an(mons[mon->mappearance].mname)); + an(pmname(&mons[mon->mappearance], Mgender(mon)))); } else if (isyou ? u.uundetected : mon->mundetected) { Strcpy(outbuf, ", hiding"); if (hides_under(mon->data)) { @@ -403,7 +403,7 @@ int x, y; : (mW & M2_ELF & m2) ? "elf" : (mW & M2_ORC & m2) ? "orc" : (mW & M2_DEMON & m2) ? "demon" - : mtmp->data->mname); + : pmname(mtmp->data, Mgender(mtmp))); Sprintf(eos(monbuf), "warned of %s", makeplural(whom)); } @@ -616,7 +616,7 @@ char *supplemental_name; * user_typed_name and picked name. */ if (pm != (struct permonst *) 0 && !user_typed_name) - dbase_str = strcpy(newstr, pm->mname); + dbase_str = strcpy(newstr, pm->pmnames[NEUTRAL]); else dbase_str = strcpy(newstr, inp); (void) lcase(dbase_str); @@ -893,15 +893,14 @@ struct permonst **for_supplement; hallucinate = (Hallucination && !g.program_state.gameover); const char *x_str; nhsym tmpsym; + unsigned glyphmod[NUM_GLYPHMOD]; gobbledygook[0] = '\0'; /* no hallucinatory liquid (yet) */ if (looked) { - int oc; - unsigned os; - glyph = glyph_at(cc.x, cc.y); /* Convert glyph at selected position to a symbol for use below. */ - (void) mapglyph(glyph, &sym, &oc, &os, cc.x, cc.y, 0); + map_glyphmod(cc.x, cc.y, glyph, 0, glyphmod); + sym = glyphmod[GM_TTYCHAR]; Sprintf(prefix, "%s ", encglyph(glyph)); } else @@ -1154,12 +1153,9 @@ struct permonst **for_supplement; break; case SYM_PET_OVERRIDE + SYM_OFF_X: if (looked) { - int oc = 0; - unsigned os = 0; - /* convert to symbol without override in effect */ - (void) mapglyph(glyph, &sym, &oc, &os, - cc.x, cc.y, MG_FLAG_NOOVERRIDE); + map_glyphmod(cc.x, cc.y, glyph, MG_FLAG_NOOVERRIDE, glyphmod); + sym = (int) glyphmod[GM_TTYCHAR]; goto check_monsters; } break; diff --git a/src/pickup.c b/src/pickup.c index a8d7f3d88..f271d4c17 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -484,7 +484,7 @@ struct obj *obj; ? TRUE : FALSE) : TRUE; /* catchall: no filters specified, so accept */ - if (Role_if(PM_PRIEST) && !obj->bknown) + if (Role_if(PM_CLERIC) && !obj->bknown) set_bknown(obj, 1); /* diff --git a/src/polyself.c b/src/polyself.c index ccc076076..3d898ec66 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -263,10 +263,13 @@ change_sex() : g.urole.malenum; if (!already_polyd) { u.umonnum = u.umonster; - } else if (u.umonnum == PM_SUCCUBUS || u.umonnum == PM_INCUBUS) { + } else if (u.umonnum == PM_AMOROUS_DEMON) { flags.female = !flags.female; - /* change monster type to match new sex */ +#if 0 + /* change monster type to match new sex; disabled with PM_AMOROUS_DEMON */ + u.umonnum = (u.umonnum == PM_SUCCUBUS) ? PM_INCUBUS : PM_SUCCUBUS; +#endif set_uasmon(); } } @@ -394,7 +397,7 @@ polyself(psflags) int psflags; { char buf[BUFSZ] = DUMMY; - int old_light, new_light, mntmp, class, tryct; + int old_light, new_light, mntmp, class, tryct, gvariant = NEUTRAL; boolean forcecontrol = (psflags == 1), monsterpoly = (psflags == 2), formrevert = (psflags == 3), @@ -449,7 +452,7 @@ int psflags; continue; /* end do-while(--tryct > 0) loop */ } class = 0; - mntmp = name_to_mon(buf); + mntmp = name_to_mon(buf, &gvariant); if (mntmp < LOW_PM) { by_class: class = name_to_monclass(buf, &mntmp); @@ -489,7 +492,7 @@ int psflags; 0 and trigger thats_enough_tries message */ ++tryct; } - pm_name = mons[mntmp].mname; + pm_name = pmname(&mons[mntmp], flags.female ? FEMALE : MALE); if (the_unique_pm(&mons[mntmp])) pm_name = the(pm_name); else if (!type_is_pname(&mons[mntmp])) @@ -552,7 +555,7 @@ int psflags; } else if (isvamp) { do_vampyr: if (mntmp < LOW_PM || (mons[mntmp].geno & G_UNIQ)) { - mntmp = (g.youmonst.data == &mons[PM_VAMPIRE_LORD] && !rn2(10)) + mntmp = (g.youmonst.data == &mons[PM_VAMPIRE_LEADER] && !rn2(10)) ? PM_WOLF : !rn2(4) ? PM_FOG_CLOUD : PM_VAMPIRE_BAT; if (g.youmonst.cham >= LOW_PM @@ -560,7 +563,8 @@ int psflags; mntmp = g.youmonst.cham; } if (controllable_poly) { - Sprintf(buf, "Become %s?", an(mons[mntmp].mname)); + Sprintf(buf, "Become %s?", + an(pmname(&mons[mntmp], gvariant))); if (yn(buf) != 'y') return; } @@ -622,7 +626,8 @@ int mntmp; int mlvl; if (g.mvitals[mntmp].mvflags & G_GENOD) { /* allow G_EXTINCT */ - You_feel("rather %s-ish.", mons[mntmp].mname); + You_feel("rather %s-ish.", + pmname(&mons[mntmp], flags.female ? FEMALE : MALE)); exercise(A_WIS, TRUE); return 0; } @@ -676,7 +681,7 @@ int mntmp; Strcat(buf, (is_male(&mons[mntmp]) || is_female(&mons[mntmp])) ? "" : flags.female ? "female " : "male "); } - Strcat(buf, mons[mntmp].mname); + Strcat(buf, pmname(&mons[mntmp], flags.female ? FEMALE : MALE)); You("%s %s!", (u.umonnum != mntmp) ? "turn into" : "feel like", an(buf)); if (Stoned && poly_when_stoned(&mons[mntmp])) { @@ -774,7 +779,8 @@ int mntmp; if (touch_petrifies(u.usteed->data) && !Stone_resistance && rnl(3)) { pline("%s touch %s.", no_longer_petrify_resistant, mon_nam(u.usteed)); - Sprintf(buf, "riding %s", an(u.usteed->data->mname)); + Sprintf(buf, "riding %s", + an(pmname(u.usteed->data, Mgender(u.usteed)))); instapetrify(buf); } if (!can_ride(u.usteed)) @@ -1576,7 +1582,8 @@ dopoly() if (is_vampire(g.youmonst.data) || is_vampshifter(&g.youmonst)) { polyself(2); if (savedat != g.youmonst.data) { - You("transform into %s.", an(g.youmonst.data->mname)); + You("transform into %s.", + an(pmname(g.youmonst.data, Ugender))); newsym(u.ux, u.uy); } } @@ -1764,7 +1771,7 @@ int part; if ((part == HAND || part == HANDED) && (humanoid(mptr) && attacktype(mptr, AT_CLAW) && !index(not_claws, mptr->mlet) && mptr != &mons[PM_STONE_GOLEM] - && mptr != &mons[PM_INCUBUS] && mptr != &mons[PM_SUCCUBUS])) + && mptr != &mons[PM_AMOROUS_DEMON])) return (part == HAND) ? "claw" : "clawed"; if ((mptr == &mons[PM_MUMAK] || mptr == &mons[PM_MASTODON]) && part == NOSE) @@ -1926,7 +1933,7 @@ polysense() warnidx = PM_SHRIEKER; break; case PM_VAMPIRE: - case PM_VAMPIRE_LORD: + case PM_VAMPIRE_LEADER: g.context.warntype.polyd = M2_HUMAN | M2_ELF; HWarn_of_mon |= FROMRACE; return; diff --git a/src/potion.c b/src/potion.c index bf2f2becd..4d3265c0d 100644 --- a/src/potion.c +++ b/src/potion.c @@ -660,7 +660,7 @@ register struct obj *otmp; exercise(A_CON, FALSE); if (u.ulycn >= LOW_PM) { Your("affinity to %s disappears!", - makeplural(mons[u.ulycn].mname)); + makeplural(mons[u.ulycn].pmnames[NEUTRAL])); if (g.youmonst.data == &mons[u.ulycn]) you_unwere(FALSE); set_ulycn(NON_PM); /* cure lycanthropy */ diff --git a/src/pray.c b/src/pray.c index f6ce19b1a..fa95503ae 100644 --- a/src/pray.c +++ b/src/pray.c @@ -1979,7 +1979,7 @@ doturn() const char *Gname; int once, range, xlev; - if (!Role_if(PM_PRIEST) && !Role_if(PM_KNIGHT)) { + if (!Role_if(PM_CLERIC) && !Role_if(PM_KNIGHT)) { /* Try to use the "turn undead" spell. * * This used to be based on whether hero knows the name of the diff --git a/src/priest.c b/src/priest.c index 3b0c6c1e5..354cbc5a4 100644 --- a/src/priest.c +++ b/src/priest.c @@ -233,7 +233,7 @@ boolean sanctum; /* is it the seat of the high priest? */ struct obj *otmp; int cnt; int px = 0, py = 0, i, si = rn2(8); - struct permonst *prim = &mons[sanctum ? PM_HIGH_PRIEST : PM_ALIGNED_PRIEST]; + struct permonst *prim = &mons[sanctum ? PM_HIGH_CLERIC : PM_ALIGNED_CLERIC]; for (i = 0; i < 8; i++) { px = sx + xdir[(i+si) % 8]; @@ -310,10 +310,11 @@ register struct monst *mon; char *pname; /* caller-supplied output buffer */ { boolean do_hallu = Hallucination, - aligned_priest = mon->data == &mons[PM_ALIGNED_PRIEST], - high_priest = mon->data == &mons[PM_HIGH_PRIEST]; + aligned_priest = mon->data == &mons[PM_ALIGNED_CLERIC], + high_priest = mon->data == &mons[PM_HIGH_CLERIC]; char whatcode = '\0'; - const char *what = do_hallu ? rndmonnam(&whatcode) : mon->data->mname; + const char *what = do_hallu ? rndmonnam(&whatcode) + : pmname(mon->data, Mgender(mon)); if (!mon->ispriest && !mon->isminion) /* should never happen... */ return strcpy(pname, what); /* caller must be confused */ @@ -416,7 +417,7 @@ int roomno; epri_p = EPRI(priest); shrined = has_shrine(priest); - sanctum = (priest->data == &mons[PM_HIGH_PRIEST] + sanctum = (priest->data == &mons[PM_HIGH_CLERIC] && (Is_sanctum(&u.uz) || In_endgame(&u.uz))); can_speak = (priest->mcanmove && !priest->msleeping); if (can_speak && !Deaf && g.moves >= epri_p->intone_time) { @@ -668,7 +669,7 @@ boolean peaceful; register boolean coaligned = (u.ualign.type == alignment); #if 0 /* this was due to permonst's pxlth field which is now gone */ - if (ptr != &mons[PM_ALIGNED_PRIEST] && ptr != &mons[PM_ANGEL]) + if (ptr != &mons[PM_ALIGNED_CLERIC] && ptr != &mons[PM_ANGEL]) return (struct monst *) 0; #endif @@ -697,7 +698,7 @@ register struct monst *roamer; { if (!roamer->isminion) return; - if (roamer->data != &mons[PM_ALIGNED_PRIEST] + if (roamer->data != &mons[PM_ALIGNED_CLERIC] && roamer->data != &mons[PM_ANGEL]) return; diff --git a/src/questpgr.c b/src/questpgr.c index bfae12d0c..2a52de0f1 100644 --- a/src/questpgr.c +++ b/src/questpgr.c @@ -52,7 +52,7 @@ ldrname() int i = g.urole.ldrnum; Sprintf(g.nambuf, "%s%s", type_is_pname(&mons[i]) ? "" : "the ", - mons[i].mname); + mons[i].pmnames[NEUTRAL]); return g.nambuf; } @@ -129,7 +129,7 @@ neminame() int i = g.urole.neminum; Sprintf(g.nambuf, "%s%s", type_is_pname(&mons[i]) ? "" : "the ", - mons[i].mname); + mons[i].pmnames[NEUTRAL]); return g.nambuf; } @@ -138,7 +138,7 @@ guardname() /* return your role leader's guard monster name */ { int i = g.urole.guardnum; - return mons[i].mname; + return mons[i].pmnames[NEUTRAL]; } static const char * diff --git a/src/read.c b/src/read.c index 30809567e..e32dcdfbc 100644 --- a/src/read.c +++ b/src/read.c @@ -2059,7 +2059,7 @@ do_class_genocide() return; class = name_to_monclass(buf, (int *) 0); - if (class == 0 && (i = name_to_mon(buf)) != NON_PM) + if (class == 0 && (i = name_to_mon(buf, (int *) 0)) != NON_PM) class = mons[i].mlet; immunecnt = gonecnt = goodcnt = 0; for (i = LOW_PM; i < NUMMONS; i++) { @@ -2101,7 +2101,7 @@ do_class_genocide() if (mons[i].mlet == class) { char nam[BUFSZ]; - Strcpy(nam, makeplural(mons[i].mname)); + Strcpy(nam, makeplural(mons[i].pmnames[NEUTRAL])); /* Although "genus" is Latin for race, the hero benefits * from both race and role; thus genocide affects either. */ @@ -2165,12 +2165,12 @@ do_class_genocide() named = type_is_pname(&mons[i]) ? TRUE : FALSE; uniq = (mons[i].geno & G_UNIQ) ? TRUE : FALSE; /* one special case */ - if (i == PM_HIGH_PRIEST) + if (i == PM_HIGH_CLERIC) uniq = FALSE; You("aren't permitted to genocide %s%s.", (uniq && !named) ? "the " : "", - (uniq || named) ? mons[i].mname : nam); + (uniq || named) ? mons[i].pmnames[NEUTRAL] : nam); } } } @@ -2205,7 +2205,7 @@ int how; if (how & PLAYER) { mndx = u.umonster; /* non-polymorphed mon num */ ptr = &mons[mndx]; - Strcpy(buf, ptr->mname); + Strcpy(buf, pmname(ptr, Ugender)); killplayer++; } else { for (i = 0;; i++) { @@ -2230,7 +2230,7 @@ int how; return; } - mndx = name_to_mon(buf); + mndx = name_to_mon(buf, (int *) 0); if (mndx == NON_PM || (g.mvitals[mndx].mvflags & G_GENOD)) { pline("Such creatures %s exist in this world.", (mndx == NON_PM) ? "do not" : "no longer"); @@ -2276,15 +2276,15 @@ int how; which = "all "; if (Hallucination) { if (Upolyd) - Strcpy(buf, g.youmonst.data->mname); + Strcpy(buf, pmname(g.youmonst.data, flags.female ? FEMALE : MALE)); else { Strcpy(buf, (flags.female && g.urole.name.f) ? g.urole.name.f : g.urole.name.m); buf[0] = lowc(buf[0]); } } else { - Strcpy(buf, ptr->mname); /* make sure we have standard singular */ - if ((ptr->geno & G_UNIQ) && ptr != &mons[PM_HIGH_PRIEST]) + Strcpy(buf, ptr->pmnames[NEUTRAL]); /* make sure we have standard singular */ + if ((ptr->geno & G_UNIQ) && ptr != &mons[PM_HIGH_CLERIC]) which = !type_is_pname(ptr) ? "the " : ""; } if (how & REALLY) { @@ -2425,7 +2425,7 @@ struct obj *from_obj; { /* SHOPKEEPERS can be revived now */ if (*mtype == PM_GUARD || (*mtype == PM_SHOPKEEPER && !revival) - || *mtype == PM_HIGH_PRIEST || *mtype == PM_ALIGNED_PRIEST + || *mtype == PM_HIGH_CLERIC || *mtype == PM_ALIGNED_CLERIC || *mtype == PM_ANGEL) { *mtype = PM_HUMAN_ZOMBIE; return TRUE; @@ -2447,6 +2447,7 @@ create_particular_parse(str, d) char *str; struct _create_particular_data *d; { + int gender_name_var = NEUTRAL; char *bufp = str; char *tmpp; @@ -2516,7 +2517,13 @@ struct _create_particular_data *d; d->randmonst = TRUE; return TRUE; } - d->which = name_to_mon(bufp); + d->which = name_to_mon(bufp, &gender_name_var); + /* + * With the introduction of male and female monster names + * in 3.7, preserve that detail. + */ + if (gender_name_var != NEUTRAL) + d->fem = gender_name_var; if (d->which >= LOW_PM) return TRUE; /* got one */ d->monclass = name_to_monclass(bufp, &d->which); @@ -2556,7 +2563,8 @@ struct _create_particular_data *d; char buf[BUFSZ]; Sprintf(buf, "Creating %s instead; force %s?", - mons[d->which].mname, mons[firstchoice].mname); + mons[d->which].pmnames[NEUTRAL], + mons[firstchoice].pmnames[NEUTRAL]); if (yn(buf) == 'y') d->which = firstchoice; } diff --git a/src/restore.c b/src/restore.c index 528d76a04..935c54630 100644 --- a/src/restore.c +++ b/src/restore.c @@ -333,13 +333,13 @@ struct monst *mtmp; if (mtmp->mextra) { mtmp->mextra = newmextra(); - /* mname - monster's name */ + /* mgivenname - monster's name */ if (nhfp->structlevel) mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); if (buflen > 0) { /* includes terminating '\0' */ - new_mname(mtmp, buflen); + new_mgivenname(mtmp, buflen); if (nhfp->structlevel) - mread(nhfp->fd, (genericptr_t) MNAME(mtmp), buflen); + mread(nhfp->fd, (genericptr_t) MGIVENNAME(mtmp), buflen); } /* egd - vault guard */ if (nhfp->structlevel) diff --git a/src/role.c b/src/role.c index 98854f3dc..fe30684a1 100644 --- a/src/role.c +++ b/src/role.c @@ -123,8 +123,8 @@ const struct Role roles[NUM_ROLES+1] = { "Cav", "the Caves of the Ancestors", "the Dragon's Lair", - PM_CAVEMAN, - PM_CAVEWOMAN, + PM_CAVE_DWELLER, + NON_PM, PM_LITTLE_DOG, PM_SHAMAN_KARNOV, PM_NEANDERTHAL, @@ -289,8 +289,8 @@ const struct Role roles[NUM_ROLES+1] = { "Pri", "the Great Temple", "the Temple of Nalzok", - PM_PRIEST, - PM_PRIESTESS, + PM_CLERIC, + NON_PM, NON_PM, PM_ARCH_PRIEST, PM_ACOLYTE, diff --git a/src/save.c b/src/save.c index f463e8939..fe6001bbf 100644 --- a/src/save.c +++ b/src/save.c @@ -814,12 +814,12 @@ struct monst *mtmp; bwrite(nhfp->fd, (genericptr_t) mtmp, buflen); } if (mtmp->mextra) { - buflen = MNAME(mtmp) ? (int) strlen(MNAME(mtmp)) + 1 : 0; + buflen = MGIVENNAME(mtmp) ? (int) strlen(MGIVENNAME(mtmp)) + 1 : 0; if (nhfp->structlevel) bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen); if (buflen > 0) { if (nhfp->structlevel) - bwrite(nhfp->fd, (genericptr_t) MNAME(mtmp), buflen); + bwrite(nhfp->fd, (genericptr_t) MGIVENNAME(mtmp), buflen); } buflen = EGD(mtmp) ? (int) sizeof (struct egd) : 0; if (nhfp->structlevel) diff --git a/src/shk.c b/src/shk.c index 2d1eb5b36..e12937de2 100644 --- a/src/shk.c +++ b/src/shk.c @@ -839,8 +839,8 @@ char rmno; (int) rmno, (int) g.rooms[rmno - ROOMOFFSET].rtype, shkp->mnum, - /* [real shopkeeper name is kept in ESHK, not MNAME] */ - has_mname(shkp) ? MNAME(shkp) : "anonymous"); + /* [real shopkeeper name is kept in ESHK, not MGIVENNAME] */ + has_mgivenname(shkp) ? MGIVENNAME(shkp) : "anonymous"); /* not sure if this is appropriate, because it does nothing to correct the underlying g.rooms[].resident issue but... */ return (struct monst *) 0; diff --git a/src/sounds.c b/src/sounds.c index 75b0de790..6a4409b21 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -184,8 +184,8 @@ dosounds() continue; if (is_mercenary(mtmp->data) #if 0 /* don't bother excluding these */ - && !strstri(mtmp->data->mname, "watch") - && !strstri(mtmp->data->mname, "guard") + && !strstri(mtmp->data->pmnames[NEUTRAL], "watch") + && !strstri(mtmp->data->pmnames[NEUTRAL], "guard") #endif && mon_in_room(mtmp, BARRACKS) /* sleeping implies not-yet-disturbed (usually) */ @@ -634,7 +634,7 @@ register struct monst *mtmp; * night */ boolean isnight = night(); boolean kindred = (Upolyd && (u.umonnum == PM_VAMPIRE - || u.umonnum == PM_VAMPIRE_LORD)); + || u.umonnum == PM_VAMPIRE_LEADER)); boolean nightchild = (Upolyd && (u.umonnum == PM_WOLF || u.umonnum == PM_WINTER_WOLF || u.umonnum == PM_WINTER_WOLF_CUB)); @@ -696,7 +696,8 @@ register struct monst *mtmp; verbl_msg = verbuf; } else if (vampindex == 1) { Sprintf(verbuf, vampmsg[vampindex], - Upolyd ? an(mons[u.umonnum].mname) + Upolyd ? an(pmname(&mons[u.umonnum], + flags.female ? FEMALE : MALE)) : an(racenoun)); verbl_msg = verbuf; } else @@ -1086,7 +1087,8 @@ dochat() struct obj *otmp; if (is_silent(g.youmonst.data)) { - pline("As %s, you cannot speak.", an(g.youmonst.data->mname)); + pline("As %s, you cannot speak.", + an(pmname(g.youmonst.data, flags.female ? FEMALE : MALE))); return 0; } if (Strangled) { diff --git a/src/sp_lev.c b/src/sp_lev.c index 6d64c182c..859945bbc 100755 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -1965,12 +1965,12 @@ struct mkroom *croom; break; case M_AP_MONSTER: { - int mndx; + int mndx, gender_name_var = NEUTRAL; if (!strcmpi(m->appear_as.str, "random")) mndx = select_newcham_form(mtmp); else - mndx = name_to_mon(m->appear_as.str); + mndx = name_to_mon(m->appear_as.str, &gender_name_var); if (mndx == NON_PM || (is_vampshifter(mtmp) && !validvamp(mtmp, &mndx, S_HUMAN))) { @@ -1998,6 +1998,8 @@ struct mkroom *croom; struct permonst *olddata = mtmp->data; mgender_from_permonst(mtmp, mdat); + if (gender_name_var != NEUTRAL) + mtmp->female = gender_name_var; set_mon_data(mtmp, mdat); if (emits_light(olddata) != emits_light(mtmp->data)) { /* used to give light, now doesn't, or vice versa, @@ -3016,7 +3018,11 @@ const char *s; int i; for (i = LOW_PM; i < NUMMONS; i++) - if (!strcmpi(mons[i].mname, s)) + if (!strcmpi(mons[i].pmnames[NEUTRAL], s) + || (mons[i].pmnames[MALE] != 0 + && !strcmpi(mons[i].pmnames[MALE], s)) + || (mons[i].pmnames[FEMALE] != 0 + && !strcmpi(mons[i].pmnames[FEMALE], s))) return i; return NON_PM; } @@ -3428,7 +3434,11 @@ lua_State *L; pm = mkclass(def_char_to_monclass(*montype), G_NOGEN|G_IGNORE); } else { for (i = LOW_PM; i < NUMMONS; i++) - if (!strcmpi(mons[i].mname, montype)) { + if (!strcmpi(mons[i].pmnames[NEUTRAL], montype) + || (mons[i].pmnames[MALE] != 0 + && !strcmpi(mons[i].pmnames[MALE], montype)) + || (mons[i].pmnames[FEMALE] != 0 + && !strcmpi(mons[i].pmnames[FEMALE], montype))) { pm = &mons[i]; break; } diff --git a/src/steal.c b/src/steal.c index 7ce86a9ce..790a08128 100644 --- a/src/steal.c +++ b/src/steal.c @@ -508,11 +508,11 @@ register struct obj *otmp; if (!otmp) { impossible("monster (%s) taking or picking up nothing?", - mtmp->data->mname); + pmname(mtmp->data, Mgender(mtmp))); return 1; } else if (otmp == uball || otmp == uchain) { impossible("monster (%s) taking or picking up attached %s (%s)?", - mtmp->data->mname, + pmname(mtmp->data, Mgender(mtmp)), (otmp == uchain) ? "chain" : "ball", simpleonames(otmp)); return 0; } diff --git a/src/steed.c b/src/steed.c index e380a4c5c..44dd33e9f 100644 --- a/src/steed.c +++ b/src/steed.c @@ -70,11 +70,12 @@ struct obj *otmp; You("touch %s.", mon_nam(mtmp)); if (!(poly_when_stoned(g.youmonst.data) && polymon(PM_STONE_GOLEM))) { - Sprintf(kbuf, "attempting to saddle %s", an(mtmp->data->mname)); + Sprintf(kbuf, "attempting to saddle %s", + an(pmname(mtmp->data, Mgender(mtmp)))); instapetrify(kbuf); } } - if (ptr == &mons[PM_INCUBUS] || ptr == &mons[PM_SUCCUBUS]) { + if (ptr == &mons[PM_AMOROUS_DEMON]) { pline("Shame on you!"); exercise(A_WIS, FALSE); return 1; @@ -275,7 +276,8 @@ boolean force; /* Quietly force this animal */ char kbuf[BUFSZ]; You("touch %s.", mon_nam(mtmp)); - Sprintf(kbuf, "attempting to ride %s", an(mtmp->data->mname)); + Sprintf(kbuf, "attempting to ride %s", + an(pmname(mtmp->data, Mgender(mtmp)))); instapetrify(kbuf); } if (!mtmp->mtame || mtmp->isminion) { @@ -535,9 +537,9 @@ int reason; /* Player was thrown off etc. */ You("can't. There isn't anywhere for you to stand."); return; } - if (!has_mname(mtmp)) { + if (!has_mgivenname(mtmp)) { pline("You've been through the dungeon on %s with no name.", - an(mtmp->data->mname)); + an(pmname(mtmp->data, Mgender(mtmp)))); if (Hallucination) pline("It felt good to get out of the rain."); } else diff --git a/src/teleport.c b/src/teleport.c index 7af0b7b15..88bd395f7 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -225,7 +225,8 @@ long entflags; if (allow_xx_yy && goodpos(xx, yy, &fakemon, entflags)) { return TRUE; /* 'cc' is set */ } else { - debugpline3("enexto(\"%s\",%d,%d) failed", mdat->mname, xx, yy); + debugpline3("enexto(\"%s\",%d,%d) failed", + mdat->pmnames[NEUTRAL], xx, yy); return FALSE; } } diff --git a/src/timeout.c b/src/timeout.c index 66e56d295..9f57fbf51 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -602,7 +602,8 @@ nh_timeout() } dealloc_killer(kptr); - if ((m_idx = name_to_mon(g.killer.name)) >= LOW_PM) { + if ((m_idx = name_to_mon(g.killer.name, + (int *) 0)) >= LOW_PM) { if (type_is_pname(&mons[m_idx])) { g.killer.format = KILLED_BY; } else if (mons[m_idx].geno & G_UNIQ) { @@ -706,7 +707,7 @@ nh_timeout() g.context.warntype.speciesidx = NON_PM; if (g.context.warntype.species) { You("are no longer warned about %s.", - makeplural(g.context.warntype.species->mname)); + makeplural(g.context.warntype.species->pmnames[NEUTRAL])); g.context.warntype.species = (struct permonst *) 0; } } @@ -1075,15 +1076,15 @@ slip_or_trip() if (!uarmf && otmp->otyp == CORPSE && touch_petrifies(&mons[otmp->corpsenm]) && !Stone_resistance) { Sprintf(g.killer.name, "tripping over %s corpse", - an(mons[otmp->corpsenm].mname)); + an(mons[otmp->corpsenm].pmnames[NEUTRAL])); instapetrify(g.killer.name); } } else if (rn2(3) && is_ice(u.ux, u.uy)) { pline("%s %s%s on the ice.", u.usteed ? upstart(x_monnam(u.usteed, - (has_mname(u.usteed)) ? ARTICLE_NONE - : ARTICLE_THE, - (char *) 0, SUPPRESS_SADDLE, FALSE)) + (has_mgivenname(u.usteed)) ? ARTICLE_NONE + : ARTICLE_THE, + (char *) 0, SUPPRESS_SADDLE, FALSE)) : "You", rn2(2) ? "slip" : "slide", on_foot ? "" : "s"); } else { diff --git a/src/trap.c b/src/trap.c index 60bd409f8..6b20f2596 100644 --- a/src/trap.c +++ b/src/trap.c @@ -2427,7 +2427,7 @@ unsigned trflags; u.usteed->mtrapseen |= (1 << (ttype - 1)); /* suppress article in various steed messages when using its name (which won't occur when hallucinating) */ - if (has_mname(u.usteed) && !Hallucination) + if (has_mgivenname(u.usteed) && !Hallucination) steed_article = ARTICLE_NONE; } @@ -3133,8 +3133,10 @@ const char *arg; if (uwep && uwep->otyp == CORPSE && touch_petrifies(&mons[uwep->corpsenm]) && !Stone_resistance) { - pline("%s touch the %s corpse.", arg, mons[uwep->corpsenm].mname); - Sprintf(kbuf, "%s corpse", an(mons[uwep->corpsenm].mname)); + pline("%s touch the %s corpse.", arg, + mons[uwep->corpsenm].pmnames[NEUTRAL]); + Sprintf(kbuf, "%s corpse", + an(mons[uwep->corpsenm].pmnames[NEUTRAL])); instapetrify(kbuf); /* life-saved; unwield the corpse if we can't handle it */ if (!uarmg && !Stone_resistance) @@ -3144,8 +3146,10 @@ const char *arg; allow two-weapon combat when either weapon is a corpse] */ if (u.twoweap && uswapwep && uswapwep->otyp == CORPSE && touch_petrifies(&mons[uswapwep->corpsenm]) && !Stone_resistance) { - pline("%s touch the %s corpse.", arg, mons[uswapwep->corpsenm].mname); - Sprintf(kbuf, "%s corpse", an(mons[uswapwep->corpsenm].mname)); + pline("%s touch the %s corpse.", arg, + mons[uswapwep->corpsenm].pmnames[NEUTRAL]); + Sprintf(kbuf, "%s corpse", + an(mons[uswapwep->corpsenm].pmnames[NEUTRAL])); instapetrify(kbuf); /* life-saved; unwield the corpse */ if (!uarmg && !Stone_resistance) @@ -4672,7 +4676,8 @@ struct trap *ttmp; /* is it a cockatrice?... */ if (touch_petrifies(mtmp->data) && !uarmg && !Stone_resistance) { - You("grab the trapped %s using your bare %s.", mtmp->data->mname, + You("grab the trapped %s using your bare %s.", + pmname(mtmp->data, Mgender(mtmp)), makeplural(body_part(HAND))); if (poly_when_stoned(g.youmonst.data) && polymon(PM_STONE_GOLEM)) { @@ -4681,7 +4686,7 @@ struct trap *ttmp; char kbuf[BUFSZ]; Sprintf(kbuf, "trying to help %s out of a pit", - an(mtmp->data->mname)); + an(pmname(mtmp->data, Mgender(mtmp)))); instapetrify(kbuf); return 1; } diff --git a/src/u_init.c b/src/u_init.c index 81927ed9f..99be2a44d 100644 --- a/src/u_init.c +++ b/src/u_init.c @@ -688,7 +688,7 @@ u_init() knows_class(ARMOR_CLASS); skill_init(Skill_B); break; - case PM_CAVEMAN: + case PM_CAVE_DWELLER: Cave_man[C_AMMO].trquan = rn1(11, 10); /* 10..20 */ ini_inv(Cave_man); skill_init(Skill_C); @@ -724,7 +724,7 @@ u_init() skill_init(Skill_Mon); break; } - case PM_PRIEST: + case PM_CLERIC: ini_inv(Priest); if (!rn2(10)) ini_inv(Magicmarker); @@ -811,7 +811,7 @@ u_init() * Non-warriors get an instrument. We use a kludge to * get only non-magic instruments. */ - if (Role_if(PM_PRIEST) || Role_if(PM_WIZARD)) { + if (Role_if(PM_CLERIC) || Role_if(PM_WIZARD)) { static int trotyp[] = { WOODEN_FLUTE, TOOLED_HORN, WOODEN_HARP, BELL, BUGLE, LEATHER_DRUM }; Instrument[0].trotyp = trotyp[rn2(SIZE(trotyp))]; @@ -921,7 +921,7 @@ int otyp; case PM_BARBARIAN: skills = Skill_B; break; - case PM_CAVEMAN: + case PM_CAVE_DWELLER: skills = Skill_C; break; case PM_HEALER: @@ -933,7 +933,7 @@ int otyp; case PM_MONK: skills = Skill_Mon; break; - case PM_PRIEST: + case PM_CLERIC: skills = Skill_P; break; case PM_RANGER: diff --git a/src/uhitm.c b/src/uhitm.c index 5855962da..34896bdd0 100644 --- a/src/uhitm.c +++ b/src/uhitm.c @@ -958,7 +958,7 @@ int dieroll; pline("Splat! You hit %s with %s %s egg%s!", mon_nam(mon), obj->known ? "the" : cnt > 1L ? "some" : "a", - obj->known ? mons[obj->corpsenm].mname + obj->known ? mons[obj->corpsenm].pmnames[NEUTRAL] : "petrifying", plur(cnt)); obj->known = 1; /* (not much point...) */ @@ -971,8 +971,8 @@ int dieroll; } else { /* ordinary egg(s) */ const char *eggp = (obj->corpsenm != NON_PM && obj->known) - ? the(mons[obj->corpsenm].mname) - : (cnt > 1L) ? "some" : "an"; + ? the(mons[obj->corpsenm].pmnames[NEUTRAL]) + : (cnt > 1L) ? "some" : "an"; You("hit %s with %s egg%s.", mon_nam(mon), eggp, plur(cnt)); @@ -2593,7 +2593,7 @@ struct mhitm_data *mhm; if (uncancelled && !rn2(8)) { Sprintf(buf, "%s %s", s_suffix(Monnam(magr)), mpoisons_subj(magr, mattk)); - poisoned(buf, ptmp, pa->mname, 30, FALSE); + poisoned(buf, ptmp, pmname(pa, Mgender(magr)), 30, FALSE); } } else { /* mhitm */ @@ -2814,7 +2814,7 @@ struct mhitm_data *mhm; g.killer.format = KILLED_BY_AN; Sprintf(g.killer.name, "%s by %s", moat ? "moat" : "pool of water", - an(magr->data->mname)); + an(pmname(magr->data, Mgender(magr)))); done(DROWNING); } else if (mattk->aatyp == AT_HUGS) { You("are being crushed."); @@ -2992,7 +2992,8 @@ struct mhitm_data *mhm; } else if (!Slimed) { You("don't feel very well."); make_slimed(10L, (char *) 0); - delayed_killer(SLIMED, KILLED_BY_AN, magr->data->mname); + delayed_killer(SLIMED, KILLED_BY_AN, + pmname(magr->data, Mgender(magr))); } else pline("Yuck!"); } else { @@ -3326,7 +3327,7 @@ struct monst *mtmp; && !(poly_when_stoned(g.youmonst.data) && polymon(PM_STONE_GOLEM))) { int kformat = KILLED_BY_AN; - const char *kname = mtmp->data->mname; + const char *kname = pmname(mtmp->data, Mgender(mtmp)); if (mtmp->data->geno & G_UNIQ) { if (!type_is_pname(mtmp->data)) @@ -3446,7 +3447,7 @@ struct mhitm_data *mhm; && touch_petrifies(&mons[otmp->corpsenm])) { mhm->damage = 1; pline("%s hits you with the %s corpse.", Monnam(magr), - mons[otmp->corpsenm].mname); + mons[otmp->corpsenm].pmnames[NEUTRAL]); if (!Stoned) { if (do_stone_u(magr)) { mhm->hitflags = MM_HIT; @@ -4200,8 +4201,7 @@ int specialdmg; /* blessed and/or silver bonus against various things */ negated = !(rn2(10) >= 3 * armpro); if (is_demon(g.youmonst.data) && !rn2(13) && !uwep - && u.umonnum != PM_SUCCUBUS && u.umonnum != PM_INCUBUS - && u.umonnum != PM_BALROG) { + && u.umonnum != PM_AMOROUS_DEMON && u.umonnum != PM_BALROG) { demonpet(); return MM_MISS; } @@ -4358,12 +4358,12 @@ register struct attack *mattk; if (fatal_gulp && !is_rider(pd)) { /* petrification */ char kbuf[BUFSZ]; - const char *mname = pd->mname; + const char *mnam = pmname(pd, Mgender(mdef)); if (!type_is_pname(pd)) - mname = an(mname); + mnam = an(mnam); You("englut %s.", mon_nam(mdef)); - Sprintf(kbuf, "swallowing %s whole", mname); + Sprintf(kbuf, "swallowing %s whole", mnam); instapetrify(kbuf); } else { start_engulf(mdef); @@ -4374,7 +4374,7 @@ register struct attack *mattk; pline("Unfortunately, digesting any of it is fatal."); end_engulf(); Sprintf(g.killer.name, "unwisely tried to eat %s", - pd->mname); + pmname(pd, Mgender(mdef))); g.killer.format = NO_KILLER_PREFIX; done(DIED); return MM_MISS; /* lifesaved */ @@ -4425,7 +4425,7 @@ register struct attack *mattk; pline1(msgbuf); if (pd == &mons[PM_GREEN_SLIME]) { Sprintf(msgbuf, "%s isn't sitting well with you.", - The(pd->mname)); + The(pmname(pd, Mgender(mdef)))); if (!Unchanging) { make_slimed(5L, (char *) 0); } diff --git a/src/vault.c b/src/vault.c index c59ffd433..8fb059a9e 100644 --- a/src/vault.c +++ b/src/vault.c @@ -397,7 +397,7 @@ invault() gsensed = !canspotmon(guard); if (!gsensed) pline("Suddenly one of the Vault's %s enters!", - makeplural(guard->data->mname)); + makeplural(pmname(guard->data, Mgender(guard)))); else pline("Someone else has entered the Vault."); newsym(guard->mx, guard->my); @@ -1091,7 +1091,8 @@ boolean silently; gx = g.rooms[EGD(grd)->vroom].lx + rn2(2); gy = g.rooms[EGD(grd)->vroom].ly + rn2(2); Sprintf(buf, "To Croesus: here's the gold recovered from %s the %s.", - g.plname, mons[u.umonster].mname); + g.plname, + pmname(&mons[u.umonster], flags.female ? FEMALE : MALE)); make_grave(gx, gy, buf); } for (coins = g.invent; coins; coins = nextcoins) { diff --git a/src/weapon.c b/src/weapon.c index 7abfcdbad..0ccefdf8c 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -1672,7 +1672,7 @@ const struct def_skill *class_skill; /* set skills for magic */ if (Role_if(PM_HEALER) || Role_if(PM_MONK)) { P_SKILL(P_HEALING_SPELL) = P_BASIC; - } else if (Role_if(PM_PRIEST)) { + } else if (Role_if(PM_CLERIC)) { P_SKILL(P_CLERIC_SPELL) = P_BASIC; } else if (Role_if(PM_WIZARD)) { P_SKILL(P_ATTACK_SPELL) = P_BASIC; diff --git a/src/were.c b/src/were.c index c441ad6d1..e0e208151 100644 --- a/src/were.c +++ b/src/were.c @@ -99,13 +99,15 @@ register struct monst *mon; pm = counter_were(monsndx(mon->data)); if (pm < LOW_PM) { - impossible("unknown lycanthrope %s.", mon->data->mname); + impossible("unknown lycanthrope %s.", + mon->data->pmnames[NEUTRAL]); return; } if (canseemon(mon) && !Hallucination) pline("%s changes into a %s.", Monnam(mon), - is_human(&mons[pm]) ? "human" : mons[pm].mname + 4); + is_human(&mons[pm]) ? "human" + : pmname(&mons[pm], Mgender(mon)) + 4); set_mon_data(mon, &mons[pm]); if (mon->msleeping || !mon->mcanmove) { @@ -183,7 +185,7 @@ you_were() if (controllable_poly) { /* `+4' => skip "were" prefix to get name of beast */ Sprintf(qbuf, "Do you want to change into %s?", - an(mons[u.ulycn].mname + 4)); + an(mons[u.ulycn].pmnames[NEUTRAL] + 4)); if (!paranoid_query(ParanoidWerechange, qbuf)) return; } diff --git a/src/windows.c b/src/windows.c index f3af21f49..1b95009cf 100644 --- a/src/windows.c +++ b/src/windows.c @@ -520,7 +520,7 @@ static void FDECL(hup_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P, int, const char *, unsigned int)); static void FDECL(hup_end_menu, (winid, const char *)); static void FDECL(hup_putstr, (winid, int, const char *)); -static void FDECL(hup_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int)); +static void FDECL(hup_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int, unsigned *)); static void FDECL(hup_outrip, (winid, int, time_t)); static void FDECL(hup_curs, (winid, int, int)); static void FDECL(hup_display_nhwindow, (winid, BOOLEAN_P)); @@ -736,11 +736,12 @@ const char *text UNUSED; /*ARGSUSED*/ static void -hup_print_glyph(window, x, y, glyph, bkglyph) +hup_print_glyph(window, x, y, glyph, bkglyph, glyphmod) winid window UNUSED; xchar x UNUSED, y UNUSED; int glyph UNUSED; int bkglyph UNUSED; +unsigned *glyphmod UNUSED; { return; } diff --git a/src/wizard.c b/src/wizard.c index 0c6462888..a4e9d07f1 100644 --- a/src/wizard.c +++ b/src/wizard.c @@ -35,10 +35,10 @@ static NEARDATA const int nasties[] = { PM_IRON_GOLEM, PM_OCHRE_JELLY, PM_GREEN_SLIME, PM_DISPLACER_BEAST, PM_GENETIC_ENGINEER, /* chaotic */ - PM_BLACK_DRAGON, PM_RED_DRAGON, PM_ARCH_LICH, PM_VAMPIRE_LORD, + PM_BLACK_DRAGON, PM_RED_DRAGON, PM_ARCH_LICH, PM_VAMPIRE_LEADER, PM_MASTER_MIND_FLAYER, PM_DISENCHANTER, PM_WINGED_GARGOYLE, - PM_STORM_GIANT, PM_OLOG_HAI, PM_ELF_LORD, PM_ELVENKING, - PM_OGRE_KING, PM_CAPTAIN, PM_GREMLIN, + PM_STORM_GIANT, PM_OLOG_HAI, PM_ELF_NOBLE, PM_ELVENMONARCH, + PM_OGRE_TYRANT, PM_CAPTAIN, PM_GREMLIN, /* lawful */ PM_SILVER_DRAGON, PM_ORANGE_DRAGON, PM_GREEN_DRAGON, PM_YELLOW_DRAGON, PM_GUARDIAN_NAGA, PM_FIRE_GIANT, @@ -543,11 +543,11 @@ int difcap; /* if non-zero, try to make difficulty be lower than this */ || (mons[res].geno & (Inhell ? G_NOHELL : G_HELL)) != 0) alt = big_to_little(res); if (alt != res && (g.mvitals[alt].mvflags & G_GENOD) == 0) { - const char *mname = mons[alt].mname, - *lastspace = rindex(mname, ' '); + const char *mnam = mons[alt].pmnames[NEUTRAL], + *lastspace = rindex(mnam, ' '); /* only non-juveniles can become alternate choice */ - if (strncmp(mname, "baby ", 5) + if (strncmp(mnam, "baby ", 5) && (!lastspace || (strcmp(lastspace, " hatchling") && strcmp(lastspace, " pup") diff --git a/src/worn.c b/src/worn.c index 82abcf26c..7da309a02 100644 --- a/src/worn.c +++ b/src/worn.c @@ -1019,7 +1019,8 @@ boolean polyspot; char buf[BUFSZ]; You("touch %s.", mon_nam(u.usteed)); - Sprintf(buf, "falling off %s", an(u.usteed->data->mname)); + Sprintf(buf, "falling off %s", + an(pmname(u.usteed->data, Mgender(u.usteed)))); instapetrify(buf); } dismount_steed(DISMOUNT_FELL); diff --git a/src/zap.c b/src/zap.c index 0b4f7f4bd..04ebb8181 100644 --- a/src/zap.c +++ b/src/zap.c @@ -1022,7 +1022,7 @@ struct monst *mon; pline("%s%s suddenly %s%s%s!", owner, corpse, nonliving(mtmp2->data) ? "reanimates" : "comes alive", different_type ? " as " : "", - different_type ? an(mtmp2->data->mname) : ""); + different_type ? an(pmname(mtmp2->data, Mgender(mtmp2))) : ""); else if (canseemon(mtmp2)) pline("%s suddenly appears!", Amonnam(mtmp2)); } diff --git a/sys/msdos/vidvesa.c b/sys/msdos/vidvesa.c index 747dd0ac0..125cf712d 100644 --- a/sys/msdos/vidvesa.c +++ b/sys/msdos/vidvesa.c @@ -700,6 +700,7 @@ unsigned special; /* special feature: corpse, invis, detected, pet, ridden - int col, row; int attr; int ry; + int tilenum = 0; row = currow; col = curcol; @@ -721,7 +722,10 @@ unsigned special; /* special feature: corpse, invis, detected, pet, ridden - if (!iflags.over_view && map[ry][col].special) decal_packed(packcell, special); #endif - vesa_DisplayCell(glyph2tile[glyphnum], col - clipx, ry - clipy); + tilenum = glyph2tile[glyphnum]; + if (map[ry][col].special & MG_FEMALE) + tilenum++; + vesa_DisplayCell(tilenum, col - clipx, ry - clipy); } } if (col < (CO - 1)) diff --git a/sys/msdos/vidvga.c b/sys/msdos/vidvga.c index badff0432..621cf1d9a 100644 --- a/sys/msdos/vidvga.c +++ b/sys/msdos/vidvga.c @@ -688,6 +688,7 @@ unsigned char (*indexes)[TILE_X]; { const struct TileImage *tile; unsigned x, y; + int row, col, ry, tilenum = 0; /* We don't have enough colors to show the statues */ if (glyph >= GLYPH_STATUE_OFF) { @@ -695,7 +696,16 @@ unsigned char (*indexes)[TILE_X]; } /* Get the tile from the image */ - tile = get_tile(glyph2tile[glyph]); + tilenum = glyph2tile[glyph]; + row = currow; + col = curcol; + if ((col < 0 || col >= COLNO) + || (row < TOP_MAP_ROW || row >= (ROWNO + TOP_MAP_ROW))) + return; + ry = row - TOP_MAP_ROW; + if (map[ry][col].special & MG_FEMALE) + tilenum++; + tile = get_tile(tilenum); /* Map to a 16 bit palette; assume colors laid out as in default tileset */ memset(indexes, 0, sizeof(indexes)); diff --git a/util/makedefs.c b/util/makedefs.c index 3d81f4ab8..65d7f4878 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -1888,14 +1888,14 @@ struct permonst *ptr; if ((tmp2 == AD_DRLI) || (tmp2 == AD_STON) || (tmp2 == AD_DRST) || (tmp2 == AD_DRDX) || (tmp2 == AD_DRCO) || (tmp2 == AD_WERE)) n += 2; - else if (strcmp(ptr->mname, "grid bug")) + else if (strcmp(ptr->pmnames[NEUTRAL], "grid bug")) n += (tmp2 != AD_PHYS); n += ((int) (ptr->mattk[i].damd * ptr->mattk[i].damn) > 23); } /* Leprechauns are special cases. They have many hit dice so they can hit and are hard to kill, but they don't really do much damage. */ - if (!strcmp(ptr->mname, "leprechaun")) + if (!strcmp(ptr->pmnames[NEUTRAL], "leprechaun")) n -= 2; /* Finally, adjust the monster level 0 <= n <= 24 (approx.) */ @@ -1973,7 +1973,7 @@ do_monstr() Fprintf(ofp, "\n\n/*\n * default mons[].difficulty values\n *\n"); for (ptr = &mons[0]; ptr->mlet; ptr++) { i = mstrength(ptr); - Fprintf(ofp, "%-24s %2u\n", ptr->mname, (unsigned int) (uchar) i); + Fprintf(ofp, "%-24s %2u\n", ptr->pmnames[NEUTRAL], (unsigned int) (uchar) i); } Fprintf(ofp, " *\n */\n\n"); @@ -2021,9 +2021,9 @@ do_permonst() Fprintf(ofp, "\n PM_"); else Fprintf(ofp, "\n#define\tPM_"); - if (mons[i].mlet == S_HUMAN && !strncmp(mons[i].mname, "were", 4)) + if (mons[i].mlet == S_HUMAN && !strncmp(mons[i].pmnames[NEUTRAL], "were", 4)) Fprintf(ofp, "HUMAN_"); - for (nam = c = tmpdup(mons[i].mname); *c; c++) + for (nam = c = tmpdup(mons[i].pmnames[NEUTRAL]); *c; c++) if (*c >= 'a' && *c <= 'z') *c -= (char) ('a' - 'A'); else if (*c < 'A' || *c > 'Z') diff --git a/win/Qt/qt_bind.cpp b/win/Qt/qt_bind.cpp index 7f4926df5..ba4c21567 100644 --- a/win/Qt/qt_bind.cpp +++ b/win/Qt/qt_bind.cpp @@ -474,11 +474,12 @@ void NetHackQtBind::qt_cliparound_window(winid wid, int x, int y) NetHackQtWindow* window=id_to_window[(int)wid]; window->ClipAround(x,y); } -void NetHackQtBind::qt_print_glyph(winid wid,XCHAR_P x,XCHAR_P y,int glyph,int bkglyph UNUSED) +void NetHackQtBind::qt_print_glyph(winid wid,XCHAR_P x,XCHAR_P y,int glyph, + int bkglyph UNUSED, unsigned *glyphmod) { /* TODO: bkglyph */ NetHackQtWindow* window=id_to_window[(int)wid]; - window->PrintGlyph(x,y,glyph); + window->PrintGlyph(x,y,glyph,glyphmod); } //void NetHackQtBind::qt_print_glyph_compose(winid wid,xchar x,xchar y,int glyph1, int glyph2) //{ diff --git a/win/Qt/qt_bind.h b/win/Qt/qt_bind.h index bc3f2d647..73f4d4fa8 100644 --- a/win/Qt/qt_bind.h +++ b/win/Qt/qt_bind.h @@ -64,7 +64,7 @@ public: static void qt_cliparound(int x, int y); static void qt_cliparound_window(winid wid, int x, int y); static void qt_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, - int glyph, int bkglyph); + int glyph, int bkglyph, unsigned int *); static void qt_raw_print(const char *str); static void qt_raw_print_bold(const char *str); static int qt_nhgetch(); diff --git a/win/Qt/qt_glyph.cpp b/win/Qt/qt_glyph.cpp index bed3bd5a3..f807282f3 100644 --- a/win/Qt/qt_glyph.cpp +++ b/win/Qt/qt_glyph.cpp @@ -82,30 +82,32 @@ NetHackQtGlyphs::NetHackQtGlyphs() } void NetHackQtGlyphs::drawGlyph(QPainter& painter, int glyph, int x, int y, - bool reversed) + bool fem, bool reversed) { if (!reversed) { int tile = glyph2tile[glyph]; + if (fem) + ++tile; int px = (tile % tiles_per_row) * width(); int py = tile / tiles_per_row * height(); painter.drawPixmap(x, y, pm, px, py, width(), height()); } else { // for paper doll; mirrored image for left side of two-handed weapon - painter.drawPixmap(x, y, reversed_pixmap(glyph), + painter.drawPixmap(x, y, reversed_pixmap(glyph, fem), 0, 0, width(), height()); } } void NetHackQtGlyphs::drawCell(QPainter& painter, int glyph, - int cellx, int celly) + int cellx, int celly, bool fem) { - drawGlyph(painter, glyph, cellx * width(), celly * height(), false); + drawGlyph(painter, glyph, cellx * width(), celly * height(), fem, false); } void NetHackQtGlyphs::drawBorderedCell(QPainter& painter, int glyph, int cellx, int celly, int border, - bool reversed) + bool reversed, bool fem) { int wd = width(), ht = height(), @@ -113,7 +115,7 @@ void NetHackQtGlyphs::drawBorderedCell(QPainter& painter, int glyph, lox = cellx * (wd + 2), loy = celly * (ht + 2) + yoffset; - drawGlyph(painter, glyph, lox + 1, loy + 1, reversed); + drawGlyph(painter, glyph, lox + 1, loy + 1, fem, reversed); #ifdef TEXTCOLOR if (border != NO_BORDER) { @@ -164,9 +166,11 @@ void NetHackQtGlyphs::drawBorderedCell(QPainter& painter, int glyph, } // mis-named routine to get the pixmap for a particular glyph -QPixmap NetHackQtGlyphs::glyph(int glyphindx) +QPixmap NetHackQtGlyphs::glyph(int glyphindx, bool fem) { int tile = glyph2tile[glyphindx]; + if (fem) + ++tile; int px = (tile % tiles_per_row) * tilefile_tile_W; int py = tile / tiles_per_row * tilefile_tile_H; @@ -175,9 +179,9 @@ QPixmap NetHackQtGlyphs::glyph(int glyphindx) } // transpose a glyph's tile horizontally, scaled for use in paper doll -QPixmap NetHackQtGlyphs::reversed_pixmap(int glyphindx) +QPixmap NetHackQtGlyphs::reversed_pixmap(int glyphindx, bool fem) { - QPixmap pxmp = glyph(glyphindx); + QPixmap pxmp = glyph(glyphindx, fem); #ifdef ENHANCED_PAPERDOLL qreal wid = (qreal) pxmp.width(), //hgt = (qreal) pxmp.height(), diff --git a/win/Qt/qt_glyph.h b/win/Qt/qt_glyph.h index 39b0e3914..afc2b92ca 100644 --- a/win/Qt/qt_glyph.h +++ b/win/Qt/qt_glyph.h @@ -24,13 +24,13 @@ public: void setSize(int w, int h); void drawGlyph(QPainter &, int glyph, int pixelx, int pixely, - bool reversed = false); - void drawCell(QPainter &, int glyph, int cellx, int celly); + bool fem, bool reversed = false); + void drawCell(QPainter &, int glyph, int cellx, int celly, bool fem); void drawBorderedCell(QPainter &, int glyph, int cellx, int celly, int bordercode, - bool reversed); - QPixmap glyph(int glyphindx); - QPixmap reversed_pixmap(int glyphindx); + bool reversed, bool fem = false); + QPixmap glyph(int glyphindx, bool fem = false); + QPixmap reversed_pixmap(int glyphindx, bool fem = false); private: QImage img; diff --git a/win/Qt/qt_map.cpp b/win/Qt/qt_map.cpp index f55e023c8..b3681b155 100644 --- a/win/Qt/qt_map.cpp +++ b/win/Qt/qt_map.cpp @@ -176,14 +176,19 @@ void NetHackQtMapViewport::paintEvent(QPaintEvent* event) for (int j=garea.top(); j<=garea.bottom(); j++) { for (int i=garea.left(); i<=garea.right(); i++) { +#if 0 unsigned short g=Glyph(i,j); int color; int ch; unsigned special; - +#else + int color = Glyphcolor(i,j); + int ch = Glyphttychar(i,j); + unsigned special = Glyphflags(i,j); +#endif painter.setPen( Qt::green ); /* map glyph to character and color */ - mapglyph(g, &ch, &color, &special, i, j, 0); +// mapglyph(g, &ch, &color, &special, i, j, 0); ch = cp437(ch); #ifdef TEXTCOLOR painter.setPen( nhcolor_to_pen(color) ); @@ -220,15 +225,20 @@ void NetHackQtMapViewport::paintEvent(QPaintEvent* event) } painter.setFont(font()); - } else { + } else { // tiles for (int j=garea.top(); j<=garea.bottom(); j++) { for (int i=garea.left(); i<=garea.right(); i++) { unsigned short g=Glyph(i,j); +#if 0 int color; int ch; unsigned special; mapglyph(g, &ch, &color, &special, i, j, 0); - qt_settings->glyphs().drawCell(painter, g, i, j); +#else + unsigned special = Glyphflags(i, j); +#endif + bool femflag = (special & MG_FEMALE) ? true : false; + qt_settings->glyphs().drawCell(painter, g, i, j, femflag); #ifdef TEXTCOLOR if ((special & MG_PET) != 0 && ::iflags.hilite_pet) { painter.drawPixmap(QPoint(i*qt_settings->glyphs().width(), @@ -559,8 +569,14 @@ void NetHackQtMapViewport::Clear() // FIXME: map column 0 should be surpressed from being displayed // Glyph(0, j) = GLYPH_NOTHING; + Glyphttychar(0, j) = ' '; + Glyphcolor(0, j) = NO_COLOR; + Glyphflags(0, j) = 0; for (int i = 1; i < COLNO; ++i) Glyph(i, j) = GLYPH_UNEXPLORED; + Glyphttychar(0, j) = ' '; + Glyphcolor(0, j) = NO_COLOR; + Glyphflags(0, j) = 0; } change.clear(); @@ -594,9 +610,12 @@ void NetHackQtMapViewport::CursorTo(int x,int y) Changed(cursor.x(),cursor.y()); } -void NetHackQtMapViewport::PrintGlyph(int x,int y,int theglyph) +void NetHackQtMapViewport::PrintGlyph(int x,int y,int theglyph,unsigned *glyphmod) { Glyph(x,y)=theglyph; + Glyphttychar(x,y)=glyphmod[GM_TTYCHAR]; + Glyphcolor(x,y)=glyphmod[GM_COLOR]; + Glyphflags(x,y)=glyphmod[GM_FLAGS]; Changed(x,y); } @@ -701,9 +720,9 @@ void NetHackQtMapWindow2::ClipAround(int x,int y) ensureVisible(x,y,width()*0.45,height()*0.45); } -void NetHackQtMapWindow2::PrintGlyph(int x,int y,int glyph) +void NetHackQtMapWindow2::PrintGlyph(int x,int y,int glyph, unsigned *glyphmod) { - m_viewport->PrintGlyph(x, y, glyph); + m_viewport->PrintGlyph(x, y, glyph, glyphmod); } #if 0 //RLC @@ -825,8 +844,15 @@ void NetHackQtMapWindow::Clear() { for (int j = 0; j < ROWNO; ++j) { Glyph(0, j) = GLYPH_NOTHING; - for (int i = 1; i < COLNO; ++i) + Glyphcolor(0, j) = NO_COLOR; + Glyphttychar(0, j) = ' '; + Glyphflags(0, j) = 0; + for (int i = 1; i < COLNO; ++i) { Glyph(i, j) = GLYPH_UNEXPLORED; + Glyphcolor(i, j) = NO_COLOR; + Glyphttychar(i, j) = ' '; + Glyphflags(i, j) = 0; + } } change.clear(); @@ -897,13 +923,18 @@ void NetHackQtMapWindow::paintEvent(QPaintEvent* event) for (int j=garea.top(); j<=garea.bottom(); j++) { for (int i=garea.left(); i<=garea.right(); i++) { unsigned short g=Glyph(i,j); +#if 0 int color; char32_t ch; unsigned special; - +#else + int color = Glyphcolor(i,j); + char32_t ch = Glyphttychar(i,j); + unsigned special = Glyphflags(i,j); +#endif painter.setPen( Qt::green ); /* map glyph to character and color */ - mapglyph(g, &ch, &color, &special, i, j, 0); +// mapglyph(g, &ch, &color, &special, i, j, 0); #ifdef TEXTCOLOR painter.setPen( nhcolor_to_pen(color) ); #endif @@ -935,11 +966,18 @@ void NetHackQtMapWindow::paintEvent(QPaintEvent* event) for (int j=garea.top(); j<=garea.bottom(); j++) { for (int i=garea.left(); i<=garea.right(); i++) { unsigned short g=Glyph(i,j); +#if 0 int color; int ch; unsigned special; mapglyph(g, &ch, &color, &special, i, j, 0); - qt_settings->glyphs().drawCell(painter, g, i, j); +#else + int color = Glyphcolor(i,j); + int ch = Glyphttychar(i,j); + unsigned special = Glyphflags(i,j); +#endif + bool femflag = (special & MG_FEMALE) ? true : false; + qt_settings->glyphs().drawCell(painter, g, i, j, femflag); #ifdef TEXTCOLOR if ((special & MG_PET) != 0 && ::iflags.hilite_pet) { painter.drawPixmap(QPoint(i*qt_settings->glyphs().width(), @@ -1048,9 +1086,12 @@ void NetHackQtMapWindow::ClipAround(int x,int y) viewport.center(x,y,0.45,0.45); } -void NetHackQtMapWindow::PrintGlyph(int x,int y,int glyph) +void NetHackQtMapWindow::PrintGlyph(int x,int y,int glyph, unsigned *glyphmod) { Glyph(x,y)=glyph; + Glyphttychar(x,y)=glyphmod[GM_TTYCHAR]; + Glyphcolor(x,y)=glyphmod[GM_COLOR]; + Glyphflags(x,y)=glyphmod[GM_FLAGS]; Changed(x,y); } diff --git a/win/Qt/qt_map.h b/win/Qt/qt_map.h index bf8afceb4..6200e0412 100644 --- a/win/Qt/qt_map.h +++ b/win/Qt/qt_map.h @@ -32,6 +32,12 @@ private: QFont *rogue_font; unsigned short glyph[ROWNO][COLNO]; unsigned short& Glyph(int x, int y) { return glyph[y][x]; } + unsigned int glyphttychar[ROWNO][COLNO]; + unsigned int& Glyphttychar(int x, int y) { return glyphttychar[y][x]; } + unsigned int glyphcolor[ROWNO][COLNO]; + unsigned int& Glyphcolor(int x, int y) { return glyphcolor[y][x]; } + unsigned int glyphflags[ROWNO][COLNO]; + unsigned int& Glyphflags(int x, int y) { return glyphflags[y][x]; } QPoint cursor; QPixmap pet_annotation; QPixmap pile_annotation; @@ -42,7 +48,7 @@ private: void Clear(); void Display(bool block); void CursorTo(int x,int y); - void PrintGlyph(int x,int y,int glyph); + void PrintGlyph(int x,int y,int glyph,unsigned *glyphmod); void Changed(int x, int y); void updateTiles(); @@ -64,7 +70,7 @@ public: virtual void CursorTo(int x,int y); virtual void PutStr(int attr, const QString& text); virtual void ClipAround(int x,int y); - virtual void PrintGlyph(int x,int y,int glyph); + virtual void PrintGlyph(int x,int y,int glyph,unsigned *glyphmod); signals: void resized(); diff --git a/win/Qt/qt_plsel.cpp b/win/Qt/qt_plsel.cpp index bbc3132fa..e20735b56 100644 --- a/win/Qt/qt_plsel.cpp +++ b/win/Qt/qt_plsel.cpp @@ -82,14 +82,14 @@ public: { } - void setGlyph(int g) + void setGlyph(int g, bool fem) { NetHackQtGlyphs& glyphs = qt_settings->glyphs(); int gw = glyphs.width(); int gh = glyphs.height(); QPixmap pm(gw,gh); QPainter p(&pm); - glyphs.drawGlyph(p, g, 0, 0); + glyphs.drawGlyph(p, g, 0, 0, fem); p.end(); setIcon(QIcon(pm)); //RLC setHeight(std::max(pm.height()+1,height())); @@ -124,7 +124,7 @@ public: #endif ) { - setGlyph(monnum_to_glyph(roles[id].malenum)); + setGlyph(monnum_to_glyph(roles[id].malenum), false); } }; @@ -139,7 +139,7 @@ public: #endif ) { - setGlyph(monnum_to_glyph(races[id].malenum)); + setGlyph(monnum_to_glyph(races[id].malenum), false); } }; @@ -257,6 +257,7 @@ NetHackQtPlayerSelector::NetHackQtPlayerSelector(NetHackQtKeyBuffer& ks UNUSED) chosen_gend = flags.initgend; chosen_align = flags.initalign; + bool fem = (chosen_gend > ROLE_NONE); // XXX QListView unsorted goes in rev. for (nrole=0; roles[nrole].name.m; nrole++) @@ -264,8 +265,8 @@ NetHackQtPlayerSelector::NetHackQtPlayerSelector(NetHackQtKeyBuffer& ks UNUSED) role->setRowCount(nrole); for (i=0; roles[i].name.m; i++) { QTableWidgetItem *item = new QTableWidgetItem( - QIcon(qt_settings->glyphs().glyph(roles[i].malenum)), - roles[i].name.m); + QIcon(qt_settings->glyphs().glyph(roles[i].malenum, fem)), + roles[i].name.m); item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable); role->setItem(i, 0, item); } @@ -280,7 +281,7 @@ NetHackQtPlayerSelector::NetHackQtPlayerSelector(NetHackQtKeyBuffer& ks UNUSED) race->setRowCount(nrace); for (i=0; races[i].noun; i++) { QTableWidgetItem *item = new QTableWidgetItem( - QIcon(qt_settings->glyphs().glyph(races[i].malenum)), + QIcon(qt_settings->glyphs().glyph(races[i].malenum, fem)), races[i].noun); item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable); race->setItem(i, 0, item); @@ -290,9 +291,13 @@ NetHackQtPlayerSelector::NetHackQtPlayerSelector(NetHackQtKeyBuffer& ks UNUSED) race->setHorizontalHeaderLabels(QStringList("Race")); race->resizeColumnToContents(0); - // TODO: render the alignment and gender labels smaller to match the - // horizontal header labels for role and race; getting the font from - // race table above and setting it for labels below made no difference + // TODO: + // Render the alignment and gender labels smaller to match the + // horizontal header labels for role and race; getting the font from + // race table above and setting it for labels below made no difference. + // + // Maybe, if the order of choosing becomes more dynamic: + // Replace the role and race glyphs when gender gets set. QLabel *gendlabel = new QLabel("Gender"); genderbox->layout()->addWidget(gendlabel); diff --git a/win/Qt/qt_stat.cpp b/win/Qt/qt_stat.cpp index 88a6cfa8c..3fca92c89 100644 --- a/win/Qt/qt_stat.cpp +++ b/win/Qt/qt_stat.cpp @@ -788,7 +788,8 @@ void NetHackQtStatusWindow::updateStats() if (u.usteed) ++k, ride.show(); else ride.hide(); if (Upolyd) { - buf = nh_capitalize_words(mons[u.umonnum].mname); + buf = nh_capitalize_words(pmname(&mons[u.umonnum], + ::flags.female ? FEMALE : MALE)); } else { buf = rank_of(u.ulevel, g.pl_character[0], ::flags.female); } diff --git a/win/Qt/qt_win.cpp b/win/Qt/qt_win.cpp index 3fd51edf9..670ae8da8 100644 --- a/win/Qt/qt_win.cpp +++ b/win/Qt/qt_win.cpp @@ -109,7 +109,7 @@ void NetHackQtWindow::EndMenu(const QString& prompt UNUSED) { puts("unexpected E int NetHackQtWindow::SelectMenu(int how UNUSED, MENU_ITEM_P **menu_list UNUSED) { puts("unexpected SelectMenu"); return 0; } void NetHackQtWindow::ClipAround(int x UNUSED,int y UNUSED) { puts("unexpected ClipAround"); } -void NetHackQtWindow::PrintGlyph(int x UNUSED,int y UNUSED,int glyph UNUSED) { puts("unexpected PrintGlyph"); } +void NetHackQtWindow::PrintGlyph(int x UNUSED,int y UNUSED,int glyph UNUSED, unsigned *glyphmod UNUSED) { puts("unexpected PrintGlyph"); } //void NetHackQtWindow::PrintGlyphCompose(int x,int y,int,int) { puts("unexpected PrintGlyphCompose"); } void NetHackQtWindow::UseRIP(int how UNUSED, time_t when UNUSED) { puts("unexpected UseRIP"); } diff --git a/win/Qt/qt_win.h b/win/Qt/qt_win.h index daa6e0d1d..681b06be1 100644 --- a/win/Qt/qt_win.h +++ b/win/Qt/qt_win.h @@ -40,7 +40,7 @@ public: virtual void EndMenu(const QString& prompt); virtual int SelectMenu(int how, MENU_ITEM_P **menu_list); virtual void ClipAround(int x, int y); - virtual void PrintGlyph(int x, int y, int glyph); + virtual void PrintGlyph(int x, int y, int glyph, unsigned *glyphmod); virtual void UseRIP(int how, time_t when); int nhid; diff --git a/win/X11/winmap.c b/win/X11/winmap.c index 6e2d2aa7c..19cbe0400 100644 --- a/win/X11/winmap.c +++ b/win/X11/winmap.c @@ -73,11 +73,12 @@ static void FDECL(display_cursor, (struct xwindow *)); /* Global functions ======================================================= */ void -X11_print_glyph(window, x, y, glyph, bkglyph) +X11_print_glyph(window, x, y, glyph, bkglyph, glyphmod) winid window; xchar x, y; int glyph; int bkglyph UNUSED; +unsigned *glyphmod UNUSED; { struct map_info_t *map_info; boolean update_bbox = FALSE; @@ -1295,6 +1296,8 @@ boolean inverted; int dest_x = (cur_col - COL0_OFFSET) * tile_map->square_width; int dest_y = row * tile_map->square_height; + if ((tile_map->glyphs[row][cur_col].special & MG_FEMALE)) + tile++; /* advance to the female tile variation */ src_x = (tile % TILES_PER_ROW) * tile_width; src_y = (tile / TILES_PER_ROW) * tile_height; XCopyArea(dpy, tile_pixmap, XtWindow(wp->w), diff --git a/win/X11/winstat.c b/win/X11/winstat.c index a30ed01e7..cbc0ce078 100644 --- a/win/X11/winstat.c +++ b/win/X11/winstat.c @@ -1453,15 +1453,15 @@ long new_value; buf[0] = highc(buf[0]); Strcat(buf, " the "); if (Upolyd) { - char mname[BUFSZ]; + char mnam[BUFSZ]; int k; - Strcpy(mname, mons[u.umonnum].mname); - for (k = 0; mname[k] != '\0'; k++) { - if (k == 0 || mname[k - 1] == ' ') - mname[k] = highc(mname[k]); + Strcpy(mnam, pmname(&mons[u.umonnum], Ugender)); + for (k = 0; mnam[k] != '\0'; k++) { + if (k == 0 || mnam[k - 1] == ' ') + mnam[k] = highc(mnam[k]); } - Strcat(buf, mname); + Strcat(buf, mnam); } else Strcat(buf, rank_of(u.ulevel, g.pl_character[0], flags.female)); diff --git a/win/chain/wc_chainin.c b/win/chain/wc_chainin.c index b6825632f..fb84ab32a 100644 --- a/win/chain/wc_chainin.c +++ b/win/chain/wc_chainin.c @@ -272,12 +272,13 @@ char *posbar; /* XXX can we decode the glyph in a meaningful way? */ void -chainin_print_glyph(window, x, y, glyph, bkglyph) +chainin_print_glyph(window, x, y, glyph, bkglyph, glyphmod) winid window; xchar x, y; int glyph, bkglyph; +int glyphmod[NUM_GLYPHMOD]; { - (*cibase->nprocs->win_print_glyph)(cibase->ndata, window, x, y, glyph, bkglyph); + (*cibase->nprocs->win_print_glyph)(cibase->ndata, window, x, y, glyph, bkglyph, glyphmod); } void diff --git a/win/chain/wc_chainout.c b/win/chain/wc_chainout.c index a4401a1eb..3ad84aa45 100644 --- a/win/chain/wc_chainout.c +++ b/win/chain/wc_chainout.c @@ -336,15 +336,16 @@ char *posbar; #endif void -chainout_print_glyph(vp, window, x, y, glyph, bkglyph) +chainout_print_glyph(vp, window, x, y, glyph, bkglyph, glyphmod) void *vp; winid window; xchar x, y; int glyph, bkglyph; +int glyphmod[NUM_GLYPHMOD]; { struct chainout_data *tdp = vp; - (*tdp->nprocs->win_print_glyph)(window, x, y, glyph, bkglyph); + (*tdp->nprocs->win_print_glyph)(window, x, y, glyph, bkglyph, glyphmod); } void diff --git a/win/chain/wc_trace.c b/win/chain/wc_trace.c index e2939549e..b6519e443 100644 --- a/win/chain/wc_trace.c +++ b/win/chain/wc_trace.c @@ -578,19 +578,20 @@ char *posbar; /* XXX can we decode the glyph in a meaningful way? see mapglyph()? genl_putmixed? */ void -trace_print_glyph(vp, window, x, y, glyph, bkglyph) +trace_print_glyph(vp, window, x, y, glyph, bkglyph, glyphmod) void *vp; winid window; xchar x, y; int glyph, bkglyph; +int glyphmod[NUM_GLYPHMOD]; { struct trace_data *tdp = vp; - fprintf(wc_tracelogf, "%sprint_glyph(%d, %d, %d, %d, %d)\n", INDENT, window, - x, y, glyph, bkglyph); + fprintf(wc_tracelogf, "%sprint_glyph(%d, %d, %d, %d, %d, %lu)\n", INDENT, window, + x, y, glyph, bkglyph, glyphmod); PRE; - (*tdp->nprocs->win_print_glyph)(tdp->ndata, window, x, y, glyph, bkglyph); + (*tdp->nprocs->win_print_glyph)(tdp->ndata, window, x, y, glyph, bkglyph, glyphmod); POST; } diff --git a/win/curses/cursmain.c b/win/curses/cursmain.c index 4035b3c9f..baceb8901 100644 --- a/win/curses/cursmain.c +++ b/win/curses/cursmain.c @@ -646,17 +646,21 @@ curses_cliparound(int x, int y) } /* -print_glyph(window, x, y, glyph, bkglyph) +print_glyph(window, x, y, glyph, bkglyph, glyphmod) -- Print the glyph at (x,y) on the given window. Glyphs are integers at the interface, mapped to whatever the window- port wants (symbol, font, color, attributes, ...there's a 1-1 map between glyphs and distinct things on the map). bkglyph is to render the background behind the glyph. It's not used here. + -- glyphmod (glyphmod[NUM_GLYPHNOD]) provides extended + information about the glyph that window ports can use to + enhance the display in various ways. + */ void curses_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, int glyph, - int bkglyph UNUSED) + int bkglyph UNUSED, unsigned *glyphmod) { int ch; int color; diff --git a/win/curses/cursstat.c b/win/curses/cursstat.c index 6a3a5d833..63c188886 100644 --- a/win/curses/cursstat.c +++ b/win/curses/cursstat.c @@ -1468,7 +1468,7 @@ get_playerrank(char *rank) if (Upolyd) { int k = 0; - Strcpy(buf, mons[u.umonnum].mname); + Strcpy(buf, pmname(&mons[u.umonnum], flags.female ? FEMALE : MALE)); while(buf[k] != 0) { if ((k == 0 || (k > 0 && buf[k-1] == ' ')) && 'a' <= buf[k] && buf[k] <= 'z') diff --git a/win/share/monsters.txt b/win/share/monsters.txt index 6a69c8de6..e14f4611f 100644 --- a/win/share/monsters.txt +++ b/win/share/monsters.txt @@ -27,7 +27,7 @@ Y = (149, 149, 149) Z = (195, 195, 195) 0 = (100, 100, 100) 1 = (72, 108, 108) -# tile 0 (giant ant) +# tile 0 (giant ant,male) { ................ ................ @@ -46,7 +46,45 @@ Z = (195, 195, 195) ......JA.JA..... ................ } -# tile 1 (killer bee) +# tile 1 (giant ant,female) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + .......JAJKKA... + .....JAAAKJJJA.. + .....AKJJAJJAA.. + ...KKAJJJAAA.... + ..BJJAAAAAJJA... + ..JBJAJAJAA..... + .....AJA.JA..... + ......JA.JA..... + ................ +} +# tile 2 (killer bee,male) +{ + ................ + ................ + .PPP.....PP..... + PPPPP...PBPP.... + PBPPP..PBPPP.... + .PPBP.PPLPLL.... + ...PP.PLLALHAH.. + ...AKKKLAHAAHH.. + BBJJJJJJJAHHAA.. + ABJBBJJJJAHAHH.. + .JJABJAJ.J.HH... + .......J.J...... + ................ + ...AAAAAAAAAAA.. + .....AAAAAA..... + ................ +} +# tile 3 (killer bee,female) { ................ ................ @@ -65,7 +103,26 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 2 (soldier ant) +# tile 4 (soldier ant,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + .......JAJKKA... + .....JAAAKJJJA.. + .....AKJJAJJAA.. + .JJKKAJJJAAA.... + JBJJJAAAAAJJA... + JJJBJAJAJAA..... + JAAJJAJA.JA..... + ..JJAAJA.JA..... + ................ +} +# tile 5 (soldier ant,female) { ................ ................ @@ -84,7 +141,26 @@ Z = (195, 195, 195) ..JJAAJA.JA..... ................ } -# tile 3 (fire ant) +# tile 6 (fire ant,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + .......DACCCA... + .....DAAACDDDA.. + .....ACDDADDAA.. + ...CCADDDAAA.... + ..GDDAAAAADDA... + ..DGDADADAA..... + .....ADA.DA..... + ......DA.DA..... + ................ +} +# tile 7 (fire ant,female) { ................ ................ @@ -103,7 +179,26 @@ Z = (195, 195, 195) ......DA.DA..... ................ } -# tile 4 (giant beetle) +# tile 8 (giant beetle,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ......KKDKK..... + ....KACLCJJD.... + ...KCLCJJDDDK... + ...DCCJDADDAD... + ...ADJDDDDDDD... + ...BAKDDAADKAA.. + ...ABAKDDK...... + ......AA.AA..... + ................ + ................ +} +# tile 9 (giant beetle,female) { ................ ................ @@ -122,7 +217,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 5 (queen bee) +# tile 10 (queen bee,male) +{ + ................ + .PPP.....PP..... + PPPPP...PPPP.... + PPPPP..PPBPP.... + PBPPP..PBPPP.... + .PPBP.PPLPLL.... + ...PP.PLLALHAH.. + ...AKKKLAHAAHH.. + BBJJJJJJJAHHAAH. + ABJBBJJJJAHAHHH. + .JJABJAJ.JHHHAA. + ...J...J.JAAAHH. + ..JJ..JJ.J.HHAH. + ..JAAAJAAJ..HH.. + .....AAAAAA..... + ................ +} +# tile 11 (queen bee,female) { ................ .PPP.....PP..... @@ -141,7 +255,26 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 6 (acid blob) +# tile 12 (acid blob,male) +{ + ................ + ................ + ................ + .....KDDA....... + ...DDKDDKA...... + .DDDIIIDJDA..... + D.IIOOIIDAIA.... + .DKNNNODIDA..IA. + IDJNANOJDDJA.... + ADIDNOIDIDDDA... + ...JDIKIADKIA... + .IA.IDID.JDA.... + ...I.DDA....DA.. + .........IA..... + ..IA............ + ................ +} +# tile 13 (acid blob,female) { ................ ................ @@ -160,7 +293,26 @@ Z = (195, 195, 195) ..IA............ ................ } -# tile 7 (quivering blob) +# tile 14 (quivering blob,male) +{ + ................ + ................ + .....PPPP....... + .........P...... + .P.OOOPPE..AAA.. + P.OPBBBPOEAEAA.. + P.PBNNNP.OEAAEA. + P.PNNNNNPOEEAEA. + POPNAANNEO.OAEA. + .OPNAANNE..OAAA. + .OPBNNNEPP.OEAA. + BPOPEEEBBPO.EEA. + BBBPBBBBBBPPPPA. + ..BBBBBBBBBBPA.. + ................ + ................ +} +# tile 15 (quivering blob,female) { ................ ................ @@ -179,7 +331,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 8 (gelatinous cube) +# tile 16 (gelatinous cube,male) +{ + ................ + ................ + ................ + ................ + ................ + .......LLL...... + .....LLLLLLLL... + ...LLLLLLLLLD... + ...CLLLLLLLDDA.. + ...CGGCLLLDDDAA. + ...CAGCGGDDDDAAA + ...CCCCAGDDDAAAA + .....CCCCDDAAAA. + .......CCDAAA... + ................ + ................ +} +# tile 17 (gelatinous cube,female) { ................ ................ @@ -198,7 +369,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 9 (chickatrice) +# tile 18 (chickatrice,male) +{ + ................ + ................ + ................ + ................ + .......OO....... + ......HAOO...... + .....HHOOH.HHA.. + ........OOHOA... + ........OOFA.... + ........FGGFA... + ........AGFGAA.. + ...........GA... + .......F..FFA... + .......AFFAA.... + ........AA...... + ................ +} +# tile 19 (chickatrice,female) { ................ ................ @@ -217,7 +407,26 @@ Z = (195, 195, 195) ........AA...... ................ } -# tile 10 (cockatrice) +# tile 20 (cockatrice,male) +{ + ................ + ...D.DD......... + ....DD.......... + ....NL..AA...... + ..HHAN.AAA...... + .HH.NO..AAAA.... + ...AOOLFFFAA.... + ...OOLKGGFFAA... + ...AOAGGFGFFAA.. + .......GFFGFAA.. + .........FGGAA.. + .....FA...FFA... + ....FA....FFA... + ....FA..FFFA.... + .....FFFFA...... + ................ +} +# tile 21 (cockatrice,female) { ................ ...D.DD......... @@ -236,7 +445,26 @@ Z = (195, 195, 195) .....FFFFA...... ................ } -# tile 11 (pyrolisk) +# tile 22 (pyrolisk,male) +{ + ................ + ...D.DD......... + ....DD.......... + ....NB..AA...... + ..HHAN.AAA...... + .HH.NB..AAAA.... + ...APBBJJJAA.... + ...PPPKDDKJAA... + ...APADDKDKJAA.. + .......DJKDJAA.. + .........JDDAA.. + .....JA...JJA... + ....JA....JJA... + ....KA..KKKA.... + .....JKKKA...... + ................ +} +# tile 23 (pyrolisk,female) { ................ ...D.DD......... @@ -255,7 +483,26 @@ Z = (195, 195, 195) .....JKKKA...... ................ } -# tile 12 (jackal) +# tile 24 (jackal,male) +{ + ................ + ................ + ................ + ................ + ...O..O......... + ...O.OO...O..... + ..OOOO.....O.... + ..IOIOO....O.A.. + .OLLOOOL...O.A.. + DOOOAOOOOOOOAA.. + ..AAOOOOOOOOAA.. + ....OJOOOOOLAA.. + ....OJOLKALKAA.. + ...OOAOAAAOAA... + .....OO..OOA.... + ................ +} +# tile 25 (jackal,female) { ................ ................ @@ -274,7 +521,26 @@ Z = (195, 195, 195) .....OO..OOA.... ................ } -# tile 13 (fox) +# tile 26 (fox,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ....C........... + ....C........... + ..CCAC...CCC.... + ..ACCCCCCACCC... + ...AACCCC.ACC... + ....ACAAC..AA... + ...AC.ACA....... + ................ +} +# tile 27 (fox,female) { ................ ................ @@ -293,7 +559,7 @@ Z = (195, 195, 195) ...AC.ACA....... ................ } -# tile 14 (coyote) +# tile 28 (coyote,male) { ................ ................ @@ -312,15 +578,53 @@ Z = (195, 195, 195) ................ ................ } -# tile 15 (werejackal) +# tile 29 (coyote,female) { ................ ................ ................ - ................ - ...O..O......... - ...O.OO...O..... - ..OOOO.....O.... + ...K..K......... + ...K.KK......KKK + ..KKKK......KKKA + ..NCNK.KKKKKAAA. + .KCCKKKKKKKKK... + KKCKAKKKKKKKK... + DKKKAKAKKKKAK... + ..AAKAAKAAAAK... + ....AKAKAAAAK... + ...AKKAKA.AKK... + .....AKK........ + ................ + ................ +} +# tile 30 (werejackal,male) +{ + ................ + ................ + ................ + ................ + ...O..O......... + ...O.OO...O..... + ..OOOO.....O.... + ..IOIOO....O.A.. + .OLLOOOL...O.A.. + DOOOALLOOOOOAA.. + ..AALLLLOOOOAA.. + ....LJLLLOOLAA.. + ....LJLLKALKAA.. + ..LLLALAAAOAA... + ...L.LL..OOA.... + ......L......... +} +# tile 31 (werejackal,female) +{ + ................ + ................ + ................ + ................ + ...O..O......... + ...O.OO...O..... + ..OOOO.....O.... ..IOIOO....O.A.. .OLLOOOL...O.A.. DOOOALLOOOOOAA.. @@ -331,7 +635,26 @@ Z = (195, 195, 195) ...L.LL..OOA.... ......L......... } -# tile 16 (little dog) +# tile 32 (little dog,male) +{ + ................ + ................ + ................ + ................ + ...J..J......... + ...J.JJ...K..... + ..JJJJ.....K.... + ..NJNKK....K.A.. + .JJJCKK....K.A.. + .PJJAKCKKCKKAA.. + .DDAACKKCKKKAA.. + ....KJKJCJKJAA.. + ....KJKJJAJJAA.. + ...KKAKAAAKAA... + .....KK...KA.... + ................ +} +# tile 33 (little dog,female) { ................ ................ @@ -350,7 +673,26 @@ Z = (195, 195, 195) .....KK...KA.... ................ } -# tile 17 (dingo) +# tile 34 (dingo,male) +{ + ................ + ................ + ................ + .............C.. + ...C..C.......C. + ...C.CC.......CA + ..CCCCK.......CA + ..ACACCKCCCCCCAA + ..LLCCCKCCCLCCCA + .KCCACKCLLLLACCA + ..AACAACLLAAACCA + ....ACACAAAAAACA + ....CCACAAA..CCA + .....ACCA....... + ................ + ................ +} +# tile 35 (dingo,female) { ................ ................ @@ -369,7 +711,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 18 (dog) +# tile 36 (dog,male) +{ + ................ + ................ + ................ + ...J..J.....K... + ...J.JJ......K.. + ..JJJJ.......K.. + ..NJNKK......K.A + .JJJCKKKK....K.A + .PJCAKCKKKKCKKAA + .DDAACKKKKCKKKAA + ..AAKJKKJJCJKJAA + ....KJKKJJJAJJAA + ....KAKJAAAAKJA. + ...KKAKAAAAAKAA. + .....KKAA...KA.. + ................ +} +# tile 37 (dog,female) { ................ ................ @@ -388,7 +749,26 @@ Z = (195, 195, 195) .....KKAA...KA.. ................ } -# tile 19 (large dog) +# tile 38 (large dog,male) +{ + ................ + ................ + ...J..J.....K... + ...J.JJ......K.. + ..JJJJ.......K.. + ..NJNKKK.....K.A + .JJJCKKKKK..JK.A + .PJCAKCKKKKCKKAA + .DDAACKKKKCKKKAA + ..AAKJKKJJCJKJAA + ...JKJKKJJJAJJAA + ....KAKJAAAAKJA. + ....KAKJAAAAKJA. + ...KKAKAAAAAKAA. + .....KKAA...KA.. + ................ +} +# tile 39 (large dog,female) { ................ ................ @@ -407,7 +787,26 @@ Z = (195, 195, 195) .....KKAA...KA.. ................ } -# tile 20 (wolf) +# tile 40 (wolf,male) +{ + ................ + ................ + ................ + ...P..P.....P... + ...P.PP......P.. + ..PPPP.......P.. + ..N.NPP......P.A + .P..PPPPP....P.A + PP.PAPPPPPPPPPAA + DPPPAPPPPPPPPPAA + ..AAP.PP..P.P.AA + ....P.PP...A.PAA + ....PAP.AAAAP.A. + ...PPAPAAAAAPAA. + .....PPAA..PPA.. + ................ +} +# tile 41 (wolf,female) { ................ ................ @@ -426,7 +825,26 @@ Z = (195, 195, 195) .....PPAA..PPA.. ................ } -# tile 21 (werewolf) +# tile 42 (werewolf,male) +{ + ................ + ................ + ................ + ...P..P.....P... + ...P.PP......P.. + ..PPPP.......P.. + ..N.NPP......P.A + .P..PPPPP....P.A + PP.PAPPPPPPPPPAA + DPPPALPPPPPPPPAA + ..AALLPL..P.P.AA + ....L.LL...A.PAA + ....LAL.AAAAP.A. + ..LLLALAAAAAPPA. + ...L.LLAA..PP... + .....LL......... +} +# tile 43 (werewolf,female) { ................ ................ @@ -445,7 +863,26 @@ Z = (195, 195, 195) ...L.LLAA..PP... .....LL......... } -# tile 22 (winter wolf cub) +# tile 44 (winter wolf cub,male) +{ + ................ + ................ + ................ + ................ + ...N..N......... + ...N.NB...N..... + ..NNNN.....N.... + ..DNDNB....N.A.. + ..NNNNB....N.A.. + .NNNNNNNNNNNAA.. + .DNBBNNNNNNBAA.. + ....NNNNNNNBAA.. + ....NNNBBANBAA.. + ...NBANAAANAA... + .....NB..NBA.... + ................ +} +# tile 45 (winter wolf cub,female) { ................ ................ @@ -464,7 +901,26 @@ Z = (195, 195, 195) .....NB..NBA.... ................ } -# tile 23 (warg) +# tile 46 (warg,male) +{ + ................ + ...P..P....PP... + ...P.PP......P.. + ..PPPP.......P.A + ..N.NPP......P.A + .P..PPPPP....P.A + PPPPDPPPPPPPPPAA + DPPNDPPPPPPPPPAA + ..DDDPPPPPPPPPAA + PNDNP.PPPPPPPPAA + .PPPPAPPPPAPP.A. + ...PAAPPAAAAPPAA + ...PAAP.AAAAP.A. + .PPPAAPAAAAAPAA. + ....PPPAA.PPPA.. + ................ +} +# tile 47 (warg,female) { ................ ...P..P....PP... @@ -483,7 +939,26 @@ Z = (195, 195, 195) ....PPPAA.PPPA.. ................ } -# tile 24 (winter wolf) +# tile 48 (winter wolf,male) +{ + ................ + ................ + ................ + ...N..N.....N... + ...N.NN......N.. + ..NNNN.......N.. + ..DODNN......N.A + .NOONNNNN....N.A + NNONANNNNNNNNNAA + DNNBANNNNNNNNNAA + ..AANNNNNNNBNNAA + ....NBNNNBBANNAA + ....NANBAAAANBA. + ...NNANAAAAANAA. + .....NNAA..NNA.. + ................ +} +# tile 49 (winter wolf,female) { ................ ................ @@ -502,7 +977,26 @@ Z = (195, 195, 195) .....NNAA..NNA.. ................ } -# tile 25 (hell hound pup) +# tile 50 (hell hound pup,male) +{ + ................ + ................ + ................ + ................ + ...C..C......... + ...C.CC...C..... + ..CCCC.....C.... + ..DCDCC....C.A.. + .CCCCCC....C.A.. + .PCCACCCCCCCAA.. + .CHAACCCCCCCAA.. + CHC.CCCCCCCCAA.. + .D..CCCCCACCAA.. + ...CCACAAACAA... + .....CC...CA.... + ................ +} +# tile 51 (hell hound pup,female) { ................ ................ @@ -521,7 +1015,26 @@ Z = (195, 195, 195) .....CC...CA.... ................ } -# tile 26 (hell hound) +# tile 52 (hell hound,male) +{ + ................ + ...C..C....CC... + ...C.CC......C.. + ..CCCC.......C.A + ..DJDCC......C.A + .CCCCCCCC....C.A + CCCCDCCCCCCCCCAA + .CHC.CCCCCCCCCAA + CHC..CCCCCCCCCAA + .D..CCCCCCCCCCAA + ...CCACCCCACC.A. + ...CAACCAAAACCAA + ...CAAC.AAAAC.A. + .CCCAACAAAAACAA. + ....CCCAA.CCCA.. + ................ +} +# tile 53 (hell hound,female) { ................ ...C..C....CC... @@ -540,7 +1053,26 @@ Z = (195, 195, 195) ....CCCAA.CCCA.. ................ } -# tile 27 (Cerberus) +# tile 54 (Cerberus,male) +{ + ................ + ..J..J.......... + ..JJJJ.J..J..... + .NJNJ..J.JJ..... + JJJJKAJJJJ....J. + PJJJJANJNKK...J. + DJKJAJJJKJJK..J. + ..AAJPJKAJKJKJJ. + ..JJJDDAJKJJJJJA + ..JJJAAJJJJJJJJA + .JKKKJJJKJJKJJAA + .JJAAKJJKJJJKJAA + JJAAAAJJAAAAJJA. + JAAAAAJAAAAAJAA. + .....JJAA...JA.. + ................ +} +# tile 55 (Cerberus,female) { ................ ..J..J.......... @@ -559,7 +1091,7 @@ Z = (195, 195, 195) .....JJAA...JA.. ................ } -# tile 28 (gas spore) +# tile 56 (gas spore,male) { ................ ................ @@ -578,7 +1110,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 29 (floating eye) +# tile 57 (gas spore,female) +{ + ................ + ................ + ................ + .....PFGGFP..... + ....PGFFFFFP.... + ...PFFFFFGGFP... + ...FFGGFFGGFF... + ...GFGGFFFFFG... + ...GFFFFFFFFG... + ...FFFFGGFFFF... + ...PGGFGGFGGP... + ....PGFFFFGP.... + .....PFGGFP..... + ................ + ................ + ................ +} +# tile 58 (floating eye,male) +{ + ................ + ................ + ......ONNNO..... + ....PNNNNNNNP... + ....NNNNNNNNN... + ...ONNBBBBNNNO.. + ...NNBBEEBBNNN.. + ...NNBEAAEBNNN.. + ...ONBEAAEBNNO.. + ....NBBEEBBNN... + ....PNBBBBNNPAA. + ......ONNNOAAAA. + ......AAAAAAAAA. + .......AAAAAAA.. + ................ + ................ +} +# tile 59 (floating eye,female) { ................ ................ @@ -597,7 +1167,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 30 (freezing sphere) +# tile 60 (freezing sphere,male) +{ + ................ + ................ + ......PBBBP..... + ....PBBBBBBBP... + ....BBBBBBBBB... + ...PBPPPBBBBBP.. + ...BBNNBBPPPBB.. + ...BBANPBNNBBB.. + ...PBBPPBANPBP.. + ....BBBBBBPPB... + ....PBBBBBBBPAA. + ......PBBBPAAAA. + ......AAAAAAAAA. + .......AAAAAAA.. + ................ + ................ +} +# tile 61 (freezing sphere,female) { ................ ................ @@ -616,7 +1205,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 31 (flaming sphere) +# tile 62 (flaming sphere,male) +{ + ................ + ....C...H....... + ....C....O...C.. + ...C..H.CC...C.. + ...C..C.CC..CC.. + ...DCA.DDC.ACC.. + .AHCDCADDCAADC.. + .AACDCDDDDDADD.. + ..ACDDDJJJDDDD.. + ..ADDCAKDDACDD.. + ...ADAKDDCDAD... + ...ADADHCHCAD... + ....DADDDCDAD... + .....DADDDAD.... + ......JJJJJ..... + ................ +} +# tile 63 (flaming sphere,female) { ................ ....C...H....... @@ -635,7 +1243,26 @@ Z = (195, 195, 195) ......JJJJJ..... ................ } -# tile 32 (shocking sphere) +# tile 64 (shocking sphere,male) +{ + ................ + .....PPPPPP..... + ...PPIAAADAPP... + ..PAAAIAAADDAP.. + ..PHAAAPBOAAAP.. + .PAHHAPBBBOAAAP. + .PHAAAPBBBBAHHP. + .PAAAAPPBBBAAAP. + .PAAAIAPPPAAAIP. + .PIIIAAAAAAIIAP. + ..PIAANAAPAAAIP. + ..PIAANAAAPAAP.. + ...PANANAPAPAP.. + ....PPAIAPAPP... + ......PPPPP..... + ................ +} +# tile 65 (shocking sphere,female) { ................ .....PPPPPP..... @@ -654,7 +1281,26 @@ Z = (195, 195, 195) ......PPPPP..... ................ } -# tile 33 (beholder) +# tile 66 (beholder,male) +{ + ....OA..OA...... + ..OA.DADA.OA.OA. + ...DA.DADADADD.. + ..OADDOOOODDADO. + ...DDHOAAOHDDA.. + ...JDHOAAOHDDJ.. + ...DDDOOOODDDD.. + ...DDDDDDDDDDD.. + ...JDAOAAAOADJ.. + ....DDAAOAADD... + ....PDDDDDDDPAA. + ......JDDDJAAAA. + ......AAAAAAAAA. + .......AAAAAAA.. + ................ + ................ +} +# tile 67 (beholder,female) { ....OA..OA...... ..OA.DADA.OA.OA. @@ -673,7 +1319,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 34 (kitten) +# tile 68 (kitten,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ...........K.... + ............C... + ....C.C.....L.A. + ...CCCCJ....C.A. + ...NCNCJCCLCL.A. + ...CCCCJCCLCCAA. + ....IACCLLCCCAA. + .....CACCJCCJA.. + ......CCA..CA... + ................ +} +# tile 69 (kitten,female) { ................ ................ @@ -692,7 +1357,26 @@ Z = (195, 195, 195) ......CCA..CA... ................ } -# tile 35 (housecat) +# tile 70 (housecat,male) +{ + ................ + ................ + ................ + ................ + ................ + ...........K.... + ............C... + ...C.C......L.A. + ..CCCCJ.....C.A. + .CNCNCJCLCLCL.A. + .CCCCCJCLCLCCAA. + ..CICJCCLCLCLAA. + ...AACCLCLCCCAA. + ...CCACCJJCCJA.. + .....CCA...CA... + ................ +} +# tile 71 (housecat,female) { ................ ................ @@ -711,7 +1395,26 @@ Z = (195, 195, 195) .....CCA...CA... ................ } -# tile 36 (jaguar) +# tile 72 (jaguar,male) +{ + ................ + ................ + ................ + ................ + ..C..C......C... + ..CC.CJ......C.A + .CCCCCJ......C.A + .GCGCCJCAACCJC.A + .CCCCCJCCCCCCCAA + .CDDDJCAACCAJCAA + ..CCACCAJCCAACAA + ....CACCJJJCCJA. + ....CACAAAAACJA. + ...CKACAAAAACAA. + .....CCAA...CA.. + ................ +} +# tile 73 (jaguar,female) { ................ ................ @@ -730,7 +1433,26 @@ Z = (195, 195, 195) .....CCAA...CA.. ................ } -# tile 37 (lynx) +# tile 74 (lynx,male) +{ + ................ + ................ + ................ + ................ + O....O.......... + AC.CCA.......... + .CCCA........CA. + .GCGCOAKKKKK.LA. + .CKCCAJCCCCCKA.. + LLDDLLACLLLCCAA. + ..CC.AACLLLCCAA. + .......CAAAACAA. + ....CACAAAACCA.. + ................ + ................ + ................ +} +# tile 75 (lynx,female) { ................ ................ @@ -749,7 +1471,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 38 (panther) +# tile 76 (panther,male) +{ + ................ + ................ + ............AA.. + ..............A. + ..............A. + .A...A........A. + .EA.AE........A. + .AAAAAEAAAAAAA.. + .AAAAAEAAAAAAA.. + .HAHAA.AAAAAAAA. + .AAAA.AAAAAEAAA. + .AAA..AAAAAEAAA. + .....AA....AAA.. + ..AAAA..AAAA.... + ................ + ................ +} +# tile 77 (panther,female) { ................ ................ @@ -768,7 +1509,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 39 (large cat) +# tile 78 (large cat,male) +{ + ................ + ................ + ................ + ................ + ............K... + .............C.. + ...C.C.......L.A + ..CCCCJ......C.A + .CNCNCJCLCCLCL.A + .CCCCCJCLCCLCCAA + ..CDCJCCLCCLCLAA + ...AACCLCCLCCCAA + ....CACCJJJCCJA. + ...CKALAAAAACAA. + .....CCAA...CA.. + ................ +} +# tile 79 (large cat,female) { ................ ................ @@ -787,7 +1547,26 @@ Z = (195, 195, 195) .....CCAA...CA.. ................ } -# tile 40 (tiger) +# tile 80 (tiger,male) +{ + ................ + ................ + ................ + ................ + ..C..C......C... + .CCJCC.......C.A + .CAACCJ......A.A + .GAGCCJACACAJC.A + .CCCCCACACACACAA + .ODOCACCACACACAA + .OCOACCJACACACAA + ....CACJAJAJCAA. + ....AACAAAAAAJA. + ...CKACAAAAACAA. + .....CCAA..CCA.. + ................ +} +# tile 81 (tiger,female) { ................ ................ @@ -806,7 +1585,26 @@ Z = (195, 195, 195) .....CCAA..CCA.. ................ } -# tile 41 (displacer beast) +# tile 82 (displacer beast,male) +{ + ................ + ........E....... + .......E.E..AA.. + DEEEA..A.E....A. + ....EA.E.D....A. + .A...A.E......A. + .EA.AEAAA.....A. + .AAAAAAAAAA..A.. + .AAAAEAAAAAAAA.. + .HAHAEAAAAAAAAA. + .AAAAEAAAAAAAAA. + .AAA.AAAAAAAAAA. + .....AE.AEEA.EA. + ....AE.AE.EA.EA. + ...AE.AE.EA.EA.. + ................ +} +# tile 83 (displacer beast,female) { ................ ........E....... @@ -825,7 +1623,7 @@ Z = (195, 195, 195) ...AE.AE.EA.EA.. ................ } -# tile 42 (gremlin) +# tile 84 (gremlin,male) { ................ ................ @@ -844,14 +1642,52 @@ Z = (195, 195, 195) ...GFA.FGA...... ................ } -# tile 43 (gargoyle) +# tile 85 (gremlin,female) { ................ ................ - ...PAPPPPAP..... - ..PA......AP.... - ..P.DD..DDAP.... - ....PD..DPA..... + ................ + GGGA....AGGG.... + .GGGFAAAGGG..... + ..FFFFFFFF...... + ...NDFFDNA...... + ...GNFFNGA...... + ...GFFFFGA..AA.. + ...AGFFFAFAAAAA. + ..GFAGFAFFFAAAA. + .GFGFAAFFAFAAAA. + .GF.GFAGAAFAAAA. + ....FFAGFAA.AA.. + ...GFA.FGA...... + ................ +} +# tile 86 (gargoyle,male) +{ + ................ + ................ + ...PAPPPPAP..... + ..PA......AP.... + ..P.DD..DDAP.... + ....PD..DPA..... + ....P....PA..AA. + ....AP...A.AAAAA + ...P.AP.A...AAAA + ..P.P.AA..A.AAAA + ..PA.P.APAA.AAAA + ..PA.P....A.AA.. + .....P....AAAA.. + .....P.AP.AA.... + ....PFA.FPA..... + ................ +} +# tile 87 (gargoyle,female) +{ + ................ + ................ + ...PAPPPPAP..... + ..PA......AP.... + ..P.DD..DDAP.... + ....PD..DPA..... ....P....PA..AA. ....AP...A.AAAAA ...P.AP.A...AAAA @@ -863,7 +1699,26 @@ Z = (195, 195, 195) ....PFA.FPA..... ................ } -# tile 44 (winged gargoyle) +# tile 88 (winged gargoyle,male) +{ + ...K......K..... + ...KJ....KJ..... + ..KJAPPPPAJJ.... + ..KJ......AJ.... + ..KJDD..DDAJ.... + .KJAPD..DPAJJ... + .KJAP....PAAJAA. + KJA.AP...A.AJJAA + J..P.AP.A...AJAA + ..P.P.AA..A.AAAA + ..PA.P.APAA.AAAA + ..PA.P....A.AA.. + .....P....AAAA.. + .....P.AP.AA.... + ....PFA.FPA..... + ................ +} +# tile 89 (winged gargoyle,female) { ...K......K..... ...KJ....KJ..... @@ -882,7 +1737,26 @@ Z = (195, 195, 195) ....PFA.FPA..... ................ } -# tile 45 (hobbit) +# tile 90 (hobbit,male) +{ + ................ + ................ + ................ + ................ + ......JJA....... + .....JJJJA...... + ....JLFLFJ...... + ....JLLLLJ...... + ....JKLLKJJ.AA.. + ...CLLLLLLCAAA.. + ..CLALLLLALCA... + ..LLAJJKJALLA... + ...L.LKJLALAA... + .....LLALLA.A... + ....LLL.LLL..... + ................ +} +# tile 91 (hobbit,female) { ................ ................ @@ -901,7 +1775,26 @@ Z = (195, 195, 195) ....LLL.LLL..... ................ } -# tile 46 (dwarf) +# tile 92 (dwarf,male) +{ + ................ + ................ + ................ + ................ + ......B......... + .....BEE........ + ....BBEEE....... + ....BLLLE....... + .....OLO...AAA.. + ...BBOOOEEAAAA.. + ...BABOEAEAAAA.. + ....LBBELAAAA... + ....EBAEEAA..... + ....BEAEB.A..... + ................ + ................ +} +# tile 93 (dwarf,female) { ................ ................ @@ -920,7 +1813,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 47 (bugbear) +# tile 94 (bugbear,male) +{ + ................ + ................ + ......K......... + .K..KKK......... + .KKKKKK......... + KADKADKKK....... + KKKKKKKJKK...... + KAPAPAKJJKJ..... + KAAAAAKKJKJJ.... + .KKKKKJKAKKJ.... + ..KAJJCAKKKJ.AA. + ..KK.KKKKKJJAA.. + ...C..KJAKJAA... + .....CCAAKJA.... + ........CCA..... + ................ +} +# tile 95 (bugbear,female) { ................ ................ @@ -939,7 +1851,26 @@ Z = (195, 195, 195) ........CCA..... ................ } -# tile 48 (dwarf lord) +# tile 96 (dwarf leader,male) +{ + ................ + ................ + ................ + ................ + ......B......... + .....BEE........ + ....HHHHH....... + ....BLLLE....... + ....BOLOE..AAA.. + ...BBOOOEEAAAA.. + ...BABOEAEAAAA.. + ....LBBELAAAA... + ....EBAEEAA..... + ....BEAEB.A..... + ................ + ................ +} +# tile 97 (dwarf leader,female) { ................ ................ @@ -958,7 +1889,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 49 (dwarf king) +# tile 98 (dwarf ruler,male) +{ + ................ + ................ + ................ + ................ + ....H.C.H....... + ....HCHCH....... + ....HHHHH....... + ....BLLLE...A... + .....OLO...AAAA. + ...EBOOOEEAAAA.. + ...BABOEAEAAAA.. + ....LBBELAAAA... + ....EBAEEAA..... + ....BEAEB.A..... + ................ + ................ +} +# tile 99 (dwarf ruler,female) { ................ ................ @@ -977,7 +1927,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 50 (mind flayer) +# tile 100 (mind flayer,male) +{ + ................ + .......IIIIC.... + .....IIIIIIC.... + ....IIIIIIIC.... + ...IGIIIIGC..... + ...IIGINGIC..... + ....IIIIIC...... + ....IAIAIF...... + ....IAIAIF...... + ....IAIAIFI..... + .....FIFIFIC.AA. + ....CBIBBF.CAAA. + ...IIIBBFFACAAA. + ......BBFCAAAA.. + ......CFFCAA.... + ....IIC.IIA..... +} +# tile 101 (mind flayer,female) { ................ .......IIIIC.... @@ -996,7 +1965,26 @@ Z = (195, 195, 195) ......CFFCAA.... ....IIC.IIA..... } -# tile 51 (master mind flayer) +# tile 102 (master mind flayer,male) +{ + ................ + .......IIIIC.... + .....IIIIIIC.... + ....IIIIIIIC.... + ...IGIIIIGC..... + ...IIGINGIC..... + .EEEIIIIICEEEE.. + ..EEIAIAIEEEE... + ...EIAIAIEEE.... + ....IAIAIEEE.... + ....EFIFIEEE.AA. + ....CBIBBEEEAAA. + ...IIIBBEEEEAAA. + ....EEBEEEEAAA.. + ...EEECEEEAA.... + ....IIC.IIA..... +} +# tile 103 (master mind flayer,female) { ................ .......IIIIC.... @@ -1015,7 +2003,26 @@ Z = (195, 195, 195) ...EEECEEEAA.... ....IIC.IIA..... } -# tile 52 (manes) +# tile 104 (manes,male) +{ + ................ + ................ + ....PP.......... + ...PPPP......... + ..PAPAP......... + ..PPPPP.PPP.P... + ..P..PPPP....... + ..P..PPPPP...P.. + ..PPPPP.PPP..... + ..P.P.P.PP.P.... + .P...P.PPPP..... + .P....PPP.PP.... + ..P....P.P.P.P.. + ........P....... + ................ + ................ +} +# tile 105 (manes,female) { ................ ................ @@ -1034,7 +2041,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 53 (homunculus) +# tile 106 (homunculus,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ......JJJ....... + ......LLC....... + ......LLC....... + .....BBPPPAA.... + ....L.BPPACAA... + ......BAPAAAA... + .....LLALCA..... + ................ + ................ +} +# tile 107 (homunculus,female) { ................ ................ @@ -1053,7 +2079,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 54 (imp) +# tile 108 (imp,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + .....O.D.O...... + .....OCDDO...... + ......CDD....... + .....GGFFFAA.... + ....C.GFFADAA... + ......GAFAAAA... + .....CDADDA..... + ................ + ................ +} +# tile 109 (imp,female) { ................ ................ @@ -1072,7 +2117,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 55 (lemure) +# tile 110 (lemure,male) +{ + ................ + ................ + ....PP.......... + ...PPPP......... + ..PAPAP....P.... + ..PPPPP..PP.P... + ..P..PPPPPPPP... + ..P..PPPPPPP.... + ..PPPPPPPPP..... + ....PPPPPPPP.... + ..PPPPPPPPPP.... + ...PPPPPPPPPP... + ..P.P..PPPP.PP.. + ........P.PP.... + ................ + ................ +} +# tile 111 (lemure,female) { ................ ................ @@ -1091,7 +2155,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 56 (quasit) +# tile 112 (quasit,male) { ................ ................ @@ -1110,7 +2174,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 57 (tengu) +# tile 113 (quasit,female) +{ + ................ + ................ + ................ + ................ + ................ + ................ + .....O.D.O...... + .....OCDDOD..... + ......CDD.D..... + .....GGFFFAA.... + ....C.GFFAAADA.. + ....C.GFFJJDA... + ......GAFAAAA... + .....CDADDA..... + ................ + ................ +} +# tile 114 (tengu,male) +{ + ................ + .......PP....... + ......PPPP...... + .....DPPNP...... + ....DDDPPP...... + ....DDPPPP...... + ....D..PPA...... + .....PIAAIP.AAA. + ....PPPIIPPPAAA. + ....PAPPPPAPAAA. + ....PAHHHHAPAAA. + ....LAPPPPALAAA. + ......PPPPAAAA.. + ......PPPPAA.A.. + .....LLA.LLA.... + ................ +} +# tile 115 (tengu,female) { ................ .......PP....... @@ -1129,7 +2231,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 58 (blue jelly) +# tile 116 (blue jelly,male) +{ + ................ + ................ + ................ + .......E........ + ......OBE....... + ...BE.OBEBOE.... + ..OBEOBBEOBBE... + ..OBEOBBEOBBE... + ..BBBGGBGGBEEE.. + ..BBBAGBAGEEEEA. + ..BBBBBBEBEEEEAA + ...BBBBBBBEEEAAA + ....BBBBBEEEAAA. + ......BBBEEAA... + ................ + ................ +} +# tile 117 (blue jelly,female) { ................ ................ @@ -1148,7 +2269,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 59 (spotted jelly) +# tile 118 (spotted jelly,male) +{ + ................ + ................ + ................ + .......E........ + ......OBE....... + ...BE.OCEBOE.... + ..OCEOCCEOBCE... + ..OCEOBCEOCBD... + ..BBBHHBHHBEDD.. + ..CCBAHBAHEEEEA. + ..BBCBBBEBEEDEAA + ...BBBCBBBEEDAAA + ....BCCCBEEDAAA. + ......CCBEEAA... + ................ + ................ +} +# tile 119 (spotted jelly,female) { ................ ................ @@ -1167,7 +2307,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 60 (ochre jelly) +# tile 120 (ochre jelly,male) +{ + ................ + ................ + ................ + .......D........ + ......LCD....... + ...CD.LCDCLD.... + ..LCDLCCDLCCD... + ..LCDLCCDLCCD... + ..CCCGGCGGCDDD.. + ..CCCAGCAGDDDDA. + ..CCCCCCDCDDDDAA + ...CCCCCCCDDDAAA + ....CCCCCDDDAAA. + ......CCCDDAA... + ................ + ................ +} +# tile 121 (ochre jelly,female) { ................ ................ @@ -1186,7 +2345,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 61 (kobold) +# tile 122 (kobold,male) +{ + ................ + ................ + ................ + ................ + ...N...N........ + ...NBPBN........ + ...BABAB........ + ....BBPA..A..... + ...BBABPA.AA.A.. + ..BPBBBBPAAAAA.. + ..BAPBPAPAAAAA.. + ....PBPAAAAAA... + ....BABAAAA..... + ...BBABBA....... + ................ + ................ +} +# tile 123 (kobold,female) { ................ ................ @@ -1205,7 +2383,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 62 (large kobold) +# tile 124 (large kobold,male) +{ + ................ + ................ + ................ + ...N...N........ + ...NBPBN........ + ...BABAB........ + ....BBPA..A..... + ...BBABPA.AA.... + ..BPBBBBPAAA.A.. + ..BAPBPAPAAAAA.. + ..BAPBPAPAAAAA.. + ....PBPAAAAAA... + ....BABAAAA..... + ...BBABBA....... + ................ + ................ +} +# tile 125 (large kobold,female) { ................ ................ @@ -1224,7 +2421,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 63 (kobold lord) +# tile 126 (kobold leader,male) +{ + ................ + ................ + ................ + ...N...N........ + ...NCCCN........ + ...CABAC........ + ...CBBPC..A..... + ..CCBABCC.AA.... + ..CCBBBCCAAA.A.. + ..BCCBCCPAAAAA.. + ..BACBCAPAAAAA.. + ....BBBAAAAAA... + ....BABAAAA..... + ...BBABBA....... + ................ + ................ +} +# tile 127 (kobold leader,female) { ................ ................ @@ -1243,7 +2459,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 64 (kobold shaman) +# tile 128 (kobold shaman,male) +{ + ................ + ................ + ................ + ...N...N........ + ...NHHHN........ + ...HABAH........ + ...HBBPH..A..... + ..HHBABHH.AA.... + .HHHBBBHHHAA.A.. + .HBHHBHHPHAAAA.. + ..BAHBHAPAAAAA.. + ....BBBAAAAAA... + ....BABAAAA..... + ...BBABBA....... + ................ + ................ +} +# tile 129 (kobold shaman,female) { ................ ................ @@ -1262,7 +2497,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 65 (leprechaun) +# tile 130 (leprechaun,male) +{ + ................ + ................ + ................ + ................ + ......G......... + ......F....K.... + .....GFF..KLK... + ....GFFFF..K.... + .....KLKA.GLAA.. + ...FGFJFFFAKA.A. + ...GAGFFAAAK.AA. + ....LKHKKJAKAA.. + ....GFAGKJAKA... + ...GFAA.GFAK.... + ................ + ................ +} +# tile 131 (leprechaun,female) { ................ ................ @@ -1281,7 +2535,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 66 (small mimic) +# tile 132 (small mimic,male) +{ + ................ + ................ + ................ + ................ + ......POP....... + ......NNO....... + ......NNO....... + .......OA....... + .....NNNNN..AA.. + ....OONNNOO.AA.. + ....NANOOANAAA.. + ......NAOAAAA... + ......NAOAA.A... + .....NN.OOA..... + ................ + ................ +} +# tile 133 (small mimic,female) { ................ ................ @@ -1300,7 +2573,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 67 (large mimic) +# tile 134 (large mimic,male) +{ + ................ + ................ + ................ + ......LLOA...... + ......NNOA...... + ......NNOA...... + ......ONOA...... + .....NNNNO..AAA. + ....OONNNOO.AAA. + ...NOANNNAOOAAA. + ...NAONONOANAAA. + .....NO.NOAAAA.. + .....NO.NOAA.A.. + ....NNO.NOOA.... + ................ + ................ +} +# tile 135 (large mimic,female) { ................ ................ @@ -1319,7 +2611,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 68 (giant mimic) +# tile 136 (giant mimic,male) +{ + ................ + ......NNO....... + .....NNNNOA..... + .....NNNNOA..... + .....NNNNOA..... + .....ONNNOA..... + ..PONNOOONOOPAAA + .PONONNNNOONOPAA + .ONOANNNNOAONOAA + .NNOANNNNOAOOOAA + ...AANNONNAAAAAA + ....PNO.NNPAAAAA + ....ONO.NNOAA..A + ....NNO.NNOAA..A + ...NNNO.NNOOA... + ................ +} +# tile 137 (giant mimic,female) { ................ ......NNO....... @@ -1338,7 +2649,26 @@ Z = (195, 195, 195) ...NNNO.NNOOA... ................ } -# tile 69 (wood nymph) +# tile 138 (wood nymph,male) +{ + ................ + ................ + ...OH........... + ..OHHL.......... + ..OHLL.......... + ..HHLA.......... + .OHLLFKKKKLA.... + .HKFLFKKKKA..... + OHKJFKKJJK.A.... + HKKLJJGKAAAAAAA. + .JJAJGDKJAAAAA.. + ..JA.KKJJAAAA... + ...J.KKKKJAA.... + ....JKKKKKJA.... + ....KJKJKJKJ.... + ................ +} +# tile 139 (wood nymph,female) { ................ ................ @@ -1357,7 +2687,7 @@ Z = (195, 195, 195) ....KJKJKJKJ.... ................ } -# tile 70 (water nymph) +# tile 140 (water nymph,male) { ................ ................ @@ -1376,7 +2706,7 @@ Z = (195, 195, 195) ....BPBPBPBP.... ................ } -# tile 71 (mountain nymph) +# tile 141 (water nymph,female) { ................ ................ @@ -1384,10 +2714,48 @@ Z = (195, 195, 195) ..OHHL.......... ..OHLL.......... ..HHLA.......... - .OHLLCOOOOLA.... - .HOCLCOOOOA..... - OHOLCOOLLO.A.... - HOOKLLIOAAAAAAA. + .OHLLJBBBBLA.... + .HBJLJBBBBA..... + OHBPJBBPPB.A.... + HBBLPPNBAAAAAAA. + .PPAPNDB.AAAAA.. + ..PA.BBPPAAAA... + ...P.BBBBPAA.... + ....PBBBBBPA.... + ....BPBPBPBP.... + ................ +} +# tile 142 (mountain nymph,male) +{ + ................ + ................ + ...OH........... + ..OHHL.......... + ..OHLL.......... + ..HHLA.......... + .OHLLCOOOOLA.... + .HOCLCOOOOA..... + OHOLCOOLLO.A.... + HOOKLLIOAAAAAAA. + .LLALIBOKAAAAA.. + ..LA.OOLLAAAA... + ...L.OOOOLAA.... + ....LOOOOOLA.... + ....OLOLOLOL.... + ................ +} +# tile 143 (mountain nymph,female) +{ + ................ + ................ + ...OH........... + ..OHHL.......... + ..OHLL.......... + ..HHLA.......... + .OHLLCOOOOLA.... + .HOCLCOOOOA..... + OHOLCOOLLO.A.... + HOOKLLIOAAAAAAA. .LLALIBOKAAAAA.. ..LA.OOLLAAAA... ...L.OOOOLAA.... @@ -1395,7 +2763,26 @@ Z = (195, 195, 195) ....OLOLOLOL.... ................ } -# tile 72 (goblin) +# tile 144 (goblin,male) +{ + ................ + ................ + ................ + ....LK.......... + ...CJA.......... + ..KJA........... + .JJA.IIK...AA... + .IK.IGIGIJAA.... + J.ICKIIIJK...... + ...IIJJJK.A..... + ....KICJAAAAA... + ....ICKKJA...... + ....IKAIJA...... + ...IKAA.IK...... + ................ + ................ +} +# tile 145 (goblin,female) { ................ ................ @@ -1414,7 +2801,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 73 (hobgoblin) +# tile 146 (hobgoblin,male) +{ + ................ + .....LK......... + ....CKA......... + ...CJA.......... + ..KJA........... + .JJA.IIK...AA... + .IK.IHIHIJAA.... + J.ICKIIIJK...... + ...IIJJJK.A..... + ....KICCAAAAA... + ....IIIIJA...... + ....ICKKJA...... + ....IKAIJA...... + ...IKAA.IK...... + ................ + ................ +} +# tile 147 (hobgoblin,female) { ................ .....LK......... @@ -1433,7 +2839,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 74 (orc) +# tile 148 (orc,male) +{ + ................ + ................ + ................ + .....OA......... + ....NOPA........ + ....LPLA........ + .....P.A........ + ..KCCAKKKA.AA... + ..BPCKJ.P.AAA... + ..BAGGFAAPNO.... + ..BAJJPNOAAA.... + ....BNOJAAAAAA.. + ...BJACPAAAA.... + ..BPPABPPA...... + ................ + ................ +} +# tile 149 (orc,female) { ................ ................ @@ -1452,7 +2877,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 75 (hill orc) +# tile 150 (hill orc,male) +{ + ................ + ................ + ................ + .....OA......... + ....NOPA........ + ....LKLA........ + .....K.A........ + ..KGGAFFKA.AA... + ..JKGFF.K.AAA... + ..JAHHFAAKNO.... + ..JAGFFNOAAA.... + ....GNNFAAAAAA.. + ...GGAGFAAAA.... + ..KJJAKJJA...... + ................ + ................ +} +# tile 151 (hill orc,female) { ................ ................ @@ -1471,7 +2915,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 76 (Mordor orc) +# tile 152 (Mordor orc,male) +{ + ................ + ................ + ................ + .....OA......... + ....NOPA........ + ....LPLA........ + .....P.A........ + ..KIIAIIKA.AA... + ..BPIDD.P.AAA... + ..BAGGFAAP.O.... + ..BAIDDNOAAA.... + ....BNOJAAAAAA.. + ...BIAIPAAAA.... + ..BPPABPPA...... + ................ + ................ +} +# tile 153 (Mordor orc,female) { ................ ................ @@ -1490,7 +2953,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 77 (Uruk-hai) +# tile 154 (Uruk-hai,male) +{ + ................ + ................ + .....OA......... + ....NOPA........ + ....LPLA........ + .....P.A........ + ..IIIAIIIA...... + ..BPIKI.BAAAA... + ..BIG.PPPPAAA... + .NBAD.PDDPAA.... + ..BNNJPDDPAA.... + ....INPPPPAAAA.. + ...BIAK.AAAA.... + ..BPPABPPA...... + ................ + ................ +} +# tile 155 (Uruk-hai,female) { ................ ................ @@ -1509,7 +2991,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 78 (orc shaman) +# tile 156 (orc shaman,male) +{ + ................ + ................ + .....OA......... + ....NOPA........ + ....LPLA........ + .....P.A........ + ..CCCACCCA...... + ..BPCKC.BAAAA... + ..BCGGFJBAAAA... + ..BAJJCJBAAA.... + ..BAJJCJBAAA.... + ....CACJAAAAAA.. + ...BCACPAAAA.... + ..BPPABPPA...... + ................ + ................ +} +# tile 157 (orc shaman,female) { ................ ................ @@ -1528,7 +3029,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 79 (orc-captain) +# tile 158 (orc-captain,male) +{ + ................ + ................ + .....OA......... + ...NNOOPA....... + ....LPLA........ + ...IPPPA........ + ..DIIPADDA.AA... + ..BPIAD.P.AAA... + ..BAGGFAAP.O.... + ..BAGGFAAP.O.... + ..BAJJPNOAAA.... + ....BNOJAAAAAA.. + ...BDAIPAAAA.... + ..BPPABPPA...... + ................ + ................ +} +# tile 159 (orc-captain,female) { ................ ................ @@ -1547,7 +3067,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 80 (rock piercer) +# tile 160 (rock piercer,male) +{ + .JKKKKKKKKJAAA.. + ..JJGKGKJJAAAA.. + ...JKKKJJAAAA... + ...JJKKJJAAAA... + ....JKKJAAAA.... + ....JJKJ.AAA.... + ....JJKJ.AAA.... + ....JJJJ..A..... + .....JJ...A..... + .....JJ...A..... + .....JJ......... + .....JJ......... + .....J.......... + .....J.......... + ................ + ................ +} +# tile 161 (rock piercer,female) { .JKKKKKKKKJAAA.. ..JJGKGKJJAAAA.. @@ -1566,7 +3105,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 81 (iron piercer) +# tile 162 (iron piercer,male) +{ + .BPPPPPPPP.AAA.. + ..BBDPDP..AAAA.. + ...BPPP..AAAA... + ...PBPP..AAAA... + ....BPP.AAAA.... + ....BBP.AAAA.... + ....PBP.AAAA.... + ....PBP...A..... + .....BP...A..... + .....BP...A..... + .....BP......... + .....BP......... + .....B.......... + .....P.......... + ................ + ................ +} +# tile 163 (iron piercer,female) { .BPPPPPPPP.AAA.. ..BBDPDP..AAAA.. @@ -1585,7 +3143,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 82 (glass piercer) +# tile 164 (glass piercer,male) +{ + .NBBBBBBBBPAAA.. + ..NNDBDBPPAAAA.. + ...NBBBPPAAAA... + ...PNBBPPAAAA... + ....NBBPAAAA.... + ....NNBPAAAA.... + ....PNBPAAAA.... + ....PNBP..A..... + .....NB...A..... + .....NB...A..... + .....NB......... + .....NB......... + .....N.......... + .....P.......... + ................ + ................ +} +# tile 165 (glass piercer,female) { .NBBBBBBBBPAAA.. ..NNDBDBPPAAAA.. @@ -1604,7 +3181,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 83 (rothe) +# tile 166 (rothe,male) +{ + ................ + ...........K.... + ............K... + ............K... + .......JJJKKJ... + .....JKKKKKKK... + ..AAAKKKKKKKK... + .AAAAAKKKKKKKA.. + AAKKAAKKKKKAKA.. + .KEKKAKKKJAAKA.. + .KKKJAKKAJAAK... + ..KJAAAKAAA..... + ..AAKA.KA....... + ..A..A.K........ + ................ + ................ +} +# tile 167 (rothe,female) { ................ ...........K.... @@ -1623,7 +3219,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 84 (mumak) +# tile 168 (mumak,male) { ................ ...........P.... @@ -1642,7 +3238,45 @@ Z = (195, 195, 195) PPPA............ .AA............. } -# tile 85 (leocrotta) +# tile 169 (mumak,female) +{ + ................ + ...........P.... + .PP.........P... + PPP...PPPPP.P... + PPPPPPPPP.PP.... + PPPPBPPBBP.PP... + PPPBPPPPPP.PP... + .PDPPDDPP.PPP... + ..BPPDDP.PPPPA.. + ..PPPPPPPPPPPA.. + ..PPPPO..PAPPA.. + .OOPPOOAPPAPPA.. + OOPPOOAAPPA..... + .PPPAPA.PP...... + PPPA............ + .AA............. +} +# tile 170 (leocrotta,male) +{ + ................ + ..A..A.......... + ..AOOA....J..... + ..AOOAA....J.... + .APOAFA....J.... + .APOAAA.JJJJ.... + .AOPAAJKKKKKJ... + .AOAAKJJKKJKJA.. + ...JKKKKKJAKKA.. + ...JKJKKJAAKKA.. + ..JKJAKKAAPAPA.. + ..KKAAKKAAPAPA.. + .PAPAAPAPA...... + .PAPA.PAPA...... + ................ + ................ +} +# tile 171 (leocrotta,female) { ................ ..A..A.......... @@ -1661,7 +3295,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 86 (wumpus) +# tile 172 (wumpus,male) +{ + ................ + ............B... + .............B.. + .......BBBBB.B.. + ....BBBPPBBBB... + ...BOOBBBPBBBB.. + ...OOBBBBBPBBB.. + ..DABBAABBPBBBA. + .BOOBBDABEBBEBAA + .BOBBBBBBEBEBBAA + .BBBBBBBEBBABBAA + .EBBBBBEABBABBAA + ..EEEEEAABBA.... + .....BBA.BB..... + ................ + ................ +} +# tile 173 (wumpus,female) { ................ ............B... @@ -1680,7 +3333,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 87 (titanothere) +# tile 174 (titanothere,male) +{ + ................ + ................ + ................ + ..........PPP.P. + .......PPPPPPPAP + .....PPPPPPPPP.A + ..P.P.PPPPPPPP.A + ..PPP.PPPPPPPPPA + ..PPPP.PPPPPPPPA + .PPPPP.PPPPPPP.. + .PPEPP.PPPP.PPA. + PBPPP.PPP.AAPPA. + PPPP.AAPPAA..... + .PP.PPAPPA...... + ................ + ................ +} +# tile 175 (titanothere,female) { ................ ................ @@ -1699,7 +3371,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 88 (baluchitherium) +# tile 176 (baluchitherium,male) +{ + ................ + ................ + ................ + ..........PPP.P. + .......PPPPPPPAP + .....PPPPPPPPP.A + ..P.P.PPPPPPPP.A + ..PPP.PPPPPPPPPA + ..PPPP.PPPPPPPPA + BPPPPP.PPPPPPP.. + B.PEPP.PPPP.PPA. + PB.PP.PPP.AAPPA. + PPPP.AAPPAA..... + .PP.PPAPPA...... + ................ + ................ +} +# tile 177 (baluchitherium,female) { ................ ................ @@ -1718,7 +3409,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 89 (mastodon) +# tile 178 (mastodon,male) +{ + ................ + ................ + ................ + ................ + ................ + ..O...O......... + .N..POP.P....... + N..PNPPPPP...... + O.PNPPPPPP.PP... + O.POPEPPP.PPPPP. + .OPOPOP..PPPPPAP + ..PPOPP.PPPPPPAA + ..PPAAAPPPPAPPA. + ..P...APPAAAPPA. + .......PPA...... + ................ +} +# tile 179 (mastodon,female) { ................ ................ @@ -1737,7 +3447,26 @@ Z = (195, 195, 195) .......PPA...... ................ } -# tile 90 (sewer rat) +# tile 180 (sewer rat,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ..K..K.JKKKK.... + ..KKKKJKKJKKK... + ..JAKAKJJJKKKJ.. + ..GKGKJKAKKAKKA. + .KKJJJJKAKAAKKA. + .PJJAAKKAJAJKA.. + ..AA.KKA..JKA... + .........JJA.... + ................ +} +# tile 181 (sewer rat,female) { ................ ................ @@ -1756,7 +3485,26 @@ Z = (195, 195, 195) .........JJA.... ................ } -# tile 91 (giant rat) +# tile 182 (giant rat,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ..K..K.JKKKKK... + ..KKKKJKKKJKKK.. + ..JAKAKJKJJKKKJ. + ..GAGAKJKJJKKKK. + ..AKAKJKKAKKAKKA + .KKJJJJKAJKAAKKA + .PJJAAKKAJJAJKA. + ..AA.KKAA..JKA.. + ..........JJA... + ................ +} +# tile 183 (giant rat,female) { ................ ................ @@ -1775,7 +3523,26 @@ Z = (195, 195, 195) ..........JJA... ................ } -# tile 92 (rabid rat) +# tile 184 (rabid rat,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ..K..K.JKKKKK... + ..KKKKJKKKJKKK.. + ..JAKAKJKJJKKKJ. + ..GAGAKJKJJKKKK. + ..AKAKJKKAKKAKKA + .KKJOOOKAJKAAKKA + .PJOOAKKAJJAJKA. + ..AOOOKAA..JKA.. + .OOOOOOOO.JJA... + ................ +} +# tile 185 (rabid rat,female) { ................ ................ @@ -1794,7 +3561,26 @@ Z = (195, 195, 195) .OOOOOOOO.JJA... ................ } -# tile 93 (wererat) +# tile 186 (wererat,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ..K..K.JKKKKK... + ..KKKKJKKKJKKK.. + ..LLLLKJKJJKKKJ. + ..FLFLLJKJJKKKK. + ..LLLLJKKAKKAKKA + .KKJJJJKAJKAAKKA + .PJJAAKKAJJAJKA. + ..AA.KKAA..JKA.. + ..........JJA... + ................ +} +# tile 187 (wererat,female) { ................ ................ @@ -1813,7 +3599,26 @@ Z = (195, 195, 195) ..........JJA... ................ } -# tile 94 (rock mole) +# tile 188 (rock mole,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + .......AAAAA.... + ...AAAAAAAAAA... + ..AAAAAAAAAAAA.. + ..JAJAAAAAAAAAA. + .AAAAAAAAAAAAAA. + AN.NAAAAAAAAAAA. + A...AAAA...AAA.. + AN.NAA.AA...AA.. + .AAAA........... +} +# tile 189 (rock mole,female) { ................ ................ @@ -1832,7 +3637,26 @@ Z = (195, 195, 195) AN.NAA.AA...AA.. .AAAA........... } -# tile 95 (woodchuck) +# tile 190 (woodchuck,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + .......KJA...... + ......NKKNA..... + ......KNOJA..... + ......KNOJA..... + .....KKKKKJA.... + ....JJKLLJJJAA.. + ......KLLJAAAAA. + ......KJJJAAAA.. + .....JJAAJJAA... + ................ +} +# tile 191 (woodchuck,female) { ................ ................ @@ -1851,7 +3675,26 @@ Z = (195, 195, 195) .....JJAAJJAA... ................ } -# tile 96 (cave spider) +# tile 192 (cave spider,male) +{ + ................ + ................ + ................ + ................ + ................ + ........PA...... + .......PA....... + ......PAPBBA.... + ...PA.APBPPPA... + ...ABBPPAPPAA.PA + ...GPPPPAAAPPPAA + ...PPGPAAPPAAAA. + ..D.PAPAPAAPPA.. + ....D.PAAPA.APA. + .....PAA.APA.... + ................ +} +# tile 193 (cave spider,female) { ................ ................ @@ -1870,7 +3713,26 @@ Z = (195, 195, 195) .....PAA.APA.... ................ } -# tile 97 (centipede) +# tile 194 (centipede,male) +{ + ................ + ................ + ......PBPP...... + ....BBPAAA...... + ..PPBAAA........ + .PAPBBBPPPP..... + ..PAAPPBBBA..... + ....PAAPAPBPP... + ......AABBPP.... + ......BB.PPAP... + ....PBBPPAP.A... + ...GPPPAP.AP.... + ...PPGPAAP...... + ..B.PAA......... + ...B............ + ................ +} +# tile 195 (centipede,female) { ................ ................ @@ -1889,7 +3751,7 @@ Z = (195, 195, 195) ...B............ ................ } -# tile 98 (giant spider) +# tile 196 (giant spider,male) { ................ ................ @@ -1908,14 +3770,52 @@ Z = (195, 195, 195) .....JAA.AJA.... ................ } -# tile 99 (scorpion) +# tile 197 (giant spider,female) { ................ ................ - .......JKJKJAA.. - ......JA.JKJKKA. - .......KA...JJJA - ......JA....KKJA + ................ + ................ + ................ + ........JA...... + .......JA....... + ......JAJKKA.... + ...JA.AJKJJJA... + ...AKKJJAJJAA.JA + ...GJJJJAAAJJJAA + ...JJGJAAJJAAAA. + ..D.JAJAJAAJJA.. + ....D.JAAJA.AJA. + .....JAA.AJA.... + ................ +} +# tile 198 (scorpion,male) +{ + ................ + ................ + .......JKJKJAA.. + ......JA.JKJKKA. + .......KA...JJJA + ......JA....KKJA + ...........JJJKA + .......AJKKAJJA. + .....AAJKJJJAA.. + ...AKKJJAJJAA... + ...GJJJJAAAJJJA. + ...JJGJAAJJAAAJ. + ..D.JAJAJAAJJA.. + ....D.JAAJA.JAA. + .......JAAJA.... + ................ +} +# tile 199 (scorpion,female) +{ + ................ + ................ + .......JKJKJAA.. + ......JA.JKJKKA. + .......KA...JJJA + ......JA....KKJA ...........JJJKA .......AJKKAJJA. .....AAJKJJJAA.. @@ -1927,7 +3827,26 @@ Z = (195, 195, 195) .......JAAJA.... ................ } -# tile 100 (lurker above) +# tile 200 (lurker above,male) +{ + .AAAAAAAAAAAAAAA + ...AAGFAAGFAAA.. + ...AAAAAAAAAAA.. + ....AODODODOA... + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ +} +# tile 201 (lurker above,female) { .AAAAAAAAAAAAAAA ...AAGFAAGFAAA.. @@ -1946,7 +3865,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 101 (trapper) +# tile 202 (trapper,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ....AODODODOA... + ...AAAAAAAAAAA.. + ...AAGFAAGFAAA.. + .AAAAAAAAAAAAAAA +} +# tile 203 (trapper,female) { ................ ................ @@ -1965,7 +3903,26 @@ Z = (195, 195, 195) ...AAGFAAGFAAA.. .AAAAAAAAAAAAAAA } -# tile 102 (pony) +# tile 204 (pony,male) +{ + ................ + ................ + .....JJ......... + ....KKKJ........ + ...KKEKJ........ + ..KKJKKJ........ + ..JJAKKJAA...... + ...AKKKJA....... + ...KKKKKKKJ..... + ...KKKKKKKJJAAA. + ...KJKJJJJJAJA.. + ...JAJAAAAJAA... + ...JAJAAJAJA.... + ...L.JAALAJ..... + .....LA...L..... + ................ +} +# tile 205 (pony,female) { ................ ................ @@ -1984,7 +3941,26 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 103 (white unicorn) +# tile 206 (white unicorn,male) +{ + ................ + ..HP............ + ..PHO.NN........ + ...PHNNB........ + ...ONENB........ + ..ONNNNB........ + ..NOANNBAA...... + ...AONNBA....... + ...ONNNONNN..... + ..NONNNNONNOAAA. + ..N.ONONNONAOA.. + ..OAANAAAAOAA... + ...LAOAAOAOA.... + .....OAALAO..... + .....LA...L..... + ................ +} +# tile 207 (white unicorn,female) { ................ ..HP............ @@ -2003,7 +3979,26 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 104 (gray unicorn) +# tile 208 (gray unicorn,male) +{ + ................ + ..HP............ + ..PHO.PP........ + ...PHPPN........ + ....PGPN........ + ...PPPPN........ + ..PPAPPNAA...... + ...APPPNA....... + ....PPP.PPP..... + ..P.PPPP.PP.AAA. + ..P..P.PP.PA.A.. + ..PAAPAAAA.AA... + ...LA.AA.A.A.... + ......AALA...... + .....LA...L..... + ................ +} +# tile 209 (gray unicorn,female) { ................ ..HP............ @@ -2022,7 +4017,26 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 105 (black unicorn) +# tile 210 (black unicorn,male) +{ + ................ + ..HP............ + ..PHO.AA........ + ...PHAAJ........ + ...AADAJ........ + ..AAAAAJ........ + ..AAPAAJPP...... + ...PAAAJP....... + ...AAAAAAAA..... + ..AAAAAAAAAAPPP. + ..A.AAAAAAAPAP.. + ..APPAPPAPAPP... + ...LPAPPAPAP.... + .....APPLPA..... + .....LP...L..... + ................ +} +# tile 211 (black unicorn,female) { ................ ..HP............ @@ -2041,7 +4055,26 @@ Z = (195, 195, 195) .....LP...L..... ................ } -# tile 106 (horse) +# tile 212 (horse,male) +{ + ................ + ................ + .....JJ......... + ....KKKJ........ + ..KKKEKJ........ + .KKKJKKJAA...... + .JJJAKKJAA...... + ...AKKKJA....... + ...KKKKKKKKJA... + ..KKKKKKKKKKJA.. + ..KJJKJJJJJKAJA. + ..JAAJAAAAAJAJA. + ..JAAJAAAJAJAA.. + ..LA.JAA.L.JA... + .....LA....L.... + ................ +} +# tile 213 (horse,female) { ................ ................ @@ -2060,7 +4093,26 @@ Z = (195, 195, 195) .....LA....L.... ................ } -# tile 107 (warhorse) +# tile 214 (warhorse,male) +{ + ................ + .....JJJ........ + ...KKKKJJ....... + .KKKKEKJJ....... + KKKKKKKJJAA..... + JKKKJKKJJAA..... + .JJJAKKJJAA..... + ...AKKKJJA...... + ...KKKKKKKKKJA.. + ..KKKKKKKKKKKJA. + ..KKJKKJKKJKKJJA + ..KJAKJAKJAKJAJA + ..KJAKJAKJAKJA.. + ..LC.KJALC.KJ... + .....LC....LC... + ................ +} +# tile 215 (warhorse,female) { ................ .....JJJ........ @@ -2079,7 +4131,26 @@ Z = (195, 195, 195) .....LC....LC... ................ } -# tile 108 (fog cloud) +# tile 216 (fog cloud,male) +{ + .......P........ + ....P..P........ + .....P.P...P.... + ...P.......P.... + ..P..P.P.P...... + ....PP.PP.P.P... + .P..APAPPP..P... + ...P.PPPP.PP.... + ......PPPPP.P.P. + ...P.PPPPP..P... + ....P..P.PP.P... + .P...P.P...PPP.. + ..P.P....PP..... + .......P....P... + ..P..P.P..P..... + ................ +} +# tile 217 (fog cloud,female) { .......P........ ....P..P........ @@ -2098,7 +4169,26 @@ Z = (195, 195, 195) ..P..P.P..P..... ................ } -# tile 109 (dust vortex) +# tile 218 (dust vortex,male) +{ + ................ + ................ + ....K..KKKK..... + ...K..KKJJJK.... + ..K..KJJJJ..K... + .KJ.KJJ.JKK..K.. + .KJJKJ.JJJJK.... + .KJJJJ....JJK... + .KKJ.J...J.JKK.. + ..KJJ....JJJJK.. + ...KJJJJ.JKJJK.. + .K..KKJ.JJK.JK.. + ..K..JJJJK..K... + ...KJJJKK..K.... + ....KKKK..K..... + ................ +} +# tile 219 (dust vortex,female) { ................ ................ @@ -2117,7 +4207,26 @@ Z = (195, 195, 195) ....KKKK..K..... ................ } -# tile 110 (ice vortex) +# tile 220 (ice vortex,male) +{ + ................ + ................ + ....N..NNNN..... + ...N..NNOOON.... + ..N..NOOOO..N... + .NO.NOO.ONN..N.. + .NOONO.OOOON.... + .NOOOO....OON... + .NNO.O...O.ONN.. + ..NOO....OOOON.. + ...NOOOO.ONOON.. + .N..NNO.OON.ON.. + ..N..OOOON..N... + ...NOOONN..N.... + ....NNNN..N..... + ................ +} +# tile 221 (ice vortex,female) { ................ ................ @@ -2136,7 +4245,26 @@ Z = (195, 195, 195) ....NNNN..N..... ................ } -# tile 111 (energy vortex) +# tile 222 (energy vortex,male) +{ + ................ + ................ + ....E..EEEE..... + ...E..EEAAAE.... + ..E..EAAAA..E... + .EA.EAAAAIE..E.. + .EAAIAAAAAAE.... + .EAAAAAAAAAAE... + .EEAAAAAAAAAEE.. + ..EAAAAAAAAAAE.. + ...EAAAAAAIAAE.. + .E..EIAAAAE.AE.. + ..E..AAAAE..E... + ...EAAAEE..E.... + ....EEEE..E..... + ................ +} +# tile 223 (energy vortex,female) { ................ ................ @@ -2155,7 +4283,7 @@ Z = (195, 195, 195) ....EEEE..E..... ................ } -# tile 112 (steam vortex) +# tile 224 (steam vortex,male) { ................ ................ @@ -2174,7 +4302,45 @@ Z = (195, 195, 195) ....PPPP..P..... ................ } -# tile 113 (fire vortex) +# tile 225 (steam vortex,female) +{ + ................ + ................ + ....P..PPPP..... + ...P..PPBBBP.... + ..P..PBBBB..P... + .PB.PBBPBPP..P.. + .PBBPBPBBBBP.... + .PBBBBP.PPBBP... + .PPBPB...BPBPP.. + ..PBBPP.PBBBBP.. + ...PBBBBPBPBBP.. + .P..PPBPBBP.BP.. + ..P..BBBBP..P... + ...PBBBPP..P.... + ....PPPP..P..... + ................ +} +# tile 226 (fire vortex,male) +{ + ................ + ................ + ....D..DDDD..... + ...D..DDCCCD.... + ..D..DCCCC..D... + .DC.DCCHCDD..D.. + .DCCDCHCCCCD.... + .DCCCCHHHHCCD... + .DDCHCHHHCHCDD.. + ..DCCHHHHCCCCD.. + ...DCCCCHCDCCD.. + .D..DDCHCCD.CD.. + ..D..CCCCD..D... + ...DCCCDD..D.... + ....DDDD..D..... + ................ +} +# tile 227 (fire vortex,female) { ................ ................ @@ -2193,7 +4359,26 @@ Z = (195, 195, 195) ....DDDD..D..... ................ } -# tile 114 (baby long worm) +# tile 228 (baby long worm,male) +{ + ................ + ................ + ................ + ................ + ......CLC....... + ......LLL....... + .....GGAGG.A.... + .....GGAGGAAA... + ......LLLAAA.C.. + ......LLLAA.CC.. + ......CLLCCCCA.. + .......LLLCCA... + ........CLL..... + ................ + ................ + ................ +} +# tile 229 (baby long worm,female) { ................ ................ @@ -2212,7 +4397,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 115 (baby purple worm) +# tile 230 (baby purple worm,male) +{ + ................ + ................ + ................ + .......I........ + ......III....... + ......III....... + .....GGAGG.A.... + .....GGAGGAAA... + ......IIIAAA.D.. + ......IIIAA.DD.. + ......IIIDDDDA.. + .......IIIDDA... + ........III..... + ................ + ................ + ................ +} +# tile 231 (baby purple worm,female) { ................ ................ @@ -2231,7 +4435,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 116 (long worm) +# tile 232 (long worm,male) +{ + ................ + ................ + .....CLC........ + ....CLLLC....... + ....LLLLL....... + ...GGGLGGGAA.... + ...GAGLGAGAAA... + ...GGGLGGGAAA... + ....LLLLLAAACC.. + ....LLLLLAACCC.. + ....CLLLLCCCCA.. + .....LLLLLCCA... + ......CLLLL..... + ................ + ................ + ................ +} +# tile 233 (long worm,female) { ................ ................ @@ -2250,7 +4473,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 117 (purple worm) +# tile 234 (purple worm,male) +{ + ................ + ................ + .....DID........ + ....DIIID....... + ....IIIII....... + ...GGGIGGGAA.... + ...GAGIGAGAAA... + ...GGGIGGGAAA... + ....IIIIIAAADD.. + ....IIIIIAADDD.. + ....DIIIIDDDDA.. + .....IIIIIDDA... + ......DIIII..... + ................ + ................ + ................ +} +# tile 235 (purple worm,female) { ................ ................ @@ -2269,7 +4511,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 118 (grid bug) +# tile 236 (grid bug,male) +{ + ................ + ................ + ................ + ................ + ..D....NHCN..D.. + .D.D..NHDNCNDED. + D.D.D.NNHCND.DED + .D...D.NNHDND... + .DDD..ENNG.D.DE. + ..DDDDEEEEGD..DE + D.....DEHEE.D... + .D.......H...... + ................ + ................ + ................ + ................ +} +# tile 237 (grid bug,female) { ................ ................ @@ -2288,7 +4549,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 119 (xan) +# tile 238 (xan,male) +{ + ................ + ................ + ..........GG.... + ...HHH...GOGG... + .....HH..GGGG... + ...HHHHH.GGG.... + .......GG...AAA. + .....GOGGHHAAAA. + ....GOGG..HHAAA. + NNNGOGG.AAHHHA.. + NANGGGG.AAHAH... + NNNGGNNNAAAAAA.. + ..GGGNANAA.AAA.. + .GGGANNNAA.A.A.. + ..G..AAAAAA..... + ......AA.AA..... +} +# tile 239 (xan,female) { ................ ................ @@ -2307,7 +4587,26 @@ Z = (195, 195, 195) ..G..AAAAAA..... ......AA.AA..... } -# tile 120 (yellow light) +# tile 240 (yellow light,male) +{ + ................ + ......NA........ + ......HA........ + ..NA.NHNA.NA.... + ...LALHLALA..... + ....NHHHNA...... + ..NLHHHHHLNA.... + NHHHHHHHHHHHNA.. + ..NLHHHHHLNA.... + ....NHHHNA...... + ...LALHLALA..... + ..NA.NNNA.NA.... + ......HA........ + ......NA........ + ................ + ................ +} +# tile 241 (yellow light,female) { ................ ......NA........ @@ -2326,7 +4625,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 121 (black light) +# tile 242 (black light,male) +{ + ................ + ......AA........ + ......AA........ + ..AA.AAAA.AA.... + ...AAAAAAAA..... + ....AAAAAA...... + ..AAAAAAAAAA.... + AAAAAAAAAAAAAA.. + ..AAAAAAAAAA.... + ....AAAAAA...... + ...AAAAAAAA..... + ..AA.AAAA.AA.... + ......AA........ + ......AA........ + ................ + ................ +} +# tile 243 (black light,female) { ................ ......AA........ @@ -2345,7 +4663,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 122 (zruty) +# tile 244 (zruty,male) +{ + ................ + ......FFGF...... + ....OOFGFFFF.... + ...AOFGFOOKFF... + ...FFGFAOAJKKF.. + ..FFFFFFJAAJKK.. + ..ODOFFJAJJKKJA. + ..DDDDJAJJKJJAA. + ..JODOAJJJAJJAAA + .KKJAJJJKJAJJAAA + .KKAAJKKKKJAAAAA + ...AJJKKKKJJAAAA + ...KJJAAAAKJAAA. + ..JKJJJAAJJJJ... + ................ + ................ +} +# tile 245 (zruty,female) { ................ ......FFGF...... @@ -2364,7 +4701,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 123 (couatl) +# tile 246 (couatl,male) +{ + ................ + ................ + ........I....I.. + ....KKAIII..III. + ...NAOJAKI.IIIII + ...KKJAJJKKK..II + ...KKAAIJJJJJ..I + ...FAA.I...KJ..I + ..FAFA..AAAKJAA. + .......AAAJJAAA. + ......AKKJJAAA.. + ......KJAAAAAJA. + .....JJAA...JA.. + ......JJJJJJA... + ................ + ................ +} +# tile 247 (couatl,female) { ................ ................ @@ -2383,7 +4739,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 124 (Aleax) +# tile 248 (Aleax,male) +{ + ................ + ......BBBB..I... + ..I..BF...B..... + ....BF.HHA.B.... + ...BF.HHHHA.B.I. + ...BF.LFLFA.FB.. + .I.BF.LLLLA.FB.. + ...BF.ALLA.FB... + ..BF.LLAALL.ABA. + .BF.LLLLLLLLAFB. + .BF.LALLLLALAFB. + .BF.LAJJKJALAFB. + ..BF..LJJLAAABA. + ...BF.LLALAABA.. + ..BF.LLAALLAFB.. + ................ +} +# tile 249 (Aleax,female) { ................ ......BBBB..I... @@ -2402,7 +4777,26 @@ Z = (195, 195, 195) ..BF.LLAALLAFB.. ................ } -# tile 125 (Angel) +# tile 250 (Angel,male) +{ + ................ + ................ + ......HHHH...... + ................ + .......CC....... + ......CLLC..AA.. + ......PLLP....A. + ......NPPPA.A... + .....BBLLPPAAA.. + .....NNLLPPAAA.. + ......BNNPAAAA.. + ......BNNPAAAA.. + .....BNNNPAA.A.. + .....BNNNNPA.... + ....BNNNNNNP.... + ................ +} +# tile 251 (Angel,female) { ................ ................ @@ -2421,7 +4815,7 @@ Z = (195, 195, 195) ....BNNNNNNP.... ................ } -# tile 126 (ki-rin) +# tile 252 (ki-rin,male) { ................ ................ @@ -2440,13 +4834,51 @@ Z = (195, 195, 195) ................ ................ } -# tile 127 (Archon) +# tile 253 (ki-rin,female) { ................ - ......OOOO...... - .....OOOOOO..... - .....OJLLJO..... - .....OLLLLO..... + ................ + ..LP............ + ..PLO.C.C....... + ...PLCCD........ + ...KCIKD........ + ..KCCCCD........ + ..CKACCDA....... + ...ACCCCCC...A.. + ...KCCCKCCKAA... + ..CAKCKCKCAKA... + ..CAAKAKAKA..... + ...L.KALAK...... + .....LA..L...... + ................ + ................ +} +# tile 254 (Archon,male) +{ + ................ + ......OOOO...... + .....OOOOOO..... + .....OJLLJO..... + .....OLLLLO..... + ....OOJLLJOO.... + ......AJJA...... + .....AAAAAAA.... + ....AAAAAAAAA... + ...OAAOAAAJLJ... + ..OOAOAAAACJC... + ....LAAAACCJCC.. + .....AAAAAJJJ... + ....AAAAAAAA.... + ................ + ................ +} +# tile 255 (Archon,female) +{ + ................ + ......OOOO...... + .....OOOOOO..... + .....OJLLJO..... + .....OLLLLO..... ....OOJLLJOO.... ......AJJA...... .....AAAAAAA.... @@ -2459,7 +4891,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 128 (bat) +# tile 256 (bat,male) +{ + ................ + ................ + ................ + ................ + ...JJJCACJJJ.... + ..JJAAHJHAAJJ... + ..JA...JA..AJ... + ................ + ................ + ......AAAA...... + ....AAAAAAAA.... + ...AAA.AA.AAA... + .......AA....... + ................ + ................ + ................ +} +# tile 257 (bat,female) { ................ ................ @@ -2478,7 +4929,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 129 (giant bat) +# tile 258 (giant bat,male) +{ + ................ + ................ + ................ + ...JK.J.J.JK.... + ..KJJJCACJJKJ... + .JJJAAHJHAAJJK.. + .KJA...JA..AJJ.. + ..JA.......AJ... + ................ + .....AAAAAA..... + ...AAAAAAAAAA... + ..AAAA.AA.AAAA.. + .......AA....... + ................ + ................ + ................ +} +# tile 259 (giant bat,female) { ................ ................ @@ -2497,7 +4967,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 130 (raven) +# tile 260 (raven,male) +{ + ..AAAA...AAA.... + .AAAAAA.AAA..... + AAAAAAAAAAA.AA.. + A...AAAAAAAAAAA. + ......AAAAAAAAA. + .....AAAA.....AA + .....ADA.......A + .....PA......... + .....P.......... + .........P.P.P.. + ........P.P.P.P. + .......P.P.P.... + ........P.P.P... + ...........P.... + ................ + ................ +} +# tile 261 (raven,female) { ..AAAA...AAA.... .AAAAAA.AAA..... @@ -2516,7 +5005,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 131 (vampire bat) +# tile 262 (vampire bat,male) +{ + ................ + ................ + ................ + ...AA.A.A.AA.... + ..AAAAAAAAAAA... + .AAAA.DAD.AAAA.. + .AAA...A...AAA.. + ..A.........A... + ................ + .....AAAAAA..... + ...AAAAAAAAAA... + ..AAAA.AA.AAAA.. + .......AA....... + ................ + ................ + ................ +} +# tile 263 (vampire bat,female) { ................ ................ @@ -2535,7 +5043,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 132 (plains centaur) +# tile 264 (plains centaur,male) +{ + ................ + ...KKA.......... + ...LLAA......... + .AAKKAA......... + .LLAALLA........ + LALLLLALA....... + LALLLKALA.A..... + ..LKLKAAAAA..... + ..KLKJKJJKAA.... + .KJKJKJKJAKAAAA. + .KAKJJJJKJAAA.A. + .KAAKAAAAKAA.... + ..CAKAAJAKA..... + ....KAAKAK...... + ....CA...C...... + ................ +} +# tile 265 (plains centaur,female) { ................ ...KKA.......... @@ -2554,7 +5081,26 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 133 (forest centaur) +# tile 266 (forest centaur,male) +{ + ................ + ................ + ................ + ...KKA.......... + LA.LLAALA....... + LAALLAALA....... + .LLAALLA........ + ..LLLLA.A....... + ..LKLKAAAAA..... + ..KLKJKJJKAA.... + .KJKJKJKJAKA.A.. + .KAKJJJJKJAAAA.. + .KAAKAAJAKA..... + ..C.KAAKAK...... + ....CA...C...... + ................ +} +# tile 267 (forest centaur,female) { ................ ................ @@ -2573,7 +5119,26 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 134 (mountain centaur) +# tile 268 (mountain centaur,male) +{ + ................ + ................ + ...KKA.......... + ...LLAA......... + ..AKKAA......... + .LJJJJLA........ + LAJKKJALA.A..... + LAKKKKALAAA..... + ..JJJJKJJKAA.... + .KJJJKJKJAKAAAA. + .KAKJJJJKJAAA.A. + .KAAKAAAAKAA.... + ..CAKAAJAKA..... + ....KAAKAK...... + ....CA...C...... + ................ +} +# tile 269 (mountain centaur,female) { ................ ................ @@ -2592,7 +5157,26 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 135 (baby gray dragon) +# tile 270 (baby gray dragon,male) +{ + ................ + ................ + ................ + .....BBBA....... + ....NPNPPA...... + ...BPPPPPA...... + ..CHHPABPA.AAA.. + .CHCDA.BPAAAAAA. + ..D..BPPAAAAAAA. + ....BBPPPPPAAAA. + ...BOOPPPPPPAAA. + ..BPOBPPPPPPPAA. + ..BPPBPPOBPAPPA. + ..BPABP.ABPAPPA. + .....BPAA..PPAA. + ...........PAA.. +} +# tile 271 (baby gray dragon,female) { ................ ................ @@ -2611,7 +5195,26 @@ Z = (195, 195, 195) .....BPAA..PPAA. ...........PAA.. } -# tile 136 (baby silver dragon) +# tile 272 (baby silver dragon,male) +{ + ................ + ................ + ................ + .....PPPA....... + ....OBOBBA...... + ...PBBBBBA...... + ..CHHBAPBA.AAA.. + .CHCDA.PBAAAAAA. + ..D..PBBAAAAAAA. + ....PPBBBBBAAAA. + ...PNNBBBBBBAAA. + ..PBNPBBBBBBBAA. + ..PBBPBBNPBABBA. + ..PBAPB.APBABBA. + .....PBAA..BBAA. + ...........BAA.. +} +# tile 273 (baby silver dragon,female) { ................ ................ @@ -2630,7 +5233,26 @@ Z = (195, 195, 195) .....PBAA..BBAA. ...........BAA.. } -# tile 137 (baby shimmering dragon) +# tile 274 (baby shimmering dragon,male) +{ + .I.............. + ...BBBBBBB.I.... + ..BF.FFF.FB...I. + .BF..BBBA.FB.... + BF..NPNPPAFB.I.. + BF.BPPPPPA.B.... + B.CHHPABPAFBAAI. + BCHCDA.BPAAFBAA. + B.D..BPPAAAAFBA. + B...BBPPPPPAAFB. + BF.BOOPPPPPPAAAB + BFBPOBPPPPPPPAFB + BFBPPBPPOBPAPPFB + B.BPABP.ABPAPPFB + B....BPAA..PPAAB + .B.........PAAB. +} +# tile 275 (baby shimmering dragon,female) { .I.............. ...BBBBBBB.I.... @@ -2649,7 +5271,26 @@ Z = (195, 195, 195) B....BPAA..PPAAB .B.........PAAB. } -# tile 138 (baby red dragon) +# tile 276 (baby red dragon,male) +{ + ................ + ................ + ................ + .....IIIA....... + ....NDNDDA...... + ...IDDDDDA...... + ..CHHDAIDA.AAA.. + .CHCDA.IDAAAAAA. + ..D..IDDAAAAAAA. + ....IIDDDDDAAAA. + ...IHHDDDDDDAAA. + ..IDHIDDDDDDDAA. + ..IDDIDDHIDADDA. + ..IDAID.AIDADDA. + .....IDAA..DDAA. + ...........DAA.. +} +# tile 277 (baby red dragon,female) { ................ ................ @@ -2668,7 +5309,26 @@ Z = (195, 195, 195) .....IDAA..DDAA. ...........DAA.. } -# tile 139 (baby white dragon) +# tile 278 (baby white dragon,male) +{ + ................ + ................ + ................ + .....NNNA....... + ....IOIOOA...... + ...NOOOOOA...... + ..CHHOANOA.AAA.. + .CHCDA.NOAAAAAA. + ..D..NOOAAAAAAA. + ....NNOOOOOAAAA. + ...NOOOOOOOOAAA. + ..NOONOOOOOOOAA. + ..NOONOOONOAOOA. + ..NOANO.ANOAOOA. + .....NOAA..OOAA. + ...........OAA.. +} +# tile 279 (baby white dragon,female) { ................ ................ @@ -2687,7 +5347,7 @@ Z = (195, 195, 195) .....NOAA..OOAA. ...........OAA.. } -# tile 140 (baby orange dragon) +# tile 280 (baby orange dragon,male) { ................ ................ @@ -2706,7 +5366,45 @@ Z = (195, 195, 195) .....LCAA..CCAA. ...........CAA.. } -# tile 141 (baby black dragon) +# tile 281 (baby orange dragon,female) +{ + ................ + ................ + ................ + .....LLLA....... + ....NCNCCA...... + ...LCCCCCA...... + ..CHHCALCA.AAA.. + .CHCDA.LCAAAAAA. + ..D..LCCAAAAAAA. + ....LLCCCCCAAAA. + ...LOOCCCCCCAAA. + ..LCOLCCCCCCCAA. + ..LCCLCCOLCACCA. + ..LCALC.ALCACCA. + .....LCAA..CCAA. + ...........CAA.. +} +# tile 282 (baby black dragon,male) +{ + ................ + ................ + ................ + .....AAA........ + ....NANAA....... + ...AAAAAA....... + ..CHHA.AA..PPP.. + .CHCD..AA.PPPPP. + ..D..AAAPPP.PPP. + ....AAAAAAAPPPP. + ...AAAAAAAAAPPP. + ..AAAAAAAAAAAPP. + ..AAAAAAAAAPAAP. + ..AAPAA.PAAPAAP. + .....AAP...AAPP. + ...........APP.. +} +# tile 283 (baby black dragon,female) { ................ ................ @@ -2725,7 +5423,26 @@ Z = (195, 195, 195) .....AAP...AAPP. ...........APP.. } -# tile 142 (baby blue dragon) +# tile 284 (baby blue dragon,male) +{ + ................ + ................ + ................ + .....BBBA....... + ....NENEEA...... + ...BEEEEEA...... + ..CHHEABEA.AAA.. + CCHCDA.BEAAAAAA. + ..D..BEEAAAAAAA. + ....BBEEEEEAAAA. + ...BOOEEEEEEAAA. + ..BEOBEEEEEEEAA. + ..BEEBEEOBEAEEA. + ..BEABE.ABEAEEA. + .....BEAA..EEAA. + ...........EAA.. +} +# tile 285 (baby blue dragon,female) { ................ ................ @@ -2744,7 +5461,26 @@ Z = (195, 195, 195) .....BEAA..EEAA. ...........EAA.. } -# tile 143 (baby green dragon) +# tile 286 (baby green dragon,male) +{ + ................ + ................ + ................ + .....GGGA....... + ....NFNFFA...... + ...GFFFFFA...... + ..CHHFAGFA.AAA.. + .CHCDA.GFAAAAAA. + ..D..GFFAAAAAAA. + ....GGFFFFFAAAA. + ...GOOFFFFFFAAA. + ..GFOGFFFFFFFAA. + ..GFFGFFOGFAFFA. + ..GFAGF.AGFAFFA. + .....GFAA..FFAA. + ...........FAA.. +} +# tile 287 (baby green dragon,female) { ................ ................ @@ -2763,7 +5499,26 @@ Z = (195, 195, 195) .....GFAA..FFAA. ...........FAA.. } -# tile 144 (baby yellow dragon) +# tile 288 (baby yellow dragon,male) +{ + ................ + ................ + ................ + .....NNNA....... + ....DHDHHA...... + ...NHHHHHA...... + ..CHHHANHA.AAA.. + .CHCDA.NHAAAAAA. + ..D..NHHAAAAAAA. + ....NNHHHHHAAAA. + ...NOOHHHHHHAAA. + ..NHONHHHHHHHAA. + ..NHHNHHONHAHHA. + ..NHANH.ANHAHHA. + .....NHAA..HHAA. + ...........HAA.. +} +# tile 289 (baby yellow dragon,female) { ................ ................ @@ -2782,7 +5537,26 @@ Z = (195, 195, 195) .....NHAA..HHAA. ...........HAA.. } -# tile 145 (gray dragon) +# tile 290 (gray dragon,male) +{ + ......BBBPA..... + .....NPNPPPA.... + ....BPPPPPPA.... + ..DCHHP..PPA.... + CHCHCD..BPPA.... + HD.D...BPPA..... + ......OBPAAAAAA. + ....BOBPAAAAAAAA + ..BOOBPA.PP.AAA. + .BOOOBPPPPPP.AA. + .BOOOBPPPPPPPAA. + PPOOBBPPPPPPPPA. + BP.OBPPOOPP.P.A. + BPAABP.AAPPAPPA. + ....BPAA...PP.A. + ........PPPP.A.. +} +# tile 291 (gray dragon,female) { ......BBBPA..... .....NPNPPPA.... @@ -2801,7 +5575,26 @@ Z = (195, 195, 195) ....BPAA...PP.A. ........PPPP.A.. } -# tile 146 (silver dragon) +# tile 292 (silver dragon,male) +{ + ......PPPBA..... + .....OBOBBBA.... + ....PBBBBBBA.... + ..DCHHB..BBA.... + CHCHCD..PBBA.... + HD.D...PBBA..... + ......NPBAAAAAA. + ....PNPBAAAAAAAA + ..PNNPBA.BB.AAA. + .PNNNPBBBBBB.AA. + .PNNNPBBBBBBBAA. + BBNNPPBBBBBBBBA. + PB.NPBBNNBB.B.A. + PBAAPB.AABBABBA. + ....PBAA...BB.A. + ........BBBB.A.. +} +# tile 293 (silver dragon,female) { ......PPPBA..... .....OBOBBBA.... @@ -2820,7 +5613,26 @@ Z = (195, 195, 195) ....PBAA...BB.A. ........BBBB.A.. } -# tile 147 (shimmering dragon) +# tile 294 (shimmering dragon,male) +{ + .I.BF.BBBPAFB... + ..BF.NPNPPPAFB.I + .BF.BPPPPPPAFB.. + .BDCHHP..PPAFBI. + CBCHCD..BPPAFB.. + HDBB...BPPA.B..I + ..BF..OBPAAAABA. + .BF.BOBPAAAAAFBA + BFBOOBPA.PP.AAFB + .BOOOBPPPPPP.AFB + .BOOOBPPPPPPPAFB + PPOOBBPPPPPPPPFB + BP.OBPPOOPP.P.FB + BPAABP.AAPPAPPFB + ....BPAA...PP.AB + ........PPPP.AB. +} +# tile 295 (shimmering dragon,female) { .I.BF.BBBPAFB... ..BF.NPNPPPAFB.I @@ -2839,7 +5651,26 @@ Z = (195, 195, 195) ....BPAA...PP.AB ........PPPP.AB. } -# tile 148 (red dragon) +# tile 296 (red dragon,male) +{ + ......IIIDA..... + .....NDNDDDA.... + ....IDDDDDDA.... + ..DCHHD..DDA.... + CHCHCD..IDDA.... + HD.D...IDDA..... + ......HIDAAAAAA. + ....IHIDAAAAAAAA + ..IHHIDAJDDJAAA. + .IHHHIDDDDDDJAA. + .IHHHIDDDDDDDAA. + DDHHIIDDDDDDDDA. + ID.HIDDHHDDJDJA. + IDAAID.AADDADDA. + ....IDAAJJJDDJA. + ........DDDDJA.. +} +# tile 297 (red dragon,female) { ......IIIDA..... .....NDNDDDA.... @@ -2858,7 +5689,26 @@ Z = (195, 195, 195) ....IDAAJJJDDJA. ........DDDDJA.. } -# tile 149 (white dragon) +# tile 298 (white dragon,male) +{ + ......NNNOA..... + .....IOIOOOA.... + ....NOOOOOOA.... + ..DCHHO..OOA.... + CHCHCD..NOOA.... + HD.D...NOOA..... + ......ONOAAAAAA. + ....NONOAAAAAAAA + ..NOONOA.OO.AAA. + .NOOONOOOOOOJAA. + .NOOONOOOOOOOAA. + OOOONNOOOOOOOOA. + NO.ONOOOOOO.OJA. + NOAANO.AAOOAOOA. + ....NOAA...OOJA. + ........OOOOJA.. +} +# tile 299 (white dragon,female) { ......NNNOA..... .....IOIOOOA.... @@ -2877,7 +5727,26 @@ Z = (195, 195, 195) ....NOAA...OOJA. ........OOOOJA.. } -# tile 150 (orange dragon) +# tile 300 (orange dragon,male) +{ + ......LLLCA..... + .....NCNCCCA.... + ....LCCCCCCA.... + ..DCHHC..CCA.... + CHCHCD..LCCA.... + HD.D...LCCA..... + ......OLCAAAAAA. + ....LOLCAAAAAAAA + ..LOOLCA.CCKAAA. + .LOOOLCCCCCCJAA. + .LOOOLCCCCCCCAA. + CCOOLLCCCCCCCCA. + LC.OLCCOOCCKCJA. + LCAALC.AACCACCA. + ....LCAA.KKCCJA. + ........CCCCJA.. +} +# tile 301 (orange dragon,female) { ......LLLCA..... .....NCNCCCA.... @@ -2896,7 +5765,26 @@ Z = (195, 195, 195) ....LCAA.KKCCJA. ........CCCCJA.. } -# tile 151 (black dragon) +# tile 302 (black dragon,male) +{ + ......AAAA...... + .....NANAAA..... + ....AAAAAAA..... + ..DCHHA..AA..... + CHCHCD..AAA..... + HD.D...AAA...... + ......AAA..PPPP. + ....AAAAPPPPPPPP + ..AAAAAAAAA.PPP. + .AAAAAAAAAAAAPP. + .AAAAAAAAAAAAPP. + AAAAAAAAAAAAAAP. + AA.AAAAAAAA.AAP. + AAPPAA.PPAAPAAP. + ....AAPP...AAAP. + ........AAAAA... +} +# tile 303 (black dragon,female) { ......AAAA...... .....NANAAA..... @@ -2915,7 +5803,26 @@ Z = (195, 195, 195) ....AAPP...AAAP. ........AAAAA... } -# tile 152 (blue dragon) +# tile 304 (blue dragon,male) +{ + ......BBBEA..... + .....NENEEEA.... + ....BEEEEEEA.... + ..DCHHE..EEA.... + CHCHCD..BEEA.... + HD.D...BEEA..... + ......OBEAAAAAA. + ....BOBEAAAAAAAA + ..BOOBEA.EE.AAA. + .BOOOBEEEEEEJAA. + .BOOOBEEEEEEEAA. + EEOOBBEEEEEEEEA. + BE.OBEEOOEE.EJA. + BEAABE.AAEEAEEA. + ....BEAA...EEJA. + ...P....EEEEJA.. +} +# tile 305 (blue dragon,female) { ......BBBEA..... .....NENEEEA.... @@ -2934,7 +5841,26 @@ Z = (195, 195, 195) ....BEAA...EEJA. ...P....EEEEJA.. } -# tile 153 (green dragon) +# tile 306 (green dragon,male) +{ + ......GGGFA..... + .....NFNFFFA.... + ....GFFFFFFA.... + ..DCHHF..FFA.... + CHCHCD..GFFA.... + HD.D...GFFA..... + ......OGFAAAAAA. + ....GOGFAAAAAAAA + ..GOOGFA.FF.AAA. + .GOOOGFFFFFFJAA. + .GOOOGFFFFFFFAA. + FFOOGGFFFFFFFFA. + GF.OGFFOOFF.FJA. + GFAAGF.AAFFAFFA. + ....GFAA...FFJA. + ........FFFFJA.. +} +# tile 307 (green dragon,female) { ......GGGFA..... .....NFNFFFA.... @@ -2953,7 +5879,7 @@ Z = (195, 195, 195) ....GFAA...FFJA. ........FFFFJA.. } -# tile 154 (yellow dragon) +# tile 308 (yellow dragon,male) { ......NNNHA..... .....DHDHHHA.... @@ -2972,12 +5898,50 @@ Z = (195, 195, 195) ....NHAAJJJHHJA. ........HHHHJA.. } -# tile 155 (stalker) +# tile 309 (yellow dragon,female) { - ................ - .......PPP...... - ......P.P.P..... - .....PPPPPP..... + ......NNNHA..... + .....DHDHHHA.... + ....NHHHHHHA.... + ..DCHHH..HHA.... + CHCHCD..NHHA.... + HD.D...NHHA..... + ......ONHAAAAAA. + ....NONHAAAAAAAA + ..NOONHAJHHJAAA. + .NOOONHHHHHHJAA. + .NOOONHHHHHHHAA. + HHOONNHHHHHHHHA. + NH.ONHHOOHHJHJA. + NHAANH.AAHHAHHA. + ....NHAAJJJHHJA. + ........HHHHJA.. +} +# tile 310 (stalker,male) +{ + ................ + .......PPP...... + ......P.P.P..... + .....PPPPPP..... + .....PP..PPP.... + ....PPPPPP.P.... + ....P.PPPP.P.... + ....P.PPP..P.... + ....P..PP..P.... + ....P.PPPP.P.... + ....P.P..P.P.... + ....P.P..P.P.... + ......P..P...... + ......P..P...... + .....PP..PP..... + ................ +} +# tile 311 (stalker,female) +{ + ................ + .......PPP...... + ......P.P.P..... + .....PPPPPP..... .....PP..PPP.... ....PPPPPP.P.... ....P.PPPP.P.... @@ -2991,7 +5955,26 @@ Z = (195, 195, 195) .....PP..PP..... ................ } -# tile 156 (air elemental) +# tile 312 (air elemental,male) +{ + ................ + ...P.PPP..P..... + ..P.PAPA.P...... + P..PPPPPP..P.... + .P.PPAAPPP...P.. + ..PPPAAP.P.P.... + ..PAPAAPAP...... + P.PAPPP.AP.P.AA. + ..PA.PP.AP.AAAA. + ..PAPPPPAPAAAA.. + ..PAP.APAPAAAA.. + ..PAP.APAPAAAAA. + ....P.APAAAAAAA. + ..P.P.APPAAAAAA. + ...PP.APPPA..... + ................ +} +# tile 313 (air elemental,female) { ................ ...P.PPP..P..... @@ -3010,7 +5993,26 @@ Z = (195, 195, 195) ...PP.APPPA..... ................ } -# tile 157 (fire elemental) +# tile 314 (fire elemental,male) +{ + ................ + .H..LDDD........ + ...LDADAC.H..... + H..DDDDDD..H.H.. + ..LDDAADDD...... + ..DDDAADCD.H.... + ..DADAACAD...... + H.DADDDCAD...AA. + ..DACDDCAD.AAAA. + ..DADDDDADAAAA.. + ..DADCADADAAAA.. + H.DADCADADAAAAA. + ....DCADAAAAAAA. + .H.LDCADDAAAAAA. + ..LDDCADDDA..... + ................ +} +# tile 315 (fire elemental,female) { ................ .H..LDDD........ @@ -3029,7 +6031,26 @@ Z = (195, 195, 195) ..LDDCADDDA..... ................ } -# tile 158 (earth elemental) +# tile 316 (earth elemental,male) +{ + ..F............. + ....CKKK..F..... + ...CKAKAJ....F.. + ...KKKKKK....... + ..CKKAAKKK.F..F. + .FKKKAAKJK...... + ..KAKAAJAK..F... + ..KAKJJJAK...AA. + F.KAJKKJAK.AAAA. + ..KAKKKKAKAAAA.. + ..KAKJAKAKAAAA.. + ..KAKJAKAKAAAAA. + ....KJAKAAAAAAA. + .F.CKJAKKAAAAAA. + ..CKKJAKKKA..... + ................ +} +# tile 317 (earth elemental,female) { ..F............. ....CKKK..F..... @@ -3048,7 +6069,26 @@ Z = (195, 195, 195) ..CKKJAKKKA..... ................ } -# tile 159 (water elemental) +# tile 318 (water elemental,male) +{ + ................ + ....PBBB..E..... + .E.PBABAE...E... + ...BBBBBB....... + ..PBBAABBB.E..E. + E.BBBAABEB...... + ..BABAABEB.E.... + ..BABBBBEB...AA. + ..BAPBBEAB.AAAA. + E.BABBBBABAAAA.. + ..BABEABABAAAA.. + ..BABEABABAAAAA. + ....BEABAAAAAAA. + .E.PBEABBAAAAAA. + ..PBBEABBBA..... + ................ +} +# tile 319 (water elemental,female) { ................ ....PBBB..E..... @@ -3067,7 +6107,26 @@ Z = (195, 195, 195) ..PBBEABBBA..... ................ } -# tile 160 (lichen) +# tile 320 (lichen,male) +{ + ................ + ................ + ...FFF...FFF.... + ..FCFFFFFCCFA... + .FCOOFFFCOFFFA.. + .FCOOFFFCFFFFA.. + ..FFFFFFFFFFA... + ...AFFFCCFFFA... + ...FFFFCOFFAA... + ..FCCFFCOFCFA... + ..FCOFFCFFOCFA.. + ..FFCFFFCFFFFA.. + ...FFFAAFFFFFA.. + .....AA.AAAAA... + ................ + ................ +} +# tile 321 (lichen,female) { ................ ................ @@ -3086,7 +6145,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 161 (brown mold) +# tile 322 (brown mold,male) +{ + ................ + ................ + ...JJJ...JJJ.... + ..JKJJJJJKKJA... + .JKCCJJJKCJJJA.. + .JKCCJJJKJJJJA.. + ..JJJJJJJJJJA... + ...AJJJKKJJJA... + ...JJJJKCJJAA... + ..JKKJJKCJKJA... + ..JKCJJKJJCKJA.. + ..JJKJJJKJJJJA.. + ...JJJAAJJJJJA.. + .....AA.AAAAA... + ................ + ................ +} +# tile 323 (brown mold,female) { ................ ................ @@ -3105,7 +6183,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 162 (yellow mold) +# tile 324 (yellow mold,male) +{ + ................ + ................ + ...HHH...HHH.... + ..HHHHHHHNHHA... + .HHNNOHHNNOHHA.. + .HHNNOOHHOOHHA.. + ..HHOOHHHHHHA... + ...AHHHHHHHHA... + ...HHHHNNOHAA... + ..HHHHHNNOHHA... + ..HNNOHHHONOHA.. + ..HHOHHHHHOOHA.. + ...HHHAAHHHHHA.. + .....AA.AAAAA... + ................ + ................ +} +# tile 325 (yellow mold,female) { ................ ................ @@ -3124,7 +6221,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 163 (green mold) +# tile 326 (green mold,male) +{ + ................ + ................ + ...FFF...FFF.... + ..FGFFFFFGGFA... + .FGOOFFFGOFFFA.. + .FGOOFFFGFFFFA.. + ..FFFFFFFFFFA... + ...AFFFGGFFFA... + ...FFFFGOFFAA... + ..FGGFFGOFGFA... + ..FGOFFGFFOGFA.. + ..FFGFFFGFFFFA.. + ...FFFAAFFFFFA.. + .....AA.AAAAA... + ................ + ................ +} +# tile 327 (green mold,female) { ................ ................ @@ -3143,7 +6259,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 164 (red mold) +# tile 328 (red mold,male) +{ + ................ + ................ + ...DDD...DDD.... + ..DCDDDDDCCDA... + .DLLCDDDCLDDDA.. + .DCCCDDDCDDDDA.. + ..DDDDDDDDDDA... + ...ADDDCCDDDA... + ...DDDDCLDDAA... + ..DCCDDCLDCDA... + ..DCLDDCDDLCDA.. + ..DDCDDDCDDDDA.. + ...DDDAADDDDDA.. + .....AA.AAAAA... + ................ + ................ +} +# tile 329 (red mold,female) { ................ ................ @@ -3162,7 +6297,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 165 (shrieker) +# tile 330 (shrieker,male) +{ + ................ + ................ + ................ + ................ + .....GGGGFF..... + ...GGGGIGIDFF... + .GGGIIGGGIIFFFF. + GIIGIIGGGGGGGDDF + GIIGGGGIIGIIGIDF + GGGGIGGIIGIIGGFF + ..GGGGGGGGGGG... + ......FFF..AAAAA + ....AGGGFFAAAAAA + ...AGGGGGGFAAAA. + ...AAAAAAAAAA... + ................ +} +# tile 331 (shrieker,female) { ................ ................ @@ -3181,7 +6335,26 @@ Z = (195, 195, 195) ...AAAAAAAAAA... ................ } -# tile 166 (violet fungus) +# tile 332 (violet fungus,male) +{ + ................ + ................ + ...III...III.... + ..ILIIIIILLIA... + .IOOLIIILOIIIA.. + .ILLLIIILIIIIA.. + ..IIIIIIIIIIA... + ...AIIILLIIIA... + ...IIIILOIIAA... + ..ILLIILOILIA... + ..ILOIILIIOLIA.. + ..IILIIILIIIIA.. + ...IIIAAIIIIIA.. + .....AA.AAAAA... + ................ + ................ +} +# tile 333 (violet fungus,female) { ................ ................ @@ -3200,7 +6373,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 167 (gnome) +# tile 334 (gnome,male) +{ + ................ + ................ + ................ + .....DF......... + ......G......... + .....GFF........ + ....GGFFF....... + ....GLLLF....... + .....OLO...AAA.. + ...FGOOOFFAAAA.. + ...GAGOFAFAAAA.. + ....LKNKFAAAA... + ....FGAFFAA..... + ....GFAFG.A..... + ................ + ................ +} +# tile 335 (gnome,female) { ................ ................ @@ -3219,7 +6411,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 168 (gnome lord) +# tile 336 (gnome leader,male) { ................ ................ @@ -3238,7 +6430,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 169 (gnomish wizard) +# tile 337 (gnome leader,female) +{ + ................ + ................ + ......D......... + ......G......... + ......G......... + .....GFF........ + ....HHHHH....... + ....GLLLF.....A. + .....OLO...AAA.. + ...FGOOOFFAAAA.. + ...GAGOFAFAAAA.. + ....LKNKFAAAA... + ....FGAFFAA..... + ....GFAFG.A..... + ................ + ................ +} +# tile 338 (gnomish wizard,male) +{ + ................ + ................ + ................ + ................ + ......G......... + .....GFF........ + ....GGFFF....... + ....GLLLF....... + ...FFOLOFF.AAA.. + ...GFOOOFFAAAA.. + ...FAGOFAFAAAA.. + ...GLKNKFFAAA... + ...FFGFFFFA..... + ...GFFFFGFA..... + ................ + ................ +} +# tile 339 (gnomish wizard,female) { ................ ................ @@ -3257,7 +6487,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 170 (gnome king) +# tile 340 (gnome ruler,male) +{ + ................ + ................ + ................ + ................ + ....H.C.H....... + ....HCHCH....... + ....HHHHH....... + ....GLLLF...A... + .....OLO...AAAA. + ...FGOOOFFAAAA.. + ...GAGOFAFAAAA.. + ....LKNKFAAAA... + ....FGAFFAA..... + ....GFAFG.A..... + ................ + ................ +} +# tile 341 (gnome ruler,female) { ................ ................ @@ -3276,7 +6525,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 171 (giant) +# tile 342 (giant,male) +{ + ......JJJJAA.... + ....JJJJJJJJA... + ....JJLLLLJJA... + ....JFFLLFFJA... + ....JLLLLLLJA... + ....ALLAALLAAA.. + .....ALLLLJAAAA. + ..CCLLJJJJLLCCAA + .CLLLCCKCKCLLLCA + .LLLKLKCKCLKLLLA + .LLAALLCCLLAALLA + .LLAAJJJKKJAALLA + .CLC.JJJJJKKCLAA + ..LL.CLJACLJLLAA + .....CLJACLJAAAA + ...LLLLJ.CLLLKAA +} +# tile 343 (giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -3295,7 +6563,26 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 172 (stone giant) +# tile 344 (stone giant,male) +{ + ......JJJJAA.... + ....JJJJJJJJA... + ....JJLLLLJJA... + ....JFFLLFFJA... + ....JLLLLLLJA... + ....ALLAALLAAA.. + .....ALLLLJAAAA. + ..CCLLJJJJLLCCAA + .CLLLCCKCKCLLLCA + .LLLAAKCKCLKLLLA + .LLPPPACCLLAALLA + .LLPPPPAKKJAALLA + .CLCPPPAJJKKCLAA + ..LLPPALACLJLLAA + .....ALJACLJAAAA + ...LLLLJ.CLLLKAA +} +# tile 345 (stone giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -3314,7 +6601,26 @@ Z = (195, 195, 195) .....ALJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 173 (hill giant) +# tile 346 (hill giant,male) +{ + ......JJJJAA.... + ....JJJJJJJJA... + ....JJLLLLJJA... + ....JFFLLFFJA... + ....JLLLLLLJA... + ....ALLAALLAAA.. + .....ALLLLJAAAA. + ...JJKJJJJJJJAA. + ..LJJCCKCKCJJLA. + ..JLKKKCKCKKLJA. + ..LAAKKCCKJAALAA + ..LAAJJJKKJAALAA + ..LC.JJJJJKKCLAA + ..LL.CLJACLJLLAA + .....CLJACLJAAAA + ...LLLLJ.LLLLKAA +} +# tile 347 (hill giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -3333,7 +6639,26 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.LLLLKAA } -# tile 174 (fire giant) +# tile 348 (fire giant,male) +{ + ....PPDDDDAA.... + ....PDDDDDDDA... + ...PPDLLLLDDA... + ...PDPFLLFFDA... + ...PPPLLLLLDA... + ....PLLAALLAAA.. + ...PPALLLLJAAAA. + ...JPDJJJJJJJAA. + ..LDDHDKCKCJJLA. + ..JLHDDCKCKKLJA. + ..LAHDHCCKJAALAA + JLAADDHJKKJAALAA + JJLJDHHJJJKKCLAA + ..LLJJJJACLJLLAA + .....CLJACLJAAAA + ...LLLLJ.LLLLKAA +} +# tile 349 (fire giant,female) { ....PPDDDDAA.... ....PDDDDDDDA... @@ -3352,7 +6677,26 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.LLLLKAA } -# tile 175 (frost giant) +# tile 350 (frost giant,male) +{ + .....KJJJJAA.... + ....KJJJJJJJA... + ....JJLLLLJJA... + ....JEELLEEJA... + ....JLLLLLLJA... + ....AKJJJJJAAA.. + .....KJAAJJAAAA. + ....KKJJJJAJAAAA + ...KJKJJJJAJJAAA + ..KJKKJJJJJKJJAA + ..KAAJKJJAJAAJAA + ..JAAJKKAKJAAJAA + ..LC.JJJJJKKCLAA + ..LL.CJJAJLJLLAA + .....CLJACLJAAAA + ...LLLLJ.CLLLKAA +} +# tile 351 (frost giant,female) { .....KJJJJAA.... ....KJJJJJJJA... @@ -3371,7 +6715,26 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 176 (ettin) +# tile 352 (ettin,male) +{ + ....NN..ONOP.... + ..NNOOPNNOOPP... + ..NPP..NPP..P... + ..ALPPLALPPLA... + ..APPPPAPPPPA... + ..APAAPAPAAPAA.. + ..APPPPAPPPPAAA. + ..BIIIIJJJIIIBAA + .BPPPIIIIIIPPPBA + .PPPFPIIIIPFPPPA + .PPAAPIIIIPAAPPA + .PPAAIIIIIIAAPPA + .BPB.IIFFIIABPAA + ..PP.BPAABPAPPAA + .....BPAABPAAAAA + ...PPPPA.BPPPFAA +} +# tile 353 (ettin,female) { ....NN..ONOP.... ..NNOOPNNOOPP... @@ -3390,7 +6753,26 @@ Z = (195, 195, 195) .....BPAABPAAAAA ...PPPPA.BPPPFAA } -# tile 177 (storm giant) +# tile 354 (storm giant,male) +{ + ......JJJJAA.... + ....JJJJJJJJA... + ....JJLLLLJJA... + ....JFFLLFFJA... + ....JLLLLLLJA... + ....ALLAALLAAH.. + .....ALLLLJAHAA. + ...JJKJJJJJHHAA. + ..LJJCCKCKHHLAA. + ..JLKKKCKHHHHHH. + ..LAAKKCCKJAHHAA + ..LAAJJJKKJHHALA + ..LC.JJJJJKHAAAA + ..LL.CLJACHAAAAA + .....CLJACCJAAAA + ...LLLLJ.LLLLKAA +} +# tile 355 (storm giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -3409,7 +6791,26 @@ Z = (195, 195, 195) .....CLJACCJAAAA ...LLLLJ.LLLLKAA } -# tile 178 (titan) +# tile 356 (titan,male) +{ + .....AAAAAAA.... + ....AALLLLAAA... + ....A..LL..AA... + ....ALLLLLLAA... + ....ALLAALLAAA.. + .....ALLLLJAAAA. + ..CCJJJJJJJJCCA. + .CLLLCCKCKCLLLCA + .LLLKJKCKCJKLLLA + .LLAAJJCCJJAALLA + .LLAAJJCCJJAALLA + .LLAAJJJKKJAALLA + .CLC.JJJJJKKCLAA + ..LL.CLJACLJLLAA + .....CLJACLJAAAA + ...LLLLJ.CLLLKAA +} +# tile 357 (titan,female) { .....AAAAAAA.... ....AALLLLAAA... @@ -3428,7 +6829,26 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 179 (minotaur) +# tile 358 (minotaur,male) +{ + ................ + .O..........O... + .OOOJJJJJJOOO... + ..OOJJKJJJOO.... + ...JGAKJGAJA.... + ...JJJKJJJJA.... + ....JJKJJJAAA... + ....JKKKJAAAA... + ..CLJAJAKALCAA.A + .CLLJJJJJALLCAAA + .LLCLAAAALCLLAA. + .LAACLLLLCAALAA. + .LL.JJJJJJJLLAAA + .LL.JJJJJJJLLAAA + ....CLCACLCAAAAA + ..LLLLL.LLLLLAA. +} +# tile 359 (minotaur,female) { ................ .O..........O... @@ -3447,7 +6867,26 @@ Z = (195, 195, 195) ....CLCACLCAAAAA ..LLLLL.LLLLLAA. } -# tile 180 (jabberwock) +# tile 360 (jabberwock,male) +{ + ................ + ...DP........... + ....DP.ADOO..... + ..DAIDADIPAD.... + ...DIAPIPA...... + ...DBDDDA....... + ..IBBDADDA..AA.. + .DDDDAODDIAAAA.. + ..OAOA.DDAIAAA.. + ..IOAODDAAADDAA. + ..DDDADDDDAIDA.. + ...AAADDIDIDDD.. + ....IDDAIDDDDA.. + ....IDAAIDAA.... + ...IDAA..ID..... + ................ +} +# tile 361 (jabberwock,female) { ................ ...DP........... @@ -3466,7 +6905,26 @@ Z = (195, 195, 195) ...IDAA..ID..... ................ } -# tile 181 (vorpal jabberwock) +# tile 362 (vorpal jabberwock,male) +{ + ................ + ...GP........... + ....GP.AGOO..... + ..GAFGAGFPAG.... + ...GFAPFPA...... + ...GHGGGA....... + ..FHHGAGGA..AA.. + .GGGGAOGGFAAAA.. + ..OAOA.GGAFAAA.. + ..FOAOGGAAAGGAA. + ..GGGAGGGGAFGA.. + ...AAAGGFGFGGG.. + ....FGGAFGGGGA.. + ....FGAAFGAA.... + ...FGAA..FG..... + ................ +} +# tile 363 (vorpal jabberwock,female) { ................ ...GP........... @@ -3485,7 +6943,7 @@ Z = (195, 195, 195) ...FGAA..FG..... ................ } -# tile 182 (Keystone Kop) +# tile 364 (Keystone Kop,male) { ................ ....AA.......... @@ -3504,17 +6962,74 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 183 (Kop Sergeant) +# tile 365 (Keystone Kop,female) { ................ ....AA.......... - ...AOOA......... - ...AOOA...C..... + ...AAAA......... + ...AOAA...C..... ..AAAAAA..C..... ...LLLL...C..... ....LL....C..... ...AAAA.AAA..... ..AAAAAAAAC.P... + .AA.AAAAA.PPPP.. + ..AAAAAA.PPPPPP. + ....AAAAPPPAPP.. + .A.AAAAAAPAAA... + AAAAA.PAAAAA.... + ..AA....AA...... + ................ +} +# tile 366 (Kop Sergeant,male) +{ + ................ + ....AA.......... + ...AOOA......... + ...AOOA...C..... + ..AAAAAA..C..... + ...LLLL...C..... + ....LL....C..... + ...AAAA.AAA..... + ..AAAAAAAAC.P... + .AA.AAAAA.CPPP.. + ..AAAAAA.PPPPPP. + ....AAAAPPPAPP.. + .A.AAAAAAPAAA... + AAAAA.PAAAAA.... + ..AA....AA...... + ................ +} +# tile 367 (Kop Sergeant,female) +{ + ................ + ....AA.......... + ...AOOA......... + ...AOOA...C..... + ..AAAAAA..C..... + ...LLLL...C..... + ....LL....C..... + ...AAAA.AAA..... + ..AAAAAAAAC.P... + .AA.AAAAA.CPPP.. + ..AAAAAA.PPPPPP. + ....AAAAPPPAPP.. + .A.AAAAAAPAAA... + AAAAA.PAAAAA.... + ..AA....AA...... + ................ +} +# tile 368 (Kop Lieutenant,male) +{ + ................ + ....AA.......... + ...AOOA...C..... + ...AOOA...C..... + ..AAAAAA..C..... + ...LLLL...C..... + ....LL....C..... + ..OAAAO.AAA..... + .OAAAAA.AAC.P... .AA.AAAAA.CPPP.. ..AAAAAA.PPPPPP. ....AAAAPPPAPP.. @@ -3523,7 +7038,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 184 (Kop Lieutenant) +# tile 369 (Kop Lieutenant,female) { ................ ....AA.......... @@ -3542,7 +7057,26 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 185 (Kop Kaptain) +# tile 370 (Kop Kaptain,male) +{ + ................ + ....AA....C..... + ...AHHA...C..... + ...AHHA...C..... + ..AAAAAA..C..... + ...LLLL...C..... + ....LL....C..... + .HHAAAAHHAA..... + .AAAAHAAAACCC... + .AA.AHAAA.CPPP.. + ..AAAHAA.PCPPPP. + ....AAAAPPPAPP.. + .A.AAAAAAPAAA... + AAAAA.PAAAAA.... + ..AA....AA...... + ................ +} +# tile 371 (Kop Kaptain,female) { ................ ....AA....C..... @@ -3561,7 +7095,26 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 186 (lich) +# tile 372 (lich,male) +{ + ................ + ................ + ...OOO.......... + ..AOAOO......... + ..OOOOO......... + ..OO.O.......... + .....PPP........ + ...OOPPP....AAA. + ..O.PPPPPA..AAA. + .O...PPPP.AAAAA. + ....O.PPPAAAA.A. + ......PPPAAA.A.. + .....OPAP.A..... + ...OOOA.OA...... + ......OOO....... + ................ +} +# tile 373 (lich,female) { ................ ................ @@ -3580,7 +7133,26 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 187 (demilich) +# tile 374 (demilich,male) +{ + ................ + ................ + ...OOO.......... + ..AOAOO......... + ..OOOOO......... + ..OO.O.......... + .....PPP........ + ...OOPPP....AAA. + ..O.PPPPPA..AAA. + .O...PPPP.AAAAA. + ....L.PPPAAAA.A. + ......LPPAAA.A.. + .....LLAL.A..... + ...LLLA.LA...... + ......LLL....... + ................ +} +# tile 375 (demilich,female) { ................ ................ @@ -3599,7 +7171,26 @@ Z = (195, 195, 195) ......LLL....... ................ } -# tile 188 (master lich) +# tile 376 (master lich,male) +{ + ...H............ + ...HCH.H........ + ...HHHCH........ + ..AOAOHH........ + ..OOOOO......... + ..OO.O.......... + .....PPP........ + ...PPPPP....AAA. + ..PPPPPPPA..AAA. + .O..PPPPP.AAAAA. + ....OPPPPAAAA.A. + ......PPPAAA.A.. + .....OPAP.A..... + ...OOOA.OA...... + ......OOO....... + ................ +} +# tile 377 (master lich,female) { ...H............ ...HCH.H........ @@ -3618,7 +7209,26 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 189 (arch-lich) +# tile 378 (arch-lich,male) +{ + ................ + ................ + ...OOO.......... + ..DODOO......... + ..OOOOO......... + H.OO.O.......... + A....PPP........ + A..OOPPP....AAA. + .AO.PPPPPA..AAA. + .O...PPPP.AAAAA. + .A..O.PPPAAAA.A. + ..A...PPPAAA.A.. + ..A..OPAP.A..... + ..AOOOA.OA...... + ......OOO....... + ................ +} +# tile 379 (arch-lich,female) { ................ ................ @@ -3637,7 +7247,26 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 190 (kobold mummy) +# tile 380 (kobold mummy,male) +{ + ................ + ................ + ................ + ...N...N........ + ...NONONO....... + ...OAOAO.OP..... + ....ONN...A..... + ...ONODNA.AA.... + ..OLONNONAAA.A.. + ..NALONANAAAAA.. + ..NAOLOAOAAAAA.. + ....NOLAAAAAA... + ....NANAAAA..... + ...OOANOA....... + ................ + ................ +} +# tile 381 (kobold mummy,female) { ................ ................ @@ -3656,7 +7285,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 191 (gnome mummy) +# tile 382 (gnome mummy,male) +{ + ................ + ................ + ................ + ................ + ......G......... + .....GGFO....... + ....GGFFOOP..... + ....GDODF....... + .....ONO...AAA.. + ...NONOONOAAAA.. + ...OANLOAOAAAA.. + ....NNOLOAAAA... + ....NOANDAA..... + ....NOAOO.A..... + ................ + ................ +} +# tile 383 (gnome mummy,female) { ................ ................ @@ -3675,7 +7323,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 192 (orc mummy) +# tile 384 (orc mummy,male) +{ + ................ + ................ + ................ + .....OA......... + ....NOOP........ + ....DODPOP...... + ....OOOA........ + ..OOOOOOOA.AA... + ..OOOOOOO.AAA... + ..OAOOOAACCC.... + ..OAOOOCCAAA.... + ....OCCOAAAAAA.. + ...CCAOOAAAA.... + ..OOOAOOOA...... + ................ + ................ +} +# tile 385 (orc mummy,female) { ................ ................ @@ -3694,7 +7361,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 193 (dwarf mummy) +# tile 386 (dwarf mummy,male) +{ + ................ + ................ + ................ + ................ + ......B......... + .....BBEO....... + ....BBEEEOP..... + ....BDODE....... + .....ONO...AAA.. + ...NONOONOAAAA.. + ...OANLOAOAAAA.. + ....NNOLOAAAA... + ....NOANDAA..... + ....NOAOO.A..... + ................ + ................ +} +# tile 387 (dwarf mummy,female) { ................ ................ @@ -3713,7 +7399,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 194 (elf mummy) +# tile 388 (elf mummy,male) +{ + ................ + ................ + .........O...... + .......OOOP..... + ......OOOOP..... + ......OEOEAP.... + ......OOOOA..... + ......AOOA....A. + ......OAAO..AAA. + .....OOOOOOAAAA. + ....OALOOLAOAAA. + ....OADOOOAOAA.. + ......OOAOAA.A.. + .....OOA.OOA.... + ................ + ................ +} +# tile 389 (elf mummy,female) { ................ ................ @@ -3732,7 +7437,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 195 (human mummy) +# tile 390 (human mummy,male) +{ + ................ + ................ + ...ONNO......... + ...NNNNOP....... + ..PANAN.OPP..... + ..PNNNN......... + ..ONOONNP....... + .ONLNNOOO....... + .NJNOOOOO..AAA.. + .OJOOOODN.AAAA.. + .NJOLNOAOAAAAAA. + .OCNO.NKNAAAAA.. + .N.OO.OLAAAAAAA. + ...OOAOOAAA..... + ..NNN.NNNA...... + ................ +} +# tile 391 (human mummy,female) { ................ ................ @@ -3751,7 +7475,7 @@ Z = (195, 195, 195) ..NNN.NNNA...... ................ } -# tile 196 (ettin mummy) +# tile 392 (ettin mummy,male) { .....NN..ONOO... ...NNOOONNOOOO.. @@ -3770,12 +7494,50 @@ Z = (195, 195, 195) .....NOOANOOAAAA ...OOOOO.OOOOKAA } -# tile 197 (giant mummy) +# tile 393 (ettin mummy,female) { - ......ONOOAA.... - ....ONNNOOOOA... - ....NNOOOOOOO... - ....NFFOOFFOOP.. + .....NN..ONOO... + ...NNOOONNOOOO.. + ...NOOOONOOOOOO. + ...OFOFOLOFOFO.O + ...OOOOOLOOOOO.P + ...NOOOOLNNOOOA. + ...ONOOOLOOOOAAA + ..OOOONNNNNNNOAA + .ONNNNNNOONOOOOA + .ONODNNOOOOOOOOA + .NNAAONNONOAAOOA + .NOAAONOONLAAOOA + .OOO.ONOONOOOOAA + ..OO.NNOANOLOOAA + .....NOOANOOAAAA + ...OOOOO.OOOOKAA +} +# tile 394 (giant mummy,male) +{ + ......ONOOAA.... + ....ONNNOOOOA... + ....NNOOOOOOO... + ....NFFOOFFOOP.. + ....NONOOOOOAOP. + ....AONOOOOAAAP. + .....ANOOODAAAA. + ..OOOONOOONNNOAA + .ONNNNNOOOOOOOOA + .ONODNNLOOOOOOOA + .NNAAONOLNOAAOOA + .NOAAONOONLAAOOA + .OOO.ONOONOOOOAA + ..OO.NNOANOLOOAA + .....NOOANOOAAAA + ...OOOOO.OOOOKAA +} +# tile 395 (giant mummy,female) +{ + ......ONOOAA.... + ....ONNNOOOOA... + ....NNOOOOOOO... + ....NFFOOFFOOP.. ....NONOOOOOAOP. ....AONOOOOAAAP. .....ANOOODAAAA. @@ -3789,7 +7551,26 @@ Z = (195, 195, 195) .....NOOANOOAAAA ...OOOOO.OOOOKAA } -# tile 198 (red naga hatchling) +# tile 396 (red naga hatchling,male) +{ + ................ + ................ + ................ + ................ + ....K........... + ...KLK.......... + ...LLLA......... + ...ALAA......... + ...LALA......... + ...LLLA......... + ...LLLAA........ + ...LDLAA........ + ...IDDAAAAADA... + ...IDDDAAADDA... + ....IIDDDDDA.... + ................ +} +# tile 397 (red naga hatchling,female) { ................ ................ @@ -3808,7 +7589,26 @@ Z = (195, 195, 195) ....IIDDDDDA.... ................ } -# tile 199 (black naga hatchling) +# tile 398 (black naga hatchling,male) +{ + ................ + ................ + ................ + ................ + ....K........... + ...KLK.......... + ...LLLA......... + ...ALAA......... + ...LALA......... + ...LLLA......... + ...LLLA......... + ...LALAA........ + ...AAAPA..PAA... + ...AAAAPPPAAA... + ....AAAAAAAA.... + ................ +} +# tile 399 (black naga hatchling,female) { ................ ................ @@ -3827,7 +7627,26 @@ Z = (195, 195, 195) ....AAAAAAAA.... ................ } -# tile 200 (golden naga hatchling) +# tile 400 (golden naga hatchling,male) +{ + ................ + ................ + ................ + ................ + ....K........... + ...KLK.......... + ...LLLA......... + ...ALAA......... + ...LALA......... + ...LLLA......... + ...LLLAA........ + ...LHLAA........ + ...NHHAAAAAHA... + ...NHHHAAAHHA... + ....NNHHHHHA.... + ................ +} +# tile 401 (golden naga hatchling,female) { ................ ................ @@ -3846,7 +7665,26 @@ Z = (195, 195, 195) ....NNHHHHHA.... ................ } -# tile 201 (guardian naga hatchling) +# tile 402 (guardian naga hatchling,male) +{ + ................ + ................ + ................ + ................ + ....K........... + ...KLK.......... + ...LLLA......... + ...ALAA......... + ...LALA......... + ...LLLA......... + ...LLLAA........ + ...LFLAA........ + ...GFFAAAAAFA... + ...GFFFAAAFFA... + ....GGFFFFFA.... + ................ +} +# tile 403 (guardian naga hatchling,female) { ................ ................ @@ -3865,7 +7703,26 @@ Z = (195, 195, 195) ....GGFFFFFA.... ................ } -# tile 202 (red naga) +# tile 404 (red naga,male) +{ + ................ + ....KK.......... + ...KLLK......... + ...LLLLA........ + ...ALLAA........ + ...LAALA........ + ...LLLLA........ + ...LLLDA..AA.... + ...LDLDA.AAAA... + ...IDDDAAAIIA... + ...IDDDAIDDDIDA. + ...IDDDIDDDDDDDA + ...IDDDDDDAA.DDA + ....DDDDDA..DDA. + .....DDAA..DDA.. + ..........DA.... +} +# tile 405 (red naga,female) { ................ ....KK.......... @@ -3884,7 +7741,26 @@ Z = (195, 195, 195) .....DDAA..DDA.. ..........DA.... } -# tile 203 (black naga) +# tile 406 (black naga,male) +{ + ................ + ....KK.......... + ...KLLK......... + ...LLLLA........ + ...ALLAA........ + ...LAALA........ + ...LLLLA........ + ...LLLAA........ + ...LALAA..PPP... + ...AAAAPPPAAP... + ...AAAAPAAAAAAP. + ...AAAAAAAAAAAAP + ...AAAAAAAPP.AAP + ....AAAAAP..AAP. + .....AAPP..AAP.. + ..........AP.... +} +# tile 407 (black naga,female) { ................ ....KK.......... @@ -3903,7 +7779,26 @@ Z = (195, 195, 195) .....AAPP..AAP.. ..........AP.... } -# tile 204 (golden naga) +# tile 408 (golden naga,male) +{ + ................ + ....KK.......... + ...KLLK......... + ...LLLLA........ + ...ALLAA........ + ...LAALA........ + ...LLLLA........ + ...LLLHA..AA.... + ...LHLHA.AAAA... + ...NHHHAAANNA... + ...NHHHANHHHNHA. + ...NHHHNHHHHHHHA + ...NHHHHHHAA.HHA + ....HHHHHA..HHA. + .....HHAA..HHA.. + ..........HA.... +} +# tile 409 (golden naga,female) { ................ ....KK.......... @@ -3922,7 +7817,26 @@ Z = (195, 195, 195) .....HHAA..HHA.. ..........HA.... } -# tile 205 (guardian naga) +# tile 410 (guardian naga,male) +{ + ................ + ....KK.......... + ...KLLK......... + ...LLLLA........ + ...ALLAA........ + ..CLAALC........ + ..LLLLLL........ + ..CLLCLC..AA.... + ...CLLCA.AAAA... + ...GLFCAAAGGA... + ...GFFFAAFFFGFA. + ...GFFFGFFFFFFFA + ...GFFFFFFAA.FFA + ....FFFFFA..FFA. + .....FFAA..FFA.. + ..........FA.... +} +# tile 411 (guardian naga,female) { ................ ....KK.......... @@ -3941,7 +7855,26 @@ Z = (195, 195, 195) .....FFAA..FFA.. ..........FA.... } -# tile 206 (ogre) +# tile 412 (ogre,male) +{ + ................ + ................ + ....CLLLC....... + ..LCKKLKKCL..... + ...LAALAALJA.... + ...CLLLLLCJA.... + ....CAAACJAAA... + ....LDDDLAAAA... + ..CLJLLLKALCAA.A + .CLLAJJJJALLCAAA + .LLCLAAAALCLLAA. + .LAACLLLLCAALAA. + .LC.HHHBHHACLAAA + .LL.JJJJJJALLAAA + ....CJJJCLAAAAAA + ..LLLLL.LLLLLAA. +} +# tile 413 (ogre,female) { ................ ................ @@ -3960,7 +7893,26 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 207 (ogre lord) +# tile 414 (ogre leader,male) +{ + ................ + ................ + ....CLLLC....... + ..LCKKLKKCL..... + ...LAALAALJA.... + ...CLLLLLCJA.... + ....CLLLCJAAA... + ....LAAALAAAA... + ..JKJLLLKAKJAA.A + .CLKAJJJJAKLCAAA + .LLJKAAAAKJLLAA. + .LAAJKKKKJAALAA. + .LC.HHHBHHACLAAA + .LL.JJJJJJALLAAA + ....CJJJCLAAAAAA + ..LLLLL.LLLLLAA. +} +# tile 415 (ogre leader,female) { ................ ................ @@ -3979,7 +7931,26 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 208 (ogre king) +# tile 416 (ogre tyrant,male) +{ + ...H..C..H...... + ...HDCHCDH...... + ...HHHHHHH...... + ..LCKKLKKCL..... + ...LAALAALJA.... + ...CLLLLLCJA.... + ....CLLLCJAAA... + ....LAAALAAAA... + ..JKJLLLKAKJAA.A + .CJKAJJJJAKJCAAA + .LJJKAAAAKJJLAA. + .LAAJKKKKJAALAA. + .LC.HHHBHHACLAAA + .LL.JJJJJJALLAAA + ....CJJJCLAAAAAA + ..LLLLL.LLLLLAA. +} +# tile 417 (ogre tyrant,female) { ...H..C..H...... ...HDCHCDH...... @@ -3998,7 +7969,26 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 209 (gray ooze) +# tile 418 (gray ooze,male) +{ + ................ + ................ + ................ + .....PBPA....... + ...PBBBPBA...... + ..BBNNBPPBAA.... + .BBNNPPPBBPAAA.. + PBBBPPPBPBBAAA.. + BBBPBPPPPPBPAAA. + BBPBPPPPPPPBAAA. + PBPPBPPPBBPPAAA. + .PBBPPPBAAPPPAA. + ...PBBBAAAKPPJ.. + ........ACPPAK.. + .........KCCCJ.. + ................ +} +# tile 419 (gray ooze,female) { ................ ................ @@ -4017,7 +8007,7 @@ Z = (195, 195, 195) .........KCCCJ.. ................ } -# tile 210 (brown pudding) +# tile 420 (brown pudding,male) { ................ ................ @@ -4036,7 +8026,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 211 (green slime) +# tile 421 (brown pudding,female) +{ + ................ + ................ + ................ + ................ + ............J... + ....JKKJJJ..JJ.. + ...KKKCJJJJJ.... + ..KKNNJNNJJJ.... + ..KJANJANJJJA... + ..KKJJJJJCJJAA.. + ..JKJJCJJJJJAA.. + ...JJJJJJJJAAA.. + ....JJJJJJAAA... + .....AAAAAAA.... + ................ + ................ +} +# tile 422 (green slime,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ............G... + .....G......G..G + .G....G..G.NGN.G + ..NG.NGGNGGGGGGG + ..GGNGGNGGGFGGF. + GGNGGGGGGGGGFF.G + .NGGGGGFGFG..... + NGGGGFGGFG.G..GF + NGGFGGF..GF..... + ..GGF..GGF..G... +} +# tile 423 (green slime,female) { ................ ................ @@ -4055,7 +8083,26 @@ Z = (195, 195, 195) NGGFGGF..GF..... ..GGF..GGF..G... } -# tile 212 (black pudding) +# tile 424 (black pudding,male) +{ + ........A....... + ........AA...... + .....AAA........ + ....AAAAA....... + ....CACAA....... + ....DADAA....... + ....AAAAA....... + ....AAAAA....... + ....AAAAA....... + .....AAAAA...... + .....AAAAA...... + ......AAAAA..... + ......AAAAAA.... + .......AAAAAA.A. + ........AAAAAAAA + ..........AAAA.. +} +# tile 425 (black pudding,female) { ........A....... ........AA...... @@ -4074,7 +8121,26 @@ Z = (195, 195, 195) ........AAAAAAAA ..........AAAA.. } -# tile 213 (quantum mechanic) +# tile 426 (quantum mechanic,male) +{ + ................ + ......LLLL...... + ...FGGCLCGGF.... + ...GNNGLGNNGL... + B.BGANGGGANGL... + B.BFGGCLCGGFL... + BIB..CLLLCCL.... + BILN.LLAALLAAAA. + BILNN.LLLLJAAAA. + BIB.NNJJJJNAAA.. + BIB.BNNNONNNAA.. + .B...NNNONNLAA.. + .....NBEBENA.A.. + .....NBEBENN.... + ....NAAEBAANN... + ................ +} +# tile 427 (quantum mechanic,female) { ................ ......LLLL...... @@ -4093,7 +8159,26 @@ Z = (195, 195, 195) ....NAAEBAANN... ................ } -# tile 214 (genetic engineer) +# tile 428 (genetic engineer,male) +{ + ................ + ......LLLL...... + ...LAALLLAAL.... + ...LNNLLLNNLL... + ...LANLLLANLL... + ...LLLLLLLLLL... + .....CLLLCCL.... + ..LN.LLAALL..... + ..LNN.LLLLJ..... + ..A.NNLLLLN..... + .A.ABNNNONNN.... + .AA..NNNONNL.... + .A.A.NPEPENA.... + .AA..NPEPENN.... + ..AANAAEPAANN... + ................ +} +# tile 429 (genetic engineer,female) { ................ ......LLLL...... @@ -4112,7 +8197,26 @@ Z = (195, 195, 195) ..AANAAEPAANN... ................ } -# tile 215 (rust monster) +# tile 430 (rust monster,male) +{ + ................ + ....EEEE........ + ...EEHEHE....... + ...EEEAEE....... + ...EEPAPE....... + ...EPEAEP...E... + ....EEEE.AAEE... + ....EEEEEAAEEE.. + ...EEEEEEEAEAEE. + ..EEEEEEAAAAE... + ..EEAEEEEAEEEA.. + ..AAEEEEEEEEEAA. + ....AEEEEEEEAAA. + .....EEEEEAA..A. + ......AAAA...... + ................ +} +# tile 431 (rust monster,female) { ................ ....EEEE........ @@ -4131,7 +8235,26 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 216 (disenchanter) +# tile 432 (disenchanter,male) +{ + ................ + ....PPPP........ + ...PPDPDP....... + ...PPPAPP....... + ...PPOAOP....... + ...POPAPO...P... + ....PPPP.AAPP... + ....PPPPPAAPPP.. + ...PPPPPPPAPAPP. + ..PPPPPPAAAAP... + ..PPAPPPPAPPPA.. + ..AAPPPPPPPPPAA. + ....APPPPPPPAAA. + .....PPPPPAA..A. + ......AAAA...... + ................ +} +# tile 433 (disenchanter,female) { ................ ....PPPP........ @@ -4150,7 +8273,26 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 217 (garter snake) +# tile 434 (garter snake,male) +{ + ................ + ................ + ................ + ....KKA......... + ...NAOKA........ + ...KKAKA........ + ...KKAKA....KA.. + ....APKAP..KAPP. + .....PKAPP.KAP.. + .....KAAP..KAP.. + ....KAAP..KAAP.. + ....KAAPPKAAP... + ....KAAKKAAP.... + .....KAAAAP..... + ................ + ................ +} +# tile 435 (garter snake,female) { ................ ................ @@ -4169,7 +8311,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 218 (snake) +# tile 436 (snake,male) +{ + ................ + ................ + ................ + ....KKA......... + ...NAOJA........ + ...KKJAJ........ + ...KKAAJ....KK.. + ...FAAKJ...KJAA. + ..FAFAKJAA.KJA.. + .....KJAA..KJA.. + ....KJAA..KJJA.. + ....KJAAAKJJA... + ....KJJJJJJA.... + .....KJJJJA..... + ................ + ................ +} +# tile 437 (snake,female) { ................ ................ @@ -4188,7 +8349,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 219 (water moccasin) +# tile 438 (water moccasin,male) +{ + ................ + ................ + ................ + ....AAA......... + ...AAAAA...AA... + ...OAOAAA.AA.... + ...AAA.AA.AA.... + ...DA..AA.AA.... + ..D.D.AAA..AA... + .....AAA...AA... + .....AAA...AA... + ....AAA...AAA... + ....AAAAAAAA.... + ....AAAAAAA..... + .....AAAAA...... + ................ +} +# tile 439 (water moccasin,female) { ................ ................ @@ -4207,7 +8387,26 @@ Z = (195, 195, 195) .....AAAAA...... ................ } -# tile 220 (python) +# tile 440 (python,male) +{ + ................ + ................ + ................ + ...KKKA.....JJ.. + ...GAGJA...JJJ.. + ..JKKJAJ..KJJ... + ..KKKAJJ..KJJ.AA + ..KKAAKJA.KKJAA. + .....AKJAA.KJAA. + ....JKJAA..KJJA. + ...JJJAA..KJJJA. + ...JJJAAAKJJJA.. + ...JJJJJJJJJAA.. + ....JJJJJJJAA... + .....JJJJJAA.... + ................ +} +# tile 441 (python,female) { ................ ................ @@ -4226,7 +8425,26 @@ Z = (195, 195, 195) .....JJJJJAA.... ................ } -# tile 221 (pit viper) +# tile 442 (pit viper,male) +{ + ................ + ................ + ................ + ....AAA......... + ...AAAAA...AAA.. + ...OAAAAA.AA.AA. + ...AA..AA.AA.AA. + ...D...AA.AA..A. + ......AAA..AA.A. + ......AA...AA... + .....AAA...AA... + .....AA...AAA... + .....AA..AAA.... + .....AAAAAA..... + ......AAAA...... + ................ +} +# tile 443 (pit viper,female) { ................ ................ @@ -4245,7 +8463,26 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 222 (cobra) +# tile 444 (cobra,male) +{ + ................ + ................ + ................ + ....AAA......... + ...AAAAAA....... + ..PA..AAAA...... + ..A..AAAAA..AA.. + ..D..AAAAA....A. + ......AAA.....A. + ......AA..AAAA.. + .....AA..AA..... + ....AA...AA..... + ....AA....AAAA.. + ....AAA......AA. + .....AAAAAAAAA.. + ................ +} +# tile 445 (cobra,female) { ................ ................ @@ -4264,7 +8501,26 @@ Z = (195, 195, 195) .....AAAAAAAAA.. ................ } -# tile 223 (troll) +# tile 446 (troll,male) +{ + ................ + ..AAAAAA........ + AAAANANA........ + .AAKKKJJA....... + AAAKAAAKA....... + AKAKAAAKAA...... + KJJAKKKAJKA..... + KJAJAAAJJJA..... + KJAJKKJJKJA..... + .KJJAFGFJJAAAA.. + ..KJA.PFJAAAA... + ...AFAGFAAAAAA.. + ...GFAGP.AA.AA.. + ..KJJAKJAA.AA... + ..KJA..KA....... + ................ +} +# tile 447 (troll,female) { ................ ..AAAAAA........ @@ -4283,7 +8539,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 224 (ice troll) +# tile 448 (ice troll,male) { ................ ..OONOOO........ @@ -4302,13 +8558,51 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 225 (rock troll) +# tile 449 (ice troll,female) { ................ - ...AAAAA........ - .AAANANAAAA..... - .AAKKKJJAA...... - AAAKAAAKAAAA.... + ..OONOOO........ + NONOAOAOO....... + .NOKKKJJO....... + NOJKAAAKOO...... + OKJKAAAKAO...... + KJJAKKKAJKA..... + KJAJAAAJJJA..... + KJAJKKJJKJA..... + .KJJAEBEJJAAAA.. + ..KJA.PEJAAAA... + ...AEABEAAAAAA.. + ...BEABP.AA.AA.. + ..KJJAKJAA.AA... + ..KJA..KA....... + ................ +} +# tile 450 (rock troll,male) +{ + ................ + ...AAAAA........ + .AAANANAAAA..... + .AAKKKJJAA...... + AAAKAAAKAAAA.... + AKAKAAAKAAA..... + KJJAKKKAJKAA.... + KJAJAAAJJJA..... + KJAPAKJJKJA..... + PKJPPAGFJJAAAA.. + PPPPPAFFJAAAA... + .PPPAAGFAAAAAA.. + ...AFAGF.AA.AA.. + ..KJJAKJAA.AA... + ..KJA..KA....... + ................ +} +# tile 451 (rock troll,female) +{ + ................ + ...AAAAA........ + .AAANANAAAA..... + .AAKKKJJAA...... + AAAKAAAKAAAA.... AKAKAAAKAAA..... KJJAKKKAJKAA.... KJAJAAAJJJA..... @@ -4321,7 +8615,26 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 226 (water troll) +# tile 452 (water troll,male) +{ + ................ + ...AAAAA........ + ..AANANAA....... + .AAKKKJJAA...... + .AAKAAAKAA...... + .KAKAAAKAA...... + KJJAKKKAJKA..... + KJAJAAAJJJA..... + KJAJKKJJKJA..... + .KJJAEBEJJAAAA.. + ..KJA.PEJAAAA... + ...AEABEAAAAAA.. + ...BEABP.AA.AA.. + ..KJJAKJAA.AA... + ..KJA..KA....... + ................ +} +# tile 453 (water troll,female) { ................ ...AAAAA........ @@ -4340,7 +8653,26 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 227 (Olog-hai) +# tile 454 (Olog-hai,male) +{ + ...PPPPP........ + ..PPAAAPP....... + ..PANANAP....... + ..PAAAAAP....... + .PPAAAAAPP...... + PPPAAAAAPPP..... + AAPPAAAPPAA..... + AAAPPPPPAAA..... + AAAPPPPPAAA..... + .AAAAPPPAAAPPP.. + PONNNNNNAACPP... + ...APAPPAPPPPP.. + ...PPAPP.PP.PP.. + ..AAAAAAAP.PP... + ..AAA.AAA....... + ................ +} +# tile 455 (Olog-hai,female) { ...PPPPP........ ..PPAAAPP....... @@ -4359,7 +8691,26 @@ Z = (195, 195, 195) ..AAA.AAA....... ................ } -# tile 228 (umber hulk) +# tile 456 (umber hulk,male) +{ + ................ + ...AAAAA........ + ..AAAAAAA....... + .ADADADADA...... + .AAAAAAAAA.A.... + .AAAOAOAAA.AA... + .A.AOAOA.AAA.... + .A.AAAAAPAA..... + .AAAAAAAP....... + .A.AAAAA.PPPPPP. + ...AA.AA.PPPPP.. + ...AA.AAPPPPPPP. + ...AAPAAPPPP.... + ..AAAPAAAPP..... + .AAAP..AAP...... + ................ +} +# tile 457 (umber hulk,female) { ................ ...AAAAA........ @@ -4378,7 +8729,26 @@ Z = (195, 195, 195) .AAAP..AAP...... ................ } -# tile 229 (vampire) +# tile 458 (vampire,male) +{ + ................ + ................ + .....AAA........ + ....AAOAA....... + .ADDAGAGADA..... + ..ADALLOAD...... + .AAAAAAAAA...... + ..AAAAAAAA...... + ...AAAAAAA...... + ..ADAAAAAAPPPPP. + ..ADDAAAAAPPPP.. + ..AAAAAAAAPPP... + .....AAPAAPP.... + ....AAP..AP..... + ................ + ................ +} +# tile 459 (vampire,female) { ................ ................ @@ -4397,7 +8767,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 230 (vampire lord) +# tile 460 (vampire leader,male) +{ + ................ + .....AAAA....... + .N..AAOOAA...... + .NDDAGAAGADA.... + .NADALLLOAD..... + AAAAAAAAAAA..... + AAAAAAAAAAA..... + .AAAAAAAAAA..... + .NAAAAAAAAA..... + .N.AAAAAAAAPPPPP + .NADAAAAAAAPPPPP + .NADDAAAAAAPPPP. + .NAAAAAAAAAPPP.. + .N...AAAPAAPP... + .N..AAPP..AP.... + ................ +} +# tile 461 (vampire leader,female) { ................ .....AAAA....... @@ -4416,7 +8805,26 @@ Z = (195, 195, 195) .N..AAPP..AP.... ................ } -# tile 231 (vampire mage) +# tile 462 (vampire mage,male) +{ + ................ + ................ + .....AAA........ + ....AAOAA....... + .ADDAGAGADA..... + ..ADALLOAD...... + .AAAA.A.AA...... + ..AAAACAAA...... + ...AAADAAA...... + ..ADAAAAAAPPPPP. + ..ADDAAAAAPPPP.. + ..AAAAAAAAPPP... + .....AAPAAPP.... + ....AAP..AP..... + ................ + ................ +} +# tile 463 (vampire mage,female) { ................ ................ @@ -4435,7 +8843,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 232 (Vlad the Impaler) +# tile 464 (Vlad the Impaler,male) +{ + ................ + ..N..AAAA....... + ADNDAAOOAADDDA.. + .ANDAGAAGADDA... + ..NDALLLOADA.... + ..NAAAAAAAAAAAAA + .HHHDAAAAADDDDDA + HEHEHJAAAADDDAA. + LLLLLJAAAADDAAPP + .LLLJAAAAADDAPPP + ..NJDAAAAADAPPPP + .ANDDAAAAAAAPPPP + .ANAAAAAAAAPPPP. + ..N..AAAPAAPPP.. + ..N.AAPP..AP.... + ................ +} +# tile 465 (Vlad the Impaler,female) { ................ ..N..AAAA....... @@ -4454,7 +8881,26 @@ Z = (195, 195, 195) ..N.AAPP..AP.... ................ } -# tile 233 (barrow wight) +# tile 466 (barrow wight,male) +{ + ................ + ................ + ...LLO.......... + ..DLDLO......... + ..LLLLO......... + ..LJL..P........ + ..OOO.PP...AAAA. + ..POO.PP.AAAAAA. + .LPOO.PP.PAAAA.. + .JJOO.PP.PAAAA.. + .J.O..PL.PPAAA.. + .J.O.PPPPPPAAA.. + .J...PPPPPPPAA.. + .J..LLPPPPPPA... + .J.....LLAA..... + ................ +} +# tile 467 (barrow wight,female) { ................ ................ @@ -4473,7 +8919,26 @@ Z = (195, 195, 195) .J.....LLAA..... ................ } -# tile 234 (wraith) +# tile 468 (wraith,male) +{ + ................ + ................ + ...PPPPP........ + ...PAAPPP....... + ....PAAPP....... + ....PAAPP....... + ..PP.PPP.P...... + .OLAPPP.PP...... + ..AAPPPPAP..AAA. + ..PPPPPOLPAAAAA. + ...A.PPAAAAPPA.. + .....PPAPPPPA... + ......PPPPA..... + ................ + ................ + ................ +} +# tile 469 (wraith,female) { ................ ................ @@ -4492,7 +8957,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 235 (Nazgul) +# tile 470 (Nazgul,male) +{ + ................ + ................ + ...PPPPP........ + ...PAAPPP....... + ....PAAPP....... + ....PAAPP....... + ..PP.PPP.P...... + .OLAPPP.PP...... + .OPAPPPPAP..AAA. + ..PAPPPPAP..AAA. + ..PA.PPPLP..AAA. + ..PP.PPOLPAAAAA. + ...AAPPOAAAPPA.. + .....PPAPPPPA... + ......PPPPA..... + ................ +} +# tile 471 (Nazgul,female) { ................ ................ @@ -4511,7 +8995,26 @@ Z = (195, 195, 195) ......PPPPA..... ................ } -# tile 236 (xorn) +# tile 472 (xorn,male) +{ + ................ + ................ + ................ + ...OB.OP.BP..... + ...BBBBPPPP..... + ...B............ + ...DDBB.BDDA.A.. + ...DDBB.PDDAAAA. + ...B.......AAAA. + ...BOB.BPP.AAAA. + ...BBB.PPP.AAAA. + ...B.......AAA.. + ...BOBBPPBPAA... + ...BO.BP.PPA.... + ................ + ................ +} +# tile 473 (xorn,female) { ................ ................ @@ -4530,7 +9033,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 237 (monkey) +# tile 474 (monkey,male) +{ + ................ + ................ + ................ + ................ + ................ + .......KKA...... + ......KLLJA..... + ......KLLJA..... + .......KJA...... + .....KKKKKJAA... + ....KJKLLJJJAA.. + ....LAKLLJALAA.. + ......KJJJAAAA.. + ......JAAJAAA... + .....JJA.JJA.... + ................ +} +# tile 475 (monkey,female) { ................ ................ @@ -4549,7 +9071,7 @@ Z = (195, 195, 195) .....JJA.JJA.... ................ } -# tile 238 (ape) +# tile 476 (ape,male) { ................ ................ @@ -4568,7 +9090,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 239 (owlbear) +# tile 477 (ape,female) +{ + ................ + ................ + ......KKKJ...... + .....JJJJJJ..... + ....KCELECJJ.AA. + ....KLLLLCAJAAAA + ...KKCLACCAJJAAA + ..KKKKCCCAJKJJAA + ..KKAKJAAJJAJJAA + ..KAAKJJJJJAAJAA + ..LC.KJJJJJKCLAA + ..LL.CJJAKLJLLAA + .....CLJACLJAAAA + ...LLLLJACLLLKA. + ................ + ................ +} +# tile 478 (owlbear,male) +{ + ................ + ....K.....K..... + ....CK...KK..... + ....CKKKKKK..... + ...KOOOKOOOK.... + ...KOOOKOOOKA..A + ...KOOAJAOOKAAAA + ..CKCJJHJJKAKAAA + .CKKKCKLKKAJJKAA + .KJJJJCKKJJJJJAA + .KJJJPAKJPJJJJAA + ..KJJJAKJJJJJAAA + ...JJPAKJPJJAAA. + ...JAAJAJAAJAA.. + ...PJPJAJPJPA... + ................ +} +# tile 479 (owlbear,female) { ................ ....K.....K..... @@ -4587,7 +9147,26 @@ Z = (195, 195, 195) ...PJPJAJPJPA... ................ } -# tile 240 (yeti) +# tile 480 (yeti,male) +{ + ................ + ....BNNN........ + ...BNANAP....... + ..BNNNNNNP...... + ..NNNADANN...... + ..NNNNNNPN...... + ..N.NNBPPNP..... + ..N.NNNNANP..AA. + ..NNBNNNPN.AAAA. + ....NNNNP.KAAA.. + ....NN.NPAKKAA.. + ....NB.NPAACKAA. + ....NNANPAAKKJA. + ...BNNANNPAACKA. + ..BNNA..NNA..... + ................ +} +# tile 481 (yeti,female) { ................ ....BNNN........ @@ -4606,7 +9185,26 @@ Z = (195, 195, 195) ..BNNA..NNA..... ................ } -# tile 241 (carnivorous ape) +# tile 482 (carnivorous ape,male) +{ + ................ + ................ + ......KKKJ...... + .....JJJJJJ..... + ....KCELECJJ.AA. + ....KLLLLCAJAAAA + ...KKCAAACAJJAAA + ..KKKCDDDCAKJJAA + ..KKAKCCCAJAJJAA + ..KAAKJAAJJAAJAA + ..LC.AJJJJJKCLAA + ..LLDDAJAKLJLLAA + ...DDALJACLJAAAA + ..DDALLJACLLLKA. + ................ + ................ +} +# tile 483 (carnivorous ape,female) { ................ ................ @@ -4625,7 +9223,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 242 (sasquatch) +# tile 484 (sasquatch,male) +{ + ................ + ....CCCCC....... + ...CGAJGAJ...... + ..CKKKKJJJ...... + ..CKKAAAKJJ..... + .CKKKAAAKKJ..... + .CKJKKKKKKKJ.... + .CKAJJJJJAKJ.... + .CKAJKKKJAKJ.AA. + .CKJAJKJACKJAAAA + .CKJAJJJACKJAAA. + ..J.AJAKKAJAAAAA + ...CKJAKKJAAAAA. + .KCKJJACKJKJAA.. + .CJJJKACKJJKA... + ................ +} +# tile 485 (sasquatch,female) { ................ ....CCCCC....... @@ -4644,7 +9261,26 @@ Z = (195, 195, 195) .CJJJKACKJJKA... ................ } -# tile 243 (kobold zombie) +# tile 486 (kobold zombie,male) +{ + ................ + ................ + ................ + ...N...N........ + ...NGFBN........ + ...GABAB........ + ....GBFA..A..... + ...GBABFA.AA.... + ..GFBBBIKAAA.A.. + ..BAFBFFEAAAAA.. + ..BAFBFFAAAAAA.. + ....FBFAAAAAA... + ....BABAAAA..... + ...BBABBA....... + ................ + ................ +} +# tile 487 (kobold zombie,female) { ................ ................ @@ -4663,7 +9299,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 244 (gnome zombie) +# tile 488 (gnome zombie,male) +{ + ................ + ................ + ................ + ................ + ......G......... + .....GFF........ + ....GGFFF....... + ....GDFDF....... + .....PFP...AAA.. + ...FGFPFEGAAAA.. + ..GAAGFFFAGAAA.. + ....AKNKFAAAA... + ....FGAFFAA..... + ....GFAFG.A..... + ................ + ................ +} +# tile 489 (gnome zombie,female) { ................ ................ @@ -4682,7 +9337,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 245 (orc zombie) +# tile 490 (orc zombie,male) +{ + ................ + ................ + ................ + .....OA......... + ....NOPA........ + ....GPGA........ + .....PFA........ + ..KCCAKKKA.AA... + .BBPCKJ.BBAAA... + BB.AGGFAABBA.... + B..AJJPAAABA.... + ....BAPPPAAAAA.. + ...BJAAEPAAA.... + ..BPPAAAPP...... + ................ + ................ +} +# tile 491 (orc zombie,female) { ................ ................ @@ -4701,7 +9375,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 246 (dwarf zombie) +# tile 492 (dwarf zombie,male) +{ + ................ + ................ + ................ + ................ + ......B......... + .....BEE........ + ....BBEEE....... + ....BFFFE....... + .....PFP...AAA.. + ...BBPPPEEAAAA.. + ..FBABPEAEAAAA.. + ..F.EBBEFAAAA... + ....EBAEEAA..... + ....BEAEB.A..... + ................ + ................ +} +# tile 493 (dwarf zombie,female) { ................ ................ @@ -4720,7 +9413,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 247 (elf zombie) +# tile 494 (elf zombie,male) +{ + ................ + ................ + .........G...... + .......GGF...... + ......GGGGA..... + ......FEFEA..... + ......FFFFA..... + ......AFDA....A. + ......GAAG..AAA. + ....FFGGGFFFAAA. + ...FAAAGFAAAFAA. + .....AGGGFAAAA.. + ......GFAFAA.A.. + .....KDA.FKA.... + ................ + ................ +} +# tile 495 (elf zombie,female) { ................ ................ @@ -4739,7 +9451,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 248 (human zombie) +# tile 496 (human zombie,male) +{ + ......AAA....... + .....FFGAA...... + .....AGAFA...... + .....FFGFA...... + ....FKF..JJ..... + ....JJJFJKJ..... + ...FJ.KJJAKJ.... + ..FK..KFJFFJ.... + ..G...KKJG...... + .....BP.BPAAAAA. + .....FPAPFAAAA.. + .....BFABFAAAA.. + .....PFABPAA.... + .....BFABFA..... + ....GGAGGA...... + ................ +} +# tile 497 (human zombie,female) { ......AAA....... .....FFGAA...... @@ -4758,7 +9489,26 @@ Z = (195, 195, 195) ....GGAGGA...... ................ } -# tile 249 (ettin zombie) +# tile 498 (ettin zombie,male) +{ + ....NN..ONOP.... + ..NNOOPNNOOPP... + ..NFF..NFF..P... + ..ADFFDADFFDA... + ..AFFFFAFFFFA... + ..AFAAFAFAAFAA.. + ..AFFFFAFFFFAAA. + ..GIIIIJJJIIIGAA + .GFFFIIIIIIFFFGA + .GFFFFIIIIFFFFFA + .FFAAFIIIIFAAFFA + .FFAAIIIIIIAAFFA + .FFF.IIFFIIAGFAA + ..FF.GFAAGFAFFAA + .....GFAAGFAAAAA + ...FFFFA.GFFFFAA +} +# tile 499 (ettin zombie,female) { ....NN..ONOP.... ..NNOOPNNOOPP... @@ -4777,7 +9527,26 @@ Z = (195, 195, 195) .....GFAAGFAAAAA ...FFFFA.GFFFFAA } -# tile 250 (ghoul) +# tile 500 (ghoul,male) +{ + ......AAA....... + .....OOOAA...... + .....DODOA...... + .....OOOOA...... + ....PPOOOPP..... + ....PPPPPPP..... + ...PP.PPPAPP.... + ..PP..PPPOOP.... + ..O...PPPO...... + .....PP.PPAAAAA. + .....PPAPPAAAA.. + .....PPAPPAAAA.. + .....PPAPPAA.... + .....PPAPPA..... + ....OOAOOA...... + ................ +} +# tile 501 (ghoul,female) { ......AAA....... .....OOOAA...... @@ -4796,7 +9565,26 @@ Z = (195, 195, 195) ....OOAOOA...... ................ } -# tile 251 (giant zombie) +# tile 502 (giant zombie,male) +{ + ......JJJJAA.... + ....JJJJJJJJA... + ....JJFFFFJJA... + ....JDDFFDDJA... + ....JFFFFFFJA... + ....AFFAAFFAAA.. + .....AFFFFJAAAA. + ..GGFFJJJJFFGGAA + .GFFFGGFFFFFFFCA + .FFFKFFFFFFKFFFA + FFFAAFFFFFFAAFFA + FFAA.JJJKKJAAFFA + FFA..JJJJJKAGFAA + .....GFAGFFAFFAA + ....GFFAGFFAAAAA + ...GFFAAGFFFAAAA +} +# tile 503 (giant zombie,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -4815,7 +9603,7 @@ Z = (195, 195, 195) ....GFFAGFFAAAAA ...GFFAAGFFFAAAA } -# tile 252 (skeleton) +# tile 504 (skeleton,male) { ................ ................ @@ -4834,12 +9622,50 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 253 (straw golem) +# tile 505 (skeleton,female) { - ......LJ........ - ......LJHJ...... - ....HJLJH...A... - ....AAAAAL.....A + ................ + ................ + ...OOO.......... + ..AOAOO......... + ..OOOOO......... + ..OO.O.......... + ......O......... + ....OOOOO...AAA. + ...OA.OOOA..AAA. + ..OA.OAAO.AAAAA. + ....OA.OOOAAA.A. + ......OOOAAA.A.. + .....O.AO.A..... + ...OOOA.OA...... + ......OOO....... + ................ +} +# tile 506 (straw golem,male) +{ + ......LJ........ + ......LJHJ...... + ....HJLJH...A... + ....AAAAAL.....A + ....DAADAL.A.AA. + ....LJHJL..AAAA. + ....LLHJLHHCHHL. + ...HHLJL.AJLJL.A + .HHJJLLLLAAA.AA. + ..JL..LALHAAAAAA + .LL..CJLHJHAAAAA + .....HJLAHJHAAA. + .....HJAACALHAAA + ....CJLAAJHALHA. + ....HALA.AHAAL.. + ..........L..... +} +# tile 507 (straw golem,female) +{ + ......LJ........ + ......LJHJ...... + ....HJLJH...A... + ....AAAAAL.....A ....DAADAL.A.AA. ....LJHJL..AAAA. ....LLHJLHHCHHL. @@ -4853,7 +9679,26 @@ Z = (195, 195, 195) ....HALA.AHAAL.. ..........L..... } -# tile 254 (paper golem) +# tile 508 (paper golem,male) +{ + ................ + .......OA....... + .....NNNOA...... + .....ONNNOA..... + ......ONNOA..... + .......NOA...... + ..NNOA.NOA...... + ..NONOAOAONNOA.. + ..OAOANNOAOOOA.. + ......NNNOAAAAA. + ......ONOAAAAAA. + .......OOAAAAAA. + .....NOAAOAAAAA. + .....NOA..NOAA.. + ....OOA...OOA... + ................ +} +# tile 509 (paper golem,female) { ................ .......OA....... @@ -4872,7 +9717,26 @@ Z = (195, 195, 195) ....OOA...OOA... ................ } -# tile 255 (rope golem) +# tile 510 (rope golem,male) +{ + ................ + ................ + ......OOO....... + .....O...O...... + .....O...O...AA. + .OO...O..O..A..A + O..O...LL..OO..A + ...O...LOOO.AOA. + ....OOOOOAAAAO.. + .......OO..AA.A. + .......LO.AA...A + ......O..OOAA..A + ....OO..A..O.A.. + ...O..AA...O.A.. + ...O.A....OAA... + ....OA.......... +} +# tile 511 (rope golem,female) { ................ ................ @@ -4891,7 +9755,26 @@ Z = (195, 195, 195) ...O.A....OAA... ....OA.......... } -# tile 256 (gold golem) +# tile 512 (gold golem,male) +{ + ................ + ......HNH....... + ......DND...N... + ......HNH...JC.. + ......HNH...NC.. + ...HHHAAAAHANC.. + ..HNJNHNHNJNAC.A + ..HHHHHHHHHHHA.A + .NCACCCCCCCCA..A + .HH.AAAAAAAAA.AA + .NH.ANC.AHNC.AAA + .NJ.AHC.AHHC.AAA + ..H.ANC.AHNC.AAA + ....HJC.AHJC.AA. + H...HNC.AHNC.A.H + ..H............. +} +# tile 513 (gold golem,female) { ................ ......HNH....... @@ -4910,7 +9793,26 @@ Z = (195, 195, 195) H...HNC.AHNC.A.H ..H............. } -# tile 257 (leather golem) +# tile 514 (leather golem,male) +{ + ......KKKK...... + .....KHKHJ...... + ....KAKKJJA..... + ...KKAJJJJAJ.... + ..KKJJAJAAKJJ... + .KKKJJAAKKKJJJ.. + ..KKJJJAKKJJJJ.. + ...KKJJJA.AAA.A. + ....AAAA.KJAAAA. + ....KJAAAKKAAAAA + ...KJJAA.KJJAAA. + ...KKJA..KKJAAA. + ..KKJJJAKKJJJAA. + ..KKKJJAKKKJJA.. + ...KJJA..KJJA... + ....KA....KA.... +} +# tile 515 (leather golem,female) { ......KKKK...... .....KHKHJ...... @@ -4929,7 +9831,26 @@ Z = (195, 195, 195) ...KJJA..KJJA... ....KA....KA.... } -# tile 258 (wood golem) +# tile 516 (wood golem,male) +{ + ................ + ......KCKJ...... + ......HCHJ..C... + ......KCKJ..CK.. + ......KCKJ..CKJ. + ...KKKAAAAKACKJ. + ..KCCCCCCCCCAKJA + ..KKKKKKKKKKKAJA + .CJAJJJJJJJJA..A + .CKJAAAAAAAAA.AA + .CKJACKJAKCKJAAA + .CKJACKJAKCKJAAA + ..KJACKJAKCKJAAA + ....KCKJAKCKJAA. + ....KCKJAKCKJA.. + ................ +} +# tile 517 (wood golem,female) { ................ ......KCKJ...... @@ -4948,7 +9869,26 @@ Z = (195, 195, 195) ....KCKJAKCKJA.. ................ } -# tile 259 (flesh golem) +# tile 518 (flesh golem,male) +{ + ................ + ................ + ...D..DDC....... + .....DLDDL...... + ..DD..LLLLC.D... + ...CDL.LLLLADL.. + ..CLDLA.CLLA.LL. + ..LLLAA.LLCA..L. + .CLLAA.CLLAA..CA + .LLA..CLLALLAAAA + ..LA.CLCAALCAAAA + ...A..LLCACLCAAA + ....LLALLAALLAAA + ..CLLLAAAADLLA.. + ..LLDDD..DDDDD.. + ................ +} +# tile 519 (flesh golem,female) { ................ ................ @@ -4967,7 +9907,26 @@ Z = (195, 195, 195) ..LLDDD..DDDDD.. ................ } -# tile 260 (clay golem) +# tile 520 (clay golem,male) +{ + ................ + ................ + ................ + ....LCCCCK...... + ...LKKKKKKK..... + ...CKAKKAKK..... + ...CKAKKAKK..... + .LCKKKKKKKKLC... + CKKJKKKKKKCKKJ.. + KKKJKKJJKKJKKJAA + .JJAKKJAKKAJJAAA + ..AKKKJAKKKAAAAA + ..CKKKKKKKKKAAAA + ..CKKKAACKKKAA.. + ..CKKKA.CKKKAA.. + ................ +} +# tile 521 (clay golem,female) { ................ ................ @@ -4986,7 +9945,26 @@ Z = (195, 195, 195) ..CKKKA.CKKKAA.. ................ } -# tile 261 (stone golem) +# tile 522 (stone golem,male) +{ + ................ + ................ + ................ + ....BBBPP....... + ...BBPPPPP...... + ...BHAPHAP...... + ...PPPPPPP...... + .BBPPPPPP.BPA... + BPPPP....PPPPAA. + BPP.BPPPP.PPPAAA + .PP.BP.PP.PPPAAA + ...BPP.PPPAAAAAA + ..BPPPAPPPAAAAA. + ..PPPPAPPPPAAA.. + ...PPAA.PPPA.... + ................ +} +# tile 523 (stone golem,female) { ................ ................ @@ -5005,7 +9983,26 @@ Z = (195, 195, 195) ...PPAA.PPPA.... ................ } -# tile 262 (glass golem) +# tile 524 (glass golem,male) +{ + ................ + .....BBBBBBA.... + .....BPNPPPA.... + .....BNPPPNA.... + .....NPPPNPA.... + .....BPPNPPA.... + .......BA...BA.. + .BNBBABPBA.BPNA. + .NPPNABPNBBANPBA + .....BPNPPPAABAA + .....BNPPPAAAAAA + ......BPPNAAAAAA + ....BNABNABPAAA. + ...BNPA...BNAAA. + ..BNPA....NPAA.. + ...BA.....BPA... +} +# tile 525 (glass golem,female) { ................ .....BBBBBBA.... @@ -5024,7 +10021,26 @@ Z = (195, 195, 195) ..BNPA....NPAA.. ...BA.....BPA... } -# tile 263 (iron golem) +# tile 526 (iron golem,male) +{ + ................ + ......PBP....... + ......HBH...B... + ......PBP...JP.. + ......PBP...BP.. + ...PPPAAAAPABP.. + ..PBJBBBBBJBAP.A + ..PPPPPPPPPPPA.A + .B.A........A..A + .BP.AAAAAAAAA.AA + .BP.ABP.APBP.AAA + .BJ.ABP.APBP.AAA + ..P.ABP.APBP.AAA + ....PJP.APJP.AA. + ....PBP.APBP.A.. + ................ +} +# tile 527 (iron golem,female) { ................ ......PBP....... @@ -5043,7 +10059,7 @@ Z = (195, 195, 195) ....PBP.APBP.A.. ................ } -# tile 264 (human) +# tile 528 (human,male) { ................ ................ @@ -5062,13 +10078,13 @@ Z = (195, 195, 195) ................ ................ } -# tile 265 (wererat) +# tile 529 (human,female) { ................ ................ .......JJA...... ......JJJJA..... - ......GJGJA..... + ......ELELA..... ......LLLLA..... ......ALLA...... .....CLAALC.AAA. @@ -5081,13 +10097,13 @@ Z = (195, 195, 195) ................ ................ } -# tile 266 (werejackal) +# tile 530 (wererat,male) { ................ ................ .......JJA...... ......JJJJA..... - ......IPIPA..... + ......GJGJA..... ......LLLLA..... ......ALLA...... .....CLAALC.AAA. @@ -5100,32 +10116,127 @@ Z = (195, 195, 195) ................ ................ } -# tile 267 (werewolf) +# tile 531 (wererat,female) { ................ ................ - ......JJA....... - .....JJJJA...... - .....NJNJA...... - .....LLLLA...... - .....ALLA....... - ....CLAALC.AAA.. - ...CLLLLLLCAAA.. - ...LACLLCALAAA.. - ...LAJJKJALAAA.. - .....JJJKAAAA... - .....JJAJAA.A... - ....KLA.LKA..... + .......JJA...... + ......JJJJA..... + ......GJGJA..... + ......LLLLA..... + ......ALLA...... + .....CLAALC.AAA. + ....CLLLLLLCAAA. + ....LACLLCALAAA. + ....LAJJKJALAAA. + ......JJJKAAAA.. + ......JJAJAA.A.. + .....KLA.LKA.... ................ ................ } -# tile 268 (elf) +# tile 532 (werejackal,male) { ................ - .........G...... - .......GGF...... - ......GGGGA..... - ......LELEA..... + ................ + .......JJA...... + ......JJJJA..... + ......IPIPA..... + ......LLLLA..... + ......ALLA...... + .....CLAALC.AAA. + ....CLLLLLLCAAA. + ....LACLLCALAAA. + ....LAJJKJALAAA. + ......JJJKAAAA.. + ......JJAJAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 533 (werejackal,female) +{ + ................ + ................ + .......JJA...... + ......JJJJA..... + ......IPIPA..... + ......LLLLA..... + ......ALLA...... + .....CLAALC.AAA. + ....CLLLLLLCAAA. + ....LACLLCALAAA. + ....LAJJKJALAAA. + ......JJJKAAAA.. + ......JJAJAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 534 (werewolf,male) +{ + ................ + ................ + ......JJA....... + .....JJJJA...... + .....NJNJA...... + .....LLLLA...... + .....ALLA....... + ....CLAALC.AAA.. + ...CLLLLLLCAAA.. + ...LACLLCALAAA.. + ...LAJJKJALAAA.. + .....JJJKAAAA... + .....JJAJAA.A... + ....KLA.LKA..... + ................ + ................ +} +# tile 535 (werewolf,female) +{ + ................ + ................ + ......JJA....... + .....JJJJA...... + .....NJNJA...... + .....LLLLA...... + .....ALLA....... + ....CLAALC.AAA.. + ...CLLLLLLCAAA.. + ...LACLLCALAAA.. + ...LAJJKJALAAA.. + .....JJJKAAAA... + .....JJAJAA.A... + ....KLA.LKA..... + ................ + ................ +} +# tile 536 (elf,male) +{ + ................ + .........G...... + .......GGF...... + ......GGGGA..... + ......LELEA..... + ......LLLLA..... + ......ALLA....A. + ......GAAG..AAA. + .....LGGGFLAAAA. + ....LAAGFAALAAA. + ....LAGGGFALAA.. + ......GFAFAA.A.. + ......GFAFAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 537 (elf,female) +{ + ................ + .........G...... + .......GGF...... + ......GGGGA..... + ......LELEA..... ......LLLLA..... ......ALLA....A. ......GAAG..AAA. @@ -5138,7 +10249,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 269 (Woodland-elf) +# tile 538 (Woodland-elf,male) { ................ ................ @@ -5157,7 +10268,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 270 (Green-elf) +# tile 539 (Woodland-elf,female) +{ + ................ + ................ + .........K...... + .......KKJ...... + ......KKKKA..... + ......LELEA..... + ......LLLLA..... + ......ALLA....A. + ......KAAK..AAA. + .....LKKKJLAAAA. + ....LAPPJAALAAA. + ..KKLKKKKJALAA.. + ......PPAJAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 540 (Green-elf,male) +{ + ................ + ................ + .........G...... + .......GGF...... + ......GGGGA..... + ......LELEA..... + ......LLLLA..... + ......ALLA....A. + ......GAAG..AAA. + .....LGGGFLAAAA. + ....LAAGFAALAAA. + ....LAGGGFALAA.. + ......GFAFAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 541 (Green-elf,female) { ................ ................ @@ -5176,7 +10325,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 271 (Grey-elf) +# tile 542 (Grey-elf,male) +{ + ................ + ................ + .........P...... + .......PP....... + ......PPPPA..... + ......LELEA..... + ......LLLLA..... + ......ALLA....A. + ......PAAP..AAA. + .....LPPP.LAAAA. + ....LAAP.AALAAA. + ....LAPPP.ALAA.. + ......P.A.AA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 543 (Grey-elf,female) { ................ ................ @@ -5195,7 +10363,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 272 (elf-lord) +# tile 544 (elf-leader,male) +{ + ................ + ................ + ........II...... + .......HGF...... + ......HGGGA..... + ......LELEA..... + ......LLLLA..... + ......ALLA....A. + ......HAAH..AAA. + .....LHHHFLAAAA. + ....LAAIIAALAAA. + ....LAHGGFALAA.. + ......HFAFAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 545 (elf-leader,female) { ................ ................ @@ -5214,7 +10401,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 273 (Elvenking) +# tile 546 (Elvenmonarch,male) { ................ ................ @@ -5233,7 +10420,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 274 (doppelganger) +# tile 547 (Elvenmonarch,female) +{ + ................ + ................ + ......H..H...... + ......HCHH...... + ......HHHHA..... + ......LELEA..... + ......LLLLA..... + .....IALLAI...A. + ....IIIAAIDIAAA. + .....LIIGDLAAAAA + ....LADIFDALAAAA + ....LAIIGDALAAA. + .....IIFAFDAAA.. + ...IIKLAILKDI... + ................ + ................ +} +# tile 548 (doppelganger,male) +{ + ................ + ......CCCC..I... + ..I..CD...C..... + ....CD.HHA.C.... + ...CD.HHHHA.C.I. + ...CD.LFLFA.DC.. + .I.CD.LLLLA.DC.. + ...CD.ALLA.DC... + ..CD.LLAALL.ACA. + .CD.LLLLLLLLADC. + .CD.LALLLLALADC. + .CD.LAJJKJALADC. + ..CD..LJJLAAACA. + ...CD.LLALAACA.. + ..CD.LLAALLADC.. + ................ +} +# tile 549 (doppelganger,female) { ................ ......CCCC..I... @@ -5252,7 +10477,7 @@ Z = (195, 195, 195) ..CD.LLAALLADC.. ................ } -# tile 275 (shopkeeper) +# tile 550 (shopkeeper,male) { ................ ................ @@ -5271,7 +10496,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 276 (guard) +# tile 551 (shopkeeper,female) +{ + ................ + ................ + ......AAAA...... + .....AAAAAA..... + ......JLJL...... + ......LLLL...... + ......ALLA...... + .....EBAABEA.AA. + ....EBBBBBBEAAA. + ....BAEBBEABAAA. + ....LAGFFFALAAA. + ......GFAFAAAA.. + ......GFAFAA.A.. + .....JJA.JJA.... + ................ + ................ +} +# tile 552 (guard,male) { ................ .....BBPPPAA.... @@ -5290,7 +10534,45 @@ Z = (195, 195, 195) .....BPPABPPAAAA ....BPPP.BPPPAAA } -# tile 277 (prisoner) +# tile 553 (guard,female) +{ + ................ + .....BBPPPAA.... + ....BNPPPPPPA... + ....BPPBPPPPA... + ....BAABPAAPA... + ....BCLBPCLPA... + ....AKCPPCJAAA.. + ....BKJJJJAPAAAA + ...BPKJAAJAPPAAA + ..BPPKJJJJAPPPAA + ..PPABKJJAPPAPPA + ..PPABPKAPPPAPPA + ..LC.BPPPPPPCLAA + ..LL.BPPABPPLLAA + .....BPPABPPAAAA + ....BPPP.BPPPAAA +} +# tile 554 (prisoner,male) +{ + ................ + ................ + .......NOA...... + .......LLA...... + .......LLA...... + .......NOA...... + ......NOONA..... + .....NOOOONA.... + ....NANOOOANAA.. + ....PANOOOAPAAA. + ....LANOOOALAAA. + ......NOOOAAAA.. + ......NAANAAA... + ......PAAPAA.... + .....LLA.LLA.... + ................ +} +# tile 555 (prisoner,female) { ................ ................ @@ -5309,7 +10591,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 278 (Oracle) +# tile 556 (Oracle,male) +{ + ................ + ................ + .......NN....... + LLL...GLLG...LLL + ..L..NLLLLN..L.. + ...L.NLAALN.L... + ....LNLLLLNL.... + .....LNLLNL..AA. + .....NBBEEN.AAAA + ......BBEEAAAAAA + .LLA..BBBEAAALL. + .LLLLBBBEBELLLLA + ..LLCLBLLELLCLAA + ...CLLLLLLLCLAA. + ....LELLLLELAA.. + ................ +} +# tile 557 (Oracle,female) { ................ ................ @@ -5328,7 +10629,26 @@ Z = (195, 195, 195) ....LELLLLELAA.. ................ } -# tile 279 (aligned priest) +# tile 558 (aligned priest,male) +{ + ................ + INI............. + III..KCCK....... + .J..KCCCCK...... + .J..CAAKCC...... + .LC.CAAACC...... + CLLC.CAACJKC.... + CJLACCCCJKCCC... + .JAACCJJCKCCCK.. + .JKCCCJCCJCCK.AA + .J..CCJCCLJCAAAA + .J..CCJCLLCAAAA. + .J..KCJCCCJAAAA. + .J.ACCJCCCJAAA.. + .JACCCJJCCCAA... + ................ +} +# tile 559 (aligned priest,female) { ................ INI............. @@ -5347,7 +10667,7 @@ Z = (195, 195, 195) .JACCCJJCCCAA... ................ } -# tile 280 (high priest) +# tile 560 (high priest,male) { .INI............ IIIII.KCCK...... @@ -5366,7 +10686,45 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 281 (soldier) +# tile 561 (high priest,female) +{ + .INI............ + IIIII.KCCK...... + .IHI.KCAACK..... + ..H..CGAGAC..... + ..LC.CAAAAC..... + .CLLC.CAACJCK... + .CHLACCCCJCCCK.. + ..HAACCJJCCCCCK. + ..HCCCCJCCJCCC.A + ..H..CCJCCLJCAAA + ..H..CCJCLLCAAAA + ..H..KCJCCCJAAAA + ..H..KCJCCCJAAAA + ..H.ACCJCCCJAAA. + ..HACCCJJCCCAA.. + ................ +} +# tile 562 (soldier,male) +{ + .....J.......... + .....JAAA....... + .....ALLLA...... + .....LLLLC...... + .....JLLC....... + .....JF..F...... + ....FJFFFFF..A.. + ....FJFFFAF.A... + ....FLFFFFFAAA.. + ....FJFFAAAAAAA. + .....LFAFFAAAA.. + .....FFAF.AAAA.. + ......FAF.AA.... + .....FFAFFA..... + .....JJ.JJ...... + ................ +} +# tile 563 (soldier,female) { .....J.......... .....JAAA....... @@ -5385,7 +10743,7 @@ Z = (195, 195, 195) .....JJ.JJ...... ................ } -# tile 282 (sergeant) +# tile 564 (sergeant,male) { .....J.......... .....JFFF....... @@ -5404,7 +10762,45 @@ Z = (195, 195, 195) .....AA.AA...... ................ } -# tile 283 (nurse) +# tile 565 (sergeant,female) +{ + .....J.......... + .....JFFF....... + ....FFFFFF...... + .....LLLLC...... + .....JLLC....... + .....JF..G...... + ....FJFFFFF..A.. + ....FJFFFAF.A... + ....FLFFFFFAAA.. + ....FJFFAAAAAAA. + .....LFAFFAAAA.. + .....FFAF.AAAA.. + ......FAF.AA.... + .....FFAFFA..... + .....AA.AA...... + ................ +} +# tile 566 (nurse,male) +{ + ................ + .......NO....... + ......NDDO...... + ......NNOOA..... + .....DBLBLD..... + .....CLLLLDC.... + .....DALLACD.... + .....CNAAODCAAA. + .....NNNOOLAAAA. + ....LANNDOALAAA. + ....LANNOOALAAA. + ......NNOOAAAA.. + ......NNAOAA.A.. + .....LLA.LLA.... + ................ + ................ +} +# tile 567 (nurse,female) { ................ .......NO....... @@ -5423,7 +10819,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 284 (lieutenant) +# tile 568 (lieutenant,male) +{ + ................ + .......FFF...... + .....FFFFFF..... + ......LLLL...... + .......LLCA..... + .....GF.FGA..... + ....FFFFFFFF.... + ....FAFFFFAFAAA. + ....FAFFFFAFAAAA + ....FAFFFFAFAAA. + ....LFFAFFJLJA.. + .....FFAFFJJJA.. + ......FAF.AA.... + .....FFAFFA..... + .....AA.AA...... + ................ +} +# tile 569 (lieutenant,female) { ................ .......FFF...... @@ -5442,7 +10857,26 @@ Z = (195, 195, 195) .....AA.AA...... ................ } -# tile 285 (captain) +# tile 570 (captain,male) +{ + ................ + ......FHHF...... + .....FFFFFF..... + ......LLLL...... + .......LLCA..... + .....HF.FHF..... + ....FFFFFFFFAA.. + ....FAFFIFAFAAAA + ....FAFFFFAFAAA. + ....FAFFFFAFAAA. + ....LFFAFFJLJA.. + .....FFAFFJJJA.. + ......FAF.JJJA.. + .....FFAFFJJJA.. + .....AA.AAAAA... + ................ +} +# tile 571 (captain,female) { ................ ......FHHF...... @@ -5461,7 +10895,26 @@ Z = (195, 195, 195) .....AA.AAAAA... ................ } -# tile 286 (watchman) +# tile 572 (watchman,male) +{ + ................ + ......PPP....... + ....PPPPPP...... + .....LLLLC...... + ......LLC....... + .....PP..P...... + ....PPPPPPP..... + ....PAPPHAPPA... + ....PAPPPANNAAA. + ....PJPPAPNNAAA. + ....JLPAPPAAAA.. + .....JPAP.AAAA.. + ......PAP.AA.... + .....PPAPPA..... + ....JJJ.JJJ..... + ................ +} +# tile 573 (watchman,female) { ................ ......PPP....... @@ -5480,7 +10933,7 @@ Z = (195, 195, 195) ....JJJ.JJJ..... ................ } -# tile 287 (watch captain) +# tile 574 (watch captain,male) { ......PPP....... .....PHHHP...... @@ -5499,7 +10952,26 @@ Z = (195, 195, 195) ....JJJ.JJJ..... ................ } -# tile 288 (Medusa) +# tile 575 (watch captain,female) +{ + ......PPP....... + .....PHHHP...... + ....PPPPPPP..... + .....LLLLC...... + ......LLC....... + .....HP..H...... + ....PPPPPPP..... + ....PAPPHAPPA... + ....PAPPPANNAAA. + ....PJPPAPNNAAA. + ....JLPAPPAAAA.. + .....JPAP.AAAA.. + .....JPAP.AA.... + .....PPAPPA..... + ....JJJ.JJJ..... + ................ +} +# tile 576 (Medusa,male) { ................ ..GA...GA....... @@ -5518,7 +10990,26 @@ Z = (195, 195, 195) ..IIKIKIKIA..... ................ } -# tile 289 (Wizard of Yendor) +# tile 577 (Medusa,female) +{ + ................ + ..GA...GA....... + ...FA.FA..GA.... + ....FJFFFF...... + ..FAFLLFA....A.. + .GAFLLLLA..A..A. + ....JLLKA.A.A.A. + ...KBLLBKAAAAA.. + ..KIIBBIIIAAA.A. + ..IIIKKILLIAAA.. + ..KIILLIALIAA... + ...KIALKAAIAA... + ...IKAAKIIAAA... + ...IIKKIIIAA.... + ..IIKIKIKIA..... + ................ +} +# tile 578 (Wizard of Yendor,male) { .EEE.......EEE.. EFFAE..E..EAFFE. @@ -5537,7 +11028,45 @@ Z = (195, 195, 195) .EEEEEEEEEEEAAA. EEEEEEEEEEEEEEA. } -# tile 290 (Croesus) +# tile 579 (Wizard of Yendor,female) +{ + .EEE.......EEE.. + EFFAE..E..EAFFE. + EAAAE.EEE.EAAAE. + EAAAEEEAEEEAAAE. + EEAAEEDADEEAAEE. + .EEEEAAAAAEEEE.. + ..EEEEAAAEEEE... + ..EEEEEEEEEE.... + ...EEEEEEEE..... + ...EEEEEEEE....A + ....EEEEEE...AAA + ....EEEEEEAAAAAA + ...EEEEEEEEAAAAA + ..EEEEEEEEEAAAAA + .EEEEEEEEEEEAAA. + EEEEEEEEEEEEEEA. +} +# tile 580 (Croesus,male) +{ + ....H..H..H..... + ....HCHEHCH..... + ....HHHHHHH..... + ....ALLLLLA..... + ....LLALALL..... + .....LLLLL...... + ....HLLDLLH..... + ...HIALLLAIH.A.A + ...HIHAAAHIHAAAA + ..IIIEHHHIIIIAAA + ..IIIIEHIIIIIAA. + ..ILLIHHHILLIAAA + ...LIIKHIIILAAAA + ..GIIIKJIIIIGAA. + .GIIIKJJKKIIIGG. + ................ +} +# tile 581 (Croesus,female) { ....H..H..H..... ....HCHEHCH..... @@ -5556,7 +11085,26 @@ Z = (195, 195, 195) .GIIIKJJKKIIIGG. ................ } -# tile 291 (Charon) +# tile 582 (Charon,male) +{ + ................ + .......J........ + ......JJJ....... + ....JJJAJJJ..... + ....JJDADJJ..... + ...JJAAAAAJJ.... + ...JJJAAAJJJ.... + ..JJJJJJJJJJ.... + .JJJJJJJJJJJJ... + JJJJJJJJJJJJJJ.A + .OO.JJJJJJ.OOAAA + ....JJJJJJAAAAAA + ...JJJJJJJJAAAAA + ..JJJJJJJJJAAAAA + .JJJJJJJJJJJAAA. + JJJJJJJJJJJJJJA. +} +# tile 583 (Charon,female) { ................ .......J........ @@ -5575,7 +11123,26 @@ Z = (195, 195, 195) .JJJJJJJJJJJAAA. JJJJJJJJJJJJJJA. } -# tile 292 (ghost) +# tile 584 (ghost,male) +{ + ................ + ................ + ...NNN.......... + ..NANANN........ + .NNNNNNNNN...... + .NNPAAPNNNNN.... + .NNAAAANNNOONO.. + .NNAAAANONNNPNNO + .NNPAAPNONNOOOP. + .NNNNNNONOPNPPO. + .NNONNOPNNOPOOP. + .NOPNNOOOPPOOP.. + .OOOPOPPOPPP.PP. + .PP.PPOPPP...P.. + .O...P....P..... + ........P....... +} +# tile 585 (ghost,female) { ................ ................ @@ -5594,7 +11161,26 @@ Z = (195, 195, 195) .O...P....P..... ........P....... } -# tile 293 (shade) +# tile 586 (shade,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ........AAAAAAA. + ....AAAAAAAA.... + ..AAAAAAAAAAAA.. + AAAAAAAAAAAAAAA. + ..AAAAAAAAAAAAAA + .AAAAAAAAAAAAA.. + AAAA.AAAAJA..... + ................ +} +# tile 587 (shade,female) { ................ ................ @@ -5613,7 +11199,7 @@ Z = (195, 195, 195) AAAA.AAAAJA..... ................ } -# tile 294 (water demon) +# tile 588 (water demon,male) { ................ ................ @@ -5632,7 +11218,45 @@ Z = (195, 195, 195) ....EEAEEA...... ................ } -# tile 295 (succubus) +# tile 589 (water demon,female) +{ + ................ + ................ + ................ + ................ + ..EE.....EE..... + .E.EE...EE.E.... + ....EEEEE....... + ....EBEBE..A.... + ...EEEEEEEAAAA.. + ..EEE...EEEAA.A. + ..EEEEEEEEEAAA.. + ..EEAEEEAEEAAA.. + ...AAEEEAAAAA... + ....EEAEEAA..... + ....EEAEEA...... + ................ +} +# tile 590 (Amorous Demon,male) +{ + DD.OHHD......... + DDOHHDGD........ + DDOHDDDDD....... + DDHHDDDA........ + DDDHDJADDDD..... + DDDJDDDDDDDD.... + .DDDDDCDD.DDD... + .DDCDDDKK..DD... + ..DDKKDDDAADDA.. + ...DDDDDDAAAAA.. + ....DDDDDDDDDA.. + ....DDJDJJAAAAAA + ....JDJJADKAA... + ....DDKAADDKA... + ...DDKAA..DDAA.. + ..DDKAA...DDDA.. +} +# tile 595 (Amorous Demon,female) { DD.OHHD......... DDOHHDGD........ @@ -5651,7 +11275,7 @@ Z = (195, 195, 195) ....DDAA..DDAA.. ...DDJA...DDDA.. } -# tile 296 (horned devil) +# tile 592 (horned devil,male) { ................ ................ @@ -5670,26 +11294,45 @@ Z = (195, 195, 195) ..CDDAA.DDK..... ................ } -# tile 297 (incubus) +# tile 593 (horned devil,female) { - DD.OHHD......... - DDOHHDGD........ - DDOHDDDDD....... - DDHHDDDA........ - DDDHDJADDDD..... - DDDJDDDDDDDD.... - .DDDDDCDD.DDD... - .DDCDDDKK..DD... - ..DDKKDDDAADDA.. - ...DDDDDDAAAAA.. - ....DDDDDDDDDA.. - ....DDJDJJAAAAAA - ....JDJJADKAA... - ....DDKAADDKA... - ...DDKAA..DDAA.. - ..DDKAA...DDDA.. + ................ + ................ + ..O.......O..... + ..OO.....OO..... + ...LOCDCOL...... + ...CDDDDDC...... + ...DAADAADA..D.. + ...DDDDDDDA.D... + ..CCDDFDDCCAD.A. + ..CDKDDDKCDADA.. + ..CDAKKKACDAAAA. + ..DDADDDADDAAAA. + ....CDDDKAAAAA.. + ...CDDADDKAA.... + ..CDDAA.DDK..... + ................ +} +# tile 596 (erinys,male) +{ + ..GA...GA....... + ...FA.FA..GA.... + ....FJFFFF...... + ..FAFLLFA....... + .GAFDLDLA..A.A.. + ....LLLEA.A.A.A. + ...EBLLBEAAAA.A. + ..EBBBBBBBAAAA.. + ..BBBEBBLLBAA.A. + ..EBBLLBALBAAA.. + ...EBALBAABAA... + ...BEAABBBAAA... + ...BBBBBBBAAA... + ...BBBBBBBAA.... + ..BBEBEBEBA..... + ................ } -# tile 298 (erinys) +# tile 597 (erinys,female) { ..GA...GA....... ...FA.FA..GA.... @@ -5708,7 +11351,26 @@ Z = (195, 195, 195) ..BBEBEBEBA..... ................ } -# tile 299 (barbed devil) +# tile 598 (barbed devil,male) +{ + ................ + ................ + ..O.......O..... + ..OO.....OO..... + .O.LOCDCOL.O.... + ...CDDDDDC....DD + ...DAADAADA..D.D + ...DDDDDDDA.D... + ..CCDDFDDCCAD.A. + ..CDKDDDKCDADA.. + .C.DAKKKACDKAAA. + ..DDADDDADDAAAA. + ....CDDDKAAAAA.. + .K.CDDADDKAAK... + .CCDDAA.DDKK.... + ................ +} +# tile 599 (barbed devil,female) { ................ ................ @@ -5727,7 +11389,26 @@ Z = (195, 195, 195) .CCDDAA.DDKK.... ................ } -# tile 300 (marilith) +# tile 600 (marilith,male) +{ + .D..HHH.....D... + DD.HHHHHA...DD.. + .DCHDDDHHAAD..A. + ..HDBDBDHDDAAAA. + .CHKDDDKHAAADD.. + CDDDKKKDHDDDDFF. + D..CDDCDKAAFFFAA + D.KDDKDDDDDDFAA. + D.DKDDKDKAFDFAA. + ..D.GDDFAAFDFFAA + .D.GGFFFAAAFFFFA + ...GFFFFFAAAFFFA + ..FGFFFFFFAFFFFA + ..FGFFFFFFFFFFA. + ..FGFFFFFFFFFA.. + ....GFFFFFFAA... +} +# tile 601 (marilith,female) { .D..HHH.....D... DD.HHHHHA...DD.. @@ -5746,7 +11427,26 @@ Z = (195, 195, 195) ..FGFFFFFFFFFA.. ....GFFFFFFAA... } -# tile 301 (vrock) +# tile 602 (vrock,male) +{ + ................ + ......OPP.O..... + ......PPPP...... + .....CPPDP...... + ....CCCPPP...... + ....CCPPPP...... + ....C..PPA...... + .....DDAADD.AAA. + ....DDDDDDDDAAA. + ....DADDDDADAAA. + ....DADDDDADAAA. + ....DADDDDADAAA. + ......DAADAAAA.. + ......DAADAA.A.. + .....DDA.DDA.... + ................ +} +# tile 603 (vrock,female) { ................ ......OPP.O..... @@ -5765,7 +11465,26 @@ Z = (195, 195, 195) .....DDA.DDA.... ................ } -# tile 302 (hezrou) +# tile 604 (hezrou,male) +{ + ................ + ................ + ....GGGFF....... + ..NGFFNNFFF..... + .DFFFDDNFF.F.... + .GFFFDNFF.FFFAA. + .AFAFFFFFFFFFFAA + .GFFFF.FFF.FGFAA + .GAAAFF..LFGFFAA + ..FFFF.FFLFGFFFA + ..LLA.FLLLJJG.FA + .LLAFFLLFJJGFFFA + ..LAFLLLAAGF.FAA + .....L.LAGFFFFAA + ...........FFFA. + ................ +} +# tile 605 (hezrou,female) { ................ ................ @@ -5784,7 +11503,26 @@ Z = (195, 195, 195) ...........FFFA. ................ } -# tile 303 (bone devil) +# tile 606 (bone devil,male) +{ + ................ + ................ + ..O.......O..... + ..OO.....OO..O.. + ...LNLOLOL....O. + ...LOOOOOL....O. + ...NAAOAAOA..O.. + ...NOOOOOOA.O... + ..NOOOFOOOOAO.A. + ..OOKNOOKOOALA.. + ..OOANOOAOOAKAA. + ..LLANOOALLAAAA. + ....NOOOLAAAAA.. + ...NOOAOOLAA.... + ..NOOAA.OOL..... + ................ +} +# tile 607 (bone devil,female) { ................ ................ @@ -5803,7 +11541,26 @@ Z = (195, 195, 195) ..NOOAA.OOL..... ................ } -# tile 304 (ice devil) +# tile 608 (ice devil,male) +{ + ................ + ................ + ..N.......N..... + ..NN.....NN..... + ...PBPNPNP..BNB. + ...PNNNNNP..N.N. + ...BAANAANA...N. + ...BNNNNNNA.BNB. + ..BNNNFNNNNAN.A. + ..NNKBNNKNNABA.. + ..NNABNNANNA.AA. + ..PPABNNAPPAAAA. + ....BNNNPAAAAA.. + ...BNNANNPAA.... + ..BNNAA.NNP..... + ................ +} +# tile 609 (ice devil,female) { ................ ................ @@ -5822,7 +11579,26 @@ Z = (195, 195, 195) ..BNNAA.NNP..... ................ } -# tile 305 (nalfeshnee) +# tile 610 (nalfeshnee,male) +{ + ................ + ................ + ......BB...BB... + ..KKKKKBB.BB.... + .KADKADKKKB..... + .KKKKKKKDKK..... + .OKDKOKKDDKD.... + .OKDKOKKKDKDD... + .KAAAKKDKAKKD... + ..KKKDDLAKKKD.A. + ...KK.KKKKKDDA.. + ....L..KDAKDAA.. + ......LLAAKDA... + .........LLA.... + ................ + ................ +} +# tile 611 (nalfeshnee,female) { ................ ................ @@ -5841,7 +11617,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 306 (pit fiend) +# tile 612 (pit fiend,male) +{ + ................ + .K.O.......O.K.. + .K.OO.....OO.KJ. + KJJ.LOCDCOL.KJJ. + KJJJKDDDDDKKJJJ. + KJJCKDNDNDKCJJJA + JJCCKDDDDDJCCJJA + JJCCCKDIDJDCCJJA + JACCDDKJJDDCDAJA + JACCKDDDDDKCDAJA + ...CDKDDDKCDDAAA + ....DKDDDKCDAAAA + .....CDDDKAAAA.. + ....CDDADDKA.... + ...CDDAA.DDK.... + ................ +} +# tile 613 (pit fiend,female) { ................ .K.O.......O.K.. @@ -5860,7 +11655,26 @@ Z = (195, 195, 195) ...CDDAA.DDK.... ................ } -# tile 307 (sandestin) +# tile 614 (sandestin,male) +{ + .....CCCCC..I... + .I..CD....C..... + ...CD.DDD..C..I. + ..CD.DDDDD..C... + ..CD.DNDNDA.DC.. + I.CD.DDDDDA.DC.. + ..CD.ADDDA.DC..A + .CD.DDAAADD.DCAA + CD.DDDDDDDDDADCA + CD.DADDDDDADADCA + CD.DADDDDDADADCA + CD.DADDDDDADADC. + .CD..DDJDDAADCA. + ..CD.DDADDADCA.. + .CD.DDAADDDADC.. + ................ +} +# tile 615 (sandestin,female) { .....CCCCC..I... .I..CD....C..... @@ -5879,7 +11693,26 @@ Z = (195, 195, 195) .CD.DDAADDDADC.. ................ } -# tile 308 (balrog) +# tile 616 (balrog,male) +{ + ................ + .K..O.....O..K.. + .KJ.O.....O.KJ.. + KJJLOOCDCOOLJJJ. + JJJDDDDDDDDDDKJ. + JCCDDDNDNDDDCCJA + CCDKDDDDDDDJCCCA + CDDKKKDIDJJDCCDA + CDDKDDKJJDDDCDDA + CCDKDDDDDDDKCDDA + JCCDKKDDDKKCDDDA + JJCDKKDDDKKCDDJA + JJ..CCDDDKKAAJJA + J..CDDDADDDKAAJA + ..CDDDAA.DDDK.AA + ................ +} +# tile 617 (balrog,female) { ................ .K..O.....O..K.. @@ -5898,7 +11731,26 @@ Z = (195, 195, 195) ..CDDDAA.DDDK.AA ................ } -# tile 309 (Juiblex) +# tile 618 (Juiblex,male) +{ + ................ + DD.........DD... + NDC.KKKKJ.CND... + .CCKCCCKKCCAA... + ..KCCCCKCCJAA... + ..KCCCCCK.JJAA.. + ..KCCFCCK..JAA.. + ..FKCFCCKK.JAAA. + .FKKFCCKFK..JAA. + .FKCFCCFKFK.JAA. + .FCFCCKFCFK.JAA. + FKCFCFCFCKK.JAA. + CKFCCFCCKKFKJJA. + CCKKCFCKFFKKKKA. + .CCCCCCCCCCCKA.. + ................ +} +# tile 619 (Juiblex,female) { ................ DD.........DD... @@ -5917,7 +11769,26 @@ Z = (195, 195, 195) .CCCCCCCCCCCKA.. ................ } -# tile 310 (Yeenoghu) +# tile 620 (Yeenoghu,male) +{ + ....B.HHP....... + ....BPPPP....... + ...BPLCPPH...... + .KBPPCCPPH...... + .PPPPPPP.H...... + .PP...P.PH...... + ....BPPPPPAAA... + ..BPPPPPPPPAAAA. + .BP.PPPPPAPPAAAA + .B...BPP.AAPAAAA + .B...BPP.AAPAAA. + .....BPPAAAAA.A. + ....BP.PPAA...A. + ...BP.AAPPA..A.. + ...BPAA.PPA..... + ................ +} +# tile 621 (Yeenoghu,female) { ....B.HHP....... ....BPPPP....... @@ -5936,7 +11807,26 @@ Z = (195, 195, 195) ...BPAA.PPA..... ................ } -# tile 311 (Orcus) +# tile 622 (Orcus,male) +{ + ................ + .K..O.....O..K.. + KJJO..BBB..O.KJ. + KJJLOBPPPPOLKJJ. + JKJJ.PGPGP.JJKJA + JJKJKPPPPPJJKJJJ + JBPPB.BPPABBPPJJ + PJJPP.BPPAPPJJPA + PJBPPP.AAPPPPJPA + .JBP.PPPP.P.PJAA + .JBPPPP.PPPPPJAA + ..PPP.PPP.PPPAAA + ...P.PPPPPPP.P.A + ...BPPPAPPPPAAPA + ...OOPPAOOPPAGA. + ................ +} +# tile 623 (Orcus,female) { ................ .K..O.....O..K.. @@ -5955,7 +11845,7 @@ Z = (195, 195, 195) ...OOPPAOOPPAGA. ................ } -# tile 312 (Geryon) +# tile 624 (Geryon,male) { .K...........K.. .K....JJJ....KJ. @@ -5974,7 +11864,45 @@ Z = (195, 195, 195) ....FGGGFFFFFFFA .....FFFFFFFFFA. } -# tile 313 (Dispater) +# tile 625 (Geryon,female) +{ + .K...........K.. + .K....JJJ....KJ. + KJJ..JJJJJ..KJJ. + KJJJKLLLLLKKJJJ. + KJJJKLBLBLKJJJJA + JJJJKLLLLLJJJJJA + JJALLKLLLJLLAJJA + JA.LLLKJJLLLAAJA + ...LJLLLLLKLAAAA + ...LCKLLLKCLAFGF + ...LLGLLFALLFFFA + .....GFFFAAAFFAA + ....GGGGFFAAFFAA + ....GFFFFFAAFGFA + ....FGGGFFFFFFFA + .....FFFFFFFFFA. +} +# tile 626 (Dispater,male) +{ + ................ + ......OJJO...... + ......JJJJA..... + ......BLBLA..... + ......LLLLA..... + ......ALLA...... + .....CKAAKK.AAA. + ....CKKKKKKKAAA. + ....KACKKJAKAAA. + ....KACKKJAKAAJA + ....KACKKJAKAAJA + ....LACKKJJLAJA. + ......CKAJAJJA.. + ......CKAPAAAA.. + .....PPA.PPA.... + ................ +} +# tile 627 (Dispater,female) { ................ ......OJJO...... @@ -5993,7 +11921,26 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 314 (Baalzebub) +# tile 628 (Baalzebub,male) +{ + ......F...F..... + .......F.F...... + ......BFFFB..... + .....BPPFBPP.... + .....PPPFPPP.... + ......PPFPP..... + .....CAFFFAK.... + ....CKKAFAKKKAA. + ....CAKJFAKAKAA. + ....FACJDAJAFAA. + ....FACKJJJAFAA. + ....FACKKKJAFAA. + ......CKKKJAAA.. + ......CKAKJA.A.. + .....FFA..FF.... + ................ +} +# tile 629 (Baalzebub,female) { ......F...F..... .......F.F...... @@ -6012,7 +11959,26 @@ Z = (195, 195, 195) .....FFA..FF.... ................ } -# tile 315 (Asmodeus) +# tile 630 (Asmodeus,male) +{ + ................ + ......OJJO...... + ......JJJJA..... + ......BLBLA..... + ......LLLLA..... + ......ALLA...... + .....CKAAKK.AAA. + ....CKKKKKKKAAA. + ...KKCKKKKJKKAA. + ...KKAKKKJAKKAJA + ...KA.CKKJAAKAJA + ...LA.CKKJJALJA. + ......CKAJAJJA.. + ......CKAPAAAA.. + .....PPA.PPA.... + ................ +} +# tile 631 (Asmodeus,female) { ................ ......OJJO...... @@ -6031,7 +11997,26 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 316 (Demogorgon) +# tile 632 (Demogorgon,male) +{ + ...KKK..KKK..... + ..KBKBK.BKBK.... + ..KDKKK.KKDK.... + ..DKKFA.GKKD.... + ....GFAAGFAAA... + ...GFFFJFFFA.AAA + ..GFAGFFFAFFAAAA + .GJFAGJFJAFFFAA. + .GFAAGFFFAAFJA.. + .GJA.GFJFAAFFAA. + .GFA.GFFFA.FJAA. + .GJA.GJFJA.FFAA. + .GFAGFAAFFAFFA.. + ..GAGJAAJFAFAA.. + ..GAGFAFFFAFA... + ................ +} +# tile 633 (Demogorgon,female) { ...KKK..KKK..... ..KBKBK.BKBK.... @@ -6050,7 +12035,26 @@ Z = (195, 195, 195) ..GAGFAFFFAFA... ................ } -# tile 317 (Death) +# tile 634 (Death,male) +{ + .BBBB....JJJ.... + .BPPPP.JJJJ..... + .C....JJJJJ..... + .C....JAAAJ..... + .C...JADADAJ.AAA + OOJ..JAAAAAJAAA. + OOOJJJAAAAAJJJA. + OOJJJJAAAAJOOJJA + .CJJJJAAAJOOOOJA + .C.JJAAAAJAOAAJA + .C..JAAAAJAOAAJA + .C..JAAAAAJOAJAA + .C..JAAAAAJJJAAA + .C.JAAAAAAAJJAA. + .CJJAAAAAAAAJJA. + ACJAAAAAAAAAAAJ. +} +# tile 635 (Death,female) { .BBBB....JJJ.... .BPPPP.JJJJ..... @@ -6069,7 +12073,26 @@ Z = (195, 195, 195) .CJJAAAAAAAAJJA. ACJAAAAAAAAAAAJ. } -# tile 318 (Pestilence) +# tile 636 (Pestilence,male) +{ + F........JJJ.... + ..F....JJJJ..... + B...F.JJJJJ..... + ...B..JAAAJ..... + .F...JADADAJ.... + ...F.JAAAAAJ.AA. + .B..JFAAAAFJAA.. + ...FJJAFABJJAA.. + ..F.JFFBAJJJAAA. + ....FAFFJJJJAAA. + ....JABAJJJJAAA. + ...FJFFJJJJJJAA. + ...JJBFJJJJJJAA. + ...JAABFBJJJJAA. + ..JJFBFAFFAJJJA. + .JJAAFAFAAAAAAJ. +} +# tile 637 (Pestilence,female) { F........JJJ.... ..F....JJJJ..... @@ -6088,7 +12111,26 @@ Z = (195, 195, 195) ..JJFBFAFFAJJJA. .JJAAFAFAAAAAAJ. } -# tile 319 (Famine) +# tile 638 (Famine,male) +{ + .........JJJ.... + .......JJJ...... + K.....JJJJJ..... + K.....JAAAJ..... + K....JADADAJ.... + K....JAAAAAJ...A + K.....JAAAJJ..AA + OOJJJJJJAAJAJ.AA + K...JJJAAJJAJAAA + K.....JAJJJOJAA. + K.....JAOOOAAA.. + K.....JAJJAAA... + K.....JAJJAA.... + K.....JAAJAA.... + K...JJAAAJJAA... + K..JJAAAAAJJJA.. +} +# tile 639 (Famine,female) { .........JJJ.... .......JJJ...... @@ -6107,7 +12149,26 @@ Z = (195, 195, 195) K...JJAAAJJAA... K..JJAAAAAJJJA.. } -# tile 320 (mail daemon) +# tile 640 (mail daemon,male) +{ + ...OP.BEEE.PO... + ...OOEBEEEEOOD.. + ..DLOBEEEEOOLDD. + .DDDLDDDDDDLDDD. + .CCDDDNDDNDDDCC. + CCDKDDDDDDDDJCCC + CDDKKDDIIDDJJCCD + CDDK.KDAADJJECDD + CCDKEEKKKJEEKCDD + .CCDK.EEEE..CDDD + .CCDAE.EENNNCDD. + .DDDAEEEENDNDDD. + ....BBEEENNNNN.. + ...BEEEAANNNNNA. + ..CDDDAAA.DDDK.. + ................ +} +# tile 641 (mail daemon,female) { ...OP.BEEE.PO... ...OOEBEEEEOOD.. @@ -6126,7 +12187,26 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 321 (djinni) +# tile 642 (djinni,male) +{ + .LL..NNN..LL.... + ..L..NGNA.L..... + ..LAALLLAALA.... + ..LAAKKKAALA.... + ...LCKKKCLA..... + ....LCKCLA...... + ....LICLIA..A... + ....IIIIEA.AA..A + ....EIEEIA.AAAAA + ....IEFEAAAAAAAA + .....DEAIAAAAA.. + .....IGIFAAAA... + .......FEDAAA... + .......I.GEA.A.. + .........IFED... + ................ +} +# tile 643 (djinni,female) { .LL..NNN..LL.... ..L..NGNA.L..... @@ -6145,7 +12225,26 @@ Z = (195, 195, 195) .........IFED... ................ } -# tile 322 (jellyfish) +# tile 644 (jellyfish,male) +{ + ................ + .....PBPA....... + ...PBBBPBA...... + ..BBNNBPPBAA.... + .BBNNPPPBBPAA... + PBBBPPPBPBBAAA.. + BBBPBPPPPPBPAAA. + BBPBPPPPPPPBAAA. + PBPPBPPPPEPEEE.. + .PBBPPPEPEPPEE.. + .PEPBBEEPEEPEE.. + .PEEEPEEPEEPE... + ..PEEPE..PE.P... + ..P.EP.EEP..P... + ..PEE.P.E..E.... + .P..E.P..E...... +} +# tile 645 (jellyfish,female) { ................ .....PBPA....... @@ -6164,7 +12263,26 @@ Z = (195, 195, 195) ..PEE.P.E..E.... .P..E.P..E...... } -# tile 323 (piranha) +# tile 646 (piranha,male) +{ + ................ + ................ + ................ + ................ + ................ + ....OPP......... + .....OPP........ + ..O..PPAP.....E. + ..POPPPPPA...EEE + ..PPPPP.PPA.E... + ...PP..PPPAAAEE. + ..E.PPPPPPPPPE.. + ..E...PPPPPAA.E. + .....E..PPAE.... + .....E..P....... + ....E..E...E.... +} +# tile 647 (piranha,female) { ................ ................ @@ -6183,7 +12301,26 @@ Z = (195, 195, 195) .....E..P....... ....E..E...E.... } -# tile 324 (shark) +# tile 648 (shark,male) +{ + ................ + ................ + ................ + ...............P + ........P.....PP + ....E..PP....PP. + ...E...PPA..PPP. + ..EEEEPPPA.PPPPP + .E.EEPPP.PPPPPPE + ...EP.P.PPPPPEEE + ..PPPPPPPPPPEEE. + .APPPPPPPPEEEE.E + PPPPPPP..EE..... + NDPPAPEPPP.E..EE + PDNPPEE..EE..... + .PPPE..EEE..E... +} +# tile 649 (shark,female) { ................ ................ @@ -6202,7 +12339,26 @@ Z = (195, 195, 195) PDNPPEE..EE..... .PPPE..EEE..E... } -# tile 325 (giant eel) +# tile 650 (giant eel,male) +{ + ................ + ................ + ................ + ....AAA......... + ...AAOAA...AAA.. + ..AAAAAAA.AA.AA. + ..AAAA.AA.AA.AA. + ...AA..AA.AA..A. + ......AAA..AA.A. + ......AA...AA... + .....AAA.E.AA.E. + ...E.AAEE.AAAE.. + ...E.AAEEAAAEE.. + ..E..AAAAAAE.E.. + ...EE.AAAAE.E... + ..E...EE.E...E.. +} +# tile 651 (giant eel,female) { ................ ................ @@ -6221,7 +12377,26 @@ Z = (195, 195, 195) ...EE.AAAAE.E... ..E...EE.E...E.. } -# tile 326 (electric eel) +# tile 652 (electric eel,male) +{ + ................ + ................ + ................ + ....AAA......... + ...AAOAA........ + ..AAAAAAA....... + ..AAAA.AA....... + ...AA..AA...DD.. + ......AAA..DD... + ......AA...DD... + .....AAA.E.DD.E. + ...E.AAEE.DD.E.. + ...E.AAEEDD.EE.. + ..E..AAADDDE.E.. + ...EE.AAADE.E... + ..E...EE.E...E.. +} +# tile 653 (electric eel,female) { ................ ................ @@ -6240,7 +12415,26 @@ Z = (195, 195, 195) ...EE.AAADE.E... ..E...EE.E...E.. } -# tile 327 (kraken) +# tile 654 (kraken,male) +{ + ................ + ................ + ..FF..FF........ + ..DDFDDF........ + ..FFFFF.....GG.. + ..NCNFF......GFA + ..CC.FF.....EGFA + ....GFAA.GFAEGFE + ...GFFAGFFFFAGFE + ...GFAAFFAGFAEEE + ..GFFAGFFAGFEEE. + EEGFFAGFFAEEEE.E + .EGFFAGFFEE..... + EEGFFEEEEE.E..EE + EEEEEEE..EE..... + ..EEE..EEE..E... +} +# tile 655 (kraken,female) { ................ ................ @@ -6259,7 +12453,7 @@ Z = (195, 195, 195) EEEEEEE..EE..... ..EEE..EEE..E... } -# tile 328 (newt) +# tile 656 (newt,male) { ................ ................ @@ -6278,7 +12472,45 @@ Z = (195, 195, 195) ................ ................ } -# tile 329 (gecko) +# tile 657 (newt,female) +{ + ................ + ................ + ................ + ................ + ................ + ......JKKJ...... + .....CLCCLLC.... + ....LAAAACCLCA.. + .......LCCLLLCA. + ....LCCCLLLAALA. + ....CALLLLAAAA.. + ...LLLLCLAAA.... + ...LLAAALLA..... + ................ + ................ + ................ +} +# tile 658 (gecko,male) +{ + ................ + ................ + ...........LLP.. + ..........LLOOA. + ......PO.LLOOOA. + ......OOALOOOA.. + .......LLOOOA... + ...POALOOOAA.... + ...OOLOOOOOOA... + ....ALOOOAOPA... + ...DOOOOA.AA.... + ...OOOAOOA...... + ...OODAOPA...... + ..F.AA.AA....... + ................ + ................ +} +# tile 659 (gecko,female) { ................ ................ @@ -6297,7 +12529,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 330 (iguana) +# tile 660 (iguana,male) +{ + ................ + ................ + ................ + ................ + ................ + ....GPGPGGPF.... + ..GPAAAAFFGPF... + .GPAA.PFFGPPPAA. + ......FGGPPFPPAA + .PFGGGGPPPFAAPPA + .FGPAPPPPFAAAAA. + .GPPPPFPFAAA.A.. + .PPFFAFPPAA..... + D.AAAAAAPPA..... + ................ + ................ +} +# tile 661 (iguana,female) { ................ ................ @@ -6316,7 +12567,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 331 (baby crocodile) +# tile 662 (baby crocodile,male) +{ + ................ + ................ + ................ + ................ + ................ + .....FFOFOFA.... + ....FOGFGGOFF... + ....GAAAAFOGFA.. + ...FAA.GFOGGGFA. + ...GFOOOGGGFAGA. + ...FGAGGGGFAAA.. + ..FGGGGFGFAA.... + ..GGDFAFGGA..... + ...D............ + ................ + ................ +} +# tile 663 (baby crocodile,female) { ................ ................ @@ -6335,7 +12605,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 332 (lizard) +# tile 664 (lizard,male) +{ + ................ + ................ + ................ + ................ + ................ + ................ + ....FFFFGFJ..... + ..FFAAAJJGFJ.... + ......JGFFJFAA.. + ...JGGGFFJAAFA.. + ..JFAFFFJAAAA... + ..FFFFJJAAA..... + .JFAAAAFAA...... + .D.............. + ................ + ................ +} +# tile 665 (lizard,female) { ................ ................ @@ -6354,7 +12643,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 333 (chameleon) +# tile 666 (chameleon,male) +{ + ................ + ................ + ................ + .....GGGG....... + ...GGGGGGGG..... + ...GGFFFFGGFA... + ..GPAAAGFFGGFA.. + .GPAA.PFFGGGGAA. + ...GGGGGGGGFGGAA + .PGGBBGGGGFAAGGA + .FGGABGGGFAAAAA. + .GGGGGFGFAAA.A.. + .DGFFAFGGAA..... + D.AAAAAAGGA..... + .DD............. + ................ +} +# tile 667 (chameleon,female) { ................ ................ @@ -6373,7 +12681,26 @@ Z = (195, 195, 195) .DD............. ................ } -# tile 334 (crocodile) +# tile 668 (crocodile,male) +{ + ................ + ................ + ................ + ................ + ....FFOFOOFA.... + ...FOGFGFGOFFA.. + ..FGAAAAFFOGFFA. + .FFAA.GFFOGGGGFA + ......FOOGGGGGGA + .G.OOOOGGGGFAGGA + .FOGAGGGGGFAAAA. + FGGGGGFGGFAA.... + GGDDFAFGGGA..... + GDDFAAAAGGA..... + .DF............. + ................ +} +# tile 669 (crocodile,female) { ................ ................ @@ -6392,7 +12719,26 @@ Z = (195, 195, 195) .DF............. ................ } -# tile 335 (salamander) +# tile 670 (salamander,male) +{ + ................ + ................ + ................ + ......CCC....... + ....CCCCCCC..... + ...CCDDDDCCDA... + ....AAAADDCCDA.. + ......KDDCCCCAA. + ..LLLCCCCCCDCCAA + .KLCCCLLLCDAACCA + .DCEECLKKDAAAAA. + DCCAECDKDAAA.A.. + CCCCCCDCCAA..... + .DAADAAACCA..... + ..ACCA.......... + ...AAA.......... +} +# tile 671 (salamander,female) { ................ ................ @@ -6411,7 +12757,26 @@ Z = (195, 195, 195) ..ACCA.......... ...AAA.......... } -# tile 336 (long worm tail) +# tile 672 (long worm tail,male) +{ + ........ILLLL... + ......IILLAA.... + .....ILLAA...... + .....ILA........ + .....ILA........ + ......LLA...II.. + .......LLIIILLLL + ........ILLAAA.L + ...IIIILLALL.... + .ILLLLLAA..LL... + ILLAAAA.....LA.. + ILA.........LA.. + LLA........LLA.. + LILA......LLA... + .LLLIIIILLLA.... + ...LLLLLAAA..... +} +# tile 673 (long worm tail,female) { ........ILLLL... ......IILLAA.... @@ -6430,7 +12795,26 @@ Z = (195, 195, 195) .LLLIIIILLLA.... ...LLLLLAAA..... } -# tile 337 (archeologist) +# tile 674 (archeologist,male) +{ + ................ + ................ + ......KJ.J...... + ......KJJJ...... + ....KCKKKJJJ.... + ......LELEA..... + ......LLLLA..... + ......ALLA...... + .....CKAAKJ.AAA. + ....CKKKJJJJAAA. + ....KACKJJAJAAA. + ....LACJKJALAAA. + ......CJJKAAAA.. + .....KCJAJJA.A.. + .....CJJ.JKJ.... + ................ +} +# tile 675 (archeologist,female) { ................ ................ @@ -6449,7 +12833,26 @@ Z = (195, 195, 195) .....CJJ.JKJ.... ................ } -# tile 338 (barbarian) +# tile 676 (barbarian,male) +{ + ................ + ................ + .......HHA...... + ......HHHHA..... + ......LFLFA..... + ......LLLLA..... + ......ALLA...... + .....LLAALL.AAA. + ....LLLLLLLLAAA. + ....LALLLLALAAA. + ....LAALLAALAAA. + ....LAJJKJALAAA. + ......LJJLAAAA.. + ......LLALAA.A.. + .....LLA.LLA.... + ................ +} +# tile 677 (barbarian,female) { ................ ................ @@ -6468,7 +12871,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 339 (caveman) +# tile 678 (cave dweller,male) { ................ ................ @@ -6487,7 +12890,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 340 (cavewoman) +# tile 679 (cave dweller,female) { ................ ................ @@ -6506,7 +12909,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 341 (healer) +# tile 680 (healer,male) +{ + ................ + .......NN....... + ......NDDO...... + ......NNNN...... + ......ELEP...... + ......LLLP...... + .......LLP...... + ......O..PA.AAA. + .....NNOOPPAAAA. + ....OOONOPPPAA.. + ....LANOOPALAA.. + ......NOOPAAAA.. + .....NOOOPAA.A.. + ....NOOOOOPA.... + ................ + ................ +} +# tile 681 (healer,female) { ................ .......NN....... @@ -6525,7 +12947,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 342 (knight) +# tile 682 (knight,male) +{ + ................ + ................ + .......BPA...... + ......BPPPA..... + ......PEEPA..... + ......PLLPA..... + ......ALLAA..... + .....BBAABB.AAA. + ....BPPPPPPPAAA. + ....PABPPPAPAAA. + ....LA.PP.ALAAA. + ......BP.PAAAA.. + ......BPAPAA.A.. + .....PPA.PPA.... + ................ + ................ +} +# tile 683 (knight,female) { ................ ................ @@ -6544,7 +12985,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 343 (monk) +# tile 684 (monk,male) +{ + ................ + ................ + .......CCC...... + ......JCJJJA.... + ......CAAAJA.... + ......CAAAJA.... + ......CKLKCAAAA. + .....CDDDDDDAAAA + ....CDDLALDDDAAA + ....DALLALLADAA. + ....DDDDCDDDDAA. + .....AACCCDAAAA. + .....CDCCCDDA.A. + ....CCCCCCCDD... + ................ + ................ +} +# tile 685 (monk,female) { ................ ................ @@ -6563,7 +13023,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 344 (priest) +# tile 686 (cleric,male) { ................ ................ @@ -6573,16 +13033,16 @@ Z = (195, 195, 195) ......ALLJA..... ......IJJIAAAA.. .....ODDDDDAAAA. - ....IDNDDDDDAAA. - ...NLNNNDDALAA.. - ......NDDDAAAA.. + ....INNDDDDDAAA. + ...NLNNDDDALAA.. + ......DDDDAAAA.. ......DIIDAAAA.. .....DDIIDDA.A.. ....DIIIIIDD.... ................ ................ } -# tile 345 (priestess) +# tile 687 (cleric,female) { ................ .......JJ....... @@ -6592,16 +13052,35 @@ Z = (195, 195, 195) .....JJLLJJ..... .....JEJJEJAAA.. .....ODEEDDAAAA. - ....IDINDDDDAAA. - ....L.NNNDALAA.. - ......INDDAAAA.. - ......INDDAAAA.. + ....IDINNDDDAAA. + ....L.DNNDALAA.. + ......IDDDAAAA.. + ......IDDDAAAA.. .....DDIIDDA.A.. ....DIIIIIDD.... ................ ................ } -# tile 346 (ranger) +# tile 688 (ranger,male) +{ + ................ + ................ + ........CJA..... + .......CJJJA.... + .......JEEJA.... + .......JLLJA.... + .......ALLAA.... + ......GGAAGG.AAA + .....BPFFFFPPAAA + .....PAGFFFAPAAA + .....LA.FF.ALAAA + .......BP.PAAAA. + .......BPAPAA.A. + ......PPA.PPA... + ................ + ................ +} +# tile 689 (ranger,female) { ................ ................ @@ -6620,7 +13099,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 347 (rogue) +# tile 690 (rogue,male) +{ + ................ + ................ + ................ + .....OA...OA.... + .....OOIDPPA.... + ......IDDDA..... + ......LKLKA..... + ......LLLLA..... + ......ALLA...... + ......BAABAA..A. + .....KEBBEJAAAA. + ....KAAEEAAKAA.. + ....LAJJHJALAA.. + ......KKJKAAAA.. + .....KKA.KKA.... + ................ +} +# tile 691 (rogue,female) { ................ ................ @@ -6639,7 +13137,26 @@ Z = (195, 195, 195) .....KKA.KKA.... ................ } -# tile 348 (samurai) +# tile 692 (samurai,male) +{ + ................ + ................ + .........AA..... + .......AAA...... + ......AAAAA..... + .....ALFLFA..... + .....ALLLLA..... + ......ALLA...... + ....IIIAAIIIAAA. + ....LDIIIIDLAAA. + ....LABBBBALAAA. + ....LABBBBALAAA. + ......IDDDAAAA.. + ......IDADAA.A.. + .....IIA.IIA.... + ................ +} +# tile 693 (samurai,female) { ................ ................ @@ -6658,7 +13175,26 @@ Z = (195, 195, 195) .....IIA.IIA.... ................ } -# tile 349 (tourist) +# tile 694 (tourist,male) +{ + ................ + ................ + ......JKJJA..... + ......KJJJA..... + ...JJJJJJJJJJ... + ......LFLFAA.... + ......LLLLA..... + ......ALLA...... + .....HGAAGH.AAA. + ....LLGHHGLLAAA. + ....LAHGHGALAAA. + ....LAHHGHALAAA. + ......JJJKAAAA.. + ......LLALAA.A.. + .....LLA.LLA.... + ................ +} +# tile 695 (tourist,female) { ................ ................ @@ -6677,7 +13213,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 350 (valkyrie) +# tile 696 (valkyrie,male) +{ + D..............D + .D............D. + ..D...LHHL...D.. + ...D.HHHHHL.D... + ....DHELELHD.... + ....HDLLLLD..... + ...HHHDLLD...... + ...HJKJDDKJJAAA. + ..HHLJJDDJJLAAA. + ..H.LADKDCALAAA. + ....LDAKKDALAAA. + ....D.KKJKDAAA.. + ...D..KJAJAD.A.. + ..D..KLA.LKAD... + .D...........D.. + D.............D. +} +# tile 697 (valkyrie,female) { ................ ................ @@ -6696,7 +13251,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 351 (wizard) +# tile 698 (wizard,male) +{ + ................ + .........BP..... + .......BBPE..... + ......BPPEA..... + ......BAAEA..... + ......BAAEA..... + ......PLLE...... + ......PAAEA.AAA. + .....BBPBEEAAAA. + ....PPPBEEEEAA.. + ....LABPPEALAA.. + ......BPPEAAAA.. + .....BPPPEAA.A.. + .....BPPPPEA.... + ....BPPPPPPE.... + ................ +} +# tile 699 (wizard,female) { ................ .........BP..... @@ -6715,7 +13289,26 @@ Z = (195, 195, 195) ....BPPPPPPE.... ................ } -# tile 352 (Lord Carnarvon) +# tile 700 (Lord Carnarvon,male) +{ + .......JJ....... + ......KJJJ...... + ....KCKKKJJJ.... + ......LELEA..... + ......LLLLA..... + ......ALLA...... + .....CIAAIK.AAA. + ....CKKIIKKKAAA. + ...KKCKKHKJKKAA. + ...KKAKHKJAKKAA. + ...KAIHKKJIAKA.. + ...LAICKKJIALA.. + .....ICKAJIAAA.. + ......CKAPAAAA.. + .....PPA.PPA.... + ................ +} +# tile 701 (Lord Carnarvon,female) { .......JJ....... ......KJJJ...... @@ -6734,7 +13327,26 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 353 (Pelias) +# tile 702 (Pelias,male) +{ + ................ + .......JJ....... + ......KKKJ...... + ......LELEA..... + ......LLLLA..... + ......ALLA...... + .....CKAAKK.AAA. + ....CKKKKKKKAAA. + ...KKCKKKKJKKAA. + ...KKAKKKKAKKAA. + ...KA.CKKJAAKA.. + ...LA.CKAJAALA.. + ......CKAJAAAA.. + ......CKAPAAAA.. + .....PPA.PPA.... + ................ +} +# tile 703 (Pelias,female) { ................ .......JJ....... @@ -6753,7 +13365,26 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 354 (Shaman Karnov) +# tile 704 (Shaman Karnov,male) +{ + ................ + .......JJA...... + ......JJJJA..... + .....JFLFLJ..... + .....JLLLLJ..... + .....JJDDJA..... + ....LHAJJAHLAA.. + ...LLLHAAHLLLAA. + ...LLLLHHLLLLAA. + ...LLALHHLALLAA. + ...LLALLLLALLAA. + ....LACKKJALAAA. + ......CKKJAAAA.. + ......LA.LAA.A.. + .....LLA.LLA.... + ................ +} +# tile 705 (Shaman Karnov,female) { ................ .......JJA...... @@ -6772,7 +13403,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 355 (Earendil) +# tile 706 (Earendil,male) +{ + .........G...... + ....B..GGF..B... + ...BB.GGGGABB... + ..BPBPLELEABPB.. + ..BBBPLLLLABBB.. + ..PBPPALLAPPP... + ...PPBGAAGBBB... + ...BBLGGGFLBBB.. + ..BBLAAGFAALBB.. + ...BLAGGGFALB... + ......GFAF...... + ......L..L.AAA.. + ......AAAAAAAA.. + ....AAAAAAAA.... + .....AAAAAA..... + ................ +} +# tile 707 (Earendil,female) { .........G...... ....B..GGF..B... @@ -6791,7 +13441,26 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 356 (Elwing) +# tile 708 (Elwing,male) +{ + .........G...... + ....B..GGF..B... + ...BB.GGGGABB... + ..BPBHLELEHBPB.. + ..BBBHLLLLHBBB.. + ..PBHHALLAHHP... + ...PHHGAAGHHB... + ...BBLGGGFLBBB.. + ..BBLAAGFAALBB.. + ...BLAGGGFALB... + ......GFAF...... + ......L..L.AAA.. + ......AAAAAAAA.. + ....AAAAAAAA.... + .....AAAAAA..... + ................ +} +# tile 709 (Elwing,female) { .........G...... ....B..GGF..B... @@ -6810,7 +13479,26 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 357 (Hippocrates) +# tile 710 (Hippocrates,male) +{ + ................ + ....LLLCCD...... + ...LLCCDDA...... + ...LAAAADA...... + ...LBABADA...... + ...LAAAADA...... + ...CCLLDD.B..... + ....CKKDDFBFAAA. + ..LLLCLDDDBFAAA. + .CCCCLDDDFBAAA.. + .LALLCCDDFBDAA.. + ...LCCCCDABFAA.. + ...LCCCCDABAAA.. + ..LLCCCCDAA.AA.. + .LCCCCCCCDA..... + ................ +} +# tile 711 (Hippocrates,female) { ................ ....LLLCCD...... @@ -6829,7 +13517,26 @@ Z = (195, 195, 195) .LCCCCCCCDA..... ................ } -# tile 358 (King Arthur) +# tile 712 (King Arthur,male) +{ + ................ + ................ + ......OHHA...... + .....OHHHHA..... + .....HBLBHA..... + .....HLLLHA..... + .....ALLLAA..... + ....BBAAABB.AAA. + ...BPPPPPPPPAAA. + ...PABPPPPACPAA. + ..NNNNNNNNNCLCA. + .....BPP.PACAA.. + .....BPAPPAA.A.. + .....BPAPPAA.A.. + ....PPAA.PPA.... + ................ +} +# tile 713 (King Arthur,female) { ................ ................ @@ -6848,7 +13555,26 @@ Z = (195, 195, 195) ....PPAA.PPA.... ................ } -# tile 359 (Grand Master) +# tile 714 (Grand Master,male) +{ + ................ + .......LL....... + ......LLLL...... + ......LLLL...... + ..LC.CALLAC..... + .CLLC.CAACCCC... + .CJLACCCCCCCCC.. + ..JAACCCCCCCCCC. + ..JCCCCCCCCCCC.A + ..J..PPPPPLCCAAA + ..J..CCCCLLCAAAA + ..J..CCCCCCCAAAA + ..J..CCCCCCCAAAA + ..J.ACCCCCCCAAA. + ..JACCCCCCCCAA.. + ................ +} +# tile 715 (Grand Master,female) { ................ .......LL....... @@ -6867,7 +13593,26 @@ Z = (195, 195, 195) ..JACCCCCCCCAA.. ................ } -# tile 360 (Arch Priest) +# tile 716 (Arch Priest,male) +{ + ..N............. + .NNN..JLLJ...... + ..N...JLLJ...... + ..N...LLLL...... + ..LC.CALLAC..... + .CLLC.CAACJDK... + .CHLACCCCJCCDK.. + ..HAACCJJCCCCDK. + ..HCCCCJCCJCCC.A + ..H..DCJCCLJCAAA + ..H..DCJCLLCAAAA + ..H..KCJCCDJAAAA + ..H..KCJCCDJAAAA + ..H.ACCJCCDJAAA. + ..HACCCJJCCCAA.. + ................ +} +# tile 717 (Arch Priest,female) { ..N............. .NNN..JLLJ...... @@ -6886,7 +13631,26 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 361 (Orion) +# tile 718 (Orion,male) +{ + ................ + ................ + .......CJA...... + ......CJJJA..... + ......JEEJA..... + ......JLLJA..... + ......ALLAA..... + .....GGAAGG..... + ....BGFFFFFP.... + ....BPFFFFPPAAA. + ....PAGFFFAPAAA. + ....LANNNNALAAA. + ......BP.PAAAAA. + ......BP.PAAAA.. + ......BPAPAA.A.. + .....PPA.PPA.... +} +# tile 719 (Orion,female) { ................ ................ @@ -6905,7 +13669,26 @@ Z = (195, 195, 195) ......BPAPAA.A.. .....PPA.PPA.... } -# tile 362 (Master of Thieves) +# tile 720 (Master of Thieves,male) +{ + ................ + ...H.....H...... + ...HHIDKHH...... + ....IDDDD....... + ....LLLLLA...... + ....LBLBLA...... + ....LLLLLA...... + .....LLLA....... + ....B.AABAA..... + ...KEBBBEJAAA... + ..KAEEEEEAJAAA.. + ..LAJJHHJALAAA.. + ....JKKKJAAAAA.. + ....KJAJKAAAA... + ...JJA..JJA..... + ................ +} +# tile 721 (Master of Thieves,female) { ................ ...H.....H...... @@ -6924,7 +13707,7 @@ Z = (195, 195, 195) ...JJA..JJA..... ................ } -# tile 363 (Lord Sato) +# tile 722 (Lord Sato,male) { .....AAA........ .....AAA........ @@ -6943,7 +13726,45 @@ Z = (195, 195, 195) ..IIIA.IIIAA.... ................ } -# tile 364 (Twoflower) +# tile 723 (Lord Sato,female) +{ + .....AAA........ + .....AAA........ + ...AAAAAAA...... + ..AALLLLLAA..... + ..ALFFLFFLA..... + ..ALLLLLLLA..... + ...AALLLA....... + IIIIIAAAIIIIAAA. + LLDIIIIIIDLLAAA. + LLABBBBBBALLAAA. + LLABBBBBBALLAAA. + LLABBBBBBALLAAA. + ...IIDDDDAAAAAA. + ...IIAAIDAAA..A. + ..IIIA.IIIAA.... + ................ +} +# tile 724 (Twoflower,male) +{ + ................ + ................ + ......JKJJA..... + ......KJJJA..... + ....JJJJJJJJ.... + .....NNLNNA..... + ....NALNALNA.... + .....NNANNAA.... + .....AAAAAA.AAA. + ....LLHGHGLLAAA. + ....LAGGGGALAAA. + ....LAHGHGALAAA. + ......JJJKAAAA.. + ......JJAKAA.A.. + .....LLA.LLA.... + ................ +} +# tile 725 (Twoflower,female) { ................ ................ @@ -6962,7 +13783,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 365 (Norn) +# tile 726 (Norn,male) +{ + ................ + ................ + ......NNN....... + .....NNNNN...... + .....NELELN..... + ....NNLLLLN..... + ...NNNALLA...... + ...NJKJAAKJJAAA. + ..NNLJJKKJJLAAA. + ..N.LACKJCALAAA. + ....LAKKKKALAAA. + ......KKJKAAAA.. + ......KJAJAA.A.. + .....KLA.LKA.... + ................ + ................ +} +# tile 727 (Norn,female) { ................ ................ @@ -6981,7 +13821,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 366 (Neferet the Green) +# tile 728 (Neferet the Green,male) +{ + ................ + ................ + ......GGG....... + .....GFFFG...... + ....GFEFEG...... + ....GFFFFEG..... + .N.GPEFFFEE..... + .I..BBEAAEA.AA.. + .I.BBPPBBEEAAAA. + .IGBPPPPPEEEAA.. + .I.PP.EPEAAGAA.. + .I...BPPPAAAAA.. + .N...BPPPEAA.A.. + ....BPPPPPEA.... + ...BPPPPPPPE.... + ................ +} +# tile 729 (Neferet the Green,female) { ................ ................ @@ -7000,7 +13859,26 @@ Z = (195, 195, 195) ...BPPPPPPPE.... ................ } -# tile 367 (Minion of Huhetotl) +# tile 730 (Minion of Huhetotl,male) +{ + ...OP......PO... + ...OODDDDDDOOD.. + ..DLOOCDDCOOLDD. + .DDDLDDDDDDLDDD. + .CCDDDNDDNDDDCC. + CCDKDDDDDDDDJCCC + CDDKKDDIIDDJJCCD + CDDKKKDAADJJDCDD + CCDKDDKKKJDDKCDD + .CCDKKDDDDKKCDDD + .CCDADKDDKDACDD. + .DDDADDDDDDADDD. + ....CCDDDDKKAA.. + ...CDDDAADDDKAA. + ..CDDDAAA.DDDK.. + ................ +} +# tile 731 (Minion of Huhetotl,female) { ...OP......PO... ...OODDDDDDOOD.. @@ -7019,7 +13897,26 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 368 (Thoth Amon) +# tile 732 (Thoth Amon,male) +{ + ................ + ......OJJO...... + ......JJJJA..... + ......BLBLA..... + ......LLLLA..... + ......ALLA...... + .....BPAAPP.AAA. + ....BPPPPPPPAAA. + ...PPBPPPPJPPAA. + ...PPAPPP.APPA.A + ...PA.BPP.AAPA.A + ...LA.BPP..AL.A. + ......BPA.A..A.. + ......BPAPAAAA.. + .....PPA.PPA.... + ................ +} +# tile 733 (Thoth Amon,female) { ................ ......OJJO...... @@ -7038,7 +13935,26 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 369 (Chromatic Dragon) +# tile 734 (Chromatic Dragon,male) +{ + ......GGGFA..... + .....NFNFEEA.... + ....GFFFEECA.... + ..DCHHF..CCA.... + CHCHCD..BCCA.... + HD.D...BFFA..... + ......OBFAAAAAA. + ....HOGFAAAAAAAA + ..HOOIEA.EF.AAA. + .HOOOIEEEEFFJAA. + .HOOOIEEFFFDDAA. + HBOOIIEFFFDDCCA. + HB.OIEFOODD.CJA. + HBAAGE.AADDACCA. + ....GFAA...CCJA. + ........FFFFJA.. +} +# tile 735 (Chromatic Dragon,female) { ......GGGFA..... .....NFNFEEA.... @@ -7057,7 +13973,26 @@ Z = (195, 195, 195) ....GFAA...CCJA. ........FFFFJA.. } -# tile 370 (Goblin King) +# tile 736 (Goblin King,male) +{ + ................ + ................ + .H..H...H....... + CLC.HCHCH....... + CLC.HHHHH....... + .H..IIIII....... + .HK.IHIHI.I..... + .HICKIIIJKK..... + .H.IIJJJK.AA.... + .H..JICJJAAAAA.. + .H..IIIIJAAAAA.. + ....JIIJJAA..... + ....IJKJJA...... + ...IKAA.IK...... + ................ + ................ +} +# tile 737 (Goblin King,female) { ................ ................ @@ -7076,7 +14011,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 371 (Cyclops) +# tile 738 (Cyclops,male) +{ + ................ + ....LLLLL....... + ...CLLLLLC...... + ...LBABNNL...... + ...LBBBNNLJA.... + ...CLNNNLCJA.... + ....LLLLLJAAA... + ....LAALLAAAA... + ..JKJLLLKAKJAA.A + .CLKAJJJJAKLCAAA + .LLJKAAAAKJLLAA. + .LAAJKKKKJAALAA. + .LC.GGGHGGACLAAA + .LL.JJJJJJALLAAA + ....CJJJCLAAAAAA + ..LLLLL.LLLLLAA. +} +# tile 739 (Cyclops,female) { ................ ....LLLLL....... @@ -7095,7 +14049,26 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 372 (Ixoth) +# tile 740 (Ixoth,male) +{ + ....O......O.... + ....O......O.... + ...LOOCDDCOOL... + ...DDDDDDDDDDD.. + .CCDDDGDDGDDDCC. + CCDKDDDDDDDDJCCC + CDDKKKDIIDJJDCCD + CDDKDDKJJJDDDCDD + CCDKDDDDDDDDKCDD + .CCDKKDDDDKKCDDD + .CCDADKDDKDACDD. + .DDDADDDDDDADDD. + ....CCDDDDKKAA.. + ...CDDDAADDDKAA. + ..CDDDAAA.DDDK.. + ................ +} +# tile 741 (Ixoth,female) { ....O......O.... ....O......O.... @@ -7114,7 +14087,26 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 373 (Master Kaen) +# tile 742 (Master Kaen,male) +{ + ................ + .......KKA...... + ......KJJKA..... + ..KKA.KAAKA.KKA. + .KAAKAKDDKAKAAKA + .KOOJKKOOKKKOOJA + .KJJJJJJJJJKJJJA + ..KJJJJJJJJJJJA. + ....KJJJJJJJA... + ......KJJJAAAAAA + .....KJJJJKAAAAA + .....KJJJJJAAAAA + ....KJJJJJJKAAA. + ...KJJJJJJJJKAA. + ...KJJJJJJJJJA.. + ................ +} +# tile 743 (Master Kaen,female) { ................ .......KKA...... @@ -7133,7 +14125,26 @@ Z = (195, 195, 195) ...KJJJJJJJJJA.. ................ } -# tile 374 (Nalzok) +# tile 744 (Nalzok,male) +{ + ....O......O.... + ....O......O.... + ...LOOCDDCOOL... + ...DDDDDDDDDDD.. + .CCDDDBDDBDDDCC. + CCDKDDDDDDDDJCCC + CDDKKKDIIDJJDCCD + CDDKDDKJJJDDDCDD + CCDKDDDDDDDDKCDD + .CCDKKDDDDKKCDDD + .CCDADKDDKDACDD. + .DDDADDDDDDADDD. + ....CCDDDDKKAA.. + ...CDDDAADDDKAA. + ..CDDDAAA.DDDK.. + ................ +} +# tile 745 (Nalzok,female) { ....O......O.... ....O......O.... @@ -7152,7 +14163,26 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 375 (Scorpius) +# tile 746 (Scorpius,male) +{ + .....JLJLJAA.... + ....JA.JCJCKAA.. + ....AJ.....JJJA. + ....LA......LCKA + .JAKJA......JJJA + ..JJA......ALCJA + .......ALLAJCJKA + ....JJALCCAAJJA. + .JJALLAJCJJJAA.. + JA.LCCAJAJJAAAA. + ..JACJJJAAACCJAA + GGJJJJJAACCAAAJA + .JJGGAJACAAJJAAA + D.JJAAJAACA.JAA. + ...D...JAAJA.JJ. + ........JA.JA... +} +# tile 747 (Scorpius,female) { .....JLJLJAA.... ....JA.JCJCKAA.. @@ -7171,7 +14201,26 @@ Z = (195, 195, 195) ...D...JAAJA.JJ. ........JA.JA... } -# tile 376 (Master Assassin) +# tile 748 (Master Assassin,male) +{ + ................ + ................ + ................ + .......AA....... + ......AAAA...... + .....ABLBLA..... + .....AAAAAA..... + ......AAAA...... + .....AAAAAA..PP. + ....AAAAAAAAPPP. + ....AAAAAAAAPPP. + ....LAAAAAALPPP. + ......AAAAAPPP.. + ......AAAAAP.P.. + .....AAA.AAA.... + ................ +} +# tile 749 (Master Assassin,female) { ................ ................ @@ -7190,7 +14239,26 @@ Z = (195, 195, 195) .....AAA.AAA.... ................ } -# tile 377 (Ashikaga Takauji) +# tile 750 (Ashikaga Takauji,male) +{ + ................ + ................ + ......AA........ + .......AAA...... + ......AAAAA..... + .....ALFLFA..... + .....ALLLLA..... + ......ALLA...... + ....IIIAAIIIAAA. + ....LDIIIIDLAAA. + ....LAIIIIALAAA. + ....LALHHLALAAA. + ......IIIIAAAA.. + ......IIAIAA.A.. + .....IIA.IIA.... + ................ +} +# tile 751 (Ashikaga Takauji,female) { ................ ................ @@ -7209,7 +14277,26 @@ Z = (195, 195, 195) .....IIA.IIA.... ................ } -# tile 378 (Lord Surtur) +# tile 752 (Lord Surtur,male) +{ + ....PPDDDDAA.... + ....PDDDDDDDA... + ...PPDLLLLDDA... + ...PDPFLLFFDA... + ...PPPLLLLLDA... + ....PLLAALLAAA.. + ...PPALLLLBAAAA. + ...PPDBBBBBBBAA. + ..BDDHDPBPPPPPA. + ..PPHDDPBPPPPPA. + ..LAHDHPBPPAALAA + JLAADDHBBBBAALAA + JJLJDHHPBPPPCLAA + ..LLJBPPABPPLLAA + .....BPPABPPAAAA + ...LLLLJ.BLLLKAA +} +# tile 753 (Lord Surtur,female) { ....PPDDDDAA.... ....PDDDDDDDA... @@ -7228,7 +14315,7 @@ Z = (195, 195, 195) .....BPPABPPAAAA ...LLLLJ.BLLLKAA } -# tile 379 (Dark One) +# tile 754 (Dark One,male) { ................ ......AAA....... @@ -7247,7 +14334,45 @@ Z = (195, 195, 195) AAAAAAAAAAAAAAAA ................ } -# tile 380 (student) +# tile 755 (Dark One,female) +{ + ................ + ......AAA....... + .....AAAAA...... + .....ADADA...... + .....AAAAA...... + ....AAAAAAA..... + ....AAAAAAA..... + ...AAAAAAAAA.... + ...AAAAAAAAA.... + ..AAAAAAAAAAA... + ..AAAAAAAAAAA... + ...AAAAAAAAA.... + ...AAAAAAAAAA... + ..AAAAAAAAAAAA.. + AAAAAAAAAAAAAAAA + ................ +} +# tile 756 (student,male) +{ + ................ + ................ + .....GGFGG...... + .......G........ + ......NDND...... + ...DDDDDDDD..... + ......LELEA..... + ......LLLLA..... + ......ALLA...... + .....CKAAKJ.AAA. + ....CKKKJJJJAAA. + ....KACKJJAJAAA. + ....LACJKJALAAA. + .....KCJAJJA.A.. + .....CJJ.JKJ.... + ................ +} +# tile 757 (student,female) { ................ ................ @@ -7266,7 +14391,26 @@ Z = (195, 195, 195) .....CJJ.JKJ.... ................ } -# tile 381 (chieftain) +# tile 758 (chieftain,male) +{ + ................ + ................ + .......HHA...... + ......HHHHA..... + ......LFLFA..... + ......LLLLA..... + .....HALLAH..... + ....LLHAAHLLAAA. + ....LLLIILLLAAA. + ....LALIILALAAA. + ....LAALLAALAAA. + ....LAJJKJALAAA. + ......LJJLAAAA.. + ......LLALAA.A.. + .....LLA.LLA.... + ................ +} +# tile 759 (chieftain,female) { ................ ................ @@ -7285,7 +14429,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 382 (neanderthal) +# tile 760 (neanderthal,male) +{ + ................ + ................ + ................ + ......JJJJ...... + .....JJJJJJ..... + .....JFLFLJ..... + .....JLLLLJ..... + .....JJDDJA..... + ....JJAJJAJJ.AA. + ...JLLJAAJLLJAA. + ...LLALJJLALLAA. + ....LALCCLALAAA. + ......LA.LAA.A.. + .....LLA.LLA.... + ................ + ................ +} +# tile 761 (neanderthal,female) { ................ ................ @@ -7304,7 +14467,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 383 (High-elf) +# tile 762 (High-elf,male) +{ + .........G...... + .......GGF...... + ......GGGGA..... + ......LILIA..... + ......LLLLA..... + ......ALLA...... + ......GAAG..AA.. + .....LGGGFLAAAA. + ....LAAGFAALAAA. + ....LA.GFAALAA.. + ....LA.GFAALAA.. + ....LAGGGFAL.A.. + ......GFAFAA.A.. + ......GFAFAA.... + ......GFAFAA.... + .....KLA.LKA.... +} +# tile 763 (High-elf,female) { .........G...... .......GGF...... @@ -7323,7 +14505,26 @@ Z = (195, 195, 195) ......GFAFAA.... .....KLA.LKA.... } -# tile 384 (attendant) +# tile 764 (attendant,male) +{ + ................ + ................ + ................ + ......JJJ....... + .....JLLLJ...... + ......BLB....... + .....CLLLD...... + .....CCKKDA.AAA. + .....LLCLDDAAAA. + ....CCCLDDDDAA.. + ....LALCCDALAA.. + ......LCCDAAAA.. + .....LCCCDAA.A.. + ....LCCCCCDA.... + ................ + ................ +} +# tile 765 (attendant,female) { ................ ................ @@ -7342,7 +14543,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 385 (page) +# tile 766 (page,male) +{ + ................ + ................ + .......BPA...... + ......BPPPA..... + ......PEEPA..... + ......PLLPA..... + .......LLAA..... + ......BAABA.AAA. + .....BPPPPPAAAA. + ....PABPPPAPAAA. + ....LA.PP.ALAAA. + ......BP.PAAAA.. + ......LLALAA.A.. + .....LLA.LLA.... + ................ + ................ +} +# tile 767 (page,female) { ................ ................ @@ -7361,7 +14581,26 @@ Z = (195, 195, 195) ................ ................ } -# tile 386 (abbot) +# tile 768 (abbot,male) +{ + ................ + ................ + ................ + ................ + ................ + ......KLK....... + ......LLL....... + ....CCLLLJJ..... + ....KCKLKKJAAA.. + ....CDDDDDDAAAA. + ...CDDLALDDDAAA. + ...DALLALLADAA.. + ...DDDDCDDDDAA.. + ....AACCCDAAAA.. + ....CDCCCDDA.A.. + ...CCCCCCCDD.... +} +# tile 769 (abbot,female) { ................ ................ @@ -7380,7 +14619,26 @@ Z = (195, 195, 195) ....CDCCCDDA.A.. ...CCCCCCCDD.... } -# tile 387 (acolyte) +# tile 770 (acolyte,male) +{ + ................ + ................ + ................ + ......JJJJ...... + ......JLLJA..... + ......LLLLA..... + ......ALLJA..... + ......CJJCAAAA.. + .....LDDDDDAAAA. + ....CDCCDDDDAAA. + ....L.LCCDALAA.. + ......LCCDAAAA.. + ......LCCDAAAA.. + .....LDCCDDA.A.. + ....LCCCCCDD.... + ................ +} +# tile 771 (acolyte,female) { ................ ................ @@ -7399,7 +14657,26 @@ Z = (195, 195, 195) ....LCCCCCDD.... ................ } -# tile 388 (hunter) +# tile 772 (hunter,male) +{ + ................ + ................ + ................ + ....J..CJA...... + ...J..CJJJA..... + ...J..JEEJA..... + ..J...JLLJA..... + ..J...ALLAA..... + ..J..GGAAGG.AAA. + ..LPBPFFFFPPAAA. + ..J..AGFFFAPAAA. + ..J....FF.ALAAA. + ...J..BP.PAAAA.. + ...J..BPAPAA.A.. + ....JPPA.PPA.... + ................ +} +# tile 773 (hunter,female) { ................ ................ @@ -7418,7 +14695,26 @@ Z = (195, 195, 195) ....JPPA.PPA.... ................ } -# tile 389 (thug) +# tile 774 (thug,male) +{ + ................ + ................ + ................ + .......ID....... + ......IDDDA..... + ......LKLKA..... + ......LLLLA..... + ......ALLA...... + .....KKAAKKA..A. + ....KKJKKJJKAAA. + ....KAAJJAAKAA.. + ....LAJJJJALAA.. + ......KKJKAAAA.. + ......KAAKAAAA.. + .....KKA.KKA.... + ................ +} +# tile 775 (thug,female) { ................ ................ @@ -7437,7 +14733,26 @@ Z = (195, 195, 195) .....KKA.KKA.... ................ } -# tile 390 (ninja) +# tile 776 (ninja,male) +{ + ................ + ................ + .........AA..... + .......AAA...... + ......AAAAA..... + .....AFLFLA..... + .....AAAAAA..... + ......AAAA...... + ....AAAAAAAA.PP. + ....AAAAAAAAPPP. + ....AAAAAAAAPPP. + ....LAAAAAALPPP. + ......AAAAAPPP.. + ......AAAAAP.P.. + .....AAA.AAA.... + ................ +} +# tile 777 (ninja,female) { ................ ................ @@ -7456,7 +14771,26 @@ Z = (195, 195, 195) .....AAA.AAA.... ................ } -# tile 391 (roshi) +# tile 778 (roshi,male) +{ + ................ + ................ + ................ + .......AAAAA.... + ......AAAAA..... + .....ALFLFA..... + .....ALLLLA..... + ......ALLA...... + ....PPPAAPPPAAA. + ....L.PPPP.LAAA. + ....LAOOOOALAAA. + ....LAOOOOALAAA. + ......P...AAAA.. + ......P.A.AA.A.. + .....PPA.PPA.... + ................ +} +# tile 779 (roshi,female) { ................ ................ @@ -7475,7 +14809,26 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 392 (guide) +# tile 780 (guide,male) +{ + ................ + ................ + ......JKJJA..... + ......KJJJA..... + ....JJJJJJJJ.... + ......LFLFAA.... + ......LLLLA..... + ......ALLA...... + .....HHAAHH.AAA. + ....LLHHHHLLAAA. + ....LAHHHHALAAA. + ....LAHHHHALAAA. + ......JJJKAAAA.. + ......JJAKAA.A.. + .....LLA.LLA.... + ................ +} +# tile 781 (guide,female) { ................ ................ @@ -7494,7 +14847,26 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 393 (warrior) +# tile 782 (warrior,male) +{ + .....O....O..... + .....NO..ON..... + ......NPPN...... + .....PPPPPP..... + .....PELELP..... + ....HHLLLLH..... + ...HHHALLA...... + ...HJKJAAKJJAAA. + ..HHLJJKKJJLAAA. + ..H.LACKJCALAAA. + ....LAAKKAALAAA. + ......KKJKAAAA.. + ......KJAJAA.A.. + ......KJAJAA.A.. + .....KLA.LKA.... + ................ +} +# tile 783 (warrior,female) { .....O....O..... .....NO..ON..... @@ -7513,7 +14885,26 @@ Z = (195, 195, 195) .....KLA.LKA.... ................ } -# tile 394 (apprentice) +# tile 784 (apprentice,male) +{ + ................ + ................ + ................ + ......JJJ....... + .....JLLLJ...... + ......GLG....... + .....BLLLE...... + .....BBEEEA.AAA. + .....BBPBEEAAAA. + ....PPPBEEEEAA.. + ....LABPPEALAA.. + ......BPPEAAAA.. + .....BPPPEAA.A.. + .....BPPPPEA.... + ....BPPPPPPE.... + ................ +} +# tile 785 (apprentice,female) { ................ ................ @@ -7532,7 +14923,7 @@ Z = (195, 195, 195) ....BPPPPPPE.... ................ } -# tile 395 (invisible monster) +# tile 786 (invisible monster, nogender) { ................ ................ diff --git a/win/share/safeproc.c b/win/share/safeproc.c index 490a2c432..6811721e3 100644 --- a/win/share/safeproc.c +++ b/win/share/safeproc.c @@ -3,10 +3,7 @@ /* NetHack may be freely redistributed. See license for details. */ /* must #define SAFEPROCS in xxxconf.h or via CFLAGS or this won't compile */ -#include "config.h" -#include "color.h" -#include "wintype.h" -#include "winprocs.h" +#include "hack.h" /* * *********************************************************** @@ -324,11 +321,12 @@ int x, y; * Print the glyph to the output device. Don't flush the output device. */ void -safe_print_glyph(window, x, y, glyph, bkglyph) +safe_print_glyph(window, x, y, glyph, bkglyph, glyphmod) winid window; xchar x, y; int glyph; int bkglyph UNUSED; +int glyphmod[NUM_GLYPHMOD] UNUSED; { return; } diff --git a/win/share/tilemap.c b/win/share/tilemap.c index 0adefc332..c7766a63b 100644 --- a/win/share/tilemap.c +++ b/win/share/tilemap.c @@ -18,10 +18,22 @@ #define Fprintf (void) fprintf -const char *FDECL(tilename, (int, int)); +/* + * Defining OBTAIN_TILEMAP to get a listing of the tile-mappings + * for debugging purposes requires that your link to produce + * the tilemap utility must also include: + * objects.o, monst.o drawing.o + */ +/* #define OBTAIN_TILEMAP */ + +#if defined(OBTAIN_TILEMAP) && !defined(TILETEXT) +FILE *tilemap_file; +#endif + +const char *FDECL(tilename, (int, int, int)); void NDECL(init_tilemap); void FDECL(process_substitutions, (FILE *)); -boolean FDECL(acceptable_tilename, (int, const char *, const char *)); +boolean FDECL(acceptable_tilename, (int, int, const char *, const char *)); #if defined(MICRO) || defined(WIN32) #undef exit @@ -34,17 +46,14 @@ extern void FDECL(exit, (int)); #define STATUES_LOOK_LIKE_MONSTERS #endif -#define MON_GLYPH 1 -#define OBJ_GLYPH 2 -#define OTH_GLYPH 3 /* fortunately unnecessary */ - +enum {MON_GLYPH, OBJ_GLYPH, OTH_GLYPH, TERMINATOR = -1}; #define EXTRA_SCROLL_DESCR_COUNT ((SCR_BLANK_PAPER - SCR_STINKING_CLOUD) - 1) /* note that the ifdefs here should be the opposite sense from monst.c/ * objects.c/rm.h */ -struct conditionals { +struct conditionals_t { int sequence, predecessor; const char *name; } conditionals[] = { @@ -56,7 +65,7 @@ struct conditionals { { MON_GLYPH, PM_BABY_SILVER_DRAGON, "baby shimmering dragon" }, { MON_GLYPH, PM_SILVER_DRAGON, "shimmering dragon" }, { MON_GLYPH, PM_JABBERWOCK, "vorpal jabberwock" }, - { MON_GLYPH, PM_VAMPIRE_LORD, "vampire mage" }, + { MON_GLYPH, PM_VAMPIRE_LEADER, "vampire mage" }, #ifndef CHARON /* not supported yet */ { MON_GLYPH, PM_CROESUS, "Charon" }, #endif @@ -79,7 +88,7 @@ struct conditionals { { OBJ_GLYPH, SCR_STINKING_CLOUD + EXTRA_SCROLL_DESCR_COUNT, "stamped / mail" }, #endif - { 0, 0, 0 } + { TERMINATOR, 0, 0 } }; /* @@ -103,42 +112,42 @@ struct substitute { { GLYPH_CMAP_OFF + S_vwall, GLYPH_CMAP_OFF + S_trwall, "sokoban walls", "In_sokoban(plev)" } }; -#ifdef TILETEXT - +#if defined(TILETEXT) || defined(OBTAIN_TILEMAP) /* - * entry is the position of the tile within the monsters/objects/other set + * file_entry is the position of the tile within the monsters/objects/other set */ const char * -tilename(set, entry) -int set, entry; +tilename(set, file_entry, gend) +int set, file_entry, gend; { - int i, j, condnum, tilenum; + int i, j, condnum, tilenum, gendnum; static char buf[BUFSZ]; (void) def_char_to_objclass(']'); - condnum = tilenum = 0; + condnum = tilenum = gendnum = 0; for (i = 0; i < NUMMONS; i++) { - if (set == MON_GLYPH && tilenum == entry) - return mons[i].mname; - tilenum++; - while (conditionals[condnum].sequence == MON_GLYPH - && conditionals[condnum].predecessor == i) { - if (set == MON_GLYPH && tilenum == entry) - return conditionals[condnum].name; - condnum++; - tilenum++; + if (set == MON_GLYPH && tilenum == file_entry && gend == 0) + return mons[i].pmnames[NEUTRAL]; + for (condnum = 0; conditionals[condnum].sequence != -1; ++condnum) { + if (conditionals[condnum].sequence == MON_GLYPH + && conditionals[condnum].predecessor == i) { + tilenum += 2; + if (set == MON_GLYPH && tilenum == file_entry) + return conditionals[condnum].name; + } } + tilenum += 2; } - if (set == MON_GLYPH && tilenum == entry) + if (set == MON_GLYPH && tilenum == file_entry) return "invisible monster"; tilenum = 0; /* set-relative number */ for (i = 0; i < NUM_OBJECTS; i++) { /* prefer to give the description - that's all the tile's * appearance should reveal */ - if (set == OBJ_GLYPH && tilenum == entry) { + if (set == OBJ_GLYPH && tilenum == file_entry) { if (!obj_descr[i].oc_descr) return obj_descr[i].oc_name; if (!obj_descr[i].oc_name) @@ -148,20 +157,20 @@ int set, entry; obj_descr[i].oc_name); return buf; } - - tilenum++; - while (conditionals[condnum].sequence == OBJ_GLYPH - && conditionals[condnum].predecessor == i) { - if (set == OBJ_GLYPH && tilenum == entry) - return conditionals[condnum].name; - condnum++; - tilenum++; + for (condnum = 0; conditionals[condnum].sequence != -1; ++condnum) { + if (conditionals[condnum].sequence == OBJ_GLYPH + && conditionals[condnum].predecessor == i) { + tilenum++; + if (set == OBJ_GLYPH && tilenum == file_entry) + return conditionals[condnum].name; + } } + tilenum++; } tilenum = 0; /* set-relative number */ for (i = 0; i < (MAXPCHARS - MAXEXPCHARS); i++) { - if (set == OTH_GLYPH && tilenum == entry) { + if (set == OTH_GLYPH && tilenum == file_entry) { if (*defsyms[i].explanation) { return defsyms[i].explanation; } else { @@ -169,18 +178,19 @@ int set, entry; return buf; } } - tilenum++; - while (conditionals[condnum].sequence == OTH_GLYPH - && conditionals[condnum].predecessor == i) { - if (set == OTH_GLYPH && tilenum == entry) - return conditionals[condnum].name; - condnum++; - tilenum++; + for (condnum = 0; conditionals[condnum].sequence != -1; ++condnum) { + if (conditionals[condnum].sequence == OTH_GLYPH + && conditionals[condnum].predecessor == i) { + tilenum++; + if (set == OTH_GLYPH && tilenum == file_entry) + return conditionals[condnum].name; + } } + tilenum++; } /* explosions */ tilenum = MAXPCHARS - MAXEXPCHARS; - i = entry - tilenum; + i = file_entry - tilenum; if (i < (MAXEXPCHARS * EXPL_MAX)) { if (set == OTH_GLYPH) { static const char *explosion_types[] = { @@ -195,7 +205,7 @@ int set, entry; } tilenum += (MAXEXPCHARS * EXPL_MAX); - i = entry - tilenum; + i = file_entry - tilenum; if (i < (NUM_ZAP << 2)) { if (set == OTH_GLYPH) { Sprintf(buf, "zap %d %d", i / 4, i % 4); @@ -204,7 +214,7 @@ int set, entry; } tilenum += (NUM_ZAP << 2); - i = entry - tilenum; + i = file_entry - tilenum; if (i < WARNCOUNT) { if (set == OTH_GLYPH) { Sprintf(buf, "warning %d", i); @@ -213,7 +223,7 @@ int set, entry; } tilenum += WARNCOUNT; - i = entry - tilenum; + i = file_entry - tilenum; if (i < 1) { if (set == OTH_GLYPH) { Sprintf(buf, "unexplored"); @@ -222,17 +232,17 @@ int set, entry; } tilenum += 1; - i = entry - tilenum; + i = file_entry - tilenum; if (i < 1) { if (set == OTH_GLYPH) { Sprintf(buf, "nothing"); return buf; } } - tilenum += 1; + tilenum++; for (i = 0; i < SIZE(substitutes); i++) { - j = entry - tilenum; + j = file_entry - tilenum; if (j <= substitutes[i].last_glyph - substitutes[i].first_glyph) { if (set == OTH_GLYPH) { Sprintf(buf, "sub %s %d", substitutes[i].sub_name, j); @@ -242,12 +252,12 @@ int set, entry; tilenum += substitutes[i].last_glyph - substitutes[i].first_glyph + 1; } - Sprintf(buf, "unknown %d %d", set, entry); + Sprintf(buf, "unknown %d %d", set, file_entry); return buf; } +#endif -#else /* TILETEXT */ - +#ifndef TILETEXT #define TILE_FILE "tile.c" #ifdef AMIGA @@ -260,7 +270,14 @@ int set, entry; #endif #endif -short tilemap[MAX_GLYPH]; +struct tilemap_t { + short tilenum; +#ifdef OBTAIN_TILEMAP + char name[80]; + int glyph; +#endif +} tilemap[MAX_GLYPH]; + #ifdef STATUES_LOOK_LIKE_MONSTERS int lastmontile, lastobjtile, lastothtile, laststatuetile; @@ -275,7 +292,8 @@ int lastmontile, lastobjtile, lastothtile; * set up array to map glyph numbers to tile numbers * * assumes tiles are numbered sequentially through monsters/objects/other, - * with entries for all supported compilation options + * with entries for all supported compilation options. monsters have two + * tiles for each (male + female). * * "other" contains cmap and zaps (the swallow sets are a repeated portion * of cmap), as well as the "flash" glyphs for the new warning system @@ -286,20 +304,21 @@ init_tilemap() { int i, j, condnum, tilenum; int corpsetile, swallowbase; + int file_entry = 0; for (i = 0; i < MAX_GLYPH; i++) { - tilemap[i] = -1; + tilemap[i].tilenum = -1; } - corpsetile = NUMMONS + NUM_INVIS_TILES + CORPSE; - swallowbase = NUMMONS + NUM_INVIS_TILES + NUM_OBJECTS + S_sw_tl; + corpsetile = NUMMONS + NUMMONS + NUM_INVIS_TILES + CORPSE; + swallowbase = NUMMONS + NUMMONS + NUM_INVIS_TILES + NUM_OBJECTS + S_sw_tl; /* add number compiled out */ - for (i = 0; conditionals[i].sequence; i++) { + for (i = 0; conditionals[i].sequence != TERMINATOR; i++) { switch (conditionals[i].sequence) { case MON_GLYPH: - corpsetile++; - swallowbase++; + corpsetile += 2; + swallowbase += 2; break; case OBJ_GLYPH: if (conditionals[i].predecessor < CORPSE) @@ -313,116 +332,238 @@ init_tilemap() } } - condnum = tilenum = 0; +#ifdef OBTAIN_TILEMAP + tilemap_file = fopen("tilemappings.lst", "w"); +#endif + tilenum = 0; for (i = 0; i < NUMMONS; i++) { - tilemap[GLYPH_MON_OFF + i] = tilenum; - tilemap[GLYPH_PET_OFF + i] = tilenum; - tilemap[GLYPH_DETECT_OFF + i] = tilenum; - tilemap[GLYPH_RIDDEN_OFF + i] = tilenum; - tilemap[GLYPH_BODY_OFF + i] = corpsetile; +#ifdef OBTAIN_TILEMAP + char buf[256]; +#endif + tilemap[GLYPH_MON_OFF + i].tilenum = tilenum; + tilemap[GLYPH_PET_OFF + i].tilenum = tilenum; + tilemap[GLYPH_DETECT_OFF + i].tilenum = tilenum; + tilemap[GLYPH_RIDDEN_OFF + i].tilenum = tilenum; + tilemap[GLYPH_BODY_OFF + i].tilenum = corpsetile; j = GLYPH_SWALLOW_OFF + 8 * i; - tilemap[j] = swallowbase; - tilemap[j + 1] = swallowbase + 1; - tilemap[j + 2] = swallowbase + 2; - tilemap[j + 3] = swallowbase + 3; - tilemap[j + 4] = swallowbase + 4; - tilemap[j + 5] = swallowbase + 5; - tilemap[j + 6] = swallowbase + 6; - tilemap[j + 7] = swallowbase + 7; - tilenum++; - while (conditionals[condnum].sequence == MON_GLYPH - && conditionals[condnum].predecessor == i) { - condnum++; - tilenum++; + tilemap[j].tilenum = swallowbase; + tilemap[j + 1].tilenum = swallowbase + 1; + tilemap[j + 2].tilenum = swallowbase + 2; + tilemap[j + 3].tilenum = swallowbase + 3; + tilemap[j + 4].tilenum = swallowbase + 4; + tilemap[j + 5].tilenum = swallowbase + 5; + tilemap[j + 6].tilenum = swallowbase + 6; + tilemap[j + 7].tilenum = swallowbase + 7; +#ifdef OBTAIN_TILEMAP + Sprintf(buf, "%s (%d)", tilename(MON_GLYPH, file_entry, 0), file_entry); + Sprintf(tilemap[GLYPH_MON_OFF + i].name, + "%s (%d)", buf, i); + Sprintf(tilemap[GLYPH_PET_OFF + i].name, + "%s %s (%d)", buf, "pet", i); + Sprintf(tilemap[GLYPH_DETECT_OFF + i].name, + "%s %s (%d)", buf, "detected", i); + Sprintf(tilemap[GLYPH_RIDDEN_OFF + i].name, + "%s %s (%d)", buf, "ridden", i); + Sprintf(tilemap[GLYPH_BODY_OFF + i].name, + "%s %s (%d)", buf, "corpse", i); + Sprintf(tilemap[j + 0].name, "%s swallow0 (%d)", buf, i); + Sprintf(tilemap[j + 1].name, "%s swallow1 (%d)", buf, i); + Sprintf(tilemap[j + 2].name, "%s swallow2 (%d)", buf, i); + Sprintf(tilemap[j + 3].name, "%s swallow3 (%d)", buf, i); + Sprintf(tilemap[j + 4].name, "%s swallow4 (%d)", buf, i); + Sprintf(tilemap[j + 5].name, "%s swallow5 (%d)", buf, i); + Sprintf(tilemap[j + 6].name, "%s swallow6 (%d)", buf, i); + Sprintf(tilemap[j + 7].name, "%s swallow7 (%d)", buf, i); +#endif + for (condnum = 0; conditionals[condnum].sequence != -1; condnum++) { + if (conditionals[condnum].sequence == MON_GLYPH + && conditionals[condnum].predecessor == i) { + tilenum += 2; + file_entry += 2; +#ifdef OBTAIN_TILEMAP + Fprintf(tilemap_file, "skipping monst %s (%d)\n", + tilename(MON_GLYPH, file_entry, 0), file_entry); +#endif + } } + tilenum += 2; /* male + female tiles for each */ + file_entry += 2; } - tilemap[GLYPH_INVISIBLE] = tilenum++; + tilemap[GLYPH_INVISIBLE].tilenum = tilenum++; + file_entry++; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_INVISIBLE].name, + "%s (%d)", "invisible mon", file_entry); +#endif lastmontile = tilenum - 1; + file_entry = 0; for (i = 0; i < NUM_OBJECTS; i++) { - tilemap[GLYPH_OBJ_OFF + i] = tilenum; - tilenum++; - while (conditionals[condnum].sequence == OBJ_GLYPH - && conditionals[condnum].predecessor == i) { - condnum++; - tilenum++; + tilemap[GLYPH_OBJ_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_OBJ_OFF + i].name, "%s (%d)", + tilename(OBJ_GLYPH, file_entry, 0), file_entry); +#endif + for (condnum = 0; conditionals[condnum].sequence != -1; condnum++) { + if (conditionals[condnum].sequence == OBJ_GLYPH + && conditionals[condnum].predecessor == i) { + tilenum++; + file_entry++; +#ifdef OBTAIN_TILEMAP + Fprintf(tilemap_file, "skipping obj %s (%d)\n", + tilename(OBJ_GLYPH, file_entry, 0), file_entry); +#endif + } } + tilenum++; + file_entry++; } lastobjtile = tilenum - 1; + file_entry = 0; for (i = 0; i < (MAXPCHARS - MAXEXPCHARS); i++) { - tilemap[GLYPH_CMAP_OFF + i] = tilenum; + tilemap[GLYPH_CMAP_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_CMAP_OFF + i].name, "cmap %s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif tilenum++; - while (conditionals[condnum].sequence == OTH_GLYPH - && conditionals[condnum].predecessor == i) { - condnum++; - tilenum++; + file_entry++; + for (condnum = 0; conditionals[condnum].sequence != -1; condnum++) { + if (conditionals[condnum].sequence == OTH_GLYPH + && conditionals[condnum].predecessor == i) { + tilenum++; + file_entry++; +#ifdef OBTAIN_TILEMAP + Fprintf(tilemap_file, "skipping cmap %s (%d)\n", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif + } } } for (i = 0; i < (MAXEXPCHARS * EXPL_MAX); i++) { - tilemap[GLYPH_EXPLODE_OFF + i] = tilenum; - tilenum++; - while (conditionals[condnum].sequence == OTH_GLYPH - && conditionals[condnum].predecessor == (i + MAXPCHARS)) { - condnum++; - tilenum++; + tilemap[GLYPH_EXPLODE_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_EXPLODE_OFF + i].name, "explosion %s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif + for (condnum = 0; conditionals[condnum].sequence != -1; condnum++) { + if (conditionals[condnum].sequence == OTH_GLYPH + && conditionals[condnum].predecessor == i + MAXPCHARS) { + tilenum++; + file_entry++; +#ifdef OBTAIN_TILEMAP + Fprintf(tilemap_file, "skipping explosion %s (%d)\n", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif + } } + tilenum++; + file_entry++; } for (i = 0; i < NUM_ZAP << 2; i++) { - tilemap[GLYPH_ZAP_OFF + i] = tilenum; + tilemap[GLYPH_ZAP_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_ZAP_OFF + i].name, "zap %s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif tilenum++; - while (conditionals[condnum].sequence == OTH_GLYPH + file_entry++; + for (condnum = 0; conditionals[condnum].sequence != -1; condnum++) { + if (conditionals[condnum].sequence == OTH_GLYPH && conditionals[condnum].predecessor == (i + MAXEXPCHARS)) { - condnum++; - tilenum++; +#ifdef OBTAIN_TILEMAP + Fprintf(tilemap_file, "skipping zap %s (%d)\n", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif + file_entry++; + tilenum++; + } } } for (i = 0; i < WARNCOUNT; i++) { - tilemap[GLYPH_WARNING_OFF + i] = tilenum; + tilemap[GLYPH_WARNING_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_WARNING_OFF + i].name, "%s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif tilenum++; + file_entry++; } for (i = 0; i < 1; i++) { - tilemap[GLYPH_UNEXPLORED_OFF + i] = tilenum; + tilemap[GLYPH_UNEXPLORED_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_UNEXPLORED_OFF + i].name, "unexplored %s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif tilenum++; + file_entry++; } for (i = 0; i < 1; i++) { - tilemap[GLYPH_NOTHING + i] = tilenum; + tilemap[GLYPH_NOTHING + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_NOTHING + i].name, " nothing %s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif tilenum++; + file_entry++; } #ifndef STATUES_LOOK_LIKE_MONSTERS /* statue patch: statues still use the same glyph as in vanilla */ for (i = 0; i < NUMMONS; i++) { - tilemap[GLYPH_STATUE_OFF + i] = tilemap[GLYPH_OBJ_OFF + STATUE]; + tilemap[GLYPH_STATUE_OFF + i].tilenum = tilemap[GLYPH_OBJ_OFF + STATUE]; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_STATUE_OFF + i].name, "%s (%d)", + tilename(OTH_GLYPH, file_entry, 0), file_entry); +#endif } #endif lastothtile = tilenum - 1; #ifdef STATUES_LOOK_LIKE_MONSTERS - /* skip over the substitutes to get to the grayscale statues */ + file_entry = 0; + /* fast-forward over the substitutes to grayscale statues loc */ for (i = 0; i < SIZE(substitutes); i++) { tilenum += substitutes[i].last_glyph - substitutes[i].first_glyph + 1; } /* statue patch: statues look more like the monster */ - condnum = 0; /* doing monsters again, so reset */ for (i = 0; i < NUMMONS; i++) { - tilemap[GLYPH_STATUE_OFF + i] = tilenum; - tilenum++; - while (conditionals[condnum].sequence == MON_GLYPH - && conditionals[condnum].predecessor == i) { - condnum++; - tilenum++; + tilemap[GLYPH_STATUE_OFF + i].tilenum = tilenum; +#ifdef OBTAIN_TILEMAP + Sprintf(tilemap[GLYPH_STATUE_OFF + i].name, "statue of %s (%d)", + tilename(MON_GLYPH, file_entry, 0), file_entry); +#endif + for (condnum = 0; conditionals[condnum].sequence != -1; condnum++) { + if (conditionals[condnum].sequence == MON_GLYPH + && conditionals[condnum].predecessor == i) { + file_entry += 2; /* skip female tile too */ + tilenum += 2; +#ifdef OBTAIN_TILEMAP + Fprintf(tilemap_file, "skipping statue of %s (%d)\n", + tilename(MON_GLYPH, file_entry, 0), file_entry); +#endif + } } + tilenum += 2; + file_entry += 2; + } + laststatuetile = tilenum - 2; +#endif /* STATUES_LOOK_LIKE_MONSTERS */ +#ifdef OBTAIN_TILEMAP + for (i = 0; i < MAX_GLYPH; ++i) { + Fprintf(tilemap_file, "[%04d] [%04d] %-80s\n", + i, tilemap[i].tilenum, tilemap[i].name); } - laststatuetile = tilenum - 1; + fclose(tilemap_file); #endif } @@ -451,8 +592,8 @@ FILE *ofp; Fprintf(ofp, "short std_tiles%d[] = { ", span); for (k = substitutes[i].first_glyph; k < substitutes[i].last_glyph; k++) - Fprintf(ofp, "%d, ", tilemap[k]); - Fprintf(ofp, "%d };\n", tilemap[substitutes[i].last_glyph]); + Fprintf(ofp, "%d, ", tilemap[k].tilenum); + Fprintf(ofp, "%d };\n", tilemap[substitutes[i].last_glyph].tilenum); } } @@ -503,6 +644,11 @@ FILE *ofp; Fprintf(ofp, "\nint total_tiles_used = %d;\n", start); } +#ifdef OBTAIN_TILEMAP +extern void NDECL(monst_globals_init); +extern void NDECL(objects_globals_init); +#endif + int main() { @@ -510,6 +656,11 @@ main() char filename[30]; FILE *ofp; +#ifdef OBTAIN_TILEMAP + objects_globals_init(); + monst_globals_init(); +#endif + init_tilemap(); /* @@ -526,7 +677,7 @@ main() Fprintf(ofp, "\nshort glyph2tile[MAX_GLYPH] = {\n"); for (i = 0; i < MAX_GLYPH; i++) { - Fprintf(ofp, " %4d,", tilemap[i]); + Fprintf(ofp, " %4d,", tilemap[i].tilenum); if ((i % 12) == 11 || i == MAX_GLYPH - 1) Fprintf(ofp, "\n"); } @@ -654,17 +805,20 @@ struct { }; boolean -acceptable_tilename(idx, encountered, expected) -int idx; +acceptable_tilename(glyph_set, idx, encountered, expected) +int glyph_set, idx; const char *encountered, *expected; { - if (idx >= 0 && idx < SIZE(altlabels)) { - if (!strcmp(altlabels[idx].expectedlabel, expected)) { - if (!strcmp(altlabels[idx].betterlabel, encountered)) - return TRUE; + if (glyph_set == OTH_GLYPH) { + if (idx >= 0 && idx < SIZE(altlabels)) { + if (!strcmp(altlabels[idx].expectedlabel, expected)) { + if (!strcmp(altlabels[idx].betterlabel, encountered)) + return TRUE; + } } + return FALSE; } - return FALSE; + return TRUE; } /*tilemap.c*/ diff --git a/win/share/tiletext.c b/win/share/tiletext.c index d078c4e37..0970e0e14 100644 --- a/win/share/tiletext.c +++ b/win/share/tiletext.c @@ -26,13 +26,15 @@ static const char *text_sets[] = { "monsters.txt", "objects.txt", "other.txt" }; #endif -extern const char *FDECL(tilename, (int, int)); -extern boolean FDECL(acceptable_tilename, (int, const char *, const char *)); +extern const char *FDECL(tilename, (int, int, int)); +extern boolean FDECL(acceptable_tilename, (int, int, const char *, const char *)); static void FDECL(read_text_colormap, (FILE *)); static boolean FDECL(write_text_colormap, (FILE *)); static boolean FDECL(read_txttile, (FILE *, pixel (*)[TILE_X])); static void FDECL(write_txttile, (FILE *, pixel (*)[TILE_X])); +enum { MONSTER_SET, OBJECT_SET, OTHER_SET}; + /* Ugh. DICE doesn't like %[A-Z], so we have to spell it out... */ #define FORMAT_STRING \ "%[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.] = " \ @@ -108,29 +110,37 @@ read_txttile(txtfile, pixels) FILE *txtfile; pixel (*pixels)[TILE_X]; { - int ph, i, j, k; - char buf[BUFSZ], ttype[BUFSZ]; + int ph, i, j, k, reslt; + char buf[BUFSZ], ttype[BUFSZ], gend[BUFSZ]; const char *p; char c[2]; + static int gidx = 0; - if (fscanf(txtfile, "# %s %d (%[^)])", ttype, &i, buf) <= 0) + gend[0] = '\0'; + if (tile_set == MONSTER_SET) + reslt = fscanf(txtfile, "# %s %d (%[^,],%[^)])", ttype, &i, buf, gend); + else + reslt = fscanf(txtfile, "# %s %d (%[^)])", ttype, &i, buf); + if (reslt <= 0) return FALSE; + if (tile_set == MONSTER_SET && gend[0] == 'f') + gidx = 1; + ph = strcmp(ttype, "placeholder") == 0; if (!ph && strcmp(ttype, "tile") != 0) Fprintf(stderr, "Keyword \"%s\" unexpected for entry %d\n", ttype, i); - if (tile_set != 0) { - /* check tile name, but not relative number, which will - * change when tiles are added - */ - p = tilename(tile_set, tile_set_indx); - if (p && strcmp(p, buf) && !acceptable_tilename(tile_set_indx,buf,p)) { - Fprintf(stderr, "warning: for tile %d (numbered %d) of %s,\n", - tile_set_indx, i, text_sets[tile_set - 1]); - Fprintf(stderr, "\tfound '%s' while expecting '%s'\n", buf, p); - } + /* check tile name, but not relative number, which will + * change when tiles are added + */ + p = tilename(tile_set, tile_set_indx, gidx); + if (p && strcmp(p, buf) + && !acceptable_tilename(tile_set, tile_set_indx, buf, p)) { + Fprintf(stderr, "warning: for tile %d (numbered %d) of %s,\n", + tile_set_indx, i, text_sets[tile_set]); + Fprintf(stderr, "\tfound '%s' while expecting '%s'\n", buf, p); } tile_set_indx++; @@ -196,21 +206,26 @@ pixel (*pixels)[TILE_X]; { const char *p; const char *type; - int i, j, k; + int i = 0, j, k; if (memcmp(placeholder, pixels, sizeof(placeholder)) == 0) type = "placeholder"; else type = "tile"; - if (tile_set == 0) - Fprintf(txtfile, "# %s %d (unknown)\n", type, tile_set_indx); - else { - p = tilename(tile_set, tile_set_indx); - if (p) - Fprintf(txtfile, "# %s %d (%s)\n", type, tile_set_indx, p); - else - Fprintf(txtfile, "# %s %d (null)\n", type, tile_set_indx); + if (tile_set == MONSTER_SET) { + for (i = 0; i < 2; ++i) { + Fprintf(txtfile, "# %s %d (unknown,%s)\n", type, tile_set_indx, + i ? "female" : "male"); + if (i == 0) + tile_set_indx++; + } + } else { + p = tilename(tile_set, tile_set_indx, i); + if (p) + Fprintf(txtfile, "# %s %d (%s)\n", type, tile_set_indx, p); + else + Fprintf(txtfile, "# %s %d (null)\n", type, tile_set_indx); } tile_set_indx++; @@ -302,7 +317,7 @@ const char *type; tile_set = 0; for (i = 0; i < SIZE(text_sets); i++) { if (!strcmp(p, text_sets[i])) - tile_set = i + 1; + tile_set = i; } tile_set_indx = 0; diff --git a/win/shim/winshim.c b/win/shim/winshim.c index b37da9b11..c6e425d70 100644 --- a/win/shim/winshim.c +++ b/win/shim/winshim.c @@ -129,7 +129,7 @@ VDECLCB(shim_mark_synch,(void), "v") VDECLCB(shim_wait_synch,(void), "v") VDECLCB(shim_cliparound,(int x, int y), "vii", A2P x, A2P y) VDECLCB(shim_update_positionbar,(char *posbar), "vp", P2V posbar) -VDECLCB(shim_print_glyph,(winid w, int x, int y, int glyph, int bkglyph), "viiiii", A2P w, A2P x, A2P y, A2P glyph, A2P bkglyph) +VDECLCB(shim_print_glyph,(winid w, int x, int y, int glyph, int bkglyph, int glyphmod[NUM_GLYPHMOD]), "viiiii", A2P w, A2P x, A2P y, A2P glyph, A2P bkglyph, A2P glyphmod) VDECLCB(shim_raw_print,(const char *str), "vs", P2V str) VDECLCB(shim_raw_print_bold,(const char *str), "vs", P2V str) DECLCB(int, shim_nhgetch,(void), "i") @@ -311,4 +311,4 @@ EM_JS(void, local_callback, (const char *cb_name, const char *shim_name, void *r }) #endif /* __EMSCRIPTEN__ */ -#endif /* SHIM_GRAPHICS */ \ No newline at end of file +#endif /* SHIM_GRAPHICS */ diff --git a/win/tty/wintty.c b/win/tty/wintty.c index a0ebef942..c59ea8fe5 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -3415,15 +3415,15 @@ int x, y; */ void -tty_print_glyph(window, x, y, glyph, bkglyph) +tty_print_glyph(window, x, y, glyph, bkglyph, glyphmod) winid window; xchar x, y; int glyph; int bkglyph UNUSED; +unsigned *glyphmod; /* don't mark UNUSED as we need to revisit */ { - int ch; boolean inverse_on = FALSE; - int color; + int ch, color; unsigned special; HUPSKIP(); @@ -3433,8 +3433,10 @@ int bkglyph UNUSED; return; } #endif - /* map glyph to character and color */ - (void) mapglyph(glyph, &ch, &color, &special, x, y, 0); + /* get glyph ttychar, color, and special flags */ + ch = (int) glyphmod[GM_TTYCHAR]; + color = (int) glyphmod[GM_COLOR]; + special = glyphmod[GM_FLAGS]; print_vt_code2(AVTC_SELECT_WINDOW, window); diff --git a/win/win32/mhmap.c b/win/win32/mhmap.c index 34cb1a9cb..4a84e190a 100644 --- a/win/win32/mhmap.c +++ b/win/win32/mhmap.c @@ -37,8 +37,8 @@ typedef struct mswin_nethack_map_window { int map[COLNO][ROWNO]; /* glyph map */ int bkmap[COLNO][ROWNO]; /* backround glyph map */ + unsigned glyphmod[COLNO][ROWNO][NUM_GLYPHMOD]; boolean mapDirty[COLNO][ROWNO]; /* dirty flag for map */ - int mapMode; /* current map mode */ boolean bAsciiMode; /* switch ASCII/tiled mode */ boolean bFitToScreenMode; /* switch Fit map to screen mode on/off */ @@ -86,7 +86,7 @@ static void nhcoord2display(PNHMapWindow data, int x, int y, LPRECT lpOut); static void paint(PNHMapWindow data, int i, int j); static void dirtyAll(PNHMapWindow data); static void dirty(PNHMapWindow data, int i, int j); -static void setGlyph(PNHMapWindow data, int i, int j, int fg, int bg); +static void setGlyph(PNHMapWindow data, int i, int j, int fg, int bg, unsigned *glyphmod); static void clearAll(PNHMapWindow data); #if (VERSION_MAJOR < 4) && (VERSION_MINOR < 4) && (PATCHLEVEL < 2) @@ -639,7 +639,7 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) case MSNH_MSG_PRINT_GLYPH: { PMSNHMsgPrintGlyph msg_data = (PMSNHMsgPrintGlyph) lParam; setGlyph(data, msg_data->x, msg_data->y, - msg_data->glyph, msg_data->bkglyph); + msg_data->glyph, msg_data->bkglyph, msg_data->glyphmod); } break; case MSNH_MSG_CLIPAROUND: { @@ -708,8 +708,10 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) PMSNHMsgGetText msg_data = (PMSNHMsgGetText) lParam; size_t index; int col, row; +#if 0 int color; - unsigned special; + unsigned special = 0U; +#endif int mgch; index = 0; @@ -717,13 +719,14 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) for (col = 0; col < COLNO; col++) { if (index >= msg_data->max_size) break; - if (data->map[col][row] == NO_GLYPH) { + if (data->map[col][row] == NO_GLYPH) mgch = ' '; - } else { - (void) mapglyph(data->map[col][row], &mgch, &color, - &special, col, row, 0); - } - msg_data->buffer[index] = mgch; + +// } else { +// (void) mapglyph(data->map[col][row], &mgch, &color, +// &special, col, row, 0); +// } + msg_data->buffer[index] = data->glyphmod[col][row][GM_TTYCHAR]; index++; } if (index >= msg_data->max_size - 1) @@ -785,9 +788,9 @@ paintTile(PNHMapWindow data, int i, int j, RECT * rect) int glyph, bkglyph; int layer; #ifdef USE_PILEMARK - int color; - unsigned special; - int mgch; +// int color; +// unsigned special = 0U; +// int mgch; #endif layer = 0; glyph = data->map[i][j]; @@ -811,8 +814,16 @@ paintTile(PNHMapWindow data, int i, int j, RECT * rect) layer++; } +// (void) mapglyph(glyph, &mgch, &color, &special, i, j, 0); +// mgch = (int) data.glyphmod[GM_TTYCHAR]; +// color = (int) data.glyphmod[GM_COLOR]; +// special = glyphmod[GM_FLAGS]; + if ((glyph != NO_GLYPH) && (glyph != bkglyph)) { + /* rely on NetHack core helper routine */ ntile = glyph2tile[glyph]; + if (data->glyphmod[i][j][GM_FLAGS] & MG_FEMALE) + ntile++; t_x = TILEBMP_X(ntile); t_y = TILEBMP_Y(ntile); @@ -834,9 +845,9 @@ paintTile(PNHMapWindow data, int i, int j, RECT * rect) #ifdef USE_PILEMARK /* rely on NetHack core helper routine */ - (void) mapglyph(data->map[i][j], &mgch, &color, &special, - i, j, 0); - if ((glyph != NO_GLYPH) && (special & MG_PET) +// (void) mapglyph(data->map[i][j], &mgch, &color, &special, +// i, j, 0); + if ((glyph != NO_GLYPH) && (data->glyphmod[i][j][GM_FLAGS] & MG_PET) #else if ((glyph != NO_GLYPH) && glyph_is_pet(glyph) #endif @@ -859,7 +870,7 @@ paintTile(PNHMapWindow data, int i, int j, RECT * rect) DeleteDC(hdcPetMark); } #ifdef USE_PILEMARK - if ((glyph != NO_GLYPH) && (special & MG_OBJPILE) + if ((glyph != NO_GLYPH) && (data->glyphmod[i][j][GM_FLAGS] & MG_OBJPILE) && iflags.hilite_pile) { /* apply pilemark transparently over other image */ HDC hdcPileMark; @@ -893,8 +904,8 @@ paintGlyph(PNHMapWindow data, int i, int j, RECT * rect) char ch; WCHAR wch; int color; - unsigned special; - int mgch; +// unsigned special; +// int mgch; HBRUSH back_brush; COLORREF OldFg; @@ -909,11 +920,12 @@ paintGlyph(PNHMapWindow data, int i, int j, RECT * rect) OldFg = SetTextColor(hDC, nhcolor_to_RGB(color)); #else /* rely on NetHack core helper routine */ - (void) mapglyph(data->map[i][j], &mgch, &color, - &special, i, j, 0); - ch = (char) mgch; - if (((special & MG_PET) && iflags.hilite_pet) - || ((special & (MG_DETECT | MG_BW_LAVA)) +// (void) mapglyph(data->map[i][j], &mgch, &color, +// &special, i, j, 0); + ch = (char) data->glyphmod[i][j][GM_TTYCHAR]; + color = (int) data->glyphmod[i][j][GM_COLOR]; + if (((data->glyphmod[i][j][GM_FLAGS] & MG_PET) && iflags.hilite_pet) + || ((data->glyphmod[i][j][GM_FLAGS] & (MG_DETECT | MG_BW_LAVA)) && iflags.use_inverse)) { back_brush = CreateSolidBrush(nhcolor_to_RGB(CLR_GRAY)); @@ -972,13 +984,19 @@ paintGlyph(PNHMapWindow data, int i, int j, RECT * rect) } } -static void setGlyph(PNHMapWindow data, int i, int j, int fg, int bg) +static void setGlyph(PNHMapWindow data, int i, int j, int fg, int bg, unsigned *glyphmod) { - if ((data->map[i][j] != fg) || (data->bkmap[i][j] != bg)) { + int gm; + + if ((data->map[i][j] != fg) || (data->bkmap[i][j] != bg) + || data->glyphmod[i][j][GM_TTYCHAR] != glyphmod[GM_TTYCHAR] + || data->glyphmod[i][j][GM_COLOR] != glyphmod[GM_COLOR] + || data->glyphmod[i][j][GM_FLAGS] != glyphmod[GM_FLAGS]) { data->map[i][j] = fg; data->bkmap[i][j] = bg; data->mapDirty[i][j] = TRUE; - + for (gm = 0; gm < NUM_GLYPHMOD; ++gm) + data->glyphmod[i][j][gm] = glyphmod[gm]; RECT rect; nhcoord2display(data, i, j, &rect); InvalidateRect(data->hWnd, &rect, FALSE); @@ -991,6 +1009,9 @@ static void clearAll(PNHMapWindow data) for (int y = 0; y < ROWNO; y++) { data->map[x][y] = NO_GLYPH; data->bkmap[x][y] = NO_GLYPH; + data->glyphmod[x][y][GM_TTYCHAR] = ' '; + data->glyphmod[x][y][GM_COLOR] = NO_COLOR; + data->glyphmod[x][y][GM_FLAGS] = 0U; data->mapDirty[x][y] = TRUE; } InvalidateRect(data->hWnd, NULL, FALSE); diff --git a/win/win32/mhmsg.h b/win/win32/mhmsg.h index 07fe86791..431d426ca 100644 --- a/win/win32/mhmsg.h +++ b/win/win32/mhmsg.h @@ -38,6 +38,7 @@ typedef struct mswin_nhmsg_print_glyph { XCHAR_P y; int glyph; int bkglyph; + int glyphmod[NUM_GLYPHMOD]; } MSNHMsgPrintGlyph, *PMSNHMsgPrintGlyph; typedef struct mswin_nhmsg_cliparound { diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index a439deca5..efebf6160 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -1281,7 +1281,7 @@ mswin_cliparound(int x, int y) } /* -print_glyph(window, x, y, glyph, bkglyph) +print_glyph(window, x, y, glyph, bkglyph, glyphmod) -- Print the glyph at (x,y) on the given window. Glyphs are integers at the interface, mapped to whatever the window- port wants (symbol, font, color, attributes, ...there's @@ -1290,12 +1290,15 @@ print_glyph(window, x, y, glyph, bkglyph) graphical or tiled environments to allow the depiction to fall against a background consistent with the grid around x,y. + -- glyphmod provides extended information about the glyph + that window ports can use to enhance the display in + various ways. */ void -mswin_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, int glyph, int bkglyph) +mswin_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, int glyph, int bkglyph, unsigned *glyphmod) { - logDebug("mswin_print_glyph(%d, %d, %d, %d, %d)\n", wid, x, y, glyph, bkglyph); + logDebug("mswin_print_glyph(%d, %d, %d, %d, %d, %lu)\n", wid, x, y, glyph, bkglyph, glyphmod); if ((wid >= 0) && (wid < MAXWINDOWS) && (GetNHApp()->windowlist[wid].win != NULL)) { @@ -1306,6 +1309,9 @@ mswin_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, int glyph, int bkglyph) data.y = y; data.glyph = glyph; data.bkglyph = bkglyph; + data.glyphmod[GM_TTYCHAR] = glyphmod[GM_TTYCHAR]; + data.glyphmod[GM_COLOR] = glyphmod[GM_COLOR]; + data.glyphmod[GM_FLAGS] = glyphmod[GM_FLAGS]; SendMessage(GetNHApp()->windowlist[wid].win, WM_MSNH_COMMAND, (WPARAM) MSNH_MSG_PRINT_GLYPH, (LPARAM) &data); } diff --git a/win/win32/winMS.h b/win/win32/winMS.h index 17cb8d2ef..6ec4e9c3b 100644 --- a/win/win32/winMS.h +++ b/win/win32/winMS.h @@ -162,7 +162,7 @@ void mswin_update_inventory(void); void mswin_mark_synch(void); void mswin_wait_synch(void); void mswin_cliparound(int x, int y); -void mswin_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, int glyph, int bkglyph); +void mswin_print_glyph(winid wid, XCHAR_P x, XCHAR_P y, int glyph, int bkglyph, unsigned *glyphmod); void mswin_raw_print(const char *str); void mswin_raw_print_bold(const char *str); void mswin_raw_print_flush();