# TEAMCAPTAIN mrdesaussure
default_manual_training = true
explore_stop += greedy_pickup,stairs,shops,altars,portals,branches,runed_doors
macros += M \{-1000} o
macros += M \{-1018} <
macros += M \{-1016} >
# macros += M \{9} \{-1005}<<>>o
macros += M ` \{-1005}
macros += M ~ \{6}.\{13}
macros += M < ===safe_upstairs
macros += M R r
macros += M r o
macros += M 1 zaf
macros += M 2 zb
macros += M 3 aaf
macros += M 4 ab
show_more = false
tile_show_threat_levels = tough,nasty,unusual
##
## magus.rc
################################################################################################
##
## CONFIG.lua
################################################################################################
{
-- Global CONFIG for customizing RC behaviors
CONFIG = { }
CONFIG.emojis = true
}
##
## BEGIN
################################################################################################
: rc_msg("Initializing magus.rc ...")
: crawl.enable_more(false)
{
local last_turn_milestone = nil
function turn_milestone_check()
local current_turn = you.turns()
local milestone = math.floor(current_turn / 1000) * 1000
-- Initialize on first run to current milestone (so we don't immediately trigger)
if last_turn_milestone == nil then
last_turn_milestone = milestone
end
if milestone > 0 and milestone > last_turn_milestone then
last_turn_milestone = milestone
crawl.mpr("*** " .. milestone .. " turns have elapsed! ***")
crawl.more()
end
end
ready_functions = ready_functions or {}
table.insert(ready_functions, turn_milestone_check)
}
{
function ready()
if ready_functions then
for _, fn in ipairs(ready_functions) do
fn()
end
end
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
##
## 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%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
################################################################################################
{
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 ()
crawl.mpr(
withColor(COLORS.lightred,
string.format("MASSIVE DAMAGE!! (%s)", PAUSE_MORE)
)
)
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%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 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.8]"
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 += Absolute Zero:azAZeoEObBsrSRlLuUtT
spell_slot += Agony:aAyYgGoOnN
spell_slot += Airstrike:aAeEiIrRsStTkK
spell_slot += Alistair's Intoxication:aiAIsnSNlLtToOxXcCrR
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 += Beastly Appendage:baBAyeYEpPsStnTNldLDgG
spell_slot += Blade Hands:bhBHesESlaLAnNdD
spell_slot += Blink:bBkKlLiInN
spell_slot += Bolt of Magma:bmBMtaTAoOlgLG
spell_slot += Borgnjor's Revivification:brBRsnSNoeOEvVgiGIjJfFcCaAtT
spell_slot += Borgnjor's Vile Clutch:bvcBVCsehSEHoilOILruRUgtGTnNjJ
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 += Confusing Touch:ctCTghGHoOnuNUfFsSiI
spell_slot += Conjure Ball Lightning:cblCBLegEGoaiOAInNjhJHutUTrR
spell_slot += Conjure Flame:cfCFeEolOLnaNAjmJMuUrR
spell_slot += Corona:cCaAoOrRnN
spell_slot += Corpse Rot:crCRetEToOpPsS
spell_slot += Dazzling Flash:dfDFghGHalALzZsSiInN
spell_slot += Death Channel:dcDChlHLeEaAtnTN
spell_slot += Death's Door:dDsrSReoEOaAtThH
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 += Excruciating Wounds:ewEWgsGSxoXOcuCUrnRNdDiIaAtT
spell_slot += Fire Storm:fsFSemEMitITroRO
spell_slot += Fireball:fFlLiIrReEbBaA
spell_slot += Flame Wave:fwFWeElaLAvVmM
spell_slot += Foxfire:fFeEoOxXiIrR
spell_slot += Freeze:fFeErRzZ
spell_slot += Freezing Cloud:fcFCgdGDrlRLeoEOuUzZiInN
spell_slot += Frozen Ramparts:frFRnsNSaAomOMzpZPeEtT
spell_slot += Fulminant Prism:fpFPtmTMurURliLIsSnNaA
spell_slot += Gell's Gravitas:gGsSerERlaLAvViItT
spell_slot += Hailstorm:hHmMaAiIlLsStToOrR
spell_slot += Haunt:hHtTaAuUnN
spell_slot += Hydra Form:hfHFamAMyoYOdrDR
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 += Kiss of Death:kdKDshSHieIEaAtT
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 += Malign Gateway:mgMGnyNYaAltLTieIEwW
spell_slot += Manifold Assault:maMAdtDTsSnNiIfuFUolOL
spell_slot += Maxwell's Capacitive Coupling:mcMCsegSEGaoAOxpuXPUwWlLiItnTNvV
spell_slot += Mephitic Cloud:mcMCdDelELpoPOhuHUiItT
spell_slot += Metabolic Englaciation:meMEcnCNtgTGalALbBoOiI
spell_slot += Momentum Strike:msMSeEotOTrRiInkNKuU
spell_slot += Monstrous Menagerie:mMseSEoOnNaAtgTGrRuiUI
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 += Petrify:pPyYeEtTrRiIfF
spell_slot += Plasma Beam:pbPBamAMleLEsS
spell_slot += Poisonous Vapours:pvPVsSoaOAiIuUnrNR
spell_slot += Polar Vortex:pvPVrxRXoOlLatATeE
spell_slot += Portal Projectile:pPleLEorORtjTJaAcCiI
spell_slot += Sandblast:sStTaAnNdDbBlL
spell_slot += Scorch:sShHcCoOrR
spell_slot += Searing Ray:srSRgyGYeaEAiInN
spell_slot += Shadow Creatures:scSCwWhrHRaeAEdDotOTuU
spell_slot += Shatter:sSrRhHaAtTeE
spell_slot += Shock:sSkKhHoOcC
spell_slot += Silence:sSeEiIlLnNcC
spell_slot += Simulacrum:sSmMiIuUlLaAcCrR
spell_slot += Slow:sSwWlLoO
spell_slot += Spellforged Servitor:sSdrDRpePElvLViIftFToOgG
spell_slot += Spider Form:sfSFrmRMpoPOiIdDeE
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 Cactus Giant:scgSCGntNTuaiUAImMoO
spell_slot += Summon Demon:sdSDnNueUEmMoO
spell_slot += Summon Forest:sfSFntNTuoUOmrMReE
spell_slot += Summon Greater Demon:sgdSGDnrNRueUEmMaoAOtT
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 Small Mammal:smSMnlNLuaUAoO
spell_slot += Swiftness:sSwWiIfFtTnNeE
spell_slot += Teleport Other:toTOrReElhLHpP
spell_slot += Tornado:tToOrRnNaAdD
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 ###
##################
## In order of letter used.
item_slot += amulet of rage : B
item_slot += ring of (ice|protection from cold) : Cc
item_slot += amulet of the acrobat : A
item_slot += \+[0-9]+ ring of evasion : Ee
item_slot += ring of .*fire : Ff
item_slot += amulet of regeneration : g
item_slot += amulet of guardian spirit : G
item_slot += amulet of faith : T
item_slot += \+[0-9]+ ring of intelligence : Ii
item_slot += ring of flight : L
item_slot += ring of protection from magic : Mm
item_slot += ring of positive energy : Nn
item_slot += \+[0-9]+ ring of protection : Oo
item_slot += ring of poison resistance : P
item_slot += ring of resist corrosion : R
item_slot += amulet of mana regeneration : r
item_slot += \+[0-9]+ ring of strength : Ss
item_slot += ring of see invisible : v
item_slot += ring of magical power : Ww
item_slot += \+[0-9]+ ring of dexterity : Dd
item_slot += \+[0-9]+ ring of slaying : Yy
item_slot += ring of wizardry : Zz
# 0.26 holdback
item_slot += ring of stealth : Qq
item_slot += ring of teleportation : t
##
## 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
# % 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)
##
## 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%s>", color, color, color))
-- end
-- end
-- colortest()
-- rc_out("COLORS", COLORS.brown, COLORS.brown, "plain")
}
##
## END
################################################################################################
: rc_scs("Successfully initialized magus.rc [v1.11.8]")
: crawl.enable_more(true)