Subject: v17i045: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch1d/31 Newsgroups: comp.sources.games Approved: billr@saab.CNA.TEK.COM Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller) Posting-number: Volume 17, Issue 45 Archive-name: nethack31/Patch1d Patch-To: nethack31: Volume 16, Issue 1-116 Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'patches01f' <<'END_OF_FILE' X*** /tmp/da08381 Thu Feb 25 10:24:07 1993 X--- src/monst.c Sun Feb 21 16:16:12 1993 X*************** X*** 48,54 **** X */ X X #ifndef SPLITMON_2 X! struct permonst NEARDATA playermon = { /* used by weapons bonus code */ X "player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, X NO_ATTK, NO_ATTK, NO_ATTK }, X--- 48,54 ---- X */ X X #ifndef SPLITMON_2 X! NEARDATA struct permonst playermon = { /* used by weapons bonus code */ X "player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, X NO_ATTK, NO_ATTK, NO_ATTK }, X*************** X*** 55,61 **** X WT_HUMAN, 400, PL_NSIZ, MS_HUMANOID, MZ_HUMAN, 0, 0, X M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, X M2_HUMAN | M2_STRONG | M2_COLLECT, 0, C(HI_DOMESTIC) X! }, NEARDATA *uasmon = &playermon; X #endif /* SPLITMON_2 */ X X /* X--- 55,61 ---- X WT_HUMAN, 400, PL_NSIZ, MS_HUMANOID, MZ_HUMAN, 0, 0, X M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, X M2_HUMAN | M2_STRONG | M2_COLLECT, 0, C(HI_DOMESTIC) X! }, *uasmon = &playermon; X #endif /* SPLITMON_2 */ X X /* X*************** X*** 97,103 **** X */ X X #ifndef SPLITMON_2 X! struct permonst NEARDATA mons[] = { X /* ants */ X { "giant ant", S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3), X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, X--- 97,103 ---- X */ X X #ifndef SPLITMON_2 X! NEARDATA struct permonst mons[] = { X /* ants */ X { "giant ant", S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3), X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, X*************** X*** 1437,1443 **** X WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0, X M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, X M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | X! M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSBOOK, C(HI_LORD) }, X /* Wraiths */ X { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, X--- 1437,1444 ---- X WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0, X M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, X M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | X! M2_NASTY | M2_PRINCE | M2_MALE, M3_WAITFORU | M3_WANTSBOOK, X! C(HI_LORD) }, X /* Wraiths */ X { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, X*************** X*** 1794,1800 **** X MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_SWIM | X M1_AMPHIBIOUS | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_OMNIVORE, X M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE, X! 0, C(BRIGHT_GREEN) }, X { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN, X { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X--- 1795,1801 ---- X MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_SWIM | X M1_AMPHIBIOUS | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_OMNIVORE, X M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE, X! M3_WAITFORU, C(BRIGHT_GREEN) }, X { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN, X { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X*************** X*** 1811,1817 **** X NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_GUARD, MZ_HUMAN, X MR_STONE, MR_STONE, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, X! M2_NOPOLY | M2_HUMAN | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_NASTY | X M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | X M2_MAGIC, 0, C(HI_LORD) }, X #endif X--- 1812,1818 ---- X NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_GUARD, MZ_HUMAN, X MR_STONE, MR_STONE, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, X! M2_NOPOLY | M2_HUMAN | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | X M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | X M2_MAGIC, 0, C(HI_LORD) }, X #endif X*************** X*** 1973,1979 **** X M1_ACID | M1_POIS, X M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | X M2_LORD | M2_MALE, X! M3_WANTSAMUL, C(BRIGHT_GREEN) }, X { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 }, X--- 1974,1980 ---- X M1_ACID | M1_POIS, X M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | X M2_LORD | M2_MALE, X! M3_WAITFORU | M3_WANTSAMUL, C(BRIGHT_GREEN) }, X { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 }, X*************** X*** 1992,1998 **** X MR_FIRE | MR_POISON, 0, X M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | X M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT, X! M3_WANTSBOOK | M3_WANTSAMUL, C(HI_LORD) }, X { "Geryon", S_DEMON, 72, 3, -3, 75, 15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 }, X--- 1993,1999 ---- X MR_FIRE | MR_POISON, 0, X M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | X M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT, X! M3_WAITFORU | M3_WANTSBOOK | M3_WANTSAMUL, C(HI_LORD) }, X { "Geryon", S_DEMON, 72, 3, -3, 75, 15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 }, X*************** X*** 2303,2310 **** X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_NASTY | X M2_COLLECT | M2_MAGIC, M3_CLOSE, C(WHITE) }, X { "Master of Thieves", S_HUMAN, 20, 15, 0, 30, -20, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, X! NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | X--- 2304,2311 ---- X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_NASTY | X M2_COLLECT | M2_MAGIC, M3_CLOSE, C(WHITE) }, X { "Master of Thieves", S_HUMAN, 20, 15, 0, 30, -20, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, X! { AT_CLAW, AD_SAMU, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | X*************** X*** 2346,2352 **** X { "Minion of Huhetol", S_DEMON, 16, 10, -2, 75, -14, X (G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 }, X! { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0, X M1_FLY | M1_SEE_INVIS | M1_POIS, X M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | X--- 2347,2354 ---- X { "Minion of Huhetol", S_DEMON, 16, 10, -2, 75, -14, X (G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 }, X! { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_SAMU, 2, 6 }, X! NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0, X M1_FLY | M1_SEE_INVIS | M1_POIS, X M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | X*************** X*** 2353,2359 **** X M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) }, X { "Thoth Amon", S_HUMAN, 16, 10, 0, 10, -14, (G_NOGEN | G_UNIQ), X { { AT_MAGC, AD_SPEL, 0, 0 }, { AT_MAGC, AD_SPEL, 0, 0 }, X! { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_POISON, MR_POISON, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_STALK | M2_HOSTILE | M2_NASTY | X--- 2355,2362 ---- X M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) }, X { "Thoth Amon", S_HUMAN, 16, 10, 0, 10, -14, (G_NOGEN | G_UNIQ), X { { AT_MAGC, AD_SPEL, 0, 0 }, { AT_MAGC, AD_SPEL, 0, 0 }, X! { AT_WEAP, AD_PHYS, 1, 6 }, { AT_CLAW, AD_SAMU, 1, 4 }, X! NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_POISON, MR_POISON, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_STALK | M2_HOSTILE | M2_NASTY | X*************** X*** 2360,2366 **** X M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Chromatic Dragon", S_DRAGON, 16, 10, 0, 30, -14, (G_NOGEN | G_UNIQ), X { { AT_BREA, AD_RBRE, 6, 8 }, { AT_MAGC, AD_SPEL, 0, 0 }, X! { AT_BITE, AD_PHYS, 4, 8 }, { AT_BITE, AD_PHYS, 4, 8 }, X { AT_BITE, AD_PHYS, 4, 8 }, { AT_STNG, AD_PHYS, 1, 6 } }, X WT_DRAGON, 1700, 0, MS_NEMESIS, MZ_GIGANTIC, X MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_POISON, X--- 2363,2369 ---- X M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Chromatic Dragon", S_DRAGON, 16, 10, 0, 30, -14, (G_NOGEN | G_UNIQ), X { { AT_BREA, AD_RBRE, 6, 8 }, { AT_MAGC, AD_SPEL, 0, 0 }, X! { AT_CLAW, AD_SAMU, 2, 8 }, { AT_BITE, AD_PHYS, 4, 8 }, X { AT_BITE, AD_PHYS, 4, 8 }, { AT_STNG, AD_PHYS, 1, 6 } }, X WT_DRAGON, 1700, 0, MS_NEMESIS, MZ_GIGANTIC, X MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_POISON, X*************** X*** 2371,2377 **** X M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Goblin King", S_ORC, 15, 10, MARM(10,4), 0, -15, (G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, X! NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 750, 350, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_ORC | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | X M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, X--- 2374,2380 ---- X M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Goblin King", S_ORC, 15, 10, MARM(10,4), 0, -15, (G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, X! { AT_CLAW, AD_SAMU, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X 750, 350, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_ORC | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | X M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, X*************** X*** 2378,2384 **** X M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Cyclops", S_GIANT, 18, 10, 0, 0, -15, (G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 4, 8 }, { AT_WEAP, AD_PHYS, 4, 8 }, X! NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 1900, 700, 0, MS_NEMESIS, MZ_HUGE, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK | X--- 2381,2387 ---- X M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Cyclops", S_GIANT, 18, 10, 0, 0, -15, (G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 4, 8 }, { AT_WEAP, AD_PHYS, 4, 8 }, X! { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X 1900, 700, 0, MS_NEMESIS, MZ_HUGE, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK | X*************** X*** 2387,2393 **** X { "Ixoth", S_DRAGON, 15, 9, -1, 20, -14, (G_NOGEN | G_UNIQ), X { { AT_BREA, AD_FIRE, 8, 6 }, { AT_BITE, AD_PHYS, 4, 8 }, X { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_PHYS, 2, 4 }, X! { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK }, X WT_DRAGON, 1600, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE, MR_FIRE, X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS, X M2_NOPOLY | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_STALK | X--- 2390,2396 ---- X { "Ixoth", S_DRAGON, 15, 9, -1, 20, -14, (G_NOGEN | G_UNIQ), X { { AT_BREA, AD_FIRE, 8, 6 }, { AT_BITE, AD_PHYS, 4, 8 }, X { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_PHYS, 2, 4 }, X! { AT_CLAW, AD_SAMU, 2, 4 }, NO_ATTK }, X WT_DRAGON, 1600, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE, MR_FIRE, X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS, X M2_NOPOLY | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_STALK | X*************** X*** 2396,2409 **** X { "Nalzok", S_DEMON, 16, 10, -2, 85, -127, X (G_NOGEN | G_UNIQ | G_NOCORPSE), X { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 }, X! { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0, X M1_FLY | M1_SEE_INVIS | M1_POIS, X M2_NOPOLY | M2_DEMON | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | X M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) }, X { "Master Assassin", S_HUMAN, 15, 15, 0, 30, 18, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_DRST, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, X! NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | X--- 2399,2413 ---- X { "Nalzok", S_DEMON, 16, 10, -2, 85, -127, X (G_NOGEN | G_UNIQ | G_NOCORPSE), X { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 }, X! { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_SAMU, 2, 6 }, X! NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0, X M1_FLY | M1_SEE_INVIS | M1_POIS, X M2_NOPOLY | M2_DEMON | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | X M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) }, X { "Master Assassin", S_HUMAN, 15, 15, 0, 30, 18, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_DRST, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 8 }, X! { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | X*************** X*** 2412,2419 **** X /* A renegade daimyo who led a 13 year civil war against the shogun */ X /* of his time. */ X { "Ashikaga Takauji", S_HUMAN, 15, 15, 0, 40, -13, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, X! NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_PNAME | M2_HOSTILE | M2_STALK | X--- 2416,2423 ---- X /* A renegade daimyo who led a 13 year civil war against the shogun */ X /* of his time. */ X { "Ashikaga Takauji", S_HUMAN, 15, 15, 0, 40, -13, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, X! { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_PNAME | M2_HOSTILE | M2_STALK | X*************** X*** 2423,2430 **** X /* NOTE: the Master of Thieves was defined above. */ X X { "Lord Surtur", S_GIANT, 15, 12, 2, 50, 12, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_PHYS, 2, 10 }, { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, X! NO_ATTK, NO_ATTK, NO_ATTK }, X 2250, 850, 0, MS_NEMESIS, MZ_HUGE, MR_FIRE, MR_FIRE, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK | X--- 2427,2434 ---- X /* NOTE: the Master of Thieves was defined above. */ X X { "Lord Surtur", S_GIANT, 15, 12, 2, 50, 12, (G_NOGEN | G_UNIQ), X! { { AT_WEAP, AD_PHYS, 2, 10 }, { AT_WEAP, AD_PHYS, 2, 10 }, X! { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X 2250, 850, 0, MS_NEMESIS, MZ_HUGE, MR_FIRE, MR_FIRE, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK | X*************** X*** 2432,2438 **** X M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Dark One", S_HUMAN, 15, 10, 0, 80, -10, (G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_MAGC, AD_SPEL, 0, 0 }, X! { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | X--- 2436,2443 ---- X M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) }, X { "Dark One", S_HUMAN, 15, 10, 0, 80, -10, (G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_MAGC, AD_SPEL, 0, 0 }, X! { AT_WEAP, AD_PHYS, 1, 6 }, { AT_CLAW, AD_SAMU, 1, 4 }, X! NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | X*************** X*** 2467,2473 **** X WT_ELF, 350, 0, MS_GUARDIAN, MZ_HUMAN, MR_SLEEP, MR_SLEEP, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_ELF | M2_PEACEFUL | M2_COLLECT, 0, C(HI_DOMESTIC) }, X! { "intern", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, X NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_POISON, MR_POISON, X--- 2472,2478 ---- X WT_ELF, 350, 0, MS_GUARDIAN, MZ_HUMAN, MR_SLEEP, MR_SLEEP, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_ELF | M2_PEACEFUL | M2_COLLECT, 0, C(HI_DOMESTIC) }, X! { "attendant", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, X NO_ATTK, NO_ATTK, NO_ATTK }, X WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_POISON, MR_POISON, X*************** X*** 2506,2512 **** X { "ronin", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, X NO_ATTK, NO_ATTK, NO_ATTK }, X! WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT, X 0, C(HI_DOMESTIC) }, X--- 2511,2517 ---- X { "ronin", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, X NO_ATTK, NO_ATTK, NO_ATTK }, X! WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, X M1_HUMANOID | M1_OMNIVORE, X M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT, X 0, C(HI_DOMESTIC) }, X*** /tmp/da08397 Thu Feb 25 10:24:14 1993 X--- src/mthrowu.c Wed Feb 17 09:17:26 1993 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)mthrowu.c 3.1 92/11/14 */ X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)mthrowu.c 3.1 93/02/14 */ X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 22,28 **** X /* X * Keep consistent with breath weapons in zap.c, and AD_* in monattk.h. X */ X! STATIC_OVL const char NEARDATA *breathwep[] = { X "fragments", X "fire", X "frost", X--- 22,28 ---- X /* X * Keep consistent with breath weapons in zap.c, and AD_* in monattk.h. X */ X! STATIC_OVL NEARDATA const char *breathwep[] = { X "fragments", X "fire", X "frost", X*************** X*** 95,108 **** X obj->otyp == ROCK)) X create = !rn2(3); X else create = 1; X if (create && !((mtmp = m_at(x, y)) && (mtmp->mtrapped) && X (t = t_at(x, y)) && ((t->ttyp == PIT) || X! (t->ttyp == SPIKED_PIT))) && X! !flooreffects(obj,x,y,"fall")) { /* don't double-dip on damage */ X place_object(obj, x, y); X obj->nobj = fobj; X fobj = obj; X stackobj(fobj); X } else obfree(obj, (struct obj*) 0); X } X X--- 95,110 ---- X obj->otyp == ROCK)) X create = !rn2(3); X else create = 1; X+ X if (create && !((mtmp = m_at(x, y)) && (mtmp->mtrapped) && X (t = t_at(x, y)) && ((t->ttyp == PIT) || X! (t->ttyp == SPIKED_PIT)))) { X! if (!flooreffects(obj,x,y,"fall")) { /* don't double-dip on damage */ X place_object(obj, x, y); X obj->nobj = fobj; X fobj = obj; X stackobj(fobj); X+ } X } else obfree(obj, (struct obj*) 0); X } X X*************** X*** 160,167 **** X && objects[singleobj->otyp].w_propellor) X pline("%s misfires!", Monnam(mon)); X else X! pline("The %s slips as %s throws it!", X! xname(singleobj), mon_nam(mon)); X } X dx = rn2(3)-1; X dy = rn2(3)-1; X--- 162,169 ---- X && objects[singleobj->otyp].w_propellor) X pline("%s misfires!", Monnam(mon)); X else X! pline("%s slips as %s throws it!", X! The(xname(singleobj)), mon_nam(mon)); X } X dx = rn2(3)-1; X dy = rn2(3)-1; X*************** X*** 396,401 **** X--- 398,406 ---- X } X prev = otmp; X } X+ #ifdef MUSE X+ possibly_unwield(mon); X+ #endif X } X X #endif /* OVLB */ X*** /tmp/da08405 Thu Feb 25 10:24:16 1993 X--- src/muse.c Thu Feb 25 09:02:43 1993 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)muse.c 3.1 93/01/03 */ X /* Monster item usage routine. Copyright (C) 1990 by Ken Arromdee */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)muse.c 3.1 93/02/12 */ X /* Monster item usage routine. Copyright (C) 1990 by Ken Arromdee */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 62,68 **** X struct monst *mtmp; X X potion_descr = OBJ_DESCR(objects[obj->otyp]); X! if (!strcmp(potion_descr, "milky") && !rn2(13)) { X if (!enexto(&cc, mon->mx, mon->my, &mons[PM_GHOST])) return 0; X mquaffmsg(mon, obj); X m_useup(mon, obj); X--- 62,68 ---- X struct monst *mtmp; X X potion_descr = OBJ_DESCR(objects[obj->otyp]); X! if (potion_descr && !strcmp(potion_descr, "milky") && !rn2(13)) { X if (!enexto(&cc, mon->mx, mon->my, &mons[PM_GHOST])) return 0; X mquaffmsg(mon, obj); X m_useup(mon, obj); X*************** X*** 82,88 **** X } X return 2; X } X! if (!strcmp(potion_descr, "smoky") && !rn2(13)) { X if (!enexto(&cc, mon->mx, mon->my, &mons[PM_DJINNI])) return 0; X mquaffmsg(mon, obj); X m_useup(mon, obj); X--- 82,88 ---- X } X return 2; X } X! if (potion_descr && !strcmp(potion_descr, "smoky") && !rn2(13)) { X if (!enexto(&cc, mon->mx, mon->my, &mons[PM_DJINNI])) return 0; X mquaffmsg(mon, obj); X m_useup(mon, obj); X*************** X*** 138,144 **** X struct obj *otmp; X boolean self; X { X! if (!cansee(mtmp->mx, mtmp->my)) { X #ifdef SOUNDS X if (flags.soundok) X #endif X--- 138,144 ---- X struct obj *otmp; X boolean self; X { X! if (!canseemon(mtmp)) { X #ifdef SOUNDS X if (flags.soundok) X #endif X*************** X*** 145,153 **** X You("hear a distant zap."); X } else if (self) X pline("%s zaps %sself with %s!", X! Monnam(mtmp), X! gender(mtmp)==2 ? "it" : gender(mtmp) ? "her" : "him", X! doname(otmp)); X else { X pline("%s zaps %s!", Monnam(mtmp), an(xname(otmp))); X stop_occupation(); X--- 145,151 ---- X You("hear a distant zap."); X } else if (self) X pline("%s zaps %sself with %s!", X! Monnam(mtmp), him[pronoun_gender(mtmp)], doname(otmp)); X else { X pline("%s zaps %s!", Monnam(mtmp), an(xname(otmp))); X stop_occupation(); X*************** X*** 159,170 **** X struct monst *mtmp; X struct obj *otmp; X { X! boolean vis = (cansee(mtmp->mx, mtmp->my)); X #ifdef SOUNDS X if (flags.soundok) X #endif X otmp->dknown = 1; X! if (!vis) { X #ifdef SOUNDS X if (flags.soundok) X #endif X--- 157,168 ---- X struct monst *mtmp; X struct obj *otmp; X { X! boolean vismon = (canseemon(mtmp)); X #ifdef SOUNDS X if (flags.soundok) X #endif X otmp->dknown = 1; X! if (!vismon) { X #ifdef SOUNDS X if (flags.soundok) X #endif X*************** X*** 174,185 **** X } else pline("%s reads %s!", Monnam(mtmp), singular(otmp,doname)); X if (mtmp->mconf X #ifdef SOUNDS X! && (vis || flags.soundok) X #endif X ) X pline("Being confused, %s mispronounces the magic words...", X! vis ? mon_nam(mtmp) : gender(mtmp)==2 ? "it" : X! gender(mtmp) ? "he" : "she"); X } X X static void X--- 172,182 ---- X } else pline("%s reads %s!", Monnam(mtmp), singular(otmp,doname)); X if (mtmp->mconf X #ifdef SOUNDS X! && (vismon || flags.soundok) X #endif X ) X pline("Being confused, %s mispronounces the magic words...", X! vismon ? mon_nam(mtmp) : he[pronoun_gender(mtmp)]); X } X X static void X*************** X*** 187,193 **** X struct monst *mtmp; X struct obj *otmp; X { X! if (cansee(mtmp->mx, mtmp->my)) { X otmp->dknown = 1; X pline("%s drinks %s!", Monnam(mtmp), singular(otmp, doname)); X } else X--- 184,190 ---- X struct monst *mtmp; X struct obj *otmp; X { X! if (canseemon(mtmp)) { X otmp->dknown = 1; X pline("%s drinks %s!", Monnam(mtmp), singular(otmp, doname)); X } else X*************** X*** 239,244 **** X--- 236,242 ---- X int x=mtmp->mx, y=mtmp->my; X boolean stuck = (mtmp == u.ustuck); X boolean immobile = (mtmp->data->mmove == 0); X+ int fraction; X X if (mtmp->mpeaceful || is_animal(mtmp->data) || mindless(mtmp->data)) X return 0; X*************** X*** 245,252 **** X if (u.uswallow && stuck) return 0; X if(dist2(x, y, mtmp->mux, mtmp->muy) > 25) X return 0; X if(mtmp->mhp >= mtmp->mhpmax || X! (mtmp->mhp >= 10 && mtmp->mhp*5 >= mtmp->mhpmax)) X return 0; X X m.defensive = (struct obj *)0; X--- 243,252 ---- X if (u.uswallow && stuck) return 0; X if(dist2(x, y, mtmp->mux, mtmp->muy) > 25) X return 0; X+ X+ fraction = u.ulevel < 10 ? 5 : u.ulevel < 14 ? 4 : 3; X if(mtmp->mhp >= mtmp->mhpmax || X! (mtmp->mhp >= 10 && mtmp->mhp*fraction >= mtmp->mhpmax)) X return 0; X X m.defensive = (struct obj *)0; X*************** X*** 264,271 **** X m.has_defense = MUSE_UP_LADDER; X if (x == xdnladder && y == ydnladder) X m.has_defense = MUSE_DN_LADDER; X! } else if (sstairs.sx && X! sstairs.sx == mtmp->mx && sstairs.sy == mtmp->my) { X m.has_defense = MUSE_SSTAIRS; X } else if (!stuck && !immobile) { X /* Note: trapdoors take precedence over teleport traps. */ X--- 264,270 ---- X m.has_defense = MUSE_UP_LADDER; X if (x == xdnladder && y == ydnladder) X m.has_defense = MUSE_DN_LADDER; X! } else if (sstairs.sx && sstairs.sx == x && sstairs.sy == y) { X m.has_defense = MUSE_SSTAIRS; X } else if (!stuck && !immobile) { X /* Note: trapdoors take precedence over teleport traps. */ X*************** X*** 316,346 **** X } X } X #endif X! if (m.has_defense == MUSE_UPSTAIRS || X! m.has_defense == MUSE_DOWNSTAIRS || X! m.has_defense == MUSE_UP_LADDER || X! m.has_defense == MUSE_DN_LADDER || X! m.has_defense == MUSE_SSTAIRS || X! #ifdef ARMY X! m.has_defense == MUSE_BUGLE || X! #endif X! m.has_defense == MUSE_TRAPDOOR) X goto botm; X #define nomore(x) if(m.has_defense==x) continue; X for (obj = mtmp->minvent; obj; obj = obj->nobj) { X /* nomore(MUSE_WAN_DIGGING); */ X if (m.has_defense == MUSE_WAN_DIGGING) break; X if (obj->otyp == WAN_DIGGING && obj->spe > 0 && !stuck X && !mtmp->isshk && !mtmp->isgd && !mtmp->ispriest X && !is_floater(mtmp->data) X! #ifdef MULDGN X! && !Is_knox(&u.uz) X! #endif X! && !In_endgame(&u.uz)) { X m.defensive = obj; X m.has_defense = MUSE_WAN_DIGGING; X } X- nomore(MUSE_TELEPORT_TRAP); X nomore(MUSE_WAN_TELEPORTATION_SELF); X nomore(MUSE_WAN_TELEPORTATION); X if(obj->otyp == WAN_TELEPORTATION && obj->spe > 0) { X--- 315,340 ---- X } X } X #endif X! /* use immediate physical escape prior to attempting magic */ X! if (m.has_defense) /* stairs, trapdoor or tele-trap, bugle alert */ X goto botm; X+ X #define nomore(x) if(m.has_defense==x) continue; X for (obj = mtmp->minvent; obj; obj = obj->nobj) { X+ /* don't always use the same selection pattern */ X+ if (m.has_defense && !rn2(3)) break; X+ X /* nomore(MUSE_WAN_DIGGING); */ X if (m.has_defense == MUSE_WAN_DIGGING) break; X if (obj->otyp == WAN_DIGGING && obj->spe > 0 && !stuck X && !mtmp->isshk && !mtmp->isgd && !mtmp->ispriest X && !is_floater(mtmp->data) X! /* digging wouldn't be effective; assume they know that */ X! && !(Is_botlevel(&u.uz) || In_endgame(&u.uz)) X! && !(is_ice(x,y) || is_pool(x,y) || is_lava(x,y))) { X m.defensive = obj; X m.has_defense = MUSE_WAN_DIGGING; X } X nomore(MUSE_WAN_TELEPORTATION_SELF); X nomore(MUSE_WAN_TELEPORTATION); X if(obj->otyp == WAN_TELEPORTATION && obj->spe > 0) { X*************** X*** 353,359 **** X if(obj->otyp == SCR_TELEPORTATION && mtmp->mcansee X && haseyes(mtmp->data) X && (!obj->cursed || X! (!mtmp->isshk && !mtmp->isgd && !mtmp->ispriest))) { X m.defensive = obj; X m.has_defense = MUSE_SCR_TELEPORTATION; X } X--- 347,354 ---- X if(obj->otyp == SCR_TELEPORTATION && mtmp->mcansee X && haseyes(mtmp->data) X && (!obj->cursed || X! (!(mtmp->isshk && inhishop(mtmp)) X! && !mtmp->isgd && !mtmp->ispriest))) { X m.defensive = obj; X m.has_defense = MUSE_SCR_TELEPORTATION; X } X*************** X*** 394,400 **** X struct obj *otmp = m.defensive; X boolean vis = cansee(mtmp->mx, mtmp->my); X boolean vismon = canseemon(mtmp); X! boolean oseen = otmp && (otmp->oclass == SCROLL_CLASS || vis); X X if ((i = precheck(mtmp, otmp)) != 0) return i; X switch(m.has_defense) { X--- 389,395 ---- X struct obj *otmp = m.defensive; X boolean vis = cansee(mtmp->mx, mtmp->my); X boolean vismon = canseemon(mtmp); X! boolean oseen = otmp && vismon; X X if ((i = precheck(mtmp, otmp)) != 0) return i; X switch(m.has_defense) { X*************** X*** 403,413 **** X if (canseemon(mtmp)) X pline("%s plays %s!", Monnam(mtmp), doname(otmp)); X else if (flags.soundok) X! You("hear the sound of a bugle!"); X awaken_soldiers(); X return 2; X #endif X case MUSE_WAN_TELEPORTATION_SELF: X mzapmsg(mtmp, otmp, TRUE); X otmp->spe--; X if (oseen) makeknown(WAN_TELEPORTATION); X--- 398,410 ---- X if (canseemon(mtmp)) X pline("%s plays %s!", Monnam(mtmp), doname(otmp)); X else if (flags.soundok) X! You("hear a bugle playing reveille!"); X awaken_soldiers(); X return 2; X #endif X case MUSE_WAN_TELEPORTATION_SELF: X+ if ((mtmp->isshk && inhishop(mtmp)) X+ || mtmp->isgd || mtmp->ispriest) return 2; X mzapmsg(mtmp, otmp, TRUE); X otmp->spe--; X if (oseen) makeknown(WAN_TELEPORTATION); X*************** X*** 440,445 **** X--- 437,443 ---- X { X int obj_is_cursed = otmp->cursed; X X+ if (mtmp->isshk || mtmp->isgd || mtmp->ispriest) return 2; X mreadmsg(mtmp, otmp); X m_useup(mtmp, otmp); /* otmp might be free'ed */ X if (oseen) makeknown(SCR_TELEPORTATION); X*************** X*** 452,461 **** X } X if (Is_botlevel(&u.uz)) goto mon_tele; X else { X! int nlev; X d_level flev; X X! if (rn2(5)) nlev = rnd((int)depth(&u.uz) + 3); X else { X pline("%s shudders for a moment.", X Monnam(mtmp)); X--- 450,459 ---- X } X if (Is_botlevel(&u.uz)) goto mon_tele; X else { X! int nlev = max(depth(&u.uz), 0); X d_level flev; X X! if (rn2(5)) nlev = rnd(nlev + 3); X else { X pline("%s shudders for a moment.", X Monnam(mtmp)); X*************** X*** 703,708 **** X--- 701,712 ---- X return 0; X if (u.uswallow) return 0; X if (in_your_sanctuary(mtmp->mx, mtmp->my)) return 0; X+ if (dmgtype(mtmp->data, AD_HEAL) && !uwep X+ #ifdef TOURIST X+ && !uarmu X+ #endif X+ && !uarm && !uarmh && !uarms && !uarmg && !uarmc && !uarmf) X+ return 0; X X if (!ranged_stuff) return 0; X #define nomore(x) if(m.has_offense==x) continue; X*************** X*** 862,867 **** X--- 866,877 ---- X bhitpos.x += ddx; X bhitpos.y += ddy; X x = bhitpos.x; y = bhitpos.y; X+ X+ if (!isok(x,y)) { X+ bhitpos.x -= ddx; X+ bhitpos.y -= ddy; X+ break; X+ } X if (find_drawbridge(&x,&y)) X switch (obj->otyp) { X case WAN_STRIKING: X*************** X*** 916,923 **** X { X int i; X struct obj *otmp = m.offensive; X! boolean vis = cansee(mtmp->mx, mtmp->my); X! boolean oseen = otmp && (otmp->oclass == SCROLL_CLASS || vis); X X if ((i = precheck(mtmp, otmp)) != 0) return i; X switch(m.has_offense) { X--- 926,932 ---- X { X int i; X struct obj *otmp = m.offensive; X! boolean oseen = otmp && canseemon(mtmp); X X if ((i = precheck(mtmp, otmp)) != 0) return i; X switch(m.has_offense) { X*************** X*** 948,953 **** X--- 957,965 ---- X return 2; X #if 0 X case MUSE_SCR_FIRE: X+ { X+ boolean vis = cansee(mtmp->mx, mtmp->my); X+ X mreadmsg(mtmp, otmp); X if (mtmp->mconf) { X if (vis) X*************** X*** 983,988 **** X--- 995,1001 ---- X } X } X return 2; X+ } X #endif X case MUSE_POT_PARALYSIS: X case MUSE_POT_BLINDNESS: X*************** X*** 1149,1155 **** X struct obj *otmp = m.misc; X boolean vis = cansee(mtmp->mx, mtmp->my); X boolean vismon = canseemon(mtmp); X! boolean oseen = otmp && (otmp->oclass == SCROLL_CLASS || vis); X X if ((i = precheck(mtmp, otmp)) != 0) return i; X switch(m.has_misc) { X--- 1162,1168 ---- X struct obj *otmp = m.misc; X boolean vis = cansee(mtmp->mx, mtmp->my); X boolean vismon = canseemon(mtmp); X! boolean oseen = otmp && vismon; X X if ((i = precheck(mtmp, otmp)) != 0) return i; X switch(m.has_misc) { X*************** X*** 1204,1212 **** X case MUSE_POT_INVISIBILITY: X mquaffmsg(mtmp, otmp); X if (vis) pline("Gee, all of a sudden %s can't see %sself.", X! mon_nam(mtmp), X! humanoid(mtmp->data) ? (mtmp->female ? "her" : "him") X! : "it"); X if (oseen) makeknown(POT_INVISIBILITY); X mtmp->minvis = 1; X newsym(mtmp->mx,mtmp->my); X--- 1217,1223 ---- X case MUSE_POT_INVISIBILITY: X mquaffmsg(mtmp, otmp); X if (vis) pline("Gee, all of a sudden %s can't see %sself.", X! mon_nam(mtmp), him[pronoun_gender(mtmp)]); X if (oseen) makeknown(POT_INVISIBILITY); X mtmp->minvis = 1; X newsym(mtmp->mx,mtmp->my); X*************** X*** 1302,1322 **** X * the monster and strong monsters won't use it at all... X */ X if (difficulty < 6 && !rn2(30)) return WAN_POLYMORPH; X X! switch (rn2(7)) { X! case 0: case 1: X if (mtmp->isgd) return 0; X! return POT_SPEED; X! case 2: X if (mtmp->mpeaceful && !See_invisible) return 0; X! return WAN_MAKE_INVISIBLE; X! case 3: X! if (mtmp->mpeaceful && !See_invisible) return 0; X! return POT_INVISIBILITY; X! case 4: X! if (mtmp->isgd) return 0; X! return WAN_SPEED_MONSTER; X! case 5: case 6: X return POT_GAIN_LEVEL; X } X /*NOTREACHED*/ X--- 1313,1329 ---- X * the monster and strong monsters won't use it at all... X */ X if (difficulty < 6 && !rn2(30)) return WAN_POLYMORPH; X+ X+ if (!rn2(40)) return AMULET_OF_LIFE_SAVING; X X! switch (rn2(3)) { X! case 0: X if (mtmp->isgd) return 0; X! return rn2(4) ? POT_SPEED : WAN_SPEED_MONSTER; X! case 1: X if (mtmp->mpeaceful && !See_invisible) return 0; X! return rn2(4) ? POT_INVISIBILITY : WAN_MAKE_INVISIBLE; X! case 2: X return POT_GAIN_LEVEL; X } X /*NOTREACHED*/ X*************** X*** 1350,1355 **** X--- 1357,1366 ---- X || typ == POT_BLINDNESS X || typ == POT_CONFUSION X || (typ == PICK_AXE && needspick(mon->data)) X+ || typ == AMULET_OF_REFLECTION X+ || typ == AMULET_OF_LIFE_SAVING X+ || ((mon->misc_worn_check & W_ARMG) && typ == CORPSE X+ && obj->corpsenm == PM_COCKATRICE) X ); X } X #endif X*** /tmp/da08413 Thu Feb 25 10:24:19 1993 X--- src/music.c Tue Feb 23 11:00:28 1993 X*************** X*** 22,28 **** X * level. X * (leather) drum Will awaken monsters like the horn. X * drum of earthquake Will initiate an earthquake whose intensity depends X! * on player level. That is, it creates ramdom pits X * called here chasms. X */ X X--- 22,28 ---- X * level. X * (leather) drum Will awaken monsters like the horn. X * drum of earthquake Will initiate an earthquake whose intensity depends X! * on player level. That is, it creates random pits X * called here chasms. X */ X X*************** X*** 136,142 **** X if (canseemon(mtmp)) X pline("%s is now ready for battle!", Monnam(mtmp)); X else X! Norep("You hear the sound of battle gear being readied."); X } X mtmp = mtmp->nmon; X } X--- 136,142 ---- X if (canseemon(mtmp)) X pline("%s is now ready for battle!", Monnam(mtmp)); X else X! Norep("You hear the rattle of battle gear being readied."); X } X mtmp = mtmp->nmon; X } X*************** X*** 247,252 **** X--- 247,256 ---- X pline("%s falls into a chasm!", Monnam(mtmp)); X else if (flags.soundok && humanoid(mtmp->data)) X You("hear a scream!"); X+ #ifdef MUSE X+ mselftouch(mtmp, "Falling, ", TRUE); X+ if (mtmp->mhp > 0) X+ #endif X if ((mtmp->mhp -= rnd(6)) <= 0) { X if(!cansee(x,y)) X pline("It is destroyed!"); X*************** X*** 301,306 **** X--- 305,313 ---- X mac_speaker ( instr , "C" ) ; X #endif X X+ #ifdef AMIGA X+ amii_speaker ( instr , "Cw", AMII_OKAY_VOLUME ) ; X+ #endif X if (Confusion) X pline("What you produce is quite far from music..."); X else X*************** X*** 425,431 **** X X if ((fd = open("/dev/speaker", 1)) != -1) X { X! /* emit a prefix to modify instrumental `timbre' */ X switch (instr->otyp) X { X case WOODEN_FLUTE: X--- 432,438 ---- X X if ((fd = open("/dev/speaker", 1)) != -1) X { X! /* send a prefix to modify instrumental `timbre' */ X switch (instr->otyp) X { X case WOODEN_FLUTE: X*************** X*** 472,478 **** X--- 479,488 ---- X } X if (c == 'n') { X getlin("What tune are you playing? [what 5 notes]", buf); X+ #ifndef AMIGA X+ /* The AMIGA supports two octaves of notes */ X for (s=buf; *s; s++) *s = highc(*s); X+ #endif X You("extract a strange sound from %s!", the(xname(instr))); X #ifdef SYSV386MUSIC X /* if user is at the console, play through the console speaker */ X*************** X*** 481,486 **** X--- 491,509 ---- X #endif /* SYSV386MUSIC */ X #ifdef MAC X mac_speaker ( instr , buf ) ; X+ #endif X+ #ifdef AMIGA X+ { X+ char nbuf[ 20 ]; X+ int i; X+ for( i = 0; buf[i] && i < 5; ++i ) X+ { X+ nbuf[ i*2 ] = buf[ i ]; X+ nbuf[ (i*2)+1 ] = 'h'; X+ } X+ nbuf[ i*2 ] = 0; X+ amii_speaker ( instr , nbuf, AMII_OKAY_VOLUME ) ; X+ } X #endif X /* Check if there was the Stronghold drawbridge near X * and if the tune conforms to what we're waiting for. X*** /tmp/da08421 Thu Feb 25 10:24:21 1993 X--- src/o_init.c Fri Feb 12 10:25:44 1993 X*************** X*** 20,26 **** X POTION_CLASS, SCROLL_CLASS, WAND_CLASS, X SPBOOK_CLASS, RING_CLASS, GEM_CLASS, 0 }; X X! static short NEARDATA disco[TOTAL_OBJS] = DUMMY; X X int X letindex(acls) register char acls; { X--- 20,26 ---- X POTION_CLASS, SCROLL_CLASS, WAND_CLASS, X SPBOOK_CLASS, RING_CLASS, GEM_CLASS, 0 }; X X! static NEARDATA short disco[TOTAL_OBJS] = DUMMY; X X int X letindex(acls) register char acls; { X*** /tmp/da08429 Thu Feb 25 10:24:23 1993 X--- src/objects.c Tue Feb 23 15:29:07 1993 X*************** X*** 27,37 **** X /* the ctnr field of BITS currently does not map into struct objclass, X * and is ignored in the expansion */ X X! struct objdescr NEARDATA obj_descr[] = { X #else X /* second pass -- object definitions */ X X! # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,big,dir,mtrl) nmkn,mrg,uskn,mgc,chrg,uniq,big,dir,mtrl /* SCO ODT 1.1 cpp fodder */ X /* SCO's version of MSC 5.x barfs on the line above without a trailing space */ X X #ifdef TEXTCOLOR X--- 27,37 ---- X /* the ctnr field of BITS currently does not map into struct objclass, X * and is ignored in the expansion */ X X! NEARDATA struct objdescr obj_descr[] = { X #else X /* second pass -- object definitions */ X X! # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,dir,mtrl) nmkn,mrg,uskn,mgc,chrg,uniq,nwsh,big,dir,mtrl /* SCO ODT 1.1 cpp fodder */ X /* SCO's version of MSC 5.x barfs on the line above without a trailing space */ X X #ifdef TEXTCOLOR X*************** X*** 44,66 **** X prob, wt, cost, sdam, ldam, oc1, oc2, nut} X #endif X X! struct objclass NEARDATA objects[] = { X #endif X /* dummy object[0] -- description [2nd arg] *must* be NULL */ X! OBJECT(OBJ("strange object",NULL), BITS(1,0,0,0,0,0,0,0,0,0), 0, X ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), X X /* weapons ... */ X #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,metal,color) OBJECT( \ X! OBJ(name,app), BITS(kn,mg,1,0,0,1,0,bi,0,metal), 0, \ X WEAPON_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, 0, wt, color ) X #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \ X! OBJ(name,app), BITS(kn,1,1,0,0,1,0,0,0,metal), 0, \ X WEAPON_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, prop, wt, color ) X #define BOW(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \ X! OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,metal), 0, \ X WEAPON_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, -(prop), wt, color ) X X--- 44,66 ---- X prob, wt, cost, sdam, ldam, oc1, oc2, nut} X #endif X X! NEARDATA struct objclass objects[] = { X #endif X /* dummy object[0] -- description [2nd arg] *must* be NULL */ X! OBJECT(OBJ("strange object",NULL), BITS(1,0,0,0,0,0,0,0,0,0,0), 0, X ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), X X /* weapons ... */ X #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,metal,color) OBJECT( \ X! OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,metal), 0, \ X WEAPON_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, 0, wt, color ) X #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \ X! OBJ(name,app), BITS(kn,1,1,0,0,1,0,0,0,0,metal), 0, \ X WEAPON_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, prop, wt, color ) X #define BOW(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \ X! OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,0,metal), 0, \ X WEAPON_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, -(prop), wt, color ) X X*************** X*** 202,208 **** X * Some creatures are vulnerable to SILVER. X */ X #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) OBJECT( \ X! OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,blk,0,metal), power, \ X ARMOR_CLASS, prob, delay, wt, cost, \ X 0, 0, 10 - ac, can, wt, c ) X X--- 202,208 ---- X * Some creatures are vulnerable to SILVER. X */ X #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) OBJECT( \ X! OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,metal), power, \ X ARMOR_CLASS, prob, delay, wt, cost, \ X 0, 0, 10 - ac, can, wt, c ) X X*************** X*** 372,378 **** X X /* rings ... */ X #define RING(name,stone,power,cost,mgc,spec,metal,color) OBJECT( \ X! OBJ(name,stone), BITS(0,0,spec,0,mgc,spec,0,0,0,metal), \ X power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color ) X RING("adornment", "wooden", ADORNED, 100, 0, 1, WOOD, HI_WOOD), X RING("gain strength", "granite", 0, 150, 1, 1, MINERAL, HI_MINERAL), X--- 372,378 ---- X X /* rings ... */ X #define RING(name,stone,power,cost,mgc,spec,metal,color) OBJECT( \ X! OBJ(name,stone), BITS(0,0,spec,0,mgc,spec,0,0,0,0,metal), \ X power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color ) X RING("adornment", "wooden", ADORNED, 100, 0, 1, WOOD, HI_WOOD), X RING("gain strength", "granite", 0, 150, 1, 1, MINERAL, HI_MINERAL), X*************** X*** 407,413 **** X X /* amulets ... - THE Amulet comes last because it is special */ X #define AMULET(name,desc,power,prob) OBJECT( \ X! OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,IRON), power, \ X AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL ) X X AMULET("amulet of ESP", "circular", TELEPAT, 180), X--- 407,413 ---- X X /* amulets ... - THE Amulet comes last because it is special */ X #define AMULET(name,desc,power,prob) OBJECT( \ X! OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,IRON), power, \ X AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL ) X X AMULET("amulet of ESP", "circular", TELEPAT, 180), X*************** X*** 420,428 **** X AMULET("amulet of reflection", "hexagonal", REFLECTING, 80), X AMULET("amulet of magical breathing", "octagonal", MAGICAL_BREATHING, 70), X OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor", X! "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,PLASTIC), 0, X AMULET_CLASS, 0, 0, 20, 0, 0, 0, 0, 0, 1, HI_METAL), X! OBJECT(OBJ("Amulet of Yendor",NULL), BITS(1,0,1,0,1,0,1,0,0,MITHRIL), 0, X AMULET_CLASS, 0, 0, 20, 3500, 0, 0, 0, 0, 20, HI_METAL), X #undef AMULET X X--- 420,428 ---- X AMULET("amulet of reflection", "hexagonal", REFLECTING, 80), X AMULET("amulet of magical breathing", "octagonal", MAGICAL_BREATHING, 70), X OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor", X! "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,PLASTIC), 0, X AMULET_CLASS, 0, 0, 20, 0, 0, 0, 0, 0, 1, HI_METAL), X! OBJECT(OBJ("Amulet of Yendor",NULL), BITS(1,0,1,0,1,0,1,1,0,0,MITHRIL), 0, X AMULET_CLASS, 0, 0, 20, 3500, 0, 0, 0, 0, 20, HI_METAL), X #undef AMULET X X*************** X*** 429,443 **** X /* tools ... */ X /* tools with weapon characteristics come last */ X #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,material,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,mrg,chg,0,mgc,chg,0,0,0,material), 0, \ X TOOL_CLASS, prob, 0, \ X wt, cost, 0, 0, 0, 0, wt, color ) X #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,material,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,0,chg,1,mgc,chg,0,0,0,material), 0, \ X TOOL_CLASS, prob, 0, \ X wt, cost, 0, 0, 0, 0, wt, color ) X #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,material,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,bi,0,material), 0, \ X TOOL_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, 0, wt, color ) X /* containers */ X--- 429,443 ---- X /* tools ... */ X /* tools with weapon characteristics come last */ X #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,material,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,material), 0, \ X TOOL_CLASS, prob, 0, \ X wt, cost, 0, 0, 0, 0, wt, color ) X #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,material,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,0,chg,1,mgc,chg,0,0,0,0,material), 0, \ X TOOL_CLASS, prob, 0, \ X wt, cost, 0, 0, 0, 0, wt, color ) X #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,material,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,bi,0,material), 0, \ X TOOL_CLASS, prob, 0, \ X wt, cost, sdam, ldam, hitbon, 0, wt, color ) X /* containers */ X*************** X*** 516,525 **** X 12, 12, 0, BONE, WHITE), X /* two special, one of each kind, "tools" */ X OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"), X! BITS(0,0,1,0,1,0,1,0,0,GOLD), 0, X TOOL_CLASS, 0, 0,10, 3000, 0, 0, 0, 0, 200, HI_GOLD), X OBJECT(OBJ("Bell of Opening", "silver bell"), X! BITS(0,0,1,0,1,0,1,0,0,SILVER), 0, X TOOL_CLASS, 0, 0,10, 1000, 0, 0, 0, 0, 50, HI_SILVER), X #undef TOOL X #undef WEPTOOL X--- 516,525 ---- X 12, 12, 0, BONE, WHITE), X /* two special, one of each kind, "tools" */ X OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"), X! BITS(0,0,1,0,1,0,1,1,0,0,GOLD), 0, X TOOL_CLASS, 0, 0,10, 3000, 0, 0, 0, 0, 200, HI_GOLD), X OBJECT(OBJ("Bell of Opening", "silver bell"), X! BITS(0,0,1,0,1,0,1,1,0,0,SILVER), 0, X TOOL_CLASS, 0, 0,10, 1000, 0, 0, 0, 0, 50, HI_SILVER), X #undef TOOL X #undef WEPTOOL X*************** X*** 526,532 **** X X /* comestibles ... */ X #define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) OBJECT( \ X! OBJ(name,NULL), BITS(1,1,uk,0,0,0,0,0,0,tin), 0, \ X FOOD_CLASS, prob, delay, \ X wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color ) X /* all types of food (except tins & corpses) must have a delay of at least 1. */ X--- 526,532 ---- X X /* comestibles ... */ X #define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) OBJECT( \ X! OBJ(name,NULL), BITS(1,1,uk,0,0,0,0,0,0,0,tin), 0, \ X FOOD_CLASS, prob, delay, \ X wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color ) X /* all types of food (except tins & corpses) must have a delay of at least 1. */ X*************** X*** 574,580 **** X X /* potions ... */ X #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \ X! OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,GLASS), power, \ X POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color ) X POTION("gain ability", "ruby", 1, 0, 45, 300, RED), X POTION("restore ability", "pink", 1, 0, 45, 100, BRIGHT_MAGENTA), X--- 574,580 ---- X X /* potions ... */ X #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \ X! OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,GLASS), power, \ X POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color ) X POTION("gain ability", "ruby", 1, 0, 45, 300, RED), X POTION("restore ability", "pink", 1, 0, 45, 100, BRIGHT_MAGENTA), X*************** X*** 601,607 **** X X /* scrolls ... */ X #define SCROLL(name,text,mgc,prob,cost) OBJECT( \ X! OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,PAPER), 0, \ X SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER ) X SCROLL("enchant armor", "ZELGO MER", 1, 63, 80), X SCROLL("destroy armor", "JUYED AWK YACC", 1, 45, 100), X--- 601,607 ---- X X /* scrolls ... */ X #define SCROLL(name,text,mgc,prob,cost) OBJECT( \ X! OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,PAPER), 0, \ X SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER ) X SCROLL("enchant armor", "ZELGO MER", 1, 63, 80), X SCROLL("destroy armor", "JUYED AWK YACC", 1, 45, 100), X*************** X*** 637,643 **** X X /* spellbooks ... */ X #define SPELL(name,desc,prob,delay,level,mgc,dir,color) OBJECT( \ X! OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,dir,PAPER), 0, \ X SPBOOK_CLASS, prob, delay, \ X 50, level*100, 0, 0, 0, level, 20, color ) X SPELL("dig", "parchment", 22, 6, 5, 1, RAY, HI_PAPER), X--- 637,643 ---- X X /* spellbooks ... */ X #define SPELL(name,desc,prob,delay,level,mgc,dir,color) OBJECT( \ X! OBJ(name,desc), BITS(0,0,0,0,mgc,0,0,0,0,dir,PAPER), 0, \ X SPBOOK_CLASS, prob, delay, \ X 50, level*100, 0, 0, 0, level, 20, color ) X SPELL("dig", "parchment", 22, 6, 5, 1, RAY, HI_PAPER), X*************** X*** 682,694 **** X /* blank spellbook must come last because it retains its description */ X SPELL("blank paper", "plain", 20, 0, 0, 0, 0, HI_PAPER), X /* a special, one of a kind, spellbook */ X! OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,0,0,PAPER), 0, X SPBOOK_CLASS, 0, 0,20, 3500, 0, 0, 0, 7, 20, HI_PAPER), X #undef SPELL X X /* wands ... */ X #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \ X! OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,dir,metal), 0, WAND_CLASS, \ X prob, 0, 7, cost, 0, 0, 0, 0, 30, color ) X WAND("light", "glass", 95, 100, 1, NODIR, GLASS, HI_GLASS), X WAND("secret door detection", "balsa", 50, 150, 1, NODIR, WOOD, HI_WOOD), X--- 682,694 ---- X /* blank spellbook must come last because it retains its description */ X SPELL("blank paper", "plain", 20, 0, 0, 0, 0, HI_PAPER), X /* a special, one of a kind, spellbook */ X! OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,PAPER), 0, X SPBOOK_CLASS, 0, 0,20, 3500, 0, 0, 0, 7, 20, HI_PAPER), X #undef SPELL X X /* wands ... */ X #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \ X! OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,dir,metal), 0, WAND_CLASS, \ X prob, 0, 7, cost, 0, 0, 0, 0, 30, color ) X WAND("light", "glass", 95, 100, 1, NODIR, GLASS, HI_GLASS), X WAND("secret door detection", "balsa", 50, 150, 1, NODIR, WOOD, HI_WOOD), X*************** X*** 720,726 **** X X /* coins ... - so far, gold is all there is */ X #define COIN(name,prob,metal) OBJECT( \ X! OBJ(name,NULL), BITS(0,1,0,0,0,0,0,0,0,metal), 0, \ X GOLD_CLASS, prob, 0, 1, 0, 0, 0, 0, 0, 0, HI_GOLD ) X COIN("gold piece", 1000, GOLD), X #undef COIN X--- 720,726 ---- X X /* coins ... - so far, gold is all there is */ X #define COIN(name,prob,metal) OBJECT( \ X! OBJ(name,NULL), BITS(0,1,0,0,0,0,0,0,0,0,metal), 0, \ X GOLD_CLASS, prob, 0, 1, 0, 0, 0, 0, 0, 0, HI_GOLD ) X COIN("gold piece", 1000, GOLD), X #undef COIN X*************** X*** 727,736 **** X X /* gems ... - includes stones but not boulders */ X #define GEM(name,desc,prob,wt,gval,nutr,glass,color) OBJECT( \ X! OBJ(name,desc), BITS(0,1,0,0,0,0,0,0,0,glass), 0, \ X GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, WP_SLING, nutr, color ) X #define ROCK(name,desc,kn,prob,wt,gval,mgc,nutr,glass,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,1,0,0,mgc,0,0,0,0,glass), 0, \ X GEM_CLASS, prob, 0, wt, gval, 3, 3, 0, WP_SLING, nutr, color ) X GEM("dilithium crystal", "white", 3, 1, 4500, 15, GEMSTONE, WHITE), X GEM("diamond", "white", 4, 1, 4000, 15, GEMSTONE, WHITE), X--- 727,736 ---- X X /* gems ... - includes stones but not boulders */ X #define GEM(name,desc,prob,wt,gval,nutr,glass,color) OBJECT( \ X! OBJ(name,desc), BITS(0,1,0,0,0,0,0,0,0,0,glass), 0, \ X GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, WP_SLING, nutr, color ) X #define ROCK(name,desc,kn,prob,wt,gval,mgc,nutr,glass,color) OBJECT( \ X! OBJ(name,desc), BITS(kn,1,0,0,mgc,0,0,0,0,0,glass), 0, \ X GEM_CLASS, prob, 0, wt, gval, 3, 3, 0, WP_SLING, nutr, color ) X GEM("dilithium crystal", "white", 3, 1, 4500, 15, GEMSTONE, WHITE), X GEM("diamond", "white", 4, 1, 4000, 15, GEMSTONE, WHITE), X*************** X*** 765,788 **** X * probabilities only come into effect when you try to polymorph them. X * Boulders and statues weigh more than MAX_CARR_CAP. X */ X! OBJECT(OBJ("boulder",NULL), BITS(1,0,0,0,0,0,0,1,0,MINERAL), 0, X ROCK_CLASS, 100, 0, 6000, 0, 20, 20, 0, 0, 2000, HI_MINERAL), X! OBJECT(OBJ("statue", NULL), BITS(1,0,0,1,0,0,0,0,0,MINERAL), 0, X! ROCK_CLASS, 900, 0, 2500, 0, 20, 20, 0, 0, 2500, HI_MINERAL), X! OBJECT(OBJ("heavy iron ball", NULL), BITS(1,0,0,0,0,0,0,0,0,IRON), 0, X BALL_CLASS, 1000, 0, 480, 10, 0, 0, 0, 0, 200, HI_METAL), X! OBJECT(OBJ("iron chain", NULL), BITS(1,0,0,0,0,0,0,0,0,IRON), 0, X CHAIN_CLASS, 1000, 0, 120, 0, 0, 0, 0, 0, 200, HI_METAL), X OBJECT(OBJ("blinding venom", "splash of venom"), X! BITS(0,1,0,0,0,0,0,0,0,LIQUID), 0, X VENOM_CLASS, 500, 0, 1, 0, 0, 0, 0, 0, 0, HI_ORGANIC), X OBJECT(OBJ("acid venom", "splash of venom"), X! BITS(0,1,0,0,0,0,0,0,0,LIQUID), 0, X VENOM_CLASS, 500, 0, 1, 0, 6, 6, 0, 0, 0, HI_ORGANIC), X /* +d6 small or large */ X X /* fencepost -- name [1st arg] *must* be NULL */ X! OBJECT(OBJ(NULL,NULL), BITS(0,0,0,0,0,0,0,0,0,0), 0, X ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) X }; /* objects[] */ X X--- 765,788 ---- X * probabilities only come into effect when you try to polymorph them. X * Boulders and statues weigh more than MAX_CARR_CAP. X */ X! OBJECT(OBJ("boulder",NULL), BITS(1,0,0,0,0,0,0,0,1,0,MINERAL), 0, X ROCK_CLASS, 100, 0, 6000, 0, 20, 20, 0, 0, 2000, HI_MINERAL), X! OBJECT(OBJ("statue", NULL), BITS(1,0,0,1,0,0,0,0,0,0,MINERAL), 0, X! ROCK_CLASS, 900, 0, 2500, 0, 20, 20, 0, 0, 2500, WHITE), X! OBJECT(OBJ("heavy iron ball", NULL), BITS(1,0,0,0,0,0,0,0,0,0,IRON), 0, X BALL_CLASS, 1000, 0, 480, 10, 0, 0, 0, 0, 200, HI_METAL), X! OBJECT(OBJ("iron chain", NULL), BITS(1,0,0,0,0,0,0,0,0,0,IRON), 0, X CHAIN_CLASS, 1000, 0, 120, 0, 0, 0, 0, 0, 200, HI_METAL), X OBJECT(OBJ("blinding venom", "splash of venom"), X! BITS(0,1,0,0,0,0,0,1,0,0,LIQUID), 0, X VENOM_CLASS, 500, 0, 1, 0, 0, 0, 0, 0, 0, HI_ORGANIC), X OBJECT(OBJ("acid venom", "splash of venom"), X! BITS(0,1,0,0,0,0,0,1,0,0,LIQUID), 0, X VENOM_CLASS, 500, 0, 1, 0, 6, 6, 0, 0, 0, HI_ORGANIC), X /* +d6 small or large */ X X /* fencepost -- name [1st arg] *must* be NULL */ X! OBJECT(OBJ(NULL,NULL), BITS(0,0,0,0,0,0,0,0,0,0,0), 0, X ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) X }; /* objects[] */ X X END_OF_FILE if test 55751 -ne `wc -c <'patches01f'`; then echo shar: \"'patches01f'\" unpacked with wrong size! fi # end of 'patches01f' echo shar: End of archive 4 \(of 31\). cp /dev/null ark4isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 31 archives. echo "Now execute 'patchit.sh'" rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0