crystal helmet

Discussed a long time ago, change helm of brilliance from iron to
crystal so that it doesn't need to be a special case for metallic
armor's affect on spell casting.  It now has a fixed description of
"crystal helmet" but is not pre-discovered.

Add new helm of caution to retain the "etched helmet" description
among the shuffled helms.  Wearing it confers the Warning attribute.
That's fairly lame but not necessarily useless.  It's iron and gets
half the former probability for a random piece of armor being helm
of brilliance so is not likely to be popular.

Helm of caution keeps the old helm of brilliance tile and new helm
of brilliance is basically the same image with different color and
pointed on the top.

Not changed:  the etched helmet was marked as green and is drawn
that way for text but the tile doesn't actually use green for it.
Crystal helmet started as hi_glass (rendered as 'bright cyan') but
has been changed to clr_white to match crystal plate mail.

Old save and bones files are invalidated.
This commit is contained in:
PatR
2023-04-29 02:18:29 -07:00
parent 90155cd857
commit f9a35132d6
6 changed files with 432 additions and 398 deletions

View File

@@ -1154,6 +1154,8 @@ warnings via impossible() would be unseen if message suppression via ESC at
wearing the Eyes of the Overworld overrides OPTIONS:blind; breaking the
always-blind conduct by doing that was intended but having permanent
blindness stay cured after removing them was not
change helm of brilliance from iron to crystal so that it no longer needs to
be a special case for metallic armor vs spell casting
Fixes to 3.7.0-x General Problems Exposed Via git Repository
@@ -1924,8 +1926,8 @@ boiling a pool or fountain now creates a temporary cloud of steam
random themed rooms in the dungeons of doom
extended achievement and conduct fields for xlogfile
record amount of gold in hero's possession in xlogfile
new objects: amulets of flying and guarding, gold dragon scale mail and
set of gold dragon scales
new objects: amulets of flying and guarding, helm of caution,
gold dragon scale mail and set of gold dragon scales
new monsters: displacer beast ('f') and genetic engineer ('Q'), gold dragon
and baby gold dragon (both 'D')
make camera flash which reveals previously unseen map features or objects or

View File

@@ -441,22 +441,29 @@ HELM("fedora", NoDes,
FEDORA),
HELM("cornuthaum", "conical hat",
0, 1, CLAIRVOYANT, 3, 1, 4, 80, 10, 1, CLOTH, CLR_BLUE,
CORNUTHAUM),
/* name coined by devteam; confers clairvoyance for wizards,
blocks clairvoyance if worn by role other than wizard */
CORNUTHAUM),
HELM("dunce cap", "conical hat",
0, 1, 0, 3, 1, 4, 1, 10, 0, CLOTH, CLR_BLUE,
/* sets Int and Wis to fixed value of 6, so actually provides
protection against death caused by Int being drained below 3 */
DUNCE_CAP),
HELM("dented pot", NoDes,
1, 0, 0, 2, 0, 10, 8, 9, 0, IRON, CLR_BLACK,
DENTED_POT),
HELM("helm of brilliance", "crystal helmet",
0, 1, 0, 3, 1, 40, 50, 9, 0, GLASS, CLR_WHITE,
/* used to be iron and shuffled as "etched helmet" but required
special case for the effect of iron armor on spell casting */
HELM_OF_BRILLIANCE),
/* with shuffled appearances... */
HELM("helmet", "plumed helmet",
0, 0, 0, 10, 1, 30, 10, 9, 0, IRON, HI_METAL,
HELMET),
HELM("helm of brilliance", "etched helmet",
0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, CLR_GREEN,
HELM_OF_BRILLIANCE),
HELM("helm of caution", "etched helmet",
0, 1, WARNING, 3, 1, 50, 50, 9, 0, IRON, CLR_GREEN,
HELM_OF_CAUTION),
HELM("helm of opposite alignment", "crested helmet",
0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, HI_METAL,
HELM_OF_OPPOSITE_ALIGNMENT),

View File

