summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorSteve Melenchuk <smelenchuk@gmail.com>2014-01-30 23:05:46 -0700
committerSteve Melenchuk <smelenchuk@gmail.com>2014-02-03 10:14:54 -0700
commitc38a8f9b011df56edcb22021fdd05f7badba1c87 (patch)
tree7e4d8deff2dac38f775c9554633476254fa3e7ba /crawl-ref/source
parent0d6a4c4d1c46134dfc4e5910cf4404a7904b9e4a (diff)
downloadcrawl-ref-c38a8f9b011df56edcb22021fdd05f7badba1c87.tar.gz
crawl-ref-c38a8f9b011df56edcb22021fdd05f7badba1c87.zip
Unique: Vashnia, leader of the elite marksnaga squad.
An HD 16 naga sharpshooter who also comes with various Blink spells, inherent Phase Shift, and a Shroud of Golubria that she can renew if it gets broken. Appears on Snake:2-. Historical note: Vashnia's original design had Disjunction as an escape spell; currently the escape spell is Blink Other, which accomplishes basically the same thing but with less visual impressiveness. Perhaps at a later date the possibility of this can be revisited.
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/dat/database/monspeak.txt58
-rw-r--r--crawl-ref/source/dat/des/builder/uniques.des5
-rw-r--r--crawl-ref/source/dat/descript/monsters.txt5
-rw-r--r--crawl-ref/source/enum.h2
-rw-r--r--crawl-ref/source/mgen_enum.h1
-rw-r--r--crawl-ref/source/mon-data.h15
-rw-r--r--crawl-ref/source/mon-gear.cc24
-rw-r--r--crawl-ref/source/mon-place.cc8
-rw-r--r--crawl-ref/source/mon-spll.h11
-rw-r--r--crawl-ref/source/mon-util.cc1
-rw-r--r--crawl-ref/source/rltiles/dc-mon.txt1
-rw-r--r--crawl-ref/source/rltiles/mon/unique/vashnia.pngbin0 -> 527 bytes
-rw-r--r--crawl-ref/source/tilemcache.cc2
-rw-r--r--crawl-ref/source/tilepick.cc4
14 files changed, 133 insertions, 4 deletions
diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt
index 85766c9e1c..6cdca9ab58 100644
--- a/crawl-ref/source/dat/database/monspeak.txt
+++ b/crawl-ref/source/dat/database/monspeak.txt
@@ -6174,6 +6174,64 @@ VISUAL:@The_monster@ winks @at_foe@... or blinks.
@The_monster@ mutters, "Sometimes I wonder if they all really are harpies."
## END Urug ##
%%%%
+############ VASHNIA ### An elite marksnaga
+Vashnia
+
+@_Vashnia_common_@
+
+w:5
+@_Vashnia_rare_@
+
+w:5
+@_Vashnia_nonnaga_@
+%%%%
+
+related Vashnia
+
+@_Vashnia_common_@
+
+w:5
+@_Vashnia_rare_@
+
+w:5
+@_Vashnia_naga_@
+%%%%
+_Vashnia_common_
+
+VISUAL:@The_monster@ makes some cryptic hand gestures, then points @at_foe@.
+
+VISUAL:@The_monster@ takes aim @at_foe@.
+
+VISUAL:Space seems to twist oddly around @the_monster@.
+
+VISUAL:@The_monster@ looks @foe@ over, as though planning @possessive@ next attack.
+
+VISUAL:@The_monster@ glares at @possessive@ squad, motioning for silence.
+%%%%
+_Vashnia_rare_
+@The_monster@ mutters @at_foe@, "Right between the eyes..."
+
+@The_monster@ says @to_foe@, "You'll make a fine pincushion."
+
+@The_monster@ says @to_foe@, "Hold still for a moment. You're making this shot difficult."
+%%%%
+_Vashnia_naga_
+
+@The_monster@ says @to_foe@, "You are a traitor to our kind!"
+
+@The_monster@ sneers @at_foe@, "Heretic!"
+
+@The_monster@ says @to_foe@, "Swear allegiance to our queen and you may yet be spared!"
+%%%%
+_Vashnia_nonnaga_
+
+@The_monster@ says @to_foe@, "Slay the @foe_genus@ at once!" @player_only@
+
+@The_monster@ says @to_foe@, "We do not look kindly on intruders!"
+
+@The_monster@ says to @possessive@ squad, "Do not let the @foe_genus@ escape!"
+## END Vashnia ##
+%%%%
############ WIGLAF ### A dwarf. Nuff said.
Wiglaf
diff --git a/crawl-ref/source/dat/des/builder/uniques.des b/crawl-ref/source/dat/des/builder/uniques.des
index 94749daf12..e4b3b8379c 100644
--- a/crawl-ref/source/dat/des/builder/uniques.des
+++ b/crawl-ref/source/dat/des/builder/uniques.des
@@ -335,6 +335,11 @@ DEPTH: Slime:2-
WEIGHT: 100
: place_unique(_G, "Dissolution")
+NAME: uniq_vashnia
+DEPTH: Snake:2-
+WEIGHT: 50
+: place_unique(_G, "Vashnia band")
+
NAME: uniq_polyphemus
DEPTH: Shoals:2-
WEIGHT: 50
diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt
index 031b0fde47..bb0d04f3be 100644
--- a/crawl-ref/source/dat/descript/monsters.txt
+++ b/crawl-ref/source/dat/descript/monsters.txt
@@ -500,6 +500,11 @@ remaining eye is not very good, and he has mistaken you for one.
end
}}
%%%%
+Vashnia
+
+An elite marksnaga who leads a skilled team of sharpshooters. She is
+particularly skilled in translocation magic.
+%%%%
Wiglaf
A fat dwarf wearing a stupid-looking hat. {{
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index d559cdaa74..184cb7674c 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -2766,6 +2766,7 @@ enum monster_type // menv[].type
#if TAG_MAJOR_VERSION > 34
MONS_ASTERION,
MONS_NATASHA,
+ MONS_VASHNIA,
#endif
MONS_IRON_ELEMENTAL,
@@ -2929,6 +2930,7 @@ enum monster_type // menv[].type
#if TAG_MAJOR_VERSION == 34
MONS_ASTERION,
MONS_NATASHA,
+ MONS_VASHNIA,
#endif
NUM_MONSTERS, // used for polymorph
diff --git a/crawl-ref/source/mgen_enum.h b/crawl-ref/source/mgen_enum.h
index 233f6c0801..93e090abcb 100644
--- a/crawl-ref/source/mgen_enum.h
+++ b/crawl-ref/source/mgen_enum.h
@@ -117,6 +117,7 @@ enum band_type
BAND_WARMONGER,
BAND_CORRUPTER,
BAND_BLACK_SUN,
+ BAND_VASHNIA,
NUM_BANDS // always last
};
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index ec534cee10..6efabe2905 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -6683,6 +6683,21 @@ static monsterentry mondata[] =
MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
},
+// "N"agas.
+{
+ MONS_VASHNIA, 'N', LIGHTCYAN, "Vashnia",
+ M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD
+ | M_ARCHER | M_PHASE_SHIFT | M_SPEAKS | M_SHROUD | M_UNIQUE,
+ MR_RES_POISON,
+ 1000, 14, MONS_NAGA, MONS_NAGA, MH_NATURAL, -6,
+ { {AT_SHOOT, AF_PLAIN, 25}, {AT_HIT, AF_PLAIN, 25},
+ {AT_CONSTRICT, AF_CRUSH, 7}, AT_NO_ATK },
+ { 16, 0, 0, 160 },
+ 6, 18, MST_VASHNIA, CE_POISONOUS, Z_NOZOMBIE, S_SHOUT,
+ I_NORMAL, HT_LAND, FL_NONE, 8, ACTION_ENERGY(8),
+ MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_LARGE
+},
+
// "O"gres.
{
MONS_EROLCHA, 'O', LIGHTBLUE, "Erolcha",
diff --git a/crawl-ref/source/mon-gear.cc b/crawl-ref/source/mon-gear.cc
index 80d10259df..cf9c58e831 100644
--- a/crawl-ref/source/mon-gear.cc
+++ b/crawl-ref/source/mon-gear.cc
@@ -615,15 +615,24 @@ static item_make_species_type _give_weapon(monster* mon, int level,
-1);
break;
+ case MONS_VASHNIA:
+ level = MAKE_GOOD_ITEM;
+ // deliberate fall-through
+
case MONS_NAGA_SHARPSHOOTER:
force_uncursed = true;
if (!melee_only)
{
item.base_type = OBJ_WEAPONS;
- item.sub_type = random_choose_weighted(3, WPN_CROSSBOW,
- 2, WPN_BOW,
- 1, WPN_LONGBOW,
- 0);
+ if (type == MONS_VASHNIA)
+ item.sub_type = coinflip() ? WPN_LONGBOW : WPN_CROSSBOW;
+ else
+ {
+ item.sub_type = random_choose_weighted(3, WPN_CROSSBOW,
+ 2, WPN_BOW,
+ 1, WPN_LONGBOW,
+ 0);
+ }
break;
}
// deliberate fall-through
@@ -2452,6 +2461,13 @@ static void _give_armour(monster* mon, int level, bool spectral_orcs)
return;
break;
+ case MONS_VASHNIA:
+ item_race = MAKE_ITEM_NO_RACE;
+ item.base_type = OBJ_ARMOUR;
+ item.sub_type = ARM_NAGA_BARDING;
+ level = MAKE_GOOD_ITEM;
+ break;
+
case MONS_TENGU_WARRIOR:
case MONS_DEMONSPAWN:
item_race = MAKE_ITEM_NO_RACE;
diff --git a/crawl-ref/source/mon-place.cc b/crawl-ref/source/mon-place.cc
index d410dc47ff..e1c5d382a6 100644
--- a/crawl-ref/source/mon-place.cc
+++ b/crawl-ref/source/mon-place.cc
@@ -2788,6 +2788,11 @@ static band_type _choose_band(monster_type mon_type, int &band_size,
band_size = 2 + random2(3);
break;
+ case MONS_VASHNIA:
+ band = BAND_VASHNIA;
+ band_size = 3 + random2(3);
+ break;
+
default: ;
}
@@ -3344,6 +3349,9 @@ static monster_type _band_member(band_type band, int which)
}
return random_demonspawn_monster_species();
+ case BAND_VASHNIA:
+ return MONS_NAGA_SHARPSHOOTER;
+
default:
die("unhandled band type %d", band);
}
diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h
index 3c99509c64..207420aeb1 100644
--- a/crawl-ref/source/mon-spll.h
+++ b/crawl-ref/source/mon-spll.h
@@ -2464,4 +2464,15 @@
SPELL_NO_SPELL
}
},
+
+ { MST_VASHNIA,
+ {
+ SPELL_PORTAL_PROJECTILE,
+ SPELL_BLINK_ALLIES_AWAY,
+ SPELL_BLINK_AWAY,
+ SPELL_PORTAL_PROJECTILE,
+ SPELL_BLINK_ALLIES_AWAY,
+ SPELL_BLINK_OTHER
+ }
+ },
#endif
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 3e5ff8d782..f76302aadf 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -3657,6 +3657,7 @@ static gender_type _mons_class_gender(monster_type mc)
case MONS_NELLIE:
case MONS_ARACHNE:
case MONS_NATASHA:
+ case MONS_VASHNIA:
gender = GENDER_FEMALE;
break;
case MONS_ROYAL_JELLY:
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
index 7fe1c813c1..c4fc10352d 100644
--- a/crawl-ref/source/rltiles/dc-mon.txt
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -721,6 +721,7 @@ mummy_priest MONS_MUMMY_PRIEST
## Nagas ('N')
%sdir mon/unique
aizul MONS_AIZUL
+vashnia MONS_VASHNIA
%sdir mon
naga MONS_NAGA
naga_mage MONS_NAGA_MAGE
diff --git a/crawl-ref/source/rltiles/mon/unique/vashnia.png b/crawl-ref/source/rltiles/mon/unique/vashnia.png
new file mode 100644
index 0000000000..a8d0711a3f
--- /dev/null
+++ b/crawl-ref/source/rltiles/mon/unique/vashnia.png
Binary files differ
diff --git a/crawl-ref/source/tilemcache.cc b/crawl-ref/source/tilemcache.cc
index f719af4af7..323e8b3913 100644
--- a/crawl-ref/source/tilemcache.cc
+++ b/crawl-ref/source/tilemcache.cc
@@ -407,6 +407,7 @@ bool mcache_monster::get_weapon_offset(tileidx_t mon_tile,
case TILEP_MONS_NAGA_MAGE:
case TILEP_MONS_NAGA_ENCHANTER:
case TILEP_MONS_MARKSNAGA:
+ case TILEP_MONS_VASHNIA:
case TILEP_MONS_THE_ENCHANTRESS:
case TILEP_MONS_DEEP_DWARF:
case TILEP_MONS_DEEP_DWARF_BERSERKER:
@@ -621,6 +622,7 @@ bool mcache_monster::get_shield_offset(tileidx_t mon_tile,
case TILEP_MONS_NAGA:
case TILEP_MONS_NAGA_MAGE:
case TILEP_MONS_MARKSNAGA:
+ case TILEP_MONS_VASHNIA:
case TILEP_MONS_NAGA_WARRIOR:
case TILEP_MONS_GREATER_NAGA:
*ofs_x = -3;
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 5aded5c837..d6ee0594e5 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -2194,6 +2194,10 @@ static tileidx_t _tileidx_monster_base(int type, bool in_water, int colour,
case MONS_AIZUL:
return TILEP_MONS_AIZUL;
+ // naga ('N')
+ case MONS_VASHNIA:
+ return TILEP_MONS_VASHNIA;
+
// ogre ('O')
case MONS_EROLCHA:
return TILEP_MONS_EROLCHA;