macros += M S ===save_with_message macros += M \{13} ===set_target_skill unusual_monster_items = wand,disto,curare menu_arrow_control = false force_spell_targeter = force_ability_targeter = explore_auto_rest = true explore_delay = 1 equip_bar = true bold_brightens_foreground = true item_glyph = item_glyph += potion:blue item_glyph += scroll:white #watch out for confusion with useless being darkgrey item_glyph += helmet:darkgrey item_glyph += hat:magenta item_glyph += axe:darkgrey item_glyph += book:brown item_glyph += manual:white item_glyph += jewellery:green item_glyph += jewellery.*artefact:lightgreen item_glyph += wand:yellow item_glyph += rod:yellow item_glyph += magical staff:brown use_animations = show_travel_trail = false pickup_menu = false pickup_menu_limit = 0 travel_key_stop = false ############### # Spell Slots ##################################################### ############### # spells that we don't normally want to use (list might change): # animate skeleton, corona, all summons, confusing touch, corpse rot, # cure poison, searing ray, slow, sticks to snakes, inner flame, passwall, # portal projectile, teleport other, tukima's dance, alistair's intoxication, # cause fear, leda's liquefaction, petrify, force lance, ignite poison, # metabolic englaciation, silence, twisted resurrection, simulacrum, # darkness, discord # spells that will (nearly) always have the same letter... # not many attack spells here spell_slot += Airstrike:aAeEiIrRsStTkK spell_slot += Alistair's intoxication:aiAIsnSNlLtToOxXcCrR spell_slot += Animate armour:aAerERnNimIMoOuUtT spell_slot += Animate dead:adADeEnNiImMtT spell_slot += Apportation:aAnNpPoOrRtTiI spell_slot += Blink:bBkKlLiInN spell_slot += Borgnjor's revivification:brBRsnSNoeOEvVgiGIjJfFcCaAtT spell_slot += Borgnjor's vile clutch:bvcBVCsehSEHoilOILruRUgtGTnNjJ spell_slot += Call canine familiar:cfCFlerLERaAnmNMiI spell_slot += Call imp:ciCIlpLPamAM spell_slot += Cause fear:cfCFerERaAuUsS spell_slot += Chain lightning:clCLngNGhiHIaAtT spell_slot += Confusing touch:ctCTghGHoOnuNUfFsSiI spell_slot += Conjure ball lightning:cblCBLegEGoaiOAInNjhJHutUTrR spell_slot += Conjure flame:cfCFeEolOLnaNAjmJMuUrR spell_slot += Dazzling flash:dfDFghGHalALzZsSiInN spell_slot += Death channel:dcDChlHLeEaAtnTN spell_slot += Death's door:dDsrSReoEOaAtThH spell_slot += Discord:dDiIsScCoOrR spell_slot += Disjunction:JdDnNiIsSjJuUcCtToO spell_slot += Dispel undead:duDUlLinINsSpePEaA spell_slot += Dispersal:dDlLiIsSpPeErRaA spell_slot += Dragon's call:dcDCslSLraRAgGoOnN spell_slot += Ensorcelled hibernation:ehEHdnDNiIsbSBoOrRcCaAltLT spell_slot += Eringya's noxious bog:enbENBsgSGroROixIXyuYUaA spell_slot += Fire storm:fsFSemEMitITroRO spell_slot += Fireball:fFlLiIrReEbBaA spell_slot += Foxfire:fFeEoOxXiIrR spell_slot += Freeze:fFeErRzZ spell_slot += Freezing cloud:fcFCgdGDrlRLeoEOuUzZiInN spell_slot += Frozen ramparts:frFRnsNSaAomOMzpZPeEtT spell_slot += Fulminant prism:fpFPtmTMurURliLIsSnNaA spell_slot += Gell's gravitas:gGsSerERlaLAvViItT spell_slot += Hailstorm:hHmMaAiIlLsStToOrR spell_slot += Haunt:hHtTaAuUnN spell_slot += Ignite poison:ipIPenENgoGOsStT spell_slot += Ignition:iInNgGtToO spell_slot += Infestation:iInNfFeEsStTaAoO spell_slot += Inner flame:ifIFreREnlNLaAmM spell_slot += Irradiate:iIeErRaAdDtT spell_slot += Iskenderun's battlesphere:ibIBseSEaAktKTnlNLdDrpRPuhUH spell_slot += Iskenderun's mystic blast:imbIMBsctSCTylYLkaKAeEnNdDrRuU spell_slot += Leda's liquefaction:lLsnSNeiEIdqDQauAUfFcCtToO spell_slot += Lee's rapid deconstruction:lrdLRDsnSNeaEApcPCioIOtTuU spell_slot += Lehudib's crystal spear:lcsLCSrRepEPhyHYuaUAdtDTiIbB spell_slot += Lesser beckoning:lbLBrgRGeEscSCkKoOnNiI spell_slot += Lightning bolt:lbLBgtGTioIOhHnN spell_slot += Magic dart:mdMDctCTaAgrGRiI spell_slot += Malign gateway:mgMGnyNYaAltLTieIEwW spell_slot += Manifold assault:maMAdtDTsSnNiIfuFUolOL spell_slot += Maxwell's capacitive coupling:mcMCsegSEGaoAOxpuXPUwWlLiItnTNvV spell_slot += Mephitic cloud:mcMCdDelELpoPOhuHUiItT spell_slot += Metabolic englaciation:meMEcnCNtgTGalALbBoOiI spell_slot += Monstrous menagerie:mMseSEoOnNaAtgTGrRuiUI spell_slot += Olgreb's toxic radiance:otrOTRsceSCElaLAgxdGXDiIbnBN spell_slot += Orb of destruction:odODbnBNreREsStTuUcCiI spell_slot += Ozocubu's armour:oaOAsrSRzZmMcCuUbB spell_slot += Ozocubu's refrigeration:orORsnSNzeZEfFcCuiUIbgBGaAtT spell_slot += Passage of golubria:pgPGeaEAoOslSLuUbBrRiI spell_slot += Passwall:pPlLaAsSwW spell_slot += Petrify:pPyYeEtTrRiIfF spell_slot += Poisonous vapours:pvPVsSoaOAiIuUnrNR spell_slot += Polar vortex:pvPVrxRXoOlLatATeE spell_slot += Sandblast:sStTaAnNdDbBlL spell_slot += Searing ray:srSRgyGYeaEAiInN spell_slot += Shatter:sSrRhHaAtTeE spell_slot += Shock:sSkKhHoOcC spell_slot += Silence:sSeEiIlLnNcC spell_slot += Slow:sSwWlLoO spell_slot += Spellforged servitor:sSdrDRpePElvLViIftFToOgG spell_slot += Spider form:sfSFrmRMpoPOiIdDeE spell_slot += Starburst:sStTaArRbBuU spell_slot += Static discharge:sdSDceCEtiTIaAhHrRgG spell_slot += Sticky flame:sfSFyeYEtlTLiaIAcmCMkK spell_slot += Sting:sSgGtTiInN spell_slot += Stone arrow:saSAewEWtrTRoOnN spell_slot += Sublimation of blood:sbSBndNDulULoOiImMaAtT spell_slot += Summon forest:sfSFntNTuoUOmrMReE spell_slot += Summon horrible things:shtSHTneNEuoUOmriMRIgGbBlL spell_slot += Summon hydra:shSHnaNAuyUYmdMDrRoO spell_slot += Summon ice beast:sibSIBnetNETucUCmaMAoO spell_slot += Summon lightning spire:slSLngeNGEuipUIPmMhrHRotOT spell_slot += Summon mana viper:smvSMVnarNARuiUIpPeEoO spell_slot += Summon small mammal:smSMnlNLuaUAoO spell_slot += Swiftness:sSwWiIfFtTnNeE spell_slot += Teleport other:toTOrReElhLHpP spell_slot += Tukima's dance:tdTDseSEuaUAknKNicICmM spell_slot += Vampiric draining:vdVDcgCGarARmMpiPInN spell_slot += Yara's violent unravelling:yvuYVUstgSTGainAINroROlLeE # Use defaults that don't intersect other assignments. # Some spells are missing from the above lists and should be given better # defaults than this at some point. spell_slot += .*:ZXUMKGukl ############# # Autofight ########################################################## ############# autofight_stop = 70 ############## # Autopickup ######################################################### ############## autopickup = $?!+"/| ae := autopickup_exceptions ae = ae += useless_item #ae += dangerous_item ae += evil_item ae += amulet of (faith|guardian spirit|inaccuracy|magic regeneration) ae += amulet of (reflection|regeneration|the acrobat) ae += ring of (attention|flight|poison resistance|positive energy) ae += ring of (resist corrosion|see invisible|stealth|teleportation|wizardry) ae += potions? of lignification ae += scrolls? of immolation : if you.race() ~= "Vampire" then ae += potion of blood : end ae += staff of .* default_friendly_pickup = none autopickup_no_burden = true { local function melding_all() local form = you.transform() if form == "storm" or form == "dragon" or form == "snake" then return true end return false end local function autopickup(it, name) if it.stacks() then return true end if it.is_useless then return false end if it.class(true) == "book" then return true end if name:find("scroll") and (name:find("poison") or name:find("vulnerability")) or name:find("potion") and name:find("mutation") or (name:find("curare") or name:find("throwing net")) and not melding_all() then return true end if name:find("dangerous_item") or name:find("evil_item") then return false end if it.artefact then return true end if name:find("rune of Zot") or name:find(" gem") then return true end local class = it.class(true) if class == "armour" then if melding_all() then return false end local good_slots = {cloak="Cloak", helmet="Helmet", gloves="Gloves", boots="Boots"} st, _ = it.subtype() if good_slots[st] ~= nil and items.equipped_at(good_slots[st]) == nil then return true end if name:find("gold dragon") or name:find("crystal") then return true end if name:find("dragon") then arm = items.equipped_at("Body Armour") if arm ~= nil and not arm.name():find("nodragon") then return true end end end if class == "weapon" then if melding_all() then return false end if name:find("triple crossbow") then return true end if you.xl() < 15 and (name:find("longbow") or name:find("arbalest")) then return true end if name:find("demon") or name:find("quick") or name:find("double") or name:find("eveningstar") or name:find("lajatang") or name:find("triple sword") or name:find("executioner") or name:find("hand cannon") then weap = items.equipped_at("Weapon") if weap ~= nil and not weap.name():find("norare") then return true end end end if class == "talisman" then if you.xl() < 15 or you.transform() ~= "" then return true end end end clear_autopickup_funcs() add_autopickup_func(autopickup) } ########## # Travel ############################################################## ########## travel_delay = -1 rest_delay = -1 explore_stop = items,stairs,shops,altars,portals,branches,runed_doors explore_stop += greedy_pickup,greedy_pickup_gold,greedy_visited_item_stack explore_stop += glowing_items,transporter stop := runrest_stop_message ignore := runrest_ignore_message stop = ignore = stop += god:^($|[^J]|J($|[^i]|i($|[^y]))) stop += The alarm trap emits a blaring wail stop += A sentinel's mark forms upon you stop += You are starting to lose your buoyancy stop += You start to feel a little slower stop += Your transformation is almost over stop += Your skin is crawling a little less now stop += Your magical contamination has completely faded away stop += found.*trap stop += You have blundered into a Zot trap stop += You fall into a shaft stop += Deactivating autopickup stop += Your icy armour starts to melt stop += you are ready to make a new stop += you are ready to hop once more : if you.race() == "Ghoul" then stop += flesh rotting away : end ignore += bardiche of holy wrath glows black briefly ignore += You can no longer pass through a line of other dancers ignore += talk: ignore += talk_visual: ignore += friend_spell: ignore += friend_enchant: ignore += friend_action: ignore += sound: ignore += You feel.*sick ignore += disappears in a puff of smoke ignore += engulfed in a cloud of smoke ignore += safely over a trap ignore += Jiyva gurgles merrily ignore += Jiyva appreciates your sacrifice ignore += Divide and consume ignore += You hear.*splatter ignore += You hear.*slurping noise ignore += You feel.*less hungry ignore += You feel.*better ignore += You feel your power returning ignore += engulfed in a cloud of smoke ignore += standing in the rain ignore += engulfed in white fluffiness ignore += A.*toadstool withers and dies ignore += toadstools? grows ignore += You walk carefully through the ignore += You found a web trap! runrest_ignore_poison = 2:10 runrest_ignore_monster += butterfly:1 ########### # Prompts ########################################################### ########### more := force_more_message more = more += grants you a more += Your scales start more += Careful! more += Found a gateway leading out of the Abyss more += Found .* abyssal rune of Zot more += You are starting to lose your buoyancy more += You start to feel a little slower more += Your transformation is almost over more += You have a feeling this form more += You feel yourself come back to life more += You fall through a shaft more += The alarm trap emits a blaring wail more += time is quickly running out more += life is in your own hands more += dispelling energy hits you more += You convulse #more += god:(sends|finds|silent|anger) more += divine experience more += You have finished your manual more += You are (blasted|electrocuted)! more += Your surroundings flicker more += The writing blurs in front of your eyes more += Space warps.* around you more += Space bends around you more += The blast of calcifying dust hits you more += You feel less protected from missiles more += you are ready to make a new more += offers you knowledge of ############# # Interface ######################################################### ############# hp_warning = 35 show_gold_turns = true show_game_turns = true show_inventory_weights = true default_manual_training = true skill_focus = false clear_messages = true auto_exclude = ################ # Inscriptions ######################################################## ################ autoinscribe += distortion:!w autoinscribe += potion.*mutation:!q autoinscribe += potion.*berserk rage:!q autoinscribe += potion.*lignif:!q autoinscribe += scroll.*torment:!r autoinscribe += scroll.*silence:!r autoinscribe += of faith:!P ########## # Macros ########################################################## ########## #bindkey = [&] CMD_NO_CMD_DEFAULT ######### # Notes ############################################################## ######### dump_order = header,hiscore,stats,misc,mutations,skills,spells,inventory dump_order += messages,screenshot,monlist,kills,notes,vaults,action_counts ood_interesting = 6 note_hp_percent = 20 note_skill_levels = 1,3,6,9,12,15,18,21,24,27 note_all_spells = true note_items = note_items += of Zot note_messages = note_messages += Your scales start note_messages += protects you from harm note_messages += You fall through a shaft note_monsters = note_monsters += orb of fire, ancient lich, electric golem ################# # Miscellaneous ############################################# ################# char_set = ascii cset = cloud:xa4 cset = cloud_weak:xa4 cset = cloud_fading:xa4 cset = cloud_terminal:xa4 cset_ascii=item_orb:0 use_fake_player_cursor = true { skill_list = {"Fighting","Short Blades","Long Blades","Axes","Maces & Flails", "Polearms","Staves","Unarmed Combat","Ranged Weapons", "Throwing","Armour","Dodging","Shields","Spellcasting", "Conjurations","Hexes","Summonings","Necromancy", "Translocations","Fire Magic","Ice Magic", "Air Magic","Earth Magic","Alchemy","Invocations", "Evocations","Stealth","Shapeshifting"} 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.mpr(sk .. " reached " .. c_persist.target_skill .. ".") 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.mpr(str) --crawl.formatted_mpr("Choose a target skill level: ", "prompt") crawl.mpr("Choose a target skill level: ") 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 function ttt() crawl.formatted_mpr(items.equipped_at("Armour").name(), "prompt") end }