Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Patch of changes in NetHack++ from 3.0j

28 views
Skip to first unread message

Mike Threepoint

unread,
Dec 19, 1992, 6:59:05 PM12/19/92
to
The 2-megabytes-plus of 163 source files in nhpp3src.zip boil down to
a 172K context diff of 48 files from the NetHack 3.0j distribution
(available for ftp on linc.cis.upenn.edu). Unfortunately, it seems
Tom Proudfoot and Yuval Oren lost track of which files they changed
and didn't have or didn't know how to use "cdiff" or "diff -c" to
make context diffs like this for patching with "patch".

Rahul Dhesi's "flip" program (available on wuarchive.wustl.edu and
other fine archive sites) took care of the MS-DOS CR/LF newlines and
diff's -b switch ignored the untabbification. There were also minor
matters like renaming patchlev.h to patchlevel.h, moving the files
into their proper directories, and removing files auto-generated by
"makedefs" during the compile process (like date.h). I also checked
the unprocessed auxiliary files included in nhpp30src.zip (only
"history" seems to have been changed; I'm surprised they didn't add
their new monster types to "data.base").

These are the actual changes:

*** ../nh/include/patchlevel.h Wed Feb 6 00:32:29 1991
--- include/patchlevel.h Sun Oct 11 16:39:02 1992
***************
*** 111,114 ****
* remove more small insects
*/

! #define PATCHLEVEL 10
--- 111,120 ----
* remove more small insects
*/

! /*
! * Patch 11, October 11, 1992
! * More monsters, new classes, dog doesn't step in front of you,
! * new items.
! */
!
! #define PATCHLEVEL 11
*** ../nh/auxil/history Wed Feb 6 00:32:28 1991
--- auxil/history Thu Dec 3 23:59:00 1992
***************
*** 60,62 ****
--- 60,67 ----
David Hairston Izchak Miller Jon Watte
Timo Hakulinen Gil Neiger Tom West
Eric Hendrickson Greg Olson Gregg Wonderly
+
+
+ Tom Proudfoot and Yuval Oren made some major changes to the game, adding
+ zillions of new monsters and characters and items, making Nethack++ 3.0TH.
+ Try it out!
*** ../nh/src/apply.c Tue Feb 5 23:58:52 1991
--- src/apply.c Mon Nov 2 12:39:34 1992
***************
*** 1330,1335 ****
--- 1330,1336 ----
case CHEST:
case ICE_BOX:
case SACK:
+ case UGLY_BACKPACK:
case BAG_OF_HOLDING:
use_container(obj, 1); break;
case PICK_AXE:
***************
*** 1382,1387 ****
--- 1383,1403 ----
case STETHOSCOPE:
res = 0;
use_stethoscope(obj);
+ break;
+ case JAW_TRAP:
+ You("carefully set the bear trap!");
+ (void) maketrap(u.ux, u.uy, 3);
+ useup(obj);
+ break;
+ case SLEEP_TRAP:
+ You("carefully set the sleep trap!");
+ (void) maketrap(u.ux, u.uy, 9);
+ useup(obj);
+ break;
+ case LAND_MINE:
+ You("carefully set the land mine!");
+ (void) maketrap(u.ux, u.uy, 18);
+ useup(obj);
break;
case FIGURINE:
You("set the figurine on the ground and it transforms.");
*** ../nh/src/artifact.c Tue Feb 5 23:58:52 1991
--- src/artifact.c Mon Oct 26 22:30:20 1992
***************
*** 51,64 ****
{ TWO_HANDED_SWORD, "Orcrist", SPFX_DFLAG2, M2_ORC,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 'E' },

#ifdef TOLKIEN
! { ELVEN_DAGGER, "Sting", (SPFX_WARN | SPFX_DFLAG2), M2_ORC,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },
#else
! { DAGGER, "Sting", (SPFX_WARN | SPFX_DFLAG2), M2_ORC,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },
#endif

{ LONG_SWORD, "Frost Brand", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
{ 0, AD_COLD, 5, 0 }, { 0, AD_COLD, 0, 0 }, A_NEUTRAL, 0 },

--- 51,71 ----
{ TWO_HANDED_SWORD, "Orcrist", SPFX_DFLAG2, M2_ORC,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 'E' },

+
#ifdef TOLKIEN
! { ELVEN_DAGGER, "Sting", (SPFX_WARN | SPFX_DCLAS), S_SPIDER,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },
#else
! { DAGGER, "Sting", (SPFX_WARN | SPFX_DCLAS), S_SPIDER,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },
#endif

+ { AXE, "Icebiter", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
+ { 0, AD_COLD, 5, 20}, NO_ATTK, A_LAW, 0 },
+
+ { AXE, "Firebiter", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
+ { 0, AD_FIRE, 5, 20 }, NO_ATTK, A_LAW, 0 },
+
{ LONG_SWORD, "Frost Brand", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0,
{ 0, AD_COLD, 5, 0 }, { 0, AD_COLD, 0, 0 }, A_NEUTRAL, 0 },

***************
*** 70,75 ****
--- 77,88 ----
SPFX_DRLI), 0,
{ 0, AD_DRLI, 5, 2 }, { 0, AD_DRLI, 0, 0 }, A_CHAOS, 0 },

+ { LONG_SWORD, "Soulthief", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN | SPFX_DRLI), 0,
+ { 0, AD_DRLI, 3, 3 }, { 0, AD_DRLI, 0, 0 }, A_CHAOS, 0 },
+
+ { LONG_SWORD, "Equalizer", (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN | SPFX_WARN), 0,
+ { 0, AD_DRLI, 3, 3 }, { 0, AD_DRLI, 0, 0 }, A_NEUTRAL, 0 },
+
{ LONG_SWORD, "Sunsword", (SPFX_RESTR | SPFX_DFLAG2), M2_UNDEAD,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },

***************
*** 79,84 ****
--- 92,115 ----
{ LONG_SWORD, "Demonbane", (SPFX_RESTR | SPFX_DFLAG2), M2_DEMON,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },

+ { LONG_SWORD, "Kopkiller", (SPFX_RESTR | SPFX_DCLAS), S_KOP,
+ { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_CHAOS, 0 },
+
+ { LONG_SWORD, "Deathsword", (SPFX_RESTR | SPFX_DCLAS), S_HUMAN,
+ { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_CHAOS, 0 },
+
+ { LONG_SWORD, "Fungisword", (SPFX_RESTR | SPFX_DCLAS), S_FUNGUS,
+ { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_NEUTRAL, 0 },
+
+ { BULLWHIP, "Liontamer", (SPFX_RESTR | SPFX_DCLAS), S_FELINE,
+ { 0, AD_PHYS, 5, 15 }, NO_ATTK, A_LAW, 'Z' },
+
+ { DIRK, "Dirk", 0, 0,
+ { 0, AD_PHYS, 0, 5 }, NO_ATTK, A_LAW, 0 },
+
+ { TWO_HANDED_SWORD, "Elfrist", SPFX_DFLAG2, M2_ELF,
+ { 0, AD_PHYS, 5, 0 }, NO_ATTK, A_CHAOS, 0 },
+
/* A silver weapon would be appropriate, if we had one. */
{ LONG_SWORD, "Werebane", (SPFX_RESTR | SPFX_DFLAG2), M2_WERE,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },
***************
*** 86,91 ****
--- 117,131 ----
{ LONG_SWORD, "Giantslayer", (SPFX_RESTR | SPFX_DFLAG2), M2_GIANT,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_NEUTRAL, 0 },

+ { SCIMITAR, "Diplomat", (SPFX_RESTR | SPFX_DFLAG2), M2_PNAME,
+ { 0, AD_PHYS, 10, 25 }, NO_ATTK, A_CHAOS, 0 },
+
+ { HALBERD, "Silencer", (SPFX_RESTR | SPFX_DFLAG2), M2_FEM,
+ { 0, AD_PHYS, 5, 10 }, NO_ATTK, A_CHAOS, 0 },
+
+ { CLUB, "Petslayer", (SPFX_RESTR | SPFX_DFLAG2), M2_DOMESTIC,
+ { 0, AD_PHYS, 5, 10 }, NO_ATTK, A_NEUTRAL, 'Z' },
+
/* Another interesting weapon would be the dwarven hammer or axe with the
* boomerang-like power of returning to the wielder's hand, if the code
* were written to add such an ability.
***************
*** 98,103 ****
--- 138,144 ----

{ MORNING_STAR, "Trollsbane", (SPFX_RESTR | SPFX_DCLAS), S_TROLL,
{ 0, AD_PHYS, 5, 0 }, NO_ATTK, A_LAW, 0 },
+

/* ARRAY TERMINATOR */
{ 0, "", 0, 0, NO_ATTK, NO_ATTK, 0, 0 }
*** ../nh/src/attrib.c Thu Apr 12 11:38:19 1990
--- src/attrib.c Thu Oct 15 21:11:04 1992
***************
*** 46,51 ****
--- 46,54 ----
{ 15, &(Warning), "sensitive", "" },
{ 0, 0, 0, 0 } },

+ d_abil[] = { { 1, &(HPoison_resistance), "", "" },
+ { 0, 0, 0, 0 } },
+
e_abil[] = { { 1, &(Fast), "", "" },
{ 1, &(HSee_invisible), "", "" },
{ 1, &(Searching), "", "" },
***************
*** 52,57 ****
--- 55,69 ----
{ 1, &(HSleep_resistance), "", "" },
{ 0, 0, 0, 0 } },

+ f_abil[] = { { 1, &(HFire_resistance), "", "" },
+ { 10, &(Searching), "perceptive", "" },
+ { 0, 0, 0, 0 } },
+
+ g_abil[] = { { 1, &(Aggravate_monster), "", "" },
+ { 1, &(Fast), "", "" },
+ { 1, &(HSleep_resistance), "", "" },
+ { 0, 0, 0, 0 } },
+
h_abil[] = { { 1, &(HPoison_resistance), "", "" },
{ 15, &(Warning), "sensitive", "" },
{ 0, 0, 0, 0 } },
***************
*** 59,64 ****
--- 71,90 ----
k_abil[] = { { 7, &(Fast), "quick", "slow" },
{ 0, 0, 0, 0 } },

+ l_abil[] = { { 1, &(Searching), "", "" },
+ { 0, 0, 0, 0 } },
+
+ m_abil[] = { { 7, &(Stealth), "stealthy", "" },
+ { 0, 0, 0, 0 } },
+
+ n_abil[] = { { 1, &(Stealth), "", "" },
+ { 3, &(HInvis), "hidden", "" },
+ { 0, 0, 0, 0 } },
+
+ o_abil[] = { { 1, &(Searching), "", "" },
+ { 10, &(Warning), "sensitive", "" },
+ { 0, 0, 0, 0 } },
+
p_abil[] = { { 15, &(Warning), "sensitive", "" },
{ 20, &(HFire_resistance), "cool", "warmer" },
{ 0, 0, 0, 0 } },
***************
*** 75,80 ****
--- 101,110 ----
{ 20, &(HPoison_resistance), "hardy", "" },
{ 0, 0, 0, 0 } },

+ u_abil[] = { { 1, &(HPoison_resistance), "", "" },
+ { 7, &(HCold_resistance), "warm", "cooler" },
+ { 0, 0, 0, 0 } },
+
v_abil[] = { { 1, &(HCold_resistance), "", "" },
{ 1, &(Stealth), "", "" },
{ 7, &(Fast), "quick", "slow" },
***************
*** 82,87 ****
--- 112,121 ----

w_abil[] = { { 15, &(Warning), "sensitive", "" },
{ 17, &(HTeleport_control), "controlled","uncontrolled" },
+ { 0, 0, 0, 0 } },
+
+ z_abil[] = { { 1, &(Warning), "", "" },
+ { 10, &(HPoison_resistance), "hardy", "" },
{ 0, 0, 0, 0 } };

const struct clattr {
***************
*** 109,114 ****
--- 143,152 ----
{ 30, 6, 7, 20, 30, 7 },
0, 1, 16, 10, 10, 3, c_abil },

+ d_attr = { { 7, 10, 6, 6, 14, 10 }, /* Drunk */
+ { 15, 15, 7, 15, 30, 15 },
+ 0, 0, 13, 10, 12, 1, d_abil },
+
/*
e_attr = { { 13, 13, 14, 6, 14, 6 },
*/
***************
*** 116,121 ****
--- 154,167 ----
{ 30, 10, 10, 20, 20, 10 },
10, 1, 15, 10, 11, 2, e_abil },

+ f_attr = { { 13, 7, 10, 8, 12, 12 }, /* Fireman */
+ { 20, 15, 15, 10, 20, 20 },
+ 10, 1, 16, 12, 12, 3, f_abil },
+
+ g_attr = { { 7, 14, 6, 7, 7, 5 }, /* Geek */
+ { 10, 20, 10, 10, 30, 10 },
+ 0, 0, 10, 10, 12, 1, g_abil },
+
h_attr = { { 7, 7, 13, 7, 11, 16 }, /* Healer (druid) */
{ 15, 20, 20, 15, 25, 10 },
10, 1, 13, 10, 20, 2, h_abil },
***************
*** 124,129 ****
--- 170,191 ----
{ 20, 15, 15, 10, 20, 10 },
10, 1, 16, 10, 10, 3, k_abil },

+ l_attr = { { 7, 10, 7, 10, 7, 6 }, /* Locksmith */
+ { 20, 15, 10, 30, 10, 20 },
+ 10, 0, 12, 10, 11, 2, r_abil },
+
+ m_attr = { { 7, 10, 7, 10, 7, 10 }, /* Musician (bard) */
+ { 20, 15, 10, 30, 10, 20 },
+ 10, 0, 12, 10, 11, 2, m_abil },
+
+ n_attr = { { 7, 7, 7, 15, 7, 6 }, /* Ninja */
+ { 15, 10, 10, 30, 10, 10 },
+ 10, -1, 12, 10, 14, 2, r_abil },
+
+ o_attr = { { 12, 11, 10, 13, 10, 10 }, /* Officer (cop) */
+ { 20, 15, 15, 10, 20, 10 },
+ 10, 1, 16, 10, 10, 3, o_abil },
+
p_attr = { { 7, 7, 10, 7, 7, 7 }, /* Priest (cleric) */
{ 15, 10, 30, 15, 20, 10 },
0, 0, 14, 10, 10, 2, p_abil },
***************
*** 140,145 ****
--- 202,211 ----
{ 15, 10, 10, 15, 30, 20 },
0, 0, 10, 10, 14, 1, t_abil },

+ u_attr = { { 7, 7, 13, 10, 13, 6 }, /* Undertaker */
+ { 15, 20, 20, 15, 25, 10 },
+ 10, 0, 13, 10, 16, 2, u_abil },
+
v_attr = { { 10, 7, 7, 7, 10, 7 }, /* Valkyrie (fighter) */
{ 30, 6, 7, 20, 30, 7 },
0, -1, 16, 10, 10, 3, v_abil },
***************
*** 148,153 ****
--- 214,223 ----
{ 10, 30, 10, 20, 20, 10 },
0, 0, 12, 10, 12, 1, w_abil },

+ z_attr = { { 7, 10, 10, 7, 7, 7 }, /* Zookeeper */
+ { 20, 20, 20, 10, 20, 10 },
+ 10, 1, 13, 10, 14, 2, z_abil },
+
X_attr = { { 3, 3, 3, 3, 3, 3 },
{ 20, 15, 15, 15, 20, 15 },
0, 0, 12, 10, 14, 1, 0 };
***************
*** 300,311 ****
--- 370,395 ----
break;
case 'C': attr = &c_attr;
break;
+ case 'D': attr = &d_attr;
+ break;
case 'E': attr = &e_attr;
break;
+ case 'F': attr = &f_attr;
+ break;
+ case 'G': attr = &g_attr;
+ break;
case 'H': attr = &h_attr;
break;
case 'K': attr = &k_attr;
break;
+ case 'L': attr = &l_attr;
+ break;
+ case 'M': attr = &m_attr;
+ break;
+ case 'N': attr = &n_attr;
+ break;
+ case 'O': attr = &o_attr;
+ break;
case 'P': attr = &p_attr;
break;
case 'R': attr = &r_attr;
***************
*** 314,322 ****
--- 398,410 ----
break;
case 'T': attr = &t_attr;
break;
+ case 'U': attr = &u_attr;
+ break;
case 'V': attr = &v_attr;
break;
case 'W': attr = &w_attr;
+ break;
+ case 'Z': attr = &z_attr;
break;
default: /* unknown type */
attr = &X_attr;
*** ../nh/src/decl.c Wed Apr 18 06:43:32 1990
--- src/decl.c Sun Oct 18 18:56:24 1992
***************
*** 47,52 ****
--- 47,53 ----
const char NEARDATA nul[40] = DUMMY; /* contains zeros */
char NEARDATA plname[PL_NSIZ] = DUMMY; /* player name */
char NEARDATA pl_character[PL_CSIZ] = DUMMY;
+ char NEARDATA warning_string[63] = DUMMY;

