summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-27 16:15:37 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-27 16:15:37 +0000
commitd03ad7b05a931a1bd0bc69eb809d30fca8177cb6 (patch)
tree8d5d564a84a8d8cc9beb29dcd2f6220a318f268b /crawl-ref
parentd360a8a9373ac6d5760d1869617685d553c7b9fb (diff)
downloadcrawl-ref-d03ad7b05a931a1bd0bc69eb809d30fca8177cb6.tar.gz
crawl-ref-d03ad7b05a931a1bd0bc69eb809d30fca8177cb6.zip
Add a new command for firing without quivering on 'F'.
Use puff of fire/ice tiles for ammo of flame/ice being fired. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6169 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/docs/034_changes.txt1
-rw-r--r--crawl-ref/docs/crawl_manual.txt34
-rw-r--r--crawl-ref/source/acr.cc6
-rw-r--r--crawl-ref/source/command.cc1
-rw-r--r--crawl-ref/source/enum.h2
-rw-r--r--crawl-ref/source/item_use.cc133
-rw-r--r--crawl-ref/source/item_use.h5
-rw-r--r--crawl-ref/source/newgame.cc184
-rw-r--r--crawl-ref/source/quiver.cc26
-rw-r--r--crawl-ref/source/tile1.cc32
-rw-r--r--crawl-ref/source/tiles.h2
11 files changed, 253 insertions, 173 deletions
diff --git a/crawl-ref/docs/034_changes.txt b/crawl-ref/docs/034_changes.txt
index 04e26a2542..0859dc0670 100644
--- a/crawl-ref/docs/034_changes.txt
+++ b/crawl-ref/docs/034_changes.txt
@@ -15,6 +15,7 @@ them:
c chop up (was D, dissect)
E show experience (was C)
v evoke (was E)
+ F fire/throw (was t)
t tell/yell (was !)
Ctrl-V Tiles settings (was Ctrl-Q)
Ctrl-Q quit (was Q)
diff --git a/crawl-ref/docs/crawl_manual.txt b/crawl-ref/docs/crawl_manual.txt
index f32e9f6928..00aba67a5d 100644
--- a/crawl-ref/docs/crawl_manual.txt
+++ b/crawl-ref/docs/crawl_manual.txt
@@ -513,10 +513,10 @@ you will find that discretion is often the better part of valour.
There are several other less dangerous methods you can use to kill
monsters. Hunters and similarly oriented characters will prefer ranged
-combat to mindless bashing. When wielding some launcher, the 'f' command
-will fire appropriate missiles. See the section on Targeting in the
-Items Chapter for more on this. Likewise, many magicians will prefer to
-use spells from a safe distance. They can use the 'Z' command to cast
+combat to mindless bashing. When wielding some launcher, the 'f' and 'F'
+commands will fire appropriate missiles. See the section on Targeting in
+the Items Chapter for more on this. Likewise, many magicians will prefer
+to use spells from a safe distance. They can use the 'z' command to cast
spells previously memorised. Again, see the Targeting section.
Some monsters can be friendly; friendly monsters will follow you around
@@ -677,9 +677,6 @@ using 'f' to fire).
( Missiles
----------
-(The following section assumes the option setting
-fire_quiver_best = false, which is the default.)
-
If you would rather pick off monsters from a safe distance, you will
need missiles for your sling, bow, or other appropriate launcher.
Several kinds of missiles, such as javelins, are effective when simply
@@ -689,9 +686,12 @@ affects both accuracy and damage.
The 'f' command fires or throws a missile, typically chosen from lots
suitable for your weapon. The default lot (your "quiver") is displayed
-on the main screen beneath your wielded weapon. It is either the
-previous item you fired, or the "best" available lot, depending on an
-option setting.
+on the main screen beneath your wielded weapon. The quivered item
+will always be what Crawl thinks is most likely to be what you want.
+Thus it will either be an item you previously chose and fired (with
+'f') or directly quivered (with 'Q'), or the item in your inventory
+that ranks highest in fire_order - if there are several of similar
+order the one with the lowest inventory slot is chosen.
See Appendix 6 (Inscriptions) for inscriptions which let you fine-tune
the list of items to choose from. See also the "Missiles" section of
@@ -700,12 +700,12 @@ crawl_options.txt.
The firing interface also allows you to manually select an item to
throw with 'i'; but it may not be very effective if you lack the
correct launcher. At times it is sensible to throw weapons like
-spears, daggers, or hand axes. If you manually select a piece of ammo
-this way, it is assumed to be a one-time use, and your quiver will not
-be changed.
+spears, daggers, or hand axes.
Use the '(' or 'Q' command if you want to change your quiver without
firing.
+If you'd like to throw something without inserting it into the quiver
+use 'F' instead. Note that non-weapon items will never be quivered.
The interface for shooting or throwing things is also used for zapping
wands and casting certain spells, and is described in detail in
@@ -2309,8 +2309,10 @@ Item interaction (inventory):
by pressing their slot key in the inventory.
f Fire quivered missile. If some monster is in
sight, either the last target or the nearest
- monster will be automatically target. Pressing
- f again shoots.
+ monster will be automatically targeted.
+ Pressing f again shoots.
+ F Directly choose an item and fire. Contrary to
+ fi this does not change the quiver.
( Cycle quiver to next suitable missile.
Q Quiver item from a menu.
q Quaff a potion.
@@ -2319,7 +2321,7 @@ Item interaction (inventory):
Z Zap a wand.
r Read a scroll or book.
M Memorise a spell from a book.
- w Wield an item ( - for none).
+ w Wield an item ( - for none).
' Wield item a, or switch to b.
v Evoke power of wielded item.
W Wear armour. Also allows to take off armour.
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index 33903be17a..e90e785694 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -2086,6 +2086,10 @@ void process_command( command_type cmd )
choose_item_for_quiver();
break;
+ case CMD_THROW_ITEM_NO_QUIVER:
+ throw_item_no_quiver();
+ break;
+
case CMD_WEAR_ARMOUR:
wear_armour();
break;
@@ -3460,7 +3464,7 @@ static command_type _keycode_to_command( keycode_type key )
case 'C': return CMD_CLOSE_DOOR;
case 'D': return CMD_NO_CMD;
case 'E': return CMD_EXPERIENCE_CHECK;
- case 'F': return CMD_NO_CMD;
+ case 'F': return CMD_THROW_ITEM_NO_QUIVER;
case 'G': return CMD_INTERLEVEL_TRAVEL;
case 'I': return CMD_DISPLAY_SPELLS;
case 'M': return CMD_MEMORISE_SPELL;
diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc
index 2e42c2b076..3b4d84c5c0 100644
--- a/crawl-ref/source/command.cc
+++ b/crawl-ref/source/command.cc
@@ -1828,6 +1828,7 @@ static void _add_formatted_keyhelp(column_composer &cols)
"<w>]</w> : show inventory of equipped items\n"
"<w>{</w> : inscribe item\n"
"<w>f</w> : Fire or throw an item\n"
+ "<w>F</w> : Fire or throw an item without quivering it\n"
"<w>(</w> : cycle current ammunition\n"
"<w>e</w> : Eat food (but tries floor first)\n"
"<w>q</w> : Quaff a potion\n"
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 9b1f3023b0..ba418d6027 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -447,9 +447,9 @@ enum command_type
CMD_EVOKE,
CMD_WIELD_WEAPON,
CMD_WEAPON_SWAP,
- CMD_THROW, // unused now
CMD_FIRE,
CMD_QUIVER_ITEM,
+ CMD_THROW_ITEM_NO_QUIVER,
CMD_WEAR_ARMOUR,
CMD_REMOVE_ARMOUR,
CMD_WEAR_JEWELLERY,
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 573a30ab62..08825a71fa 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -1472,21 +1472,7 @@ static bool _fire_choose_item_and_target(int& slot, dist& target,
return (false);
}
- // Currently no difference between f() and fi.
you.m_quiver->on_item_fired(you.inv[beh.m_slot], beh.chosen_ammo);
-/*
- // If ammo was chosen via 'fi', it's not supposed to get quivered.
- // Otherwise, if the user chose different ammo, quiver it.
- // Same for items selected in tile mode.
- if (was_chosen || !beh.selected_from_inventory)
- {
- you.m_quiver->on_item_fired(you.inv[beh.m_slot], beh.chosen_ammo);
- }
- else
- {
- you.m_quiver->on_item_fired_fi(you.inv[beh.m_slot]);
- }
-*/
you.redraw_quiver = true;
slot = beh.m_slot;
@@ -1589,7 +1575,6 @@ int get_ammo_to_shoot(int item, dist &target, bool teleport)
return (item);
}
-
// If item == -1, prompt the user.
// If item passed, it will be put into the quiver.
void fire_thing(int item)
@@ -1599,9 +1584,6 @@ void fire_thing(int item)
if (item == -1)
return;
- if (Options.tutorial_left)
- Options.tut_throw_counter++;
-
if (check_warning_inscriptions(you.inv[item], OPER_FIRE))
{
bolt beam;
@@ -1609,6 +1591,42 @@ void fire_thing(int item)
}
}
+// Basically does what throwing used to do: throw an item without changing
+// the quiver.
+void throw_item_no_quiver()
+{
+ if (_fire_warn_if_impossible())
+ {
+ flush_input_buffer( FLUSH_ON_FAILURE );
+ return;
+ }
+
+ if (inv_count() < 1)
+ {
+ canned_msg(MSG_NOTHING_CARRIED);
+ return;
+ }
+
+ std::string warn;
+ int slot = _fire_prompt_for_item(warn);
+
+ if (slot == -1)
+ {
+ canned_msg(MSG_OK);
+ return;
+ }
+
+ if (!_fire_validate_item(slot, warn))
+ {
+ mpr(warn.c_str());
+ return;
+ }
+
+ // Okay, item is valid.
+ bolt beam;
+ throw_it( beam, slot );
+}
+
// Returns delay multiplier numerator (denominator should be 100) for the
// launcher with the currently equipped shield.
int launcher_shield_slowdown(const item_def &launcher, const item_def *shield)
@@ -2216,42 +2234,66 @@ bool throw_it(bolt &pbolt, int throw_2, bool teleport, int acc_bonus,
}
// Note that bow_brand is known since the bow is equipped.
- if ((bow_brand == SPWPN_FLAME || ammo_brand == SPMSL_FLAME)
- && ammo_brand != SPMSL_ICE && bow_brand != SPWPN_FROST)
+ if (bow_brand == SPWPN_FLAME || ammo_brand == SPMSL_FLAME)
{
- // [dshaligram] Branded arrows are much stronger.
- dice_mult = (dice_mult * 150) / 100;
+ if (ammo_brand != SPMSL_ICE && bow_brand != SPWPN_FROST)
+ {
+#ifdef USE_TILE
+ // Mark brand for tile output.
+ if (ammo_brand != SPMSL_FLAME)
+ set_item_ego_type( item, OBJ_MISSILES, SPMSL_FLAME );
+#endif
+
+ // [dshaligram] Branded arrows are much stronger.
+ dice_mult = (dice_mult * 150) / 100;
- pbolt.flavour = BEAM_FIRE;
- pbolt.name = "bolt of ";
+ pbolt.flavour = BEAM_FIRE;
+ pbolt.name = "bolt of ";
- if (poisoned)
- pbolt.name += "poison ";
+ if (poisoned)
+ pbolt.name += "poison ";
- pbolt.name += "flame";
- pbolt.colour = RED;
- pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
- pbolt.thrower = KILL_YOU_MISSILE;
- pbolt.aux_source.clear();
+ pbolt.name += "flame";
+ pbolt.colour = RED;
+ pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
+ pbolt.thrower = KILL_YOU_MISSILE;
+ pbolt.aux_source.clear();
+ }
+#ifdef USE_TILE
+ else
+ set_item_ego_type( item, OBJ_MISSILES, SPMSL_NORMAL );
+#endif
}
- if ((bow_brand == SPWPN_FROST || ammo_brand == SPMSL_ICE)
- && ammo_brand != SPMSL_FLAME && bow_brand != SPWPN_FLAME)
+ if (bow_brand == SPWPN_FROST || ammo_brand == SPMSL_ICE)
{
- // [dshaligram] Branded arrows are much stronger.
- dice_mult = (dice_mult * 150) / 100;
+ if (ammo_brand != SPMSL_FLAME && bow_brand != SPWPN_FLAME)
+ {
+#ifdef USE_TILE
+ // Mark brand for tile output.
+ if (ammo_brand != SPMSL_ICE)
+ set_item_ego_type( item, OBJ_MISSILES, SPMSL_ICE );
+#endif
- pbolt.flavour = BEAM_COLD;
- pbolt.name = "bolt of ";
+ // [dshaligram] Branded arrows are much stronger.
+ dice_mult = (dice_mult * 150) / 100;
- if (poisoned)
- pbolt.name += "poison ";
+ pbolt.flavour = BEAM_COLD;
+ pbolt.name = "bolt of ";
- pbolt.name += "frost";
- pbolt.colour = WHITE;
- pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
- pbolt.thrower = KILL_YOU_MISSILE;
- pbolt.aux_source.clear();
+ if (poisoned)
+ pbolt.name += "poison ";
+
+ pbolt.name += "frost";
+ pbolt.colour = WHITE;
+ pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
+ pbolt.thrower = KILL_YOU_MISSILE;
+ pbolt.aux_source.clear();
+ }
+#ifdef USE_TILE
+ else
+ set_item_ego_type( item, OBJ_MISSILES, SPMSL_NORMAL );
+#endif
}
// The chief advantage here is the extra damage this does
@@ -2549,6 +2591,9 @@ bool throw_it(bolt &pbolt, int throw_2, bool teleport, int acc_bonus,
}
else
{
+ if (Options.tutorial_left)
+ Options.tut_throw_counter++;
+
// Dropping item copy, since the launched item might be different.
fire_beam(pbolt, &item, !did_return);
diff --git a/crawl-ref/source/item_use.h b/crawl-ref/source/item_use.h
index ed6aece344..4477979152 100644
--- a/crawl-ref/source/item_use.h
+++ b/crawl-ref/source/item_use.h
@@ -107,6 +107,7 @@ bool remove_ring(int slot = -1, bool announce = false);
int get_next_fire_item(int current, int offset);
int get_ammo_to_shoot(int item, dist &target, bool teleport = false);
void fire_thing(int item = -1);
+void throw_item_no_quiver(void);
// last updated 12may2000 {dlb}
/* ***********************************************************************
@@ -162,8 +163,8 @@ bool puton_item(int slot, bool prompt_finger = true);
bool enchant_weapon( enchant_stat_type which_stat, bool quiet, item_def &wpn );
bool enchant_armour( int &ac_change, bool quiet, item_def &arm );
-bool throw_it(bolt &pbolt, int throw_2, bool teleport=false, int acc_bonus=0,
- dist *target = NULL);
+bool throw_it(bolt &pbolt, int throw_2, bool teleport = false,
+ int acc_bonus = 0, dist *target = NULL);
bool thrown_object_destroyed( item_def *item, int x, int y, bool returning );
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index e941a984c3..f5b6b9e661 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -1902,100 +1902,114 @@ static bool _is_good_combination( species_type spc, job_type cls, bool good)
return (restrict != CC_BANNED);
}
-static bool _choose_book( item_def& book, int firstbook, int numbooks )
+// book 0 = fire (CONJ_I, MINOR_MAGIC_I), 1 = ice (CONJ_II, MINOR_MAGIC_II),
+// 2 = summoning (MINOR_MAGIC_III)
+static char_choice_restriction _book_restriction(int booktype,
+ bool summon_too = false)
{
- int keyin = 0;
- clrscr();
- book.base_type = OBJ_BOOKS;
- book.quantity = 1;
- book.plus = 0;
- book.special = 1;
-
- char_choice_restriction book_restrictions[3];
-
- // Fire
- switch (you.species)
+ switch (booktype)
{
- case SP_OGRE:
- // Ogres are, of course, really bad at Fire and Ice, so it's usually
- // restricted, but if the summoning book comes into play unrestrict
- // those two because ogres are even *worse* at Summonings.
- if (numbooks < 3)
- book_restrictions[0] = CC_RESTRICTED;
- // else fall-through
- case SP_HUMAN:
- case SP_HIGH_ELF:
- case SP_GREY_ELF:
- case SP_DEEP_ELF:
- case SP_SLUDGE_ELF:
- case SP_MOUNTAIN_DWARF:
- case SP_HILL_ORC:
- case SP_HALFLING:
- case SP_GNOME:
- case SP_KOBOLD:
- case SP_NAGA:
- case SP_OGRE_MAGE:
- case SP_KENKU:
- case SP_DEMONSPAWN:
- book_restrictions[0] = CC_UNRESTRICTED;
+ case 0: // Fire
+ switch (you.species)
+ {
+ case SP_OGRE:
+ // Ogres are, of course, really bad at Fire and Ice, so it's usually
+ // restricted, but if the summoning book comes into play unrestrict
+ // those two because ogres are even *worse* at Summonings.
+ if (!summon_too)
+ return (CC_RESTRICTED);
+ // else fall-through
+ case SP_HUMAN:
+ case SP_HIGH_ELF:
+ case SP_GREY_ELF:
+ case SP_DEEP_ELF:
+ case SP_SLUDGE_ELF:
+ case SP_MOUNTAIN_DWARF:
+ case SP_HILL_ORC:
+ case SP_HALFLING:
+ case SP_GNOME:
+ case SP_KOBOLD:
+ case SP_NAGA:
+ case SP_OGRE_MAGE:
+ case SP_KENKU:
+ case SP_DEMONSPAWN:
+ return (CC_UNRESTRICTED);
+
+ default:
+ return (CC_RESTRICTED);
+ }
break;
- default:
- book_restrictions[0] = CC_RESTRICTED;
- }
+ case 1: // Ice
+ switch (you.species)
+ {
+ case SP_OGRE_MAGE:
+ if (!summon_too)
+ return (CC_RESTRICTED);
+ // else fall-through
+ case SP_HUMAN:
+ case SP_HIGH_ELF:
+ case SP_GREY_ELF:
+ case SP_DEEP_ELF:
+ case SP_SLUDGE_ELF:
+ case SP_HILL_ORC:
+ case SP_MERFOLK:
+ case SP_HALFLING:
+ case SP_GNOME:
+ case SP_KOBOLD:
+ case SP_NAGA:
+ case SP_OGRE:
+ case SP_GHOUL:
+ case SP_VAMPIRE:
+ return (CC_UNRESTRICTED);
- // Ice
- switch (you.species)
- {
- case SP_OGRE_MAGE:
- if (numbooks < 3)
- book_restrictions[0] = CC_RESTRICTED;
- // else fall-through
- case SP_HUMAN:
- case SP_HIGH_ELF:
- case SP_GREY_ELF:
- case SP_DEEP_ELF:
- case SP_SLUDGE_ELF:
- case SP_HILL_ORC:
- case SP_MERFOLK:
- case SP_HALFLING:
- case SP_GNOME:
- case SP_KOBOLD:
- case SP_NAGA:
- case SP_OGRE:
- case SP_GHOUL:
- case SP_VAMPIRE:
- book_restrictions[1] = CC_UNRESTRICTED;
+ default:
+ return (CC_RESTRICTED);
+ }
break;
- default:
- book_restrictions[1] = CC_RESTRICTED;
+ case 2: // Summoning
+ switch (you.species)
+ {
+ case SP_HUMAN:
+ case SP_GREY_ELF:
+ case SP_DEEP_ELF:
+ case SP_SLUDGE_ELF:
+ case SP_MERFOLK:
+ case SP_GNOME:
+ case SP_KOBOLD:
+ case SP_NAGA:
+ case SP_OGRE_MAGE:
+ case SP_KENKU:
+ case SP_DEMONSPAWN:
+ case SP_VAMPIRE:
+ return (CC_UNRESTRICTED);
+ break;
+
+ default:
+ if (player_genus(GENPC_DRACONIAN))
+ return (CC_UNRESTRICTED);
+ else
+ return (CC_RESTRICTED);
+ }
}
+ return (CC_RESTRICTED);
+}
- // Summoning
- switch (you.species)
- {
- case SP_HUMAN:
- case SP_GREY_ELF:
- case SP_DEEP_ELF:
- case SP_SLUDGE_ELF:
- case SP_MERFOLK:
- case SP_GNOME:
- case SP_KOBOLD:
- case SP_NAGA:
- case SP_OGRE_MAGE:
- case SP_KENKU:
- case SP_DEMONSPAWN:
- case SP_VAMPIRE:
- book_restrictions[2] = CC_UNRESTRICTED;
- break;
- default:
- if (player_genus(GENPC_DRACONIAN))
- book_restrictions[2] = CC_UNRESTRICTED;
- else
- book_restrictions[2] = CC_RESTRICTED;
- }
+static bool _choose_book( item_def& book, int firstbook, int numbooks )
+{
+ int keyin = 0;
+ clrscr();
+ book.base_type = OBJ_BOOKS;
+ book.quantity = 1;
+ book.plus = 0;
+ book.special = 1;
+
+ const bool summons_too = (numbooks == 3);
+ char_choice_restriction book_restrictions[3];
+ for (int i = 0; i < numbooks; i++)
+ book_restrictions[i] = _book_restriction(i, summons_too);
// Using the fact that CONJ_I and MINOR_MAGIC_I are both
// fire books, CONJ_II and MINOR_MAGIC_II are both ice books.
@@ -2083,7 +2097,7 @@ static bool _choose_book( item_def& book, int firstbook, int numbooks )
else
ng_book = keyin - 'a' + 1;
- if ( Options.random_pick || keyin == '*' )
+ if (Options.random_pick || keyin == '*')
keyin = random2(numbooks) + 'a';
book.sub_type = firstbook + keyin - 'a';
diff --git a/crawl-ref/source/quiver.cc b/crawl-ref/source/quiver.cc
index 521923133e..5f764b5eb5 100644
--- a/crawl-ref/source/quiver.cc
+++ b/crawl-ref/source/quiver.cc
@@ -159,13 +159,13 @@ void choose_item_for_quiver()
ammo_t t = _get_weapon_ammo_type(you.weapon());
you.m_quiver->empty_quiver(t);
- mprf("Emptying quiver for %s.",
+ mprf("Reset %s quiver to default.",
t == AMMO_THROW ? "throwing" :
- t == AMMO_BLOWGUN ? "blowguns" :
- t == AMMO_SLING ? "slings" :
- t == AMMO_BOW ? "bows" :
- t == AMMO_CROSSBOW ? "crossbows"
- : "hand crossbows");
+ t == AMMO_BLOWGUN ? "blowgun" :
+ t == AMMO_SLING ? "sling" :
+ t == AMMO_BOW ? "bow" :
+ t == AMMO_CROSSBOW ? "crossbow"
+ : "hand crossbow");
return;
}
else if (slot == you.equip[EQ_WEAPON])
@@ -194,13 +194,13 @@ void choose_item_for_quiver()
t = _get_weapon_ammo_type(weapon);
you.m_quiver->set_quiver(you.inv[slot], t);
- mprf("Quivering %s %s.", you.inv[slot].name(DESC_INVENTORY).c_str(),
- t == AMMO_THROW ? "as throwing weapon" :
- t == AMMO_BLOWGUN ? "for blowguns" :
- t == AMMO_SLING ? "for slings" :
- t == AMMO_BOW ? "for bows" :
- t == AMMO_CROSSBOW ? "for crossbows"
- : "for hand crossbows");
+ mprf("Quivering %s for %s.", you.inv[slot].name(DESC_INVENTORY).c_str(),
+ t == AMMO_THROW ? "throwing" :
+ t == AMMO_BLOWGUN ? "blowguns" :
+ t == AMMO_SLING ? "slings" :
+ t == AMMO_BOW ? "bows" :
+ t == AMMO_CROSSBOW ? "crossbows"
+ : "hand crossbows");
}
// Notification that item was fired with 'f'.
diff --git a/crawl-ref/source/tile1.cc b/crawl-ref/source/tile1.cc
index ed2c3bf65a..d088b05d2e 100644
--- a/crawl-ref/source/tile1.cc
+++ b/crawl-ref/source/tile1.cc
@@ -1925,8 +1925,18 @@ int tileidx_item_throw(const item_def &item, int dx, int dy)
int ch = -1;
int dir = _tile_bolt_dir(dx, dy);
+ switch (get_ammo_brand(item))
+ {
+ case SPMSL_FLAME:
+ return (tileidx_zap(RED));
+ case SPMSL_ICE:
+ return (tileidx_zap(WHITE));
+ default:
+ break;
+ }
+
// Thrown items with multiple directions
- switch(item.sub_type)
+ switch (item.sub_type)
{
case MI_ARROW:
ch = TILE_MI_ARROW0;
@@ -1952,7 +1962,7 @@ int tileidx_item_throw(const item_def &item, int dx, int dy)
return ch + dir;
// Thrown items with a single direction
- switch(item.sub_type)
+ switch (item.sub_type)
{
case MI_STONE:
ch = TILE_MI_STONE0;
@@ -2333,12 +2343,14 @@ int tileidx_bolt(const bolt &bolt)
return tileidx_zap(col);
}
-int tileidx_zap(int color)
+int tileidx_zap(int colour)
{
- int col = color;
- if (col > 8) col -= 8;
- if (col < 1) col = 7;
- return TILE_SYM_BOLT_OFS -1 + col;
+ int col = colour;
+ if (col > 8)
+ col -= 8;
+ if (col < 1)
+ col = 7;
+ return (TILE_SYM_BOLT_OFS - 1 + col);
}
// Convert normal tile to 3D tile if it exists
@@ -4472,9 +4484,9 @@ static void _finish_inven_data(int n, int *tiles, int *num, int *idx,
if (q == 1)
q = -1;
- if ( type == OBJ_WANDS
- && ((itm->flags & ISFLAG_KNOW_PLUSES )
- || itm->plus2 == ZAPCOUNT_EMPTY) )
+ if (type == OBJ_WANDS
+ && ((itm->flags & ISFLAG_KNOW_PLUSES)
+ || itm->plus2 == ZAPCOUNT_EMPTY))
{
q = itm->plus;
}
diff --git a/crawl-ref/source/tiles.h b/crawl-ref/source/tiles.h
index 1ef45cff62..f563cec8d4 100644
--- a/crawl-ref/source/tiles.h
+++ b/crawl-ref/source/tiles.h
@@ -20,7 +20,7 @@ int tileidx_unseen(int ch, const coord_def& gc);
int tileidx_item(const item_def &item);
int tileidx_item_throw(const item_def &item, int dx, int dy);
int tileidx_bolt(const bolt &bolt);
-int tileidx_zap(int color);
+int tileidx_zap(int colour);
int tile_idx_unseen_terrain(int x, int y, int what);
int tile_unseen_flag(const coord_def& gc);