#################################### Begin lua/core/_header.lua ################################### ############## https://github.com/brianfaires/crawl-rc/blob/main/lua/core/_header.lua ############# { BRC = {} BRC.Config = {} -- Specify a config by name, or "ask" to prompt at start of each new game BRC.Config.to_use = "glumm" } ##################################### End lua/core/_header.lua #################################### ################################################################################################### ################################### Begin lua/config/custom.lua ################################### ############# https://github.com/brianfaires/crawl-rc/blob/main/lua/config/custom.lua ############# { --- Custom Main Config: Personalized settings -- Aims to list the most commonly adjusted config settings. -- See feature config sections, or config/explicit.lua for more settings. brc_config_custom = { BRC_CONFIG_NAME = "Custom", emojis = true, ["misc-alerts"] = { alert_low_hp_threshold = 35, -- % max HP to alert; 0 to disable preferred_god = nil, -- Stop on first altar with this text (Ex. "Wu Jian", "Ash"); nil disables }, ["announce-hp-mp"] = { dmg_flash_threshold = 0.20, -- Flash screen when losing this % of max HP dmg_fm_threshold = 0.30, -- Force more for losing this % of max HP always_on_bottom = false, -- Rewrite HP/MP meters after each turn with messages }, ["color-inscribe"] = { disabled = true, -- Worth trying this out, but inconsistently supported on webtiles (CAO) }, ["fm-messages"] = { force_more_threshold = 6, -- How many force_more_messages; 1=many; 10=none }, ["inscribe-stats"] = { inscribe_weapons = true, -- Inscribe weapon stats on pickup and keep updated inscribe_armour = true, -- Inscribe armour stats on pickup and keep updated }, ["remind-id"] = { stop_on_scrolls_count = 2, -- Stop when largest un-ID'd scroll stack increases and is >= this stop_on_pots_count = 3, -- Stop when largest un-ID'd potion stack increases and is >= this }, ["runrest-features"] = { ignore_portal_exits = true, -- don't stop explore on portal exits temple_search = true, -- on enter or explore, auto-search altars gauntlet_search = true, -- on enter or explore, auto-search gauntlet with filters }, ["startup"] = { show_skills_menu = false, -- Open skills menu on startup auto_set_skill_targets = { { "Stealth", 2.0 }, -- First, focus stealth to 2.0 { "Fighting", 2.0 }, -- If already have stealth, focus fighting to 2.0 }, }, ["pickup-alert"] = { Pickup = { armour = true, staves = true, weapons = true, weapons_pure_upgrades_only = true, -- Only pick up better versions of same exact weapon }, Alert = { armour_sensitivity = 1, -- Adjust all armour alerts; range [0.5-2.0]; 0 to disable weapon_sensitivity = 1, -- Adjust all weapon alerts; range [0.5-2.0]; 0 to disable orbs = true, -- Unique orbs staff_resists = true, -- When a staff gives a missing resistance talismans = true, -- Alert talismans, if their min skill <= Shapeshifting + talisman_lvl_diff talisman_lvl_diff = you.class() == "Shapeshifter" and 27 or 6, -- Alert the first time each item is found. Can require training with OTA_require_skill. one_time = { "wand of digging", "buckler", "kite shield", "tower shield", "crystal plate armour", "gold dragon scales", "pearl dragon scales", "storm dragon scales", "shadow dragon scales", "quick blade", "demon blade", "eudemon blade", "double sword", "triple sword", "broad axe", "executioner's axe", "demon whip", "eveningstar", "giant spiked club", "morningstar", "sacred scourge", "lajatang", "bardiche", "demon trident", "partisan", "trishula", "hand cannon", "triple crossbow", }, OTA_require_skill = { weapon = 2, armour = 2.5, shield = 0 }, -- No alert if skill < this More = { -- Which alerts generate a force_more_message (some categories overlap) early_weap = false, -- Good weapons found early upgrade_weap = false, -- Better DPS / weapon_score weap_ego = false, -- New or diff egos body_armour = false, shields = true, aux_armour = false, armour_ego = false, -- New or diff egos high_score_weap = false, -- Highest damage found high_score_armour = true, -- Highest AC found one_time_alerts = true, artefact = false, -- Any artefact trained_artefacts = true, -- Artefacts where you have corresponding skill > 0 orbs = false, talismans = you.class() == "Shapeshifter", -- True for shapeshifter, false for everyone else staff_resists = false, -- When a staff gives a missing resistance }, }, }, } -- brc_config_custom (do not remove this comment) } #################################### End lua/config/custom.lua #################################### ################################################################################################### ################################### Begin lua/config/testing.lua ################################## ############# https://github.com/brianfaires/crawl-rc/blob/main/lua/config/testing.lua ############ { --- Testing Main Config: Isolate and test specific features brc_config_testing = { BRC_CONFIG_NAME = "Testing", emojis = false, mpr = { show_debug_messages = true, logs_to_stderr = true, }, disable_other_features = false, -- only use features explicitly configured below ["pickup-alert"] = { Alert = { armour_sensitivity = 0.5, weapon_sensitivity = 0.5, }, Tuning = { Armour = { diff_body_ego_is_good = false, }, }, }, init = function() if BRC.Config.disable_other_features then for _, v in pairs(_G) do if BRC.is_feature_module(v) and not BRC.Config[v.BRC_FEATURE_NAME] then BRC.Config[v.BRC_FEATURE_NAME] = { disabled = true } end end end end, } -- brc_config_testing (do not remove this comment) } #################################### End lua/config/testing.lua ################################### ################################################################################################### ################################## Begin lua/config/turncount.lua ################################# ############ https://github.com/brianfaires/crawl-rc/blob/main/lua/config/turncount.lua ########### { --- Turncount Main Config: For turncount runs brc_config_turncount = { BRC_CONFIG_NAME = "Turncount", ["alert-monsters"] = { sensitivity = 1.25, -- 0 to disable all; at 2.0, alerts will fire at 1/2 HP }, ["announce-items"] = { disabled = false, }, ["bread-swinger"] = { disabled = false, }, ["drop-inferior"] = { disabled = true, }, ["fm-messages"] = { force_more_threshold = 5, }, ["hotkey"] = { equip_hotkey = false, }, ["inscribe-stats"] = { skip_dps = true, }, ["mute-messages"] = { mute_level = 2, }, ["runrest-features"] = { after_shaft = false }, ["pickup-alert"] = { Pickup = { weapons = false, }, Alert = { hotkey_travel = false, hotkey_pickup = false, one_time = { "distortion", "troll leather armour", "wand of digging", "Apportation", "Passage of Golubria", "Shatter", "Ignition", "Fire Storm", "Polar Vortex", }, More = { armour_ego = false, shields = false, }, }, }, ["safe-stairs"] = { warn_backtracking = false, }, init = function() crawl.setopt("show_game_time = false") crawl.setopt("default_autopickup = false") crawl.setopt("explore_stop += shops") -- Adds an announcement with the shop name crawl.setopt("macros += M o zo") -- Disable autoexplore; cast spell 'o' instead crawl.setopt("autoinscribe += offhand:!T") crawl.setopt("autopickup_exceptions ^= > stones?$") -- Don't highlight autopickup for stones crawl.setopt("explore_auto_rest = false") for _, m in ipairs(f_pickup_alert.Config.Alert.More) do if m ~= "one_time_alerts" then f_pickup_alert.Config.Alert.More[m] = false end end end, } -- brc_config_turncount (do not remove this comment) } ################################### End lua/config/turncount.lua ################################## ################################################################################################### ################################## Begin lua/config/realtime.lua ################################## ############ https://github.com/brianfaires/crawl-rc/blob/main/lua/config/realtime.lua ############ { --- Realtime Main Config: For realtime speedruns brc_config_realtime = { BRC_CONFIG_NAME = "Realtime", emojis = true, ["alert-monsters"] = { disabled = true }, ["manage-consumables"] = { disabled = true }, ["safe-stairs"] = { disabled = true }, ["announce-hp-mp"] = { dmg_flash_threshold = 0.20, -- Flash screen when losing this % of max HP dmg_fm_threshold = 1, -- Force more for losing this % of max HP always_on_bottom = true, -- Rewrite HP/MP meters after each turn with messages }, ["display-realtime"] = { disabled = false, }, ["fm-messages"] = { force_more_threshold = 9, }, ["misc-alerts"] = { alert_low_hp_threshold = 0, -- % max HP to alert; 0 to disable save_with_msg = false, -- Shift-S to save and leave yourself a message }, ["mute-messages"] = { mute_level = 3, }, ["remind-id"] = { stop_on_scrolls_count = 99, -- Stop when largest un-ID'd scroll stack increases and is >= this stop_on_pots_count = 99, -- Stop when largest un-ID'd potion stack increases and is >= this }, ["runrest-features"] = { after_shaft = false }, ["startup"] = { show_skills_on_startup = false, -- Open skills menu on startup }, ["pickup-alert"] = { Pickup = { armour = true, staves = false, weapons = true, weapons_pure_upgrades_only = false, -- Only pick up better versions of same exact weapon }, Alert = { armour_sensitivity = 1.1, -- [0.5-2.0] Adjust all armour alerts; 0 to disable weapon_sensitivity = 1.2, -- [0.5-2.0] Adjust all weapon alerts; 0 to disable orbs = false, staff_resists = false, -- When a staff gives a missing resistance talismans = false, one_time = { -- Alert the first time each item is found "kite shield", "tower shield", "crystal plate armour", "gold dragon scales", "pearl dragon scales", "storm dragon scales", "broad axe", "demon whip", "eveningstar", "morningstar", }, OTA_require_skill = { weapon = 6, armour = 0, shield = 0 }, -- No one_time if skill < this More = {}, -- All nil / false }, Tuning = { Armour = { encumb_penalty_weight = 0, -- [0-2.0] Penalty to heavy armour when training magic/ranged early_xl = 0, -- Alert all usable runed body armour if XL <= `early_xl` }, }, }, init = function() BRC.Config.startup.auto_set_skill_targets = { { BRC.you.top_wpn_skill(), 8.0 } } crawl.setopt("view_delay = 0") crawl.setopt("autofight_stop = 15") crawl.setopt("fail_severity_to_confirm = 4") crawl.setopt("view_delay = 100") crawl.setopt("enable_more = false") end, } -- brc_config_realtime (do not remove this comment) } ################################### End lua/config/realtime.lua ################################### ################################################################################################### ################################## Begin lua/config/explicit.lua ################################## ############ https://github.com/brianfaires/crawl-rc/blob/main/lua/config/explicit.lua ############ { --- Explicit config: All config values from all features listed explicitly, set to defaults -- Large feature config sections are at the end -- @warning Since this lives at the top of the RC, it can't reference constants.lua or util/*.lua -- So it must hardcode values like keycodes, where feature configs get to use BRC.KEYS, etc brc_config_explicit = { BRC_CONFIG_NAME = "Explicit", ---- BRC Core values ---- emojis = true, mpr = { show_debug_messages = false, logs_to_stderr = false, }, dump = { max_lines_per_table = 200, -- Avoid huge tables (alert_monsters.Config.Alerts) in debug dumps omit_pointers = true, -- Don't dump functions and userdata (they only show a hex address) }, unskilled_egos_usable = false, -- Does "Armour of " have an ego when skill is 0? --- How weapon damage is calculated for inscriptions+pickup/alert: (factor * DMG + offset) BrandBonus = { chaos = { factor = 1.15, offset = 2.0 }, -- Approximate weighted average distort = { factor = 1.0, offset = 6.0 }, drain = { factor = 1.25, offset = 2.0 }, elec = { factor = 1.0, offset = 4.5 }, -- 3.5 on avg; fudged up for AC pen entangle = { factor = 1.1, offset = 3 }, flame = { factor = 1.25, offset = 0 }, freeze = { factor = 1.25, offset = 0 }, heavy = { factor = 1.8, offset = 0 }, -- Speed is accounted for elsewhere pain = { factor = 1.0, offset = you.skill("Necromancy") / 2 }, spect = { factor = 1.7, offset = 0 }, -- Fudged down for increased incoming damage sunder = { factor = 1.2, offset = 0 }, valour = { factor = 1.15, offset = 0 }, venom = { factor = 1.0, offset = 5.0 }, -- 5 dmg per poisoning subtle = { -- Values to use for weapon "scores" (not damage) antimagic = { factor = 1.1, offset = 0 }, concuss = { factor = 1.2, offset = 0 }, devious = { factor = 1.1, offset = 0 }, holy = { factor = 1.15, offset = 0 }, penet = { factor = 1.3, offset = 0 }, protect = { factor = 1.15, offset = 0 }, reap = { factor = 1.3, offset = 0 }, rebuke = { factor = 1.2, offset = 0 }, vamp = { factor = 1.2, offset = 0 }, }, }, -- BrandBonus (do not remove this comment) hotkey = { key = { keycode = 13, name = "[Enter]" }, skip_keycode = 27, -- ESC keycode equip_hotkey = true, -- Offer to equip after picking up equipment wait_for_safety = true, -- Don't expire the hotkey with monsters in view explore_clears_queue = true, -- Clear the hotkey queue on explore newline_before_hotkey = true, -- Add a newline before the hotkey message move_to_feature = { -- Hotkey for "move to _" when you find these features enter_temple = "Temple", enter_lair = "Lair", altar_ecumenical = "faded altar", enter_bailey = "flagged portal", enter_bazaar = "bazaar", enter_desolation = "crumbling gateway", enter_gauntlet = "gauntlet", enter_ice_cave = "frozen archway", enter_necropolis = "phantasmal passage", enter_ossuary = "sand-covered staircase", enter_sewer = "glowing drain", enter_trove = "trove of treasure", enter_volcano = "dark tunnel", enter_wizlab = "magical portal", enter_ziggurat = "ziggurat", }, }, ---- Feature configs ---- ["announce-hp-mp"] = { disabled = false, dmg_flash_threshold = 0.20, -- Flash screen when losing this % of max HP dmg_fm_threshold = 0.30, -- Force more for losing this % of max HP always_on_bottom = false, -- Rewrite HP/MP meters after each turn with messages meter_length = 10, -- Number of pips in each meter Announce = { hp_loss_limit = 1, -- Announce when HP loss >= this hp_gain_limit = 4, -- Announce when HP gain >= this mp_loss_limit = 1, -- Announce when MP loss >= this mp_gain_limit = 2, -- Announce when MP gain >= this hp_first = false, -- Show HP first in the message same_line = true, -- Show HP/MP on the same line always_both = true, -- If showing one, show both very_low_hp = 0.10, -- At this % of max HP, show all HP changes and mute % HP alerts }, HP_METER = { FULL = "❤️", PART = "❤️‍🩹", EMPTY = "🤍" }, MP_METER = { FULL = "🟦", PART = "🔹", EMPTY = "➖" }, init = function() if not BRC.Config.emojis then f_announce_hp_mp.Config.HP_METER = { BORDER = BRC.txt.white("|"), FULL = BRC.txt.lightgreen("+"), PART = BRC.txt.lightgrey("+"), EMPTY = BRC.txt.darkgrey("-"), } -- HP_METER (do not remove this comment) f_announce_hp_mp.Config.MP_METER = { BORDER = BRC.txt.white("|"), FULL = BRC.txt.lightblue("+"), PART = BRC.txt.lightgrey("+"), EMPTY = BRC.txt.darkgrey("-"), } -- MP_METER (do not remove this comment) end end, }, ["answer-prompts"] = { disabled = false, -- No config; See answer-prompts.lua for Questions/Answers }, ["announce-items"] = { disabled = true, -- Disabled by default. Intended only for turncount runs. announce_class = { "book", "gold", "jewellery", "misc", "missile", "potion", "scroll", "wand" }, announce_glowing = true, announce_artefacts = true, max_gold_announcements = 3, -- Stop announcing gold after 3rd pile on screen announce_extra_consumables_wo_id = true, -- Announce when standing on not-id'd duplicates }, ["bread-swinger"] = { disabled = true, -- Disable by default allow_plant_damage = false, -- Allow damaging plants to rest walk_delay = 50, -- ms delay between walk commands. Makes visuals less jarring. 0 to disable. alert_slow_weap_min = 1.5, -- Alert when finding the slowest weapon yet, starting at this delay. set_manual_slot_key = crawl.is_webtiles() and -11 or -43, -- (Cntl-5) Manually set swing slot max_heal_perc = 90, -- Stop resting at this percentage of max HP/MP emoji = "🍞", init = function() if not BRC.Config.emojis then f_bread_swinger.Config.emoji = BRC.txt.cyan("---- ") end end, }, ["color-inscribe"] = { disabled = true, -- No config; See color-inscribe.lua for COLORIZE_TAGS }, ["display-realtime"] = { disabled = true, -- Disabled by default interval_s = 60, -- seconds between updates emoji = "🕒", init = function() if not BRC.Config.emojis then f_display_realtime.Config.emoji = BRC.txt.white("--") end end, }, ["drop-inferior"] = { disabled = false, msg_on_inscribe = true, -- Show a message when an item is marked for drop hotkey_drop = true, -- BRC hotkey drops all items on the drop list }, ["exclude-dropped"] = { disabled = false, not_weapon_scrolls = true, -- Don't exclude enchant/brand scrolls if holding enchantable weapon }, ["fully-recover"] = { disabled = false, }, ["inscribe-stats"] = { disabled = false, inscribe_weapons = true, -- Inscribe weapon stats on pickup inscribe_armour = true, -- Inscribe armour stats on pickup dmg_type = "unbranded", -- unbranded, plain, branded, scoring skip_dps = false, -- Skip DPS in weapon inscriptions prefix_staff_dmg = true, -- Special prefix for magical staves }, ["misc-alerts"] = { disabled = false, preferred_god = "", -- Stop on first altar with this text (Ex. "Wu Jian"); nil or "" disables force_more_on_pref_altar = true, -- Force more message on first altar for preferred god save_with_msg = true, -- Shift-S to save and leave yourself a message alert_low_hp_threshold = 35, -- % max HP to alert; 0 to disable alert_spell_level_changes = true, -- Alert when you gain additional spell levels alert_remove_faith = true, -- Reminder to remove amulet at max piety remove_faith_hotkey = true, -- Hotkey remove amulet }, ["go-up-macro"] = { disabled = false, go_up_macro_key = 5, -- (Cntl-E) Key for "go up closest stairs" macro ignore_mon_on_orb_run = true, -- Ignore monsters on orb run orb_ignore_hp_min = 0.30, -- HP percent to stop ignoring monsters orb_ignore_hp_max = 0.70, -- HP percent to ignore monsters at min distance away (2 tiles) }, ["quiver-reminders"] = { disabled = false, confirm_consumables = true, warn_diff_missile_turns = 10, }, ["remind-id"] = { disabled = false, stop_on_scrolls_count = 2, -- Stop when largest un-ID'd scroll stack increases and is >= this stop_on_pots_count = 3, -- Stop when largest un-ID'd potion stack increases and is >= this read_id_hotkey = true, -- Put read ID on hotkey emoji = "🎁", init = function() if not BRC.Config.emojis then f_remind_id.Config.emoji = BRC.txt.magenta("?") end end, }, ["runrest-features"] = { disabled = false, after_shaft = true, -- stop on stairs after being shafted, until returned to original floor ignore_altars = true, -- when you don't need a god ignore_portal_exits = true, -- don't stop explore on portal exits stop_on_hell_stairs = true, -- stop explore on hell stairs stop_on_pan_gates = true, -- stop explore on pan gates temple_search = true, -- on entering or exploring temple, auto-search gauntlet_search = true, -- on entering or exploring gauntlet, auto-search with filters necropolis_search = true, -- on exploring necropolis, auto-search with filters }, ["manage-consumables"] = { disabled = false, maintain_safe_scrolls = true, maintain_safe_potions = true, scroll_slots = { ["acquirement"] = "A", ["amnesia"] = "x", ["blinking"] = "B", ["brand weapon"] = "W", ["butterflies"] = "s", ["enchant armour"] = "a", ["enchant weapon"] = "w", ["fear"] = "f", ["fog"] = "g", ["identify"] = "i", ["immolation"] = "I", ["noise"] = "N", ["revelation"] = "r", ["poison"] = "p", ["silence"] = "S", ["summoning"] = "s", ["teleportation"] = "t", ["torment"] = "T", ["vulnerability"] = "V", }, potion_slots = { ["ambrosia"] = "a", ["attraction"] = "A", ["berserk rage"] = "B", ["brilliance"] = "b", ["cancellation"] = "C", ["curing"] = "c", ["experience"] = "E", ["enlightenment"] = "e", ["haste"] = "h", ["heal wounds"] = "w", ["invisibility"] = "i", ["lignification"] = "L", ["magic"] = "g", ["might"] = "z", ["resistance"] = "r", ["mutation"] = "M", }, }, ["safe-stairs"] = { disabled = false, warn_backtracking = true, -- Warn if immediately taking stairs twice in a row warn_v5 = true, -- Prompt before entering Vaults:5 }, ["startup"] = { disabled = false, -- Save current training targets and config, for race/class macro_save_key = 20, -- (Cntl-T) Keycode to save training targets and config save_training = true, -- Allow save/load of race/class training targets save_config = true, -- Allow save/load of BRC config prompt_before_load = false, -- Prompt before loading in a new game with same race+class allow_race_only_saves = false, -- Also save for race only (always prompts before loading) allow_class_only_saves = false, -- Also save for class only (always prompts before loading) -- Remaining values only used if no training targets were loaded by race/class show_skills_menu = false, -- Show skills menu on startup -- Settings to set skill targets, regardless of race/class set_all_targets = true, -- Set all targets, even if only focusing one focus_one_skill = true, -- Focus one skill at a time, even if setting all targets auto_set_skill_targets = { { "Stealth", 2.0 }, -- First, focus stealth to 2.0 { "Fighting", 2.0 }, -- If already have stealth, focus fighting to 2.0 }, -- For non-spellcasters, add preferred weapon type as 3rd skill target init = function() if you.skill("Spellcasting") == 0 then local wpn_skill = BRC.you.top_wpn_skill() if wpn_skill then local t = f_startup.Config.auto_set_skill_targets t[#t + 1] = { wpn_skill, 6.0 } end end end, }, ["weapon-slots"] = { disabled = false, -- No config }, ---- Large config sections ---- ["dynamic-options"] = { disabled = false, meaningful_spellcasting_skill = 5, -- Skill level to switch on "spellcaster-specific" options -- XL-based force more messages: active when XL <= specified level xl_force_mores = { { pattern = "monster_warning:wielding.*of electrocution", xl = 5 }, { pattern = "You.*re more poisoned", xl = 7 }, { pattern = "^(?!.*Your?).*speeds? up", xl = 10 }, { pattern = "danger:goes berserk", xl = 18 }, { pattern = "monster_warning:carrying a wand of", xl = 15 }, }, race_options = { Gnoll = function() BRC.opt.message_mute("intrinsic_gain:skill increases to level", true) end, }, class_options = { Hunter = function() crawl.setopt("view_delay = 30") end, Shapeshifter = function() BRC.opt.autopickup_exceptions("