From bdc780ed167c098605f620a74238aec4f84e0c58 Mon Sep 17 00:00:00 2001 From: haranp Date: Thu, 29 Nov 2007 17:40:40 +0000 Subject: Added the Bones, a skeleton summoning card. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2938 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/decks.cc | 22 ++++++++++++++++++++-- crawl-ref/source/decks.h | 1 + crawl-ref/source/monplace.cc | 3 +++ 3 files changed, 24 insertions(+), 2 deletions(-) (limited to 'crawl-ref') diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc index 0010b70c5d..a90825f5fe 100644 --- a/crawl-ref/source/decks.cc +++ b/crawl-ref/source/decks.cc @@ -99,7 +99,8 @@ static card_type a_deck_of_enchantments[] = { DEFVEC(deck_of_enchantments); static card_type a_deck_of_summoning[] = { - CARD_CRUSADE, CARD_SUMMON_ANIMAL, CARD_SUMMON_DEMON, CARD_SUMMON_WEAPON + CARD_CRUSADE, CARD_SUMMON_ANIMAL, CARD_SUMMON_DEMON, CARD_SUMMON_WEAPON, + CARD_SUMMON_SKELETON }; DEFVEC(deck_of_summoning); @@ -243,6 +244,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_SKELETON: return "the Bones"; case CARD_SUMMON_ANY: return "Summoning"; case CARD_XOM: return "Xom"; case CARD_FAMINE: return "Famine"; @@ -2247,6 +2249,21 @@ static void summon_dancing_weapon(int power, deck_rarity_type rarity) menv[mon].flags |= MF_HARD_RESET; } +static void summon_skeleton(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 skeltypes[] = { + MONS_SKELETON_LARGE, MONS_SKELETAL_WARRIOR, MONS_SKELETAL_DRAGON + }; + + 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 ) + menv[mon].flags |= MF_HARD_RESET; +} + static int card_power(deck_rarity_type rarity) { int result = 0; @@ -2333,8 +2350,9 @@ bool card_effect(card_type which_card, deck_rarity_type rarity, case CARD_SUMMON_DEMON: summon_demon_card(power, rarity); break; case CARD_SUMMON_ANIMAL: summon_animals(random2(power/3)); break; case CARD_SUMMON_ANY: summon_any_monster(power, rarity); break; - case CARD_XOM: xom_acts(5 + random2(power/10)); break; case CARD_SUMMON_WEAPON: summon_dancing_weapon(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; case CARD_SPADE: your_spells(SPELL_DIG, random2(power/4), false); break; case CARD_BANSHEE: mass_enchantment(ENCH_FEAR, power, MHITYOU); break; diff --git a/crawl-ref/source/decks.h b/crawl-ref/source/decks.h index 2e5faa6b6d..3fd7cc86f1 100644 --- a/crawl-ref/source/decks.h +++ b/crawl-ref/source/decks.h @@ -89,6 +89,7 @@ enum card_type CARD_SUMMON_ANIMAL, CARD_SUMMON_DEMON, CARD_SUMMON_WEAPON, + CARD_SUMMON_SKELETON, CARD_SUMMON_ANY, CARD_POTION, diff --git a/crawl-ref/source/monplace.cc b/crawl-ref/source/monplace.cc index dfe8ba9ac3..1bacdf8b62 100644 --- a/crawl-ref/source/monplace.cc +++ b/crawl-ref/source/monplace.cc @@ -1715,6 +1715,9 @@ bool empty_surrounds(int emx, int emy, dungeon_feature_type spc_wanted, if (tx == you.x_pos && ty == you.y_pos) continue; + if ( !in_bounds(tx,ty) ) + continue; + if (mgrd[tx][ty] != NON_MONSTER) continue; -- cgit v1.2.3-54-g00ecf