@@ -17,7 +17,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
#define EDITLEVEL 83
#define EDITLEVEL 84
/*
* Development status possibilities.

View File

@@ -400,6 +400,9 @@ Helmet_on(void)
case ORCISH_HELM:
case HELM_OF_TELEPATHY:
break;
case HELM_OF_CAUTION:
see_monsters();
break;
case HELM_OF_BRILLIANCE:
adj_abon(uarmh, uarmh->spe);
break;
@@ -486,6 +489,7 @@ Helmet_off(void)
}
break;
case HELM_OF_TELEPATHY:
case HELM_OF_CAUTION:
/* need to update ability before calling see_monsters() */
setworn((struct obj *) 0, W_ARMH);
see_monsters();
@@ -1400,7 +1404,7 @@ Blindf_off(struct obj *otmp)
also used by poly_obj() when a worn item gets transformed */
void
set_wear(struct obj *obj) /* if null, do all worn items;
otherwise just obj itself */
* otherwise just obj itself */
{
gi.initial_don = !obj;
@@ -2078,7 +2082,7 @@ accessory_or_armor_on(struct obj *obj)
You("are suddenly overcome with shame and change your mind.");
u.ublessed = 0; /* lose your god's protection */
makeknown(obj->otyp);
gc.context.botl = 1; /*for AC after zeroing u.ublessed */
gc.context.botl = 1; /* for AC after zeroing u.ublessed */
return ECMD_TIME;
}
} else {

View File

@@ -1630,7 +1630,8 @@ sortspells(void)
}
/* usual case, sort the index rather than the spells themselves */
qsort((genericptr_t) gs.spl_orderindx, n, sizeof *gs.spl_orderindx, spell_cmp);
qsort((genericptr_t) gs.spl_orderindx, n,
sizeof *gs.spl_orderindx, spell_cmp);
return;
}
@@ -1662,7 +1663,8 @@ spellsortmenu(void)
any.a_int = i + 1;
add_menu(tmpwin, &nul_glyphinfo, &any, let, 0,
ATR_NONE, clr, spl_sortchoices[i],
(i == gs.spl_sortmode) ? MENU_ITEMFLAGS_SELECTED : MENU_ITEMFLAGS_NONE);
(i == gs.spl_sortmode) ? MENU_ITEMFLAGS_SELECTED
: MENU_ITEMFLAGS_NONE);
}
end_menu(tmpwin, "View known spells list sorted");
@@ -1823,10 +1825,10 @@ percent_success(int spell)
*/
int chance, splcaster, special, statused;
int difficulty;
int skill;
int skill, skilltype = spell_skilltype(spellid(spell));
/* Knights don't get metal armor penalty for clerical spells */
boolean paladin_bonus = Role_if(PM_KNIGHT)
&& spell_skilltype(spellid(spell)) == P_CLERIC_SPELL;
boolean paladin_bonus = (Role_if(PM_KNIGHT)
&& skilltype == P_CLERIC_SPELL);
/* Calculate intrinsic ability (splcaster) */
@@ -1843,7 +1845,7 @@ percent_success(int spell)
splcaster += gu.urole.spelshld;
if (!paladin_bonus) {
if (uarmh && is_metallic(uarmh) && uarmh->otyp != HELM_OF_BRILLIANCE)
if (uarmh && is_metallic(uarmh)) /* && otyp != HELM_OF_BRILLIANCE */
splcaster += uarmhbon;
if (uarmg && is_metallic(uarmg))
splcaster += uarmgbon;
@@ -1877,7 +1879,7 @@ percent_success(int spell)
* The difficulty is based on the hero's level and their skill level
* in that spell type.
*/
skill = P_SKILL(spell_skilltype(spellid(spell)));
skill = P_SKILL(skilltype);
skill = max(skill, P_UNSKILLED) - 1; /* unskilled => 0 */
difficulty =
(spellev(spell) - 1) * 4 - ((skill * 6) + (u.ulevel / 3) + 1);

File diff suppressed because it is too large Load Diff