# Lines that start with the # symbol are comments # Got suggestions/improvements? # https://github.com/HilariousDeathArtist/DCSSConfigFile # If you are playing on the same server as myself add my setting to your config by adding the following line (without the #) # include += HilariousDeathArtist.rc # To override settings you don't like, you may redefine them by specifying the setting at the bottom of your config # This setting logs all chat messages into the game notes note_chat_messages = true # Picks up all ego weapons if you worship Beogh # Set this to false before including my rcfile to disable beogh_autopickup = you.god():find("Beogh") < function ready() AnnounceDamage() --SpoilerAlert() end > ############### # Damage Calc # ############### < local previous_hp = 0 local previous_mp = 0 local previous_form = "" local was_berserk_last_turn = false function AnnounceDamage() local current_hp, max_hp = you.hp() local current_mp, max_mp = you.mp() --Things that increase hp/mp temporarily really mess with this local current_form = you.transform() local you_are_berserk = you.berserk() local max_hp_increased = false local max_hp_decreased = false if (current_form ~= previous_form) then if (previous_form:find("dragon") or previous_form:find("statue") or previous_form:find("tree") or previous_form:find("ice")) then max_hp_decreased = true elseif (current_form:find("dragon") or current_form:find("statue") or current_form:find("tree") or current_form:find("ice")) then max_hp_increased = true end end if (was_berserk_last_turn and not you_are_berserk) then max_hp_decreased = true elseif (you_are_berserk and not was_berserk_last_turn) then max_hp_increased = true end --crawl.mpr(string.format("previous_form is: %s", previous_form)) --crawl.mpr(string.format("current_form is: %s", current_form)) --crawl.mpr(string.format("max_hp_increased is: %s", max_hp_increased and "True" or "False")) --crawl.mpr(string.format("max_hp_decreased is: %s", max_hp_decreased and "True" or "False")) --crawl.mpr(string:format("you_are_berserk is: %s", you_are_berserk and "True" or "False")) --crawl.mpr(string:format("was_berserk_last_turn is: %s", was_berserk_last_turn and "True" or "False")) --Skips message on initializing game if previous_hp > 0 then local hp_difference = previous_hp - current_hp local mp_difference = previous_mp - current_mp if max_hp_increased or max_hp_decreased then if max_hp_increased then crawl.mpr("You now have " .. current_hp .. "/" .. max_hp .. " hp.") else crawl.mpr("You now have " .. current_hp .. "/" .. max_hp .. " hp.") end else --On losing health if (current_hp < previous_hp) then if current_hp <= (max_hp * 0.30) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.50) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.70) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.90) then crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") else crawl.mpr("You take " .. hp_difference .. " damage, and have " .. current_hp .. "/" .. max_hp .. " hp.") end if hp_difference > (max_hp * 0.20) then crawl.mpr("MASSIVE DAMAGE!!") end end --On gaining more than 1 health if (current_hp > previous_hp) then --Removes the negative sign local health_inturn = (0 - hp_difference) if (health_inturn > 1) and not (current_hp == max_hp) then if current_hp <= (max_hp * 0.30) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.50) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.70) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") elseif current_hp <= (max_hp * 0.90) then crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") else crawl.mpr("You regained " .. health_inturn .. " hp, and now have " .. current_hp .. "/" .. max_hp .. " hp.") end end if (current_hp == max_hp) then crawl.mpr("Health restored: " .. current_hp .. "") end end --On gaining more than 1 magic if (current_mp > previous_mp) then --Removes the negative sign local mp_inturn = (0 - mp_difference) if (mp_inturn > 1) and not (current_mp == max_mp) then if current_mp < (max_mp * 0.25) then crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.") elseif current_mp < (max_mp * 0.50) then crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.") else crawl.mpr("You regained " .. mp_inturn .. " mp, and now have " .. current_mp .. "/" .. max_mp .. " mp.") end end if (current_mp == max_mp) then crawl.mpr("MP restored: " .. current_mp .. "") end end --On losing magic if current_mp < previous_mp then if current_mp <= (max_mp / 5) then crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.") elseif current_mp <= (max_mp / 2) then crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.") else crawl.mpr("You now have " .. current_mp .. "/" ..max_mp .." mp.") end end end end --Set previous hp/mp and form at end of turn previous_hp = current_hp previous_mp = current_mp previous_form = current_form was_berserk_last_turn = you_are_berserk end > #################### # Included RcFiles # #################### # Just Message colors # include += HDAMessageColors.rc # Just Item colors # include += HDAItemColors.rc # Monster warning messages -- disabled by default # Uncomment the next line and the call to SpoilerAlert() in the ready function to use it # include += SpoilerAlerts.rc ##################### # Table of Contents # ##################### # 1. Dungeon Features # 2. Failure # 3. Bad Things # 4. Translocations # 5. Expiring Effects # 6. Religion # 7. Hell Effects # 8. Monsters # Set Alias more := force_more_message #################### # Dungeon Features # #################### # Abyssal Rune more += Found .* abyssal rune of Zot more += The mighty Pandemonium lord .* resides here # Interrupts more += You don't .* that spell more += You fail to use your ability more += You miscast.*(Blink|Borgnjor|Door|Invisibility) more += You can't (read|drink|do) more += You cannot .* while unable to breathe more += You cannot .* in your current state more += when .*silenced more += too confused more += There's something in the way more += There's nothing to (close|open) nearby more -= not good enough to have a special ability more -= You send a blast of sound all around you. more -= The monsters around you are blasted! more -= The Singing Sword trills happily. more += You are too berserk more += no means to grasp more += That item cannot be evoked more += You are held in a net more += You don't have any such object more += You can't unwield more += enough magic points more += You don't have the energy to cast that spell more += You are unable to access your magic # Bad things more += Your surroundings flicker more += You cannot teleport right now more += A sentinel's mark forms upon you more += (blundered into a|invokes the power of) Zot more += enter a teleport trap more += Ouch! That really hurt! more += dispelling energy hits you more += You are blasted by holy energy! more += You are (blasted|electrocuted)! more += You are.*(confused|poisoned) more += god:(sends|finds|silent|anger) more += You feel a surge of divine spite more += disloyal to dabble more += lose consciousness more += You are too injured to fight blindly more += calcifying dust hits more += Space warps.*around you more += Space bends around you more += watched by something more += flickers and vanishes! more += doesn't seem very happy more += is no longer charmed # Hell effects more += hell_effect: # Expiring effects more += You feel yourself slow down more += You are starting to lose your buoyancy more += Your hearing returns more += Your transformation is almost over more += You have a feeling this form more += You feel yourself come back to life more += time is quickly running out more += life is in your own hands more += You start to feel a little slower more += You feel less protected from missiles # Others more += You have reached level more += You rejoin the land of the living more += You have finished (your manual|forgetting about) more += Your scales start more += You feel monstrous more += Jiyva alters your body : if you.god() == "Xom" then more += god: : end # Dangerous monsters we force_more when first seen. # Things with ranged (or extremely fast), irresistable effects. more += ((floating|shining) eye|dream sheep|death drake).*into view more += (wretched star|apocalypse crab|death drake).*into view more += (entropy weaver|torpor snail|spriggan druid).*into view more += (vault (warden|sentinel)|merfolk (avatar|siren)).*into view more += (guardian serpent|draconian shifter|convoker|death cob).*into view more += (phantasmal warrior|air elemental).*into view # Paralysis/Petrify/Banish more += (orc sorcerer|(?scrolls? of (immolation) ae += useless_item, dangerous_item, evil_item # Don't pick up potion(s) of [coagulated] blood if you are not a vampire : if you.race() ~= "Vampire" then ae += potions? of.*blood : end # Autopickup artefacts ae += *artefact* # Armour/Weapon autopickup by rwbarton, enhanced by HDA with fixes from Bloaxor { add_autopickup_func(function(it, name) if name:find("curare") then return true end if name:find("dispersal") then return true end if name:find("throwing net") then return true end if name:find("tremorstones") then return true end local class = it.class(true) local armour_slots = {cloak="Cloak", helmet="Helmet", gloves="Gloves", boots="Boots", body="Armour", shield="Shield"} if (class == "armour") then if it.is_useless then return false end sub_type = it.subtype() equipped_item = items.equipped_at(armour_slots[sub_type]) if (sub_type == "cloak") or (sub_type == "helmet") or (sub_type == "gloves") or (sub_type == "boots") then if not equipped_item then return true else return it.artefact or it.branded or it.ego end end if (sub_type == "body") then if equipped_item then local armourname = equipped_item.name() if equipped_item.artefact or equipped_item.branded or equipped_item.ego or (equipped_item.plus > 2) or armourname:find("dragon") or armourname:find("troll") then return it.artefact else return it.artefact or it.branded or it.ego end end return true end if (sub_type == "shield") then if equipped_item then return it.artefact or it.branded or it.ego end end end if (class == "weapon") then if it.is_useless then return false end if (you.xl() < 12) or (you.god():find("Nemelex") or (you.god():find("Yred")) or (beogh_autopickup)) then if it.branded and not (it.name() == "club") then return false end end local weapon = items.equipped_at("Weapon") if weapon then if (weapon.branded or weapon.artefact) then return false else local weapon_name = weapon.name() local sb = you.skill("Short Blades") local lb = you.skill("Long Blades") local axe = you.skill("Axes") local mf = you.skill("Maces & Flails") local pole = you.skill("Polearms") local staff = you.skill("Staves") if sb > 6 then if name:find("quick blade") then return true end end if lb > 8 then if name:find("demon blade") then return true end if name:find("bastard sword") then return true end if name:find("double sword") then return true end end if lb > 14 then if name:find("claymore") then return true end if name:find("triple sword") then return true end end if axe > 8 and mf <= 8 then if name:find("battleaxe") then return true end if name:find("broad axe") then return true end if name:find("war axe") then return true end if name:find("executioner") then return true end end if axe > 18 then if name:find("executioner") then return true end end if mf > 8 and staff <= 8 and axe <= 8 then if name:find("eveningstar") then return true end if name:find("demon whip") then return true end if name:find("sacred scourge") then return true end if name:find("dire flail") then return true end end if mf > 14 and staff <= 14 and axe <= 14 then if name:find("great mace") then return true end end if pole > 8 and staff <= 8 then if name:find("trident") then return true end if name:find("demon trident") then return true end if name:find("trishula") then return true end end if pole > 14 and staff <= 14 then if name:find("glaive") then return true end if name:find("bardiche") then return true end end if staff > 8 then if name:find("lajatang") then return true end end end elseif (you.skill("Unarmed Combat") < 3) then return true end end end) } ############### # Spell slots # ############### # Set Alias for Spell Slots slot := spell_slot # Try to keep in alphabetic order (by keybind) slot += Freeze:a slot += Shroud:a slot += Blink:b slot += Call Canine Familiar:c slot += Call Imp:c slot += Confuse:c slot += Conjure Flame:c slot += Control Undead:c slot += Freezing Aura:c slot += Petrify:c slot += Spider Form:c slot += Deflect Missiles:d slot += Lethal Infusion:d slot += Repel Missiles:d slot += Fire Brand:f slot += Fireball:f slot += Apportation:g slot += Haste:h slot += Sublimation of Blood:m slot += Abjuration:q slot += Recall:r slot += Regeneration:r slot += Condensation Shield:s slot += Shroud of Golubria:s slot += Slow:s slot += Sticks to Snakes:s slot += Sticky Flame:s slot += Stoneskin:s slot += Swiftness:s slot += Passwall:w slot += Corona:v slot += Blade Hands:x slot += Iskenderun's Mystic Blast:x slot += Lightning Bolt:x slot += Mephitic Cloud:x slot += Stone Arrow:x slot += Throw Flame:x slot += Throw Frost:x slot += Throw Icicle:x slot += Vampiric Draining:x slot += Iskenderun's Battlesphere:z slot += Lee's Rapid Deconstruction:z slot += Spectral Weapon:z slot += Animate Dead:A slot += Animate Skeleton:A slot += Ozocubu's Armour:A slot += Controlled Blink:B slot += Summon Butterflies:B slot += Control Teleport:C slot += Death's Door:D slot += Flight:F slot += Cure Poison:P slot += Borgnjor's Revivification:R slot += Phase Shift:S slot += Song of Slaying:S force_targeter -=ignition force_targeter -=frozen ramparts force_targeter -=hailstorm force_targeter -=starburst ability_slot += Berserk:a ability_slot += Blink:b ability_slot += Fly|flight:f ability_slot += Stop Flying:e item_slot ^= ring of protection:A item_slot ^= ring of protection from fire:F item_slot ^= ring of protection from cold:C item_slot ^= ring of fire:f item_slot ^= ring of ice:c item_slot ^= ring of evasion:E item_slot ^= ring of intelligence:I item_slot ^= ring of poison resistance:P item_slot ^= ring of positive energy:N item_slot ^= ring of resist corrosion:X item_slot ^= ring of see invisible:V item_slot ^= ring of slaying:Q item_slot ^= ring of willpower:W item_slot ^= ring of wizardry:Z item_slot ^= scroll of blinking:D item_slot ^= scroll of fear:E item_slot ^= scroll of holy word:W item_slot ^= scroll of immolation:K item_slot ^= scroll of magic map:X item_slot ^= scroll of silence:O item_slot ^= scroll of summoning:S item_slot ^= scroll of teleportation:Y item_slot ^= scroll of vulnerability:V item_slot ^= potion of ambrosia:G item_slot ^= potion of berserk rage:T item_slot ^= potion of brilliance:B item_slot ^= potion of curing:J item_slot ^= potion of flight:L item_slot ^= potion of haste:H item_slot ^= potion of heal wounds:N item_slot ^= potion of invisibility:I item_slot ^= potion of lignification:P item_slot ^= potion of magic:M item_slot ^= potion of mutation:U item_slot ^= potion of might:M item_slot ^= potion of resistance:R item_slot ^= wand of acid:h item_slot ^= wand of digging:d item_slot ^= wand of mindburst:y item_slot ^= wand of charming:e item_slot ^= wand of flame:q item_slot ^= wand of iceblast:i item_slot ^= wand of paralysis:p item_slot ^= wand of polymorph:j item_slot ^= wand of random effects:r item_slot ^= tin of tremorstones:g item_slot ^= condenser vane:l item_slot ^= phial of floods:w item_slot ^= lightning rod:v item_slot ^= box of beasts:z item_slot ^= Horn of Geryon:n item_slot ^= phantom mirror:m item_slot ^= stone:s ################ # Auto Exclude # ################ ## dangerous monsters ## auto_exclude += ancient lich, death drake, hydra, ice statue, jelly, orb of fire ## paralysing monsters and uniques ## auto_exclude += [^c] wizard, ancient lich, Ereshkigal, Erolcha, eyeball, Grinder, Jory, lich auto_exclude += Norris, ogre-mage, orb of eyes, orc sorcerer, Rupert, sphinx, vampire knight ## other uniques and unique followers ## auto_exclude += Agnes, Aizul, Arachne, Asterion, Blork, Boris, Crazy Yiuf, Donald, Dowan auto_exclude += Duvessa, Edmund, Erica, Eustachio, Fannar, Frances, Frederick, Gastronok auto_exclude += Grum, Harold, Ijyb, Jessica, Jorgrun, Joseph, Kirke, Louise, Mara, Maud auto_exclude += Maurice, Menkaure, Mennas, Natasha, Nergalle, Nessos, Nikola, Pikel auto_exclude += Polyphemus, Prince Ribbit, Psyche, Roxanne, Saint Roka, Sigmund, Snorg auto_exclude += Sojobo, Sonja, Terence, Urug, Wiglaf, Xtahua, hog, slave ############### # Auto Travel # ############### # Set travel delay to -1 for instant-travel, set to 1 to see travel paths travel_delay = -1 explore_delay = 1 explore_stop = glowing_items,artefacts,greedy_pickup_smart explore_stop += greedy_visited_item_stack,stairs,shops explore_stop += altars,portals,branches,runed_doors,greedy_sacrificeable # Adjusts how much autoexplore favours attempting to discover room perimeters and corners. # At values higher than 0, autoexplore will more heavily favour visiting squares that are next to walls # reasonable values range from 0 to 10 maybe? explore_wall_bias = 3 # Make auto travel sacrifice corpses sacrifice_before_explore = true auto_sacrifice = true # Disables key press from stopping autoexplore travel_key_stop = false runrest_ignore_poison = 3:30 runrest_ignore_monster += butterfly:1 trapwalk_safe_hp = dart:15,needle:25,arrow:25,bolt:30,spear:20,axe:40,blade:50 # Only stop resting when both HP/MP are full rest_wait_both = true # Set Alias' stop := runrest_stop_message ignore := runrest_ignore_message :if you.god() == "Xom" then stop += god: :else ignore += god: :end ignore += You regained.*mp # Annoyances -- Don't stop autotravel for these events ignore += A.*toadstool withers and dies ignore += disappears in a puff of smoke ignore += engulfed in a cloud of smoke ignore += engulfed in white fluffiness ignore += grinding sound ignore += in your inventory.*rotted away ignore += safely over a trap ignore += standing in the rain ignore += toadstools? grow ignore += You feel.*sick ignore += You walk carefully through the # Jiyva Messages ignore += Jiyva appreciates your sacrifice ignore += Jiyva gurgles merrily ignore += Jiyva says: Divide and consume ignore += You hear.*splatter # Qazlal ignore += The plant is engulfed ignore += You destroy the (bush|fungus|plant) ignore += You displace your # Bad things -- Stop autotravel for these events (duplicates some of HDAForceMore) stop += (blundered into a|invokes the power of) Zot stop += (devoid of blood|starving) stop += A huge blade swings out and slices into you[^r] stop += An alarm trap emits a blaring wail stop += flesh start stop += found a zot trap stop += hear a soft click stop += lose consciousness stop += sense of stasis stop += Wait a moment stop += wrath finds you stop += You fall through a shaft # Expiring spells effects -- Stop to allow recasts (duplicates some of HDAForceMore) # Control Teleport stop += you feel uncertain # Death's Door more += time is quickly running out more += life is in your own # Enslavement more += is no longer charmed # Flight more += You are starting to lose your buoyancy stop += You lose control over your flight # Haste more += You feel yourself slow down # Phase Shift more += You feel closer to the material plane # Repel/Deflect stop += missiles spell is about to expire # Shroud of Golubria stop += shroud begins to fray stop += shroud unravels more += Your shroud falls apart # Swiftness stop += start to feel a little slower # Transmutations more += Your transformation is almost over more += You have a feeling this form more += Your skin feels tender more += You feel yourself come back to life # Ghouls (Not part of HDAForceMore) : if you.race() == "Ghoul" then stop += smell.*(rott(ing|en)|decay) stop += something tasty in your inventory : end # Good things - Bad things wearing off (Duplicates some of HDAForceMore) stop += contamination has completely stop += You are no longer firmly anchored in space #Ally actions? #ignore += pray: #ignore += friend_spell: #ignore += friend_enchant: #ignore += friend_action: #ignore += sound: ############# # Interface # ############# allow_self_target = prompt sort_menus = true #WARNING TO KEYPAD USERS: The number 7 is mapped to the letter 'y' easy_confirm = all confirm_butcher = never easy_eat_chunks = true auto_eat_chunks = true auto_drop_chunks = yes easy_eat_contaminated = true equip_unequip = true #hp_warning = 25 -- Damage Calc overrides these #mp_warning = 25 -- Damage Calc overrides these hp_colour = 100:green, 99:lightgrey, 75:yellow, 50:lightred, 25:red mp_colour = 100:green, 99:lightgrey, 75:yellow, 50:lightred, 25:red stat_colour = 3:red, 7:lightred # Removes the more prompts when outputting more than one screen of messages show_more = false small_more = true # Setting this to false changes the turn display to show player turns (used for scoring) show_game_turns = true msg_min_height=7 msg_max_height=10 default_manual_training = true #################### # Autoinscriptions # #################### # Overwrite annoying inscriptions with your own # Set Alias ai := autoinscribe ai += curing:@q1 ai += heal wounds:@q2 ai += scrolls? of identify:@r1 ai += scrolls? of remove curse:@r2 ai += scrolls? of teleportation:@r3 ai += scrolls? of magic mapping:@r4 # Inscribe distortion weapons if you are not worshipping Lugonu : if you.god() ~= "Lugonu" then ai += distortion:!w : end # Misc ai += dispersal:=f ai += throwing net:!d # Consumables ai += (bad|dangerous)_item.*potion:!q ai += (bad|dangerous)_item.*scroll:!r ai += potions? of berserk rage:!q ai += potions? of ambrosia:!q ai += scrolls? of blinking:!r ai += scrolls? of holy word:!r ai += scrolls? of magic mapping:!r ai += scrolls? of vulnerability:!r # Rings ai += ring of fire:rF+, rC- ai += ring of flight:+Fly, !d ai += ring of ice:rC+, rF- ai += ring of invisibility:+Inv, !d ai += ring of magical power:MP+9 ai += ring of poison resistance:rPois, !d ai += ring of positive energy:rN+ ai += ring of protection from cold:rC+, !d ai += ring of protection from fire:rF+, !d ai += ring of protection from magic:MR+, !d ai += ring of see invisible:sInv, !d ai += ring of stealth:Stlth+ ai += ring of sustain abilities:SustAb ai += ring of teleport control:cTele, !d ai += ring of teleportation:+/*tele, !d ai += ring of wizardry:Wiz+, !d # Staves ai += staff of air:rElec ai += staff of cold:rC+ ai += staff of death:rN+ ai += staff of fire:rF+ ai += staff of poison:rPois ai += staff of summoning:!a ai += staff of wizardry:wiz+, !a autoinscribe_cursed = false show_god_gift = unident ################## # Character Dump # ################## dump_item_origins = all dump_item_origin_price = 100 dump_message_count = 100 #dump_order = header,hiscore,stats,misc,mutations,skills,spells,overview,inventory #dump_order += screenshot,monlist,messages,action_counts,vaults,notes,kills dump_order += vaults, turns_by_place, kills_by_place dump_book_spells = false ood_interesting = 6 note_hp_percent = 25 note_all_skill_levels = true note_xom_effects = true note_items += of Zot,rod,acquirement note_messages += Your scales start note_messages += protects you from harm note_messages += You fall through a shaft note_messages += [bB]anish.*Abyss note_monsters += orb of fire,silver star,pearl dragon,ancient lich