Skip to content

Instantly share code, notes, and snippets.

@quill18
Last active December 18, 2023 16:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save quill18/1bf44f9589800d2c694d09f69f4487dc to your computer and use it in GitHub Desktop.
Save quill18/1bf44f9589800d2c694d09f69f4487dc to your computer and use it in GitHub Desktop.
# Crawl Init file
# See the README for further details:
# https://github.com/gammafunk/dcss-rc/blob/master/README.md
# NOTE: This RC has things enabled only for my username. If you're just
# including this RC file in your own with
#
# include = gammafunk.rc
#
# then you don't have to worry about these. However if you're copy all or parts
# of gammafunk.rc directly into your own RC file, look for any sections
# conditioned on my username and follow notes in the comments for removing or
# modifying them.
################
### RC files ###
################
# Only load RandomTiles.rc under my username. If copying this part of my RC
# directly into your own, remove this section including the beginning and
# ending lines with '{' and '}'. If you don't want RandomTiles, you don't need
# to replace it with anything. If you do want RandomTiles, replace this section
# with the line:
#
# include = RandomTiles.rc
#
# and see the comments in the ready() function section as well.
{
if you.name() == "gammafunk" then
-- Prevent gammaspeed.rc from trying to load this file twice.
gammafunk_rc_loaded = true
crawl.read_options("RandomTiles.rc")
end
}
###############
### Display ###
###############
view_delay = 300
hp_colour = 100:green, 99:lightgray, 75:yellow, 50:lightred, 25:red
mp_colour = 100:green, 99:lightgray, 75:yellow, 50:lightred, 25:red
hp_warning = 50
monster_list_colour =
monster_list_colour += friendly:green,neutral:brown,good_neutral:brown
monster_list_colour += trivial:darkgrey,easy:lightgrey,tough:yellow
monster_list_colour += nasty:lightred
###############
### Console ###
###############
equip_bar = true
## For item_glyph, subsequent matches override previous ones.
item := item_glyph
## Reasonable defaults
item += potion:lightgrey
item += scroll:lightgrey
item += wand:lightgrey
item += dangerous_item:blue
item += useless_item:darkgrey
### Potions ###
item += potions? of.*(curing|flight):lightgrey
item += potions? of.*heal wounds:white
item += potions? of.*berserk:brown
item += potions? of.*might:yellow
item += potions? of.*brilliance:cyan
item += potions? of.*magic:lightcyan
item += potions? of.*(lignification|ambrosia|attraction):blue
item += potions? of.*experience:lightred
item += potions? of.*resistance:green
item += potions? of.*(haste|invisibility):lightgreen
item += potions? of.*cancellation:magenta
item += potions? of.*mutation:lightmagenta
### Scrolls ###
: if you.race() == "Vampire" or you.race() == "Mummy"
: or you.race() == "Ghoul" then
item += scroll.*holy word:darkgrey
item += scroll.*torment:brown
: else
item += scroll.*holy word:brown
item += scroll.*torment:darkgrey
: end
item += scroll.*summoning:yellow
item += scroll.*acquirement:white
item += scroll.*identify:cyan
item += scroll.*magic mapping:lightcyan
item += scroll.*(silence|vulnerability|immolation):blue
item += scroll.*(fog|teleport):green
item += scroll.*(fear|blink):lightgreen
item += scroll.*enchant:magenta
item += scroll.*brand weapon:lightmagenta
### Wands ###
item += wand of.*random effects:blue
# Single target damage.
item += wand of.*flame:brown
item += wand of.*mindburst:yellow
# "Transmutations"
item += wand of.*polymorph:green
item += wand of.*digging:lightgreen
item += wand of.*acid:cyan
item += wand of.*iceblast:lightcyan
# Hexes
item += wand of.*paralysis:magenta
item += wand of.*charming:lightmagenta
### General Identification ###
item += (identified|known).*(jewellery|magical staff):brown
item += unidentified.*(potion|scroll|jewellery|wand|magical staff).*:lightblue
item += manual:lightcyan
### Jewellery ###
item += identified.*artefact.*(jewellery):white
item += unidentified.*artefact.*(jewellery).*:lightmagenta
item += (a )?stones?$:lightgray
# Want this to override anything above
item += useless:darkgrey
# Only mark these types when forbidden; for other types it looks odd.
item += forbidden.*(potion|scroll):red
mons := mon_glyph
# Monsters that can be easy to miss
mons ^= * : ✱
mons ^= dancing weapon : cyan {
mons ^= spectral weapon : lightcyan {
# Classed Demonspawn
mon += blood saint:9
mon += warmonger:9
mon += corrupter:9
mon += black sun:9
# Wall glyphs; requires a font and terminal that can render these.
feature += crystal wall {░}
feature += stone wall {▒}
feature += metal wall {▓}
feature += unnaturally hard rock wall {█}
feature += altar {⚑}
#############
### Tiles ###
#############
tile_full_screen = false
tile_map_pixels = 3
###################
### Menu Colors ###
###################
# These should match the item_glyph colours exactly when possible.
# For menu_colour, the first match ignores subsequent matches.
menu := menu_colour
menu =
# Many of the entries below come from dat/defaults/menu_colours.txt,
# which we have to duplicate here since we want only some of the
# entries from that file.
menu += notes:white:Reached XP level
### General Inventory###
# Items currently not affecting you.
menu += darkgrey:(melded)
# Items disliked by your god.
menu += red:forbidden
# Useless items, comes here to override artefacts etc.
menu += darkgrey:.*useless.*
# Handle cursed and equipped items early to override other colour settings.
menu += lightred:.*equipped.* cursed
menu += inventory:lightgreen:.*equipped.*
# Colouring of autoinscribed god gifts
menu += pickup:lightred:god gift
# Highlight (partly) selected items
menu += inventory:white:\w \+\s
menu += inventory:white:\w \#\s
### Potions ###
menu += lightgrey:potions? of.*(curing|flight)
menu += white:potions? of.*heal wounds
menu += brown:potions? of.*berserk
menu += yellow:potions? of.*might
menu += cyan:potions? of.*cancellation
menu += lightcyan:potions? of.*mutation
menu += blue:potions? of.*(lignification|ambrosia|attraction)
menu += lightred:potions? of.*experience
menu += green:potions? of.*resistance
menu += lightgreen:potions? of.*(haste|invisibility)
menu += magenta:potions? of.*brilliance
menu += lightmagenta:potions? of.*magic
### Scrolls ###
: if you.race() == "Vampire" or you.race() == "Mummy"
: or you.race() == "Ghoul" then
menu += darkgrey:scroll.*holy word
menu += brown:scroll.*torment
: else
menu += brown:scroll.*holy word
menu += darkgrey:scroll.*torment
: end
menu += yellow:scroll.*(summoning)
menu += white:scroll.*acquirement
menu += cyan:scroll.*identify
menu += lightcyan:scroll.*magic mapping
menu += blue:scroll.*(noise|silence|vulnerability|immolation)
menu += green:scroll.*(fog|teleport)
menu += lightgreen:scroll.*(fear|blink)
menu += magenta:scroll.*enchant
menu += lightmagenta:scroll.*brand weapon
### Wands ###
menu += blue:wand of.*random effects
# Single target damage.
menu += brown:wand of.*flame
menu += yellow:wand of.*mindburst
# "Transmutations"
menu += green:wand of.*polymorph
menu += lightgreen:wand of.*digging
# AOE damage.
menu += cyan:wand of.*acid
menu += lightcyan:wand of.*iceblast
# Hexes
menu += magenta:wand of.*paralysis
menu += lightmagenta:wand of.*charming
### General identification ###
menu += lightcyan:manual
menu += lightmagenta:unidentified.*artefact.*
menu += white:.*artefact.*
menu += lightblue:unidentified .*(potion|scroll|wand|jewellery|spellbook|rod|magical staff)
menu += inventory:lightgray:.*(jewellery|magical staff)
# Ego items
menu += lightblue:unidentified.*weapon.*(runed|glowing|enchanted)
menu += lightblue:unidentified.*armour.*(runed|glowing|embroidered|shiny|dyed)
#################
### Interface ###
#################
default_manual_training = true
equip_unequip = true
sort_menus = true:equipped,identified,basename,art,ego,glowing,qualname,charged,slot
ability_menu = false
autofight_stop = 50
autofight_caught = true
autofight_wait = false
bindkey = [~] CMD_LUA_CONSOLE
############################
### Travel & Exploration ###
############################
rest_wait_both = true
travel_delay = -1
explore_delay = -1
rest_delay = -1
show_travel_trail = false
explore_stop += greedy_items
##################
### Autopickup ###
##################
# Add staves, misc; note you can't use += with this option.
autopickup = $?!:"/}|
ae := autopickup_exceptions
ae += <throwing net
# Exceptions
# I use immolation somewhat early on, and vulnerability is useful the entire
# game.
ae += <vulnerability|immolation
# Tend to not use these.
ae += >scrolls? of silence
# Don't ever need a second stave
ae += staff of .*
################
### Messages ###
################
channel.multiturn = mute
msc := message_colour
msc += mute:returns to your side
msc += mute:a demon appears
msc += mute:puff of smoke
msc += mute:carefully avoids
msc += mute:is recalled
msc += mute:wall.*burn.*your
msc += mute:dissolves? into (sparkling lights|shadows)
msc += mute:(crumbles|melts) away\.
msc += mute:(merges|forms) itself .* the air
msc += mute:you swap places
msc += mute:your.*(looks stronger|shudders|resists)
msc += mute:your.*(stumbles backwards|holds.*ground)
msc += mute:your.*(blinks|safely over)
msc += mute:(phases out.*|misses) (your|something).*
msc += mute:your.*(picks up|drops)
msc += mute:your.*basks in the mutagenic energy
msc += mute:your.*(struggles|tears|pulls away).*(web|net)
more := force_more_message
: if you.god() == "Ashenzari" then
more += You have a vision of.*gates?
: end
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 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|(?<!orc )wizard|ogre mage|great orb of eyes|sphinx).*into view
more += (vampire knight|basilisk|deep elf (sorcerer|demonologist)).*into view
# Torment/flay or hellfire
more += (flayed ghost|royal mummy|mummy priest|fiend|tzitzimitl).*into view
more += (tormentor|curse toe|curse skull|hell sentinel|hellion).*into view
more += (deep elf (sorcerer|high priest)|draconian scorcher).*into view
# Things that can hit for over 90+ damage in a turn that is either ranged or
# very fast.
more += ((deep elf|draconian) annihilator|tengu reaver).*into view
more += (lich|orb of fire|executioner|juggernaut|shrike).*into view
# Any uniques and any pan lords
more += (?-i:[A-Z]).* comes? into view
stop := runrest_stop_message
ignore := runrest_ignore_message
:if you.god() == "Xom" then
stop += god:
:else
ignore += god:
:end
# Bad things
stop += A huge blade swings out and slices into you
stop += starving
stop += wrath finds you
stop += lose consciousness
stop += hell_effect:
# Expiring effects
stop += You feel yourself slow down
stop += You are starting to lose your buoyancy
stop += Your hearing returns
stop += Your transformation is almost over
stop += back to life
stop += time is quickly running out
stop += life is in your own hands
stop += is no longer charmed
# Annoyances
ignore += contamination has completely
ignore += your breath back
ignore += talk:
ignore += talk_visual:
ignore += friend_spell:
ignore += friend_enchant:
ignore += friend_action:
ignore += sound:
###########################
### Spell/Ability slots ###
###########################
ability_slot += Fly|flight:lF
ability_slot += Stop Flying:L
ability_slot += Breathe:t
ability_slot += Invisibility:iv
# Abilities prone to miskeys.
ability_slot += Blink:IB
ability_slot += Berserk:k
ability_slot += Corrupt:C
ability_slot += Enter the Abyss:E
# 4 letters from words of the spell name at (1) beginning, (2) end,
# of words in the spell, (3) anywhere from the spell name, or (4) from the
# names of the spell schools, in order of preference.
spell_slot += Alistair's intoxication:aisn
spell_slot += Apportation:anpt
spell_slot += Airstrike:ae
spell_slot += Agony:aygn
spell_slot += Animate dead:adet
spell_slot += Animate skeleton:asen
spell_slot += Beastly appendage:baye
spell_slot += Blade hands:bhes
spell_slot += Blink:BKLN
spell_slot += Bolt of magma:bmta
spell_slot += Borgnjor's revivification:BRSN
spell_slot += Borgnjor's vile clutch:bvch
spell_slot += Call canine familiar:cflr
spell_slot += Call imp:cilp
spell_slot += Cause fear:cfer
spell_slot += Controlled blink:cbdk
spell_slot += Corona:carn
spell_slot += Chain lightning:clng
spell_slot += Confusing touch:ctgh
spell_slot += Conjure flame:cfej
spell_slot += Corpse rot:cret
spell_slot += Dazzling Flash:dfgh
spell_slot += Darkness:aed
spell_slot += Death channel:dtcl
# Upper-case to prevent miskeys.
spell_slot += Death's door:DROT
spell_slot += Discord:DCSR
spell_slot += Disjunction:iuoe
spell_slot += Dispel undead:ndp
spell_slot += Dispersal:iea
spell_slot += Dragon form:dgrf
spell_slot += Dragon's call:dcl
spell_slot += Ensorcelled hibernation:ehnd
spell_slot += Eringya's Toxic Bog:bteg
spell_slot += Excruciating wounds:ewgx
spell_slot += Fire storm:fsmt
spell_slot += Fireball:flbr
spell_slot += Foxfire:fxro
spell_slot += Freezing cloud:fcgd
spell_slot += Freeze:fezr
spell_slot += Frozen Ramparts:frnt
spell_slot += Fulminant prism:fpmt
spell_slot += Gell's Gravitas:glvt
spell_slot += Haunt:htna
spell_slot += Ice form:crmf
spell_slot += Ignition:ntg
spell_slot += Iron shot:stnr
spell_slot += Inner flame:frn
spell_slot += Invisibility:iyvb
spell_slot += Irradiate:ierd
spell_slot += Iskenderun's battlesphere:ibne
spell_slot += Leda's Liquefaction:lanq
spell_slot += Lee's rapid deconstruction:ldr
spell_slot += Lesser Beckoning:lbg
spell_slot += Lehudib's crystal spear:lcsb
spell_slot += Lightning bolt:lbgt
spell_slot += Magic dart:mdtc
spell_slot += Malign gateway:mgy
spell_slot += Manifold Assault:madt
spell_slot += Maxwell's Capacitive Coupling:mclp
spell_slot += Mephitic cloud:mcdp
spell_slot += Metabolic englaciation:mcn
spell_slot += Monstrous menagerie:mst
spell_slot += Necromutation:eou
spell_slot += Olgreb's toxic radiance:oia
spell_slot += Orb of destruction:dbn
spell_slot += Ozocubu's armour:oau
spell_slot += Ozocubu's refrigeration:cbz
spell_slot += Pain:pnai
spell_slot += Passage of golubria:uoi
spell_slot += Passwall:aeu
spell_slot += Petrify:pyt
spell_slot += Poisonous vapours:pvs
spell_slot += Portal projectile:oei
spell_slot += Sandblast:zst
spell_slot += Searing ray:sry
spell_slot += Shadow creatures:scw
# Upper-case to prevent miskeys.
spell_slot += Shatter:STH
spell_slot += Shock:zok
spell_slot += Simulacrum:scm
spell_slot += Silence:SLC
spell_slot += Slow:swlh
spell_slot += Spellforged servitor:spvt
spell_slot += Spider form:sprf
spell_slot += Static discharge:tdc
spell_slot += Statue form:stmf
spell_slot += Sticky flame:yfk
spell_slot += Sting:zptg
spell_slot += Stone arrow:wtn
spell_slot += Storm form:somf
spell_slot += Summon forest:ftms
spell_slot += Summon guardian golem:gds
spell_slot += Summon horrible things:hts
spell_slot += Summon hydra:hsy
spell_slot += Summon ice beast:bct
spell_slot += Summon lightning spire:lst
spell_slot += Summon mana viper:vms
spell_slot += Summon small mammal:zsm
spell_slot += Swiftness:ieao
spell_slot += Teleport other:tprh
spell_slot += Tornado:TDN
spell_slot += Tukima's Dance:dkc
spell_slot += Vampiric draining:vnd
spell_slot += Wereblood:wbld
spell_slot += Yara's violent unraveling:yvgl
# Default letters
spell_slot += .*:XYZ
##################
### Item slots ###
##################
## Rings, in order of letter used.
item_slot += ring of dexterity : Dd
item_slot += ring of evasion : Ee
item_slot += ring of .*fire : Ff
item_slot += ring of (ice|protection from cold) : Cc
item_slot += ring of intelligence : Ii
item_slot += ring of flight : L
item_slot += ring of magical power : Mm
item_slot += ring of positive energy : Nn
item_slot += ring of poison resistance : P
item_slot += ring of resist corrosion : R
item_slot += ring of strength : Ss
item_slot += ring of see invisible : v
item_slot += ring of willpower: Ww
# Need numeric match to not trigger for rF/rC rings
item_slot += \+[0-9]+ ring of protection : Tt
item_slot += ring of slaying : Yy
item_slot += ring of wizardry : Zz
########################
### Autoinscriptions ###
########################
show_god_gift = unident
ai := autoinscribe
ai += potions? of berserk rage:!q
ai += scrolls? of silence:!r
ai += of faith:!P
ai += manual of:!d
# Prevent melee with all staves; if we want to melee with one, it's safe to
# require removing the annotation.
ai += magical staff:!a
ai += (large rock|throwing net|curare|of dispersal):=f
# Convenient shortcuts
ai += curing:@q1
ai += potions? of heal wounds:@q2
ai += potions? of haste:@q3
ai += scrolls? of teleportation:@r2
ai += identify:@r1
##############
### Morgue ###
##############
note_hp_percent = 10
note_all_skill_levels = true
note_chat_messages = false
user_note_prefix = >>
note_items += experience,of resistance, Archmagi
note_items += crystal plate armour,pearl dragon scales
note_items += artefact
note_messages += You feel monstrous
note_messages += You pass through the gate
note_messages += cast .* Abyss
# Noteable monsters
# Undead
note_monsters += ancient lich,curse skull,curse toe,royal mummy
# Depths
note_monsters += caustic shrike
# Special hall_of_zot spawns
note_monsters += killer klown,electric golem,orb of fire
dump_message_count = 30
dump_order = header,hiscore,stats,misc,mutations,skills,spells,inventory
dump_order += overview,screenshot,monlist,messages,skill_gains,action_counts
dump_order += vaults,notes,kills,turns_by_place,xp_by_level
############
## Macros ##
############
# Only make these macros for my username. If copying this part of my RC
# directly into your own, remove these lines including the '{' and '}' if you
# don't want RandomTiles or save_with_message. If you want either of those,
# replace these lines with normal RC macro lines like:
#
# macros += M S ===save_with_message
# macros += M 8 ===new_random_tile
# ...
#
{
-- Must use crawl.setopt() for the name condition to work.
if you.name() == "gammafunk" then
crawl.setopt("macros += M 1 zz")
crawl.setopt("macros += M S ===save_with_message")
crawl.setopt("macros += M 8 ===new_random_tile")
crawl.setopt("macros += M 9 ===set_tile_by_name")
crawl.setopt("macros += M 0 ===toggle_tile_timer")
crawl.setopt("macros += M - ===toggle_random_tile")
end
}
###########
### Lua ###
###########
{
-- Equipment autopickup (by Medar and various others)
local function pickup_equipment(it, name)
if it.is_useless then return end
local class = it.class(true)
if class == "armour" then
local good_slots = {cloak="Cloak", helmet="Helmet",
gloves="Gloves", boots="Boots"}
st, _ = it.subtype()
-- Autopickup found aux armour if 1) we don't have any or 2) it's artefact,
-- or 3) if we don't have artefact or ego armour, and the found armour is
-- ego.
if good_slots[st] ~= nil then
if good_slots[st] == "Gloves" and you.has_claws() > 0 then return end
if it.artefact then return true end
local cur = items.equipped_at(good_slots[st])
if cur == nil then return true end
if cur.branded or cur.artefact then return end
if it.branded then return true end
-- Autopickup found body armour of the same kind we're wearing, according
-- to conditions (2) and (3) above used for aux slots.
elseif st == "body" then
local cur = items.equipped_at("armour")
if cur == nil then return end
if cur.name("qual") ~= it.name("qual") then return end
if it.artefact then return true end
if cur.branded or cur.artefact then return end
if it.branded then return true end
end
end
return
end
add_autopickup_func(pickup_equipment)
-- Spellcasting spam reduction by monqy
local function generic_cast_spell(cmd)
crawl.mpr('<cyan>Cast which spell?</cyan>')
crawl.flush_prev_message()
crawl.process_keys(cmd)
end
function cast_spell()
generic_cast_spell('z')
end
function force_cast_spell()
generic_cast_spell('Z')
end
}
# Note: My final RC file has code from lua files found at:
# https://github.com/gammafunk/dcss-rc/blob/master/README.md
# starting from the line below.
{
---------------------------
---- Begin force_mores ----
---------------------------
-- See README.md for documentation.
last_turn = you.turns()
-- Each entry must have a 'name' field with a descriptive name, a 'pattern'
-- field, a 'cond' field giving the condition type, and a 'cutoff' field giving
-- the max value for where the force_more will apply. Possible values for
-- 'cond' are xl and maxhp.
--
-- The 'pattern' field's value can be either a regexp string or array of regexp
-- strings matching the appropriate monster(s). Any values are joined by "|" to
-- make a new force_more of the form:
--
-- ((?!spectral )VALUE1|VALUE2|...)(?! (skeleton|zombie|simularcrum)).*into view".
--
-- To allow derived undead forms of a monster to match, include 'spectral ' at
-- the beginning of and/or ' (skeleton|zombie|simularcrum)' at the end of your
-- pattern for that monster.
fm_patterns = {
-- Fast, early game Dungeon problems for chars with low mhp.
{name = "30mhp", cond = "maxhp", cutoff = 30,
pattern = "adder|hound"},
-- Dungeon monsters that can damage you for close to 50% of your mhp with a
-- ranged attack.
{name = "40mhp", cond = "maxhp", cutoff = 40,
pattern = "orc priest|electric eel"},
{name = "60mhp", cond = "maxhp", cutoff = 60,
pattern = "acid dragon|steam dragon|manticore"},
{name = "70mhp", cond = "maxhp", cutoff = 70,
pattern = "centaur(?! warrior)|meliai|yaktaur(?! captain)"},
{name = "80mhp", cond = "maxhp", cutoff = 80,
pattern = "gargoyle|orc (warlord|knight)"},
{name = "90mhp", cond = "maxhp", cutoff = 90,
pattern = {"centaur warrior", "deep elf archer", "efreet",
"molten gargoyle", "tengu conjurer"} },
{name = "110mhp", cond = "maxhp", cutoff = 110,
pattern = {"centaur warrior", "deep elf (mage|knight)", "cyclops", "efreet",
"molten gargoyle", "tengu conjurer", "yaktaur captain",
"necromancer", "deep troll earth mage", "hell knight",
"stone giant"} },
{name = "160mhp", cond = "maxhp", cutoff = 160,
pattern = {"(fire|ice|quicksilver|shadow|storm) dragon",
"(fire|frost) giant", "war gargoyle",
"draconian (knight|stormcaller"} },
} -- end fm_patterns
active_fm = {}
-- Set to true to get a message when the fm change
notify_fm = false
-- Wrapper of crawl.mpr() that prints text in white by default.
if not mpr then
mpr = function (msg, color)
if not color then
color = "white"
end
crawl.mpr("<" .. color .. ">" .. msg .. "</" .. color .. ">")
end
end
function init_force_mores()
for i,v in ipairs(fm_patterns) do
active_fm[#active_fm + 1] = false
end
end
function update_force_mores()
local activated = {}
local deactivated = {}
local hp, maxhp = you.hp()
for i,v in ipairs(fm_patterns) do
local msg = nil
if type(v.pattern) == "table" then
for j, p in ipairs(v.pattern) do
if msg == nil then
msg = p
else
msg = msg .. "|" .. p
end
end
else
msg = v.pattern
end
msg = "(?<!spectral )(" .. msg .. ")(?! (skeleton|zombie|simulacrum)).*into view"
local action = nil
local fm_name = v.pattern
if v.name then
fm_name = v.name
end
if not v.cond and not active_fm[i] then
action = "+"
elseif v.cond == "xl" then
if active_fm[i] and you.xl() >= v.cutoff then
action = "-"
elseif not active_fm[i] and you.xl() < v.cutoff then
action = "+"
end
elseif v.cond == "maxhp" then
if active_fm[i] and maxhp >= v.cutoff then
action = "-"
elseif not active_fm[i] and maxhp < v.cutoff then
action = "+"
end
end
if action == "+" then
activated[#activated + 1] = fm_name
elseif action == "-" then
deactivated[#deactivated + 1] = fm_name
end
if action ~= nil then
local opt = "force_more_message " .. action .. "= " .. msg
crawl.setopt(opt)
active_fm[i] = not active_fm[i]
end
end
if #activated > 0 and notify_fm then
mpr("Activating force_mores: " .. table.concat(activated, ", "))
end
if #deactivated > 0 and notify_fm then
mpr("Deactivating force_mores: " .. table.concat(deactivated, ", "))
end
end
local last_turn = nil
function force_mores()
if last_turn ~= you.turns() then
update_force_mores()
last_turn = you.turns()
end
end
init_force_mores()
-------------------------
---- End force_mores ----
-------------------------
----------------------------
---- Begin load_message ----
----------------------------
-- See README.md for documentation.
message_color = "white"
-- Wrapper of crawl.mpr() that prints text in white by default.
if not mpr then
mpr = function (msg, color)
if not color then
color = "white"
end
crawl.mpr("<" .. color .. ">" .. msg .. "</" .. color .. ">")
end
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 load_message()
if c_persist.message and c_persist.message ~= "nil"
and c_persist.message ~= "" then
mpr("MESSAGE: " .. c_persist.message, message_color)
c_persist.message = nil
end
end
-----------------------------------
---- End leave message on save ----
-----------------------------------
}
# The ready() function is needed for code that has to process each turn or UI
# action.
{
function ready()
-- Open skill screen on turn 0.
if not skills_set and you.turns() == 0 then
crawl.sendkeys("m")
skills_set = true
end
-- force_mores.lua
force_mores()
-- Enable these only for my username. If copying this portion of my RC into
-- your own and you don't want these features, remove everything from the 'if
-- you.name() ...' line to the ' end' line corresponding to that 'if'
-- statement. If you do want those features, remove only the 'if' line and
-- its corresponding ' end' line so that they're not conditioned on my
-- username.
if you.name() == "gammafunk" then
-- load_message.lua
load_message()
-- RandomTiles
random_tile()
end
end
}
#############
### Debug ###
#############
fsim_rounds = 10000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment