From 6c941f69fdac32bf183a5021a91ed0c7fc50353d Mon Sep 17 00:00:00 2001
From: gammafunk <gammafunk@gmail.com>
Date: Mon, 18 Nov 2013 23:47:58 -0600
Subject: [PATCH 1/5] Asterion, a late-game unique minotaur of Makhleb

He is themed as a bloodthirsty ruler cursed to become a minotaur who now wanders
the dungeon in the service of Makhleb and hoping to establish a new kingdom in
its depths.

The name is taken from ancient greek mythology, which was either the name of the
minotaur itself or of a king related to the minotaur:

http://en.wikipedia.org/wiki/Asterion

Thanks to SGrunt (the S is silent) for the idea of the name.

Stat-wise, Asterion is a minotaur, but with 20 HD, 175 HP, a 1d40 primary attack
(instead of 1d35), and the only resistances I've added are Sinv and high MR.
Experience and placement-wise he's the same as sojobo. He always gets a good
demon weapon, large shield, and a robe.

Spell-wise, he has Makhleb's major destruct and spectral weapon.  The major
destruct code is basically identical to the player version: it chooses randomly
from 7 beam types, including orb of electricity, with a range of 7.
---
 crawl-ref/source/dat/database/monspell.txt   |  4 ++++
 crawl-ref/source/dat/des/builder/uniques.des |  4 ++++
 crawl-ref/source/dat/descript/monsters.txt   | 10 ++++++++++
 crawl-ref/source/enum.h                      |  4 +++-
 crawl-ref/source/mon-cast.cc                 | 27 +++++++++++++++++++++++++++
 crawl-ref/source/mon-data.h                  | 13 +++++++++++++
 crawl-ref/source/mon-gear.cc                 | 18 ++++++++++++++++++
 crawl-ref/source/mon-place.cc                |  3 +++
 crawl-ref/source/mon-spll.h                  | 10 ++++++++++
 crawl-ref/source/spl-data.h                  | 26 ++++++++++++++++++++++++++
 10 files changed, 118 insertions(+), 1 deletion(-)

diff --git a/crawl-ref/source/dat/database/monspell.txt b/crawl-ref/source/dat/database/monspell.txt
index dc5e09f..0d3ae49 100644
--- a/crawl-ref/source/dat/database/monspell.txt
+++ b/crawl-ref/source/dat/database/monspell.txt
@@ -179,6 +179,10 @@ Haste Plants cast
 
 @The_monster@ empowers the plants around itself!
 %%%%
+Major Destruction cast
+
+@The_monster@ conjures a destructive force in the name of @possessive_God@!
+%%%%
 Druid's Call cast
 
 @The_monster@ calls out to the beasts of the land!
diff --git a/crawl-ref/source/dat/des/builder/uniques.des b/crawl-ref/source/dat/des/builder/uniques.des
index c0c1f6d..502c061 100644
--- a/crawl-ref/source/dat/des/builder/uniques.des
+++ b/crawl-ref/source/dat/des/builder/uniques.des
@@ -390,6 +390,10 @@ NAME:   uniq_sojobo
 DEPTH:  Depths, Vaults:2-, Crypt, Forest, Blade, Tomb
 : place_unique(_G, "Sojobo band")
 
+NAME:   uniq_asterion
+DEPTH:  Depths, Swamp:$, Snake:$, Shoals:$, Spider:$, Vaults:2-, Crypt, Forest, Blade, Tomb
+: place_unique(_G, "Asterion")
+
 ###############################################################################
 # Crazy Yiuf! Only in his cottage.
 NAME:    uniq_crazy_yiuf_cottage
diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt
index 8f4078e..5f2fd03 100644
--- a/crawl-ref/source/dat/descript/monsters.txt
+++ b/crawl-ref/source/dat/descript/monsters.txt
@@ -61,6 +61,16 @@ Asmodeus
 
 One of the arch-demons who dwell in the depths of Hell, wreathed in fire.
 %%%%
+Asterion
+
+Once a king infamous for waging bloodthirsty campaigns, Asterion was transformed
+into a horrible minotaur by the curse of a clever wizard-for-hire. Shunned and
+exiled from his land, he now wanders the dungeon clothed in tattered finery,
+hoping to establish a new kindgom in its depths by any means necessary.
+
+These aspirations are appreciated by Makhleb, who has granted the minotaur
+destructive magic and the aid of demonic weaponry.
+%%%%
 Azrael
 
 A powerful, belligerent efreet. (Is there any other kind?)
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 953997e..216fbed 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -2838,7 +2838,7 @@ enum monster_type                      // menv[].type
 #endif
     MONS_FORMICID_VENOM_MAGE,
     MONS_RAIJU,
-
+    MONS_ASTERION,
 #if TAG_MAJOR_VERSION == 34
     MONS_DRAGON,                // genus
     MONS_SNAKE,                 // genus
@@ -3723,6 +3723,8 @@ enum spell_type
     SPELL_SHAFT_SELF,
 #endif
     SPELL_BLINKBOLT,
+    SPELL_ORB_OF_ELECTRICITY,
+    SPELL_MAJOR_DESTRUCTION,
     NUM_SPELLS
 };
 
diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc
index c424aaa..5348c60 100644
--- a/crawl-ref/source/mon-cast.cc
+++ b/crawl-ref/source/mon-cast.cc
@@ -284,6 +284,19 @@ bolt mons_spell_beam(monster* mons, spell_type spell_cast, int power,
     if (spell_cast == SPELL_DRACONIAN_BREATH)
         real_spell = _draco_type_to_breath(drac_type);
 
+    if (spell_cast == SPELL_MAJOR_DESTRUCTION)
+    {
+        switch (random2(7))
+        {
+        case 0: real_spell = SPELL_BOLT_OF_FIRE;       break;
+        case 1: real_spell = SPELL_FIREBALL;           break;
+        case 2: real_spell = SPELL_LIGHTNING_BOLT;     break;
+        case 3: real_spell = SPELL_STICKY_FLAME;       break;
+        case 4: real_spell = SPELL_IRON_SHOT;          break;
+        case 5: real_spell = SPELL_BOLT_OF_DRAINING;   break;
+        case 6: real_spell = SPELL_ORB_OF_ELECTRICITY; break;
+        }
+    }
     beam.glyph = dchar_glyph(DCHAR_FIRED_ZAP); // default
     beam.thrower = KILL_MON_MISSILE;
     beam.origin_spell = real_spell;
@@ -512,6 +525,17 @@ bolt mons_spell_beam(monster* mons, spell_type spell_cast, int power,
         beam.is_beam  = true;
         break;
 
+    case SPELL_ORB_OF_ELECTRICITY:
+        beam.name          = "orb of electricity";
+        beam.damage        = dice_def(3, 7 + power / 10);
+        beam.colour        = LIGHTCYAN;
+        beam.flavour       = BEAM_ELECTRICITY;
+        beam.hit           = 40;
+        beam.foe_ratio     = 80;
+        beam.ex_size       = 2;
+        beam.is_explosion  = true;
+        break;
+
     case SPELL_INVISIBILITY:
         beam.flavour  = BEAM_INVISIBILITY;
         break;
@@ -5028,8 +5052,11 @@ void mons_cast(monster* mons, bolt &pbolt, spell_type spell_cast,
         _do_high_level_summon(mons, monsterNearby, spell_cast,
                               _pick_vermin, one_chance_in(4) ? 3 : 2 , god);
         return;
+
     }
 
+
+
     // If a monster just came into view and immediately cast a spell,
     // we need to refresh the screen before drawing the beam.
     viewwindow();
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 2ea68e5..78653ea 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -6275,6 +6275,19 @@ static monsterentry mondata[] =
     MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
 },
 
+{
+    MONS_ASTERION, 'H', LIGHTRED, "Asterion",
+    M_FIGHTER | M_PRIEST | M_ACTUAL_SPELLS | M_HYBRID | M_WARM_BLOOD | M_SPEAKS
+        | M_SEE_INVIS | M_UNIQUE,
+    MR_NO_FLAGS,
+    900, 18, MONS_MINOTAUR, MONS_MINOTAUR, MH_NATURAL, -5,
+    { {AT_HIT, AF_PLAIN, 40}, {AT_GORE, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
+    { 20, 3, 5, 175 },
+    5, 7, MST_ASTERION, CE_CONTAMINATED, Z_SMALL, S_BELLOW,
+    I_HIGH, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY,
+    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
 // Spr"i"ggans.
 {
     MONS_AGNES, 'i', LIGHTCYAN, "Agnes",
diff --git a/crawl-ref/source/mon-gear.cc b/crawl-ref/source/mon-gear.cc
index 1facba3..7442ff5 100644
--- a/crawl-ref/source/mon-gear.cc
+++ b/crawl-ref/source/mon-gear.cc
@@ -1463,6 +1463,16 @@ static item_make_species_type _give_weapon(monster* mon, int level,
         level = MAKE_GOOD_ITEM;
         break;
 
+    case MONS_ASTERION:
+        item_race = MAKE_ITEM_NO_RACE;
+        item.base_type = OBJ_WEAPONS;
+        item.sub_type = random_choose(WPN_DEMON_WHIP,
+                                      WPN_DEMON_BLADE,
+                                      WPN_DEMON_TRIDENT,
+                                      -1);
+        level = MAKE_GOOD_ITEM;
+        break;
+
     default:
         break;
     }
@@ -1787,6 +1797,7 @@ static void _give_shield(monster* mon, int level)
     {
     case MONS_DAEVA:
     case MONS_MENNAS:
+    case MONS_ASTERION:
         make_item_for_monster(mon, OBJ_ARMOUR, ARM_LARGE_SHIELD,
                               level * 2 + 1, MAKE_ITEM_NO_RACE, 1);
         break;
@@ -2135,6 +2146,13 @@ static void _give_armour(monster* mon, int level, bool spectral_orcs)
         item.sub_type  = random_choose(ARM_CHAIN_MAIL, ARM_PLATE_ARMOUR, -1);
         break;
 
+    case MONS_ASTERION:
+        level = MAKE_GOOD_ITEM;
+        item_race = MAKE_ITEM_NO_RACE;
+        item.base_type = OBJ_ARMOUR;
+        item.sub_type  = ARM_ROBE;
+        break;
+
     case MONS_VAULT_SENTINEL:
     case MONS_IRONBRAND_CONVOKER:
         item.base_type = OBJ_ARMOUR;
diff --git a/crawl-ref/source/mon-place.cc b/crawl-ref/source/mon-place.cc
index b4d1ca9..130db3a 100644
--- a/crawl-ref/source/mon-place.cc
+++ b/crawl-ref/source/mon-place.cc
@@ -1338,6 +1338,9 @@ static monster* _place_monster_aux(const mgen_data &mg, const monster *leader,
         // Wiglaf belongs to Okawaru.
         else if (mg.cls == MONS_WIGLAF)
             mon->god = GOD_OKAWARU;
+        // Asterion belongs to Mahkleb.
+        else if (mg.cls == MONS_ASTERION)
+            mon->god = GOD_MAKHLEB;
         else
         {
             switch (mons_genus(mg.cls))
diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h
index b58e454..4918ac8 100644
--- a/crawl-ref/source/mon-spll.h
+++ b/crawl-ref/source/mon-spll.h
@@ -2223,6 +2223,16 @@
        SPELL_NO_SPELL
       }
     },
+    {  MST_ASTERION,
+      {
+       SPELL_MAJOR_DESTRUCTION,
+       SPELL_NO_SPELL,
+       SPELL_NO_SPELL,
+       SPELL_SPECTRAL_WEAPON,	       
+       SPELL_NO_SPELL,
+       SPELL_NO_SPELL
+      }
+    },
 
     {  MST_IGNIS,
       {
diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h
index cdcb3a2..f75fdd8 100644
--- a/crawl-ref/source/spl-data.h
+++ b/crawl-ref/source/spl-data.h
@@ -3314,6 +3314,32 @@ struct spell_desc
 },
 
 {
+    SPELL_ORB_OF_ELECTRICITY, "Orb of electricity",
+     SPTYP_CONJURATION | SPTYP_AIR,
+     SPFLAG_DIR_OR_TARGET,
+     6,
+     200,
+     8, 8,
+     0,
+     NULL,
+     true,
+     false
+},
+
+{
+    SPELL_MAJOR_DESTRUCTION, "Major destruction",
+     SPTYP_CONJURATION,
+     SPFLAG_DIR_OR_TARGET,
+     7,
+     200,
+     7, 7,
+     0,
+     NULL,
+     true,
+     false
+},
+
+{
     SPELL_NO_SPELL, "nonexistent spell",
      0,
      SPFLAG_TESTING,
-- 
1.8.3.2


From 583b3d12332892b79942718ef97a20d95b3bafab Mon Sep 17 00:00:00 2001
From: Adam Borowski <kilobyte@angband.pl>
Date: Thu, 21 Nov 2013 22:31:28 +0100
Subject: [PATCH 2/5] Link/desc Asterion's spells.

---
 crawl-ref/source/dat/descript/spells.txt | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/crawl-ref/source/dat/descript/spells.txt b/crawl-ref/source/dat/descript/spells.txt
index b386c8f..ad74f6a 100644
--- a/crawl-ref/source/dat/descript/spells.txt
+++ b/crawl-ref/source/dat/descript/spells.txt
@@ -660,6 +660,10 @@ Magic Dart spell
 
 This spell hurls a small bolt of magical energy. It never misses.
 %%%%
+Major Destruction spell
+
+<Major Destruction ability>
+%%%%
 Major Healing spell
 
 This spell heals a large amount of damage to the caster's body.
@@ -781,6 +785,11 @@ It is said that most copies of this spell suffer from a scribal error that
 makes the orbs unstable beyond a short range. Certain individuals may have
 access to spellbooks without this flaw, so beware!
 %%%%
+Orb of Electricity spell
+
+This spell conjures a massive orb of electricity which instantly homes
+towards a pointed at target and explodes doing tremendous damage.
+%%%%
 Ozocubu's Armour spell
 
 This spell envelops the caster's body in a protective layer of ice, the power
-- 
1.8.3.2


From ef296088ba80b57fb51e5cadd9c053408ffe2925 Mon Sep 17 00:00:00 2001
From: Adam Borowski <kilobyte@angband.pl>
Date: Thu, 21 Nov 2013 22:42:55 +0100
Subject: [PATCH 3/5] Replace Frances by Asterion.

---
 crawl-ref/source/dat/database/monspeak.txt         |  49 ---------------------
 crawl-ref/source/dat/database/monspell.txt         |  10 -----
 crawl-ref/source/dat/des/builder/uniques.des       |   4 --
 crawl-ref/source/dat/des/sprint/linesprint.des     |   2 +-
 crawl-ref/source/dat/des/sprint/pitsprint.des      |   4 +-
 crawl-ref/source/dat/des/sprint/sprint_mu.des      |   3 +-
 .../source/dat/des/variable/mini_monsters.des      |   2 +-
 crawl-ref/source/dat/descript/monsters.txt         |   7 ---
 crawl-ref/source/enum.h                            |   3 +-
 crawl-ref/source/mon-data.h                        |  13 ------
 crawl-ref/source/mon-gear.cc                       |   2 -
 crawl-ref/source/mon-spll.h                        |  11 -----
 crawl-ref/source/mon-util.cc                       |   1 -
 crawl-ref/source/rltiles/dc-mon.txt                |   1 -
 crawl-ref/source/rltiles/mon/unique/frances.png    | Bin 893 -> 0 bytes
 crawl-ref/source/tilemcache.cc                     |   1 -
 crawl-ref/source/tilepick.cc                       |   2 -
 crawl-ref/source/zotdef.cc                         |   6 +--
 18 files changed, 9 insertions(+), 112 deletions(-)
 delete mode 100644 crawl-ref/source/rltiles/mon/unique/frances.png

diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt
index 0d9d3f0..09e6f4d 100644
--- a/crawl-ref/source/dat/database/monspeak.txt
+++ b/crawl-ref/source/dat/database/monspeak.txt
@@ -3957,55 +3957,6 @@ SPELL:@The_monster@ calls on the powers of shadow!
 @The_monster@ brags, "I can call spirits from the vasty deep."
 ## END Eustachio ##
 %%%%
-############ FRANCES ### A warrior who bested a Pandemonium Lord
-Frances
-
-@_Frances_common_@
-
-w:5
-@_Frances_rare_@
-%%%%
-_Frances_common_
-
-VISUAL:@The_monster@ sneers @at_foe@.
-
-VISUAL:@The_monster@ runs a finger over @possessive@ scar.
-
-ENCHANT:@The_monster@ speaks in an indecipherable language.
-
-ENCHANT:@The_monster@ mutters a nigh-unspeakable word.
-
-@The_monster@ says, "Show me proof of your conquests, and I will call you a great adventurer." @player_only@
-
-@The_monster@ says, "I command an army of devils. What do you command?" @player_only@
-
-@The_monster@ says, "I value strength and power. I see none of this in you." @player_only@
-
-@The_monster@ says, "I speak the language of demons!"
-
-@The_monster@ howls an indescribable curse.
-
-@The_monster@ says, "I have seen worlds and universes beyond all imagining."
-%%%%
-_Frances_rare_
-
-VISUAL:@The_monster@ takes a defensive stance.
-
-ENCHANT:@The_monster@ growls a series of guttural syllables.
-
-@The_monster@ says, "There is a strange beauty in the demonic, don't you think?"
-
-@The_monster@ says, "Would you challenge me, knowing my power?"
-
-@The_monster@ says, "I am undefeated in single-handed combat."
-
-@The_monster@ says, "Warriors are made for war and combat. Do you call yourself a warrior?"
-
-w:1
-@The_monster@ says, "Even the Halls of Hell could not contain me."
-
-@The_monster@ says, "I will defeat you, of this I have no doubt!" @player_only@
-%%%%
 ############ FREDERICK ### A mercenary guarding the dungeon
 Frederick
 
diff --git a/crawl-ref/source/dat/database/monspell.txt b/crawl-ref/source/dat/database/monspell.txt
index 0d3ae49..dc17776 100644
--- a/crawl-ref/source/dat/database/monspell.txt
+++ b/crawl-ref/source/dat/database/monspell.txt
@@ -257,16 +257,6 @@ Volley of Thorns cast
 # Unique monsters
 ########################################################################
 %%%%
-Frances cast
-
-@The_monster@ mutters in a terrible tongue.
-
-@The_monster@ whispers indecipherable words.
-
-@The_monster@ chants phrases taken from a Devil's mouth.
-
-@The_monster@ screams a word of power!
-%%%%
 Gastronok cast targeted
 
 @The_monster@ looks at @target@ while chanting.
diff --git a/crawl-ref/source/dat/des/builder/uniques.des b/crawl-ref/source/dat/des/builder/uniques.des
index 502c061..3edd463 100644
--- a/crawl-ref/source/dat/des/builder/uniques.des
+++ b/crawl-ref/source/dat/des/builder/uniques.des
@@ -148,10 +148,6 @@ NAME:   uniq_eustachio
 DEPTH:  D:4-10, Orc:1-2
 : place_unique(_G, "Eustachio")
 
-NAME:   uniq_frances
-DEPTH:  Depths, Elf:2-, Swamp:2-, Snake:2-, Shoals:2-, Spider:2-, Vaults, Crypt, Forest, Blade, Tomb
-: place_unique(_G, "Frances")
-
 NAME:   uniq_frederick
 DEPTH:  Depths:3-, Vaults:2-, Crypt, Forest, Blade, Tomb
 : place_unique(_G, "Frederick")
diff --git a/crawl-ref/source/dat/des/sprint/linesprint.des b/crawl-ref/source/dat/des/sprint/linesprint.des
index 3ac8a6a..d951d1c 100644
--- a/crawl-ref/source/dat/des/sprint/linesprint.des
+++ b/crawl-ref/source/dat/des/sprint/linesprint.des
@@ -91,7 +91,7 @@ KMONS:     a = Erica / Erolcha / Eustachio / Gastronok / Grum band /\
                Harold / Joseph / Josephine band / Maurice / Psyche /\
                Sonja / Urug
 NSUBST:    a = 1:a. / 1:a.. / 1:a... / 1:a.... / * = .:70 a:1
-KMONS:     b = Agnes / Aizul / Azrael band / Donald / Frances / Kirke band /\
+KMONS:     b = Agnes / Aizul / Azrael band / Donald / Asterion / Kirke band /\
                Maud / Nergalle / Nessos / Rupert / Saint Roka band / Snorg /\
                Wiglaf
 NSUBST:    b = 1:b. / 1:b.. / 1:ba.. / 1:baa.. / * = .:70 b:1
diff --git a/crawl-ref/source/dat/des/sprint/pitsprint.des b/crawl-ref/source/dat/des/sprint/pitsprint.des
index 679a1a9..02fcfa9 100644
--- a/crawl-ref/source/dat/des/sprint/pitsprint.des
+++ b/crawl-ref/source/dat/des/sprint/pitsprint.des
@@ -109,7 +109,7 @@ function base_monster_setup(e)
            Prince Ribbit")
   e.kmons("I = Erica / Erolcha / Eustachio / Gastronok / Grum band / Harold /\
            Joseph / Josephine band / Maurice / Psyche / Sonja / Urug")
-  e.kmons("J = Agnes / Aizul / Azrael band / Donald / Frances / Kirke band /\
+  e.kmons("J = Agnes / Aizul / Azrael band / Donald / Asterion / Kirke band /\
            Maud / Nergalle / Nessos / Ilsuiw band / Arachne /\
            Polyphemus / Rupert / Saint Roka band / Snorg / Wiglaf")
   e.kmons("K = Louise / Nikola / Norris / Frederick / Boris / Margery band /\
@@ -508,7 +508,7 @@ function coven_setup(e)
         deep elf demonologist / deep elf high priest / nonbase draconian w:20 /\
         sphinx / lich / ancient lich w:3 / wizard / ogre mage / vampire mage /\
         naga mage / greater naga / base draconian w:20")
-  e.kmons("9 = Frederick / Margery band / Boris / Norris / Frances")
+  e.kmons("9 = Frederick / Margery band / Boris / Norris / Asterion")
   e.kfeat("v = green_crystal_wall")
   e.colour("v = green")
   e.tile("v = wall_emerald")
diff --git a/crawl-ref/source/dat/des/sprint/sprint_mu.des b/crawl-ref/source/dat/des/sprint/sprint_mu.des
index efe30d5..d73264e 100644
--- a/crawl-ref/source/dat/des/sprint/sprint_mu.des
+++ b/crawl-ref/source/dat/des/sprint/sprint_mu.des
@@ -819,9 +819,8 @@ KMONS: a = patrolling Harold hd:15 hp:100 \
 KMONS: b = patrolling Joseph hd:5 hp:150 ; quarterstaff ego:freezing \
  . blowgun . needle ego:curare q:7
 : else
-# changed Francis to Wiglaf for now
 KMONS: a = patrolling Wiglaf hp:100 ; war axe ego:holy_wrath
-KMONS: b = patrolling Frances hp:150 ; war axe ego:holy_wrath \
+KMONS: b = patrolling Asterion hp:150 ; war axe ego:holy_wrath \
  . blowgun . needle ego:curare q:7
 :end
 KITEM: & = lamp of fire, scroll of acquirement ident:all, \
diff --git a/crawl-ref/source/dat/des/variable/mini_monsters.des b/crawl-ref/source/dat/des/variable/mini_monsters.des
index fa5e644..2885660 100644
--- a/crawl-ref/source/dat/des/variable/mini_monsters.des
+++ b/crawl-ref/source/dat/des/variable/mini_monsters.des
@@ -5239,7 +5239,7 @@ KMONS: G = Donald / hell knight
 #KMONS: H = Jozef / hell knight
 KMONS: I = Louise / wizard; long sword . robe | leather armour . shield
 KMONS: J = Maud / necromancer; great sword . robe | leather armour
-KMONS: K = Frances / deep elf knight
+KMONS: K = Asterion / deep elf knight
 KMONS: L = Agnes / deep elf knight
 KMONS: M = Rupert / vampire knight
 KMONS: N = Wiglaf / vault guard
diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt
index 5f2fd03..5f544d0 100644
--- a/crawl-ref/source/dat/descript/monsters.txt
+++ b/crawl-ref/source/dat/descript/monsters.txt
@@ -173,13 +173,6 @@ Eustachio
 An apprentice summoner with a flowing moustache. He has funny ideas about
 honour.
 %%%%
-Frances
-
-A stout warrior who once bested a powerful lord of Pandemonium in combat,
-gaining control over the demon's realm and thanes. The battle left her with a
-deep facial scar, one that she carries as a badge of honour rather than a
-symbol of shame.
-%%%%
 Frederick
 
 A svelte fighter-mage who wears a gold-rimmed monocle and seeks a suitable and
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 216fbed..4bab585 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -2668,7 +2668,7 @@ enum monster_type                      // menv[].type
     MONS_AGNES,
     MONS_MAUD,
     MONS_LOUISE,
-    MONS_FRANCES,
+    MONS_ASTERION,
     MONS_RUPERT,
     MONS_WIGLAF,
     MONS_XTAHUA,
@@ -2838,7 +2838,6 @@ enum monster_type                      // menv[].type
 #endif
     MONS_FORMICID_VENOM_MAGE,
     MONS_RAIJU,
-    MONS_ASTERION,
 #if TAG_MAJOR_VERSION == 34
     MONS_DRAGON,                // genus
     MONS_SNAKE,                 // genus
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 78653ea..4f0fd7e 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -6837,19 +6837,6 @@ static monsterentry mondata[] =
 },
 
 {
-    MONS_FRANCES, '@', YELLOW, "Frances",
-    M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS
-        | M_SPEAKS,
-    MR_NO_FLAGS,
-    550, 15, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5,
-    { {AT_HIT, AF_PLAIN, 29}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
-    { 14, 0, 0, 121 },
-    0, 10, MST_FRANCES, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT,
-    I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY,
-    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
-{
     MONS_RUPERT, '@', LIGHTRED, "Rupert",
     M_UNIQUE | M_SPELLCASTER | M_SPELL_NO_SILENT | M_WARM_BLOOD | M_SEE_INVIS
         | M_SPEAKS,
diff --git a/crawl-ref/source/mon-gear.cc b/crawl-ref/source/mon-gear.cc
index 7442ff5..6ec57a9 100644
--- a/crawl-ref/source/mon-gear.cc
+++ b/crawl-ref/source/mon-gear.cc
@@ -628,7 +628,6 @@ static item_make_species_type _give_weapon(monster* mon, int level,
 
     case MONS_DANCING_WEAPON:   // give_level may have been adjusted above
     case MONS_SPECTRAL_WEAPON:  // Necessary for placement by mons spec
-    case MONS_FRANCES:
     case MONS_HAROLD:
     case MONS_LOUISE:
     case MONS_SKELETAL_WARRIOR:
@@ -2401,7 +2400,6 @@ static void _give_armour(monster* mon, int level, bool spectral_orcs)
         level = MAKE_GOOD_ITEM;
         // fall-through
     case MONS_AGNES:
-    case MONS_FRANCES:
     case MONS_NECROMANCER:
     case MONS_VAMPIRE_MAGE:
     case MONS_PIKEL:
diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h
index 4918ac8..9d7e03f 100644
--- a/crawl-ref/source/mon-spll.h
+++ b/crawl-ref/source/mon-spll.h
@@ -1784,17 +1784,6 @@
       }
     },
 
-    {  MST_FRANCES,
-      {
-       SPELL_THROW_ICICLE,
-       SPELL_SUMMON_DEMON,
-       SPELL_HASTE,
-       SPELL_IRON_SHOT,
-       SPELL_SUMMON_DEMON,
-       SPELL_HASTE
-      }
-    },
-
     {  MST_THRASHING_HORROR,
       {
        SPELL_NO_SPELL,
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 253853b..1f0a12c 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -3502,7 +3502,6 @@ static gender_type _mons_class_gender(monster_type mc)
         case MONS_AGNES:
         case MONS_MAUD:
         case MONS_LOUISE:
-        case MONS_FRANCES:
         case MONS_MARGERY:
         case MONS_EROLCHA:
         case MONS_ERICA:
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
index a0e5fab..a991097 100644
--- a/crawl-ref/source/rltiles/dc-mon.txt
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -458,7 +458,6 @@ donald MONS_DONALD
 edmund MONS_EDMUND
 erica MONS_ERICA
 eustachio MONS_EUSTACHIO
-frances MONS_FRANCES
 %rim 0
 frederick MONS_FREDERICK
 %rim 1
diff --git a/crawl-ref/source/rltiles/mon/unique/frances.png b/crawl-ref/source/rltiles/mon/unique/frances.png
deleted file mode 100644
index b1db0d8ad91316127678529c41f6b01a90365e06..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/crawl-ref/source/tilemcache.cc b/crawl-ref/source/tilemcache.cc
index 58302f2..d7189a0 100644
--- a/crawl-ref/source/tilemcache.cc
+++ b/crawl-ref/source/tilemcache.cc
@@ -286,7 +286,6 @@ bool mcache_monster::get_weapon_offset(tileidx_t mon_tile,
     case TILEP_MONS_SHADOW_IMP:
     case TILEP_MONS_NORRIS:
     case TILEP_MONS_MAUD:
-    case TILEP_MONS_FRANCES:
     case TILEP_MONS_HAROLD:
     case TILEP_MONS_JOSEPHINE:
     case TILEP_MONS_JOSEPH:
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index e7f2dec..e895ee8 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -2241,8 +2241,6 @@ static tileidx_t _tileidx_monster_base(int type, bool in_water, int colour,
         return TILEP_MONS_MAUD;
     case MONS_LOUISE:
         return TILEP_MONS_LOUISE;
-    case MONS_FRANCES:
-        return TILEP_MONS_FRANCES;
     case MONS_RUPERT:
         return TILEP_MONS_RUPERT;
     case MONS_WIGLAF:
diff --git a/crawl-ref/source/zotdef.cc b/crawl-ref/source/zotdef.cc
index 271e6d2..fe8468a 100644
--- a/crawl-ref/source/zotdef.cc
+++ b/crawl-ref/source/zotdef.cc
@@ -322,7 +322,7 @@ static void _human_wave(int power)
     monster_type boss[] = {MONS_HELL_KNIGHT, MONS_KILLER_KLOWN,
             MONS_VAULT_GUARD, MONS_JOSEPH, MONS_ERICA, MONS_JOSEPHINE,
             MONS_HAROLD, MONS_AGNES,
-            MONS_MAUD, MONS_LOUISE,  MONS_FRANCES,
+            MONS_MAUD, MONS_LOUISE,
             MONS_RUPERT, MONS_KIRKE,
             MONS_NORRIS, MONS_FREDERICK, MONS_MARGERY, MONS_EUSTACHIO,
             MONS_MAURICE, END};
@@ -857,7 +857,7 @@ static monster_type _choose_unique_by_depth(int step)
                             MONS_MAUD, MONS_LOUISE, MONS_NERGALLE, MONS_KIRKE, -1);
         break;
     case 5: // depth <= 19
-        ret = random_choose(MONS_SNORG, MONS_LOUISE, MONS_FRANCES, MONS_KHUFU,
+        ret = random_choose(MONS_SNORG, MONS_LOUISE, MONS_ASTERION, MONS_KHUFU,
                             MONS_RUPERT, MONS_NORRIS, MONS_AGNES,
                             MONS_AZRAEL, MONS_NESSOS, MONS_NERGALLE,
                             MONS_ROXANNE, MONS_SAINT_ROKA, MONS_KIRKE,
@@ -865,7 +865,7 @@ static monster_type _choose_unique_by_depth(int step)
         break;
     case 6: // depth > 19
     default:
-        ret = random_choose(MONS_FRANCES, MONS_MARA, MONS_WIGLAF, MONS_MENNAS,
+        ret = random_choose(MONS_ASTERION, MONS_MARA, MONS_WIGLAF, MONS_MENNAS,
                             MONS_XTAHUA, MONS_NORRIS, MONS_FREDERICK, MONS_TIAMAT,
                             MONS_MARGERY, MONS_BORIS, MONS_SAINT_ROKA, -1);
     }
-- 
1.8.3.2


From 5e430e6492524c6ea5ffb765aacda2fba24c7c02 Mon Sep 17 00:00:00 2001
From: gammafunk <gammafunk@gmail.com>
Date: Thu, 28 Nov 2013 23:27:38 -0600
Subject: [PATCH 4/5] Give monster speech and a quote to Asterion.

---
 crawl-ref/source/dat/database/monspeak.txt | 52 ++++++++++++++++++++++++++++++
 crawl-ref/source/dat/descript/quotes.txt   |  9 ++++++
 2 files changed, 61 insertions(+)

diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt
index 09e6f4d..e2ef4e1 100644
--- a/crawl-ref/source/dat/database/monspeak.txt
+++ b/crawl-ref/source/dat/database/monspeak.txt
@@ -1787,6 +1787,58 @@ Arachne
 
 @The_monster@ says @to_foe@, "You can be the slave of me, the spider queen... or food for my pets."
 %%%%
+############ ASTERION ### Minotaur of Makhleb
+Asterion
+
+@_Asterion_common_@
+
+w:5
+@_Asterion_rare_@
+%%%%
+_Asterion_common_
+
+VISUAL:@The_monster@ snorts and paws the ground.
+
+VISUAL:@The_monster@ slowly taps his weapon in his hand.
+
+@The_monster@ says, "Soon your soul will belong to Makhleb." @player_only@
+
+@The_monster@ says, "Makhleb has given me the powers of destruction."
+
+@The_monster@ says, "Your corpse will decorate my castle walls." @player_only@
+
+@The_monster@ says, "In my kingdom, weaklings like you are put to the
+sword." @player_only@
+
+@The_monster@ says, "No maze can contain me."
+
+@The_monster@ screams @at_foe@, "That wizard's curse has only increased my power!"
+
+@The_monster@ chants a prayer to Makhleb.
+
+@The_monster@ says @to_foe@, "Your valuables will do nicely in my
+coffers." @player_only@
+
+%%%%
+_Asterion_rare_
+
+@The_monster@ unleashes a bloodcurdling roar.
+
+WARN:@The_monster@ chants and is briefly shrouded in fire.
+
+WARN:@The_monster@'s eyes glow. You hear demonic laughter.
+
+@The_monster@ says, "{{
+    if you.skill("Hexes") >= 5 then
+      return "Your hexes are useless. I'm stronger than any curse."
+    elseif you.skill("Spellcasting") >= 5 then
+      return "Ah, a wizard! I'll enjoy hearing you beg for you life."
+    else
+      return "You're no warrior. You fight like peasant!"
+    end }}" @player_only@
+
+@The_monster@ screams @at_foe@, "What ORB?! I have an entire kingdom!" @player_only@
+%%%%
 ############ AZRAEL ### efreet
 Azrael
 
diff --git a/crawl-ref/source/dat/descript/quotes.txt b/crawl-ref/source/dat/descript/quotes.txt
index 72a98bf..43e031e 100644
--- a/crawl-ref/source/dat/descript/quotes.txt
+++ b/crawl-ref/source/dat/descript/quotes.txt
@@ -236,6 +236,15 @@ other things do.
 
     -Willa Cather, _O Pioneers_. 1913.
 %%%%
+Asterion
+
+"The fact is that I am unique. What a man can pass unto others does not interest
+me; like the philosopher, I think nothing is communicated by the art of
+writing. Annoying and trivial minutiae have no place in my spirit, a spirit
+which is receptive only to whatsoever is grand."
+
+  -Jorge Luis Borges, "The House of Asterion". 1947
+%%%%
 Aizul
 
 “I went to Heaven —
-- 
1.8.3.2


From fa02471c91206fbdde4fada72a2c9dd5fbf0d39d Mon Sep 17 00:00:00 2001
From: gammafunk <gammafunk@gmail.com>
Date: Thu, 28 Nov 2013 23:53:14 -0600
Subject: [PATCH 5/5] Move bird people to 'Q' and give Asterion's glyph the
 Royal Blue.

---
 crawl-ref/source/mon-data.h | 166 ++++++++++++++++++++++----------------------
 1 file changed, 84 insertions(+), 82 deletions(-)

diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 4f0fd7e..99a6dcb 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -3301,73 +3301,6 @@ static monsterentry mondata[] =
 },
 
 {
-    MONS_HARPY, 'H', GREEN, "harpy",
-    M_WARM_BLOOD | M_BATTY | M_HYBRID,
-    MR_RES_POISON,
-    480, 9, MONS_HARPY, MONS_HARPY, MH_NATURAL, -3,
-    { {AT_CLAW, AF_PLAIN, 19}, {AT_CLAW, AF_STEAL_FOOD, 14}, AT_NO_ATK,
-       AT_NO_ATK },
-    { 7, 3, 5, 0 },
-    2, 10, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SCREECH,
-    I_NORMAL, HT_LAND, FL_WINGED, 25, DEFAULT_ENERGY,
-    MONUSE_NOTHING, MONEAT_FOOD, SIZE_MEDIUM
-},
-
-{
-    MONS_TENGU, 'H', LIGHTBLUE, "tengu",
-    M_WARM_BLOOD | M_SPEAKS | M_HYBRID,
-    MR_NO_FLAGS,
-    550, 10, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
-    { {AT_HIT, AF_PLAIN, 10}, {AT_PECK, AF_PLAIN, 5}, {AT_CLAW, AF_PLAIN, 5},
-       AT_NO_ATK },
-    { 5, 3, 3, 0 },
-    2, 12, MST_NO_SPELLS, CE_CLEAN /*chicken*/, Z_SMALL, S_SHOUT,
-    I_NORMAL, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
-    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
-{
-    MONS_TENGU_CONJURER, 'H', BLUE, "tengu conjurer",
-    M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD | M_SPEAKS
-        | M_HYBRID,
-    MR_NO_FLAGS,
-    550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
-    { {AT_HIT, AF_PLAIN, 10}, {AT_PECK, AF_PLAIN, 5}, {AT_CLAW, AF_PLAIN, 5},
-       AT_NO_ATK },
-    { 7, 3, 3, 0 },
-    2, 17, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
-    I_NORMAL, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
-    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
-{
-    MONS_TENGU_WARRIOR, 'H', CYAN, "tengu warrior",
-    M_FIGHTER | M_WARM_BLOOD | M_SPEAKS | M_HYBRID,
-    MR_NO_FLAGS,
-    550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
-    { {AT_HIT, AF_PLAIN, 16}, {AT_PECK, AF_PLAIN, 8}, {AT_CLAW, AF_PLAIN, 8},
-       AT_NO_ATK },
-    { 10, 4, 4, 0 },
-    2, 17, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
-    I_NORMAL, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
-    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
-{
-    MONS_TENGU_REAVER, 'H', LIGHTMAGENTA, "tengu reaver",
-    M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD
-        | M_SPEAKS | M_HYBRID,
-    MR_NO_FLAGS,
-    550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
-    { {AT_HIT, AF_PLAIN, 27}, {AT_PECK, AF_PLAIN, 11}, {AT_CLAW, AF_PLAIN, 11},
-       AT_NO_ATK },
-    { 17, 3, 4, 0 },
-    2, 17, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
-    I_HIGH, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
-    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
-{
     MONS_SHEDU, 'H', WHITE, "shedu",
     M_WARM_BLOOD | M_ALWAYS_CORPSE | M_SPELLCASTER | M_HYBRID,
     MR_RES_POISON,
@@ -3903,6 +3836,74 @@ static monsterentry mondata[] =
     MONUSE_NOTHING, MONEAT_NOTHING, SIZE_SMALL
 },
 
+// bird people ('Q')
+{
+    MONS_HARPY, 'Q', GREEN, "harpy",
+    M_WARM_BLOOD | M_BATTY | M_HYBRID,
+    MR_RES_POISON,
+    480, 9, MONS_HARPY, MONS_HARPY, MH_NATURAL, -3,
+    { {AT_CLAW, AF_PLAIN, 19}, {AT_CLAW, AF_STEAL_FOOD, 14}, AT_NO_ATK,
+       AT_NO_ATK },
+    { 7, 3, 5, 0 },
+    2, 10, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SCREECH,
+    I_NORMAL, HT_LAND, FL_WINGED, 25, DEFAULT_ENERGY,
+    MONUSE_NOTHING, MONEAT_FOOD, SIZE_MEDIUM
+},
+
+{
+    MONS_TENGU, 'Q', LIGHTBLUE, "tengu",
+    M_WARM_BLOOD | M_SPEAKS | M_HYBRID,
+    MR_NO_FLAGS,
+    550, 10, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
+    { {AT_HIT, AF_PLAIN, 10}, {AT_PECK, AF_PLAIN, 5}, {AT_CLAW, AF_PLAIN, 5},
+       AT_NO_ATK },
+    { 5, 3, 3, 0 },
+    2, 12, MST_NO_SPELLS, CE_CLEAN /*chicken*/, Z_SMALL, S_SHOUT,
+    I_NORMAL, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
+    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
+{
+    MONS_TENGU_CONJURER, 'Q', BLUE, "tengu conjurer",
+    M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD | M_SPEAKS
+        | M_HYBRID,
+    MR_NO_FLAGS,
+    550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
+    { {AT_HIT, AF_PLAIN, 10}, {AT_PECK, AF_PLAIN, 5}, {AT_CLAW, AF_PLAIN, 5},
+       AT_NO_ATK },
+    { 7, 3, 3, 0 },
+    2, 17, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
+    I_NORMAL, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
+    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
+{
+    MONS_TENGU_WARRIOR, 'Q', CYAN, "tengu warrior",
+    M_FIGHTER | M_WARM_BLOOD | M_SPEAKS | M_HYBRID,
+    MR_NO_FLAGS,
+    550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
+    { {AT_HIT, AF_PLAIN, 16}, {AT_PECK, AF_PLAIN, 8}, {AT_CLAW, AF_PLAIN, 8},
+       AT_NO_ATK },
+    { 10, 4, 4, 0 },
+    2, 17, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
+    I_NORMAL, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
+    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
+{
+    MONS_TENGU_REAVER, 'Q', LIGHTMAGENTA, "tengu reaver",
+    M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD
+        | M_SPEAKS | M_HYBRID,
+    MR_NO_FLAGS,
+    550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
+    { {AT_HIT, AF_PLAIN, 27}, {AT_PECK, AF_PLAIN, 11}, {AT_CLAW, AF_PLAIN, 11},
+       AT_NO_ATK },
+    { 17, 3, 4, 0 },
+    2, 17, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
+    I_HIGH, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
+    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
 // genies and rakshasas ('R')
 {
     MONS_EFREET, 'R', RED, "efreet",
@@ -6262,21 +6263,7 @@ static monsterentry mondata[] =
 },
 
 {
-    MONS_SOJOBO, 'H', LIGHTGREEN, "Sojobo",
-    M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD
-        | M_SPEAKS | M_DEFLECT_MISSILES | M_UNIQUE,
-    MR_NO_FLAGS,
-    550, 18, MONS_TENGU, MONS_TENGU, MH_NATURAL, -5,
-    { {AT_HIT, AF_PLAIN, 28}, {AT_PECK, AF_PLAIN, 14}, {AT_CLAW, AF_PLAIN, 14},
-       AT_NO_ATK },
-    { 20, 0, 0, 150 },
-    2, 22, MST_SOJOBO, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
-    I_HIGH, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
-    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
-{
-    MONS_ASTERION, 'H', LIGHTRED, "Asterion",
+    MONS_ASTERION, 'H', BLUE, "Asterion",
     M_FIGHTER | M_PRIEST | M_ACTUAL_SPELLS | M_HYBRID | M_WARM_BLOOD | M_SPEAKS
         | M_SEE_INVIS | M_UNIQUE,
     MR_NO_FLAGS,
@@ -6500,6 +6487,21 @@ static monsterentry mondata[] =
     MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
 },
 
+// Bird people ('Q')
+{
+    MONS_SOJOBO, 'Q', LIGHTGREEN, "Sojobo",
+    M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD
+        | M_SPEAKS | M_DEFLECT_MISSILES | M_UNIQUE,
+    MR_NO_FLAGS,
+    550, 18, MONS_TENGU, MONS_TENGU, MH_NATURAL, -5,
+    { {AT_HIT, AF_PLAIN, 28}, {AT_PECK, AF_PLAIN, 14}, {AT_CLAW, AF_PLAIN, 14},
+       AT_NO_ATK },
+    { 20, 0, 0, 150 },
+    2, 22, MST_SOJOBO, CE_CLEAN, Z_NOZOMBIE, S_SHOUT,
+    I_HIGH, HT_LAND, FL_LEVITATE, 10, MOVE_ENERGY(9),
+    MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
 // Dwarves
 {
     MONS_WIGLAF, 'q', YELLOW, "Wiglaf",
-- 
1.8.3.2

