From 3567af433bb8b8121d3c71e02876257c0d09b717 Mon Sep 17 00:00:00 2001 From: dshaligram Date: Wed, 22 Nov 2006 14:03:00 +0000 Subject: [1597623] Added draconian descriptions. I've editorialised freely. Draconian shifters are no longer helpless blinkers. Draconian callers are a little more evil. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@467 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/describe.cc | 109 ++++++++++++++++++++++++++++++++++--------- crawl-ref/source/enum.h | 2 +- crawl-ref/source/mon-spll.h | 8 ++-- crawl-ref/source/mon-util.cc | 2 +- crawl-ref/source/monplace.cc | 13 ++---- crawl-ref/source/mstuff2.cc | 35 ++++++++++---- 6 files changed, 125 insertions(+), 44 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index f2608ed7ac..1c1bad3568 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -4483,6 +4483,89 @@ void describe_spell(int spelled) #endif } // end describe_spell() +static std::string describe_draconian_role(const monsters *mon) +{ + switch (mon->type) + { + case MONS_DRACONIAN_SHIFTER: + return "It darts around disconcertingly without taking a step."; + case MONS_DRACONIAN_SCORCHER: + return "Its scales are sooty black from years of magical pyrotechnics."; + case MONS_DRACONIAN_ZEALOT: + return "In its gaze you see all the malefic power of its " + "terrible god."; + case MONS_DRACONIAN_ANNIHILATOR: + return "Crackling balls of pure energy hum and spark up and down its " + "scaled fists and arms."; + case MONS_DRACONIAN_CALLER: + return "It looks especially reptilian, and eager for company."; + case MONS_DRACONIAN_MONK: + return "It looks unnaturally strong and dangerous with its fists."; + case MONS_DRACONIAN_KNIGHT: + return "It wields a deadly weapon with menacing efficiency."; + } + return (""); +} + +static std::string describe_draconian_colour(int species) +{ + switch (species) + { + case MONS_BLACK_DRACONIAN: + return "Sparks crackle and flare out of its mouth and nostrils."; + case MONS_MOTTLED_DRACONIAN: + return "Liquid flames drip from its mouth."; + case MONS_YELLOW_DRACONIAN: + return "Acid fumes swirl around it."; + case MONS_GREEN_DRACONIAN: + return "Venom steams and drips from its jaws."; + case MONS_PURPLE_DRACONIAN: + return "Its outline shimmers with wild energies."; + case MONS_RED_DRACONIAN: + return "Smoke pours from its nostrils."; + case MONS_WHITE_DRACONIAN: + return "Frost pours from its nostrils."; + case MONS_PALE_DRACONIAN: + return "It is cloaked in a pall of superheated steam."; + } + return (""); +} + +static std::string describe_draconian(const monsters *mon) +{ + std::string description; + const int subsp = draco_subspecies( mon ); + + if (subsp == MONS_DRACONIAN) + description += "A "; + else + description += "An enormous, muscular "; + + switch (subsp) + { + case MONS_DRACONIAN: description += "brown-"; break; + case MONS_BLACK_DRACONIAN: description += "black-"; break; + case MONS_MOTTLED_DRACONIAN: description += "mottled-"; break; + case MONS_YELLOW_DRACONIAN: description += "yellow-"; break; + case MONS_GREEN_DRACONIAN: description += "green-"; break; + case MONS_PURPLE_DRACONIAN: description += "purple-"; break; + case MONS_RED_DRACONIAN: description += "red-"; break; + case MONS_WHITE_DRACONIAN: description += "white-"; break; + case MONS_PALE_DRACONIAN: description += "pale-"; break; + default: + break; + } + + description += "scaled humanoid with wings."; + + if (subsp != MONS_DRACONIAN) + description += " " + describe_draconian_colour(subsp); + + if (subsp != mon->type) + description += " " + describe_draconian_role(mon); + + return (description); +} //--------------------------------------------------------------- // @@ -4688,8 +4771,8 @@ void describe_monsters(int class_described, unsigned char which_mons) case MONS_ORC_PRIEST: description += "A servant of the ancient and cruel gods of the orcs," - " dressed in long robe. he's mumbling some strange prayers. " - "Hope that they will remain unheard."; + " dressed in long robe. It continually mumbles strange prayers. " + "Hope that they remain unheard."; break; case MONS_ORC_HIGH_PRIEST: @@ -5884,25 +5967,7 @@ void describe_monsters(int class_described, unsigned char which_mons) case MONS_DRACONIAN_MONK: case MONS_DRACONIAN_KNIGHT: { - description += "A "; - - const int subsp = draco_subspecies( &menv[which_mons] ); - switch (subsp) - { - case MONS_DRACONIAN: description += "brown "; break; - case MONS_BLACK_DRACONIAN: description += "black "; break; - case MONS_MOTTLED_DRACONIAN: description += "mottled "; break; - case MONS_YELLOW_DRACONIAN: description += "yellow "; break; - case MONS_GREEN_DRACONIAN: description += "green "; break; - case MONS_PURPLE_DRACONIAN: description += "purple "; break; - case MONS_RED_DRACONIAN: description += "red "; break; - case MONS_WHITE_DRACONIAN: description += "white "; break; - case MONS_PALE_DRACONIAN: description += "pale "; break; - default: - break; - } - - description += "scaled humanoid with wings."; + description += describe_draconian( &menv[which_mons] ); break; } case MONS_PLAYER_GHOST: @@ -6182,7 +6247,7 @@ void describe_monsters(int class_described, unsigned char which_mons) { if (!found_spell) { - description += "$Monster Spells:$"; + description += "$$Monster Spells:$"; found_spell = true; } diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 4bf996d51f..062eac939c 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2425,7 +2425,7 @@ enum mon_spell_type MS_CONTROLLED_BLINK, MS_CONTROL_UNDEAD, MS_MIASMA, // 55 - MS_SUMMON_LIZARDS, + MS_SUMMON_DRAKES, MS_BLINK_OTHER, MS_DISPEL_UNDEAD, MS_HELLFROST, diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h index 650a5103ee..8498265dde 100644 --- a/crawl-ref/source/mon-spll.h +++ b/crawl-ref/source/mon-spll.h @@ -760,14 +760,14 @@ { MST_DRAC_CALLER, MS_NO_SPELL, - MS_SUMMON_LIZARDS, - MS_SUMMON_LIZARDS, + MS_SUMMON_DRAKES, + MS_SUMMON_DRAKES, MS_NO_SPELL, MS_NO_SPELL, - MS_SUMMON_LIZARDS }, + MS_SUMMON_DRAKES }, { MST_DRAC_SHIFTER, - MS_NO_SPELL, + MS_BANISHMENT, MS_BLINK_OTHER, MS_BLINK, MS_NO_SPELL, diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index f4ef56fb8d..111718ec71 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -126,7 +126,7 @@ static const char *monster_spell_name[] = { "Controlled Blink", "Control Undead", "Miasma", - "Summon Lizards", + "Summon Drakes", "Blink Other", "Dispel Undead", "Hellfrost", diff --git a/crawl-ref/source/monplace.cc b/crawl-ref/source/monplace.cc index 98bb07551d..65cea78bb2 100644 --- a/crawl-ref/source/monplace.cc +++ b/crawl-ref/source/monplace.cc @@ -1486,14 +1486,11 @@ monster_type rand_dragon( dragon_class_type type ) { case DRAGON_LIZARD: temp_rand = random2(100); - summoned = ((temp_rand > 85) ? MONS_GIANT_GECKO : - (temp_rand > 59) ? MONS_GIANT_LIZARD : - (temp_rand > 34) ? MONS_GIANT_IGUANA : - (temp_rand > 22) ? MONS_GILA_MONSTER : - (temp_rand > 11) ? MONS_KOMODO_DRAGON : - (temp_rand > 8) ? MONS_FIREDRAKE : - (temp_rand > 2) ? MONS_SWAMP_DRAKE - : MONS_DEATH_DRAKE ); + summoned = ((temp_rand > 80) ? MONS_SWAMP_DRAKE : + (temp_rand > 59) ? MONS_KOMODO_DRAGON : + (temp_rand > 34) ? MONS_FIREDRAKE : + (temp_rand > 11) ? MONS_DEATH_DRAKE : + MONS_DRAGON); break; case DRAGON_DRACONIAN: diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc index c47363ad7d..f70e253edf 100644 --- a/crawl-ref/source/mstuff2.cc +++ b/crawl-ref/source/mstuff2.cc @@ -575,7 +575,7 @@ void mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) return; // Journey -- Added in Summon Lizards and Draconian - case MS_SUMMON_LIZARDS: + case MS_SUMMON_DRAKES: if (!mons_friendly( monster ) && !monsterNearby && monster_abjuration( 1, true ) > 0 && coinflip()) { @@ -589,11 +589,27 @@ void mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) if (duration > ENCH_ABJ_VI) duration = ENCH_ABJ_VI; - for (sumcount = 0; sumcount < sumcount2; sumcount++) { - create_monster( rand_dragon( DRAGON_LIZARD ), duration, - SAME_ATTITUDE(monster), - monster->x, monster->y, monster->foe, 250 ); + std::vector monsters; + + for (sumcount = 0; sumcount < sumcount2; sumcount++) + { + const int mons = rand_dragon( DRAGON_LIZARD ); + if (mons == MONS_DRAGON) + { + monsters.clear(); + monsters.push_back( rand_dragon(DRAGON_DRAGON) ); + break; + } + monsters.push_back( mons ); + } + + for (int i = 0, size = monsters.size(); i < size; ++i) + { + create_monster( monsters[i], duration, + SAME_ATTITUDE(monster), + monster->x, monster->y, monster->foe, 250 ); + } } break; @@ -650,7 +666,9 @@ void mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) void setup_mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) { // always set these -- used by things other than fire_beam() - pbolt.ench_power = 12 * monster->hit_dice; + + // [ds] Used to be 12 * MHD, reduced to 7 * HD. + pbolt.ench_power = 7 * monster->hit_dice; if (spell_cast == MS_TELEPORT) pbolt.ench_power = 2000; @@ -697,7 +715,7 @@ void setup_mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cas case MS_SUMMON_BEAST: // Geryon case MS_SUMMON_UNDEAD: // summon undead around player case MS_SUMMON_MUSHROOMS: - case MS_SUMMON_LIZARDS: + case MS_SUMMON_DRAKES: case MS_TORMENT: case MS_SUMMON_DEMON_GREATER: case MS_CANTRIP: @@ -716,7 +734,8 @@ void setup_mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cas pbolt.rangeMax = theBeam.rangeMax; pbolt.hit = theBeam.hit; pbolt.damage = theBeam.damage; - pbolt.ench_power = theBeam.ench_power; + if (theBeam.ench_power != -1) + pbolt.ench_power = theBeam.ench_power; pbolt.type = theBeam.type; pbolt.flavour = theBeam.flavour; pbolt.thrower = theBeam.thrower; -- cgit v1.2.3-54-g00ecf