Skip to content

Commit

Permalink
All demons/devils are now unaligned (evil).
Browse files Browse the repository at this point in the history
A monster having an alignment of unaligned has always denoted being
'evil'. In regular NetHack, this would only be the Wizard of Yendor, and
if memory serves, the high priest in Moloch's temple in the Valley of
the Dead. In EvilHack, it's included a few more monsters, such as the
Archbishop of Moloch and their attendants (cultists), player monster
Infidels, and of course player Infidels, which become demons when
crowned.

Demons and devils in NetHack are either chaotic (demons) or lawful
(almost every devil), to include the unique demon/devil bosses. I
understand why this is the way it is, because in advanced Dungeons &
Dragons, demons are always chaotic evil, and devils lawful evil. But
NetHack doesn't have the nine alignment system, just the three -
lawful/neutral/chaotic. This doesn't really work well for demons and
devils in the world of NetHack, and especially in a variant like
EvilHack where 'true evil' means a lot more than in other variants.
Side note - horned/barbed devils would never randomly spawn in Gehennom,
because they are lawful. Technically, this is a bug. Maybe the NetHack
devs will address that someday.

Anywho. This commit makes all demons and devils unaligned, or 'evil'. As
they should be. It's not as simple as just changing their alignment,
some edits also needed to be made for artifact handling for
demons/devils, and the monster spell 'summon nasties'. Because of this
change, demons can now gate in all types of demons/devils, and are not
restricted by their alignment. Also, horned/barbed devils can now
randomly appear in Gehennom, like they should have been able to do from
the beginning.
  • Loading branch information
k21971 committed Sep 23, 2024
1 parent 7da177e commit de16919
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 39 deletions.
2 changes: 1 addition & 1 deletion dat/Druid.des
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# The "start" level for the quest.
#
# Here you meet your (besieged) class leader,
# Elanee, and receive your quest assignment.
# Elanee, and receive your quest assignment.
#
MAZE: "Dru-strt",' '
FLAGS: noteleport,hardfloor
Expand Down
1 change: 1 addition & 0 deletions doc/evilhack-changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3636,4 +3636,5 @@ The following changes to date are:
- Fix: objects.txt (brass -> bronze)
- Initial Druid quest text
- Finish up Druid quest text, fix formatting
- All demons/devils are now unaligned (evil)

