NOTE_DEBUG_XOM might be a tiny bit technical or spoily, but at the same time I like the results and think this flag could actually be turned into an option to autonote all Xom effects, so I've left it on in this commit, in case someone else is playtesting Xom.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9598 c06c8d41-db1a-0410-9941-cceddc491573
7GCM5WFIKX5N2PQ5UCVNMFJEKTZTBCUVZH5RZ7CPDL3Z6GB26KAQC 3KQZKOH3ILSXKL2KVT3BPHQ7AMR2B7T6GNWYC7T3SG2UQBXQZDCQC M7WTOF3BVX5MGA7AQZB22YEFWCSL7RLW54PQM3MTRLCKUCUZZEUAC UEO5XIX4ORXCZH2VSSCCUAQEXANUIBYSHSREXAFBE4PAJDBQU3BQC MACQITZTGQEWIRQWNC7G46R4QUFSLGQ7ATERWEHAFRA66AS2XICQC PTJJ6D52LDVJN7WA7NMYV2WHH3WJMWWLRGF3D7ZSBUNLAACFRJHAC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC F7Q7QRZACTDPP6KH3AB5J6B6B5PRVV4FURTOIGXHRHWNVSQT3TVAC JYEEOUYQ7ZPKOGWUV7VCORBVSOLF2UCBFBH3TR75RGOSS6PNKYUAC H2OHWQKMHL66CPVJGJL35RY7EIZB74SZTGOLDJDSCG5WVEVPIIUAC 64HB7VYSYHQEN5UP7OYJ5GSVA2XMDSLLH647UPWE5NSFF3AVZSSQC PUY2VWZJ3G7HNCLIHZP5VGT2DAGHI436ETDJQTPEBFPRSEHOM2NQC DHI4FAUHYA3V7I2LKBE74AA672FVDUE2LBOZHTTL3EAE4YJP2ICAC TPJYUAKSEZMCCCJANJ5EQ7F67QVTPFEOWBD7WYK33NLRN657Y5VQC 43XCHFXZ34FDVT2QG23RZ65V6NRBY6PE3ENQEEDXFYKRR7IRFHCAC HCVH2CWL32UD66O6Z7ZYDUASWN3RF5TW6FSWURGMD7MELKB772FAC 5WHLQTLOJRJ67M4KAJZURHMNQLYHBW4XHQFBXV2LUQ4W6YKTOXVAC KO7PZNWIRLSAPOXUHK7U446ZXT562QCPIT3AYFYKPG7OWRLNBU4QC IBV5MNXWCCOWCI7DPVTPFEEMLX7QWP75EP6YQ3RA2WJOKWSGMPSQC XYQFJLTMLSU7LC7VODUJVN5F2P47STH2KVSP7Q3BSCUUDRHROW7QC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC NDP5ANTLTYSDYLBHZPEJLO6IDU6OKA6UQHYWSBUXEEPYHZLRTYNQC 3BJ2OOF4F524G6UKVGOZVT6W3FSTSHHTKRJADUBZCHDXZWV3KANQC X55CKEKNO5RD2JMQ4MYX6PXQLDMLH4U4PPKSBK5EQ622J5HOPD2AC IP4A3VRYFYIVLRUAU4DF4KDNP6E4UISWJX3LI2F4EGSSMIJYRJXAC 6CZYPP67SB2M3SQS3QIPJWHZY7PJIRTTBH5CLORV3AALVTJIL5MQC OELSU5HUOEW6D2AAZJUYB5G25OOGR3YU7UZKNA57EJG5HRMCQ7UAC 2DWQ5F6EYSBKF7CN3MFNMXQWS6NWHKDJN6RN6AH2FWAJUZGLB6RAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC X2FMEN4E345XD26Z2X7JMJ7VGHOGCGIELMHQRE2ITLVNQACP3NOQC EYYWIH7377INOKPRABJUATNQ2YWKLOVHZKQIY55POX2YXVMDDWAAC CJZ3R6IPU766AVGO2QHTEHY6BGM375IUL4W2XA33F2G2SGIAD2KQC XZTGZ7MOPX7ZOHQ4IQPXOHGUH5WPRNOYAQ6IQOMZDZYNVSAYFTNAC MSMWAL6JZAWNGZXCNXPATUMAU6TVXBWWFY666P7UBSZ5LPYJYUCQC 2J3TK3NYTO5XO6IHLTV5O6B3HYN2NHXD5ST3WLL5KPTUOVS5F3RQC IH5TVAZGKN7IQOTSOJ56WG5C3CMTG3AI63XT3XVNHC7DI4N2TSUAC W4YW6B4WTSMU4E5TXG27A6C2ZH3WASWOKCEMVHP7KEF2CZDLADJAC 2SMZGNBB352OJBIT2UE3NONODTTMV3FJJFBQUN4VNLLNYJKTJKBQC V7IKAPO5OY7CJTT62GMHQOD3EQW42FTTY3KDBOTJUODPS5WMBCHAC 3DQXSE4YGFBBDUWK4YEOFWW4UPWILWELFSLP37SL6BERGAZJC5YAC 3HGELZU7NELOQ635HZO6IJIYLBSNCJ5VPH46IE22KA3OSLEFK7AQC 6G55KX5P4X7RFJAOJ7QU4ATMWC3ZVTCXKVHTYEAH5JYYGZCFQ7SAC SOCJXX6MMOXLBEWBID4QN5FW2YNYULNNN7K3IRL7RSWK5EUNAZLQC RQ24Y25QDO2GY65XESEVBCP6VXCB7BDTWXO42IPPI6UPRJQ5XYDAC UPA65AL4JXYLIHH4D42IWJHRTOAF2BPOVZOAKOXBLZBYIMDZDFFQC RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC 3PBG6FJ6WGSR4UM3I7UQUYYCSYU3UBCKCIKYKUEEANIK72TUL4XAC 5HPIIGNWB3UXJ5APQLAGFOV2CA7J2GB7AWAVVZDBB2YZS4TNCMAQC OSRZEPPGBIMSZBWIVBTZTTIMV6TEUGVZRZ5AI2ZJW7CVZZQBUIMQC VTQBKNSYDYZVBBQTF32DEECEEDYX75GX464E7GVFSK22N5JRNM4QC 25EF5X4H3LURXFZ35ZGYGUB6ND7NFQVH4M2XX2SI33I4XRGYG5HAC QZERCVTY5BISIKSDH6WUXGZPIBAF4KUCGSZEEGMGBCORNUXT4HXAC CH7JECYYH35H4TRHRNRTRJCQTQLZ2WRH62TKV72SUIU2RTK5OH7AC HMC247EGUJ3Q25DQ3VKUCIGLIO4SZORFQQWAPAF6S2WLQY3WU5TQC OMSSJON5IE4LBXJ7CZE52IZRZS7ZICS23SKP4AGLHH3QNCRMEFVAC potion_type pot =static_cast<potion_type>(random_choose(POT_HEALING, POT_HEAL_WOUNDS, POT_SPEED,POT_MIGHT, POT_INVISIBILITY, POT_BERSERK_RAGE,POT_EXPERIENCE, -1));
potion_type pot = POT_HEALING;while (true){pot = static_cast<potion_type>(random_choose(POT_HEALING, POT_HEAL_WOUNDS, POT_SPEED,POT_MIGHT, POT_INVISIBILITY, POT_BERSERK_RAGE,POT_EXPERIENCE, -1));bool has_effect = true;// Don't pick something that won't have an effect.// Extending an existing effect is okay, though.switch (pot){case POT_HEALING:if (you.rotting || you.disease || you.duration[DUR_CONF]|| you.duration[DUR_POISONING]){break;}// else fall throughcase POT_HEAL_WOUNDS:if (you.hp == you.hp_max && player_rotted() == 0)has_effect = false;break;case POT_BERSERK_RAGE:if (!you.can_go_berserk(false))has_effect = false;break;case POT_EXPERIENCE:if (you.experience_level == 27)has_effect = false;break;default:break;}if (has_effect)break;}
#ifdef NOTE_DEBUG_XOMstd::string potion_msg = "XOM: potion effect ";switch (pot){case POT_HEALING: potion_msg += "(healing)"; break;case POT_HEAL_WOUNDS: potion_msg += "(heal wounds)"; break;case POT_SPEED: potion_msg += "(speed)"; break;case POT_MIGHT: potion_msg += "(might)"; break;case POT_INVISIBILITY: potion_msg += "(invisibility)"; break;case POT_BERSERK_RAGE: potion_msg += "(berserk)"; break;case POT_EXPERIENCE: potion_msg += "(experience)"; break;default: potion_msg += "(other)"; break;}take_note(Note(NOTE_MESSAGE, 0, 0, potion_msg.c_str()), true);#endif
#ifdef NOTE_DEBUG_XOMstatic char summ_buf[80];snprintf(summ_buf, sizeof(summ_buf), "XOM: summons %d %s%s",num_actually_summoned,hostiletype == 0 ? "friendly " :hostiletype == 3 ? "hostile " : "",only_demonic ? "demons" : "monsters");take_note(Note(NOTE_MESSAGE, 0, 0, summ_buf), true);#endif
lose_stat(stat, 1 + random2(max), true, "the vengeance of Xom" );
const int loss = 1 + random2(max);lose_stat(stat, loss, true, "the vengeance of Xom" );#ifdef NOTE_DEBUG_XOMstatic char stat_buf[80];snprintf(stat_buf, sizeof(stat_buf), "XOM: stat loss (-%d %s)",loss, (stat == STAT_STRENGTH ? " Str" :stat == STAT_DEXTERITY ? " Dex" : "Int"));take_note(Note(NOTE_MESSAGE, 0, 0, stat_buf), true);#endif
#ifdef DEBUG_CHAOSstd::string chaos_effect = "CHAOS effect: ";switch (choice){case CHAOS_CLONE: chaos_effect += "clone"; break;case CHAOS_POLY: chaos_effect += "polymorph"; break;case CHAOS_POLY_UP: chaos_effect += "polymorph PPT_MORE"; break;case CHAOS_MAKE_SHIFTER: chaos_effect += "shifter"; break;case CHAOS_MISCAST: chaos_effect += "miscast"; break;case CHAOS_RAGE: chaos_effect += "berserk"; break;case CHAOS_HEAL: chaos_effect += "healing"; break;case CHAOS_HASTE: chaos_effect += "hasting"; break;case CHAOS_INVIS: chaos_effect += "invisible"; break;case CHAOS_SLOW: chaos_effect += "slowing"; break;case CHAOS_PARALYSIS: chaos_effect += "paralysis"; break;case CHAOS_PETRIFY: chaos_effect += "petrify"; break;default: chaos_effect += "(other)"; break;}take_note(Note(NOTE_MESSAGE, 0, 0, chaos_effect.c_str()), true);#endif
#ifdef DEBUG_CHAOSstd::string brand_name = "CHAOS brand: ";switch (brand){case SPWPN_NORMAL: brand_name += "(plain)"; break;case SPWPN_FLAMING: brand_name += "flaming"; break;case SPWPN_FREEZING: brand_name += "freezing"; break;case SPWPN_HOLY_WRATH: brand_name += "holy wrath"; break;case SPWPN_ELECTROCUTION: brand_name += "electrocution"; break;case SPWPN_VENOM: brand_name += "venom"; break;case SPWPN_DRAINING: brand_name += "draining"; break;case SPWPN_DISTORTION: brand_name += "distortion"; break;case SPWPN_VAMPIRICISM: brand_name += "vampiricism"; break;case SPWPN_VORPAL: brand_name += "vorpal"; break;// ranged weapon brandscase SPWPN_FLAME: brand_name += "(flame)"; break;case SPWPN_FROST: brand_name += "(frost)"; break;// both ranged and non-rangedcase SPWPN_CHAOS: brand_name += "chaos"; break;case SPWPN_CONFUSE: brand_name += "confusion"; break;default: brand_name += "(other)"; break;}take_note(Note(NOTE_MESSAGE, 0, 0, brand_name.c_str()), true);#endif
}// Turns autopickup off if we ran into an invisible monster or saw a monster// turn invisible.// Turns autopickup on if we saw an invisible monster become visible or// killed an invisible monster.void autotoggle_autopickup(bool off){if (off){if (Options.autopickup_on){Options.autopickup_on = false;mprf(MSGCH_WARN,"Deactivating autopickup; reactivate with <w>Ctrl+A</w>.");}if (Options.tutorial_left){learned_something_new(TUT_INVISIBLE_DANGER);Options.tut_seen_invisible = you.num_turns;}}else if (!Options.autopickup_on){Options.autopickup_on = true;mprf(MSGCH_WARN, "Reactivating autopickup.");}
{// Now that autoprayer has been removed the vectors aren't// really needed anymore, but let's keep them "just in case".std::vector<std::string> deactivatees;std::vector<std::string> restart;if (Options.autopickup_on){deactivatees.push_back("autopickup");Options.autopickup_on = false;restart.push_back("Ctrl+A");}if (!deactivatees.empty()){mprf(MSGCH_WARN, "Deactivating %s; reactivate with %s.",comma_separated_line(deactivatees.begin(),deactivatees.end()).c_str(),comma_separated_line(restart.begin(),restart.end()).c_str());}if (Options.tutorial_left){learned_something_new(TUT_INVISIBLE_DANGER);Options.tut_seen_invisible = you.num_turns;}}
autotoggle_autopickup(true);