to cause a non-standard context to be passed to interrupt_activity( AI_SEE_MONSTER ) if it is called before the current turn is over.
If a submerged monster surfaces in order to shout, it has to wait one turn before being able to submerge again.
Added back in a scroll named "forgetfullness", but rather than giving amnesia about the map it gives amnesia about non-equipped inventory items. I tried to make the effects annoying rather than serious.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2481 c06c8d41-db1a-0410-9941-cceddc491573
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC PHK4J7Z42F72MFDTU7QL472BQZUWHQBZ4DIHYXWKQZBJMESQ3YDQC LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC ZCRK2DJ5VKECRQXZTWT4NUDL2VT5ZHUK7NT6NQPLRJ56TDX5PJSAC QNIQ2NBBIERVCA2YTD3O3P6QPJ5M6VDVGGX7V2BWXTW5553T4PVAC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 6BO27PEAAOYJEOL5F5RWDMSLU7WUYSKC4LCANVIDMRZRMZWCEYUAC UWMN4HLG6YA2YFQEVIVMDISD6APKEPIZXMMPMNUYCBQDSAUYSXPQC ANOEQTM6IGCBTESKKQ5PCBSDTZ7VGRCMDIOAFEH4R7DJHKWKDFAAC LLKV4OYGEDB4GVJS5JVBZP5JQFW7VMPZ2CBRSITJ5XCFS3QNWIBQC QDWDUURSNLMT6AXNNJ3DEQCWAKCAIHV6MP5F7QGIBGXOG2BI2NPQC L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC 4JJ6TWOZOPXBIOEQA2CXASS2TO5AMNXNY7LG67NXIVLDVJTJW6KAC 7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC GTXKQTORYHZ7XB2VIH6372UM5GMWAN7IVRXWY5FGBCHFGBV6D6NAC DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC }}static void handle_seen_interrupt(monsters* monster){activity_interrupt_data aid(monster);if (monster->seen_context != "")aid.context = monster->seen_context;else if (testbits(monster->flags, MF_WAS_IN_VIEW))aid.context = "already seen";elseaid.context = "newly seen";if (!mons_is_safe( static_cast<const monsters*>(monster) )&& !mons_class_flag( monster->type, M_NO_EXP_GAIN )&& !mons_is_mimic( monster->type )){interrupt_activity( AI_SEE_MONSTER, aid );
activity_interrupt_data aid(monster);if (testbits(monster->flags, MF_WAS_IN_VIEW))aid.context = "already seen";elseaid.context = "newly seen";if (!mons_is_safe( static_cast<const monsters*>(monster) )&& !mons_class_flag( monster->type, M_NO_EXP_GAIN )&& !mons_is_mimic( monster->type )){interrupt_activity( AI_SEE_MONSTER, aid );}seen_monster( monster );// Monster was viewed this turnmonster->flags |= MF_WAS_IN_VIEW;
handle_seen_interrupt(monster);
// FIXME This is better expressed as a// function such as// monster_has_ranged_attack:&& monster->type != MONS_ELECTRICAL_EEL&& monster->type != MONS_LAVA_SNAKE&& (monster->type != MONS_MERMAID|| you.species == SP_MERFOLK)&& !one_chance_in(20)) )
// FIXME This is better expressed as a// function such as// monster_has_ranged_attack:&& monster->type != MONS_ELECTRICAL_EEL&& monster->type != MONS_LAVA_SNAKE&& (monster->type != MONS_MERMAID|| you.species == SP_MERFOLK)// Don't submerge if we just unsubmerged for// the sake of shouting.&& monster->seen_context != "bursts forth shouting"&& !one_chance_in(20)) ))
bool forget_inventory(bool quiet){int items_forgotten = 0;for (int i = 0; i < ENDOFPACK; i++){item_def& item(you.inv[i]);if (!is_valid_item(item) || item_is_equipped(item))continue;unsigned long orig_flags = item.flags;unset_ident_flags(item, ISFLAG_KNOW_CURSE);// Don't forget times used or uses left for wands or decks.if (item.base_type != OBJ_WANDS && item.base_type != OBJ_MISCELLANY)unset_ident_flags(item, ISFLAG_KNOW_PLUSES);if (!is_artefact(item)){switch (item.base_type){case OBJ_WEAPONS:case OBJ_ARMOUR:case OBJ_BOOKS:case OBJ_STAVES:case OBJ_MISCELLANY:// Don't forget identity of decks if it the player has// used any of its cards, or knows how many are left.if (!is_deck(item) || item.plus2 == 0)unset_ident_flags(item, ISFLAG_KNOW_TYPE);break;default:break;}}// Non-jewellery artifacts can easily be re-identified by// equipping them.else if (item.base_type != OBJ_JEWELLERY)unset_ident_flags(item, ISFLAG_KNOW_TYPE | ISFLAG_KNOW_PROPERTIES);if (item.flags != orig_flags)items_forgotten++;}if (items_forgotten > 0)mpr("Wait, did you forget something?");return (items_forgotten > 0);}