summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorJude Brown <bookofjude@users.sourceforge.net>2010-01-01 21:46:44 +1000
committerJude Brown <bookofjude@users.sourceforge.net>2010-01-01 22:21:27 +1000
commit7e0fff01081a22364aab5a44a9b3a5040018e17a (patch)
tree62ad943e0e31c9d9c758e235b0b63e2bcda599e3 /crawl-ref
parenta60ff1ae3bac49a203f2825ae3e00effc31796ad (diff)
downloadcrawl-ref-7e0fff01081a22364aab5a44a9b3a5040018e17a.tar.gz
crawl-ref-7e0fff01081a22364aab5a44a9b3a5040018e17a.zip
Continuation of the range combat overhaul: branding spells.
As outlined in dpeg's ranged combat overhaul, branding spells should no longer be permanant, nor apply directly to the ammunition. This commit removes all previous "<X> Ammunition" spells, including the original "Poison Ammunition" spell. Instead, branding ammunition is now done via the launcher and the currently existent weapon branding spells. Currently, those that can be applied to a launcher are: Fire Brand, Freezing Aura and Poison Weapon. There is the capacity of Excruciating Wounds to also be applied, but this would require the addition of the Pain ego for missiles, of which the mechanics would need to be decided upon first. Like temporary brands on weapons currently, these brands on launchers are permanantly affixable by using a scroll of vorpalise weapon. This commit also overhauls the Arcane Marksman class. It began by removing the non-existent ammunition spells; this left Devastating Missiles with two spells: haste and deflect missiles. On reflection, I decided to delete the book instead. The Book of Elemental Missiles was easily adjusted by replacing the three branding spells by the existent (and aforementioned) branding spells. As there are no (according to the 0.6 ranged combat overhaul spec) spells intended for use with translocation effects on missiles, this left The Book of Warped Missiles rather empty. Attempts were made (with discussion with Eronarn on IRC) to work out something else to fill up the Book of Warped Missiles with, but I made the decision to get rid it instead, as the only good suggestions basically made it the Book of Spatial Translocations, and in that case, the player may as well select the warper class. We also discussed whether or not to remove Poison Weapon from the Elemental starting book; I decided it was best to leave it now, but increase its level from 2 to 3, to give the book more of a range of levels (starting a Spriggan Arcane Marksman had all the spells listed as "excellent" or "very good"; more on this shortly). I also decided that Repel Missiles is over-used in this context, and upon Eronarn's suggestion and sorear's agreement, have replaced it with Cause Fear. I think this will provide for interesting game play, and that the level of the spell is suitably high enough for it to not be abused. I also made the executive decision that "Elemental Missiles" was no longer an appropriate title, as it didn't contain any ammunition-specific spells any longer, and have renamed the book to the "Book of Brands". It is now: Book of Brands Level 1, Corona Level 2, Swiftness Level 2, Fire Brand Level 2, Freezing Aura Level 3, Poison Weapon Level 5, Cause Fear As the Arcane Marksmen class is now launcher-specific, rather than ammunition-specific, I have adjusted it to no longer give Hill Orcs, Sludge Elves and Merfolk javelins and throwing nets (they get bows like everyone else), and made the decision to ban Trolls and Ogres from the class altogether. The reasoning here is that they have bad launcher aptitudes, and as they are described as "marksmen", it makes no sense to give them a book full of launcher-specific spells and some large rocks and throwing nets. This change could, of course, be reverted, and they could simply be given bows, crossbows or slings as relevant, in line with all other races being given launchers and ammunition. I have adjusted the starting skill levels for enchantments, spell- casting and dodging to that of Crusaders. I have also removed Poison Ammunition from the Book of Envenomations, and replaced it with Poison Weapon instead. Finally, I have increased TAG_MAJOR_VERSION to 14.
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/dat/descript/items.txt13
-rw-r--r--crawl-ref/source/dat/descript/spells.txt6
-rw-r--r--crawl-ref/source/enum.h16
-rw-r--r--crawl-ref/source/item_use.cc7
-rw-r--r--crawl-ref/source/itemname.cc4
-rw-r--r--crawl-ref/source/main.cc10
-rw-r--r--crawl-ref/source/newgame.cc40
-rw-r--r--crawl-ref/source/ng-restr.cc8
-rw-r--r--crawl-ref/source/spells2.cc215
-rw-r--r--crawl-ref/source/spells2.h1
-rw-r--r--crawl-ref/source/spl-book.cc38
-rw-r--r--crawl-ref/source/spl-cast.cc40
-rw-r--r--crawl-ref/source/spl-data.h106
-rw-r--r--crawl-ref/source/tags.h2
14 files changed, 128 insertions, 378 deletions
diff --git a/crawl-ref/source/dat/descript/items.txt b/crawl-ref/source/dat/descript/items.txt
index 4c528ae6d2..a84b67f797 100644
--- a/crawl-ref/source/dat/descript/items.txt
+++ b/crawl-ref/source/dat/descript/items.txt
@@ -347,17 +347,10 @@ book of wizardry
A book of magic spells.
%%%%
-book of elemental missiles
+book of brands
-This book contains spells relating to ammunition and forms of ranged combat.
-%%%%
-book of warped missiles
-
-This book contains spells relating to ammunition and forms of ranged combat.
-%%%%
-book of devastating missiles
-
-This book contains spells relating to ammunition and forms of ranged combat.
+This book contains magical spells related to the branding of weapons and
+launchers, as well as spells that are helpful in all forms of ranged combat.
%%%%
bottled efreet
diff --git a/crawl-ref/source/dat/descript/spells.txt b/crawl-ref/source/dat/descript/spells.txt
index 1543714508..e0ff86fd3b 100644
--- a/crawl-ref/source/dat/descript/spells.txt
+++ b/crawl-ref/source/dat/descript/spells.txt
@@ -236,7 +236,7 @@ This spell will make ammunition held by the caster extremely unstable. With prop
%%%%
Fire Brand
-This spell sets a weapon held by the caster ablaze. It will not affect weapons otherwise subject to special enchantments.
+This spell sets a weapon or launcher held by the caster ablaze. It will not affect weapons otherwise subject to special enchantments.
%%%%
Fire Storm
@@ -268,7 +268,7 @@ This spell freezes a creature. This may temporarily slow the metabolism of a col
%%%%
Freezing Aura
-This spell surrounds a weapon held by the caster with an aura of freezing cold. It will not affect weapons which are otherwise subject to special enchantments.
+This spell surrounds a weapon or launcher held by the caster with an aura of freezing cold. It will not affect weapons which are otherwise subject to special enchantments.
%%%%
Freezing Cloud
@@ -422,7 +422,7 @@ This spell hurls a magical arrow coated with the most vile and noxious toxin. No
%%%%
Poison Weapon
-This spell temporarily coats any sharp bladed weapon with poison. It will only work on weapons without an existing enchantment.
+This spell temporarily coats any weapon or launcher with poison. It will only work on weapons without an existing enchantment.
%%%%
Poisonous Cloud
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 58487ff6a9..6c92000089 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -309,10 +309,8 @@ enum book_type
BOOK_PARTY_TRICKS,
BOOK_BEASTS,
BOOK_STALKING,
- BOOK_ELEMENTAL_MISSILES,
- BOOK_WARPED_MISSILES,
- BOOK_DEVASTATING_MISSILES,
- MAX_NORMAL_BOOK = BOOK_DEVASTATING_MISSILES,
+ BOOK_BRANDS,
+ MAX_NORMAL_BOOK = BOOK_BRANDS,
MIN_GOD_ONLY_BOOK,
BOOK_ANNIHILATIONS = MIN_GOD_ONLY_BOOK,
@@ -2813,7 +2811,6 @@ enum spell_type
SPELL_DETECT_CREATURES,
SPELL_CURE_POISON,
SPELL_CONTROL_TELEPORT,
- SPELL_POISON_AMMUNITION,
SPELL_POISON_WEAPON,
SPELL_RESIST_POISON,
SPELL_PROJECTED_NOISE,
@@ -2871,16 +2868,9 @@ enum spell_type
SPELL_PORTAL_PROJECTILE,
SPELL_SUMMON_UGLY_THING,
SPELL_PETRIFY,
- SPELL_FLAME_AMMUNITION,
- SPELL_FROST_AMMUNITION,
- SPELL_SHOCKING_AMMUNITION,
- SPELL_WARP_AMMUNITION,
- SPELL_EXPLODING_AMMUNITION,
- SPELL_REAPING_AMMUNITION,
- SPELL_RETURNING_AMMUNITION,
// Mostly monster-only spells after this point:
- SPELL_HELLFIRE_BURST = 175,
+ SPELL_HELLFIRE_BURST = 155,
SPELL_VAMPIRE_SUMMON,
SPELL_BRAIN_FEED,
SPELL_FAKE_RAKSHASA_SUMMON,
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index b755aa296e..85bd75d4db 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -4671,13 +4671,18 @@ static bool _vorpalise_weapon()
mprf("%s's heaviness feels very stable.", itname.c_str());
break;
+ case SPWPN_FLAME:
case SPWPN_FLAMING:
mprf("%s is engulfed in an explosion of flames!", itname.c_str());
immolation(10, IMMOLATION_SPELL, you.pos(), true, &you);
break;
+ case SPWPN_FROST:
case SPWPN_FREEZING:
- mprf("%s glows brilliantly blue for a moment.", itname.c_str());
+ if (get_weapon_brand(wpn) == SPWPN_FROST)
+ mprf("%s is covered with a thick layer of frost!", itname.c_str());
+ else
+ mprf("%s glows brilliantly blue for a moment.", itname.c_str());
cast_refrigeration(60);
break;
diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc
index c8ce048107..d39e16abf2 100644
--- a/crawl-ref/source/itemname.cc
+++ b/crawl-ref/source/itemname.cc
@@ -875,9 +875,7 @@ static const char* book_type_name(int booktype)
case BOOK_CANTRIPS: return "Cantrips";
case BOOK_PARTY_TRICKS: return "Party Tricks";
case BOOK_STALKING: return "Stalking";
- case BOOK_ELEMENTAL_MISSILES: return "Elemental Missiles";
- case BOOK_WARPED_MISSILES: return "Warped Missiles";
- case BOOK_DEVASTATING_MISSILES: return "Devastating Missiles";
+ case BOOK_BRANDS: return "Brands";
case BOOK_RANDART_LEVEL: return "Fixed Level";
case BOOK_RANDART_THEME: return "Fixed Theme";
default: return "Bugginess";
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index 8b675c2770..1769997400 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -2310,12 +2310,16 @@ static void _decrement_durations()
else
msg += " feels lighter.";
break;
+ case SPWPN_FLAME:
case SPWPN_FLAMING:
msg += " goes out.";
break;
case SPWPN_FREEZING:
msg += " stops glowing.";
break;
+ case SPWPN_FROST:
+ msg += "'s frost melts away.";
+ break;
case SPWPN_VENOM:
msg += " stops dripping with poison.";
break;
@@ -4629,9 +4633,9 @@ static void _compile_time_asserts()
COMPILE_CHECK(SK_UNARMED_COMBAT == 18 , c1);
COMPILE_CHECK(SK_EVOCATIONS == 38 , c2);
COMPILE_CHECK(SP_VAMPIRE == 30 , c3);
- COMPILE_CHECK(SPELL_DEBUGGING_RAY == 103 , c4);
- COMPILE_CHECK(SPELL_RETURNING_AMMUNITION == 162 , c5);
- COMPILE_CHECK(NUM_SPELLS == 218 , c6);
+ COMPILE_CHECK(SPELL_DEBUGGING_RAY == 102 , c4);
+ COMPILE_CHECK(SPELL_PETRIFY == 154 , c5);
+ COMPILE_CHECK(NUM_SPELLS == 198 , c6);
//jmf: NEW ASSERTS: we ought to do a *lot* of these
COMPILE_CHECK(NUM_SPECIES < SP_UNKNOWN , c7);
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index 2abb8108d0..cba6229fa1 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -4268,21 +4268,6 @@ bool _give_items_skills()
switch (you.species)
{
- case SP_SLUDGE_ELF:
- case SP_HILL_ORC:
- case SP_MERFOLK:
- _newgame_make_item(1, EQ_NONE, OBJ_MISSILES, MI_JAVELIN, -1, 6);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
- 2);
- break;
-
- case SP_TROLL:
- case SP_OGRE:
- _newgame_make_item(1, EQ_NONE, OBJ_MISSILES, MI_LARGE_ROCK, -1, 5);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
- 3);
- break;
-
case SP_HALFLING:
case SP_KOBOLD:
_newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_SLING);
@@ -4311,26 +4296,13 @@ bool _give_items_skills()
break;
}
- if (is_range_weapon(you.inv[1]))
- you.skills[range_skill(you.inv[1])] = 3;
- else
- you.skills[SK_THROWING] = 3;
-
- if (!_choose_book(3, BOOK_ELEMENTAL_MISSILES, 2))
- return (false);
-
- you.skills[SK_DODGING] = 2;
- you.skills[SK_SPELLCASTING] = 2;
+ // And give them a book
+ _newgame_make_item(3, EQ_NONE, OBJ_BOOKS, BOOK_BRANDS);
- switch (you.inv[3].sub_type)
- {
- case BOOK_ELEMENTAL_MISSILES:
- you.skills[SK_ENCHANTMENTS] = 3;
- break;
- case BOOK_WARPED_MISSILES:
- you.skills[SK_TRANSLOCATIONS] = 3;
- break;
- }
+ you.skills[range_skill(you.inv[1])] = 2;
+ you.skills[SK_DODGING] = 1;
+ you.skills[SK_SPELLCASTING] = 2;
+ you.skills[SK_ENCHANTMENTS] = 2;
break;
case JOB_WIZARD:
diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc
index 5ed1caeb48..79ca0ea36d 100644
--- a/crawl-ref/source/ng-restr.cc
+++ b/crawl-ref/source/ng-restr.cc
@@ -380,8 +380,6 @@ char_choice_restriction class_allowed(species_type speci,
case SP_HALFLING:
case SP_KOBOLD:
case SP_CENTAUR:
- case SP_OGRE:
- case SP_TROLL:
case SP_MINOTAUR:
case SP_KENKU:
case SP_RED_DRACONIAN:
@@ -390,6 +388,12 @@ char_choice_restriction class_allowed(species_type speci,
case SP_GHOUL:
case SP_VAMPIRE:
return (CC_RESTRICTED);
+ case SP_OGRE:
+ case SP_TROLL:
+ // XXX: Temp at the minute. They have rubbbish apt for launchers
+ // and there's no point giving them large rocks and throwings nets
+ // and then a book with spells that are useless for them. {due}
+ return (CC_BANNED);
default:
return (CC_UNRESTRICTED);
}
diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc
index d765d4db5f..c83b90db83 100644
--- a/crawl-ref/source/spells2.cc
+++ b/crawl-ref/source/spells2.cc
@@ -33,6 +33,7 @@
#include "itemname.h"
#include "items.h"
#include "it_use2.h"
+#include "makeitem.h"
#include "message.h"
#include "misc.h"
#include "mon-behv.h"
@@ -234,6 +235,54 @@ void corpse_rot()
// Should make zombies decay into skeletons?
}
+// We need to know what brands equate with what missile brands to know if
+// we should disallow temporary branding or not.
+special_missile_type _convert_to_missile(brand_type which_brand)
+{
+ switch (which_brand)
+ {
+ case SPWPN_NORMAL: return SPMSL_NORMAL;
+ case SPWPN_FLAME: // deliberate fall through
+ case SPWPN_FLAMING: return SPMSL_FLAME;
+ case SPWPN_FROST: // deliberate fall through
+ case SPWPN_FREEZING: return SPMSL_FROST;
+ case SPWPN_VENOM: return SPMSL_POISONED;
+ case SPWPN_CHAOS: return SPMSL_CHAOS;
+ case SPWPN_RETURNING: return SPMSL_RETURNING;
+ default: return SPMSL_NORMAL; // there are no equivalents for the rest
+ // of the ammo brands.
+ }
+}
+
+// Some launchers need to convert different brands.
+brand_type _convert_to_launcher(brand_type which_brand)
+{
+ switch (which_brand)
+ {
+ case SPWPN_FREEZING: return SPWPN_FROST; case SPWPN_FLAMING: return SPWPN_FLAME;
+ default: return (which_brand);
+ }
+}
+
+bool _ok_for_launchers(brand_type which_brand)
+{
+ switch (which_brand)
+ {
+ case SPWPN_NORMAL:
+ case SPWPN_FREEZING:
+ case SPWPN_FROST:
+ case SPWPN_FLAMING:
+ case SPWPN_FLAME:
+ case SPWPN_VENOM:
+ //case SPWPN_PAIN: -- no pain missile type yat
+ case SPWPN_RETURNING:
+ case SPWPN_CHAOS:
+ return (true);
+ default:
+ return (false);
+ }
+}
+
bool brand_weapon(brand_type which_brand, int power)
{
if (!you.weapon())
@@ -242,8 +291,12 @@ bool brand_weapon(brand_type which_brand, int power)
const bool temp_brand = you.duration[DUR_WEAPON_BRAND];
item_def& weapon = *you.weapon();
- // Can't brand non-weapons.
- if (weapon.base_type != OBJ_WEAPONS || is_range_weapon(weapon))
+ // Can't brand non-weapons, but can brand some launchers (see later).
+ if (weapon.base_type != OBJ_WEAPONS)
+ return (false);
+
+ // But not blowguns.
+ if (weapon.sub_type == WPN_BLOWGUN)
return (false);
// Can't brand artefacts.
@@ -258,6 +311,29 @@ bool brand_weapon(brand_type which_brand, int power)
if (temp_brand && (get_weapon_brand(weapon) != which_brand))
return (false);
+ // Can only brand launchers with sensical brands
+ if (is_range_weapon(weapon))
+ {
+ // If the new missile type wouldn't match the launcher, say no
+ missile_type missile = fires_ammo_type(weapon);
+
+ // XXX: To deal with the fact that is_missile_brand_ok will be unhappy
+ // if we attempt to brand stones, tell it we're using sling bullets instead.
+ if (weapon.sub_type == WPN_SLING)
+ missile = MI_SLING_BULLET;
+
+ if (!is_missile_brand_ok(missile, _convert_to_missile(which_brand)))
+ return (false);
+
+ // If the brand isn't appropriate for that launcher, also say no.
+ if (!_ok_for_launchers(which_brand))
+ return (false);
+
+ // Otherwise, convert to the correct brand type, most specifically (but
+ // not necessarily only) flaming -> flame, freezing -> frost.
+ which_brand = _convert_to_launcher(which_brand);
+ }
+
std::string msg = weapon.name(DESC_CAP_YOUR);
const int wpn_type = get_vorpal_type(weapon);
@@ -265,11 +341,17 @@ bool brand_weapon(brand_type which_brand, int power)
int duration_affected = 0;
switch (which_brand)
{
+ case SPWPN_FLAME:
case SPWPN_FLAMING:
msg += " bursts into flame!";
duration_affected = 7;
break;
+ case SPWPN_FROST:
+ msg += " frosts over!";
+ duration_affected = 7;
+ break;
+
case SPWPN_FREEZING:
msg += " glows blue.";
duration_affected = 7;
@@ -360,135 +442,6 @@ bool brand_weapon(brand_type which_brand, int power)
return (true);
}
-bool brand_ammo(special_missile_type which_type)
-{
- const int ammo = you.equip[EQ_WEAPON];
-
- if (ammo == -1
- || you.inv[ammo].base_type != OBJ_MISSILES
- || get_ammo_brand(you.inv[ammo]) != SPMSL_NORMAL
- || you.inv[ammo].sub_type == MI_THROWING_NET)
- {
- return (false);
- }
-
- bool retval = false;
- preserve_quiver_slots q;
- const char *old_desc = you.inv[ammo].name(DESC_CAP_YOUR).c_str();
-
- switch (which_type)
- {
- case SPMSL_POISONED:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_POISONED))
- {
- mprf("%s %s covered in a thin film of poison.", old_desc,
- (you.inv[ammo].quantity == 1) ? "is" : "are");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_FLAME:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_FLAME))
- {
- mprf("%s %s warm to the touch.", old_desc,
- (you.inv[ammo].quantity == 1) ? "feels" : "feel");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_FROST:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_FROST))
- {
- mprf("%s %s cool to the touch.", old_desc,
- (you.inv[ammo].quantity == 1) ? "feels" : "feel");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_DISPERSAL:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_DISPERSAL))
- {
- mprf("%s %s rather jumpy.", old_desc,
- (you.inv[ammo].quantity == 1) ? "seems" : "seem");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_ELECTRIC:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_ELECTRIC))
- {
- mprf("%s %s you!", old_desc,
- (you.inv[ammo].quantity == 1) ? "shocks" : "shock");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_EXPLODING:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_EXPLODING))
- {
- mprf("%s %s unstable!", old_desc,
- (you.inv[ammo].quantity == 1) ? "seems" : "seem");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_REAPING:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_REAPING))
- {
- mprf("%s %s briefly obscured by shadows.", old_desc,
- (you.inv[ammo].quantity == 1) ? "is" : "are");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- case SPMSL_RETURNING:
- if (set_item_ego_type(you.inv[ammo], OBJ_MISSILES, SPMSL_RETURNING))
- {
- mprf("%s %s in your hand.", old_desc,
- (you.inv[ammo].quantity == 1) ? "wiggles" : "wiggle");
-
- if (ammo == you.equip[EQ_WEAPON])
- you.wield_change = true;
-
- retval = true;
- }
- break;
-
- default:
- break;
- }
-
- return (retval);
-}
-
// Restore the stat in which_stat by the amount in stat_gain, displaying
// a message if suppress_msg is false, and doing so in the recovery
// channel if recovery is true. If stat_gain is 0, restore the stat
diff --git a/crawl-ref/source/spells2.h b/crawl-ref/source/spells2.h
index 83ba485321..a74b499899 100644
--- a/crawl-ref/source/spells2.h
+++ b/crawl-ref/source/spells2.h
@@ -13,7 +13,6 @@
class dist;
bool brand_weapon(brand_type which_brand, int power);
-bool brand_ammo(special_missile_type which_brand);
bool burn_freeze(int pow, beam_type flavour, monsters *monster);
void corpse_rot();
diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc
index 9509f8cba0..2c6618962d 100644
--- a/crawl-ref/source/spl-book.cc
+++ b/crawl-ref/source/spl-book.cc
@@ -342,7 +342,7 @@ static spell_type spellbook_template_array[][SPELLBOOK_SIZE] =
// Book of Envenomations
{SPELL_SPIDER_FORM,
SPELL_SUMMON_SCORPIONS,
- SPELL_POISON_AMMUNITION,
+ SPELL_POISON_WEAPON,
SPELL_RESIST_POISON,
SPELL_OLGREBS_TOXIC_RADIANCE,
SPELL_POISONOUS_CLOUD,
@@ -482,36 +482,14 @@ static spell_type spellbook_template_array[][SPELLBOOK_SIZE] =
SPELL_NO_SPELL,
},
- // Book of Elemental Missiles
+ // Book of Brands
{SPELL_CORONA,
SPELL_SWIFTNESS,
- SPELL_REPEL_MISSILES,
- SPELL_FLAME_AMMUNITION,
- SPELL_FROST_AMMUNITION,
- SPELL_POISON_AMMUNITION,
- SPELL_NO_SPELL,
- SPELL_NO_SPELL,
- },
-
- // Book of Warped Missiles
- {SPELL_APPORTATION,
- SPELL_PORTAL_PROJECTILE,
- SPELL_REPEL_MISSILES,
- SPELL_BLINK,
- SPELL_RETURNING_AMMUNITION,
- SPELL_WARP_AMMUNITION,
- SPELL_NO_SPELL,
+ SPELL_CAUSE_FEAR,
+ SPELL_FIRE_BRAND,
+ SPELL_FREEZING_AURA,
+ SPELL_POISON_WEAPON,
SPELL_NO_SPELL,
- },
-
- // Book of Devastating Missiles
- {SPELL_POISON_AMMUNITION,
- SPELL_WARP_AMMUNITION,
- SPELL_SHOCKING_AMMUNITION,
- SPELL_EXPLODING_AMMUNITION,
- SPELL_HASTE,
- SPELL_DEFLECT_MISSILES,
- SPELL_REAPING_AMMUNITION,
SPELL_NO_SPELL,
},
@@ -935,8 +913,7 @@ int book_rarity(unsigned char which_book)
case BOOK_YOUNG_POISONERS:
case BOOK_STALKING: //jmf: added 24jun2000
case BOOK_WAR_CHANTS:
- case BOOK_ELEMENTAL_MISSILES:
- case BOOK_WARPED_MISSILES:
+ case BOOK_BRANDS:
return 5;
case BOOK_CLOUDS:
@@ -957,7 +934,6 @@ int book_rarity(unsigned char which_book)
case BOOK_UNLIFE:
case BOOK_CONTROL:
case BOOK_SPATIAL_TRANSLOCATIONS:
- case BOOK_DEVASTATING_MISSILES:
return 10;
case BOOK_TEMPESTS:
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 10c4e7cea9..93414f848f 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -1954,46 +1954,6 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail)
canned_msg(MSG_SPELL_FIZZLES);
break;
- case SPELL_POISON_AMMUNITION:
- if (!brand_ammo(SPMSL_POISONED))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_FLAME_AMMUNITION:
- if (!brand_ammo(SPMSL_FLAME))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_FROST_AMMUNITION:
- if (!brand_ammo(SPMSL_FROST))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_WARP_AMMUNITION:
- if (!brand_ammo(SPMSL_DISPERSAL))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_SHOCKING_AMMUNITION:
- if (!brand_ammo(SPMSL_ELECTRIC))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_EXPLODING_AMMUNITION:
- if (!brand_ammo(SPMSL_EXPLODING))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_REAPING_AMMUNITION:
- if (!brand_ammo(SPMSL_REAPING))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
- case SPELL_RETURNING_AMMUNITION:
- if (!brand_ammo(SPMSL_RETURNING))
- canned_msg(MSG_SPELL_FIZZLES);
- break;
-
// Transformations.
case SPELL_BLADE_HANDS:
if (!transform(powc, TRAN_BLADE_HANDS))
diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h
index 9de226af2e..edb31c2151 100644
--- a/crawl-ref/source/spl-data.h
+++ b/crawl-ref/source/spl-data.h
@@ -1287,23 +1287,10 @@
},
{
- SPELL_POISON_AMMUNITION, "Poison Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_POISON,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 4,
- 0,
- -1, -1,
- 0,
- NULL,
- false,
- true
-},
-
-{
SPELL_POISON_WEAPON, "Poison Weapon",
SPTYP_ENCHANTMENT | SPTYP_POISON,
SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 2,
+ 3,
0,
-1, -1,
0,
@@ -2499,97 +2486,6 @@
},
{
- SPELL_FLAME_AMMUNITION, "Flame Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_FIRE,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 3,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
- SPELL_FROST_AMMUNITION, "Frost Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_ICE,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 3,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
- SPELL_SHOCKING_AMMUNITION, "Shocking Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_AIR,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 5,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
- SPELL_EXPLODING_AMMUNITION, "Exploding Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_FIRE | SPTYP_AIR,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 5,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
- SPELL_WARP_AMMUNITION, "Warp Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_TRANSLOCATION,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 5,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
- SPELL_REAPING_AMMUNITION, "Reaping Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_NECROMANCY,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 7,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
- SPELL_RETURNING_AMMUNITION, "Returning Ammunition",
- SPTYP_ENCHANTMENT | SPTYP_TRANSLOCATION,
- SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 3,
- 0,
- -1,-1,
- 0,
- NULL,
- false,
- true
-},
-
-{
SPELL_FAKE_MARA_SUMMON, "Mara Summon",
SPTYP_SUMMONING,
SPFLAG_MONSTER,
diff --git a/crawl-ref/source/tags.h b/crawl-ref/source/tags.h
index 915c6d1f80..9660a40b54 100644
--- a/crawl-ref/source/tags.h
+++ b/crawl-ref/source/tags.h
@@ -40,7 +40,7 @@ enum tag_file_type // file types supported by tag system
enum tag_major_version
{
TAG_MAJOR_START = 5,
- TAG_MAJOR_VERSION = 13
+ TAG_MAJOR_VERSION = 14
};
// Minor version will be reset to zero when major version changes.