## ## CONFIG.lua ################################################################################################ { -- Global CONFIG for customizing RC behaviors CONFIG = { } CONFIG.emojis = true } ## ## BEGIN ################################################################################################ : rc_msg("Initializing magus.rc ...") : crawl.enable_more(false) ## ## Globals/Globals.rc ################################################################################################ # PAUSE variable for ForceMorePrompts.rc $PAUSE_MORE := PAUSE ## ## Globals/Globals.lua ################################################################################################ { -- Pause for AnnounceDamage.lua PAUSE_MORE = "PAUSE" -- Standard Colors (ignoring black, not visible) COLORS = { } COLORS.lightgrey = "lightgrey" COLORS.lightgrey = "lightgrey" COLORS.white = "white" COLORS.blue = "blue" COLORS.lightblue = "lightblue" COLORS.green = "green" COLORS.lightgreen = "lightgreen" COLORS.cyan = "cyan" COLORS.lightcyan = "lightcyan" COLORS.red = "red" COLORS.lightred = "lightred" COLORS.magenta = "magenta" COLORS.lightmagenta = "lightmagenta" COLORS.yellow = "yellow" COLORS.brown = "brown" } ## ## Utils.lua ################################################################################################ { function withColor(color, str) return string.format("<%s>%s", color, str, color) end function rc_out(symbol, color, msg, channel) -- crawl_mpr source -- https://sourcegraph.com/search?q=context%3Aglobal+repo%3A%5Egithub%5C.com%2Fcrawl%2Fcrawl%24+file%3A%5Ecrawl-ref%2Fsource%2Fl-crawl%5C.cc+crawl_mpr&patternType=standard&sm=1&groupBy=path -- -- static const string message_channel_names[] = -- { -- "plain", "friend_action", "prompt", "god", "duration", "danger", "warning", -- "recovery", "sound", "talk", "talk_visual", "intrinsic_gain", -- "mutation", "monster_spell", "monster_enchant", "friend_spell", -- "friend_enchant", "monster_damage", "monster_target", "banishment", -- "equipment", "floor", "multiturn", "examine", "examine_filter", "diagnostic", -- "error", "tutorial", "orb", "timed_portal", "hell_effect", "monster_warning", -- "dgl_message", -- }; crawl.mpr(string.format("%s %s", symbol, withColor(color, msg)), channel) end function rc_msg(msg) rc_out("🤖", "blue", msg, "diagnostic") end function rc_scs(msg) rc_out("✅", "green", msg, "diagnostic") end function rc_err(msg) rc_out("❌", "lightred", msg, "danger") end function rc_warn(msg) rc_out("⚠️", "yellow", msg, "warning") end function table_has(table, match) for index, value in ipairs(table) do if value == match then return true end end return false end } ## ## Lua Setup ################################################################################################ ## ## AnnounceDamage.lua ################################################################################################ ############### # Damage Calc # ############### { local previous_hp = 0 local previous_mp = 0 local previous_form = "" local was_berserk_last_turn = false function AnnounceDamage() local current_hp, max_hp = you.hp() local current_mp, max_mp = you.mp() --Things that increase hp/mp temporarily really mess with this local current_form = you.transform() local you_are_berserk = you.berserk() local max_hp_increased = false local max_hp_decreased = false if (current_form ~= previous_form) then if (previous_form:find("dragon") or previous_form:find("statue") or previous_form:find("tree") or previous_form:find("ice")) then max_hp_decreased = true elseif (current_form:find("dragon") or current_form:find("statue") or current_form:find("tree") or current_form:find("ice")) then max_hp_increased = true end end if (was_berserk_last_turn and not you_are_berserk) then max_hp_decreased = true elseif (you_are_berserk and not was_berserk_last_turn) then max_hp_increased = true end --crawl.mpr(string.format("previous_form is: %s", previous_form)) --crawl.mpr(string.format("current_form is: %s", current_form)) --crawl.mpr(string.format("max_hp_increased is: %s", max_hp_increased and "True" or "False")) --crawl.mpr(string.format("max_hp_decreased is: %s", max_hp_decreased and "True" or "False")) --crawl.mpr(string:format("you_are_berserk is: %s", you_are_berserk and "True" or "False")) --crawl.mpr(string:format("was_berserk_last_turn is: %s", was_berserk_last_turn and "True" or "False")) --Skips message on initializing game if previous_hp > 0 then local hp_difference = previous_hp - current_hp local mp_difference = previous_mp - current_mp if max_hp_increased or max_hp_decreased then if max_hp_increased then crawl.mpr("You now have " .. current_hp .. "/" .. max_hp .. " hp.") else crawl.mpr("You now have " .. current_hp .. "/" .. max_hp .. " hp.") end else --On losing health if (current_hp < previous_hp) then if current_hp <= (max_hp * 0.30) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.50) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.70) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.90) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") else crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") end if hp_difference > (max_hp * 0.20) then crawl.mpr("MASSIVE DAMAGE!!") end end --On gaining more than 1 health if (current_hp > previous_hp) then --Removes the negative sign local health_inturn = (0 - hp_difference) if (health_inturn > 1) and not (current_hp == max_hp) then if current_hp <= (max_hp * 0.30) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.50) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.70) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.90) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") else crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") end end if (current_hp == max_hp) then crawl.mpr("Health restored: " .. current_hp .. "") end end --On gaining more than 1 magic if (current_mp > previous_mp) then --Removes the negative sign local mp_inturn = (0 - mp_difference) if (mp_inturn > 1) and not (current_mp == max_mp) then if current_mp < (max_mp * 0.25) then crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.") elseif current_mp < (max_mp * 0.50) then crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.") else crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.") end end if (current_mp == max_mp) then crawl.mpr("MP restored: " .. current_mp .. "") end end --On losing magic if current_mp < previous_mp then if current_mp <= (max_mp / 5) then crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.") elseif current_mp <= (max_mp / 2) then crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.") else crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.") end end end end --Set previous hp/mp and form at end of turn previous_hp = current_hp previous_mp = current_mp previous_form = current_form was_berserk_last_turn = you_are_berserk end } ## ## OpenSkills.lua ################################################################################################ { -- Open skills menu at start of runs local is_gnoll = table_has({"Gnoll"}, you.race()) local need_skills_opened = not is_gnoll local function start_open_skills() if you.turns() == 0 and need_skills_opened then need_skills_opened = false crawl.sendkeys("m") end end -- Runs once when parsed during rc init start_open_skills() } ## ## PickupEquipment.lua ################################################################################################ { local favor_egos = false local favor_plus = false local function is_branded_ego(item) return item.branded or item.ego() end local function is_magical(item) return is_branded_ego(item) or item.artefact end local nil_item = "item: nil"; local function debug_item(item) if item == nil then return nil_item end local qual = item.name("qual"); local subtype = item.subtype(); if qual == nil or subtype == nil then return nil_item end local magical = tostring(is_magical(item)); local plus = tostring(item.plus); return string.format("name: %s; subtype: %s, magical: %s, plus: %s", qual, subtype, magical, plus) end local function should_pickup(cur, i2) -- always pickup god gift equipment if i2.god_gift then return true end -- not wearing any item in the slot? pickup! if cur == nil then return true end local higher_plus = i2.plus ~= nil and i2.plus > (cur.plus or 0) local more_magical = not is_magical(cur) and is_magical(i2) -- DEBUG -- rc_msg(string.format("[should_pickup] (cur): %s", debug_item(cur))) -- rc_msg(string.format("[should_pickup] (i2): %s", debug_item(i2))) -- rc_msg(string.format("[should_pickup] higher_plus: %s, more_magical: %s", tostring(higher_plus), tostring(more_magical))) -- items names are the same, pickup higher plus or more magical if cur.name("qual") == i2.name("qual") then if higher_plus or more_magical then return true end end local is_dragon_scales = string.find(cur.name("qual"), "dragon scale") -- wearing magical item (artefact/ego/branded) or dragon scales? skip pickup if is_magical(cur) or is_dragon_scales then return end -- if we got to this point we are not wearing dragon scales/artefact/ego/branded -- if favoring egos and item is ego/branded, pickup if favor_egos and is_magical(i2) then return true end -- if favoring plus and plus is higher, pickup if favor_plus and higher_plus then return true end -- no not pickup by default return false end -- Equipment autopickup (by Medar and various others) -- Source http://crawl.berotato.org/crawl/rcfiles/crawl-0.23/Freakazoid.rc -- https://sourcegraph.com/search?q=context:global+repo:%5Egithub%5C.com/crawl/crawl%24+file:%5Ecrawl-ref/source/output%5C.cc+s_equip_slot_names%5B%5D&patternType=standard&sm=1&groupBy=path -- static const char *s_equip_slot_names[] = -- { -- "Weapon", "Cloak", "Helmet", "Gloves", "Boots", -- "Shield", "Armour", "Left Ring", "Right Ring", "Amulet", -- "First Ring", "Second Ring", "Third Ring", "Fourth Ring", -- "Fifth Ring", "Sixth Ring", "Seventh Ring", "Eighth Ring", -- "Amulet Ring" -- }; local item_subtype_equip_slot = { cloak="Cloak", helmet="Helmet", gloves="Gloves", boots="Boots", shield="Shield"} local function equip_slot(item_sub_type) if item_sub_type == "body" then -- ok this is weird but the equip slot required by `items.equipped_at` -- seems to depend on whether we are running in webtiles or locally -- webtiles expects `items.equipped_at("Body Armour")` -- local expects `items.equipped_at("Armour")` -- try both and return whichever isn't `nil` local body_armour = items.equipped_at("Body Armour"); local armour = items.equipped_at("Armour"); local result = body_armour or armour; return result; end -- we can handle non-body armor with lua table (map) local equip_slot = item_subtype_equip_slot[item_sub_type]; return items.equipped_at(equip_slot); end local two_handed_always = { "great sword", "triple sword", "battleaxe", "executioner's axe", "dire flail", "great mace", "giant club", "giant spiked club", "halberd", "scythe", "glaive", "bardiche", "quarterstaff", "lajatang", "shortbow", "longbow", "arbalest", "triple crossbow"} local function pickup_equipment(it, name) local class = it.class(true) -- -- DEBUG -- rc_warn(string.format("[pickup_equipment] it: [%s]", name)) -- rc_warn(string.format("[pickup_equipment] name: [%s]", debug_item(it))) -- -- debugging equipped items -- rc_msg(string.format("[pickup_equipment] -------- START EQUIPPED --------")) -- rc_msg(string.format("[pickup_equipment] weapon [%s]", debug_item(equip_slot("weapon")))) -- rc_msg(string.format("[pickup_equipment] shield [%s]", debug_item(equip_slot("shield")))) -- rc_msg(string.format("[pickup_equipment] helmet [%s]", debug_item(equip_slot("helmet")))) -- rc_msg(string.format("[pickup_equipment] body [%s]", debug_item(equip_slot("body")))) -- rc_msg(string.format("[pickup_equipment] cloak [%s]", debug_item(equip_slot("cloak")))) -- rc_msg(string.format("[pickup_equipment] gloves [%s]", debug_item(equip_slot("gloves")))) -- rc_msg(string.format("[pickup_equipment] boots [%s]", debug_item(equip_slot("boots")))) -- rc_msg(string.format("[pickup_equipment] -------- END EQUIPPED --------")) -- do not pickup forbidden items if string.match(name, "forbidden") then return end -- do not pickup useless items if it.is_useless then return end -- always pickup artefacts if it.artefact then return true end if class == "weapon" then -- get currently equipped item in slot local currentWeapon = items.equipped_at("weapon"); -- rc_msg(string.format("[pickup_equipment] currentWeapon.subtype: %s", currentWeapon.subtype())) -- when using unarmed combat, we want to skip the should_pickup for weapons if currentWeapon == nil then -- always pickup god gift equipment if it.god_gift then return true end return false end if should_pickup(currentWeapon, it) then return true end elseif class == "armour" then local sub_type = it.subtype(); if sub_type == "gloves" and you.has_claws() > 0 then return end -- skip picking up shields, when if sub_type == "shield" then -- using 2 handed weapons if currentWeapon then if table_has(two_handed_always, currentWeapon.subtype()) then return end end -- shield skill less than 3 if you.skill("Shields") <= 3 then return end end local equipped_item = equip_slot(sub_type) if should_pickup(equipped_item, it) then return true end end return end -- Runs once when parsed during rc init add_autopickup_func(pickup_equipment) } ## ## NoteVersion.lua ################################################################################################ { local didRun = false function note_version() if didRun then return end local version = "magus.rc [v1.11.6]" crawl.take_note(version) didRun = true end } ## ## TurnReady.lua ################################################################################################ { -- Run every player turn function ready() -- rc_msg("Running ready function...") -- Display damage taken in log AnnounceDamage() note_version() end } ##### Crawl Init file ############################################### # For descriptions of all options, as well as some more in-depth information # on setting them, consult the file # options_guide.txt # in your /docs directory. If you can't find it, the file is also available # online at: # https://github.com/crawl/crawl/blob/master/crawl-ref/docs/options_guide.txt # # Crawl uses the first file of the following list as its option file: # * init.txt in the -rcdir directory (if specified) # * .crawlrc in the -rcdir directory (if specified) # * init.txt (in the Crawl directory) # * ~/.crawl/init.txt (Unix only) # * ~/.crawlrc (Unix only) # * ~/init.txt (Unix only) # * settings/init.txt (in the Crawl directory) ##### Some basic explanation of option syntax ####################### # Lines beginning with '#' are comments. The basic syntax is: # # field = value or field.subfield = value # # Only one specification is allowed per line. # # The terms are typically case-insensitive except in the fairly obvious # cases (the character's name and specifying files or directories when # on a system that has case-sensitive filenames). # # White space is stripped from the beginning and end of the line, as # well as immediately before and after the '='. If the option allows # multiple comma/semicolon-separated terms (such as # autopickup_exceptions), all whitespace around the separator is also # trimmed. All other whitespace is left intact. # # There are three broad types of Crawl options: true/false values (booleans), # arbitrary values, and lists of values. The first two types use only the # simple =, with later options - which includes your options that are different # from the defaults - overriding earlier ones. List options allow using +=, ^=, # -=, and = to append, prepend, remove, and reset, respectively. Usually you will # want to use += to add to a list option. Lastly, there is := which you can use # to create an alias, like so: # ae := autopickup_exceptions # From there on, 'ae' will be treated as if it you typed autopickup_exceptions, # so you can save time typing it. # ##### Other files ################################################### # You can include other files from your options file using the 'include' # option. Crawl will treat it as if you copied the whole text of that file # into your options file in that spot. You can uncomment some of the following # lines by removing the beginning '#' to include some of the other files in # this folder. # Some useful, more advanced options, implemented in LUA. # include = advanced_optioneering.txt # Alternative vi bindings for Dvorak users. # include = dvorak_command_keys.txt # Alternative vi bindings for Colemak users. # include = colemak_command_keys.txt # Override the vi movement keys with a non-command. # include = no_vi_command_keys.txt # Turn the shift-vi keys into safe move, instead of run. # include = safe_move_shift.txt ##### Ancient versions ############################################## # If you're used to the interface of ancient versions of Crawl, you may # get back parts of it by uncommenting the following options: # include = 034_command_keys.txt # And to revert monster glyph and colouring changes: # include = 034_monster_glyphs.txt # include = 052_monster_glyphs.txt # include = 060_monster_glyphs.txt # include = 071_monster_glyphs.txt # include = 080_monster_glyphs.txt # include = 0.9_monster_glyphs.txt # include = 0.12_monster_glyphs.txt # include = 0.13_monster_glyphs.txt # include = 0.14_monster_glyphs.txt ## 골드 인터페이스 ## #$ lab_hide_chat_control = true ## ## AutoPickup.rc ################################################################################################ : if you.race() == "Mummy" then autopickup = /?"+|}$ : elseif you.race() == "Vampire" then autopickup = /?"!+|}$ # Felids are hard. : elseif you.race() == "Felid" then autopickup = /?"!+}$ : else autopickup = /?"!+}$ : end # ) Weapons # ( Missiles # [ Armour # / Wands # % Food # ? Scrolls # " or = Jewellery # ! Potions # + or : Books # | Staves # 0 Orbs # } Miscellaneous # $ Gold # Note that _whether_ items are picked up automatically or not, is # controlled by the in-game toggle Ctrl-A. Also note that picking # up takes a turn, but only one turn (regardless of the number of # items). If you teleport or blink onto a square with interesting # items, these will not be picked up. ae := autopickup_exceptions # Reset all autopickup exceptions ae = # Small & Little races cannot carry javelins : if table_has({"Halfling", "Kobold", "Felid", "Spriggan"}, you.race()) then ae += >javelin : end # Only Troll & Ogre pickup large rocks : if not table_has({"Ogre", "Troll"}, you.race()) then ae += >large rock : end # Jewellery : if table_has({"Gargoyle", "Vampire", "Mummy", "Ghoul"}, you.race()) then ae += >rings? of (poison resistance) : end : if table_has({"Deep Dwarf"}, you.race()) then ae += >amulets? of (regeneration) : end # Scrolls : if table_has({"Vampire", "Mummy", "Ghoul"}, you.race()) then ae += >scrolls? of (holy word) : else ae += scrolls? of (teleportation|blinking) ae += >potions? of (haste|berserk rage) : else ae += scrolls? of (amnesia|noise) # Potions ae += potions? of (degeneration) # Tengu do not need flying : if table_has({"Tengu"}, you.race()) then ae += >potions? of (flight) : end # Miscellaneous ae += <(tins of tremorstones) # Pickup runes but not 'runed' anything ae += orb of Zot # 0.26 holdback ae += >amulets? of (inaccuracy) ae += >rings? of (teleportation|attention) ae += >scrolls? of (random uselessness) ## ## AutoInscribe.rc ################################################################################################ show_god_gift = unident ai := autoinscribe # Inscribe forbidden items for PickupEquipment ai += forbidden:forbidden ai += (bad|dangerous)_item.*potion:!q ai += (bad|dangerous)_item.*scroll:!r ai += potions? of berserk rage:!q ai += scrolls? of (blinking|immolation|magic mapping|silence|vulnerability):!r ai += of faith:!P ai += manual of:!d # Inscribe distortion weapons if you are not worshipping Lugonu : if you.god() ~= "Lugonu" then ai += distortion:!w ai += (Sonja|Psyche):!w : end # Prevent melee with all staves; # If we want to melee with one, it's safe to require removing the annotation. ai += magical staff:!a # Prevent auto quivering and cycling ammo ai += (large rock|throwing net|curare|of dispersal):=f # Warn before throwing ai += (throwing net|of dispersal):!f ### Convenient shortcuts ########################### # Potions ai += curing:@q1 ai += potions? of heal wounds:@q2 ai += potions? of haste:@q3 # Scrolls ai += identify:@r1 ai += scrolls? of teleportation:@r4 # Rare items ai += (executioner's axe|double sword|triple sword|eveningstar|quick blade):rare ai += (storm dragon scales|quicksilver dragon scales|shadow dragon scales|pearl dragon scales|gold dragon scales|crystal plate):rare # 0.26 holdback ai += remove curse:@r2 { -- Spellcasting spam reduction by monqy local function generic_cast_spell(cmd) crawl.mpr('Cast which spell?') crawl.flush_prev_message() crawl.process_keys(cmd) end function cast_spell() generic_cast_spell('z') end function force_cast_spell() generic_cast_spell('Z') end } ## Logs chat messages into the notes ## note_chat_messages = true ## 스킬 수련 기본 설정값 메뉴얼 ## default_manual_training = true # Monster colors ########################### monster_list_colour = monster_list_colour += friendly:green,neutral:brown # https://github.com/crawl/crawl/blob/d371e1541e496270d8ada14439a52bda5da2811b/crawl-ref/source/webserver/game_data/static/monster_list.js#L114 monster_list_colour += good_neutral:brown,good_neutral:brown monster_list_colour += trivial:lightgrey,easy:lightgrey monster_list_colour += tough:yellow,nasty:lightred rest_delay = -1 travel_delay = -1 explore_delay = 1 show_travel_trail = true autofight_stop = 80 autofight_caught = true bindkey = [+] CMD_AUTOFIGHT tile_layout_priority = minimap, monster, inventory, spell, command auto_exclude = oklob,statue,curse skull,roxanne,hyperactive,lightning spire hp_warning = 30 mp_warning = 0 equip_unequip = true auto_butcher = satiated allow_self_target = no default_manual_training = true travel_key_stop = true tile_tag_pref = tutorial explore_wall_bias = 3 tile_realtime_anim = true autofight_throw = false autofight_hunger_stop = 1 bindkey = [^L] CMD_REPLAY_MESSAGES rest_wait_percent = 90 explore_auto_rest = true always_show_zot = true explore_greedy = true explore_stop = stairs,shops,altars,portals,branches,runed_doors, explore_stop += portals,runed_doors explore_stop += greedy_pickup_smart, greedy_visited_item_stack explore_stop += glowing_items, artefacts explore_stop_pickup_ignore += gold runrest_ignore_monster += butterfly:1 tile_web_mouse_control = false #$# lab_disable_mouse_move = true ################ ### Messages ### ################ channel.multiturn = mute msc := message_colour msc += mute:returns to your side msc += mute:a demon appears msc += mute:puff of smoke msc += mute:carefully avoids msc += mute:is recalled msc += mute:wall.*burn.*your msc += mute:dissolves? into (sparkling lights|shadows) msc += mute:(crumbles|melts) away\. msc += mute:(merges|forms) itself .* the air msc += mute:you swap places msc += mute:your.*(looks stronger|shudders|resists) msc += mute:your.*(stumbles backwards|holds.*ground) msc += mute:your.*(blinks|safely over) msc += mute:(phases out.*|misses) (your|something).* msc += mute:your.*(picks up|drops) msc += mute:your.*basks in the mutagenic energy msc += mute:your.*(struggles|tears|pulls away).*(web|net) ## ## ForceMorePrompts.rc ################################################################################################ show_more = false # 1. Dungeon Features # 2. Failure # 3. Bad Things # 4. Translocations # 5. Expiring Effects # 6. Religion # 7. Hell Effects # 8. Monsters # Set alias more := force_more_message stop := runrest_stop_message #################### # Dungeon Features # #################### # Custom more += Your.*skill increases # Abyssal Rune more += Found .* abyssal rune of Zot # Entrances, Exits, and Arrivals more += Found a frozen archway more += Found a gateway leading out of the Abyss more += Found a labyrinth entrance more += Found a staircase to the Ecumenical Temple more += The mighty Pandemonium lord.*resides here # Portal Timers more += distant snort more += interdimensional caravan more += invites you to visit more += oppressive heat more += roar of battle more += sound of rushing water more += The drain falls to bits more += There is an entrance to a bailey on this level more += tolling of a bell more += wave of frost more += You hear the drain falling apart more += You hear.*crackle.*magical portal more += You hear.*crackling.*archway more += You hear.*creaking.*(oriflamme|portcullis) more += You hear.*hiss.*sand more += You hear.*rumble.*avalanche more += You hear.*rusting.*drain more += You hear.*ticking.*clock # Traps more += (blundered into a|invokes the power of) Zot more += A huge blade swings out and slices into you stop += An alarm trap emits a blaring wail stop += found a zot trap stop += hear a soft click more += The power of Zot is invoked against you more += You (become entangled|are caught) in (a|the) (net) more += You fall through a shaft more += You stumble into the trap # Other more += Another plant grows acid sacs more += One of the plants suddenly grows acid sacs more += The walls and floor vibrate strangely for a moment more += You are suddenly pulled into a different region more += You have a vision of.*gates? ########### # Failure # ########### more += do not work when you're silenced more += sense of stasis more += Something interferes with your magic more += The rod doesn't have enough magic points more += The spell fizzles more += The writing blurs in front of your eyes more += The.*is unaffected more += This potion can/'t work under stasis more += This wand has no charges more += too hungry more += You are held in a net more += You are too injured to fight blindly more += You can't gag anything down more += You can't unwield more += You cannot cast spells when silenced more += You cannot cast spells while unable to breathe more += You cannot teleport right now more += You don't have any such object more += You don't have enough magic more += You don't.* that spell more += You fail to use your ability more += You have no appropriate body parts free more += You have no means to grasp a wand firmly enough more += You haven't enough magic at the moment more += You miscast more += Your amulet of stasis more += Your attempt to break free more += Your body armour is too heavy ############################# # Bad and Unexpected Things # ############################# # announce_damage more += $PAUSE_MORE # Bad things happening to you more += corrodes your equipment more += Your corrosive artefact corrodes you more += are blown away by the wind more += dispelling energy hits you more += infuriates you more += lose consciousness more += mark forms upon you more += Ouch! That really hurt! more += silver sears you more += Space bends around you more += Space warps horribly around you more += surroundings become eerily quiet more += Terrible wounds (open|spread) all over you more += The acid corrodes your more += The air around.*erupts in flames more += The air twists around and violently strikes you in flight more += You shudder from the earth-shattering force more += The arrow of dispersal hits you[^r] more += The barbed spikes become lodged in your body more += The barbed spikes dig painfully into your body as you move more += The blast of calcifying dust hits you[^r] more += The poison in your body grows stronger more += The pull of.*song draws you forwards more += The.*engulfs you in water more += The.*grabs you[^r] more += You (are|feel) drained more += You are (blasted|electrocuted) more += You are blown backwards more += You are burned terribly more += You are encased in ice more += You are engulfed in calcifying dust more += You are engulfed in dark miasma more += You are engulfed in mutagenic fog more += You are knocked back more += You are mesmerised more += You are slowing down more += You are trampled more += You convulse more += You feel a (horrible|terrible) chill more += You feel haunted more += You feel less vulnerable to poison more += You feel your attacks grow feeble more += You feel your flesh.*rot more += You feel your power drain away more += You feel your power leaking away more += You feel yourself grow more vulnerable to poison more += You stumble backwards more += You.*re (confused|more confused|too confused) more += You.*re (poisoned|more poisoned|lethally poisoned) more += Your body is wracked with pain more += Your damage is reflected back at you more += Your limbs are stiffening more += Your magical defenses are stripped away more += Your?.*suddenly stops? moving # Monsters doing bad things more += A tree reaches out and hits you! more += Agitated ravens fly out from beneath the more += begins to recite a word of recall more += Being near the torpor snail leaves you feeling lethargic more += blows on a signal horn more += cast banishment more += cast paralyse more += cast Torment more += goes berserk more += The moth of wrath goads something on more += is duplicated more += is no longer invulnerable more += Its appearance distorts for a moment more += Mara seems to draw the.*out of itself more += Mara shimmers more += Miasma billows from the more += shoots a curare more += stands defiantly in death's doorway more += steals.*your more += swoops through the air toward you more += The forest starts to sway and rumble more += The jumping spider pounces on you [^but] more += The octopode crusher throws you more += The shadow imp is revulsed by your support of nature more += The water nymph flows with the water more += The.*offers itself to Yredelemnul more += The.*seems to speed up more += The.*shudders more += There is a horrible. sudden wrenching feeling in your soul more += Vines fly forth from the trees! more += You are hit by a branch more += You feel you are being watched by something more += Your magical defenses are stripped away more += \'s.*reflects # Unexpected situations more += A magical barricade bars your way more += Done waiting more += doors? slams? shut more += It doesn't seem very happy more += Mutagenic energies flood into your body more += Some monsters swap places more += (are starving|devoid of blood) more += (The|Your).*falls away! more += The divine light dispels your darkness! more += The walls disappear more += There is a sealed passage more += You are wearing\: more += You cannot afford.*fee more += You feel (dopey|clumsy|weak) more += You feel a genetic drift more += You feel monstrous more += You feel your rage building more += You have disarmed more += You have finished your manual more += You need to eat something NOW more += You smell decay. (^Yuck!) more += You stop (a|de)scending the stairs more += You turn into a fleshy mushroom more += Your body shudders with the violent release of wild energies more += Your guardian golem overheats more += your magic stops regenerating more += Your scales start more += your.*devoured more += Green shoots are pushing up through the earth # Things getting better stop += contamination has completely more += You can move again more += You slip out of the net more += You.*and break free more += Your fit of retching subsides more += seems mollified # Ghouls : if you.race() == "Ghoul" then stop += smell.*(rott(ing|en)|decay) stop += something tasty in your inventory : end ################## # Translocations # ################## # Teleporting more += You blink more += You.*teleport [^f] more += You feel strangely (unstable|stable) more += You feel your translocation being delayed more += Your surroundings flicker more += Your surroundings seem slightly different more += Your surroundings suddenly seem different # -Tele more += You cannot blink right now more += You cannot teleport right now more += You feel.*firmly anchored in space more += You are no longer firmly anchored in space # -cTele more += You feel your control is inadequate #################### # Expiring Effects # #################### # God Abilities # Divine Shield (The Shining One) more += Your divine shield starts to fade. more += Your divine shield fades away. # Jelly Prayer (Jiyva) more += Your prayer is over. # Mirror Damage (Yredelemnul) more += dark mirror aura disappears # Player Spells # Aura of Abjuration stop += Your aura of abjuration expires # Control Teleport stop += you feel uncertain # Death's Door more += time is quickly running out more += life is in your own # Enslavement more += is no longer charmed # Flight more += You are starting to lose your buoyancy stop += You lose control over your flight # Haste more += Your extra speed is starting to run out more += You feel yourself slow down # Invisibility more += You feel more conspicuous more += You flicker for a moment more += You flicker back # Ozocubu's Armour and Condensation Shield more += Your icy (shield|armour) evaporates more += Your.*(shield|armour) melts away # Phase Shift more += You feel closer to the material plane more += You are firmly grounded in the material plane once more # Repel/Deflect stop += missiles spell is about to expire more += You feel less protected from missiles # Shroud of Golubria stop += shroud begins to fray stop += shroud unravels more += Your shroud falls apart # Silence more += Your hearing returns # Swiftness stop += start to feel a little slower more += You feel sluggish # Transmutations more += Your transformation is almost over more += You have a feeling this form more += Your skin feels tender more += You feel yourself come back to life # Other # Potion of Resistance more += You start to feel less resistant. more += Your resistance to elements expires ############ # Religion # ############ # Gifts or abilities are ready # Dithmenos more += You are shrouded in an aura of darkness more += You now sometimes bleed smoke more += You.*no longer.*bleed smoke more += Your shadow no longer tangibly mimics your actions more += Your shadow now sometimes tangibly mimics your actions # Gozag more += will now duplicate a non-artefact item # Jiyva more += will now unseal the treasures of the Slime Pits # Kikubaaqudgha more += Kikubaaqudgha will now enhance your necromancy # Lugonu more += Lugonu will now corrupt your weapon # Qazlal more += resistances upon receiving elemental damage more += You are surrounded by a storm which can block enemy attacks # Ru more += you are ready to make a new sacrifice # Sif Muna more += Sif Muna is protecting you from the effects of miscast magic # The Shining One more += The Shining One will now bless # Zin more += will now cure all your mutations # You Screwed Up more += is no longer ready # Poor Decisions more += You really shouldn't be using # Gaining new abilities : if you.god() ~= "Uskayaw" then more += You can now more += Your?.*can no longer : end # Wrath more += Nemelex gives you another card to finish dealing more += Fedhas invokes the elements against you more += Lugonu sends minions to punish you more += Okawaru sends forces against you more += wrath finds you # Xom Effects more += staircase.*moves more += is too large for the net to hold # Other more += Jiyva alters your body : if you.god() == "Xom" then more += god: : end : if not string.find(you.god(), "Jiyva") then more += splits in two :end ################ # Hell Effects # ################ more += A gut-wrenching scream fills the air more += Brimstone rains from above more += Die .* mortal more += Leave now. before it is too late more += Something frightening happens more += Trespassers are not welcome here more += We do not forgive those who trespass against us more += We have you now more += You do not belong in this place more += You feel a terrible foreboding more += You feel lost and a long. long way from home more += You hear diabolical laughter more += You hear words spoken in a strange and terrible language more += You sense a hostile presence more += You sense an ancient evil watching you more += You shiver with fear more += You smell brimstone more += You suddenly feel all small and vulnerable more += You will not leave this place more += You have reached level more += You rejoin the land of the living ############ # Monsters # ############ # Arriving Unexpectedly more += appears in a shower of sparks more += appears out of thin air more += comes (up|down) the stairs more += Something appears in a flash of light more += The.*is a mimic more += You sense the presence of something unfriendly more += The.*answers the.*call more += Wisps of shadow swirl around more += Shadows whirl around # Item Use more += drinks a potion more += evokes.*(amulet|ring) more += reads a scroll more += zaps a (wand|rod) # Dangerous monsters we force_more when first seen. # Things with ranged (or extremely fast), irresistable effects. more += ((floating|shining) eye|dream sheep|death drake).*into view more += (wretched star|apocalypse crab|death drake).*into view more += (entropy weaver|torpor snail|spriggan druid).*into view more += (vault (warden|sentinel)|merfolk (avatar|siren)).*into view more += (guardian serpent|draconian shifter|convoker|death cob).*into view more += (phantasmal warrior|air elemental).*into view # Distortion more += distortion # Malmutate more += (cacodemon|neqoxec).*into view # Paralysis/Petrify/Banish more += (orc sorcerer|(?