diff options
-rw-r--r-- | crawl-ref/source/decks.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/spells3.cc | 52 | ||||
-rw-r--r-- | crawl-ref/source/spells3.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 2 |
4 files changed, 27 insertions, 31 deletions
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc index dfdd37e599..5a34d2554d 100644 --- a/crawl-ref/source/decks.cc +++ b/crawl-ref/source/decks.cc @@ -1310,7 +1310,7 @@ void card_effect(card_type which_card, deck_rarity_type rarity) case CARD_GENIE: genie_card(power, rarity); break; case CARD_CURSE: curse_card(power, rarity); break; case CARD_WARPWRIGHT: warpwright_card(power, rarity); break; - case CARD_TOMB: entomb(); break; + case CARD_TOMB: entomb(power/2); break; case CARD_WRAITH: drain_exp(); lose_level(); break; case CARD_WRATH: godly_wrath(); break; case CARD_SUMMON_DEMON: summon_demon_card(power, rarity); break; diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc index 1ea5f76ee5..2f260ca6a2 100644 --- a/crawl-ref/source/spells3.cc +++ b/crawl-ref/source/spells3.cc @@ -735,34 +735,26 @@ void you_teleport_now( bool allow_control, bool new_abyss_area ) xom_is_stimulated(255); } -bool entomb(void) +bool entomb(int powc) { - int loopy = 0; // general purpose loop variable {dlb} - bool proceed = false; // loop management varaiable {dlb} - int which_trap = 0; // used in clearing out certain traps {dlb} - char srx = 0, sry = 0; - char number_built = 0; - - FixedVector < unsigned char, 8 > safe_to_overwrite; - - // hack - passing chars through '...' promotes them to ints, which - // barfs under gcc in fixvec.h. So don't. - safe_to_overwrite[0] = DNGN_FLOOR; - safe_to_overwrite[1] = DNGN_SHALLOW_WATER; - safe_to_overwrite[2] = DNGN_OPEN_DOOR; - safe_to_overwrite[3] = DNGN_TRAP_MECHANICAL; - safe_to_overwrite[4] = DNGN_TRAP_MAGICAL; - safe_to_overwrite[5] = DNGN_TRAP_III; - safe_to_overwrite[6] = DNGN_UNDISCOVERED_TRAP; - safe_to_overwrite[7] = DNGN_FLOOR_SPECIAL; - - - for (srx = you.x_pos - 1; srx < you.x_pos + 2; srx++) + int number_built = 0; + + const dungeon_feature_type safe_to_overwrite[] = { + DNGN_FLOOR, DNGN_SHALLOW_WATER, DNGN_OPEN_DOOR, + DNGN_TRAP_MECHANICAL, DNGN_TRAP_MAGICAL, DNGN_TRAP_III, + DNGN_UNDISCOVERED_TRAP, + DNGN_FLOOR_SPECIAL + }; + + if ( powc > 95 ) + powc = 95; + if ( powc < 25 ) + powc = 25; + + for (int srx = you.x_pos - 1; srx < you.x_pos + 2; srx++) { - for (sry = you.y_pos - 1; sry < you.y_pos + 2; sry++) + for (int sry = you.y_pos - 1; sry < you.y_pos + 2; sry++) { - proceed = false; - // tile already occupied by monster or yourself {dlb}: if (mgrd[srx][sry] != NON_MONSTER || (srx == you.x_pos && sry == you.y_pos)) @@ -770,10 +762,13 @@ bool entomb(void) continue; } - // the break here affects innermost containing loop {dlb}: - for (loopy = 0; loopy < 7; loopy++) + if ( random2(100) > powc ) + continue; + + bool proceed = false; + for (int i = 0; i < ARRAYSIZE(safe_to_overwrite); ++i) { - if (grd[srx][sry] == safe_to_overwrite[loopy]) + if (grd[srx][sry] == safe_to_overwrite[i]) { proceed = true; break; @@ -819,6 +814,7 @@ bool entomb(void) delete_cloud( env.cgrid[srx][sry] ); // mechanical traps are destroyed {dlb}: + int which_trap; if ((which_trap = trap_at_xy(srx, sry)) != -1) { if (trap_category(env.trap[which_trap].type) diff --git a/crawl-ref/source/spells3.h b/crawl-ref/source/spells3.h index a93a91c330..f72d3fbf41 100644 --- a/crawl-ref/source/spells3.h +++ b/crawl-ref/source/spells3.h @@ -90,7 +90,7 @@ bool detect_curse(bool suppress_msg); /* *********************************************************************** * called from: decks - spell * *********************************************************************** */ -bool entomb(void); +bool entomb(int powc); // updated 24may2000 {dlb} diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index fff4aef204..47099858e5 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -1509,7 +1509,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail ) break; case SPELL_TOMB_OF_DOROKLOHE: - entomb(); + entomb(powc); break; case SPELL_STONEMAIL: |