summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorDarshan Shaligram <dshaligram@users.sourceforge.net>2009-12-29 17:56:26 +0530
committerDarshan Shaligram <dshaligram@users.sourceforge.net>2009-12-29 17:56:38 +0530
commitcfdb6e14f51f38e104444acf22e17706fcda104d (patch)
treecc5b352f27be1e10bf258f72910ecbc8f9744bda /crawl-ref
parentfe97e90bb05bca87d2df81bf3a2d7ded964fd42c (diff)
downloadcrawl-ref-cfdb6e14f51f38e104444acf22e17706fcda104d.tar.gz
crawl-ref-cfdb6e14f51f38e104444acf22e17706fcda104d.zip
Add merfolk javelineers to the Shoals, add descriptions for the three new merfolk types.
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/dat/descript/monsters.txt14
-rw-r--r--crawl-ref/source/enum.h1
-rw-r--r--crawl-ref/source/mon-act.cc7
-rw-r--r--crawl-ref/source/mon-data.h24
-rw-r--r--crawl-ref/source/mon-gear.cc49
-rw-r--r--crawl-ref/source/mon-pick.cc4
6 files changed, 71 insertions, 28 deletions
diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt
index da05efc32f..579bbeb6a3 100644
--- a/crawl-ref/source/dat/descript/monsters.txt
+++ b/crawl-ref/source/dat/descript/monsters.txt
@@ -1048,7 +1048,19 @@ This tall and powerful demon is Mara, Lord of Illusions, mighty among dreamers.
%%%%
merfolk
-Half fish, half man, the merfolk are citizens of both water and land, and they'll fiercely protect their chosen territory.
+Half fish, half man, the merfolk are citizens of both water and land, and fierce protectors of their chosen territory.
+%%%%
+merfolk impaler
+
+A powerfully muscled merfolk warrior, bearing a great trident.
+%%%%
+merfolk aquamancer
+
+A slender merfolk mystic with unusually webby hands. Its form shifts and glistens as if seen through ocean spray.
+%%%%
+merfolk javelineer
+
+A sinewy merfolk fighter with a piercing gaze and a large bundle of javelins.
%%%%
mermaid
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 4a37b027b6..08ae63c36e 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -1823,6 +1823,7 @@ enum monster_type // (int) menv[].type
// Shoals guardians
MONS_MERFOLK_IMPALER,
MONS_MERFOLK_AQUAMANCER,
+ MONS_MERFOLK_JAVELINEER,
//jmf: end new monsters
MONS_WHITE_IMP = 220, // 220
diff --git a/crawl-ref/source/mon-act.cc b/crawl-ref/source/mon-act.cc
index 3fc1cea5a0..31d1c990a7 100644
--- a/crawl-ref/source/mon-act.cc
+++ b/crawl-ref/source/mon-act.cc
@@ -1139,7 +1139,12 @@ static bool _mons_throw(struct monsters *monster, struct bolt &pbolt,
{
const mon_attack_def attk = mons_attack_spec(monster, 0);
if (attk.type == AT_SHOOT)
- ammoDamBonus += random2avg(attk.damage, 2);
+ {
+ if (projected == LRET_THROWN && wepClass == OBJ_MISSILES)
+ ammoHitBonus += random2avg(attk.damage, 2);
+ else
+ ammoDamBonus += random2avg(attk.damage, 2);
+ }
}
if (projected == LRET_THROWN)
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 5f8822a84b..e5e5fb7b98 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -1123,12 +1123,24 @@ static monsterentry mondata[] = {
M_WARM_BLOOD,
MR_NO_FLAGS,
500, 10, MONS_MERFOLK, MONS_MERFOLK, MH_NATURAL, -3,
- { {AT_HIT, AF_PLAIN, 35}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 14, 6, 3, 0 },
- // Gladiators prefer light armour, and are dodging experts.
- 0, 17, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SHOUT,
+ { {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 16, 5, 3, 0 },
+ // Impalers prefer light armour, and are dodging experts.
+ 0, 23, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SHOUT,
I_NORMAL, HT_AMPHIBIOUS_WATER, FL_NONE, 10, ATTACK_ENERGY(6),
- MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+ MONUSE_MAGIC_ITEMS, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
+{
+ MONS_MERFOLK_JAVELINEER, 'm', LIGHTGREY, "merfolk javelineer",
+ M_WARM_BLOOD | M_ARCHER,
+ MR_NO_FLAGS,
+ 500, 10, MONS_MERFOLK, MONS_MERFOLK, MH_NATURAL, -4,
+ { {AT_SHOOT, AF_PLAIN, 18}, {AT_HIT, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
+ { 16, 4, 2, 0 },
+ 0, 15, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SHOUT,
+ I_NORMAL, HT_AMPHIBIOUS_WATER, FL_NONE, 10, MISSILE_ENERGY(8),
+ MONUSE_MAGIC_ITEMS, MONEAT_NOTHING, SIZE_MEDIUM
},
{
@@ -1140,7 +1152,7 @@ static monsterentry mondata[] = {
{ 15, 3, 3, 0 },
0, 12, MST_MERFOLK_AQUAMANCER, CE_CONTAMINATED, Z_SMALL, S_SHOUT,
I_NORMAL, HT_AMPHIBIOUS_WATER, FL_NONE, 10, DEFAULT_ENERGY,
- MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+ MONUSE_MAGIC_ITEMS, MONEAT_NOTHING, SIZE_MEDIUM
},
{
diff --git a/crawl-ref/source/mon-gear.cc b/crawl-ref/source/mon-gear.cc
index a012972cc3..393d4680b7 100644
--- a/crawl-ref/source/mon-gear.cc
+++ b/crawl-ref/source/mon-gear.cc
@@ -412,14 +412,6 @@ static item_make_species_type _give_weapon(monsters *mon, int level,
item.sub_type = WPN_LONGBOW;
break;
- case MONS_MERFOLK_AQUAMANCER:
- item_race = MAKE_ITEM_NO_RACE;
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_SABRE;
- if (coinflip())
- level = MAKE_GOOD_ITEM;
- break;
-
case MONS_DEEP_ELF_ANNIHILATOR:
case MONS_DEEP_ELF_CONJURER:
case MONS_DEEP_ELF_DEATH_MAGE:
@@ -593,11 +585,8 @@ static item_make_species_type _give_weapon(monsters *mon, int level,
case MONS_MERFOLK_IMPALER:
item_race = MAKE_ITEM_NO_RACE;
item.base_type = OBJ_WEAPONS;
- // Weapon types are not strictly sorted by quality. This is intentional.
item.sub_type = random_choose_weighted(100, WPN_TRIDENT,
- 45, WPN_BARDICHE,
15, WPN_DEMON_TRIDENT,
- 15, WPN_HALBERD,
0);
if (coinflip())
level = MAKE_GOOD_ITEM;
@@ -611,6 +600,23 @@ static item_make_species_type _give_weapon(monsters *mon, int level,
}
break;
+
+ case MONS_MERFOLK_AQUAMANCER:
+ item_race = MAKE_ITEM_NO_RACE;
+ item.base_type = OBJ_WEAPONS;
+ item.sub_type = WPN_SABRE;
+ if (coinflip())
+ level = MAKE_GOOD_ITEM;
+ break;
+
+ case MONS_MERFOLK_JAVELINEER:
+ item_race = MAKE_ITEM_NO_RACE;
+ item.base_type = OBJ_WEAPONS;
+ item.sub_type = WPN_SPEAR;
+ if (!one_chance_in(3))
+ level = MAKE_GOOD_ITEM;
+ break;
+
case MONS_MERFOLK:
if (one_chance_in(3))
{
@@ -1057,14 +1063,13 @@ static void _give_ammo(monsters *mon, int level,
qty = random_range(4, 7);
break;
- case MONS_MERFOLK_IMPALER:
- // Gladiators rarely get javelins.
- if (one_chance_in(4))
- {
- weap_class = OBJ_MISSILES;
- weap_type = MI_JAVELIN;
- qty = random_range(3, 8, 2);
- }
+ case MONS_MERFOLK_JAVELINEER:
+ weap_class = OBJ_MISSILES;
+ weap_type = MI_JAVELIN;
+ item_race = MAKE_ITEM_NO_RACE;
+ qty = random_range(9, 23, 2);
+ if (one_chance_in(3))
+ level = MAKE_GOOD_ITEM;
break;
case MONS_MERFOLK:
@@ -1391,6 +1396,12 @@ void give_armour(monsters *mon, int level)
0);
break;
+ case MONS_MERFOLK_JAVELINEER:
+ item_race = MAKE_ITEM_NO_RACE;
+ item.base_type = OBJ_ARMOUR;
+ item.sub_type = ARM_LEATHER_ARMOUR;
+ break;
+
case MONS_ANGEL:
case MONS_SIGMUND:
case MONS_WIGHT:
diff --git a/crawl-ref/source/mon-pick.cc b/crawl-ref/source/mon-pick.cc
index 01df392e72..edcb9a5ec7 100644
--- a/crawl-ref/source/mon-pick.cc
+++ b/crawl-ref/source/mon-pick.cc
@@ -1723,6 +1723,7 @@ int mons_shoals_level(int mcls)
case MONS_HARPY:
case MONS_MERFOLK_IMPALER:
case MONS_MERFOLK_AQUAMANCER:
+ case MONS_MERFOLK_JAVELINEER:
mlev += 3;
break;
@@ -1756,13 +1757,14 @@ int mons_shoals_rare(int mcls)
return 50;
case MONS_MERMAID:
- case MONS_MERFOLK_IMPALER:
return 40;
case MONS_HIPPOGRIFF:
case MONS_GIANT_BAT:
case MONS_BUTTERFLY:
case MONS_CENTAUR:
+ case MONS_MERFOLK_IMPALER:
+ case MONS_MERFOLK_JAVELINEER:
return 35;
case MONS_SIREN: