diff -C 10 -c --recursive nethack-3.3.0/include/config.h nethack-cow/include/config.h *** nethack-3.3.0/include/config.h Fri Dec 10 23:20:49 1999 --- nethack-cow/include/config.h Wed Dec 15 17:47:38 1999 *************** *** 282,301 **** --- 282,302 ---- /* dungeon features */ #define SINKS /* Kitchen sinks - Janet Walz */ /* dungeon levels */ #define WALLIFIED_MAZE /* Fancy mazes - Jean-Christophe Collet */ #define REINCARNATION /* Special Rogue-like levels */ /* monsters & objects */ #define KOPS /* Keystone Kops by Scott R. Turner */ #define SEDUCE /* Succubi/incubi seduction, by KAA, suggested by IM */ #define STEED /* Riding steeds */ #define TOURIST /* Tourist players with cameras and Hawaiian shirts */ + #define COWS /* Cows (S.Hammack) */ /* difficulty */ #define ELBERETH /* Engraving the E-word repels monsters */ /* I/O */ #define REDO /* support for redoing last command - DGK */ #if !defined(MAC) # define CLIPPING /* allow smaller screens -- ERS */ #endif #ifdef REDO # define DOAGAIN '\001' /* ^A, the "redo" key used in cmd.c and getline.c */ diff -C 10 -c --recursive nethack-3.3.0/include/mkroom.h nethack-cow/include/mkroom.h *** nethack-3.3.0/include/mkroom.h Fri Dec 10 23:20:50 1999 --- nethack-cow/include/mkroom.h Wed Dec 15 17:47:12 1999 *************** *** 54,86 **** #define VAULT 4 /* contains piles of gold */ #define BEEHIVE 5 /* contains killer bees and royal jelly */ #define MORGUE 6 /* contains corpses, undead and ghosts */ #define BARRACKS 7 /* contains soldiers and their gear */ #define ZOO 8 /* floor covered with treasure and monsters */ #define DELPHI 9 /* contains Oracle and peripherals */ #define TEMPLE 10 /* contains a shrine */ #define LEPREHALL 11 /* leprechaun hall (Tom Proudfoot) */ #define COCKNEST 12 /* cockatrice nest (Tom Proudfoot) */ #define ANTHOLE 13 /* ants (Tom Proudfoot) */ ! #define SHOPBASE 14 /* everything above this is a shop */ ! #define ARMORSHOP 15 /* specific shop defines for level compiler */ ! #define SCROLLSHOP 16 ! #define POTIONSHOP 17 ! #define WEAPONSHOP 18 ! #define FOODSHOP 19 ! #define RINGSHOP 20 ! #define WANDSHOP 21 ! #define TOOLSHOP 22 ! #define BOOKSHOP 23 ! #define UNIQUESHOP 24 /* shops here & above not randomly gen'd. */ ! #define CANDLESHOP 24 ! #define MAXRTYPE 24 /* maximum valid room type */ /* Special type for search_special() */ #define ANY_TYPE (-1) #define ANY_SHOP (-2) #define NO_ROOM 0 /* indicates lack of room-occupancy */ #define SHARED 1 /* indicates normal shared boundary */ #define SHARED_PLUS 2 /* indicates shared boundary - extra adjacent- * square searching required */ --- 54,87 ---- #define VAULT 4 /* contains piles of gold */ #define BEEHIVE 5 /* contains killer bees and royal jelly */ #define MORGUE 6 /* contains corpses, undead and ghosts */ #define BARRACKS 7 /* contains soldiers and their gear */ #define ZOO 8 /* floor covered with treasure and monsters */ #define DELPHI 9 /* contains Oracle and peripherals */ #define TEMPLE 10 /* contains a shrine */ #define LEPREHALL 11 /* leprechaun hall (Tom Proudfoot) */ #define COCKNEST 12 /* cockatrice nest (Tom Proudfoot) */ #define ANTHOLE 13 /* ants (Tom Proudfoot) */ ! #define COWHIVE 14 /* cows (S.Hammack) */ ! #define SHOPBASE 15 /* everything above this is a shop */ ! #define ARMORSHOP 16 /* specific shop defines for level compiler */ ! #define SCROLLSHOP 17 ! #define POTIONSHOP 18 ! #define WEAPONSHOP 19 ! #define FOODSHOP 20 ! #define RINGSHOP 21 ! #define WANDSHOP 22 ! #define TOOLSHOP 23 ! #define BOOKSHOP 24 ! #define UNIQUESHOP 25 /* shops here & above not randomly gen'd. */ ! #define CANDLESHOP 25 ! #define MAXRTYPE 26 /* maximum valid room type */ /* Special type for search_special() */ #define ANY_TYPE (-1) #define ANY_SHOP (-2) #define NO_ROOM 0 /* indicates lack of room-occupancy */ #define SHARED 1 /* indicates normal shared boundary */ #define SHARED_PLUS 2 /* indicates shared boundary - extra adjacent- * square searching required */ diff -C 10 -c --recursive nethack-3.3.0/include/monflag.h nethack-cow/include/monflag.h *** nethack-3.3.0/include/monflag.h Fri Dec 10 23:20:50 1999 --- nethack-cow/include/monflag.h Wed Dec 15 17:47:12 1999 *************** *** 41,60 **** --- 41,61 ---- #define MS_RIDER 30 /* astral level special monsters */ #define MS_LEADER 31 /* your class leader */ #define MS_NEMESIS 32 /* your nemesis */ #define MS_GUARDIAN 33 /* your leader's guards */ #define MS_SELL 34 /* demand payment, complain about shoplifters */ #define MS_ORACLE 35 /* do a consultation */ #define MS_PRIEST 36 /* ask for contribution; do cleansing */ #define MS_SPELL 37 /* spellcaster not matching any of the above */ #define MS_WERE 38 /* lycanthrope in human form */ #define MS_BOAST 39 /* giants */ + #define MS_MOO 40 /* cows */ #define MR_FIRE 0x01 /* resists fire */ #define MR_COLD 0x02 /* resists cold */ #define MR_SLEEP 0x04 /* resists sleep */ #define MR_DISINT 0x08 /* resists disintegration */ #define MR_ELEC 0x10 /* resists electricity */ #define MR_POISON 0x20 /* resists poison */ #define MR_ACID 0x40 /* resists acid */ #define MR_STONE 0x80 /* resists petrification */ diff -C 10 -c --recursive nethack-3.3.0/include/rm.h nethack-cow/include/rm.h *** nethack-3.3.0/include/rm.h Fri Dec 10 23:20:50 1999 --- nethack-cow/include/rm.h Wed Dec 15 17:47:13 1999 *************** *** 435,454 **** --- 435,455 ---- struct levelflags { uchar nfountains; /* number of fountains on level */ uchar nsinks; /* number of sinks on the level */ /* Several flags that give hints about what's on the level */ Bitfield(has_shop, 1); Bitfield(has_vault, 1); Bitfield(has_zoo, 1); Bitfield(has_court, 1); Bitfield(has_morgue, 1); Bitfield(has_beehive, 1); + Bitfield(has_cowhive, 1); Bitfield(has_barracks, 1); Bitfield(has_temple, 1); Bitfield(has_swamp, 1); Bitfield(noteleport,1); Bitfield(hardfloor,1); Bitfield(nommap,1); Bitfield(hero_memory,1); /* hero has memory */ Bitfield(shortsighted,1); /* monsters are shortsighted */ Bitfield(graveyard,1); /* has_morgue, but remains set */ diff -C 10 -c --recursive nethack-3.3.0/src/do_name.c nethack-cow/src/do_name.c *** nethack-3.3.0/src/do_name.c Fri Dec 10 23:20:53 1999 --- nethack-cow/src/do_name.c Wed Dec 15 17:47:13 1999 *************** *** 780,800 **** "Totoro", /* Tonari no Totoro */ "ohmu", /* Nausicaa */ "youma", /* Sailor Moon */ "nyaasu", /* Pokemon (Meowth) */ "Godzilla", "King Kong", /* monster movies */ "earthquake beast", /* old L of SH */ "Invid", /* Robotech */ "Terminator", /* The Terminator */ "boomer", /* Bubblegum Crisis */ "Dalek", /* Dr. Who ("Exterminate!") */ ! "microscopic space fleet", "Ravenous Bugblatter Beast of Traal", /* HGttG */ "teenage mutant ninja turtle", /* TMNT */ "samurai rabbit", /* Usagi Yojimbo */ "aardvark", /* Cerebus */ "Audrey II", /* Little Shop of Horrors */ "witch doctor", "one-eyed one-horned flying purple people eater", /* 50's rock 'n' roll */ "Barney the dinosaur", /* saccharine kiddy TV */ "Morgoth", /* Angband */ "Vorlon", /* Babylon 5 */ --- 780,800 ---- "Totoro", /* Tonari no Totoro */ "ohmu", /* Nausicaa */ "youma", /* Sailor Moon */ "nyaasu", /* Pokemon (Meowth) */ "Godzilla", "King Kong", /* monster movies */ "earthquake beast", /* old L of SH */ "Invid", /* Robotech */ "Terminator", /* The Terminator */ "boomer", /* Bubblegum Crisis */ "Dalek", /* Dr. Who ("Exterminate!") */ ! "microscopic space fleet", /* HGttG */ "teenage mutant ninja turtle", /* TMNT */ "samurai rabbit", /* Usagi Yojimbo */ "aardvark", /* Cerebus */ "Audrey II", /* Little Shop of Horrors */ "witch doctor", "one-eyed one-horned flying purple people eater", /* 50's rock 'n' roll */ "Barney the dinosaur", /* saccharine kiddy TV */ "Morgoth", /* Angband */ "Vorlon", /* Babylon 5 */ diff -C 10 -c --recursive nethack-3.3.0/src/hack.c nethack-cow/src/hack.c *** nethack-3.3.0/src/hack.c Fri Dec 10 23:20:54 1999 --- nethack-cow/src/hack.c Wed Dec 15 17:47:14 1999 *************** *** 1318,1338 **** break; case BEEHIVE: You("enter a giant beehive!"); break; case COCKNEST: You("enter a disgusting nest!"); break; case ANTHOLE: You("enter an anthole!"); break; ! case BARRACKS: if(monstinroom(&mons[PM_SOLDIER], roomno) || monstinroom(&mons[PM_SERGEANT], roomno) || monstinroom(&mons[PM_LIEUTENANT], roomno) || monstinroom(&mons[PM_CAPTAIN], roomno)) You("enter a military barracks!"); else You("enter an abandoned barracks."); break; case DELPHI: if(monstinroom(&mons[PM_ORACLE], roomno)) --- 1318,1343 ---- break; case BEEHIVE: You("enter a giant beehive!"); break; case COCKNEST: You("enter a disgusting nest!"); break; case ANTHOLE: You("enter an anthole!"); break; ! #ifdef COWS ! case COWHIVE: ! You("enter a giant cowhive!"); ! break; ! #endif ! case BARRACKS: if(monstinroom(&mons[PM_SOLDIER], roomno) || monstinroom(&mons[PM_SERGEANT], roomno) || monstinroom(&mons[PM_LIEUTENANT], roomno) || monstinroom(&mons[PM_CAPTAIN], roomno)) You("enter a military barracks!"); else You("enter an abandoned barracks."); break; case DELPHI: if(monstinroom(&mons[PM_ORACLE], roomno)) diff -C 10 -c --recursive nethack-3.3.0/src/mklev.c nethack-cow/src/mklev.c *** nethack-3.3.0/src/mklev.c Fri Dec 10 23:20:55 1999 --- nethack-cow/src/mklev.c Wed Dec 15 17:47:14 1999 *************** *** 718,738 **** { register int u_depth = depth(&u.uz); #ifdef WIZARD if(wizard && getenv("SHOPTYPE")) mkroom(SHOPBASE); else #endif if (u_depth > 1 && u_depth < depth(&medusa_level) && nroom >= room_threshold && rn2(u_depth) < 3) mkroom(SHOPBASE); ! else if (u_depth > 4 && !rn2(6)) mkroom(COURT); else if (u_depth > 5 && !rn2(8) && !(mvitals[PM_LEPRECHAUN].mvflags & G_GONE)) mkroom(LEPREHALL); else if (u_depth > 6 && !rn2(7)) mkroom(ZOO); else if (u_depth > 8 && !rn2(5)) mkroom(TEMPLE); else if (u_depth > 9 && !rn2(5) && !(mvitals[PM_KILLER_BEE].mvflags & G_GONE)) mkroom(BEEHIVE); else if (u_depth > 11 && !rn2(6)) mkroom(MORGUE); else if (u_depth > 12 && !rn2(8)) mkroom(ANTHOLE); else if (u_depth > 14 && !rn2(4) && !(mvitals[PM_SOLDIER].mvflags & G_GONE)) mkroom(BARRACKS); --- 718,741 ---- { register int u_depth = depth(&u.uz); #ifdef WIZARD if(wizard && getenv("SHOPTYPE")) mkroom(SHOPBASE); else #endif if (u_depth > 1 && u_depth < depth(&medusa_level) && nroom >= room_threshold && rn2(u_depth) < 3) mkroom(SHOPBASE); ! #ifdef COWS ! else if (u_depth > 1 && !rn2(4)) mkroom(COWHIVE); ! #endif ! else if (u_depth > 4 && !rn2(6)) mkroom(COURT); else if (u_depth > 5 && !rn2(8) && !(mvitals[PM_LEPRECHAUN].mvflags & G_GONE)) mkroom(LEPREHALL); else if (u_depth > 6 && !rn2(7)) mkroom(ZOO); else if (u_depth > 8 && !rn2(5)) mkroom(TEMPLE); else if (u_depth > 9 && !rn2(5) && !(mvitals[PM_KILLER_BEE].mvflags & G_GONE)) mkroom(BEEHIVE); else if (u_depth > 11 && !rn2(6)) mkroom(MORGUE); else if (u_depth > 12 && !rn2(8)) mkroom(ANTHOLE); else if (u_depth > 14 && !rn2(4) && !(mvitals[PM_SOLDIER].mvflags & G_GONE)) mkroom(BARRACKS); diff -C 10 -c --recursive nethack-3.3.0/src/mkroom.c nethack-cow/src/mkroom.c *** nethack-3.3.0/src/mkroom.c Fri Dec 10 23:20:55 1999 --- nethack-cow/src/mkroom.c Wed Dec 15 17:47:15 1999 *************** *** 54,73 **** --- 54,76 ---- case COURT: mkzoo(COURT); break; case ZOO: mkzoo(ZOO); break; case BEEHIVE: mkzoo(BEEHIVE); break; case MORGUE: mkzoo(MORGUE); break; case BARRACKS: mkzoo(BARRACKS); break; case SWAMP: mkswamp(); break; case TEMPLE: mktemple(); break; case LEPREHALL: mkzoo(LEPREHALL); break; case COCKNEST: mkzoo(COCKNEST); break; case ANTHOLE: mkzoo(ANTHOLE); break; + #ifdef COWS + case COWHIVE: mkzoo(COWHIVE); break; + #endif default: impossible("Tried to make a room of type %d.", roomtype); } } STATIC_OVL void mkshop() { register struct mkroom *sroom; int i = -1; #ifdef WIZARD *************** *** 95,115 **** return; } if(*ep == 's' || *ep == 'S'){ mkzoo(BARRACKS); return; } if(*ep == 'a' || *ep == 'A'){ mkzoo(ANTHOLE); return; } ! if(*ep == 'c' || *ep == 'C'){ mkzoo(COCKNEST); return; } if(*ep == 'l' || *ep == 'L'){ mkzoo(LEPREHALL); return; } if(*ep == '_'){ mktemple(); return; --- 98,124 ---- return; } if(*ep == 's' || *ep == 'S'){ mkzoo(BARRACKS); return; } if(*ep == 'a' || *ep == 'A'){ mkzoo(ANTHOLE); return; } ! #ifdef COWS ! if(*ep == 'q' || *ep == 'Q'){ ! mkzoo(COWHIVE); ! return; ! } ! #endif ! if(*ep == 'c' || *ep == 'C'){ mkzoo(COCKNEST); return; } if(*ep == 'l' || *ep == 'L'){ mkzoo(LEPREHALL); return; } if(*ep == '_'){ mktemple(); return; *************** *** 289,321 **** continue; mon = makemon( (type == COURT) ? courtmon() : (type == BARRACKS) ? squadmon() : (type == MORGUE) ? morguemon() : (type == BEEHIVE) ? (sx == tx && sy == ty ? &mons[PM_QUEEN_BEE] : &mons[PM_KILLER_BEE]) : (type == LEPREHALL) ? &mons[PM_LEPRECHAUN] : (type == COCKNEST) ? &mons[PM_COCKATRICE] : ! (type == ANTHOLE) ? antholemon() : (struct permonst *) 0, sx, sy, NO_MM_FLAGS); if(mon) { mon->msleeping = 1; if (type==COURT && mon->mpeaceful) { mon->mpeaceful = 0; set_malign(mon); } } switch(type) { case ZOO: ! case LEPREHALL: if(sroom->doorct) { int distval = dist2(sx,sy,doors[sh].x,doors[sh].y); i = sq(distval); } else i = goldlim; if(i >= goldlim) i = 5*level_difficulty(); goldlim -= i; (void) mkgold((long) rn1(i, 10), sx, sy); --- 298,336 ---- continue; mon = makemon( (type == COURT) ? courtmon() : (type == BARRACKS) ? squadmon() : (type == MORGUE) ? morguemon() : (type == BEEHIVE) ? (sx == tx && sy == ty ? &mons[PM_QUEEN_BEE] : &mons[PM_KILLER_BEE]) : (type == LEPREHALL) ? &mons[PM_LEPRECHAUN] : (type == COCKNEST) ? &mons[PM_COCKATRICE] : ! #ifdef COWS ! (type == COWHIVE) ? &mons[PM_COW] : ! #endif ! (type == ANTHOLE) ? antholemon() : (struct permonst *) 0, sx, sy, NO_MM_FLAGS); if(mon) { mon->msleeping = 1; if (type==COURT && mon->mpeaceful) { mon->mpeaceful = 0; set_malign(mon); } } switch(type) { case ZOO: ! #ifdef COWS ! case COWHIVE: ! #endif ! case LEPREHALL: if(sroom->doorct) { int distval = dist2(sx,sy,doors[sh].x,doors[sh].y); i = sq(distval); } else i = goldlim; if(i >= goldlim) i = 5*level_difficulty(); goldlim -= i; (void) mkgold((long) rn1(i, 10), sx, sy); *************** *** 373,393 **** break; case MORGUE: level.flags.has_morgue = 1; break; case SWAMP: level.flags.has_swamp = 1; break; case BEEHIVE: level.flags.has_beehive = 1; break; ! } } /* make a swarm of undead around mm */ void mkundead(mm, revive_corpses, mm_flags) coord *mm; boolean revive_corpses; int mm_flags; { int cnt = (level_difficulty() + 1)/10 + rnd(5); --- 388,413 ---- break; case MORGUE: level.flags.has_morgue = 1; break; case SWAMP: level.flags.has_swamp = 1; break; case BEEHIVE: level.flags.has_beehive = 1; break; ! #ifdef COWS ! case COWHIVE: ! level.flags.has_cowhive = 1; ! break; ! #endif ! } } /* make a swarm of undead around mm */ void mkundead(mm, revive_corpses, mm_flags) coord *mm; boolean revive_corpses; int mm_flags; { int cnt = (level_difficulty() + 1)/10 + rnd(5); diff -C 10 -c --recursive nethack-3.3.0/src/monst.c nethack-cow/src/monst.c *** nethack-3.3.0/src/monst.c Fri Dec 10 23:20:54 1999 --- nethack-cow/src/monst.c Wed Dec 15 17:47:16 1999 *************** *** 735,754 **** --- 735,761 ---- MON("glass piercer", S_PIERCER, LVL(7, 1, 0, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 300, 0, MS_SILENT, MZ_MEDIUM), 0, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CLR_WHITE), /* * quadrupeds */ + MON("cow", S_QUADRUPED, + LVL(0, 9, 2, 0, -2), (G_GENO|G_LGROUP|7), + A(ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_BUTT, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(400, 400, 0, MS_MOO, MZ_LARGE), 0, 0, + M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE, M3_INFRAVISIBLE, + CLR_GRAY), MON("rothe", S_QUADRUPED, LVL(2, 9, 7, 0, 0), (G_GENO|G_SGROUP|4), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 100, 0, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("mumak", S_QUADRUPED, LVL(5, 9, 0, 0, -2), (G_GENO|1), A(ATTK(AT_BUTT, AD_PHYS, 4,12), ATTK(AT_BITE, AD_PHYS, 2, 6), *************** *** 2052,2071 **** --- 2059,2084 ---- A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK), SIZ(1200, 700, 0, MS_SILENT, MZ_MEDIUM), MR_FIRE|MR_COLD|MR_STONE, MR_STONE, M1_BREATHLESS|M1_WALLWALK|M1_THICK_HIDE|M1_METALLIVORE, M2_HOSTILE|M2_STRONG, 0, CLR_BROWN), /* * Yeti, apes and other large beasts */ + MON("ravenous bugblatter beast of Traal", S_YETI, + LVL(0, 9, 6, 0, -1), (G_GENO|1), + A(ATTK(AT_BITE, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 3), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(2000, 500, 0, MS_GURGLE, MZ_LARGE), 0, 0, + M1_ANIMAL|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_GREEN), MON("monkey", S_YETI, LVL(2, 12, 6, 0, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 50, 0, MS_GROWL, MZ_SMALL), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, 0, M3_INFRAVISIBLE, CLR_GRAY), MON("ape", S_YETI, LVL(4, 12, 6, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), diff -C 10 -c --recursive nethack-3.3.0/src/sounds.c nethack-cow/src/sounds.c *** nethack-3.3.0/src/sounds.c Fri Dec 10 23:20:56 1999 --- nethack-cow/src/sounds.c Wed Dec 15 17:47:16 1999 *************** *** 144,163 **** --- 144,183 ---- You_hear("an angry drone."); break; case 2: You_hear("bees in your %sbonnet!", uarmh ? "" : "(nonexistent) "); break; } return; } } + #ifdef COWS + if (level.flags.has_cowhive && !rn2(200)) { + for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) + if (mtmp->data == &mons[PM_COW] && + mon_in_room(mtmp, COWHIVE)) { + switch (rn2(2)+hallu) { + case 0: + You_hear("a distant mooing."); + break; + case 1: + You_hear("a loud moo."); + break; + case 2: + You_hear("someone singing about ice cream!"); + break; + } + return; + } + } + #endif if (level.flags.has_morgue && !rn2(200)) { for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) if (is_undead(mtmp->data) && mon_in_room(mtmp, MORGUE)) { switch (rn2(2)+hallu) { case 0: You("suddenly realize it is unnaturally quiet."); break; case 1: pline_The("%s on the back of your %s stands up.", *************** *** 509,529 **** if (mtmp->mtame < 5) pline_msg = "neighs."; else if (moves > EDOG(mtmp)->hungrytime) pline_msg = "whinnies."; else pline_msg = "whickers."; break; case MS_WAIL: pline_msg = "wails mournfully."; break; ! case MS_GURGLE: pline_msg = "gurgles."; break; case MS_BURBLE: pline_msg = "burbles."; break; case MS_SHRIEK: pline_msg = "shrieks."; aggravate(); break; case MS_IMITATE: --- 529,554 ---- if (mtmp->mtame < 5) pline_msg = "neighs."; else if (moves > EDOG(mtmp)->hungrytime) pline_msg = "whinnies."; else pline_msg = "whickers."; break; case MS_WAIL: pline_msg = "wails mournfully."; break; ! #ifdef COWS ! case MS_MOO: ! pline_msg = "moos."; ! break; ! #endif ! case MS_GURGLE: pline_msg = "gurgles."; break; case MS_BURBLE: pline_msg = "burbles."; break; case MS_SHRIEK: pline_msg = "shrieks."; aggravate(); break; case MS_IMITATE: diff -C 10 -c --recursive nethack-3.3.0/src/sp_lev.c nethack-cow/src/sp_lev.c *** nethack-3.3.0/src/sp_lev.c Fri Dec 10 23:20:56 1999 --- nethack-cow/src/sp_lev.c Wed Dec 15 17:47:17 1999 *************** *** 1452,1472 **** switch (croom->rtype) { case VAULT: for (x=croom->lx;x<=croom->hx;x++) for (y=croom->ly;y<=croom->hy;y++) (void) mkgold((long)rn1(abs(depth(&u.uz))*100, 51), x, y); break; case COURT: case ZOO: case BEEHIVE: case MORGUE: ! case BARRACKS: fill_zoo(croom); break; } } switch (croom->rtype) { case VAULT: level.flags.has_vault = TRUE; break; case ZOO: level.flags.has_zoo = TRUE; --- 1452,1475 ---- switch (croom->rtype) { case VAULT: for (x=croom->lx;x<=croom->hx;x++) for (y=croom->ly;y<=croom->hy;y++) (void) mkgold((long)rn1(abs(depth(&u.uz))*100, 51), x, y); break; case COURT: case ZOO: case BEEHIVE: case MORGUE: ! #ifdef COWS ! case COWHIVE: ! #endif ! case BARRACKS: fill_zoo(croom); break; } } switch (croom->rtype) { case VAULT: level.flags.has_vault = TRUE; break; case ZOO: level.flags.has_zoo = TRUE; *************** *** 1482,1501 **** --- 1485,1509 ---- break; case BARRACKS: level.flags.has_barracks = TRUE; break; case TEMPLE: level.flags.has_temple = TRUE; break; case SWAMP: level.flags.has_swamp = TRUE; break; + #ifdef COWS + case COWHIVE: + level.flags.has_cowhive = TRUE; + break; + #endif } } STATIC_OVL void free_rooms(ro, n) room **ro; int n; { short j; room *r;