18 changes: 13 additions & 5 deletions src/artifact.c
Original file line number Diff line number Diff line change
Expand Up @@ -1105,11 +1105,19 @@ struct monst *mon;
&& oart->alignment != A_NONE
&& (oart->alignment != u.ualign.type
|| u.ualign.record < 0));
} else if (!is_covetous(mon->data) && !is_mplayer(mon->data)) {
badclass = self_willed && oart->role != NON_PM
&& oart != &artilist[ART_EXCALIBUR];
badalign = (oart->spfx & SPFX_RESTR) && oart->alignment != A_NONE
&& (oart->alignment != mon_aligntyp(mon));
} else if (!(is_covetous(mon->data)
|| is_mplayer(mon->data) || is_demon(mon->data))) {
badclass = self_willed && oart->role != NON_PM
&& oart != &artilist[ART_EXCALIBUR];
badalign = (oart->spfx & SPFX_RESTR) && oart->alignment != A_NONE
&& (oart->alignment != mon_aligntyp(mon));
} else if (is_demon(mon->data)) {
/* special case for demons as they are now all unaligned (evil).
Lawful/neutral artifacts are off-limits */
badclass = self_willed && oart->role != NON_PM
&& oart != &artilist[ART_EXCALIBUR];
badalign = (oart->spfx & SPFX_RESTR) && oart->alignment >= A_NEUTRAL
&& mon_aligntyp(mon) == A_NONE;
} else { /* an M3_WANTSxxx monster or a fake player */
/* special monsters trying to take the Amulet, invocation tools or
quest item can touch anything except `spec_applies' artifacts */
Expand Down
64 changes: 32 additions & 32 deletions src/monst.c
Original file line number Diff line number Diff line change
Expand Up @@ -3384,7 +3384,7 @@ struct permonst _mons2[] = {
/*
* (major) demons
*/
MON("water demon", S_DEMON, LVL(8, 12, -4, 30, -7),
MON("water demon", S_DEMON, LVL(8, 12, -4, 30, A_NONE),
(G_NOCORPSE | G_NOGEN),
A(ATTK(AT_WEAP, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3),
ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK),
Expand All @@ -3393,7 +3393,7 @@ struct permonst _mons2[] = {
M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT,
M3_INFRAVISIBLE | M3_INFRAVISION, M4_VULNERABLE_ELEC,
MH_DEMON, 11, CLR_BLUE),
MON("lava demon", S_DEMON, LVL(12, 12, -8, 40, -7),
MON("lava demon", S_DEMON, LVL(12, 12, -8, 40, A_NONE),
(G_NOCORPSE | G_NOGEN),
A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_BITE, AD_PHYS, 1, 8),
ATTK(AT_BITE, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK),
Expand All @@ -3410,27 +3410,27 @@ struct permonst _mons2[] = {
#define SEDUCTION_ATTACKS_NO \
A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), \
ATTK(AT_BITE, AD_DRLI, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK)
MON("succubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1),
MON("succubus", S_DEMON, LVL(6, 12, 0, 70, A_NONE), (G_NOCORPSE | 1),
SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN),
MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS,
M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 8, CLR_GRAY),
MON("horned devil", S_DEMON, LVL(6, 9, -5, 50, 11),
MON("horned devil", S_DEMON, LVL(6, 9, -5, 50, A_NONE),
(G_HELL | G_NOCORPSE | 2),
A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4),
ATTK(AT_BITE, AD_PHYS, 2, 3), ATTK(AT_STNG, AD_PHYS, 1, 3), NO_ATTK,
NO_ATTK),
SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_POISON, 0,
M1_FLY | M1_POIS | M1_THICK_HIDE, M2_STALK | M2_HOSTILE | M2_NASTY,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 9, CLR_BROWN),
MON("incubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1),
MON("incubus", S_DEMON, LVL(6, 12, 0, 70, A_NONE), (G_NOCORPSE | 1),
SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN),
MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS,
M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 8, CLR_GRAY),
/* Used by AD&D for a type of demon, originally one of the Furies
and spelled this way */
MON("erinys", S_DEMON, LVL(7, 12, 2, 30, 10),
MON("erinys", S_DEMON, LVL(7, 12, 2, 30, A_NONE),
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
A(ATTK(AT_WEAP, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
NO_ATTK),
Expand All @@ -3439,14 +3439,14 @@ struct permonst _mons2[] = {
M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY
| M2_FEMALE | M2_COLLECT,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 10, CLR_RED),
MON("barbed devil", S_DEMON, LVL(8, 12, 0, 35, 8),
MON("barbed devil", S_DEMON, LVL(8, 12, 0, 35, A_NONE),
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_PHYS, 3, 4),
ATTK(AT_MAGC, AD_FIRE, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_POISON, 0,
M1_POIS | M1_THICK_HIDE, M2_STALK | M2_HOSTILE | M2_NASTY,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 10, CLR_RED),
MON("marilith", S_DEMON, LVL(7, 12, -6, 80, -12),
MON("marilith", S_DEMON, LVL(7, 12, -6, 80, A_NONE),
(G_HELL | G_NOCORPSE | 1),
A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4),
ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4),
Expand All @@ -3455,29 +3455,29 @@ struct permonst _mons2[] = {
M1_HUMANOID | M1_SLITHY | M1_SEE_INVIS | M1_POIS,
M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE | M2_COLLECT,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 11, CLR_RED),
MON("vrock", S_DEMON, LVL(8, 12, 0, 50, -9),
MON("vrock", S_DEMON, LVL(8, 12, 0, 50, A_NONE),
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4),
ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_CLAW, AD_PHYS, 1, 8),
ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK),
SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0,
M1_FLY | M1_POIS, M2_STALK | M2_HOSTILE | M2_NASTY,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 11, CLR_GREEN),
MON("hezrou", S_DEMON, LVL(9, 9, -2, 55, -10),
MON("hezrou", S_DEMON, LVL(9, 9, -2, 55, A_NONE),
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3),
ATTK(AT_BITE, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0,
M1_HUMANOID | M1_POIS, M2_STALK | M2_HOSTILE | M2_NASTY,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 12, CLR_GREEN),
MON("bone devil", S_DEMON, LVL(9, 15, -1, 40, -9),
MON("bone devil", S_DEMON, LVL(9, 15, -1, 40, A_NONE),
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK,
NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0,
M1_POIS, M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 13, CLR_GRAY),
MON("ice devil", S_DEMON, LVL(11, 9, -4, 55, -12),
MON("ice devil", S_DEMON, LVL(11, 9, -4, 55, A_NONE),
(G_HELL | G_NOCORPSE | 2),
A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4),
ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_COLD, 3, 4), NO_ATTK,
Expand All @@ -3486,15 +3486,15 @@ struct permonst _mons2[] = {
MR_FIRE | MR_COLD | MR_POISON, 0, M1_SEE_INVIS | M1_POIS,
M2_STALK | M2_HOSTILE | M2_NASTY,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 14, CLR_WHITE),
MON("nalfeshnee", S_DEMON, LVL(11, 9, -1, 65, -11),
MON("nalfeshnee", S_DEMON, LVL(11, 9, -1, 65, A_NONE),
(G_HELL | G_NOCORPSE | 1),
A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4),
ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK,
NO_ATTK),
SIZ(WT_HUMAN, 400, MS_SPELL, MZ_LARGE), MR_FIRE | MR_POISON, 0,
M1_HUMANOID | M1_POIS, M2_STALK | M2_HOSTILE | M2_NASTY,
M3_INFRAVISIBLE | M3_INFRAVISION, 0, MH_DEMON, 15, CLR_RED),
MON("pit fiend", S_DEMON, LVL(13, 9, -3, 65, -13),
MON("pit fiend", S_DEMON, LVL(13, 9, -3, 65, A_NONE),
(G_HELL | G_NOCORPSE | 2),
A(ATTK(AT_WEAP, AD_PHYS, 4, 2), ATTK(AT_WEAP, AD_PHYS, 4, 2),
ATTK(AT_HUGS, AD_PITS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK),
Expand All @@ -3509,14 +3509,14 @@ struct permonst _mons2[] = {
SIZ(1500, 400, MS_CUSS, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID,
M2_NOPOLY | M2_STALK | M2_STRONG | M2_COLLECT | M2_SHAPESHIFTER,
M3_ACCURATE | M3_INFRAVISIBLE | M3_INFRAVISION, 0, 0, 15, CLR_GRAY),
MON("weredemon", S_DEMON, LVL(16, 16, 0, 60, -7), (G_NOCORPSE | 1),
MON("weredemon", S_DEMON, LVL(16, 16, 0, 60, A_NONE), (G_NOCORPSE | 1),
A(ATTK(AT_CLAW, AD_PHYS, 4, 6), ATTK(AT_BITE, AD_WERE, 3, 6),
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_FIRE | MR_POISON, 0,
M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE,
M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_COLLECT | M2_STRONG| M2_NASTY,
M3_INFRAVISION | M3_INFRAVISIBLE, 0, MH_DEMON | MH_WERE, 19, CLR_BLACK),
MON("balrog", S_DEMON, LVL(18, 12, -2, 75, -14), (G_HELL | G_NOCORPSE | 1),
MON("balrog", S_DEMON, LVL(18, 12, -2, 75, A_NONE), (G_HELL | G_NOCORPSE | 1),
A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6),
NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
SIZ(WT_HUMAN, 400, MS_ROAR, MZ_HUGE), MR_FIRE | MR_POISON, 0,
Expand All @@ -3527,7 +3527,7 @@ struct permonst _mons2[] = {
/* Named demon lords & princes plus Arch-Devils.
* (their order matters; see minion.c)
*/
MON("Juiblex", S_DEMON, LVL(50, 12, -7, 65, -15),
MON("Juiblex", S_DEMON, LVL(50, 12, -7, 65, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_ENGL, AD_DISE, 4, 10), ATTK(AT_SPIT, AD_ACID, 3, 6),
ATTK(AT_TUCH, AD_ACID, 4, 6), ATTK(AT_MAGC, AD_CLRC, 2, 6),
Expand All @@ -3540,7 +3540,7 @@ struct permonst _mons2[] = {
| M2_LORD | M2_MALE,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISION,
0, MH_DEMON, 27, CLR_BRIGHT_GREEN),
MON("Baphomet", S_DEMON, LVL(54, 18, -4, 75, -15),
MON("Baphomet", S_DEMON, LVL(54, 18, -4, 75, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_CLAW, AD_PHYS, 4, 6),
ATTK(AT_MAGC, AD_CLRC, 2, 6), ATTK(AT_BUTT, AD_CLOB, 8, 6),
Expand All @@ -3552,7 +3552,7 @@ struct permonst _mons2[] = {
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION
| M3_BERSERK,
0, MH_DEMON, 30, HI_LORD),
MON("Yeenoghu", S_DEMON, LVL(56, 18, -5, 80, -15),
MON("Yeenoghu", S_DEMON, LVL(56, 18, -5, 80, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_WEAP, AD_CONF, 2, 8),
ATTK(AT_CLAW, AD_PLYS, 1, 6), ATTK(AT_MAGC, AD_MAGM, 6, 6),
Expand All @@ -3563,7 +3563,7 @@ struct permonst _mons2[] = {
| M2_LORD | M2_MALE | M2_COLLECT | M2_STRONG,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION,
0, MH_DEMON, 31, HI_LORD),
MON("Lolth", S_DEMON, LVL(67, 12, -10, 70, -15),
MON("Lolth", S_DEMON, LVL(67, 12, -10, 70, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4),
ATTK(AT_BITE, AD_PLYS, 2, 4), ATTK(AT_TUCH, AD_WEBS, 0, 0),
Expand All @@ -3574,7 +3574,7 @@ struct permonst _mons2[] = {
| M2_STRONG | M2_LORD | M2_FEMALE,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION,
0, MH_DEMON | MH_SPIDER, 36, HI_LORD),
MON("Geryon", S_DEMON, LVL(72, 12, -3, 75, 15),
MON("Geryon", S_DEMON, LVL(72, 12, -3, 75, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_CLAW, AD_PHYS, 4, 6),
ATTK(AT_STNG, AD_DRST, 2, 8), ATTK(AT_MAGC, AD_CLRC, 4, 6),
Expand All @@ -3585,7 +3585,7 @@ struct permonst _mons2[] = {
| M2_STRONG | M2_LORD | M2_MALE,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION,
0, MH_DEMON, 36, HI_LORD),
MON("Dispater", S_DEMON, LVL(78, 15, -2, 80, 15),
MON("Dispater", S_DEMON, LVL(78, 15, -2, 80, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_WEAP, AD_PHYS, 4, 6),
ATTK(AT_MAGC, AD_CLRC, 6, 6), NO_ATTK, NO_ATTK, NO_ATTK),
Expand All @@ -3595,7 +3595,7 @@ struct permonst _mons2[] = {
| M2_STRONG | M2_LORD | M2_MALE | M2_COLLECT,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION,
0, MH_DEMON, 40, HI_LORD),
MON("Baalzebub", S_DEMON, LVL(89, 12, -5, 85, 20),
MON("Baalzebub", S_DEMON, LVL(89, 12, -5, 85, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_BITE, AD_DRST, 4, 6), ATTK(AT_GAZE, AD_STUN, 2, 6),
ATTK(AT_MAGC, AD_CLRC, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK),
Expand All @@ -3605,7 +3605,7 @@ struct permonst _mons2[] = {
| M2_LORD | M2_MALE,
M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, 0,
MH_DEMON, 45, HI_LORD),
MON("Mephistopheles", S_DEMON, LVL(80, 12, -6, 90, 15),
MON("Mephistopheles", S_DEMON, LVL(80, 12, -6, 90, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_CLAW, AD_ENCH, 3, 4),
ATTK(AT_MAGC, AD_FIRE, 3, 4), ATTK(AT_MAGC, AD_SPEL, 3, 4),
Expand All @@ -3616,7 +3616,7 @@ struct permonst _mons2[] = {
| M2_STRONG | M2_LORD | M2_MALE | M2_COLLECT,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION,
0, MH_DEMON, 42, HI_LORD),
MON("Orcus", S_DEMON, LVL(66, 15, -6, 85, -20),
MON("Orcus", S_DEMON, LVL(66, 15, -6, 85, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_WEAP, AD_PHYS, 4, 4),
ATTK(AT_CLAW, AD_WTHR, 3, 4), ATTK(AT_MAGC, AD_SPEL, 6, 6),
Expand All @@ -3631,7 +3631,7 @@ struct permonst _mons2[] = {
/* Multi-headed, possessing the breath attacks of all the other dragons
* (selected at random when attacking).
*/
MON("Tiamat", S_DRAGON, LVL(103, 15, -8, 80, -20),
MON("Tiamat", S_DRAGON, LVL(103, 15, -8, 80, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_BREA, AD_RBRE, 6, 6), ATTK(AT_MAGC, AD_SPEL, 2, 4),
ATTK(AT_CLAW, AD_SAMU, 4, 6), ATTK(AT_BITE, AD_PHYS, 6, 6),
Expand All @@ -3647,7 +3647,7 @@ struct permonst _mons2[] = {
| M2_PNAME | M2_PRINCE | M2_GREEDY | M2_JEWELS | M2_MAGIC,
M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, 0,
MH_DEMON | MH_DRAGON, 53, HI_LORD),
MON("Graz'zt", S_DEMON, LVL(105, 12, -9, 35, -20),
MON("Graz'zt", S_DEMON, LVL(105, 12, -9, 35, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 8), ATTK(AT_CLAW, AD_STUN, 6, 6),
ATTK(AT_MAGC, AD_CLRC, 4, 6), ATTK(AT_CLAW, AD_SITM, 0, 0),
Expand All @@ -3658,7 +3658,7 @@ struct permonst _mons2[] = {
| M2_NASTY | M2_PRINCE | M2_MALE,
M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, 0,
MH_DEMON, 53, HI_LORD),
MON("Asmodeus", S_DEMON, LVL(105, 12, -7, 90, 20),
MON("Asmodeus", S_DEMON, LVL(105, 12, -7, 90, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_CLAW, AD_SLOW, 3, 6),
ATTK(AT_MAGC, AD_COLD, 6, 6), ATTK(AT_MAGC, AD_CLRC, 6, 6),
Expand All @@ -3669,7 +3669,7 @@ struct permonst _mons2[] = {
| M2_NASTY | M2_PRINCE | M2_MALE,
M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, 0,
MH_DEMON, 53, HI_LORD),
MON("Demogorgon", S_DEMON, LVL(106, 15, -8, 95, -20),
MON("Demogorgon", S_DEMON, LVL(106, 15, -8, 95, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_MAGC, AD_SPEL, 8, 6), ATTK(AT_STNG, AD_DRLI, 2, 4),
ATTK(AT_TENT, AD_DISE, 2, 6), ATTK(AT_TENT, AD_DISE, 2, 6),
Expand All @@ -3681,7 +3681,7 @@ struct permonst _mons2[] = {
| M2_STRONG | M2_PRINCE | M2_MALE,
M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION,
0, MH_DEMON, 57, HI_LORD),
MON("Lucifer", S_DEMON, LVL(110, 15, -1, 99, -20),
MON("Lucifer", S_DEMON, LVL(110, 15, -1, 99, A_NONE),
(G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_CLAW, AD_WTHR, 4, 6),
ATTK(AT_MAGC, AD_FIRE, 8, 8), ATTK(AT_MAGC, AD_CLRC, 4, 6),
Expand Down Expand Up @@ -4239,7 +4239,7 @@ struct permonst _mons2[] = {
/*
* quest nemeses
*/
MON("Minion of Huhetotl", S_DEMON, LVL(16, 12, -2, 75, -14),
MON("Minion of Huhetotl", S_DEMON, LVL(16, 12, -2, 75, A_NONE),
(G_NOCORPSE | G_NOGEN | G_UNIQ),
A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6),
ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK,
Expand Down Expand Up @@ -4334,7 +4334,7 @@ struct permonst _mons2[] = {
M2_NOPOLY | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STRONG
| M2_NASTY | M2_STALK | M2_COLLECT | M2_MAGIC,
M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 0, MH_HUMAN, 31, HI_LORD),
MON("Nalzok", S_DEMON, LVL(16, 12, -2, 85, -127),
MON("Nalzok", S_DEMON, LVL(16, 12, -2, 85, A_NONE),
(G_NOGEN | G_UNIQ | G_NOCORPSE),
A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6),
ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK,
Expand Down
2 changes: 1 addition & 1 deletion src/wizard.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ static NEARDATA const int nasties[] = {
PM_SILVER_DRAGON, PM_GOLD_DRAGON, PM_STONE_GIANT,
PM_SHIMMERING_DRAGON, PM_GRAY_DRAGON, PM_DWARF_ROYAL,
PM_GUARDIAN_NAGA, PM_FIRE_GIANT, PM_ALEAX, PM_ANGEL,
PM_COUATL, PM_HORNED_DEVIL, PM_BARBED_DEVIL,
PM_COUATL, PM_TORTLE_SHAMAN, PM_BLACK_NAGA,
/* (Archons, titans, ki-rin, and golden nagas are suitably nasty, but
they're summoners so would aggravate excessive summoning) */
};
Expand Down

0 comments on commit de16919

Please sign in to comment.