From 2c02f36efd7bdff3eac96f1fe905466591463913 Mon Sep 17 00:00:00 2001 From: haranp Date: Sun, 2 Dec 2007 12:17:23 +0000 Subject: Added Foxfire, a card which can summon flying creatures. Probably unbalanced: you have a 25% chance of getting 12 red wasps at legendary level. Better names are also needed. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2969 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/decks.cc | 29 ++++++++++++++++++++++++++++- crawl-ref/source/decks.h | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc index a1a686de2a..255f8c4bff 100644 --- a/crawl-ref/source/decks.cc +++ b/crawl-ref/source/decks.cc @@ -124,6 +124,7 @@ const deck_archetype deck_of_summoning[] = { { CARD_SUMMON_ANIMAL, {5, 5, 5} }, { CARD_SUMMON_DEMON, {5, 5, 5} }, { CARD_SUMMON_WEAPON, {5, 5, 5} }, + { CARD_SUMMON_FLYING, {5, 5, 5} }, { CARD_SUMMON_SKELETON, {5, 5, 5} }, END_OF_DECK }; @@ -280,6 +281,7 @@ const char* card_name(card_type card) case CARD_SUMMON_ANIMAL: return "the Herd"; case CARD_SUMMON_DEMON: return "the Pentagram"; case CARD_SUMMON_WEAPON: return "the Dance"; + case CARD_SUMMON_FLYING: return "Foxfire"; case CARD_SUMMON_SKELETON: return "the Bones"; case CARD_SUMMON_ANY: return "Summoning"; case CARD_XOM: return "Xom"; @@ -2369,6 +2371,30 @@ static void summon_dancing_weapon(int power, deck_rarity_type rarity) } } +static void summon_flying(int power, deck_rarity_type rarity) +{ + const int power_level = get_power_level(power, rarity); + const bool friendly = (power_level > 0 || !one_chance_in(4)); + + const monster_type flytypes[] = { + MONS_BUTTERFLY, MONS_BUMBLEBEE, MONS_INSUBSTANTIAL_WISP, + MONS_VAPOUR, MONS_YELLOW_WASP, MONS_RED_WASP + }; + + // Choose what kind of monster. + // Be nice and don't summon friendly invisibles. + monster_type result = MONS_PROGRAM_BUG; + do { + result = flytypes[random2(4) + power_level]; + } while ( friendly && mons_class_flag(result, M_INVIS) && + !player_see_invis() ); + + for ( int i = 0; i < power_level * 5 + 2; ++i ) + create_monster(result, std::min(power/50, 6), + friendly ? BEH_FRIENDLY : BEH_HOSTILE, + you.x_pos, you.y_pos, MHITYOU, 250); +} + static void summon_skeleton(int power, deck_rarity_type rarity) { const int power_level = get_power_level(power, rarity); @@ -2380,7 +2406,7 @@ static void summon_skeleton(int power, deck_rarity_type rarity) const int mon = create_monster(skeltypes[power_level], std::min(power/50,6), friendly ? BEH_FRIENDLY : BEH_HOSTILE, you.x_pos, you.y_pos, MHITYOU, 250 ); - if ( mon != -1 ) + if ( mon != -1 ) // don't want skeletal warriors dropping stuff menv[mon].flags |= MF_HARD_RESET; } @@ -2470,6 +2496,7 @@ bool card_effect(card_type which_card, deck_rarity_type rarity, case CARD_SUMMON_ANIMAL: summon_animals(random2(power/3)); break; case CARD_SUMMON_ANY: summon_any_monster(power, rarity); break; case CARD_SUMMON_WEAPON: summon_dancing_weapon(power, rarity); break; + case CARD_SUMMON_FLYING: summon_flying(power, rarity); break; case CARD_SUMMON_SKELETON: summon_skeleton(power, rarity); break; case CARD_XOM: xom_acts(5 + random2(power/10)); break; case CARD_TROWEL: trowel_card(power, rarity); break; diff --git a/crawl-ref/source/decks.h b/crawl-ref/source/decks.h index bb0d704c05..ac1a3b863b 100644 --- a/crawl-ref/source/decks.h +++ b/crawl-ref/source/decks.h @@ -87,6 +87,7 @@ enum card_type CARD_SUMMON_ANIMAL, CARD_SUMMON_DEMON, CARD_SUMMON_WEAPON, + CARD_SUMMON_FLYING, // wisps and butterflies CARD_SUMMON_SKELETON, CARD_SUMMON_ANY, -- cgit v1.2.3-54-g00ecf