i.e., allow merely praying over said corpses. Now, the only gods that pay attention to butchery are Kikubaaqudgha and Elyvilon. Also, add several miscellaneous fixes.
5PE244O6RR2LB5YNIHPXYMOUYCDR4WIAQNV4DRPRZBXNGEC2K4XQC
64ALACNP37WC4GSL7H5OZXFTEMK6XAAVQTDMHCFADBVGZZLUWAWAC
67WBQJLU7E7NQR5OD57PZIJNZLBXS7MC6VLEAFK7KHKNIURZNWMQC
LQL6F3NIIER36EKJ5XE2LVIH56R75ENH6L2UJDD3RKXYUBYMJRCAC
246C7O2JF3K5F4BBKYAAQP5N236M763V6DB4AF2JEYM6Y67ZDUEAC
2JEJP4VO4NUN5X63WT54RWIXPJLHB6NJ7LVGQCU2QHO7CRBIPT2AC
RA7UG6FR2WA4AWD3PW4Z25PKPP6ZX3LOA3V55CZHJHBH677MTUCQC
NFH2FHOAK4HAZDJJDBKU7KLA3PDCPGIM3TCMJV4ZZSZMY5W47KBAC
NO3CRB2BIS6TXN62ZPC5WBPTO2TQ44NEJ3BBCSILRDLNVXZ753WQC
FF6PPL5KW5DL4T7D3DHJLPCOSX7UP6IFGX5M24VYRB2SQZPYRUNQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
ONKB2ZZ2MWY7UGPBHW6EE4N3EEPJONPRRALEFZZR2YTZHNEIGV5AC
LOC46PHUFJ3MDWOYUEH4R24TGGE4ADG7C44O2ZNB4EBF2YD6VX7QC
264FLET5STFALEWUDOEFCR273Y5CY2WZDHL56WHZUAQ635RUN6MAC
DF5LOTJFSXOT7UBDHLBDLGA22OY4L7ZF6CVFP6H3KL4N5CHB5C5QC
EC26XYXTRI5NAO7FHLP57FS7Y3XI2FTHTS4JXWNHABUT2TBKYVWAC
DGFWFFHCEBQK2TSMHN7RYPRNRVGEAYXM7GYJ4L37Z2ZNSIIUWQ4QC
HW7XKO7HRAUQVDVVKG5GA7PYAEL5J5GKVDPT2CKAD3FLERAY5HLAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
L4DV5O3UTY456Y6YFXELHEWEFLB6ZUCENZ3AKYJZLGRRGUVHT5QAC
6PNQWEUFFTVYX76X5UBLRSGPFADTJ6UVD5KMBTCLQAY3YYLO6PHQC
SJVBH562JHDQ4JXWCXRX6EPRAJOZLWNPER4RA76QCBMWUXN26ZFQC
3XQAOZVTIDFQ7EUC36J2AFMTHZXLZ3G5MBHFN5JZWEWWCXFENHRAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
SA36K3OJ75PNVR2F4QAPNU2LUGFTVHNIAZVSXCBXBT2NLW2RTUPAC
JSHUSNMOJRLZJF7EK5ETYH65G4C3YYFGLWTYIAH4KPVXKC5AUCDQC
PYRDMGIYU5BUMTGRTYHRKD2D7WULYWCVOU46TJ4R5NSVEZVCZTUQC
4O3VTUJT5T7NBNF3Q45XO2WHS6TCJXVLH6CKX4K36WUBDRT5F6KAC
DHXIQXK5VTL5JDDEERAVLZK4KBQLXFTBN5TQ6MH3PRBLG5ULOS4AC
M2X33JKIB2O27DLCUPSH7LSHEFDN76TUCLGWFNU5LSSR767JSTUQC
AV3T4BN5IFAAE4CQURI5BKTUW22AKA7DVCTPXM4ZVCI6P62UULCAC
N73PR6EHLADBQDS2XACPYB27U6A3JV3UVI7JAFFOJKCMYCH7DDEQC
EGZHLWGV7MO4JXHWIMGEKC7Q4EFD3OI35FXYLZ4E37GPEMJXAETQC
DQ66I7TXDJ3RLFVX7YOVGSVLCSVHEJJ6O5B6XGEHHO2ION3N6IQAC
DFUIVFA7LFNOL452XOKUAKAAUVIO7PFJXIOQIPQYRR4S5LPWXHZQC
PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC
DA4SGKR5R6YAADTB3R2KLIMCFH45H7UOO7YTC665C7TSY4BRBTJQC
U3LUN66XOUGBCEA3E4BFKXBFTPGV5ZQRUTXUYRA73LF6YOHOQHEQC
4RWYH3CQPAAOK2OM2POLRTY6A5CPHYZJ4B55VAVSCWTSCOPWMF6AC
PZNRGNZPN4YLXL2UDMEUPE33AAZZ6Z2YPK6EQGYZL2PNTRWLCUNQC
RRNEVUYOK5S4M4QH77N34IXSSNUXVQAIZQLXAQKQCRITMPUKGP6AC
PRQVFUGUGPKI2Q74ODEI3CYUJQB63CKC6ONQTE3BTOHKXG4JCNLQC
IIUK3DT26O7F4IBKB6QFTPLO4EVKBH55SAEXLNQEQRLDGJ37NDGAC
UET576SVCGS2TXEDRTO7BUTOTLJ77MYHIVZJCDWGH2BAXYMKG6DAC
5FZYO6GQ5DWJFMRHCFSLAI4NVGK2HJ6RE7BLHBVTNQJHN75K5LUQC
CXP2QQ7P3BW5H552RUX5RLQ3HCPBTFB6Z6D2VWMKHJBLFVOKOGGAC
UVJBHQ5KGUIEFRHKTYQPKSXYDUDKTRAXINUXGJJJ6QGNCR6JO7ZAC
JW5LVDYDDQMYLQLEB4WS7V3CV7FTHW7PSADCNY5JOJW4ZR34X6GQC
RIGGVFYNCRFDUUCMIAN7SDEOUL4VMMZI6OYXZW72BVNI4WXJQXWQC
SYXSZQICCRNKCSZ4HDO24JIE5HBVMWFWLXXM26MS3OKB37PJOAVQC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
VEOWM6UDFNWRAXP5YUO7XBH4ZALAJXCWRA4IRDITXJ3QWH42CTWAC
FXMCYF3SEOI7OY5Y5Q335TAE53L4WETNOYAVTK3EI6YI3IU5UKGQC
MAXLIRKX4Q3QOV4PUICT47GWJTMAHE5LKYBYYT7MF46VSXJOWYRQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC
3YAWEKEQ7P2OL2X3H53DHI7IMAKH6GDQ7NE5GBNYN7O64L3NEDSAC
P25D567E2UEAQHNI7LAZPNY7KAI3J4OE77YKLWOIEEALC5RREJHAC
RIW55YSFKKTJLBTOJRVUBC7JOFUBOK7OBMISW4PBSVLYJHAAKPPQC
M6MBPHNAERUXYJ7KHK5FE2B44CLBY4M5MR5KY74HVDFNHVLOEQIAC
PSLBTBSCSC65MRX6TEGGFNKPXLP4OE2FZYGMM6VRJTBXTTGMP5UQC
Q57GOIHVFNJHTBYNUGJNME3UF2QFRJ6CN2UXVY47NHU7XAT7JJYAC
SXUKGEXMGRRN6UO2GJW4HSVU5TSUNUHIHBMMF7CAG7QMLKZYWTKQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
5R4WV4H5SNIM5WU2X33JJ63HIEGKCXN2HELZ6FRRKKANPLMRLF3QC
MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC
K2B4YUKFNQX33VFTVF4WRGMXUG7OG6AKCE67MU562QNBJXGOVQTAC
S6ADNAPM545WP3FRHCU6UWKX5VEMY5TPSIZYSZ3XE76VCBTVIN5QC
3PBG6FJ6WGSR4UM3I7UQUYYCSYU3UBCKCIKYKUEEANIK72TUL4XAC
RX6575DZOHRUXQUZH34YZGPZJF4STUPLBQDIVTINA2L6LVCKRIGQC
RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC
GCDBSJXJCPEK4NCX5CVGDBK3432PFCU5OCO2F3DA32332ALI2ZYQC
ALHRVZZEWK6YGOVB422CRLBKHV6ANAWMPP2EIWURXLKEWSHPHXCAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
MT3256427VMCV4JUFWCN7ULY4KXSND5ZL5THDKYNWWYOXXR5DLIQC
NKONHW4JNY6HP2M63MNPM3H64ZWSUNUT5FX2STW4KTS4AMXJXXVQC
JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC
WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC
snprintf(info, INFO_SIZE, "you butcher corpses while praying%s",
verbose ? " (press <w>pc</w> to do so)" : "");
snprintf(info, INFO_SIZE, "you sacrifice fresh corpses%s",
verbose ? " (by standing over them and <w>p</w>raying)" : "");
case GOD_OKAWARU:
case GOD_MAKHLEB:
case GOD_TROG:
case GOD_LUGONU:
simple_god_message(" accepts your offering.");
retval = true;
if (random2(level + 10) > 5)
piety_change = 1;
break;
// item_value() multiplies by quantity.
const int value = item_value(item) / item.quantity;
switch (you.religion)
if (god_likes_fresh_corpses(you.religion))
{
if (x_chance_in_y(13, 19))
{
gain_piety(1);
relative_piety_gain = PIETY_SOME;
}
}
else
if (item_orig == MONS_SAINT_ROKA)
chance += 12;
else if (item_orig == MONS_ORC_HIGH_PRIEST)
chance += 8;
else if (item_orig == MONS_ORC_PRIEST)
chance += 4;
if (item_orig == MONS_SAINT_ROKA)
chance += 12;
else if (item_orig == MONS_ORC_HIGH_PRIEST)
chance += 8;
else if (item_orig == MONS_ORC_PRIEST)
chance += 4;
if (x_chance_in_y(chance, 20))
{
gain_piety(1);
relative_piety_gain = PIETY_SOME;
if (x_chance_in_y(chance, 20))
{
gain_piety(1);
relative_piety_gain = PIETY_SOME;
}
break;
}
// Nemelex piety gain is fairly fast... at least
// when you have low piety.
if (item.base_type == OBJ_CORPSES && one_chance_in(2 + you.piety/50)
|| x_chance_in_y(value/2 + 1, 30 + you.piety/2))
{
if (is_artefact(item))
{
gain_piety(2);
relative_piety_gain = PIETY_LOTS;
if (item.base_type == OBJ_FOOD && item.sub_type == FOOD_CHUNK
|| is_blood_potion(item))
{
// Count chunks and blood potions towards decks of Summoning.
you.sacrifice_value[OBJ_CORPSES] += value;
}
else if (item.base_type == OBJ_CORPSES)
{
if (item.base_type == OBJ_FOOD && item.sub_type == FOOD_CHUNK
|| is_blood_potion(item))
{
// Count chunks and blood potions towards decks of
// Summoning.
you.sacrifice_value[OBJ_CORPSES] += value;
}
else if (item.base_type == OBJ_CORPSES)
{
start_delay(DELAY_OFFER_CORPSE, 0, corpse_id);
// Kiku torments if you butcher a corpse while praying.
if (you.religion == GOD_KIKUBAAQUDGHA
&& you.piety >= piety_breakpoint(4))
if (!rotten)
simple_god_message(" inflicts torment against the living!");
torment(TORMENT_KIKUBAAQUDGHA, you.pos());
you.piety -= 8 + random2(4); // 8 to 12
offer_and_butcher_corpse(corpse_id);
// Kikubaaqudgha torments if you butcher a fresh corpse
// while praying.
if (you.religion == GOD_KIKUBAAQUDGHA
&& you.piety >= piety_breakpoint(4))
{
simple_god_message(" inflicts torment against the living!");
torment(TORMENT_KIKUBAAQUDGHA, you.pos());
you.piety -= 8 + random2(4); // 8 to 12
}
result += "You can sacrifice corpses by dissecting"
" them during prayer.";
result += "You can pray to sacrifice all fresh corpses on your "
"square. Inscribe fresh corpses with !p, !* or =p to avoid "
"sacrificing them accidentally.";
if (delay.type == DELAY_OFFER_CORPSE)
{
// Don't attempt to offer a rotten corpse.
_pop_delay();
// Chain onto the next delay.
handle_delay();
return;
}
}
else if (delay.type == DELAY_OFFER_CORPSE)
{
#ifdef DEBUG_DIAGNOSTICS
mprf("Corpse %d no longer valid!", delay.parm1);
#endif
// Don't attempt to offer an invalid item.
_pop_delay();
// Chain onto the next delay.
handle_delay();
return;
case DELAY_OFFER_CORPSE:
{
if (!you.duration[DUR_PRAYER])
{
stop_delay();
return;
}
if (food_is_rotten(mitm[delay.parm1]))
{
simple_god_message(coinflip() ? " refuses to accept that"
" mouldy sacrifice!"
: " demands fresh blood!",
you.religion);
_pop_delay();
// Chain onto the next delay.
handle_delay();
}
else
{
offer_corpse(delay.parm1);
StashTrack.update_stash(); // Don't stash-track this corpse anymore.
}
// If we were interrupted while butchering (by poisoning, for
// example) then resumed butchering and finished, swap back from
// butchering tool if appropriate.
if (you.delay_queue.size() == 1)
handle_interrupted_swap(true);
break;
}
"jewellery_on", "memorise", "butcher", "bottle_blood", "offer_corpse",
"weapon_swap", "passwall", "drop_item", "multidrop", "ascending_stairs",
"jewellery_on", "memorise", "butcher", "bottle_blood", "weapon_swap",
"passwall", "drop_item", "multidrop", "ascending_stairs",
{ "god_likes_butchery", you_god_likes_butchery },
{ "can_consume_corpses", you_can_consume_corpses },
{ "god_likes_fresh_corpses", you_god_likes_fresh_corpses },
{ "god_likes_butchery", you_god_likes_butchery },
{ "can_consume_corpses", you_can_consume_corpses },
}
return (0);
}
static const char *_moneat_names[] =
{
"nothing", "items", "corpses", "food"
};
static const char *_moneat_to_str(mon_itemeat_type etyp)
{
COMPILE_CHECK(ARRAYSZ(_moneat_names) == NUM_MONEAT, c1);
return _moneat_names[etyp];
}
MDEF(meat)
{
if (const monsterentry *me = mons->find_monsterentry())
{
PLUARET(string, _moneat_to_str(me->gmon_eat));