Now we need tiles for the new potions!
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10669 c06c8d41-db1a-0410-9941-cceddc491573
VY2RJLJQMUOVIJOYPTA7AEXPURIV3H6VF7O5QQ7LF44ZS36RTFYAC TKBNL7HXWTEWYERMIANPKAWU3VD2QYMIZTBC3C7Y4VBHZSP3IBIQC D3MYRGY6SIFALXOTHUMXPTLG3MXWCZD3EFQSRJAMSULGH755F7QQC CGXHRJTW3ROFLTU3YE6YRKVQGLK3X5UCKZCO7S7VEEWEMKW4HVIQC GUKKDWUJEKIHUM6GUCNLIQJ67BE4WWQKBFGYDJQ5D5LCJ2R6VTOAC HP72STXEK6KJ5SAPZKKLLAXC5HB7J4E6X6NK2BNFP6GARF52K5RQC SVPQA3Q4RSXNXOCNYX5HHSBB27TI5MCB75YLJFP7GKLIDS5VN35AC BXQ2UMD4SSS5IUZZEDNVUKH6H26WE7LHARPAWIFEQCJM5WWLWCVQC LYEMFS2OCCXSYOZKIQURQDXL64CB5BFP2P3MW3JDCEUIYVWX745QC N7CV6FHEMKA7IRWFVPCPIYO66V2SVMOYQTWV7LNWZFGBF2XHO7NQC LVOFSHI6SIDK2YJELLKW3F7VIGPOIJT5WCAWHT3M33JPM7MCZPMQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC 43XCHFXZ34FDVT2QG23RZ65V6NRBY6PE3ENQEEDXFYKRR7IRFHCAC FZ3VCF24YWNHTLVHBZYWX37X4FI2SNCXGZGTV2UFGFGAWMOKFIUAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC T3R2D5M4YSC6NFZ6YO3AEG4VWORECX72CHUM5UBADV4UPAAZG7WQC TR6F3WVSL6TS5SZVGJBGDK54FKAXYWRWXFRNMQ2AYYKHADSHR2EQC RDS3NSFOLBAEGHBFEQ4TODN5QSJ2DLDM2SIVVUMA6IVRHAZLRVKQC 5WVUTEZLEZEML54CKPR6GACQBYY3EMVNXMLJOREN6SSEUZGC47AQC MG6LLF3XYCOEBQRX7TJ4MUTKM3IROYWUMZGCMYVW4TGDG36CJMJQC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC ZYRDAY7GAX43C5ZOK3TSWPRAOCZVYOJZZWP7IVX6JPW7B3Y5U55QC WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC 5KTPCJG42MF2B34CEH6VXAJIOZR6QOS2BWYNW7DXM3WA7N3GH4HQC IPPPBA4G2LODBP3EJIYGUAAOMHKLNBXHBD7KVX2JVDTA4DETHO4AC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC HB27XKFYVYIEQZGBCEZ6LKPUBMXLIPDAAS636GJ5TULIQ7KND5KQC DKISJVKAJJK2SVZSXGJ37K5SOVTDARVX6RPK3MAKVNGC36Z4YAZQC UU5JLKAKZSTWFQJLUTPQZJ3ZQY7BEU2KROZETUNSKC6LFG6XVSZQC 2HNLFROSOZ6ROLX3Q3W5E7I4Y4ELIWSJ7EX5GDGZZOMRPTK6TBSAC PNIGZ2ABVEGC6DN6PMKO6Z4M2SQ5EB7VZQT33YMEAUPEZVVEDJZQC MIMVAKQXKJMHYLKXKY2TJEBL4HCOHKLDQYX6J5H4MWCI442NWEHAC TXVL24IFH5SK7EJAN7JAUHAZJHJV7GB364UU65P745GUBWJS6Q6AC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC NDKS43E4XVAU3FDY276OF5JW7E5SF6F5EJD2XLV5JLKZ5W6N554QC IMAF6ICHAOMBKDMATJT3VRFGKKZWDKJJTCIA5XCKWB6UKWECOQ6QC 3NFVCXRVGHN2CHLLWFZES5RBS4R2BCDS4EEQNSDCFYIFQWQK7MUQC 3XQAOZVTIDFQ7EUC36J2AFMTHZXLZ3G5MBHFN5JZWEWWCXFENHRAC NLQNXH3SVJ52CWXEV35FSSZP32VHC4QFGN3HINF4KO5GZHZMOBKQC OWERGKLVPNPGIIS23FZ7ZDOBWUIXCKYAFG3URXU75JAUDX3N5ENAC 2UO6ZOW7UCP5XJ2TJ26PJNQABILK2BZ4J3BAKLOKMZPJDQHW24MAC ILO5P5FRDUY4SEQEXMTUDKOPXAUBJRSORHHUVTLLCYOYSXBXOVRAC N6SBZYHPKCHUZ5UQJLYYIEK62TTEV7YWZXHPTPNVHWPHR6XZRF4AC LCCGXSFIDQFIRXHGRJWOELNPQOHHCXCWXS366GOULDFPQVOKAIJAC U5SDF665RTV32CTKTC4QO3Q5B44IAE42MZYJSYUNZP3JZEUTO4KQC SIP35YIR6H5EBKAT4QN3LTE4XOUN6Z6DDMPK33TTGMM5PZM4QB5AC GQLLYETI5KID6MXQ6YJ5TZJYN5V3QDFOUQIKBVDYGVARNWBCMOSAC X55CKEKNO5RD2JMQ4MYX6PXQLDMLH4U4PPKSBK5EQ622J5HOPD2AC NYG3EBROAFJX6PYLHJ7L7OPLHF5SSGEHFH5AFDYBQ6OQ75MLAACQC BI5CXFKCZHWNZQ4VXWN24FD322V55H7GYJHXF4GJ26PPKXIEOLSQC PYZVEUF25HRJ6FFJH4HEQHUROLBJEYLOSTBKORAGQ5BEZ7DCKYDQC BQ5QKUWLCYSBO4A7EWZN4FXPNSIAR6JPBAZE4PSV6XCUNTV53ERQC BYURAML2EPTULHH22Q5RPXYGDEYAJYESR6C72UMNPPYHTCJZUPFAC ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC 2IPPYYFWEFI342OOKTTEKMLLBUFPERK7RNLBF2TWQF5D47M6PSTAC OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC CCBZCRRBI5MJA7BXOMCIDO7B7OCXWEWYLEG3IE4XFZGLEF36OMYQC 4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC XZTGZ7MOPX7ZOHQ4IQPXOHGUH5WPRNOYAQ6IQOMZDZYNVSAYFTNAC T3NY54AEBRWTVKX6A5LAGWL3MTKUZ6NOOCFLTFV7FSUNCRHMQKAQC AH3PLTXXMD4SK7NIO7EWCEPTCZHMLGP2S3BGMMI74TJXRGV2TI3QC CA6AAWUMXEKXR5VTGK7DHBBLTXDKWP5HUJIKMPZBM7QCYXFZKCHQC WBRAEO5JU2JNLWCSBCHQGVSB64FJBCXLT5HCRRDM2ZBSZSOZNEIQC KZWOHH536QBWAPWROR32EOXEK5LRY6I5VHVL7HHI7GOFKCMQTCSQC EH4FFBOHIUH2QM43B4CHXRETOAKYV53EAQYA3FETDD5VWV2WX6QQC Q3DNEB5OOJ34P5ML4CMK3L6SCP7RLW7DDOZEG24KZBX3C7BJRQDAC DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC 4GYZYBY7FFORRNPIEFTV4ZM2C7Z6D2KTQOM537ZCC2YBXT2TNSHAC QW73U22SVPKFZ367CURWGZCUJZIG73MRKWE2EBRG535N4UUYKMNAC JK3HFJG76OOQHJMXJUSZRTR5CX5ZMS52LRVBLOR7E2NBI6PRSHHAC UNXGLYIYBZMWR6GX3LRNAA2UPZD7MNBH7TYGYQTTFHPCJRDZXWPQC I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC Q6WLX2VTRJ3LGDPWBH5WKQM7CIIJ5H6AEIKMXPF2PJA5JX5ZLUZQC ODQ7LIJ2UROGGENIORRXZFWII3ZM2N45YD53FKWDQB7LLRXR4PHAC VMIKJGB6CSFVZS6VMQNP33ALEDEO2TARDICVGDJFMZ4WSPTV3LFAC I7QLYOTE6DLQZM7YWUWYLKHRJRB2A3STQ42ALSRGQICEWKD2QTEQC UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC 7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC CDFS7Z74W5HKPQIHQICOG442KQFXUSBGGLDDQLE3MG74T44YU6AQC XBXO44GTW26ELSWP4ZRCRIFOZO7JULKLV3IXAMGR2YZ5B7KVSIDAC GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC M53SMQWSTQBB24VSHBX7KJAAMMWGVKKPKV4TLMFHONWYYCNEDRGAC V633AMMPMHJB5ZLP5IHFXCT6FCENVTPX25TY7T5MF2QZLDDN24HAC O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC && (mons_is_plant(monster)|| monster->mons_species() == MONS_GIANT_SPORE)&& !mons_is_summoned(monster)&& !mons_wont_attack(monster)&& !testbits(monster->flags, MF_ATT_CHANGE_ATTEMPT))
&& monster->attitude == ATT_HOSTILE&& feawn_neutralises(monster)&& !testbits(monster->flags, MF_ATT_CHANGE_ATTEMPT)&& !player_under_penance())
if (!player_under_penance()){// We must call remove_auto_exclude before neutralizing the// plant because remove_auto_exclude only removes exclusions// it thinks were caused by auto-exclude, and// auto-exclusions now check for ATT_HOSTILE. Oh, what a// tangled web, etc.remove_auto_exclude(monster, false);
// We must call remove_auto_exclude before neutralizing the// plant because remove_auto_exclude only removes exclusions// it thinks were caused by auto-exclude, and// auto-exclusions now check for ATT_HOSTILE. Oh, what a// tangled web, etc.remove_auto_exclude(monster, false);
env.show_col(e) = BLUE;
// Translates between colours used for shallow and deep water,// if not using the normal LIGHTCYAN / BLUE. The ripple uses// the deep water colour.unsigned short base_colour = env.grid_colours(monster->pos());static const unsigned short ripple_table[] ={BLUE, // BLACK => BLUE (default)BLUE, // BLUE => BLUEGREEN, // GREEN => GREENCYAN, // CYAN => CYANRED, // RED => REDMAGENTA, // MAGENTA => MAGENTABROWN, // BROWN => BROWNDARKGREY, // LIGHTGREY => DARKGREYDARKGREY, // DARKGREY => DARKGREYBLUE, // LIGHTBLUE => BLUEGREEN, // LIGHTGREEN => GREENBLUE, // LIGHTCYAN => BLUERED, // LIGHTRED => REDMAGENTA, // LIGHTMAGENTA => MAGENTABROWN, // YELLOW => BROWNLIGHTGREY}; // WHITE => LIGHTGREYenv.show_col(e) = ripple_table[base_colour & 0x0f];
// Ignore squares that are already occupied by non-fungi.if (actor_at(*i) && !actor_at(*i)->mons_species() == MONS_TOADSTOOL)
actor *target = actor_at(*i);if (target && (target->atype() == ACT_PLAYER|| target->is_summoned())){
if (mons && mons->mons_species() != MONS_TOADSTOOL){switch (mons_genus(mons->mons_species())){case MONS_ZOMBIE_SMALL:// Maybe turn a zombie into a skeleton.if (mons_skeleton(mons_zombie_base(mons))){processed_count++;monster_type skele_type = MONS_SKELETON_LARGE;if (mons_zombie_size(mons_zombie_base(mons)) == Z_SMALL)skele_type = MONS_SKELETON_SMALL;if (mons->visible()){mprf("%s flesh rots away.",mons->name(DESC_NOCAP_ITS).c_str());}mons->upgrade_type(skele_type,true,true);behaviour_event(mons, ME_ALERT, MHITYOU);continue;}// Else fall through and destroy the zombie.// Ghoul type monsters are always destroyed.case MONS_GHOUL:{if (mons->visible()){mprf("The %s rots away and dies.",mons->name(DESC_PLAIN).c_str());}coord_def pos = mons->pos();int colour = mons->colour;int corpse = monster_die(mons, KILL_MISC, NON_MONSTER, true);kills = true;// If a corpse didn't drop, create a toadstool.// If one did drop, we will create toadstools from it as usual// later on.if (corpse < 0){const int mushroom = create_monster(mgen_data(MONS_TOADSTOOL,BEH_HOSTILE,0,0,pos,MHITNOT,MG_FORCE_PLACE,GOD_NO_GOD,MONS_PROGRAM_BUG,0,colour),false);if (mushroom != -1)seen_mushrooms++;processed_count++;continue;}break;}default:continue;}}
if (plant != -1 && see_grid(target))mpr("A plant grows up from the ground.");
if (plant != -1){env.mons[plant].flags |= MF_ATT_CHANGE_ATTEMPT;if (see_grid(target))mpr("A plant grows up from the ground.");}
create_monster(mgen_data(MONS_GIANT_SPORE,behavior,0,0,*rad,MHITNOT,MG_FORCE_PLACE));
int rc = create_monster(mgen_data(MONS_GIANT_SPORE,behavior,0,0,*rad,MHITNOT,MG_FORCE_PLACE));
// Feawn worshipers are on the hook for most plants and fungi, but not// toadstools and giant spores because they die too easily.//// If feawn worshipers kill a protected monster they lose piety,// if they attack a friendly one they get penance,// if a friendly one dies they lose piety.bool feawn_protects_species(int mc){return (mons_class_is_plant(mc)&& mc != MONS_TOADSTOOL&& mc != MONS_GIANT_SPORE);}bool feawn_protects(const monsters * target){return target && feawn_protects_species(target->mons_species());}// Feawn neutralizes most plants and fungi but skips toadstools to prevent// message spam (and killing them doesn't even cause piety loss).bool feawn_neutralises(const monsters * target){return (target && mons_is_plant(target)&& target->mons_species() != MONS_TOADSTOOL);}
const bool boosted_int = you.duration[DUR_DIVINE_STAMINA];const bool boosted_dex = you.duration[DUR_DIVINE_STAMINA];
const bool boosted_int = you.duration[DUR_DIVINE_STAMINA]|| you.duration[DUR_BRILLIANCE];const bool boosted_dex = you.duration[DUR_DIVINE_STAMINA]|| you.duration[DUR_AGILITY];
if (monster->pos() + mmov == you.pos()){ASSERT(!crawl_state.arena);if (!mons_friendly(monster)){// If it steps into you, cancel other targets.monster->foe = MHITYOU;monster->target = you.pos();monster_attack(monster);if (mons_is_batty(monster)){monster->behaviour = BEH_WANDER;_set_random_target(monster);}DEBUG_ENERGY_USE("monster_attack()");mmov.reset();continue;}}
continue;}}if (monster->pos() + mmov == you.pos()){ASSERT(!crawl_state.arena);if (!mons_friendly(monster)){// If it steps into you, cancel other targets.monster->foe = MHITYOU;monster->target = you.pos();monster_attack(monster);if (mons_is_batty(monster)){monster->behaviour = BEH_WANDER;_set_random_target(monster);}DEBUG_ENERGY_USE("monster_attack()");mmov.reset();
did_god_conduct(DID_STIMULANTS, 4 + random2(4), was_known);break;}case POT_BRILLIANCE:{const bool were_brilliant = you.duration[DUR_BRILLIANCE] > 0;mprf(MSGCH_DURATION, "You feel %s all of a sudden.",were_brilliant ? "clever" : "more clever");if (were_brilliant)contaminate_player(1, was_known);elsemodify_stat(STAT_INTELLIGENCE, 5, true, "");you.duration[DUR_BRILLIANCE] += (35 + random2(pow)) / factor;if (you.duration[DUR_BRILLIANCE] > 80)you.duration[DUR_BRILLIANCE] = 80;did_god_conduct(DID_STIMULANTS, 4 + random2(4), was_known);break;}case POT_AGILITY:{const bool were_agile = you.duration[DUR_AGILITY] > 0;mprf(MSGCH_DURATION, "You feel %s all of a sudden.",were_agile ? "agile" : "more agile");if (were_agile)contaminate_player(1, was_known);elsemodify_stat(STAT_DEXTERITY, 5, true, "");
}else if (which_god == GOD_FEAWN ){have_any = true;std::string buf = "You can speed up decomposition.";_print_final_god_abil_desc(which_god, buf,ABIL_FEAWN_FUNGAL_BLOOM);buf = "You can pass through plants during prayer.";_print_final_god_abil_desc(which_god, buf,ABIL_FEAWN_PLANTWALK);
// We don't want to hit a monster in a wall square twice.// Also stop single target beams from affecting a monster if they already// affected the player on this square. -caoif ((!hit_player || this->is_beam || this->is_explosion)&& !still_wall && !avoid_monster){if (monsters* m = monster_at(pos()) )affect_monster(m);}
// goes out of scope. -caoif (you.religion == GOD_FEAWN && flavour == BEAM_SPORE)
// goes out of scope.//// Also exempting miscast explosions from this conduct -caoif (you.religion == GOD_FEAWN&& (flavour == BEAM_SPORE|| beam_source == NON_MONSTER&& aux_source.find("your miscasting") != std::string::npos)){
corpse = monster_die(mon, thrower, beam_source_as_target());
{// Prevent spore explosions killing plants from being registered as// a feawn misconduct. Deaths can trigger the ally dying or plant// dying conducts, but spore explosions shouldn't count for either of// those.//// FIXME: Should be a better way of doing this. For now we are just// falsifying the death report... -caoif(you.religion == GOD_FEAWN && this->flavour == BEAM_SPORE&& feawn_protects(mon)){if (mon->attitude==ATT_FRIENDLY)mon->attitude = ATT_HOSTILE;corpse = monster_die(mon, KILL_MON, beam_source_as_target());}elsecorpse = monster_die(mon, thrower, beam_source_as_target());}
if (_decrement_a_duration(DUR_AGILITY, "You feel a little less agile now."))modify_stat(STAT_DEXTERITY, -5, true, "agility running out");if (_decrement_a_duration(DUR_BRILLIANCE, "You feel a little less clever now."))modify_stat(STAT_INTELLIGENCE, -5, true, "brilliance running out");