diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 183fa644d..eb54336a9 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1511,6 +1511,7 @@ if a tree and a boulder or statue were at the same location, applying an axe avoid premapping outside Sokoban map to prevent showing stone glyphs Grimtooth is permanently poisoned, protects from poison, and can fling poison cursed magic whistle can teleport you to your pet +Fire and Frost Brand can be invoked for expert level fireball or cone of cold Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/include/artifact.h b/include/artifact.h index efd0a4992..9d66ad33f 100644 --- a/include/artifact.h +++ b/include/artifact.h @@ -68,6 +68,8 @@ enum invoke_prop_types { CREATE_AMMO, BANISH, FLING_POISON, + FIRESTORM, + SNOWSTORM, BLINDING_RAY }; diff --git a/include/artilist.h b/include/artilist.h index 8d55c6789..0adb26260 100644 --- a/include/artilist.h +++ b/include/artilist.h @@ -147,11 +147,11 @@ static NEARDATA struct artifact artilist[] = { 0, 7, 3500L, NO_COLOR, MAGICBANE), A("Frost Brand", LONG_SWORD, (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0, 0, - COLD(5, 0), COLD(0, 0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, + COLD(5, 0), COLD(0, 0), NO_CARY, SNOWSTORM, A_NONE, NON_PM, NON_PM, 0, 9, 3000L, NO_COLOR, FROST_BRAND), A("Fire Brand", LONG_SWORD, (SPFX_RESTR | SPFX_ATTK | SPFX_DEFN), 0, 0, - FIRE(5, 0), FIRE(0, 0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, + FIRE(5, 0), FIRE(0, 0), NO_CARY, FIRESTORM, A_NONE, NON_PM, NON_PM, 0, 5, 3000L, NO_COLOR, FIRE_BRAND), A("Dragonbane", BROADSWORD, diff --git a/src/artifact.c b/src/artifact.c index 3cb92fac5..7d9a082c6 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -2024,6 +2024,18 @@ arti_invoke(struct obj *obj) obj->age = svm.moves; } break; + case SNOWSTORM: + case FIRESTORM: + { + int storm = oart->inv_prop == SNOWSTORM ? SPE_CONE_OF_COLD : SPE_FIREBALL; + int skill = spell_skilltype(storm); + int expertise = P_SKILL(skill); + + P_SKILL(skill) = P_EXPERT; + (void) spelleffects(storm, FALSE, TRUE); + P_SKILL(skill) = expertise; + } + break; case BLINDING_RAY: if (getdir((char *) 0)) { if (u.dx || u.dy) {