Sequell User Definitions

Updated 2026-06-27 16:20:05 UTC

Commands

Command Definition
!abyssratio

.echo $(let (x (- (!lm ${1:-.} !ak $* banished fmt:"${n}") (!lg ${1:-.} !ak $* abyss fmt:"${n}")) y (!lm ${1:-.} !ak $* banished fmt:"${n}")) "$(name_fixup ${1:-.}) $(if $* "("$*") ")has survived banishment $x of $y times: $(int (* 100 (/ (float $x) $y)))%")

For each time you were banished checks whether you died in Abyss in that game or not. Shows ratio.

!ac

.echo If you have $1 base AC then you need $(/ (int (+ 0.5 (* 100 (/ 22.0 $1)))) 100.0) armour skill per AC and get $(/ (int (/ (* 100.0 $1) 22.0)) 100.0) AC per armour skill.

Usage: !ac <base AC>, tells you how much armour skill per AC

!activegames

!lm * ktyp= type!=crash time>=$(- (utc (time)) (interval-minute 30)) s=name,src pfmt:"${.} (${child})" fmt:"${.}" title:"Active games, last half-hour ($*)" stub:"No milestones in the last half-hour ($*)" $*

Shows all games with a milestone in the last 30 minutes that haven't ended. Syntax: !activegames [!lm filters]

!aevp

.echo ER=$1, str=$2, armour skill=$3 : -$(int (/ (* (/ (* (/ 2 5.0) (** $1 2)) (+ $2 3)) (- 45 $3)) 45.0)) EV

Usage: !aevp <ER> <str> <armour skill>. Returns the aevp (armour EV penalty)

!ancestorclasses

!lm ${1:-.} verb=ancestor.class $* s=regexp_replace(noun, ".*\m(\w+)\.$", "\1")%

Counts how many times each ancestor class was picked. Syntax: !ancestorclasses [name] [lg filters]

!antiprogress

.echo $(name_fixup ${1:-.}) antiprogress: $(car (split | (!lg ${1:-.} $* won s=char fmt:"${n_x}${.}" join:"|")))

Shows a players most won combo. Syntax: !antiprogress [playername] [lg filters]

!antititleprogress

.echo $(name_fixup ${1:-.}) antititleprogress: $(car (split | (!lg ${1:-.} $* won s=title fmt:"${n_x}${.}" join:"|")))

Shows a players most won title. Syntax: !antititleprogress [playername] [lg filters]

!aptstrength

.echo $(sprintf "Aptitude $1 skills require %.0f%% as much experience as a skill with aptitude 0." (* (** 2 (* -1 (/ $1 4.0))) 100))

Give it an aptitude and it will tell you how much that skill costs to train relative to an apt0 skill. Try !aptstrength 3

!aptsum

!echo $(let (a (apthash $1)) (apply ${+} (map (fn (k) (elt $k $a)) (hash-keys $a))))

Sums the aptitudes for a given Species or Skill. Try: !aptsum Shape or !aptsum Dj

!ask

.echo "$*$(if (/= (last (split "" (concat $*))) ?) ?)" $(ask_response)!

Answers a yes/no question. Try: !ask Does Offline count?

!banish

.echo $nick casts a spell. ${1:-Everyone} is cast into ${*:-$(=badplace)}!

Banish someone to a bad place. Syntax: !banish [someone] [bad place]. The [someone] shouldn't contain spaces!

!beefeelings

.echo The bees are $(let (time (secondssince (stamptime (!lg * cikiller=killer_bee|meliai|queen_bee x=end fmt:'${x[0]}')))) (if (< $time 300) "happy!" (if (< $time 3600) "content." (if (< $time 86400) "restless." "angry!"))))

As any amateur bee psychologist could tell you, a bee's emotions are determined by how long it's been since a bee has killed a player. This command tells you how they are feeling right now.

!beer

.echo /me slides a $(beervessel) of $(beertype) down the bar to ${*:-${nick}}$(if $* ", courtesy of $nick").

Ask the bot to give someone a random beer. Syntax: !beer [someone]

!blame

.echo I pronounce ${*:-${nick}}... Guilty!

Blame someone. Syntax: !blame [someone]

!blamedev

!echo $(!blame $(randelt (nick-aliases devteam)))

Blame someone at random from the devteam nick.

!boris

.echo $(name_fixup ${1:-.}): $(car (split | (!lm ${1:-.} $* uniq=boris s=gid fmt:"${n_x}" join:"|"))) Boris

What's the most you've killed boris in a single game? This command lists your top score. Syntax: !boris [playernick] [lg filters]

!branchdeathrate

.echo $(if $1 (!lm ${2:-*} br.enter=$1 $* / lg:br=$1 title="$1 death rate for $(name_fixup ${1:-.})$(argst $*)" stub:"No games for $(name_fixup ${1:-.})$(argst $*)") (!help branchdeathrate))

Get the ratio of branch deaths to games that entered that branch. First argument must be the branch name! "D" for dungeon, or the first word of the branch for every other branch. (eg "Slime" for slime pits) Syntax: !branchdeathrate <branch> [playernick] [lm args]

!browse

.echo https://dev.dcss.io/learndb.html#$(ldb-canonical-term $*)

Link a learn database entry for easy reading in a web browser. Try !browse coffin

!calc

!lg xyz x=$$(replace ^ ** $*)$ fmt:"${x[0]}"

Leverages !lg math to calculate things for you. Remember to use ** for exponents, % for modulo operations, and add a .0 to integers if you want to do floating point math. [!calc 8**2] = 64, [!calc 5 / 10] = 0, [!calc 5 / 10.0] = 0.5, [!calc 10 % 3] = 1 (the remainder)

!cannchoice

!lg * current char=$(join '|' (nem-remaining)) $* s=char o=-. fmt:"${.}" title:"Available combos for Nemelex Choice with $*" stub:"No available combos for Nemelex Choice with $*"

List remaining nemelex choice combos that match the filter (if you supply one). Syntax: !cannchoice [lg filters] Try: !cannchoice co or !cannchoice wn

!canoneandwon

!unplayed

see {!help:!unplayed}

!cats

!lg ${1:-.} won fe-- $* s=char join:"|" fmt:"${n_x}{=^;^=}" stub:"=u.u=" title:"Cats won for $(name_fixup $1)"

Displays how meowny cats you've won. Syntax: !cats [playernick]

!celcius

.echo $(sprintf "$* degrees F is %1.1f degrees C" $(/ (- $1 32) 1.8))

Converts F to C. Syntax: !celcius <degrees F>. Try !celcius 212

!cerebot

!learn q cerebot

Type `!help` or `!cerebot` for help with Cerebot. For help with Sequell, type `!sequellhelp`.

!cheatstreak

!streak ${1:-.} $* won

Shows all won combos, as if you streaked them :) Takes lg filters just like !streak does.

!cheers

.echo /me slides a $(cheerscontainer) of $(cheersdrink) across the bar to ${*:-${nick}}$(if $* ", courtesy of $nick").

Give someone a random drink. Defaults to yourself.

!classcanoneandwon

.echo $(let (c (fullclass $1)) (!lg * playable cls="$c" $(ignore $1)$(ignore $2)$* crace!=$(!lg ${2:-.} cls="$c" $* s=regexp_replace(char, "..$", "") fmt:"${.}" join:'|' title:'') s=char o=-. fmt:"${.}" title:"Available combos for $(name_fixup ${2:-.}) to oneandwon with $1$(argst $*)" stub:"No vailable combos for $(name_fixup ${2:-.}) to oneandwon with $1$(argst $*)"))

Prints combos that the user hasn't played yet for the supplied class. Syntax: !classcanwonandwon <class abbreviation>

!classwords

.echo $(map (fn (p) (.echo $p${1})) (sort (split "|" (!lg * playable current alpha s=regexp_replace(char, "..$", "") join:"|" fmt:"${.}"))))

Makes 4-letter combo words with currently playable species and the supplied 2-letter class. Try !classwords ll

!cmdcp

.echo $(!cmd $2 $(re-replace-n 1 '.*?=>' '' (!cmd $1)))

Command copy-paste. Copy the instructions of one command to a new command (or overwriting an existing one!), leaving the first command intact. Syntax: !cmdcp <old command name> <new command name>. Try !cmdcp !test !test2

!cmdfind

!cmdsearch

see {!help:!cmdsearch}

!cmdhelp

!help $*

An alias to !help to work around Cerebot's overriding of !help. It gives you information about a command. Try: !cmdhelp !crystalball

!cmdlist

!cmd -$(.echo ls)

Alias for !cmd -ls. Lists user-defined commands.

!cmdmv

.echo $(do (!cmd $2 $(re-replace-n 1 '.*?=>' '' (!cmd $1))) (!cmd -rm $1))

Move a command to a new home, deleting the old name and possibly overwriting the new name. Syntax: !cmdmv <old name> <new name>

!cmdsearch

.echo $(filter (fn (keyword) (re-find "$*" $keyword)) (split ", " (replace "User Commands: " (!cmd -ls))))

Find command names that partially match a given regex pattern. Syntax: !cmdsearch <regex>. Try: !cmdsearch player

!coffee

.echo /me hands ${1:-${user}} a $(randnth (list cup mug pot)) of $(coffee), brewed by $(rng-god-uniq).

Get coffee brewed by a random god or unique. Syntax: !coffee [drinker]

!coinflip

!rng heads tails

Flips a coin. Expect Heads or Tails.

!combofanatics

.echo Combo fanatics$(argst $*): $(join ", " (map (fn (x) "$(elt 1 $x) $(first $x)x $(elt 2 $x)") (sortby (fn (x) (* -1 (int (first $x)))) (map split (split ", " (!lg * $* s=char,name won fmt:'$(groupcount $n_x) ${.}' pfmt:'$(first (split ", " $child)) ${.}'))))))

Lists the player with the most wins for each combo. Syntax: !combofanatics [lg args]. Try !combofanatics gn

!coolplayer

!lg ${1:-.} $(replace " " | (ldbent-text (ldb words 1))) won console s=char fmt:"$name is a coolplayer!" stub:"$name is not a coolplayer!" title:"" join:" "

Reveals to all present if you're a cool player. Obviously, cool players have an online console win with a species/background combo whose abbreviation is a real word. e.g.: Barachi Necromancer = bane. Syntax: !coolplayer [playernick]

!crash

!crashlog

see {!help:!crashlog}

!crashlog

!lm ${*:-!ignoredcrashers} crash -log

Print the log for the most recent crash milestone. Syntax: !crashlog [playernick] [lm filters]

!crystalball

.echo $(name_fixup ${1:-.}) $(let* (lm (split | (=rip.lm $1 $*)) game (split | (!rg * $(=rip.opts) xl>=$lm[2] xl<=$(* 1.5 $lm[2]) absdepth>$lm[6] fmt:"$vmsg|$place|$sc|$turn|$dur|$xl"))) (ripformat $lm[0] $lm[1] $game[5] $lm[3] $game[0] $game[1] $game[2] $game[3] $game[4]))

A command that uses the cursed vision of Ashenzari to peer into the future and foretell your certain doom!

!dam

.echo $(let (l (length (re-replace '[^!]' '' $*))) (if (> $l 1) (+ 1 (=maxdam $(- $l 1)))" - "(=maxdam $l) (if (= $l 1) "7.0 - 17.0" "0.0 - 7.0")))

Calculates damage for a supplied hit message. Syntax: !dam Message_ending_in_exclamation_marks!!!

!daysperwin

.echo $(name_fixup ${1:-.}) wins approximately once per $(let (age $(int $(let (first $(ptime $(!lg $(name_fixup ${1:-.}) x=min(end) fmt:"${x[0]}" stub:'$(ftime $(utc $(time)) "%Y-%m-%d %H:%M:%S")') "%Y-%m-%d %H:%M:%S") now $(utc $(time))) (- $now $first)))) (/ (float $age) $(!lg $(name_fixup ${1:-.}) won $* fmt:"${n}"))) days

The average number of real-life days between each win for a given player. Syntax: !daysperwin [playernick] [lg filters]

!dcss-stats

.echo https://dcss-stats.com/players/$(lower (nth 0 (split ' ' (nick-aliases (name_fixup ${1:-.})))))

Links to your https://dcss-stats.com/ stats page.

!deathless

!lg ${*:-*} start>20101115 fe-- won gid!=$(!lm ${*:-*} death won s=gid join:"|") s=name,char -opt:(title:"Deathless wins for ${*:-*}")

Lists felid wins where the felid never died. Syntax: !deathless [playernick] [filters that work in both !lg and !lm]

!decentchar

!oneandwonchar

Randomly picks a char you have never played, weighted by recent wins

!decentplayer

.echo $(let (l (length (split , (!lg $(name_fixup $*) rstart=$(!lg $(name_fixup $*) s=char x=min(rstart) fmt:"${x[0]}" join:"|") won s=char stub:"")))) (if (> $l 9) "$(name_fixup $*) is a decent player. $l oneandwon wins$(attack-strength-punctuation $l)" "$(name_fixup $*) is not a decent player. $l oneandwon wins ($(- 10 $l) to go)."))

Decent players are defined as having at least 10 "oneandwon" combos - species/background combos that were won on the first try. This command displays how many oneandwon combos a player has won. Syntax: !decentplayer [playernick]

!define

.echo https://en.wiktionary.org/w/index.php?search=$(replace " " + $*)

Search the english language wikitionary. Syntax: !define <word or phrase>

!dreamsaved

!lm ${1:-.} cv>=0.31-a dreamshard !cat $* / ((won || ${lg:turns>=turns+100})) title:"Dreamshard savior% for $(name_fixup ${1:-.})$(argst $*)"

Percentage of times the dreamshard shattered but the player survived at least 100 more turns. Excludes felids for cheating. Try !dreamsaved * recent s=br

!dump

&dump

see {!help:&dump}

!dursummary

.echo $(let* (info (split (!lg ${1:-.} $* x=gid,char,ktype,dur notitle fmt:'${x[0]} ${x[1]} ${x[2]} ${x[3]}')) out (!lm * gid=$(nth 0 $info) !portal !arena !crucible br.enter|rune|orb|god.worship s=noun x=-min(dur) fmtsimple title:"Summary for $(nth 0 $info) $(nth 1 $info)" stub:"N/A")) $(if (= 'N/A' $out) "No games found for $(name_fixup ${1:-.})$(argst $*)" "$out, $(nth 2 $info) [$(nth 3 $info)]"))

Shows the order and duration of various important milestones for a single game. Usage: !dursummary <lg args for the game>. Try !dursummary !bot t won min(dur) or !dursummary !bot recent urune=15 min(dur) -2

!eventuallywon

.echo $(let* (sortbyfirst (fn (l r) (- (car $r) (car $l))) format (fn (x) "$(cdr $x) $(car $x)%") xs (split "|" (!lg * x=count(name) fmt:'$(re-replace ".*\((.*)%.*" $1 ${x[0]}) ${.}' notitle join:'|' / won $*))) "Ratio of players that won:tried$(argst $*): $(join ", " (map $format (sort $sortbyfirst $xs)))")

Ratio of players that eventually won a character. Takes !lg arguments and works best with "s=" Try [!eventuallywon gn s=char recent] or [!eventuallywon bygod recent] or [!eventuallywon bysp playable:sp recent]

!fahrenheit

.echo $(sprintf "$* degrees C is %1.1f degrees F" $(+ (* $1 1.8) 32))

Converts C to F. Syntax: !fahrenheit <degress C>. Try !fahrenheit 100

!fastestperwin

.echo Hours per win with at least ${1:-10} games and ${2:-1} wins$(argst $*): $(join ", " (map (fn (xs) (sprintf "%s: %.1f" (nth 0 $xs) (nth 1 $xs))) (sortby (fn (xs) (float (nth 1 $xs))) (split ", " (!lg * s=name x=sum(dur) $* / won notitle fmt:'${.} $(/ (/ (pduration (re-replace ".*/(.*) \(.*" "$1" ${x[0]})) $(float (re-replace "\/.*" ${n_x}))) 3600)' ?: den.N>=${1:-10} N>=${2:-1})))))

Lists total playtime divided by wins for each player in ascending order. Syntax: !fastestperwin <minimum games played> <minimum wins> <listgame arguments> Try: !fastestperwin 10 10 recent or !fastestperwin 10 1 t

!fastversions

.echo Latest versions seen in milestones this week$(argst $*): $(let* (sourceversions (reverse-hash (mergehash (mappedhash (fn (ignore) "None") (serverlist)) (apply hash (split ' ' (=fastversions.lm $*)))))) $(join (map (fn (k) "[$(elt $k $sourceversions)] => $k") (sort (hash-keys $sourceversions)))))

Like &versions but much faster and easier to read! Only one !lm query. Takes !lm filters if you want for some reason.

!gamegraph

.echo $(let (gid $(!lm $* x=gid fmt:"${x[0]}")) $(!lm * gid=$gid fmt:"${name}, ${char}: ")" "$(nth -1 (split " " (!lm * gid=$gid s=turn x=max(AC),max(EV),max(SH),max(mhp/10),max(absdepth) -graph:area))))

Link to a graph that tracks your defense stats and depth over your last (or current) game. Syntax: !gamegraph [playernick] [lm filters]

!gameinfo

!lm ${1:-.} $* x=str,int,dex,gid fmt:'${name} the L${xl} ${char}^$(=godshortname ${god}) in ${place} ($src $(if $tiles tiles console)), ${dur}, T:$turn$(if ${urune} ", runes: ${urune} ($(=lastrunes * gid=${x[3]})$(if (> ${urune} 3) ...))"), defenses: ${ac}/${ev}/${sh}, stats: ${x[0]}/${x[1]}/$x[2]$(if ${fifteenskills} ", >15 skills: ${fifteenskills}")$(if ${maxskills} ", Max skills: ${maxskills}")'

List a useful summary of your most recent milestone. Syntax: !gameinfo [playernick] [lm filters]

!gamepath

.echo $(let (path (gamepath_query $*)) (if (= (length $path) 0) "No milestones found." (format_autocompress $path (list gamepath_format_normal gamepath_format_compressed1 gamepath_format_compressed2 gamepath_format_compressed3 gamepath_format_compressed4))))

List how many turns it took each branch in the most recently finished game. Syntax: !gamepath [playernick] [lg filters]

!gamesbyx

.echo $(let* (interest (re-replace "^-" $1) ordering (if (= - (first $1)) "min($interest)" "max($interest)")) (if $1 (!lg * x=name,char,god,$interest $ordering fmt:'$x[3] $x[0] $x[1]^$(godletter $x[2])' title:"Games by $1 $(argst $*)" -count:50 $*) $(!help gamesbyx)))

Shows the first 50 games sorted by a provided logfile field. If sorts by biggest first unless you prepend "-". Syntax: !gamesbyx [logfile field] <lg args>. Try: [!gamesbyx -kills t won] or [!gamesbyx goldfound .] or [!gamesbyx -dur won !bot] For a list of logfile fields see ??lg

!gamestriedsincelastwin

.echo $(let (player (name_fixup $*)) (try (!lg ${*:-$user} rstart>$(!lg ${*:-$user} won -1 fmt:"$end") s=char title:"$n games since last win for $player" fmt:"${n_x}${.}" stub:"No games played since last win for $player.") (!lg ${*:-$user} s=char title:"$n games since last win for $player" fmt:"${n_x}${.}" stub:"No games played since last win for $player.")))

Lists which combos you've lost after your most recent win. Syntax: !gamestriedsincelastwin [playernick] [lg args]

!gamesuntiltiamat

.echo $(if (> 8 (!lg ${1:-.} dr won race!=mottled_draconian|draconian x=count(race) fmt:'${x[0]}' stub:'0')) (!tiamat ${1:-.} $*) (!lg ${1:-.} dr $* x=sum(dur) title:"$n Draconian games before Tiamat for $(name_fixup ${1:-.})$(argst $*)" rend<=$(re-replace ",.*" "" $(!lg ${1:-.} dr won s=race x=+min(rend) fmt:'${x}' notitle))))

How many draconian games and how much draconian playtime it took before a player won with all draconian colours. Syntax: !gamesuntiltiamat [playernick] [lg args]

!gamesuntilwin

!lg ${1:-.} $* rstart<=$(!lg ${1:-.} $* won 1 fmt:"$start" stub:"0") fmt:"$(name_fixup $1) had \$(- \$n 1) games before their first win$(argst $*)." stub:"No wins for $(name_fixup $1)."

How many games the player played before winning. Syntax: !gamesuntilwin [playernick] [lg args]

!gamesuntilwonbg

.echo $(gamesuntilwonhelper ${1:-.} $* (=gamesuntilwonbg.lg ${1:-.} $*))

Show how many games it took to win for each background. Try [!gamesuntilwonbg] or [!gamesuntilwonbg . human]

!gamesuntilwonchar

.echo $(gamesuntilwonhelper ${1:-.} $* (=gamesuntilwonchar.lg ${1:-.} $*))

Show how many games it took to win for each combo. Try [!gamesuntilwonchar] or [!gamesuntilwonchar . gnoll]

!gamesuntilwonnchoice

.echo $(gamesuntilwonhelper-nchoice $* (=gamesuntilwonnchoice.lg ${1:-nchoice} ${2:-t} $*))

For each nemelex choice combo, how many games did it take until the first win? Syntax: !gamesuntilwonnchoice [nchoice keyword eg "nchoice-0.33"] [tournament keyword eg "t0.33-games"] [lg filters]

!gamesuntilwonsp

.echo $(gamesuntilwonhelper ${1:-.} $* (=gamesuntilwonsp.lg ${1:-.} $*))

Show how many games it took to win for each species. Try [!gamesuntilwonsp] or [!gamesuntilwonsp . monk]

!gameswonsince

!lg ${1:-.} won rend>$(!lg ${1:-.} $* fmt:"$end" stub:"error") fmt:"$n" stub:"0"

How many games you won since the last game that matches given parameters. Syntax: !gameswonsince <playernick> <lg args>

!gdeaths

!lg ${1:-.} $* killer~~'s_ghost s=killer title:"$n deaths to player ghosts for $(name_fixup ${1:-.})" stub:"No deaths to player ghosts for $(name_fixup ${1:-.})"

Lists ghost deaths for a given player. Syntax !gdeaths [playername] [lg filters]

!gemmed

!lg * vmsg=~"11 gems (all intact)" s=name title:"Players who really gemmed it$(argst $*)" stub:"No all-gem winners$(argst $*)" $*

Lists players that obtained all gems without shattering any.

!gemratio

.echo $(let* (ends (=gemratio.ends $1 $2 $*) gems $(=gemratio.gems $1 $2 $*) intact (nth 0 $gems) found (nth 1 $gems) lost (nth 2 $gems)) (if $1 (sprintf "$intact intact gems ($found found, $lost lost) out of $ends $1 branch endings ($(if $(= $(int $ends) 0) 🤷 %0.2f)%%) $(name_fixup [${2:-.})$(argst $*)]" (/ (* $intact 100) (float $ends))) $(!help gemratio)))

Ratio of unshattered gems to br.end milestones for the given branch. Syntax: !gemratio <branch name> [player selector] [lm filters]. Try: !gemratio vaults or !gemratio snake * t

!generate-nchoice

.echo $(let* (all (map split (split '|' (!lg * $* !nchoice playable s=-char notitle stub:"N/A" fmt:'$(re-replace "^(\d+).*" "$1" ${n_x}) ${.}' join:'|' / won))) min (int (car (nth 149 $all))) elig (map (fn (x) (nth 1 $x)) (filter (fn (x) (<= (int (nth 0 $x)) $min)) $all))) "$(length $elig) combos with <=$min wins$(argst $*): $(join '|' (sort $elig))")

Approximated, more automated way of choosing initial nchoice combos. It picks at least 140 combos with the fewest wins + all combos with the same number of wins as the 140th.

!ghostkills

!lg * ikiller~~^($(join '|' (nick-aliases (name_fixup ${1:-.}))))$(=apostrophe)s?_ghost $* s=ikiller,name title:"${n} kills by $(name_fixup ${1:-.})'s ghost$(if "${*}" " (${*})" "")"

Lists players that died to a given player's ghost. Syntax: !ghostkills [playernick] [lg filters]

!git

.echo %git $*

Sequell will attempt to pass a %git command to NotCheibriados. You can get a github link for a commit hash, branch name or tag. See https://github.com/crawl/crawl/wiki/Guide-to-the-DCSS-knowledge-Bots for more info.

!gitgrep

.echo $(ignore $1)$(let (n $1 s $*) (concat "%git HEAD^{/" $s "}" (repeat (concat "^^{/" $s "}") (- (int $n) 1))))

Search git commits with limited case sensitive regex. The first argument is the match number (e.g. "2" means the second most recent match). Try !gitgrep 1 [oO]rb

!gkills

!lg * ikiller~~^($(join '|' (nick-aliases (name_fixup_long ${1:-.}))))$(=apostrophe)s?_ghost $* s=name title:"${n} kills by $(name_fixup ${1:-.})'s ghost$(argst $*)"

Find kills by your ghost! Syntax: !gkills [player] [lg filters]

!goodchar

!rg * recent playable won $* fmt:"The RNG chooses: $char"

Will randomly pick a char weighted by number of recent wins

!goodplayer

.echo $(let (wins $(nwins ${1:-.}) player $(name_fixup $1)) $(if (>= $wins 10) "$player is a goodplayer: $wins wins$(attack-strength-punctuation $wins)" "$player is not a goodplayer yet: $wins $(plural win $wins) ($(- 10 $wins) to go)."))

Tells you if you're a "goodplayer". A "goodplayer" has at least 10 wins. Syntax: !goodplayer [playernick]

!greatchar

.echo $(let* (sps (unwonsp ${1:-.}) bgs (unwonbg ${1:-.}) name (name_fixup ${1:-.}) args $(argst $*) stub "$name has won all species and backgrounds${args}!") (if (= 0 (length (concat $sps $bgs))) $stub (greatcharrandom $name $args $sps $bgs $stub)))

"Great" as in "great[er]player". Will pick a combo with a species and background you have not won yet. If you've won all species already, it will pick a combo with a background you haven't won (and vice versa). The combo it picks is random but weighted by how often it's played so it tends to pick good ones! Syntax: !greatchar [playername] [combo filters].

!greaterchar

!greatchar

see {!help:!greatchar}

!greateroneandwon

!lg * playable:job role!=$(!lg * won s=char / gid=$(=oneandwongids $*) fmt:'$(combo_to_class ${.})' join:"|" stub:"" ?: %!=0) title:"non-oneandwon roles for $(name_fixup $*)" stub:"$(name_fixup $*) is a greateroneandwoner" s=role fmt:"${.}"

Show remaining classes to win through a oneandwon containing that class.

!greaterplayer

.echo $(do ${1:-.} "")$(greathelper2 cls ${1:-.} backgrounds "greaterplayer (or at least has won every background)" playable:job $*)

Shows you backgrounds you haven't won yet. Syntax: !greaterplayer [playernick] [lg args]

!greatoneandwon

!lg * playable:sp crace!=Barachian crace!=$(!lg * won playable:sp s=char / gid=$(=oneandwongids $*) fmt:'$(combo_to_race ${.})' join:"|" stub:"" ?: %!=0) title:"non-oneandwon races for $(name_fixup $*)" stub:"$(name_fixup $*) is a greatoneandwoner" s=crace fmt:"${.}"

Show remaining species to win through a oneandwon containing that species.

!greatplayer

.echo $(do ${1:-.} "")$(greathelper2 crace ${1:-.} species greatplayer playable:sp $*)

Shows you species you haven't won yet. Syntax: !greatplayer [playernick] [lg args]

!greatprogress

.echo $(=greatprogress.species $*) | $(=greatprogress.role $*)

Shows how many combos you have to win to get !greatrace/!greatrole for each species/background respectively.

!greatremaining

.echo $(let* (charwon (wonchars ${1:-.} *) spunwon (setdiff (playablespls) (map (fn (char) (take 2 $char)) $charwon)) bgunwon (setdiff (playablebgls) (map (fn (char) (drop 2 $char)) $charwon))) "Unwon for $(name_fixup ${1:-.}) | $(if $spunwon "Species: $(sort $spunwon)" "All species won!") | $(if $bgunwon "Backgrounds: $(sort $bgunwon)" "All backgrounds won!")")

Shows you abbreviated species and backgrounds you haven't won yet. Syntax: !greatremaining [playernick]

!greattodo

!rng $(re-replace ',' '' $(re-replace '\b ' '_' $(re-replace '.*: ' ' ' $(!greatplayer ${*:-.}))))

Chooses at random one of unwon species for a specified nickname.

!helldeathrate

!lm ${1:-.} $* br.enter=tar|geh|coc|dis s=br o=% title:"Death rates in hell branches for $(name_fixup ${1:-.})$(argst $*)" stub:"Death rates in hell branches for $(name_fixup ${1:-.})$(argst $*)" / lg:br=$noun

Shows death rates for the 4 hell branches. The ratios are [players that died in the branch] divided by [players that entered the branch]. Syntax: !helldeathrate [playernick] [lm args]

!highestskills

.echo $(let (skillsleft (sort (setdiff (split ", " (!lg * current s=sk fmt:'${.}')) (split ", " (!lg ${1:-.} won s=sk fmt:'${.}' stub:"" $*))))) (if (= 0 (length $skillsleft)) "$(name_fixup ${1:-.})$(argst $*) has won with each skill as their highest skill!" "Highest skill wins remaining for $(name_fixup ${1:-.})$(argst $*): $(join ", " $skillsleft)"))

Shows you which skills that haven't been your highest skill in a winning game. Syntax: !highestskills [playernick] [lg args]

!highscores

!lg * ${2:-*} s=char o=-char x=max(sc) / @${1:-.} fmt:"${.}" join:" " title:"${name}'s high scores" stub:"$name has no high scores." ?:%.max(sc)=1

Shows combos for which you have the highest score! Syntax: !highscores [playernick] [lg args].

!hoursperwin

.echo $(let* (name (name_fixup ${1:-.}) duration (!lg ${1:-.} $* x=sum(dur) notitle fmt:'$x') wins (!lg ${1:-.} $* won notitle fmt:'${n}') avg (/ (/ (float (pduration $duration)) $wins) 3600)) (if (> $wins 0) (sprintf "Total playtime divided by wins for $name$(argst $*): %1.2f hours/win" $avg) "No wins for $name$(argst $*)... yet!"))

Hours played divided by number of wins. How long it takes you to get a win on average. Try !hoursperwin . recent

!howlong

.echo $(let (version-starts (split ", " (!lg * s=cv cv!= cv>=0.13 !0.29timetraveler !alpha x=-min(start) fmt:'${.} $x'))) "Months spent in development: $(join ' ' (map (fn (i) $(sprintf "[%s %.1f]" (nth 0 (elt $i $version-starts)) (/ (deltaseconds (join ' ' (sub 1 (split ' ' (elt (- $i 1) $version-starts)))) (join ' ' (sub 1 (split ' ' (elt $i $version-starts))))) 2628000.0))) (range (- (length $version-starts) 1) 1 -1)))")

Shows about how many months each version spent in development. It is a slow command so be patient. A "month" is 365/12=30.4 days in this context.

!hp

.echo $(if $* (let* (t (split " " $*) apt (nth 1 (split "=" (!apt $t[0] HP))) xl $t[1] f $t[2]) "HP apt: "$apt", XL: "$xl", Fighting: "$f" => MHP = "$(int (* (+ (int (* 5.5 $xl)) 8 (int (* $xl (/ $f 14.0))) (int (/ (+ 1 (* 3 $f)) 2.0))) (+ 1 (/ $apt 10.0))))) "Usage: !hp [species] [XL] [Fighting]")

Usage: !hp [species] [XL] [Fighting]. Calculate the maximum HP for a character with a given species, experience level, and Fighting skill.

!hs

!lg $* max=sc

Shows the single highest scoring game. Syntax: !hs [playernick] [lg args]

!hscounts

.echo Players with the most combo highscores$(argst $*): $(join ", " (map (fn (kv) "$kv[0]: $kv[1]") (sortby (fn (kv) (* -1 (int $kv[1]))) (freqhash (split ", " (!lg * won s=char,gid x=+min(sc),min(name) fmt:'$x[1]' pfmt:'$(nth 0 (split ", " $child))' $*))))))

List players by the number of combo highscore win records they have. Note that sequell and the CAO scorepage consider some combos in different ways: this command will consider Gnoll Hexslinger and Gnoll Arcane Marksman to be the same combo but CAO won't. Try: !hscounts t or !hscounts playable

!intactgems

!lg ${1:-.} won vmsg~~'\d+ gems? \((?:\w+ )?intact!?\)' s=int(regexp_replace(regexp_replace(regexp_replace(regexp_replace(vmsg, '.*and (\d+) gems? \(intact!?\).*', '1'), '.*and (\d+) gems? \(both intact!?\).*', '2'), '.*and (\d+) gems? \(all intact!?\).*', "\1"), '.*and \d+ gems? \((\w+) intact!?\).*', "\1")) o=-. title:"Intact gem wins for $(name_fixup ${1:-.})$(argst $*)" stub:"No gem wins for $(name_fixup ${1:-.})$(argst $*)" $*

Lists intact gems obtained during winning games for the selected player(s). Only includes games that have some gems ("0" means all their gems shattered).

!isonline

.echo $(=time_since_milestone weekmilestone $*) since last activity ($(replace . $nick $*))

Shows time since the last milestone satisfying a supplied condition. Syntax: !isonline <!lm_condition> | Examples: !isonline <servername> | !isonline @nickname

!killratio

!killratioall $1 ${2:-*} ${3:-recent} $*

Displays the number of player deaths/number of unique deaths. Only works for uniques!

!kw-append

.echo $(!kw $1 $(=kw $1)$*)

Add something to the end of a sequell keyword. Syntax: !kw-append <keyword> <string to append>

!kwsearch

.echo $(filter (fn (keyword) (re-find "$*" $keyword)) (split ", " (replace "User keywords: " (!kw -ls))))

Search for sequell keywords using regex. Syntax: !kwsearch <regex>

!lairratio

.echo $(let (x (!lm ${1:-.} $* br.enter=lair ktyp!= x=cdist(gid) fmt:"${x}" stub:"0") y (!lg ${1:-.} $* fmt:"${n}" stub:"0") player (name_fixup $1)) "${player}$(if "${*}" " (${*})" "") has reached Lair in $x of $y attempts: $(int (+ 0.5 (/ (* 100.0 $x) $y)))%")

Shows how often your games entered lair. Syntax: !lairratio [playernick] [lg and lm args]

!last

!won ${2:-.} $* rend>=$(!lg ${2:-.} $* fmt:"${rend}" -${1:-100})

Usage: !last <number> <player> <other args>, shows wins in the last x games played. e.g. !last 50 . Be

!last10

!lg * $* won s=-end x=max(end),max(name),max(char) fmt:'${x[1]} (${x[2]})' rend>=$(!lg * $* won -10 fmt:"$end") title:"last 10 wins $(if $* "for $* " " ")are"

This command shows the last 10 games won on any public server(s)

!lastgames

!lg ${1:-.} $(split " " $*) x=xl,char,god,ckiller -count:10 fmt:'L${x[0]} ${x[1]}^$(=godshortname ${x[2]}) (${x[3]})' title:"Last 10 games for $(name_fixup $1)" stub:"No games for $(name_fixup $1)"

Shows information about the last 10 games you played (or played by the person in the command argument)

!locate

!lm ${*:-.} alive fmt:"${*:-${user}} was last seen on \$(upper $src) ($name, L$xl $char of ${god:-No God})." stub:"Failed to locate ${*:-${user}}."

Find most recent "recent" game that hasn't ended yet. Syntax: !locate [playernick] [lm args]

!locateall

.echo $(or $(join " || " $(split " | ^" $(sub 1 $(=locateall.raw $*)))) "Failed to locate $(name_fixup "$*").")

Locates ongoing games in recent versions. Syntax: !locateall [playernick] [lm args]

!locateallall

.echo $(or $(join " || " $(split " | ^" $(sub 1 $(=locateall.rawall $*)))) "Failed to locate $(name_fixup "$*").")

Locates ongoing games in all versions. Syntax: !locateallall [playernick] [lm args]

!log

!lg ${*:-.} -log

Shows a game morgue. Equivalent to "!lg [whatever] -log"

!log10

!lg xyz x=log($*) fmt:"${x[0]}"

Find the base 10 log of a given number. Try: !log10 100 or !log10 15.5

!makhlebmarks

!lm ${1:-.} mark newmakhleb $* s=regexp_replace(noun, "accepted the Mark of( the)?", "") title:"Makhleb marks taken by $(name_fixup ${1:-.})$(argst $*)" stub:"No Makhleb marks taken by $(name_fixup ${1:-.})$(argst $*)"

Shows you which marks you've taken. Syntax: !makhlebmarks [playernick] [lm args]. Try: [!makhlebmarks . won] or [!makhlebmarks * recent / won o=%]

!mediandur

.echo $(let* (times (split '|' $(!lg * $* s=name x=median(dur) o=median(dur) fmt:'$x' notitle join:'|' stub:'N/A')) median (if (= $times 'N/A') "N/A" (elt (/ (length $times) 2) $times))) "Median game duration of the median player$(argst $*): $median")

The median game duration of the median player. A reasonable indicator of how long a game typically lasts. Try !mediandur * recent won urune=3

!megaprogress

.echo $(name_fixup ${1:-.})$(argst $*) megaprogress: $(let (num (!lg ${1:-.} $* won !trunkonly x=cdist(char) fmt:"${x[0]}") den (!lg * cao !alpha cv>=0.10 crace!=LO|Yak x=cdist(char) fmt:"${x[0]}")) $num"/"$den" ("$(/ (* 100 $num) $den)"%)")

It includes all combos from stable that are playable online now, starting from 0.10 and excluding trunk-only combos

!megaprogress2

.echo $(let* (re (comboregex ${2:-----}) filt (fn (ls) (filter (fn (char) (re-find $re (lower $char))) $ls)) denom (length (filt (playableallls))) numer (- $denom (length (filt (unwon_raw (playableallls) ${1:-.} *))))) "Megaprogress for $(name_fixup ${1:-.})$(argst ${2:-}): $(percent-print $numer $denom).")

Like !megaprogress but much faster, at the expense of less flexible filters. Shows your progress with all sp/bg combos that are playable in stable versions online. Optionally takes filters in the form of sp-- or --bg. Try: !megaprogress2 . --fe

!megaunwon

!lg * $(ignore $1)$* s=char o=-char char=$(!lg * cao !alpha cv>=0.10 crace!=LO|Yak s=char fmt:'${.}' join:'|' notitle) title:"Unwon megaprogress chars$(argst $*)" stub:"All megaprogress chars have been won$(argst $*)" join:' ' fmt:"${.}" / won $(if $1 @$1) ?: N=0

Shows unwon combos that are playable in stable online versions. Try: !megaunwon . gn

!megaunwon2

.echo $(let* (re (comboregex ${2:-----}) combos (filter (fn (char) (re-find $re (lower $char))) (unwon_raw (playableallls) ${1:-.} *)) name $(name_fixup ${1:-.}) args $(argst ${2:-})) (if $combos "Unwon playable$args combos for $name: $combos" "$name has won all playable$args combos!"))

Like !megaunwon but much faster at the expense of less flexible filters. Shows unwon combos that are playable in stable online versions. Filters are in the form of sp-- or --bg. Try: !megaunwon2 . gn--

!monsterfeelings

.echo $(let* (monster (findmonster ${*:-hydra}) time (secondssince (stamptime (!lg * cikiller="$monster" x=end fmt:'${x[0]}')))) (if $monster "The ${monster}s are $(if (< $time 300) "happy!" (if (< $time 3600) "content." (if (< $time 86400) "restless." "angry!")))" "No recent games with cikiller $*"))

A silly command that tells you how a monster type is feeling, under the assumption that monsters are happier when they've killed a player recently. Spaces are ignored and you can use ^ to match the start or $ to match the end of the monster name. Try [!monsterfeelings orboffire] or [!monsterfeelings elf pyro] or [!monsterfeelings ^orc$].

!nandwon

.echo $(let* (n (int ${1:-1}) combos (sort (map (fn (kv) (elt 0 $kv)) (filter (fn (kv) (= (- $n 1) (indexof w (split "" (sub 0 $n (elt 1 $kv)))))) (apply hash (split > (=nandwonlg ${2:-.} $*)))))) len (length $combos) name "$(name_fixup ${2:-.})$(argst $*)") (if (= 0 $len) "No ${n}-and-won combos for $name." "$len ${n}-and-won combos for $name: $(join " " $combos)"))

See which characters you won on exactly the Nth try! Syntax: !nandwon [N] [playernick] [lg filters]

!nchoice

.echo $(let (combo (if (is_int ${1:--1}) (nth (int ${1:--1}) $(split | (replace " => " | (!kw nchoice)))) $1)) (let (wins (!lg * t won char=$combo fmt:"$n" stub:"0")) (if (and (> (int $wins) 0) (= ${1:-x} x)) (=nchoice.new) (concat (canonicalise char $combo) ": $wins $(plural win (int $wins)) || " (or (=lastnchoice.combostatus $combo) "No $combo games in progress.")))))

Shows information about nchoice games during the tournament. Syntax: !nchoice [combo]

!nchoice-credit

.echo $(map (fn (x) (concat (nth 1 $x) "(" (nth 0 $x) "),")) (transpose (list (sub 0 -1 (split | (=kw nchoice))) (split " " (!nchoice-credit.helper)))))

Shows the first player to win each nchoice combo during the tournament.

!nchoiceclasscounts

!lg * t nchoice $* s=regexp_replace(char, "^..", "") x=+cdist(char) fmt:"${.}: $x[0]" title:"Nemelex Choice class combo counts$(argst $*)"

How many of each class was in the most recent set of nchoice combos?

!nchoiceleaders

.echo Most nchoices won: $(join ", " (sortby (fn (kv) (* -1 (int (nth 1 $kv)))) (map (fn (kv) "$kv[0] $kv[1]") (freqhash (split (!lg * won t nchoice s=char,gid x=-min(rend),min(name) fmt:'$x[1]' pfmt:'$(sub 0 9 (split $child))' join:' '))))))

Shows how many nchoices each player "got" (by being one of the first 9 to win). Might be slightly more up to date than the website.

!nchoiceruined

!lg * nem-eligible !nchoice t won $* s=char fmt:'${.}' title:"Ruined (formerly) eligible nemelex choice combos$(argst $*)" stub:"No eligible nemelex choice combos$(argst $*) have been ruined!"

Which elibigle nchoice combos were disqualified by being won before being chosen.

!nchoicespeciescounts

!lg * t nchoice $* s=regexp_replace(char, "..$", "") x=+cdist(char) fmt:"${.}: $x[0]" title:"Nemelex Choice species combo counts$(argst $*)"

How many of each species was in the most recent set of nchoice combos?

!nchoicetimes

.echo $(let* (combotimes (nchoicetimes-ct ${1:-t} ${2:-nchoice}) times (cons (rtime-to-time (!lg * ${1:-t} min(start) x=start fmt:'$x[0]')) (map (fn (ct) $ct[1]) $combotimes))) (join ", " (map (fn (i) "$(nth 0 (nth (- (int $i) 1) $combotimes)) $(deltatime (elt (- $i 1) $times) (elt $i $times))") (range 1 (- (length $times) 1)))))

Shows the time taken to win each nchoice combo; measuring the difference between the time the nchoice combo became availible to when it was first won. Syntax: !nchoicetimes [tournament keyword] [nchoice keyword]

!neglected

!lg * title:"Neglected combos$(argst $*)" playable s=char won x=+min(now() - end) fmtxyears $*

Shows the most "neglected" playable combos - combos that haven't been won in the longest time. Combos that have never been won won't show up (for those, see !neverwon). Try [!neglected] or [!neglected sp].

!nem-chances

!echo $(let* (nc (nem-chosen) nr (nem-remaining) nw (nem-weights $nc $nr) tw (apply ${+} $nw) num (length $nr)) (.echo Remaining eligible Nemelex Choices (chance): $(map (fn (i) (sprintf "$(elt $i $nr)(%2.2f%%)" (* 100 (/ (float (elt $i $nw)) $tw)))) (reverse (sort (fn (x y) (<=> (elt $x $nw) (elt $y $nw))) (range 0 (- $num 1)))))))

What are the odds that an eligible nchoice combo will be picked next?

!nem-chances-filtered

.echo $(let* (nc (nem-chosen) nr (nem-remaining) nw (nem-weights $nc $nr) tw (apply ${+} $nw) fnr (apply nem-remaining-filtered || (split " " $*)) ids (subset-ids $nr $fnr)) (.echo possible nchoices$(argst $*): $(map (fn (i) (sprintf "$(elt $i $nr)(%2.2f%%)" (* 100 (/ (float (elt $i $nw)) $tw)))) (reverse (sort (fn (x y) (<=> (elt $x $nw) (elt $y $nw))) $ids)))))

What are the odds that an eligible nchoice combo will be picked next? Takes lg filters, but negated. Try: [!nem-chances-filtered !op] to see octopode combo chances.

!nem-eligible-remaining

!echo $(nem-remaining)

Which combos are eligible nchoices that haven't been disqualified (by being won or picked already).

!nemeligibleclasscounts

!lg * recent ${1:-nem-eligible} $* s=regexp_replace(char, "^..", "") x=+cdist(char) fmt:"${.}: $x[0]" title:"Eligible Nemelex Choice class combo counts (${1:-nem-eligible})$(argst $*)"

