############################################################################## # DCSS TRUNK RC ############################################################################## # FONT (WebTiles) # crt drives every menu; stat/msg/lbl inherit from it unless set. # Use a font that is actually installed on the client machine. #tile_font_crt_family = Consolas #tile_font_stat_family = Consolas #tile_font_msg_family = Consolas #tile_font_lbl_family = Consolas #action_panel_font_family = Consolas # ANIMATION view_delay = 150 # THREAT DISPLAY tile_show_threat_levels = tough, nasty # MANUAL SKILL TRAINING default_manual_training = true # AUTOPICKUP # ( = all throwables (stones excluded below). autopickup = $?!:"/|}( # Exclusions first, forced pickups after. autopickup_exceptions += >useless_item autopickup_exceptions += >(atropa|dispersal) # "stone"/"stones" only; does not match "tin of tremorstones". autopickup_exceptions += >(^| )stones?$ autopickup_exceptions += never # 2. artefact / branded / enchanted (+1 or more) -> pick up # 3. same skill as wielded weapon and higher tier -> pick up # 4. otherwise -> ignore # Two-handers are skipped while a shield is worn unless the toggle is true. # NOTE: a line containing only "}" ends the Lua block for the RC parser. # Keep every table closer on the same line as the last entry. # NOTE: it.ego is a method; it.ego without () is a function object (truthy). { local PICKUP_2H_WITH_SHIELD = false -- Short Blades, Long Blades, Ranged Weapons scale with Dex; the rest with Str. local DEX_SKILLS = { ["Short Blades"] = true, ["Long Blades"] = true, ["Ranged Weapons"] = true } local WEAPON_RANK = { ["Short Blades"] = { ["dagger"]=1, ["ceremonial knife"]=1, -- 0.35 trunk; tier unverified ["short sword"]=2, ["rapier"]=3, ["quick blade"]=4 }, ["Long Blades"] = { ["falchion"]=1, ["long sword"]=2, ["scimitar"]=3, ["demon blade"]=4, ["eudemon blade"]=4, ["double sword"]=5, ["great sword"]=6, ["triple sword"]=7 }, ["Axes"] = { ["hand axe"]=1, ["war axe"]=2, ["broad axe"]=3, ["battleaxe"]=4, ["executioner's axe"]=5 }, ["Maces & Flails"] = { ["club"]=1, ["whip"]=2, ["mace"]=3, ["flail"]=4, ["demon whip"]=5, ["sacred scourge"]=5, ["morningstar"]=6, ["dire flail"]=7, ["eveningstar"]=8, ["great mace"]=9, ["giant club"]=10, ["giant spiked club"]=11 }, ["Polearms"] = { ["spear"]=1, ["trident"]=2, ["halberd"]=3, ["scythe"]=3, ["demon trident"]=4, ["trishula"]=4, ["partisan"]=5, ["glaive"]=6, ["bardiche"]=7 }, ["Staves"] = { ["quarterstaff"]=1, ["lajatang"]=2 }, ["Ranged Weapons"] = { ["sling"]=1, ["shortbow"]=2, ["hand cannon"]=3, ["longbow"]=4, ["arbalest"]=5, ["triple crossbow"]=6 } } local TWO_HANDED = { ["great sword"]=true, ["triple sword"]=true, ["battleaxe"]=true, ["executioner's axe"]=true, ["dire flail"]=true, ["great mace"]=true, ["giant club"]=true, ["giant spiked club"]=true, ["halberd"]=true, ["scythe"]=true, ["glaive"]=true, ["bardiche"]=true, ["quarterstaff"]=true, ["lajatang"]=true, ["shortbow"]=true, ["longbow"]=true, ["arbalest"]=true, ["triple crossbow"]=true } -- true if the weapon's skill scales off the character's higher stat. -- Equal Str and Dex: both stat groups pass. local function stat_matches(skill) local str, dex = you.strength(), you.dexterity() if str == dex then return true end local wants_dex = DEX_SKILLS[skill] == true if str > dex then return not wants_dex end return wants_dex end add_autopickup_func(function(it, name) if it.class(true) ~= "weapon" or it.is_useless then return end local skill = it.weap_skill if not stat_matches(skill) then return false end if it.artefact or it.branded or it.ego() then return true end if (it.plus or 0) > 0 then return true end local wielded = items.equipped_at("Weapon") if not wielded or wielded.class(true) ~= "weapon" then return false end if skill ~= wielded.weap_skill then return false end local ranks = WEAPON_RANK[skill] if not ranks then return false end local mine, theirs = ranks[wielded.subtype()], ranks[it.subtype()] if not mine or not theirs or theirs <= mine then return false end if not PICKUP_2H_WITH_SHIELD and TWO_HANDED[it.subtype()] and items.equipped_at("Shield") then return false end return true end) } # AUTOMATIC ARMOUR PICKUP # Aux slot empty: pick up. Aux slot filled: only branded/artefact. # Shield: only branded/artefact when one is already equipped. # Body armour: never. # # Verify the shield slot name once in-game (^T console) while wearing one: # crawl.mpr(tostring(items.equipped_at("Shield"))) # If it prints nil, change "Shield" here and in the weapon function to "Offhand". { add_autopickup_func(function(it, name) if it.class(true) ~= "armour" or it.is_useless then return end local function upgrade_only() return it.artefact or it.branded or it.ego() end if it.is_shield then local eq = items.equipped_at("Shield") if eq then return upgrade_only() end return false end local slot_of = { cloak = "Cloak", helmet = "Helmet", gloves = "Gloves", boots = "Boots" } local slot = slot_of[it.subtype()] if slot then if not items.equipped_at(slot) then return true end return upgrade_only() end return false end) } # MONSTER ALERT # Values are bare words. 'uniques' is on by default and += keeps it. monster_alert += nasty, unusual # DISTORTION force_more_message += distortion.*comes? into view force_more_message += wielding.*distortion flash_screen_message += distortion unusual_highlight = hi:magenta # DANGEROUS TRANSFORMATIONS force_more_message += changes into.*((giant|floating|shining) eye|eye of draining) force_more_message += changes into.*(moth of wrath|ghost moth|torpor snail) force_more_message += changes into.*(guardian serpent|draconian shifter|convoker) force_more_message += changes into.*(flayed ghost|royal mummy|mummy priest|fiend|tzitzimitl) force_more_message += changes into.*(tormentor|curse toe|curse skull) force_more_message += changes into.*(hellion|hell sentinel|deep elf sorcerer) force_more_message += changes into.*(deep elf high priest|scorcher) force_more_message += changes into.*(ancient lich|orb of fire|executioner|juggernaut|shrike) force_more_message += changes into.*(wretched star|lurking horror) force_more_message += changes into.*(neqoxec|cacodemon|doom hound) force_more_message += changes into.*(radroach|entropy weaver|meliai) force_more_message += changes into.*(salamander tyrant|ironbound frostheart) force_more_message += changes into.*(walking crystal tome|walking divine tome|walking earthen tome|walking frostbound tome) # AUTOINSCRIBE autoinscribe += throwing net:!f autoinscribe += curare:!f autoinscribe += datura:!f # TRAVEL / EXPLORE travel_key_stop = true travel_one_unsafe_move = false # Absolute list: nothing inherited from defaults. No stop on stairs, on # seeing an item, or on picking one up. Greedy explore still collects what # the autopickup functions allow. explore_stop = shops, altars, portals, branches, runed_doors, glowing_items, artefacts, runes always_show_exclusions = true # RUNREST MESSAGE IGNORE # Jiyva runrest_ignore_message += Jiyva appreciates your sacrifice runrest_ignore_message += Jiyva gurgles merrily runrest_ignore_message += You hear.*splatter # Recovery runrest_ignore_message += You feel better runrest_ignore_message += You feel your power returning # Qazlal protection runrest_ignore_message += Your protection from.*is fading runrest_ignore_message += You feel less protected from # Wereblood runrest_ignore_message += the wereblood boils in your veins runrest_ignore_message += Your primal bloodlust is almost over # Plants runrest_ignore_message += A nearby plant withers and dies # Fire vortex runrest_ignore_message += Your fire (vortex|vortices).*something runrest_ignore_message += something .* fire (vortex|vortices) # Death Channel ending runrest_ignore_message += Your unholy channel expires # HP / MP hp_warning = 30 hp_colour = 75:yellow, 50:lightred, 25:red mp_colour = 50:yellow, 25:red enemy_hp_colour = green green brown brown magenta red # MESSAGE DISPLAY msg_condense_repeats = true msg_condense_short = true # EQUIPMENT easy_unequip = true # MENU SORTING sort_menus = pickup: true : art, ego, basename, qualname, curse, qty sort_menus = inv: true : equipped, freshness, charged # CHATTING lab_use_click_to_send_chat = true