git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10271 c06c8d41-db1a-0410-9941-cceddc491573
5WVUTEZLEZEML54CKPR6GACQBYY3EMVNXMLJOREN6SSEUZGC47AQC RDS3NSFOLBAEGHBFEQ4TODN5QSJ2DLDM2SIVVUMA6IVRHAZLRVKQC Q43X3MHS6IVLGSIIUJMTZT6NO6S4BDAUAJE4UJBXN4KWRFPLYZEAC WUCXHWMF2FL5KCC6E6KNKMYL2NBXXC3WVRY2AUPWSBAPWJFGS34QC 5VUJ4K2LSY35LKIKRCY7YIQP4GK6AYOZ5QUL6G4NSO5DIX2Z2XSQC P2C3BQS22ZA4FBKNNKNSPT7II6BO5BA4ZFUKBOYYTW4VP4BJDWEQC GNVJ7ESHE4IPEZCRTBTHUQXSZWWKXLOU76G3XSTEAURMI4JCPLMAC NZFL7NLM45VHI2KKS6ADHIYBORGAUHANELYTFBAK6GNFHAUNZJDAC BR6HF3PWCXUG24OBIWTCZ64DDVBA2G6BQBDJ5V5WMARRQBG2CLGQC LQL6F3NIIER36EKJ5XE2LVIH56R75ENH6L2UJDD3RKXYUBYMJRCAC LOAPDCDZDTOXBCNX7IQBCACP7TCMVUBNZVUTUCLX5VXM7MEFPQBQC 7NRMOLVOLPSF4KW23GZOO4X6BMGSMBE3IDMO4WOKBZXPYCLRZIXQC WRDCASRSGOBY5RLVORAMRBSYKEWLLO7VZ4V5NQG2TKBWYNU4OZKAC OY7HY5MTXM2OO43HM2GYUS5U3MBTKDM66IALE5OXAXF2EGYVAEGQC 2JEJP4VO4NUN5X63WT54RWIXPJLHB6NJ7LVGQCU2QHO7CRBIPT2AC MG6LLF3XYCOEBQRX7TJ4MUTKM3IROYWUMZGCMYVW4TGDG36CJMJQC 4LNIHTHZTCOEZEHZ4GW6WCZH4UCDWKK5UVUKEDODEBBS4YH2KONQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC L57WEZMVIHTFRLWVIPWOIOWHCF2I53TVUVYJ2V6IZ64R56FVTZZAC J7VTRSN2BLWL7QJMHG73LBUOUL6WNNT2ZAVEDMGYB6SDX3L5GGYQC 4SUUJM2DQUEWHDG3UKJUDZABLHFVF2CFUX5GVAWKT7BBBGR2ISTQC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC HBXWZNXAJ7LUX7FYUIHQYBTRMWVJC6CAQQL3NNZHK5ETLIFEZJ7QC TPZWAV3USKO7RX4IGHLZKVPRN36K33PJPSZYL6FZMX4XBHTYOQYAC DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC AM7QPHDAWNXHLUEVUHVRHG2RO2DOIEFFU4GV3DCIROW6O5HW7H4AC PSCYVKJ7DGXAL3V5U4O6AJTRV6Q3N3SHQWAZ73VIPRTE4W64F2XAC M7WTOF3BVX5MGA7AQZB22YEFWCSL7RLW54PQM3MTRLCKUCUZZEUAC IPPPBA4G2LODBP3EJIYGUAAOMHKLNBXHBD7KVX2JVDTA4DETHO4AC Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC 22ZPAVDZLX4R66AODFVA56HH4T3XU62UUON6LYZG3GGTXCTD3YVAC XDJGQNFELURGXMUAOOVALQMSLAJVHMG63KPKVA33HTJFVZROGZ4AC QO5ZJWQ3JK3PEGBPTQSAYIPEJEHG2M2KTD74227G5VG7DVXUL3BQC IP4STBRVFU5OPNAPM2XZWU77PXHKLOPBW5EGLGB4ZHYNZS7QKTKAC NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC LM764EO6YIFOKMRXWZ5S4GYZB4BHZQDTEFP7MEVYO4NN4EDOFGNQC NDKS43E4XVAU3FDY276OF5JW7E5SF6F5EJD2XLV5JLKZ5W6N554QC N73PR6EHLADBQDS2XACPYB27U6A3JV3UVI7JAFFOJKCMYCH7DDEQC PRQVFUGUGPKI2Q74ODEI3CYUJQB63CKC6ONQTE3BTOHKXG4JCNLQC P52QVYEFQXNK6IXNN2EMZIBLOIHHGQ7LODWIGWPJLANGVIPQK5IAC JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC RWSXCNYUGDSMP2GKN22HROC5Q2GHSAVJJUDRT3Z53WU2DAI4IZOQC 6YE7VMQJZ633V2FJFP2JQC5R37MMOBPE2PVIZWW7VYAO6BOJB73AC DF5LOTJFSXOT7UBDHLBDLGA22OY4L7ZF6CVFP6H3KL4N5CHB5C5QC WXZQJUZXMYS7R6ORNB7DWE5KEUXT262GXWMRPOJYYB4I3BFGYLLAC P2OYYNPHIBGOLT4CRLNTTIXDN34EU2QCMFQJNLAMUAHQXZTEDPXQC DHALALIGG7PVB52N6PDZRMXGML6MV53MUJBLO2ZP3L24H7EVVBWQC KHYL5UOMGS7HLVEQNVIOYWNP2ZH2THKZ5CGGIZFI6NN5V2YD3YEAC L4DV5O3UTY456Y6YFXELHEWEFLB6ZUCENZ3AKYJZLGRRGUVHT5QAC AWPVLDOOVIARJANEGN2TXGMZSSHJI4WMGMYRH6OOSFSEQUIDY6GQC EI5XQIKW3OBVTDVT2A4Q535I5FOVEKARLFISM457IHGAK7TVOMVAC C2VJXKTIPFZ34C6L6FNCDAGEI7NLTKUXTNB7RN4EYAJCALULIBMQC 5WKKONCYM73GBJ6GDYK3OLZ2PB7KJHFDYGEMHQQMPQMFJJHTLWCQC IYMUEJG2VI3TV7HVAZIU2L4DVQY7VNSIFVV4I3QIVP7H66EVJISAC RB6RQE2N3EKJKFHCM4UCMBHG5OH7EA24SYM3PSXIJDOVXYL4VUMQC 3XQAOZVTIDFQ7EUC36J2AFMTHZXLZ3G5MBHFN5JZWEWWCXFENHRAC NG53L53MSFQZAIVKHG54IEMXNJ33AYVPF2OZM4MMJFDKEJCGPBSAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC SA36K3OJ75PNVR2F4QAPNU2LUGFTVHNIAZVSXCBXBT2NLW2RTUPAC R5HVRGDKUX6A2H4DRHGWFBC2P625VAJHDZTERDMLFVXWSZLMHKRAC NMZFKLRNGUMWPRLQCGHJPKTEFPPBIGMM2MEND5CR3QIEF5Z6BQDAC SWOYPTHJAWFEDBMB3ROT33VQZIXGZD5UOXEV456DDUENW2HGA66QC EOJPYR3QD5GGS7GB2P7SBLMOP7YC57YMIVR7VKCOMWNCKNBPESBQC PG5XH3WD6YPDOIZQ7SGHCQVXSDP5KQIGZLG7QNGHQVU6ULAVJWFAC NLQNXH3SVJ52CWXEV35FSSZP32VHC4QFGN3HINF4KO5GZHZMOBKQC FDMKFGCTWKKSBP3B5VE4BSVFHUVNX5BSDFRVD6E735DHPVYEQFGQC CQD3RU44235F3CYFDZBC3JRT2H3AE7PXJNVBBMCRF65Q5LPA3EHQC WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC OWERGKLVPNPGIIS23FZ7ZDOBWUIXCKYAFG3URXU75JAUDX3N5ENAC 6PAG7GHXHIYXJPPTEK4KZQZT4CL2SJDAGTVIUDB4KK66PVSTWUMAC PWYWF6M5DPBIANK2MGGVHFC3VUNAT4BHILSG2IPOPKIZBOAIAK7QC NUYGFMQOZK32XUFTDPGTZ25L7JGOU532S2D4MELYJB5GQL7KNGOAC HCVH2CWL32UD66O6Z7ZYDUASWN3RF5TW6FSWURGMD7MELKB772FAC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC GSS3OCYMI4MYKACCGNLFA267VDH2U7G4QVVDLMOVAUHZTYQ3QJDAC TW7QOMTSLYPGUUWHGHLY5G5LV6QQRQIKK4BSE64RY7RDGKVDHCEAC CLIEHAE2PP7ZIGLLIMYCWM4FC54KBOAN5AILOLAZJ5S26GTJM4RQC IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC RTNCVAW3IRKSTVGF2RKT4MFCXNSMA6LHW45QVO4FZNYUNMRLJT2AC QYUAYEGK7WPBJLZRSWZVDWD5SMNAWWIJSQPWYA7BEYXMEBD2SDKAC KDWQP5WMMIAZGQQPXSI36IQBVZNGQFE2Z4N33QLKOMEKWEIRVKLAC 4ZSVHDY23VI2FMLU5Z2CJ35SAPDQRREM6RABZ4GEILWI7NRULQNAC EXZ3JJJIBWKHQ7XSJPC6P3LOKAALMJHUX3CGIL6FO5KPNTFMLE4QC NO2HRD7RZS42S55UG4FQ5EFQDY6WYWKGIXHUKYLWF36HHE3VZ7WAC F5G5PCHLAXLGPJA3E4Y4TJ6RZ5PNWNIYHGMJ366J6VGGGPHGSY5QC 27JI3J23EXDY2G4X7NHTFTSHSEUDGDPFOYPG6P53UNSSJP3DDQTAC ODQ7LIJ2UROGGENIORRXZFWII3ZM2N45YD53FKWDQB7LLRXR4PHAC JJULXW764V5C2HJKZNWQAEWB6QM5YZADD7ZCE35LYTBFEM6PMYCAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC XZTGZ7MOPX7ZOHQ4IQPXOHGUH5WPRNOYAQ6IQOMZDZYNVSAYFTNAC KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC CRUW4EVU3UDWNKXBCPWWHWXXGE7EMEHKK3PLLUD7NWPYY4K2R3YAC WKJIIZMCJLMWUIIXBVXBU2G4UJONM46JIEWK7U6XIPFZUOIFFBMAC 2IPPYYFWEFI342OOKTTEKMLLBUFPERK7RNLBF2TWQF5D47M6PSTAC VEVPRVWGRHRKBBUTO64ELK3NPZANUQI3ZZ7F23YXJQLKIORUW3HQC P5TRGRH7XMQSPCZKM5IEEO34TY6WMLGHHX7BU6Y453JFRXLUR2VQC TJ72NVTRNJKF55RTH5MRLTHHVPOJ2M5OOYEWF4UFLTO2PPPTU6PQC R3ZUGT5VJ2DG5NFPG4RBWDWTULDE7L4REYSGVPHJPDXFG6OBIXYAC JGKYRZ34S3I23PMJX6IUBR7EHEFD6I4XXEGXNT7GKT2M2VIRBSMQC Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC 3XL4DKV7PSWAU3ZBJSKZFJ2VUYABC47I7KKWGIRCJYXULQD453MQC GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC PKHOZG6TIUP2NZZIP6CW5OIPZ3O6PCGWXXW5MH4I6P2WVM24HZEQC B4YYKEZVHLGRFAHEP5ATEV4MYRPGXQPWTUXGGG7ITZH3ZGV3VMBQC ZVG6W2UMHJ3GHLF4ZVCUHZOOEUNJMWPURVBN2OQXKVTXYC4Z2LPQC KO7TLN7OM7UQF33RRTOFPFTDQLTYCOE4N7KWQUTWRIUSEB6PQ4WQC 2ILR4SBFXZDMIOMZ6RPUR5I4OKON2QHBSO23TDD5KI77NTOI4OWQC LOEVXFCKSHE3TCQSUSHOIHHVDJT3RFLE6U3VDI6JXAQTQI5KCJ4AC 5BPJZOGZ6VTUNTJXBTP22KIPGT5NNNSXZVW5J2BGQYBP4MTCZ3CQC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC 2G7MZ653N3JUHJ4DA5Q7VRO3S5T27DLPKDCJEKB6DGYSTXULUVWAC KEWUUIWZCM2VE6WZX4BC4DXGL7LBAWGLUPCPA4KCBCUL5ZQLECBAC Q3XHNSHW6FI4JCXSEABATRFBJPMCF7PXNG2K6ZQTRRPVMIZFHUBQC YF2GZWXNV6NVFFEBEOYS67JQJQK2IUS5BZMGJW3XQPYIJYHQJCEQC TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC IGN3Q5YCLHXKWFZQRSRABCHW2JFW5TFVU7TM5EXE2EW7PDBBSQWAC HSIGNHMJYSWABSW7TG2AGX5GVA5J7LMHDXA3MNGYDOSFBROO5PBAC WCK6TM2ZD56WSOK6SMMKBYAYGG4OUCTILLMVVLMB4QO5I5S2IVNAC AFE345BJ7IX2YYYX3I5I6RYLXNWJCFE4WMH6F5JMIR6X7WUP75CAC AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC 6L4EP4ZRWWYLT55PD5KTTJON5J2JB5VV5MWNHF5VPZQZ5BKEYZ4QC 4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC WLBSQ2ESMTOPKZUFZL6KPKKTRPW5Y2LDJO6F34K6WSNE7H77KFKAC JV7RFSC2MQ3X2ZZB24SLNIWRWGYVLEMPG3G3ZVZHON7S3HXC7OZQC UXYQEI6GLKABRWITOJVAFK5QETIMVRRBJO3DCHFUAC5A6YTVI64QC NHCEH7ZFP3IFRMZMC25ZA2X5ZSS3MOCHCYLVCSVY7RTY62WX7UAQC TFQQFUXNCKWDRDLMHZWXYQQS7CS5DHTLESFCOHIU7PIJ2VNFBAEQC GTPAKUU3R5AS3LQNCCZIP3BWV473RM4EB2AIS4FXAJRXHEOVH2PAC KZWOHH536QBWAPWROR32EOXEK5LRY6I5VHVL7HHI7GOFKCMQTCSQC KQNMFSLV62B4ANDKTUZ7LQH2MD2NDGNCP55MKM5YAATQ4T52H2PQC BNRY5YIXLFE2TDNU2JQHWWXJQVWNSEWQ52DU7XUWIT5DZWKGBDDAC T4FNOPMWYYJHJBTTY33PB43HTJPKEC46L62YERTWIX73HYZSELXQC AYU5OVG2HZO46KDAPKUWAVHS5HTYFKUWIMIRMTHAXVVFEDJE7YPAC EHL7B5UIYYHSFX3KXQ43C4GNFJSEUEXFF7U3IL7XU6E5R675WS7AC WP5VP57D5BWKDAS7AA224OV2RX4O4BPTI2BLY7TS3T2O2PLUGXCQC HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC PKXXBHS3LWLPZI2QVRX22MSQ4R2626IXRSNHFFYHXYTLJJQU54LQC PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC HB27XKFYVYIEQZGBCEZ6LKPUBMXLIPDAAS636GJ5TULIQ7KND5KQC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC SGQFZEDSAJWZSZ6RUF2WNWNLSD2Y6QH72L4PWLLZBLQL3G5PFWBQC TDXC5VWE2B5VVGNXEF7V5E6UCKCSAIZVLJXFIOQ4G4A2PK5L7BBQC RIGGVFYNCRFDUUCMIAN7SDEOUL4VMMZI6OYXZW72BVNI4WXJQXWQC SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC MRUMXF3YPJCHAW4DC7DHJR5O77LXAJLMA53IOJP4YEMAOZRNWNKAC 3QK2EPUWNVFFHIJ3BPR3COPVI7EMDDD75PCLKMAVY2RRAPSACBWQC VXWDDKBETFFMU7LMGN4UGB74NNKXW456KFJMWWEVOTWH35NZZZHAC W2KRIXSCRJPS6WDIYTHVF5IRMF3V5DWECRAWUPVTB7VZ6A2BLD4QC WFMQVPMMOPG5SBJD5LUBOIYWRMXVWK3FXENK7SAEGZ5T6XWFKERQC 5FHWTG7M6FW4B3I33YI7QSM3OZIB6ZGC6TI6JISSLY5Y43HI56VAC 4S7GTHOCXO5MLS3DKSZWUYYZFBVNHDG6RFJONUALXVA7CCPFKXKAC CH7JECYYH35H4TRHRNRTRJCQTQLZ2WRH62TKV72SUIU2RTK5OH7AC AVSWNOP23Z2QCLQGXFDZV7TI4RC3XSXHIX2HDXFHXGKDEZSSIGJQC ZK5H5YBD3R7H3KKNKSJYE65TUEPPWIWUJLU567FKSZYQYIW6ZVFAC 2IJDLTWK74ULETLFTIPUIY2MSG6RNONVAFNFE7MADPT6UNYSSBDAC GE5BVIRQVT4PARCIODIUK5UXW4AYLFR55UCA4J2DIJU4AMYWQIZAC WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC H5BVKRORNXTCJKFXQPTFWDURKSUFW24CGSJXBGZCJUP4DHMSVDBQC stop_running();}}}void slime_conversion(monsters* monster){if (you.religion == GOD_JIYVA && mons_is_slime(monster)&& !mons_is_summoned(monster)&& !mons_is_shapeshifter(monster)&& !mons_neutral(monster)&& !mons_friendly(monster)&& !testbits(monster->flags, MF_ATT_CHANGE_ATTEMPT)&& mons_player_visible(monster) && !mons_is_sleeping(monster)&& !mons_is_confused(monster) && !mons_is_paralysed(monster)){monster->flags |= MF_ATT_CHANGE_ATTEMPT;if (!player_under_penance()){jiyva_convert_slime(monster);
// Zin worshippers are the only ones who can pray to ask Zin for// stuff.if (prayed_for != (you.religion == GOD_ZIN))
// Zin and Jiyva worshippers are the only ones who can pray to ask their// god for stuff.if (prayed_for != (you.religion == GOD_ZIN || you.religion == GOD_JIYVA))
}break;case GOD_JIYVA:if (prayed_for && jiyva_grant_jelly()){int jelly_count = 0;for (radius_iterator ri(you.pos(), 9); ri; ++ri){int item = igrd(*ri);if (item != NON_ITEM){for (stack_iterator si(*ri); si; ++si)if (si != NON_ITEM && one_chance_in(7))jelly_count++;}}if (jelly_count >= 1){int count_created = 0;for (; jelly_count > 0; --jelly_count){mgen_data mg(MONS_JELLY, BEH_STRICT_NEUTRAL, 0, 0,you.pos(), MHITNOT, 0, GOD_JIYVA);if (create_monster(mg) != -1)count_created++;// Sanity check: Stop if spawning further jellies// would excommunicate us.if (you.piety - (count_created+1) * 5 <= 0)break;}if (count_created > 0){mprf(MSGCH_PRAY, "%s!",count_created > 1 ? "Some jellies appear": "A jelly appears");}you.piety -= 5 * count_created;}
static bool _jiyva_retribution(){const god_type god = GOD_JIYVA;if (you.is_undead || one_chance_in(4)|| player_mutation_level(MUT_MUTATION_RESISTANCE) == 3){const monster_type slimes[] = {MONS_GIANT_EYEBALL, MONS_EYE_OF_DRAINING,MONS_EYE_OF_DEVASTATION, MONS_GREAT_ORB_OF_EYES,MONS_GIANT_SPORE, MONS_SHINING_EYE, MONS_GIANT_ORANGE_BRAIN,MONS_JELLY, MONS_BROWN_OOZE, MONS_ACID_BLOB, MONS_AZURE_JELLY,MONS_DEATH_OOZE, MONS_SLIME_CREATURE};
const int how_many = 1 + (you.experience_level / 10) + random2(3);bool success = false;for (int i = 0; i < how_many; ++i){const monster_type mon = RANDOM_ELEMENT(slimes);if (create_monster(mgen_data::hostile_at( static_cast<monster_type>(mon),you.pos(), 0, 0, true, god)) != -1){success = true;}}if (success)god_speaks(god, "Some slimes ooze up out of the ground!");elsesimple_god_message("The ground quivers slightly.");}else{const int mutat = 1 + random2(4);god_speaks(god, "You feel Jiyva alter your body.");for (int i = 0; i < mutat; ++i)mutate(RANDOM_BAD_MUTATION, true, true, true);}return (true);}
void jiyva_convert_slime(monsters* slime){ASSERT(mons_is_slime(slime));if (you.can_see(slime)){if (mons_genus(slime->type) == MONS_GIANT_EYEBALL){mprf(MSGCH_GOD, "%s stares at you suspiciously for a moment, ""then relaxes.",slime->name(DESC_CAP_THE).c_str());}else{mprf(MSGCH_GOD, "%s trembles before you.",slime->name(DESC_CAP_THE).c_str());}}slime->attitude = ATT_STRICT_NEUTRAL;slime->flags |= MF_WAS_NEUTRAL;slime->god = GOD_JIYVA;
// Complimentary jelly upon joiningif (you.religion == GOD_JIYVA && !_has_jelly()){monster_type mon = MONS_JELLY;mgen_data mg(mon, BEH_STRICT_NEUTRAL, 0, 0, you.pos(), MHITNOT, 0,GOD_JIYVA);_delayed_monster(mg);simple_god_message(" grants you a jelly!");if (level_id::current() == level_id(BRANCH_SLIME_PITS, 6)){const level_id target(BRANCH_SLIME_PITS, 6);bool done = apply_to_level(target, true, slime_vault_to_floor);if (done){if (silenced(you.pos())){mpr("An unexplained breeze blows through the dungeon.",MSGCH_GOD);}elsempr("You hear the sound of toppling stones.", MSGCH_GOD);}}}
}}// Rearrange stats, biased towards the stat chosen last at level up.void jiyva_stat_action(){char* max_statp[] = { &you.max_strength, &you.max_intel, &you.max_dex };char* base_statp[] = { &you.strength, &you.intel, &you.dex };int incremented_weight[] = {1, 1, 1};int decremented_weight[3];int stat_up_choice;int stat_down_choice;incremented_weight[you.last_chosen] = 2;for (int x = 0; x < 3; ++x)decremented_weight[x] = std::min(10, std::max(0, *max_statp[x] - 7));stat_up_choice = choose_random_weighted(incremented_weight,incremented_weight + 3);stat_down_choice = choose_random_weighted(decremented_weight,decremented_weight + 3);if (stat_up_choice != stat_down_choice){// We have a stat change noticeable to the player at this point.// This could be lethal if the player currently has 1 in a stat// but has a max stat of something higher -- perhaps we should// check for that?(*max_statp[stat_up_choice])++;(*max_statp[stat_down_choice])--;(*base_statp[stat_up_choice])++;(*base_statp[stat_down_choice])--;mprf(MSGCH_GOD, "Jiyva's power touches on your attributes.");you.redraw_strength = true;you.redraw_intelligence = true;you.redraw_dexterity = true;burden_change();
}}static void _maybe_spawn_jellies(int dam, const char* aux,kill_method_type death_type, int death_source){// We need to exclude acid damage and similar things or this function// will crash later.if (death_source == NON_MONSTER)return;monster_type mons;const monster_type jellies[] = {MONS_ACID_BLOB, MONS_AZURE_JELLY,MONS_DEATH_OOZE};// Exclude torment damagechar *ptr = strstr(aux, "torment");if (you.religion == GOD_JIYVA && you.piety >= 160 && ptr == NULL){int how_many = 0;if (dam >= you.hp_max * 0.75)how_many = random2(4) + 2;else if(dam >= you.hp_max / 2)how_many = random2(2) + 2;else if(dam >= you.hp_max / 4)how_many = random2(1) + 1;if (how_many > 0){if (x_chance_in_y(how_many, 8)&& !lose_stat(STAT_STRENGTH, 1, true, "spawning slimes")){canned_msg(MSG_NOTHING_HAPPENS);return;}int count_created = 0;for (int i = 0; i < how_many; ++i){mons = RANDOM_ELEMENT(jellies);mgen_data mg (mons, BEH_STRICT_NEUTRAL, 0, 0, you.pos(),MHITNOT, 0, GOD_JIYVA);if (create_monster(mg) != -1)count_created++;}if (count_created > 0){mprf("You shudder from the %s and a %s!",death_type == KILLED_BY_MONSTER ? "blow" : "blast",count_created > 1 ? "flood of jellies pours out from you": "jelly pops out");}}
#define SAME_ATTITUDE(x) (mons_friendly_real(x) ? BEH_FRIENDLY : \mons_good_neutral(x) ? BEH_GOOD_NEUTRAL : \mons_neutral(x) ? BEH_NEUTRAL \: BEH_HOSTILE)
#define SAME_ATTITUDE(x) (mons_friendly_real(x) ? BEH_FRIENDLY : \mons_good_neutral(x) ? BEH_GOOD_NEUTRAL : \mons_strict_neutral(x) ? BEH_STRICT_NEUTRAL : \mons_neutral(x) ? BEH_NEUTRAL \: BEH_HOSTILE)
else if (you.religion == GOD_JIYVA&& (targetc == MONS_OOZE|| targetc == MONS_JELLY|| targetc == MONS_BROWN_OOZE|| targetc == MONS_ACID_BLOB|| targetc == MONS_GIANT_AMOEBA|| targetc == MONS_SLIME_CREATURE|| targetc == MONS_DEATH_OOZE|| targetc == MONS_AZURE_JELLY)){// Message used for the Slimify ability.str_polymon = " quivers uncontrollably and liquefies into ";}
}}static void _set_random_slime_target(monsters* mon){// Strictly neutral slimes will go for the nearest itemint item_idx;coord_def orig_target = mon->target;for (radius_iterator ri(mon->pos(), LOS_RADIUS, true, false); ri; ++ri){item_idx = igrd(*ri);if (item_idx != NON_ITEM){for (stack_iterator si(*ri); si; ++si){item_def& item(*si);if (_is_item_jelly_edible(item)){mon->target = *ri;break;}}}
}if (you.religion == GOD_JIYVA){const item_def& item = *si;const int value = item_value(item) / item.quantity;const int quantity = item.quantity;int pg = 0;int timeout = 0;for (int m = 0; m < quantity; m++){if (x_chance_in_y(value/2 + 1, 30 + you.piety/4)){if (timeout <= 0)pg += random2(item_value(item)/6);elsetimeout -= value/5;}}if (pg > 0){mprf(MSGCH_GOD, "Jiyva appreciates your sacrifice.");gain_piety(pg);}if (you.piety > 80&& random2(you.piety) > 50&& one_chance_in(4)){bool success = false;if (!you.is_undead){simple_god_message(" alters your body.");more();const int rand = random2(100);if (rand < 40)success = mutate(RANDOM_MUTATION);else if (rand < 60)success = delete_mutation(RANDOM_MUTATION);elsesuccess = mutate(RANDOM_GOOD_MUTATION);}if (success){timeout = (100 + roll_dice(2, 4));you.num_gifts[you.religion]++;take_note(Note(NOTE_GOD_GIFT, you.religion));}elsempr("You feel as though nothing has changed.");}
}// Monsters consider as "slime" for Jiyva.bool mons_is_slime(const monsters *mon){if (mons_genus(mon->type) == MONS_JELLY|| mons_genus(mon->type) == MONS_GIANT_EYEBALL|| mons_genus(mon->type) == MONS_GIANT_ORANGE_BRAIN){return (true);}return (false);}bool mons_eats_items(const monsters *mon){return (mons_itemuse(mon) == MONUSE_EATS_ITEMS|| mon->has_ench(ENCH_EATS_ITEMS));
if (level_id::current() == level_id(BRANCH_SLIME_PITS, 6)&& you.religion == GOD_JIYVA){const level_id target(BRANCH_SLIME_PITS, 6);if (times_entered == 0){if (apply_to_level(target, true, slime_vault_to_floor)){if (!silenced(you.pos())){mpr("You hear the sound of toppling stones.",MSGCH_MONSTER_ENCHANT);}else{mpr("An unexplained breeze blows through the dungeon.",MSGCH_MONSTER_ENCHANT);}}times_entered++;}}
}if (you.religion == GOD_JIYVA && !player_under_penance()&& one_chance_in(10)){int total_jellies = 1 + random2(5);bool success = false;int created;for (int num_jellies = total_jellies; num_jellies > 0; num_jellies--){//Spread jellies around the levelcoord_def newpos;do{newpos.set( random_range(X_BOUND_1 + 1, X_BOUND_2 - 1),random_range(Y_BOUND_1 + 1, Y_BOUND_2 - 1) );}while (grd(newpos) != DNGN_FLOOR&& grd(newpos) != DNGN_SHALLOW_WATER|| monster_at(newpos)|| env.cgrid(newpos) != EMPTY_CLOUD);mgen_data mg(MONS_JELLY, BEH_STRICT_NEUTRAL, 0, 0, newpos,MHITNOT, 0, GOD_JIYVA);if (create_monster(mg) != -1)success = true;}if (success && !silenced(you.pos())){switch (random2(3)){case 0:simple_god_message(" gurgles merrily.");break;case 1:mprf(MSGCH_SOUND, "You hear %s splatter%s.",total_jellies > 1 ? "a series of" : "a",total_jellies > 1 ? "s" : "");break;case 2:simple_god_message(" says: Divide and consume!");break;}}
"Missionary", "Evangelist", "Apostle", "Messiah"}
"Missionary", "Evangelist", "Apostle", "Messiah"},// Jiyva -- slime and jelly theme{"Scum", "Jelly", "Squelcher", "Dissolver","Putrid Slime", "Consuming %s", "Archjelly", "Royal Jelly"}
((mons.attitude == ATT_HOSTILE) ? "hostile" :(mons.attitude == ATT_FRIENDLY) ? "friendly" :(mons.attitude == ATT_NEUTRAL) ? "neutral" :(mons.attitude == ATT_GOOD_NEUTRAL) ? "good neutral": "unknown alignment") );
((mons.attitude == ATT_HOSTILE) ? "hostile" :(mons.attitude == ATT_FRIENDLY) ? "friendly" :(mons.attitude == ATT_NEUTRAL) ? "neutral" :(mons.attitude == ATT_GOOD_NEUTRAL) ? "good neutral":(mons.attitude == ATT_STRICT_NEUTRAL) ? "strictly neutral": "unknown alignment") );
if (mons_holiness(mon) == MH_UNDEAD){monster_polymorph(mon, MONS_DEATH_OOZE);mon->attitude = ATT_STRICT_NEUTRAL;}else{const int x = mon->hit_dice + (coinflip() ? 1 : -1) * random2(5);if (x < 3){monster_polymorph(mon, MONS_OOZE);mon->add_ench(ENCH_EATS_ITEMS);}else if (x >= 3 && x < 5){monster_polymorph(mon, MONS_JELLY);}else if (x >= 5 && x < 7){monster_polymorph(mon, MONS_BROWN_OOZE);}else if (x >= 7 && x <= 11){if (coinflip()){monster_polymorph(mon, MONS_SLIME_CREATURE);mon->add_ench(ENCH_EATS_ITEMS);}else{monster_polymorph(mon, MONS_GIANT_AMOEBA);mon->add_ench(ENCH_EATS_ITEMS);}}else{if (coinflip())monster_polymorph(mon, MONS_ACID_BLOB);elsemonster_polymorph(mon, MONS_AZURE_JELLY);}mon->attitude = ATT_STRICT_NEUTRAL;}return(MON_AFFECTED);
// Jiyva{ ABIL_JIYVA_CALL_JELLY, "Request Jelly", 2, 0, 20, 1, ABFLAG_NONE },{ ABIL_JIYVA_JELLY_SHIELD, "Jelly Shield", 0, 0, 0, 0, ABFLAG_PIETY },{ ABIL_JIYVA_SLIMIFY, "Slimify", 4, 0, 100, 3, ABFLAG_NONE },{ ABIL_JIYVA_BAD_MUT_REMOVE, "Mutation Removal",8, 0, 200, 15, ABFLAG_NONE },
return (false);}break;case ABIL_JIYVA_CALL_JELLY:{mgen_data mg(MONS_JELLY, BEH_STRICT_NEUTRAL, 0, 0, you.pos(),MHITNOT, 0, GOD_JIYVA);if (create_monster(mg) == -1)return (false);exercise(SK_INVOCATIONS, 1 + random2(3));break;}case ABIL_JIYVA_JELLY_SHIELD:// Prayer effectbreak;case ABIL_JIYVA_SLIMIFY:beam.range = LOS_RADIUS;if (!spell_direction(spd, beam))return (false);if (beam.target == you.pos()){mpr("You cannot slime yourself!");return (false);}if (!zapping(ZAP_SLIME, 16 + you.skills[SK_INVOCATIONS] * 8, beam,true)){
case ABIL_JIYVA_BAD_MUT_REMOVE:{// Removes a bad mutation from the player.// delete_mutation(RANDOM_BAD_MUTATION) defaults to removing// a random mutation if the player has no bad mutations// so any newly added bad mutations need to be included here.const mutation_type bad[] = {MUT_HERBIVOROUS, MUT_CARNIVOROUS,MUT_FRAIL, MUT_SLOW_HEALING,MUT_FAST_METABOLISM, MUT_WEAK, MUT_DOPEY,MUT_CLUMSY, MUT_DEFORMED, MUT_TELEPORT,MUT_SCREAM, MUT_BERSERK, MUT_BLURRY_VISION,MUT_LOW_MAGIC, MUT_DETERIORATION};if (!how_mutated()){mpr("You have no mutations to remove.");return (false);}bool done = false;for (int tries = 0; !done && tries < 100; tries++){mutation_type mutat = RANDOM_ELEMENT(bad);if (you.mutation[mutat] > 0)done = delete_mutation(mutat);}