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

@@ -7,7 +7,6 @@
static void mkbox_cnts(struct obj *);
static unsigned nextoid(struct obj *, struct obj *);
static void maybe_adjust_light(struct obj *, int);
static void obj_timer_checks(struct obj *, xchar, xchar, int);
static void container_weight(struct obj *);
static struct obj *save_mtraits(struct obj *, struct monst *);
@@ -1227,8 +1226,8 @@ start_corpse_timeout(struct obj* body)
(void) start_timer(when, TIMER_OBJECT, action, obj_to_any(body));
}
static void
maybe_adjust_light(struct obj* obj, int old_range)
void
maybe_adjust_light(struct obj *obj, int old_range)
{
char buf[BUFSZ];
xchar ox, oy;
@@ -1238,9 +1237,9 @@ maybe_adjust_light(struct obj* obj, int old_range)
so will change after blessing or cursing */
if (delta) {
obj_adjust_light_radius(obj, new_range);
/* simplifying assumptions: hero is wielding this object;
artifacts have to be in use to emit light and monsters'
gear won't change bless or curse state */
/* simplifying assumptions: hero is wielding or wearing this object;
artifacts have to be in use to emit light and monsters' gear won't
change bless or curse state */
if (!Blind && get_obj_location(obj, &ox, &oy, 0)) {
*buf = '\0';
if (iflags.last_msg == PLNMSG_OBJ_GLOWS)