From cfdb6e14f51f38e104444acf22e17706fcda104d Mon Sep 17 00:00:00 2001 From: Darshan Shaligram Date: Tue, 29 Dec 2009 17:56:26 +0530 Subject: Add merfolk javelineers to the Shoals, add descriptions for the three new merfolk types. --- crawl-ref/source/dat/descript/monsters.txt | 14 ++++++++- crawl-ref/source/enum.h | 1 + crawl-ref/source/mon-act.cc | 7 ++++- crawl-ref/source/mon-data.h | 24 +++++++++++---- crawl-ref/source/mon-gear.cc | 49 ++++++++++++++++++------------ crawl-ref/source/mon-pick.cc | 4 ++- 6 files changed, 71 insertions(+), 28 deletions(-) (limited to 'crawl-ref') 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: -- cgit v1.2.3-54-g00ecf