# Sean's Dungeon Crawl: Stone Soup configuration file, for v0.31. # # If you're reading this, then here's a secret: if you're on WebTiles (and # suffer from performance anxiety :-[), it's possible to disable spectators from # watching your games! In the F12 chat, type "/block [anon]" to block anonymous # spectators, or "/block [all]" to block everyone. Have fun! hp_warning = 75 mp_warning = 50 autofight_stop = 75 default_manual_training = true warn_hatches = true explore_delay = -1 rest_delay = -1 travel_delay = -1 rest_wait_both = true rest_wait_ancestor = true explore_wall_bias = 1 show_travel_trail = true bindkey = [Tab] CMD_AUTOFIGHT_NOMOVE autofight_nomove_fires = false tile_show_threat_levels = tough, nasty, unusual tile_realtime_anim = true show_more = false force_more_message += A malevolent force force_more_message += A sentinel's mark forms upon you force_more_message += [Tt]raining target.*reached force_more_message += You have finished your manual force_more_message += You now have enough gold force_more_message += You miscast force_more_message += You fail to use your ability force_more_message += seems mollified force_more_message += burns out of existence # These items are good, but can be dangerous if used accidentally. # Prompt for them, as the game does not do this automatically. autoinscribe += potions? of ambrosia:!q autoinscribe += potions? of berserk rage:!q autoinscribe += potions? of cancellation:!q autoinscribe += scrolls? of poison:!r autoinscribe += scrolls? of silence:!r autoinscribe += scrolls? of teleportation:!r # Nets are rare; don't want to accidentally throw or automatically quiver them. autoinscribe += throwing net:!f =f autopickup_exceptions += scrolls? of noise spell_slot ^= Blink:B spell_slot ^= Passage of Golubria:G spell_slot ^= Passwall:P spell_slot ^= Swiftness:S spell_slot ^= Apportation:Z macros += M o ===explore_skip_doors macros += M 1 Za macros += M 2 Zb macros += M 3 Zc { local reset_travel_open_doors = false -- Auto-explore while avoiding doors. Doesn't affect other automatic travel. function explore_skip_doors() crawl.setopt "travel_open_doors = avoid" crawl.do_commands {"CMD_EXPLORE"} reset_travel_open_doors = true end local prev_hp = you.hp() local prev_mp = you.mp() -- Displays a message every time HP/MP changes, showing the delta, previous and -- new values. local function update_hp_mp_changes() local stat_msg_parts = {} local function stat_msg_part(name, new, old, pos_colour, neg_colour) if old == new then return end local colour = new > old and pos_colour or neg_colour stat_msg_parts[#stat_msg_parts + 1] = ("%s <%s>%+d (%d -> <%s>%d)"):format( name, colour, new - old, colour, old, colour, new, colour) end local hp = you.hp() local mp = you.mp() stat_msg_part("HP", hp, prev_hp, "lightgreen", "red") stat_msg_part("MP", mp, prev_mp, "lightblue", "blue") if #stat_msg_parts > 0 then crawl.formatted_mpr(table.concat(stat_msg_parts, ", ") .. ".") end prev_hp, prev_mp = hp, mp end local prev_mut_overview = you.mutation_overview() -- Displays a message and forces a "-- more --" prompt when mutations change. -- -- The alternative of simply adding "force_more_message += mutation:" forces a -- "-- more --" prompt for each message, which can be annoying if many mutations -- change in a single turn. local function update_mut_changes() local mut_overview = you.mutation_overview() if mut_overview ~= prev_mut_overview then local msg = "Your mutations changed!" local display_muts_key = crawl.get_command "CMD_DISPLAY_MUTATIONS" if display_muts_key then msg = msg .. " Press " .. display_muts_key .. " to see them." end crawl.mpr(msg, "mutation") crawl.more() end prev_mut_overview = mut_overview end local prev_dangerous_foe_count -- Update the list of lethal foes in our line of sight, and force a -- "-- more --" prompt if a new lethal foe appeared since the last call. -- -- Note that this isn't perfect: if a different foe enters our line of sight -- within the same turn another of the same name leaves, we will not be able -- to tell them apart. This could be fixed if Crawl exposed mIDs here. local function update_dangerous_foes() local just_started = not prev_dangerous_foe_count if just_started then prev_dangerous_foe_count = {} end local MTHRT_NASTY = 3 -- This enum value is not exposed anywhere. local los = you.los() local dangerous_foe_count = {} for x = -los,los do for y = -los,los do local mons = monster.get_monster_at(x, y) if mons and not mons:is_safe() and mons:threat() >= MTHRT_NASTY then local name = mons:name() dangerous_foe_count[name] = (dangerous_foe_count[name] or 0) + 1 end end end local dangerous_foes = {} for name, count in pairs(dangerous_foe_count) do local prev_count = prev_dangerous_foe_count[name] or 0 if count > prev_count then local str = name if count > prev_count + 1 then str = tostring(count - prev_count) .. " x " .. str end dangerous_foes[#dangerous_foes + 1] = str end end if #dangerous_foes > 0 then crawl.mpr(("Lethal monster%s %s: %s."):format( #dangerous_foes > 1 and "s" or "", just_started and "here" or "entered view", table.concat(dangerous_foes, ", ")), "warning") crawl.more() end prev_dangerous_foe_count = dangerous_foe_count end local display_skills = crawl.hints_type() ~= "tutorial" and you.turns() == 0 function ready() if reset_travel_open_doors then crawl.setopt "travel_open_doors = open" reset_travel_open_doors = false end -- Open the skills menu if we've just started a game. -- We could do this outside of ready(), but then the initial "Welcome" -- messages won't be printed yet. if display_skills then crawl.do_commands {"CMD_DISPLAY_SKILLS"} display_skills = false end -- update_hp_mp_changes() -- Disabled as it's noisy and not very useful. update_dangerous_foes() -- update_mut_changes() -- Disabled as it's too spammy when existing -- mutations are unsuppressed (TODO) end }