The last point means that the player (or admin, in the case of the servers) has to delete a buggy bones file themselves, but the benefits of making tracking down bugs easier should outweigh that inconvenience.
Add a new wizmode command that calls debug_stethoscope even if the game is not compiled in debugging mode.
Also, Stone Soup 0.5 bones files are now officially incompatible with 0.4. (The changes to the spell ids cause ghosts casting spells to crash the game.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9832 c06c8d41-db1a-0410-9941-cceddc491573
MRUMXF3YPJCHAW4DC7DHJR5O77LXAJLMA53IOJP4YEMAOZRNWNKAC VBRYPOHVS4GLHSQ5CE6K6GJTPK7FQE5VLRC5WLSOWKLQEDNPR7ZAC QNSFZBLVAN7BPYYRXUELHBZCLIQTYDATDIXF3YVH7LBBST66VUCQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC 5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC N7CKO4LATD44HNNA6747FY7M4BA4UKTMSJRL7KXONYADP5VMHROAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC SG76BPJKTQGDFNP5QFMAVR6H72FMMAYCECVGSWWSCLMAVQX7E3FQC XOFMSAGWPC54V3QR4CJZVWKY3BG54V32JOFCGDU4SMPKFNPH7J4QC W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC 5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC 6DNNPEMZGBQDMA7YG4LCTQUVZ7LYPC3R4A2XBYT5SDQ65GYOLJVAC 34LSODHJVOGATMHLJN67YGGWOV2PYDGAY3OAZGCU6J2ESULN6S3QC 2WWSPLCXLSMBGTXUC33EQ5YBOA5IBFSMJSTZ2TU6HZIMZZWZJWGAC L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC O7S3ILRELHICJXXTDGMF7KPPZWYHPYCNDPV2I77FZXXH4I454B4QC DWWOM6V2Z4RQVT6AKW6OYLSFOUE4W5PTP2SH4AAZE2E4EIH4RLUAC SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC 347OTVM5V6C5UE5ERARQJQTVNTHKQNL5NEKE43TI2SYUH64CWT6QC Y4ORYGHVKJMAF2HCG6AIGTZP56DBLHDNR5JERCQBJJRUWD6WZMCQC Y4NA3JSN63RLATF4NNBPSR5CWF5Z7UEMWCGVX4B6NOAR47CGM4GQC DNAZ35MX7CF3D53NHBU4YOL4UI5CT3VECTI3WRXXOAODXEXDAMWQC NS3KXJXQSN33UQSOBDK3WXXKA3KY5YOUJL67NBZKGQAJYDYZ2COQC DINIHMHQWCV7UKXHNIA2TLT2ZOO5IYJJE7GMI3XUAWYIR37AKD2QC RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC N7J2IWU7B34XIUYWHJF2RTRAXXAQLVVZLWWHFWN4FC5PLNFFEWCAC }// 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);
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";elsespl << spell_title(hspell_pass[k]);spl << " (" << static_cast<int>(hspell_pass[k]) << ")";}}if (found_spell)mprf(MSGCH_DIAGNOSTICS, "spells: %s", spl.str().c_str());