diff options
Diffstat (limited to 'crawl-ref/source')
-rw-r--r-- | crawl-ref/source/acr.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/dat/database/monspeak.txt | 24 | ||||
-rw-r--r-- | crawl-ref/source/dat/descript/monsters.txt | 4 | ||||
-rw-r--r-- | crawl-ref/source/enum.h | 7 | ||||
-rw-r--r-- | crawl-ref/source/mon-data.h | 11 | ||||
-rw-r--r-- | crawl-ref/source/mon-spll.h | 11 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 28 | ||||
-rw-r--r-- | crawl-ref/source/mstuff2.cc | 48 | ||||
-rw-r--r-- | crawl-ref/source/spl-data.h | 13 |
10 files changed, 150 insertions, 3 deletions
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc index 5655ee09b6..34923a7184 100644 --- a/crawl-ref/source/acr.cc +++ b/crawl-ref/source/acr.cc @@ -4273,7 +4273,7 @@ static void _compile_time_asserts() COMPILE_CHECK(SP_VAMPIRE == 31 , c3); COMPILE_CHECK(SPELL_DEBUGGING_RAY == 103 , c4); COMPILE_CHECK(SPELL_PETRIFY == 156 , c5); - COMPILE_CHECK(NUM_SPELLS == 200 , c6); + COMPILE_CHECK(NUM_SPELLS == 201 , c6); //jmf: NEW ASSERTS: we ought to do a *lot* of these COMPILE_CHECK(NUM_JOBS < JOB_UNKNOWN , c7); diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt index 9056c2d759..8611f974b0 100644 --- a/crawl-ref/source/dat/database/monspeak.txt +++ b/crawl-ref/source/dat/database/monspeak.txt @@ -1986,6 +1986,30 @@ _Jozef_rare_ @The_monster@ screams @at_foe@, "Die! I've got more contracts today." ## END Jozef ## %%%% +############ KHUFU ### mummy emperor with delusions of godhood +Khufu + +@The_monster@ booms, "Everyone will worship Khufu but you!" + +SPELL:@The_monster@ smites. + +@The_monster@ declares, "When I'm finished with you, I will take on the gods!" + +@The_monster@ queries, "My people built me a pyramid -- what did your people build for you?" + +@The_monster@ says, "This hit and run is way beneath me." + +@The_monster@ says, "I am transcendence, you are transpiration." + +@The_monster@ says @to_foe@, "Your corpse would blemish any mausoleum." + +@The_monster@ says @to_foe@, "You'll be the most ugly mummy ever seen." + +@The_monster@ says, "I follow the Polar star." + +@The_monster@ yells @to_foe@, "Into the Nile with you!" +## END Khufu ## +%%%% ############ KIRKE ### an enchantress, lover of Odysseus Kirke diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt index 8407bdc585..0908bacdc5 100644 --- a/crawl-ref/source/dat/descript/monsters.txt +++ b/crawl-ref/source/dat/descript/monsters.txt @@ -188,6 +188,10 @@ Killer Klown A comical figure full of life and laughter. It looks very happy to see you... but is there a slightly malicious cast to its features? Is that red face paint or something altogether less pleasant? %%%% +Khufu + +An incredibly powerful emperor on the way to godhood. +%%%% Kirke A beautiful enchantress. diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index c90063eb76..a586496844 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2082,6 +2082,7 @@ enum monster_type // (int) menv[].type MONS_DOWAN, MONS_GASTRONOK, MONS_MAURICE, + MONS_KHUFU, // Testing monsters MONS_TEST_SPAWNER, @@ -2292,7 +2293,7 @@ enum mon_spellbook_type MST_KIRKE, MST_MENKAURE, MST_DOWAN, - MST_GERYON = 150, + MST_GERYON, MST_DISPATER, MST_ASMODEUS, MST_ERESHKIGAL, @@ -2305,6 +2306,7 @@ enum mon_spellbook_type MST_BERSERK_ESCAPE, // 165 MST_GASTRONOK, MST_MAURICE, + MST_KHUFU, MST_TEST_SPAWNER = 170, NUM_MSTYPES, @@ -2885,8 +2887,9 @@ enum spell_type SPELL_WATER_ELEMENTALS, SPELL_PORKALATOR, // 198 SPELL_KRAKEN_TENTACLES, + SPELL_TOMB_OF_DOROKLOHE, - NUM_SPELLS // 200 + NUM_SPELLS // 201 }; enum slot_select_mode diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index f209135099..d5f4fb026e 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -4246,6 +4246,17 @@ static monsterentry mondata[] = { HT_AMPHIBIOUS_LAND, 5, DEFAULT_ENERGY, MONUSE_STARTING_EQUIPMENT, MONEAT_FOOD, SIZE_LARGE }, +{ + MONS_KHUFU, 'M', LIGHTRED, "Khufu", + M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_EVIL | M_SPEAKS + | M_UNIQUE, + MR_RES_POISON | MR_RES_COLD | MR_RES_ELEC, + 0, 20, MONS_MUMMY, MONS_MUMMY, MH_UNDEAD, MAG_IMMUNE, + { {AT_HIT, AF_PLAIN, 35}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, + { 18, 5, 3, 100 }, + 10, 6, MST_KHUFU, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT, I_HIGH, + HT_LAND, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM +}, // human uniques ('@') { diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h index 66f3814597..0d4cb0a883 100644 --- a/crawl-ref/source/mon-spll.h +++ b/crawl-ref/source/mon-spll.h @@ -1232,6 +1232,17 @@ } }, + { MST_KHUFU, + { + SPELL_SUMMON_DEMON, + SPELL_SMITING, + SPELL_SMITING, + SPELL_SYMBOL_OF_TORMENT, + SPELL_SUMMON_UNDEAD, + SPELL_TOMB_OF_DOROKLOHE + } + }, + { MST_TEST_SPAWNER, { SPELL_SHADOW_CREATURES, diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index 163d61c77c..65c840a0b1 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -1712,6 +1712,7 @@ int exper_value(const monsters *monster) case SPELL_BOLT_OF_IRON: case SPELL_TELEPORT_SELF: case SPELL_TELEPORT_OTHER: + case SPELL_PORKALATOR: diff += 10; break; @@ -2976,6 +2977,10 @@ bool ms_low_hitpoint_cast( const monsters *mon, spell_type monspell ) ret = true; break; + case SPELL_TOMB_OF_DOROKLOHE: + ret = true; + break; + case SPELL_NO_SPELL: ret = false; break; diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index 34cab9f2fd..a33935676a 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -965,6 +965,7 @@ static void _mummy_curse(monsters* monster, killer_type killer, int index) case MONS_GUARDIAN_MUMMY: pow = 3; break; case MONS_MUMMY_PRIEST: pow = 8; break; case MONS_GREATER_MUMMY: pow = 11; break; + case MONS_KHUFU: pow = 15; break; default: mpr("Unknown mummy type.", MSGCH_DIAGNOSTICS); @@ -6794,6 +6795,7 @@ static bool _handle_spell(monsters *monster, bolt &beem) spell_type spell_cast = SPELL_NO_SPELL; monster_spells hspell_pass(monster->spells); + // 1KB: the following code is never used for unfriendlies! if (!mon_enemies_around(monster)) { // Force the casting of dig when the player is not visible - @@ -7406,6 +7408,28 @@ static void _swim_or_move_energy(monsters *mon) : EUT_MOVE ); } +static void _khufu_drop_tomb(monsters *monster) +{ + int count = 0; + + monster->behaviour = BEH_SEEK; // don't wander on duty! + for(adjacent_iterator ai(monster->pos()); ai; ++ai) + { + if (grd(*ai) == DNGN_ROCK_WALL) + { + grd(*ai) = DNGN_FLOOR; + count++; + } + } + if (count) + if (mons_near(monster)) + mpr("The walls disappear!"); + else + mpr("You hear a deep rumble."); + monster->number = 0; + monster->lose_energy(EUT_SPELL); +} + #if DEBUG # define DEBUG_ENERGY_USE(problem) \ if (monster->speed_increment == old_energy && monster->alive()) \ @@ -7725,6 +7749,10 @@ static void _handle_monster_move(monsters *monster) } _handle_nearby_ability(monster); + if (monster->type == MONS_KHUFU && monster->number + && monster->hit_points==monster->max_hit_points) + _khufu_drop_tomb(monster); + if (!mons_is_sleeping(monster) && !mons_is_wandering(monster) // Berserking monsters are limited to running up and // hitting their foes. diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc index 1785f05a11..4ab60f55ee 100644 --- a/crawl-ref/source/mstuff2.cc +++ b/crawl-ref/source/mstuff2.cc @@ -621,6 +621,53 @@ void mons_cast(monsters *monster, bolt &pbolt, spell_type spell_cast, mons_speaks_msg(monster, msg, MSGCH_TALK, silenced(you.pos()) || silenced(monster->pos())); } + break; + } + case SPELL_TOMB_OF_DOROKLOHE: + { + sumcount = 0; + for(adjacent_iterator ai(monster->pos()); ai; ++ai) + { + // we can blink away the crowd, but only our allies + if (mgrd(*ai) != NON_MONSTER + && monster_at(*ai)->attitude != monster->attitude) + sumcount++; + if (grd(*ai) != DNGN_FLOOR && grd(*ai) > DNGN_MAX_NONREACH + && !grid_is_trap(grd(*ai))) + sumcount++; + } + if (abs(you.pos().x-monster->pos().x)<=1 && + abs(you.pos().y-monster->pos().y)<=1) + sumcount++; + if (sumcount) + { + monster->blink(); + return; + } + + sumcount = 0; + for(adjacent_iterator ai(monster->pos()); ai; ++ai) + { + if (mgrd(*ai) != NON_MONSTER && monster_at(*ai) != monster) + { + monster_at(*ai)->blink(); + if (mgrd(*ai) != NON_MONSTER) + { + monster_at(*ai)->teleport(true); + if (mgrd(*ai) != NON_MONSTER) + continue; + } + } + if (grd(*ai) == DNGN_FLOOR || grid_is_trap(grd(*ai))) + { + grd(*ai) = DNGN_ROCK_WALL; + sumcount++; + } + } + if (sumcount) + mpr("Walls emerge from the floor!"); + monster->number = 1; // mark Khufu as entombed + return; } } @@ -1100,6 +1147,7 @@ void setup_mons_cast(monsters *monster, bolt &pbolt, case SPELL_KRAKEN_TENTACLES: case SPELL_BLINK: case SPELL_CONTROLLED_BLINK: + case SPELL_TOMB_OF_DOROKLOHE: return; default: break; diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index e2602af78d..cdfc92696b 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -2484,6 +2484,19 @@ }, { + SPELL_TOMB_OF_DOROKLOHE, "Tomb of Doroklohe", + SPTYP_EARTH, + SPFLAG_MONSTER, + 5, + 0, + -1, -1, + 0, + NULL, + false, + false +}, + +{ SPELL_NO_SPELL, "nonexistent spell", 0, SPFLAG_TESTING, |