summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Feinberg <pleasingfung@gmail.com>2014-07-13 00:10:30 -0700
committerNicholas Feinberg <pleasingfung@gmail.com>2014-07-13 00:33:57 -0700
commitcfb61905c56eeeb599c04d43f7be9efdaad15e89 (patch)
tree92033bdb46857585911d6f80228a3583455baaba
parent9b6b733bccd0de2af35eb6c28e94e4708a92004d (diff)
downloadcrawl-ref-cfb61905c56eeeb599c04d43f7be9efdaad15e89.tar.gz
crawl-ref-cfb61905c56eeeb599c04d43f7be9efdaad15e89.zip
Rebalance crossbows
Again as a result of the ranged weapons rebalance, crossbows needed to change. The analogy here is long blades' to bows' m&f; better return on skill investment & a higher power cap, but rarer. Hand crossbows are added as a starting type, "something like an armour-piercing dagger"; crossbows are upgraded to arbalests (a little worse than a glaive), and a new rare triple crossbow type is added on the top end (a little worse than a bardiche, though with a lower skill cost.) Please note that the triple crossbow historically existed & is extremely verisimilitudinous. Hellfire is now an arbalest, and Sniper is now a triple crossbow (well, a "heavy crossbow", since it has mindelay of 27 instead of 22, and since I didn't want to have to change the sprite). All crossbows have a mindelay of at least 1.0; this is an attempt to differentiate them. Possibly something more ambitious will be attempted in 1.6, but this is a first step.
-rw-r--r--crawl-ref/source/art-data.txt10
-rw-r--r--crawl-ref/source/artefact.cc2
-rw-r--r--crawl-ref/source/dat/des/branches/depths_encompass.des2
-rw-r--r--crawl-ref/source/dat/des/branches/orc.des10
-rw-r--r--crawl-ref/source/dat/des/branches/vaults.des4
-rw-r--r--crawl-ref/source/dat/des/branches/vaults_rooms_standard.des2
-rw-r--r--crawl-ref/source/dat/des/branches/zot.des2
-rw-r--r--crawl-ref/source/dat/des/portals/bailey.des6
-rw-r--r--crawl-ref/source/dat/des/portals/icecave.des2
-rw-r--r--crawl-ref/source/dat/des/portals/trove.des2
-rw-r--r--crawl-ref/source/dat/des/portals/volcano.des4
-rw-r--r--crawl-ref/source/dat/des/sprint/arena_sprint.des3
-rw-r--r--crawl-ref/source/dat/des/sprint/linesprint.des6
-rw-r--r--crawl-ref/source/dat/des/sprint/pitsprint.des6
-rw-r--r--crawl-ref/source/dat/des/sprint/sprint_mu.des4
-rw-r--r--crawl-ref/source/dat/des/sprint/zigsprint.des4
-rw-r--r--crawl-ref/source/dat/des/variable/arcadia.des2
-rw-r--r--crawl-ref/source/dat/des/variable/float.des8
-rw-r--r--crawl-ref/source/dat/descript/items.txt21
-rw-r--r--crawl-ref/source/dat/descript/quotes.txt42
-rw-r--r--crawl-ref/source/dat/descript/unrand.txt13
-rw-r--r--crawl-ref/source/fight.cc6
-rw-r--r--crawl-ref/source/godblessing.cc2
-rw-r--r--crawl-ref/source/initfile.cc4
-rw-r--r--crawl-ref/source/itemprop-enum.h12
-rw-r--r--crawl-ref/source/itemprop.cc19
-rw-r--r--crawl-ref/source/makeitem.cc4
-rw-r--r--crawl-ref/source/mon-gear.cc21
-rw-r--r--crawl-ref/source/newgame.cc2
-rw-r--r--crawl-ref/source/ng-restr.cc2
-rw-r--r--crawl-ref/source/ng-setup.cc5
-rw-r--r--crawl-ref/source/ng-wanderer.cc6
-rw-r--r--crawl-ref/source/quiver.cc4
-rw-r--r--crawl-ref/source/rltiles/dc-item.txt6
-rw-r--r--crawl-ref/source/rltiles/dc-player.txt8
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ranged/arbalest1.png (renamed from crawl-ref/source/rltiles/item/weapon/ranged/crossbow1.png)bin1220 -> 1220 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ranged/arbalest2.png (renamed from crawl-ref/source/rltiles/item/weapon/ranged/crossbow2.png)bin1194 -> 1194 bytes
-rw-r--r--crawl-ref/source/rltiles/item/weapon/ranged/arbalest3.png (renamed from crawl-ref/source/rltiles/item/weapon/ranged/crossbow3.png)bin1202 -> 1202 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/arbalest.png (renamed from crawl-ref/source/rltiles/player/hand1/crossbow.png)bin295 -> 295 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/arbalest_four.png (renamed from crawl-ref/source/rltiles/player/hand1/crossbow_four.png)bin182 -> 182 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/arbalest_three.png (renamed from crawl-ref/source/rltiles/player/hand1/crossbow_three.png)bin189 -> 189 bytes
-rw-r--r--crawl-ref/source/rltiles/player/hand1/arbalest_two.png (renamed from crawl-ref/source/rltiles/player/hand1/crossbow_two.png)bin179 -> 179 bytes
-rw-r--r--crawl-ref/source/shopping.cc7
-rw-r--r--crawl-ref/source/throw.cc10
-rw-r--r--crawl-ref/source/tilemcache.cc2
-rw-r--r--crawl-ref/source/tilepick-p.cc4
-rw-r--r--crawl-ref/source/tilepick.cc4
47 files changed, 178 insertions, 105 deletions
diff --git a/crawl-ref/source/art-data.txt b/crawl-ref/source/art-data.txt
index e8d198a312..7f193b1f9f 100644
--- a/crawl-ref/source/art-data.txt
+++ b/crawl-ref/source/art-data.txt
@@ -444,9 +444,9 @@ ANGRY: 3
STEALTH: -1
BOOL: life
-NAME: crossbow "Hellfire"
+NAME: arbalest "Hellfire"
INSCRIP: hellfire,
-OBJ: OBJ_WEAPONS/WPN_CROSSBOW
+OBJ: OBJ_WEAPONS/WPN_ARBALEST
PLUS: +6
COLOUR: ETC_FIRE
TILE: urand_hellfire
@@ -521,9 +521,9 @@ MAGIC: 2
AC: 5
BOOL: elec
-NAME: crossbow "Sniper"
-OBJ: OBJ_WEAPONS/WPN_CROSSBOW
-PLUS: +15
+NAME: heavy crossbow "Sniper"
+OBJ: OBJ_WEAPONS/WPN_TRIPLE_CROSSBOW
+PLUS: +10
COLOUR: ETC_DARK
TILE: urand_sniper
TILE_EQ: sniper
diff --git a/crawl-ref/source/artefact.cc b/crawl-ref/source/artefact.cc
index 5e088e6e16..4d2336e0ee 100644
--- a/crawl-ref/source/artefact.cc
+++ b/crawl-ref/source/artefact.cc
@@ -731,7 +731,7 @@ static void _get_randart_properties(const item_def &item,
if (atype == WPN_BLOWGUN)
proprt[ARTP_BRAND] = coinflip() ? SPWPN_SPEED : SPWPN_EVASION;
- else if (atype == WPN_CROSSBOW)
+ else if (range_skill(item) == SK_CROSSBOWS)
{
// Penetration and electrocution are only allowed on
// crossbows. This may change in future.
diff --git a/crawl-ref/source/dat/des/branches/depths_encompass.des b/crawl-ref/source/dat/des/branches/depths_encompass.des
index 0cf834d5bb..b8fb1ee327 100644
--- a/crawl-ref/source/dat/des/branches/depths_encompass.des
+++ b/crawl-ref/source/dat/des/branches/depths_encompass.des
@@ -670,7 +670,7 @@ MONS: very ugly thing w:15 / shapeshifter / unseen horror w:15 / \
dire flail w:5 ego:flaming | dire flail w:5 ego:freezing
MONS: frost giant w:5 / fire giant w:5 / naga mage w:15 / hell knight w:5 / \
salamander mystic w:5 / spriggan air mage / deep troll earth mage / \
- yaktaur captain ; crossbow ego:flaming | crossbow ego:freezing . bolt / \
+ yaktaur captain ; arbalest ego:flaming | arbalest ego:freezing . bolt / \
rakshasa w:5 ; robe . wand of fire | wand of cold . \
glaive w:2 ego:flaming | glaive w:2 ego:freezing
MONS: lorocyproca w:5 / fire dragon perm_ench:shapeshifter w:12 / fire dragon w:3 / \
diff --git a/crawl-ref/source/dat/des/branches/orc.des b/crawl-ref/source/dat/des/branches/orc.des
index 95a41bf811..d0b552cc39 100644
--- a/crawl-ref/source/dat/des/branches/orc.des
+++ b/crawl-ref/source/dat/des/branches/orc.des
@@ -850,7 +850,7 @@ TAGS: no_item_gen no_monster_gen
DEPTH: Orc:3-
KMONS: 1 = orc high priest / orc sorcerer
KMONS: 2 = orc knight
-KMONS: 3 = orc warrior / orc ; crossbow . bolt . spear | hand axe | mace
+KMONS: 3 = orc warrior / orc ; arbalest . bolt . spear | hand axe | mace
KMONS: 4 = orc priest / orc / nothing
KMONS: 5 = orc wizard / nothing
KMONS: 6 = ogre / two-headed ogre / troll / deep troll / ogre mage / nothing
@@ -1401,10 +1401,10 @@ ENDMAP
NAME: st_orc_rangers
TAGS: no_rotate no_item_gen no_monster_gen no_pool_fixup
PLACE: Orc:$
-MONS: orc warrior w:1 ; crossbow . bolt . halberd | war axe | morningstar /\
- orc w:10 ; crossbow . bolt . trident | hand axe | mace
-MONS: orc warrior ; crossbow . bolt . glaive | broad axe | battleaxe | great mace
-MONS: orc knight ; crossbow . bolt . glaive | broad axe | great mace
+MONS: orc warrior w:1 ; arbalest . bolt . halberd | war axe | morningstar /\
+ orc w:10 ; arbalest . bolt . trident | hand axe | mace
+MONS: orc warrior ; arbalest . bolt . glaive | broad axe | battleaxe | great mace
+MONS: orc knight ; arbalest . bolt . glaive | broad axe | great mace
MONS: orc warrior
MONS: centaur w:20 / centaur warrior w:1 / nothing w:21
SUBST: 3 = 23
diff --git a/crawl-ref/source/dat/des/branches/vaults.des b/crawl-ref/source/dat/des/branches/vaults.des
index 6473217fca..ac365eb848 100644
--- a/crawl-ref/source/dat/des/branches/vaults.des
+++ b/crawl-ref/source/dat/des/branches/vaults.des
@@ -282,9 +282,9 @@ ENDMAP
NAME: grunt_vaults_entry_fortified
TAGS: vaults_entry no_pool_fixup no_monster_gen patrolling
ORIENT: north
-MONS: human ; crossbow . bolt q:10 . short sword | dagger . \
+MONS: human ; arbalest . bolt q:10 . short sword | dagger . \
leather armour w:5 | ring mail | scale mail / \
- orc warrior ; crossbow . bolt q:10 . short sword | dagger . \
+ orc warrior ; arbalest . bolt q:10 . short sword | dagger . \
leather armour w:5 | ring mail | scale mail / \
deep elf fighter / gargoyle / yaktaur
MONS: vault guard / orc knight w:2
diff --git a/crawl-ref/source/dat/des/branches/vaults_rooms_standard.des b/crawl-ref/source/dat/des/branches/vaults_rooms_standard.des
index 038652e7a2..ea196a5d16 100644
--- a/crawl-ref/source/dat/des/branches/vaults_rooms_standard.des
+++ b/crawl-ref/source/dat/des/branches/vaults_rooms_standard.des
@@ -1694,7 +1694,7 @@ NAME: nicolae_vaults_yaktaur_gun_rack
TAGS: vaults_room no_monster_gen no_item_gen
MONS: yaktaur w:8 / yaktaur band w:4 / yaktaur captain w:2 / yaktaur captain band w:1
KITEM: b = bolt w:3 / bolt good_item w:2
-KITEM: c = crossbow w:4 / crossbow good_item w:1
+KITEM: c = arbalest w:8 / arbalest good_item w:1 / triple crossbow w:1
MAP
xxxxxxx
xcccccx
diff --git a/crawl-ref/source/dat/des/branches/zot.des b/crawl-ref/source/dat/des/branches/zot.des
index 23d04188df..09a6347694 100644
--- a/crawl-ref/source/dat/des/branches/zot.des
+++ b/crawl-ref/source/dat/des/branches/zot.des
@@ -1083,7 +1083,7 @@ KMONS: 1357 = guardian mummy ; randart dire flail ego:chaos | \
great mace w:30 | battleaxe w:30 | great sword w:30 | \
scythe w:30 | glaive w:30 | any weapon w:12 . \
randart hunting sling ego:chaos | randart shortbow ego:chaos | \
- randart crossbow ego:chaos | hunting sling | shortbow | crossbow | \
+ randart arbalest ego:chaos | hunting sling | shortbow | arbalest | \
nothing w:15 . sling bullet | arrow | bolt . \
lightning rod w:6 | rod of shadows w:4 | rod of the swarm w:4 | \
rod of destruction w:2 | rod of striking w:6 | wand of hasting w:16 | \
diff --git a/crawl-ref/source/dat/des/portals/bailey.des b/crawl-ref/source/dat/des/portals/bailey.des
index a6b2f64780..3a1a94544f 100644
--- a/crawl-ref/source/dat/des/portals/bailey.des
+++ b/crawl-ref/source/dat/des/portals/bailey.des
@@ -759,8 +759,8 @@ ENDMAP
NAME: bailey_polearm_2
ORIENT: encompass
TAGS: bailey_polearm no_rotate no_pool_fixup no_monster_gen
-MONS: orc warrior w:5 ; crossbow . bolt . ring mail | scale mail / \
- orc ; crossbow . bolt . ring mail | scale mail
+MONS: orc warrior w:5 ; arbalest . bolt . ring mail | scale mail / \
+ orc ; arbalest . bolt . ring mail | scale mail
: orc_with_polearm(_G)
: orc_warrior_with_polearm(_G)
: orc_knight_with_polearm(_G)
@@ -877,7 +877,7 @@ NAME: bailey_polearm_4
ORIENT: encompass
TAGS: bailey_polearm no_rotate no_item_gen no_monster_gen no_pool_fixup
ITEM: any good_item
-MONS: orc warrior ; crossbow . bolt . ring mail | scale mail | chain mail / \
+MONS: orc warrior ; arbalest . bolt . ring mail | scale mail | chain mail / \
orc warrior ; halberd . ring mail | scale mail | chain mail
: orc_with_polearm(_G)
: orc_warrior_with_polearm(_G)
diff --git a/crawl-ref/source/dat/des/portals/icecave.des b/crawl-ref/source/dat/des/portals/icecave.des
index 91f29f3f2d..5fa8974849 100644
--- a/crawl-ref/source/dat/des/portals/icecave.des
+++ b/crawl-ref/source/dat/des/portals/icecave.des
@@ -213,7 +213,7 @@ function ice_cave_caverns_natural_giant_loot(e)
glaive " .. goodfreezeweap .. " w:4 / \
great sword " .. goodfreezeweap .. " w:2 / nothing")
e.item("book of ice / randbook disc:ice numspells:6 w:2 / \
- crossbow ego:freezing good_item no_uniq ident:type / \
+ arbalest ego:freezing good_item no_uniq ident:type / \
longbow ego:freezing good_item no_uniq ident:type / nothing w:20")
e.item("ring of ice / ring of protection from cold / wand of cold / \
arrow ego:frost q:25 / bolt ego:frost q:20 / nothing")
diff --git a/crawl-ref/source/dat/des/portals/trove.des b/crawl-ref/source/dat/des/portals/trove.des
index ab2814a9a5..57aa13442b 100644
--- a/crawl-ref/source/dat/des/portals/trove.des
+++ b/crawl-ref/source/dat/des/portals/trove.des
@@ -745,7 +745,7 @@ MONS: fire dragon skeleton
ITEM: animal skin good_item / any armour good_item
ITEM: gold dragon hide / storm dragon hide / fire dragon hide / troll hide / any useful armour good_item
ITEM: arrow good_item / bolt good_item
-ITEM: longbow good_item / crossbow good_item / any useful weapon good_item
+ITEM: longbow good_item / arbalest good_item / any useful weapon good_item
SHUFFLE: 123
SHUFFLE: defg
: trove.setup_features(_G)
diff --git a/crawl-ref/source/dat/des/portals/volcano.des b/crawl-ref/source/dat/des/portals/volcano.des
index ae9087255d..09ce1adbb5 100644
--- a/crawl-ref/source/dat/des/portals/volcano.des
+++ b/crawl-ref/source/dat/des/portals/volcano.des
@@ -198,7 +198,7 @@ function setup_loot (e)
"broad axe w:20", "battleaxe", "executioner's axe w:1",
"spear w:20", "trident w:20", "demon trident w:1",
"glaive w:1", "halberd", "lajatang",
- "longbow w:5", "crossbow w:5"}))
+ "longbow w:5", "arbalest w:5"}))
e.item("any")
end
@@ -280,7 +280,7 @@ function fiery_guardians (e, intelligent, village)
.. ", ogre mage ; " .. magestuff)
elseif set_weight < 9 then
e.mons(centaur
- .. " / yaktaur w:5 ; crossbow . bolt ego:flame ident:type")
+ .. " / yaktaur w:5 ; arbalest . bolt ego:flame ident:type")
e.kmons("2 = Nessos / centaur warrior w:40 ; " .. centaurstuff
.. ", centaur warrior ; " .. centaurstuff)
elseif set_weight < 10 then
diff --git a/crawl-ref/source/dat/des/sprint/arena_sprint.des b/crawl-ref/source/dat/des/sprint/arena_sprint.des
index 94357f9436..eed9a0d224 100644
--- a/crawl-ref/source/dat/des/sprint/arena_sprint.des
+++ b/crawl-ref/source/dat/des/sprint/arena_sprint.des
@@ -1083,7 +1083,8 @@ KFEAT: Q = weapon shop type:Weapon suffix:Rack count:17 use_all greed:30 ; \
mundane not_cursed great mace | mundane not_cursed giant spiked club |\
mundane not_cursed demon trident | mundane not_cursed bardiche |\
mundane not_cursed lajatang | mundane not_cursed longbow |\
- mundane not_cursed greatsling | mundane not_cursed crossbow |\
+ mundane not_cursed greatsling | mundane not_cursed triple crossbow \
+ |\
mundane bolt q:50 | mundane sling bullet q:50 |\
mundane arrow q:50
KFEAT: H = distillery shop type:Bottled suffix:Wisdom count:5 use_all greed:6 ; \
diff --git a/crawl-ref/source/dat/des/sprint/linesprint.des b/crawl-ref/source/dat/des/sprint/linesprint.des
index b1f3057d03..2f665e60ad 100644
--- a/crawl-ref/source/dat/des/sprint/linesprint.des
+++ b/crawl-ref/source/dat/des/sprint/linesprint.des
@@ -427,7 +427,7 @@ KITEM: b = any weapon level:27 ident:all /\
claymore plus:0 not_cursed ident:all w:3 /\
lajatang plus:1 not_cursed ident:all /\
longbow plus:1 not_cursed ident:all /\
- crossbow plus:1 not_cursed ident:all /\
+ triple crossbow plus:0 not_cursed ident:all /\
any weapon good_item ident:all w:30
KITEM: d = any armour level:27 ident:all /\
pair of gloves plus:1 ident:all not_cursed /\
@@ -617,7 +617,7 @@ KITEM: b = battleaxe plus:4 ego:none not_cursed ident:all /\
lajatang plus:4 ego:none not_cursed ident:all /\
lajatang plus:1 good_item not_cursed ident:all /\
longbow plus:3 good_item not_cursed ident:all w:15 /\
- crossbow plus:3 good_item not_cursed ident:all w:15
+ triple crossbow plus:0 good_item not_cursed ident:all w:15
KITEM: d = plate armour plus:5 not_cursed ident:all /\
plate armour plus:3 good_item not_cursed ident:all /\
chain mail plus:5 not_cursed ident:all w:20 /\
@@ -835,7 +835,7 @@ KITEM: b = battleaxe plus:5 good_item not_cursed ident:all /\
lajatang plus:5 good_item not_cursed ident:all /\
lajatang plus:5 randart not_cursed ident:all w:5 /\
longbow plus:5 ego:vorpal not_cursed ident:all w:15 /\
- crossbow plus:5 ego:vorpal not_cursed ident:all w:15
+ triple crossbow plus:5 good_item not_cursed ident:all w:15
KITEM: d = plate armour plus:6 not_cursed ident:all /\
plate armour plus:4 good_item not_cursed ident:all /\
chain mail plus:6 not_cursed ident:all /\
diff --git a/crawl-ref/source/dat/des/sprint/pitsprint.des b/crawl-ref/source/dat/des/sprint/pitsprint.des
index d6b8175268..9c14d6e6c8 100644
--- a/crawl-ref/source/dat/des/sprint/pitsprint.des
+++ b/crawl-ref/source/dat/des/sprint/pitsprint.des
@@ -225,7 +225,7 @@ function general_item_setup(e)
lajatang plus:9 good_item not_cursed ident:all /\
lajatang plus:7 randart not_cursed ident:all /\
longbow plus:7 ego:vorpal not_cursed ident:all w:15 /\
- crossbow plus:7 ego:vorpal not_cursed ident:all w:15")
+ triple crossbow plus:7 good_item not_cursed ident:all w:15")
e.kitem("] = plate armour plus:12 not_cursed ident:all /\
plate armour plus:8 good_item not_cursed ident:all /\
chain mail plus:8 not_cursed ident:all /\
@@ -286,7 +286,7 @@ function general_item_setup(e)
lajatang plus:6 ego:none not_cursed ident:all /\
lajatang plus:3 good_item not_cursed ident:all /\
longbow plus:5 good_item not_cursed ident:all w:15 /\
- crossbow plus:5 good_item not_cursed ident:all w:15")
+ triple crossbow plus:0 good_item not_cursed ident:all w:15")
e.kitem("[ = plate armour plus:7 not_cursed ident:all /\
plate armour plus:4 good_item not_cursed ident:all /\
chain mail plus:7 not_cursed ident:all w:20 /\
@@ -431,7 +431,7 @@ function armoury_setup(e)
claymore plus:1 not_cursed ident:all w:3 /\
lajatang plus:3 not_cursed ident:all /\
longbow plus:3 not_cursed ident:all /\
- crossbow plus:3 not_cursed ident:all /\
+ arbalest plus:3 not_cursed ident:all /\
any weapon good_item ident:all w:30")
e.kitem("b = any armour level:27 ident:all /\
pair of gloves plus:1 ident:all not_cursed /\
diff --git a/crawl-ref/source/dat/des/sprint/sprint_mu.des b/crawl-ref/source/dat/des/sprint/sprint_mu.des
index 59ee955798..22ae73c5b9 100644
--- a/crawl-ref/source/dat/des/sprint/sprint_mu.des
+++ b/crawl-ref/source/dat/des/sprint/sprint_mu.des
@@ -920,7 +920,7 @@ KMONS: f = butterfly
KMONS: U = Norris ; morningstar ego:vorpal . large shield ego:reflection / \
Frederick ; trident ego:freezing . large shield ego:reflection
KMONS: C = generate_awake Chuck
-KMONS: k = yaktaur captain ; crossbow ego:chaos . bolt
+KMONS: k = yaktaur captain ; arbalest ego:chaos . bolt
KMONS: b = bush
KMONS: D = fire dragon
NSUBST: $ = 1:1 / *:|
@@ -1176,7 +1176,7 @@ KMONS: r = hydra simulacrum / golden dragon zombie / spectral iron dragon / \
titan zombie
KMONS: s = boris
KMONS: t = col:white generate_awake statue name:pristine name_adjective \
- hp:100 tile:mons_statue_crossbow ; crossbow . bolt q:50 ego:silver
+ hp:100 tile:mons_statue_crossbow ; arbalest . bolt q:50 ego:silver
KMONS: u = Mennas
KMONS: y = generate_awake roxanne
KMONS: z = oklob plant
diff --git a/crawl-ref/source/dat/des/sprint/zigsprint.des b/crawl-ref/source/dat/des/sprint/zigsprint.des
index 6aac3f7b68..af427ac744 100644
--- a/crawl-ref/source/dat/des/sprint/zigsprint.des
+++ b/crawl-ref/source/dat/des/sprint/zigsprint.des
@@ -739,8 +739,10 @@ KITEM: H = demon blade mundane not_cursed ident:all plus:5, \
great sword mundane not_cursed ident:all plus:5, \
claymore mundane not_cursed ident:all plus:5
KITEM: I = lajatang mundane not_cursed ident:all plus:5
-KITEM: J = crossbow mundane not_cursed ident:all plus:5, \
+KITEM: J = hand crossbow mundane not_cursed ident:all plus:5, \
bolt q:1000 mundane ident:all, \
+ arbalest mundane not_cursed ident:all plus:5, \
+ triple crossbow mundane not_cursed ident:all plus:5, \
shortbow mundane not_cursed ident:all plus:5, \
arrow q:1000 mundane ident:all, \
longbow mundane not_cursed ident:all plus:5, \
diff --git a/crawl-ref/source/dat/des/variable/arcadia.des b/crawl-ref/source/dat/des/variable/arcadia.des
index ca3f118e63..d746593d02 100644
--- a/crawl-ref/source/dat/des/variable/arcadia.des
+++ b/crawl-ref/source/dat/des/variable/arcadia.des
@@ -199,7 +199,7 @@ MONS: the Enchantress patrolling, thorn hunter / spriggan defender
MONS: tengu reaver / glowing shapeshifter hd:13
MONS: satyr w:15 / spriggan berserker w:15 / spriggan air mage, faun
MONS: tengu conjurer ; quarterstaff . robe . longbow . arrow / \
- tengu conjurer ; quarterstaff . robe . crossbow . bolt / \
+ tengu conjurer ; quarterstaff . robe . arbalest . bolt / \
centaur warrior / rakshasa / ogre mage ; giant club . \
robe . potion of berserk rage q:1 ident:type
KMONS: L = water nymph
diff --git a/crawl-ref/source/dat/des/variable/float.des b/crawl-ref/source/dat/des/variable/float.des
index fbad54ff03..1bd43d37d5 100644
--- a/crawl-ref/source/dat/des/variable/float.des
+++ b/crawl-ref/source/dat/des/variable/float.des
@@ -2279,8 +2279,8 @@ NAME: hangedman_opposites_gauntlet
TAGS: no_monster_gen patrolling
ORIENT: float
DEPTH: D:14-15, Depths, !Depths:$
-MONS: orc knight ; wand of frost . crossbow ego:flaming . bolt ego:none . chain mail / \
- orc knight ; wand of flame . crossbow ego:freezing . bolt ego:none . chain mail
+MONS: orc knight ; wand of frost . arbalest ego:flaming . bolt ego:none . chain mail / \
+ orc knight ; wand of flame . arbalest ego:freezing . bolt ego:none . chain mail
MONS: ettin ; giant club ego:holy_wrath ident:type . great mace ego:draining ident:type
MONS: rakshasa ; scythe ego:antimagic | trident ego:antimagic / \
mermaid ; chain mail . javelin ego:poisoned
@@ -2741,7 +2741,7 @@ MONS: flying skull
ITEM: bolt ego:exploding q:5
ITEM: potion of heal wounds
ITEM: plate armour good_item
-ITEM: crossbow ego:flaming w:9 ident:type / crossbow unrand:hellfire w:1
+ITEM: arbalest ego:flaming w:9 ident:type / arbalest unrand:hellfire w:1
SUBST: ( = ()
TILE: c = wall_marble
MAP
@@ -2790,7 +2790,7 @@ MONS: deep troll
# Fortunately, we have a permanently invisible 2 already.
MONS: lorocyproca
: end
-ITEM: crossbow, bolt, potion of curing, potion of heal wounds
+ITEM: arbalest, bolt, potion of curing, potion of heal wounds
ITEM: potion of invisibility
KFEAT: - = open_door
SHUFFLE: })]>
diff --git a/crawl-ref/source/dat/descript/items.txt b/crawl-ref/source/dat/descript/items.txt
index 889583f42e..ce5cd3cde9 100644
--- a/crawl-ref/source/dat/descript/items.txt
+++ b/crawl-ref/source/dat/descript/items.txt
@@ -62,6 +62,11 @@ A large piece of thick skin covered in fur, cut from the corpse of an animal
and worn as a primitive garment. It offers rudimentary protection against harm,
but, having never been tanned, it carries a light stench of rotting flesh.
%%%%
+arbalest
+
+A large piece of machinery used for firing bolts, braced with steel and cranked
+with a windlass. It takes some time to load and fire.
+%%%%
arrow
A long shafted projectile intended to be shot with a short- or longbow, fletched
@@ -404,11 +409,6 @@ corpse
A corpse. You can butcher it to produce edible meat chunks.
%%%%
-crossbow
-
-A piece of machinery used for firing bolts, which takes some time to load and
-fire. It does very good damage in combat.
-%%%%
crystal ball of energy
A magical device which can be used to restore one's reserves of magical energy,
@@ -601,6 +601,11 @@ hand axe
A small axe.
%%%%
+hand crossbow
+
+A compact piece of machinery, used for firing bolts. It takes some time to load
+and fire.
+%%%%
hat
A cloth or leather hat.
@@ -1427,6 +1432,12 @@ trident
A fishing spear improved with a longer shaft and a three-pronged metal head.
%%%%
+triple crossbow
+
+Initially designed as a siege weapon and then scaled down, this crossbow uses
+three strings arranged in series to provide exceptional power. It takes a
+considerable amount of time to load and fire.
+%%%%
trishula
A blessed trident moulded by cleansing flame, with three points symbolising the
diff --git a/crawl-ref/source/dat/descript/quotes.txt b/crawl-ref/source/dat/descript/quotes.txt
index 4f7f6429d1..1c177a14cd 100644
--- a/crawl-ref/source/dat/descript/quotes.txt
+++ b/crawl-ref/source/dat/descript/quotes.txt
@@ -264,6 +264,23 @@ a son of Earth.”
-Pseudo-Apollodorus , _Library and Epitome_, 2.5.11. ca. 150 BC.
trans. Sir James George Frazer, 1913.
%%%%
+arbalest
+
+“(Tell enters with his crossbow)
+ W. TELL:
+ My precious jewel now, —my chiefest treasure—
+ A mark I'll set thee, which the cry of grief
+ Could never penetrate,—but thou shalt pierce it,—
+ And thou, my trusty bowstring, that so oft
+ For sport has served me faithfully and well,
+ Desert me not in this dread hour of need,—
+ Only be true this once, my own good cord,
+ That hast so often wing'd the biting shaft:—
+ For shouldst thou fly successless from my hand,
+ I have no second to send after thee.”
+ -Friedrich Schiller, _Wilhelm Tell_, IV, iii. 1804.
+ trans. Sir Theodore Martin, 1898.
+%%%%
Asmodeus
“For myself, I have other occupations: I make absurd matches; I marry
@@ -965,23 +982,6 @@ crocodile
With gently smiling jaws!”
-Lewis Carroll, _Alice's Adventures in Wonderland_, 1865.
%%%%
-crossbow
-
-“(Tell enters with his crossbow)
- W. TELL:
- My precious jewel now, —my chiefest treasure—
- A mark I'll set thee, which the cry of grief
- Could never penetrate,—but thou shalt pierce it,—
- And thou, my trusty bowstring, that so oft
- For sport has served me faithfully and well,
- Desert me not in this dread hour of need,—
- Only be true this once, my own good cord,
- That hast so often wing'd the biting shaft:—
- For shouldst thou fly successless from my hand,
- I have no second to send after thee.”
- -Friedrich Schiller, _Wilhelm Tell_, IV, iii. 1804.
- trans. Sir Theodore Martin, 1898.
-%%%%
cutlass
“Who was the first that forged the deadly blade?
@@ -1407,6 +1407,10 @@ hand axe
She gave her father forty-one.”
-A popular skipping-rope rhyme, after 1893.
%%%%
+hand crossbow
+
+<arbalest>
+%%%%
harpy
“Bird-bodied, girl-faced things they are; abominable their droppings, their
@@ -2860,6 +2864,10 @@ long shafted trident, called a waster, is much practised at the mouth of the
Esk, and in the other salmon rivers of Scotland.”
-Sir Walter Scott, _Guy Mannering_, ch. XXVI. 1815.
%%%%
+triple crossbow
+
+<arbalest>
+%%%%
troll hide
“THE TROLL KING: Now, listen, Prince Peer, and give way to reason!
diff --git a/crawl-ref/source/dat/descript/unrand.txt b/crawl-ref/source/dat/descript/unrand.txt
index ae78db1fe4..89a77d46e9 100644
--- a/crawl-ref/source/dat/descript/unrand.txt
+++ b/crawl-ref/source/dat/descript/unrand.txt
@@ -163,12 +163,19 @@ A long sword made of one huge piece of crystal. Legend says it was the Shining
One's gift to a worshipper. This blade is notorious for inducing bloodthirsty
rage in both the wielder and all of his or her mortal followers.
%%%%
+# TAG_MAJOR_VERSION == 34
crossbow "Hellfire"
A flaming crossbow, forged in the fires of the Hells; it imbues bolts it fires
with the raw power of its namesake, irresistible by any mortal armour or
fireproofing.
%%%%
+arbalest "Hellfire"
+
+A flaming crossbow, forged in the fires of the Hells. It imbues bolts it fires
+with the raw power of its namesake, irresistible by any mortal armour or
+fireproofing.
+%%%%
sword of the Doom Knight
An adamantine great sword. Its first wielder was a worshipper of Yredelemnul
@@ -200,11 +207,17 @@ This powerful staff used to belong to the leader of the Guild of Five Elements.
In addition to the protection it provides, those skilled in Evocations may
use it to discharge powerful blasts of elemental energy with their strikes.
%%%%
+# TAG_MAJOR_VERSION == 34
crossbow "Sniper"
A crossbow made of some black material. It is highly damaging but extremely
cumbersome to load.
%%%%
+heavy crossbow "Sniper"
+
+A huge crossbow made of some black material. It is highly damaging, but
+extremely cumbersome to load.
+%%%%
longbow "Piercer"
An exceptionally large metal longbow.
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc
index 71bb9c3a25..ea24c76969 100644
--- a/crawl-ref/source/fight.cc
+++ b/crawl-ref/source/fight.cc
@@ -712,7 +712,11 @@ int weapon_min_delay(const item_def &weapon)
if (min_delay > 7)
min_delay = 7;
- // ... unless it would take more than skill 27 to get there (dark maul).
+ // ...except crossbows...
+ if (range_skill(weapon) == SK_CROSSBOWS && min_delay < 10)
+ min_delay = 10;
+
+ // ... and unless it would take more than skill 27 to get there.
// Round up the reduction from skill, so that min delay is rounded down.
min_delay = max(min_delay, base - (MAX_SKILL_LEVEL + 1)/2);
diff --git a/crawl-ref/source/godblessing.cc b/crawl-ref/source/godblessing.cc
index 47677a07d5..fa794adfc7 100644
--- a/crawl-ref/source/godblessing.cc
+++ b/crawl-ref/source/godblessing.cc
@@ -239,7 +239,7 @@ static string _beogh_bless_ranged_weapon(monster* mon)
}
// no launcher, no shield: give them a crossbow & some ammo.
- _gift_weapon_to_orc(mon, WPN_CROSSBOW);
+ _gift_weapon_to_orc(mon, WPN_ARBALEST);
if (mon->launcher() == NULL)
{
dprf("Couldn't give crossbow to follower!");
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index 925050f7ef..4b00d7af74 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -229,8 +229,8 @@ weapon_type str_to_weapon(const string &str)
return WPN_GREATSLING;
else if (str == "shortbow" || str == "short bow")
return WPN_SHORTBOW;
- else if (str == "crossbow")
- return WPN_CROSSBOW;
+ else if (str == "crossbow" || str == "hand crossbow")
+ return WPN_HAND_CROSSBOW;
else if (str == "thrown"
|| str == "rocks"
|| str == "javelins"
diff --git a/crawl-ref/source/itemprop-enum.h b/crawl-ref/source/itemprop-enum.h
index 1cf1fcf286..0611fc9aeb 100644
--- a/crawl-ref/source/itemprop-enum.h
+++ b/crawl-ref/source/itemprop-enum.h
@@ -469,7 +469,15 @@ enum weapon_type
WPN_BARDICHE,
WPN_BLOWGUN,
- WPN_CROSSBOW,
+
+#if TAG_MAJOR_VERSION > 34
+ WPN_HAND_CROSSBOW,
+#endif
+ WPN_ARBALEST,
+#if TAG_MAJOR_VERSION > 34
+ WPN_TRIPLE_CROSSBOW,
+#endif
+
WPN_SHORTBOW,
WPN_LONGBOW,
@@ -509,6 +517,8 @@ enum weapon_type
#if TAG_MAJOR_VERSION == 34
WPN_GREATSLING,
+ WPN_HAND_CROSSBOW,
+ WPN_TRIPLE_CROSSBOW,
#endif
NUM_WEAPONS,
diff --git a/crawl-ref/source/itemprop.cc b/crawl-ref/source/itemprop.cc
index cee9fbfc28..f2d52efc05 100644
--- a/crawl-ref/source/itemprop.cc
+++ b/crawl-ref/source/itemprop.cc
@@ -345,14 +345,19 @@ static const weapon_def Weapon_prop[] =
{ WPN_HUNTING_SLING, "hunting sling", 5, 2, 12, 20, 1,
SK_SLINGS, SIZE_LITTLE, SIZE_LITTLE, MI_STONE,
DAMV_NON_MELEE, 10 },
- { WPN_GREATSLING, "greatsling", 8, -1, 14, 20, 1,
+ { WPN_GREATSLING, "greatsling", 8, -1, 14, 30, 1,
SK_SLINGS, SIZE_LITTLE, SIZE_SMALL, MI_STONE,
DAMV_NON_MELEE, 2 },
-
- { WPN_CROSSBOW, "crossbow", 5, 4, 15, 150, 8,
- SK_CROSSBOWS, SIZE_LITTLE, NUM_SIZE_LEVELS, MI_BOLT,
+ { WPN_HAND_CROSSBOW, "hand crossbow", 11, 5, 15, 50, 5,
+ SK_CROSSBOWS, SIZE_LITTLE, SIZE_LITTLE, MI_BOLT,
+ DAMV_NON_MELEE, 10 },
+ { WPN_ARBALEST, "arbalest", 20, 2, 19, 150, 8,
+ SK_CROSSBOWS, SIZE_LITTLE, NUM_SIZE_LEVELS, MI_BOLT,
DAMV_NON_MELEE, 10 },
+ { WPN_TRIPLE_CROSSBOW, "triple crossbow", 24, 0, 22, 250, 9,
+ SK_CROSSBOWS, SIZE_SMALL, NUM_SIZE_LEVELS, MI_BOLT,
+ DAMV_NON_MELEE, 2 },
{ WPN_SHORTBOW, "shortbow", 8, 1, 13, 90, 2,
SK_BOWS, SIZE_LITTLE, NUM_SIZE_LEVELS, MI_ARROW,
@@ -380,7 +385,7 @@ static const missile_def Missile_prop[] =
{ MI_NEEDLE, "needle", 0, 1, false },
{ MI_STONE, "stone", 2, 6, true },
{ MI_ARROW, "arrow", 0, 5, false },
- { MI_BOLT, "bolt", 9, 5, false },
+ { MI_BOLT, "bolt", 0, 5, false },
{ MI_LARGE_ROCK, "large rock", 20, 600, true },
{ MI_SLING_BULLET, "sling bullet", 5, 4, false },
{ MI_JAVELIN, "javelin", 10, 80, true },
@@ -1252,10 +1257,10 @@ int weapon_rarity(int w_type)
case WPN_LONG_SWORD:
case WPN_MORNINGSTAR:
case WPN_WAR_AXE:
+ case WPN_HAND_CROSSBOW:
return 7;
case WPN_BATTLEAXE:
- case WPN_CROSSBOW:
case WPN_GREAT_SWORD:
case WPN_SCIMITAR:
case WPN_TRIDENT:
@@ -1264,6 +1269,7 @@ int weapon_rarity(int w_type)
case WPN_GLAIVE:
case WPN_HALBERD:
case WPN_BLOWGUN:
+ case WPN_ARBALEST:
return 5;
case WPN_BROAD_AXE:
@@ -1290,6 +1296,7 @@ int weapon_rarity(int w_type)
case WPN_EXECUTIONERS_AXE:
case WPN_QUICK_BLADE:
case WPN_CLAYMORE:
+ case WPN_TRIPLE_CROSSBOW:
case WPN_DEMON_WHIP:
case WPN_DEMON_BLADE:
case WPN_DEMON_TRIDENT:
diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc
index e2216efbf6..f89a8a3e22 100644
--- a/crawl-ref/source/makeitem.cc
+++ b/crawl-ref/source/makeitem.cc
@@ -1076,7 +1076,8 @@ static brand_type _determine_weapon_brand(const item_def& item, int item_level)
// intentionally fallthrough to bow/xbow brands
case WPN_SHORTBOW:
case WPN_LONGBOW:
- case WPN_CROSSBOW:
+ case WPN_HAND_CROSSBOW:
+ case WPN_ARBALEST:
rc = random_choose_weighted(48, SPWPN_FLAMING,
25, SPWPN_FREEZING,
15, SPWPN_EVASION,
@@ -1086,6 +1087,7 @@ static brand_type _determine_weapon_brand(const item_def& item, int item_level)
break;
case WPN_GREATSLING:
+ case WPN_TRIPLE_CROSSBOW:
// totally arbitrary, first draft for "rare ranged weapon" brands
rc = random_choose(SPWPN_SPEED,
SPWPN_FREEZING,
diff --git a/crawl-ref/source/mon-gear.cc b/crawl-ref/source/mon-gear.cc
index c7284b562c..2d0ad745e6 100644
--- a/crawl-ref/source/mon-gear.cc
+++ b/crawl-ref/source/mon-gear.cc
@@ -268,7 +268,7 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
else if (one_chance_in(30) && level > 2)
{
item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_CROSSBOW;
+ item.sub_type = WPN_HAND_CROSSBOW;
break;
}
break;
@@ -357,7 +357,7 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
if (one_chance_in(9))
{
item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_CROSSBOW;
+ item.sub_type = WPN_ARBALEST;
break;
}
@@ -573,10 +573,10 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
{
item.base_type = OBJ_WEAPONS;
if (type == MONS_VASHNIA)
- item.sub_type = coinflip() ? WPN_LONGBOW : WPN_CROSSBOW;
+ item.sub_type = coinflip() ? WPN_LONGBOW : WPN_ARBALEST;
else
{
- item.sub_type = random_choose_weighted(3, WPN_CROSSBOW,
+ item.sub_type = random_choose_weighted(3, WPN_ARBALEST,
2, WPN_SHORTBOW,
1, WPN_LONGBOW,
0);
@@ -711,7 +711,7 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
|| mon->type == MONS_MINOTAUR)
&& coinflip())
? WPN_LONGBOW
- : WPN_CROSSBOW;
+ : WPN_ARBALEST;
break;
}
// deliberate fall-through
@@ -741,7 +741,7 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
if (!melee_only && one_chance_in(3))
{
item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_CROSSBOW;
+ item.sub_type = WPN_ARBALEST;
break;
}
@@ -911,7 +911,7 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
case MONS_YAKTAUR:
case MONS_YAKTAUR_CAPTAIN:
item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_CROSSBOW;
+ item.sub_type = WPN_ARBALEST;
break;
case MONS_EFREET:
@@ -1445,7 +1445,12 @@ static void _give_weapon(monster* mon, int level, bool melee_only = false,
level = MAKE_GOOD_ITEM;
item.base_type = OBJ_WEAPONS;
if (!melee_only)
- item.sub_type = coinflip() ? WPN_CROSSBOW : WPN_LONGBOW;
+ {
+ item.sub_type = random_choose_weighted(10, WPN_LONGBOW,
+ 9, WPN_ARBALEST,
+ 1, WPN_TRIPLE_CROSSBOW,
+ 0);
+ }
else
{
item.sub_type = random_choose_weighted(10, WPN_DEMON_BLADE,
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index 527a26f667..aaf1b9ceee 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -1626,7 +1626,7 @@ static vector<weapon_choice> _get_weapons(const newgame_def* ng)
if (ng->job == JOB_HUNTER || ng->job == JOB_ARCANE_MARKSMAN)
{
weapon_type startwep[4] = { WPN_THROWN, WPN_HUNTING_SLING,
- WPN_SHORTBOW, WPN_CROSSBOW };
+ WPN_SHORTBOW, WPN_HAND_CROSSBOW };
for (int i = 0; i < 4; i++)
{
diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc
index c54d215619..5a79d04ff6 100644
--- a/crawl-ref/source/ng-restr.cc
+++ b/crawl-ref/source/ng-restr.cc
@@ -1019,7 +1019,7 @@ char_choice_restriction weapon_restriction(weapon_type wpn,
return CC_RESTRICTED;
}
- case WPN_CROSSBOW:
+ case WPN_HAND_CROSSBOW:
switch (ng.species)
{
case SP_DEEP_ELF:
diff --git a/crawl-ref/source/ng-setup.cc b/crawl-ref/source/ng-setup.cc
index 401d81cecb..d4aa8c7cdd 100644
--- a/crawl-ref/source/ng-setup.cc
+++ b/crawl-ref/source/ng-setup.cc
@@ -494,8 +494,9 @@ static void _update_weapon(const newgame_def& ng)
// Wield the bow instead.
you.equip[EQ_WEAPON] = 1;
break;
- case WPN_CROSSBOW:
- newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_CROSSBOW, -1, 1, plus);
+ case WPN_HAND_CROSSBOW:
+ newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_HAND_CROSSBOW, -1, 1,
+ plus);
newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_BOLT, -1, 20);
autopickup_starting_ammo(MI_BOLT);
diff --git a/crawl-ref/source/ng-wanderer.cc b/crawl-ref/source/ng-wanderer.cc
index 2f22c56edf..fd6630c0e0 100644
--- a/crawl-ref/source/ng-wanderer.cc
+++ b/crawl-ref/source/ng-wanderer.cc
@@ -76,7 +76,7 @@ static bool _give_wanderer_weapon(int & slot, int wpn_skill, int plus)
break;
case SK_CROSSBOWS:
- sub_type = WPN_CROSSBOW;
+ sub_type = WPN_HAND_CROSSBOW;
break;
}
@@ -820,7 +820,7 @@ static void _wanderer_cover_equip_holes(int & slot)
for (int i = 0; i < slot; ++i)
{
if (you.inv[i].base_type == OBJ_WEAPONS
- && you.inv[i].sub_type == WPN_CROSSBOW)
+ && range_skill(you.inv[i]) == SK_CROSSBOWS)
{
need_bolts = true;
break;
@@ -841,7 +841,7 @@ static void _wanderer_cover_equip_holes(int & slot)
for (int i = 0; i < slot; ++i)
{
if (you.inv[i].base_type == OBJ_WEAPONS
- && you.inv[i].sub_type == WPN_SHORTBOW)
+ && range_skill(you.inv[i]) == SK_BOWS)
{
needs_arrows = true;
break;
diff --git a/crawl-ref/source/quiver.cc b/crawl-ref/source/quiver.cc
index eba97cc380..b38b50ce29 100644
--- a/crawl-ref/source/quiver.cc
+++ b/crawl-ref/source/quiver.cc
@@ -599,7 +599,9 @@ static ammo_t _get_weapon_ammo_type(const item_def* weapon)
case WPN_SHORTBOW:
case WPN_LONGBOW:
return AMMO_BOW;
- case WPN_CROSSBOW:
+ case WPN_HAND_CROSSBOW:
+ case WPN_ARBALEST:
+ case WPN_TRIPLE_CROSSBOW:
return AMMO_CROSSBOW;
default:
return AMMO_THROW;
diff --git a/crawl-ref/source/rltiles/dc-item.txt b/crawl-ref/source/rltiles/dc-item.txt
index 78c1ed1a98..9740bdbd5b 100644
--- a/crawl-ref/source/rltiles/dc-item.txt
+++ b/crawl-ref/source/rltiles/dc-item.txt
@@ -167,9 +167,9 @@ sling2
shortbow1 WPN_SHORTBOW
shortbow2
shortbow3
-crossbow1 WPN_CROSSBOW
-crossbow2
-crossbow3
+arbalest1 WPN_ARBALEST
+arbalest2
+arbalest3
longbow1 WPN_LONGBOW
longbow2
longbow3
diff --git a/crawl-ref/source/rltiles/dc-player.txt b/crawl-ref/source/rltiles/dc-player.txt
index 8d3fe0ceb0..c1c802297c 100644
--- a/crawl-ref/source/rltiles/dc-player.txt
+++ b/crawl-ref/source/rltiles/dc-player.txt
@@ -723,10 +723,10 @@ bow_two BOW2
bow_three BOW3
great_bow GREAT_BOW
storm_bow STORM_BOW
-crossbow CROSSBOW
-crossbow_two CROSSBOW2
-crossbow_three CROSSBOW3
-crossbow_four CROSSBOW4
+arbalest ARBALEST
+arbalest_two ARBALEST2
+arbalest_three ARBALEST3
+arbalest_four ARBALEST4
blowgun BLOWGUN
##missiles
diff --git a/crawl-ref/source/rltiles/item/weapon/ranged/crossbow1.png b/crawl-ref/source/rltiles/item/weapon/ranged/arbalest1.png
index 4f9fbe64cf..4f9fbe64cf 100644
--- a/crawl-ref/source/rltiles/item/weapon/ranged/crossbow1.png
+++ b/crawl-ref/source/rltiles/item/weapon/ranged/arbalest1.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/ranged/crossbow2.png b/crawl-ref/source/rltiles/item/weapon/ranged/arbalest2.png
index 18009f0339..18009f0339 100644
--- a/crawl-ref/source/rltiles/item/weapon/ranged/crossbow2.png
+++ b/crawl-ref/source/rltiles/item/weapon/ranged/arbalest2.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/item/weapon/ranged/crossbow3.png b/crawl-ref/source/rltiles/item/weapon/ranged/arbalest3.png
index ef17c4e211..ef17c4e211 100644
--- a/crawl-ref/source/rltiles/item/weapon/ranged/crossbow3.png
+++ b/crawl-ref/source/rltiles/item/weapon/ranged/arbalest3.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow.png b/crawl-ref/source/rltiles/player/hand1/arbalest.png
index cfca8262fe..cfca8262fe 100644
--- a/crawl-ref/source/rltiles/player/hand1/crossbow.png
+++ b/crawl-ref/source/rltiles/player/hand1/arbalest.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow_four.png b/crawl-ref/source/rltiles/player/hand1/arbalest_four.png
index 981bda910e..981bda910e 100644
--- a/crawl-ref/source/rltiles/player/hand1/crossbow_four.png
+++ b/crawl-ref/source/rltiles/player/hand1/arbalest_four.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow_three.png b/crawl-ref/source/rltiles/player/hand1/arbalest_three.png
index 81f982526a..81f982526a 100644
--- a/crawl-ref/source/rltiles/player/hand1/crossbow_three.png
+++ b/crawl-ref/source/rltiles/player/hand1/arbalest_three.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/player/hand1/crossbow_two.png b/crawl-ref/source/rltiles/player/hand1/arbalest_two.png
index e5c17c2fcf..e5c17c2fcf 100644
--- a/crawl-ref/source/rltiles/player/hand1/crossbow_two.png
+++ b/crawl-ref/source/rltiles/player/hand1/arbalest_two.png
Binary files differ
diff --git a/crawl-ref/source/shopping.cc b/crawl-ref/source/shopping.cc
index bfa471ca7e..b538ead31b 100644
--- a/crawl-ref/source/shopping.cc
+++ b/crawl-ref/source/shopping.cc
@@ -989,6 +989,7 @@ unsigned int item_value(item_def item, bool ident)
case WPN_FLAIL:
case WPN_LONG_SWORD:
case WPN_TRIDENT:
+ case WPN_HAND_CROSSBOW:
valued += 35;
break;
@@ -1003,11 +1004,8 @@ unsigned int item_value(item_def item, bool ident)
valued += 40;
break;
- case WPN_CROSSBOW:
- valued += 41;
- break;
-
case WPN_LONGBOW:
+ case WPN_ARBALEST:
valued += 45;
break;
@@ -1022,6 +1020,7 @@ unsigned int item_value(item_def item, bool ident)
valued += 90;
break;
+ case WPN_TRIPLE_CROSSBOW:
case WPN_CLAYMORE:
case WPN_EXECUTIONERS_AXE:
valued += 100;
diff --git a/crawl-ref/source/throw.cc b/crawl-ref/source/throw.cc
index e78f41cf4c..3e6c54b98b 100644
--- a/crawl-ref/source/throw.cc
+++ b/crawl-ref/source/throw.cc
@@ -641,10 +641,18 @@ static void _throw_noise(actor* act, const bolt &pbolt, const item_def &ammo)
level = 6;
msg = "You hear a loud twanging sound.";
break;
- case WPN_CROSSBOW:
+ case WPN_HAND_CROSSBOW:
+ level = 2;
+ msg = "You hear a quiet thunk.";
+ break;
+ case WPN_ARBALEST:
level = 7;
msg = "You hear a thunk.";
break;
+ case WPN_TRIPLE_CROSSBOW:
+ level = 9;
+ msg = "You hear a triplet of thunks.";
+ break;
default:
die("Invalid launcher '%s'",
diff --git a/crawl-ref/source/tilemcache.cc b/crawl-ref/source/tilemcache.cc
index eeda4973a0..1de8a45c26 100644
--- a/crawl-ref/source/tilemcache.cc
+++ b/crawl-ref/source/tilemcache.cc
@@ -925,7 +925,7 @@ mcache_ghost::mcache_ghost(const monster_info& mon)
break;
case SK_CROSSBOWS:
- m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_CROSSBOW;
+ m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_ARBALEST;
break;
case SK_SLINGS:
diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc
index 9679b7b44a..1cac130459 100644
--- a/crawl-ref/source/tilepick-p.cc
+++ b/crawl-ref/source/tilepick-p.cc
@@ -250,8 +250,8 @@ tileidx_t tilep_equ_weapon(const item_def &item)
case WPN_SHORTBOW:
tile = TILEP_HAND1_BOW2;
break;
- case WPN_CROSSBOW:
- tile = TILEP_HAND1_CROSSBOW;
+ case WPN_ARBALEST:
+ tile = TILEP_HAND1_ARBALEST;
break;
case WPN_BLOWGUN:
tile = TILEP_HAND1_BLOWGUN;
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 2fecd9e057..88b6408594 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -995,7 +995,7 @@ static int _bow_offset(const monster_info& mon)
{
case WPN_SHORTBOW:
case WPN_LONGBOW:
- case WPN_CROSSBOW:
+ case WPN_ARBALEST:
return 0;
default:
return 1;
@@ -3086,7 +3086,7 @@ static tileidx_t _tileidx_weapon_base(const item_def &item)
case WPN_BLOWGUN: return TILE_WPN_BLOWGUN;
case WPN_HUNTING_SLING: return TILE_WPN_HUNTING_SLING;
case WPN_SHORTBOW: return TILE_WPN_SHORTBOW;
- case WPN_CROSSBOW: return TILE_WPN_CROSSBOW;
+ case WPN_ARBALEST: return TILE_WPN_ARBALEST;
case WPN_SPEAR: return TILE_WPN_SPEAR;
case WPN_TRIDENT: return TILE_WPN_TRIDENT;
case WPN_HALBERD: return TILE_WPN_HALBERD;