##################### ### Tiles options ### ##################### tile_font_crt_family = Consolas tile_font_stat_family = Consolas tile_font_msg_family = Consolas tile_font_lbl_family = Consolas ################## ### UI options ### ################## travel_delay = -1 explore_delay = -1 rest_delay = -1 view_delay = 300 runrest_ignore_poison = 2:10 runrest_ignore_monster += ^butterfly$:1 show_travel_trail = true confirm_butcher = never easy_eat_chunks = true rest_delay = -1 hp_colour = 100:green, 75:yellow, 50:red, 25:lightred mp_colour = 100:green, 75:yellow, 50:red, 25:lightred hp_warning = 25 autofight_stop = 50 auto_sacrifice = true #################### ### Menu options ### #################### drop_filter += useless_item sort_menus += inv: true : equipped, charged ###################### ### Menu colouring ### ###################### ## These should match the item_glyph colours exactly when possible. ## For menu_colour, the first match ignores subsequent matches. menu := menu_colour menu = # 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. menu += notes:white:Reached XP level ### General Inventory ### # 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:lightred:god gift # Highlight (partly) selected items menu_colour += inventory:white:\w \+\s menu_colour += inventory:white:\w \#\s ### Food ### # Color chunks, put ordinary ones on lightgrey. menu += red:evil_eating.*chunk menu += blue:mutagenic.*chunk menu += darkgrey:inedible menu += lightgrey: +(chunks?$|chunks? +) # These are analogous to chunks : if you.race() == "Vampire" then menu += lightgrey:potions? of blood : end # Other food menu += brown:fruit menu += yellow:(pizza|jerky|jerkies) menu += green:royal jell menu += lightgreen:bread ration menu += lightred:meat ration ### Potions ### # Generally harmful menu += blue:potions? of.*(lignification|(?silence ae := autopickup_exceptions ## Don't ever need a second stave ae += staff of .* #################### ### Autoinscribe ### #################### ai := autoinscribe ai += (bad|dangerous)_item.*potion:!q ai += (bad|dangerous)_item.*scroll:!r ai += potion.*(berserk rage):!q ai += of faith:!P ai += ( rod ):!a ai += manual of:!d ai += staff of (Wucad Mu|energy|channeling|wizardry|power|conjuration|summoning):!a ## from simm's rc ai += curing:@q1 ai += potions? of heal wounds:@q2 ai += wand of heal wounds:@v2 ai += potions? of haste:@q3 ai += wand of hasting:@v3 ai += scrolls? of teleportation:@r4 ai += wand of teleportation:@v4 ai += identify:@r1 ai += remove curse:@r2 ai += blowgun:@w1 ai += (curare|dispersal):!f ai += (meat|bread) ration:@e1 ai += (beef jerk|fruit|pizza):@e2 ai += royal jell:@e3 ######### # Notes # ######### note_items += acquirement, of Zot note_messages += You pass through the gate note_messages += cast .* Abyss note_messages += Your scales start note_messages += protects you from harm note_messages += You fall through a shaft ## Nasty undead from Vaults and Tomb note_monster += lich,ancient lich,curse skull,greater mummy ## Some enemies it's good to note for Vaults:5 note_monsters += tengu reaver,storm dragon,titan ## Depths ## 0.17 note_monsters += octopode crusher note_monsters += juggernaut,irong giant,caustic shrike ## Zot note_monsters += killer klown,electric golem,curse toe,orb of fire ##################### ### More messages ### ##################### more := force_more_message # Important features : if you.god() == "Ashenzari" then more += You have a vision of.*gates? : else more += interdimensional caravan more += distant snort more += Found a gateway leading out of the Abyss : end more += Found .* abyssal rune of Zot more += You feel a terrible weight on your shoulders # Interrupts more += You don't.* that spell more += You fail to use your ability more += You miscast more += You can't (read|drink|do) that more += That item cannot be evoked more += This wand has no charges more += You are held in a net more += You don't have any such object more += do not work when you're silenced more += You can't unwield more += enough magic points more += You feel your control is inadequate # Bad things more += Your surroundings flicker more += sense of stasis more += You cannot teleport right now more += The writing blurs in front of your eyes more += (blundered into a|invokes the power of) Zot more += Ouch! That really hurt! more += dispelling energy hits you more += You convulse more += You are (blasted|electrocuted)! more += You are (more )?confused more += You are (more |lethally )?poisoned more += wrath finds you more += lose consciousness more += Space warps horribly around you more += hits you.*distortion more += Space bends around you more += watched by something more += The dungeon rumbles around more += The air twists around and violently strikes you in flight # Expiring effects more += You feel yourself slow down more += You are starting to lose your buoyancy more += Your hearing returns more += Your transformation is almost over more += You feel yourself come back to life # Others more += You have reached level more += You have finished your manual of more += Deactivating autopickup ## Problematic monsters more += (giant eyeball|shining eye|cacodemon|neqoxec|guardian serpent|flayed ghost|greater mummy|mummy priest|hell sentinel|fiend|tzitzimitl|tormentor|hellion|lich|executioner|orb of fire|death cob|juggernaut|moth of wrath|ghost moth|curse toe|curse skull|draconian shifter).*into view ## Any uniques and any pan lords more += (?-i:[A-Z]).* comes? into view ## 0.17 more += the royal jelly.* comes? into view ############ ## Macros ## ############ # macros += M e ===safe_eat # macros += M S ===save_with_message # macros += M 1 aa # macros += M 3 zz # macros += M 6 ===one_turn_rest # macros += M 7 ===start_resting # macros += M 8 ===new_random_tile # macros += M 9 ===set_tile_by_name # macros += M 0 ===toggle_tile_timer # macros += M - ===toggle_random_tile macros += M ] ===set_target_skill ############################## ## Lua and ready() function ## ############################## { -- Spellcasting spam reduction by monqy local function generic_cast_spell(cmd) crawl.mpr('Cast which spell?') crawl.flush_prev_message() crawl.process_keys(cmd) end function cast_spell() generic_cast_spell('z') end function force_cast_spell() generic_cast_spell('Z') end -- Some simple options for turncount and realtime runs. Note I don't play much -- of the latter, and these options are taken from the RCs of players who do. -- Uses the toggle_options lua: -- https://github.com/gammafunk/dcss-rc#toggle_options option_groups = { ["turncount"] = { {option = "confirm_butcher = %t", on="never", off="auto"}, {option = "ai %t= (bread|meat) ration:!e", on="+", off="-"}, {option = "ai %t= scroll.+of.*(acquirement|summoning|teleportation" .. "|fear|magic mapping):!r", on="+", off="-"}, {option = "ai %t= potion.+of(curing|heal wounds|might|agility" .. "|brilliance|magic|invisibility):!q", on="+", off="-"} }, ["realtime"] = { {option = "ae %t= >wand of (magic darts|flame|frost)", on="+", off="-"}, {option = "ae %t= >wand of (slowing|polymorph|confusion|paralysis)", on="+", off="-"}, {option = "use_animations = %t", on="", off="beam, range, hp, " .. "monster_in_sight, pickup, monster, player, branch_entry"}, }, } -- end option groups -- Note: My final rc file has the lua files from -- https://github.com/gammafunk/dcss-rc included starting on the next line. --LUA INCLUDE-- --------------------------------------- ---- Begin conditional 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 -- giving the regexp matching the appropriate monster(s), a cond field giving -- the condition type, and a cutoff field giving the max value where the -- force-more is active. Possible values for cond are xl and maxhp. Note that -- the final pattern will be "(pattern).*into view" where pattern is the value -- from the entry. fm_patterns = { -- General early game threats {pattern = "adder|gnoll|hound", cond = "xl", cutoff = 2, name = "XL1"}, -- Problems for chars with 20, 60, 90, or 120 mhp {pattern = "orc|Ogre", cond = "20mhp", cutoff = 20, name = "20hp"}, {pattern = "orc priest", cond = "maxhp", cutoff = 40, name = "40mhp"}, {pattern = "centaur [^wzs]|drake|blink frog|spiny frog|basilisk" .. "|raven|komodo dragon|blink frog|snapping turtle|black mamba" .. "|(redback|trapdoor) spider|hill giant|deep elf (summoner|mage)" .. "|gargoyle|sixfirhy|sun demon", cond = "maxhp", cutoff = 60, name = "60mhp"}, {pattern = "hydra|death yak|tarantella|(wolf|orb|jumping) spider" .. "|alligator|catoblepas|(fire|ice) dragon|spriggan (rider|druid)" .. "|torpor|yaktaur|vault guard|manticore|harpy|faun|merfolk|siren" .. "|water nymph|mana viper|a wizard|[0-9]+ wizards|ogre mage" .. "|deep elf (knight|conjurer)|tengu conjurer|green death" .. "|shadow demon", cond = "maxhp", cutoff = 90, name = "90mhp"}, {pattern = "centaur warrior|yaktaur captain" .. "|(quicksilver|storm|shadow|iron) dragon|alligator snapping turtle" .. "|satyr|naga sharpshooter|merfolk avatar|anaconda|shock serpent" .. "|emperor scorpion(stone|frost|fire) giant|titan|entropy weaver" .. "|thorn hunter|sphinx|war gargoyle|preserver" .. "|vault (warden|sentinel)|convoker|monstrosity|tengu reaver" .. "|deep elf (master archer|blademaster|death mage" .. "|sorcerer|demonologist|annihilator)" .. "|octopode crusher|yaktaur captain|spriggan (defender|air mage)" .. "|reaper|balrug", cond = "maxhp", cutoff = 120, name = "120mhp"} } -- 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 = "(" .. v.pattern .. ").*into view" local action = nil local fm_name = v.pattern if v.name then fm_name = v.name end if not v.cond and not active_fm[i] then action = "+" elseif v.cond == "xl" then if active_fm[i] and you.xl() >= 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 ---- ------------------------- ----------------------------- ---- Beging target_skill ---- ----------------------------- -- See README.md for documentation. skill_list = {"Fighting","Short Blades","Long Blades","Axes","Maces & Flails", "Polearms","Staves","Unarmed Combat","Bows","Crossbows", "Throwing","Slings","Armour","Dodging","Shields","Spellcasting", "Conjurations","Hexes","Charms","Summonings","Necromancy", "Translocations","Transmutations","Fire Magic","Ice Magic", "Air Magic","Earth Magic","Poison Magic","Invocations", "Evocations","Stealth"} need_target_skill = nil function record_current_skills(maxlev) c_persist.current_skills = { } for _,sk in ipairs(skill_list) do if you.train_skill(sk) > 0 and you.base_skill(sk) < (maxlev or 27) then table.insert(c_persist.current_skills, sk) end end end function check_skills() if not c_persist.current_skills or not c_persist.target_skill then return end for _,sk in ipairs(c_persist.current_skills) do if you.base_skill(sk) >= c_persist.target_skill then crawl.formatted_mpr(sk .. " reached " .. c_persist.target_skill .. ".", "prompt") crawl.more() set_new_skill_training() break end end end function init_target_skill() c_persist.target_skill = nil c_persist.current_skills = { } need_target_skill = true end function set_new_skill_training() init_target_skill() c_persist.target_skill = 0 crawl.sendkeys("m") end function set_target_skill() record_current_skills() local str = "Currently training: " local first_skill = true for _,sk in ipairs(c_persist.current_skills) do val = you.base_skill(sk) if first_skill then str = str .. sk .. "(" .. val .. ")" else str = str .. ", " .. sk .. "(" .. val .. ")" end first_skill = false end str = str .. "." crawl.formatted_mpr(str, "prompt") crawl.formatted_mpr("Choose a target skill level: ", "prompt") c_persist.target_skill = tonumber(crawl.c_input_line()) record_current_skills(c_persist.target_skill) -- Update the target skill for char_defaults if necessary. if save_default_target_skill and you.turns() == 0 then save_default_target_skill() end end function control(c) return string.char(string.byte(c) - string.byte('a') + 1) end -- Moved this to its own function to clean up ready() -gammafunk function target_skill() prev_need_target = need_target_skill -- Need to look at skills and then set a target skill if our -- need_target_skill variable is uninitialized and we're either at turn 0 or -- c_persist.target_skill also uninitialized. if prev_need_target == nil and (you.turns() == 0 or c_persist.target_skill == nil) then set_new_skill_training() end if prev_need_target then set_target_skill() need_target_skill = false elseif not need_target_skill then check_skills() end end -------------------------- ---- End target_skill ---- -------------------------- function ready() -- Enable skill target settings. target_skill() -- Dynamic force-mores. force_mores() end }