gold dragon and scales

Add two new monsters and two new objects:
 gold dragon
 baby gold dragon
 gold dragon scale mail
 set of gold dragon scales

A couple of variants seem to have added these already, but this came
off my ancient list of monsters to add and was done from scratch.
It's a clone of silver dragon, but instead of having reflection and
breathing cold, a gold dragon emits light and breathes fire; because
of the latter it can be seen with infravision like a red dragon.
Adult gold dragons are lawful as in the AD&D Monster Manual rather
than chaotic as the wiki pages show for the variant versions.

Worn gold dragon scales operate similar to wielded Sunsword:  when
blessed, radius is 3 (same as a lamp), if uncursed, radius is 2, and
if cursed, radius is 1 (but functions as 2 when worn by the hero,
otherwise there would be no tangible effect).  Gold dragon scale mail
gets an extra +1, making blessed gold DSM have a bigger radius than
lamps.  Embedded scales have radius 1 regardless of BUC state; light
for that case comes from the gold dragon monster form the hero is in.
When not worn, gold scales and scale-mail don't emit any light.

The tiles use a mix of yellow (for gold) and red.  The two object
tiles seem reasonable variations of the corresponding silver dragon
ones.  The two monster tiles definitely need work since the silver
ones were mostly cyan and changing that to red did not produce very
good result; subsequent attempt at a mixture was haphazard at best.
This commit is contained in:
PatR
2021-07-23 10:41:57 -07:00
parent 8e2f168544
commit 5a09a01a13
17 changed files with 1222 additions and 947 deletions

View File

@@ -1126,11 +1126,16 @@ NEARDATA struct permonst mons_init[] = {
/* The order of the dragons is VERY IMPORTANT. Quite a few
* pieces of code depend on gray being first and yellow being last.
* The code also depends on the *order* being the same as that for
* dragon scale mail and dragon scales in objects.c. Baby dragons
* cannot confer intrinsics, to avoid polyself/egg abuse.
* dragon scale mail and dragon scales in objects.c. [Also,
* 'tilemap' assumes that shimmering dragon follows silver dragon.]
*
* As reptiles, dragons are cold-blooded and thus aren't seen
* with infravision. Red dragons are the exception.
* Adult dragons are all lawful or chaotic; baby dragons are all
* neutral. This affects monster generation on some special levels.
* Baby dragons cannot confer intrinsics, to avoid polyself/egg abuse.
*
* As reptiles, dragons are cold-blooded and thus aren't seen with
* infravision. Red and gold dragons (also Chromatic Dragon) are
* the exceptions because they breathe fire.
*/
MON("baby gray dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO,
A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
@@ -1138,6 +1143,13 @@ NEARDATA struct permonst mons_init[] = {
SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0,
M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE,
M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_GRAY),
MON("baby gold dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO,
A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
NO_ATTK),
SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0,
M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE,
M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, M3_INFRAVISIBLE,
13, HI_GOLD),
MON("baby silver dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO,
A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
NO_ATTK),
@@ -1145,6 +1157,7 @@ NEARDATA struct permonst mons_init[] = {
M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE,
M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, DRAGON_SILVER),
#if 0 /* DEFERRED */
/* [see "shimmering dragon" below] */
MON("baby shimmering dragon", S_DRAGON,
LVL(12, 9, 2, 10, 0), G_GENO,
A(ATTK(AT_BITE, AD_PHYS, 2, 6),
@@ -1205,6 +1218,15 @@ NEARDATA struct permonst mons_init[] = {
| M1_CARNIVORE,
M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC,
0, 20, CLR_GRAY),
MON("gold dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1),
A(ATTK(AT_BREA, AD_FIRE, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8),
ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4),
NO_ATTK, NO_ATTK),
SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_FIRE, 0,
M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS
| M1_CARNIVORE,
M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC,
M3_INFRAVISIBLE, 20, HI_GOLD),
MON("silver dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1),
A(ATTK(AT_BREA, AD_COLD, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8),
ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK,
@@ -1215,6 +1237,10 @@ NEARDATA struct permonst mons_init[] = {
M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC,
0, 20, DRAGON_SILVER),
#if 0 /* DEFERRED */
/* shimmering scales/scale-mail would confer displacement when worn by
the hero, so shimmering dragon ought to be displaced (hero who can
see one might misjudge its location) but monster displacement hasn't
been implemented so we don't include it */
MON("shimmering dragon", S_DRAGON,
LVL(15, 9, -1, 20, 4), (G_GENO | 1),
A(ATTK(AT_BREA, AD_MAGM, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8),
@@ -3042,7 +3068,8 @@ struct permonst _mons2[] = {
| M2_HOSTILE | M2_NASTY | M2_COLLECT | M2_MAGIC,
M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 22, HI_LORD),
/* Multi-headed, possessing the breath attacks of all the other dragons
* (selected at random when attacking).
* (selected at random when attacking). Despite being a superset of
* gold dragon, does not emit light.
*/
MON("Chromatic Dragon", S_DRAGON, LVL(16, 12, 0, 30, -14),
(G_NOGEN | G_UNIQ),