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:
@@ -695,21 +695,37 @@ static int
|
||||
Armor_on(void)
|
||||
{
|
||||
/*
|
||||
* No suits require special handling. Special properties conferred by
|
||||
* suits are set up as intrinsics (actually 'extrinsics') by setworn()
|
||||
* which is called by armor_or_accessory_on() before Armor_on().
|
||||
* Gold DSM requires special handling since it emits light when worn.
|
||||
*/
|
||||
if (uarm) /* no known instances of !uarm here but play it safe */
|
||||
uarm->known = 1; /* suit's +/- evident because of status line AC */
|
||||
if (!uarm) /* no known instances of !uarm here but play it safe */
|
||||
return 0;
|
||||
uarm->known = 1; /* suit's +/- evident because of status line AC */
|
||||
|
||||
if (artifact_light(uarm) && !uarm->lamplit) {
|
||||
begin_burn(uarm, FALSE);
|
||||
if (!Blind)
|
||||
pline("%s %s to shine %s!",
|
||||
Yname2(uarm), otense(uarm, "begin"),
|
||||
arti_light_description(uarm));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
Armor_off(void)
|
||||
{
|
||||
struct obj *otmp = uarm;
|
||||
boolean was_arti_light = otmp && otmp->lamplit && artifact_light(otmp);
|
||||
|
||||
g.context.takeoff.mask &= ~W_ARM;
|
||||
setworn((struct obj *) 0, W_ARM);
|
||||
g.context.takeoff.cancelled_don = FALSE;
|
||||
|
||||
if (was_arti_light && !artifact_light(otmp)) {
|
||||
end_burn(otmp, FALSE);
|
||||
if (!Blind)
|
||||
pline("%s shining.", Tobjnam(otmp, "stop"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -722,9 +738,18 @@ Armor_off(void)
|
||||
int
|
||||
Armor_gone(void)
|
||||
{
|
||||
struct obj *otmp = uarm;
|
||||
boolean was_arti_light = otmp && otmp->lamplit && artifact_light(otmp);
|
||||
|
||||
g.context.takeoff.mask &= ~W_ARM;
|
||||
setnotworn(uarm);
|
||||
g.context.takeoff.cancelled_don = FALSE;
|
||||
|
||||
if (was_arti_light && !artifact_light(otmp)) {
|
||||
end_burn(otmp, FALSE);
|
||||
if (!Blind)
|
||||
pline("%s shining.", Tobjnam(otmp, "stop"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2773,6 +2798,10 @@ destroy_arm(register struct obj *atmp)
|
||||
} else if (DESTROY_ARM(uarm)) {
|
||||
if (donning(otmp))
|
||||
cancel_don();
|
||||
/* for gold DSM, we don't want Armor_gone() to report that it
|
||||
stops shining _after_ we've been told that it is destroyed */
|
||||
if (otmp->lamplit)
|
||||
end_burn(otmp, FALSE);
|
||||
Your("armor turns to dust and falls to the %s!", surface(u.ux, u.uy));
|
||||
(void) Armor_gone();
|
||||
useup(otmp);
|
||||
|
||||
Reference in New Issue
Block a user