: 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 .. ">" .. "." .. "" 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 } ###############################################################################################