Find out how many of each background are in the nem-eligible keyword (ignoring if they've been picked or disqualified). Syntax: !nemeligibleclasscounts [nem-eligible keyword]

!nemeligiblespeciescounts

!lg * recent ${1:-nem-eligible} $* s=regexp_replace(char, "..$", "") x=+cdist(char) fmt:"${.}: $x[0]" title:"Eligible Nemelex Choice species combo counts (${1:-nem-eligible})$(argst $*)"

Find out how many of each species are in the nem-eligible keyword (ignoring if they've been picked or disqualified). Syntax: !nemeligiblespeciescounts [nem-eligible keyword]

!next

.echo $(let* (p ${1:-${user}} c (last_win $p) e (exact-entry ~${p}_next 1) needcombo (or (= '' $e) (has_won $p $e)) char (if $needcombo (=newnext $p) $e)) (next_output $p $c $e $needcombo $char))

Gives you a combo that you haven't won yet. Will remember your current combo and only change when you win it; only available for players who have already won. See !help !next-pref and !help !next-cheat for other options.

!next-cheat

.echo $(no_pm (do (if (= 0 (length (exact-entry ~${user}_next 1))) "" (ldb-rm! ~${user}_next 1)) (!next)))

Rerolls your current !next combo. Cheating!

!next-pref

.echo $(no_pm (do (if (= 0 (entrylength ~${user}_pref)) (ldb-add ~${user}_pref 1 "$*") (ldb-set! ~${user}_pref 1 "$*")) "New !next preferences for ${user}: ${*}."))$(ignore (concat $*))

Sets restrictions on what combos !next will give you, e.g. "!next-pref --en !mu--" to receive a random non-mummy enchanter you haven't won yet. Use !next-pref-append to add new restrictions on at the end of your current prefs.

!next-pref-append

.echo $(no_pm (do (if (= 0 (entrylength ~${user}_pref)) (ldb-add ~${user}_pref 1 "$*") (ldb-set! ~${user}_pref 1 "$(entry ~${user}_pref 1) $*")) "New !next preferences for ${user}: $(entry ~${user}_pref 1)."))$(ignore (concat $*))

see {!help:!next-pref}

!nicklength

.echo $(let (results (!nick $1)) (if (str-find? "No nick mapping for" $results) 0 (- (length (split " " $results)) 3)))

Count how many words (usually player names) are in a nick. Try !nicklength greatplayers

!nonaut

.echo $(let* (name (name_fixup ${1:-.}) autsec (split (!lg ${1:-.} x=sum(aut),sum(dur) notitle fmt:"${x[0]} ${x[1]}" $*)) aut (float (elt 0 $autsec)) secs (pduration (elt 1 $autsec))) (sprintf "There are %1.2f non-arbitrary units of time per second for $name$(argst $*)." (/ $aut $secs)))

Find out how much real-life time the average aut is for the selected games. Try !nonaut . recent

!nwhere

.echo $(let (combo (if (is_int ${1:--1}) (nth (int ${1:--1}) $(split | (replace " => " | (!kw nchoice)))) $1)) (let (wins (!lg * t won char=$combo fmt:"$n" stub:"0")) (if (and (> (int $wins) 0) (= ${1:-x} x)) (=nchoice.new) (concat (canonicalise char $combo) ": $wins $(plural win (int $wins)) || " (or (=lastnchoice.combostatus2 $combo) "No $combo games in progress.")))))

Shows where the current nchoice characters are. Optionally you can supply it with a number or combo code to check that combo. Syntax: !nchoice [nth or combo]

!oneandwon

.echo $(let (l (length (split , (!lg ${1:-.} $* rstart=$(!lg ${1:-.} $* s=char x=min(rstart) fmt:"${x[0]}" join:"|") won s=char stub:"")))) (!lg ${1:-.} $* rstart=$(!lg ${1:-.} $* s=char x=min(rstart) fmt:"${x[0]}" join:"|") won s=char title:"$l chars won first try for $name" stub:"No chars won on first try for $name"))

Show combos won on the first attempt of that combo.

!oneandwonchar

!rg * playable won char!=$(!lg ${1:-.} s=char join:"|" fmt:"${.}" stub:"") $* fmt:"The RNG chooses: $char" stub:"${1:-.} has played every char."

Pick a random character that you haven't played yet, weighted by how often it has been won.

!oneandwonclass

!lg ${1:-.} $* rstart=$(!lg ${1:-.} $* s=class x=min(rstart) fmt:"${x[0]}" join:"|") won s=class title:"classes won first try for $name" stub:"No classes won on first try for $name"

Shows which classes you won on the first try! Syntax: !oneandwonclass [player nick] [lg args]

!oneandwongods

!lg ${1:-.} $* rstart=$(!lg ${1:-.} $* s=god x=min(rstart) fmt:"${x[0]}" join:"|") won s=god title:"Gods won first try for $name" stub:"No gods won on first try for $name"

Which gods did you win with first try? Type !oneandwongods and see!

!oneandwonspecies

!lg ${1:-.} $* rstart=$(!lg ${1:-.} $* s=crace x=min(rstart) fmt:"${x[0]}" join:"|") won s=crace title:"Races won first try for $name" stub:"No species won on first try for $name"

Shows which species you won on the first try! Syntax: !oneandwonspecies [player nick] [lg args]

!orbrunboris

!lg * gid=$(!lm * orb killer=Boris s=gid fmt:"${.}" stub:"0" join:"|") stub:"No orb run kills for Boris yet." $*

Shows the last time Boris killed a player during the orb run (no felid mini-deaths don't count!).

!owned

!lg ${1:-.} $* x=tdam,mhp tdam>=${mhp} tdam>70 !((ak place=abyss xl<5)) stub:"$name hasn't been owned by Crawl yet. $name should play some more ;)"

Games in which the player lost all of their hp in a single turn. The damage must be greater than 70 and low level AKs in abyss don't count. Try: !owned or !owned * recent

!percent

.echo $(if (and (= 2 (length (split $*))) (re-find "^\d+\.?\d*$" $1) (re-find "^\d+\.?\d*$" $2)) (percent $1 $2) (!help !percent))

You must give it 2 numbers. It takes the first number and divides it by the second number. Try: !percent 1 3

!personality

.echo $(let* (name $(name_fixup ${1:-$user}) won (=personality.won ${1:-.} $*) sp (=personality.sp $won $1 $*) bg (=personality.bg $won $1 $*) god (=personality.god $won $1 $*) enemies (=personality.enemies $1 $*) skills (=personality.skills $1 $*) places (=personality.places $1 $*)) "$name loves $sp, $bg, and $god but hates $enemies. $name is good at $skills but bad at $places.")

A cute lil blurb about your crawl games. Uses +sum(dur) to rank everything so lategame statistics are weighted more than early game statistics (though there are typically more games that end early and those add up!). Try [!personality] or [!personality * t] or [!personality . recentishish] or [!personality @greatplayers chei recent]

!polytheist

.echo $(greathelper god ${1:-.} gods polytheist "won playable:god")

Show which gods you have not won while worshiping.

!portaldeathrates

!lm ${1:-.} portal br.enter $* s=br o=% title:"Portal death rates for $(name_fixup ${1:-.})$(argst $*)" stub:"No portal entries for $(name_fixup ${1:-.})$(argst $*)"/ lg:br=$noun

Shows the ratio of players that died in a portal branch to players that entered that branch. Syntax: !portaldeathrates [playernick] [lm args]

!pr

.echo https://github.com/crawl/crawl/pull/$1

Print a link to a github pull request by number. For example: !pr 3722

!progress

.echo $(name_fixup ${1:-.}) progress: $(let (num (!lg ${1:-.} $* playable won x=count(char) fmt:"${x[0]}") den (!lg * playable recent x=count(char) fmt:"${x[0]}")) $num"/"$den" ("$(/ (* 100 $num) $den)"%)")

Shows your progress in winning all currently playable (in trunk) combos. Syntax: !progress [player nick] [lg args]

!progress2

.echo $(let* (re (comboregex ${2:-----}) filt (fn (ls) (filter (fn (char) (re-find $re (lower $char))) $ls)) denom (length (filt (playablels))) numer (- $denom (length (filt (unwon_raw (playablels) ${1:-.} *))))) "Progress for $(name_fixup ${1:-.})$(argst ${2:-}): $(percent-print $numer $denom).")

Like !progress but much faster in exchange for a less flexible filter. Filter in the form of sp-- or --bg. Shows your progress in winning all currently playable (in trunk) combos. Syntax: !progress2 [player nick] [filter]

!raceoneandwoncounts

!lg ${1:-.} $* char=$(join '|' (split ', ' (re-replace '^[^:]+: ' '' (!oneandwon ${1:-.} $*)))) s=crace won title:"Race oneandwon counts for $(name_fixup $1)$(argst $*)" stub:"No oneandwons for $(name_fixup $1)$(argst $*)"

Counts how many combos you've one-and-won for each species. Syntax: !raceoneandwoncounts [playernick] [lg args]

!racialwill

=racialwill

Show how much will each species gets per level.

!randchar

!rng $(join ' ' (split '|' $(=kw playable)))

A completely random playable character combo. Some species or backgrounds are *slightly* more or less likely due to some combinations being impossible. Felids are less likely than other species, for example.

!randcmd

.echo $(let* (helpcmds (map (fn (entry) (replace "!help:" $entry)) (ldb-search-terms "!help:")) listcmds (split ", " (replace "User Commands: " (!cmd -ls))) result (randnth (setintersection $helpcmds $listcmds))) (!help $result))

Picks a random command with a description and displays that description.

!randgreat

.echo $(let (eligible (greatvaliddoubles ${1:-.}) name (name_fixup ${1:-.})) (if (> (length $eligible) 0) "Random combo with species or background that $name hasn't won: $(!wtf $(randnth $eligible))" "$name has won all species and backgrounds!"))

Picks a random character combo with a species OR a background you haven't won yet. Doesn't take lg filters. Syntax: !randgreat [playername]

!randomgame

!lm * alive !cdo -random $* time>${now()-interval('10minute')} x=src fmt:'$(lookup ${x[0]} (watchhash))${name}'

Spectate a randomgame that's been active in the last 10 minutes. Syntax: !randomgame [lm args]

!randomnewbie

!echo $(let* (pl (apply hash (split | (!lm * alive !cdo $* time>${now()-interval('10minute')} x=max(src) s=name join:'|' fmt:'$(lower ${.}|$x[0])' notitle stub:""))) npl (split | (!lg $(join | (hash-keys $pl)) fmt:'$(lower ${.})' join:'|' s=name won notitle stub:"" ?: N<4)) sel (elt (rand (length $npl)) $npl)) (lookup (elt $sel $pl) (watchhash))$sel)

Prints a watch link for a random new player with 1, 2 or 3 wins.

!raretitles

.echo Rare titles for $(name_fixup ${1:-.}): $(join ", " (map (fn (xs) $(replace-n 1 " " / $xs)) (sortby (fn (xs) (- (int (nth 1 $xs)) (int (nth 2 $xs)))) (split ", " (!lg * s=title won notitle fmt:'$(re-replace "(\d+)\/(\d+)x" "$1 $2" ${n_x}) ${.}' / name=${1:-.} ?: N>0)))))

Titles you've won, sorted by the percentage your wins are of all wins (for instance, if you have 2 of the 3 wins for a title, it's 66%). Sorry, if you have 1/4 wins (25%) it'll be treated as less rare than having 2/5 (40%).

!rc

=eval $(=rc.helper $*)

Print a player's online rc (settings) file link. Syntax: !rc [playernick] [canonical version] [server acronym]. Try [!rc] or [!rc rypofalem 0.34 cdi]

!readall

.echo $(let (x (ldb-canonical-term $*)) (join " / " $(map (fn (n) $(entry $x $n)) $(range 1 $(entrylength $x)))))

Read an entire ldb entry at once. See also !browse.

!recentwinrates

!lg * recentishish year title:"High winrate players this year$(argst $*) (winrate wins name)" fmt:'${n_ratio} $(re-replace "^(\d+).*" $1 ${n_x}) ${.}' $* s=name o=% / won ?: N>=20

Top winrates in the last year on modern versions (up to 3 versions behind stable). Listed players need 20+ wins under those conditions to be eligible!

!rg

!lg ${*:-.} -random

Like !lg, but picks a random game fuifilling the given criteria.

!rm

!githubsearch

Like !lm, but picks a random milestone fuifilling the given criteria.

!rtcounts

.echo Players with the most combo low realtime records$(argst $*): $(join ", " (map (fn (kv) "$kv[0]: $kv[1]") (sortby (fn (kv) (* -1 (int $kv[1]))) (freqhash (split ", " (!lg * won s=char,gid x=-min(dur),min(name) fmt:'$x[1]' pfmt:'$(nth 0 (split ", " $child))' $*))))))

List players by the number of combo realtime win records they have. Try: !rtcounts t or !rtcounts playable or !rtcounts urune=15

!ryposchoice

.echo $(let* (all (map split (split '|' (!lg * !nchoice playable s=-char notitle stub:"N/A" fmt:'$(re-replace "^(\d+).*" "$1" ${n_x}) ${.}' join:'|' / $* recentishish won))) min (int (nth 0 (nth 139 $all))) elig (map (fn (x) (nth 1 $x)) (filter (fn (x) (<= (int (nth 0 $x)) $min)) $all))) "$(length $elig) combos with <=$min recentishish wins: $(sort $elig)")

A suggested nchoice combo generation method that measures only recentishish wins and picks at least 140 combos + all combos with the same number of recentishish wins. Hopefully it biases recently added species/backgrounds less.

!sbranchratio

!lm ${1:-*} $* br.enter=shoals|snake|spider|swamp s=br o=% title:"Death rates in 1st rune S branches for $(name_fixup ${1:-*})$(argst $*)" stub:"Current death rates in S branches for $(name_fixup ${1:-*})$(argst $*)" / lg:br=$noun lg:urune<=1

Branch entry to branch death (with 1 or fewer runes) ratio. Syntax: !sbranchratio [player nick] [lm args]

!score

.echo Approx score for $1 runes in $2 turns: $(* 100000 (int (/ (+ 254000 (* $1 (+ $1 12) 1000) (* 2000 $1) (/ (* 6250000000 $1 $1) $2) 800000) 100000)))

Usage: !score <runes> <turns>

!scorepage

!scoringlink

see {!help:!scoringlink}

!scoringlink

.echo https://crawl.akrasiac.org/scoring/players/$(lower (nth 0 (split ' ' (nick-aliases (name_fixup ${1:-.})))))

A link to a player's or nick's scorepage. In the nick case, the first word in the nick is used.

!send

.echo Sending $(ignore $1)$* to ${1}.

Usage: !send <person> <thing>. Sends <thing> to <person> (this is a campaign promise).

!set-nchoice

!echo $(let* (c (apply (fn (. args) (!ftw $args)) (split ' ' (!wtf $1))) nc (=kw nchoice) pc (nth -1 (split | $nc))) (if (> (str-find ? $c) -1) "Unknown char: $1" (if (> (str-find "No key" $nc) -1) (!kw nchoice $c) (if (= "0" (!lg * t won char=$pc fmt:"$n" stub:"0")) "Current Nemelex Choice $pc isn't won" (!kw nchoice $nc|$c)))))

When !nchoice tells you to use this command, check the tournament website for the next nemelex choice combos and use this command to add them. If there are multiple new combos do add them in order! Syntax: !set-nchoice <4 letter combo>

!snipe

!lg * playable $* s=char x=-max(sc) title:"The lowest high scores are" fmt:"${.} [${x}]"

Shows you the lowest high score for each combo. Useful if you wish to steal a high score! Try: [!snipe gnoll t]

!speciescanoneandwon

.echo $(let (r (fullrace $1)) (!lg * playable crace="$r" $(ignore $1)$(ignore $2)$* cls!=$(!lg ${2:-.} crace="$r" $* s=regexp_replace(char, "^..", "") fmt:"${.}" join:'|' title:'') s=char o=-. fmt:"${.}" title:"Available combos for $(name_fixup ${2:-.}) to oneandwon with $1$(argst $*)" stub:"No vailable combos for $(name_fixup ${2:-.}) to oneandwon with $1$(argst $*)"))

Prints combos that the user hasn't played yet for the supplied species. Syntax: !speciescanwonandwon <species abbreviation>

!specieswords

.echo $(map (fn (p) (.echo $1${p})) (sort (split "|" (!lg * playable current alpha s=regexp_replace(char, "^..", "") join:"|" fmt:"${.}"))))

Prints potential 4-letter combos for a supplied 2-letter species. Try: !specieswords Li

!speedabyss

.echo $(let* (runes (speedabyss3runes ${1:-.} $*) enters (speedabyss3enters ${1:-.} $*) times (sort (speedabyss3helper $runes $enters)) min (car $times) max (last $times) med (listmid $times) avg (listavg $times)) (sprintf "Abyss rune retrievals for $(name_fixup ${1:-.})$(argst $*): Min: $min, Max: $max, Median: $med, Average: %.2f" $avg))

Gives min, max, median, and average turns it takes from the time a player last entered the abyss to when they picked up the rune. Try: !speedabyss * current

!speedcoc

!speedrune Coc ${1:-.} $*

Returns shortest number of turns from entering Coc to picking up the Icy rune. Usage: !speedcoc <name> <other options>

!speeddis

!speedrune Dis ${1:-.} $*

Returns shortest number of turns from entering Dis to picking up the Iron rune. Usage: !speeddis <name> <other options>

!speedgeh

!speedrune Geh ${1:-.} $*

Returns shortest number of turns from entering Geh to picking up the Obsidian rune. Usage: !speedgeh <name> <other options>

!speedlairenter

!lm $(name_fixup ${1:-.}) br.enter=Lair min=turns x=turns fmt:"$(name_fixup ${1:-.})'s fastest Lair enter: ${x[0]}" stub:"$(name_fixup ${1:-.}) has never reached Lair."

A player's quickest time to enter lair. Syntax: !speedlairenter [player nick]

!speedpan

.echo $(let* (turns (map int (split (!lm ${1:-.} ((br.enter || rune)) br=pan $* s=gid x=-${max(turns)-min(turns)} fmt:'${x[0]}' notitle join:' ' stub:'-1' gid=$(=speedpan.eligible ${1:-.} $*))))) (sprintf "First Pan entry to last Rune turns for $(name_fixup ${1:-.})$(argst $*): Min: $(car $turns), Max: $(last $turns), Median: %.2f, Average: %.2f" $(listmedian $turns) $(listavg $turns)))

Stats of how quickly a playernick gets all Pan runes. Try: !speedpan * t

!speedrune

.echo $(if (= "" $1) (!help !speedrune) (=speed.generic ${2:-.} br.enter rune $(replace " " _ "Branch entry to Rune pickup turns for") br=$1 $*))

Returns min, max, median, and average turns from entering a branch to finding it's rune. Usage: !speedrune <branch> [name] [lg args]. Try !speedrune tomb or !speedrune vaults * recent

!speedtar

!speedrune Tar ${1:-.} $*

Returns shortest number of turns from entering Tar to picking up the Bone rune. Usage: !speedtar <name> <other options>

!speedtesseract

=speed.generic ${1:-.} tesseract.activate tesseract.kill $(replace " " _ "Tesseract activation to kill turns for") $*

Stats for how quickly a playernick kills tesseracts. It measures turns between tesseract.activate and tesseract.kill milestones so games with no activate milestone aren't counted sadly. Try: !speedtesseract * t

!speedtomb

!speedrune Tomb ${1:-.} $*

Stats of how quickly a playernick gets the tomb rune. Try: !speedtomb * t

!speedvaults5

=speed.generic ${1:-.} br.end=vaults rune=silver $(replace " " _ "Vaults:5 to Silver rune pickup turns for") $*

Stats of how quickly a playernick does gets the vaults rune, starting at when they entered V:5. Try: !speedvaults5 * t

!speedzot

=speed.generic ${1:-.} br.enter=zot orb $(replace " " _ "Zot entry to Orb pickup turns for") $*

Gives min, max, median and average turns from entering Z:1 to picking up the Orb. Try !speedzot * recent

!speedzot5

=speed.generic ${1:-.} br.end=zot orb $(replace " " _ "Zot:5 to Orb pickup turns for") $*

Gives min, max, median and average turns from entering Z:5 to picking up the Orb. Try !speedzot5 * recent

!spells

.echo $(if (re-find "^\d+" $*) (ldb-find "list_of_spells_by_level[Level $*") (ldb-find "list_of_spells_by_school[$*.*:"))

Provide either the spell school or level and it will bring up the appropriate list_of_spells learn database entry. Try: !spells 7 or !spells conj

!spellskills

.echo Spell skills at >=15 skill won for $(name_fixup ${1:-.})$(argst $*): $(join ", " (reverse (sortby (fn (s) (int (re-replace '.*: (\d+)\/.*' '$1' $s))) (map (fn (x) (re-replace "(.*): N=(\d+)\/(\d+) \((\d+\.\d+)\%\)" '$1: ${2}/$3 ($(sprintf "%.1f%%" $4))' (!lg ${1:-.} won !dj !gn $* / fifsk=~$x title:"$x"))) (list air alch conj earth fire forge hexes ice necro summon transloc)))))

What percentage of winning non-dj non-gn games finished with at least 15 for each spell skill. Try: !spellskills * t

!spercentiles

.echo $(let* (xs (split "|" (!lg * fmt:'$(re-replace "\/.*" (groupcount ${n_x}))' join:'|' notitle o=-n $*)) ps (join " " (map (fn (n) "$n%[$(percentile $xs $n)]") (list 1 5 10 20 30 40 50 60 70 80 90 95 99)))) "S percentiles for $(argst $*): $ps")

Give it !lg query arguments for ***sorted** s= and it will spit out percentiles. Try: [!spercentiles * s=-name won t] to see the percentiles for how often players won during the tournament.

!splatratio

!lg ${1:-.} recentish xl>=17 $* s=name o=-% title:"Percent of recentish chars with XL>=17 killed for $(name_fixup $1)$(argst $*)" stub:"No recentish chars with XL>=17 for $(name_fixup $1)$(argst $*)" / !won

Ratio of games in recent versions that made it to XL17 but died (compared to all games that made it to XL17). Syntax: !splatratio [playernick] [lg args]

!stalk

!gameinfo

see {!help:!gameinfo}

!stats

.echo $(if (= (lower (sub 2 $1)) wn) "Wanderer starting stats are random. Stat gain: $(getldbsid (combo_to_race $1))" $(!lm * begin char=$1 ${2:-recent alpha} $* x=str,int,dex fmt:"Starting stats for ${char}: Str $x[0] Int $x[1] Dex $x[2]. Stat gain: $(getldbsid (combo_to_race $1))" stub:"Go start a ${1:-?} if you want me to know its starting stats."))

Provides starting stats for the given starting character, such as !stats GhBe.

!statspread

.echo $(let* (sid (!lg ${1:-.} $* x=avg(str),avg(int),avg(dex) notitle fmt:'${x[0]} ${x[1]} ${x[2]}') str (nth 0 $sid) int (nth 1 $sid) dex (nth 2 $sid) sum (+ $str $int $dex)) "Average stats for $(name_fixup ${1:-.})$(argst $*): STR: $(nth 0 $sid) ($(percent $str $sum)) INT: $(nth 1 $sid) ($(percent $int $sum)) DEX: $(nth 2 $sid) ($(percent $dex $sum))")

Displays the str/dex/int in all games as a percentage of the total of all stats. Takes !lg arguments. Try !statspread or !statspread * recent won urune=3

!stepdown

.echo $(if (< (int $1) (int ${3:-${2}})) $1 (+ (- ${3:-${2}} $2) (stepdown (- $1 (- ${3:-${2}} $2)) $2)))

Calculates stepdown_value(int base_value, int stepping, int first_step). Here first_step = stepping by default. Example: "!stepdown n 50" for the spellpower stepdown. Doesn't apply a ceiling_value.

!streakall

.echo $(let* (streaks (apply hash (flatten (map (fn (kv) (list (nth 0 $kv) (length (split "," (longest (split | (nth 1 $kv))))))) (apply hash (split ">" (=streakall-lg $1 $*))))))) "Longest streaks in players with at least $1$(argst $*) wins: $(join ", " (map (fn (player) "$player: $(elt $player $streaks)") (reverse (sorthashcounts $streaks))))")

Finds the largest streaks with the specified lg filters. First argument is the minimum number of wins to consider a player (so it doesn't timeout). [!streakall 24 wn] Finds the longest Wanderer streak among players with at least 24 Wanderer wins. Try [!streakall 30 fe--] or [!streakall 5 month]

!streakall2

.echo $(let* (streaks (apply hash (flatten (map (fn (kv) (list (nth 0 $kv) (length (split "," (longest (split | (nth 1 $kv))))))) (apply hash (split ">" (=streakall2-lg $*))))))) "Longest streaks for $(argst $*): $(join ", " (map (fn (player) "$player: $(elt $player $streaks)") (reverse (sorthashcounts $streaks))))")

Like !streakall but with no subcommand to filter by wins. Advanced users can make their own filter instead! Try: [!streakall2 @greaterplayers op]

!streakbg

=streakby class role_abbrev

Lists a player's best streaks with each background.

!streakgod

=streakby god god_abbrev

Lists a player's best streaks with each god. (This is a silly command because it counts games where you died before getting your god as Atheist games and also you could cheese this by using a strong god and switching to a target god only on the orbrun. Still, satisfy your curiosity.)

!streaksp

=streakby crace species_abbrev

Lists a player's best streaks with each species.

!tccounts

.echo Players with the most combo low turncount records$(argst $*): $(join ", " (map (fn (kv) "$kv[0]: $kv[1]") (sortby (fn (kv) (* -1 (int $kv[1]))) (freqhash (split ", " (!lg * won s=char,gid x=-min(turns),min(name) fmt:'$x[1]' pfmt:'$(nth 0 (split ", " $child))' $*))))))

List players by the number of combo turncount win records they have. Try: !tccounts t or !tccounts playable

!tiamat

.echo $(let (player (name_fixup $1) won (hashlist (split ", " (!lg ${1:-.} won dr race!=mottled_draconian s=race fmt:'$(replace " Draconian" ${.})' stub:'' notitle)))) (if (>= (length $won) 8) "$player is a Tiamat player" "$player is not a Tiamat player. Unwon Draconians: $(join ", " (filter (fn (colour) (not (elt $colour $won))) (tiamatcolours)))"))

A Tiamat Player is one who has won with every colour of draconian. Use the command to see if a player is a Tiamat Player or if not, which colour draconians they need to win with. Syntax: !tiamat [playernick]

!tile

.echo $(replace github.com raw.githubusercontent.com (replace blob/ (!source $(replace ' ' _ "$*").png)))

Get a github link to a tile by filename (without the .png extension). Try [!tile hydra3]

!timeuntilspecieswon

.echo $(let (times (apply hash (split "|" (!lg ${1:-.} won $* s=crace x=min(rend) o=-. notitle fmt:'${.}|$x' join:'|')))) (concat "Time until won for $(name_fixup ${1:-.})$(argst $*): " (join ", " (sort (map (fn (sp) (!lg ${1:-.} $* crace=$(replace " " _ $sp) rend<=$(elt $sp $times) x=sum(dur),min(regexp_replace(char, '^(..).*', '\1')) notitle fmt:'${x[1]}: ${x[0]}')) (hash-keys $times))))))

The sum duration of all games before (and including) your first win for each species. In other words: how long it took you to win each species. Try !timeuntilspecieswon or !timeuntilspecieswon * t

!timeuntilwon

.echo $(!lg ${1:-.} $* rend<=$(!lg ${1:-.} $* x=rend fmt:'${x[0]}' stub:'-1' notitle won 1) x=sum(dur) title:"Playtime until first win for $(name_fixup ${1:-.})$(argst $*) ($n games)" fmt:" ${x[0]}" stub:"No games won for $(name_fixup ${1:-.})$(argst $*)")

The total playtime and games it took to win, including the winning game. Syntax: !timeuntilwon [playernick] [lg args]

!timewasters

!lg ${1:-.} s=ckiller x=+sum(dur) title:"Time wasters" $*

Lists what killed players by how much total time they wasted. 6 10-minute gnoll deaths might equal 1 1-hour hydra death! Syntax: !timewasters [playernick] [lg args]. Try: [!timewasters * current]

!tip

.echo $(let (silly (< (rand 10) 1) size (tip-adj) material (tip-material) catch (if (>= (rand 5) 1) "" "It rolls into the gutter...")) (if $silly "/me $user tips ${*:-$bot}. ${*:-$bot} falls over!" "/me $user flips a $size $material coin towards ${*:-$bot}. $catch"))

Show your appreciation by throwing coins at people! By default, it will tip the sequell IRC bot Mnoleg. Syntax: !tip [some entity]

!title

.echo ${*}: $(or $(=title.title recent $*) $(=title.skill.noinv recent $*) $(=title.skill.inv recent $*) $(=title.title !recent $*) $(=title.skill.noinv !recent $*) $(.echo cannot understand ${*}.))

Give it a title name and it will try to find the skill requirements. It's slow so be patient. It won't work with conduct titles.

!titleprogress

.echo $(let (known (!lg * x=cdist(title) notitle fmt:"${x}" stub:"0") won (!lg ${1:-.} won x=cdist(title) notitle fmt:"${x}" stub:"0") name (name_fixup ${1:-.})) (sprintf "$name has won %d out of %d known titles (%.2f%%). %s" $won $known (/ (* 100.0 $won) $known) (if (> $won 99) "$name is an entitled player!" "")))

Lets you know how many titles a player has won with, compared to all titles seen so far. Try !titleprogress . or !titleprogress Ge0ff

!toprt

!lg ${1:-*} won s=gid x=-min(dur),min(name),min(char),min(god) fmt:'$x[0] $x[1] $x[2]^$(godletter $x[3])' title:"Top Real-time wins for $(name_fixup ${1:-*})$(argst $*)" stub:"No wins for $(name_fixup ${1:-*})$(argst $*)" $*

Lists the top real-time (well, game duration) wins. Syntax: !toprt [playernick] [lg filters]. Try: [!toprt * !bot playable:sp dur<0:30:00] [!toprt * !bot playable:sp dur<1:00:00 urune=15] (capping the duration should speed it up)

!topsc

!lg ${1:-*} won s=gid x=+min(sc),min(name),min(char),min(god) fmt:'$(sprintf "%.3g" $x[0]) $x[1] $x[2]^$(godletter $x[3])' title:"High score wins for $(name_fixup ${1:-*})$(argst $*)" stub:"No wins for $(name_fixup ${1:-*})$(argst $*)" $*

Lists the top highscore wins. Syntax: !topsc [playernick] [lg filters]. Try: [!topsc * playable:sp sc>50000000 urune=15] (limiting the score and runecount should speed it up)

!toptc

!lg ${1:-*} won s=gid x=-min(turns),min(name),min(char),min(god) fmt:'$x[0] $x[1] $x[2]^$(godletter $x[3])' title:"Top Turncount wins for $(name_fixup ${1:-*})$(argst $*)" stub:"No wins for $(name_fixup ${1:-*})$(argst $*)" $*

Lists the top turncount wins. Syntax: !toptc [playernick] [lg filters]. Try: [!toptc * playable:sp turns<20000] or [!toptc * playable:sp turns<20000 urune=15] (capping the turncount should speed it up)

!tournament

.echo $(let (time (!time)) (if (str-find? tournament $time) ($time) (ldb tournament)))

Shows tournament info. Equivalent to !time during the tournament or ??tournament otherwise.

!tstats

.echo $(let (arg1 ${1:-16} arg2 ${*:-t}) (let (t (concat $arg2 " !@bot " end<$(+ (stamptime (!lg * $arg2 1 fmt:"$end")) $arg1))) "Stats after $arg1 days $(concat '(' $arg2 ')'): $(=tstats.players $t), $(=tstats.runers $t), $(=tstats.winners $t), $(=tstats.wins $t), $(=tstats.games $t), $(=tstats.winrate $t), $(=tstats.playertime $t)."))

!tstats <days> <tournament selector> for information on games/runes/wins. Example: !tstats 15 t0.14

!tuniques

!lm * t uniq s=regexp_replace(noun, ".*Lernaean.*", "the Lernaean hydra") / @${1:-.} title:"Uniques remaining for $(name_fixup $1)" fmt:"${.}" ?:N=0 den.N>=$(car (split x $(!lm * t uniq=murray|ignacio s=-uniq fmt:"${n_x}")))

Shows you uniques that you haven't yet killed in the tournament. It may not be accurate early in the tournament. Syntax: !tuniques [playername]

!turnsummary

.echo $(let* (info (split (!lg ${1:-.} $* x=gid,char,ktype,turns notitle fmt:'${x[0]} ${x[1]} ${x[2]} ${x[3]}')) out (!lm * gid=$(nth 0 $info) !portal !arena !crucible br.enter|rune|orb|god.worship s=noun x=-min(turns) fmtsimple title:"Summary for $(nth 0 $info) $(nth 1 $info)" stub:"N/A")) $(if (= 'N/A' $out) "No games found for $(name_fixup ${1:-.})$(argst $*)" "$out, $(nth 2 $info) [$(nth 3 $info)]"))

Shows the order and turns of various important milestones for a single game. Usage: !turnsummary <lg args for the game>. Try !turnsummary * won min(turns) or !turnsummary . recent max(sc) -2

!twoandwon

!lg ${1:-.} $* rstart=$(!lg ${1:-.} $* rstart!=$(!lg ${1:-.} $* s=char x=min(rstart) fmt:"${x[0]}" join:"|") s=char x=min(rstart) fmt:"${x[0]}" join:"|") won s=char title:"Chars won on second try for $name" stub:"No games won on second try for $name"

See which characters you won on exactly the 2nd try! Syntax: !twoandwon [playernick] [lg filters]

!unplayed

.echo $(!lg * playable $(ignore $1)$* s=char o=-. / @${1:-.} title:"Unplayed combos for $(name_fixup ${1:-.})$(argst $*)" fmt:'${.}' stub:"$(name_fixup ${1:-.}) has played all$(argst $*) combos" ?: N=0)

Lists your unplayed combos that are currently playable. Syntax: !unplayed [playernick] [lg filters]. Try !unplayed or !unplayed . gn

!unwon

!lg * playable $(ignore $1)$* s=char o=-char title:"Unwon playable chars$(argst $*)" stub:"All playable chars have been won$(argst $*)" join:' ' fmt:"${.}" / won $(if $1 @$1) ?: N=0

Show playable characters that have been played by someone but have never been won by anyone. Syntax: !unwon [lg filters]

!unwon2

.echo $(let* (re (comboregex ${2:-----}) combos (filter (fn (char) (re-find $re (lower $char))) (unwon_raw (playablels) ${1:-.} *)) name $(name_fixup ${1:-.}) args $(argst ${2:-})) (if $combos "Unwon playable$args combos for $name: $combos" "$name has won all playable$args combos!"))

Finds all unwon playable combos for the given player. Syntax: !unwon2 [playername] [filter]. Filter is a 4-letter word that matches character combos. Use a non-letter like - to fill in blanks. Try [!unwon2] or [!unwon2 . gn--] or [!unwon2 qw --fe].

!unwonbg

.echo $(let (eligible (unwonbg ${1:-.}) name (name_fixup ${1:-.})) (if (> (length $eligible) 0) "Random background that $name hasn't won: $(replace "Human " (!wtf hu$(randnth $eligible)))" "$name has won all backgrounds!"))

Picks a completely random playable background you haven't won yet. Syntax: !unwonbg [playernick]

!unwonsp

.echo $(let (eligible (unwonsp ${1:-.}) name (name_fixup ${1:-.})) (if (> (length $eligible) 0) "Random species that $name hasn't won: $(replace " Fighter" (!wtf $(randnth $eligible)fi))" "$name has won all species!"))

Picks a completely random playable species you haven't won yet. Syntax: !unwonsp [playernick]

!watchrandom

.echo $(let* (argtemp (split // "$*") args (list (lookupelse 0 $argtemp "") (lookupelse 1 $argtemp "")) playersrc (watchrandom-ongoing $args[0]) player (watchrandom-history $playersrc $args[1]) link (elt (elt $player $playersrc) (watchhash))) (if (bound? link) "$link$player" "No players with milestones in the last 10 minutes. (!lm filters: $args[0] // !lg filters: $args[1])"))

Gives a link to spectate a random game that was active in the last 10 minutes. You can give it lm and lg filters seperated by //. Try: [!watchrandom] or [!watchrandom mi xl>10] or [!watchrandom * // won ?: N>9] (a random game from a player with more than 9 wins).

!whichgod

!lg * won $1 recent $* s=god title:"${n} recent wins for $1$(argst $*)" stub:"No recent wins for $1$(argst $*)."

Usage: !whichgod [race and/or role]

!whichrace

!lg * won recent $(if (or (re-find ru|Ru $*) (> $(length $*) 2)) $* class=$*) s=crace title:"${n} recent wins" stub:"No recent wins for $*."

Usage: !whichrace [role or god]

!whichrole

!lg * won recent $(if (or (re-find ru|Ru $*) (> $(length $*) 2)) $* race=$*) s=role title:"${n} recent wins" stub:"No recent wins for $*."

Usage: !whichrole [race or god]

!winpercentiles

.echo $(let* (wins (split '|' (!lg * $* s=-name fmt:'$(re-replace "(\d+)/\d+" $1 $(groupcount ${n_x}))' join:'|' notitle stub:'N/A' / won ?: den.N>=${1:-100} N>=${2:-0})) percentiles (join ", " (map (fn (x) "$x: $(percentile $wins $x)") (range 4 99 5)))) "Win percentiles for players with at least ${1:-100} games and ${2:-0} wins$(argst $(ignore $1)$(ignore $2)$*): $percentiles")

Lists the wins of players at 4th-99th percentiles. Syntax: !winpercentiles [minimum games] [minimum wins] [lg args].

!winratepercentiles

.echo $(let* (wins (split '|' (!lg * $* s=name fmt:'${n_ratio}' join:'|' notitle stub:'N/A' o=-% / won ?: den.N>=${1:-100} N>=${2:-0})) percentiles (join ", " (map (fn (x) "$x: $(percentile $wins $x)") (range 4 99 5)))) "Winrate percentiles for players with at least ${1:-100} games and ${2:-0} wins$(argst $(ignore $1)$(ignore $2)$*): $percentiles")

Lists the winrate of players at 4th-99th percentiles. Syntax: !winratepercentiles [minimum games] [minimum wins] [lg args].

!woninn

.echo $(let* (n ${1:-1} combos (sort (map (fn (kv) $(elt 0 $kv)) (filter (fn (kv) (contains w (split "" (sub 0 $n (elt 1 $kv))))) (apply hash (split > (=nandwonlg ${2:-.} $*)))))) len (length $combos) name (concat (name_fixup ${2:-.}) (argst $*))) (if (= 0 $len) "No $n and won combos for $name." "$len ${n}-and-won $(if (> $n 1) "(or less!) ")combos for $name: $(join $combos)"))

Shows combos you won in N tries or less. Syntax: !woninn [n] [playernick] [lg filters].

!xldeathrate

.echo $(let* (toHash (fn (lg) (foldr xldeath-helper4 (hash) (split ", " $lg))) xlL (toHash (!lg ${1:-.} !won s=xl notitle fmt:"${.} ${n_x}" $*)) xlW (toHash (!lg ${1:-.} won s=xl notitle fmt:"${.} ${n_x}" $*)) total (xldeath-helper3 28 $xlW $xlL) result (fn (xl) (sprintf "%s: %2.2f%%" $xl (* 100 (/ (float (xldeath-helper $xl $xlL)) (- $total (xldeath-helper3 $xl $xlW $xlL))))))) (map result (range 1 27)))

Shows the rate of deaths (quits/deaths/etc) at each XL, for characters that made it to that XL. Basically, it shows something approximating the game's difficulty curve. Graphs: https://docs.google.com/spreadsheets/d/1m_aGyxgq97BKp2rZi2pksZyFaYeE58YAHAedZo2vlXo/edit Breakdown: https://gist.github.com/RypoFalem/10845d564efbf4d55f108278aa01d201

!xpercentiles

.echo $(let* (xs (split "|" (!lg * fmt:'${x[0]}' join:'|' notitle $*)) ps (join " " (map (fn (n) "$n%[$(percentile $xs $n)]") (list 1 5 10 20 30 40 50 60 70 80 90 95 99)))) "X percentiles for $(argst $*): $ps")

Give it !lg query arguments with s= and ***sorted*** x= and it will spit out percentiles for x=. Try: [!xpercentiles * s=gid x=-min(dur) won urune=3 t] or [!xpercentiles * s=name x=+median(turns) won current]

!xxx

.echo $(let (num $(rand 5 15)) "$nick $(=rndspellgesture). $num tentacled monstrosities appear! The tentacled monstrosity tentacle-slaps ${*:-Mnoleg's tentacle}! x$num")

Cast Summon Horrible Things on some puny mortal.

&dump

!lm ${1:-.} fmt:"\$(=morgue_link ${2:-${src}} \$(if \$(match -a ${3:-${cv}}) trunk ${3:-${cv}}))/${name}/${name}.txt" stub:"No milestones for $(name_fixup ${1:-${user}})."

Find a player's in-progress game dump based on their last milestone (by default) or by server (argument two) and game version (argument three). For example, to find your last 0.20 game on cbro use: &dump . cbro 0.20

&rc

!rc

Gets the rc file of the specified player, version, and server. Syntax: &rc [player selector] [canonical version] [source]. Try "&rc" for your own rc, or "&rc qw 0.20 cao" for a specific rc.

!activeservers

!lm * ktyp= type!=crash time>=$(- (utc (time)) (interval-minute 30)) s=src x=+count(gid) fmt:'$x[0]x $(upper ${.})' title:"Living games, last half-hour$(argst $*)" stub:"No milestones in the last half-hour$(argst $*)" $*

!always

!motto $(cons always ${*:-be closing})

!ancestornames

!lm ${1:-.} $* ancestor s=regexp_replace(milestone, '.*remembered their ancestor (.+)as a (battlemage|hexer|knight).*$', '\1') title:"Ancestor names for $(name_fixup ${1:-$nick})$(argst $*)"

!apts

!apt

!caorc

.echo https://crawl.akrasiac.org/rcfiles/crawl-$(replace trunk git ${2:-git})/$(!lm ${1:-.} cao x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

!cdirc

.echo https://crawl.dcss.io/crawl/rcfiles/crawl-$(replace trunk git ${2:-git})/$(!lm ${1:-.} cdi x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

!chaos

!echo $(map (fn (w) (apply concat (map (fn (c) (if (rand 2) (upper $c) (lower $c))) (split '' $w)))) (split ' ' ${*:-$(!banish)}))

!ckolog

.echo $(replace "https://crawl.kelbi.org/crawl/" "https://cko-archive.nyc3.cdn.digitaloceanspaces.com/crawl-kelbi-org/" (!log $* cko)).gz

!clap

!emote 👏 $*

!clapall

!emoteall 👏 $*

!cncrc

.echo https://archive.nemelex.cards/rcfiles/crawl-$(replace trunk git ${2:-git})/$(!lm ${1:-.} cnc x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

!conducttitles

!lg ${1:-.} cv>=0.34-a won title~~pinnacle|flawless|true_ascetic|incurious|ruthless|miser|chaos_fanatic|keeper_of_the_flame title!=merchant_of_misery s=title title:"Conduct titles for $(name_fixup ${1:-.})$(argst $*)" stub:"No conduct titles for $(name_fixup ${1:-.})$(argst $*)" $*

!cookie

.echo $(let (recipient ${1:-$user} cookie (cookie_type)) "$(if (= $recipient $user) "$bot offers $user a" "$user offers $recipient a") ${cookie}. $(if (= "fortune cookie" $cookie) (!crystalball $recipient) (if (= "browser cookie" $cookie) "Will $recipient accept?" "Baked by $(rng-god-uniq) with love!"))")

!cpodump

!lm ${1:-.} cpo fmt:"https://crawl.project357.org/morgue/${name}/${name}.txt"

!dumplst

!dumpstash $*

!dumpplease

!learn q dump

!dumpstash

.echo $(replace .txt .lst $(&dump $*))

!echo

.echo $*

!emote

!echo ${1:-🐢} $(join " ${1:-🐢} " (split " " "$(ignore $1)${*:-REMOVE FELIDS}")) ${1:-🐢}

!emoteall

!echo ${1:-🐢} $(join " ${1:-🐢} " (split "" "$(ignore $1)${*:-REMOVEFELIDS}")) ${1:-🐢}

!fastplayer

!lg ${*:-.} won dur<$(!lg * urune=15 won min=dur x=dur fmt:"${x[0]}") fmt:"$(name_fixup $*) is a fast player." stub:"$(name_fixup $*) is not a fast player."

!fastplayers

.echo $(!lg * !@bot !@hybridbot won s=name x=min(dur) o=-min(dur) dur<$(!lg * urune=15 won min=dur fmt:"$dur") join:" " fmt:"${.}")

!firstwinsbyversion

.echo First wins by version for $(name_fixup ${1:-*})$(argst $*): $(join ", " (map (fn (kv) "$kv[0]: $kv[1]") (sortby (fn (kv) (int (sub 2 "$kv[0]"))) (freqhash (split ", " (!lg ${1:-*} $* won s=name,gid x=-min(rend),min(regexp_replace(cv, "-a", "")) pfmt:'$(first (split ", " $child))' fmt:'$x[1]' cv!=))))))

!firstwinsbyyear

.echo First wins by year for $(name_fixup ${1:-*})$(argst $*): $(join ", " (map (fn (kv) "$kv[0]: $kv[1]") (sortby (fn (kv) (int $kv[0])) (freqhash (split ", " (!lg ${1:-*} $* won s=name,gid x=-min(regexp_replace(rend, "^(\d\d\d\d).*", "\1")) pfmt:'$(first (split ", " $child))' fmt:'$x[0]'))))))

!fnfind

!fnsearch

!fnsearch

.echo $(filter (fn (func) (re-find "$*" $func)) (split ", " (replace "User functions: " (!fn -ls))))

!gamepath.query

.echo $(let (gid (!lg $* fmt:'$game_key')) (!lm * gid=$gid type=br.enter|rune|orb !portal s=id,turn,type,noun pfmt:'${.}:${child}' join:'/' stub:''))

!gamesuntilwon

!gamesuntilwin $*

!gen-nem-eligible

!echo $(join | (sort (hash-keys (apply hash (flatten (map (fn (combo) (list $combo 1)) (concat (gen_nem_eligible_race ${1:-4}) (gen_nem_eligible_class ${1:-4}))))))))

!ghoststats

!echo $(let (g $(!lm ${1:-.} $* ghost necropolis fmt:'$n') p $(!lm ${1:-.} $* br.enter=necropolis fmt:'$n') d $(!lg ${1:-.} $* necropolis fmt:'$n')) (sprintf "Necropolis stats for $(name_fixup ${1:-.})$(argst $*): Ghost kills per entry: %1.2f (${g}/$p); Death ratio: %1.2f%% ($d death(s))" (/ (float $g) $p) (* 100 (/ (float $d) $p))))

!ghostvaultkills

!echo Ghost vault kills$(argst $*): $(vaultallkills ghostkmap ghostmap "$*")

!githubsearch

!echo https://github.com/search?q=repo%3Acrawl%2Fcrawl+$(re-replace "\s" + $1)&type=commits&s=committer-date&o=desc

!haunt

.echo $nick $(=rndspelltarget $*). Insubstantial figures form in the air. The $(=randwraith) hits ${*:-something}! x$(rand 2 4) The $(=randwraith) hits ${*:-something}! x$(rand 3 6)

!hoursperwinbyversion

.echo $(let (hours (durbyver "${1:-.}" "$*") wins (winsbyver "${1:-.}" "$*") name "$(name_fixup ${1:-.})$(argst $*)") (if (= $wins "N/A") "No wins for $name... yet!" "Hours per win for $name: $(join ", " (map (fn (ver) (sprintf "$ver %1.2f" (/ (/ (float (pduration (elt $ver $hours))) (elt $ver $wins)) 3600))) (hash-keys $wins)))"))

!hoursperwinbyyear

.echo $(let (hours (durbyyear "${1:-.}" "$*") wins (winsbyyear "${1:-.}" "$*") name "$(name_fixup ${1:-.})$(argst $*)") (if (= $wins "N/A") "No wins for $name... yet!" "Hours per win for $name: $(join ", " (map (fn (year) (sprintf "$year %1.2f" (/ (/ (float (pduration (elt $year $hours))) (elt $year $wins)) 3600))) (hash-keys $wins)))"))

!hoursuntilwon

!timeuntilwon

!instanttesseract

!lm ${1:-*} tesseract.activate|tesseract.kill $* / tesseract.kill s=name,gid pfmt:'$(first (split / ${n_x}))x ${.}' title:"Sleeping Tesseract kills for $(name_fixup ${1:-*})$(argst $*)" stub:"No sleeping Tesseract kills for $(name_fixup ${1:-*})$(argst $*)" ?: %=1

!issue

!echo https://github.com/crawl/crawl/issues/$*

!killratioall

.echo $(let (target $(=target ${2:-*})$(replace " ()" '' " ($*)") ratio $(=killratio.calc $(!lg ${2:-*} $* ikiller=$1 fmt:"${n}" stub:"0") $(!lm ${2:-*} $* uniq=$1 fmt:"${n}" stub:"0"))) $(if $(= $ratio NaN) "No battles for $1"$(if $(/= $target *) " and $target"). "$1 wins $ratio% of battles"$(if $(/= $target *) " against $target").))

!killration

!killratio

!killratios

.echo Unique's Kill/Death ratios for $(name_fixup ${1:-.})$(argst $*): $(let (deaths (killratiosdeaths ${1:-.} $*) kills (killratioskills ${1:-.} $*)) (killratiosfmt $kills $deaths))

!kwfind

!kwsearch

!lairendkills

!lg ${1:-*} lairend $* s=kmap% title:"Lair End kills for $(name_fixup ${1:-*})$(argst $*)" stub:"No Lair End kills for $(name_fixup ${1:-*})$(argst $*)"

!lcs

.echo $nick $(=rndspelltarget ${*:-something}). The crystal spear hits ${*:-something}$(nth $(rand 3) $(split '|' '!|!!|!!!'))!!

!lldrc

.echo http://lazy-life.ddo.jp:8080/rcfiles/$(replace git trunk ${2:-trunk})/$(!lm ${1:-.} lld x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

!lst

.echo $(replace .txt .lst $(!log $*))

!marks

!makhlebmarks

!megacats

!lg ${1:-.} won fe-- $* s=char join:"|" fmt:"${n_x}😼" stub:"😿" title:"Cats won for $(name_fixup $1)"

!motto

.echo $(apply concat (map (fn (w) (upper (sub 0 1 $w))) $*))! $(map (fn (w) (concat (capitalise (sub 0 1 $w)) - (capitalise $w) !)) $*) $(map capitalise $*)! $(map upper $*)!

!nchoice-credit.helper

.echo $(map (fn (c) (!lg * t won $c 1 fmt:"$name" stub:"")) (split | (=kw nchoice)))

!nchoice-times

!nchoicetimes

!nchoice-times-old

.echo $(map (fn (x) (concat (nth 0 $x) " " (nth 1 $x) ",")) (transpose (list (sub 0 -1 (split | (=kw ${2:-nchoice}))) (split " " (!nchoice-times.helper $1 $2))))) $(nth -1 (split | (=kw ${2:-nchoice}))) $(fduration (* 86400 (- (time) (stamptime (!lg * ${1:-t} won $(nth -2 (split | (=kw ${2:-nchoice}))) 1 fmt:"$rend")))))(+)

!nchoice-times.helper

.echo $(map (fn (d) (fduration (* 86400 (- (stamptime (nth 1 $d)) (stamptime (nth 0 $d)))))) (pairs (cons (!lg * ${1:-t} 1 fmt:"$rend") (map (fn (c) (!lg * ${1:-t} won $c 1 fmt:"$rend" stub:"")) (sub 0 -1 (split | (=kw ${2:-nchoice})))))))

!nchoiceleft

!lg * nchoice t s=char o=-N fmt:'${.} ($(- 9 (if (= "" $n_x) 0 (replace x $n_x))) left)' title:"Available Nemelex Choice combos$(argst $*)" stub:"No available Nemelex Choice combos$(argst $*)" / won ?: N<9

!nchoices

!nchoice

!nchoicesleft

!nchoiceleft

!nem-avoid-prob

.echo $(let* (nc (nem-chosen) nr (nem-remaining) nw (nem-weights $nc $nr) tw (apply ${+} $nw) fnr (apply nem-remaining-filtered || (split " " $*)) ids (subset-ids $nr $fnr)) (.echo Chance that next nchoice is not$(argst $*) is $(percent (apply + (map (fn (j) (elt $j $nw)) $ids)) $tw): $(map (fn (i) (sprintf "$(elt $i $nr)(%s)" (percent (elt $i $nw) $tw))) (reverse (sort (fn (x y) (<=> (elt $x $nw) (elt $y $nw))) $ids)))))

!oneandwonrole

!oneandwonclass $*

!ping

.echo pong

!pizza

.echo /me cooks up a $(pizzaquantity) of $(pizzatype) pizza for ${*:-${nick}}$(if $* ", courtesy of $nick").

!playtimebyversion

.echo Playtime relative to their average(mean) by version for $(name_fixup ${1:-.})$(argst $*): $(let* (times (apply hash (split " " (!lg ${1:-.} x=sum(dur) byversion fmt:'${.} $(pduration $x[0])' o=-. stub:"" join:" " $*))) avg (/ (float (apply + (hash-values $times))) $(length $times))) (join ", " (map (fn (kv) (sprintf "$kv[0]: %0.2fx" (/ $kv[1] $avg))) $times)))

!playtimeperday

.echo $(let* (days (!lm ${1:-.} x=count(day(time)) fmt:'$x[0]' $*) playtime (!lg ${1:-.} x=sum(dur) fmt:'$x[0]' $*) hrsperday (sprintf "%.2f" (/ (/ (float (pduration $playtime)) 3600) $days))) "$(name_fixup ${1:-.})$(argst $*) has played for $playtime and has milestones during $days days (UTC). That's $hrsperday hours/day!")

!polymorph

.echo $nick zaps a wand. $1 evaporates and reforms $(re-replace '^as a ([AEIOUaeiou])' 'as an $1' "as a ${*:-$(nth (rand 34) (split '|' (if (rand 2) (=poly1) (=poly2))))}!")

!polythiest

!polytheist $*

!racecanoneandwon

!speciescanoneandwon

!randhat

.echo $(replace _ ' ' (ldb (randnth (split & (=randhat.list)))))

!reeces

.echo Ru <:plogchamp:823530252075794433>

!rhyme

.echo $(replace "Time:" (concat (randnth (rhymes)) ":") (!time))

!ru

.echo Reeces <:plogchamp:823530252075794433>

!ryponick

.echo $(do (try (!nick -rm ryponick) "Nick already empty") (!nick ryponick $(join " " (split | $*))))

!sacrifice

.echo $(if (str-find? mopl $*) "$nick raises a huge knife to sacrifice mopl... $nick slips on a banana peel and bleed himself white" "/me sacrifices ${*:-$nick}!")

!sequelhelp

!help $*

!sequellhelp

!help $*

!shatter

.echo $nick $(=rndspellgesture). $channel rumbles around ${nick}! ${*:-Everyone} shudders from the earth-shattering force.

!shrikefeelings

.echo The shrikes are $(let (time (secondssince (stamptime (!lg * cikiller=caustic_shrike|shard_shrike x=end fmt:'${x[0]}')))) (if (< $time 300) "happy!" (if (< $time 3600) "content." (if (< $time 86400) "restless." "angry!"))))

!silence

.echo $nick $(=rndspellgesture). A profound silence engulfs ${*:-$nick}.

!singularity

.echo $nick $(=rndspellgesture). Space collapses on itself with a satisfying crunch. The singularity violently warps ${*:-something}!

!sort

.echo ${*}: $(sort (split ' ' $*))

!speedorb

!speedzot

!spiderendkills

!lg ${1:-*} spiderendkmap $* s=kmap% title:"Spider End kills for $(name_fixup ${1:-*})$(argst $*)" stub:"No Spider End kills for $(name_fixup ${1:-*})$(argst $*)"

!stableversions

!versions !alpha

!stash

!lst $*

!straek

!cheatstreak

!taxes

.echo $(let (owed $(/ (!lg ${1:-.} !zin x=sum(goldfound) fmt:'$x[0]' stub:'0' $*) 10) name (name_fixup ${1:-.}) args (argst $*)) (if (= $owed 0) "$name$args is already square with Zin!" "$name$args owes $owed in taxes to Zin$(attack-strength-punctuation (/ $owed 1000))"))

!tea

.echo /me hands ${1:-${user}} a cup of $(tea-rng), brewed by $(rng-god-uniq).

!temperature

.echo $(!fahrenheit $*), and $(!celcius $*)

!test

.echo test

!test2

.echo test

!tournamentlink

!tournamentpage

!tournamentpage

.echo https://crawl.develz.org/tournament/0.34/players/$(lower (nth 0 (split ' ' (nick-aliases (name_fixup ${1:-.}))))).html

!ttyrec

!lg ${*:-.} -ttyrec

!tuniqs

!tuniques

!tv

!lg ${*:-.} -tv

!unpickednchoicepecies

!lg * t nem-eligible s=crace,char o=-. crace=$(!lg * nem-eligible current bysp notitle join:'|' fmt:'${.}' / t (( nchoice || won )) ?: N=0) title:"Unpicked species for Nemelex's Choice" stub:"No unpicked species for Nemelex's Choice"fmt:'${.}' pfmt:'${.}($child)'

!unstreak

!gamestriedsincelastwin

!unstreak2

.echo $(let* (streaks (unstreaks ${1:-.} $*) name (name_fixup ${1:-.}) args (argst $*) worst (longest $streaks)) "Largest losing streak for $name$args: (length $(length $worst)) $worst")

!update-centuryplayers

!nick centuryplayers $(!lg * won s=name o=-name title:"" join:" " format:"${.}" ?:N>=100)

!update-goodplayers

!nick goodplayers $(!lg * won s=name fmt:"${.}" join:" " ?:N>9)

!update-greaterorbrunners

!nick greaterorbrunners $(!lm * cv>0.10 orb urune=3 lg:urune=15 s=name title:"" join:" " fmt:"${.}")

!update-greaterplayers

!nick greaterplayers $(!lg greatplayers playable:job won s=name x=count(cls) title:"" fmt:"${.}" join:" " ?: count(cls)=$(!lg * playable:job won x=count(cls) fmt:"${x}"))

!update-greatorbrunners

!nick greatorbrunners $(!lm * cv>=0.10 orb ${lg:urune>urune} s=name title:"" join:" " fmt:"${.}")

!update-greatplayers

!nick greatplayers $(!lg * playable:sp won s=name x=count(crace) title:"" fmt:"${.}" join:" " ?: count(crace)=$(!lg * playable:sp won x=count(crace) fmt:"${x}"))

!update-playable-all

.echo $(let* (old (split | (replace char= '' (=kw playable:all))) new (split | (replace char= '' (=kw $1))) all (join | (sort (hash-keys (hashlist (concat $new $old))))) out "char=$all") (if (str-find? "char=" (!kw $1)) (!kw playable:all $out) "You must supply a keyword for combos of a playable *stable* version eg: $(quote "!update-playable-all playable:0.34")"))

!update-starting-stats-job

!learn set starting_stats[3] $(!lm * begin recent playable hu-- s=char x=avg(str),avg(int),avg(dex) fmt:'$(sub 2 4 ${.}) $(fmt_mostly_int (- $x[0] 8)),$(fmt_mostly_int (- $x[1] 8)),$(fmt_mostly_int (- $x[2] 8))' join:' | ' notitle o=-.)

!update-starting-stats-sp

!learn set starting_stats[2] $(!lm * begin recent playable --fi s=char x=avg(str),avg(int),avg(dex) fmt:'$(sub 0 2 ${.}) $(- $x[0] 8),$x[1],$(- $x[2] 4)' join:' | ' notitle o=-.)

!update-thousandhourplayers

.echo $(do (try (!nick -rm thousandhourplayers) "Nick already empty") (!nick thousandhourplayers $(!lg !bot x=+sum(dur) s=name notitle join:" " format:"${.}" ?: sum(dur)>=3600000)))

!update-winners

!nick winners $(!lg * won s=name fmt:"${.}" join:" ")

!update-winrateplayers

.echo $(do (try (!nick -rm winrateplayers)) (!nick winrateplayers $(!lg * recent fmt:'${.}' join:' ' stub:'' s=name o=% / won ?: N>=10 %>0.33)))

!vanity

!lg ${1:-*} $* status=no_stairs place!=crucible|arena|zig

!vercelstats

!dcss-stats

!versions

!fastversions

!watch

&watch $*

!weaponskills

.echo Weapon skills at >15 skill won for $(name_fixup $1). $(join ", " (map (fn (x) (!lg ${1:-.} won $* / fifsk=$x title:"$x")) (list long_blades short_blades axes maces polearms staves unarmed ranged_weapons throwing)))

!whenabandon

!lm * recent won god.abandon~~^${1:-.} s=xl o=-. fmt:'$n_x [${.}]' title:"XL of god abandonment in recent winning games$(argst $*)" stub:"No god abandonments in recent winning games$(argst $*)" $*

!whichbg

!whichrole

!whichclass

!whichrole

!whichgod2

!lg * won $1 recent $* s=god x=cdist(name) o=cdist(name) fmt:"${x}x ${.}" title:"Recent unique winning players for $1$(argst $*)" stub:"No recent wins for $1$(argst $*)."

!whichrace2

!lg * won recent $(if (or (re-find ru|Ru $*) (> $(length $*) 2)) $* class=$*) s=crace x=cdist(name) o=cdist(name) fmt:"${x}x ${.}" title:"Recent wins" stub:"No recent wins for $*."

!whichrole2

!lg * won recent $(if (or (re-find ru|Ru $*) (> $(length $*) 2)) $* race=$*) s=role x=cdist(name) o=cdist(name) fmt:"${x}x ${.}" title:"Recent wins" stub:"No recent wins for $*."

!whichskills

.echo $(let* (args (concat "won !dj !gn recent " (ignore $1)$*) results (fifskhash ${1:-.} $args) games $results[0] skills $results[1]) (if (= 0 $games) "No games for $(name_fixup ${1:-.})$(argst $args)" ">=15 skills for $(name_fixup ${1:-.})$(argst $args): $(join ", " (map (fn (kv) (sprintf "%.0f%% %s" (* 100 (/ $kv[1] (float $games))) (skill_abbrev $kv[0]))) (reverse (sortby (fn (kv) $kv[1]) $skills))))"))

!whichspecies

!whichrace

!whichweapon

!lg ${1:-*} won recent $* fifsk~~long_blades|ranged|unarmed|axe|mace|pole|stave s=regexp_replace(fifsk, ".*((long|ranged|unarmed|axes|maces|pole|stave)[^,]*).*", "\1")% title:"Recent win weapons skills for $(name_fixup ${1:-*})$(argst $*)" stub:"No recent wins for $(name_fixup ${1:-*})$(argst $*)."

!wiki

!echo http://crawl.chaosforge.org/$(replace " " _ $*)

!wiki2

!echo https://dcss.roguelikes.gg/wiki/index.php?title=Special:Search&search=$(replace " " %20 $*)

!will

.echo $(let* (a (hash sp 7 fe 6 dd 6 na 5 mu 5 vs 5 vp 4 de 4 fo 4 og 4 dg 4 dj 4) b $(elt $1 $a)) $(if $2 "$(* $(with-nvl 3 $b) $2) Will at level $2" "$(with-nvl 3 $b) Will per level"))

!win

!won

!winssinceclasswon

.echo $(gamessincethingwon ${1:-.} $* background "min(regexp_replace(char, '..(..)', '\1'))" (playablebgls))

!winssincegodwon

.echo $(gamessincethingwon ${1:-.} $* god "min(god)" (playablegodls))

!winssinceracewon

.echo $(gamessincethingwon ${1:-.} $* species "min(regexp_replace(char, '(..)..', '\1'))" (playablespls))

!winssincespecieswon

!winssinceracewon

!winssincewon

.echo $(name_fixup ${1:-.}) has won 0 games since their last win.

!wizlabkills

!lm ${1:-*} $* br.enter=wizlab s=regexp_replace(milestone, "entered ((the_hall_of_|the_chambers_of_)([_a-z]+(?=the_)))?(.*)\.", "\2\4") milestone!~~ering?ya|cekugob|mortuary|a_wizard|upun's_lair|cloud_mage's_chambers title:"WizLab deaths ($*)" / lg:br=wizlab o=%

!wizstr

.echo in $1 encumbrance with $2 str and $3 armour, next str is worth $(* (/ (* 3.8 (* $1 $1)) (* (+ 3 $2) (+ 4 $2))) (/ (- 45.0 $3) 45.0)) int for spell success

!words

.echo $(!classwords $1) / $(!specieswords $1)

!xandlog

.echo $(let (xlg $(!lg $* fmt:'[$x]' stub:"nope")) (if (= $xlg nope) (!log $*) (concat $xlg " " (!log $*))))

!xlmpercentiles

.echo $(let* (xs (split "|" (!lm * fmt:'${x[0]}' join:'|' notitle $*)) ps (join " " (map (fn (n) "$n%[$(percentile $xs $n)]") (list 1 5 10 20 30 40 50 60 70 80 90 95 99)))) "X percentiles for $(argst $*): $ps")

!zap

!echo ╰( ͡ ° ͜ʖ ͡° )つ──☆*:・゚$*

!zotorbdeaths

!lm * newzotorbs urune<=3 (( won || lg:place=zot:5 )) zotorb s=regexp_replace(noun, ".*?(\w+)$", "\1") title:"Zot:5 death rates by orb flavour$(argst $*)" $* / !won

!zotorbkills

!lg ${1:-*} newzotorbs $* cikiller~~orb_of_(fire|winter|entropy) title:"Zot ORB kills$(argst $*) for $(name_fixup ${1:-*})" stub:"No Zot ORB kills$(argst $*) for $(name_fixup ${1:-*})"

!|rc

.echo https://CRAWL.XTAHUA.COM/crawl/rcfiles/crawl-$(replace trunk git ${2:-git})/$(!lm ${1:-.} cxc x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

#rc

.echo https://crawl.project357.org/rc-files/$(replace git trunk ${2:-trunk})/$(!lm ${1:-.} cpo x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

$rc

.echo https://underhound.eu/crawl/rcfiles/crawl-$(replace trunk git ${2:-git})/$(!lm ${1:-.} cue x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

%rc

.echo https://cbro.berotato.org/rcfiles/crawl-$(replace trunk git ${2:-git})/$(!lm ${1:-.} cbr2 x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

&versions

!versions

&watch

!lm ${1:-.} fmt:"\$(lookup ${2:-${src}} (watchhash))${name}" stub:"No milestones for $(name_fixup ${1:-${user}})."

.gfgk

!lg ${1:-.} gf-good-mons|gf-good-branch|gf-good-dungeon|gf-good-abyss|moonbase|gf-wizard-prison|gf-cloud-mage-hellbinder|gf-elemental-lab $* title:"gammafunk good kills for $(name_fixup ${1:-.})$(argst $*)" stub:"No gammafunk good kills for $(name_fixup ${1:-.})$(argst $*)"

=apostrophe

.echo '

=badplace

.echo $(replace "_" " " $(weighted-rand 100:the_Abyss Hell beam.cc 1:ray.cc 1:stuff.cc 5:#crawl 5:4chan 5:4.1 1:the_Tower_of_Lemuel))

=bot_prefix

.echo $(if (= $1 cbr2) % (if (= $1 cao) !cao (if (= $1 cdo) @ (if (= $1 cdi) !cdi (if (= $1 cue) \$ (if (= $1 cxc) !| (if (= $1 cpo) # (if (= $1 lld) !lld (if (= $1 cnc) !cnc ?)))))))))

=branchletter

.echo $(let (name (elt $* (branchletterhash))) (if (bound? name) $name $*))

=cmd

.echo $(join ' => ' $(sub 1 $(split ' => ' $(!cmd $1))))

=eval

.echo $(try (exec $*) $*)

=fastversions.lm

!lm * weekmilestone s=src,vlong o=. pfmt:'$(upper ${.}) $(re-replace "([^\s]*).*" "$1" $child)' fmt:'$(re-replace "(.*-g[a-f0-9]{7}).*" "$1" ${.})' join:' ' $*

=gamesuntilwonbg.lg

!lg ${1:-.} $* s=class,gid x=-min(rstart),min(ktype) fmt:'$(if (= ${x[1]} "winning") w l)' pfmt:'$(role_abbrev ${.}):,$(+ 1 (indexof w (split "" $child))),' join:'' stub:'N/A' notitle

=gamesuntilwonchar.lg

!lg ${1:-.} $* s=char,gid x=-min(rstart),min(ktype) fmt:'$(if (= ${x[1]} "winning") w l)' pfmt:'${.}:,$(+ 1 (indexof w (split "" $child))),' join:'' stub:'N/A' notitle

=gamesuntilwonnchoice.lg

!lg * $* s=char,gid x=-min(rend),min(ktype) fmt:'$(if (= ${x[1]} "winning") w l)' pfmt:'${.}:,$(+ 1 (indexof w (split "" $child))),' join:'' stub:'N/A' notitle

=gamesuntilwonsp.lg

!lg ${1:-.} $* s=crace,gid x=-min(rstart),min(ktype) fmt:'$(if (= ${x[1]} "winning") w l)' pfmt:'$(species_abbrev ${.}):,$(+ 1 (indexof w (split "" $child))),' join:'' stub:'N/A' notitle

=gemratio.ends

!lm ${2:-.} $* vlong>=0.31-a0-1242 br=$1 br.end fmt:"${n}" notitle stub:'0'

=gemratio.gems

.echo $(intactgems ${2:-.} "br=$1 vlong>0.31-a0-1242 $*")

=godshortname

.echo $(let (name (elt $* (godshortnamehash))) (if (bound? name) $name $*))

=greatprogress.role

.echo $(sort $(fn (a b) $(<=> $(list $(int $(sub 3 $a)) $(sub 0 2 $a)) $(list $(int $(sub 3 $b)) $(sub 0 2 $b)))) $(map $(fn (x) $(let (y $(split / $(car $(split " (" $x)))) $(role_abbrev (nth 0 $y)):$(- $(nth 2 $y) $(nth 1 $y)))) $(split ", " $(!lg * playable playable:sp won s=cls x=cdist(crace) / @${*:-.} fmt:"${.}/${x}" o=-cls))))

=greatprogress.species

.echo $(sort $(fn (a b) $(<=> $(list $(int $(sub 3 $a)) $(sub 0 2 $a)) $(list $(int $(sub 3 $b)) $(sub 0 2 $b)))) $(map $(fn (x) $(let (y $(split / $(car $(split " (" $x)))) $(species_abbrev (nth 0 $y)):$(- $(nth 2 $y) $(nth 1 $y)))) $(split ", " $(!lg * playable playable:sp won s=crace x=cdist(char) / @${*:-.} fmt:"${.}/${x}" o=-crace))))

=killratio.calc

.echo $(sub 0 5 $(* 100.0 $1 $(/ 1.0 $(+ $1 $2))))

=kw

.echo $(join ' => ' $(sub 1 $(split ' => ' $(!kw $1))))

=lastnchoice.combostatus

!lm * alive t $* s=gid x=max(xl) o=max(xl) join:" || " fmt:"\$(!lm * gid=${.} fmt:'$name: $(upper $src), L$xl $title of ${god:-No God}')" title:"" stub:""

=lastnchoice.combostatus2

!lm * alive t $* s=gid x=max(nrune),max(xl),max(time) o=max(nrune),max(xl),max(time) join:" || " fmt:"\$(!lm * gid=${.} fmt:'$name: $(upper $src), L$xl $title of ${god:-No God} ($place$(runeformat $nrune))')" title:"" stub:""

=lastrunes

.echo $(join ', ' (sub 0 3 (split | (!lm ${1:-.} $* rune s=noun x=+max(time) join:"|" fmt:"${.}"))))

=locateall.raw

!lm ${*:-.} alive s=name,gid o=-name join:" | " pfmt:"^${.}: ${child}" fmt:"\$(!lm ${*:-.} gid=${.} fmt:'$(upper $src) $explbr $cv, L$xl $char of ${god:-No God}')" stub:"^"

=locateall.rawall

!lm ${*:-.} alive_all s=name,gid o=-name join:" | " pfmt:"^${.}: ${child}" fmt:"\$(!lm ${*:-.} gid=${.} fmt:'$(upper $src) $explbr $cv, L$xl $char of ${god:-No God}')" stub:"^"

=maxdam

.echo $(- (* 18 (** 2 (- $* 1))) 1)

=morgue_link

.echo $(let (base (car (split | (nth 1 (split ${1}> (=morgue_link.list ${2:-trunk})))))) (if (bound? base) $base unknown))

=morgue_link.list

.echo >unknown|cao>https://crawl.akrasiac.org/rawdata|cdo>http://crawl.develz.org/morgues/${1:-trunk}|clan>https://www.underhound.eu/crawl/morgue|cpo>https://crawl.project357.org/morgue|cdi>https://crawl.dcss.io/crawl/morgue|cue>https://www.underhound.eu/crawl/morgue|cnc>https://archive.nemelex.cards/morgue|cxc>https://crawl.xtahua.com/crawl/morgue|cbr2>https://cbro.berotato.org/morgue|crg>https://crawl.roguelikes.gg/morgue|cbrg>https://crawl-br.roguelikes.gg/morgue|lld>http://lazy-life.ddo.jp:8000/morgue

=nandwonlg

!lg ${1:-.} $* s=char,gid x=-min(rstart),min(ktype) fmt:'$(if (= ${x[1]} "winning") w l)' pfmt:'${.}>$child>' join:'' notitle stub:''

=nchoice.new

.echo Time for a new nchoice! It will appear shortly on the tournament website (if it hasn't yet). Type "!set-nchoice XXXX" to update !nchoice with the new combo, where XXXX should be replaced by the new combo.

=newnext

.echo $(let* (p ${1:-${user}} c (rand_unwon $p (exact-entry ~${p}_pref 1))) (if (bound? c) (do (ldb-set ~${p}_next 1 $c) $c) (do (ldb-rm! ~${p}_next *) "NONE")))

=oneandwongids

!lg ${*:-.} rstart=$(!lg ${*:-.} s=char x=min(rstart) fmt:"${x[0]}" join:"|" stub:"") won s=gid fmt:"${.}" join:"|" stub:""

=personality.bg

.echo $(nth 0 (map (fn (x) (pluralize $x 2)) (split ', ' "$(!lg ${2:-.} s=class $(if (= "1" $1) won) x=+sum(dur) fmt:'${.}' stub:'?' $*)")))

=personality.enemies

.echo $(let (es (map (fn (e) (re-replace "^(a|an) " "" $e)) (split ', ' (!lg ${1:-.} $* !won !boring s=ckiller x=+sum(turn) fmt:'${.}' stub:'' notitle)))) $(if (< (length $es) 3) "?" "$(nth 0 $es), $(nth 1 $es), and $(nth 2 $es)"))

=personality.god

.echo $(let (gods (split ', ' "$(!lg ${2:-.} s=god $(if (= "1" $1) won) x=+sum(dur) fmt:'${.}' stub:'?' $*)")) (if (or (= 0 (length $gods)) (not (nth 0 $gods))) Theirself (nth 0 $gods)))

=personality.places

.echo $(let (ps (split ', ' (!lg ${1:-.} $* !won !boring s=place x=+sum(dur) fmt:'${.}' stub:'' notitle))) $(if (< (length $ps) 3) "?" "$(nth 0 $ps), $(nth 1 $ps), and $(nth 2 $ps)"))

=personality.skills

.echo $(let (sks (split ', ' (!lg ${1:-.} $* s=sk x=+sum(dur) fmt:'${.}' stub:'' notitle))) $(if (< (length $sks) 3) "?" "$(nth 0 $sks), $(nth 1 $sks), and $(nth 2 $sks)"))

=personality.sp

.echo $(nth 0 (map (fn (x) (pluralize $x 2)) (split ', ' "$(!lg ${2:-.} s=crace $(if (= "1" $1) won) x=+sum(dur) fmt:'${.}' stub:'?' $*)")))

=personality.won

!lg ${1:-.} won fmt:'1' stub:'0' $*

=poly1

.echo adder|alligator|basilisk|bat|big kobold|blink frog|black mamba|boggart|boring beetle|boulder beetle|catoblepas|centaur|centaur warrior|death drake|death yak|deep elf annihilator|deep troll|dire elephant|draconian|emperor scorpion|ettin|faun|fire crab|fire dragon|fire giant|frost giant|giant eyeball|ghost moth|gnoll|golden dragon|goliath beetle|harpy|hobgoblin|ice dragon

=poly2

.echo jackal|killer bee|kraken|lindwurm|manticore|minotaur|naga|naga sharpshooter|ogre|orb spider|orc priest|quokka|rat|red wasp|salamander|sea snake|sheep|siren|snapping turtle|spiny frog|sphinx|spriggan air mage|stone giant|tarantella|tengu reaver|titan|torpor snail|troll|vault sentinel|warg|wind drake|wolf spider|yak|yaktaur

=racialmr

=racialwill

=racialwill

.echo Will (Base = Apt * XL + Bonus): Sp:7!, Fe:6, Co:5, Mu:5, Na:5, VS:5, DE:4, Dg:4, Dj:4, Fo:4, MD:4, On:4, Po:4, At:3*, Ba:3*, Ds:3*, Dr[purple]:3* (40 Bonus), Dr:3*, Ga:3*, Gn:3*, Hu:3*, Ko:3*, Mf:3*, Mi:3*, Op:3*, Re:3*, Te:3*, Tr:3*

=randhat.list

.echo hat of the alchemist&hat of the bear spirit&hat of the high council&hat of pondering&crown of dyrovepreva&mask of the dragon&maxwell's etheric cage

=randwraith

.echo $(sub 0 1 $(sub $(rand $(length $(split & $(=wraith)))) $(split & $(=wraith))))

=rc.helper

!lm ${1:-.} fmt:"\$(concat (ignore ${2}) (=bot_prefix ${*:-${src}}))rc ${name} \$(version_fixup ${2:-${v}})" stub:"No milestones for $(name_fixup ${1:-${user}})."

=replacecmd

!cmd $1 $(replace $2 $3 $(=cmd $1))

=replacekw

!kw $1 $(replace $2 $3 $(=kw $1))

=rip.lm

.echo $(!lm ${1:-.} alive $* fmt:"$char|$title|$xl|$god|$br|$lvl|$absdepth")

=rip.opts

.echo recent !won !boring

=rndspellgesture

.echo $(sub 0 1 $(sub $(rand $(length $(split & $(=spellgesture)))) $(split & $(=spellgesture))))

=rndspelltarget

.echo $(sub 0 1 $(sub $(rand $(length $(split & $(=spelltarget $*)))) $(split & $(=spelltarget $*))))

=speed.generic

.echo $(let (turns (map int (split (!lm $1 $(concat "(( " $2 " || " $3 " ))") $(ignore $4)$* s=gid x=-${max(turns)-min(turns)} fmt:'${x[0]}' notitle join:' ' stub:'-1' ?: N=2)))) "$(replace _ " " $4) $(name_fixup $1)$(argst $*): Min: $(car $turns), Max: $(last $turns), Median: $(fmtn (listmedian $turns)), Average: $(fmtn (listavg $turns))")

=speedpan.eligible

!lm ${1:-.} $* br=pan rune s=gid fmt:'${.}' notitle join:'|' stub:'' ?: N=5

=spellgesture

.echo gestures wildly while chanting&mumbles some strange words&casts a spell

=spelltarget

.echo gestures at ${*:-something} while chanting&points at ${*:-something} and mumbles some strange words&casts a spell at ${*:-something}

=streakall-lg

.echo $(ignore 1 $*)$(!lg $(!lg * won $* listnames ?: N>=${1:-500}) $* s=name,gid x=-min(end),min(ktype),min(char) notitle stub:'' fmt:'$(if (= ${x[1]} winning) "${x[2]}," |)' pfmt:'${.}>${child}>' join:'')

=streakall2-lg

.echo $(!lg * $* s=name,gid x=-min(end),min(ktype),min(char) notitle stub:'' fmt:'$(if (= ${x[1]} winning) "${x[2]}," |)' pfmt:'${.}>${child}>' join:'')

=streakby

.echo Streaks for $(name_fixup ${3:-.})$(argst $*): $(join (reverse (sortby (fn (str) $(int (nth 1 $str))) (map (fn (sp) "$(call $2 $sp): $(replace "one" 1 (re-replace '.*has (\w+) .*win.*' '$1' (re-replace '.*none consecutive.*' 1 (!streak ${3:-.} ${1}=$(replace " " _ $sp) $*))))") (split ", " (!lg ${3:-.} won s=${1} fmt:'${.}' stub:'' $*))))))

=target

!lg $* fmt:"\${target}"

=time_since_milestone

.echo $(let (lmstring (!lm * x=time $* fmt:"$x[0]" stub:"")) (if (= $lmstring "") "literally forever" (let* (t (stamptime $lmstring) d (dayssince $t) H (mod (hourssince $t) 24) M (mod (minutessince $t) 60) S (mod (secondssince $t) 60)) (if (> $d 0) $d" days, ")(if (> $H 0) $H" hours, ")(if (> $M 0) $M" minutes, ")$S" seconds")))

=tstats.games

.echo $(!lg * $* !boring fmt:"$n" stub: "0") games

=tstats.players

.echo $(!lg * $* !boring x=cdist(name) fmt:"$x" stub: "0") players

=tstats.playertime

.echo total player time $(!lg * $* !boring x=sum(dur) fmt:"$x" stub: "0")

=tstats.runers

.echo $(!lg * $* urune>0 x=cdist(name) fmt:"$x" stub: "0") runers

=tstats.winners

.echo $(!lg * $* won x=cdist(name) fmt:"$x" stub: "0") winners

=tstats.winrate

.echo winrate $(!lg * $* !boring s=year(end) / won fmt:"$n_ratio" stub: "NaN")

=tstats.wins

.echo $(!lg * $* won fmt:"$n" stub:"0") wins

=wraith

.echo phantom&hungry ghost&shadow wraith&wraith&wraith&wraith&wraith&wraith&freezing wraith&freezing wraith&phantasmal warrior&phantasmal warrior

@rc

.echo http://crawl.develz.org/configs/$(replace git trunk ${2:-trunk})/$(!lm ${1:-.} cdo x=name fmt:"${x[0]}" stub:"$(name_fixup $1)").rc

Keywords

Keyword Definition
0.29timetraveler gid=monkeytor:cko:20220528220732S|mopl:cxc:20220322172214S|nchidich:cko:20210312235604S|Sekuso:cko:20220508205059S|Shavain:cue:20220517071933S|Silenth:cao:20220625065145S
advanced Co|VS|Po|Dg|Fo|Na|Op|Fe--|Mu
adventurer Ar|Sh|Wn|--De
alive recent ktyp= type!=crash
alive_all ktyp= type!=crash
aliveall ktyp= type!=crash
ancestor verb=ancestor.class|ancestor.special
ant fo
at crace=armataur
atheist god=
badform status~~(tree|porcupine|fungus|pig|wisp)-form
banished abyss.enter noun!="entered the Abyss!" noun!="escaped (hah) into the Abyss!"
basajaun crace=basajaun
be-- crace=bearkin
bird ke|te
boring quitting|leaving|wizmode|exploremode
bot @bot
branch br
branch.enter verb=br.enter
buggygods goodgodevilrace|undemigod
bybackground bybg
bybg s=regexp_replace(char, '^..(..)$', '\1')
bybgperc bybgpercent
bybgpercent s=regexp_replace(char, '^..(..)$', '\1')%
byclassgroup byrolegroup
bycls bybg
byclsperc byclspercent
byclspercent bybgpercent
bydancingweapon s=regexp_replace(cikiller, "[-+]\d+ .*", "dancing weapon")
byform s=regexp_replace(regexp_replace(regexp_replace(status, ".*(,|^)(.*-form).*", "\2") , ".*(,|^)(blade|eel) (hand|tentacle|paw|claw)s?.*", "\2-form"), "^((?!-form).)*$", "no form")
byformpercent s=regexp_replace(regexp_replace(regexp_replace(status, ".*(,|^)(.*-form).*", "\2") , ".*(,|^)blade (hand|tentacle|paw|claw)s?.*", "blade-form"), "^((?!-form).)*$", "no form")%
byg s=regexp_replace(regexp_replace(regexp_replace(god, "The Shining One", "1"), "^(.).*", "\1"), "^$", "-")
bygod s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(god, "^(Ash|Chei|Dith|Ely|Fed|Goz|Hep|Kiku|Mak|Nem|Oka|Pak|Qaz|Sif|Usk|Veh| Wuln|Yred).+", "\1"), "^$", "-None"), "Lugonu", "Lucy"), "The Shining One", "TSO"), "Wu Jian", "WJC"), "Iashol", "Ru"), "Igni Ipthes", "Igni")
bygodpercent s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(god, "^(Ash|Chei|Dith|Ely|Fed|Goz|Hep|Kiku|Mak|Nem|Oka|Pak|Qaz|Sif|Usk|Veh| Wuln|Yred).+", "\1"), "^$", "-None"), "Lugonu", "Lucy"), "The Shining One", "TSO"), "Wu Jian", "WJC"), "Iashol", "Ru"), "Igni Ipthes", "Igni")%
bygpercent s=regexp_replace(regexp_replace(regexp_replace(god, "The Shining One", "1"), "^(.).*", "\1"), "^$", "-")%
byicecavedifficulty s=regexp_replace(regexp_replace(oplace, "(D:11|D:12|D:13|Lair|Orc).+", "easy"), "(D:|^S|Elf).+", "hard")
byjob bybg
byklownpie s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(status, "bat-form|wisp|pig-form", "moon"), "fire_vulnerable", "cherry"), "lost strength|lost intelligence|lost dexterity", "raspberry"), "vertigo", "plum"), "no potions", "lemon"), "silenced((expiring)?)", "blueberry")
bykmapmaker s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(kmap, '.+;.*(cheibrodos|gammafunk|hellmonk|[Ll]emuel|minmay|nicolae|nzn| evilmike|grunt|hangedman|regret_index).*', '\1'), '.*(cheibrodos|gammafunk|hellmonk|[Ll]emuel|minmay|nicolae|nzn|evilmike| grunt|hangedman|regret_index).*', '\1'), "Lemuel", "lemuel"), "hangedman", "regret_index")
bylgform s=regexp_replace(regexp_replace(regexp_replace(lg:status, ".*(,|^)(.*-form).*", "\2") , ".*(,|^)(blade|eel) (hand|tentacle|paw|claw)s?.*", "\2-form"), "^((?!-form).)*$", "no form")
bymapmaker s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(map, '.+;.*(cheibrodos|gammafunk|hellmonk|[Ll]emuel|minmay|nicolae|nzn| evilmike|grunt|hangedman|regret_index).*', '\1'), '.*(cheibrodos|gammafunk|hellmonk|[Ll]emuel|minmay|nicolae|nzn|evilmike| grunt|hangedman|regret_index).*', '\1'), "Lemuel", "lemuel"), "hangedman", "regret_index")
bymark mark s=regexp_replace(noun, "accepted the Mark of (the)?", "")
bymonth s=regexp_replace(rend, '^(\d\d\d\d\d\d).*', '\1') o=-.
byrolegroup s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(cls, "^(Br|Fig|Gl|Hu|Mo|Th).*", "Warrior"), "^(Art|Wan|Del|Sh).*", "Adventurer"), "^(Ab|Be|Ch|Ci|De|Hea|Je|Pa|Pr).*", "Zealot"), "^(Arc|Cr|En|Hex|Re|Sk|St|Tr|Warp).*", "WarriorMage"), "^(Ai|Al|Co|Ea|Fi|Fo|He|Ic|Ne|Su|Ve|Wi).*", "Mage")
byshaftdepth shaft s=${int(regexp_replace(noun, ".*?(\d+)$", "\1"))-lvl}
byshaftdepthpercent shaft s=${int(regexp_replace(noun, ".*?(\d+)$", "\1"))-lvl}%
bysp s=regexp_replace(char, '^(..).*', '\1')
byspecies bysp
byspeciesgroup s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(char, '(..)..', '\1'), "^(La|Im|Sa|Fr|Ch|Be|Pl)$", "Experimental"), "^(Ce|DD|El|Gh|GE|Gm|Ha|HE|HD|HO|LO|My|Me|Og|OM|Pa|SE|Vp)$", "Removed"), "^(At|DE|Dr|Gr|Gn|Mf|Mi|MD|Tr)$", "Simple"), "^(Hu|Ko|Re|Ds|Dj|Sp|Te|On|Ba)$", "Intermediate"), "^(Co|Dg|Fe|Fo|Op|Mu|Na|Po|VS)$", "Advanced")
bysppercent s=regexp_replace(char, '^(..).*', '\1')%
bysprint sprint s=regexp_replace(mapdesc, '.*"([^"]+)".*', '\1')
byversion s=regexp_replace(cv, "-a", "")
byversionpercent s=regexp_replace(cv, "-a", "")%
byyear s=regexp_replace(rend, '^(\d\d\d\d).*', '\1') o=-.
canonizedancing bydancingweapon
cat fe--
ch-- crace=cherufe
console !tiles
current cv>=0.34
day end>${now()-interval('1d')}
dcss game=
dead !won !boring
deadsrc src=cbro|cjr|cko|ckr|csn|cszo|cwz|rhf
devtools wizmode
diesel ac>45 ev>30
dieselstatus diesel status!~~might|agil|phas|vit|berserk|stone|statue|form|hero|divine|corpse
dreamshard verb=dreamshard
drowning ckiller=water|lava
dying !won !boring
easyicecave br.enter=icecv oplace~~d:11|d:12|d:13|lair|orc
ecumenical verb=god.ecumenical
eighthours end>${now()-interval('8h')}
eligiblecoolplayer won words console
evil Makhleb|lugonu|kiku|yred|beogh
evilgod kiku|yred|makh|beogh|lugonu
evilrace vp--|ds--|mu--|gh--|po--|re--
experimental explbr!=||file~~(smithgod|jump|combo_god)
experimentalrace Basajaun|Be--|Ch--|Im--|Fr--|La--|Pl--|Sa--
explore exploremode
exploremode ktype=exploremode
extended place=hell|coc|geh|tar|dis|pan|tomb
fakegnoll !gn xl>19 size(fifsk)=0
fanaticbuggygods (( buggygods || gr yred ))
farmer turn>200000
farming farmer
firstborn pfmt-first-child
fmtemojichar fmt:'${n_x}$(emoji-char ${.}) ${%} [${n_ratio};${x}]'
fmtsimple fmt:'${.} ${%} ${n_ratio} [$x]'
fmtxdays fmt:'${.} $(sprintf "%.2fd" (/ (float (pduration $x)) 86400))'
fmtxhours fmt:'${.} $(sprintf "%.2fh" (/ (float (pduration $x)) 3600))'
fmtxminutes fmt:'${.} $(sprintf "%.2fmin" (/ (float (pduration $x)) 60))'
fmtxmonths fmt:'${.} $(sprintf "%.2fmo" (/ (float (pduration $x)) 2628000))'
fmtxweeks fmt:'${.} $(sprintf "%.2fw" (/ (float (pduration $x)) 604800))'
fmtxyears fmt:'${.} $(sprintf "%.2fy" (/ (float (pduration $x)) 31536000))'
fortnight end>${now()-interval('14d')}
fortnite fortnight
fourhours end>${now()-interval('4h')}
fourmonths end>${now()-interval('4 months')}
fr-- crace=frog
frog race=barachian|barachi|frog
gf-good-branch gfmap br!=D|Lair|Abyss|Gauntlet
gf-good-dungeon (( kmap=~gammafunk kmap!~~depths_entry|enter_depths|runelock || map=~gammafunk kmap= map!~~depths_entry|enter_depths|runelock )) D lvl>=12
gfcasual gid=gammafunk:cszo:20151012005803S|gammafunk:cszo:20151012034623S|gammafunk:cszo:20151012034937S|gammafunk:cszo:20160229014823S|gammafunk:cszo:20160304025005S|gammafunk:cszo:20130010123000S
gfchallenge name=gammafunk char=ddfi|deie|desu|grgl|heie|hesu|hogl|mffi|mfgl|mfbe|mibe|migl|musu|miwr|trck|vsie|vsfi|vssu !gfcasual
gfmap (( map!=~overflow map~~gammafunk || map=wizlab_lehudib ))
ghostkmap kmap~~ghost|potion_laboratory kmap!=weyrava_ghost_lake|spiders_nest_ghost_moth_duel|nicolae_snake_ghostly_warrior_ritual
ghostmap map~~ghost|potion_laboratory map!=weyrava_ghost_lake|spiders_nest_ghost_moth_duel|nicolae_snake_ghostly_warrior_ritual
glacialchasm br.enter=icecv oplace~~shoals|spider|snake|swamp|elf
goodgod god=elyvilon|the_shining_one|zin
goodgodevilrace goodgod evilrace
gulch br=gulch
halfday end>${now()-interval('12h')}
hallofblades kmap=elven_hall_of_blades_hangedman_original|elven_hall_of_blades_hangedman_alternative|nicolae_elf_blades_crystal_corner|nicolae_elf_blades_splatter_lattice
hells place=tar|dis|geh|coc
hepelementalist vlong>=0.35-a0-408-g4a81f18ca8
heplementalist hepelementalist
hour end>${now()-interval('1h')}
hour-milestone time>${now()-interval('1h')}
icecave place=icecv
idemon itier1|itier2|itier3|itier4|itier5
im crace=imp
im-- crace=imp
immo ckaux=ignited_by_their_inner_flame
intermediate Hu--|Ko|Re--|Ds|Ce|Dj|Sp|Te|On|Ba|DD
itier1 ikiller=ice_fiend|brimstone_fiend|hell_sentinel|shadow_fiend|tzitzimitl|executioner
itier2 ikiller=balrug|blizzard_demon|shadow_deamon|cacodemon|green_death|hell_beast|hellion|lorocyproca|reaper|tormentor
itier3 ikiller=sun_demon|smoke_demon|soul_eater|neqoxec|ynoxinul|sixfirhy
itier4 ikiller=red_devil|rust_devil|ice_devil|hellwing|orange_demon|chaos_spawn
itier5 ikiller=crimson_imp|white_imp|shadow_imp|iron_imp|quasit|ufetubus
kmapauthor vault(kmap)~~(^|_)(amethyst|argonaut|biasface|cheibrodos|chequers|dpeg|due|ebering|elwin|emtedronai|erik|evilmike|gammafunk|grunt|guppfry|hangedman|infiniplex|kb|kennysheep|lemuel|lightli|maelrawn|minmay|mu|nicolae|nooodl|nzn|onia|palyth|ragdoll|regret_index|skrybe|st|zaba)(_|$)
kmapbyauthor vault(kmap)~~^(minmay|evilmike|lemuel|gammafunk|chequers|eberering|st|kennysheep|grunt|hangedman|infiniplex|amethyst|cheibrodos|nzn|regret_index|nicolae|guppfry|ebering) s=regexp_replace(vault(kmap), "^(minmay|evilmike|lemuel|gammafunk|chequers|eberering|st|kennysheep|grunt|hangedman|infiniplex|amethyst|cheibrodos|nzn|regret_index|nicolae|guppfry|ebering).*", "\1")
kmapmaker kmap~~'cheibrodos|gammafunk|hellmonk|lemuel|minmay|nicolae|nzn|evilmike|grunt|hangedman|regret_index'
la-- crace=lacertilian
lairbranch br=shoals|swamp|snake|spider
lairend kmap|map~~evil_forest|wormcave|jungle_book|caniforms_friends|catoblepas_cave|lair_end|in_review|tendril_chambers|ancient_temple|hotspot|abyssal_woods
lastmonth end>${month(month(now()) - interval('1d'))} end<${month(now())}
lastturn ${lg:turn-turn}=0
lastweek end>${day(now()) - ndayofweek(now()) * interval('1d') - interval('7d')} end<${day(now()) - ndayofweek(now()) * interval('1d')}
lastyear end>=${year(now()-interval('365d'))} end<${year(now())}
linesprint sprint9
listnames s=name fmt:'${.}' join:'|' notitle
log -log
lucy god=lucy|lugonu
mage HW|Cj|Su|Ne|Fw|--FE|IE|AE|EE|Al
mapauthor vault(map)~~(^|_)(amethyst|argonaut|biasface|cheibrodos|chequers|dpeg|due|ebering|elwin|emtedronai|erik|evilmike|gammafunk|grunt|guppfry|hangedman|infiniplex|kb|kennysheep|lemuel|lightli|maelrawn|minmay|mu|nicolae|nooodl|nzn|onia|palyth|ragdoll|regret_index|skrybe|st|zaba)(_|$)
mapmoonbase map=wizlab_lehudib
maxpiety god.maxpiety
meatsprint sprint8
megazig zigscompleted>6 cv>=0.16-a rstart>2014081810
meleebug meleebug016|meleebugtrunk
meleebug016 vlong>=0.16-b1-18-g9590bb8 vlong<0.16.0-18-g484a79e
meleebug2 vlong>=0.18-a0-72-g2733cf4 vlong<0.18-a0-323-gfe90d9b
meleebugtrunk vlong>=0.17-a0-22-ge0bdd66 vlong<0.17-a0-124-gc3c9679
minute end>${now()-interval('1m')}
month end>${now()-interval('31d')}
months end>${now()-interval('1 month')}
nchoice CoCA|DgRe|PoNe|MDHu|OnFw|HuSh|AtAE|ReHW|CoIE|DEWr|VSCA|BaEn|PoSu|DjBr|TeAl|NaFw|ReCj|DjAr|OnWn|SpSh|MfRe|MDHs|AtIE|FeAl|FoRe|DEDe|OnHu|ReMo|DsFw|CoEE|FoNe|PoFE|PoFi|KoAl|MiSh|OpRe|MDWn|HuCA|ReBe|AtFE|TrAl|SpFw|FoAE|MDSu|OnHW|DjEn|AtAr
nchoice-0.10 t0.10 char=MiSt|HuPr|FeSk|DDAM|VpCj|DrWr|DgBr|HaEE|MfNe|CeHe|HOAE|KoWn|SEDK
nchoice-0.11 t0.11 char=OpHu|TeDK|MiNe|GhAE|DDSu|KoCj|VpAK|HuAM|FeCK|MuWn|HEBr|CeWz
nchoice-0.12 t0.12 char=TeAr|DESk|VpWn|SEAM|GhEn|HaCj|HEMo|OpDK|MiAE|HOBr|FeFi|DEGl|SpHe|NaPr|MuAM|KoSu|DDWz|MfEE|TrFE|TeCK|HuAK|HaIE|FeWn|VpWr|NaHu|HOTm|DDVM|TrSk
nchoice-0.13 t0.13 char=MiAM|NaHe|MiCj|OpBr|HaWn|HEAK|DEFi|GrEn|SpNe|TeSk|FeIE|GhAE|HaMo|SpSu|MfSu|MuAM|KoTm|VpCK|DDBr|CeAE|DgHu|MfFE
nchoice-0.14 t0.14 char=CeSu|HaIE|TrEn|VSWn|MiWz|FoGl|MuSk|FeAE|OpNe|SpSk|GrHu|GhVM|DDCj|HETm|DDMo|DEHe|VpWr|NaAM|KoAK|FeDK|FoEE|MfAM|HOEn|DrBr|CeFE|HEAr|DECK|VpFi
nchoice-0.15 t0.15 char=VSGl|FeAK|MiIE|OpSu|FoEn|VpFE|TeIE|GrHe|HaWz|DEWr|HOAE|OpSk|GhCj|DDSu|MuBr|MfAM|HECK|VSAr|VpHu|OgEn|KoFi|DEBr|FoWn|CeVM|DrAM|DDTm|FeAr|HENe|TeEE
nchoice-0.16 t0.16 char=VSVM|TrCj|DEWr|HaEE|HOAM|DDAK|FoBr|KoSk|MiEE|HOTm|MfEn|HENe|DrHu|GrAE|CeEn|NaSu|GhWz|OpSu|FoMo|SpIE|TeAK|DEFi|MuAE|MiFE|VpVM|VSHu|DDFE|HaVM|GhCj|OpWr|OpAM|FeNe|HuEn|FoSu|DEAr|CeIE
nchoice-0.17 t0.17 char=MuWr|KoSu|MiAE|FeSk|HOIE|DEAK|DDTm|MiEn|HEBr|MfNe|HaCj|TeAM|FoFE|DgHu|GhAM|VSFE|HEEE|OgEn|CeWz|DEMo|DDVM|SpNe|GrSu|GhSk|FoAE|FeAr|CeSk|VpFE|OpAK
nchoice-0.18 t0.18 char=OgAE|GhEE|HuEn|FoIE|DDSu|DEAM|VpVM|KoMo|OpSk|MfFE|HEEn|MuEE|SpHu|TeTm|HaWz|CeNe|FeWr|CeAr|VSCj|FoVM|OgSu|GhAK|GrAM|KoCj|VpTm|MiCj|HaNe|SpFE|DEWn|TeEn|HOAE|TrSk|OpHu|DrAM|DEGl|HESu|MuAK
nchoice-0.19 t0.19 char=OpWr|HEAr|KoIE|DDAE|CeVM|HOWz|GrEn|GhCj|FeAK|VSSu|DEHu|VpAK|HaSu|TeAM|SpMo|FoCj|MfEE|TrVM|DDSk|HaFE|VSAM|HOTm|GhBe|SpAE|DECK|DDIE|TeAK|VpEE|FoNe|KoTm
nchoice-0.20 t0.20 char=DEAM|DDAK|HOCj|BaEn|FoEn|MiVM|HaIE|VSEE|FeNe|GhWz|CeFE|SpTm|MuAM|TeWr|VpSk|KoAE|GrSu|OgEE|BaHu|MfCj|VpFE|DEBr|HOSu|BaAr|HaAE|FoWz|TeIE|VSVM|MuAK|SpNe|CeTm|DEFi
nchoice-0.21 t0.21 char=TeEn|KoNe|GnAM|DDIE|DEAr|BaWz|DgBr|VSAM|BaVM|OpAK|MfAE|HaFE|VSCj|VpHu|CeWz|FoSu|DEWr|GhVM|FeAK|MuEn|GrNe|HOIE|BaTm|SpAE|KoSk|HaEE|FoCj|VpAr|GhSu|TeEE|CeAE
nchoice-0.22 t0.22 char=VpFE|BaEn|CeIE|DDCj|HaAE|KoVM|CeEE|BaFE|DrAM|TeWr|SpSu|DEAK|BaNe|DgEn|MuWr|FoTM|GnAK|MfEE|HuAE|DEHu|GnCK|VSSu|HaCj|OpAM|OgVM|FoWz|HOEn|SpIE|GhEn|DESk|VSFE|OgCj|DDWz|GnBr|GhAM|SpNe|TeAK|MfNe|HaSu|VSEE|DDVM|OpAE
nchoice-0.23 t0.23 char=GhVM|TeEn|VpCj|VpAE|CeAE|DDIE|DEMo|FeWr|HaEE|GnHu|KoAK|FoSk|DDFE|OpAK|SpSk|MfAM|BaBr|TeEE|MfWz|VsNe|OpWr|DETm|KoNe|TrFE|HuEn|DEAr|DgAM
nchoice-0.24 t0.24 char=MfEn|BaEE|HaVM|HaFE|CeIE|CeWz|TeSk|OpAE|FoNe|GhCj|BaAK|DDAM|HuTm|SpAK|DEBr|OgCj|VpWr|KoIE|VSEE|DgEn|OpHu|GnAE|VSHu|KoSk|GhSu|TeTm|DEGl|SpFE|MuAK|VpAM|MfNe|KoWz|FoWr|GrEn|BaCK|HOCj|VSVM|FeAK
nchoice-0.25 t0.25 char=BaEn|BaAM|FoFE|VSWz|HaAE|KoTm|DDVM|HOEE|CeTm|DEAr|GhSk|DgWr|SpSu|VpCj|TeIE|TeNe|MfFE|DECK|KoAK|VpAE|MuEn|FoCj|OpAM|FeAK|HaWz|CeEE|GhEE|NaAM|MuSk|DDIE|DgHu|OgEn|SpSk|TeBr|HOAE|DDCj|CeSu|TeWr|HaIE|KoNe|VpHu|KoVM|VSAE|HuAM|FoTm
nchoice-0.26 t0.26 char=HaEn|FoSu|PaWn|GhDe|BaAE|MfDe|DEAr|PaGl|MuAM|VSCj|TeAK|VpVM|HaEE|BaNe|KoTm|HuEn|SpIE|GnDe|DgAM|DDAE|DEWr|MfWz|DETm|FoFE|VpFE|HaNe|TeEE|GhWz|BaBr|DDSu|PaHu|TeIE|FeDe|GhFE|VSAM|VpAr|BaWr|DDAK|FoCj|NaDe|KoAE|GhVM|HaTm|MfEE|DDEn|FoIE|DrDe|DEHu|MfCj|BaWz|TeAM|KoFE|VpAK|PaNe|HaSu|GhAE|DgDe|PaIE|DEAK|PaEE|TeEn
nchoice-0.27 t0.27 char=PaCj|MfEn|FoDe|HuAM|DjAE|SpFE|MuAK|VSWz|DgSu|BaCK|DjWn|DDTm|FoWr|TrIE|FeNe|DEGl|VpHu|BaEE|GrNe|KoDe|GhAM|PaCK|DjFi|HOEn|DDWz|TeWr|OgDe|SpTm|NaAE|DrAM|MfNe|DEBr|VSVM|GhCj|HuDe|TrFE|PaMo|NaSu|FeAK|HOIE|MuWr|OpAM|VpWz|FoBe|OgEn|DjAr|DDFE|MfAE|KoWz|SpAK|VpCj|GrEn|BaTm|PaSu
nchoice-0.28 t0.28 char=DDAM|DjCA|BaAK|TeEn|FoIE|PaAr|GhDe|HODe|DjSu|MfFE|VpVM|KoWR|DETm|GrCA|FoAE|PaWz|HuEn|TeEE|SpIE|DjGl|VpFE|MuCA|MfAM|SpSu|BaCj|KoAE|MuDe|BaNe|GhWz|VpWr|DDAK|PaEE|VSDe|DEAr|DEWr|PaHu|DgEn|DrCA|PaBr|DDAE|FoNe|FeCA|DjBe|MfCj
nchoice-0.29 t0.29 DEGl|PaSu|FeDe|DjAM|BaTm|TeWr|MeDe|MfAE|GhFE|FoCA|MeHW|TrCA|DjCK|KoNe|PaVM|FeAK|OgEn|DgDe|VpAK|FoCj|MfEE|PaIE|BaCK|SpTm|GhEn|DjAr|MeBe|VpAE|DgAM|DgAM|FoFE|KoHW|OpCA|HuDe|DEAK|DjMo|BaWr|MeBr|DsCA|GhSu|PaTm|DjHu|GrDe|TeAK|KoFE|NaCA|TeAM|PaNe
nchoice-0.30 t0.30 DrCA|AtDe|BaNe|TeRe|GhCj|MeHs|DjBr|MfRe|KoAE|DETm|AtWr|VSFE|TeEn|VpHW|FoIE|DjBe|OgDe|FoEn|HuCA|FeNe|DEAr|MeMo|HOAE|VpCj|VSVM|BaEE|DgRe|KoTm|AtSu|OgCA|MfFE|MfAr|DECK|NaRe|SpDe|MeFi|GhHW|GrCA|DjFi|MuRe|AtHu|VpWr|DgEn|AtEE|FoAE|TeHs|DjHs|MeSu|BaEn|DrDe|SpCA|TeIE|MeCK|DEWr|MfHW|GhAE|AtBr|VSAE
nchoice-0.31 t0.31 FoCA|HORe|AtHs|OnHs|BaSh|TeDe|DsAl|SpAl|VSNe|MfEE|VpFE|KoRe|DjMo|TrEn|DjHu|NaSh|DEGl|MfAE|FoDe|FeCA|OnSu|GhSu|MuAl|AtHW|DjCK|GrRe|HuDe|AtCj|DgSh|GhFE|DEMo|KoCA|OnBr|OnAr|OpRe|GnCA|mfcj|SpSu|FoAl|GhEn|BaCA|DgDe|DrAl|AtIE|VSAl
nchoice-0.32 t0.32-games FeAl|SpRe|OnFE|DjSh|MDHW|VSCA|CoCK|MDSu|AtIE|OnCK|BaDe|TrAl|DjHu|CoAE|HuSh|OpRe|VpRe|CoCj|AtEn|GhCA|KoCA|GhAl|AtBr|DEDe|GrSh|MDNe|MiSh|OnSu|FoRe|NaCA|AtHW|DjEn|MDEE|OnHs|CoWn|TeAl|VSRe|MfCA|MDHs|DgSh|AtSu|VpAl|CoNe|OnHu|TeCA|MuRe|AtFE|OnEn
nchoice-0.33 t0.33-games OnEE|BaRe|MDEn|CoMo|MDAr|DESh|GnFw|MiAl|ReAE|PoCA|ReCK|AtHu|TrFw|SpAl|AtGl|OnNe|PoBe|FeCA|HuRe|CoSu|DgFw|PoWr|FoSh|KoRe|MDIE|ReBr|OnDe|MfAl|OpFw|VSSh|PoHW|SpCA|CoFE|ReWn|AtHs|OnCj|ReHs|CoHW|MuAl|AtCK|DERe|KoSh|MDCK|NaRe|PoAE|TeFw|ReDe|AtNe|VSAl|OpCA
nchoice-0.34 CoCA|DgRe|PoNe|MDHu|OnFw|HuSh|AtAE|ReHW|CoIE|DEWr|VSCA|BaEn|PoSu|DjBr|TeAl|NaFw|ReCj|DjAr|OnWn|SpSh|MfRe|MDHs|AtIE|FeAl|FoRe|DEDe|OnHu|ReMo|DsFw|CoEE|FoNe|PoFE|PoFi|KoAl|MiSh|OpRe|MDWn|HuCA|ReBe|AtFE|TrAl|SpFw|FoAE|MDSu|OnHW|DjEn|AtAr
nchoice-0.5 t0.5 char=OgFE|HaNe|TrIE|MfTh|TeCK
nchoice-0.7 t0.7 char=GhFE|HaTm|SEBr|MDEn|NaPr
nchoice-0.9 t0.9 char=HaVM|TrBr|VpAE|OgCj|KoSk|HOAr|DEHu|CeWz|SpDK|DDEn|SEGl|HuAK|HENe|TePr
nchoice-all nchoice-0.5|nchoice-0.7|nchoice-0.9|nchoice-0.10|nchoice-0.11|nchoice-0.12|nchoice-0.13|nchoice-0.14|nchoice-0.15|nchoice-0.16|nchoice-0.17|nchoice-0.18|nchoice-0.19|nchoice-0.20|nchoice-0.21|nchoice-0.22|nchoice-0.23|nchoice-0.24|nchoice-0.25|nchoice-0.26|nchoice-0.27|nchoice-0.28|nchoice-0.29|nchoice-0.30|nchoice-0.31|nchoice-0.32|nchoice-0.33
nchoice-recent nchoice-0.32|nchoice-0.33
nchoice2 AtAr|AtCA|AtEE|AtEn|AtFE|AtFw|AtNe|AtSu|BaEE|BaFE|BaNe|DEAr|DEBe|DEBr|DECA|DEEn|DEFw|DERe|DgEn|DgHW|DgNe|DjAr|DjBe|DjBr|DjFi|DjGl|FoAE|FoBe|FoEn|FoFE|FoHW|FoIE|FoNe|FoSu|GnBe|GnGl|GrAE|GrEn|GrHW|GrNe|GrSu|HuHs|HuHW|KoAE|KoAl|KoCj|KoFE|KoFw|KoHW|KoIE|KoNe|KoSh|KoSu|KoWn|KoWr|MDAE|MDBr|MfEn|MfFE|MfHs|MfHW|MfNe|MfRe|MiCj|MiEE|MiEn|MiFE|MiIE|MiSu|MuAE|MuAr|MuBe|MuBr|MuCA|MuEn|MuFw|MuHs|MuHW|MuRe|MuWr|NaAr|NaBr|NaCK|NaEE|NaEn|NaHs|NaNe|NaRe|NaSu|OnEn|OpEn|OpHs|OpNe|OpWr|PoCj|PoRe|ReAr|ReBe|ReCj|ReEn|ReFE|ReFw|ReHs|ReHu|ReSu|ReWr|SpAr|SpCA|SpCj|SpFE|SpFi|SpFw|SpGl|SpHW|SpIE|SpMo|SpNe|SpSu|SpWn|SpWr|TeAr|TeCA|TeEE|TeEn|TeFw|TeHs|TeHW|TeIE|TeNe|TeWn|TeWr|TrAE|TrCj|TrEE|TrFE|TrHs|TrHu|TrHW|TrIE|TrNe|TrSu|VSAE|VSCj|VSEE|VSFE|VSFw|VSHs|VSHW|VSIE|VSSu
nchoice3 AtAl|AtCA|AtEE|AtFE|AtFw|AtNe|BaBe|BaCA|BaNe|CoEE|CoEn|CoSh|DEAr|DEBe|DEBr|DECA|DEEn|DEFw|DERe|DgEn|DgHW|DgNe|DgWr|DjAr|DjGl|FeFE|FoAE|FoBe|FoCj|FoEn|FoFE|FoFw|FoHW|FoNe|FoSu|GnBe|GrAE|GrEn|GrHW|GrNe|HuCK|HuFw|HuHW|HuHs|KoAE|KoAl|KoCA|KoCj|KoFE|KoFw|KoHW|KoIE|KoNe|KoSu|KoWr|MDAE|MDBr|MDCj|MDHs|MDSh|MfEn|MfFE|MfFw|MfHW|MfHs|MfNe|MiAE|MiCj|MiEE|MiFE|MiIE|MiSu|MuAE|MuAr|MuBe|MuBr|MuEn|MuFw|MuHW|MuHs|MuRe|MuWr|NaBr|NaCK|NaEE|NaEn|NaFw|NaHs|NaNe|NaSu|OnEn|OpCA|OpEn|OpHs|OpNe|OpWr|PoAr|PoBe|PoCj|PoFE|PoFi|PoFw|PoGl|PoRe|ReAE|ReAr|ReBe|ReBr|ReCj|ReEn|ReFE|ReFw|ReHs|ReHu|ReSu|ReWr|SpAr|SpCA|SpCj|SpFE|SpFi|SpFw|SpGl|SpHW|SpIE|SpMo|SpNe|SpSu|TeAl|TeAr|TeCA|TeEE|TeEn|TeFw|TeHW|TeHs|TeIE|TeNe|TeWr|TrAE|TrCj|TrEE|TrFE|TrHW|TrHs|TrIE|TrNe|TrSu|VSAE|VSCj|VSEE|VSFE|VSFw|VSHW|VSHs|VSIE|VSSu
nchoiceall nchoice-all
nem-eligible AtAE|AtAl|AtAr|AtBr|AtCA|AtEE|AtEn|AtFE|AtFw|AtHW|AtIE|AtSh|AtSu|BaAl|BaCA|BaEn|BaFw|BaSh|CoAE|CoAl|CoBr|CoCA|CoCj|CoDe|CoEE|CoEn|CoFw|CoIE|CoNe|CoRe|CoSh|DECA|DEDe|DEFw|DEWr|DgAl|DgRe|DgSh|DjAr|DjBr|DjEn|DjFw|DjRe|DjSh|DrFw|DsFw|FeAl|FeFw|FeRe|FoAE|FoCA|FoFw|FoNe|FoRe|GrAl|GrFw|GrSh|HuAl|HuCA|HuFw|HuSh|KoAl|KoCA|KoFw|MDAE|MDAl|MDBr|MDCA|MDCj|MDDe|MDHs|MDHu|MDHW|MDNe|MDSh|MDSu|MDWn|MDWr|MfCA|MfFw|MfRe|MiFw|MiSh|MuCA|MuFw|MuRe|NaCA|NaFw|OnAE|OnAr|OnBr|OnCA|OnCK|OnEn|OnFE|OnFw|OnHs|OnHu|OnHW|OnIE|OnRe|OnSu|OnWn|OpRe|PoAr|PoBr|PoCj|PoCK|PoDe|PoEE|PoFE|PoFi|PoFw|PoGl|PoHu|PoIE|PoMo|PoNe|PoRe|PoSu|PoWn|ReAl|ReAr|ReBe|ReCA|ReCj|ReEn|ReFE|ReFw|ReGl|ReHu|ReHW|ReMo|ReNe|ReRe|ReSu|ReWr|SpFw|SpRe|SpSh|TeAl|TeCA|TeSh|TrAl|TrRe|VSCA|VSFw|VSRe
nem-eligible2 AtAE|AtAl|AtAr|AtCA|AtCK|AtEE|AtFE|AtFw|AtGl|AtHs|AtIE|AtNe|AtSh|AtSu|BaAl|BaCA|BaFw|BaSh|CoCA|CoCj|CoDe|CoEE|CoEn|CoFE|CoFi|CoHW|CoIE|CoMo|CoNe|CoRe|CoSh|CoSu|DECA|DEFw|DEGl|DERe|DESh|DEWr|DgAl|DgFw|DgRe|DgSh|DjBe|DjBr|DjFw|DjMo|DjRe|DjSh|DrCA|DrEn|DrFw|DrRe|DsAl|DsCA|DsFw|DsSh|FeAl|FeCA|FeFw|FeRe|FoCA|FoFw|FoRe|FoSh|GnAl|GnCA|GnFw|GnSh|GrAl|GrFw|GrRe|GrSh|HuAl|HuFw|HuRe|HuSh|KoAl|KoCA|KoFw|KoSh|MDAE|MDBr|MDCj|MDDe|MDEn|MDHW|MDHs|MDHu|MDIE|MDSh|MDWn|MDWr|MfAl|MfCA|MfFw|MfRe|MiAl|MiFw|MiRe|MiSh|MuAl|MuCA|MuFw|MuRe|NaCA|NaFw|NaRe|NaSh|OnAr|OnBe|OnBr|OnCK|OnEn|OnFi|OnFw|OnHs|OnHu|OnNe|OnWn|OpCA|OpFw|OpNe|OpRe|PoAE|PoAr|PoBe|PoBr|PoCA|PoCK|PoCj|PoDe|PoEE|PoFE|PoFi|PoGl|PoHW|PoHu|PoIE|PoMo|PoNe|PoRe|PoSu|PoWn|PoWr|ReAE|ReAl|ReAr|ReBe|ReBr|ReCK|ReCj|ReDe|ReEE|ReEn|ReFE|ReFi|ReFw|ReGl|ReHW|ReHs|ReHu|ReMo|ReNe|ReRe|ReSu|ReWn|ReWr|SpCA|SpFw|SpRe|SpSh|TeAl|TeCA|TeFw|TeSh|TrAl|TrFw|TrRe|TrSu|VSAl|VSCA|VSFw|VSRe
newbeogh vlong>=0.32-a0-285-g900342706a
newmakhleb vlong>=0.32-a0-1845-gfed0f14cea
newslime vlong>=0.34-a0-1819-gc53afb7344
newslimeends vlong>=0.31-a0-220-gc2f4f3cf83
newzotorbs vlong>=0.34-a0-2013-gfb219259bb
no_god god=
nothuge !@hugeterm
notitle title:""
oneshot dam>${mhp} hp=${mhp-dam}
owned tdam>${mhp} tdam>70 !((ak place=abyss xl<5))
pak god=pakellas
pakellas god=pakellas
paralysed status~~paralysed
pfmt-first-child pfmt:'${.}: $(re-replace "([^,]*).*" "$1" $child)'
pitsprint sprint7
playable:0.34 char=HuFi|HuHW|HuGl|HuNe|HuBr|HuBe|HuHu|HuCj|HuEn|HuFE|HuIE|HuSu|HuAE|HuEE|HuAl|HuCK|HuSh|HuMo|HuWr|HuWn|HuAr|HuHs|HuDe|HuCA|HuRe|HuFw|DEFi|DEHW|DEGl|DENe|DEBr|DEBe|DEHu|DECj|DEEn|DEFE|DEIE|DESu|DEAE|DEEE|DEAl|DECK|DESh|DEMo|DEWr|DEWn|DEAr|DEHs|DEDe|DECA|DERe|DEFw|KoFi|KoHW|KoGl|KoNe|KoBr|KoBe|KoHu|KoCj|KoEn|KoFE|KoIE|KoSu|KoAE|KoEE|KoAl|KoCK|KoSh|KoMo|KoWr|KoWn|KoAr|KoHs|KoDe|KoCA|KoRe|KoFw|MuFi|MuHW|MuGl|MuNe|MuBr|MuBe|MuHu|MuCj|MuEn|MuFE|MuIE|MuSu|MuAE|MuEE|MuAl|MuCK|MuMo|MuWr|MuWn|MuAr|MuHs|MuDe|MuCA|MuRe|MuFw|NaFi|NaHW|NaGl|NaNe|NaBr|NaBe|NaHu|NaCj|NaEn|NaFE|NaIE|NaSu|NaAE|NaEE|NaAl|NaCK|NaSh|NaMo|NaWr|NaWn|NaAr|NaHs|NaDe|NaCA|NaRe|NaFw|OnFi|OnHW|OnGl|OnNe|OnBr|OnBe|OnHu|OnCj|OnEn|OnFE|OnIE|OnSu|OnAE|OnEE|OnAl|OnCK|OnSh|OnMo|OnWr|OnWn|OnAr|OnHs|OnDe|OnCA|OnRe|OnFw|TrFi|TrHW|TrGl|TrNe|TrBr|TrBe|TrHu|TrCj|TrEn|TrFE|TrIE|TrSu|TrAE|TrEE|TrAl|TrCK|TrSh|TrMo|TrWr|TrWn|TrAr|TrHs|TrDe|TrCA|TrRe|TrFw|DrFi|DrHW|DrGl|DrNe|DrBr|DrBe|DrHu|DrCj|DrEn|DrFE|DrIE|DrSu|DrAE|DrEE|DrAl|DrCK|DrSh|DrMo|DrWr|DrWn|DrAr|DrHs|DrDe|DrCA|DrRe|DrFw|DgFi|DgHW|DgGl|DgNe|DgBr|DgHu|DgCj|DgEn|DgFE|DgIE|DgSu|DgAE|DgEE|DgAl|DgSh|DgWr|DgWn|DgAr|DgHs|DgDe|DgRe|DgFw|SpFi|SpHW|SpGl|SpNe|SpBr|SpBe|SpHu|SpCj|SpEn|SpFE|SpIE|SpSu|SpAE|SpEE|SpAl|SpCK|SpSh|SpMo|SpWr|SpWn|SpAr|SpHs|SpDe|SpCA|SpRe|SpFw|MiFi|MiHW|MiGl|MiNe|MiBr|MiBe|MiHu|MiCj|MiEn|MiFE|MiIE|MiSu|MiAE|MiEE|MiAl|MiCK|MiSh|MiMo|MiWr|MiWn|MiAr|MiHs|MiDe|MiCA|MiRe|MiFw|DsFi|DsHW|DsGl|DsNe|DsBr|DsBe|DsHu|DsCj|DsEn|DsFE|DsIE|DsSu|DsAE|DsEE|DsAl|DsCK|DsSh|DsMo|DsWr|DsWn|DsAr|DsHs|DsDe|DsCA|DsRe|DsFw|TeFi|TeHW|TeGl|TeNe|TeBr|TeBe|TeHu|TeCj|TeEn|TeFE|TeIE|TeSu|TeAE|TeEE|TeAl|TeCK|TeSh|TeMo|TeWr|TeWn|TeAr|TeHs|TeDe|TeCA|TeRe|TeFw|MfFi|MfHW|MfGl|MfNe|MfBr|MfBe|MfHu|MfCj|MfEn|MfFE|MfIE|MfSu|MfAE|MfEE|MfAl|MfCK|MfSh|MfMo|MfWr|MfWn|MfAr|MfHs|MfDe|MfCA|MfRe|MfFw|FeFi|FeHW|FeNe|FeBe|FeCj|FeEn|FeFE|FeIE|FeSu|FeAE|FeEE|FeAl|FeCK|FeSh|FeMo|FeWr|FeWn|FeAr|FeDe|FeCA|FeRe|FeFw|OpFi|OpHW|OpGl|OpNe|OpBr|OpBe|OpHu|OpCj|OpEn|OpFE|OpIE|OpSu|OpAE|OpEE|OpAl|OpCK|OpSh|OpMo|OpWr|OpWn|OpAr|OpHs|OpDe|OpCA|OpRe|OpFw|DjFi|DjHW|DjGl|DjNe|DjBr|DjBe|DjHu|DjCj|DjEn|DjFE|DjIE|DjSu|DjAE|DjEE|DjAl|DjCK|DjSh|DjMo|DjWr|DjWn|DjAr|DjHs|DjDe|DjCA|DjRe|DjFw|GrFi|GrHW|GrGl|GrNe|GrBr|GrBe|GrHu|GrCj|GrEn|GrFE|GrIE|GrSu|GrAE|GrEE|GrAl|GrCK|GrSh|GrMo|GrWr|GrWn|GrAr|GrHs|GrDe|GrCA|GrRe|GrFw|FoFi|FoHW|FoGl|FoNe|FoBr|FoBe|FoHu|FoCj|FoEn|FoFE|FoIE|FoSu|FoAE|FoEE|FoAl|FoCK|FoSh|FoMo|FoWr|FoWn|FoAr|FoHs|FoDe|FoCA|FoRe|FoFw|VSFi|VSHW|VSGl|VSNe|VSBr|VSBe|VSHu|VSCj|VSEn|VSFE|VSIE|VSSu|VSAE|VSEE|VSAl|VSCK|VSSh|VSMo|VSWr|VSWn|VSAr|VSHs|VSDe|VSCA|VSRe|VSFw|BaFi|BaHW|BaGl|BaNe|BaBr|BaBe|BaHu|BaCj|BaEn|BaFE|BaIE|BaSu|BaAE|BaEE|BaAl|BaCK|BaSh|BaMo|BaWr|BaWn|BaAr|BaHs|BaDe|BaCA|BaRe|BaFw|GnFi|GnHW|GnGl|GnNe|GnBr|GnBe|GnHu|GnCj|GnEn|GnFE|GnIE|GnSu|GnAE|GnEE|GnAl|GnCK|GnSh|GnMo|GnWr|GnWn|GnAr|GnHs|GnDe|GnCA|GnRe|GnFw|AtFi|AtHW|AtGl|AtNe|AtBr|AtBe|AtHu|AtCj|AtEn|AtFE|AtIE|AtSu|AtAE|AtEE|AtAl|AtCK|AtSh|AtMo|AtWr|AtWn|AtAr|AtHs|AtDe|AtCA|AtRe|AtFw|MDFi|MDHW|MDGl|MDNe|MDBr|MDBe|MDHu|MDCj|MDEn|MDFE|MDIE|MDSu|MDAE|MDEE|MDAl|MDCK|MDSh|MDMo|MDWr|MDWn|MDAr|MDHs|MDDe|MDCA|MDRe|MDFw|CoFi|CoHW|CoGl|CoNe|CoBr|CoBe|CoHu|CoCj|CoEn|CoFE|CoIE|CoSu|CoAE|CoEE|CoAl|CoCK|CoSh|CoMo|CoWr|CoWn|CoAr|CoHs|CoDe|CoCA|CoRe|CoFw|PoFi|PoHW|PoGl|PoNe|PoBr|PoBe|PoHu|PoCj|PoEn|PoFE|PoIE|PoSu|PoAE|PoEE|PoAl|PoCK|PoMo|PoWr|PoWn|PoAr|PoHs|PoDe|PoCA|PoRe|PoFw|ReFi|ReHW|ReGl|ReNe|ReBr|ReBe|ReHu|ReCj|ReEn|ReFE|ReIE|ReSu|ReAE|ReEE|ReAl|ReCK|ReMo|ReWr|ReWn|ReAr|ReHs|ReDe|ReCA|ReRe|ReFw
playable:0.35 char=BaAE|BaAl|BaAr|BaBe|BaBr|BaCA|BaCK|BaCj|BaDe|BaEE|BaEn|BaFE|BaFi|BaFw|BaGl|BaHW|BaHs|BaHu|BaIE|BaMo|BaNe|BaRe|BaSh|BaSu|BaWn|BaWr|CoAE|CoAl|CoAr|CoBe|CoBr|CoCA|CoCK|CoCj|CoDe|CoEE|CoEn|CoFE|CoFi|CoFw|CoGl|CoHW|CoHs|CoHu|CoIE|CoMo|CoNe|CoRe|CoSh|CoSu|CoWn|CoWr|DEAE|DEAl|DEAr|DEBe|DEBr|DECA|DECK|DECj|DEDe|DEEE|DEEn|DEFE|DEFi|DEFw|DEGl|DEHW|DEHs|DEHu|DEIE|DEMo|DENe|DERe|DESh|DESu|DEWn|DEWr|DgAE|DgAl|DgAr|DgBr|DgCj|DgDe|DgEE|DgEn|DgFE|DgFi|DgFw|DgGl|DgHW|DgHs|DgHu|DgIE|DgNe|DgRe|DgSh|DgSu|DgWn|DgWr|DjAE|DjAl|DjAr|DjBe|DjBr|DjCA|DjCK|DjCj|DjDe|DjEE|DjEn|DjFE|DjFi|DjFw|DjGl|DjHW|DjHs|DjHu|DjIE|DjMo|DjNe|DjRe|DjSh|DjSu|DjWn|DjWr|DrAE|DrAl|DrAr|DrBe|DrBr|DrCA|DrCK|DrCj|DrDe|DrEE|DrEn|DrFE|DrFi|DrFw|DrGl|DrHW|DrHs|DrHu|DrIE|DrMo|DrNe|DrRe|DrSh|DrSu|DrWn|DrWr|DsAE|DsAl|DsAr|DsBe|DsBr|DsCA|DsCK|DsCj|DsDe|DsEE|DsEn|DsFE|DsFi|DsFw|DsGl|DsHW|DsHs|DsHu|DsIE|DsMo|DsNe|DsRe|DsSh|DsSu|DsWn|DsWr|FeAE|FeAl|FeAr|FeBe|FeCA|FeCK|FeCj|FeDe|FeEE|FeEn|FeFE|FeFi|FeFw|FeHW|FeIE|FeMo|FeNe|FeRe|FeSh|FeSu|FeWn|FeWr|FoAE|FoAl|FoAr|FoBe|FoBr|FoCA|FoCK|FoCj|FoDe|FoEE|FoEn|FoFE|FoFi|FoFw|FoGl|FoHW|FoHs|FoHu|FoIE|FoMo|FoNe|FoRe|FoSh|FoSu|FoWn|FoWr|GCAE|GCAl|GCAr|GCBe|GCBr|GCCA|GCCK|GCCj|GCDe|GCEE|GCEn|GCFE|GCFi|GCFw|GCGl|GCHW|GCHs|GCHu|GCIE|GCMo|GCNe|GCRe|GCSh|GCSu|GCWn|GCWr|GnAE|GnAl|GnAr|GnBe|GnBr|GnCA|GnCK|GnCj|GnDe|GnEE|GnEn|GnFE|GnFi|GnFw|GnGl|GnHW|GnHs|GnHu|GnIE|GnMo|GnNe|GnRe|GnSh|GnSu|GnWn|GnWr|GrAE|GrAl|GrAr|GrBe|GrBr|GrCA|GrCK|GrCj|GrDe|GrEE|GrEn|GrFE|GrFi|GrFw|GrGl|GrHW|GrHs|GrHu|GrIE|GrMo|GrNe|GrRe|GrSh|GrSu|GrWn|GrWr|HuAE|HuAl|HuAr|HuBe|HuBr|HuCA|HuCK|HuCj|HuDe|HuEE|HuEn|HuFE|HuFi|HuFw|HuGl|HuHW|HuHs|HuHu|HuIE|HuMo|HuNe|HuRe|HuSh|HuSu|HuWn|HuWr|KoAE|KoAl|KoAr|KoBe|KoBr|KoCA|KoCK|KoCj|KoDe|KoEE|KoEn|KoFE|KoFi|KoFw|KoGl|KoHW|KoHs|KoHu|KoIE|KoMo|KoNe|KoRe|KoSh|KoSu|KoWn|KoWr|MDAE|MDAl|MDAr|MDBe|MDBr|MDCA|MDCK|MDCj|MDDe|MDEE|MDEn|MDFE|MDFi|MDFw|MDGl|MDHW|MDHs|MDHu|MDIE|MDMo|MDNe|MDRe|MDSh|MDSu|MDWn|MDWr|MfAE|MfAl|MfAr|MfBe|MfBr|MfCA|MfCK|MfCj|MfDe|MfEE|MfEn|MfFE|MfFi|MfFw|MfGl|MfHW|MfHs|MfHu|MfIE|MfMo|MfNe|MfRe|MfSh|MfSu|MfWn|MfWr|MiAE|MiAl|MiAr|MiBe|MiBr|MiCA|MiCK|MiCj|MiDe|MiEE|MiEn|MiFE|MiFi|MiFw|MiGl|MiHW|MiHs|MiHu|MiIE|MiMo|MiNe|MiRe|MiSh|MiSu|MiWn|MiWr|MuAE|MuAl|MuAr|MuBe|MuBr|MuCA|MuCK|MuCj|MuDe|MuEE|MuEn|MuFE|MuFi|MuFw|MuGl|MuHW|MuHs|MuHu|MuIE|MuMo|MuNe|MuRe|MuSu|MuWn|MuWr|NaAE|NaAl|NaAr|NaBe|NaBr|NaCA|NaCK|NaCj|NaDe|NaEE|NaEn|NaFE|NaFi|NaFw|NaGl|NaHW|NaHs|NaHu|NaIE|NaMo|NaNe|NaRe|NaSh|NaSu|NaWn|NaWr|OnAE|OnAl|OnAr|OnBe|OnBr|OnCA|OnCK|OnCj|OnDe|OnEE|OnEn|OnFE|OnFi|OnFw|OnGl|OnHW|OnHs|OnHu|OnIE|OnMo|OnNe|OnRe|OnSh|OnSu|OnWn|OnWr|OpAE|OpAl|OpAr|OpBe|OpBr|OpCA|OpCK|OpCj|OpDe|OpEE|OpEn|OpFE|OpFi|OpFw|OpGl|OpHW|OpHs|OpHu|OpIE|OpMo|OpNe|OpRe|OpSh|OpSu|OpWn|OpWr|PoAE|PoAl|PoAr|PoBe|PoBr|PoCA|PoCK|PoCj|PoDe|PoEE|PoEn|PoFE|PoFi|PoFw|PoGl|PoHW|PoHs|PoHu|PoIE|PoMo|PoNe|PoRe|PoSu|PoWn|PoWr|ReAE|ReAl|ReAr|ReBe|ReBr|ReCA|ReCK|ReCj|ReDe|ReEE|ReEn|ReFE|ReFi|ReFw|ReGl|ReHW|ReHs|ReHu|ReIE|ReMo|ReNe|ReRe|ReSu|ReWn|ReWr|SpAE|SpAl|SpAr|SpBe|SpBr|SpCA|SpCK|SpCj|SpDe|SpEE|SpEn|SpFE|SpFi|SpFw|SpGl|SpHW|SpHs|SpHu|SpIE|SpMo|SpNe|SpRe|SpSh|SpSu|SpWn|SpWr|TeAE|TeAl|TeAr|TeBe|TeBr|TeCA|TeCK|TeCj|TeDe|TeEE|TeEn|TeFE|TeFi|TeFw|TeGl|TeHW|TeHs|TeHu|TeIE|TeMo|TeNe|TeRe|TeSh|TeSu|TeWn|TeWr|TrAE|TrAl|TrAr|TrBe|TrBr|TrCA|TrCK|TrCj|TrDe|TrEE|TrEn|TrFE|TrFi|TrFw|TrGl|TrHW|TrHs|TrHu|TrIE|TrMo|TrNe|TrRe|TrSh|TrSu|TrWn|TrWr|VSAE|VSAl|VSAr|VSBe|VSBr|VSCA|VSCK|VSCj|VSDe|VSEE|VSEn|VSFE|VSFi|VSFw|VSGl|VSHW|VSHs|VSHu|VSIE|VSMo|VSNe|VSRe|VSSh|VSSu|VSWn|VSWr
playable:all char=AtAE|AtAl|AtAr|AtBe|AtBr|AtCA|AtCK|AtCj|AtDe|AtEE|AtEn|AtFE|AtFi|AtFw|AtGl|AtHW|AtHs|AtHu|AtIE|AtMo|AtNe|AtRe|AtSh|AtSu|AtTm|AtVM|AtWn|AtWr|BaAE|BaAK|BaAl|BaAr|BaBe|BaBr|BaCA|BaCK|BaCj|BaDe|BaEE|BaEn|BaFE|BaFi|BaFw|BaGl|BaHW|BaHs|BaHu|BaIE|BaMo|BaNe|BaRe|BaSh|BaSk|BaSu|BaTm|BaVM|BaWn|BaWr|CeAE|CeAK|CeAr|CeBe|CeBr|CeCK|CeCj|CeDK|CeEE|CeEn|CeFE|CeFi|CeGl|CeHW|CeHe|CeHs|CeHu|CeIE|CeMo|CeNe|CePr|CeSk|CeSt|CeSu|CeTm|CeVM|CeWn|CeWr|CoAE|CoAl|CoAr|CoBe|CoBr|CoCA|CoCK|CoCj|CoDe|CoEE|CoEn|CoFE|CoFi|CoFw|CoGl|CoHW|CoHs|CoHu|CoIE|CoMo|CoNe|CoRe|CoSh|CoSu|CoWn|CoWr|DDAE|DDAK|DDAr|DDBe|DDBr|DDCA|DDCK|DDCj|DDDK|DDDe|DDEE|DDEn|DDFE|DDFi|DDGl|DDHW|DDHe|DDHs|DDHu|DDIE|DDMo|DDNe|DDPr|DDSk|DDSt|DDSu|DDTm|DDVM|DDWn|DDWr|DEAE|DEAK|DEAl|DEAr|DEBe|DEBr|DECA|DECK|DECj|DEDK|DEDe|DEEE|DEEn|DEFE|DEFi|DEFw|DEGl|DEHW|DEHe|DEHs|DEHu|DEIE|DEMo|DENe|DEPr|DERe|DESh|DESk|DESt|DESu|DETm|DEVM|DEWn|DEWr|DgAE|DgAl|DgAr|DgBr|DgCj|DgDe|DgEE|DgEn|DgFE|DgFi|DgFw|DgGl|DgHW|DgHs|DgHu|DgIE|DgMo|DgNe|DgRe|DgSh|DgSk|DgSt|DgSu|DgTm|DgVM|DgWn|DgWr|DjAE|DjAK|DjAl|DjAr|DjBe|DjBr|DjCA|DjCK|DjCj|DjDe|DjEE|DjEn|DjFE|DjFi|DjFw|DjGl|DjHW|DjHs|DjHu|DjIE|DjMo|DjNe|DjRe|DjSh|DjSu|DjTm|DjVM|DjWn|DjWr|DrAE|DrAK|DrAl|DrAr|DrBe|DrBr|DrCA|DrCK|DrCj|DrDK|DrDe|DrEE|DrEn|DrFE|DrFi|DrFw|DrGl|DrHW|DrHe|DrHs|DrHu|DrIE|DrMo|DrNe|DrPr|DrRe|DrSh|DrSk|DrSt|DrSu|DrTm|DrVM|DrWn|DrWr|DsAE|DsAK|DsAl|DsAr|DsBe|DsBr|DsCA|DsCK|DsCj|DsDK|DsDe|DsEE|DsEn|DsFE|DsFi|DsFw|DsGl|DsHW|DsHs|DsHu|DsIE|DsMo|DsNe|DsRe|DsSh|DsSk|DsSt|DsSu|DsTm|DsVM|DsWn|DsWr|FeAE|FeAK|FeAl|FeAr|FeBe|FeCA|FeCK|FeCj|FeDK|FeDe|FeEE|FeEn|FeFE|FeFi|FeFw|FeHW|FeHe|FeIE|FeMo|FeNe|FePr|FeRe|FeSh|FeSk|FeSt|FeSu|FeTm|FeVM|FeWn|FeWr|FoAE|FoAK|FoAl|FoAr|FoBe|FoBr|FoCA|FoCK|FoCj|FoDK|FoDe|FoEE|FoEn|FoFE|FoFi|FoFw|FoGl|FoHW|FoHe|FoHs|FoHu|FoIE|FoMo|FoNe|FoRe|FoSh|FoSk|FoSu|FoTm|FoVM|FoWn|FoWr|GhAE|GhAK|GhAl|GhAr|GhBe|GhBr|GhCA|GhCK|GhCj|GhDK|GhDe|GhEE|GhEn|GhFE|GhFi|GhGl|GhHW|GhHs|GhHu|GhIE|GhMo|GhNe|GhRe|GhSk|GhSt|GhSu|GhVM|GhWn|GhWr|GnAE|GnAK|GnAl|GnAr|GnBe|GnBr|GnCA|GnCK|GnCj|GnDe|GnEE|GnEn|GnFE|GnFi|GnFw|GnGl|GnHW|GnHs|GnHu|GnIE|GnMo|GnNe|GnRe|GnSh|GnSk|GnSu|GnTm|GnVM|GnWn|GnWr|GrAE|GrAK|GrAl|GrAr|GrBe|GrBr|GrCA|GrCK|GrCj|GrDe|GrEE|GrEn|GrFE|GrFi|GrFw|GrGl|GrHW|GrHe|GrHs|GrHu|GrIE|GrMo|GrNe|GrRe|GrSh|GrSk|GrSu|GrTm|GrVM|GrWn|GrWr|HEAE|HEAK|HEAr|HEBe|HEBr|HECK|HECj|HEDK|HEEE|HEEn|HEFE|HEFi|HEGl|HEHW|HEHe|HEHs|HEHu|HEIE|HEMo|HENe|HEPr|HESk|HESt|HESu|HETm|HEVM|HEWn|HEWr|HOAE|HOAK|HOAl|HOAr|HOBe|HOBr|HOCA|HOCK|HOCj|HODK|HODe|HOEE|HOEn|HOFE|HOFi|HOGl|HOHW|HOHe|HOHs|HOHu|HOIE|HOMo|HONe|HOPr|HORe|HOSh|HOSk|HOSt|HOSu|HOTm|HOVM|HOWn|HOWr|HaAE|HaAK|HaAr|HaBe|HaBr|HaCK|HaCj|HaDK|HaDe|HaEE|HaEn|HaFE|HaFi|HaGl|HaHW|HaHe|HaHs|HaHu|HaIE|HaMo|HaNe|HaPr|HaSk|HaSt|HaSu|HaTm|HaVM|HaWn|HaWr|HuAE|HuAK|HuAl|HuAr|HuBe|HuBr|HuCA|HuCK|HuCj|HuDK|HuDe|HuEE|HuEn|HuFE|HuFi|HuFw|HuGl|HuHW|HuHe|HuHs|HuHu|HuIE|HuMo|HuNe|HuPr|HuRe|HuSh|HuSk|HuSt|HuSu|HuTm|HuVM|HuWn|HuWr|KoAE|KoAK|KoAl|KoAr|KoBe|KoBr|KoCA|KoCK|KoCj|KoDK|KoDe|KoEE|KoEn|KoFE|KoFi|KoFw|KoGl|KoHW|KoHe|KoHs|KoHu|KoIE|KoMo|KoNe|KoPr|KoRe|KoSh|KoSk|KoSt|KoSu|KoTm|KoVM|KoWn|KoWr|MDAE|MDAl|MDAr|MDBe|MDBr|MDCA|MDCK|MDCj|MDDe|MDEE|MDEn|MDFE|MDFi|MDFw|MDGl|MDHW|MDHs|MDHu|MDIE|MDMo|MDNe|MDRe|MDSh|MDSu|MDWn|MDWr|MeAE|MeAK|MeAr|MeBe|MeBr|MeCA|MeCK|MeCj|MeDe|MeEE|MeEn|MeFE|MeFi|MeGl|MeHW|MeHs|MeHu|MeIE|MeMo|MeNe|MeRe|MeSu|MeTm|MeVM|MeWn|MeWr|MfAE|MfAK|MfAl|MfAr|MfBe|MfBr|MfCA|MfCK|MfCj|MfDK|MfDe|MfEE|MfEn|MfFE|MfFi|MfFw|MfGl|MfHW|MfHe|MfHs|MfHu|MfIE|MfMo|MfNe|MfPr|MfRe|MfSh|MfSk|MfSt|MfSu|MfTm|MfVM|MfWn|MfWr|MiAE|MiAK|MiAl|MiAr|MiBe|MiBr|MiCA|MiCK|MiCj|MiDK|MiDe|MiEE|MiEn|MiFE|MiFi|MiFw|MiGl|MiHW|MiHe|MiHs|MiHu|MiIE|MiMo|MiNe|MiPr|MiRe|MiSh|MiSk|MiSt|MiSu|MiTm|MiVM|MiWn|MiWr|MuAE|MuAK|MuAl|MuAr|MuBe|MuBr|MuCA|MuCK|MuCj|MuDK|MuDe|MuEE|MuEn|MuFE|MuFi|MuFw|MuGl|MuHW|MuHs|MuHu|MuIE|MuMo|MuNe|MuRe|MuSk|MuSt|MuSu|MuVM|MuWn|MuWr|NaAE|NaAK|NaAl|NaAr|NaBe|NaBr|NaCA|NaCK|NaCj|NaDK|NaDe|NaEE|NaEn|NaFE|NaFi|NaFw|NaGl|NaHW|NaHe|NaHs|NaHu|NaIE|NaMo|NaNe|NaPr|NaRe|NaSh|NaSk|NaSt|NaSu|NaTm|NaVM|NaWn|NaWr|OgAE|OgAK|OgAr|OgBe|OgBr|OgCA|OgCK|OgCj|OgDK|OgDe|OgEE|OgEn|OgFE|OgFi|OgGl|OgHW|OgHe|OgHs|OgHu|OgIE|OgMo|OgNe|OgPr|OgRe|OgSk|OgSt|OgSu|OgTm|OgVM|OgWn|OgWr|OnAE|OnAl|OnAr|OnBe|OnBr|OnCA|OnCK|OnCj|OnDe|OnEE|OnEn|OnFE|OnFi|OnFw|OnGl|OnHW|OnHs|OnHu|OnIE|OnMo|OnNe|OnRe|OnSh|OnSu|OnWn|OnWr|OpAE|OpAK|OpAl|OpAr|OpBe|OpBr|OpCA|OpCK|OpCj|OpDK|OpDe|OpEE|OpEn|OpFE|OpFi|OpFw|OpGl|OpHW|OpHe|OpHs|OpHu|OpIE|OpMo|OpNe|OpPr|OpRe|OpSh|OpSk|OpSt|OpSu|OpTm|OpVM|OpWn|OpWr|PaAE|PaAK|PaAr|PaBe|PaBr|PaCA|PaCK|PaCj|PaDe|PaEE|PaEn|PaFE|PaFi|PaGl|PaHW|PaHs|PaHu|PaIE|PaMo|PaNe|PaSu|PaTm|PaVM|PaWn|PaWr|PoAE|PoAl|PoAr|PoBe|PoBr|PoCA|PoCK|PoCj|PoDe|PoEE|PoEn|PoFE|PoFi|PoFw|PoGl|PoHW|PoHs|PoHu|PoIE|PoMo|PoNe|PoRe|PoSu|PoWn|PoWr|ReAE|ReAl|ReAr|ReBe|ReBr|ReCA|ReCK|ReCj|ReDe|ReEE|ReEn|ReFE|ReFi|ReFw|ReGl|ReHW|ReHs|ReHu|ReIE|ReMo|ReNe|ReRe|ReSu|ReWn|ReWr|SEAE|SEAK|SEAr|SEBe|SEBr|SECK|SECj|SEDK|SEEE|SEEn|SEFE|SEFi|SEGl|SEHW|SEHe|SEHs|SEHu|SEIE|SEMo|SENe|SEPr|SESk|SESt|SESu|SETm|SEVM|SEWn|SEWr|SpAE|SpAK|SpAl|SpAr|SpBe|SpBr|SpCA|SpCK|SpCj|SpDK|SpDe|SpEE|SpEn|SpFE|SpFi|SpFw|SpGl|SpHW|SpHe|SpHs|SpHu|SpIE|SpMo|SpNe|SpPr|SpRe|SpSh|SpSk|SpSt|SpSu|SpTm|SpVM|SpWn|SpWr|TeAE|TeAK|TeAl|TeAr|TeBe|TeBr|TeCA|TeCK|TeCj|TeDK|TeDe|TeEE|TeEn|TeFE|TeFi|TeFw|TeGl|TeHW|TeHe|TeHs|TeHu|TeIE|TeMo|TeNe|TePr|TeRe|TeSh|TeSk|TeSt|TeSu|TeTm|TeVM|TeWn|TeWr|TrAE|TrAK|TrAl|TrAr|TrBe|TrBr|TrCA|TrCK|TrCj|TrDK|TrDe|TrEE|TrEn|TrFE|TrFi|TrFw|TrGl|TrHW|TrHe|TrHs|TrHu|TrIE|TrMo|TrNe|TrPr|TrRe|TrSh|TrSk|TrSt|TrSu|TrTm|TrVM|TrWn|TrWr|VSAE|VSAK|VSAl|VSAr|VSBe|VSBr|VSCA|VSCK|VSCj|VSDK|VSDe|VSEE|VSEn|VSFE|VSFi|VSFw|VSGl|VSHW|VSHe|VSHs|VSHu|VSIE|VSMo|VSNe|VSRe|VSSh|VSSk|VSSu|VSTm|VSVM|VSWn|VSWr|VpAE|VpAK|VpAl|VpAr|VpBe|VpBr|VpCA|VpCK|VpCj|VpDK|VpDe|VpEE|VpEn|VpFE|VpFi|VpGl|VpHW|VpHs|VpHu|VpIE|VpMo|VpNe|VpRe|VpSh|VpSk|VpSt|VpSu|VpTm|VpVM|VpWn|VpWr
playable:god (( god=Ashenzari|Beogh|Cheibriados|Dithmenos|Elyvilon|Fedhas|Gozag|Hepliaklqana|Ignis|Jiyva|Kikubaaqudgha|Lugonu|Makhleb|Nemelex_Xobeh|Okawaru|Qazlal|Ru|Sif_Muna|The_Shining_One|Trog|Uskayaw|Vehumet|Wu_Jian|Xom|Yredelemnul|Zin || god= ))
portal place=icecv|volcano|lab|bailey|sewer|bazaar|ossuary|wizlab|trove|desolation|gauntlet|necropolis
qwtrials !boring start>=2022-06-10
r15 urune=15
realbranch !arena !crucible !portal !temple !zig
realscore sc<1000000000
recent cv>=0.33
recentish cv>=0.32
recentishish cv>=0.31
recommended recommended-0.35
recommended-0.35 char=BaBe|BaFi|BaFw|BaHs|BaHu|BaIE|BaRe|BaSu|BaWn|BaWr|CoAl|CoAr|CoBe|CoFw|CoGl|CoHu|CoWr|DEAE|DEAl|DECj|DEEE|DEEn|DEFE|DEFw|DEHW|DEHs|DEIE|DENe|DESu|DgAE|DgCj|DgEE|DgFE|DgIE|DgSh|DjAE|DjAl|DjCA|DjCj|DjFE|DjHW|DjIE|DjNe|DjWr|DrAE|DrAl|DrAr|DrBe|DrCA|DrCK|DrCj|DrEE|DrFE|DrHW|DrIE|DrRe|DrSh|DrWn|DrWr|DsAl|DsAr|DsBe|DsBr|DsCK|DsFE|DsGl|DsHW|DsIE|DsMo|DsNe|DsRe|DsSh|DsWn|FeAE|FeBe|FeCj|FeDe|FeEn|FeIE|FeSh|FeSu|FeWr|FoAl|FoEE|FoFi|FoFw|FoHs|FoHu|GCAE|GCBr|GCCj|GCFE|GCGl|GCHs|GCHu|GCMo|GCWr|GnBr|GnCA|GnCK|GnDe|GnFw|GnHs|GnHu|GnRe|GnSh|GnWn|GnWr|GrBe|GrEE|GrFE|GrFi|GrGl|GrIE|GrMo|GrRe|HuBe|HuCA|HuCj|HuFw|HuHW|HuIE|HuNe|HuWn|KoAr|KoBe|KoBr|KoCj|KoDe|KoEE|KoEn|KoHs|KoHu|MDBe|MDCA|MDFE|MDFi|MDFw|MDGl|MDMo|MDNe|MDRe|MDWn|MfAl|MfBe|MfCK|MfFw|MfGl|MfIE|MfM|MfWn|MiBe|MiCK|MiFi|MiGl|MiHu|MiMo|MuCA|MuCj|MuHW|MuIE|MuNe|MuSu|NaAE|NaAl|NaBe|NaCj|NaEn|NaFE|NaHW|NaIE|NaSh|NaWr|OnAE|OnBe|OnCA|OnFE|OnGl|OnHW|OnSu|OpAl|OpBr|OpCj|OpEE|OpFE|OpHW|OpSh|PoAl|PoCK|PoEE|PoEn|PoHs|PoIE|PoNe|ReEE|ReFi|ReGl|ReIE|ReMo|ReNe|SpAl|SpAr|SpBr|SpCK|SpCj|SpDe|SpEE|SpEn|SpHs|SpHu|SpWr|TeAE|TeBe|TeCj|TeFE|TeHW|TeRe|TeSu|TrBe|TrBr|TrCK|TrEE|TrFi|TrG|TrSh|TrWr|VSAE|VSBe|VSBr|VSCj|VSEn|VSFi|VSFw|VSGl|VSIE|VSNe|VSSu
rtest char=orange
rypotemp title=Fallen_Ant|Placeless_Vampire|Placeless_Orc|Palentonga_Disaster|Orcish_Mishap|Oni_Disaster|Demolition_Vine|Ogreish_Disaster|Ogre-At-Arms|Octopoid_Child|Mummy_Disaster|Mummy_Cataclysm|Miser|Meteoric_Disaster|Meteoric_Blade|Meteoric_Aeon|Distorting_Djinni|Merry_Halfling|Merfolkian_Catastrophe|Distorting_Gnoll|Markspalentonga|Kobold_Barricade|Human_Mishap|Hill_Orc_of_Prey|Hill_Orc_of_Death|Hill_Orc_Child|Halfling_Catastrophe|Green_Tengu|Green_Orc|Draconian_Mishap|Green_Kobold|Green_Hill_Orc|Green_Draconian|Green_Cat|Goblin-At-Arms|Gnoll-At-Arms|Ghoulish_Mishap|Ghoulish_Child|Ghoulish_Arbalest|Elven_Disaster|Gargoyle_of_Death|Formicid_Mishap|Formicid_Larva|Fey_Oni|Feline_Aeon|Fallen_Mummy|Fallen_Ghoul|Wild_Hill_Orc|Ant_of_Death|Vine_Stalker-At-Arms|Armataur_Catastrophe|Armataur_Disaster|Vine_Disaster|強打する者|Black_Hole|Unlucky_Demonspawn|Cat_of_Prey|Tengu_Disaster|Young_Dragon|Spriggan_Disaster|Spriggan_Catastrophe|Sluggish_Troll|Sluggish_Octopus|Sluggish_Naga|Coglin_Aeon|Sluggish_Mummy|Coglin_Catastrophe|Sluggish_Demonspawn|Sluggish_Ant|Conspicuous|Consuming_Cat|Shapeless_Gnoll|Damnatio_Memoriae|Wild_Vine_Stalker|Revenant_of_Death|Revenant_Aeon|Purifying_Frog|Demolition_Frog|Halfling_Aeon|Fallen_Elf|Orderly|Fallen_Gargoyle|Green_Naga|Vine_Stalker_of_Prey|Octopus-At-Arms|Octopoid_Disaster|Vampiric_Cataclysm|Convert|Fey_Palentonga|Human-At-Arms|Human_Catastrophe|Fallen_Troll|Seeker_of_Truth|Meteoric_Catastrophe|Young_Tiger|Fey_Gargoyle|Dissolving_Dwarf|Hill_Orc_Mishap|Djinni_Catastrophe|Djinni_Disaster|Gnoll_Disaster|Tengu_Catastrophe|Fallen_Octopus|Young_Crane|Squelcher|Glowing_Coal|Demolition_Goblin|Gloomy|Sluggish_Vine_Stalker|Sluggish_Vine|Centaur_Disaster|Demolition_Ogre|Djinni_Aeon|Fey_Ant|Fungal|Green_Human|Initiate|Kobold_Aeon|Octopoid_Catastrophe|Oni_Aeon|Oni_Catastrophe|Ooze|Pauper|Placeless_Tengu|Sprinting_Midnight|Unspoiled|Marksorc|Vine_Catastrophe|Human_Disaster|Mummy_Aeon|Ogreish_Catastrophe|Purifying_Cat|Demolition_Gnoll|Fey_Gnoll|Distorting_Naga|Demolition_Halfling|Demolition_Kobold|Palentonga_Aeon|Distorting_Vine|Markstroll|Fey_Vine_Stalker|Placeless_Geist|Initiated|Armataur_Aeon|Demolition_Revenant|Marksoni|Placeless_Dwarf|Demolition_Naga|Ghoulish_Disaster|Dwarf-At-Arms|Placeless_Ogre|Fey_Hill_Orc|Demolition_Meteoran|Battlemage|Demolition_Vine_Stalker|Darkened|Hill_Orc_Blade|Distorting_Cat|Distorting_Spriggan|Centaur_Catastrophe|Placeless_Goblin|Placeless_Ghoul|Ghoulish_Catastrophe|Placeless_Vine|Jelly|Marksdwarf|Placeless_Oni|Thespian|Demolition_Vampire|Dwarven_Mishap|Cursed|Placeless_Djinni|Placeless_Gargoyle|Placeless_Meteoran|Sorcerer's_Apprentice|Marksvampire|Trollish_Disaster|Demolition_Oni|Distorting_Halfling|Distorting_Troll|Fey_Spriggan|Demonic_Child|Despoiler|Demolition_Human|Draconian_Disaster|Disciple|Demolition_Orc|Demolition_Ghoul|Demolition_Ant|Fey_Halfling|Extinguished|Placeless_Ant|Demonspawn-At-Arms|Marksmeteoran|Distorting_Human|Deliberate|Placeless_Frog|Formicid_Disaster|Distorting_Gargoyle|Demolition_Troll|Distorting_Formicid|Fallen_Demonspawn|Placeless_Naga|Fey_Formicid|Placeless_Human|Student|Placeless_Octopus|Distorting_Draconian|Fey_Vampire|Fey_Ghoul|Placeless_Demonspawn|Unhurried|Fey_Mummy|Torchbearer|Placeless_Elf|Placeless_Armataur|Placeless_Gnoll|Distorting_Orc|Scout|Demonic_Disaster|Wallflower|Placeless_Cat|Marksant|Unbeliever|Party-goer|Marksgoblin|Gouger|Fabricator|Miscreant|Vandal|Tinkerer|Apothecary|Twirler|Chucker|Bolt_Thrower|Changer|Changeling|Charlatan|Grasshopper|Cutter|Cudgeller|Stinger|Gusty|Cudgeler|Poker|Vexing|Caller|Chiller|Shooter|Covered|Slasher|Grave_Robber|Digger|Ducker|Insei|Shield-Bearer|Trooper|Conjurer|Ruffian|Magician|Chopper
sa-- crace=salamander
salt desolation
sbranch br=shoals|swamp|snake|spider
selfown ((cikiller=you|the_player_character || ktype=self_aimed|targeting || ckaux=ignited_by_their_inner_flame ))
sergeystreak end>=2024-12-10_14:57:29
sifspellcasting vlong>=0.35-a0-404-g50cffbf2e5
simple Gn|Mi|Mf|Gr|MD|Dr|Tr|DE--|At
sixhours end>${now()-interval('6h')}
sixmonths end>${now()-interval('6 months')}
speedzotsanity ${urune=lg:urune} lg:zigdeepest=0
spiderendkmap spider kmap~~spider_rune
splat xl>=17 !won
sprint1 sprint mapdesc=Sprint_I:_"Red_Sonja"
sprint2 sprint mapdesc=Sprint_II:_"The_Violet_Keep_of_Menkaure"
sprint3 sprint mapdesc=Sprint_III:_"The_Ten_Rune_Challenge"
sprint4 sprint mapdesc=Sprint_IV:_"Fedhas'_Mad_Dash"
sprint5 sprint mapdesc=Sprint_V:_"Ziggurat_Sprint"
sprint6 sprint mapdesc=Sprint_VI:_"Thunderdome"
sprint7 sprint mapdesc=Sprint_VII:_"The_Pits"
sprint8 sprint mapdesc=Sprint_VIII:_"Arena_of_Blood"
sprint9 sprint mapdesc~~^Sprint_IX:
stable !alpha
starve ktyp=starvation
starved ktyp=starvation
starving ktyp=starvation
stats x=mhp,ac,ev,sh,str,int,dex
statue status=statue-form
t-all tall
t-milestones t0.33-milestones
t0.15b t0.15 start>='2014-09-06 20:00:00'
t0.16a t0.16 meleebug
t0.16b t0.16 !meleebug
t0.21fixed start>='2018-01-05 20:00:00' end<'2018-01-21 20:00:00' ((cv=0.21|0.21-a))
t0.22-fast start>='2018-08-10 20:00:00' time<'2018-08-26 20:00:00' ((cv=0.22|0.22-a))
t0.23-fast start>='2019-02-08 20:00:00' end<'2019-02-24 20:00:00' ((cv=0.23|0.23-a))
t0.24-fast start>='2019-10-25 20:00:00' end<'2019-11-10 20:00:00' ((cv=0.24|0.24-a))
t0.25-fast start>='2020-06-12 20:00:00' end<'2020-06-28 20:00:00' ((cv=0.25|0.25-a)) file!='cwz/soup/trunk/milestones' file!='cwz/soup/trunk/logfile'
t0.25fixed t0.25 file!="cwz/soup/trunk/milestones"
t0.26-fast start>='2021-01-08 20:00:00' end<'2021-01-24 20:00:00' vlong~~0.26-b|0.26\.
t0.26-games start>='2021-01-08 20:00:00' end<'2021-01-24 20:00:00' cv=0.26|0.26-a
t0.27-fast start>='2021-07-30 20:00:00' end<'2021-08-15 20:00:00' vlong~~0.27-b|0.27\.
t0.28-fast start>='2022-02-04 20:00:00' time<'2022-02-20 20:00:00' vlong~~0.28-b|0.28
t0.28-games start>='2022-02-04 20:00:00' end<'2022-02-20 20:00:00' cv=0.28|0.28-a
t0.28-milestones start>='2022-02-04 20:00:00' time<'2022-02-20 20:00:00' cv=0.28|0.28-a
t0.28-tstats start>='2022-02-04 20:00:00' end<'2022-02-20 20:00:00' cv=0.28|0.28-a
t0.29-games start>='2022-08-26 20:00:00' end<'2022-09-11 20:00:00' cv=0.29
t0.29-milestones start>='2022-08-26 20:00:00' time<'2022-09-11 20:00:00' cv=0.29
t0.29-tstats start>='2022-08-26 20:00:00' end<'2022-09-11 20:00:00' cv=0.29
t0.30-games start>='2023-05-05 20:00:00' end<'2023-05-21 20:00:00' cv=0.30|0.30-a
t0.30-milestones start>='2023-05-05 20:00:00' time<'2023-05-21 20:00:00' cv=0.30|0.30-a
t0.31-games start>='2024-01-19 20:00:00' end<'2024-02-04 20:00:00' cv=0.31|0.31-a
t0.31-milestones start>='2024-01-19 20:00:00' time<'2024-02-04 20:00:00' cv=0.31|0.31-a
t0.32-games start>='2024-08-30 20:00:00' end<'2024-09-15 20:00:00' ((cv=0.32|0.32-a))
t0.32-milestones start>='2024-08-30 20:00:00' time<'2024-09-15 20:00:00' ((cv=0.32|0.32-a))
t0.33-games start>='2025-05-02 20:00:00' end<'2025-05-18 20:00:00' ((cv=0.33|0.33-a))
t0.33-milestones start>='2025-05-02 20:00:00' time<'2025-05-18 20:00:00' ((cv=0.33|0.33-a))
tall t*
tenminutes time>${now()-interval('10minute')}
tesseract vlong>=0.34-a0-250-g9c06f76501
test2 char=xxxx
thebees cikiller|ckiller~~killer_bee|meliai|queen_bee|hornet|spark_wasp|Sprozz|clockwork_bee
thisfortnight fortnight
thishour hour
thisminute minute
thismonth end>${month(now())}
thisweek week
thisyear end>${year(now())}
threedays end>${now()-interval('3d')}
threemonths end>${now()-interval('3 months')}
threeyears end>${now()-interval('1095d')}
thrown ktype=being_thrown
thunderdome sprint6
tier1 killer=ice_fiend|brimstone_fiend|hell_sentinel|shadow_fiend|tzitzimitl|executioner
tier2 killer=balrug|blizzard_demon|shadow_deamon|cacodemon|green_death|hell_beast|hellion|lorocyproca|reaper|tormentor
tier3 killer=sun_demon|smoke_demon|soul_eater|neqoxec|ynoxinul|sixfirhy
tier4 killer=red_devil|rust_devil|ice_devil|hellwing|orange_demon|chaos_spawn
tier5 killer=crimson_imp|white_imp|shadow_imp|iron_imp|quasit|ufetubus
today day
trunk alpha !experimental
trunkonly Be--|Fr--|Im--|La--|LO--|My--|Pl--|Sa--|--Jr|BaWz|CeDe|DjDK|DjHe|DjSk|GhFw|GrDK|MeSh|OgAl|OgSh|PaRe|PaSk|VpFw
twelvehours end>${now()-interval('12h')}
twodays end>${now()-interval('2d')}
twohours end>${now()-interval('2h')}
twomonths end>${now()-interval('2 months')}
twoweeks fortnight
twoyears end>${now()-interval('730d')}
undemigod dg god!=
uniques uniques1|uniques2|uniques3|uniques4
uniques1 cikiller=agnes|aizul|amaemon|antaeus|arachne|asmodeus|asterion|azrael|bai_suzhen|blork|boris|cerebov|chuck|cigotuvi's_monster|cloud_mage|crazy_yiuf|dispater|dissolution|donald|dowan|duvessa|edmund|the_enchantress|ereshkigal|erica|erolcha|eustachio|fannar|frances|frederick|gastronok|geryon|gloorx_vloq|grinder|grum|grunn
uniques2 cikiller=harold|head_instructor|hellbinder|ignacio|ijyb|ilsuiw|jeremiah|jessica|jorgrun|jory|joseph|josephina|josephine|khufu|kirke|the_lernaean_hydra|lodul|lom_lobon|louise|mara|maggie|margery|maud|maurice|menkaure|mennas|mlioglotl|mnoleg|murray
uniques3 cikiller=natasha|nellie|nergalle|nessos|nikola|norris|pargi|parghit|pikel|polyphemus|prince_ribbit|psyche|purgy|robin|roxanne|rupert|saint_roka|the_serpent_of_hell|sigmund|snorg|sojobo|sonja|terence|tiamat
uniques4 cikiller=urug|vashnia|vv|wiglaf|xak'krixis|xtahua|zenata
unwatched ${lg:ntv}=0 ntv=0
unwords word !playable
vest place=hell
vestibule place=hell
warrior Fi|Gl|Mo|--Hu|Br|Th
warriormage Wr|Hs|En|--Re
week end>${now()-interval('7d')}
weekmilestone time>${now()-interval('7d')}
windtaur char~~^(An|GC)
wjc god=wu_jian
won15 won urune=15
won3 won urune=3
word words1|words2|words3
words word
words1 char=BaAl|BaAs|BaBe|BaCK|BaDe|BaHu|BaNe|BaRe|BaSh|BaSk|BaSt|BaTh|BaWn|BaWr|BeAK|BeAM|BeAl|BeAr|BeCK|BeDe|BeEn|BeNe|BeRe|BeSt|BeTh|CeAs|CeCA|CeDe|CeRe|ChAM|ChAl|ChAr|ChAs|CoAl|CoCA|CoCK|CoDe|CoNe|CoRe|CoSh|CoSt|CoTh|DEAl|DEAr|DEBe|DECK|DEEn|DEFi|DEMo|DENe|DERe|DESk|DrAM|DrEE|FeAl|FeAr|FeCK|FeEn|FeHs|FeRe|FeSt|FoAM|FoAl|FoEn|FoNe|FoRe|FrAE|FrAs|FrEE|GEAl|GEAr|GECK|GENe|GERe|GESt|GhEE|GnAr|GrAM|GrEE
words2 char=GrEn|HEAl|HEAr|HECK|HEHs|HERe|HESt|HETh|HEWn|HOAr|HOAs|HOCK|HOHs|HOMo|HONe|HORe|HOSt|HaAr|HaCK|HaDe|HaEn|HaHs|HaRe|HaSh|HaSk|HaSt|HaTh|HuCK|HuHu|HuSh|HuSk|ImAM|KeAs|KeCK|KeEn|KeSh|KeSt|KoAs|KoRe|LOAM|LOBe|LOCA|LOCK|LODe|LONe|LORe|LOSh|LOSt|LOTh|LOWn|LaCK|LaDe|LaHs|LaNe|LaRe|LaSh|LaSt|LaTh|LaWn|MeAl|MeCK|MeMo|MeNe|MeRe|MeSh|MeTh|MiCA|MiEn|MiNe|MiRe|MiSt|MuCK|MuRe|MuSh|MuSk|MuSt|MyAl|MyTh|NaAM
words3 char=NaBe|NaNe|NaPa|NaRe|OMAs|OMEn|OgAM|OgEE|OgRe|OnIE|OnSt|OpAl|OpAs|OpEn|PaAl|PaCA|PaCK|PaHs|PaNe|PaPa|PaRe|PaSh|PaSt|PaTh|PaWn|PlIE|PoAs|PoCK|PoHs|PoMo|PoNe|PoRe|PoSh|PoSt|PoWn|ReAK|ReAM|ReAl|ReAr|ReCK|ReDe|ReEn|ReFi|ReHs|ReSh|ReSt|SEAM|SEAl|SEAr|SEAs|SEEn|SENe|SERe|SESh|SEWn|SaBe|SaCK|SaDe|SaFE|SaNe|SaSh|SaWn|SpAE|SpAM|SpAr|SpAs|SpIE|TeAK|TeAM|TeAl|TeAr|TeAs|TeEn|TeNe|TePa|TeSt|TeTh|TrAM|TrEE|TrIE
year end>${now()-interval('365d')}
yesterday end>${now()-interval('2d')} end<${now()-interval('1d')}
zealot Be|CA|CK
zotorb verb=zotorb

Functions

Function Definition
abs (x) (if (< $x 0) (- 0 $x) $x)
add_days (t n) $(inversestamptime (+ (stamptime $t) $n))
adjust_raw_yyyymmdd (t) $(let (m (int (sub 5 6 $t))) $(if (< $m 9) (concat (sub 0 5 $t) (+ $m 1) (sub 6 $t)) (concat (sub 0 4 $t) '10' (sub 6 $t))))
apthash (a) (apply hash (flatten (map (fn (x) (split ':' $x)) (split ', ' (re-replace '^[^:]+: ' '' (re-replace '( |^)[^ :]+: N/A(,|$)' '$1' (re-replace '[!*](,|$)' '$1' (!apt $a))))))))
argst (a) (if $a " ($(if (> (length (str $a)) 23) (concat (sub 0 20 (str $a)) ...) $a))" '')
ask_response () (randnth (list Yes Certainly "Obviously, yeah" "I'd stake my life on it" Probably "Seems likely" "A lot of people seem to think so" "It's a good bet" "Probably not" "Seems unlikely" "Chances aren't great" "I wouldn't take that bet" No "Certainly not" Nah Impossible "I don't know" "No one knows" "The answer eludes me" "You're asking the wrong question"))
atom? (x) $(/= (typeof $x) (typeof (cons)))
attack-strength-punctuation (damage) (if (< $damage 7) "." (if (< $damage 18) "!" (if (< $damage 36) "!!" (join "" (map (fn (x) "!") (range 1 (+ 3 (log2 (/ $damage 36)))))))))
beertype () (randnth (list lager ale bitter stout "India pale ale" "cask ale" "imperial stout" pilsner Schwarzbier "root beer" "ginger beer"))
beervessel () (randnth (list pint stein mug pitcher bottle can))
bigger (a b) (max $a $b)
branchletterhash () $(hash D D Temple T Orc O Elf E Dwarf K Lair L Swamp S Shoals A Snake P Spider N Slime M Vaults V Blade B Crypt C Tomb W Hell H Dis I Geh G Coc X Tar Y Zot Z Forest F Abyss J Pan R Zig Q Lab 0 Bazaar 1 Trove 2 Sewer 3 Ossuary 4 Bailey 5 IceCv 6 Volcano 7 WizLab 8 Depths U Arena " Necropolis %)
canonicalise (type val) $(!lg * $type=$val x=$type fmt:"$x[0]" stub:"XX")
capitalise (s) $(concat $(upper $(sub 0 1 $s)) $(sub 1 $s))
cat (x y) $x$y
cheerscontainer () (randnth (list glass pint flagon stein "shot glass" cask "boot full" "briefcase full"))
cheersdrink () (randnth (list whiskey beer mead lager vodka cider tequila gin bourbon scotch rum brandy cognac vermouth saké sangria goldschläger absinthe "cabernet sauvignon" moonshine "Romulan ale"))
coffee () (randnth (list "black coffee" cappuccino "Irish coffee" "café au lait" "soy latte" "caffè macchiato" "latte macchiato" "caffè breve" "café mocha"))
combinehashcounts (a b) (apply hash (flatten (concat (map (fn (k) (list $k (+ (elt $k $a) (if (elt $k $b) (elt $k $b) 0)))) (hash-keys $a)) (map (fn (k) (if (elt $k $a) (list) (list $k (+ (if (elt $k $a) (elt $k $a) 0) (elt $k $b))))) (hash-keys $b)))))
combo_to_class (combo) $(sub 2 4 $combo)
combo_to_race (combo) $(sub 0 2 $combo)
comboregex (sp_or_bg) (lower (if (= 2 (length $sp_or_bg)) "($sp_or_bg..)|(..$sp_or_bg)" (re-replace '[^\w]' '.' $sp_or_bg)))
contains (x xs) (/= -1 (indexof $x $xs))
convolve (a b) $(let* (la (length $a) lb (length $b) lc (- (+ $la $lb) 1)) (map (fn (n) (apply ${+} (map (fn (x) (if (and (< $x $lb) (>= $x (max 0 (- $n $la)))) (* (nth (+ $x (- $la $n)) $a) (nth $x $b)) 0)) (range 0 (- $n 1))))) (range 1 $lc)))
cookie_type () (replace _ " " (re-replace _$ " cookie" (randnth (list chocolate_chip_ gingersnap oatmeal_raisin_ peanut_butter_ biscotti macaroon macaron gingerbread_ macadamia_nut_ fortune_ browser_))))
dayssince (t) $(int (- (time) $t))
deltaseconds (start end) (* 86400 (- (ptime $end "%Y-%m-%d %H:%M:%S") (ptime $start "%Y-%m-%d %H:%M:%S")))
deltatime (start end) (fduration (* 86400 (- (ptime $end "%Y-%m-%d %H:%M:%S") (ptime $start "%Y-%m-%d %H:%M:%S"))))
drop (n ls) (sub $n $ls)
dropright (n ls) (take (- $n) $ls)
durbyver (player args) (apply hash (split " " (!lg $player byversion o=-. x=sum(dur) fmt:'${.} $x[0]' stub:"" join:" " $args)))
durbyyear (player args) (apply hash (split " " (!lg $player byyear o=-. x=sum(dur) fmt:'${.} $x[0]' stub:"" join:" " $args)))
emoji-char (char) "$(lookup (take 2 $char) (emojispecieshash))$(lookup (drop 2 $char) (emojibackgroundhash))"
emojibackgroundhash () (hash Fi 🛡️ Gl 🥅 Mo 🙏 Hu 🏹 Br 🎯 Be 😡 CK 🎲 CA 🕯️ Wr 🪢 Hs 🌀 En 😴 Re 🩸 HW 🧙 Cj 🔮 Su 🐀 Ne ☠️ Fw 🔧 FE 🔥 IE 🧊 EE 🪨 AE 🌩️ Al ⚗️ Ar 🪄 Wn 🌐 De 🕳️ Sh 🦔)
emojispecieshash () (hash At 🎳 Ba 🐸 Co ⚙️ DE 🧝 Dg 📈 Ds 😈 Dj 🧞 Dr 🐲 Fe 🐈‍⬛ Fo 🐜 GC 🐴 Gr 🗿 Gn 🐶 Hu 🧑‍🦲 Ko 🥷 MD ⚒️ Mf 🧜 Mi 🐮 Mu ⚰️ Na 🐍 Op 🐙 On 🍺 Po 👻 Re 💀 Sp 🏃 Te 🐦 Tr 🧌 VS 🌱)
entry (x n) (ldbent-text (ldb $x $n))
entrylength (entry) (ldb-size $entry)
escape_quotes (x) $(replace '"' '\"' $x)
evalf (x) $(=eval $(escape_quotes $x))
exact-entry (term n) $(lookupelse (- $n 1) (ldb-defs $term) "")
expand_nick (nicklist) (join | (map (fn (nick) (nick-aliases $nick)) (split | $nicklist)))
fifskhash (players args) (let* (results (!lg $players $args s=gid x=min(fifsk) fmt:'${x[0]}' join:',' title:'$n' stub:'0:') total (re-replace "(\d+):.*" '$1' $results) skills (split , (re-replace "\d+: ?" "" $results))) (list (int $total) (apply hash (flatten (filter (fn (kv) (/= "" $kv[0])) (map (fn (kv) (list $kv[0] (length $kv[1]))) (groupby id $skills)))))))
findmonster (name) (re-replace "^an? " (first (split ", " (!lg * recent stub:"" s=cikiller cikiller~~"$(re-replace "(.)" '$1\s?' $name)" fmt:'${.}'))))
first (list) (elt 0 $list)
flipchar (c) $(lookup $c (flipcharhash))
flipcharhash () (apply hash (split '' "!¡',&⅋().˙1Ɩ2ᄅ33?4ㄣ5ϛ697ㄥ96<>?¿A∀BqCƆDpEƎFℲGפJſL˥MWPԀRɹT┴U∩VΛWMY⅄[]_‾`,aa?bqcɔdpee?fɟgƃhɥiᴉjɾkʞmɯnupdqbrɹtʇunvʌww?yʎ{}╯╭︵︶"))
fmt_mostly_int (x) (replace ".00" "" (sprintf "%.2f" $x))
fmtn (n) (if (= (typeof $n) String) "$n" (if (= $n (int $n)) (int $n) (sprintf "%.2f" $n)))
foldl (f z xs) (let (ac $z) (map (fn (x) (set! ac (call $f $ac $x)) $ac) $xs) $ac)
foldr (f z xs) (let (ac $z) (map (fn (x) (set! ac (call $f $x $ac)) $ac) (reverse $xs)) $ac)
format_autocompress (data formats) (let* (format (car $formats) output (call $format $data)) (if (>= (length $output) (if (= $channel msg) 3000 400)) (if (> (length $formats) 1) (format_autocompress $data (cdr $formats)) $output) $output))
freqhash (list) (foldr (fn (key hash) (hash-put $key (if (elt $key $hash) (+ 1 (elt $key $hash)) 1) $hash)) (hash) $list)
fullclass (n) (replace "Unperson " (!wtf xx${n}))
fullrace (n) (replace "Unemployed " (!wtf ${n}xx))
gamepath_format_compressed1 (path) (join ', ' (map (fn (stone) (sprintf '%s:%s' $stone[0] $stone[2])) $path))
gamepath_format_compressed2 (path) (join ', ' (map (fn (stone) (sprintf '%s:%s' $stone[0] (=branchletter $stone[2]))) $path))
gamepath_format_compressed3 (path) (join ', ' (map (fn (stone) (sprintf '%s:%s' $stone[0] (sub 0 4 (=branchletter $stone[2])))) $path))
gamepath_format_compressed4 (path) (join ', ' (map (fn (stone) (sprintf '%s:%s' (short_num $stone[0]) (sub 0 4 (=branchletter $stone[2])))) $path))
gamepath_format_normal (path) (join ', ' (map (fn (stone) (sprintf 'T%s: %s' $stone[0] $stone[2])) $path))
gamepath_query (args) (sort (fn (a b) $(<=> (int (car $a)) (int (car $b)))) (map (fn (stone) (cdr (split ':' $stone))) (split '/' (!gamepath.query $args))))
gamessincethingwon (player args thing xthing playablelist) (let* (wins (split ", " (!lg $player won x=+min(rend),$xthing fmt:'$x[1]' s=gid notitle $args)) things (setintersection $playablelist $wins)) "Wins since $thing won for $(name_fixup $player)$(argst $args): $(join ", " (sortby (fn (tN) (* -1 (int (elt 1 (split ": " $tN))))) (map (fn (t) "$t: $(indexof $t $wins)") $things)))")
gamesuntilwonhelper (player args games) (let (name "$(name_fixup ${1:-.})$(argst $args)") (if (= "N/A" $games) "No wins for $name" "Games until won for $name: $(join (map (fn (kv) "$(elt 0 $kv) $(elt 1 $kv)") (sortby (fn (kv) (- 0 (int (elt 1 $kv)))) (filter (fn (kv) (> (int (elt 1 $kv)) 0)) (apply hash (split , $games))))))"))
gamesuntilwonhelper-nchoice (args games) (let (args (argst $args)) (if (= "N/A" $games) "No nchoice wins$args" "Games until won$args: $(join (map (fn (kv) "$(elt 0 $kv) $(elt 1 $kv)") (sortby (fn (kv) (- 0 (int (elt 1 $kv)))) (filter (fn (kv) (> (int (elt 1 $kv)) 0)) (apply hash (split , $games))))))"))
gen_nem_eligible_class (n) $(flatten (map (fn (combos) (sub 0 $n (split ' ' $combos))) (split " | " (!lg * s=cls,char won playable fmt:'${.}' pfmt:'${child} |' o=-N join:' '))))
gen_nem_eligible_race (n) $(flatten (map (fn (combos) (sub 0 $n (split ' ' $combos))) (split " | " (!lg * s=crace,char won playable fmt:'${.}' pfmt:'${child} |' o=-N join:' '))))
getldbsid (race) $(nth 0 (split | (re-replace "(?i).*$race" "" (re-replace ".*?]: " "" (ldb sid)))))
god_abbrev (x) $(if (= $x "The Shining One") '1' $(sub 0 1 $x))
godletter (god) (if (= $god "The Shining One") 1 (if (= $god "") - (sub 0 1 $god)))
godshortnamehash () $(hash "Okawaru" "Oka" "Lugonu" "Lucy" "Vehumet" "Veh" "Sif Muna" "Sif" "Makhleb" "Makh" "Yredelemnul" "Yred" "The Shining One" "TSO" "Nemelex Xobeh" "Nem" "Kikubaaqudgha" "Kiku" "Ashenzari" "Ash" "Elyvilon" "Ely" "Cheibriados" "Chei" "Dithmenos" "Dith" "Qazlal" "Qaz" "Pakellas" "Pak" "Hepliaklqana" "Hep" "Uskayaw" "Uska" "Wu Jian" "Wu")
greatcharrandom (name args sps bgs stub) (!lg * recent playable $args $(join | (map (fn (s) ${s}--) $sps)) $(join | (map (fn (b) --$b) $bgs)) -random fmt:$(concat "'" "Random combo with unwon$args species and/or background for $name: " '$(!wtf $char)' "'") stub:"$stub" $*)
greathelper (a b c d e) $(!lg * $e s=$a o=-$a / won @$b format:"${.}" title:"Unwon $c for $name" stub:"$name is a ${d}!" ?:N=0)
greathelper2 (a b c d e f) $(!lg * $e $f s=$a o=-$a / won @$b format:"${.}" title:"Unwon $c for $name$(if $f " ("$f")")" stub:"$name$(if $f " ("$f")") is a ${d}!" ?:N=0)
greatvalid (nick) $(let* (wonchar (split ", " (!lg $nick won s=char stub:'')) wonsp (hashlist (map (fn (char) (sub 0 2 $char)) $wonchar)) wonbg (hashlist (map (fn (char) (sub 2 $char)) $wonchar))) (filter (fn (char) (not (and (elt (sub 0 2 $char) $wonsp) (elt (sub 2 $char) $wonbg)))) (playablels)))
greatvaliddoubles (nick) $(let* (wonchar (split ", " (!lg $nick won s=char stub:'')) wonsp (hashlist (map (fn (char) (take 2 $char)) $wonchar)) wonbg (hashlist (map (fn (char) (drop 2 $char)) $wonchar))) (concat (filter (fn (char) (not (elt (take 2 $char) $wonsp))) (playablels)) (filter (fn (char) (not (elt (drop 2 $char) $wonbg))) (playablels))))
groupby (func ls) (foldr (fn (next accum) (let (hkey (call $func $next)) (hash-put $hkey (cons $next (lookupelse $hkey $accum (list))) $accum))) (hash) $ls)
groupcount (x) (if (= $x '') 1 (re-replace "x " $x))
has_won (n c) $(= x $(!lg $n char=$c won fmt:"x"))
hash-divide (numers denoms) (apply hash (split ' ' (join ' ' (map (fn (key) "$key $(/ (elt $key $numers) (float (elt $key $denoms)))") (filter (fn (key) (elt $key $numers)) (hash-keys $denoms))))))
hash-remove (key-list hash-in) $(let (result (hash) kh (list-to-hash $key-list)) (map (fn (x) (if (= (elt $x $kh) (void)) (set! result (hash-put $x (elt $x $hash-in) $result)))) (hash-keys $hash-in)) $result)
hash-values (h) (map (fn (k) (elt $k $h)) (hash-keys $h))
hashcountsummary (hc) (let (tot (apply ${+} (map (fn (k) (elt $k $hc)) (hash-keys $hc)))) (join ", " (map (fn (k) (!echo ${k}: $(elt $k $hc) \($(sprintf %1.1f $(* (/ (elt $k $hc) (float $tot)) 100))%\))) (reverse (sorthashcounts $hc)))))
hashlist (l) (apply hash (flatten (map (fn (x) (list $x true)) $l)))
hourssince (t) $(int (* 24 (- (time) $t)))
id (x) $x
ignore (. args) (apply do (concat $args (list "")))
imatch (x y) $(match $(lower $x) $(lower $y))
indexof (element elements) (indexofpredicate (fn (y) (= $element $y)) $elements)
indexofpredicate (predicate ls) (foldl (fn (found index) (if (/= $found -1) $found (if (call $predicate (elt $index $ls)) $index -1))) -1 (map int (range 0 (- (length $ls) 1))))
intactgems (player args) $(let* (gems $(!lm $player $args gem.found|gem.lost / gem.found notitle stub:'N=0/0') found $(re-replace "^N=(\d+).*" '$1' $gems) total $(re-replace "^N=\d+\/(\d+).*" '$1' $gems) lost $(- $total $found) intact $(- $found $lost)) "$intact $found $lost")
inversestamptime (t) (concat (- (str (ftime (utc $t) "%Y%m%d%H%M%S")) 100000000) "S")
is_int (x) (re-match "^-?\d+$" (str $x))
is_standard_ldb_query (x) (or (not (match [ $x)) (re-match "\[\s*([+-]?\d+|\$)(?:\s*\/\s*\d+)?\s*\]? *$" $x))
isone (x) $(= $x 1)
killratiosdeaths (player args) (apply hash (!lm $player uniq s=regexp_replace(regexp_replace(regexp_replace(regexp_replace(noun, ".*Lernaean.*", "the Lernaean hydra"), ".*Blorkula.*", "Blorkula"), ".*shaped (.*)", '\1'), ".*(Enchantress|Royal Jelly)", 'the \1') fmt:'$(replace " " _ ${.}) $(groupcount $n_x)' join:' ' $args))
killratiosfmt (kills deaths) (join ", " (map (fn (data) "$data[0] $data[1]/$data[2] $(percent $data[1] $data[2])") (sortby (fn (data) (* -1 (/ (float $data[1]) $data[2]))) (map (fn (uniq) (list $uniq $(lookupelse $uniq $kills 0) $(elt $uniq $deaths))) (hash-keys $deaths)))))
killratioskills (player args) (apply hash (!lg $player s=regexp_replace(cikiller, ".*Blorkula.*", "Blorkula") cikiller!= fmt:'$(replace " " _ ${.}) $(groupcount $n_x)' join:' ' $args))
last (ls) (nth (- (length $ls) 1) $ls)
last_win (n) $(!lg $n won fmt:"$char" stub:"XXXX")
ldb-entry (term index) (join "]:" (cdr (split "]:" (ldb $term $index))))
ldb-find (after) (if (match [ $after) (let (result (let (a (nth 0 (split '[' $after)) b (match-n (re-find \[\(.*?\)\]?$ $after) 1)) (sub 0 1 (filter (fn (x) (re-imatch $b $x)) (map (fn (n) (ldb $a $n)) (range 1 (entrylength (ldb-canonical-term $a)))))))) (if (length $result) (car $result) "I don't have a page labeled $after in my learndb.")) (ldb $after 1))
ldb-set (term index definition) (if (= (ldb-size $term) 0) (replace "1" $definition (ldb-add $term $index $definition)) (ldb-set! $term $index $definition))
ldb-smart-lookup (after) (if (is_standard_ldb_query $after) (ldb-lookup $after) (ldb-find $after))
lg_name (name) $(!lm $name fmt:'$name' stub:"$name")
lg_rm_article (field) (.echo $(concat 'regexp_replace(' $field ', "^(an?|the) ", "")'))
lghashcounts (args) (apply hash (flatten (map (fn (x) (let (s (split ':' $x)) (list (car $s) (int (car (cdr $s)))))) (split '|' (!lg * $args fmt:'${.}:$(if $n_x (replace x $n_x) 1)' stub:'' join:'|')))))
list-to-hash (l) $(let (h (hash)) (map (fn (x) (set! h (hash-put $x $x $h))) $l) $h)
listavg (ls) (if (= (length $ls) 0) "" (/ (float (apply ${+} $ls)) (length $ls)))
listmax (ls) (if (= 0 (length $ls)) "" (foldr (fn (n max) (if (> $n $max) $n $max)) (car $ls) (cdr $ls)))
listmedian (ls) (let* (sorted (sort (map float $ls)) size (length $sorted)) (if (= $size 0) "" (if (= (mod $size 2) 1) (nth (/ $size 2) $sorted) (/ (+ (nth (/ $size 2) $sorted) (nth (- (/ $size 2) 1) $sorted)) 2.0))))
listmid (ls) (let (size (length $ls)) (if (= $size 0) "" (nth (/ $size 2) $ls)))
listmin (ls) (if (= 0 (length $ls)) "" (foldr (fn (n min) (if (< $n $min) $n $min)) (car $ls) (cdr $ls)))
listrange (. args) $(map ${id} (apply range $args))
listsubtract (a b) $(if (= (length $a) 1) (- (car $a) (car $b)) (cons (- (car $a) (car $b)) (listsubtract (cdr $a) (cdr $b))))
listsum (lst) $(map (fn (n) (apply ${+} (sub $n (length $lst) $lst))) (range 1 (length $lst)))
listsums (lst) $(map (fn (n) (apply ${+} (sub (- $n 1) (length $lst) $lst))) (split (range 1 (length $lst))))
log10 (x) (if (< $x 10) 0 (+ 1 (log10 (/ $x 10))))
log2 (x) (if (< $x 2) 0 (+ 1 (log2 (/ $x 2))))
longest (xs) (car (sort (fn (a b) (<=> (length $b) (length $a))) $xs))
lookup (x h) (let (z (elt $x $h)) (with-nvl $x $z))
lookupelse (x h else) $(let (z (elt $x $h)) (with-nvl $else $z))
mappedhash (func ls) (apply hash (flatten 1 (map (fn (next) (list $next (call $func $next))) $ls)))
match (x y) $(> (length $y) (length (replace $x $y)))
max (a b) $(if (> $a $b) $a $b)
member? (a xs) $(if (null? $xs) (= 0 1) (or (= (car $xs) $a) (member? $a (cdr $xs))))
mergehash (base overwrite) (foldl (fn (accum k) (hash-put $k (elt $k $overwrite) $accum)) $base (hash-keys $overwrite))
min (a b) $(if (< $a $b) $a $b)
minutessince (t) $(int (* 1440 (- (time) $t)))
months (d) $(+ $(* 12 $(sub 0 4 $d)) $(sub 4 6 $d))
mult (. args) $(apply ${$(.echo *)} $args)
name_fixup (name) (let (n (replace : '' (replace @ '' (replace . '' $name)))) (or (if (> (length (str $n)) 23) (concat (sub 0 20 (str $n)) ...) $n) $user))
name_fixup_long (name) (or (replace : '' (replace @ '' (replace . '' $name))) $user)
nchoicetimes-ct (t nchoice) (map (fn (str) (list (nth 0 $str) "$(nth 1 $str) $(nth 2 $str)")) (split ", " (!lg * $t $nchoice won s=char x=-min(end) fmt:'${.} $x[0]')))
nem-chosen () (split | (replace "Keyword: nchoice => " (!kw nchoice)))
nem-remaining () (split | (!lg * nem-eligible notitle fmt:'${.}' join:'|' s=char o=-. / (( nchoice || t won )) ?: N=0))
nem-remaining-filtered (. args) (split | (!lg * nem-eligible current notitle fmt:'${.}' join:'|' s=char o=-. / $(id "(( nchoice || t won "$args"))") ?:N=0))
nem-weights (nemchosen nemremain) (let* (weights (map (fn (rc) (apply * (map (fn (cc) (if (or (= (sub 0 2 $rc) (sub 0 2 $cc)) (= (sub 2 $rc) (sub 2 $cc))) 10 1)) $nemchosen))) $nemremain) maxw (car (reverse (sort $weights)))) (map (fn (w) (/ $maxw $w)) $weights))
next_output (p c e needcombo char) (if (= $c XXXX) "Get your first win first, ${p}!" (if (and (= $channel msg) $needcombo) "Run this command in a public IRC channel to choose your next combo." (if (= "NONE" $char) "$p has already won all$(argst (exact-entry ~${p}_pref 1)) combos!" "The RNG declares that $p shall win $char next.")))
no_pm (x) (if (= $channel msg) "This command does not work in PM." $x)
null? (xs) $(= (length $xs) 0)
nwins (player) $(int (!lg $player won fmt:"$n" stub:"0"))
pairs (l) (if (> 2 (length $l)) (cons) (cons (sub 0 2 $l) (pairs (cdr $l))))
per (x y) $(if (= (int $y) 0) "NaN" (/ (* 100 $x) $y))
percent (num denom) (sprintf "%2.2f%%" (* 100 (/ (float $num) $denom)))
percent-print (numer denom) (sprintf "%d/%d (%d%%)" $numer $denom (/ (* $numer 100) $denom))
percentile (sorted n) (elt (max 0 (int (- (/ (* (length $sorted) $n) 100) - 1))) $sorted)
percentiles (sorted) (foldr (fn (n ps) (hash-put $n (percentile $sorted $n) $ps)) (hash) (range 1 100))
pizzaquantity () (randnth (list slice pie platter box stack "personal pan"))
pizzatype () (randnth (list pineapple pepperoni cheese anchovy margherita Neapolitan olive falafel mushroom deep-dish pepper onion Pandemonium "stuffed crust" Sicilian Capricciosa Bolognese "New York-style" thin crust))
playableallls () (split | (sub 5 (=kw playable:all)))
playablebgls () (map (fn (background) (replace ?? (!ftw $background))) (split | (replace "cls=" (replace ' (=kw playable:job)))))
playablegodls () (split | "Ashenzari|Beogh|Cheibriados|Dithmenos|Elyvilon|Fedhas|Gozag|Hepliaklqana|Ignis|Jiyva|Kikubaaqudgha|Lugonu|Makhleb|Nemelex Xobeh|Okawaru|Qazlal|Ru|Sif Muna|The Shining One|Trog|Uskayaw|Vehumet|Wu Jian|Xom|Yredelemnul|Zin")
playablels () (split | (sub 5 (=kw playable)))
playablespls () (map (fn (crace) (replace ?? (!ftw $crace))) (split | (replace "crace=" (replace ' (=kw playable:sp)))))
plural (str n) $str$(if (= $n 1) '' s)
pluralize (str n) .echo $str$(let (last (sub (- (length $str) 1) $str)) (if (> $n 1) (if (or (= x $last) (= s $last)) es s)))
rand_unwon (player params) (randnth (setdiff (split ", " (!lg * playable recent $params s=char fmt:"${.}" stub:"")) (split ", " (!lg * playable @$player won s=char fmt:'${.}' stub:""))))
randelem (x) $(nth (rand (length $x)) $x)
randelt (l) (elt (rand (- (length $l) 1)) $l)
randhex (n) (if (> $n 0) (concat (randnth (list 0 1 2 3 4 5 6 7 8 9 a b c d e f)) (randhex (- $n 1))) "")
randkey (hash) (randelem (hash-keys $hash))
randnth (xs) $(nth (rand (length $xs)) $xs)
randstr (xs) $(if (not (lat? $xs)) (cons) (nth (rand (length $xs)) $xs))
randval (hash) (elt (randkey $hash) $hash)
raw_game_data (args) $(map (fn (x) $(split = (replace & : $x))) (split : (replace :: & (if (= (sub 0 2 $args) 'lm') $(!lm $(sub 2 $args)) $(!lg $(sub 2 $args))))))
re-gmatch (r s) (let (m (re-find $r $s)) (if (bound? m) (concat (list $m) (re-gmatch $r (sub (match-end $m) $s))) (list)))
re-imatch (x y) (re-match (lower (str $x)) (lower (str $y)))
re-match (x y) (> (length (re-find (str $x) (str $y))) 0)
recursive_expand_nick (nicklist n) (if (= (int $n) 0) $nicklist (recursive_expand_nick (expand_nick $nicklist) (- $n 1)))
remove (xs a) $(if (= (car $xs) $a) (cdr $xs) (cons (car $xs) (remove (cdr $xs) $a)))
remove_index (i xs) $(cons (sub 0 $i $xs) (sub (+ 1 $i) $xs))
repeat (str n) (if (> $n 0) $str(repeat $str (- $n 1)))
reverse-hash (ha) (groupby (fn (key) (elt $key $ha)) (hash-keys $ha))
rhymes () (list Lime Chime Slime Climb Crime Dime Grime Mime Prime Rhyme Thyme Time)
ripformat (char title xl god vmsg place points turns time) "the $title (L$xl $char)$(if $god ", worshipper of $god"), $vmsg on $place, with $points points after $turns turns and $time."
rng-god-uniq () (if (= 0 (rand 2)) (randnth (split ", " (!lm * week god.worship s=noun fmt:'${.}'))) (randnth (split ", " (!lm * week uniq s=noun fmt:'${.}'))))
role_abbrev (bg) $(if (not (ldb "~role_abbrev $bg")) (ignore (ldb-add "~role_abbrev $bg" (sub 2 4 $(!lg * cls="$bg" fmt:"$char" stub:"XXXX")))))(entry "~role_abbrev $bg" 1)
roll-dice (n d) (apply + (map (fn (x) (rand 1 $d)) (range 1 $n)))
roundhalfup (f) (if (< $f 0) (* -1 (roundhalfup (* -1 $f))) (let (n (int $f)) (if (< (- $f $n) 0.5) $n (+ 1 $n))))
rtime-to-time (rtime) (ftime (stamptime $rtime) "%Y-%m-%d %H:%M:%S")
runedeath-helper2 (limit ha) (foldr (fn (n sum) (+ $n $sum)) 0 (map (fn (xl) (xldeath-helper $xl $ha)) (range 0 (- $limit 1))))
runedeath-helper3 (limit wins deaths) (+ (runedeath-helper2 $limit $wins) (runedeath-helper2 $limit $deaths))
runeformat (n) (if (> $n 1) ", $n runes" (if (> $n 0) ", $n rune" ""))
rypotest (a) ${a:-nope}
scan (op z xs) (reverse (foldl (fn (accum x) (cons (call $op $(elt 0 $accum) $x) $accum)) (list $z) $xs))
sec2minsec (x) (join : (list (sprintf %02d (/ $x 60.0)) (sprintf %02d (mod (abs $x) 60))))
secondssince (t) $(int (* 86400 (- (time) $t)))
serverlist () (list CAO CBR2 CDI CDO CNC CPO CUE CXC LLD)
set (xs) $(if (null? $xs) (cons) (if (member? (car $xs) (cdr $xs)) (set (cdr $xs)) (cons (car $xs) (set (cdr $xs)))))
set? (xs) $(if (null? $xs) (= 1 1) (if (member? (car $xs) (cdr $xs)) (= 0 1) (set? (cdr $xs))))
setdiff (a b) (let (aset (hashlist $a) bset (hashlist $b)) (foldl (fn (accum x) (if (elt $x $bset) $accum (cons $x $accum))) (list) (hash-keys $aset)))
setintersection (lista listb) (let (hasha (hashlist $lista) hashb (hashlist $listb)) (filter (fn (element) (elt $element $hasha)) (hash-keys $hashb)))
short_num (x) (if (>= $x 1000000000) (/ $x 1000000)M (if (>= $x 1000000) (sub 0 4 (replace . M (/ $x 1000000.0))) (if (>= $x 1000) (sub 0 4 (replace . K (/ $x 1000.0))) $x)))
shuffle (xs) (if (<= (length $xs) 1) $xs (let (a (randnth $xs)) (concat (list $a) (shuffle (remove $xs $a)))))
skill_abbrev (skill) (lookupelse $skill (hash Fighting Fight Polearms Pole "Unarmed Combat" Unarmed Throwing Throw Dodging Dodge Stealth Stlth Spellcasting SplCst Conjurations Conj Summonings Summon Necromancy Necro Forgecraft Forge Translocations Transloc Alchemy Alch Invocations Invo Evocations Evo Shapeshifting Shape) (nth 0 (sub 0 6 $skill)))
smaller (a b) (min $a $b)
smallest (xs) $(if (null? (cdr $xs)) (car $xs) (smaller (car $xs) (smallest (cdr $xs))))
sortby (to_number_fn list) (sort (fn (a b) (<=> (call $to_number_fn $a) (call $to_number_fn $b))) $list)
sorthashcounts (h) (sort (fn (a b) (if (< (elt $a $h) (elt $b $h)) -1 (if (= (elt $a $h) (elt $b $h)) 0 1))) (hash-keys $h))
species_abbrev (sp) $(if (not (ldb "~species_abbrev $sp")) (ignore (ldb-add "~species_abbrev $sp" (sub 0 2 $(!lg * crace="$sp" fmt:"$char" stub:"XXXX")))))(entry "~species_abbrev $sp" 1)
speedabyss3enters (player args) (apply hash (split | $(!lm $player $args abyss.enter lg:urune>0 s=gid,turn join:" " fmt:"${.}" pfmt:"${.}|${child}|")))
speedabyss3helper (runes enters) (map (fn (gid) (let* (rune (int (elt $gid $runes)) enter (map int (split " " (elt $gid $enters))) smallenough (filter (fn (n) (<= $n $rune)) $enter) turn (nth (- (length $smallenough) 1) $smallenough)) (- $rune $turn))) (hash-keys $runes))
speedabyss3runes (player args) (apply hash (split " " $(!lm $player $args rune=abyssal lg:urune>0 s=gid x=max(turns) join:" " fmt:"${.} ${x[0]}")))
sprints () (list sprint1 sprint2 sprint3 sprint4 sprint5 sprint6 sprint7 sprint8 sprint9)
stamptime (stamp) $(ptime (str (+ 100000000 (sub 0 -1 $stamp))) "%Y%m%d%H%M%S")
strip-weight (x) (and $x (re-replace ^\d+: $x))
subset-ids (X S) (filter (fn (i) (apply or (map (fn (x) (= $x (elt $i $X))) $S))) (range 0 (- (length $X) 1)))
sum-weights (xs) (apply + (map weight $xs))
take (n ls) (sub 0 $n $ls)
takeright (n ls) (drop (- $n) $ls)
tea-rng () (randnth (list "Earl Grey" "English breakfast tea" "lapsang souchong" Assam "Russian Caravan" chai sencha Darjeeling "oolong tea" "Jasmine tea" "Moroccan mint" chamomile))
tiamatcolours () (list "Black" "Green" "Grey" "Pale" "Purple" "Red" "White" "Yellow")
timediffs (times) (map (fn (index) (deltatime (elt (- $index 1) $times) (elt $index $times))) (range 1 (- (length $times) 1)))
tip-adj () (randnth (list tiny small large massive shiny dull four-dimensional three-sided two-headed plain bejeweled haunted holy magic mundane glowing rough smooth gunk-covered slick rusty cursed blessed scented stinky lucky))
tip-material () (randnth (list copper silver gold zinc bronze tin aluminium titanium brass steel iron nickel platinum antimony mythril uranium lead plastic bone chocolate wooden))
today () start>=$(adjust_raw_yyyymmdd (sub 0 8 (!lg * fmt:"$end")))
transpose (a) (if (null? $a) $a (cons (map car $a) (transpose (filter (fn (l) (not (null? $l))) (map cdr $a)))))
unstreaks (player args) (map (fn (s) (split ">" $s)) (filter (fn (s) (> (length $s) 0)) (split | (!lg $player $args s=gid x=-min(end),min(ktype),min(char) notitle stub:'' fmt:'$(if (= ${x[1]} winning) | "$x[2]>")' join:''))))
unwon_raw (allcombos playername lgfilters) .echo $(sort (setdiff $allcombos (split ", " (!lg $playername $lgfilters won s=char fmtsimple stub:''))))
unwonbg (player) (setdiff (playablebgls) (split "," (!lg $player bybg playable:job fmt:'${.}' won stub:"")))
unwonsp (player) (setdiff (playablespls) (split "," (!lg $player bysp playable:sp fmt:'${.}' won stub:"")))
vaultallkills (kf mf args) (hashcountsummary (combinehashcounts (lghashcounts "kmap!= $kf $args s=vault(kmap)") (lghashcounts "kmap= map!= $mf $args s=vault(map)")))
version_fixup (v) (if (match a $v) git (if (= $v 0.2) "0.20" (join . (sub 0 2 (split . $v)))))
watchhash () $(hash cao https://crawl.akrasiac.org:8443/#watch- cbr2 https://cbro.berotato.org:8443/#watch- cdi https://crawl.dcss.io/#watch- cnc https://crawl.nemelex.cards/#watch- cpo https://crawl.project357.org/#watch- cue https://underhound.eu:8080/#watch- cxc https://crawl.xtahua.com/#watch- lld http://lazy-life.ddo.jp:8080/#watch-)
watchrandom-history (playersrc lgargs) (randnth (split | (!lg $(join | (hash-keys $playersrc)) fmt:'$(lower ${.})' join:'|' s=name won notitle stub:"" $lgargs)))
watchrandom-ongoing (lmargs) (apply hash (split | (!lm * alive !cdo time>${now()-interval('10minute')} x=max(src) s=name join:'|' fmt:'$(lower ${.}|$x[0])' notitle stub:"" $lmargs)))
weight (x) (nvl (if $x (let (m (re-find '^(\d+):' $x)) (if $m (elt 1 $m) 10)) 10))
weighted-rand (. xs) (nvl (let (total (sum-weights $xs) next (fn (t xs) (let* (x (car $xs) wt (weight $x)) (if (or (not $x) (< $t $wt)) $x (next (- $t $wt) (cdr $xs)))))) (strip-weight (next (rand $total) $xs))))
winsbyver (player args) (apply hash (split " " (!lg $player byversion o=-. won fmt:'${.} $(groupcount ${n_x})' stub:"N/A" join:" " $args)))
winsbyyear (player args) (apply hash (split " " (!lg $player byyear o=-. won fmt:'${.} $(groupcount ${n_x})' stub:"N/A" join:" " $args)))
wonchars (player args) (split ", " (!lg $player won s=char stub:'' fmt:'${.}' $args))
xldeath-helper (xl ha) (let (x (elt (str $xl) $ha)) (if (= (typeof $x) "String") $x "0"))
xldeath-helper2 (limit ha) (foldr (fn (n sum) (+ $n $sum)) 0 (map (fn (xl) (xldeath-helper $xl $ha)) (range 1 (- $limit 1))))
xldeath-helper3 (limit wins deaths) (+ (xldeath-helper2 $limit $wins) (xldeath-helper2 $limit $deaths))
xldeath-helper4 (xlN ha) (let (list (split " " $xlN)) (hash-put (elt 0 $list) (sub 0 -1 (if (= (length $list) 1) "1x" (elt 1 $list))) $ha))
year (n) start>=$n end<$(+ $n 1)
zip (a b) (if (= (length $a) 1) (list (list (car $a) (car $b))) (cons (list (car $a) (car $b)) (zip (cdr $a) (cdr $b))))

Behaviours

Defined in the :beh: key in the LearnDB
  Pattern Behaviour Next Step
1 $bot: help $(ldb help)
2 cang cang
3 <<<([^!]|^)\bgong\b>>> $(weighted-rand 40:GONNNNG BOUMMMMG PTOANNNG PANG SHROANNG)! continue
4 /me >>> $(if (not (rand 100)) (if (match Sequell $after) "/me $(replace Sequell $user $after)" "/me also $after")) continue
5 r\?\? $(randnth $(ldb-search-entries .)) last
6 r\?\?>>> $(ldb $after $(rand 1 (entrylength $after))) continue
7 \?\?>>> $(if (not (is_standard_ldb_query $after)) (ldb-find $after))
8 You die... $(if (rand 5) $(quote "Save macros?") $(quote "Xom revives you!"))
9 !rng \d+d0* /me can't find the dice!
10 !rng >>> $(if (or (rand 100) (imatch xom $after)) '' (let (L (split ' ' $after)) (let (n (length $L)) (if (> $n 1) (let (k1 (rand 1 (- $n 1))) (let (k2 (rand $k1)) (concat "The RNG chooses: both " (nth $k2 $L) " and " (nth $k1 $L) "."))) ""))))
11 !rng 0+d(?P<dice>\d+) /me rolls 0d$dice for, shockingly, 0
12 ^¡learn add $word >>> Okay, not adding $word => $after
13 q\?\?>>> $(!learn q $after)
14 rip\b>>> $(if (not (rand 20)) rip)
15 \?\?\?*   last
16 !rng 0*(?P<n>[1-9]\d*)?d0*(?P<d>[1-9]\d*) /me rolls $(nvl $n)d${d} for $(let (n (with-nvl 1 $n)) (roll-dice $n $d))
17 ^\?\?!{2,} $(ldb-lookup ![2])
18 [^?]*is (?P<server>(cao|cdo|cszo|ckr|clan|cbro|rhf|csn|lld|cxc|cpo|cwz)) (offline|online|down|dead)>>> $(!isonline $server)
19 \?\?l+[ae]+r+n+[ae]+n+( hydra)? $(ldb-lookup lernaean_hydra)
20 \!apt mr $(=racialmr)
21 !wtf [dD][rR][kK][eE] Doctor Kenku
22 \!apt will $(=racialwill)
23 !(?P<monster>\w+)feelings $(if (or (= $monster bee) (= $monster shrike)) "" $(!monsterfeelings $monster))

ACLs

See the ACL documentation
ACL Definition
:acl:db:cone_rule @admin
:acl:db::group:* see {:acl:db::acl:*}
:acl:db::acl:* @admin
:acl:db::beh: @admin
:acl:nick:* see {:acl:db:*}
:acl:cmd:* see {:acl:db:*}
:acl:proxy Cerebot TestSpawner
:acl:db:* #crawl #crawl-dev #crawl-sequell
:acl:kw:* see {:acl:db:*}
:acl:pm @admin Cerebot TestSpawner LomLobot beem

Groups

See the ACL documentation
Group Members
:group:admin gammafunk rypofalem