##### 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 # Alternative vi bindings for Neo users. # include = neo_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 ## ## magus.rc ################################################################################################ ## ## CONFIG.lua ################################################################################################ { -- Global CONFIG for customizing RC behaviors CONFIG = { } CONFIG.emojis = true } ## ## BEGIN ################################################################################################ : rc_msg("Initializing magus.rc ...") : crawl.enable_more(false) ##### 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 ## ## 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.darkgrey = "darkgrey" 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 rc_pause_text() return string.format("%s%s%s", withColor(COLORS.darkgrey, "("), withColor(COLORS.yellow, PAUSE_MORE), withColor(COLORS.darkgrey, ")") ) end function rc_pause() rc_warn(rc_pause_text()) end function rc_pause_message(args) local color = args.color or COLORS.white local channel = args.channel or "plain" crawl.mpr( string.format("%s %s", withColor(color, args.message), rc_pause_text() ), channel ) end function table_has(table, match) for index, value in ipairs(table) do if value == match then return true end end return false end function table_compare(lookup, key_a, key_b) local val_a = lookup[key_a] local val_b = lookup[key_b] if val_a == nil or val_b == nil then return false end if val_b > val_a then return true end return false end } ## ## Lua Setup ################################################################################################ ## ## AnnounceDamage.lua ################################################################################################ { local Messages = { ["HPSimple"] = function(delta) return withColor(COLORS.white, string.format("HP[%s]", delta_color(0 - delta)) ) end, ["HPMax"] = function (color, hp, hpm, delta) crawl.mpr( withColor(COLORS.lightgreen, string.format("You now have %s max hp (%s).", hpm, delta_color(delta)) ) ) end, ["HPLoss"] = function (color, hp, hpm, loss) crawl.mpr( string.format("%s%s", withColor(COLORS.red, string.format("You take %s damage,", loss)), withColor(color, string.format(" and now have %s/%s hp.", hp, hpm)) ) ) end, ["HPGain"] = function (color, hp, hpm, gain) crawl.mpr( string.format("%s%s", withColor(COLORS.lightgreen, string.format("You regained %s hp,", gain)), withColor(color, string.format(" and now have %s/%s hp.", hp, hpm)) ) ) end, ["HPFull"] = function (color, hp) crawl.mpr( withColor(COLORS.lightgreen, string.format("Your hp is fully restored (%s).", hp) ) ) end, ["HPMassivePause"] = function () rc_pause_message({ message = "MASSIVE DAMAGE!!", color = COLORS.lightred }) end, ["MPSimple"] = function(delta) return withColor(COLORS.white, string.format("MP[%s]", delta_color(0 - delta)) ) end, ["MPLoss"] = function (color, mp, mpm, loss) crawl.mpr( string.format("%s%s", withColor(COLORS.cyan, string.format("You lost %s mp,", loss)), withColor(color, string.format(" and now have %s/%s mp.", mp, mpm)) ) ) end, ["MPGain"] = function (color, mp, mpm, gain) crawl.mpr( string.format("%s%s", withColor(COLORS.cyan, string.format("You regained %s mp,", gain)), withColor(color, string.format(" and now have %s/%s mp.", mp, mpm)) ) ) end, ["MPFull"] = function (color, mp) crawl.mpr( withColor(COLORS.cyan, string.format("Your mp is fully restored (%s).", mp)) ) end, [""]=""} local prev_hp = 0 local prev_hp_max = 0 local prev_mp = 0 local prev_mp_max = 0 function delta_color(delta) local color = delta < 0 and COLORS.red or COLORS.green local signDelta = delta < 0 and delta or "+"..delta return string.format("<%s>%s", color, signDelta, color) end -- Simplified condensed HP and MP output -- Print a single condensed line showing HP & MP change -- e.g.😨 HP[-2] MP[-1] function simple_announce_damage(curr_hp, max_hp, hp_diff, mp_diff) local emoji = "" local message = nil -- MP[-1] if hp_diff == 0 and mp_diff ~= 0 then message = Messages.MPSimple(mp_diff) -- HP[-2] elseif hp_diff ~= 0 and mp_diff == 0 then message = Messages.HPSimple(hp_diff) -- HP[-2] MP[-1] elseif hp_diff ~= 0 and mp_diff ~= 0 then message = string.format("%s %s", Messages.HPSimple(hp_diff), Messages.MPSimple(mp_diff)) else -- No changes end if message ~= nil then if curr_hp <= (max_hp * 0.25) then emoji = "😱" elseif curr_hp <= (max_hp * 0.50) then emoji = "😨" elseif curr_hp <= (max_hp * 0.75) then emoji = "😮" elseif curr_hp < max_hp then emoji = "😕" else emoji = "😎" end if CONFIG.emojis then crawl.mpr(string.format("\n%s %s", emoji, message)) else crawl.mpr(string.format("\n%s", message)) end end end -- Try to sync with colors defined in Interface.rc function color_by_max(message_func, curr, max, diff) if curr <= (max * 0.25) then message_func(COLORS.red, curr, max, diff) elseif curr <= (max * 0.50) then message_func(COLORS.lightred, curr, max, diff) elseif curr <= (max * 0.75) then message_func(COLORS.yellow, curr, max, diff) else message_func(COLORS.lightgrey, curr, max, diff) end end function announce_damage() -- TODO Define Colors.Red, Colors.Green, etc. -- TODO Move current/previous into array pair -- Save previous as last_hp -- Shift current into previous -- Early return if last_hp was == 0 local curr_hp, max_hp = you.hp() local curr_mp, max_mp = you.mp() --Skips message on initializing game if prev_hp > 0 then local hp_diff = prev_hp - curr_hp local max_hp_diff = max_hp - prev_hp_max local mp_diff = prev_mp - curr_mp local max_mp_diff = max_mp - prev_mp_max -- Simplified condensed HP and MP output simple_announce_damage(curr_hp, max_hp, hp_diff, mp_diff) -- HP Max if max_hp_diff > 0 then Messages.HPMax(COLORS.green, curr_hp, max_hp, max_hp_diff) elseif max_hp_diff < 0 then Messages.HPMax(COLORS.yellow, curr_hp, max_hp, max_hp_diff) end -- HP Loss -- Ensure we lost MORE than the change in max hp -- i.e. a change in max hp should not be considered damage if (hp_diff > 0 and hp_diff > math.abs(max_hp_diff)) then color_by_max(Messages.HPLoss, curr_hp, max_hp, hp_diff) if hp_diff > (max_hp * 0.20) then Messages.HPMassivePause() end end -- HP Gain -- More than 1 HP gained if (hp_diff < 0) then -- Remove the negative sign by taking absolute value local hp_gain = math.abs(hp_diff) if (hp_gain > 1) and not (curr_hp == max_hp) then color_by_max(Messages.HPGain, curr_hp, max_hp, hp_gain) end if (curr_hp == max_hp) then Messages.HPFull(nil, curr_hp) end end -- MP Gain -- More than 1 MP gained if (mp_diff < 0) then -- Remove the negative sign by taking absolute value local mp_gain = math.abs(mp_diff) if (mp_gain > 1) and not (curr_mp == max_mp) then color_by_max(Messages.MPGain, curr_mp, max_mp, mp_gain) end if (curr_mp == max_mp) then Messages.MPFull(nil, curr_mp) end end -- MP Loss -- Ensure we lost MORE than the change in max mp -- i.e. a change in max mp should not be considered loss if (mp_diff > 0 and mp_diff > math.abs(max_mp_diff)) then color_by_max(Messages.MPLoss, curr_mp, max_mp, mp_diff) end end --Set previous hp/mp and form at end of turn prev_hp = curr_hp prev_hp_max = max_hp prev_mp = curr_mp prev_mp_max = max_mp 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 nil_item = "item=nil"; local function is_magical(item) return item.branded or item.ego() or item.artefact end 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 and subtype == nil then return nil_item end local magical = tostring(is_magical(item)); local plus = tostring(item.plus); return string.format("qual=%s; subtype=%s, magical=%s, plus=%s", qual, subtype, magical, plus) end -- `SK_RANGED_WEAPONS` source for ranged weapon names and base damage values -- https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/item-prop.cc#L783-L819 -- https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/item-prop.cc#L1815-L1823 local ranged_weapon_base_damage = { ["sling"] = 7, ["shortbow"] = 8, ["old fustibalus"] = 10, ["orcbow"] = 11, ["longbow"] = 14, ["arbalest"] = 16, ["hand cannon"] = 16, ["triple crossbow"] = 23 } -- end ranged_weapon_base_damage (comment prevents crawl rc parser ending outer lua block) local function is_ranged_weapon(item) return item ~= nil and item.class(true) == "weapon" and ranged_weapon_base_damage[item.subtype()] ~= nil end local function best_inventory_ranged_weapon() local best = nil for _, inv_item in ipairs(items.inventory()) do if not is_ranged_weapon(inv_item) then -- skip elseif best == nil then best = inv_item else local inv_damage = ranged_weapon_base_damage[inv_item.subtype()] local best_damage = ranged_weapon_base_damage[best.subtype()] if inv_damage > best_damage then best = inv_item elseif inv_damage < best_damage then -- skip elseif (inv_item.plus or 0) > (best.plus or 0) then best = inv_item end end end return best end local function should_pickup_upgrade(args) local cur = args.current local item = args.item -- no comparable item? pickup! if cur == nil then return true end local cur_subtype = cur.subtype() local item_subtype = item.subtype() local higher_plus = item.plus ~= nil and item.plus > (cur.plus or 0) local more_magical = not is_magical(cur) and is_magical(item) -- DEBUG -- rc_msg(string.format("[should_pickup_upgrade] (cur): %s", debug_item(cur))) -- rc_msg(string.format("[should_pickup_upgrade] (item): %s", debug_item(item))) -- rc_msg(string.format("[should_pickup_upgrade] higher_plus: %s, more_magical: %s", tostring(higher_plus), tostring(more_magical))) -- ranged weapons have a clear base-damage progression across subtypes if table_compare(ranged_weapon_base_damage, cur_subtype, item_subtype) then return true end -- do not replace magical gear with plain gear just for enchantment if is_magical(cur) and not is_magical(item) then return false end -- dragon scales are rare enough that we do not auto-replace them if string.find(cur.name("qual"), "dragon scale") then return false end -- same item? pickup higher plus or more magical if cur_subtype == item_subtype then if higher_plus or more_magical then return true end end -- do 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" } -- end item_subtype_equip_slot (comment prevents crawl rc parser ending outer lua block) 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 -- source for form wiz_name, talisman, and melds values -- https://github.com/crawl/crawl/tree/0.34.0/crawl-ref/source/dat/forms -- you.transform() returns transform_name(), which returns the form wiz_name -- https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/l-you.cc#L399-L404 -- https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/transform.cc#L1449-L1457 local form_meld_key = { ["appendages"] = "appendages", ["aqua"] = "aqua", ["bat"] = "bat", ["bat swarm"] = "bat swarm", ["blade"] = "blade", ["death"] = "death", ["dragon"] = "dragon", ["eel hands"] = "eel", ["fortress crab"] = "fortress", ["flux"] = "flux", ["fungus"] = "fungus", ["hive"] = "hive", ["hydra"] = "hydra", ["jelly"] = "jelly", ["maw"] = "maw", ["medusa"] = "medusa", ["pig"] = "pig", ["porcupine"] = "porcupine", ["quill"] = "quill", ["rime yak"] = "rimehorn", ["amphisbaena"] = "serpent", ["shadow"] = "shadow", ["slaughter"] = "slaughter", ["sphinx"] = "sphinx", ["spider"] = "spider", ["spore"] = "spore", ["statue"] = "statue", ["storm"] = "storm", ["sun scarab"] = "scarab", ["tree"] = "tree", ["vampire"] = "vampire", ["walking scroll"] = "inkwell", ["werewolf"] = "werewolf", ["wisp"] = "wisp" } -- end form_meld_key (comment prevents crawl rc parser ending outer lua block) local armour_slots_melded_by_form_key = { ["appendages"] = {shield = false, body = false, cloak = false, helmet = true, gloves = false, boots = true, barding = false}, ["aqua"] = {shield = false, body = true, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["bat"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["bat swarm"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["blade"] = {shield = false, body = false, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["dragon"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["death"] = {shield = false, body = false, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["eel"] = {shield = true, body = false, cloak = false, helmet = false, gloves = true, boots = false, barding = false}, ["fortress"] = {shield = true, body = false, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["flux"] = {shield = true, body = true, cloak = false, helmet = false, gloves = true, boots = false, barding = false}, ["fungus"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["hive"] = {shield = false, body = true, cloak = false, helmet = true, gloves = false, boots = false, barding = false}, ["hydra"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["inkwell"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["jelly"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["maw"] = {shield = false, body = false, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["medusa"] = {shield = false, body = false, cloak = true, helmet = true, gloves = false, boots = false, barding = false}, ["pig"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["porcupine"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["quill"] = {shield = false, body = false, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["rimehorn"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["serpent"] = {shield = true, body = true, cloak = true, helmet = false, gloves = true, boots = true, barding = true }, ["scarab"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["shadow"] = {shield = false, body = false, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["slaughter"] = {shield = false, body = false, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["sphinx"] = {shield = true, body = true, cloak = false, helmet = true, gloves = true, boots = true, barding = false}, ["spider"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["spore"] = {shield = true, body = false, cloak = false, helmet = false, gloves = false, boots = true, barding = false}, ["statue"] = {shield = false, body = true, cloak = false, helmet = false, gloves = true, boots = true, barding = true }, ["storm"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["tree"] = {shield = false, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true }, ["vampire"] = {shield = false, body = false, cloak = false, helmet = false, gloves = false, boots = false, barding = false}, ["werewolf"] = {shield = false, body = false, cloak = false, helmet = false, gloves = true, boots = true, barding = true }, ["wisp"] = {shield = true, body = true, cloak = true, helmet = true, gloves = true, boots = true, barding = true } } -- end armour_slots_melded_by_form_key (comment prevents crawl rc parser ending outer lua block) local function is_melded_by_current_form(item) if item == nil or item.class(true) ~= "armour" then return false end local form = you.transform() -- player not transformed if form == "" then return false end local meld_key = form_meld_key[form] if meld_key == nil then rc_warn(string.format("[PickupEquipment] is_melded_by_current_form unhandled form=%s", form)) return false end local melded_slots = armour_slots_melded_by_form_key[meld_key] if melded_slots == nil then rc_warn(string.format("[PickupEquipment] is_melded_by_current_form unhandled meld_key=%s", meld_key)) return false end return melded_slots[item.subtype()] == true end local function permanent_mutation_level(name) return you.get_base_mutation_level(name, true, false, true) end local function permanent_armour_slot_blocked(item) if item == nil or item.class(true) ~= "armour" then return false end local race = you.race() local subtype = item.subtype() local name = item.name("qual") local no_armour = permanent_mutation_level("no armour") > 0 local formless = permanent_mutation_level("formless") > 0 local little = race == "Felid" or race == "Spriggan" local large = race == "Ogre" or race == "Troll" if subtype == "body" then return formless or no_armour or race == "Octopode" or race == "Draconian" or string.find(race, "Draconian") elseif subtype == "helmet" then if formless or no_armour or permanent_mutation_level("horns") >= 3 or permanent_mutation_level("antennae") >= 3 then return true end local hard_helmet = string.find(name, "helmet") return hard_helmet and (little or large or race == "Octopode" or race == "Draconian" or string.find(race, "Draconian") or permanent_mutation_level("horns") > 0 or permanent_mutation_level("antennae") > 0 or permanent_mutation_level("beak") > 0) elseif subtype == "gloves" then return formless or no_armour or race == "Octopode" or little or large or permanent_mutation_level("claws") >= 3 or permanent_mutation_level("demonic touch") >= 3 elseif subtype == "boots" then return formless or no_armour or race == "Octopode" or little or large or race == "Naga" or race == "Armataur" or permanent_mutation_level("hooves") >= 3 or permanent_mutation_level("talons") >= 3 or permanent_mutation_level("float") > 0 elseif subtype == "barding" then return not (race == "Naga" or race == "Armataur") elseif subtype == "cloak" then return formless or no_armour or race == "Octopode" or permanent_mutation_level("weakness stinger") >= 3 end return false 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" } -- end two_handed_always (comment prevents crawl rc parser ending outer lua block) local function should_skip_shield_pickup(sub_type) if sub_type ~= "shield" then return false end local curr_weapon = items.equipped_at("weapon") -- using 2 handed weapons if curr_weapon then if table_has(two_handed_always, curr_weapon.subtype()) then return true end end -- shield skill less than 3 return you.skill("Shields") <= 3 end -- `talisman_type_name` source for item.subtype() talisman names -- https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/item-prop.cc#L3163-L3192 -- `_talisman_tiers` source for internal talisman tiers -- https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/item-prop.cc#L3194-L3221 local talisman_skill_min = { ["inkwell talisman"] = 0, ["quill talisman"] = 0, ["scarab talisman"] = 8, ["medusa talisman"] = 8, ["rimehorn talisman"] = 8, ["spore talisman"] = 8, ["maw talisman"] = 8, ["eel talisman"] = 12, ["fortress talisman"] = 12, ["lupine talisman"] = 12, ["serpent talisman"] = 12, ["spider talisman"] = 12, ["wellspring talisman"] = 12, ["blade talisman"] = 17, ["dragon-coil talisman"] = 17, ["granite talisman"] = 17, ["hive talisman"] = 17, ["riddle talisman"] = 17, ["sanguine talisman"] = 17, ["storm talisman"] = 23, ["talisman of death"] = 26 } -- end talisman_skill_min (comment prevents crawl rc parser ending outer lua block) local function talisman_rank(item) if item == nil or item.class(true) ~= "talisman" then return nil end return talisman_skill_min[item.subtype()] or talisman_skill_min[item.name("qual")] end local function should_pickup_talisman(item) if you.skill("Shapeshifting") < 3 then return false end local rank = talisman_rank(item) if rank == nil then return false end local best_inv_rank = nil for _, inv_item in ipairs(items.inventory()) do local inv_rank = talisman_rank(inv_item) if inv_rank ~= nil and (best_inv_rank == nil or inv_rank > best_inv_rank) then best_inv_rank = inv_rank end end if best_inv_rank == nil then return true end if rank > best_inv_rank then return true end return false end local function pickup_equipment(item, name) local class = item.class(true) -- -- DEBUG -- rc_warn(string.format("[pickup_equipment] item_arg: [%s]", name)) -- rc_warn(string.format("[pickup_equipment] item: [%s]", debug_item(item))) -- -- 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 false end if class == "talisman" then return should_pickup_talisman(item) end -- permanent species/mutation slot blockers should win over temporary form if permanent_armour_slot_blocked(item) then return false end -- do not pickup useless items if item.is_useless then -- except armour that is only useless because the current form temporarily melds that slot if is_melded_by_current_form(item) then -- evaluate normal pickup rules below else return false end end -- always pickup artefacts if item.artefact then return true end -- always pickup god gift equipment if item.god_gift then return true end if class == "armour" then local sub_type = item.subtype() if should_skip_shield_pickup(sub_type) then return false end local equipped_item = equip_slot(sub_type) -- always pickup empty slots if equipped_item == nil then return true end if should_pickup_upgrade({ current = equipped_item, item = item }) then return true end return false end if class == "weapon" then if is_ranged_weapon(item) then return should_pickup_upgrade({ current = best_inventory_ranged_weapon(), item = item }) end -- get currently equipped item in slot local curr_weapon = items.equipped_at("weapon"); -- rc_msg(string.format("[pickup_equipment] curr_weapon.subtype: %s", curr_weapon.subtype())) -- when using unarmed combat, we want to skip weapon upgrade pickup if curr_weapon == nil then return false end if should_pickup_upgrade({ current = curr_weapon, item = item }) then return true end return false end -- add_autopickup_func treats false as "never pick this up" -- nil means "no opinion" and allows other pickup rules to apply return nil 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.12.1]" 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 announce_damage() note_version() end } ## ## RC Options (http://crawl.akrasiac.org/docs/options_guide.txt) ################################################################################################ ## ## Init.rc ################################################################################################ # When set to `true` or `full`, the game will pregenerate the entire # connected dungeon when starting a new character. This leads to # deterministic dungeon generation relative to a particular game seed, at # the cost of a slow game start. If set to `incremental`, the game will # generate levels as needed so that it always generates them in the same # order, also producing a deterministic dungeon. You still may encounter # variation in bazaars, the abyss, pandemonium, and ziggurats, and for # incremental pregeneration, artefacts. When set to `false` or `classic`, # the game will generate all levels on level entry, as was the rule before # 0.23. Some servers may disallow full pregeneration. # https://github.com/crawl/crawl/blob/master/crawl-ref/docs/options_guide.txt#L421 # # `incremental` produces deterministic results and `full` is not supported # by webtiles, so we set this to `incremental` here for the best result pregen_dungeon = incremental ## ## Travel.rc ################################################################################################ autofight_stop = 75 autofight_caught = true # Prevent travel from routing through deep water. # By default, this option is commented out. For merfolk and/or characters with # permanent levitation, this will prevent travel or explore from going through any water # travel_avoid_terrain = deep water # Wait until your HP and MP are both at rest_wait_percent before moving rest_wait_percent = 100 explore_auto_rest = true # Set to -1 for instant-travel, set to 1 to see travel paths travel_delay = -1 explore_delay = 1 # Adjusts how much autoexplore favours attempting to discover room perimeters and corners. # At higher values, autoexplore will more heavily favour visiting squares that are next to walls; # at 0 it will not favour them at all. explore_wall_bias = 3 # auto explore stop defaults explore_stop = stairs,shops,altars,portals,branches,runed_doors,runes explore_stop += artefacts,glowing_items,greedy_pickup_smart,greedy_visited_item_stack # activity_interrupt_names # https://github.com/crawl/crawl/blob/9bf6f1401de0176e0e695ad85b3e9fc7e42da3ab/crawl-ref/source/delay.cc#L1306 # runrest_stop_message += starving # # do not stop exploring for hungry # interrupt_travel -= hungry ## ## Interface.rc ################################################################################################ # hp and mp bar coloring view_delay = 300 hp_colour = 100:lightgreen, 99:lightgray, 75:yellow, 50:lightred, 25:red mp_colour = 100:cyan, 99:lightgray, 75:yellow, 50:lightred, 25:red hp_warning = 50 # new characters start with manual skill (instead of automatic) default_manual_training = true # Unequip already equipped items by selecting in equip menus (i.e. w, W, P) equip_unequip = true # Cannot target self with risky magic allow_self_target = no # Zot count status # If you spend the indicated number of turns in this branch without descending to # a new floor, Zot will find and consume you. # always_show_zot determines whether to show the "Zot" status light at all times # even when you've got plenty of time left. defaults to `false` always_show_zot = 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:darkgrey,easy:lightgrey monster_list_colour += tough:yellow,nasty:lightred # Tiles ########################### # mini map size, [X] pixels per tile tile_map_pixels = 16 # scale factor when map mode (X) tile_map_scale = 0.50 # size of tiles (default is 32) tile_cell_pixels = 32 # These options allow configuring the colours used for the minimap of the dungeon # level. Using RGB hex codes is also allowed, such as #00ff00 for green. # tile_player_col - colour of player position, as well as of # map centre during level map mode ('X') # tile_monster_col - colour of hostile monsters # tile_neutral_col - colour of neutral monsters # tile_peaceful_col - colour of peaceful monsters # tile_friendly_col - colour of friendly monsters # tile_plant_col - colour of zero xp monsters (plant and fungus) # tile_item_col - colour of known or detected items # tile_unseen_col - colour of unseen areas (usually stone) # tile_floor_col - colour of floor # tile_wall_col - colour of any wall type # tile_mapped_floor_col - colour of floor detected via magic mapping # tile_mapped_wall_col - colour of walls detected via magic mapping # tile_explore_horizon_col - colour of the edge of explored territory # tile_door_col - colour of known doors, open or closed # tile_downstairs_col - colour of downstairs # tile_upstairs_col - colour of upstairs, including branch exits # tile_branchstairs_col - colour of branch entrances # tile_portal_col - colour of any portal # tile_transporter_col - colour of transporters # tile_transporter_landing_col - colour of transporter destinations # tile_feature_col - colour of any non-stair, non-portal feature # (altar, shop, fountain, ...) # tile_trap_col - colour of known traps of any type # tile_water_col - colour of shallow water # tile_deep_water_col - colour of deep water # tile_lava_col - colour of lava # tile_excluded_col - colour of squares excluded for autotravel # (will only override tile_floor_col colour) # tile_excl_centre_col - colour of exclusion centre (overrides # tile_floor_col and tile_item_col, only) # tile_window_col - colour of the rectangular view window tile_plant_col = #5C8745 tile_item_col = #262626 tile_floor_col = #262626 tile_explore_horizon_col = #78350F tile_lava_col = #EF4444 tile_water_col = #0086B3 tile_deep_water_col = #1F1FED # default comparison # tile_player_col = white # tile_monster_col = #660000 # tile_neutral_col = #660000 # tile_peaceful_col = #664400 # tile_friendly_col = #664400 # tile_plant_col = #446633 #5C8745 # tile_item_col = #005544 #262626 # tile_unseen_col = black # tile_floor_col = #333333 #262626 # tile_wall_col = #666666 #595959 # tile_mapped_floor_col = #222266 # tile_mapped_wall_col = #444499 # tile_explore_horizon_col = #6B301B #78350F # tile_door_col = #775544 #D97706 # tile_downstairs_col = #FF00FF #DC2626 # tile_upstairs_col = cyan #99FF33 # tile_branchstairs_col = #FF7788 #DC2626 # tile_portal_col = #FFDD00 #EC4899 # tile_transporter_col = #0000FF #F9A8D4 # tile_transporter_landing_col = #5200AA #34D399 # tile_feature_col = #997700 #FCD34D # tile_trap_col = #AA6644 #D24DFF # tile_water_col = #114455 #0086B3 # tile_deep_water_col = #001122 #1F1FED # tile_lava_col = #552211 #EF4444 # tile_excluded_col = #552266 # tile_excl_centre_col = #552266 #4C1D95 # tile_window_col = #558855 # tile color defaults, see http://crawl.akrasiac.org/docs/options_guide.txt # tile_player_col = white # tile_monster_col = #660000 # tile_neutral_col = #660000 # tile_peaceful_col = #664400 # tile_friendly_col = #664400 # tile_plant_col = #446633 # tile_item_col = #005544 # tile_unseen_col = black # tile_floor_col = #333333 # tile_wall_col = #666666 # tile_mapped_floor_col = #222266 # tile_mapped_wall_col = #444499 # tile_explore_horizon_col = #6b301b # tile_door_col = #775544 # tile_downstairs_col = #ff00ff # tile_upstairs_col = cyan # tile_branchstairs_col = #ff7788 # tile_portal_col = #ffdd00 # tile_transporter_col = #0000ff # tile_transporter_landing_col = #5200aa # tile_feature_col = #997700 # tile_trap_col = #aa6644 # tile_water_col = #114455 # tile_deep_water_col = #001122 # tile_lava_col = #552211 # tile_excluded_col = #552266 # tile_excl_centre_col = #552266 # tile_window_col = #558855 # Glyphs ########################### ##### 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 = 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 ## ## Bindkey.rc ################################################################################################ # All commands and their key binds # https://github.com/jmbjr/dcss/blob/master/crawl-ref/docs/keybind.txt # CTRL+N will autofight without moving bindkey = [^N] CMD_AUTOFIGHT_NOMOVE # Alternative vi bindings for Dvorak users. # include = dvorak_command_keys.txt # Alternative vi bindings for Colemak users. # include = colemak_command_keys.txt # Alternative vi bindings for Neo users. # include = neo_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 ## ## Slots.rc ################################################################################################ ########### # Sorting # ########### # sort_menus = [menu:](true | false | auto:X)[:sort_order] # Controls if and how items are sorted in inventory and pickup # menus. # When sort_menus = false (the default), items are not sorted, and # will be ordered by inventory letter (or in the order they're # stacked for items on the floor). # When sort_menus = true, items are sorted according to the specified # sort_order, with the default being: # equipped, basename, qualname, curse, qty # If sort_menus = auto:X, items are sorted if there are at least # X items in the same category. For instance: # sort_menus = auto:5 # will sort item classes that have at least 5 items. For instance, # having 4 kinds of potions would not sort them, but having 5 # would. # You can explicitly specify sort criteria in the sort_menus # option as: # sort_menus = true : art, basename, qualname, curse, qty # Two items will be compared based on the first sort criteria # where they differ. So with the sort_menus line given above, # if only one of two different items is a known artefact, it will be # listed first, else (if both or neither are artefacts) if their # basenames are different they will be alphabetically compared using # their basenames; if the basenames are the same but the qualified # names are different it will compare their qualified names, and so # on. # The available sort criteria are: # * basename: # This is the name of the item type. The basename for all of # "a +0 robe", "an embroidered robe" and "the cursed +2 robe of # Ponies" is just "robe". The basename for both of "a brass # ring" and "a ring of fire resistance" are "ring". # * qualname: # The name of the item without articles (a/an/the), quantities, # enchantments, or curse-status. The qualified names for the # robes described above are "robe", "embroidered robe" and "robe # of Ponies", respectively. The qualified names for the rings # described above are "brass ring" and "ring of fire # resistance", respectively. # * fullname: # This is the name of the item as displayed in menus (including # (quantities, curse-status, etc.) # * dbname: # Sorts based on an item's unique internal name which is linked # to its description. Items with the same description will be # grouped together. # * curse: # Curse-status of the item (if known). Uncursed items show up # first. # * equipped: # Equipped items show up first. # * art: # Identified artefacts show up first. # * ego: # Identified ego items show up first. # * glowing: # Unidentified glowing/shiny/runed/etc items show up first. # * identified: # Identified items show up before unidentified ones of the # same type. An item is regarded as identified once you know # its subtype or ego. # * qty: # The quantity for stackable items (such as scrolls, potions, # etc.) # * slot: # The inventory letter for items in inventory; irrelevant for # items on the floor. # * charged: # Makes wands known or assumed to have some charges left appear # before wands known to be empty; irrelevant for all other item # types. # You can ask for a descending order sort by prefixing one or more # sort criteria with > as: # sort_menus = true : basename, >qty # You can also request sorting only for specific menus: # sort_menus = pickup: true # or # sort_menus = inv: true # (Menu types must be specified as name:, with no space between # name and colon.) # By default only pickup menus are sorted, and the sort criteria are: # "equipped, basename, qualname, curse, qty". # All other menus (drop, inv) will be sorted by inventory letter. # The menu selectors available are: # pickup: All pickup menus, stash-search menus, etc. for items not # in your inventory. # drop: The item drop menu. # inv: Inventory listings for any command (but not for dropping # items). # any: All menus; this is the default when unspecified. # For example, # sort_menus = true : equipped, basename, qualname, curse, qty # will produce the same inventory and drop menus as by default, # with the exception that all worn/wielded items come first. This # can be convenient if you use the '.' command to select # subsequent items. # If you define sort_menus differently for two or more selectors, # the last one matching will always take precedence, i.e. "any" # as last setting would override any of the others. # for all menus (unspecified) # ignore equipped status for sorting sort_menus = true : identified , curse , art , ego , basename , qualname, >qty # sort equipped items to top # sort_menus = true : equipped , identified , curse , art , ego , basename , qualname, >qty # sort by quantity first # sort_menus = true : >qty , identified , curse , art , ego , basename , qualname, equipped, >qty ##################### ### Ability slots ### ##################### ability_slot += Fly|flight:lF ability_slot += Stop Flying:L ability_slot += Breathe:t ability_slot += Invisibility:iv # Abilities prone to miskeys. ability_slot += Blink:IB ability_slot += Berserk:k ability_slot += Corrupt:C ability_slot += Enter the Abyss:E ################### ### Spell slots ### ################### # Use letters in a word of the spell name at # (1) beginning, (2) end, of words in the spell, # (3) or anywhere from the spell name # Some overrides may exist or order may change by preference # See this dynamic web app for oganizing spell slots in real-time # https://codesandbox.io/p/sandbox/dcss-spell-slots-6yxgmc spell_slot += Agony:aAyYgGoOnN spell_slot += Airstrike:aAeEiIrRsStTkK spell_slot += Alistair's Intoxication:aiAIsnSNlLtToOxXcCrR spell_slot += Alistair's Walking Alembic:aswASWrgcRGClitknembLITKNEMB spell_slot += Anguish:aAhHnNgGuUiIsS spell_slot += Animate Armour:aAerERnNimIMoOuUtT spell_slot += Animate Dead:adADeEnNiImMtT spell_slot += Animate Skeleton:asASenENkKiImlMLtToO spell_slot += Apportation:aAnNpPoOrRtTiI spell_slot += Arcjolt:aAtTrRcCjJoOlL spell_slot += Awaken Armour:aAnrNRwkemouWKEMOU spell_slot += Beastly Appendage:baBAyeYEpPsStnTNldLDgG spell_slot += Blade Hands:bhBHesESlaLAnNdD spell_slot += Blink:bBkKlLiInN spell_slot += Bolt of Magma:bmBMtaTAoOlgLG spell_slot += Bombard:bBdDomarOMAR spell_slot += Borgnjor's Revivification:brBRsnSNoeOEvVgiGIjJfFcCaAtT spell_slot += Borgnjor's Vile Clutch:bvcBVCsehSEHoilOILruRUgtGTnNjJ spell_slot += Brom's Barrelling Boulder:bsBSmgrMGRoaelinudOAELINUD spell_slot += Call Canine Familiar:cfCFlerLERaAnmNMiI spell_slot += Call Imp:ciCIlpLPamAM spell_slot += Cause Fear:cfCFerERaAuUsS spell_slot += Chain Lightning:clCLngNGhiHIaAtT spell_slot += Cigotuvi's Dreadful Rot:cdrCDRsltSLTioIOgeGEaAufUFvV spell_slot += Cigotuvi's Putrefaction:cspCSPinINgotuvrefaGOTUVREFA spell_slot += Confusing Touch:ctCTghGHoOnuNUfFsSiI spell_slot += Conjure Ball Lightning:cblCBLegEGoaiOAInNjhJHutUTrR spell_slot += Conjure Flame:cfCFeEolOLnaNAjmJMuUrR spell_slot += Construct Spike Launcher:cslCSLterTERonupikahONUPIKAH spell_slot += Corona:cCaAoOrRnN spell_slot += Corpse Rot:crCRetEToOpPsS spell_slot += Curse of Agony:coaCOAefyEFYursgnURSGN spell_slot += Dazzling Flash:dfDFghGHalALzZsSiInN spell_slot += Death Channel:dcDChlHLeEaAtnTN spell_slot += Death's Door:dDsrSReoEOaAtThH spell_slot += Detonation Catalyst:dcDCntNTeoailysEOAILYS spell_slot += Diamond Sawblades:dsDSiamonwbleIAMONWBLE spell_slot += Dimensional Bullseye:dbDBleLEimnsoauyIMNSOAUY spell_slot += Discord:dDiIsScCoOrR spell_slot += Disjunction:JdDnNiIsSjJuUcCtToO spell_slot += Dispel Undead:duDUlLinINsSpePEaA spell_slot += Dispersal:dDlLiIsSpPeErRaA spell_slot += Dragon Form:dfDFnmNMroROaAgG spell_slot += Dragon's Call:dcDCslSLraRAgGoOnN spell_slot += Enfeeble:eEnNfFbBlL spell_slot += Ensorcelled Hibernation:ehEHdnDNiIsbSBoOrRcCaAltLT spell_slot += Eringya's Noxious Bog:enbENBsgSGroROixIXyuYUaA spell_slot += Eringya's Surprising Crocodile:escESCagAGrinyupodlRINYUPODL spell_slot += Excruciating Wounds:ewEWgsGSxoXOcuCUrnRNdDiIaAtT spell_slot += Fire Storm:fsFSemEMitITroRO spell_slot += Fireball:fFlLiIrReEbBaA spell_slot += Flame Wave:fwFWeElaLAvVmM spell_slot += Forge Blazeheart Golem:fbgFBGetmETMorlazhORLAZH spell_slot += Forge Lightning Spire:flsFLSegEGorihtnpORIHTNP spell_slot += Forge Monarch Bomb:fmbFMBehEHorgnacORGNAC spell_slot += Forge Phalanx Beetle:fpbFPBexEXorghalntORGHALNT spell_slot += Fortress Blast:fbFBstSTorelaORELA spell_slot += Foxfire:fFeEoOxXiIrR spell_slot += Freeze:fFeErRzZ spell_slot += Freezing Cloud:fcFCgdGDrlRLeoEOuUzZiInN spell_slot += Frozen Ramparts:frFRnsNSaAomOMzpZPeEtT spell_slot += Fugue of the Fallen:fotFOTenENughalUGHAL spell_slot += Fulminant Prism:fpFPtmTMurURliLIsSnNaA spell_slot += Fulsome Fusillade:fFeEulsomiadULSOMIAD spell_slot += Gell's Gavotte:gsGSleLEavotAVOT spell_slot += Gell's Gravitas:gGsSerERlaLAvViItT spell_slot += Gloom:gGmMloLO spell_slot += Grave Claw:gcGCewEWravlRAVL spell_slot += Hailstorm:hHmMaAiIlLsStToOrR spell_slot += Haunt:hHtTaAuUnN spell_slot += Hellfire Mortar:hmHMerERlfiotaLFIOTA spell_slot += Hoarfrost Cannonade:hcHCteTEoarfsndOARFSND spell_slot += Ice Form:ifIFemEMcoCOrR spell_slot += Ignite Poison:ipIPenENgoGOsStT spell_slot += Ignition:iInNgGtToO spell_slot += Infestation:iInNfFeEsStTaAoO spell_slot += Inner Flame:ifIFreREnlNLaAmM spell_slot += Invisibility:iIyYnNvVsSbBlLtT spell_slot += Iron Shot:isISntNTrhRHoO spell_slot += Irradiate:iIeErRaAdDtT spell_slot += Iskenderun's Battlesphere:ibIBseSEaAktKTnlNLdDrpRPuhUH spell_slot += Iskenderun's Mystic Blast:imbIMBsctSCTylYLkaKAeEnNdDrRuU spell_slot += Jinxbite:jJeEinxbtINXBT spell_slot += Kinetic Grapnel:kgKGclCLinetrapINETRAP spell_slot += Kiss of Death:kdKDshSHieIEaAtT spell_slot += Launch Clockwork Bee:lcbLCBhkeHKEaunowrAUNOWR spell_slot += Leda's Liquefaction:lLsnSNeiEIdqDQauAUfFcCtToO spell_slot += Lee's Rapid Deconstruction:lrdLRDsnSNeaEApcPCioIOtTuU spell_slot += Lehudib's Crystal Spear:lcsLCSrRepEPhyHYuaUAdtDTiIbB spell_slot += Lesser Beckoning:lbLBrgRGeEscSCkKoOnNiI spell_slot += Lightning Bolt:lbLBgtGTioIOhHnN spell_slot += Magic Dart:mdMDctCTaAgrGRiI spell_slot += Magnavolt:mMtTagnvolAGNVOL spell_slot += Malign Gateway:mgMGnyNYaAltLTieIEwW spell_slot += Manifold Assault:maMAdtDTsSnNiIfuFUolOL spell_slot += Martyr's Knell:mskMSKrlRLatyneATYNE spell_slot += Maxwell's Capacitive Coupling:mcMCsegSEGaoAOxpuXPUwWlLiItnTNvV spell_slot += Maxwell's Portable Piledriver:mspMSPlerLERaxwotbidvAXWOTBIDV spell_slot += Mephitic Cloud:mcMCdDelELpoPOhuHUiItT spell_slot += Mercury Arrow:maMAywYWercuoERCUO spell_slot += Mercury Vapours:mvMVysYSercuapoERCUAPO spell_slot += Metabolic Englaciation:meMEcnCNtgTGalALbBoOiI spell_slot += Momentum Strike:msMSeEotOTrRiInkNKuU spell_slot += Monstrous Menagerie:mMseSEoOnNaAtgTGrRuiUI spell_slot += Nazja's Percussive Tempering:nsptNSPTaegAEGzjrcuivmZJRCUIVM spell_slot += Necromutation:nNeEcCrRoOmMuUtTaAiI spell_slot += Necrotise:nNeEcCrRoOtTiIsS spell_slot += Olgreb's Toxic Radiance:otrOTRsceSCElaLAgxdGXDiIbnBN spell_slot += Orb of Destruction:odODbnBNreREsStTuUcCiI spell_slot += Ozocubu's Armour:oaOAsrSRzZmMcCuUbB spell_slot += Ozocubu's Refrigeration:orORsnSNzeZEfFcCuiUIbgBGaAtT spell_slot += Pain:pPnNaAiI spell_slot += Passage of Golubria:pgPGeaEAoOslSLuUbBrRiI spell_slot += Passwall:pPlLaAsSwW spell_slot += Permafrost Eruption:pePEtnTNrmafosuiRMAFOSUI spell_slot += Petrify:pPyYeEtTrRiIfF spell_slot += Plasma Beam:pbPBamAMleLEsS spell_slot += Platinum Paragon:pPmnMNlatiurgoLATIURGO spell_slot += Poisonous Vapours:pvPVsSoaOAiIuUnrNR spell_slot += Polar Vortex:pvPVrxRXoOlLatATeE spell_slot += Portal Projectile:pPleLEorORtjTJaAcCiI spell_slot += Rending Blade:rbRBgeGEndilaNDILA spell_slot += Rimeblight:rRtTimeblghIMEBLGH spell_slot += Sandblast:sStTaAnNdDbBlL spell_slot += Scorch:sShHcCoOrR spell_slot += Sculpt Simulacrum:sStmTMculpiarCULPIAR spell_slot += Searing Ray:srSRgyGYeaEAiInN spell_slot += Shadow Creatures:scSCwWhrHRaeAEdDotOTuU spell_slot += Shatter:sSrRhHaAtTeE spell_slot += Shock:sSkKhHoOcC spell_slot += Sigil of Binding:sobSOBlfgLFGindIND spell_slot += Silence:sSeEiIlLnNcC spell_slot += Simulacrum:sSmMiIuUlLaAcCrR spell_slot += Slow:sSwWlLoO spell_slot += Soul Splinter:sSlrLRoupinteOUPINTE spell_slot += Spellforged Servitor:sSdrDRpePElvLViIftFToOgG spell_slot += Spellspark Servitor:sSkrKRpelavitoPELAVITO spell_slot += Sphinx Sisters:sSxXphinterPHINTER spell_slot += Spider Form:sfSFrmRMpoPOiIdDeE spell_slot += Splinterfrost Shell:sStlTLpinerfohPINERFOH spell_slot += Starburst:sStTaArRbBuU spell_slot += Static Discharge:sdSDceCEtiTIaAhHrRgG spell_slot += Statue Form:sfSFemEMtoTOarARuU spell_slot += Sticky Flame:sfSFyeYEtlTLiaIAcmCMkK spell_slot += Sting:sSgGtTiInN spell_slot += Stone Arrow:saSAewEWtrTRoOnN spell_slot += Storm Form:sfSFmMtoTOrR spell_slot += Sublimation of Blood:sbSBndNDulULoOiImMaAtT spell_slot += Summon Blazeheart Golem:sbgSBGntmNTMuolazehrUOLAZEHR spell_slot += Summon Cactus Giant:scgSCGntNTuaiUAImMoO spell_slot += Summon Forest:sfSFntNTuoUOmrMReE spell_slot += Summon Guardian Golem:sgSGnmNMuoUOalALreREdDiI spell_slot += Summon Horrible Things:shtSHTneNEuoUOmriMRIgGbBlL spell_slot += Summon Hydra:shSHnaNAuyUYmdMDrRoO spell_slot += Summon Ice Beast:sibSIBnetNETucUCmaMAoO spell_slot += Summon Lightning Spire:slSLngeNGEuipUIPmMhrHRotOT spell_slot += Summon Mana Viper:smvSMVnarNARuiUIpPeEoO spell_slot += Summon Seismosaurus Egg:seSEngNGumoiarUMOIAR spell_slot += Summon Small Mammal:smSMnlNLuaUAoO spell_slot += Swiftness:sSwWiIfFtTnNeE spell_slot += Teleport Other:toTOrReElhLHpP spell_slot += Tukima's Dance:tdTDseSEuaUAknKNicICmM spell_slot += Vampiric Draining:vdVDcgCGarARmMpiPInN spell_slot += Vhi's Electric Charge:vecVECsShlHLiaIArRtgTG spell_slot += Volatile Blastmotes:vbVBesESolOLaAtTimIM spell_slot += Wereblood:wWdDeErRbBlLoO spell_slot += Yara's Violent Unravelling:yvuYVUstgSTGainAINroROlLeE # Default letters spell_slot += .*:XYZ ################## ### Item slots ### ################## # 0.34 jewellery names: # https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/item-name.cc # https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/dat/descript/items.txt # Use letters in the jewellery property name first: # (1) beginning, (2) end, (3) anywhere. # Keep old names in regexes where they are useful for older games. item_slot += amulet of the acrobat : acACroRObBtT gear_slot += amulet of the acrobat : acACroRObBtT item_slot += amulet of chemistry : chCHemEMisIStryTRY gear_slot += amulet of chemistry : chCHemEMisIStryTRY item_slot += amulet of dissipation : dsDSipIPatATonON gear_slot += amulet of dissipation : dsDSipIPatATonON item_slot += amulet of faith : faFAitIThH gear_slot += amulet of faith : faFAitIThH item_slot += amulet of guardian spirit : gsGSuaUAriRIptPT gear_slot += amulet of guardian spirit : gsGSuaUAriRIptPT item_slot += amulet of (mana|magic) regeneration : mrMRagAGenEN gear_slot += amulet of (mana|magic) regeneration : mrMRagAGenEN item_slot += amulet of reflection : rfRFleLEctCT gear_slot += amulet of reflection : rfRFleLEctCT item_slot += amulet of regeneration : rgRGenENhH gear_slot += amulet of regeneration : rgRGenENhH item_slot += amulet of wildshape : wsWSildILDhapeHAPE gear_slot += amulet of wildshape : wsWSildILDhapeHAPE item_slot += ring of (ice|protection from cold) : ciCIoldOLDfrFR gear_slot += ring of (ice|protection from cold) : ciCIoldOLDfrFR item_slot += \+[0-9]+ ring of dexterity : dxDXetETriRI gear_slot += \+[0-9]+ ring of dexterity : dxDXetETriRI item_slot += \+[0-9]+ ring of evasion : evEVasASioIOnN gear_slot += \+[0-9]+ ring of evasion : evEVasASioIOnN item_slot += ring of (fire|protection from fire) : fiFIreRE gear_slot += ring of (fire|protection from fire) : fiFIreRE item_slot += ring of flight : flFLigIGhtHT gear_slot += ring of flight : flFLigIGhtHT item_slot += \+[0-9]+ ring of intelligence : inINteTEllLLgG gear_slot += \+[0-9]+ ring of intelligence : inINteTEllLLgG item_slot += ring of magical power : mpMPagAGowOW gear_slot += ring of magical power : mpMPagAGowOW item_slot += ring of poison resistance : prPRoiOIsnSN gear_slot += ring of poison resistance : prPRoiOIsnSN item_slot += ring of positive energy : neNEpoPOsiSI gear_slot += ring of positive energy : neNEpoPOsiSI item_slot += \+[0-9]+ ring of protection : prPRotOTecEC gear_slot += \+[0-9]+ ring of protection : prPRotOTecEC item_slot += ring of resist corrosion : rcRCcoCOrsRS gear_slot += ring of resist corrosion : rcRCcoCOrsRS item_slot += ring of see invisible : siSIevEVnN gear_slot += ring of see invisible : siSIevEVnN item_slot += \+[0-9]+ ring of slaying : slSLayAY gear_slot += \+[0-9]+ ring of slaying : slSLayAY item_slot += \+[0-9]+ ring of strength : stSTreREngNG gear_slot += \+[0-9]+ ring of strength : stSTreREngNG item_slot += ring of (protection from magic|willpower) : wiWIllLLmrMR gear_slot += ring of (protection from magic|willpower) : wiWIllLLmrMR item_slot += ring of wizardry : wzWZizIZarAR gear_slot += ring of wizardry : wzWZizIZarAR # older-version holdbacks item_slot += amulet of rage : arARbgBGeE gear_slot += amulet of rage : arARbgBGeE item_slot += ring of stealth : stSTeaEAlhLH gear_slot += ring of stealth : stSTeaEAlhLH item_slot += ring of teleportation : teTEleLEpoPO gear_slot += ring of teleportation : teTEleLEpoPO # Talismans # Use letters in the form name first: (1) beginning, (2) end, (3) anywhere. # Shared letters from "talisman" come later as fallbacks. item_slot += inkwell talisman : itITlnLNkwelKWELasmASM gear_slot += inkwell talisman : itITlnLNkwelKWELasmASM item_slot += quill talisman : qtQTlnLNuiUIasmASM gear_slot += quill talisman : qtQTlnLNuiUIasmASM item_slot += scarab talisman : stSTbmBCarcARCliLI gear_slot += scarab talisman : stSTbmBCarcARCliLI item_slot += medusa talisman : mtMTanANedsuEDSUliLI gear_slot += medusa talisman : mtMTanANedsuEDSUliLI item_slot += rimehorn talisman : rtRTnnNNimehoIMEHOlasLAS gear_slot += rimehorn talisman : rtRTnnNNimehoIMEHOlasLAS item_slot += spore talisman : stSTeeEEporPORlimLIM gear_slot += spore talisman : stSTeeEEporPORlimLIM item_slot += maw talisman : mtMTwwWWalALisISnN gear_slot += maw talisman : mtMTwwWWalALisISnN item_slot += eel talisman : etETllLLeanEANismISM gear_slot += eel talisman : etETllLLeanEANismISM item_slot += fortress talisman : ftFTssSSoreOREliLIM gear_slot += fortress talisman : ftFTssSSoreOREliLIM item_slot += lupine talisman : ltLTenENupiUPIasmASM gear_slot += lupine talisman : ltLTenENupiUPIasmASM item_slot += serpent talisman : stSTntNTerpeERPEaliALI gear_slot += serpent talisman : stSTntNTerpeERPEaliALI item_slot += spider talisman : stSTrrRRpidePIDEalmALM gear_slot += spider talisman : stSTrrRRpidePIDEalmALM item_slot += wellspring talisman : wtWTgnGNelspriELSPRIamAM gear_slot += wellspring talisman : wtWTgnGNelspriELSPRIamAM item_slot += blade talisman : btBTeeEEladLADismISM gear_slot += blade talisman : btBTeeEEladLADismISM item_slot += dragon-coil talisman : dctDCTnlnNLNragoiRAGOIasmASM gear_slot += dragon-coil talisman : dctDCTnlnNLNragoiRAGOIasmASM item_slot += granite talisman : gtGTenENraniRANIlsmLSM gear_slot += granite talisman : gtGTenENraniRANIlsmLSM item_slot += hive talisman : htHTeeEEivIValsALS gear_slot += hive talisman : htHTeeEEivIValsALS item_slot += riddle talisman : rtRTeeEEdidlDIDLasmASM gear_slot += riddle talisman : rtRTeeEEdidlDIDLasmASM item_slot += sanguine talisman : stSTenENaguiAGUIlmLM gear_slot += sanguine talisman : stSTenENaguiAGUIlmLM item_slot += storm talisman : stSTmmMMtorTORaliALI gear_slot += storm talisman : stSTmmMMtorTORaliALI item_slot += talisman of death : todTODnfhNFHeaEAlismLISM gear_slot += talisman of death : todTODnfhNFHeaEAlismLISM ############################ ### Consumable shortcuts ### ############################ # 0.34 already defines consumable shortcut defaults # https://github.com/crawl/crawl/blob/0.34.0/crawl-ref/source/dat/defaults/consumable_shortcuts.txt # leave these commented so the rc uses game defaults unless we intentionally override one # # consumable_shortcut ^= scroll of identify:i # consumable_shortcut ^= scroll of teleportation:t # consumable_shortcut ^= scroll of fear:f # consumable_shortcut ^= scroll of noise:N # consumable_shortcut ^= scroll of summoning:s # consumable_shortcut ^= scroll of enchant weapon:w # consumable_shortcut ^= scroll of enchant armour:a # consumable_shortcut ^= scroll of torment:T # consumable_shortcut ^= scroll of immolation:I # consumable_shortcut ^= scroll of blinking:b # consumable_shortcut ^= scroll of revelation:r # consumable_shortcut ^= scroll of fog:g # consumable_shortcut ^= scroll of acquirement:A # consumable_shortcut ^= scroll of brand weapon:W # consumable_shortcut ^= scroll of vulnerability:V # consumable_shortcut ^= scroll of silence:S # consumable_shortcut ^= scroll of amnesia:x # consumable_shortcut ^= scroll of poison:p # consumable_shortcut ^= scroll of butterflies:s # # consumable_shortcut ^= potion of curing:c # consumable_shortcut ^= potion of heal wounds:w # consumable_shortcut ^= potion of haste:h # consumable_shortcut ^= potion of might:m # consumable_shortcut ^= potion of brilliance:b # consumable_shortcut ^= potion of attraction:A # consumable_shortcut ^= potion of enlightenment:e # consumable_shortcut ^= potion of cancellation:C # consumable_shortcut ^= potion of ambrosia:a # consumable_shortcut ^= potion of invisibility:i # consumable_shortcut ^= potion of experience:E # consumable_shortcut ^= potion of magic:g # consumable_shortcut ^= potion of berserk rage:B # consumable_shortcut ^= potion of mutation:M # consumable_shortcut ^= potion of resistance:r # consumable_shortcut ^= potion of lignification:L # # consumable_shortcut ^= wand of flame:a # consumable_shortcut ^= wand of acid:b # consumable_shortcut ^= wand of quicksilver:b # consumable_shortcut ^= wand of light:b # consumable_shortcut ^= wand of roots:c # consumable_shortcut ^= wand of warping:c # consumable_shortcut ^= wand of iceblast:c # consumable_shortcut ^= wand of mindburst:f # consumable_shortcut ^= wand of digging:d # consumable_shortcut ^= wand of charming:e # consumable_shortcut ^= wand of paralysis:e # consumable_shortcut ^= wand of polymorph:p ## ## 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 ## ## 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 # % Talismans # ? Scrolls # " or = Jewellery # ! Potions # + or : Books # | Staves # 0 Orbs # } Miscellaneous # G or ♦ Gems # $ 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 : if table_has({"Djinni"}, you.race()) then ae += >amulets? of ((magic|mana) 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|moonshine) # Tengu do not need flying : if table_has({"Tengu"}, you.race()) then ae += >potions? of (flight) : end # Miscellaneous ae += <(tins of tremorstones) # Talismans : if you.skill("Shapeshifting") > 0 then ae += talisman : end # 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) ## ## ItemColors.rc ################################################################################################ ## Menu & Item colors should match exactly when possible. ## For menu_colour, the first match ignores subsequent matches. ## For item_glyph, subsequent matches override previous ones. ## Many of the entries below come from dat/defaults/menu_colours.txt, ## which we have to duplicate here since we want only some of the ## entries from that file. # Enable use of darkgrey bold_brightens_foreground=true # Set alias item := item_glyph menu := menu_colour # Clear default menu = menu += notes:white:Reached XP level ### General Inventory ### ## Reasonable defaults item += potion:lightgrey item += scroll:lightgrey item += wand:lightgrey item += dangerous_item:blue item += useless_item:darkgrey # Items currently not affecting you. menu += darkgrey:(melded) # Items disliked by your god. menu += red:forbidden # Useless items, comes here to override artefacts etc. menu += darkgrey:.*useless.* # Handle cursed and equipped items early to override other colour settings. menu += lightred:.*equipped.* cursed menu += red: (a|the) cursed menu += inventory:lightgreen:.*equipped.* # Colouring of autoinscribed god gifts menu += pickup:cyan:god gift # Highlight (partly) selected items menu += inventory:white:\w \+\s menu += inventory:white:\w \#\s ### Food ### ## Color chunks, put ordinary ones on lightgrey. menu += red:evil_eating.*chunk item += evil_eating.*chunk:red menu += blue:mutagenic.*chunk item += mutagenic.*chunk:blue menu += lightgrey:chunks?.*flesh item += chunks?.*flesh:lightgrey menu += green:( ration) item += ( ration):green ### Potions ### menu += lightgrey:potions? of.*(flight|stabbing) item += potions? of.*(flight|stabbing):lightgrey menu += brown:potions? of.*berserk item += potions? of.*berserk:brown menu += yellow:potions? of.*might item += potions? of.*might:yellow menu += cyan:potions? of.*cancellation item += potions? of.*cancellation:cyan menu += blue:potions? of.*(lignification|ambrosia) item += potions? of.*(lignification|ambrosia):blue menu += lightred:potions? of.*experience item += potions? of.*experience:lightred menu += white:potions? of.*(heal wounds|curing) item += potions? of.*(heal wounds|curing):white menu += green:potions? of.*resistance item += potions? of.*resistance:green menu += lightgreen:potions? of.*(haste|invisibility) item += potions? of.*(haste|invisibility):lightgreen menu += lightcyan:potions? of.*mutation item += potions? of.*mutation:lightcyan menu += magenta:potions? of.*brilliance item += potions? of.*brilliance:magenta menu += lightmagenta:potions? of.*magic item += potions? of.*magic:lightmagenta ### Scrolls ### : if table_has({"Vampire", "Mummy", "Ghoul"}, you.race()) then menu += darkgrey:scroll.*holy word item += scroll.*holy word:darkgrey menu += brown:scroll.*torment item += scroll.*torment:brown : else menu += brown:scroll.*holy word item += scroll.*holy word:brown menu += darkgrey:scroll.*torment item += scroll.*torment:darkgrey : end menu += white:scroll.*acquirement item += scroll.*acquirement:white menu += yellow:scroll.*(summoning) item += scroll.*(summoning):yellow menu += cyan:scroll.*identify item += scroll.*identify:cyan menu += lightcyan:scroll.*magic mapping item += scroll.*magic mapping:lightcyan menu += blue:scroll.*(noise|silence|vulnerability|immolation) item += scroll.*(noise|silence|vulnerability|immolation):blue menu += green:scroll.*(fog|teleport) item += scroll.*(fog|teleport):green menu += lightgreen:scroll.*(fear|blink) item += scroll.*(fear|blink):lightgreen menu += lightmagenta:scroll.*(enchant|brand weapon) item += scroll.*(enchant|brand weapon):lightmagenta ### Wands ### # Sometimes can be dangerous or harmful menu += blue:pieces from Xom's chessboard item += pieces from Xom's chessboard:blue # Single target piercing menu += brown:wand of.*lightning item += wand of.*lightning:brown menu += yellow:wand of.*acid item += wand of.*acid:yellow menu += lightgrey:wand of.*flame item += wand of.*flame:lightgrey menu += white:wand of.*clouds item += wand of.*clouds:white menu += green:wand of.*digging item += wand of.*digging:green # Single-turn AOE menu += cyan:wand of.*iceblast item += wand of.*iceblast:cyan menu += lightcyan:wand of.*scattershot item += wand of.*scattershot:lightcyan # MR-checking menu += magenta:wand of.*(disintegration|confusion|polymorph) item += wand of.*(disintegration|confusion|polymorph):magenta menu += lightmagenta:wand of.*(paralysis|charming) item += wand of.*(paralysis|charming):lightmagenta ### General identification ### menu += cyan:manual of item += manual of:cyan menu += lightcyan:manual item += manual:lightcyan menu += lightblue:unidentified .*(potion|scroll|wand|jewellery|book|rod|magical staff) item += unidentified.*(potion|scroll|wand|jewellery|book|rod|magical staff).*:lightblue ### Gear ### menu += magenta:.*known .*(ring of (dexterity|strength|intelligence|slaying|evasion|protection(?! from))|amulet of reflection) item += known.*(ring of (dexterity|strength|intelligence|slaying|evasion|protection(?! from))|amulet of reflection):magenta menu += inventory:lightgray:.*(book|jewellery|magical staff) item += (identified|known).*(book|jewellery|magical staff):lightgray menu += lightmagenta:unidentified.*artefact.* item += unidentified.*artefact.*(jewellery).*:lightmagenta menu += white:.*artefact.* item += identified.*artefact.*(jewellery):white # Ego items menu += lightblue:unidentified.*weapon.*(runed|glowing|enchanted) menu += lightblue:unidentified.*armour.*(runed|glowing|embroidered|shiny|dyed) # Want this to override anything above item += (a )?stones?$:lightgray item += useless:darkgrey # Only mark these types when forbidden; for other types it looks odd. item += forbidden.*(potion|scroll|food):red # 0.26 holdback menu += lightgrey:scroll.*remove curse item += scroll.*remove curse:lightgrey menu += blue:wand of.*random effects item += wand of.*random effects:blue menu += lightmagenta:wand of.*(enslavement) item += wand of.*(enslavement):lightmagenta ## ## 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 # #################### # 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|(?> note_items += artefact note_items += experience,of Zot,acquirement,Archmagi note_items += crystal plate,pearl dragon scales,gold dragon scales # note some auto inscribes # do not match curare note_messages += (?> 🤖 colortest <%s>%s", color, color, color)) -- end -- end -- colortest() -- rc_out("COLORS", COLORS.brown, COLORS.brown, "plain") } ## ## END ################################################################################################ : rc_scs("Successfully initialized magus.rc [v1.12.1]") : crawl.enable_more(true)