https://github.com/crawl/crawl/blob/master/crawl-ref/docs/options_guide.txt
#combo += DDFi . war axe
species += Ds
background += random
weapon += random
#############
# Autofight #
#############
autofight_fire_stop = true
autofight_stop = 60
automagic_enable = false
automagic_slot = a
automagic_stop = 50
automagic_fight = true
note_chat_messages=true
dump_message_count = 100
###########
#INTERFASE#
###########
tile_font_crt_family = DejaVu Sans Mono
tile_font_stat_family = DejaVu Sans Mono
tile_font_msg_family = DejaVu Sans Mono
tile_font_lbl_family = DejaVu Sans Mono
#tile_font_crt_family = Lucida Console
#tile_font_stat_family = Lucida Console
#tile_font_msg_family = Lucida Console
#tile_font_lbl_family = Lucida Console
tile_map_pixels = 4
allow_extended_colours=false
no_dark_brand=false
bold_brightens_foreground=true
blink_brightens_background=false
best_effort_brighten_background=false
tile_web_mouse_control = false
language = ru
display_char = wall:x2588, floor x2022
display_char = floor_magic : xb7, door_closed : x25b2
display_char = door_open : x2206, wall_magic : x2593, arch : x2229
display_char = grate : x2261, tree : x2663, altar : x2302, fountain : x03a8
display_char = rune : x03c6
mon_glyph = player : cyan @
##########
# Travel #
##########
travel_delay = -1
explore_delay = 5
show_travel_trail = false
view_delay = 300
allow_self_target = no
show_uncursed = false
easy_confirm = all
confirm_butcher = never
sort_menus = true : equipped, identified, basename, qualname, curse, qty
autofight_throw_nomove = true
autofight_caught = true
autofight_wait = true
rest_wait_both = true
explore_auto_rest = true
auto_switch = false
allow_self_target = no
#Переключатель time/turn
#show_game_time = false
equip_bar = true
explore_stop = greedy_pickup
explore_stop += stairs,shops,altars,gates
explore_stop += greedy_sacrificeable
runrest_ignore_poison = 2:10
hp_colour = 100:green, 75:yellow, 50:red, 25:lightred
mp_colour = 100:green, 75:yellow, 50:red, 25:lightred
allow_self_target = prompt
sort_menus = true
easy_confirm = all
confirm_butcher = never
easy_eat_contaminated = true
equip_unequip = true
confirm_buther = never
default_manual_training = true
dump_order += vaults
auto_butcher = true
easy_eat_chunks = true
auto_eat_chunks = true
show_god_gift = yes
assign_item_slot = backward
cloud_status = true
#не нашел справку по этой строке, может она вообще не работает
#pickup_mode = multi
stat_colour = 7:red, 3:lightred
skill_fokus = true
hp_warning = 45
auto_sacrifice=true
#тоже не помню уже зачем оно, но пусть так останется пока
#interrupt_memorise -= hp_loss
################
# Auto Exclude #
################
#пока я не играю стабберами эти стоки вообще не нужны, только мешают комфортной игре
#auto_exclude += ancient lich, death drake, hydra, ice statue, jelly, orb of fire
#auto_exclude += [^c] wizard, ancient lich, Ereshkigal, Erolcha, eyeball, Grinder, Jory, lich
#auto_exclude += Norris, ogre-mage, orb of eyes, orc sorcerer, Rupert, sphinx, vampire knight
#auto_exclude += Agnes, Aizul, Arachne, Asterion, Blork, Boris, Crazy Yiuf, Donald, Dowan
#auto_exclude += Duvessa, Edmund, Erica, Eustachio, Fannar, Frances, Frederick, Gastronok
#auto_exclude += Grum, Harold, Ijyb, Jessica, Jorgrun, Joseph, Kirke, Louise, Mara, Maud
#auto_exclude += Maurice, Menkaure, Mennas, Natasha, Nergalle, Nessos, Nikola, Pikel
#auto_exclude += Polyphemus, Prince Ribbit, Psyche, Roxanne, Saint Roka, Sigmund, Snorg
#auto_exclude += Sojobo, Sonja, Terence, Urug, Wiglaf, Xtahua, hog, slave
#не будет работать если не будет на какую-нибудь кнопку забильжен макрос "===toggle_manual_exploration" включает/выключает force_more_message, то есть игра будет стопориться при появление ЛЮБОГО монстра в ЛОС.
{
function toggle_manual_exploration()
if (c_persist.force_more_on_new_enemy_sight == nil) then
c_persist.force_more_on_new_enemy_sight = false
end
c_persist.force_more_on_new_enemy_sight = not c_persist.force_more_on_new_enemy_sight
if (c_persist.force_more_on_new_enemy_sight) then
crawl.setopt("force_more_message += comes? into view")
crawl.mpr("Manual exploration ON.")
else
crawl.setopt("force_more_message -= comes? into view")
crawl.mpr("Manual exploration OFF.")
end
end
}
################################################
#DAMGE CALC, FORCE MORE, AUTOSTART "M" FUNCTION#
################################################
<
last_turn = you.turns()
-- Conditions are in the fm_patterns array. For now only one condition
-- per monster is allowed until (if) I get better at lua to modify
-- the script further. Each array entry works as follows:
-- pattern = monster name
-- cond = attribute to check; behaviour is defined later on
-- cutoff = if attribute's value is equal or higher, don't force more for these
-- name = an identifier for the entry in the array
fm_patterns = {
-- early threats
{pattern = "adder|gnoll", cond = "xl", cutoff = 5, name = "XL5"},
-- early poisonous threats
-- {pattern = "worker ant|scorpion", cond = "xl", cutoff = 7, name = "XL7"),
-- the frog of doom and a merry lizard
{pattern = "spiny frog|komodo dragon", cond = "xl", cutoff = 12, name = "XL12"},
-- biggest lair threats
{pattern = "death yak|dire elephant|black mamba|wolf spider|hydra", cond = "xl", cutoff = 15, name = "XL15"},
-- biggest orc threat
{pattern = "orc warlord", cond = "xl", cutoff = 17, name = "XL17"},
-- no rF
{pattern = "fire giant|balrug", cond = "rf", cutoff = 1, name = "rF1"},
-- no rC
{pattern = "ice giant|white draconian|blizzard demon|azure jelly", cond = "rc", cutoff = 1, name = "rC1"},
-- no rElec
{pattern = "spark wasp|titan", cond = "relec", cutoff = 1, name = "rE1"},
-- no rPois
{pattern = "swamp drake|swamp dragon|green draconian|golden dragon|green death", cond = "rpois", cutoff = 1, name = "rP1"},
-- no rCorr (boolean)
{pattern = "acid dragon|rust devil|acid blob", cond = "rcorr", cutoff = 999, name = "rA1"},
-- low MR (MR not directly exposed to clua yet)
-- {pattern = "basilisk|deep elf archer|bog body|faun|ogre mag", cond = "mr", cutoff = 40, name = "MR1"},
-- {pattern = "orc sorcerer|siren|satyr|great orb of eyes", cond = "mr", cutoff = 80, name = "MR2"},
-- {pattern = "merfolk avatar|vault sentinel|vampire knight|golden eye|wizard|sphinx", cond = "mr", cutoff = 120, name = "MR3"},
-- no rN
{pattern = "deep elf death mag|eidolon", cond = "rn", cutoff = 1, name = "rN1"},
-- airstrike (boolean)
{pattern = "wind drake|spriggan air mag", cond = "fly", cutoff = 999, name = "fly"},
-- HP
{pattern = "annihilator", cond = "mhp", cutoff = 120, name = "HP3"}
} -- end fm_patterns
active_fm = {}
-- Set to true to get a message when the fm change
notify_fm = false
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 == "rf" then
if active_fm[i] and you.res_fire() >= v.cutoff then
action = "-"
elseif not active_fm[i] and you.res_fire() < v.cutoff then
action = "+"
end
elseif v.cond == "rc" then
if active_fm[i] and you.res_cold() >= v.cutoff then
action = "-"
elseif not active_fm[i] and you.res_cold() < v.cutoff then
action = "+"
end
elseif v.cond == "relec" then
if active_fm[i] and you.res_shock() >= v.cutoff then
action = "-"
elseif not active_fm[i] and you.res_shock() < v.cutoff then
action = "+"
end
elseif v.cond == "rpois" then
if active_fm[i] and you.res_poison() >= v.cutoff then
action = "-"
elseif not active_fm[i] and you.res_poison() < v.cutoff then
action = "+"
end
elseif v.cond == "rcorr" then
if active_fm[i] and you.res_corr() then
action = "-"
elseif not active_fm[i] and not you.res_corr() then
action = "+"
end
elseif v.cond == "rn" then
if active_fm[i] and you.res_draining() >= v.cutoff then
action = "-"
elseif not active_fm[i] and you.res_draining() < v.cutoff then
action = "+"
end
elseif v.cond == "fly" then
if active_fm[i] and not you.flying() then
action = "-"
elseif not active_fm[i] and you.flying() then
action = "+"
end
elseif v.cond == "mhp" 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()
-- ------------- MANUAL EXPLORATION TOGGLE ---------------- --
function toggle_manual_exploration()
if (c_persist.force_more_on_new_enemy_sight == nil) then
c_persist.force_more_on_new_enemy_sight = false
end
c_persist.force_more_on_new_enemy_sight = not c_persist.force_more_on_new_enemy_sight
if (c_persist.force_more_on_new_enemy_sight) then
crawl.setopt("force_more_message += comes? into view")
crawl.mpr("Manual exploration ON.")
else
crawl.setopt("force_more_message -= comes? into view")
crawl.mpr("Manual exploration OFF.")
end
end
need_skills_opened = true
function ready()
if you.turns() == 0 and need_skills_opened then
need_skills_opened = false
crawl.sendkeys("m")
end
AnnounceDamage()
force_mores()
end
>
###############
# 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
>
####################
#AUTOPIKUP FUNCTION#
####################
{
add_autopickup_func(function(it, name)
if it.is_useless then
return false
end
if name:find("curare") then return true end
if name:find("dispersal") and (name:find("dart") or name:find("tomahawk"))
then return true end
if name:find("throwing net") then return true end
local class = it.class(true)
local armour_slots = {cloak="Cloak", helmet="Helmet", gloves="Gloves",
boots="Boots", body="Armour", shield="Shield"}
if (class == "armour") then
sub_type = it.subtype()
equipped_item = items.equipped_at(armour_slots[sub_type])
if (sub_type == "cloak") or (sub_type == "helmet") or (sub_type ==
"gloves") or (sub_type == "boots") then
if not equipped_item then
return true
else
return it.artefact or it.branded or it.ego
end
end
if (sub_type == "body") then
if equipped_item then
local armourname = equipped_item.name()
if equipped_item.artefact or equipped_item.branded or
equipped_item.ego or (equipped_item.plus > 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
end)
}
# Lua skilling by elliptic
{
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"}
function record_current_skills(maxlev)
c_persist.skill_list = { }
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.skill_list, sk)
end
end
end
function check_skills()
if not c_persist.skill_list or not c_persist.target_skill then
return
end
for _,sk in ipairs(c_persist.skill_list) do
if you.base_skill(sk) >= c_persist.target_skill then
crawl.formatted_mpr(sk .. " reached " .. c_persist.target_skill
.. ".", "prompt")
crawl.more()
c_persist.target_skill = nil
set_new_skill_training()
return
end
end
end
function set_new_skill_training()
c_persist.set_target_skill = 1
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.skill_list) 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)
end
function control(c)
return string.char(string.byte(c) - string.byte('a') + 1)
end
function save_with_message()
if you.turns() == 0 then
crawl.sendkeys("S")
return
end
crawl.formatted_mpr("Save game and exit?", "prompt")
local res = crawl.getch()
if not (string.char(res) == "y" or string.char(res) == "Y") then
crawl.formatted_mpr("Okay, then.", "prompt")
return
end
crawl.formatted_mpr("Leave a message: ", "prompt")
local res = crawl.c_input_line()
c_persist.message = res
crawl.sendkeys(control("s"))
end
function first_turn_of_game()
for key,_ in pairs(c_persist) do
if key ~= "record" then
c_persist[key] = nil
end
end
set_new_skill_training()
end
local did_first_turn = false
function ready()
if not did_first_turn then
did_first_turn = true
if you.turns() == 0 then
first_turn_of_game()
end
if c_persist.message and c_persist.message ~= "nil"
and c_persist.message ~= "" then
crawl.mpr("Message: " .. c_persist.message)
c_persist.message = nil
end
end
check_skills()
if c_persist.set_target_skill == 0 then
set_target_skill()
c_persist.set_target_skill = nil
elseif c_persist.set_target_skill then
c_persist.set_target_skill = c_persist.set_target_skill - 1
end
end
}
#########
#ALIASES#
#########
ae := autopickup_exceptions
ai := autoinscribe
as := ability_slot
item := item_glyph
is := item_slot
menu := menu_colour
more := force_more_message
ss := spell_slot
stop := runrest_stop_message
msc := message_colour
: if you.god() == "Sif Muna" then
ability_menu = false
: end
: if you.god() == "Zin" then
ae += potions? of ambro
: end
: if you.god() == "Trog" then
ae += >potions? of brilliance
ae += >potions? of berserk
: end
: if you.race() == "Tengu" then
ae += >potions? of flight
: end
: if you.race() == "Deep Dwarf" then
autofight_fire_stop = true
autofight_stop = 40
more += Found a burning altar of Makhleb
: end
: if you.god() == "Gozag" then
explore_auto_rest = false
: end
: if you.race() == "Vampire" then
ae += scrolls? of (amn|vuln|noise)
ae += >potions? of ligni
ae += >ring of (protection from mag|mag|stealth|ice|fire|pos|wiz)
ae +=