diff options
-rw-r--r-- | crawl-ref/docs/changes.stone_soup | 2 | ||||
-rw-r--r-- | crawl-ref/source/cmd-keys.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/cmd-name.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/command.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/debug.cc | 35 | ||||
-rw-r--r-- | crawl-ref/source/debug.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/directn.cc | 6 | ||||
-rw-r--r-- | crawl-ref/source/enum.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/files.cc | 15 | ||||
-rw-r--r-- | crawl-ref/source/ghost.cc | 40 | ||||
-rw-r--r-- | crawl-ref/source/ghost.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/player.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/spl-util.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/travel.cc | 4 |
14 files changed, 91 insertions, 22 deletions
diff --git a/crawl-ref/docs/changes.stone_soup b/crawl-ref/docs/changes.stone_soup index 4b54004c0d..33c71802b0 100644 --- a/crawl-ref/docs/changes.stone_soup +++ b/crawl-ref/docs/changes.stone_soup @@ -3,7 +3,7 @@ Stone Soup 0.5.0 (2009????) Disclaimer: The code and this list are very much a work in progress. -Breaks saves compatibility. +Breaks saves and bones compatibility. 0.5 Highlights diff --git a/crawl-ref/source/cmd-keys.h b/crawl-ref/source/cmd-keys.h index 579fd57b24..f45e2383fd 100644 --- a/crawl-ref/source/cmd-keys.h +++ b/crawl-ref/source/cmd-keys.h @@ -153,6 +153,7 @@ {'M', CMD_TARGET_WIZARD_MISCAST}, {'S', CMD_TARGET_WIZARD_MAKE_SUMMONED}, {'~', CMD_TARGET_WIZARD_POLYMORPH}, +{'D', CMD_TARGET_WIZARD_DEBUG_MONSTER}, #endif {'v', CMD_TARGET_DESCRIBE}, {'?', CMD_TARGET_HELP}, diff --git a/crawl-ref/source/cmd-name.h b/crawl-ref/source/cmd-name.h index 7667397bdd..5aa7954b3a 100644 --- a/crawl-ref/source/cmd-name.h +++ b/crawl-ref/source/cmd-name.h @@ -197,6 +197,7 @@ {CMD_TARGET_WIZARD_MISCAST, "CMD_TARGET_WIZARD_MISCAST"}, {CMD_TARGET_WIZARD_MAKE_SUMMONED, "CMD_TARGET_WIZARD_MAKE_SUMMONED"}, {CMD_TARGET_WIZARD_POLYMORPH, "CMD_TARGET_WIZARD_POLYMORPH"}, +{CMD_TARGET_WIZARD_DEBUG_MONSTER, "CMD_TARGET_WIZARD_DEBUG_MONSTER"}, {CMD_TARGET_MOUSE_MOVE, "CMD_TARGET_MOUSE_MOVE"}, {CMD_TARGET_MOUSE_SELECT, "CMD_TARGET_MOUSE_SELECT"}, {CMD_TARGET_HELP, "CMD_TARGET_HELP"}, diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc index 8b07755b10..ce6644780c 100644 --- a/crawl-ref/source/command.cc +++ b/crawl-ref/source/command.cc @@ -777,6 +777,7 @@ static const char *targeting_help_1 = "<w>m</w>: move monster or player\n" "<w>M</w>: cause spell miscast for monster or player\n" "<w>w</w>: calculate shortest path to any point on the map\n" + "<w>D</w>: get debugging information about the monster\n" "<w>~</w>: polymorph monster to specific type\n" #endif ; diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc index a2b5c7aaa6..0bccde0e96 100644 --- a/crawl-ref/source/debug.cc +++ b/crawl-ref/source/debug.cc @@ -386,7 +386,7 @@ static int _debug_prompt_for_int( const char *prompt, bool nonneg ) char *end; int ret = strtol( specs, &end, 10 ); - if ((ret < 0 && nonneg) || (ret == 0 && end == specs)) + if (ret < 0 && nonneg || ret == 0 && end == specs) ret = (nonneg ? -1 : 0); return (ret); @@ -2512,8 +2512,10 @@ void wizard_list_items() continue; if (item.link != NON_ITEM) + { mprf("(%2d,%2d): %s", item.pos.x, item.pos.y, item.name(DESC_PLAIN, false, false, false).c_str() ); + } } mpr(EOL); @@ -2532,7 +2534,6 @@ void wizard_list_items() } #endif -#ifdef DEBUG_DIAGNOSTICS // Prints a number of useful (for debugging, that is) stats on monsters. void debug_stethoscope(int mon) { @@ -2583,7 +2584,7 @@ void debug_stethoscope(int mon) (mons.attitude == ATT_FRIENDLY) ? "friendly" : (mons.attitude == ATT_NEUTRAL) ? "neutral" : (mons.attitude == ATT_GOOD_NEUTRAL) ? "good neutral" - : "unknown alignment") ); + : "unknown alignment") ); // Print stats and other info. mprf(MSGCH_DIAGNOSTICS, @@ -2619,7 +2620,7 @@ void debug_stethoscope(int mon) mons_is_cornered(&mons) ? "cornered" : mons_is_panicking(&mons) ? "panic" : mons_is_lurking(&mons) ? "lurk" - : "unknown"), + : "unknown"), mons.behaviour, ((mons.foe == MHITYOU) ? "you" : (mons.foe == MHITNOT) ? "none" : @@ -2641,6 +2642,31 @@ void debug_stethoscope(int mon) mprf(MSGCH_DIAGNOSTICS, "ench: %s", mons.describe_enchantments().c_str()); + std::ostringstream spl; + const monster_spells &hspell_pass = mons.spells; + bool found_spell = false; + for (int k = 0; k < NUM_MONSTER_SPELL_SLOTS; ++k) + { + if (hspell_pass[k] != SPELL_NO_SPELL) + { + if (found_spell) + spl << ", "; + + found_spell = true; + + spl << k << ": "; + + if (hspell_pass[k] >= NUM_SPELLS) + spl << "buggy spell"; + else + spl << spell_title(hspell_pass[k]); + + spl << " (" << static_cast<int>(hspell_pass[k]) << ")"; + } + } + if (found_spell) + mprf(MSGCH_DIAGNOSTICS, "spells: %s", spl.str().c_str()); + if (mons.type == MONS_PLAYER_GHOST || mons.type == MONS_PANDEMONIUM_DEMON) { @@ -2650,7 +2676,6 @@ void debug_stethoscope(int mon) ghost.damage, ghost.brand ); } } -#endif #if DEBUG_ITEM_SCAN static void _dump_item( const char *name, int num, const item_def &item ) diff --git a/crawl-ref/source/debug.h b/crawl-ref/source/debug.h index d91965e254..c285d17739 100644 --- a/crawl-ref/source/debug.h +++ b/crawl-ref/source/debug.h @@ -116,9 +116,7 @@ void debug_test_explore(); * called from: directn * *********************************************************************** */ void error_message_to_player(void); -#if DEBUG_DIAGNOSTICS void debug_stethoscope(int mon); -#endif class monsters; struct coord_def; diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc index 756b9a5e3b..e68d8e3f9e 100644 --- a/crawl-ref/source/directn.cc +++ b/crawl-ref/source/directn.cc @@ -1559,6 +1559,12 @@ void direction(dist& moves, targeting_type restricts, wizard_polymorph_monster(m); break; + case CMD_TARGET_WIZARD_DEBUG_MONSTER: + if (!you.wizard || !in_bounds(moves.target)) + break; + if (monster_at(moves.target)) + debug_stethoscope(mgrd(moves.target)); + break; #endif case CMD_TARGET_DESCRIBE: full_describe_square(moves.target); diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index e563735a17..c29d578af2 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -653,6 +653,7 @@ enum command_type CMD_TARGET_WIZARD_MISCAST, CMD_TARGET_WIZARD_MAKE_SUMMONED, CMD_TARGET_WIZARD_POLYMORPH, + CMD_TARGET_WIZARD_DEBUG_MONSTER, CMD_TARGET_MOUSE_MOVE, CMD_TARGET_MOUSE_SELECT, CMD_TARGET_HELP, diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc index e0fe414bde..4ea0bd5fee 100644 --- a/crawl-ref/source/files.cc +++ b/crawl-ref/source/files.cc @@ -1600,7 +1600,7 @@ void _load_ghost(void) if (!_determine_ghost_version(gfile, majorVersion, minorVersion)) { fclose(gfile); -#if DEBUG_DIAGNOSTICS +#if DEBUG_BONES | DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, "Ghost file \"%s\" seems to be invalid.", cha_fil.c_str()); more(); @@ -1610,7 +1610,6 @@ void _load_ghost(void) if (majorVersion != TAG_MAJOR_VERSION || minorVersion > TAG_MINOR_VERSION) { - fclose(gfile); unlink(cha_fil.c_str()); return; @@ -1623,7 +1622,7 @@ void _load_ghost(void) if (!feof(gfile)) { fclose(gfile); -#if DEBUG_DIAGNOSTICS +#if DEBUG_BONES | DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, "Incomplete read of \"%s\".", cha_fil.c_str() ); more(); @@ -1633,7 +1632,15 @@ void _load_ghost(void) fclose(gfile); -#if DEBUG_DIAGNOSTICS + if (!debug_check_ghosts()) + { + mprf(MSGCH_DIAGNOSTICS, "Refusing to load buggy ghost from file \"%s\"! " + "Please submit a bug report.", + cha_fil.c_str()); + return; + } + +#if DEBUG_BONES | DEBUG_DIAGNOSTICS mpr("Loaded ghost.", MSGCH_DIAGNOSTICS); #endif diff --git a/crawl-ref/source/ghost.cc b/crawl-ref/source/ghost.cc index 38a3546d49..3b68663bd1 100644 --- a/crawl-ref/source/ghost.cc +++ b/crawl-ref/source/ghost.cc @@ -25,6 +25,10 @@ REVISION("$Rev$"); #include "religion.h" #include <vector> +#define MAX_GHOST_DAMAGE 50 +#define MAX_GHOST_HP 400 +#define MAX_GHOST_EVASION 60 + std::vector<ghost_demon> ghosts; // Order for looking for conjurations for the 1st & 2nd spell slots, @@ -293,12 +297,12 @@ void ghost_demon::init_random_demon() void ghost_demon::init_player_ghost() { name = you.your_name; - max_hp = ((you.hp_max >= 400) ? 400 : you.hp_max); + max_hp = ((you.hp_max >= MAX_GHOST_HP) ? MAX_GHOST_HP : you.hp_max); ev = player_evasion(); ac = player_AC(); - if (ev > 60) - ev = 60; + if (ev > MAX_GHOST_EVASION) + ev = MAX_GHOST_EVASION; see_invis = player_see_invis(); resists.fire = player_res_fire(); @@ -344,8 +348,8 @@ void ghost_demon::init_player_ghost() damage += you.strength / 4; - if (damage > 50) - damage = 50; + if (damage > MAX_GHOST_DAMAGE) + damage = MAX_GHOST_DAMAGE; species = you.species; job = you.char_class; @@ -526,7 +530,7 @@ void ghost_demon::find_transiting_ghosts( void ghost_demon::announce_ghost(const ghost_demon &g) { -#ifdef DEBUG_DIAGNOSTICS +#if DEBUG_BONES | DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, "Saving ghost: %s", g.name.c_str()); #endif } @@ -589,3 +593,27 @@ int ghost_demon::n_extra_ghosts() return (1 + x_chance_in_y(lev, 20) + x_chance_in_y(lev, 40)); } + +// Sanity checks for some ghost values. +bool debug_check_ghosts() +{ + for (unsigned int k = 0; k < ghosts.size(); ++k) + { + ghost_demon ghost = ghosts[k]; + // Values greater than the allowed maximum signalize bugginess. + if (ghost.damage > MAX_GHOST_DAMAGE) + return (false); + if (ghost.max_hp > MAX_GHOST_HP) + return (false); + if (ghost.xl > 27) + return (false); + if (ghost.ev > MAX_GHOST_EVASION) + return (false); + + // Check for non-existing spells. + for (int sp = 0; sp < NUM_MONSTER_SPELL_SLOTS; ++sp) + if (ghost.spells[sp] < 0 || ghost.spells[sp] >= NUM_SPELLS) + return (false); + } + return (true); +} diff --git a/crawl-ref/source/ghost.h b/crawl-ref/source/ghost.h index 8cb574dd4b..d10a664c68 100644 --- a/crawl-ref/source/ghost.h +++ b/crawl-ref/source/ghost.h @@ -58,6 +58,8 @@ private: spell_type translate_spell(spell_type playerspell) const; }; +bool debug_check_ghosts(); + extern std::vector<ghost_demon> ghosts; #endif diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 624393f230..e633ffe977 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -1880,7 +1880,7 @@ int player_prot_life(bool calc_unid, bool temp, bool items) // speed, not a movement cost, so higher is better. int player_ghost_base_movement_speed() { - int speed = you.species == SP_NAGA ? 8 : 10; + int speed = (you.species == SP_NAGA ? 8 : 10); if (player_mutation_level(MUT_FAST)) speed += player_mutation_level(MUT_FAST) + 1; diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index c8bfdd0d94..4b52954da6 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -943,7 +943,6 @@ int spell_skill2type(unsigned int skill) static spell_desc *_seekspell(spell_type spell) { ASSERT(spell >= 0 && spell < NUM_SPELLS); - const int index = spell_list[spell]; ASSERT(index != -1); diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc index cdf5a42b89..4cfb3e457d 100644 --- a/crawl-ref/source/travel.cc +++ b/crawl-ref/source/travel.cc @@ -3066,9 +3066,9 @@ level_id level_id::get_next_level_id(const coord_def &pos) int gridc = grd(pos); level_id id = current(); - for ( int i = 0; i < NUM_BRANCHES; ++i ) + for (int i = 0; i < NUM_BRANCHES; ++i) { - if ( gridc == branches[i].entry_stairs ) + if (gridc == branches[i].entry_stairs) { id.branch = static_cast<branch_type>(i); id.depth = 1; |