From e47db99b5c0e09041d8747b8aad9ce04ae7313dd Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Sat, 7 Nov 2009 09:55:41 +1000 Subject: New unique: Aizul, disgraced guardian naga turned naga warrior. Casts Venom Bolt, Blink Other, Ensorcelled Hibernation, Slow and heals himself. Comes with a ruby-red naga barding, a shield, and a chance of a very nice weapon. Can appear on Snake:4 and Snake:5, and also on similar dungeon levels to Margery and co. Backstory: the guardian of a horde of treasure who fell asleep on the job. Thieves raided the place, and he was disgraced and kicked out. Turned to the role of a warrior, seeking redemption through battle. Currently, there's something weird with the debug build at 'xv' for monster description not displaying the right information all the time. --- crawl-ref/source/dat/database/monspeak.txt | 34 ++++++++++++++++++++++++++++++ crawl-ref/source/dat/database/quotes.txt | 8 +++++++ crawl-ref/source/dat/descript/monsters.txt | 4 ++++ crawl-ref/source/dungeon.cc | 8 ++++++- crawl-ref/source/enum.h | 4 +++- crawl-ref/source/makeitem.cc | 18 ++++++++++++++++ crawl-ref/source/mon-data.h | 12 +++++++++++ crawl-ref/source/mon-spll.h | 11 ++++++++++ crawl-ref/source/monster.cc | 3 ++- 9 files changed, 99 insertions(+), 3 deletions(-) diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt index be6c40cd1c..29040628a5 100644 --- a/crawl-ref/source/dat/database/monspeak.txt +++ b/crawl-ref/source/dat/database/monspeak.txt @@ -1045,6 +1045,40 @@ _player_ghost_rare_ # Unique monsters ####################################### %%%% +Aizul + +@_Aizul_common_@ + +w:5 + +@_Aizul_rare_@ +%%%% +_Aizul_common_ + +VISUAL:@The_monster@ yawns, and then pretends he didn't. + +@The_monster@ says, "Feeling sleepy?" + +@The_monster@ says, "I wasn't actually sleeping!" + +VISUAL:@The_monster@ grinds his teeth. + +@The_monster@ screams @at_foe@, "I'll haunt your nightmares!" +%%%% +_Aizul_rare_ + +@The_monster@ says, "Sweet dreams!" + +@The_monster@ hums a lullaby. + +VISUAL:@The_monster@ stretches carefully. + +@The_monster@ says, "Everybody has to sleep sometimes." + +@The_monster@ says @to_foe@, "Fancy a snooze?" + +VISUAL:@The_monster@ winks several times @at_foe@. +%%%% ############ AGNES ### She is trying to get money and treasure Agnes diff --git a/crawl-ref/source/dat/database/quotes.txt b/crawl-ref/source/dat/database/quotes.txt index 0e700f14ea..92e37a8e0f 100644 --- a/crawl-ref/source/dat/database/quotes.txt +++ b/crawl-ref/source/dat/database/quotes.txt @@ -392,6 +392,14 @@ __cap-T_suffix A laidly Trold has dragged it there." -George Borrow, _Lavengro_ %%%% +Aizul + +"I went to Heaven -- + 'Twas a small Town -- + Lit -- with a Ruby -- + Lathed -- with Down --" + -Emily Dickinson, _I went to Heaven_ +%%%% Antaeus "That country was then ruled by Antaeus, son of Poseidon, who used to diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt index ecbe93800c..d099061810 100644 --- a/crawl-ref/source/dat/descript/monsters.txt +++ b/crawl-ref/source/dat/descript/monsters.txt @@ -8,6 +8,10 @@ __(_suffix_examine It has been enchanted to dance through the air and attack under its own power. %%%% +Aizul + +Once the guardian of a legendary treasure hoard, he was disgraced after thieves looted it while he slept. Left without a purpose he now slithers aimlessly from place to place, seeking redemption on the field of battle. +%%%%% Agnes A lanky warrior, she moves at a great pace and carries an exotic weapon. diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index d818a7f5ea..c9e3642688 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -3375,7 +3375,8 @@ static monster_type _choose_unique_by_depth(int step) default: ret = random_choose(MONS_FRANCIS, MONS_FRANCES, MONS_WAYNE, MONS_DUANE, MONS_XTAHUA, MONS_NORRIS, MONS_FREDERICK, MONS_NIKOLA, - MONS_MARGERY, MONS_BORIS, MONS_SAINT_ROKA, -1); + MONS_MARGERY, MONS_BORIS, MONS_SAINT_ROKA, MONS_AIZUL, + -1); } return static_cast(ret); @@ -3400,6 +3401,11 @@ static monster_type _pick_unique(int lev) else return MONS_NO_MONSTER; } + else if (player_in_branch(BRANCH_SNAKE_PIT)) + { + if (player_branch_depth() > 3 && coinflip()) + return MONS_AIZUL; + } // First, pick generic unique depending on depth. int which_unique = diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 38249fff2c..4ea0c4fce5 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2060,6 +2060,7 @@ enum monster_type // (int) menv[].type // New set of monsters {november, 2009} MONS_GOLDEN_EYE, + MONS_AIZUL, // Testing monsters MONS_TEST_SPAWNER, @@ -2300,7 +2301,8 @@ enum mon_spellbook_type MST_MAURICE, MST_KHUFU, MST_NIKOLA, - MST_DISSOLUTION, + MST_DISSOLUTION, // 170 + MST_AIZUL, MST_TEST_SPAWNER = 200, NUM_MSTYPES, diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc index 17b6e1a314..48b12b2c3f 100644 --- a/crawl-ref/source/makeitem.cc +++ b/crawl-ref/source/makeitem.cc @@ -3502,6 +3502,16 @@ static item_make_species_type _give_weapon(monsters *mon, int level, do_curse_item(item); break; + case MONS_AIZUL: + if (one_chance_in(3)) + level = MAKE_GOOD_ITEM; + + item_race = MAKE_ITEM_NO_RACE; + item.base_type = OBJ_WEAPONS; + item.sub_type = random_choose(WPN_HALBERD, WPN_SCIMITAR, WPN_GREAT_MACE, + WPN_LONG_SWORD, WPN_EVENINGSTAR, -1); + break; + case MONS_GNOLL: case MONS_OGRE_MAGE: case MONS_NAGA_WARRIOR: @@ -4387,6 +4397,7 @@ void give_shield(monsters *mon, int level) make_item_for_monster(mon, OBJ_ARMOUR, ARM_LARGE_SHIELD, level * 2 + 1, MAKE_ITEM_RANDOM_RACE, 1); break; + case MONS_AIZUL: case MONS_DONALD: make_item_for_monster(mon, OBJ_ARMOUR, ARM_SHIELD, level * 2 + 1, MAKE_ITEM_RANDOM_RACE, 1); @@ -4675,6 +4686,13 @@ void give_armour(monsters *mon, int level) force_colour = LIGHTCYAN; break; + case MONS_AIZUL: + item_race = MAKE_ITEM_NO_RACE; + item.base_type = OBJ_ARMOUR; + item.sub_type = ARM_NAGA_BARDING; + force_colour = RED; + break; + default: return; } diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 206d420934..80983c2fb2 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -4267,6 +4267,18 @@ static monsterentry mondata[] = { HT_LAND, FL_NONE, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM }, +{ + MONS_AIZUL, 'N', LIGHTMAGENTA, "Aizul", + M_FIGHTER | M_SPELLCASTER | M_SEE_INVIS | M_WARM_BLOOD | M_SPEAKS + | M_ACTUAL_SPELLS | M_UNIQUE, + MR_RES_POISON, + 750, 10, MONS_NAGA, MONS_GUARDIAN_NAGA, MH_NATURAL, -6, + { {AT_HIT, AF_PLAIN, 28}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, + { 14, 0, 0, 142 }, + 6, 16, MST_AIZUL, CE_MUTAGEN_RANDOM, Z_NOZOMBIE, S_SHOUT, I_HIGH, + HT_LAND, FL_NONE, 15, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_LARGE +}, + // human uniques ('@') { MONS_TERENCE, '@', LIGHTCYAN, "Terence", diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h index 4c0befd8d3..7971b99276 100644 --- a/crawl-ref/source/mon-spll.h +++ b/crawl-ref/source/mon-spll.h @@ -1264,6 +1264,17 @@ } }, + { MST_AIZUL, + { + SPELL_VENOM_BOLT, + SPELL_BLINK_OTHER, + SPELL_SLEEP, + SPELL_VENOM_BOLT, + SPELL_SLOW, + SPELL_MINOR_HEALING + } + }, + { MST_TEST_SPAWNER, { SPELL_SHADOW_CREATURES, diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc index e3d6ac58bd..f886e0699a 100644 --- a/crawl-ref/source/monster.cc +++ b/crawl-ref/source/monster.cc @@ -1478,7 +1478,8 @@ bool monsters::pickup_armour(item_def &item, int near, bool force) switch (item.sub_type) { case ARM_NAGA_BARDING: - if (::mons_species(this->type) == MONS_NAGA) + if (::mons_species(this->type) == MONS_NAGA + || ::mons_species(this->type) == MONS_GUARDIAN_NAGA) eq = EQ_BODY_ARMOUR; break; case ARM_CENTAUR_BARDING: -- cgit v1.2.3-54-g00ecf