summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-03-25 09:46:42 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-03-25 09:46:42 +0000
commitc500c6b3582877a10bd362722bde81eb9b94b917 (patch)
treebffbb6ae5e21e067a7c985837901d8c1969e9aee
parentec685f4e71424403b322d3971ac68b31821fe7e1 (diff)
downloadcrawl-ref-c500c6b3582877a10bd362722bde81eb9b94b917.tar.gz
crawl-ref-c500c6b3582877a10bd362722bde81eb9b94b917.zip
Added Tiamat, a unique colourshifting draconian with a large
escort. Yes, I know she's a dragon in the source mythos. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1094 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/describe.cc7
-rw-r--r--crawl-ref/source/dungeon.cc5
-rw-r--r--crawl-ref/source/enum.h1
-rw-r--r--crawl-ref/source/mon-data.h10
-rw-r--r--crawl-ref/source/mon-util.cc20
-rw-r--r--crawl-ref/source/monplace.cc5
-rw-r--r--crawl-ref/source/monstuff.cc29
7 files changed, 65 insertions, 12 deletions
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 49805de255..da5e0ee85f 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -4540,7 +4540,7 @@ static std::string describe_draconian_colour(int species)
static std::string describe_draconian(const monsters *mon)
{
- std::string description;
+ std::string description;
const int subsp = draco_subspecies( mon );
if (subsp == MONS_DRACONIAN)
@@ -5956,6 +5956,11 @@ void describe_monsters(int class_described, unsigned char which_mons)
"A small and slimy eel, crackling with electrical discharge.";
break;
+ case MONS_TIAMAT:
+ description += "A powerful draconian. Her scales seem to shimmer "
+ "and change colour as you watch.";
+ break;
+
case MONS_DRACONIAN:
case MONS_RED_DRACONIAN:
case MONS_WHITE_DRACONIAN:
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index fe4034931d..5a1300406f 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -3041,6 +3041,7 @@ static int give_weapon(monsters *mon, int level)
case MONS_BLACK_DRACONIAN:
case MONS_YELLOW_DRACONIAN:
case MONS_PURPLE_DRACONIAN:
+ case MONS_TIAMAT:
{
item.base_type = OBJ_WEAPONS;
@@ -3579,6 +3580,7 @@ void give_armour(monsters *mon, int level)
case MONS_DRACONIAN_MONK:
case MONS_DRACONIAN_ZEALOT:
case MONS_DRACONIAN_KNIGHT:
+ case MONS_TIAMAT:
case MONS_ORC_WIZARD:
case MONS_WIZARD:
case MONS_BLORK_THE_ORC:
@@ -4739,6 +4741,9 @@ static int pick_unique(int lev)
{
which_unique = MONS_MURRAY;
}
+
+ if (player_in_branch(BRANCH_HALL_OF_ZOT) && one_chance_in(3))
+ which_unique = MONS_TIAMAT;
return (which_unique);
}
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 3ebb6c03fc..f574919992 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -2145,6 +2145,7 @@ enum monster_type // (int) menv[].type
MONS_DRACONIAN_SCORCHER,
MONS_MURRAY,
+ MONS_TIAMAT,
// The Lords of Hell:
MONS_GERYON = 340, // 340
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index c4cfbb822c..9fc3ea4c96 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -4402,5 +4402,15 @@
MONUSE_NOTHING, SIZE_TINY
}
,
+{
+ MONS_TIAMAT, 'd', MAGENTA, "Tiamat",
+ M_HUMANOID | M_SEE_INVIS | M_EVIL | M_UNIQUE,
+ MR_NO_FLAGS,
+ 0, 10, MONS_DRACONIAN, MONS_DRACONIAN, MH_NATURAL, -5,
+ { {AT_HIT, AF_PLAIN, 20}, {AT_HIT, AF_PLAIN, 5}, {AT_HIT, AF_PLAIN, 5} },
+ { 22, 0, 0, 200 },
+ 8, 10, 10, 10, MST_NO_SPELLS, CE_NOCORPSE, Z_SMALL, S_ROAR, I_HIGH,
+ MONUSE_STARTING_EQUIPMENT, SIZE_MEDIUM
+},
#endif
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 0ef81ef438..d7a3e922b0 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -476,6 +476,25 @@ monster_type draco_subspecies( const monsters *mon )
{
ASSERT( mons_genus( mon->type ) == MONS_DRACONIAN );
+ if ( mon->type == MONS_TIAMAT )
+ {
+ switch ( mon->colour )
+ {
+ case RED:
+ return MONS_RED_DRACONIAN;
+ case WHITE:
+ return MONS_WHITE_DRACONIAN;
+ case DARKGREY: // black
+ return MONS_BLACK_DRACONIAN;
+ case GREEN:
+ return MONS_GREEN_DRACONIAN;
+ case MAGENTA:
+ return MONS_PURPLE_DRACONIAN;
+ default:
+ break;
+ }
+ }
+
monster_type ret = mons_species( mon->type );
if (ret == MONS_DRACONIAN && mon->type != MONS_DRACONIAN)
@@ -2250,6 +2269,7 @@ const char *mons_pronoun(int mon_type, int variant)
case MONS_MARGERY:
case MONS_EROLCHA:
case MONS_ERICA:
+ case MONS_TIAMAT:
gender = GENDER_FEMALE;
break;
default:
diff --git a/crawl-ref/source/monplace.cc b/crawl-ref/source/monplace.cc
index 4ffaf59650..66ac729387 100644
--- a/crawl-ref/source/monplace.cc
+++ b/crawl-ref/source/monplace.cc
@@ -874,6 +874,11 @@ static int choose_band( int mon_type, int power, int &band_size )
band_size = random_range(3, 6);
}
break;
+ case MONS_TIAMAT:
+ band = BAND_DRACONIAN;
+ // yup, scary
+ band_size = random_range(3,6) + random_range(3,6) + 2;
+ break;
} // end switch
if (band != BAND_NO_BAND && band_size == 0)
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 53c015fef6..22374c4f0c 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -2758,19 +2758,19 @@ static int get_draconian_breath_spell( struct monsters *monster )
default:
break;
}
+ }
- if (draco_breath != MS_NO_SPELL)
- {
- // [ds] Check line-of-fire here. It won't happen elsewhere.
- bolt beem;
- setup_mons_cast(monster, beem, draco_breath);
-
- fire_tracer(monster, beem);
-
- if (!mons_should_fire(beem))
- draco_breath = MS_NO_SPELL;
- }
+ if (draco_breath != MS_NO_SPELL)
+ {
+ // [ds] Check line-of-fire here. It won't happen elsewhere.
+ bolt beem;
+ setup_mons_cast(monster, beem, draco_breath);
+
+ fire_tracer(monster, beem);
+
+ if (!mons_should_fire(beem))
+ draco_breath = MS_NO_SPELL;
}
return (draco_breath);
@@ -3391,6 +3391,13 @@ static void handle_monster_move(int i, monsters *monster)
}
}
+ if (monster->type == MONS_TIAMAT && one_chance_in(3) )
+ {
+ int cols[] = { RED, WHITE, DARKGREY, GREEN, MAGENTA };
+ int newcol = cols[random2(sizeof(cols) / sizeof(cols[0]))];
+ monster->colour = newcol;
+ }
+
if (handle_enchantment(monster))
continue;