tile_map_scale = 1.0 autofight_stop = 40 autofight_warning = 0 travel_delay = -1 explore_delay = -1 travel_key_stop = false default_manual_training = true equip_unequip = true easy_confirm = all autofight_caught = true rest_wait_both = true ######ANIMATION###### use_animations = false tile_misc_anim = false tile_realtime_anim = false tile_water_anim = false reduce_animations = true #Force more show_more = false more := force_more_message stop := runrest_stop_message more += You turn into more += The catoblepas breathes a plume of calcifying dust at you. more += Found a gateway leading deeper into the Abyss. more += (brimstone fiend|Nikola|moth of wrath|Sonja|floating eye).*into view #turnoff Okawaru grants you throwing weapons #General Settings autopickup = $?!"/♦( default_manual_training = true drop_disables_autopickup = true level_map_cursor_step = 5 explore_greedy travel_one_unsafe_move = true # single_column_item_menus = DON'T TURN THIS ON. REMEMBER THE SNAKE PIT! # Character Dump Settings user_note_prefix = NOTE:  dump_item_origin_price = 500 dump_order = hiscore,stats,skills,mutations,misc,overview,-, dump_order += apostles,inventory,spells,-, dump_order += skill_gains,action_counts,notes,-, dump_order += messages,screenshot,monlist,kills,screenshots,vaults note_skill_levels = 1,7,13,17,21,24,27 dump_message_count = 100 #TrollStuff always_show_zot = true always_show_gems = true more_gem_info = true autopickup_exceptions += stone #rest_wait_percent = 90 # WARNINGS flash_screen_message = carrying a wand flash_screen_message += portcullis flash_screen_message += tolling flash_screen_message += whistling flash_screen_message += melting archway flash_screen_message += avalanche of flash_screen_message += rusting flash_screen_message += magical portal flash_screen_message += beating flash_screen_message += funeral chant flash_screen_message += Ecumenical Temple # Autoassign Keys spell_slot ^= Apportation:A spell_slot ^= Blink:B gear_slot ^=granite:g gear_slot ^=death talisman:d gear_slot ^=lupine talisman:l gear_slot ^=quill talisman:q gear_slot ^=maw talisman:m gear_slot ^=a ring of protection from cold:i gear_slot ^=a ring of protection from fire:f gear_slot ^=a ring of see invisible:s gear_slot ^=a ring of poison resistance:p gear_slot ^=a +4 ring of protection:A gear_slot ^=a ring of wizardry:w # Keybinds #bindkey = [~] CMD_LUA_CONSOLE ######################################################## ## Equipment autopickup (by Medar and various others) ## ######################################################## { local function pickup_equipment(it, name) if it.is_useless then return end local class = it.class(true) if class == "armour" then slot = it.equip_type aux = false for _, s in ipairs({"cloak", "helmet", "gloves", "boots", "barding"}) do if slot == s then aux = true end end if aux then -- Pickup if we can wear it now if items.slot_is_available(slot) then return true end if it.artefact then return true end -- Pickup if there is something unbranded in a current slot and -- this is branded. -- 6 is the maximum slots any character has for an aux (poltergeists) for i = 1,6 do local cur = items.equipped_at(slot, i) if cur then if not (cur.branded or cur.artefact) then if it.branded then return true end end end end elseif slot == "armour" then local cur = items.equipped_at("armour") if cur == nil then return end if cur.name("qual") ~= it.name("qual") then return end if it.artefact then return true end if cur.branded or cur.artefact then return end if it.branded then return true end end end return end add_autopickup_func(pickup_equipment) } ######################################################## ## Character skill defaults (by Gammafunk) ## ######################################################## { ----------------------------- ---- Begin char_defaults ---- ----------------------------- -- See README.md for documentation. weapon_skills = { "Maces & Flails", "Axes", "Polearms", "Staves", "Unarmed Combat", "Short Blades", "Long Blades" } ranged_skills = { "Throwing", "Ranged Weapons" } other_skills = { "Fighting", "Armour", "Dodging", "Shields", "Stealth", "Spellcasting", "Conjurations", "Hexes", "Summonings", "Necromancy", "Translocations", "Alchemy", "Fire Magic", "Ice Magic", "Air Magic", "Earth Magic", "Invocations", "Evocations", "Shapeshifting" } skill_glyphs = { [1] = "+", [2] = "*" } chdat = nil char_combo = you.race() .. you.class() loaded_attempted = false -- Wrapper of crawl.mpr() that prints text in white by default. if not mpr then mpr = function (msg, color) if not color then color = "white" end crawl.mpr("<" .. color .. ">" .. msg .. "") end end function skill_message(prefix, skill, skill_type, value) local msg = "" if prefix then msg = prefix .. ";" end if skill_type then msg = msg .. skill_type .. "(" .. skill .. "):" .. value else msg = msg .. skill .. ":" .. value end return msg end function save_char_defaults(quiet) if you.class() == "Wanderer" then return end if not c_persist.char_defaults then c_persist.char_defaults = { } end c_persist.char_defaults[char_combo] = { } chdat = c_persist.char_defaults[char_combo] local msg = nil local have_weapon = false for _,sk in ipairs(weapon_skills) do if you.train_skill(sk) > 0 then chdat["Weapon"] = you.train_skill(sk) msg = skill_message(nil, sk, "Weapon", skill_glyphs[chdat["Weapon"]]) have_weapon = true break end end if not have_weapon then chdat["Weapon"] = nil end local have_ranged = false for _,sk in ipairs(ranged_skills) do if you.train_skill(sk) > 0 then chdat["Ranged"] = you.train_skill(sk) msg = skill_message(msg, sk, "Ranged", skill_glyphs[chdat["Ranged"]]) have_ranged = true break end end if not have_ranged then chdat["Ranged"] = nil end for _,sk in ipairs(other_skills) do if you.train_skill(sk) > 0 then chdat[sk] = you.train_skill(sk) msg = skill_message(msg, sk, nil, skill_glyphs[chdat[sk]]) else chdat[sk] = nil end end if not quiet then mpr("Saved default for " .. char_combo .. ": " .. msg) end end function have_defaults() return you.class() ~= "Wanderer" and c_persist.char_defaults ~= nil and c_persist.char_defaults[char_combo] ~= nil end function load_char_defaults(quiet) if not have_defaults() then return end local msg = nil local found_weapon = false chdat = c_persist.char_defaults[char_combo] for _,sk in ipairs(weapon_skills) do if you.base_skill(sk) > 0 and chdat["Weapon"] then you.train_skill(sk, chdat["Weapon"]) msg = skill_message(msg, sk, "Weapon", skill_glyphs[chdat["Weapon"]]) found_weapon = true else you.train_skill(sk, 0) end end if chdat["Weapon"] and not found_weapon then you.train_skill("Unarmed Combat", chdat["Weapon"]) msg = skill_message(msg, "Unarmed Combat", "Weapon", skill_glyphs[chdat["Weapon"]]) end local found_ranged = false for _,sk in ipairs(ranged_skills) do if you.base_skill(sk) > 0 and chdat["Ranged"] then you.train_skill(sk, chdat["Ranged"]) msg = skill_message(msg, sk, "Ranged", skill_glyphs[chdat["Ranged"]]) found_ranged = true else you.train_skill(sk, 0) end end if chdat["Ranged"] and not found_ranged then you.train_skill("Throwing", chdat["Ranged"]) msg = skill_message(msg, "Throwing", "Ranged", skill_glyphs[chdat["Ranged"]]) end for _,sk in ipairs(other_skills) do if chdat[sk] then you.train_skill(sk, chdat[sk]) msg = skill_message(msg, sk, nil, skill_glyphs[chdat[sk]]) else you.train_skill(sk, 0) end end if not quiet and msg ~= "" then mpr("Loaded default for " .. char_combo .. ": " .. msg) end end function char_defaults(quiet) if you.turns() ~= 0 then return end if not load_attempted then load_char_defaults(quiet) load_attempted = true -- Open the skill menu if we don't have settings to load. if not have_defaults() then crawl.sendkeys("m") end end end --------------------------- ---- End char_defaults ---- --------------------------- } ######################################################## ## Dynamic force_mores (by Gammafunk) ## ######################################################## { --------------------------- ---- Begin force_mores ---- --------------------------- -- See README.md for documentation. last_turn = you.turns() -- Each entry must have a 'name' field with a descriptive name, a 'pattern' -- field, a 'cond' field giving the condition type, and a 'cutoff' field giving -- the max value for where the force_more will apply. Possible values for -- 'cond' are xl and maxhp. -- -- The 'pattern' field's value can be either a regexp string or array of regexp -- strings matching the appropriate monster(s). Any values are joined by "|" to -- make a new force_more of the form: -- -- ((?!spectral )VALUE1|VALUE2|...)(?! (skeleton|zombie|simularcrum)).*into view". -- -- To allow derived undead forms of a monster to match, include 'spectral ' at -- the beginning of and/or ' (skeleton|zombie|simularcrum)' at the end of your -- pattern for that monster. fm_patterns = { -- Fast, early game Dungeon problems for chars with low mhp. {name = "30mhp", cond = "maxhp", cutoff = 30, pattern = "adder|hound"}, -- Dungeon monsters that can damage you for close to 50% of your mhp with a -- ranged attack. {name = "40mhp", cond = "maxhp", cutoff = 40, pattern = "orc priest|electric eel"}, {name = "60mhp", cond = "maxhp", cutoff = 60, pattern = "acid dragon|steam dragon|manticore"}, {name = "70mhp", cond = "maxhp", cutoff = 70, pattern = "centaur(?! warrior)|meliai|yaktaur(?! captain)"}, {name = "80mhp", cond = "maxhp", cutoff = 80, pattern = "gargoyle|orc (warlord|knight)"}, {name = "90mhp", cond = "maxhp", cutoff = 90, pattern = {"centaur warrior", "deep elf archer", "efreet", "molten gargoyle", "tengu conjurer"} }, {name = "110mhp", cond = "maxhp", cutoff = 110, pattern = {"centaur warrior", "deep elf (mage|knight)", "cyclops", "efreet", "molten gargoyle", "tengu conjurer", "yaktaur captain", "necromancer", "deep troll earth mage", "hell knight", "stone giant"} }, {name = "160mhp", cond = "maxhp", cutoff = 160, pattern = {"(fire|ice|quicksilver|shadow|storm) dragon", "(fire|frost) giant", "war gargoyle", "draconian (knight|stormcaller"} }, } -- end fm_patterns active_fm = {} -- Set to true to get a message when the fm change notify_fm = false -- Wrapper of crawl.mpr() that prints text in white by default. if not mpr then mpr = function (msg, color) if not color then color = "white" end crawl.mpr("<" .. color .. ">" .. msg .. "") end end function init_force_mores() for i,v in ipairs(fm_patterns) do active_fm[#active_fm + 1] = false end end function update_force_mores() local activated = {} local deactivated = {} local hp, maxhp = you.hp() for i,v in ipairs(fm_patterns) do local msg = nil if type(v.pattern) == "table" then for j, p in ipairs(v.pattern) do if msg == nil then msg = p else msg = msg .. "|" .. p end end else msg = v.pattern end msg = "(?= v.cutoff then action = "-" elseif not active_fm[i] and you.xl() < v.cutoff then action = "+" end elseif v.cond == "maxhp" then if active_fm[i] and maxhp >= v.cutoff then action = "-" elseif not active_fm[i] and maxhp < v.cutoff then action = "+" end end if action == "+" then activated[#activated + 1] = fm_name elseif action == "-" then deactivated[#deactivated + 1] = fm_name end if action ~= nil then local opt = "force_more_message " .. action .. "= " .. msg crawl.setopt(opt) active_fm[i] = not active_fm[i] end end if #activated > 0 and notify_fm then mpr("Activating force_mores: " .. table.concat(activated, ", ")) end if #deactivated > 0 and notify_fm then mpr("Deactivating force_mores: " .. table.concat(deactivated, ", ")) end end local last_turn = nil function force_mores() if last_turn ~= you.turns() then update_force_mores() last_turn = you.turns() end end init_force_mores() ------------------------- ---- End force_mores ---- ------------------------- } { function ready() char_defaults() force_mores() end }