##### Crawl Init file ###############################################
# For descriptions of all options, as well as some more in-depth information
# on setting them, consult the file
# options_guide.txt
# in your /docs directory. If you can't find it, the file is also available
# online at:
# https://github.com/crawl/crawl/blob/master/crawl-ref/docs/options_guide.txt
#
# Crawl uses the first file of the following list as its option file:
# * init.txt in the -rcdir directory (if specified)
# * .crawlrc in the -rcdir directory (if specified)
# * init.txt (in the Crawl directory)
# * ~/.crawl/init.txt (Unix only)
# * ~/.crawlrc (Unix only)
# * ~/init.txt (Unix only)
# * settings/init.txt (in the Crawl directory)
##### Some basic explanation of option syntax #######################
# Lines beginning with '#' are comments. The basic syntax is:
#
# field = value or field.subfield = value
#
# Only one specification is allowed per line.
#
# The terms are typically case-insensitive except in the fairly obvious
# cases (the character's name and specifying files or directories when
# on a system that has case-sensitive filenames).
#
# White space is stripped from the beginning and end of the line, as
# well as immediately before and after the '='. If the option allows
# multiple comma/semicolon-separated terms (such as
# autopickup_exceptions), all whitespace around the separator is also
# trimmed. All other whitespace is left intact.
#
# There are three broad types of Crawl options: true/false values (booleans),
# arbitrary values, and lists of values. The first two types use only the
# simple =, with later options - which includes your options that are different
# from the defaults - overriding earlier ones. List options allow using +=, ^=,
# -=, and = to append, prepend, remove, and reset, respectively. Usually you will
# want to use += to add to a list option. Lastly, there is := which you can use
# to create an alias, like so:
# ae := autopickup_exceptions
# From there on, 'ae' will be treated as if it you typed autopickup_exceptions,
# so you can save time typing it.
#
##### Other files ###################################################
# You can include other files from your options file using the 'include'
# option. Crawl will treat it as if you copied the whole text of that file
# into your options file in that spot. You can uncomment some of the following
# lines by removing the beginning '#' to include some of the other files in
# this folder.
# Some useful, more advanced options, implemented in LUA.
# include = advanced_optioneering.txt
# Alternative vi bindings for Dvorak users.
# include = dvorak_command_keys.txt
# Alternative vi bindings for Colemak users.
# include = colemak_command_keys.txt
# Override the vi movement keys with a non-command.
# include = no_vi_command_keys.txt
# Turn the shift-vi keys into safe move, instead of run.
# include = safe_move_shift.txt
##### Ancient versions ##############################################
# If you're used to the interface of ancient versions of Crawl, you may
# get back parts of it by uncommenting the following options:
# include = 034_command_keys.txt
# And to revert monster glyph and colouring changes:
# include = 052_monster_glyphs.txt
# include = 060_monster_glyphs.txt
# include = 071_monster_glyphs.txt
# include = 080_monster_glyphs.txt
# include = 0.9_monster_glyphs.txt
# include = 0.12_monster_glyphs.txt
# include = 0.13_monster_glyphs.txt
# include = 0.14_monster_glyphs.txt
automagic_enable = true
automagic_fight = true
automagic_stop = 30
auto_butcher = very full
mp_warning = 30
show_more = false
explore_auto_rest = true
rest_wait_percent = 100
rest_wait_both = true
<
function ready()
target_skill()
AnnounceDamage()
end
>
----------------------------
---- Begin 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 ----
--------------------------
###############
# Damage Calc #
###############
{
local previous_hp = 0
local previous_mp = 0
local previous_form = ""
local was_berserk_last_turn = false
function AnnounceDamage()
local current_hp, max_hp = you.hp()
local current_mp, max_mp = you.mp()
--Things that increase hp/mp temporarily really mess with this
local current_form = you.transform()
local you_are_berserk = you.berserk()
local max_hp_increased = false
local max_hp_decreased = false
if (current_form ~= previous_form) then
if (previous_form:find("dragon") or
previous_form:find("statue") or
previous_form:find("tree") or
previous_form:find("ice")) then
max_hp_decreased = true
elseif (current_form:find("dragon") or
current_form:find("statue") or
current_form:find("tree") or
current_form:find("ice")) then
max_hp_increased = true
end
end
if (was_berserk_last_turn and not you_are_berserk) then
max_hp_decreased = true
elseif (you_are_berserk and not was_berserk_last_turn) then
max_hp_increased = true
end
--crawl.mpr(string.format("previous_form is: %s", previous_form))
--crawl.mpr(string.format("current_form is: %s", current_form))
--crawl.mpr(string.format("max_hp_increased is: %s", max_hp_increased and "True" or "False"))
--crawl.mpr(string.format("max_hp_decreased is: %s", max_hp_decreased and "True" or "False"))
--crawl.mpr(string:format("you_are_berserk is: %s", you_are_berserk and "True" or "False"))
--crawl.mpr(string:format("was_berserk_last_turn is: %s", was_berserk_last_turn and "True" or "False"))
--Skips message on initializing game
if previous_hp > 0 then
local hp_difference = previous_hp - current_hp
local mp_difference = previous_mp - current_mp
if max_hp_increased or max_hp_decreased then
if max_hp_increased then
crawl.mpr("You now have " .. current_hp .. "/" .. max_hp .. " hp.")
else
crawl.mpr("You now have " .. current_hp .. "/" .. max_hp .. " hp.")
end
else
--On losing health
if (current_hp < previous_hp) then
if current_hp <= (max_hp * 0.30) then
crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.")
elseif current_hp <= (max_hp * 0.50) then
crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.")
elseif current_hp <= (max_hp * 0.70) then
crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.")
elseif current_hp <= (max_hp * 0.90) then
crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.")
else
crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.")
end
if hp_difference > (max_hp * 0.20) then
crawl.mpr("MASSIVE DAMAGE!!")
end
end
--On gaining more than 1 health
if (current_hp > previous_hp) then
--Removes the negative sign
local health_inturn = (0 - hp_difference)
if (health_inturn > 1) and not (current_hp == max_hp) then
if current_hp <= (max_hp * 0.30) then
crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.")
elseif current_hp <= (max_hp * 0.50) then
crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.")
elseif current_hp <= (max_hp * 0.70) then
crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.")
elseif current_hp <= (max_hp * 0.90) then
crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.")
else
crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.")
end
end
if (current_hp == max_hp) then
crawl.mpr("Health restored: " .. current_hp .. "")
end
end
--On gaining more than 1 magic
if (current_mp > previous_mp) then
--Removes the negative sign
local mp_inturn = (0 - mp_difference)
if (mp_inturn > 1) and not (current_mp == max_mp) then
if current_mp < (max_mp * 0.25) then
crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.")
elseif current_mp < (max_mp * 0.50) then
crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.")
else
crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.")
end
end
if (current_mp == max_mp) then
crawl.mpr("MP restored: " .. current_mp .. "")
end
end
--On losing magic
if current_mp < previous_mp then
if current_mp <= (max_mp / 5) then
crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.")
elseif current_mp <= (max_mp / 2) then
crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.")
else
crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.")
end
end
end
end
--Set previous hp/mp and form at end of turn
previous_hp = current_hp
previous_mp = current_mp
previous_form = current_form
was_berserk_last_turn = you_are_berserk
end
}
#########################
# Aliases and Variables #
#########################
# Set Alias
menu := menu_colour
# Clear defaults
menu =
# Variables (Worst to Best)
$evil := red
$negative := brown
$danger := lightred
$warning := yellow
$boring := darkgrey
$decent := white
$good := lightblue
$positive := green
$verypositive := lightgreen
$awesome := lightmagenta
# Unusual Variables
$mp := lightcyan
$equipped := cyan
$mutation := magenta
##################
# Basic Settings #
##################
# General Categories
menu += $boring:(melded)
menu += $boring:.*useless_item.*
menu += $evil:.*evil_item.*
menu += $danger:[^n]cursed
menu += inventory:$danger:[^n]cursed
menu += inventory:$equipped:.*equipped.*
menu += $decent:.*artefact.*
# Unidentified Items
menu += $warning:^unidentified .*(jewellery|potion|scroll|wand).*
menu += $good:^unidentified .*armour.*(embroidered|dyed|glowing|shiny|runed)
menu += $good:^unidentified .*weapon.*(glowing|runed)
#################
# Various Items #
#################
# Amulets
menu += $boring:amulet of inaccuracy
menu += $good:amulet of (guardian spirit|stasis|warding)
menu += $positive:amulet of (faith|rage|resist corrosion)
menu += $verypositive:amulet of (clarity|regeneration|resist mutation|the gourmand)
# Decks (keep warning as default in case of new decks)
menu += $evil:deck of punishments
menu += $warning:deck of (changes|destruction)
menu += $decent:deck of cards
menu += $good:deck of war
menu += $positive:deck of (defence|summoning)
menu += $verypositive:deck of escape
menu += $awesome:deck of wonders
menu += $warning:deck of
# Evokables
menu += blue:inert
menu += $warning:disc of storms
menu += $warning:tome of Destruction
menu += $decent:box of beasts
menu += $decent:lantern of shadows
menu += $decent:stone of tremors
menu += $good:fans? of gales
menu += $good:lamps? of fire
menu += $good:phials? of floods
menu += $good:sack of spiders
menu += $positive:phantom mirror
menu += $mp:crystal ball of energy
# Food
menu += $evil:evil_eating
menu += $danger:rot-inducing
menu += $warning:poisonous
menu += $boring:inedible
menu += $good:bread ration
menu += $good:meat ration
menu += $good:preferred
menu += $good:(corpse|chunk)
menu += $mutation:mutagenic
# Potions
menu += $danger:potions? of berserk
menu += $decent:potions? of (flight|lignification|restore)
menu += $good:potions? of (agility|brilliance|invisibility|might|resistance)
menu += $positive:potions? of curing
menu += $verypositive:potions? of (haste|heal wounds)
menu += $awesome:potions? of (beneficial|cancellation|cure mutation|experience|gain)
menu += $mp:potions? of magic
menu += $mutation:potions? of mutation
# Rings
menu += $negative:ring of \-.*(dexterity|evasion|intelligence|protection|slaying|strength)
menu += $negative:ring of loudness
menu += $warning:ring of (fire|ice)
menu += $decent:ring of flight
menu += $good:ring of (.*evasion|invisibility|magical power|.*protection|stealth|sustain abilities|wizardry)
menu += $positive:ring of (poison resistance|protection from cold|protection from fire|protection from magic|see invisible)
menu += $verypositive:ring of (regeneration|.*slaying)
menu += $awesome:ring of teleport
# Rods
menu += $verypositive:rod
# Scrolls
menu += $danger:scrolls? of torment
menu += $boring:scrolls? of (noise|random)
menu += $decent:scrolls? of (amnesia|holy word|identify|remove curse)
menu += $good:scrolls? of (fear|fog|immolation|silence|summoning|vulnerability)
menu += $positive:scrolls? of (brand|enchant|magic mapping|recharging)
menu += $verypositive:scrolls? of acquirement
menu += $awesome:scrolls? of (blinking|teleportation)
# Staves
menu += $mp:staff of (energy|Wucad Mu)
menu += $positive:[^r]staff of
# Wands
menu += $boring:wand of (flame|frost|magic darts|random effects)
menu += $decent:wand of (confusion|enslavement|paralysis|polymorph|slowing)
menu += $good:wand of (cold|digging|disintegration|draining)
menu += $good:wand of (fire|fireball|invisibility|lightning)
menu += $positive:wand of hasting
menu += $verypositive:wand of heal wounds
menu += $awesome:wand of teleportation
# Other
menu += $negative:shield of the gong
menu += $good:throwing net
menu += $awesome:.*misc.*rune( of Zot)?
menu += $awesome:.*orb.*Zot
menu += $awesome:manual
##############
# Autopickup #
##############
# Used
# $ = gold
# ? = scroll
# ! = potion
# : = book
# " = jewellery
# / = wand
# % = food
# } = miscellaneous
# \ = rods
# | = staves
: if (you.god():find("Trog")) then
autopickup += $?!:"/%}\
: else
autopickup += $?!:"/%}\|
: end
# Unused
# ) = weapon
# ( = missiles
# [ = armour
# X = corpses
# Allows easily dropping multiple items
drop_mode += multi
# Always show the full list of items when you pick up a stack
pickup_mode += multi
# Allows followers to pick up ANYTHING (take care not to lose artefacts)
default_friendly_pickup += all
# Set Alias for Autopickup Exceptions
ae := autopickup_exceptions
ae += useless_item, dangerous_item, evil_item
# Don't pick up potion(s) of [coagulated] blood if you are not a vampire
: if you.race() ~= "Vampire" then
ae += potions? of.*blood
: end
# Autopickup artefacts
ae += 2) or armourname:find("dragon") or armourname:find("troll") then
return it.artefact
else
return it.artefact or it.branded or it.ego
end
end
return true
end
if (sub_type == "shield") then
if equipped_item then
return it.artefact or it.branded or it.ego
end
end
end
if (class == "weapon") then
if it.is_useless then return false end
if (you.xl() < 12) or (you.god():find("Nemelex")
or (you.god():find("Yred"))
or (you.god():find("Beogh"))) then
if it.branded and not (it.name() == "club") then
return false
end
end
local weapon = items.equipped_at("Weapon")
if weapon then
if (weapon.branded or weapon.artefact) then return false
else
local weapon_name = weapon.name()
local sb = you.skill("Short Blades")
local lb = you.skill("Long Blades")
local axe = you.skill("Axes")
local mf = you.skill("Maces & Flails")
local pole = you.skill("Polearms")
local staff = you.skill("Staves")
if sb > 6 then
if name:find("quick blade") then return true end
end
if lb > 8 then
if name:find("demon blade") then return true end
if name:find("bastard sword") then return true end
if name:find("double sword") then return true end
end
if lb > 14 then
if name:find("claymore") then return true end
if name:find("triple sword") then return true end
end
if axe > 8 and mf <= 8 then
if name:find("battleaxe") then return true end
if name:find("broad axe") then return true end
if name:find("war axe") then return true end
if name:find("executioner") then return true end
end
if axe > 18 then
if name:find("executioner") then return true end
end
if mf > 8 and staff <= 8 and axe <= 8 then
if name:find("eveningstar") then return true end
if name:find("demon whip") then return true end
if name:find("sacred scourge") then return true end
if name:find("dire flail") then return true end
end
if mf > 14 and staff <= 14 and axe <= 14 then
if name:find("great mace") then return true end
end
if pole > 8 and staff <= 8 then
if name:find("trident") then return true end
if name:find("demon trident") then return true end
if name:find("trishula") then return true end
end
if pole > 14 and staff <= 14 then
if name:find("glaive") then return true end
if name:find("bardiche") then return true end
end
if staff > 8 then
if name:find("lajatang") then return true end
end
end
elseif (you.skill("Unarmed Combat") < 3) then
return true
end
end
end)
}