#ifdef TUTTI_FRUTTI
char NEARDATA pl_fruit[PL_FSIZ] = DUMMY;
***************
*** 303,309 ****
#ifdef GOLEMS
S_GOLEM,
#endif
! S_DEMON, S_EEL, S_LIZARD,
#ifdef WORM
S_WORM_TAIL,
#endif
--- 304,310 ----
#ifdef GOLEMS
S_GOLEM,
#endif
! S_DEMON, S_EEL, S_BADLUNCH, S_BADCOINS, S_LIZARD,
#ifdef WORM
S_WORM_TAIL,
#endif
***************
*** 335,341 ****
#ifdef GOLEMS
"golem",
#endif
! "demon", "sea monster", "lizard",
#ifdef WORM
"long worm tail",
#endif
--- 336,342 ----
#ifdef GOLEMS
"golem",
#endif
! "demon", "sea monster", "piece of food", "pile of gold", "lizard",
#ifdef WORM
"long worm tail",
#endif
*** ../nh/src/do.c Tue Feb 5 23:58:53 1991
--- src/do.c Thu Oct 22 12:02:58 1992
***************
*** 186,191 ****
--- 186,195 ----
pline("The water flow seems %ser now.",
(obj->spe<0) ? "weak" : "strong");
break;
+ case RIN_GAIN_DEXTERITY:
+ pline("The water flow seems %ser now.",
+ (obj->spe<0) ? "slow" : "fast");
+ break;
case RIN_INCREASE_DAMAGE:
pline("The water's force seems %ser now.",
(obj->spe<0) ? "small" : "great");
***************
*** 199,204 ****
--- 203,212 ----
switch(obj->otyp) { /* effects that need eyes */
case RIN_ADORNMENT:
pline("The faucets flash brightly for a moment.");
+ break;
+ case RIN_GAIN_INTELLIGENCE:
+ pline("The water flow seems %ser now.",
+ (obj->spe<0) ? "dull" : "bright");
break;
case RIN_REGENERATION:
pline("The sink looks as good as new.");
*** ../nh/src/do_wear.c Tue Feb 5 23:58:54 1991
--- src/do_wear.c Thu Oct 22 12:06:40 1992
***************
*** 219,224 ****
--- 219,227 ----
pline("Suddenly you cannot see yourself.");
}
break;
+ case LAB_COAT:
+ case EXPENSIVE_SUIT:
+ break;
default: impossible("Unknown type of cloak (%d)", uarmc->otyp);
}
return 0;
***************
*** 245,250 ****
--- 248,259 ----
pline("Suddenly you can see yourself.");
}
break;
+ case LAB_COAT:
+ pline("You feel less sterile.");
+ break;
+ case EXPENSIVE_SUIT:
+ pline("You feel cheap.");
+ break;
default: impossible("Unknown type of cloak (%d)", uarmc->otyp);
}
setworn((struct obj *)0, W_ARMC);
***************
*** 625,630 ****
--- 634,655 ----
obj->known = 1;
}
break;
+ case RIN_GAIN_INTELLIGENCE:
+ ABON(A_INT) += obj->spe;
+ flags.botl = 1;
+ if (obj->spe || objects[RIN_GAIN_INTELLIGENCE].oc_name_known) {
+ makeknown(RIN_GAIN_INTELLIGENCE);
+ obj->known = 1;
+ }
+ break;
+ case RIN_GAIN_DEXTERITY:
+ ABON(A_DEX) += obj->spe;
+ flags.botl = 1;
+ if (obj->spe || objects[RIN_GAIN_DEXTERITY].oc_name_known) {
+ makeknown(RIN_GAIN_DEXTERITY);
+ obj->known = 1;
+ }
+ break;
case RIN_INCREASE_DAMAGE:
u.udaminc += obj->spe;
break;
***************
*** 693,698 ****
--- 718,731 ----
break;
case RIN_GAIN_STRENGTH:
ABON(A_STR) -= obj->spe;
+ flags.botl = 1;
+ break;
+ case RIN_GAIN_INTELLIGENCE:
+ ABON(A_INT) -= obj->spe;
+ flags.botl = 1;
+ break;
+ case RIN_GAIN_DEXTERITY:
+ ABON(A_DEX) -= obj->spe;
flags.botl = 1;
break;
case RIN_INCREASE_DAMAGE:
*** ../nh/src/dogmove.c Tue Feb 5 23:58:54 1991
--- src/dogmove.c Sun Oct 11 03:08:52 1992
***************
*** 278,283 ****
--- 278,286 ----
for(i=0; i<cnt; i++){
nx = poss[i].x;
ny = poss[i].y;
+ /* following if statement so that dog won't step in front of you */
+ if (u.umoved && (nx == (u.ux + u.dx) && ny == (u.uy + u.dy) ) )
+ goto nxti;
#ifdef WALKIES
/* if leashed, we drag him along. */
if(dist(nx, ny) > 4 && mtmp->mleashed) continue;
*** ../nh/src/dokick.c Tue Jun 26 21:20:15 1990
--- src/dokick.c Sun Oct 11 16:04:58 1992
***************
*** 5,11 ****
#include "hack.h"
#include "eshk.h"

! #define martial() ((pl_character[0] == 'S' || pl_character[0] == 'P'))

static struct rm NEARDATA *maploc;

--- 5,11 ----
#include "hack.h"
#include "eshk.h"

! #define martial() ((pl_character[0] == 'S' || pl_character[0] == 'N' || pl_character[0] == 'P'))

static struct rm NEARDATA *maploc;

*** ../nh/src/eat.c Tue Feb 5 23:58:54 1991
--- src/eat.c Sun Oct 18 21:21:48 1992
***************
*** 494,499 ****
--- 494,500 ----
if (HConfusion > 2) make_confused(2L,FALSE);
break;
case PM_CHAMELEON:
+ case PM_GIANT_CHAMELEON:
You("feel a change coming over you.");
#ifdef POLYSELF
polyself();
***************
*** 1306,1313 ****
if(!flags.silent) SysBeep(20);
if(UseMacAlertText(128, "Stop eating ?") == 1)
#else
! pline("Stop eating? ");
! if(yn() == 'y')
#endif
{
reset_eat();
--- 1307,1314 ----
if(!flags.silent) SysBeep(20);
if(UseMacAlertText(128, "Stop eating ?") == 1)
#else
! pline("Keep eating? ");
! if(yn() == 'n')
#endif
{
reset_eat();
*** ../nh/src/end.c Tue Feb 5 23:58:55 1991
--- src/end.c Mon Dec 7 02:14:18 1992
***************
*** 255,262 ****
int see_c;
char mac_buf[80];
#endif
char c;
!
if(invent) {
#ifndef MACOS
if(taken)
--- 255,263 ----
int see_c;
char mac_buf[80];
#endif
+ char yuvalbuf[BUFSZ];
char c;
! int yuval;
if(invent) {
#ifndef MACOS
if(taken)
***************
*** 307,313 ****

if (!done_stopprint) {
#ifdef MACOS
! c = "qqynq"[UseMacAlertText(129, "Do you want to see your instrinsics ?")+1];
#else
pline("Do you want to see your intrinsics? ");
c = yn_function(ynqchars, 'y');
--- 308,314 ----

if (!done_stopprint) {
#ifdef MACOS
! c = "qqynq"[UseMacAlertText(129, "Do you want to see your intrinsics ?")+1];
#else
pline("Do you want to see your intrinsics? ");
c = yn_function(ynqchars, 'y');
***************
*** 316,321 ****
--- 317,353 ----
if (c == 'q') done_stopprint++;
}

+ /* Display number of each monster killed if requested, by Yuval */
+ if (!done_stopprint) {
+ #ifdef MACOS
+ c = "qqynq"[UseMacAlertText(129, "Do you want to see what you killed?")+1];
+ #else
+ pline("Do you want to see what you killed? ");
+ c = yn_function(ynqchars, 'y');
+ #endif
+ if (c=='y') {
+ for (yuval=0; yuval < NUMMONS; yuval++) {
+ if (mons[yuval].geno & G_UNIQ) {
+ if (u.nr_killed[yuval] == 1)
+ Sprintf(yuvalbuf, "%s", mons[yuval].mname);
+ if (u.nr_killed[yuval] > 1)
+ Sprintf(yuvalbuf, "%i of %s", u.nr_killed[yuval], mons[yuval].mname);
+ }
+ if (!(mons[yuval].geno & G_UNIQ)) {
+ if (mons[yuval].geno & G_GENOD)
+ Sprintf(yuvalbuf, "All %s", makeplural(mons[yuval].mname));
+ if (u.nr_killed[yuval] == 1)
+ Sprintf(yuvalbuf, "1 %s", mons[yuval].mname);
+ if (u.nr_killed[yuval] > 1)
+ Sprintf(yuvalbuf, "%i %s", u.nr_killed[yuval], makeplural(mons[yuval].mname));
+ }
+ if ( (u.nr_killed[yuval] != 0) || (mons[yuval].geno & G_GENOD & !(G_UNIQ)) )
+ cornline(1,yuvalbuf);
+ }
+ cornline(2,"");
+ }
+ }
+ if (c=='q') done_stopprint++;
}

/* Be careful not to call panic from here! */
*** ../nh/src/engrave.c Sat May 26 23:17:32 1990
--- src/engrave.c Tue Oct 13 21:58:06 1992
***************
*** 487,493 ****
if(type != MARK)
nomovemsg = "You finish engraving.";
if(otmp->olet != WAND_SYM && (otmp->otyp != ATHAME
! || otmp->cursed)) {
if(otmp->olet == WEAPON_SYM)
Your("%s dull.",
aobjnam(otmp, "get"));
--- 487,495 ----
if(type != MARK)
nomovemsg = "You finish engraving.";
if(otmp->olet != WAND_SYM && (otmp->otyp != ATHAME
! || otmp->cursed) &&
! (otmp->otyp !=SHARPENED_PENCIL || otmp->cursed))
! {
if(otmp->olet == WEAPON_SYM)
Your("%s dull.",
aobjnam(otmp, "get"));
*** ../nh/src/fountain.c Wed May 23 05:35:51 1990
--- src/fountain.c Mon Oct 12 20:27:56 1992
***************
*** 259,264 ****
--- 259,266 ----
if (obj->otyp == LONG_SWORD && u.ulevel >= 5 && !rn2(6)
#ifdef NAMED_ITEMS
&& !is_artifact(obj) && !exist_artifact(obj, "Excalibur")
+ && !is_artifact(obj) && !exist_artifact(obj, "Soulthief")
+ && !is_artifact(obj) && !exist_artifact(obj, "Equalizer")
#else
&& !strcmp(ONAME(obj), "Excalibur")
#endif
***************
*** 265,271 ****
) {
/* The lady of the lake acts! - Eric Backus */
/* Be *REAL* nice */
! pline("A murky hand from the depths reaches up to bless the sword.");
pline("As the hand retreats, the fountain disappears!");

#ifndef NAMED_ITEMS
--- 267,273 ----
) {
/* The lady of the lake acts! - Eric Backus */
/* Be *REAL* nice */
! pline("A slender hand from the depths reaches up to bless the sword.");
pline("As the hand retreats, the fountain disappears!");

#ifndef NAMED_ITEMS
***************
*** 272,277 ****
--- 274,284 ----
if(obj->spe < 5) obj->spe = 5;
#else
/* otherwise +rnd(10) / +5 "Super"sword */
+ if (u.ualigntyp == U_CHAOTIC)
+ obj = oname(obj, "Soulthief", 1);
+ else if (u.ualigntyp == U_NEUTRAL)
+ obj = oname(obj, "Equalizer", 1);
+ else
obj = oname(obj, "Excalibur", 1);
#endif
bless(obj);
*** ../nh/src/hack.c Tue Feb 5 23:58:55 1991
--- src/hack.c Mon Oct 12 01:02:06 1992
***************
*** 445,450 ****
--- 445,488 ----
u.uy0 = u.uy;
tmpr = &levl[x][y];

+ /* this is new */
+ if (!Confusion && !Hallucination && !Stunned && !u.uswallow) {
+ if ((!mtmp) || (Blind && !Telepat) ||
+ (mtmp->mhide && mtmp->mundetected) ||
+ (mtmp->mimic && !Protection_from_shape_changers) ) {
+ uchar tmpsymbol;
+ tmpsymbol = levl[x][y].scrsym;
+ if (!tmpsymbol || (!levl[x][y].seen))
+ tmpsymbol = ' ';
+ if (index(warning_string,(char)tmpsymbol)) {
+ pline("Warning -- are you sure? ");
+ if (yn() == 'n') {
+ flags.move = 0;
+ nomul(0);
+ return;
+ }
+ }
+ }
+ else if ( (!(mtmp->mtame && flags.safe_dog))&&
+ (!((mtmp->mpeaceful||mtmp->mtame) && flags.confirm)) &&
+ (Blind ? Telepat : (!mtmp->minvis || See_invisible)) ){
+ uchar tmpsymbol;
+ tmpsymbol = levl[x][y].scrsym;
+ if (!tmpsymbol || (!levl[x][y].seen))
+ tmpsymbol = ' ';
+ if (index(warning_string,(char)tmpsymbol)) {
+ pline("Warning -- really attack %s? ",
+ mon_nam(mtmp));
+ if (yn() == 'n') {
+ flags.move = 0;
+ nomul(0);
+ return;
+ }
+ }
+ }
+ }
+
+ /* this is not */
/* attack monster */
if(mtmp) {
nomul(0);
*** ../nh/src/lev_comp.c Mon May 28 16:18:36 1990
--- src/lev_comp.c Mon Oct 26 14:10:36 1992
***************
*** 124,129 ****
--- 124,136 ----
#endif
"zoo", ZOO,
"temple", TEMPLE,
+ "wasp hive", WASPHIVE,
+ "giant court", GIANTCOURT,
+ "leprechaun court", LEPRECOURT,
+ "bad food shop", BADFOODSHOP,
+ "real zoo", REALZOO,
+ "anthill", ANTHILL,
+ "room eleven", ROOMELEVEN,
"shop", SHOPBASE,
};

*** ../nh/src/makedefs.c Tue Feb 5 23:58:57 1991
--- src/makedefs.c Fri Oct 23 22:52:44 1992
***************
*** 482,491 ****
Printf("/*\tSCCS Id: @(#)pm.h\t3.0\t88/11/20 */\n\n");
Printf("#ifndef PM_H\n#define PM_H\n");

for(i = 0; mons[i].mlet; i++) {
Printf("\n#define\tPM_");
for(nam = c = tmpdup(mons[i].mname); *c; c++) {
! if((*c >= 'a') && (*c <= 'z')) *c -= (char)('a' - 'A');
else if(*c == ' ' || *c == '-') *c = '_';
}
Printf("%s\t%d", nam, i);
--- 482,494 ----
Printf("/*\tSCCS Id: @(#)pm.h\t3.0\t88/11/20 */\n\n");
Printf("#ifndef PM_H\n#define PM_H\n");

+ #endif
+
for(i = 0; mons[i].mlet; i++) {
Printf("\n#define\tPM_");
for(nam = c = tmpdup(mons[i].mname); *c; c++) {
! if ((*c >= 'a') && (*c <= 'z'))
! *c -= (char)('a' - 'A');
else if(*c == ' ' || *c == '-') *c = '_';
}
Printf("%s\t%d", nam, i);
*** ../nh/src/makemon.c Tue Feb 5 23:58:57 1991
--- src/makemon.c Thu Oct 29 22:23:48 1992
***************
*** 240,250 ****
# ifdef KOPS
case S_KOP: /* create Keystone Kops with cream pies to
* throw. As suggested by KAA. [MRS]
*/
! if (!rn2(4)) m_initthrow(mtmp, CREAM_PIE, 2);
if (!rn2(3)) (void)mongets(mtmp, (rn2(2)) ? CLUB : RUBBER_HOSE);
break;
#endif
case S_ORC:
if(rn2(2)) (void)mongets(mtmp, ORCISH_HELM);
#ifdef TOLKIEN
--- 240,253 ----
# ifdef KOPS
case S_KOP: /* create Keystone Kops with cream pies to
* throw. As suggested by KAA. [MRS]
+ * Pies made rarer by [Tom].
*/
! if (!rn2(10)) m_initthrow(mtmp, CREAM_PIE, 2);
if (!rn2(3)) (void)mongets(mtmp, (rn2(2)) ? CLUB : RUBBER_HOSE);
break;
#endif
+
+
case S_ORC:
if(rn2(2)) (void)mongets(mtmp, ORCISH_HELM);
#ifdef TOLKIEN
***************
*** 348,373 ****
/*
* Now the general case, ~40% chance of getting some type
* of weapon. TODO: Add more weapons types (use bigmonst());
*/
default:
! switch(rnd(12)) {
case 1:
m_initthrow(mtmp, DART, 12);
break;
! case 2:
(void) mongets(mtmp, CROSSBOW);
m_initthrow(mtmp, CROSSBOW_BOLT, 12);
break;
! case 3:
(void) mongets(mtmp, BOW);
m_initthrow(mtmp, ARROW, 12);
break;
! case 4:
! m_initthrow(mtmp, DAGGER, 3);
break;
! case 5:
(void) mongets(mtmp, AKLYS);
break;
default:
break;
}
--- 351,426 ----
/*
* Now the general case, ~40% chance of getting some type
* of weapon. TODO: Add more weapons types (use bigmonst());
+ * [Tom]- more types added.
*/
default:
! switch(rnd(75)) {
case 1:
+ case 2:
+ case 3:
m_initthrow(mtmp, DART, 12);
break;
! case 4:
! case 5:
(void) mongets(mtmp, CROSSBOW);
m_initthrow(mtmp, CROSSBOW_BOLT, 12);
break;
! case 6:
! case 7:
! case 8:
(void) mongets(mtmp, BOW);
m_initthrow(mtmp, ARROW, 12);
break;
! case 9:
! case 10:
! m_initthrow(mtmp, DAGGER, 6);
break;
! case 11:
(void) mongets(mtmp, AKLYS);
break;
+ case 12:
+ case 13:
+ case 14:
+ (void) mongets(mtmp, SPEAR);
+ break;
+ case 15:
+ m_initthrow(mtmp, SPEAR, 3);
+ break;
+ case 16:
+ case 17:
+ case 18:
+ (void) mongets(mtmp, SLING);
+ m_initthrow(mtmp, ROCK, 12);
+ break;
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ (void) mongets(mtmp, CLUB);
+ break;
+ case 23:
+ case 24:
+ m_initthrow(mtmp, JAVELIN, 5);
+ break;
+ case 25:
+ case 26:
+ (void) mongets(mtmp, AXE);
+ break;
+ case 27:
+ case 28:
+ case 29:
+ (void) mongets(mtmp, SHORT_SWORD);
+ break;
+ case 30:
+ (void) mongets(mtmp, MORNING_STAR);
+ break;
+ case 31:
+ (void) mongets(mtmp, WAR_HAMMER);
+ break;
+ case 32:
+ case 33:
+ (void) mongets(mtmp, FLAIL);
+ break;
default:
break;
}
***************
*** 582,587 ****
--- 635,650 ----
case S_EEL:
mtmp->minvis = 1;
break;
+ case S_YETI:
+ if (ptr==&mons[PM_YUVAL])
+ mtmp->msleep = 1;
+ break;
+ case S_HUMAN:
+ if (ptr==&mons[PM_TOM] || ptr==&mons[PM_BUTCH])
+ mtmp->msleep = 1;
+ break;
+ case S_BADCOINS:
+ case S_BADLUNCH:
case S_LEPRECHAUN:
mtmp->msleep = 1;
break;
***************
*** 820,826 ****
uncommon(ptr)
struct permonst *ptr;
{
! return (ptr->geno & (G_GENOD | G_NOGEN | G_UNIQ)) ||
(!Inhell ? ptr->geno & G_HELL : ptr->maligntyp > 0);
}

--- 883,889 ----
uncommon(ptr)
struct permonst *ptr;
{
! return (ptr->geno & (G_GENOD | G_NOGEN)) ||
(!Inhell ? ptr->geno & G_HELL : ptr->maligntyp > 0);
}

***************
*** 1004,1010 ****
if(!mons[first].mlet) return((struct permonst *) 0);

for(last = first; mons[last].mlet && mons[last].mlet == mlet; last++)
! if(!(mons[last].geno & (G_GENOD | G_NOGEN | G_UNIQ)))
num += mons[last].geno & G_FREQ;

if(!num) return((struct permonst *) 0);
--- 1067,1073 ----
if(!mons[first].mlet) return((struct permonst *) 0);

for(last = first; mons[last].mlet && mons[last].mlet == mlet; last++)
! if(!(mons[last].geno & (G_GENOD | G_NOGEN)))
num += mons[last].geno & G_FREQ;

if(!num) return((struct permonst *) 0);
***************
*** 1013,1019 ****
* order of strength.
*/
for(num = rnd(num); num > 0; first++)
! if(!(mons[first].geno & (G_GENOD | G_NOGEN | G_UNIQ))) { /* consider it */
/* skew towards lower value monsters at lower exp. levels */
if(adj_lev(&mons[first]) > (u.ulevel*2)) num--;
num -= mons[first].geno & G_FREQ;
--- 1076,1082 ----
* order of strength.
*/
for(num = rnd(num); num > 0; first++)
! if(!(mons[first].geno & (G_GENOD | G_NOGEN))) { /* consider it */
/* skew towards lower value monsters at lower exp. levels */
if(adj_lev(&mons[first]) > (u.ulevel*2)) num--;
num -= mons[first].geno & G_FREQ;
*** ../nh/src/mhitu.c Tue Feb 5 23:58:58 1991
--- src/mhitu.c Wed Oct 14 23:04:42 1992
***************
*** 1356,1361 ****
--- 1356,1385 ----
make_confused(HConfusion + conf, FALSE);
}
break;
+
+ case AD_TLPT:
+ if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee &&
+ !mtmp->mspec_used && rn2(5)) {
+ if(flags.verbose)
+ pline("%s's gaze teleports you!", Monnam(mtmp));
+ Your("position suddenly seems very uncertain!");
+ tele();
+ }
+ break;
+
+ case AD_BLND:
+ if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee &&
+ !mtmp->mspec_used && rn2(5)
+
+ #ifdef POLYSELF
+ && u.usym != S_YLIGHT
+ #endif
+ ) {
+ pline("%s gazes at you blindingly!", Monnam(mtmp));
+ make_blinded((long)rnd(25),FALSE);
+ }
+ break;
+
#ifdef INFERNO
case AD_STUN:
if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee &&
*** ../nh/src/mklev.c Thu May 31 11:40:29 1990
--- src/mklev.c Thu Oct 29 21:52:06 1992
***************
*** 756,762 ****
# else
if (!rn2(3))
# endif
! rogue_level = rn1(5,10);
#endif
#ifdef ORACLE
oracle_level = rn1(4,5);
--- 756,762 ----
# else
if (!rn2(3))
# endif
! rogue_level = rn1(5,12);
#endif
#ifdef ORACLE
oracle_level = rn1(4,5);
***************
*** 889,894 ****
--- 889,898 ----
#ifdef WIZARD
if(wizard && getenv("SHOPTYPE")) mkroom(SHOPBASE); else
#endif
+
+ if(dlevel == 11) mkroom(ROOMELEVEN);
+ else
+
#ifdef ORACLE
if(dlevel == oracle_level) mkroom(DELPHI);
/* It is possible that we find no good place to set up Delphi.
***************
*** 909,918 ****
--- 913,934 ----
if(dlevel > 8 && !rn2(5)) mkroom(TEMPLE);
else
#endif
+ if(dlevel > 8 && !rn2(8)) mkroom(REALZOO);
+ else
+ if(dlevel > 8 && !rn2(7)) mkroom(BADFOODSHOP);
+ else
+ if(dlevel > 8 && !rn2(7)) mkroom(ANTHILL);
+ else
if(dlevel > 9 && !rn2(5) && !(mons[PM_KILLER_BEE].geno & G_GENOD))
mkroom(BEEHIVE);
else
if(dlevel > 11 && !rn2(6)) mkroom(MORGUE);
+ else
+ if(dlevel > 13 && !rn2(5)) mkroom(WASPHIVE);
+ else
+ if(dlevel > 13 && !rn2(7)) mkroom(LEPRECOURT);
+ else
+ if(dlevel > 14 && !rn2(5)) mkroom(GIANTCOURT);
else
#ifdef ARMY
if(dlevel > 14 && !rn2(4) && !(mons[PM_SOLDIER].geno & G_GENOD))
*** ../nh/src/mkobj.c Thu May 31 21:34:46 1990
--- src/mkobj.c Tue Oct 13 22:34:18 1992
***************
*** 156,161 ****
--- 156,162 ----
case CHEST: n = 5; break;
case LARGE_BOX: n = 3; break;
case SACK:
+ case UGLY_BACKPACK:
case BAG_OF_HOLDING: n = 1; break;
default: n = 0; break;
}
***************
*** 303,308 ****
--- 304,310 ----
otmp->otrapped = !(rn2(10));
case ICE_BOX:
case SACK:
+ case UGLY_BACKPACK:
case BAG_OF_HOLDING: mkbox_cnts(otmp);
break;
case MAGIC_MARKER: otmp->spe = rn1(70,30);
*** ../nh/src/mkroom.c Tue Jun 5 10:17:54 1990
--- src/mkroom.c Thu Oct 29 21:47:42 1992
***************
*** 28,33 ****
--- 28,40 ----
#endif

static struct permonst * NDECL(morguemon);
+ static struct permonst * NDECL(waspmon);
+ static struct permonst * NDECL(giantmon);
+ static struct permonst * NDECL(lepremon);
+ static struct permonst * NDECL(badfoodmon);
+ static struct permonst * NDECL(realzoomon);
+ static struct permonst * NDECL(roomelevenmon);
+ static struct permonst * NDECL(anthillmon);
#ifdef ARMY
static struct permonst * NDECL(squadmon);
#endif
***************
*** 68,73 ****
--- 75,87 ----
#if defined(ALTARS) && defined(THEOLOGY)
case TEMPLE: mktemple(); break;
#endif
+ case WASPHIVE: mkzoo(WASPHIVE); break;
+ case GIANTCOURT: mkzoo(GIANTCOURT); break;
+ case LEPRECOURT: mkzoo(LEPRECOURT); break;
+ case BADFOODSHOP: mkzoo(BADFOODSHOP); break;
+ case REALZOO: mkzoo(REALZOO); break;
+ case ROOMELEVEN: mkzoo(ROOMELEVEN); break;
+ case ANTHILL: mkzoo(ANTHILL); break;
default: impossible("Tried to make a room of type %d.", roomtype);
}
}
***************
*** 213,221 ****
--- 227,238 ----
default:
/* make sure tx and ty are initialized */
#endif
+ case GIANTCOURT:
+ case LEPRECOURT:
case COURT:
tx = somex(sroom); ty = somey(sroom); break;
/* TODO: try to ensure the enthroned monster is an M2_PRINCE */
+ case WASPHIVE:
case BEEHIVE:
tx = sroom->lx + (sroom->hx - sroom->lx + 1)/2;
ty = sroom->ly + (sroom->hy - sroom->ly + 1)/2;
***************
*** 230,240 ****
--- 247,266 ----
mon = makemon(
#ifdef THRONES
(type == COURT) ? courtmon() :
+ (type == GIANTCOURT) ? giantmon() :
+ (type == LEPRECOURT) ? lepremon() :
#endif
#ifdef ARMY
(type == BARRACKS) ? squadmon() :
#endif
(type == MORGUE) ? morguemon() :
+ (type == WASPHIVE) ? waspmon() :
+ (type == BADFOODSHOP) ? badfoodmon() :
+ (type == REALZOO) ? realzoomon() :
+ (type == ROOMELEVEN) ? roomelevenmon() :
+ (type == ANTHILL) ?
+ (sx == tx && sy == ty ? &mons[PM_QUEEN_ANT] :
+ anthillmon() ) :
(type == BEEHIVE) ?
(sx == tx && sy == ty ? &mons[PM_QUEEN_BEE] :
&mons[PM_KILLER_BEE]) :
***************
*** 250,255 ****
--- 276,282 ----
#endif
}
switch(type) {
+ case LEPRECOURT:
case ZOO:
i = sq(dist2(sx,sy,doors[sh].x,doors[sh].y));
if(i >= goldlim) i = 5*dlevel;
***************
*** 266,271 ****
--- 293,302 ----
if(!rn2(3))
(void) mksobj_at(LUMP_OF_ROYAL_JELLY, sx, sy);
break;
+ case ROOMELEVEN:
+ case ANTHILL:
+ case REALZOO:
+ case WASPHIVE:
case BARRACKS:
if(!rn2(20)) /* the payroll and some loot */
(void) mksobj_at((rn2(3)) ? LARGE_BOX : CHEST, sx, sy);
***************
*** 273,279 ****
}
}
#ifdef THRONES
! if(type == COURT) {
levl[tx][ty].typ = THRONE;
levl[tx][ty].scrsym = THRONE_SYM;

--- 304,310 ----
}
}
#ifdef THRONES
! if(type == COURT || type == LEPRECOURT || type == GIANTCOURT) {
levl[tx][ty].typ = THRONE;
levl[tx][ty].scrsym = THRONE_SYM;

***************
*** 286,292 ****

}

! static struct permonst *
morguemon()
{
register int i = rn2(100), hd = rn2(dlevel);
--- 317,323 ----

}

! struct permonst *
morguemon()
{
register int i = rn2(100), hd = rn2(dlevel);
***************
*** 445,450 ****
--- 476,495 ----

#ifdef THRONES
struct permonst *
+ giantmon()
+ {
+ int i = rn2(60) + rn2(3*dlevel);
+ return(mkclass(S_GIANT));
+ }
+ struct permonst *
+ lepremon()
+ {
+ int i = rn2(60) + rn2(3*dlevel);
+ if (mons[PM_CROESUS].geno & G_GENOD)
+ return(mkclass(S_LEPRECHAUN));
+ else return(&mons[PM_CROESUS]);
+ }
+ struct permonst *
courtmon()
{
int i = rn2(60) + rn2(3*dlevel);
***************
*** 460,476 ****
}
#endif /* THRONES /**/

#ifdef ARMY
! #define NSTYPES (PM_CAPTAIN-PM_SOLDIER+1)

struct {
unsigned pm;
unsigned prob;
} squadprob[NSTYPES] = {
! PM_SOLDIER, 80, PM_SERGEANT, 15, PM_LIEUTENANT, 4, PM_CAPTAIN, 1
};

! static struct permonst *
squadmon() { /* return soldier types. */

register struct permonst *ptr;
--- 505,574 ----
}
#endif /* THRONES /**/

+ struct permonst *
+ realzoomon()
+ {
+ int i = rn2(60) + rn2(3*dlevel);
+ if (i > 125) return(&mons[PM_JUMBO_THE_ELEPHANT]);
+ else if (i > 100) return(&mons[PM_MUMAKIL]);
+ else if (i > 75) return(&mons[PM_ZOOKEEPER]);
+ else if (i > 60) return(&mons[PM_TIGER]);
+ else if (i > 50) return(&mons[PM_APE]);
+ else if (i > 45) return(&mons[PM_PANTHER]);
+ else if (i > 30) return(&mons[PM_LEOPARD]);
+ else if (i > 15) return(&mons[PM_JAGUAR]);
+ else return(&mons[PM_DOG]);
+ }
+
+ struct permonst *
+ roomelevenmon()
+ {
+ int i = rn2(60);
+ if (i > 50) return(&mons[PM_BUTCH]);
+ else if (i > 40) return(&mons[PM_YUVAL]);
+ else if (i > 30) return(&mons[PM_TOM]);
+ else return(mkclass(S_FUNGUS));
+ }
+
+ struct permonst *
+ anthillmon()
+ {
+ int i = rn2(60) + rn2(3*dlevel);
+ if (i > 125) return(&mons[PM_QUEEN_ANT]);
+ else if (i > 100) return(&mons[PM_SOLDIER_ANT]);
+ else if (i > 85) return(&mons[PM_BLACK_ANT]);
+ else if (i > 70) return(&mons[PM_SNOW_ANT]);
+ else if (i > 55) return(&mons[PM_FIRE_ANT]);
+ else return(&mons[PM_GIANT_ANT]);
+ }
+
+ struct permonst *
+ waspmon()
+ {
+ int i = rn2(60) + rn2(3*dlevel);
+ if (i > 100) return(&mons[PM_BLACK_WASP]);
+ else if (i > 65) return(&mons[PM_GIANT_WASP]);
+ else return(&mons[PM_YELLOW_JACKET]);
+ }
+
+ struct permonst *
+ badfoodmon()
+ {
+ int i = rn2(60) + rn2(3*dlevel);
+ return(mkclass(S_BADLUNCH));
+ }
+
#ifdef ARMY
! #define NSTYPES (PM_GENERAL-PM_SOLDIER+1)

struct {
unsigned pm;
unsigned prob;
} squadprob[NSTYPES] = {
! PM_SOLDIER, 80, PM_SERGEANT, 15, PM_LIEUTENANT, 3, PM_CAPTAIN, 1, PM_GENERAL, 1
};

! struct permonst *
squadmon() { /* return soldier types. */

register struct permonst *ptr;
*** ../nh/src/mon.c Tue Feb 5 23:58:59 1991
--- src/mon.c Fri Dec 4 17:19:54 1992
***************
*** 62,68 ****
struct obj *obj = 0;
int x = mtmp->mx, y = mtmp->my;

! switch(monsndx(mdat)) {
case PM_WHITE_UNICORN:
case PM_GRAY_UNICORN:
case PM_BLACK_UNICORN:
--- 62,92 ----
struct obj *obj = 0;
int x = mtmp->mx, y = mtmp->my;

! switch(monsndx(mdat)) { /* need prl to make it appear */
! case PM_KILLER_FOOD_RATION:
! mksobj_at(FOOD_RATION, x, y);
! prl(x,y);
! goto default_1;
!
! case PM_KILLER_TRIPE_RATION:
! mksobj_at(TRIPE_RATION, x, y);
! prl(x,y);
! goto default_1;
!
! case PM_RAVENOUS_CREAM_PIE:
! mksobj_at(CREAM_PIE, x, y);
! prl(x,y);
! goto default_1;
!
! case PM_TOM:
! (void) mksobj_at(RIN_AGGRAVATE_MONSTER, x, y);
! (void) mksobj_at(SCR_MAGIC_MAPPING, x, y);
! (void) mksobj_at(SCR_MAGIC_MAPPING, x, y);
! (void) mksobj_at(POT_HALLUCINATION, x, y);
! goto default_1;
! case PM_YUVAL:
! (void) mksobj_at(BUGLE, x, y);
! goto default_1;
case PM_WHITE_UNICORN:
case PM_GRAY_UNICORN:
case PM_BLACK_UNICORN:
***************
*** 151,156 ****
--- 175,189 ----
mtmp->mnamelth = 0;
break;
#endif
+ case PM_PILE_OF_KILLER_GOLD_COINS:
+ mkgold(rnd(200), x, y);
+ case PM_PILE_OF_CREEPING_GOLD_COINS:
+ mkgold(rnd(100), x, y);
+ case PM_GOLD_MIMIC:
+ mkgold(rnd(50), x, y);
+ case PM_PILE_OF_SILVER_COINS:
+ mkgold(rnd(25), x, y);
+ break;
default_1:
default:
if (mdat->geno & G_NOCORPSE)
***************
*** 279,285 ****
if(mtmp->mimic) continue;
if(mtmp->mspeed != MSLOW || !(moves%2)){
/* continue if the monster died fighting */
! if (Conflict && !mtmp->iswiz && mtmp->mcansee) {
/* Note: A couple of notes on conflict here.
1. Conflict does not take effect in the first round. Therefore,
A monster in a stepping into the area will get to swing at you.
--- 312,319 ----
if(mtmp->mimic) continue;
if(mtmp->mspeed != MSLOW || !(moves%2)){
/* continue if the monster died fighting */
! /* Conflict's effectiveness reduced by some... [Tom] */
! if (!rn2(3) && Conflict && !mtmp->iswiz && mtmp->mcansee) {
/* Note: A couple of notes on conflict here.
1. Conflict does not take effect in the first round. Therefore,
A monster in a stepping into the area will get to swing at you.
***************
*** 955,960 ****
--- 989,995 ----
* MAXMONNO were killed does the wrong type
*/
if(mtmp->cham) mtmp->data = mdat = &mons[PM_CHAMELEON];
+ if(mtmp->cham) mtmp->data = mdat = &mons[PM_GIANT_CHAMELEON];
if(mdat == &mons[PM_JACKALWERE])
mtmp->data = mdat = &mons[PM_WEREJACKAL];
if(mdat == &mons[PM_WOLFWERE])
***************
*** 987,993 ****

/* punish bad behaviour */
if(is_human(mdat) && !always_hostile(mdat) &&
! (monsndx(mdat) < PM_ARCHEOLOGIST || monsndx(mdat) > PM_WIZARD) &&
u.ualigntyp != U_CHAOTIC) {
HTelepat &= ~INTRINSIC;
change_luck(-2);
--- 1022,1028 ----

/* punish bad behaviour */
if(is_human(mdat) && !always_hostile(mdat) &&
! (monsndx(mdat) < PM_ARCHEOLOGIST || monsndx(mdat) > PM_ZOOKEEPER) &&
u.ualigntyp != U_CHAOTIC) {
HTelepat &= ~INTRINSIC;
change_luck(-2);
***************
*** 1113,1118 ****
--- 1148,1155 ----

for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
if (mtmp->data == &mons[PM_CHAMELEON])
+ mtmp->cham = 1;
+ if (mtmp->data == &mons[PM_GIANT_CHAMELEON])
mtmp->cham = 1;
if(mtmp->data->mlet == S_MIMIC && mtmp->msleep &&
cansee(mtmp->mx, mtmp->my)) {
*** ../nh/src/mondata.c Sun Apr 8 23:47:45 1990
--- src/mondata.c Thu Oct 15 21:50:46 1992
***************
*** 295,310 ****
--- 295,319 ----
case 'B': return &mons[PM_BARBARIAN];
case 'C': if (flags.female) return &mons[PM_CAVEWOMAN];
else return &mons[PM_CAVEMAN];
+ case 'D': return &mons[PM_DRUNK];
case 'E': return &mons[PM_ELF];
+ case 'F': return &mons[PM_FIREFIGHTER];
+ case 'G': return &mons[PM_GEEK];
case 'H': return &mons[PM_HEALER];
case 'K': return &mons[PM_KNIGHT];
+ case 'L': return &mons[PM_LOCKSMITH];
+ case 'M': return &mons[PM_MUSICIAN];
+ case 'N': return &mons[PM_NINJA];
+ case 'O': return &mons[PM_OFFICER];
case 'P': if (flags.female) return &mons[PM_PRIESTESS];
else return &mons[PM_PRIEST];
case 'R': return &mons[PM_ROGUE];
case 'S': return &mons[PM_SAMURAI];
case 'T': return &mons[PM_TOURIST];
+ case 'U': return &mons[PM_UNDERTAKER];
case 'V': return &mons[PM_VALKYRIE];
case 'W': return &mons[PM_WIZARD];
+ case 'Z': return &mons[PM_ZOOKEEPER];
default: impossible("what are you?");
return &mons[PM_HUMAN];
}
***************
*** 314,320 ****
{PM_HELL_HOUND_PUP, PM_HELL_HOUND}, {PM_KITTEN, PM_HOUSECAT},
{PM_HOUSECAT, PM_LARGE_CAT}, {PM_BABY_GRAY_DRAGON, PM_GRAY_DRAGON},
{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_SMALL_MIMIC, PM_LARGE_MIMIC}, {PM_LARGE_MIMIC, PM_GIANT_MIMIC},
{PM_BAT, PM_GIANT_BAT},
--- 323,329 ----
{PM_HELL_HOUND_PUP, PM_HELL_HOUND}, {PM_KITTEN, PM_HOUSECAT},
{PM_HOUSECAT, PM_LARGE_CAT}, {PM_BABY_GRAY_DRAGON, PM_GRAY_DRAGON},
{PM_KOBOLD, PM_LARGE_KOBOLD}, {PM_LARGE_KOBOLD, PM_KOBOLD_LORD},
! {PM_GNOME, PM_GNOME_LORD}, {PM_GNOME_LORD, PM_GNOME_PRINCE},
{PM_DWARF, PM_DWARF_LORD}, {PM_DWARF_LORD, PM_DWARF_KING},
{PM_SMALL_MIMIC, PM_LARGE_MIMIC}, {PM_LARGE_MIMIC, PM_GIANT_MIMIC},
{PM_BAT, PM_GIANT_BAT},
*** ../nh/src/monst.c Tue Jun 26 21:20:28 1990
--- src/monst.c Fri Dec 4 00:44:26 1992
***************
*** 87,92 ****
--- 87,100 ----
{ { AT_BITE, AD_FIRE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
+ { "snow ant", S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_BITE, AD_COLD, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_COLD_RES,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(CYAN) },
+ { "black ant", S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_BITE, AD_ACID, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_POIS_RES,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLACK) },
{ "giant beetle", S_ANT, 5, 6, 4, 0, 0, (G_GENO | 3),
{ { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_POIS |
***************
*** 99,104 ****
--- 107,138 ----
{ { AT_STNG, AD_DRST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_PRINCE, C(HI_LORD) },
+ { "queen ant", S_ANT, 11, 18, 3, 0, 0, (G_GENO | G_NOGEN),
+ { { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_DRST, 3, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 2, 20, 0, MS_SILENT, MZ_TINY,
+ M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_POIS_RES,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS | M2_PRINCE, C(HI_LORD) },
+ { "yellow jacket", S_ANT, 3, 18, -1, 0, 0, (G_GENO | G_LGROUP | 1),
+ { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_BUZZ, MZ_LARGE, M1_ANIMAL | M1_FLY | M1_NOHANDS |
+ M1_POIS | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
+ { "killer beetle", S_ANT, 6, 6, 4, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_POIS |
+ M1_POIS_RES, M2_HOSTILE | M2_CARNIVORE, C(ORANGE_COLORED) },
+ { "giant wasp", S_ANT, 6, 18, -1, 0, 0, (G_GENO | G_LGROUP | 1),
+ { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_BUZZ, MZ_LARGE, M1_ANIMAL | M1_FLY | M1_NOHANDS |
+ M1_POIS | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
+ { "black wasp", S_ANT, 9, 18, -1, 0, 0, (G_GENO | G_LGROUP | 2),
+ { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_BUZZ, MZ_LARGE, M1_ANIMAL | M1_FLY | M1_NOHANDS |
+ M1_POIS | M1_POIS_RES, M2_HOSTILE, C(BLACK) },
+ { "the King Bee", S_ANT, 13, 18, -1, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_STNG, AD_DRST, 1, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_BUZZ, MZ_LARGE, M1_ANIMAL | M1_FLY | M1_NOHANDS |
+ M1_NOPOLY | M1_POIS | M1_POIS_RES, M2_STALK | M2_PNAME | M2_HOSTILE |
+ M2_PRINCE, C(HI_LORD) },
/* blobs */
{ "acid blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 2),
{ { AT_NONE, AD_ACID, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 105,110 ****
--- 139,159 ----
3, 30, 0, MS_SILENT, MZ_TINY,
M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_SLEE_RES | M1_STON_RES |
M1_ACID, M2_WANDER, C(GREEN) },
+ { "red blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 1),
+ { { AT_TUCH, AD_FIRE, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_SILENT, MZ_TINY,
+ M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_STON_RES |
+ M1_ACID, M2_HOSTILE, C(RED) },
+ { "white blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 1),
+ { { AT_TUCH, AD_COLD, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_SILENT, MZ_TINY,
+ M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_STON_RES |
+ M1_ACID, M2_HOSTILE, C(WHITE) },
+ { "blue blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 1),
+ { { AT_TUCH, AD_ELEC, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_SILENT, MZ_TINY,
+ M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_ELEC_RES | M1_STON_RES |
+ M1_ACID, M2_HOSTILE, C(BLUE) },
{ "quivering blob", S_BLOB, 5, 1, 8, 0, 0, (G_GENO | 2),
{ { AT_TUCH, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 200, 0, MS_SILENT, MZ_SMALL,
***************
*** 116,121 ****
--- 165,185 ----
30, 300, 0, MS_SILENT, MZ_LARGE,
M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES |
M1_SLEE_RES, M2_WANDER | M2_HOSTILE | M2_OMNIVORE, C(CYAN) },
+ { "poisonous blob", S_BLOB, 5, 6, 8, 0, 0, (G_GENO | 1),
+ { { AT_TUCH, AD_DRST, 1, 12 }, {AT_SPIT, AD_DRST, 1, 4},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 20, 200, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_POIS,
+ M2_WANDER | M2_HOSTILE, C(HI_LORD) },
+ { "gigantic blob", S_BLOB, 10, 1, 8, 0, 0, (G_GENO | 2),
+ { { AT_ENGL, AD_DCAY, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 200, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
+ M2_WANDER | M2_HOSTILE, C(WHITE) },
+ { "The Blob", S_BLOB, 16, 1, 8, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_ENGL, AD_DCAY, 1, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 200, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
+ M2_STALK | M2_PNAME | M2_HOSTILE, C(HI_LORD) },
/* cockatrice */
{ "cockatrice", S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO | 5),
{ { AT_BITE, AD_PHYS, 1, 3 }, { AT_TUCH, AD_STON, 0, 0 },
***************
*** 123,128 ****
--- 187,198 ----
3, 30, 0, MS_HISS, MZ_SMALL,
M1_ANIMAL | M1_NOHANDS | M1_POIS_RES | M1_STON_RES,
M2_HOSTILE | M2_EGGS, C(YELLOW) },
+ { "chickatrice", S_COCKATRICE, 2, 3, 3, 15, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_BITE, AD_PHYS, 1, 3 }, { AT_TUCH, AD_STON, 0, 0 },
+ { AT_NONE, AD_STON, 0, 0 }, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_HISS, MZ_SMALL,
+ M1_ANIMAL | M1_NOHANDS | M1_POIS_RES | M1_STON_RES,
+ M2_HOSTILE | M2_EGGS, C(BROWN) },
/* dog */
{ "little dog", S_DOG, 2, 18, 6, 0, 0, (G_GENO | 1),
{ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 141,146 ****
--- 211,220 ----
{ { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
25, 250, 0, MS_BARK, MZ_SMALL,
M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
+ { "dingo", S_DOG, 0, 12, 6, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 25, 250, 0, MS_BARK, MZ_SMALL,
+ M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
{ "jackalwere", S_DOG, 2, 12, 7, 10, -7, G_NOGEN | G_NOCORPSE,
{ { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
25, 250, 0, MS_BARK, MZ_SMALL,
***************
*** 164,169 ****
--- 238,247 ----
{ { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
35, 350, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
+ { "pit bull", S_DOG, 9, 12, 4, 0, -5, (G_GENO | G_SGROUP | 2),
+ { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 35, 350, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_DOMESTIC | M2_CARNIVORE, C(HI_DOMESTIC) },
{ "hell hound pup", S_DOG, 7, 12, 4, 20, -5,
(G_HELL | G_GENO | G_SGROUP | 1),
{ { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_FIRE, 2, 6 },
***************
*** 175,181 ****
NO_ATTK, NO_ATTK, NO_ATTK, },
30, 300, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
- #ifdef CHARON
{ "Cerberus", S_DOG, 12, 10, 2, 20, -7, (G_HELL | G_UNIQ | 1),
{ { AT_BITE, AD_PHYS, 3, 6 }, { AT_BITE, AD_PHYS, 3, 6 },
{ AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
--- 253,258 ----
***************
*** 182,197 ****
50, 350, 0, MS_BARK, MZ_LARGE,
M1_NOPOLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_PNAME, C(RED) },
! #endif
/* eyes */
! { "floating eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 5),
{ { AT_NONE, AD_PLYS, 0, 70 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_SILENT, MZ_SMALL,
M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(BLUE) },
{ "freezing sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
{ { AT_EXPL, AD_COLD, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_SILENT, MZ_SMALL,
M1_FLY | M1_NOLIMBS | M1_COLD_RES, M2_HOSTILE, C(WHITE) },
/* felines */
{ "kitten", S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1),
{ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
--- 259,299 ----
50, 350, 0, MS_BARK, MZ_LARGE,
M1_NOPOLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_PNAME, C(RED) },
!
/* eyes */
! { "floating eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 4),
{ { AT_NONE, AD_PLYS, 0, 70 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_SILENT, MZ_SMALL,
M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(BLUE) },
+ { "burning eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 1),
+ { { AT_NONE, AD_FIRE, 0, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_SMALL,
+ M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(RED) },
+ { "glowing eye", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 1),
+ { { AT_GAZE, AD_BLND, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_SMALL,
+ M1_FLY | M1_NOLIMBS | M1_POIS, M2_HOSTILE, C(YELLOW) },
{ "freezing sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
{ { AT_EXPL, AD_COLD, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_SILENT, MZ_SMALL,
M1_FLY | M1_NOLIMBS | M1_COLD_RES, M2_HOSTILE, C(WHITE) },
+ { "flaming sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
+ { { AT_EXPL, AD_FIRE, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_SMALL,
+ M1_FLY | M1_NOLIMBS | M1_FIRE_RES, M2_HOSTILE, C(RED) },
+ { "bloodshot eye", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 1),
+ { { AT_GAZE, AD_STUN, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_SMALL,
+ M1_FLY | M1_NOLIMBS | M1_POIS, M2_HOSTILE, C(ORANGE_COLORED) },
+ { "blinking eye", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 1),
+ { { AT_GAZE, AD_TLPT, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_SMALL,
+ M1_FLY | M1_NOLIMBS | M1_TPORT, M2_HOSTILE, C(HI_LORD) },
+ { "beholder", S_EYE, 10, 13, 4, 0, 0, (G_GENO | 1),
+ { { AT_GAZE, AD_STUN, 0, 0 }, {AT_BITE, AD_PHYS, 3, 4}, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_SILENT, MZ_SMALL,
+ M1_FLY | M1_NOLIMBS | M1_TPORT, M2_HOSTILE, C(HI_LORD) },
+
/* felines */
{ "kitten", S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1),
{ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 210,220 ****
{ AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
! { "tiger", S_FELINE, 6, 12, 6, 0, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
{ AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK },
30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
/* gremlins */
{ "gremlin", S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
--- 312,347 ----
{ AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
! { "leopard", S_FELINE, 4, 15, 6, 0, 0, (G_GENO | 2),
! { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
! { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
! 30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
! M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
! { "panther", S_FELINE, 6, 12, 6, 0, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
{ AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK },
30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
+ { "tiger", S_FELINE, 8, 12, 6, 0, 0, (G_GENO | 2),
+ { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
+ { AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK },
+ 30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
+ { "saber-toothed cat", S_FELINE, 10, 12, 6, 0, 0, (G_GENO | 2),
+ { { AT_CLAW, AD_PHYS, 2, 3 }, { AT_CLAW, AD_PHYS, 2, 3 },
+ { AT_BITE, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK },
+ 30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
+ { "hellcat", S_FELINE, 13, 15, 6, 0, 0, (G_GENO | 1),
+ { { AT_CLAW, AD_PHYS, 2, 3 }, { AT_CLAW, AD_PHYS, 2, 3 },
+ { AT_BITE, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK },
+ 30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
+ { "Rexfelis", S_FELINE, 16, 12, 6, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_PHYS, 2, 6 },
+ { AT_BITE, AD_PHYS, 3, 12 }, NO_ATTK, NO_ATTK },
+ 30, 300, 0, MS_GROWL, MZ_LARGE, M1_HUMANOID | M1_NOPOLY,
+ M2_HOSTILE | M2_STALK | M2_PNAME | M2_CARNIVORE, C(HI_LORD) },
/* gremlins */
{ "gremlin", S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
***************
*** 221,226 ****
--- 348,358 ----
{ AT_BITE, AD_PHYS, 1, 4 }, { AT_CLAW, AD_CURS, 0, 0 }, NO_ATTK },
10, 30, 0, MS_LAUGH, MZ_SMALL,
M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, C(GREEN) },
+ { "gremlin leader", S_GREMLIN, 8, 12, 2, 25, -9, (G_GENO | 2),
+ { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
+ { AT_BITE, AD_PHYS, 1, 6 }, { AT_CLAW, AD_CURS, 0, 0 }, NO_ATTK },
+ 10, 30, 0, MS_LAUGH, MZ_SMALL,
+ M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, C(HI_LORD) },
/* humanoids */
#ifdef TOLKIEN
{ "hobbit", S_HUMANOID, 1, 9, 7, 0, 6, (G_GENO | 2),
***************
*** 227,232 ****
--- 359,377 ----
{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 200, 0, MS_HUMANOID, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, 0, C(GREEN) },
+ { "hobbit thief", S_HUMANOID, 2, 9, 7, 0, 0, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_TUCH, AD_SGLD, 0, 0 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 20, 200, 0, MS_HUMANOID, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT | M1_GREEDY, M2_HOSTILE, C(GREEN) },
+ { "hobbit bandit", S_HUMANOID, 3, 9, 7, 0, 0, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_TUCH, AD_SITM, 0, 0 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 20, 200, 0, MS_HUMANOID, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT | M1_GREEDY, M2_HOSTILE, C(GREEN) },
+ { "Bilbo", S_HUMANOID, 7, 9, 7, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_TUCH, AD_SITM, 0, 0 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 20, 200, 0, MS_HUMANOID, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT | M1_GREEDY | M1_NOPOLY,
+ M2_PRINCE | M2_HOSTILE | M2_PNAME, C(GREEN) },
#endif
{ "bugbear", S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 237,247 ****
--- 382,410 ----
30, 300, 0, MS_HUMANOID, MZ_HUMAN,
M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
M1_COLLECT, M2_DWARF | M2_STRONG, C(RED) },
+ { "huge bugbear", S_HUMANOID, 5, 9, 4, 0, -6, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 2, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 25, 250, 0, MS_GROWL, MZ_LARGE, M1_HUMANOID | M1_COLLECT,
+ M2_STRONG, C(BROWN) },
+ { "bugbear chieftain", S_HUMANOID, 7, 9, 3, 0, -6, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 2, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 25, 250, 0, MS_GROWL, MZ_LARGE, M1_HUMANOID | M1_COLLECT,
+ M2_STRONG, C(HI_LORD) },
+ { "dwarven thief", S_HUMANOID, 4, 6, 4, 10, 5, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_TUCH, AD_SITM, 0, 0 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
+ M1_COLLECT, M2_DWARF | M2_STRONG | M2_HOSTILE, C(BLUE) },
{ "dwarf lord", S_HUMANOID, 4, 6, 4, 10, 5, (G_GENO | 2),
{ { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
M1_COLLECT, M2_DWARF | M2_STRONG | M2_LORD, C(BLUE) },
+ { "duergar", S_HUMANOID, 5, 6, 4, 10, 5, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
+ M1_COLLECT, M2_DWARF | M2_HOSTILE | M2_STRONG, C(BLACK) },
{ "dwarf king", S_HUMANOID, 6, 6, 4, 20, 6, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
***************
*** 264,274 ****
--- 427,445 ----
{ "imp", S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1),
{ { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 10, 0, MS_CUSS, MZ_TINY, M1_REGEN, M2_WANDER | M2_STALK, C(RED) },
+ { "dretch", S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1),
+ { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 10, 0, MS_CUSS, MZ_TINY, M1_REGEN, M2_WANDER | M2_STALK, C(BLUE) },
{ "quasit", S_IMP, 3, 15, 2, 20, -7, (G_GENO | 2),
{ { AT_CLAW, AD_DRDX, 1, 2 }, { AT_CLAW, AD_DRDX, 1, 2 },
{ AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
20, 200, 0, MS_SILENT, MZ_SMALL,
M1_POIS_RES | M1_REGEN, M2_STALK, C(BLUE) },
+ { "rutterkin", S_IMP, 5, 15, 2, 20, -7, (G_GENO | 2),
+ { { AT_CLAW, AD_DRDX, 1, 2 }, { AT_CLAW, AD_DRDX, 1, 2 },
+ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
+ 20, 200, 0, MS_SILENT, MZ_SMALL,
+ M1_POIS_RES | M1_REGEN, M2_STALK, C(ORANGE_COLORED) },
{ "tengu", S_IMP, 6, 13, 5, 30, 7, (G_GENO | 3),
{ { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_SQAWK, MZ_SMALL,
***************
*** 279,284 ****
--- 450,460 ----
2, 20, 0, MS_SILENT, MZ_MEDIUM,
M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
M2_HOSTILE | M2_OMNIVORE, C(BLUE) },
+ { "red jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
+ { { AT_NONE, AD_FIRE, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_SILENT, MZ_MEDIUM,
+ M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(RED) },
{ "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
{ { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
2, 20, 0, MS_SILENT, MZ_MEDIUM,
***************
*** 290,295 ****
--- 466,477 ----
2, 20, 0, MS_SILENT, MZ_MEDIUM,
M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_STON_RES | M1_ACID,
M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
+ { "The Jelly That Ate Cleveland", S_JELLY, 11, 3, 8, 20, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_ENGL, AD_ACID, 4, 6 }, { AT_NONE, AD_ACID, 0, 6 },
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_SILENT, MZ_MEDIUM,
+ M1_NOPOLY | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_STON_RES | M1_ACID,
+ M2_HOSTILE | M2_PRINCE | M2_OMNIVORE | M2_PNAME, C(HI_LORD) },
/* kobolds */
{ "kobold", S_KOBOLD, 0, 6, 7, 0, -2, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 302,317 ****
{ "kobold lord", S_KOBOLD, 2, 6, 5, 0, -4, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
! M2_HOSTILE | M2_LORD, C(HI_LORD) },
{ "kobold shaman", S_KOBOLD, 1, 6, 6, 10, -4, (G_GENO | 1),
{ { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_MAGIC,
M2_HOSTILE, C(HI_ZAP) },
/* leprechauns */
{ "leprechaun", S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO | 4),
{ { AT_CLAW, AD_SGLD, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_LAUGH, MZ_TINY, M1_HUMANOID | M1_TPORT | M1_GREEDY,
M2_HOSTILE, C(GREEN) },
/* mimics */
{ "small mimic", S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
--- 484,522 ----
{ "kobold lord", S_KOBOLD, 2, 6, 5, 0, -4, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
! M2_HOSTILE | M2_PRINCE, C(HI_LORD) },
{ "kobold shaman", S_KOBOLD, 1, 6, 6, 10, -4, (G_GENO | 1),
{ { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_MAGIC,
M2_HOSTILE, C(HI_ZAP) },
+ { "kobold chieftain", S_KOBOLD, 5, 4, 5, 0, -4, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
+ M2_HOSTILE | M2_LORD, C(HI_LORD) },
+ { "Kroo the Kobold King", S_KOBOLD, 7, 4, 5, 0, -4, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT | M1_NOPOLY,
+ M2_HOSTILE | M2_PRINCE | M2_STALK | M2_PNAME, C(HI_LORD) },
+ { "Krooella the Kobold Queen", S_KOBOLD, 7, 4, 5, 0, -4, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT | M1_NOPOLY,
+ M2_HOSTILE | M2_PRINCE | M2_STALK | M2_PNAME, C(HI_LORD) },
+
/* leprechauns */
{ "leprechaun", S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO | 4),
{ { AT_CLAW, AD_SGLD, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_LAUGH, MZ_TINY, M1_HUMANOID | M1_TPORT | M1_GREEDY,
M2_HOSTILE, C(GREEN) },
+ { "leprechaun elder", S_LEPRECHAUN, 7, 25, 8, 0, 0, (G_GENO | 2),
+ { { AT_CLAW, AD_SGLD, 1, 2 }, { AT_MAGC, AD_SPEL, 0, 0}, NO_ATTK,
+ NO_ATTK, NO_ATTK }, 30, 300, 0, MS_LAUGH, MZ_TINY,
+ M1_HUMANOID | M1_TPORT | M1_MAGIC | M1_GREEDY,
+ M2_HOSTILE, C(GREEN) },
+ { "Croesus", S_LEPRECHAUN, 12, 48, 3, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_SGLD, 1, 2 }, { AT_MAGC, AD_SPEL, 0, 0}, NO_ATTK,
+ NO_ATTK, NO_ATTK }, 30, 300, 0, MS_LAUGH, MZ_TINY,
+ M1_NOPOLY | M1_HUMANOID | M1_TPORT | M1_MAGIC | M1_GREEDY,
+ M2_STALK | M2_PNAME | M2_HOSTILE, C(HI_LORD) },
/* mimics */
{ "small mimic", S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 343,348 ****
--- 548,558 ----
{ { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
M1_HUMANOID | M1_TPORT | M1_COLLECT, M2_HOSTILE | M2_FEM, C(BROWN) },
+ { "Aphrodite", S_NYMPH, 9, 15, 9, 20, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
+ { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK }, 30, 300, 0,
+ MS_SEDUCE, MZ_HUMAN, M1_HUMANOID | M1_TPORT | M1_COLLECT | M1_NOPOLY,
+ M2_HOSTILE | M2_FEM | M2_PNAME, C(HI_LORD) },
/* orcs */
{ "goblin", S_ORC, 0, 6, 6, 0, -3, (G_GENO | 2),
{ { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 353,363 ****
20, 200, 0, MS_ORC, MZ_HUMAN,
M1_HUMANOID | M1_COLLECT, M2_ORC | M2_STRONG, C(BROWN) },
/* "orc" for zombie corpses only; they don't get created at random */
! { "orc", S_ORC, 1, 9, 6, 0, -3, (G_GENO | G_NOGEN | G_LGROUP),
{ { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 150, 0, MS_ORC, MZ_HUMAN,
M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
M2_ORC | M2_HOSTILE | M2_STRONG, C(RED) },
{ "hill orc", S_ORC, 2, 9, 6, 0, -4, (G_GENO | G_LGROUP | 2),
{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 200, 0, MS_ORC, MZ_HUMAN,
--- 563,581 ----
20, 200, 0, MS_ORC, MZ_HUMAN,
M1_HUMANOID | M1_COLLECT, M2_ORC | M2_STRONG, C(BROWN) },
/* "orc" for zombie corpses only; they don't get created at random */
! { "orc", S_ORC, 1, 9, 6, 0, -3, (G_GENO | G_LGROUP | 2),
{ { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 150, 0, MS_ORC, MZ_HUMAN,
M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
M2_ORC | M2_HOSTILE | M2_STRONG, C(RED) },
+ { "goblin shaman", S_ORC, 3, 6, 6, 0, -3, (G_GENO | 2),
+ { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 10, 100, 0, MS_ORC, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT | M1_MAGIC, M2_ORC, C(GRAY) },
+ { "goblin thief", S_ORC, 2, 6, 6, 0, -3, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_TUCH, AD_SITM, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 10, 100, 0, MS_ORC, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT | M1_MAGIC, M2_ORC, C(GRAY) },
{ "hill orc", S_ORC, 2, 9, 6, 0, -4, (G_GENO | G_LGROUP | 2),
{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 200, 0, MS_ORC, MZ_HUMAN,
***************
*** 386,391 ****
--- 604,616 ----
35, 350, 0, MS_ORC, MZ_HUMAN,
M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
M2_ORC | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
+ { "Grund the Orc King", S_ORC, 9, 5, 4, 0, -5, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 2, 8 },
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 35, 350, 0, MS_ORC, MZ_HUMAN,
+ M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_NOPOLY,
+ M2_ORC | M2_STALK | M2_PNAME | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
+
/* piercers */
{ "rock piercer", S_PIERCER, 3, 1, 3, 0, 0, (G_GENO | 2),
{ { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 397,405 ****
40, 300, 0, MS_SILENT, MZ_MEDIUM,
M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
M2_HOSTILE | M2_CARNIVORE, C(CYAN) },
/* quadrupeds (generic) */
{ "rothe", S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4),
! { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 1, 3 },
{ AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(GRAY) },
--- 622,636 ----
40, 300, 0, MS_SILENT, MZ_MEDIUM,
M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
M2_HOSTILE | M2_CARNIVORE, C(CYAN) },
+ { "glass piercer", S_PIERCER, 8, 1, 0, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AT_EXPL, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 40, 300, 0, MS_SILENT, MZ_MEDIUM,
+ M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
+ M2_HOSTILE | M2_CARNIVORE, C(CYAN) },
+
/* quadrupeds (generic) */
{ "rothe", S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4),
! { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
{ AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(GRAY) },
***************
*** 410,416 ****
--- 641,668 ----
70, 500, 0, MS_SILENT, MZ_LARGE,
M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
+ { "Jumbo the Elephant", S_QUADRUPED, 15, 9, 0, 0, -2, (G_NOGEN | G_NOCORPSE | G_UNIQ),
+ { { AT_BUTT, AD_PHYS, 5, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 70, 1500, 0, MS_SILENT, MZ_HUGE,
+ M1_NOPOLY | M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
+ M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_PRINCE | M2_PNAME,
+ C(HI_LORD) },
#endif
+ { "scramper", S_QUADRUPED, 3, 9, 7, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
+ { AT_BITE, AD_LEGS, 1, 8 }, NO_ATTK, NO_ATTK },
+ 10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(BLUE) },
+ { "mangler", S_QUADRUPED, 4, 9, 7, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
+ { AT_BITE, AD_DCAY, 1, 12 }, NO_ATTK, NO_ATTK },
+ 10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
+ { "berator", S_QUADRUPED, 5, 9, 7, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
+ { AT_BITE, AD_DCAY, 1, 12 }, NO_ATTK, NO_ATTK },
+ 10, 100, 0, MS_CUSS, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(ORANGE_COLORED) },
{ "leocrotta", S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 2, 6 }, { AT_BITE, AD_PHYS, 2, 6 },
{ AT_CLAW, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
***************
*** 420,425 ****
--- 672,681 ----
{ { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
50, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(CYAN) },
+ { "bogwumpus", S_QUADRUPED, 10, 3, 2, 10, 0, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 5, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 50, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GREEN) },
{ "titanothere", S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
65, 650, 0, MS_SILENT, MZ_LARGE,
***************
*** 436,441 ****
--- 692,701 ----
{ { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
+ { "black rat", S_RODENT, 1, 12, 7, 0, 0, (G_GENO | G_LGROUP | 1),
+ { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
{ "giant rat", S_RODENT, 1, 10, 7, 0, 0, (G_GENO | G_SGROUP | 2),
{ { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
3, 30, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
***************
*** 453,458 ****
--- 713,722 ----
3, 30, 0, MS_SILENT, MZ_SMALL,
M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
M1_COLLECT, M2_HOSTILE | M2_METALLIVORE, C(GRAY) },
+ { "hellrat", S_RODENT, 7, 10, 7, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_BITE, AD_PHYS, 1, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 3, 30, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
+ M2_HOSTILE | M2_CARNIVORE, C(RED) },
/* spiders and scorpions */
{ "cave spider", S_SPIDER, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
{ { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 459,464 ****
--- 723,733 ----
5, 50, 0, MS_SILENT, MZ_TINY,
M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS_RES,
M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(GRAY) },
+ { "recluse spider", S_SPIDER, 3, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
+ { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_SILENT, MZ_TINY,
+ M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS_RES,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
{ "scorpion", S_SPIDER, 5, 15, 3, 0, 0, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
{ AT_STNG, AD_DRST, 1, 4 }, NO_ATTK, NO_ATTK },
***************
*** 470,475 ****
--- 739,756 ----
10, 100, 0, MS_SILENT, MZ_LARGE,
M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_POIS_RES,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
+ { "giant scorpion", S_SPIDER, 8, 15, 3, 0, 0, (G_GENO | 2),
+ { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
+ { AT_STNG, AD_DRST, 1, 8 }, NO_ATTK, NO_ATTK },
+ 10, 100, 0, MS_SILENT, MZ_LARGE,
+ M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(ORANGE_COLORED) },
+ { "Girtab", S_SPIDER, 15, 15, 3, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
+ { AT_STNG, AD_DRST, 1, 12 }, NO_ATTK, NO_ATTK },
+ 10, 100, 0, MS_SILENT, MZ_HUGE,
+ M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_NOPOLY,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS | M2_PNAME, C(ORANGE_COLORED) },
/* trappers, lurkers, &c. */
{ "lurker above", S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO | 2),
{ { AT_ENGL, AD_DGST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 487,502 ****
NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
M2_WANDER | M2_STRONG | M2_HERBIVORE, C(WHITE) },
! { "gray unicorn", S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 1),
{ { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
M2_WANDER | M2_STRONG | M2_HERBIVORE, C(GRAY) },
! { "black unicorn", S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 1),
{ { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
M2_WANDER | M2_STRONG | M2_HERBIVORE, C(BLACK) },
/* vortices */
{ "fog cloud", S_VORTEX, 3, 1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2),
{ { AT_ENGL, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
--- 768,794 ----
NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
M2_WANDER | M2_STRONG | M2_HERBIVORE, C(WHITE) },
! { "gray unicorn", S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 2),
{ { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
M2_WANDER | M2_STRONG | M2_HERBIVORE, C(GRAY) },
! { "black unicorn", S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 2),
{ { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
M2_WANDER | M2_STRONG | M2_HERBIVORE, C(BLACK) },
+ { "nightmare", S_UNICORN, 8, 24, 2, 70, -7, (G_GENO | 1),
+ { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 8 },
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES,
+ M2_HOSTILE | M2_STRONG | M2_HERBIVORE, C(BLACK) },
+ { "ki-rin", S_UNICORN, 8, 24, 2, 70, 7, (G_GENO | 1),
+ { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 8 },
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
+ M2_WANDER | M2_STRONG | M2_HERBIVORE, C(YELLOW) },
+
/* vortices */
{ "fog cloud", S_VORTEX, 3, 1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2),
{ { AT_ENGL, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 532,537 ****
--- 824,849 ----
M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
M2_HOSTILE, C(YELLOW) },
/* worms */
+ { "maggot", S_WORM, 0, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
+ { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_SILENT, MZ_TINY,
+ M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(WHITE) },
+ { "rot worm", S_WORM, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
+ { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_SILENT, MZ_TINY,
+ M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(GRAY) },
+ { "acid worm", S_WORM, 2, 12, 3, 0, 0, (G_GENO | G_LGROUP | 2),
+ { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_SILENT, MZ_TINY,
+ M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_ACID,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(GREEN) },
+ { "tunnel worm", S_WORM, 4, 12, 3, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_SILENT, MZ_TINY,
+ M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_THICK_HIDE,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
#ifdef WORM
{ "baby long worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
{ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 543,549 ****
25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
M2_HOSTILE | M2_CARNIVORE, C(MAGENTA) },
#ifdef WORM
! { "long worm", S_WORM, 8, 3, 5, 10, 0, (G_GENO | 2),
{ { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
50, 500, 0, MS_SILENT, MZ_GIGANTIC,
M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY,
--- 855,861 ----
25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
M2_HOSTILE | M2_CARNIVORE, C(MAGENTA) },
#ifdef WORM
! { "long worm", S_WORM, 14, 3, 5, 10, 0, (G_GENO | 2),
{ { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
50, 500, 0, MS_SILENT, MZ_GIGANTIC,
M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY,
***************
*** 558,567 ****
C(MAGENTA) },
/* xan, &c. */
{ "grid bug", S_XAN, 0, 12, 9, 0, 0,
! (G_GENO | G_SGROUP | G_NOCORPSE | 3),
{ { AT_BITE, AD_ELEC, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
C(MAGENTA) },
{ "xan", S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3),
{ { AT_STNG, AD_LEGS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_BUZZ, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS |
--- 870,894 ----
C(MAGENTA) },
/* xan, &c. */
{ "grid bug", S_XAN, 0, 12, 9, 0, 0,
! (G_GENO | G_SGROUP | G_NOCORPSE | 2),
{ { AT_BITE, AD_ELEC, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
C(MAGENTA) },
+ { "arc bug", S_XAN, 2, 12, 9, 0, 0,
+ (G_GENO | G_SGROUP | G_NOCORPSE | 2),
+ { { AT_BITE, AD_ELEC, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
+ C(BLUE) },
+ { "spark bug", S_XAN, 4, 12, 9, 0, 0,
+ (G_GENO | G_LGROUP | G_NOCORPSE | 2),
+ { { AT_BITE, AD_ELEC, 1, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
+ C(ORANGE_COLORED) },
+ { "lightning bug", S_XAN, 6, 12, 9, 0, 0,
+ (G_GENO | G_LGROUP | G_NOCORPSE | 2),
+ { { AT_BITE, AD_ELEC, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
+ C(YELLOW) },
{ "xan", S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3),
{ { AT_STNG, AD_LEGS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
30, 300, 0, MS_BUZZ, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS |
***************
*** 588,602 ****
--- 915,947 ----
{ AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
55, 550, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
+ { "cave ape", S_APE, 8, 12, 6, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
+ { AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
+ 55, 550, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
+ M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
+ { "Bigfoot", S_APE, 13, 12, 6, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
+ { AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
+ 55, 550, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID | M1_NOPOLY,
+ M2_STALK | M2_PRINCE | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
/* Bats */
{ "bat", S_BAT, 0, 22, 8, 0, 0, (G_GENO | G_SGROUP | 1),
{ { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS,
M2_WANDER | M2_CARNIVORE, C(BROWN) },
+ { "rhumbat", S_BAT, 1, 25, 6, 0, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS,
+ M2_WANDER | M2_CARNIVORE, C(YELLOW) },
{ "giant bat", S_BAT, 2, 22, 7, 0, 0, (G_GENO | 2),
{ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
3, 30, 0, MS_SQEEK, MZ_MEDIUM, M1_FLY | M1_ANIMAL | M1_NOHANDS,
M2_WANDER | M2_HOSTILE | M2_CARNIVORE, C(RED) },
+ { "mongbat", S_BAT, 3, 25, 6, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS,
+ M2_HOSTILE | M2_CARNIVORE, C(ORANGE_COLORED) },
{ "vampire bat", S_BAT, 5, 20, 6, 0, 0, (G_GENO | 2),
{ { AT_BITE, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRST, 0, 0 },
NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 603,608 ****
--- 948,958 ----
3, 20, 0, MS_SQEEK, MZ_TINY,
M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_REGEN,
M2_UNDEAD | M2_HOSTILE, C(BLACK) },
+ { "hellbat", S_BAT, 8, 36, 6, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 1, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
+ M2_HOSTILE | M2_WANDER | M2_CARNIVORE, C(RED) },
+
/* Centaurs */
{ "plains centaur", S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 1, 6 }, { AT_KICK, AD_PHYS, 1, 6 },
***************
*** 619,624 ****
--- 969,990 ----
{ AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
C(CYAN) },
+ { "centaur shaman", S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO | 1),
+ { { AT_MAGC, AD_SPEL, 1, 10 }, { AT_KICK, AD_PHYS, 1, 6 },
+ { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
+ 55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
+ C(BLUE) },
+ { "centaur prince", S_CENTAUR, 8, 20, 2, 10, -3, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 1, 10 }, { AT_KICK, AD_PHYS, 1, 6 },
+ { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
+ 55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY,
+ M2_STRONG | M2_PRINCE, C(MAGENTA) },
+ { "Silva the Centaur King", S_CENTAUR, 13, 20, 2, 10, -3, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
+ { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
+ 55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY | M1_NOPOLY,
+ M2_STRONG | M2_STALK | M2_PNAME | M2_PRINCE, C(HI_LORD) },
+
/* Dragons */
{ "baby gray dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
{ { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 728,733 ****
--- 1094,1116 ----
M1_MAGIC | M1_SEE_INVIS | M1_ACID | M1_STON_RES,
M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
C(YELLOW) },
+ { "undead dragon", S_DRAGON, 13, 9, -1, 20, -6, (G_GENO | 1),
+ { { AT_BREA, AD_DISN, 4, 10 }, { AT_BITE, AD_PHYS, 3, 8 },
+ { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
+ 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
+ M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
+ M1_MAGIC | M1_SEE_INVIS,
+ M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_UNDEAD,
+ C(BLACK) },
+ { "Tiamat", S_DRAGON, 90, 9, -1, 20, -4, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_BREA, AD_FIRE, 6, 6 }, { AT_BREA, AD_DRST, 4, 6 },
+ { AT_BREA, AD_ELEC, 4, 6 }, { AT_BREA, AD_COLD, 4, 6 },
+ { AT_BITE, AD_PHYS, 6, 10 } },
+ 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
+ M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
+ M1_MAGIC | M1_SEE_INVIS | M1_FIRE_RES | M1_NOPOLY,
+ M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE |
+ M2_PNAME | M2_STALK | M2_EGGS, C(HI_LORD) },
/* Elementals */
{ "air elemental", S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE | 1),
{ { AT_ENGL, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 775,790 ****
5, 30, 0, MS_SILENT, MZ_SMALL,
M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_POIS_RES,
M2_HOSTILE | M2_OMNIVORE, C(RED) },
/* Gnomes */
{ "gnome", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
10, 100, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, 0, C(BROWN) },
{ "gnome lord", S_GNOME, 3, 8, 4, 4, 0, (G_GENO | 2),
{ { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 120, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, M2_LORD, C(BLUE) },
! { "gnome king", S_GNOME, 5, 10, 2, 20, 0, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 150, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, M2_PRINCE, C(HI_LORD) },
--- 1158,1192 ----
5, 30, 0, MS_SILENT, MZ_SMALL,
M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_POIS_RES,
M2_HOSTILE | M2_OMNIVORE, C(RED) },
+ { "black mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
+ { { AT_NONE, AD_DRLI, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(BLACK) },
+ { "disgusting mold", S_FUNGUS, 5, 0, 9, 0, 0, (G_GENO | 1),
+ { { AT_TUCH, AD_DRCO, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_ACID | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(BLUE) },
+ { "creeping mold", S_FUNGUS, 6, 1, 9, 0, 0, (G_GENO | 1),
+ { { AT_ENGL, AD_ACID, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_ACID | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(GRAY) },
/* Gnomes */
{ "gnome", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
10, 100, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, 0, C(BROWN) },
+ { "gnome thief", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
+ { { AT_WEAP, AD_PHYS, 1, 6 }, {AT_TUCH, AD_SGLD, 0, 0 }, NO_ATTK,
+ NO_ATTK, NO_ATTK }, 10, 100, 0, MS_ORC, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT, 0, C(BROWN) },
{ "gnome lord", S_GNOME, 3, 8, 4, 4, 0, (G_GENO | 2),
{ { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 120, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, M2_LORD, C(BLUE) },
! { "gnome prince", S_GNOME, 5, 10, 2, 20, 0, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 150, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_COLLECT, M2_PRINCE, C(HI_LORD) },
***************
*** 792,797 ****
--- 1194,1205 ----
{ { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
15, 120, 0, MS_ORC, MZ_SMALL,
M1_HUMANOID | M1_MAGIC, 0, C(HI_ZAP) },
+ { "Berthold the Gnome King", S_GNOME, 8, 10, 2, 20, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 150, 0, MS_ORC, MZ_SMALL,
+ M1_HUMANOID | M1_COLLECT | M1_NOPOLY,
+ M2_STALK | M2_HOSTILE | M2_PNAME | M2_PRINCE, C(HI_LORD) },
+
#ifdef SPLITMON_1
};
#endif
***************
*** 817,823 ****
NO_ATTK, NO_ATTK, NO_ATTK },
50, 500, 0, MS_GRUNT, MZ_HUGE, M1_ANIMAL | M1_HUMANOID | M1_COLLECT,
M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
! { "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1),
{ { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(RED) },
--- 1225,1231 ----
NO_ATTK, NO_ATTK, NO_ATTK },
50, 500, 0, MS_GRUNT, MZ_HUGE, M1_ANIMAL | M1_HUMANOID | M1_COLLECT,
M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
! { "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1),
{ { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(RED) },
***************
*** 844,849 ****
--- 1252,1262 ----
NO_ATTK, NO_ATTK, NO_ATTK },
90, 900, 0, MS_SILENT, MZ_HUGE, M1_FLY | M1_HUMANOID | M1_MAGIC |
M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) },
+ { "large giant", S_GIANT, 16, 18, -3, 70, 9, 1,
+ { { AT_WEAP, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 90, 900, 0, MS_SILENT, MZ_HUGE, M1_FLY | M1_HUMANOID | M1_MAGIC |
+ M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_HOSTILE,
+ C(MAGENTA) },
{ "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN),
{ { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 },
{ AT_BUTT, AD_PHYS, 2, 8}, NO_ATTK, NO_ATTK},
***************
*** 883,888 ****
--- 1296,1305 ----
{ { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
+ { "Kop Kommissioner", S_KOP, 8, 12, 4, 20, 12, (G_GENO | G_NOGEN),
+ { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
#endif
/* Liches */
{ "lich", S_LICH, 11, 6, 0, 30, -9, (G_GENO | 1),
***************
*** 934,939 ****
--- 1351,1361 ----
NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
M1_HUMANOID | M1_POIS | M1_JEWELS,
M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) },
+ { "The Mummy", S_MUMMY, 13, 14, 3, 30, -7, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUMAN,
+ M1_HUMANOID | M1_POIS | M1_NOPOLY,
+ M2_UNDEAD | M2_HOSTILE | M2_PNAME | M2_STRONG, C(WHITE) },
/* Nagas */
{ "red naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
{ { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 940,945 ****
--- 1362,1372 ----
20, 100, 0, MS_MUMBLE, MZ_LARGE,
M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_FIRE_RES | M1_POIS_RES,
M2_STRONG, C(RED) },
+ { "blue naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
+ { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 20, 100, 0, MS_MUMBLE, MZ_LARGE,
+ M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_ELEC_RES | M1_POIS_RES,
+ M2_STRONG, C(BLUE) },
{ "black naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
{ { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
20, 100, 0, MS_MUMBLE, MZ_LARGE,
***************
*** 960,965 ****
--- 1387,1397 ----
NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_FIRE_RES,
M2_STRONG | M2_EGGS, C(RED) },
+ { "blue naga", S_NAGA, 6, 12, 4, 0, -4, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 2, 4 }, { AT_BREA, AD_ELEC, 2, 6 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
+ M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_ELEC_RES,
+ M2_STRONG | M2_EGGS, C(BLUE) },
{ "black naga", S_NAGA, 8, 14, 2, 10, 4, (G_GENO | 1),
{ { AT_BITE, AD_PHYS, 2, 6 }, { AT_SPIT, AD_ACID, 0, 0 },
NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
***************
*** 1010,1020 ****
50, 500, 0, MS_SILENT, MZ_LARGE,
M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BLACK) },
/* Quantum Mechanics */
! { "quantum mechanic", S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 3),
{ { AT_CLAW, AD_TLPT, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
2, 20, 0, MS_HUMANOID, MZ_HUMAN,
M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, C(CYAN) },
/* Rust Monster */
{ "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2),
{ { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 },
--- 1442,1462 ----
50, 500, 0, MS_SILENT, MZ_LARGE,
M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BLACK) },
+ { "tapicoa pudding", S_PUDDING, 14, 6, 6, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_RUST, 6, 8 }, NO_ATTK,
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 50, 500, 0, MS_SILENT, MZ_LARGE,
+ M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
+ M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(YELLOW) },
/* Quantum Mechanics */
! { "quantum mechanic", S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 2),
{ { AT_CLAW, AD_TLPT, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
2, 20, 0, MS_HUMANOID, MZ_HUMAN,
M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, C(CYAN) },
+ { "auto mechanic", S_QUANTMECH, 9, 12, 3, 10, 0, (G_GENO | 1),
+ { { AT_CLAW, AD_TLPT, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 2, 20, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, C(CYAN) },
/* Rust Monster */
{ "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2),
{ { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 },
***************
*** 1022,1027 ****
--- 1464,1475 ----
50, 500, 0, MS_SILENT, MZ_MEDIUM,
M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_METALLIVORE,
C(BROWN) },
+ { "giant rust monster", S_RUSTMONST, 9, 18, 2, 0, 0, (G_GENO | 1),
+ { { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 },
+ { AT_NONE, AD_RUST, 0, 0 }, NO_ATTK, NO_ATTK },
+ 50, 750, 0, MS_SILENT, MZ_MEDIUM,
+ M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_METALLIVORE,
+ C(BROWN) },
/* Snakes */
{ "garter snake", S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP | G_GENO | 1),
{ { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 1041,1046 ****
--- 1489,1500 ----
M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
M1_POIS | M1_POIS_RES,
M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
+ { "asp", S_SNAKE, 5, 20, 2, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM,
+ M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
+ M1_POIS | M1_POIS_RES,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
{ "pit viper", S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1),
{ { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 },
NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM,
***************
*** 1058,1063 ****
--- 1512,1523 ----
NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_LARGE,
M1_SWIM | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_POIS_RES,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
+ { "asphinx", S_SNAKE, 5, 20, 2, 0, 0, (G_GENO | 1),
+ { { AT_BITE, AD_STON, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM,
+ M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
+ M1_POIS | M1_POIS_RES,
+ M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLACK) },
/* Trolls */
{ "troll", S_TROLL, 7, 12, 4, 0, -3, (G_GENO | 2),
{ { AT_CLAW, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 4, 2 },
***************
*** 1076,1081 ****
--- 1536,1547 ----
40, 300, 0, MS_GRUNT, MZ_LARGE,
M1_HUMANOID | M1_REGEN | M1_COLLECT,
M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(CYAN) },
+ { "black troll", S_TROLL, 11, 12, 0, 0, -3, (G_GENO | 1),
+ { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
+ { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
+ 40, 300, 0, MS_GRUNT, MZ_LARGE,
+ M1_HUMANOID | M1_REGEN | M1_COLLECT,
+ M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(BLACK) },
{ "water troll", S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO),
{ { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
{ AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
***************
*** 1096,1101 ****
--- 1562,1579 ----
{ AT_BITE, AD_PHYS, 2, 5 }, { AT_GAZE, AD_CONF, 0, 0 }, NO_ATTK },
50, 500, 0, MS_SILENT, MZ_LARGE,
M1_TUNNEL, M2_STRONG | M2_CARNIVORE, C(BROWN) },
+ { "hulk", S_UMBER, 13, 6, 2, 25, 0, (G_GENO | 2),
+ { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
+ { AT_BITE, AD_PHYS, 2, 5 }, { AT_GAZE, AD_CONF, 0, 0 }, NO_ATTK },
+ 50, 500, 0, MS_SILENT, MZ_LARGE,
+ M1_GREEDY, M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(GREEN) },
+ { "the Incredible Hulk", S_UMBER, 16, 6, 2, 25, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
+ { AT_BITE, AD_PHYS, 2, 5 }, NO_ATTK, NO_ATTK },
+ 50, 500, 0, MS_SILENT, MZ_LARGE,
+ M1_REGEN | M1_NOPOLY, M2_PNAME | M2_STALK | M2_STRONG |
+ M2_CARNIVORE | M2_HOSTILE, C(GREEN) },
+
/* Vampires */
{ "vampire", S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO | 1),
{ { AT_CLAW, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
***************
*** 1146,1151 ****
--- 1624,1634 ----
{ AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
70, 700, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID | M1_COLD_RES,
M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
+ { "Yuval", S_YETI, 5, 15, 6, 0, 0, (G_NOGEN | G_NOCORPSE | G_UNIQ),
+ { { AT_WEAP, AD_PHYS, 1, 12 }, { AT_MAGC, AD_CLRC, 0, 0 },
+ { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
+ 70, 700, 0, MS_GROWL, MZ_LARGE, M1_NOPOLY | M1_ANIMAL | M1_HUMANOID | M1_COLD_RES,
+ M2_PRINCE | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(HI_LORD) },
/* Zombies */
{ "kobold zombie", S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
{ { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 1224,1229 ****
--- 1707,1718 ----
M1_HUMANOID | M1_THICK_HIDE | M1_POIS | M1_FIRE_RES | M1_COLD_RES |
M1_ELEC_RES | M1_COLLECT,
M2_HOSTILE | M2_STRONG, C(HI_METAL) },
+ { "mist golem", S_GOLEM, 18, 6, -5, 60, 0, (G_GENO | G_NOCORPSE | 1),
+ { { AT_CLAW, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 100, 0, 0, MS_SILENT, MZ_LARGE,
+ M1_HUMANOID | M1_THICK_HIDE | M1_POIS | M1_FIRE_RES | M1_COLD_RES |
+ M1_ELEC_RES | M1_COLLECT,
+ M2_HOSTILE | M2_STRONG, C(WHITE) },
#endif /* GOLEMS */
/* Humans */
{ "human", S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, /* for corpses */
***************
*** 1246,1251 ****
--- 1735,1777 ----
45, 400, 0, MS_BARK, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
M2_WERE | M2_HOSTILE | M2_HUMAN, C(ORANGE_COLORED) },
+ { "bandit", S_HUMAN, 4, 12, 10, 0, 0, (G_GENO | G_SGROUP | 1),
+ { {AT_WEAP, AD_PHYS, 1, 8}, {AT_TUCH, AD_SGLD, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_HOSTILE | M2_STRONG, C(HI_DOMESTIC) },
+ { "evil mage", S_HUMAN, 6, 12, 10, 0, 0, (G_GENO | G_SGROUP | 2),
+ { {AT_WEAP, AD_PHYS, 1, 4}, {AT_MAGC, AD_SPEL, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_HOSTILE | M2_STRONG, C(HI_DOMESTIC) },
+ { "evil priest", S_HUMAN, 6, 12, 10, 0, 0, (G_GENO | G_SGROUP | 2),
+ { {AT_WEAP, AD_PHYS, 1, 4}, {AT_MAGC, AD_CLRC, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_HOSTILE | M2_STRONG, C(HI_DOMESTIC) },
+ /* Evil personalities */
+ { "Morgan Le Fay", S_HUMAN, 14, 12, 10, 0, 0, (G_NOCORPSE | G_UNIQ | 1),
+ { {AT_WEAP, AD_PHYS, 1, 8}, {AT_MAGC, AD_SPEL, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_FEM | M2_HOSTILE | M2_PRINCE | M2_PNAME | M2_STRONG, C(HI_DOMESTIC) },
+ { "Tom", S_HUMAN, 16, 12, 10, 0, 0, (G_NOGEN | G_NOCORPSE | G_UNIQ),
+ { {AT_WEAP, AD_PHYS, 1, 8}, {AT_MAGC, AD_SPEL, 0, 0},
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STALK | M2_HOSTILE | M2_PRINCE | M2_PNAME | M2_STRONG, C(HI_DOMESTIC) },
+ { "Butch", S_HUMAN, 16, 4, -3, 15, -5, (G_NOGEN | G_NOCORPSE | G_UNIQ),
+ { { AT_WEAP, AD_PHYS, 4, 8 }, { AT_WEAP, AD_PHYS, 4, 8 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_PRINCE | M2_PNAME | M2_HUMAN | M2_STALK | M2_HOSTILE | M2_STRONG, C(HI_DOMESTIC) },
+ { "Mordred", S_HUMAN, 16, 4, -3, 15, -5, (G_NOCORPSE | G_UNIQ | 1),
+ { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_PRINCE | M2_PNAME | M2_HUMAN | M2_STALK | M2_HOSTILE | M2_STRONG, C(HI_DOMESTIC) },
+
#ifdef TOLKIEN
{ "Woodland-elf", S_HUMAN, 4, 12, 5, 10, 5, (G_GENO | G_SGROUP | 2),
{ { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 1265,1270 ****
--- 1791,1806 ----
NO_ATTK, NO_ATTK, NO_ATTK },
35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG | M2_LORD, C(BLUE+BRIGHT) },
+ { "elven mage", S_HUMAN, 8, 12, 5, 20, 9, (G_GENO | G_SGROUP | 2),
+ { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
+ M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG | M2_LORD, C(BLUE+BRIGHT) },
+ { "elven priest", S_HUMAN, 8, 12, 5, 20, 9, (G_GENO | G_SGROUP | 2),
+ { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_MAGC, AD_CLRC, 0, 0 },
+ NO_ATTK, NO_ATTK, NO_ATTK },
+ 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
+ M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG | M2_LORD, C(BLUE+BRIGHT) },
{ "Elvenking", S_HUMAN, 9, 12, 5, 25, 10, (G_GENO | 1),
{ { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4},
NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 1292,1298 ****
M2_HUMAN | M2_PEACEFUL | M2_FEM, C(HI_ZAP) },
#endif
#if defined(ALTARS) && defined(THEOLOGY)
! { "temple priest", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
{ { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
{ AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
--- 1828,1834 ----
M2_HUMAN | M2_PEACEFUL | M2_FEM, C(HI_ZAP) },
#endif
#if defined(ALTARS) && defined(THEOLOGY)
! { "temple priest", S_HUMAN, 12, 12, 0, 50, 1, G_NOCORPSE,
{ { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
{ AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
***************
*** 1331,1336 ****
--- 1867,1877 ----
NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) },
+ { "general", S_HUMAN, 16, 4, -3, 15, -5, (G_GENO | 1),
+ { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 },
+ NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
#endif
#ifdef MEDUSA
{ "Medusa", S_HUMAN, 20, 12, 2, 50, -15, G_NOGEN | G_UNIQ,
***************
*** 1440,1445 ****
--- 1981,1992 ----
{ AT_BITE, AD_PHYS, 1, 6 }, },
45, 450, 0, MS_SILENT, MZ_LARGE, M1_POIS | M1_FIRE_RES,
M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
+ { "bearded devil", S_DEMON, 8, 9, -5, 50, 11, (G_HELL | G_NOCORPSE | 2),
+ { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
+ { AT_BITE, AD_PHYS, 2, 3 }, { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK },
+ 45, 450, 0, MS_SILENT, MZ_HUMAN,
+ M1_POIS | M1_FIRE_RES | M1_THICK_HIDE,
+ M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(BROWN) },
{ "hezrou", S_DEMON, 9, 6, -2, 55, -10,
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
{ { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
***************
*** 1464,1469 ****
--- 2011,2022 ----
45, 450, 0, MS_SILENT, MZ_LARGE,
M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLD_RES,
M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(WHITE) },
+ { "nycadaemon", S_DEMON, 12, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2),
+ { { AT_WEAP, AD_PHYS, 4, 2 }, { AT_WEAP, AD_PHYS, 4, 2 },
+ { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK },
+ 45, 450, 0, MS_GROWL, MZ_LARGE,
+ M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLLECT,
+ M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
{ "pit fiend", S_DEMON, 13, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2),
{ { AT_WEAP, AD_PHYS, 4, 2 }, { AT_WEAP, AD_PHYS, 4, 2 },
{ AT_HUGS, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK },
***************
*** 1555,1560 ****
--- 2108,2129 ----
40, 400, 0, MS_DJINNI, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_COLLECT, M2_STALK,
C(YELLOW) },
+ { "efreeti", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
+ { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 40, 400, 0, MS_DJINNI, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_COLLECT | M1_FIRE_RES,
+ M2_STALK, C(RED) },
+ { "marid", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
+ { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 40, 400, 0, MS_DJINNI, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_COLLECT, M2_STALK,
+ C(BLUE) },
+ { "dao", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
+ { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 40, 400, 0, MS_DJINNI, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_WALLWALK | M1_POIS | M1_COLLECT,
+ M2_STALK, C(BROWN) },
+
/* sea monsters */
{ "giant eel", S_EEL, 5, 9, -1, 0, 0, (G_GENO | G_NOGEN),
{ { AT_BITE, AD_PHYS, 3, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
***************
*** 1566,1571 ****
--- 2135,2144 ----
NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
M1_SWIM | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY |
M1_ELEC_RES, M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
+ { "shark", S_EEL, 10, 10, -3, 0, 0, (G_GENO | G_NOGEN),
+ { { AT_BITE, AD_PHYS, 6, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 10, 250, 0, MS_SILENT, MZ_HUGE, M1_SWIM | M1_ANIMAL | M1_NOLIMBS |
+ M1_NOPOLY, M2_HOSTILE | M2_CARNIVORE, C(BLUE) },
{ "kraken", S_EEL, 20, 3, 6, 0, -3, (G_GENO | G_NOGEN),
{ { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
{ AT_HUGS, AD_WRAP, 2, 6 }, { AT_BITE, AD_PHYS, 5, 4 }, NO_ATTK },
***************
*** 1593,1598 ****
--- 2166,2175 ----
{ { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
1, 40, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_STON_RES,
M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
+ { "basilisk", S_LIZARD, 5, 6, 6, 10, 0, (G_GENO | 1),
+ { { AT_BITE, AD_STON, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 1, 40, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_STON_RES,
+ M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
{ "chameleon", S_LIZARD, 6, 5, 6, 10, 0, (G_GENO | 2),
{ { AT_BITE, AD_PHYS, 4, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
10, 100, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
***************
*** 1602,1607 ****
--- 2179,2192 ----
NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SILENT, MZ_LARGE,
M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_SWIM,
M2_STRONG | M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
+ { "giant chameleon", S_LIZARD, 10, 5, 6, 10, 0, (G_GENO | 2),
+ { { AT_BITE, AD_PHYS, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 100, 1000, 0, MS_SILENT, MZ_HUGE, M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
+ M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
+ { "tyrannosaur", S_LIZARD, 13, 6, 6, 10, 0, (G_GENO | 1),
+ { { AT_BITE, AD_PHYS, 4, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 150, 1500, 0, MS_SILENT, MZ_HUGE, M1_ANIMAL | M1_NOHANDS | M1_STON_RES,
+ M2_HOSTILE | M2_CARNIVORE, C(GREEN) },

/* character classes */
{ "archeologist", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
***************
*** 1624,1629 ****
--- 2209,2219 ----
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
M2_HUMAN | M2_STRONG | M2_CARNIVORE | M2_FEM, C(HI_DOMESTIC) },
+ { "drunk", S_HUMAN, 1, 10, 10, 1, 0, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
/* Note: players who are elves still get normal carrying capacity,
* even though this is strictly speaking inconsistent.
*/
***************
*** 1632,1637 ****
--- 2222,2237 ----
35, 350, 0, MS_HUMANOID, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_SLEE_RES | M1_SEE_INVIS,
M2_ELF | M2_STRONG, C(HI_DOMESTIC) },
+ { "firefighter", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "geek", S_HUMAN, 1, 10, 10, 1, 0, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
{ "healer", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
{ {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
***************
*** 1642,1647 ****
--- 2242,2267 ----
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "locksmith", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "musician", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "ninja", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_GREEDY,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "officer", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
{ "priest", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
{ {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
***************
*** 1667,1672 ****
--- 2287,2297 ----
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "undertaker", S_HUMAN, 1, 10, 10, 3, 0, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_MAGIC,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
{ "valkyrie", S_HUMAN, 1, 10, 10, 1, -1, G_NOGEN,
{ {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
***************
*** 1677,1683 ****
--- 2302,2364 ----
45, 400, 0, MS_HUMANOID, MZ_HUMAN,
M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_MAGIC,
M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
+ { "zookeeper", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
+ { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 45, 400, 0, MS_HUMANOID, MZ_HUMAN,
+ M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_TUNNEL | M1_NEEDPICK,
+ M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },

+ /* animated food */
+ { "killer food ration", S_BADLUNCH, 1, 0, 6, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(GREEN) },
+ { "killer tripe ration", S_BADLUNCH, 2, 1, 9, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
+ { "killer tomato", S_BADLUNCH, 4, 9, 9, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(RED) },
+ { "ravenous cream pie", S_BADLUNCH, 7, 9, 9, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(WHITE) },
+
+ /* animated coins */
+ { "pile of silver coins", S_BADCOINS, 3, 0, 6, 0, 0, (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(BLACK) },
+ { "gold mimic", S_BADCOINS, 4, 1, 9, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(YELLOW) },
+ { "pile of creeping gold coins", S_BADCOINS, 6, 9, 9, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(YELLOW) },
+ { "pile of killer gold coins", S_BADCOINS, 9, 15, 9, 0, 0,
+ (G_GENO | G_NOCORPSE | 1),
+ { { AT_BITE, AD_PHYS, 1, 16 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
+ 5, 30, 0, MS_SILENT, MZ_SMALL,
+ M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
+ M2_HOSTILE | M2_OMNIVORE, C(YELLOW) },
+
/* ARRAY TERMINATOR */
{ "", 0, 0, 0, 0, 0, 0, 0,
{ NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
***************
*** 1685,1687 ****
--- 2366,2370 ----
};
#endif /* !SPLITMON_1 */
#endif /* !MAKEDEFS_C */
+
+
*** ../nh/src/o_init.c Wed Feb 6 00:00:35 1991
--- src/o_init.c Wed Oct 28 13:19:00 1992
***************
*** 274,280 ****
register int i;
unsigned int len;
char *then; /* old location of "strange object" */
! register int differ; /*(ptrdiff_t)*/
#ifdef MACOS
/* provides position-independent save & restore */
/* by giving each object a number, keep track of it */
--- 274,281 ----
register int i;
unsigned int len;
char *then; /* old location of "strange object" */
! char *now = objects[0].oc_name;
! long differ; /*(ptrdiff_t)*/
#ifdef MACOS
/* provides position-independent save & restore */
/* by giving each object a number, keep track of it */
***************
*** 305,318 ****
objects[i].oc_descr = d[switches[i]].descr;
}
#else
! differ = objects[0].oc_name - then; /* note: expected to be 0 */
#endif /* MACOS */
for(i=0; i < TOTAL_OBJS; i++) {
#ifndef MACOS
if (differ && objects[i].oc_name)
objects[i].oc_name += differ;
if (differ && objects[i].oc_descr)
objects[i].oc_descr += differ;
#endif /* MACOS */
if (objects[i].oc_uname) {
mread(fd, (genericptr_t) &len, sizeof len);
--- 306,329 ----
objects[i].oc_descr = d[switches[i]].descr;
}
#else
! differ = (long)now - (long)then; /* note: expected to be 0 */
#endif /* MACOS */
for(i=0; i < TOTAL_OBJS; i++) {
#ifndef MACOS
if (differ && objects[i].oc_name)
+ #ifndef MSDOS
objects[i].oc_name += differ;
+ #else
+ objects[i].oc_name =
+ (const char *)((long)objects[i].oc_name + differ);
+ #endif
if (differ && objects[i].oc_descr)
+ #ifndef MSDOS
objects[i].oc_descr += differ;
+ #else
+ objects[i].oc_descr =
+ (const char *)((long)objects[i].oc_descr + differ);
+ #endif
#endif /* MACOS */
if (objects[i].oc_uname) {
mread(fd, (genericptr_t) &len, sizeof len);
*** ../nh/src/objects.c Mon May 14 09:58:18 1990
--- src/objects.c Fri Dec 4 01:27:22 1992
***************
*** 87,95 ****
FOOD("egg", 85, 1, 1, 1, 0, 80, WHITE),
/* fruits & veggies */
FOOD("apple", 15, 1, 1, 0, 0, 50, RED),
! FOOD("orange", 10, 1, 1, 0, 0, 80, ORANGE_COLORED),
! FOOD("pear", 10, 1, 1, 0, 0, 50, GREEN|BRIGHT),
! FOOD("melon", 10, 1, 1, 0, 0, 100, GREEN|BRIGHT),
FOOD("banana", 10, 1, 1, 0, 0, 80, YELLOW),
FOOD("carrot", 15, 1, 1, 0, 0, 50, ORANGE_COLORED),
FOOD("clove of garlic", 7, 1, 1, 0, 0, 40, WHITE),
--- 87,95 ----
FOOD("egg", 85, 1, 1, 1, 0, 80, WHITE),
/* fruits & veggies */
FOOD("apple", 15, 1, 1, 0, 0, 50, RED),
! FOOD("orange", 5, 1, 1, 0, 0, 80, ORANGE_COLORED),
! FOOD("pear", 5, 1, 1, 0, 0, 50, GREEN|BRIGHT),
! FOOD("melon", 5, 1, 1, 0, 0, 100, GREEN|BRIGHT),
FOOD("banana", 10, 1, 1, 0, 0, 80, YELLOW),
FOOD("carrot", 15, 1, 1, 0, 0, 50, ORANGE_COLORED),
FOOD("clove of garlic", 7, 1, 1, 0, 0, 40, WHITE),
***************
*** 102,110 ****
FOOD("lump of royal jelly", 0, 1, 1, 0, 0, 200, YELLOW),
FOOD("cream pie", 25, 1, 1, 0, 0, 100, WHITE),
FOOD("candy bar", 13, 1, 1, 0, 0, 100, BROWN),
FOOD("fortune cookie", 55, 1, 1, 0, 0, 40, BROWN),
#ifdef TOLKIEN
! FOOD("pancake", 25, 2, 1, 0, 0, 200, BROWN),
FOOD("lembas wafer", 20, 2, 1, 0, 0, 800, WHITE|BRIGHT),
FOOD("cram ration", 20, 3, 3, 0, 0, 600, HI_ORGANIC),
FOOD("food ration", 385, 5, 4, 0, 0, 800, HI_ORGANIC),
--- 102,114 ----
FOOD("lump of royal jelly", 0, 1, 1, 0, 0, 200, YELLOW),
FOOD("cream pie", 25, 1, 1, 0, 0, 100, WHITE),
FOOD("candy bar", 13, 1, 1, 0, 0, 100, BROWN),
+ FOOD("cheese", 5, 1, 1, 0, 0, 80, YELLOW),
+ FOOD("sandwich", 5, 1, 1, 0, 0, 150, WHITE),
+ FOOD("cake", 5, 1, 1, 0, 0, 100, BROWN),
FOOD("fortune cookie", 55, 1, 1, 0, 0, 40, BROWN),
#ifdef TOLKIEN
! FOOD("pancake", 24, 2, 1, 0, 0, 200, BROWN),
! FOOD("doughnut", 1, 2, 1, 0, 0, 100, BROWN),
FOOD("lembas wafer", 20, 2, 1, 0, 0, 800, WHITE|BRIGHT),
FOOD("cram ration", 20, 3, 3, 0, 0, 600, HI_ORGANIC),
FOOD("food ration", 385, 5, 4, 0, 0, 800, HI_ORGANIC),
***************
*** 184,190 ****

/* blades */
#ifdef TOLKIEN
! WEAPON("dagger", NULL, 1, 1, 0, 25, 2, 4, 4, 3, METAL, HI_METAL),
WEAPON("elven dagger", "large runed knife", 0, 1, 0, 8, 2, 4, 5, 3, METAL, HI_METAL),
WEAPON("orcish dagger", "large black knife", 0, 1, 0, 10, 2, 4, 3, 3, METAL, BLACK),
#else
--- 188,195 ----

/* blades */
#ifdef TOLKIEN
! WEAPON("dagger", NULL, 1, 1, 0, 20, 2, 4, 4, 3, METAL, HI_METAL),
! WEAPON("dirk", NULL, 1, 1, 0, 5, 2, 4, 4, 3, METAL, HI_METAL),
WEAPON("elven dagger", "large runed knife", 0, 1, 0, 8, 2, 4, 5, 3, METAL, HI_METAL),
WEAPON("orcish dagger", "large black knife", 0, 1, 0, 10, 2, 4, 3, 3, METAL, BLACK),
#else
***************
*** 192,197 ****
--- 197,203 ----
#endif
WEAPON("athame", NULL, 1, 1, 0, 0, 2, 4, 4, 3, METAL, HI_METAL),
WEAPON("scalpel", NULL, 1, 1, 0, 0, 1, 4, 4, 3, METAL, HI_METAL),
+ WEAPON("sharpened pencil", NULL, 1, 1, 0, 0, 2, 4, 4, 3, WOOD, YELLOW),
WEAPON("knife", NULL, 1, 1, 0, 25, 2, 4, 3, 3, METAL, HI_METAL),
WEAPON("axe", NULL, 1, 0, 0, 50, 3, 8, 6, 4, METAL, HI_METAL),
#ifdef WORM
***************
*** 326,332 ****
TOOL("expensive camera", NULL, 1, 0, 5, 3, 200, 0, BLACK),
TOOL("magic marker", NULL, 1, 1, 15, 1, 50, 0, RED),
TOOL("stethoscope", NULL, 1, 0, 15, 2, 75, 0, HI_METAL),
! TOOL("tin opener", NULL, 1, 0, 25, 1, 30, METAL, HI_METAL),
#ifdef WALKIES
TOOL("lamp", NULL, 1, 1, 90, 10, 50, 0, YELLOW),
#else
--- 332,341 ----
TOOL("expensive camera", NULL, 1, 0, 5, 3, 200, 0, BLACK),
TOOL("magic marker", NULL, 1, 1, 15, 1, 50, 0, RED),
TOOL("stethoscope", NULL, 1, 0, 15, 2, 75, 0, HI_METAL),
! TOOL("tin opener", NULL, 1, 0, 5, 1, 30, METAL, HI_METAL),
! TOOL("land mine", "green cylinder", 1, 0, 5, 1, 30, METAL, GREEN),
! TOOL("jaw trap", "steel jaws", 1, 0, 10, 1, 30, METAL, HI_METAL),
! TOOL("sleep trap", "orange cylinder", 1, 0, 5, 1, 30, METAL, ORANGE_COLORED),
#ifdef WALKIES
TOOL("lamp", NULL, 1, 1, 90, 10, 50, 0, YELLOW),
#else
***************
*** 339,344 ****
--- 348,354 ----
TOOL("large box", NULL, 1, 0, 40, 40, 20, WOOD, HI_WOOD),
TOOL("chest", NULL, 1, 0, 35, 40, 20, WOOD, HI_WOOD),
TOOL("sack", "bag", 0, 0, 40, 3, 20, 0, HI_CLOTH),
+ TOOL("ugly backpack","ugly backpack", 0, 0, 0, 3, 20, 0, MAGENTA),
TOOL("bag of holding", "bag", 0, 0, 20, 3, 100, 0, HI_CLOTH),
TOOL("bag of tricks", "bag", 0, 1, 20, 3, 100, 0, HI_CLOTH),
#ifndef MUSIC
***************
*** 468,473 ****
--- 478,487 ----
/* 'cope' is not a spelling mistake... leave it be */
ARMOR("mummy wrapping", NULL,
1, 0, 0, 0, 0, 2, 2, 10, 2, 0, HI_CLOTH),
+ ARMOR("lab coat", "white coat",
+ 0, 0, 0, 0, 0, 2, 40, 10, 3, 0, WHITE),
+ ARMOR("expensive suit", "expensive suit",
+ 0, 0, 0, 0, 0, 2, 90, 10, 3, 0, BLACK),
#ifdef TOLKIEN
ARMOR("elven cloak", "ornamental cope",
0, 0, STEALTH, 12, 0, 2, 60, 9, 3, 0, HI_CLOTH),
***************
*** 551,578 ****
{ name, desc, NULL, 0,1,0,0,glass, 0,\
GEM_SYM, prob, 0, wt, gval, 3, 3, WP_SLING, C(color)}
#endif
! GEM("dilithium crystal", "white", 3, 1, 4500, MINERAL, WHITE),
! GEM("diamond", "white", 4, 1, 4000, MINERAL, WHITE),
! GEM("ruby", "red", 5, 1, 3500, MINERAL, RED),
! GEM("sapphire", "blue", 6, 1, 3000, MINERAL, BLUE),
! GEM("emerald", "green", 7, 1, 2500, MINERAL, GREEN),
! GEM("turquoise", "green", 8, 1, 2000, MINERAL, GREEN),
! GEM("aquamarine", "green", 10, 1, 1500, MINERAL, GREEN),
! GEM("amber", "yellowish brown", 11, 1, 1000, MINERAL, BROWN),
! GEM("topaz", "yellowish brown", 13, 1, 900, MINERAL, BROWN),
! GEM("opal", "white", 15, 1, 800, MINERAL, WHITE),
! GEM("garnet", "red", 17, 1, 700, MINERAL, RED),
! GEM("amethyst", "violet", 19, 1, 600, MINERAL, MAGENTA),
! GEM("jasper", "red", 21, 1, 500, MINERAL, RED),
! GEM("fluorite", "violet", 22, 1, 400, MINERAL, MAGENTA),
! GEM("jade", "green", 23, 1, 300, MINERAL, GREEN),
! GEM("worthless piece of white glass", "white", 131, 1, 0, GLASS, WHITE),
! GEM("worthless piece of blue glass", "blue", 131, 1, 0, GLASS, BLUE),
! GEM("worthless piece of red glass", "red", 131, 1, 0, GLASS, RED),
! GEM("worthless piece of yellowish brown glass", "yellowish brown",
! 131, 1, 0, GLASS, BROWN),
! GEM("worthless piece of green glass", "green", 131, 1, 0, GLASS, GREEN),
! GEM("worthless piece of violet glass", "violet",131, 1, 0, GLASS, MAGENTA),
GEM("luckstone", "gray", 10, 1, 60, MINERAL, GRAY),
GEM("loadstone", "gray", 10, 50, 1, MINERAL, GRAY),
#if defined(MACOS) && !defined(MAKEDEFS_C)
--- 565,601 ----
{ name, desc, NULL, 0,1,0,0,glass, 0,\
GEM_SYM, prob, 0, wt, gval, 3, 3, WP_SLING, C(color)}
#endif
! GEM("dilithium crystal", "white", 2, 1, 4500, MINERAL, WHITE),
! GEM("diamond", "white", 3, 1, 4000, MINERAL, WHITE),
! GEM("black opal", "black", 3, 1, 4000, MINERAL, BLACK),
! GEM("ruby", "red", 4, 1, 3500, MINERAL, RED),
! GEM("sapphire", "blue", 5, 1, 3000, MINERAL, BLUE),
! GEM("jacinth", "orange", 5, 1, 2500, MINERAL, ORANGE_COLORED),
! GEM("emerald", "green", 6, 1, 2500, MINERAL, GREEN),
! GEM("turquoise", "green", 7, 1, 2000, MINERAL, GREEN),
! GEM("aquamarine", "green", 8, 1, 1500, MINERAL, GREEN),
! GEM("citrine", "yellow", 5, 1, 1000, MINERAL, YELLOW),
! GEM("amber", "yellowish brown", 10, 1, 1000, MINERAL, BROWN),
! GEM("topaz", "yellowish brown", 11, 1, 900, MINERAL, BROWN),
! GEM("opal", "white", 12, 1, 800, MINERAL, WHITE),
! GEM("chrysoberyl", "yellow", 6, 1, 700, MINERAL, YELLOW),
! GEM("garnet", "red", 12, 1, 700, MINERAL, RED),
! GEM("amethyst", "violet", 13, 1, 600, MINERAL, MAGENTA),
! GEM("jasper", "red", 14, 1, 500, MINERAL, RED),
! GEM("fluorite", "violet", 14, 1, 400, MINERAL, MAGENTA),
! GEM("obsidian", "black", 14, 1, 400, MINERAL, BLACK),
! GEM("agate", "orange", 15, 1, 400, MINERAL, ORANGE_COLORED),
! GEM("jade", "green", 15, 1, 300, MINERAL, GREEN),
! GEM("piece of white glass", "white", 87, 1, 0, GLASS, WHITE),
! GEM("piece of blue glass", "blue", 87, 1, 0, GLASS, BLUE),
! GEM("piece of red glass", "red", 87, 1, 0, GLASS, RED),
! GEM("piece of yellowish brown glass", "yellowish brown",
! 87, 1, 0, GLASS, BROWN),
! GEM("piece of green glass", "green", 90, 1, 0, GLASS, GREEN),
! GEM("piece of violet glass", "violet", 87, 1, 0, GLASS, MAGENTA),
! GEM("piece of yellow glass", "yellow", 87, 1, 0, GLASS, YELLOW),
! GEM("piece of orange glass", "orange", 87, 1, 0, GLASS, ORANGE_COLORED),
! GEM("piece of black glass", "black", 87, 1, 0, GLASS, BLACK),
GEM("luckstone", "gray", 10, 1, 60, MINERAL, GRAY),
GEM("loadstone", "gray", 10, 50, 1, MINERAL, GRAY),
#if defined(MACOS) && !defined(MAKEDEFS_C)
***************
*** 608,614 ****
POTION("paralysis", "emerald", 0, 45,300, GREEN|BRIGHT),
POTION("speed", "dark green", FAST, 45,200, GREEN),
POTION("levitation", "cyan", LEVITATION, 45,200, CYAN),
! POTION("hallucination", "brilliant blue", HALLUC, 45,100, BLUE|BRIGHT),
POTION("invisibility", "sky blue", INVIS, 45,150, CYAN),
POTION("see invisible", "magenta", SEE_INVIS, 45,50, MAGENTA),
POTION("healing", "purple", 0, 65,100, MAGENTA),
--- 631,638 ----
POTION("paralysis", "emerald", 0, 45,300, GREEN|BRIGHT),
POTION("speed", "dark green", FAST, 45,200, GREEN),
POTION("levitation", "cyan", LEVITATION, 45,200, CYAN),
! POTION("hallucination", "brilliant blue", HALLUC, 20,100, BLUE|BRIGHT),
! POTION("polymorph", "golden", 0, 25,100, YELLOW),
POTION("invisibility", "sky blue", INVIS, 45,150, CYAN),
POTION("see invisible", "magenta", SEE_INVIS, 45,50, MAGENTA),
POTION("healing", "purple", 0, 65,100, MAGENTA),
***************
*** 666,676 ****
prob, 0, 3, cost, flags, 0, 0, C(c) }
#endif

! WAND("light", "glass", 95, 100, NODIR, GLASS,HI_GLASS),
! WAND("secret door detection", "balsa", 50, 150, NODIR, WOOD,HI_WOOD),
! WAND("create monster", "maple", 45, 200, NODIR, WOOD,HI_WOOD),
WAND("wishing", "pine", 5, 500, NODIR, WOOD,HI_WOOD),
! WAND("striking", "oak", 75, 150, IMMEDIATE,WOOD,HI_WOOD),
WAND("nothing", "ebony", 25, 100, IMMEDIATE,WOOD,HI_WOOD),
WAND("make invisible", "marble", 45, 150, IMMEDIATE,MINERAL,HI_MINERAL),
WAND("slow monster", "tin", 55, 150, IMMEDIATE,METAL,HI_METAL),
--- 690,701 ----
prob, 0, 3, cost, flags, 0, 0, C(c) }
#endif

! WAND("light", "glass", 85, 100, NODIR, GLASS,HI_GLASS),
! WAND("secret door detection", "balsa", 40, 150, NODIR, WOOD,HI_WOOD),
! WAND("healing", "bamboo", 25, 150, NODIR, WOOD,HI_WOOD),
! WAND("create monster", "maple", 55, 200, NODIR, WOOD,HI_WOOD),
WAND("wishing", "pine", 5, 500, NODIR, WOOD,HI_WOOD),
! WAND("striking", "oak", 70, 150, IMMEDIATE,WOOD,HI_WOOD),
WAND("nothing", "ebony", 25, 100, IMMEDIATE,WOOD,HI_WOOD),
WAND("make invisible", "marble", 45, 150, IMMEDIATE,MINERAL,HI_MINERAL),
WAND("slow monster", "tin", 55, 150, IMMEDIATE,METAL,HI_METAL),
***************
*** 687,693 ****
WAND("opening", "zinc", 40, 150, IMMEDIATE,METAL,HI_METAL),
WAND("locking", "aluminum", 40, 150, IMMEDIATE,METAL,HI_METAL),
#endif
! WAND("digging", "iron", 55, 150, RAY, METAL,HI_METAL),
WAND("magic missile", "steel", 50, 150, RAY, METAL,HI_METAL),
WAND("fire", "hexagonal", 40, 175, RAY, METAL,HI_METAL),
WAND("sleep", "runed", 50, 175, RAY, METAL,HI_METAL),
--- 712,718 ----
WAND("opening", "zinc", 40, 150, IMMEDIATE,METAL,HI_METAL),
WAND("locking", "aluminum", 40, 150, IMMEDIATE,METAL,HI_METAL),
#endif
! WAND("digging", "iron", 45, 150, RAY, METAL,HI_METAL),
WAND("magic missile", "steel", 50, 150, RAY, METAL,HI_METAL),
WAND("fire", "hexagonal", 40, 175, RAY, METAL,HI_METAL),
WAND("sleep", "runed", 50, 175, RAY, METAL,HI_METAL),
***************
*** 764,769 ****
--- 789,796 ----

RING("adornment", "wooden", ADORNED, 100, 1, WOOD, HI_WOOD),
RING("gain strength", "granite", 0, 150, 1, MINERAL, HI_MINERAL),
+ RING("gain intelligence", "ordinary", 0, 150, 1, MINERAL, HI_MINERAL),
+ RING("gain dexterity", "garnet", 0, 150, 1, MINERAL, RED),
RING("increase damage", "coral", 0, 150, 1, MINERAL, RED|BRIGHT),
RING("protection", "black onyx", PROTECTION, 100, 1, MINERAL, BLACK),
RING("regeneration", "moonstone", REGENERATION, 200, 0, MINERAL, HI_MINERAL),
*** ../nh/src/objnam.c Wed Feb 6 00:00:39 1991
--- src/objnam.c Sun Oct 11 17:07:06 1992
***************
*** 47,54 ****
STATIC_OVL struct Jitem Japanese_items[] = {
{ SHORT_SWORD, "wakizashi" },
{ BROADSWORD, "ninja-to" },
{ GLAIVE, "naginata" },
! /* { BOW, "yumi" }, */
{ LOCK_PICK, "osaku" },
{0, "" }
};
--- 47,61 ----
STATIC_OVL struct Jitem Japanese_items[] = {
{ SHORT_SWORD, "wakizashi" },
{ BROADSWORD, "ninja-to" },
+ { CLUB, "bokken" },
+ { DAGGER, "hishi" },
+ { DIRK, "kozuka" },
+ { SCIMITAR, "tanto" },
+ { SPEAR, "yari" },
+ { FLAIL, "nunchaku" },
+ { SMALL_SHIELD, "timbe" },
{ GLAIVE, "naginata" },
! { BOW, "dai-kyu" },
{ LOCK_PICK, "osaku" },
{0, "" }
};
***************
*** 132,137 ****
--- 139,146 ----

if (pl_character[0] == 'S' && Japanese_item_name(otyp))
actualn = Japanese_item_name(otyp);
+ if (pl_character[0] == 'N' && Japanese_item_name(otyp))
+ actualn = Japanese_item_name(otyp);
switch(ocl->oc_olet) {
case POTION_SYM:
Strcpy(buf, "potion");
***************
*** 232,237 ****
--- 241,248 ----
register const char *un = objects[obj->otyp].oc_uname;

if (pl_character[0] == 'S' && Japanese_item_name((int)obj->otyp))
+ actualn = Japanese_item_name((int)obj->otyp);
+ if (pl_character[0] == 'N' && Japanese_item_name((int)obj->otyp))
actualn = Japanese_item_name((int)obj->otyp);

buf[0] = 0;
*** ../nh/src/options.c Wed Feb 6 00:00:43 1991
--- src/options.c Mon Oct 12 20:22:02 1992
***************
*** 598,603 ****
--- 598,612 ----
return;
}
#endif
+
+ /* warning */
+ if (!strncmp(opts, "warn", 4)) {
+ op = index(opts, ':');
+ if (!op++) goto bad;
+ nmcpy(warning_string, op, 62);
+ return;
+ }
+
bad:
if(!from_env) {
if(!strncmp(opts, "h", 1) ||
***************
*** 994,999 ****
--- 1003,1009 ----
#ifdef TUTTI_FRUTTI
Sprintf(eos(buf), "fruit:%s,", pl_fruit);
#endif
+ Sprintf(eos(buf), "warning_string:%s,", warning_string);
if(flags.end_top != 3 || flags.end_around != 2 || flags.end_own){
Sprintf(eos(buf), "endgame: %u top scores/%u around me",
flags.end_top, flags.end_around);
*** ../nh/src/potion.c Wed Feb 6 00:00:47 1991
--- src/potion.c Sun Oct 25 23:44:16 1992
***************
*** 287,292 ****
--- 287,296 ----
make_hallucinated(Hallucination +
rn1(200, 600 - 300*bcsign(otmp)), TRUE);
break;
+ case POT_POLYMORPH:
+ makeknown(POT_POLYMORPH);
+ polyself();
+ break;
case POT_WATER:
if(!otmp->blessed && !otmp->cursed) {
pline("This tastes like %swater.",
***************
*** 824,829 ****
--- 828,836 ----
break;
case POT_HALLUCINATION:
You("have a vision for a moment.");
+ break;
+ case POT_POLYMORPH:
+ You("feel momentarily different.");
break;
case POT_CONFUSION:
case POT_BOOZE:
*** ../nh/src/pray.c Tue May 15 14:50:45 1990
--- src/pray.c Fri Dec 4 00:55:06 1992
***************
*** 23,30 ****
--- 23,33 ----
'A', /* Central American */ "Quetzalcotl", "Camaxtli", "Huhetotl",
'B', /* Celtic */ "Nuada", "Dagda", "Morrigan",
'C', /* Babylonian */ "Anu", "Ishtar", "Anshar",
+ 'D', /* Drunken */ "Apollo", "Dionysus", "Pan",
'E', /* Elven */ "Solonor Thelandira",
"Aerdrie Faenya", "Erevan Ilesere",
+ 'F', /* Fire */ "Prometheus", "Thor", "Arson",
+ 'G', /* Geek */ "Jobs", "Wozniak", "Gates",
'H', /* Greek */ "Athena", "Hermes", "Poseidon",
'K', /* Celtic */ "Lugh", "Brigit", "Macannan Mac Lir",
#ifdef NAMED_ITEMS
***************
*** 31,36 ****
--- 34,43 ----
/* It'd look funny if someone got a sword to steal souls for Arioch but Arioch
* goes with the wrong character class...
*/
+ 'L', /* Locksmiths */ "Athena", "Hermes", "Poseidon",
+ 'M', /* Music */ "Apollo", "Hermes", "Pan",
+ 'N', /* Japanese */ "Amaterasu Omikami", "Raiden", "Susanowo",
+ 'O', "Magnum", "Smith", "Wesson",
'P', /* Hyborian */ "Mitra", "Crom", "Set",
#else
'P', /* Melnibonean */ "Donblas", "Grome", "Arioch",
***************
*** 38,45 ****
--- 45,54 ----
'R', /* Nehwon */ "Votishal", "Death", "Rat God",
'S', /* Japanese */ "Amaterasu Omikami", "Raiden", "Susanowo",
'T', /* Chinese */ "Shan Lai Ching", "Chih Sung-tzu", "Huan Ti",
+ 'U', /* Death */ "Osiris", "Pluto", "Orcus",
'V', /* Norse */ "Tyr", "Balder", "Loki",
'W', /* Egyptian */ "Ptah", "Thoth", "Anhur",
+ 'Z', /* Zoo */ "Athena", "Hermes", "Poseidon",
0,0,0,0
};

***************
*** 811,819 ****
} else if (mtmp->mlet == S_UNICORN) {
int unicalign;

! if (mtmp == &mons[PM_BLACK_UNICORN]) unicalign = -1;
else if (mtmp == &mons[PM_GRAY_UNICORN]) unicalign = 0;
! else if (mtmp == &mons[PM_WHITE_UNICORN]) unicalign = 1;
#ifdef __GNULINT__
else { impossible("Bad unicorn type??"); unicalign = 0; }
#endif
--- 820,830 ----
} else if (mtmp->mlet == S_UNICORN) {
int unicalign;

! if (mtmp == &mons[PM_BLACK_UNICORN] ||
! mtmp == &mons[PM_NIGHTMARE]) unicalign = -1;
else if (mtmp == &mons[PM_GRAY_UNICORN]) unicalign = 0;
! else if (mtmp == &mons[PM_WHITE_UNICORN] ||
! mtmp == &mons[PM_KI_RIN]) unicalign = 1;
#ifdef __GNULINT__
else { impossible("Bad unicorn type??"); unicalign = 0; }
#endif
*** ../nh/src/pri.c Thu May 31 15:56:48 1990
--- src/pri.c Thu Oct 15 21:49:46 1992
***************
*** 751,756 ****
--- 751,777 ----
"Thief"
};

+ static const char NEARDATA *locksmith_ranks[] = {
+ "Listener",
+ "Listener",
+ "Lockpicker",
+ "Lockpicker",
+ "Safecracker",
+ "Safecracker",
+ "Safecracker",
+ "Safecracker",
+ "Safecracker",
+ "Safecracker",
+ "Slim Jim",
+ "Slim Jane",
+ "Keymaker",
+ "Keymaker",
+ "Keymaker",
+ "Keymaker",
+ "Locksmith",
+ "Locksmith"
+ };
+
static const char NEARDATA *fighter_ranks[] = {
"Stripling",
"Stripling",
***************
*** 772,777 ****
--- 793,858 ----
"Lady"
};

+ static const char NEARDATA *drunk_ranks[] = {
+ "Wino",
+ "Wino",
+ "Drunk",
+ "Drunk",
+ "Hobo",
+ "Hobo",
+ "Slosh",
+ "Slosh",
+ "Partier",
+ "Partier",
+ "Vomiter",
+ "Vomitress",
+ "Tastetester",
+ "Tastetester",
+ "Winetaster",
+ "Winetaster",
+ "Socialite",
+ "Socialite",
+ };
+ static const char NEARDATA *officer_ranks[] = {
+ "Coffee Boy",
+ "Coffee Girl",
+ "Cadet",
+ "Cadet",
+ "Meter Man",
+ "Meter Maid",
+ "Rookie",
+ "Rookie",
+ "Beat Cop",
+ "Beat Cop",
+ "Sergeant",
+ "Sergeant",
+ "Captain",
+ "Captain",
+ "Police Chief",
+ "Police Chief",
+ "Commissioner",
+ "Commissioner",
+ };
+ static const char NEARDATA *firefighter_ranks[] = {
+ "Water Boy",
+ "Water Girl",
+ "Cadet",
+ "Cadet",
+ "Rookie",
+ "Rookie",
+ "Driver",
+ "Driver",
+ "Smokeeater",
+ "Smokeeater",
+ "Lieutenant",
+ "Lieutenant",
+ "Captain",
+ "Captain",
+ "Chief",
+ "Chief",
+ "Commissioner",
+ "Commissioner",
+ };
static const char NEARDATA *tourist_ranks[] = {
"Rambler",
"Rambler",
***************
*** 918,923 ****
--- 999,1084 ----
"Jonin",
"Jonin",
};
+ static const char NEARDATA *musician_ranks[] = {
+ "Student",
+ "Student",
+ "Drummer",
+ "Drummer",
+ "Fiddler",
+ "Fiddler",
+ "Singer",
+ "Singer",
+ "Entertainer",
+ "Entertainer",
+ "Bard",
+ "Bard",
+ "Meistersinger",
+ "Primadonna",
+ "Conductor",
+ "Conductor",
+ "Virtuoso",
+ "Virtuoso",
+ };
+ static const char NEARDATA *geek_ranks[] = {
+ "Geek",
+ "Geek",
+ "Geek",
+ "Geek",
+ "Dork",
+ "Dork",
+ "Nerd",
+ "Nerd",
+ "Nerd",
+ "Nerd",
+ "Programmer",
+ "Programmer",
+ "Programmer",
+ "Programmer",
+ "Cracker",
+ "Cracker",
+ "Hacker",
+ "Hacker",
+ };
+ static const char NEARDATA *undertaker_ranks[] = {
+ "Gravedigger",
+ "Gravedigger",
+ "Gravedigger",
+ "Gravedigger",
+ "Embalmer",
+ "Embalmer",
+ "Embalmer",
+ "Embalmer",
+ "Embalmer",
+ "Embalmer",
+ "Undertaker",
+ "Undertaker",
+ "Mortician",
+ "Mortician",
+ "Pathologist",
+ "Pathologist",
+ "Coroner",
+ "Coroner",
+ };
+ static const char NEARDATA *zookeeper_ranks[] = {
+ "Feeder",
+ "Feeder",
+ "Feeder",
+ "Feeder",
+ "Tamer",
+ "Tamer",
+ "Tamer",
+ "Tamer",
+ "Trainer",
+ "Trainer",
+ "Chief Trainer",
+ "Chief Trainer",
+ "Vet",
+ "Vet",
+ "Zookeeper",
+ "Zookeeper",
+ "Curator",
+ "Curator",
+ };

static const char NEARDATA *elf_ranks[] = {
"Edhel",
***************
*** 954,968 ****
--- 1115,1138 ----
case 'A': ranks = archeo_ranks; break;
case 'B': ranks = barbarian_ranks; break;
case 'C': ranks = nomad_ranks; break;
+ case 'D': ranks = drunk_ranks; break;
case 'E': ranks = elf_ranks; break;
+ case 'F': ranks = firefighter_ranks; break;
+ case 'G': ranks = geek_ranks; break;
case 'H': ranks = healer_ranks; break;
case 'K': ranks = knight_ranks; break;
+ case 'L': ranks = locksmith_ranks; break;
+ case 'M': ranks = musician_ranks; break;
+ case 'N': ranks = ninja_ranks; break;
+ case 'O': ranks = officer_ranks; break;
case 'P': ranks = priest_ranks; break;
case 'R': ranks = thief_ranks; break;
case 'S': ranks = ninja_ranks; break;
case 'T': ranks = tourist_ranks; break;
+ case 'U': ranks = undertaker_ranks; break;
case 'V': ranks = fighter_ranks; break;
case 'W': ranks = mage_ranks; break;
+ case 'Z': ranks = zookeeper_ranks; break;
default: ranks = 0; break;
}
return(ranks);
*** ../nh/src/shk.c Wed Feb 6 00:00:54 1991
--- src/shk.c Mon Oct 26 14:14:30 1992
***************
*** 177,183 ****
if((mons[PM_KEYSTONE_KOP].geno & G_GENOD) &&
(mons[PM_KOP_SERGEANT].geno & G_GENOD) &&
(mons[PM_KOP_LIEUTENANT].geno & G_GENOD) &&
! (mons[PM_KOP_KAPTAIN].geno & G_GENOD)) {
if (flags.soundok)
pline("But no one seems to respond to it.");
} else
--- 177,184 ----
if((mons[PM_KEYSTONE_KOP].geno & G_GENOD) &&
(mons[PM_KOP_SERGEANT].geno & G_GENOD) &&
(mons[PM_KOP_LIEUTENANT].geno & G_GENOD) &&
! (mons[PM_KOP_KAPTAIN].geno & G_GENOD) &&
! (mons[PM_KOP_KOMMISSIONER].geno & G_GENOD)) {
if (flags.soundok)
pline("But no one seems to respond to it.");
} else
***************
*** 209,216 ****

switch (rt) {
case ZOO:
! pline("Welcome to David's treasure zoo!");
break;
case SWAMP:
pline("It looks rather muddy down here.");
break;
--- 210,223 ----

switch (rt) {
case ZOO:
! pline("Welcome to Yuval's treasure zoo!");
break;
+ case ROOMELEVEN:
+ pline("Welcome to Room 11!");
+ break;
+ case ANTHILL:
+ pline("You enter a teeming anthill!");
+ break;
case SWAMP:
pline("It looks rather muddy down here.");
break;
***************
*** 228,233 ****
--- 235,255 ----
case BEEHIVE:
You("enter a giant beehive!");
break;
+ case WASPHIVE:
+ You("enter a giant wasp hive!");
+ break;
+ case GIANTCOURT:
+ You("enter a giant throne room!");
+ break;
+ case LEPRECOURT:
+ You("enter a tiny throne room!");
+ break;
+ case BADFOODSHOP:
+ You("enter an abandoned shop.");
+ break;
+ case REALZOO:
+ You("enter a smelly zoo!");
+ break;
#ifdef ARMY
case BARRACKS:
if(monstinroom(&mons[PM_SOLDIER], roomno) ||
***************
*** 1362,1367 ****
--- 1384,1390 ----
register int scnt = (cnt / 3) + 1; /* at least one sarge */
register int lcnt = (cnt / 6); /* maybe a lieutenant */
register int kcnt = (cnt / 9); /* and maybe a kaptain */
+ register int kmsn = (cnt / 12); /* and possibly a Kommissioner */

while(cnt--) {
if (enexto(mm, mm->x, mm->y, &mons[PM_KEYSTONE_KOP]))
***************
*** 1379,1385 ****
if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]))
(void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y);
}
! return(cnt + scnt + lcnt + kcnt);
}
#endif

--- 1402,1413 ----
if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]))
(void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y);
}
! while(kmsn--) {
! if (enexto(mm, mm->x, mm->y, &mons[PM_KOP_KOMMISSIONER]))
! (void) makemon(&mons[PM_KOP_KOMMISSIONER], mm->x, mm->y);
! }
!
! return(cnt + scnt + lcnt + kcnt + kmsn);
}
#endif

*** ../nh/src/sit.c Wed Apr 11 21:39:57 1990
--- src/sit.c Sun Oct 11 05:06:56 1992
***************
*** 29,35 ****
#ifdef THRONES
} else if(IS_THRONE(levl[u.ux][u.uy].typ)) {

! if (rnd(6) > 4) {
switch (rnd(13)) {
case 1:
adjattrib(rn2(A_MAX), -rn1(4,3), FALSE);
--- 29,35 ----
#ifdef THRONES
} else if(IS_THRONE(levl[u.ux][u.uy].typ)) {

! if (rnd(6) > 2) {
switch (rnd(13)) {
case 1:
adjattrib(rn2(A_MAX), -rn1(4,3), FALSE);
*** ../nh/src/sounds.c Wed Feb 6 00:00:57 1991
--- src/sounds.c Mon Oct 26 14:18:36 1992
***************
*** 101,106 ****
--- 101,108 ----

switch (roomtype) {
#ifdef THRONES
+ case GIANTCOURT:
+ case LEPRECOURT:
case COURT:
switch (rn2(3)+hallu) {
case 0:
***************
*** 149,154 ****
--- 151,157 ----
break;
}
break;
+ case WASPHIVE:
case BEEHIVE:
switch (rn2(2)+hallu) {
case 0:
***************
*** 194,199 ****
--- 197,232 ----
break;
}
break;
+ case ROOMELEVEN:
+ switch (rn2(3)+hallu) {
+ case 0:
+ You("hear strange noises!");
+ break;
+ case 1:
+ You("hear electronic beeping!");
+ break;
+ case 2:
+ You("hear classical music!");
+ break;
+ case 3:
+ You("seem to hear Jimi Hendrix!");
+ break;
+ }
+ break;
+ case ANTHILL:
+ switch (rn2(2)+hallu) {
+ case 0:
+ You("hear a munching sound!");
+ break;
+ case 1:
+ You("hear the patter of tiny feet!");
+ break;
+ case 2:
+ You("seem to hear Adam Ant!");
+ break;
+ }
+ break;
+ case REALZOO:
case ZOO:
switch (rn2(2)+hallu) {
case 0:
*** ../nh/src/spell.c Sat May 26 23:17:36 1990
--- src/spell.c Thu Oct 15 21:33:22 1992
***************
*** 99,105 ****
if (spl_book[i].sp_id == booktype) {
#ifdef HARD
Your("knowledge of that spell is keener.");
! spl_book[i].sp_uses += rn1(3,8-spl_book[i].sp_lev);
#else
pline("Oh, you already know that one!");
#endif
--- 99,105 ----
if (spl_book[i].sp_id == booktype) {
#ifdef HARD
Your("knowledge of that spell is keener.");
! spl_book[i].sp_uses += rn1(25,50-spl_book[i].sp_lev);
#else
pline("Oh, you already know that one!");
#endif
***************
*** 111,117 ****
#ifdef HARD
/* spells have 2 .. 10-level uses. */
/* ie 2 or 3 uses w/ most potent */
! spl_book[i].sp_uses = rn1(3,8-spl_book[i].sp_lev);
#endif
You("add the spell to your repertoire.");
makeknown(booktype);
--- 111,117 ----
#ifdef HARD
/* spells have 2 .. 10-level uses. */
/* ie 2 or 3 uses w/ most potent */
! spl_book[i].sp_uses = rn1(25,50-spl_book[i].sp_lev);
#endif
You("add the spell to your repertoire.");
makeknown(booktype);
***************
*** 401,407 ****
break;
case SPE_EXTRA_HEALING:
You("feel a fair bit better.");
! healup(d(2,8), 1, 0, 0);
break;
case SPE_CREATE_FAMILIAR:
make_familiar((struct obj *)0);
--- 401,407 ----
break;
case SPE_EXTRA_HEALING:
You("feel a fair bit better.");
! healup(d(2,8), 0, 0, 0);
break;
case SPE_CREATE_FAMILIAR:
make_familiar((struct obj *)0);
*** ../nh/src/steal.c Wed Feb 6 00:00:59 1991
--- src/steal.c Sun Oct 25 23:28:28 1992
***************
*** 113,119 ****
if(Blind)
pline("Somebody tries to rob you, but finds nothing to steal.");
else
! pline("%s tries to rob you, but she finds nothing to steal!",
Monnam(mtmp));
return(1); /* let her flee */
}
--- 113,119 ----
if(Blind)
pline("Somebody tries to rob you, but finds nothing to steal.");
else
! pline("%s tries to rob you, but finds nothing to steal!",
Monnam(mtmp));
return(1); /* let her flee */
}
***************
*** 193,206 ****
otmp->cursed = 0;
stop_occupation();
if(flags.female)
! pline("%s charms you. You gladly %s your %s.",
Blind ? "She" : Monnam(mtmp),
- curssv ? "let her take" : "hand over",
equipname(otmp));
else
! pline("%s seduces you and %s off your %s.",
! Blind ? "It" : Amonnam(mtmp, "beautiful"),
! curssv ? "helps you to take" : "you start taking",
equipname(otmp));
named++;
/* the following is to set multi for later on */
--- 193,204 ----
otmp->cursed = 0;
stop_occupation();
if(flags.female)
! pline("%s manages to relieve you of your %s.",
Blind ? "She" : Monnam(mtmp),
equipname(otmp));
else
! pline("%s manages to relieve you of your %s.",
! Blind ? "It" : Monnam(mtmp),
equipname(otmp));
named++;
/* the following is to set multi for later on */
***************
*** 236,242 ****
if(otmp == uball) unpunish();

freeinv(otmp);
! pline("%s stole %s.", named ? "She" : (Blind ? "It" : Monnam(mtmp)), doname(otmp));
mpickobj(mtmp,otmp);
if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE
&& !resists_ston(mtmp->data)) {
--- 234,240 ----
if(otmp == uball) unpunish();

freeinv(otmp);
! pline("%s stole %s.", named ? "It" : (Blind ? "It" : Monnam(mtmp)), doname(otmp));
mpickobj(mtmp,otmp);
if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE
&& !resists_ston(mtmp->data)) {
*** ../nh/src/topten.c Wed Feb 6 00:01:09 1991
--- src/topten.c Thu Oct 29 21:29:16 1992
***************
*** 30,36 ****
#define NAMSZ 10
#define DTHSZ 60
#define PERSMAX 3 /* entries per name/uid per char. allowed */
! #define POINTSMIN 1 /* must be > 0 */
#define ENTRYMAX 100 /* must be >= 10 */

#ifndef MSDOS
--- 30,36 ----
#define NAMSZ 10
#define DTHSZ 60
#define PERSMAX 3 /* entries per name/uid per char. allowed */
! #define POINTSMIN 100 /* must be > 0 */
#define ENTRYMAX 100 /* must be >= 10 */

#ifndef MSDOS
***************
*** 754,770 ****
case 'A': return PM_ARCHEOLOGIST;
case 'B': return PM_BARBARIAN;
case 'C': return (fem ? PM_CAVEWOMAN : PM_CAVEMAN);
case 'E': return PM_ELF;
case 'H': return PM_HEALER;
- case 'F': /* accept old Fighter class */
case 'K': return PM_KNIGHT;
case 'P': return (fem ? PM_PRIESTESS : PM_PRIEST);
case 'R': return PM_ROGUE;
! case 'N': /* accept old Ninja class */
case 'S': return PM_SAMURAI;
case 'T': return PM_TOURIST;
case 'V': return PM_VALKYRIE;
case 'W': return PM_WIZARD;
default: impossible("What weird class is this? (%c)", plch);
return PM_HUMAN_ZOMBIE;
}
--- 754,777 ----
case 'A': return PM_ARCHEOLOGIST;
case 'B': return PM_BARBARIAN;
case 'C': return (fem ? PM_CAVEWOMAN : PM_CAVEMAN);
+ case 'D': return PM_DRUNK;
case 'E': return PM_ELF;
+ case 'F': return PM_FIREFIGHTER;
+ case 'G': return PM_GEEK;
case 'H': return PM_HEALER;
case 'K': return PM_KNIGHT;
case 'P': return (fem ? PM_PRIESTESS : PM_PRIEST);
+ case 'O': return PM_OFFICER;
case 'R': return PM_ROGUE;
! case 'L': return PM_LOCKSMITH;
! case 'M': return PM_MUSICIAN;
! case 'N': return PM_NINJA;
case 'S': return PM_SAMURAI;
case 'T': return PM_TOURIST;
+ case 'U': return PM_UNDERTAKER;
case 'V': return PM_VALKYRIE;
case 'W': return PM_WIZARD;
+ case 'Z': return PM_ZOOKEEPER;
default: impossible("What weird class is this? (%c)", plch);
return PM_HUMAN_ZOMBIE;
}
*** ../nh/src/u_init.c Sun Mar 4 13:44:10 1990
--- src/u_init.c Sun Oct 18 14:31:46 1992
***************
*** 25,35 ****
/* roles[2] and [6] are changed for females */
/* in all cases, the corresponding male and female */
/* roles must start with the same letter */
! "Archeologist", "Barbarian", "Cave-man", "Elf", "Healer", "Knight",
! "Priest", "Rogue", "Samurai", "Tourist", "Valkyrie", "Wizard"
};

! const char *pl_classes = "ABCEHKPRSTVW";

struct you zerou;

--- 25,38 ----
/* roles[2] and [6] are changed for females */
/* in all cases, the corresponding male and female */
/* roles must start with the same letter */
! "Archeologist", "Barbarian", "Cave-man", "Drunk", "Elf",
! "Firefighter", "Geek", "Healer", "Knight",
! "Locksmith", "Musician", "Ninja", "Officer", "Priest",
! "Rogue", "Samurai", "Tourist", "Undertaker", "Valkyrie",
! "Wizard", "Zookeeper"
};

! const char *pl_classes = "ABCDEFGHKLMNOPRSTUVWZ";

struct you zerou;

***************
*** 89,94 ****
--- 92,98 ----

struct trobj Healer[] = {
{ SCALPEL, 0, WEAPON_SYM, 1, 1, UNDEF_BLESS },
+ { LAB_COAT, 0, ARMOR_SYM, 1, 1, UNDEF_BLESS },
{ LEATHER_GLOVES, 1, ARMOR_SYM, 1, 1, UNDEF_BLESS },
{ STETHOSCOPE, 0, TOOL_SYM, 1, 1, 0 },
{ POT_HEALING, 0, POTION_SYM, 4, 1, UNDEF_BLESS },
***************
*** 170,175 ****
--- 174,249 ----
{ 0, 0, 0, 0, 0, 0 }
};

+ struct trobj Drunk[] = {
+ { RUBBER_HOSE, 0, WEAPON_SYM, 1, 1, UNDEF_BLESS }, /* quan is variable */
+ { POT_BOOZE, UNDEF_SPE, POTION_SYM, 5, 1, UNDEF_BLESS },
+ { UNDEF_TYP, UNDEF_SPE, POTION_SYM, 5, 1, UNDEF_BLESS },
+ { UNDEF_TYP, UNDEF_SPE, POTION_SYM, 5, 1, UNDEF_BLESS },
+ { UNDEF_TYP, UNDEF_SPE, POTION_SYM, 5, 1, UNDEF_BLESS },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+ struct trobj Officer[] = {
+ { CLUB, 0, WEAPON_SYM, 1, 1, UNDEF_BLESS },
+ { LEATHER_ARMOR, 0, ARMOR_SYM, 1, 1, UNDEF_BLESS },
+ { WAN_MAGIC_MISSILE, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { WAN_STRIKING, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { DOUGHNUT, 0, FOOD_SYM, 6, 1, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+ struct trobj Musician[] = {
+ { FEDORA, 0, ARMOR_SYM, 1, 1, UNDEF_BLESS },
+ { HAWAIIAN_SHIRT, 2, ARMOR_SYM, 1, 1, UNDEF_BLESS },
+ { MAGIC_FLUTE, UNDEF_SPE, TOOL_SYM, 1, 1, UNDEF_BLESS },
+ { MAGIC_HARP, UNDEF_SPE, TOOL_SYM, 1, 1, UNDEF_BLESS },
+ { DRUM_OF_EARTHQUAKE, UNDEF_SPE, TOOL_SYM, 1, 1, UNDEF_BLESS },
+ { FROST_HORN, UNDEF_SPE, TOOL_SYM, 1, 1, UNDEF_BLESS },
+ { FIRE_HORN, UNDEF_SPE, TOOL_SYM, 1, 1, UNDEF_BLESS },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+ struct trobj Undertaker[] = {
+ { SCALPEL, 2, WEAPON_SYM, 1, 1, UNDEF_BLESS },
+ { EXPENSIVE_SUIT, 0, ARMOR_SYM, 1, 1, UNDEF_BLESS },
+ { WAN_UNDEAD_TURNING, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { WAN_UNDEAD_TURNING, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { TINNING_KIT, 0, TOOL_SYM, 1, 1, UNDEF_BLESS },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+ struct trobj Zookeeper[] = {
+ { BULLWHIP, 1, WEAPON_SYM, 1, 1, UNDEF_BLESS },
+ { TRIPE_RATION, 0, TOOL_SYM, 5, 1, UNDEF_BLESS },
+ { SCR_TAMING, UNDEF_SPE, SCROLL_SYM, 3, 1, 1 },
+ { LEASH, 0, TOOL_SYM, 3, 1, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+ struct trobj Firefighter[] = {
+ { AXE, 0, WEAPON_SYM, 1, 1, UNDEF_BLESS },
+ { POT_WATER, 0, POTION_SYM, 5, 1, 0 },
+ { SCR_FIRE, UNDEF_SPE, SCROLL_SYM, 4, 1, UNDEF_BLESS },
+ { WAN_FIRE, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+ struct trobj Locksmith[] = {
+ { WAN_OPENING, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { WAN_LOCKING, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
+ { SKELETON_KEY, 0, TOOL_SYM, 1, 1, 0 },
+ { LOCK_PICK, 9, TOOL_SYM, 1, 1, 0 },
+ { SACK, 0, TOOL_SYM, 1, 0, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+ struct trobj Geek[] = {
+ { SHARPENED_PENCIL, 3, WEAPON_SYM, 1, 1, UNDEF_BLESS },
+ { CANDY_BAR, 0, FOOD_SYM, 5, 1, 0 },
+ { EXPENSIVE_CAMERA, 0, TOOL_SYM, 1, 1, 0 },
+ { UGLY_BACKPACK, 0, TOOL_SYM, 1, 1, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
struct trobj Rogue[] = {
#define R_DAGGERS 1
{ SHORT_SWORD, 0, WEAPON_SYM, 1, 1, UNDEF_BLESS },
***************
*** 180,185 ****
--- 254,267 ----
{ SACK, 0, TOOL_SYM, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
};
+ struct trobj Ninja[] = {
+ { SHORT_SWORD, 0, WEAPON_SYM, 1, 1, UNDEF_BLESS }, /* the wakizashi */
+ { SHURIKEN, 0, WEAPON_SYM, 9, 1, UNDEF_BLESS }, /* quan is variable */
+ { POT_SICKNESS, 0, POTION_SYM, 1, 1, 0 },
+ { POT_INVISIBILITY, UNDEF_SPE, POTION_SYM, 1, 1, 1 },
+ { LOCK_PICK, 9, TOOL_SYM, 1, 1, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };

struct trobj Wizard[] = {
#define W_MULTSTART 2
***************
*** 471,476 ****
--- 553,586 ----
ini_inv(Knight);
knows_class(WEAPON_SYM);
break;
+ case 'D':
+ ini_inv(Drunk);
+ break;
+ case 'O':
+ ini_inv(Officer);
+ break;
+ case 'G':
+ ini_inv(Geek);
+ makeknown(UGLY_BACKPACK);
+ break;
+ case 'M':
+ ini_inv(Musician);
+ break;
+ case 'U':
+ ini_inv(Undertaker);
+ makeknown(EXPENSIVE_SUIT);
+ break;
+ case 'Z':
+ ini_inv(Zookeeper);
+ break;
+ case 'F':
+ ini_inv(Firefighter);
+ break;
+ case 'L':
+ ini_inv(Locksmith);
+ makeknown(SACK);
+ break;
+
case 'B':
ini_inv(Barbarian);
if(!rn2(6)) ini_inv(Lamp);
***************
*** 481,486 ****
--- 591,600 ----
if(!rn2(5)) ini_inv(Blindfold);
knows_class(WEAPON_SYM);
break;
+ case 'N':
+ ini_inv(Ninja);
+ knows_class(WEAPON_SYM);
+ break;
case 'P':
#ifdef SPELLS
u.uen = u.uenmax += rn2(4);
***************
*** 566,572 ****
/* 'useless' items */
|| obj->otyp == POT_HALLUCINATION
|| obj->otyp == SCR_AMNESIA
- || obj->otyp == SCR_FIRE
|| obj->otyp == RIN_AGGRAVATE_MONSTER
|| obj->otyp == RIN_HUNGER
|| obj->otyp == WAN_NOTHING
--- 680,685 ----
*** ../nh/src/uhitm.c Wed Feb 6 00:01:21 1991
--- src/uhitm.c Fri Dec 4 09:08:42 1992
***************
*** 934,942 ****
if(!Blind) You("killed your %s!", lmonnam(mdef) + 4);
else You("feel embarrassed for a moment.");
} else {
! if(!Blind && flags.verbose) pline("%s is killed!", Monnam(mdef));
else You("kill it!");
}
xkilled(mdef, 0);
return(2);
}
--- 934,965 ----
if(!Blind) You("killed your %s!", lmonnam(mdef) + 4);
else You("feel embarrassed for a moment.");
} else {
! if(!Blind && flags.verbose) {
! switch (rn2(10)) {
! case 0:
! case 1:
! case 2:
! case 3:
! case 4:
! case 5:
! case 6:
! pline("%s is killed!", Monnam(mdef));
! break;
! case 7:
! pline ("You annihilate %s!", Monnam(mdef));
! break;
! case 8:
! case 9:
! pline ("You slay %s!", Monnam(mdef));
! break;
! case 10:
! pline ("You pound %s into oblivion!", Monnam(mdef));
! break;
! }
! }
else You("kill it!");
}
+
xkilled(mdef, 0);
return(2);
}
*** ../nh/src/version.c Sun Mar 4 13:44:11 1990
--- src/version.c Fri Oct 16 01:20:56 1992
***************
*** 16,24 ****
doversion(){

#ifdef BETA
! pline("%s NetHack Beta Version %s - last build %s.",
#else
! pline("%s NetHack Version %s Patchlevel %d - last build %s.",
#endif
#if defined(MSDOS)
# if defined(TOS)
--- 16,24 ----
doversion(){

#ifdef BETA
! pline("%s NetHack++ Beta Version %s - last build %s.",
#else
! pline("%s NetHack++ Version %s Patchlevel %d - last build %s.",
#endif
#if defined(MSDOS)
# if defined(TOS)
*** ../nh/src/wizard.c Sun Mar 4 13:44:11 1990
--- src/wizard.c Wed Oct 14 01:15:38 1992
***************
*** 314,319 ****
--- 314,324 ----
"Verily, thy corpse could not smell worse!",
"Wait! I shall polymorph into a grid bug to give thee a fighting chance!",
"Why search for the Amulet? Thou wouldst but lose it, cretin.",
+ "Thy mother was a hamster, and thy father smelt of elderberries!",
+ "Thy odor is reminiscent of a rotting hag!",
+ "Verily, thou inhale sharply!",
+ "Run away, swine! I shall catch you!",
+ "Methinks thou art the illegitimate spawn of unwed parents!",
};
#endif

*** ../nh/src/zap.c Wed Feb 6 00:01:25 1991
--- src/zap.c Thu Oct 22 12:08:36 1992
***************
*** 245,250 ****
--- 245,262 ----
flags.botl = 1;
}
break;
+ case RIN_GAIN_INTELLIGENCE:
+ if(obj->owornmask & W_RING) {
+ ABON(A_INT) -= obj->spe;
+ flags.botl = 1;
+ }
+ break;
+ case RIN_GAIN_DEXTERITY:
+ if(obj->owornmask & W_RING) {
+ ABON(A_DEX) -= obj->spe;
+ flags.botl = 1;
+ }
+ break;
case RIN_ADORNMENT:
if(obj->owornmask & W_RING) {
ABON(A_CHA) -= obj->spe;
***************
*** 497,502 ****
--- 509,518 ----
case WAN_LIGHT:
litroom(TRUE);
break;
+ case WAN_HEALING:
+ You("feel a fair bit better.");
+ healup(d(2,8), 0, 0, 0);
+ break;
case WAN_SECRET_DOOR_DETECTION:
if(!findit()) return;
break;
***************
*** 864,869 ****
--- 880,889 ----
case SPE_LIGHT:
#endif
litroom(TRUE);
+ break;
+ case WAN_HEALING:
+ You("feel a fair bit better.");
+ healup(d(2,8), 0, 0, 0);
break;
case WAN_SECRET_DOOR_DETECTION:
#ifdef SPELLS
*** ../nh/include/config.h Thu May 24 20:47:01 1990
--- include/config.h Fri Oct 23 23:09:36 1992
***************
*** 14,25 ****
* provides it (no need to change sec#1, vmsconf.h handles it).
*/

! #define UNIX /* delete if no fork(), exec() available */

#ifdef __MSDOS__ /* Turbo C auto-defines __MSDOS__, MSC defines MSDOS */
#define MSDOS /* define for MS-DOS (in case compiler doesn't) */
#else
! /* #define MSDOS /* define for MS-DOS and most other micros */
/* DO NOT define for AMIGA - MSDOS will be
* automatically defined at the right place. */
# ifdef AZTEC_C /* Manx auto-defines this */
--- 14,25 ----
* provides it (no need to change sec#1, vmsconf.h handles it).
*/

! /* #define UNIX */ /* delete if no fork(), exec() available */

#ifdef __MSDOS__ /* Turbo C auto-defines __MSDOS__, MSC defines MSDOS */
#define MSDOS /* define for MS-DOS (in case compiler doesn't) */
#else
! #define MSDOS /* define for MS-DOS and most other micros */
/* DO NOT define for AMIGA - MSDOS will be
* automatically defined at the right place. */
# ifdef AZTEC_C /* Manx auto-defines this */
***************
*** 138,147 ****

#ifndef WIZARD /* allow for compile-time or Makefile changes */
# ifndef KR1ED
! #define WIZARD "izchak" /* the person allowed to use the -D option */
# else
#define WIZARD
! #define WIZARD_NAME "izchak"
# endif
#endif

--- 138,147 ----

#ifndef WIZARD /* allow for compile-time or Makefile changes */
# ifndef KR1ED
! #define WIZARD "Wizard" /* the person allowed to use the -D option */
# else
#define WIZARD
! #define WIZARD_NAME "Wizard"
# endif
#endif

***************
*** 156,164 ****
*/

#ifndef MACOS
! #define COMPRESS "/usr/local/compress" /* path name for 'compress' */
# ifndef COMPRESS
! #define ZEROCOMP /* Use only if COMPRESS is not used -- Olaf Seibert */
# endif
#endif

--- 156,164 ----
*/

#ifndef MACOS
! /* #define COMPRESS "pkzip" path name for 'compress' */
# ifndef COMPRESS
! /* #define ZEROCOMP /* Use only if COMPRESS is not used -- Olaf Seibert */
# endif
#endif

***************
*** 171,177 ****
* If you define HACKDIR, then this will be the default playground;
* otherwise it will be the current directory.
*/
! #define HACKDIR "/usr/games/lib/nethackdir" /* nethack directory */

/*
* Some system administrators are stupid enough to make Hack suid root
--- 171,177 ----
* If you define HACKDIR, then this will be the default playground;
* otherwise it will be the current directory.
*/
! /* #define HACKDIR "/usr/games/lib/nethackdir" */ /* nethack directory */

/*
* Some system administrators are stupid enough to make Hack suid root
***************
*** 301,309 ****
#endif

#define EXP_ON_BOTL /* Show experience on bottom line */
! /* #define SCORE_ON_BOTL /* added by Gary Erickson (erickson@ucivax) */
!
!

#include "global.h" /* Define everything else according to choices above */

--- 301,307 ----
#endif

#define EXP_ON_BOTL /* Show experience on bottom line */
! #define SCORE_ON_BOTL /* added by Gary Erickson (erickson@ucivax) */

#include "global.h" /* Define everything else according to choices above */

*** ../nh/include/decl.h Mon Mar 5 18:07:05 1990
--- include/decl.h Mon Oct 12 01:09:10 1992
***************
*** 85,90 ****
--- 85,91 ----
E const char NEARDATA *killer;
E char inv_order[];
E char NEARDATA plname[PL_NSIZ];
+ E char NEARDATA warning_string[];
E char NEARDATA dogname[];
E char NEARDATA catname[];
E const char NEARDATA sdir[], NEARDATA ndir[]; /* defined in cmd.c */
*** ../nh/include/global.h Wed Feb 6 00:32:29 1991
--- include/global.h Wed Oct 28 23:30:44 1992
***************
*** 8,15 ****
#include <stdio.h>


! /* #define BETA /* if a beta-test copy [MRS] */
! #define VERSION "3.0j" /* version number. */

/*
* Files expected to exist in the playground directory.
--- 8,15 ----
#include <stdio.h>


! #define BETA /* if a beta-test copy [MRS] */
! #define VERSION "3.0TH" /* version number. */

/*
* Files expected to exist in the playground directory.
***************
*** 178,183 ****
#define MAXULEV 30 /* max character experience level */

#define MAXMONNO 120 /* geno monst after this number killed */
! #define MHPMAX 500 /* maximum monster hp */

#endif /* GLOBAL_H /**/
--- 178,183 ----
#define MAXULEV 30 /* max character experience level */

#define MAXMONNO 120 /* geno monst after this number killed */
! #define MHPMAX 750 /* maximum monster hp */

#endif /* GLOBAL_H /**/
*** ../nh/include/mkroom.h Sun Mar 4 13:43:44 1990
--- include/mkroom.h Mon Oct 26 14:09:32 1992
***************
*** 48,64 ****
#define ZOO 8 /* floor covered with treasure and monsters */
#define DELPHI 9 /* contains Oracle and peripherals */
#define TEMPLE 10 /* contains a shrine */
! #define SHOPBASE 11 /* everything above this is a shop */
! #define ARMORSHOP 12 /* specific shop defines for level compiler */
! #define SCROLLSHOP 13
! #define POTIONSHOP 14
! #define WEAPONSHOP 15
! #define FOODSHOP 16
! #define RINGSHOP 17
! #define WANDSHOP 18
! #define TOOLSHOP 19
#ifdef SPELLS
! #define BOOKSHOP 20
#endif

#define IS_SHOP(x) ((x).rtype >= SHOPBASE)
--- 48,71 ----
#define ZOO 8 /* floor covered with treasure and monsters */
#define DELPHI 9 /* contains Oracle and peripherals */
#define TEMPLE 10 /* contains a shrine */
! #define WASPHIVE 11 /* [Tom] Wasp hive.. wasps and gems */
! #define GIANTCOURT 12 /* [Tom] Court, but with giants */
! #define LEPRECOURT 13 /* [Tom] Croesus' court */
! #define BADFOODSHOP 14 /* [Tom] Where bad food goes to rest... */
! #define REALZOO 15 /* [Tom] A zoo with zoo animals */
! #define ANTHILL 16 /* [Tom] An anthill */
! #define ROOMELEVEN 17 /* [Tom] The denizens of Room 11 */
! #define SHOPBASE 18 /* everything above this is a shop */
! #define ARMORSHOP 19 /* specific shop defines for level compiler */
! #define SCROLLSHOP 20
! #define POTIONSHOP 21
! #define WEAPONSHOP 22
! #define FOODSHOP 23
! #define RINGSHOP 24
! #define WANDSHOP 25
! #define TOOLSHOP 26
#ifdef SPELLS
! #define BOOKSHOP 27
#endif

#define IS_SHOP(x) ((x).rtype >= SHOPBASE)
*** ../nh/include/monsym.h Sun Mar 4 13:43:45 1990
--- include/monsym.h Sun Oct 18 18:56:52 1992
***************
*** 62,67 ****
--- 62,69 ----
#define S_GOLEM '\''
#define S_DEMON '&'
#define S_EEL ';'
+ #define S_BADLUNCH '%'
+ #define S_BADCOINS '$'
#define S_LIZARD ':'

#define S_WORM_TAIL '~'
*** ../nh/include/unixconf.h Wed Feb 6 00:32:30 1991
--- include/unixconf.h Sat Oct 10 18:21:30 1992
***************
*** 160,166 ****


#if defined(BSD) || defined(ULTRIX)
! #include <sys/time.h>
#else
#include <time.h>
#endif
--- 160,166 ----


#if defined(BSD) || defined(ULTRIX)
! #include <time.h>
#else
#include <time.h>
#endif

Thomas Michael Proudfoot

unread,
Dec 22, 1992, 11:46:56 PM12/22/92
to
THANK YOU! I've been trying to find something like this "chdiff" for a
while, and MSDOS's compare file so-called utility didn't help at all.

Once again, thank you!

By the way, I am leaving for home tomorrow, where I will unfortunately
have no net-access until late January. I hope everyone enjoys Nh++ as
much as Yuval and I do, and I know you are as eagerly awaiting the
official 3.1 as we are.

-Tom

--
+-------------------------------------------------------------+
| Tom Proudfoot |
| pro...@ocf.berkeley.edu ...catchy quote... |
+-------------------------------------------------------------+

0 new messages