: gVersion = "0.33"
: gRcRevision = "18"
: gPreset = "Normal"
#: gPreset = "Streak"
#: gPreset = "RealTime"
#: gPreset = "TurnCount"
: gCurrentConfig = {}
: gInitCompleted = false
: gRuntimeChecks = {}
: gIsSafeMove = false
: gIsFreeAutofight = false
{
gPresetConfig = {
cfgNormal = {
allowRest = true,
allowAutoExplore = true,
autofightStop = 70,
autopickupString = "$?!+(/}",
avoidShallow = false,
defaultAutopickup = "true",
fewerAnimations = false,
fewerTravelInterrupts = true,
forceMores = "normal",
gems = true,
hpWarning = 33,
safeConsumables = false,
safeMove = true,
showGameTime = "true",
travelOpenDoors = "true",
warnHatches = "true",
},
cfgStreak = {
allowRest = true,
allowAutoExplore = true,
autofightStop = 80,
autopickupString = "$?!+(/}",
avoidShallow = false,
defaultAutopickup = "true",
fewerAnimations = false,
fewerTravelInterrupts = false,
forceMores = "harsh",
gems = false,
hpWarning = 50,
safeConsumables = true,
safeMove = true,
showGameTime = "true",
travelOpenDoors = "false",
warnHatches = "true",
},
cfgRealTime = {
allowRest = true,
allowAutoExplore = true,
autofightStop = 25,
autopickupString = "$?!+(/}=",
avoidShallow = false,
defaultAutopickup = "true",
fewerAnimations = true,
fewerTravelInterrupts = true,
forceMores = "lax",
gems = false,
hpWarning = 33,
safeConsumables = false,
safeMove = false,
showGameTime = "true",
travelOpenDoors = "true",
warnHatches = "false",
},
cfgTurnCount = {
allowRest = false,
allowAutoExplore = false,
autofightStop = 80,
autopickupString = "",
avoidShallow = true,
defaultAutopickup = "false",
fewerAnimations = false,
fewerTravelInterrupts = false,
forceMores = "harsh",
gems = true,
hpWarning = 33,
safeConsumables = true,
safeMove = true,
showGameTime = "false",
travelOpenDoors = "false",
warnHatches = "true",
},
} --
function fSetSafeMove(enable)
local lMoveOrRun = enable and "CMD_MOVE" or "CMD_RUN"
crawl.setopt("bindkey = [K] " .. lMoveOrRun .. "_UP")
crawl.setopt("bindkey = [U] " .. lMoveOrRun .. "_UP_RIGHT")
crawl.setopt("bindkey = [L] " .. lMoveOrRun .. "_RIGHT")
crawl.setopt("bindkey = [N] " .. lMoveOrRun .. "_DOWN_RIGHT")
crawl.setopt("bindkey = [J] " .. lMoveOrRun .. "_DOWN")
crawl.setopt("bindkey = [B] " .. lMoveOrRun .. "_DOWN_LEFT")
crawl.setopt("bindkey = [H] " .. lMoveOrRun .. "_LEFT")
crawl.setopt("bindkey = [Y] " .. lMoveOrRun .. "_UP_LEFT")
local lSafeOrRegular = enable and "CMD_SAFE_MOVE" or "CMD_MOVE"
crawl.setopt("bindkey = [k] " .. lSafeOrRegular .. "_UP")
crawl.setopt("bindkey = [u] " .. lSafeOrRegular .. "_UP_RIGHT")
crawl.setopt("bindkey = [l] " .. lSafeOrRegular .. "_RIGHT")
crawl.setopt("bindkey = [n] " .. lSafeOrRegular .. "_DOWN_RIGHT")
crawl.setopt("bindkey = [j] " .. lSafeOrRegular .. "_DOWN")
crawl.setopt("bindkey = [b] " .. lSafeOrRegular .. "_DOWN_LEFT")
crawl.setopt("bindkey = [h] " .. lSafeOrRegular .. "_LEFT")
crawl.setopt("bindkey = [y] " .. lSafeOrRegular .. "_UP_LEFT")
end
function fToggleSafeMove()
gIsSafeMove = not gIsSafeMove
fSetSafeMove(gIsSafeMove)
if gIsSafeMove then
crawl.mpr("Safe move is ON")
else
crawl.mpr("Safe move is OFF")
end
end
function fSetFreeAutofight(enable)
if enable then
crawl.setopt("autofight_stop = 0")
else
crawl.setopt("autofight_stop = " .. gCurrentConfig.autofightStop)
end
end
function fToggleFreeAutofight()
gIsFreeAutofight = not gIsFreeAutofight
fSetFreeAutofight(gIsFreeAutofight)
if gIsFreeAutofight then
crawl.mpr("Free autofight is ON")
else
crawl.mpr("Free autofight is OFF")
end
end
function fSetSafeConsumables(enable)
if enable then
crawl.setopt("autoinscribe += unidentified.*(potion):!q")
crawl.setopt("autoinscribe += unidentified.*(scroll):!r")
crawl.setopt("autoinscribe += potions? of experience:!q")
crawl.setopt("autoinscribe += potions? of haste:!q")
crawl.setopt("autoinscribe += potions? of invisibility:!q")
crawl.setopt("autoinscribe += potions? of heal wounds:!q")
crawl.setopt("autoinscribe += potions? of curing:!q")
crawl.setopt("autoinscribe += potions? of might:!q")
crawl.setopt("autoinscribe += potions? of brilliance:!q")
crawl.setopt("autoinscribe += potions? of magic:!q")
crawl.setopt("autoinscribe += potions? of cancellation:!q")
crawl.setopt("autoinscribe += potions? of resistance:!q")
crawl.setopt("autoinscribe += potions? of enlightenment:!q")
crawl.setopt("autoinscribe += potions? of mutation:!q")
crawl.setopt("autoinscribe += potions? of ambrosia:!q")
crawl.setopt("autoinscribe += potions? of berserk rage:!q")
crawl.setopt("autoinscribe += potions? of moonshine:!q")
crawl.setopt("autoinscribe += scrolls? of acquirement:!r")
crawl.setopt("autoinscribe += scrolls? of butterflies:!r")
crawl.setopt("autoinscribe += scrolls? of teleportation:!r")
crawl.setopt("autoinscribe += scrolls? of fear:!r")
crawl.setopt("autoinscribe += scrolls? of fog:!r")
crawl.setopt("autoinscribe += scrolls? of summoning:!r")
crawl.setopt("autoinscribe += scrolls? of silence:!r")
crawl.setopt("autoinscribe += scrolls? of torment:!r")
crawl.setopt("autoinscribe += scrolls? of poison:!r")
crawl.setopt("autoinscribe += scrolls? of revelation:!r")
end
end
function fApplyPreset(preset)
gCurrentConfig = gPresetConfig["cfg" .. preset];
if gCurrentConfig.allowRest then
else
crawl.setopt("bindkey = [5] CMD_NO_CMD_DEFAULT")
crawl.setopt("bindkey = [NP5] CMD_NO_CMD_DEFAULT")
end
if gCurrentConfig.allowAutoExplore then
crawl.setopt("bindkey = [`] CMD_EXPLORE")
else
crawl.setopt("bindkey = [`] CMD_NO_CMD_DEFAULT")
end
crawl.setopt("autofight_stop = " .. gCurrentConfig.autofightStop)
crawl.setopt("autopickup = " .. gCurrentConfig.autopickupString)
if gCurrentConfig.avoidShallow then
table.insert(gRuntimeChecks, "fCheckAvoidShallow")
end
crawl.setopt("default_autopickup = " .. gCurrentConfig.defaultAutopickup)
if gCurrentConfig.fewerAnimations then
crawl.setopt("use_animations -= beam, player")
end
if gCurrentConfig.fewerTravelInterrupts then
crawl.setopt("interrupt_travel -= sense_monster")
crawl.setopt("interrupt_travel -= ancestor_hp")
end
fSetForceMores(gCurrentConfig.forceMores)
if gCurrentConfig.gems then
crawl.setopt("always_show_gems = true")
crawl.setopt("more_gem_info = true")
else
crawl.setopt("always_show_gems = false")
crawl.setopt("more_gem_info = false")
end
crawl.setopt("hp_warning = " .. gCurrentConfig.hpWarning)
crawl.setopt("travel_open_doors = " .. gCurrentConfig.travelOpenDoors)
fSetSafeConsumables(gCurrentConfig.safeConsumables)
gIsSafeMove = gCurrentConfig.safeMove
fSetSafeMove(gIsSafeMove)
crawl.setopt("show_game_time = " .. gCurrentConfig.showGameTime)
crawl.setopt("warn_hatches = " .. gCurrentConfig.warnHatches)
end
function fStartOpenSkillMenu()
if you.turns() == 0 then
crawl.sendkeys("m")
end
end
function fdump()
return "Config for " .. gVersion .. ", revision " .. gRcRevision .. ", preset " .. gPreset .. "\n"
end
function fGetConfigInfo()
local lText =
"Using config for version " .. gVersion .. " (revision " .. gRcRevision .. ")"
.. "\n"
.. "Using preset " .. gPreset .. ""
return lText
end
function fPrintConfigInfo()
local lInfo = fGetConfigInfo()
local lfPretty = function (c)
return "<".. c .. ">" .. "." .. "".. c .. ">"
end
local lUpper = lfPretty("black")..lfPretty("red")..lfPretty("green")..lfPretty("brown")..lfPretty("blue")
..lfPretty("lightmagenta")..lfPretty("cyan")..lfPretty("white")
local lLower = lfPretty("lightgrey") ..lfPretty("lightred")..lfPretty("lightgreen")..lfPretty("yellow")
..lfPretty("lightblue")..lfPretty("magenta")..lfPretty("lightcyan")..lfPretty("darkgrey")
crawl.mpr(
lUpper .. lUpper ..lUpper ..lUpper ..lUpper
.. "\n"
.. lInfo .. "\n" .. lLower .. lLower .. lLower .. lLower .. lLower
)
end
function fOnInit()
if gInitCompleted then return
else
fPrintConfigInfo()
fApplyPreset(gPreset)
fSetMacros()
fStartOpenSkillMenu()
table.insert(gRuntimeChecks, "fSmartUnusual")
gInitCompleted = true
end
end
function fCheckAvoidShallow()
if you.race() == "Merfolk" or you.race() == "Barachi" or you.race() == "Octopode" or you.race() == "Pale Draconian"
or you.race() == "Naga" or you.race() == "Armataur" or you.race() == "Troll" or you.race() == "Oni"
or you.transform() == "snake"
or you.flying()
then
crawl.setopt("travel_avoid_terrain = ")
else
crawl.setopt("travel_avoid_terrain = shallow water, deep water")
end
end
function fSmartUnusual()
local lDefaultUnusual = "wand,disto,chaos,curare,atropa,disjunction,throwing net,resistance"
crawl.setopt("unusual_monster_items = " .. lDefaultUnusual)
if you.res_poison() <= 0 then
crawl.setopt("unusual_monster_items += " .. "venom")
end
if you.res_fire() <= 0 then
crawl.setopt("unusual_monster_items += " .. "flaming")
end
if you.res_cold() <= 0 then
crawl.setopt("unusual_monster_items += " .. "freezing")
end
if you.res_draining() <= 0 then
crawl.setopt("unusual_monster_items += " .. "draining")
end
if you.res_shock() <= 0 then
crawl.setopt("unusual_monster_items += " .. "electrocution")
end
if you.race() == "Revenant" or you.race() == "Mummy" or you.race() == "Demonspawn" or you.race() == "Poltergeist" or
you.transform() == "death" or you.transform() == "bat" then
crawl.setopt("unusual_monster_items += " .. "holy")
end
if you.race() ~= "Revenant" and you.race() ~= "Mummy" and you.race() ~= "Poltergeist" and you.race() ~= "Formicid"
and you.transform() ~= "death" then
crawl.setopt("unusual_monster_items += " .. "datura")
end
end
function safe_upstairs()
if you.branch() == "Gauntlet" or you.branch() == "Trove" then
crawl.formatted_mpr("Really exit portal? (1 or y to confirm)", "prompt")
local res = crawl.getch()
if string.lower(string.char(res)) == "y" or string.lower(string.char(res)) == "1" then
crawl.sendkeys("<")
end
else
crawl.sendkeys("<")
end
end
function c_message(text, channel)
local function hrs()
local res = math.floor(you.real_time() / 3600)
return res >= 10 and "" .. res or "0" .. res
end
local function mins()
local res = math.floor(math.fmod(you.real_time(), 3600) / 60)
return res >= 10 and "" .. res or "0" .. res
end
local function secs()
local res = math.fmod(you.real_time(), 60)
return res >= 10 and "" .. res or "0" .. res
end
if text:find("Welcome to") or text:find("feel its power") or text:find("are not amused") then
crawl.take_note("Time: " .. hrs() .. "h " .. mins() .. "m " .. secs() .. "s")
end
end
function fRunChecks()
util.foreach(gRuntimeChecks, function(fname) _G[fname]() end)
end
function ready()
fOnInit()
fRunChecks()
end
}
###############################################################################################
####################################### General config ########################################
###############################################################################################
default_manual_training = true
level_map_cursor_step = 10
rest_wait_both = true
rest_wait_ancestor = true
equip_unequip = true
easy_confirm = all
autofight_caught = true
fail_severity_to_confirm = -1
fail_severity_to_quiver = 5
enable_recast_spell = false
single_column_item_menus = false
hp_colour = 66:yellow, 33:red
mp_colour = 66:cyan, 33:blue
enemy_hp_colour = green lightgreen yellow brown red darkgray
monster_item_view_coordinates = false
auto_hide_spells=true
skill_focus = false
show_more = false
dump_message_count = 100
travel_delay = -1
show_travel_trail = true
fire_order = launcher, inscribed, throwing, evokable, spell
note_chat_messages = false
dump_order = fdump
dump_order += header,-,hiscore,stats,mutations,apostles,-,inventory,-,skills,skill_gains,-
dump_order += spells,-,action_counts,-,misc,overview,-,screenshot,monlist,messages,-
dump_order += notes,screenshots,-,kills,-,turns_by_place, kills_by_place,-,vaults
bindkey = [o] CMD_NO_CMD_DEFAULT
bindkey = [p] CMD_NO_CMD_DEFAULT
bindkey = [Ins] CMD_PREV_CMD_AGAIN
###############################################################################################
####################################### Ad hoc settings #######################################
###############################################################################################
force_spell_targeter += Iskenderun's Mystic Blast
force_spell_targeter += Permafrost Eruption
confirm_action += Silence
###############################################################################################
######################################## Autoinscribe #########################################
###############################################################################################
autoinscribe += atropa:blind & confuse
autoinscribe += curare:slow @f1
autoinscribe += datura:frenzy
autoinscribe += phial of floods:@v1
autoinscribe += gell's gravitambourine:@v1
autoinscribe += wand of acid:@v2
autoinscribe += wand of light:@v2
autoinscribe += wand of quicksilver:@v2
autoinscribe += lightning rod:@v3
autoinscribe += tin of tremorstones:@v4
autoinscribe += poisoned darts?:@Q1
autoinscribe += boomerangs?:@Q2
autoinscribe += (.*[^r] javelins?):@Q3
autoinscribe += silver javelins?:@Q4
autoinscribe += (.*[^f] stones?):@Q5
autoinscribe += throwing nets?:@f2
autoinscribe += disjunction:@f3
autoinscribe += large rocks?:@f4
autoinscribe += ring of:@P
###############################################################################################
################################### Force mores & flashes #####################################
###############################################################################################
{
function fApplyLaxForceMores()
crawl.setopt("force_more_message += malevolent force")
crawl.setopt("force_more_message += You fail to use")
crawl.setopt("force_more_message += you miscast")
end
function fApplyNormalForceMores()
crawl.setopt("force_more_message += mastered")
crawl.setopt("force_more_message += You have finished your manual")
crawl.setopt("force_more_message += grants you")
crawl.setopt("force_more_message += you have drawn")
crawl.setopt("force_more_message += the power ruling this place vanishes")
crawl.setopt("force_more_message += Jiyva alters your")
crawl.setopt("force_more_message += Safe move is OFF")
crawl.setopt("force_more_message += Free autofight is ON")
end
function fApplyHarshForceMores()
crawl.setopt("force_more_message += channel is weakening")
crawl.setopt("force_more_message += reaping aura is weakening")
crawl.setopt("force_more_message += you are being watched by something")
crawl.setopt("force_more_message += Your transformation is almost over")
crawl.setopt("force_more_message += less wooden")
end
function fSetForceMores(setting)
fApplyLaxForceMores()
if setting == "normal" then
fApplyNormalForceMores()
end
if setting == "harsh" then
fApplyNormalForceMores()
fApplyHarshForceMores()
end
end
}
flash_screen_message += the power ruling this place vanishes
flash_screen_message += you feel your power leaking away
flash_screen_message += Jiyva alters your
{
function c_answer_prompt(prompt)
if prompt:find("near your battlesphere") or prompt:find("near your fire vort")
or prompt:find("near your spectral") or prompt:find("near your hellfire mortar")
or prompt:find("near your spellspark servitor") then
return true
end
end
}
###############################################################################################
########################################### Macros ############################################
###############################################################################################
{
function fSetMacros()
if gPreset == "TurnCount" then
crawl.setopt("macros+= M \\{F1} zG")
crawl.setopt("macros+= M \\{F3} F*")
end
if gPreset ~= "RealTime" then
crawl.setopt("macros+= M < ===safe_upstairs")
end
end
}
macros+= M \{F2} ===fPrintAllMonsInfo
macros+= M \{F4} ===fToggleFreeAutofight
macros+= M \{F5} Q*
macros+= M 0 ===fToggleSafeMove
###############################################################################################
######################################## Item sorting #########################################
###############################################################################################
item_slot ^= potion of experience:f
item_slot ^= potion of haste:g
item_slot ^= potion of invisibility:h
item_slot ^= potion of heal wounds:i
item_slot ^= potion of curing:j
item_slot ^= potion of berserk rage:k
item_slot ^= potion of might:l
item_slot ^= potion of attraction:m
item_slot ^= potion of brilliance:n
item_slot ^= potion of magic:o
item_slot ^= potion of cancellation:p
item_slot ^= potion of resistance:s
item_slot ^= potion of enlightenment:t
item_slot ^= potion of lignification:u
item_slot ^= potion of ambrosia:x
item_slot ^= potion of mutation:y
item_slot ^= potion of moonshine:z
item_slot ^= scroll of identify:H
item_slot ^= scroll of acquirement:I
item_slot ^= scroll of blink:J
item_slot ^= scroll of butterflies:K
item_slot ^= scroll of teleportation:L
item_slot ^= scroll of fear:M
item_slot ^= scroll of fog:N
item_slot ^= scroll of summoning:O
item_slot ^= scroll of silence:P
item_slot ^= scroll of vulnerability:Q
item_slot ^= scroll of torment:R
item_slot ^= scroll of poison:S
item_slot ^= scroll of immolation:T
item_slot ^= scroll of revelation:U
item_slot ^= scroll of noise:V
item_slot ^= scroll of brand weapon:W
item_slot ^= scroll of enchant weapon:X
item_slot ^= scroll of enchant armour:Y
item_slot ^= scroll of amnesia:Z
item_slot ^= wand of digging:v
item_slot ^= wand of acid:A
item_slot ^= wand of light:A
item_slot ^= wand of quicksilver:A
item_slot ^= wand of charming:B
item_slot ^= wand of paralysis:B
item_slot ^= wand of iceblast:C
item_slot ^= wand of roots:C
item_slot ^= wand of warping:C
item_slot ^= wand of mindburst:D
item_slot ^= wand of polymorph:E
item_slot ^= wand of flame:F
item_slot ^= lightning rod:G
item_slot ^= phial of floods:a
item_slot ^= gell's gravitambourine:a
item_slot ^= tin of tremorstones:b
item_slot ^= condenser vane:b
item_slot ^= phantom mirror:c
item_slot ^= box of beasts:d
item_slot ^= sack of spiders:d
item_slot ^= (dagger|short sword|rapier|quick blade|staff of|quarterstaff|lajatang|whip|mace|flail|morningstar):-wqer
item_slot ^= (eveningstar|demon whip|hand axe|war axe|broad axe|spear|trident|demon trident|partisan|long sword|falchion):-wqer
item_slot ^= (scimitar|demon blade|double sword|sacred scourge|trishula|eudemon blade|sling|shortbow):-wqer
###############################################################################################
######################################## Spell slots #########################################
###############################################################################################
spell_slot ^= Apportation:a
spell_slot ^= Foxfire:fx
spell_slot ^= Freeze:fz
spell_slot ^= Kinetic Grapnel:t
spell_slot ^= Kiss of Death:d
spell_slot ^= Magic Dart:d
spell_slot ^= Poisonous Vapours:vV
spell_slot ^= Sandblast:st
spell_slot ^= Shock:s
spell_slot ^= Slow:sw
spell_slot ^= Soul Splinter:st
spell_slot ^= Summon Small Mammal:sa
spell_slot ^= Blink:+B
spell_slot ^= Call Imp:bcC
spell_slot ^= Construct Spike Launcher:sS
spell_slot ^= Ensorcelled Hibernation:eE
spell_slot ^= Grave Claw:gc
spell_slot ^= Jinxbite:xt
spell_slot ^= Lesser Beckoning:+q
spell_slot ^= Momentum Strike:st
spell_slot ^= Mercury Arrow:wrWeER
spell_slot ^= Scorch:sc
spell_slot ^= Searing Ray:srg
spell_slot ^= Static Discharge:sdSD
spell_slot ^= Sublimation of Blood:T
spell_slot ^= Call Canine Familiar:cC
spell_slot ^= Confusing Touch:tc
spell_slot ^= Dazzling Flash:df
spell_slot ^= Frozen Ramparts:Rfrt
spell_slot ^= Fugue of the Fallen:Ffe
spell_slot ^= Hailstorm:tsT
spell_slot ^= Inner Flame:fFeE
spell_slot ^= Launch Clockwork Bee:bceBCE
spell_slot ^= Maxwell's Portable Piledriver:tT
spell_slot ^= Mephitic Cloud:+c
spell_slot ^= Ozocubu's Armour:bzZ
spell_slot ^= Passwall:+w
spell_slot ^= Sigil of Binding:sbgd
spell_slot ^= Stone Arrow:rst
spell_slot ^= Summon Ice Beast:sbSB
spell_slot ^= Swiftness:SWws
spell_slot ^= Teleport Other:etET
spell_slot ^= Tukima's Dance:tdTD
spell_slot ^= Vampiric Draining:vdVD
spell_slot ^= Volatile Blastmotes:vbVB
spell_slot ^=Airstrike:a
spell_slot ^=Anguish:A
spell_slot ^=Animate Dead:D
spell_slot ^=Awaken Armour:a
spell_slot ^=Brom's Barrelling Boulder:be
spell_slot ^=Cause Fear:cfF
spell_slot ^=Cigotuvi's Putrefaction:a
spell_slot ^=Dimensional Bullseye:a
spell_slot ^=Dispel Undead:de
spell_slot ^=Eringya's Surprising Crocodile:CS
spell_slot ^=Flame Wave:efEF
spell_slot ^=Forge Blazeheart Golem:G
spell_slot ^=Forge Lightning Spire:G
spell_slot ^=Fulminant Prism:t
spell_slot ^=Ignite Poison:gG
spell_slot ^=Iskenderun's Battlesphere:b
spell_slot ^=Iskenderun's Mystic Blast:T
spell_slot ^=Leda's Liquefaction:d
spell_slot ^=Martyr's Knell:eE
spell_slot ^=Olgreb's Toxic Radiance:RT
spell_slot ^=Passage of Golubria:+G
spell_slot ^=Petrify:t
spell_slot ^=Rending Blade:RBE
spell_slot ^=Sticky Flame:ct
spell_slot ^=Summon Seismosaurus Egg:GgESe
spell_slot ^=Vhi's Electric Charge:+v
spell_slot ^=Alistair's Intoxication:a
spell_slot ^=Alistair's Walking Alembic:aW
spell_slot ^=Arcjolt:a
spell_slot ^=Borgnjor's Vile Clutch:vV
spell_slot ^=Curse of Agony:A
spell_slot ^=Detonation Catalyst:dDcCtT
spell_slot ^=Fireball:f
spell_slot ^=Freezing Cloud:fc
spell_slot ^=Hoarfrost Cannonade:F
spell_slot ^=Irradiate:RrEe
spell_slot ^=Lee's Rapid Deconstruction:dr
spell_slot ^=Metabolic Englaciation:a
spell_slot ^=Nazja's Percussive Tempering:T
spell_slot ^=Silence:a
spell_slot ^=Summon Forest:F
spell_slot ^=Summon Mana Viper:V
spell_slot ^=Yara's Violent Unravelling:VReE
spell_slot ^=Bombard:rd
spell_slot ^=Conjure Ball Lightning:cb
spell_slot ^=Death Channel:C
spell_slot ^=Dispersal:dD
spell_slot ^=Eringya's Noxious Bog:x
spell_slot ^=Forge Monarch Bomb:B
spell_slot ^=Forge Phalanx Beetle:BxX
spell_slot ^=Fortress Blast:FB
spell_slot ^=Gell's Gavotte:g
spell_slot ^=Permafrost Eruption:te
spell_slot ^=Plasma Beam:e
spell_slot ^=Sculpt Simulacrum:sS
spell_slot ^=Starburst:sb
spell_slot ^=Summon Cactus Giant:C
spell_slot ^=Diamond Sawblades:DSs
spell_slot ^=Enfeeble:eEfF
spell_slot ^=Haunt:tT
spell_slot ^=Hellfire Mortar:eE
spell_slot ^=Magnavolt:gte
spell_slot ^=Malign Gateway:G
spell_slot ^=Manifold Assault:A
spell_slot ^=Orb of Destruction:d
spell_slot ^=Ozocubu's Refrigeration:zb
spell_slot ^=Rimeblight:rt
spell_slot ^=Spellspark Servitor:a
spell_slot ^=Sphinx Sisters:e
spell_slot ^=Splinterfrost Shell:SE
spell_slot ^=Summon Hydra:S
spell_slot ^=Borgnjor's Revivification:a
spell_slot ^=Discord:Dd
spell_slot ^=Disjunction:D
spell_slot ^=Fulsome Fusillade:FE
spell_slot ^=Ignition:gt
spell_slot ^=Infestation:te
spell_slot ^=Lehudib's Crystal Spear:dtec
spell_slot ^=Maxwell's Capacitive Coupling:+C
spell_slot ^=Summon Horrible Things:S
spell_slot ^=Chain Lightning:cg
spell_slot ^=Death's Door:D
spell_slot ^=Dragon's Call:DC
spell_slot ^=Fire Storm:fetFET
spell_slot ^=Platinum Paragon:GT
spell_slot ^=Polar Vortex:xX
spell_slot ^=Shatter:ST
###############################################################################################
####################################### Ability slots #########################################
###############################################################################################
ability_slot ^=Draw Escape:q
ability_slot ^=Draw Destruction:w
ability_slot ^=Draw Summoning:e
ability_slot ^=Draw Stack:r
###############################################################################################
####################################### Glyphs & colors #######################################
###############################################################################################
feature += Zot trap { x2040, red, red, red}
feature += archmage's trap { x2040, magenta, magenta, magenta}
feature += tyrant's trap { x2040, cyan, cyan, cyan}
feature += devourer's trap { x2040, yellow, yellow, yellow}
feature += harlequin's { x2040, green, green, green}
feature += rock wall { , , brown }
feature += translucent rock wall { , , yellow }
feature += stone wall { , , white }
feature += translucent stone wall { , , lightred }
feature += metal wall { , , lightcyan }
feature += crystal wall { , , green }
feature += unnaturally { , , magenta }
feature += translucent unnaturally { , , cyan }
feature += slime covered { , , lightgreen}
feature += spike launcher { x2350, red, red, red}
feature += passage of golubria { x0472, green, green, green}
mon_glyph += warg : x045B
mon_glyph += aizul : x015C
mon_glyph += satyr : x010B
mon_glyph += ilsuiw : x0271
mon_glyph += barachi : x0424
mon_glyph += hellion : brown
mon_glyph += neqoxec : x2125
mon_glyph += anaconda : red
mon_glyph += arcanist : a
mon_glyph += jeremiah : x0424
mon_glyph += nagaraja : x0147
mon_glyph += scorpion : x015F
mon_glyph += skyshark : x03DC
mon_glyph += gargoyle : x018D
mon_glyph += acid blob : yellow
mon_glyph += ice devil : lightblue
mon_glyph += wind drake : cyan
mon_glyph += ice fiend : lightblue
mon_glyph += occultist : a
mon_glyph += blink frog : lightmagenta
mon_glyph += hell hound : x045B
mon_glyph += marrowcuda : x03DC
mon_glyph += orb spider : x015B
mon_glyph += saint roka : x00F6
mon_glyph += bound soul : x03A9 white
mon_glyph += royal mummy : lightblue
mon_glyph += orc warlord : x00F6
mon_glyph += necromancer : a
mon_glyph += war gargoyle : x018D
mon_glyph += ancient lich : yellow
mon_glyph += orc sorcerer : x00F6
mon_glyph += shock serpent : x015A
mon_glyph += merfolk avatar : x0271
mon_glyph += dancing weapon : x01AA
mon_glyph += sphinx marauder : white
mon_glyph += guardian sphinx : x0124
mon_glyph += molten gargoyle : x018D
mon_glyph += centaur warrior : x010B
mon_glyph += demonic crawler : x0161
mon_glyph += orc high priest : x00F6
mon_glyph += the royal jelly : x053A
mon_glyph += very ugly thing : x00FC
mon_glyph += yaktaur captain : x010B
mon_glyph += diamond sawblade : x2055
mon_glyph += emperor scorpion : x015F
mon_glyph += guardian serpent : x015C
mon_glyph += deep elf sorcerer : x00EB
mon_glyph += salamander tyrant : x0147
mon_glyph += quicksilver dragon : x04A8
mon_glyph += ironbound convoker : a
mon_glyph += vampire bloodprince : white
mon_glyph += ironbound preserver : a
mon_glyph += deep elf death mage : x00EB
mon_glyph += deep elf annihilator : x00EB
mon_glyph += deep elf blademaster : x00EB
mon_glyph += deep elf high priest : x00EB
mon_glyph += elemental wellspring : x04A8 white
mon_glyph += ironbound frostheart : a
mon_glyph += quicksilver elemental : x0112
mon_glyph += deep elf demonologist : x00EB
mon_glyph += deep elf elementalist : x00EB
mon_glyph += merged slime creature : x0132
mon_glyph += deep elf master archer : x00EB brown
mon_glyph += alligator snapping turtle : x0167
item_glyph += darts? : x2301
item_glyph += poisoned : green
item_glyph += curare : cyan
item_glyph += atropa : yellow
item_glyph += datura : lightred
item_glyph += disjunction : magenta
item_glyph += stones? : x037D
item_glyph += boomerangs? : x037D
item_glyph += large rocks? : x037D
item_glyph += throwing nets? : x037D
item_glyph += javelins? : x2197
item_glyph += (.*[^r] javelins?) : brown
item_glyph += silver javelins? : white
item_glyph += wand of digging : brown
item_glyph += wand of acid : yellow
item_glyph += wand of light : yellow
item_glyph += wand of quicksilver : yellow
item_glyph += wand of charming : green
item_glyph += wand of paralysis : green
item_glyph += wand of iceblast : magenta
item_glyph += wand of roots : magenta
item_glyph += wand of warping : magenta
item_glyph += wand of mindburst : cyan
item_glyph += wand of polymorph : white
item_glyph += wand of flame : lightred
item_glyph += unidentified.*(wand) : blue
item_glyph += helmet : x00A2
item_glyph += shield : x0298
item_glyph += gloves : x00A5
item_glyph += boots : x00A3
item_glyph += corpse : †
item_glyph += tin of tremorstones : }
item_glyph += moonstone : =
item_glyph += soapstone : "
item_glyph += useless_item.*(large rocks?) : x037D darkgray
# calling this from fOnInit doesn't work for item_glyphs for whatever reason, have to call here
:fSetCustomGlyphs()
{
function fSetCustomGlyphs()
if gPreset == "RealTime" then
crawl.setopt("item_glyph += chain mail : x03A0 darkgray")
crawl.setopt("item_glyph += plate armour : x03A0 white")
crawl.setopt("item_glyph += crystal plate : x03A0 cyan")
crawl.setopt("item_glyph += storm dragon scales : x03A0 magenta")
crawl.setopt("item_glyph += swamp dragon scales : x03A0 green")
crawl.setopt("item_glyph += golden dragon scales : x03A0 yellow")
crawl.setopt("item_glyph += fire dragon scales : x03A0 lightred")
crawl.setopt("item_glyph += pearl dragon scales : x03A0 magenta")
crawl.setopt("item_glyph += quicksilver dragon scales : x03A0 lightgreen")
crawl.setopt("item_glyph += war axe : x03C1 darkgray")
crawl.setopt("item_glyph += broad axe : x03C1 white")
crawl.setopt("item_glyph += (ego|artifact).*(war axe|broad axe) : x03C1 green")
crawl.setopt("item_glyph += kite shield : x0298 white")
crawl.setopt("item_glyph += tower shield : x039e white")
crawl.setopt("item_glyph += helmet : [ darkgray")
crawl.setopt("item_glyph += hat : x00A2 magenta")
crawl.setopt("item_glyph += buckler : [ darkgray")
crawl.setopt("menu_colour ^= green:amulet of regeneration")
crawl.setopt("menu_colour ^= green:amulet of reflection")
crawl.setopt("menu_colour ^= green:enchant armour")
crawl.setopt("menu_colour ^= green:enchant weapon")
crawl.setopt("menu_colour ^= lightred:equipped")
-- move elsewhere or don't idc
crawl.setopt("autopickup_exceptions += >stone")
crawl.setopt("autopickup_exceptions += atropa")
crawl.setopt("autopickup_exceptions += >datura")
crawl.setopt("autopickup_exceptions += >amnesia")
crawl.setopt("autopickup_exceptions += >brilliance")
end
end
}
###############################################################################################
################################### Extended monster info #####################################
###############################################################################################
{
gSpeciesXPApts = {
["Armataur"] = -1,
["Barachi"] = 0,
["Coglin"] = 0,
["Deep Elf"] = -1,
["Demigod"] = -2,
["Demonspawn"] = -1,
["Djinni"] = 1,
["Draconian"] = -1,
["Felid"] = -1,
["Formicid"] = 1,
["Gargoyle"] = 0,
["Gnoll"] = 0,
["Human"] = 0,
["Kobold"] = 1,
["Merfolk"] = 0,
["Minotaur"] = -1,
["Mountain Dwarf"] = -1,
["Mummy"] = -1,
["Naga"] = 0,
["Octopode"] = 0,
["Oni"] = 0,
["Poltergeist"] = -1,
["Revenant"] = 0,
["Spriggan"] = -1,
["Tengu"] = 0,
["Troll"] = -1,
["Vine Stalker"] = 0,
} --
gSpeciesXPFactors = {
["Armataur"] = 1.414,
["Barachi"] = 1.1892,
["Coglin"] = 1.1892,
["Deep Elf"] = 1.414,
["Demigod"] = 1.6817,
["Demonspawn"] = 1.414,
["Djinni"] = 1,
["Draconian"] = 1.414,
["Felid"] = 1.414,
["Formicid"] = 1,
["Gargoyle"] = 1.1892,
["Gnoll"] = 1.1892,
["Human"] = 1.1892,
["Kobold"] = 1,
["Merfolk"] = 1.1892,
["Minotaur"] = 1.414,
["Mountain Dwarf"] = 1.414,
["Mummy"] = 1.414,
["Naga"] = 1.1892,
["Octopode"] = 1.1892,
["Oni"] = 1.1892,
["Poltergeist"] = 1.414,
["Revenant"] = 1.1892,
["Spriggan"] = 1.414,
["Tengu"] = 1.1892,
["Troll"] = 1.414,
["Vine Stalker"] = 1.1892,
} --
function gPower(base, exp)
if exp <= 0 then
return 1
elseif exp == 1 then
return base
else
return base * gPower(base, exp-1)
end
end
function fXPForXL(xl)
local lRawXP
if xl == 1 then
lRawXP = 1
elseif xl == 2 then
lRawXP = 10
elseif xl == 3 then
lRawXP = 30
elseif xl == 4 then
lRawXP = 70
elseif xl < 13 then
lRawXP = (xl - 4) * 10 + 60 * gPower(2, xl - 4) + 10
elseif xl >= 27 then
lRawXP = 1059325
else
lRawXP = 4235 * (xl - 12) * (xl - 12) + 5985 * (xl - 12) + 16675
end
return (lRawXP - 1) * (gSpeciesXPFactors[you.species()])
end
function fXpForNextLevel(plus)
if plus == 0 then
return (100 - you.xl_progress()) * (fXPForXL(you.xl() + 1) - fXPForXL(you.xl())) / 100
else
return fXPForXL(you.xl() + plus + 1) - fXPForXL(you.xl() + 1) + fXpForNextLevel(0)
end
end
local inf = 'inf'
gMonsInfoDict = {
["jessica"] = {HD = 1, XP = 37, MR = 10,},
["adder"] = {HD = 2, XP = 13, MR = 10,},
["gnoll"] = {HD = 2, XP = 14, MR = 10,},
["robin"] = {HD = 2, XP = 15, MR = 10,},
["terence"] = {HD = 2, XP = 36, MR = 10,},
["bombardier beetle"] = {HD = 2, XP = 47, MR = 20,},
["natasha"] = {HD = 3, XP = 35, MR = 20,},
["orc wizard"] = {HD = 3, XP = 35, MR = 20,},
["iguana"] = {HD = 3, XP = 36, MR = 10,},
["ijyb"] = {HD = 3, XP = 36, MR = 10,},
["crazy yiuf"] = {HD = 3, XP = 40, MR = 10,},
["orc priest"] = {HD = 3, XP = 41, MR = 20,},
["hound"] = {HD = 3, XP = 42, MR = 10,},
["jelly"] = {HD = 3, XP = 42, MR = 10,},
["killer bee"] = {HD = 3, XP = 62, MR = 10,},
["dowan"] = {HD = 3, XP = 69, MR = 20,},
["wight"] = {HD = 3, XP = 73, MR = 20,},
["menkaure"] = {HD = 3, XP = 171, MR = 20,},
["sigmund"] = {HD = 3, XP = 229, MR = 10,},
["ribbon worm"] = {HD = 4, XP = 4, MR = 10,},
["scorpion"] = {HD = 4, XP = 84, MR = 20,},
["centaur"] = {HD = 4, XP = 113, MR = 20,},
["orc warrior"] = {HD = 4, XP = 134, MR = 20,},
["duvessa"] = {HD = 4, XP = 146, MR = 40,},
["edmund"] = {HD = 4, XP = 165, MR = 20,},
["steam dragon"] = {HD = 4, XP = 185, MR = 20,},
["grum"] = {HD = 4, XP = 191, MR = 10,},
["eustachio"] = {HD = 4, XP = 200, MR = 20,},
["ogre"] = {HD = 5, XP = 120, MR = 20,},
["ice beast"] = {HD = 5, XP = 131, MR = 20,},
["sky beast"] = {HD = 5, XP = 131, MR = 20,},
["pargi"] = {HD = 5, XP = 135, MR = 10,},
["water moccasin"] = {HD = 5, XP = 150, MR = 20,},
["acid dragon"] = {HD = 5, XP = 156, MR = 20,},
["vampire mosquito"] = {HD = 5, XP = 180, MR = 20,},
["wyvern"] = {HD = 5, XP = 209, MR = 20,},
["blorkula"] = {HD = 5, XP = 226, MR = 20,},
["psyche"] = {HD = 5, XP = 343, MR = 60,},
["maggie"] = {HD = 5, XP = 399, MR = 20,},
["maurice"] = {HD = 5, XP = 526, MR = 40,},
["black bear"] = {HD = 6, XP = 129, MR = 20,},
["blink frog"] = {HD = 6, XP = 267, MR = 40,},
["prince ribbit"] = {HD = 6, XP = 276, MR = 40,},
["grinder"] = {HD = 6, XP = 279, MR = 20,},
["hornet"] = {HD = 6, XP = 284, MR = 30,},
["joseph"] = {HD = 6, XP = 461, MR = 40,},
["pikel"] = {HD = 6, XP = 647, MR = 20,},
["lodul"] = {HD = 6, XP = 754, MR = 40,},
["sonja"] = {HD = 6, XP = 780, MR = 10,},
["erolcha"] = {HD = 6, XP = 867, MR = 60,},
["phantom"] = {HD = 7, XP = 105, MR = 40,},
["yak"] = {HD = 7, XP = 206, MR = 20,},
["komodo dragon"] = {HD = 8, XP = 364, MR = 40,},
["jeremiah"] = {HD = 8, XP = 386, MR = 40,},
["ice statue"] = {HD = 8, XP = 452, MR = inf,},
["snorg"] = {HD = 8, XP = 946, MR = 60,},
["elephant"] = {HD = 9, XP = 486, MR = 60,},
["urug"] = {HD = 9, XP = 795, MR = 40,},
["erica"] = {HD = 9, XP = 839, MR = 40,},
["harold"] = {HD = 9, XP = 875, MR = 60,},
["nessos"] = {HD = 9, XP = 1043, MR = 20,},
["nergalle"] = {HD = 10, XP = 779, MR = 60,},
["two-headed ogre"] = {HD = 10, XP = 826, MR = 40,},
["ogre mage"] = {HD = 10, XP = 851, MR = 80,},
["fannar"] = {HD = 10, XP = 882, MR = 80,},
["josephine"] = {HD = 10, XP = 912, MR = 60,},
["azrael"] = {HD = 11, XP = 992, MR = 40,},
["agnes"] = {HD = 11, XP = 1454, MR = 100,},
["boulder beetle"] = {HD = 12, XP = 831, MR = 40,},
["ice dragon"] = {HD = 12, XP = 870, MR = 40,},
["fire dragon"] = {HD = 12, XP = 914, MR = 60,},
["ettin"] = {HD = 12, XP = 933, MR = 40,},
["hydra"] = {HD = 13, XP = 864, MR = 60,},
["ghost moth"] = {HD = 13, XP = 1204, MR = 100,},
["louise"] = {HD = 13, XP = 1207, MR = 80,},
["death yak"] = {HD = 14, XP = 813, MR = 100,},
["catoblepas"] = {HD = 14, XP = 846, MR = 100,},
["roxanne"] = {HD = 14, XP = 1368, MR = inf,},
["donald"] = {HD = 14, XP = 1374, MR = 100,},
["aizul"] = {HD = 14, XP = 1386, MR = 120,},
["storm dragon"] = {HD = 14, XP = 1402, MR = 100,},
["frances"] = {HD = 14, XP = 1518, MR = 100,},
["murray"] = {HD = 14, XP = 1586, MR = inf,},
["guardian serpent"] = {HD = 15, XP = 460, MR = 60,},
["orc warlord"] = {HD = 15, XP = 1153, MR = 60,},
["nagaraja"] = {HD = 15, XP = 1333, MR = 140,},
["asterion"] = {HD = 15, XP = 1709, MR = 100,},
["mlioglotl"] = {HD = 15, XP = 1805, MR = 120,},
["zenata"] = {HD = 15, XP = 1864, MR = 100,},
["jorgrun"] = {HD = 15, XP = 1873, MR = 120,},
["wiglaf"] = {HD = 15, XP = 1913, MR = 100,},
["enchantress"] = {HD = 15, XP = 2328, MR = 160,},
["geryon"] = {HD = 15, XP = 2622, MR = 120,},
["stone giant"] = {HD = 16, XP = 1090, MR = 80,},
["frost giant"] = {HD = 16, XP = 1258, MR = 80,},
["fire giant"] = {HD = 16, XP = 1290, MR = 80,},
["ilsuiw"] = {HD = 16, XP = 1338, MR = 140,},
["kirke"] = {HD = 16, XP = 1439, MR = 100,},
["polyphemus"] = {HD = 16, XP = 1540, MR = 60,},
["quicksilver dragon"] = {HD = 16, XP = 1656, MR = 140,},
["grunn"] = {HD = 16, XP = 1718, MR = 100,},
["rupert"] = {HD = 16, XP = 1862, MR = 100,},
["vashnia"] = {HD = 16, XP = 3195, MR = 120,},
["dispater"] = {HD = 16, XP = 5159, MR = inf,},
["gloorx vloq"] = {HD = 16, XP = 6736, MR = inf,},
["dissolution"] = {HD = 16, XP = 7370, MR = 120,},
["tengu reaver"] = {HD = 17, XP = 1417, MR = 60,},
["shadow dragon"] = {HD = 17, XP = 1418, MR = 120,},
["xak'krixis"] = {HD = 17, XP = 1492, MR = 80,},
["serpent of hell"] = {HD = 17, XP = 6925, MR = 180,},
["mnoleg"] = {HD = 17, XP = 6890, MR = inf,},
["asmodeus"] = {HD = 17, XP = 8128, MR = inf,},
["jory"] = {HD = 18, XP = 2381, MR = 160,},
["nikola"] = {HD = 18, XP = 2438, MR = 120,},
["golden dragon"] = {HD = 18, XP = 2484, MR = 180,},
["saint roka"] = {HD = 18, XP = 2900, MR = 80,},
["mara"] = {HD = 18, XP = 4430, MR = 140,},
["khufu"] = {HD = 18, XP = 4893, MR = 160,},
["ignacio"] = {HD = 18, XP = 6807, MR = 160,},
["ereshkigal"] = {HD = 18, XP = 6976, MR = inf,},
["mennas"] = {HD = 19, XP = 4370, MR = 160,},
["lom lobon"] = {HD = 19, XP = 6087, MR = inf,},
["gastronok"] = {HD = 20, XP = 1506, MR = 80,},
["lich"] = {HD = 20, XP = 1745, MR = inf,},
["norris"] = {HD = 20, XP = 2329, MR = 140,},
["bai suzhen"] = {HD = 20, XP = 3138, MR = 100,},
["sojobo"] = {HD = 20, XP = 3463, MR = 140,},
["xtahua"] = {HD = 20, XP = 3664, MR = 180,},
["josephina"] = {HD = 21, XP = 3438, MR = inf,},
["royal jelly"] = {HD = 21, XP = 7603, MR = 180,},
["cerebov"] = {HD = 21, XP = 11754, MR = inf,},
["margery"] = {HD = 22, XP = 2809, MR = 140,},
["boris"] = {HD = 22, XP = 3205, MR = inf,},
["antaeus"] = {HD = 22, XP = 8877, MR = inf,},
["tiamat"] = {HD = 22, XP = 5133, MR = 140,},
["vv"] = {HD = 23, XP = 3226, MR = 140,},
["arachne"] = {HD = 23, XP = 3955, MR = 80,},
["frederick"] = {HD = 23, XP = 5151, MR = 140,},
["parghit"] = {HD = 27, XP = 3146, MR = 140,},
["ancient lich"] = {HD = 27, XP = 4758, MR = inf,},
["dread lich"] = {HD = 27, XP = 5171, MR = inf,},
["lernaean hydra"] = {HD = 30, XP = 3031, MR = 120,},
} --
function fFindBySubstrInDict(str, dict)
for k, v in pairs(dict) do
if string.find(string.lower(str), string.lower(k)) then
return v
end
end
return nil
end
function fPrintMonsInfo(monsName)
local lMonsInfo = fFindBySubstrInDict(monsName, gMonsInfoDict)
if lMonsInfo then
crawl.formatted_mpr(string.format("\r%-26s %-10s %-10s %-10s\n", monsName, lMonsInfo["HD"], lMonsInfo["MR"], lMonsInfo["XP"]))
return
end
end
function fPrintAllMonsInfo()
local i, j, lMons, lMonsSet
local lMonsList = {}
local n = you.los()
for i = -n,n do
for j = -n,n do
lMons = monster.get_monster_at(i, j)
if lMons then
table.insert(lMonsList, lMons)
end
end
end
local lHeader = string.format("%-26s %-10s %-10s %-10s", "Name", "HD", "MR", "XP")
if #lMonsList > 0 then
crawl.formatted_mpr("\r\n\r" .. lHeader .. "\n\r------------------------------------------------------\n")
end
util.map(fPrintMonsInfo, util.keys(util.set(util.map(function(m) return m:name() end, lMonsList))))
if you.xl() < 27 then
crawl.formatted_mpr("\r\n\rXP for next XLs: " .. fXpForNextLevel(0) .. " | " .. fXpForNextLevel(1) .. " | " .. fXpForNextLevel(2))
end
end
}
###############################################################################################