v       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                ! "!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2!3!4!5!6!7!8!9!:!;!<!=!>!?!@!A!B!C!D!E!F"G"H"I"J"K"L"M"N"O"P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#^#_#`#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#{#|#}#~########################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%% % % % % &&&&&&&&&&&&&&&&&'' '!'"'#'$'%'&'''(')'*'+','-'.'/'0'1'2'3'4'5(6(7(8(9(:(;(<(=(>(?)@)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S*T*U*V*W*X*Y*Z*[*\*]*^*_*`*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u+v+w+x+y+z+{+|+}+~,,,,,,,,,,,,,,,----..//////////////////////////00000000000000011111111111111111111122222333333333333333333333333333333333333333333334444444 4 4 5 5 5555555555555555666 6!6"6#6$6%6&6'6(6)6*7+7,7-7.7/707172737475767778798:8;8<8=8>8?8@8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8^8_8`8a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}8~8888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999:::::::::::::::::::::::;;;;;;;;<<<<<<<<<<< < < < < <<<<<<<<<<<<<<<<<<< <!<"<#<$<%<&<'<(<)<*<+<,<-<.</<0<1<2<3<4<5<6<7<8<9<:=;=<===>=?=@=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=[=\=]=^=_=`=a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z={=|=}=~===================================>>>>>>>>>>>>>>>>>>????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB B B B B B B B B B B B B B B B B C C C C C C C C C C C C D D D D D !D "D #D $D %D &D 'D (D )E *E +E ,E -E .E /E 0E 1E 2E 3E 4E 5E 6E 7E 8E 9E :E ;E <E =E >E ?E @E AE BE CE DE EF FF GF HF IF JF KF LF MF NF OF PF QF RF SF TF UF VF WF XG YG ZH [H \I ]I ^I _I `I aI bI cI dI eI fI gI hI iI jI kI lI mI nI oI pI qI rI sI tJ uJ vJ wJ xJ yK zK {L |L }L ~L L L L L L L L L L L L L L M M M M M M M M M M M M N N N N N N N N N N N N N N N N O O O O O O O O O O P P P P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R S S S S S S S S S S S S !S "T #T $T %T &T 'T (T )T *T +T ,T -T .T /T 0T 1T 2T 3T 4T 5T 6T 7T 8T 9T :T ;T <T =T >T ?T @T AT BT CT DT ET FT GT HT IT JT KT LT MT NT OT PT QT RT ST TT UT VT WT XT YT ZT [T \T ]T ^T _T `T aT bU cV dV eV fV gV hV iV jW kW lW mW nW oW pW qW rW sW tW uW vW wW xW yW zX {X |X }X ~X X X X Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Z Z Z Z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ \ \ \ \ \ ] ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` ` a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b c c d d d d e e e e e e e e e e e e e e f f f f f g g g g g g g g g h h h h h h h !h "h #h $h %h &h 'h (h )h *h +h ,h -i .i /i 0i 1i 2i 3i 4i 5i 6i 7i 8j 9j :j ;j <j =j >j ?j @j Aj Bj Cj Dj Ej Fj Gj Hj Ij Jj Kj Lj Mj Nj Oj Pj Qj Rj Sj Tj Uj Vj Wj Xj Yj Zj [j \j ]j ^j _j `j ak bk cl dl el fl gl hl il jl kl ll ml nl ol pl ql rl sl tl ul vl wl xl yl zl {l |l }l ~l l l l l l l m n n o o o o o o o p q q q q q q q q q q q q q q r r r r s s s s s s s s s s s s s s s t t t t t t t t t t t t t t t t t t t t t t t u u u u u u u u u u u u u u u u u u{None "#$V^j Show and pack the result. Integer division, rounding up.                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y   7 4None "#$6V^j 2D points in cartesian representation. Coordinates grow to the right and down, so that the (0, 0) point is in the top-left corner of the screen. Coordinates are never negative.)Spacial dimension for points and vectors.)Spacial dimension for points and vectors.|The maximum number of bits for level X and Y dimension (16). The value is chosen to support architectures with 32-bit Ints. ZMaximal supported level X and Y dimension. Not checked anywhere. The value is chosen to support architectures with 32-bit Ints.9The distance between two points in the chessboard metric..Squared euclidean distance between two points.\Checks whether two points are adjacent on the map (horizontally, vertically or diagonally).'Checks that a point belongs to an area.=Bresenham's line algorithm generalized to arbitrary starting eps (eps value of 0 gives the standard BLA). Skips the source point and goes through the second point to the edge of the level. GIves Nothing2 if the points are equal. The target is given as Point to permit aiming out of the level, e.g., to get uniform distributions of directions for explosions close to the edge of the level. [=Bresenham's line algorithm generalized to arbitrary starting eps (epsn value of 0 gives the standard BLA). Includes the source point and goes through the target point to infinity. \See  Bhttp://roguebasin.roguelikedevelopment.org/index.php/Digital_lines.zA list of all points on a straight vertical or straight horizontal line between two points. Fails if no such line exists.   None "#$V^j="Arrays of, effectively, Word8 , indexed by Point.#Arrays indexed by Point.* Array lookup.,5Construct an array updated with the association list.0*Create an array from a replicated element.11Create an array from a replicated monadic action.2 Create an array from a function.3(Create an array from a monadic function.5Content identifiers array size.6Fold right over an array.7"Fold right strictly over an array.8!Fold left strictly over an array.9SFold left strictly over an array (function applied to each element and its index).:KFold right over an array (function applied to each element and its index).;TFold right strictly over an array (function applied to each element and its index).<(Fold monadically strictly over an array.=ZFold monadically strictly over an array (function applied to each element and its index).>Map over an array.?CMap over an array (function applied to each element and its index).@.Set all elements to the given value, in place.A;Set all elements to the given value, in place, if possible.BgMap monadically over an array (function applied to each element and its index) and ignore the results.C[Yield the point coordinates of a minimum element of the array. The array may not be empty.DbYield the point coordinates of the last minimum element of the array. The array may not be empty.EbYield the point coordinates of all the minimum elements of the array. The array may not be empty.FcYield the point coordinates of the first maximum element of the array. The array may not be empty.GbYield the point coordinates of the last maximum element of the array. The array may not be empty.H/Force the array not to retain any extra memory.)"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ)#$%&'"()*+,012345678:;9<=>?BA@-./CDEFGHIJ#$%&'None"#$6FKTV^jNTactic of non-leader actors. Apart of determining AI operation, each tactic implies a skill modifier, that is added to the non-leader skills defined in  fskillsOther field of Player.O;if enemy nearby, attack, if no items, etc., explore unknownP:always follow leader's target or his position if no targetQ/follow but don't do any item management nor useRonly melee and do ranged combatSonly melee (or wait)T.always only wait, even if enemy in melee rangeU9if enemy nearby, attack, if no items, etc., roam randomlyVdfind an open and uncrowded area, patrol it according to sight radius and fallback temporarily to TRoamO when enemy is seen by the faction and is within the actor's sight radiusW/A unique identifier of an actor in the dungeon.XAbsolute depth in the dungeon. When used for the maximum depth of the whole dungeon, this can be different than dungeon size, e.g., when the dungeon is branched, and it can even be different than the length of the longest branch, if levels at some depths are missing.ZAbstract level identifiers.[+A unique identifier of a faction in a game.hItem container type.lfor bootstrapping actor bodiesmRarity on given depths.n6For each group that the kind belongs to, denoted by a  GroupNamer in the first component of a pair, the second component of a pair shows how common the kind is within the group.pWRe-exported English phrase creation functions, applied to default irregular word sets.qWRe-exported English phrase creation functions, applied to default irregular word sets.r Level bounds.u breturn b a = [a | b]wmPersonal data directory for the game. Depends on the OS and the game, e.g., for LambdaHack under Linux it's ~/.LambdaHack/..NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{.[ZXYWhijklbcdefg\]^_`apqrosnumtNOPQRSTUVvwxyz{ NOPQRSTUVW ]XYZ ^[ _\]^_`abcdefghijklo `vNone "#$V^j  aZSerialize, compress and save data. Note that LBS.writeFile opens the file in binary mode.;Serialize, compress and save data with an EOF marker. The OKn is used as an EOF marker to ensure any apparent problems with corrupted files are reported to the user ASAP.?Read, decompress and deserialize data with an EOF marker. The OKr EOF marker ensures any easily detectable file corruption is discovered and reported before the function returns.Try to create a directory, if it doesn't exist. We catch exceptions in case many clients try to do the same thing at the same time.Try to write a file, given content, if the file not already there. We catch exceptions in case many clients try to do the same thing at the same time.None "#$V^jNone"#$3456V^j The frequency distribution type. Not normalized (operations may or may not group the same elements and sum their frequencies). However, elements with zero frequency are removed upon construction.The Eq instance compares raw representations, not relative, normalized frequencies, so operations don't need to preserve the expected equalities, unless they do some kind of normalization (see Dice)."give acces to raw frequency valuesLshort description for debug, etc.; keep it lazy, because it's rarely used(Uniform discrete frequency distribution.RTakes a name and a list of frequencies and items into the frequency distribution.MScale frequency distribution, multiplying it by a positive integer constant.(Change the description of the frequency.Set frequency of an element.,Test if the frequency distribution is empty.Average value of an Into distribution, rounded up to avoid truncating it in the other code higher up, which would equate 1d0 with 1d1.  bNone"#$6;=V^j# qDice for rolling a pair of integer parameters pertaining to, respectively, the X and Y cartesian 2D coordinates.KDice for parameters scaled with current level depth. To the result of rolling the first set of dice we add the second, scaled in proportion to current depth divided by maximal dungeon depth. The result if then multiplied by the scale --- to be used to ensure that dice results are multiples of, e.g., 10. The scale is set with |*|.cDice like 100d100 lead to enormous lists, so we help a bit by keeping simple dice nonstrict below.A single simple dice.Dice scaled with level.gMultiplying the dice, after all randomness is resolved, by a constant. Infix declaration ensures that  1 + 2 |*| 3 parses as  (1 + 2) |*| 3.CMaximal value of dice. The scaled part taken assuming median level.CMinimal value of dice. The scaled part taken assuming median level.gMean value of dice. The scaled part taken assuming median level. Assumes the frequencies are not null.Maximal value of DiceXY.Minimal value of DiceXY.Mean value of DiceXY. c5None "#$V^j) @The general type of a particular game content, e.g., item kinds. !symbol, e.g., to print on the map !name, e.g., to show to the player frequency within groups-validate a content item and list all offencesEvalidate the whole defined content of this type and list all offencesall content of this type                  None"#$6DKV^j4 1Text attributes: foreground and backgroud colors.foreground colourbackgroud highlight%)Colours supported by the major frontends.63The default colours, to optimize attribute setting.75The default attribute, to optimize attribute setting.AAA helper for the terminal frontends that display bright via bold.B Colour sets.C Colour sets.D Colour sets.E@Translationg to heavily modified Linux console color RGB values.1Warning: SDL frontend sadly duplicates this code. doFor reference, the original Linux console colors. Good old retro feel and more useful than xterm (e.g. brown).6 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG6%&'()*+,-./0123456ABCDE !"#$789:;<=>?@FG !"#$%&'()*+,-./012345 None "#$6V^j? cThe type of item flavours. e*how fancy should the colour description be fthe colour of the flavourd%Turn a colour set into a flavour set.e%Turn a colour set into a flavour set.f%Turn a colour set into a flavour set.g"The standard full set of flavours.h,Get the underlying base colour of a flavour.i%Construct the full name of a flavour.j4Human-readable names for item colors. The plain set.k4Human-readable names for item colors. The fancy set. g5Human-readable names for item colors. The liquid set.l8Simple names for team colors (bright colours preferred). cdefghijkl cdegfhiljkc h e f i j k l None "#$6V^jPq{0Font family to use for the GTK main game window.|/Font file to use for the SDL2 main game window.}DPixels to add to map cells on top of scalable font max glyph height.~@Pixels to add to map cells on top of .fon font max glyph height.*Font size to use for the main game window.6Whether to use bold attribute for colorful characters.Maximal frames per second. This is better low and fixed, to avoid jerkiness and delays that tell the player there are many intelligent enemies on the level. That's better than scaling AI sofistication down based on the FPS setting and machine speed.8Never auto-answer all prompts, even if under AI control.Don't show any animations.,Start a new game, overwriting the save file.7Don't create directories and files and show time stats."Prefix of the save game file name.)Whether to use the stdout/stdin frontend./Whether to use null (no input/output) frontend.:Whether to use lazy (output not even calculated) frontend.&Show clients' internal debug messages.yz{|}~yz{|}~yz{|}~ None "#$6V^jW$Skill level in particular abilities.This representation is sparse, so better than a record when there are more item kinds (with few abilities) than actors (with many abilities), especially if the number of abilities grows as the engine is developed. It's also easier to code and maintain.DActor and faction abilities corresponding to client-server requests. None "#$6KV^js) 3State of legality of moves between adjacent points.6Weighted distance between points along shortest paths.QThe minimal distance value assigned to paths that don't enter any unknown tiles.The distance value that denotes no legal path between points, either due to blocked tiles or pathfinding aborted at earlier tiles, e.g., due to unknown tiles. mThe distance value that denotes that path search was aborted at this tile due to too large actual distance and that the tile was known and not blocked. It is also a true distance value for this tile (shifted by minKnownBfs, as all distances of known tiles). nThe distance value that denotes that path search was aborted at this tile due to too large actual distance and that the tile was unknown. It is also a true distance value for this tile.&Fill out the given BFS array. Unsafe  PointArray operations are OK here, because the intermediate values of the vector don't leak anywhere outside nor are kept unevaluated and so they can't be overwritten by the unsafe side-effect.When computing move cost, we assume doors openable at no cost, because other actors use them, too, so the cost is shared and the extra visiblity is valuable, too. We treat unknown tiles specially. Whether suspect tiles are considered openable depends on  smarkSuspect.IFind a path, without the source position, with the smallest length. The eps coefficient determines which direction (of the closest directions available) that path should prefer, where 0 means north-west and 1 means north.>Access a BFS array and interpret the looked up distance value.starting positioninitial array, with apartBfs o pNone"#$345NV^jy LA strategy is a choice of (non-empty) frequency tables of possible actions.UStrategy where only the actions from the given single frequency table can be picked.TStrategy with the actions from both argument strategies, with original frequencies. Strategy with no actions at all. Conditionally accepted strategy.Strategy with all actions not satisfying the predicate removed. The remaining actions keep their original relative frequency values.cWhen better choices are towards the start of the list, this is the best frequency of the strategy.AOverwrite the description of all frequencies within the strategy.Like  *, but pick a name of the single frequency.Strategy is a monad.   q r23None "#$V^j Fractional chance.The monad of computations with random generator state. The lazy state monad is OK here: the state is small and regularly forced.?Get a random object within a range with a uniform distribution.@Get a random object of a given type with a uniform distribution.1Get any element of a list with equal probability.5Gen an element according to a frequency distribution. s6Randomly choose an item according to the distribution.Give True., with probability determined by the fraction.mCast dice scaled with current level depth. Note that at the first level, the scaled dice are always ignored.5Cast dice scaled with current level depth and return True$ if the results is greater than 50.<Cast dice, scaled with current level depth, for coordinates.  None "#$KQV^j +Content operations for the content of type a.content element at given id;the id of the unique member of a singleton content groupCpick a random id belonging to a group and satisfying a predicate"fold over all content elements of afold strictly over all content afold over the given group onlysize of content a)Content identifiers for the content type c.  None "#$6V^jV'Add element to the front of the buffer. t u v w xNone "#$V^j/None "#$3KV^j%Speed in meters per 1 million seconds (m/Ms). Actors at normal speed (2 m/s) take one time turn (0.5 s) to make one step (move one tile, which is 1 m by 1 m).tOne-dimentional vectors. Introduced to tell apart the 2 uses of Time: as an absolute game time and as an increment. sGame time in ticks. The time dimension. One tick is 1 microsecond (one millionth of a second), one turn is 0.5 s. 5Start of the game time, or zero lenght time interval. yThe smallest unit of time. Do not export, because the proportion of turn to tick is an implementation detail. The significance of this detail is only that it determines resolution of the time dimension. An infinitesimal time period. At least once per clip all moves are resolved and a frame or a frame delay is generated. Currently one clip is 0.05 s, but it may change, and the code should not depend on this fixed value. |One turn is 0.5 s. The code may depend on that. Actors at normal speed (2 m/s) take one turn to move one tile (1 m by 1 m). z'This many turns fit in a single second.7This many ticks fits in a single second. Do not export,jAbsolute time addition, e.g., for summing the total game session time from the times of individual games.+Shifting an absolute time by a time vector.SHow many time intervals of the latter kind fits in an interval of the former kind.^How many time intervals of the latter kind cover an interval of the former kind (rounded up).Reverse a time vector.uAbsolute time negation. To be used for reversing time flow, e.g., for comparing absolute times in the reverse order.Time time vector between the second and the first absolute times. The arguments are in the same order as in the underlying scalar subtraction.Time time vector between the second and the first absolute times. The arguments are in the same order as in the underlying scalar subtraction.Scale the time vector by an Int scalar value.*Take the given percent of the time vector.Divide a time vector.fRepresent the main 10 thresholds of a time range by digits, given the total length of the time range. {#Number of seconds in a mega-second.$Constructor for content definitions.CPretty-printing of speed in the format used in content definitions.#No movement possible at that speed.CFast walk speed (2 m/s) that suffices to move one tile in one turn. Limp speed (1 m/s) that suffices to move one tile in two turns. This is the minimal speed for projectiles to fly just one space and drop.!5Sword thrust speed (10 m/s). Base weapon damages, both melee and ranged, are given assuming this speed and ranged damage is modified accordingly when projectile speeds differ. Differences in melee weapon swing speeds are captured in damage bonuses instead, since many other factors influence total damage.Billiard ball is 25 m!s, sword swing at the tip is 35 ms, medieval bow is 70 ms, AK47 is 700 ms."Modify damage when projectiles is at a non-standard speed. Energy and so damage is proportional to the square of speed, hence the formula.#Scale speed by an Int scalar value.$Speed addition.%Speed negation.&EThe number of time ticks it takes to walk 1 meter at the given speed.'ZCalculate projectile speed from item weight in grams and velocity percent modifier. See  =https://github.com/LambdaHack/LambdaHack/wiki/Item-statistics. |GCalculate maximum range in meters of a projectile from its speed. See  =https://github.com/LambdaHack/LambdaHack/wiki/Item-statisticsq. With this formula, each projectile flies for at most 1 second, that is 2 turns, and then drops to the ground.(BCalculate maximum range taking into account the linger percentage.#      !"#$%&'(#     & !"#$%'( }  ~ None "#$6V^j ;2D vectors in cartesian representation. Coordinates grow to the right and down, so that the (1, 1) vector points to the bottom-right corner of the screen. -Maximal supported vector X and Y coordinates.?8Tells if a vector has length 1 in the chessboard metric.@Checks whether a unit vector is a diagonal direction, as opposed to cardinal. If the vector is not unit, it checks that the vector is not horizontal nor vertical.AReverse an arbirary vector.B/Squared euclidean distance between two vectors.CNThe lenght of a vector in the chessboard metric, where diagonal moves cost 1.DTVectors of all unit moves in the chessboard metric, clockwise, starting north-west.FHVectors of all cardinal direction unit moves, clockwise, starting north.GHVectors of all diagonal direction unit moves, clockwise, starting north.H=All (8 at most) closest neighbours of a point within an area.JHAll (4 at most) cardinal direction neighbours of a point within an area.MTranslate a point by a vector.NFTranslate a point by a vector, but only if the result fits in an area.O1A list of points that a list of vectors leads to.PHA list of points that a list of vectors leads to, bounded by level size.Q:The vector between the second point and the first. We have -shift pos1 (pos2 `vectorToFrom` pos1) == pos2LThe arguments are in the same order as in the underlying scalar subtraction.R+A list of vectors between a list of points.SRotate a vector by the given angle (expressed in radians) counterclockwise and return a unit vector approximately in the resulting direction. Given a vector of arbitrary non-zero length, produce a unit vector that points in the same direction (in the chessboard metric). Of several equally good directions it picks one of those that visually (in the euclidean metric) maximally align with the original vector.T_Given two distinct positions, determine the direction (a unit vector) in which one should move from the first in order to get closer to the second. Ignores obstacles. Of several equally good directions (in the chessboard metric) it picks one of those that visually (in the euclidean metric) maximally align with the vector between the two points.Hlimit the search to this areaposition to find neighbours ofJlimit the search to this areaposition to find neighbours of:;<=>?@ABCDEFGHIJKLMNOPQRST;<=>?@ACBDFGEHIJKLMNOPQR:ST;<=>None "#$6V^jlaOur own encoding of modifiers.f0Frontend-independent datatype to represent keys.x3a keypad key for a character (digits and operators)ya single printable characterz function key{left mouse button pressed|middle mouse button pressed}right mouse button pressed~left mouse button releasedmiddle mouse button releasedright mouse button releasedmouse wheel rotated northmouse wheel rotated south+an unknown key, registered to warn the user#Show a key with a modifier, if any.bConfigurable event handler for the direction keys. Used for directed commands such as close door.&Binding of both sets of movement keys.Translate key from a GTK string description to our internal key type. To be used, in particular, for the command bindings and macros in the config file.See >https://github.com/twobob/gtk-/blob/master/gdk/keyname-table.h9Translate key from a Web API string description (https:/developer.mozilla.orgen-USdocsWebAPIKeyboardEvent/key#Key_values) to our internal key type. To be used in web frontends. The argument says whether Shift is pressed.C]^`_adecbfyopirzjghklmnqstuvwx{|}~Cfghijklmnopqrstuvwxyz{|}~abcde]^_`]^_`abcdefghijklmnopqrstuvwxyz{|}~None "#$6V^j6:eFeatures of item. Affect only the item in question, not the actor, and so not additive in any sense.-drop and break at target tile, even if no hit#drop at target tile, even if no hit)don't break even when hitting or applyingparameters modifying a throwthe item starts identified!AI and UI flag: consider applying6AI and UI flag: consider equipping (independent of ^ #, e.g., in case of mixed blessings)&AI and UI flag: consider meleeing with_AI and UI flag: don't risk identifying by use also, can't throw or apply if not calm enough;overrides actor's tactickParameters modifying a throw of a projectile or flight of pushed actor. Not additive and don't start at 0.,fly with this percentage of base throw speed"fly for this percentage of 2 turns'Aspects of items. Those that are named Add*[ are additive (starting at 0) for all items wielded by an actor and they affect the actor.Fsome effects disabled until item recharges; expressed in game turns percentage damage bonus in melee$percentage armor bonus against melee%percentage armor bonus against ranged maximal hp maximal calm$speed in m/10s (not of a projectile)'FOV radius, where 1 means a single tile)smell radius, where 1 means a single tile)shine radius, where 1 means a single tile*noctovision radius, where 1 is single tile+aggression, especially closing in for meleebonus to an abilityEffects of items. Can be invoked by the item wielder to affect another actor or the wielder himself. Many occurences in the same item are possible. Constructors are sorted vs increasing impact/danger.,secret (learned as effect) label of the item)AI and UI flag that leaks item properties'explode, producing this group of blastsexpressed in game clipsexpressed in game turnsTcreate an item of the group and insert into the store with the given random timersymbol ' ' means all0trigger if item smashed (not applied nor meleed) )this effect inactive until timeout passes the item is temporary, vanishes at even void Periodic activation, unless Durable and not Fragile, and shows message with this verb at last copy activation or at each activation unless Durable and Fragile &at most one copy can ever be generated in eqp, triggered as often as Timeout permits 9Item properties that are fixed for a given kind of items. map symbol generic namefrequency within groupspossible flavourscreated in that quantityrarity on given depths"the verb&noun for applying and hitweight in grams frequency of basic impact damagekeep the aspect continuouslycause the effect when triggeredpublic properties descriptionaccompanying organs and items%$Catch invalid item kind definitions.&Validate all item kinds.v      !"#$%&v      !"#$%&  #     None "#$V^jNR2The type of game rule sets and assorted game data.IFor now the rules are immutable througout the game, so there is no type Rule' to hold any changing parameters, just RuleKind for the fixed set. However, in the future, if the rules can get changed during gameplay based on data mining of player behaviour, we may add such a type and then RuleKindM will become just a starting template, analogously as for the other content.Ta symbolUshort descriptionVfrequency within groupsWtitle of the game (not lib)X%font directory for the game (not lib)Yversion of the gameZname of the UI config file[#the default UI settings config file\the ASCII art for the Main Menu]6whether first non-spawner actor death ends the game^game is saved that often_'server switches leader level that often`name of the scores filea what distance between actors is nearbyb$Catch invalid rule kind definitions.cHSince we have only one rule kind, the set of rule kinds is always valid.dA dummy instance of the  I class, to satisfy general requirments about content. We won't have many rule sets and they contain functions, so defining a proper instance is not practical.RSTUVWXYZ[\]^_`abcRSTUVWXYZ[\]^_`abcRSTUVWXYZ[\]^_`aNone "#$6V^j{Jx#All possible terrain tile features.yninitially an item of this group is embedded; we assume the item has effects and is supposed to be triggeredzAgoes from a closed to (randomly closed or) open tile when altered{Bgoes from an open to (randomly opened or) closed tile when altered|,alters tile, but does not change walkability}2when hidden, looks as the unique tile of the group~Cwhen generating, may be transformed to the unique tile of the groupBwhen generating in opening, can be revealed to belong to the groupEwhen generating in solid wall, can be revealed to belong to the groupactors can walk throughactors can see through is not lit with an ambient light#initial items often generated there$initial actors often generated thereno items ever generated thereno actors ever generated there0is allowed to have the same look as another tileKeven if otherwise uninteresting, taken into account for triggering by AI,used for visible trails throughout the levelin place normal legend and in override, don't roll a tile kind only once per place, but roll for each position; one non-spicy and at most one spicy is rolled per place and then one of the two is rolled for each position(The type of kinds of terrain tiles. See Tile.hs9 for explanation of the absence of a corresponding type Tile that would hold particular concrete tiles in the dungeon. Note that tile names (and any other content names) should not be plural (that would lead to "a stairs"), so "road with cobblestones" is fine, but "granite cobblestones" is wrong.,Tile kind for unknown space has the minimal  KindOps.Id index. The talter for unknown space is 1' and no other tile kind has that value. map symbolshort descriptionfrequency within groups map colormap color when not in FOV&minimal skill needed to alter the tile propertiesValidate a single tile kind.Validate all tile kinds.aIf tiles look the same on the map (symbol and color), their substantial features should be the same, too. Otherwise, the player has to inspect manually all the tiles of that kind, or even experiment with them, to see if any is special. This would be tedious. Note that tiles may freely differ wrt text blurb, dungeon generation, AI preferences, etc.Features of tiles that differentiate them substantially from one another. The intention is the player can easily tell such tiles apart by their behaviour and only looking at the map, not tile name nor description. So if running uses this function, it won't stop at places that the player can't himself tell from other places, and so running does not confer any advantages, except UI convenience. Hashes are accurate enough for our purpose, given that we use arbitrary heuristics anyway.:efghijklmnopqrstuvwxyz{|}~:xyz{|}~ghijklmnopqrstuvwefefghijklmnopqrstuvwxyz{|}~None "#$V^j)The choice of a fence type for the place.'put a solid wall fence around the place*leave an empty space, like the rooms floor+leave an empty space, like the caves ground1skip the fence and fill all with the place properA method of filling the whole area (except for CVerbatim and CMirror, which are just placed in the middle of the area) by transforming a given corner.8reflect every other corner, overlapping 1 row and column6fill symmetrically 4 corners and stretch their borders7tile separately and symmetrically quarters of the place7just build the given interior, without filling the area6build the given interior in one of 4 mirrored variantsDParameters for the generation of small areas within a dungeon level.a symbolshort descriptionfrequency within groupsrarity on given depths+how to fill whole place based on the corner(whether to fence place with solid border(plan of the top-left corner of the placelegend overridewCatch invalid place kind definitions. In particular, verify that the top-left corner map is rectangular and not empty.1Validate all place kinds. Currently always valid. None "#$V^jM#{Parameters for the generation of dungeon levels. Warning: for efficiency, avoid embedded items in any of the common tiles.a symbolshort descriptionfrequency within groupsX size of the whole caveY size of the whole cave$the dimensions of the grid of places#minimal size of places; for mergingmaximal size of placesthe chance a place is darkthe chance the cave is dark!a proportion of extra connections%at most this proportion of rooms voidminimal distance between stairs!extra stairs on top of from above"the chance of a door in an openingif there's a door, is it open?"if not open, hidden one in n times"the lower, the more monsters spawnactor groups to considerthe number of items in the caveitem groups to considerplace groups to consider$are passable default tiles permittedthe default cave tilethe dark cave corridor tilethe lit cave corridor tilethe filler wallthe outer fence wallthe dark place plan legendthe lit place plan legendescape, if anyrplace groups to consider for stairs; in this case the rarity of items in the group does not affect group choiceCatch caves with not enough space for all the places. Check the size of the cave descriptions to make sure they fit on screen. Etc.}Validate all cave kinds. Note that names don't have to be unique: we can have several variants of a cave with a given name.$$!None "#$6V^j(leader switching between levels is automatically done by the server and client is not permitted to change to leaders from other levels (the frequency of leader level switching done by the server is controlled by RuleKind.rleadLevelClips); if the flag is False, server still does a subset of the automatic switching, e.g., when the old leader dies and no other actor of the faction resides on his level, but the client (particularly UI) is expected to do changes as wellclient is discouraged from leader switching (e.g., because non-leader actors have the same skills as leader); server is guaranteed to switch leader within a level very rarely, e.g., when the old leader dies; if the flag is False, server still does a subset of the automatic switching, but the client is expected to do more, because it's advantageous for that kind of a factionIf a faction with LeaderUI and LeaderAI has any actor, it has a leader.5faction can have no leader, is whole under AI controlleader under AI control!leader under UI control, assumes fhasUI"Properties of a particular player.name of the playerlnames of actor groups that may naturally fall under player's control, e.g., upon spawning or summoningufixed skill modifiers to the non-leader actors; also summed with skills implied by ftactic (which is not fixed)!the player can escape the dungeon(the faction declared killed if no actorsscore polynomial for the playerwhether actors have genderNnon-leaders behave according to this tactic; can be changed during the game the mode of switching the leaderIdoes the faction have a UI client (for control or passive observation)FConditional polynomial representing score calculation for this player.Outcome of a game.the faction was eliminated(the faction lost the game in another way game is supended (the player won by eliminating all rivals $the player escaped the dungeon alive game is restarted /The specification of players for the game mode.Yplayers in the particular team and levels, numbers and groups of their initial membersthe initial enmity matrixthe initial aliance matrixJRequested cave groups for particular levels. The second component is the Escape feature on the level. True means it's represented by <, False, by >.Game mode specification.a symbolshort descriptionfrequency within groupsplayers taking part in the gamearena of the game description)Catch invalid game mode kind definitions. Checks, in particular, that there is at least one faction with fneverEmpty or the game would get stuck as soon as the dungeon is devoid of actors."Validate game mode kinds together.5     5           None "#$V^j;4Operations for all content types, gathered together.D#Create content operations for type a% from definition of content of type a.E/The standard ruleset used for level operations.;<=>?@ABCDE;<=>?@ABCDE;<=>?@ABCNone "#$<V^j& K*Whether a tile kind has the given feature.L@Whether a tile kind (specified by its id) has the given feature.MCWhether a tile does not block vision. Essential for efficiency of FOV, hence tabulated.NUWhether a tile has ambient light --- is lit on its own. Essential for efficiency of  Perception, hence tabulated.O_Whether actors can walk into a tile. Essential for efficiency of pathfinding, hence tabulated.PdWhether a tile is a door, open or closed. Essential for efficiency of pathfinding, hence tabulated.QWhether a tile is changable.RUWhether a tile is suspect. Essential for efficiency of pathfinding, hence tabulated.Y`Whether a tile kind (specified by its id) has an OpenTo feature and reasonable alter min skill.\Whether one can easily explore a tile, possibly finding a treasure, either spawned there or dropped there by a (dying from poison) foe. Doors can't be explorable since revealing a secret tile should not change it's (walkable and) explorable status. Door status should not depend on whether they are open or not so that a foe opening a door doesn't force us to backtrack to explore it. Still, a foe that digs through a wall will affect our exploration counter and if content lets walls contain threasure, such backtraking makes sense.f@Whether a tile kind (specified by its id) has an OpenTo feature.g@Whether a tile kind (specified by its id) has a CloseTo feature. HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg KLMNOPQRST\UVWXY]Z[^_`abcdefgHIJNone "#$6KV^j hWAll items in the dungeon (including in actor inventories), indexed by item identifier.oHGame items in actor possesion or strewn around the dungeon. The fields jsymbol, jname and jflavourt make it possible to refer to and draw an unidentified item. Full information about item is available through the jkindIx) index as soon as the item is identified.q&index pointing to the kind of the itemr$lowest level the item was created ats)the faction that created the item, if anyt map symbolu generic namevflavourwpublic propertiesxweight in grams, obvious enoughy'impact damage of this particular weaponJThe map of item ids to item aspects. The full map is known by the server.A seed for rolling aspects of an item Clients have partial knowledge of how item ids map to the seeds. They gain knowledge by identifying items.Fields are intentionally kept non-strict, because they are recomputed often, but not used every time. The fields are, in order: 1. whether the item should be kept in equipment (not in pack nor stash) 2. the total benefit from picking the item up (to use or to put in equipment) 3. the benefit of applying the item to self 4. the (usually negative) benefit of hitting a foe in meleeing with the item 5. the (usually negative) benefit of flinging an item at an opponent]The map of item kind indexes to item kind ids. The full map, as known by the server, is 1-1.An index of the kind id of an item. Clients have partial knowledge how these idexes map to kind ids. They gain knowledge by identifying items..A unique identifier of an item in the dungeon./Price an item, taking count into consideration.Lhijklmnopqrstuvwxyz{|}~Lopqrstuvwxylmnz{|}~kjih lmno pqrstuvwxyz{|}~   None "#$V^jd None "#$6V^j'5All actors on the level, indexed by actor identifier. resource change this player turn resource change last player turn`Actor properties that are changing throughout the game. If they are dublets of properties from  ActorKindY, they are usually modified temporarily, but tend to return to the original value from  ActorKind over time. E.g., HP.current hit points * 1MHP delta this turn * 1Mcurrent calm * 1Mcalm delta this turn * 1Mcurrent positionprevious position, if any current level&faction the actor currently belongs to8trajectory the actor must travel and his travel speedorganspersonal equipmentpersonal inventory pack&number of weapons among eqp and organsis the actor waiting right now?Eis a projectile? (shorthand only, this can be deduced from btrunk) Chance that a new monster is generated. Currently depends on the number of monsters already present, and on the level. In the future, the strength of the character and the strength of the monsters present could further influence the chance, and the chance could also affect which monster is generated. How many and which monsters are generated will also depend on the cave kind used to build the level. A template for a new actor.0Whether an actor is braced for combat this clip.The actor waited last turn.5How long until an actor's smell vanishes from a tile.*W     *W     !None "#$V^jH"+A view on single, inhabited dungeon level.  RememberedC fields carry a subset of the info in the client copies of levels.$absolute depth of the level%#remembered items lying on the floor&items embedded in the tile'%seen actors at positions on the level(remembered level map)width of the level*height of the level+remembered smells on the level,level description-positions of (up, down) stairs. currently remembered clear tiles/ total number of explorable tiles0)local time on the level (possibly frozen)1"the lower, the more monsters spawn2+frequency of spawned actors; [] for clients3&number of initial items, 0 for clients4*frequency of initial items; [] for clients5positions of IK.Escape tiles7Current smell on map tiles.8Tile kinds on the map.9Items located on map tiles.:Items located on map tiles.;9The complete dungeon is a map from level names to levels.<Levels in the current branch, k# levels shallower than the current.=XCompute the level identifier and stair position on the new level, after a level change.FWe assume there is never a staircase up and down at the same position.> Query for tile kinds on the map.?9Find a random position on the map satisfying a predicate.@9Find a random position on the map satisfying a predicate.A@Try to find a random position on the map satisfying conjunction of the mandatory and an optional predicate. If the permitted number of attempts is not enough, try again the same number of times without the next optional predicate, and fall back to trying as many times, as needed, with only the mandatory predicate.=level of the stairsposition of the stairsoptional forced directioncurrent game dungeon5destination level and the pos of its receiving stairsAthe number of trieslook up in this mapmandatory predicateoptional predicatesBthe number of trieslook up in this mapmandatory predicateoptional predicatesgood to have predicateworst case predicates#XZ"#)*$-%&'(+,./0123456789:;<=>?@AB#ZX;<="#$%&'()*+,-./0123456:987>?@AB"#$%&'()*+,-./0123456"None "#$V^jSFJSuffix to append to a basic content name if the content causes the effect.&We show absolute time in seconds, not moves, because actors can have different speeds (and actions can potentially take different time intervals). We call the time taken by one player move, when walking, a move. Turn and clipY are used mostly internally, the former as an absolute time unit. We show distances in stepsY, because one step, from a tile to another tile, is always 1 meter. We don't call steps tilesI, reserving that term for the context of terrain kinds or units of area. FGHIJKLMNO FMLONGHIJK#None "#$6V^jk{R)game difficulty level (HP bonus or malus)S1lone wolf challenge (only one starting character)T-cold fish challenge (no healing from enemies)V(last seen position of the targeted actorWin TPoint (TEmbed bag p) _ q usually bag is embbedded in p and q is an adjacent open tile]The type of na actor target.^Dtarget an actor; cycle only trough seen foes, unless the flag is set_target a concrete spot`!target position relative to actoraCurrent game status.ccurrent game outcomeddepth of the final encounterenew game group to start, if anygGDiplomacy states. Higher overwrite lower in case of asymmetric content.nindividual nameocolor of actors or their framesp the player spec for this factionqinitial actorsrdiplomatic modescause of game end/exittGthe leader of the faction; don't use in place of _sleader on clientsufaction's shared inventoryvmembers killedw=members killed in the past, by game mode and difficulty levelx8All factions in the game, indexed by faction identifier.z;Tell whether the faction consists of summoned horrors only.YHorror player is special, for summoned actors that don't belong to any of the main players of a given game. E.g., animals summoned during a skirmish game between two hero factions land in the horror faction. In every game, either all factions for which summoning items exist should be present or a horror player should be added to host them./Check if factions are at war. Assumes symmetry./Check if factions are allied. Assumes symmetry.8[PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8[xlmnopqrstuvwghijkabcde]^_`UVWXYZ[\PQRSTyz{|}~fPQRSTUVWXYZ[\]^_`abcdeghijkl mnopqrstuvw$None"#$&'-06FV^jq1KClient-server requests that take game time. Sent by both AI and UI clients.*Client-server requests sent by UI clients.*Client-server requests sent by AI clients.CC" %None "#$6KV^jzBPerception indexed by faction identifier. This can't be added to  FactionDict3, because clients can't see it for other factions.<Perception of a single faction, indexed by level identifier.=The type representing the perception of a faction on a level.Smelled positions.Visible positions..The set of tiles visible by at least one hero.,The set of tiles smelt by at least one hero.&None "#$6KV^j 1A dictionary from game mode IDs to scores tables.(The list of scores, in decreasing order.A single score record. Records are ordered in the highscore table, from the best to the worst, in lexicographic ordering wrt the fields below.  the score )game time spent (negated, so less better) "date of the last game interruption reason of the game interruption challenge setup of the game name of the faction's gplayer  allies lost  foes killedIShow a single high score, from the given ranking in the high score table.Empty score table qInsert a new score into the table, Return new table and the ranking. Make sure the table doesn't grow too large.&Register a new score in a score table. jShow a screenful of the high scores table. Parameter height is the number of (3-line) scores to be shown. 8Produce a couple of renderings of the high scores table.:Generate a slideshow with the current and previous scores.  old table the total value of faction itemsgame time spentreason of the game interruption current datechallenge setupname of the faction's gplayer allies lost foes killedcurrent score table*position of the current score in the tablethe name of the game mode"the timezone where the game is run      'None "#$V^jView on game state.  Rememberedl fields carry a subset of the info in the client copies of the state. Clients never directly change their State7, but apply atomic actions sent by the server to do so. remembered dungeon )absolute dungeon depth, for item creation  remembered actors in the dungeon remembered items in the dungeon remembered sides still in game %global game time, for UI display only remembered content high score table current game mode#Initial complete global game state. Initial empty state.!QLocal state created by removing secret information from global state components."!Update dungeon data within state.#Update dungeon depth.$Update the actor dictionary.%Update the item dictionary.&!Update faction data within state.' Update global time within state.(!Update content data within state. !"#$%&'()*+,-./01)*+,-./01 !"#$%&'( (None "#$V^jB `The part of speech describing the item parameterized by the number of effects/aspects to show..6'The part of speech describing the item. 56789:;<=> 6789:;<=>5)None "#$QV^jCColor mode for the display.Dnormal, with full coloursEblack+white onlyMSplit a string into lines. Avoids ending the line with a character other than whitespace or punctuation. Space characters are removed from the start, but never from the end of lines. Newlines are respected.?@ABCDEFGHIJKLMNOPQGHIJKLMNOPFCDEB?@AQ?@ACDEL6*None "#$6KV^jSAThe history of reports. This is a ring buffer of the given lengthTEThe set of messages, with repetitions, to show at the screen at once.V"The type of a single game message. )the colours and characters of the message -whether message should be recorded in historyYEmpty set of messages.Z%Test if the set of messages is empty.[&Construct a singleton set of messages.\@Add a message to the end of report. Deletes old prompt messages.]`Add a message to the end of report. Does not delete old prompt messages nor handle repetitions.^*Render a report as a (possibly very long) G.b5Empty history of reports of the given maximal length.c.Add a report to history, handling repetitions.h<Render history as many lines of text, wrapping if necessary.STUVWXYZ[\]^_`abcdefghVWXUTYZ[\]^_`aSbcdefghS T U V +None "#$V^ju-Sequences of screen frames, including delays.vAn overlay that fits on the screen (or is meant to be truncated on display) and is padded to fill the whole screen and is displayed as a single game screen frame.Note that we don't provide a list of color-highlighed positions separately, because overlays need to obscure not only map, but the highlights as well. Truncate the overlay: for each line, if it's too long, it's truncated and if there are too many lines, excess is dropped and warning is appended. sAdd a space at the message end, for display overlayed over the level map. Also trim (do not wrap!) too long lines.zOverlays either the game map only or the whole empty screen frame. We assume the lines of the overlay are not too long nor too many.uvwxyz{vwxuyz{vwx,None "#$V^jEmpty the keyboard channel.)Translates modifiers to our own encoding.~~~-None "#$V^jDThe name of the frontend.%Set up the frontend input and output.&Output to the screen via the frontend.the screen frame to drawwNone "#$V^j (Session data maintained by the frontend.The name of the frontend.:Set up and start the main loop providing input and output.:Apparently some SDL backends are not thread-safe (https:/wiki.libsdl.org-FAQDevelopment), so we stick to main thread. Add a frame to be drawn. 9Translates modifiers to our own encoding, ignoring Shift. frontend session datathe screen frame to draw frontend session datathe screen frame to draw  .None "#$V^jΟ/None"#$&'FQV^jo Connection channel between a frontend and a client. Frontend acts as a server, serving keys, etc., when given frames to display.5The instructions sent by clients to the raw frontend. Show a frame..Perform an explicit delay of the given length.5Flush frames, display a frame and ask for a keypress.Inspect the fkeyPressed MVar.#discard a key in the queue, if any.Add a key to the queue.7set in the frontend that it should auto-answer prompts.shut the frontend down.Display a prompt, wait for any of the specified keys (for any key, if the list is empty). Repeat if an unexpected key received.?Read UI requests from the client and send them to the frontend, The name of the chosen frontend.  0None "#$V^j Animation is a list of frame modifications to play one by one, where each modification if a map from positions to level map symbols.+Render animations on top of a screen frame.GAttack animation. A part of it also reused for self-damage and healing.!Attack that hits through a block.Attack that is blocked.$Death animation for an organic body.GDeath animation for an organic body, short version (e.g., for enemies).Mark actor location animation.Actor teleport animation.1Swap-places animation, both hostile and friendly.   1None "#$6V^jcindividual map symbolindividual nameindividual pronounindividual map color(The part of speech describing the actor.0The part of speech containing the actor pronoun. ATries to finds an actor body satisfying a predicate on any level.2None "#$V^jHow much AI benefits from applying the effect. The first component is benefit when applied to self, the second is benefit (preferably negative) when applied to enemy. This represents benefit from using the effect every  avgItemDelayy turns, so if the item is not durable, the value is adjusted down elsewhere. The benefit includes the drawback of having to use the actor's turn, except when there is battle and item is a weapon and so there is usually nothing better to do than to melee, or when the actor is stuck or idle or laying in wait or luring an enemy from a safe distance. So there is less than averageTurnValue included in each benefit, so in case when turn is not spent, e.g, periodic or temporary effects, the difference in value is only slight.3None "#$NV^j+Calculate loot's worth for a given faction.wChecks if the actor is present on the current level. The order of argument here and in other functions is set to allow b <- getsState (memActor a)'Get current time from the dungeon data.wDetermine the dungeon level of the container. If the item is in a shared stash, the level depends on which actor asks.Require that any non-dying foe is adjacent. We include even projectiles that explode when stricken down, because they can be caught and then they don't explode, so it makes sense to focus on handling them. If there are many projectiles in a single adjacent position, we only test the first one, the one that would be hit in melee (this is not optimal if the actor would need to flee instead of meleeing, but fleeing with *many* projectiles adjacent is a possible waste of a move anyway).,,4None "#$NV^j     5None "#$V^j [qAssigns a slot to an item, for inclusion in the inventory of a hero. Tries to to use the requested slot, if any.           6None "#$V^j ]  !"#$%&'  !"#$%&' 7None "#$V^j-#Update the items on the ground map. 1Update the items embedded in a tile on the level..$Update the actors on the ground map.0Update the tile map.1Update the smell map.2'Update a given level data within state.*+,-./012345678*+,2345678-./01*+8None "#$6V^j@#Abstract syntax of player commands.NCommands that are forbidden on a remote level, because they would usually take time when invoked on one, but not necessarily do what the player expects. Note that some commands that normally take time are not included, because they don't take time in aiming mode or their individual sanity conditions include a remote level check.r9:;>=<?@wSq`bABCDEFGHIJKLMNOPQRTUVWXYZ[\]^_acdefghijklmnoprstuvxyz{|}~t@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~9:;<=><=?9:;<=><=?@MABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  9None "#$V^j+Key-command mappings to be used for the UI.default client UI commands:None "#$6<V^j!<TFully typed contents of the UI config file. This config is a part of a game client.(the option for Vi keys takes precendence'because the laptop keys are the defaultRead and parse UI config file.;None "#$NV^j):;Bindings and other information about human player commands.binding of keys to commands:the properly ordered list of commands for the help menuand from commands to their keysiBinding of keys to movement and other standard commands, as well as commands defined in the config file.4Produce a set of help screens from the key bindings.%default key bindings from the content game configconcrete binding<None "#$KV^j@&Parameters of the current run."the original leader from run start!the list of actors that take partHinitial run continuation by any run participant, including run leader!message with the next stop reason )waiting for others to move out of the way  Current aiming mode of a client. The information that is used across a client playing session, including many consecutive games in a single session. Some of it is saved, some is reset when a new playing session starts. An important component is a frontend session.the common xhairassigned actor UI presentationsmap from slots to itemslast used slotlast item move storesconnection with the frontendbinding of keys to commands aiming modelast mouse aiming not vacuusselected item, if any$the set of currently selected actors%parameters of the current run, if anycurrent messageshistory of messagesmouse pointer positionstate of key sequence recording state of key sequence playback!!actors that just got out of sight""player just waited this many times#mark leader and party FOV$#mark smell, if the leader can smell%indices of last used menu items&%something to display on current level''how to show keys hints when no messages(this session start time)this game start time*1clips from start of session to current game start+this game current frame count,7frame count from start of session to current game start- Initial empty game client state.3      !"#$%&'()*+,-./03  !"#$%&'()*+,-    ./0      !"#$%&'()*+,=None "#$6V^jKNAbstract syntax of atomic special effects, that is, atomic commands that only display special effects and don't change the state.[ Abstract syntax of atomic updates, that is, atomic commands that really change the state. Most of them are an encoding of a game state diff, though they also carry some intentional hints that help clients determine whether and how to communicate them to players.PAbstract syntax of atomic commands, that is, atomic game state transformations.atomic updatesatomic special effectsW:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~W[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NOPQRSTUVWXYZ:;<=>?@ABCDEFGHIJKLM:;<=>?@ABCDEFGHIJKLMN OPQRSTUVWXYZ[/\]^_`abcdefghijklmnopqrstuvwxyz{|}~>None "#$V^jsThe type representing visibility of atomic commands to factions, based on the position of the command, etc. Note that the server sees and smells all positions.(whomever sees all the positions, notices observers and the faction notice*whomever smells all the positions, noticesonly the faction noticesfaction and server noticesonly the server noticeseverybody notices$never broadcasted, but sent manually:Produce the positions where the atomic update takes place.The goal of the mechanics is to ensure the commands don't carry significantly more information than their corresponding state diffs would. In other words, the atomic commands involving the positions seen by a client should convey similar information as the client would get by directly observing the changes the commands enact on the visible portion of server game state. The client is then free to change its copy of game state accordingly or not --- it only partially reflects reality anyway.E.g., UpdDisplaceActor in a black room, with one actor carrying a 0-radius light would not be distinguishable by looking at the state (or the screen) from  UpdMoveActor' of the illuminated actor, hence such UpdDisplaceActor should not be observable, but  UpdMoveActor should be (or the former should be perceived as the latter). However, to simplify, we assign as strict visibility requirements to  UpdMoveActor as to UpdDisplaceActor and fall back to  UpdSpotActora (which provides minimal information that does not contradict state) if the visibility is lower.BProduce the positions where the atomic special effect takes place.Decompose an atomic action. The decomposed actions give reduced information that still modifies client's state to match the server state wrt the current FOV and the subset of  posUpdAtomic that is visible. The original actions give more information not only due to spanning potentially more positions than those visible. E.g.,  UpdMoveActoru informs about the continued existence of the actor between moves, v.s., popping out of existence and then back in.fGiven the client, it's perception and an atomic command, determine if the client notices the command.CGenerate the atomic updates that jointly perform a given item move.?None "#$V^jw:The monad for executing atomic game state transformations.8Execute an atomic command that really changes the state.=Execute an atomic command that only displays special effects.@None "#$V^j DThe game-state semantics of atomic game commands. Special effects ( SfxAtomic) don't modify state.Creates an actor. Note: after this command, usually a new leader for the party should be elected (in case this actor is the only one alive).Kills an actor.OCreate a few copies of an item that is already registered for the dungeon (in sitemRev field of  StateServer).2Destroy some copies (possibly not all) of an item.]Record a given number (usually just 1, or -1 for undo) of actor kills for score calculation.mAlter an attribute (actually, the only, the defining attribute) of a visible tile. This is similar to e.g.,  UpdTrajectory.For now, we don't remove embedded items when altering a tile and neither do we create fresh ones. It works fine, e.g., for tiles on fire that change into burnt out tile and then the fire item can no longer be triggered due to alterMinSkillKind excluding items without Embed), even if the burnt tile has low enough talter. Age the game.xNone "#$V^jk*+:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~k[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NOPQRSTUVWXYZ:;<=>?@ABCDEFGHIJKLM*+ANone "#$V^ji:Connection channel between the server and a single client.>Abstract syntax of client commands for both AI and UI clients.  BNone "#$6V^jClient state, belonging to a single faction. Some of the data, e.g, the history, carries over from game to game, even across playing sessions.When many actors want to fling at the same target, they set their personal targets to follow the common xhair. When each wants to kill a fleeing enemy they recently meleed, they keep the enemies as their personal targets.Data invariant: if _sleader is Nothing then so is srunning.&a parameter of the aiming digital line$targets of our actors in the dungeon the set of fully explored levelsJpathfinding distances for our actors and paths to their targets, if any!atomic commands performed to dateremembered item discoveriesremembered aspects of itemsremembered AI benefits of itemsbest known actor aspect data$faction perception indexed by levels'cached alter ability data for positionscurrent random generatorJcandidate new leader of the faction; Faction._gleader is the old leader faction controlled by the clientexit the game loopcurrent game challenge setupnext game challenge setupnext game scenario number mark suspect features %condInMelee value, unless invalidated )won games at particular difficulty levels client debugging mode  Initial empty game client state. -Update target parameters within client state. (Get target parameters from client state. :Update picked leader within state. Verify actor's faction.(         (            CNone "#$V^j' FInvoke pseudo-random computation with the generator kept in the state. GInvoke pseudo-random computation, don't change generator kept in state.                               DNone "#$-V^j 'Get the current perception of a client. ,Calculate the position of an actor's target. Counts the number of steps until the projectile would hit an actor or obstacle. Starts searching with the given eps and returns the first found eps for which the number reaches the distance between actor and target position, or Nothing if none can be found.     ! " # $ % & ' (     ! " # $ % & ' (ENone "#$NV^j- 5JGet cached BFS array and path or, if not stored, generate and store first. 6AGet cached BFS array or, if not stored, generate and store first. 7@Get cached BFS path or, if not stored, generate and store first. :$Furthest (wrt paths) known position. ;0Closest reachable unknown tile position, if any.Note: some of these tiles are behind suspect tiles and they are chosen in preference to more distant directly accessible unknown tiles. This is in principle OK, but in dungeons with few hidden doors AI is at a disadvantage (and with many hidden doors, it fares as well as a human that deduced the dungeon properties). Changing Bfs to accomodate all dungeon styles would be complex and would slow down the engine.nIf the level has inaccessible open areas (at least from the stairs AI used) the level will be nevertheless here finally marked explored, to enable transition to other levels. We should generally avoid such levels, because digging and/or trying to find other stairs leading to disconnected areas is not KISS so we don't do this in AI, so AI is at a disadvantage. <Finds smells closest to the actor, except under the actor, because actors consume smell only moving over them, not standing. Of the closest, prefers the newest smell. >WClosest (wrt paths) AI-triggerable tiles with embedded items. In AI, the level the actor is on is either explored or the actor already has a weapon equipped, so no need to explore further, he tries to find enemies on other levels, but before that, he triggers other tiles in hope of some loot or beneficial effect to enter next level with. ?Check whether the actor has enough gear to go look for enemies. We assume weapons in equipment are better than any among organs or at least provide some essential diversity. Disabled if, due to tactic, actors follow leader and so would repeatedly move towards and away form stairs at leader change, depending on current leader's gear. Number of items of a single kind is ignored, because variety is needed. AClosest (wrt paths) items. B!Closest (wrt paths) enemy actors. ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B 0 1 2 3 9 5 6 7 8 @ ; < : ) * + , - . / = > A B ? 4 ) * + , - . /FNone "#$V^jR E6Require that the target enemy is visible by the party. FARequire that the target enemy is remembered on the actor's level. G!Check if the target is nonmoving. HeRequire that any non-dying foe is adjacent, except projectiles that (possibly) explode upon contact. IGRequire the actor stands adjacent to a triggerable tile (e.g., stairs). J(Produce the chess-distance-sorted list of non-low-HP, melee-cabable foes on the level. We don't consider path-distance, because we are interested in how soon the foe can close in to hit us, which can diverge greately from path distance for short distances, e.g., when terrain gets revealed. We don't consider non-moving actors, because they can't chase us and also because they can't be aggresive so to resolve the stalemate, the opposing AI has to be aggresive by ignoring them and then when melee is started, it's usually too late to retreat. K?Require the actor blocks the paths of any of his party members. LCRequire the actor stands over a weapon that would be auto-equipped. M3Check whether the actor has no weapon in equipment. N-Require that the actor can project any items. P^Produce the list of items with a given property available to the actor and the items' values. R4Require that the actor stands over a desirable item. SUProduce the list of items on the ground beneath the actor that are worth picking up. V^Require that the actor stands in the dark and so would be betrayed by his own equipped light, W8Produce a list of acceptable adjacent points to flee to. E F G H I J K L M N O P Q R S T U V W E F G H I K L M N O R U P Q S T J V WGNone "#$NV^j XVerify and possibly change the target of an actor. This function both updates the target in the client state and returns the new target explicitly. Y8AI proposes possible targets for the actor. Never empty. X Y X YHNone "#$V^jb Z [ Z [INone "#$-V^j ]=AI strategy based on actor's sight, smell, etc. Never empty. ^A strategy to always just wait. i&The level the actor is on is either explored or the actor already has a weapon equipped, so no need to explore further, he tries to find enemies on other levels. We don't verify any embedded item is targeted by the actor, but at least the actor doesn't target a visible enemy at this point. rActor moves or searches or alters or attacks. This function is very general, even though it's often used in contexts when only one or two of the many cases can possibly occur. \ ] ^ _ ` a b c d e f g h i j k l m n o p q r ] \ ^ _ ` a b c d e f g h i j k l m n o p q r \ JNone "#$&'V^j tBHandle the move of an actor under AI control (of UI or AI player). v0Pick an action the actor will perform this turn. xCheck if any non-dying foe (projectile or not) is adjacent to any of our normal actors (whether they can melee or just need to flee, in which case alert is needed so that they are not slowed down by others). t u v w x t u v w xKNone "#$V^j yClients keep a subset of atomic commands sent by the server and add some of their own. The result of this function is the list of commands kept for each command received. zrEffect of atomic actions on client state is calculated with the global state from before the command is executed. y z z yLNone "#$V^j <The type of areas. The bottom left and the top right points. /Checks if it's an area with at least one field. `Divide uniformly a larger area into the given number of smaller areas overlapping at the edges.When a list of fixed centers (some important points inside) of (non-overlapping) areas is given, incorporate those, with as little disruption, as possible. 7Shrink the given area on all fours sides by the amount. { | } ~   { | } ~ { | } ~  MNone "#$V^j( 4The coordinates of consecutive fields of a corridor. 2The choice of horizontal and vertical orientation. #Pick a random point within an area. ICreate a void room, i.e., a single point area within the designated area. 3Create a random room according to given parameters. Pick a subset of connections between adjacent areas within a grid until there is only one connected component in the graph of all areas. DSort the sequence of two points, in the derived lexicographic order. EPick a single random connection between adjacent areas within a grid. Create a corridor, either horizontal or vertical, with a possible intermediate part that is in the opposite direction. There might not always exist a good intermediate point if the places are allowed to be close together and then we let the intermediate part degenerate. Try to connect two interiors of places with a corridor. Choose entrances some steps away from the edges, if the place is big enough. Note that with pfence == FNone^, the inner area considered is the strict interior of the place, without the outermost tiles.The corridor connects (touches) the inner areas and the turning point of the corridor (if any) is outside of the outer areas and inside the grid areas.  minimum size maximum size(the containing area, not the room itself  maximum size(the containing area, not the room itselfthe center point #orientation of the starting sectionstarting pointstarting is inside FGround or FFloor ending pointending is inside FGround or FFloor*the area containing the intermediate point!straight sections of the corridor   NNone "#$QV^jB The map of tile kinds in a place (and generally anywhere in a cave). The map is sparse. The default tile that eventually fills the empty spaces is specified in the cave kind specification with cdefTile. \The parameters of a place. All are immutable and set at the time when a place is generated. For  CAlternate0 tiling, require the place be comprised of an even number of whole corners, with exactly one square overlap between consecutive coners and no trimming. For other tiling methods, check that the area is large enough for tiling the corner twice in each direction, with a possible one row/column overlap. "Calculate interior room area according to fence type, based on the total area for the room and it's fence. This is used for checking if the room fits in the area, for digging up the place and the fence and for deciding if the room is dark or lit later in the dungeon generation process. -Given a few parameters, roll and construct a  9 datastructure and fill a cave section acccording to it. ERoll a legend of a place plan: a map from plan symbols to tile kinds. ;Construct a fence around an area, with the given tile kind. <Construct a fence around an area, with the given tile group. "Create a place by tiling patterns. the area to fillthe place kind to construct the game contentcurrent cave kindwhether the cave is dark dark fence tile, if fence hollowlit fence tile, if fence hollowcurrent level depthabsolute depthsecret tile seed'whole area of the place, fence included optional fixed place group the area to fillthe place kind to construct    ONone "#$V^jJ 5The type of caves (not yet inhabited dungeon levels). the kind of the cave secret tile seed tile kinds in the cave places generated in the cave whether the cave is dark ?Cave generation by an algorithm inspired by the original Rogue, content definitionsdepth of the level to generateabsolute depthsecret tile seedcave kind to use for generationpos of stairs, etc.   PNone "#$V^jO 0Freshly generated and not yet populated dungeon. maps for all levels absolute dungeon depth Create a level from a cave. `Places yet another staircase (or escape), taking into account only the already existing stairs. )Build rudimentary level from a cave kind. $Generate the dungeon for a new game.   QNone "#$V^jo# 0The area left to be scanned, delimited by edges. LAn edge (comprising of a line and a convex hull) of the area to be scanned. ,Convex hull represented as a list of points. Straight line between points. Rotated and translated coordinates of 2D points, so that the points fit in a single quadrant area (e, g., quadrant I for Permissive FOV, hence both coordinates positive; adjacent diagonal halves of quadrant I and II for Digital FOV, hence y positive). The special coordinates are written using the standard mathematical coordinate setup, where quadrant I, with x and y positive, is on the upper right. ;Progress along an arc with a constant distance from (0, 0). 4Distance from the (0, 0) point where FOV originates. !Calculates the list of tiles, in BumpA coordinates, visible from (0, 0), within the given sight range. Check if the line from the second point to the first is more steep than the line from the third point to the first. This is related to the formal notion of gradient (or angle), but hacked wrt signs to work fast in this particular setup. Returns True for ill-defined lines. Extends a convex hull of bumps with a new bump. Nothing needs to be done if the new bump already lies within the hull. The first argument is typically  5, optionally negated, applied to the second argument. <Create a line from two points. Debug: check if well-defined. Compare steepness of (p1, f) and (p2, f)D. Debug: Verify that the results of 2 independent checks are equal. The X coordinate, represented as a fraction, of the intersection of a given line and the line of diagonals of diamonds at distance d from (0, 0). Debug functions for DFOV:EDebug: calculate steeper for DFOV in another way and compare results. 5Debug: check if a view border line for DFOV is legal. visiblity distancecoordinate transformation a comparison functiona new bump to consider,a convex hull of bumps represented as a list     RNone "#$V^js 3Level positions with tiles that have ambient light. 3Level positions that pass through light and vision. ELevel positions with either ambient light or shining items or actors. {Map from level positions that currently hold item or actor(s) with shine to the maximum of radiuses of the shining lights.Note:  ActorAspect and FovShine shoudn't be in State, because on client they need to be updated every time an item discovery is made, unlike on the server, where it's much simpler and cheaper. BTW, floor and (many projectile) actors light on a single tile should be additive for FovShine to be incrementally updated.FovShine should not even be kept in  StateServer., because it's cheap to compute, compared to FovLucid; and invalidated almost as often (not invalidated only by  UpdAlterTile). ;Server cache of perceptions, indexed by faction identifier. NServer cache of perceptions of a single faction, indexed by level identifier. Visually reachable positions (light passes through them to the actor). They need to be intersected with lucid positions to obtain visible positions. /Main perception validity map, for all factions. fCompute positions visible (reachable and seen) by the party. A position is lucid, if it's lit by an ambient light or by a weak, portable light source, e.g,, carried by an actor. A reachable and lucid position is visible. Additionally, positions directly adjacent to an actor are assumed to be visible to him (through sound, touch, noctovision, whatever). Compute positions reachable by the actor. Reachable are all fields on a visually unblocked path from the actor position. Also compute positions seen by noctovision and perceived by smell. Update lights on the level. This is needed every (even enemy) actor move to show thrown torches. We need to update lights even if cmd doesn't change any perception, so that for next cmd that does, but doesn't change lights, and operates on the same level, the lights are up to date. We could make lights lazy to ensure no computation is wasted, but it's rare that cmd changed them, but not the perception (e.g., earthquake in an uninhabited corner of the active arena, but the we'd probably want some feedback, at least sound). Compute all dynamically lit positions on a level, whether lit by actors or shining floor items. Note that an actor can be blind, in which case he doesn't see his own light (but others, from his or other factions, possibly do). >Calculate the perception and its caches for the whole dungeon. "Calculate perception of a faction. Perform a full scan for a given position. Returns the positions that are currently in the field of view. The Field of View algorithm to use is passed in the second argument. The actor's own position is considred reachable by him. the array with clear pointsscanning radiusposition of the spectator5    5             SNone "#$KV^j, ,The essential item properties, used for the ItemRev hash table from items to their ids, needed to assign ids to newly generated items. All the other meaningul properties can be derived from them. Note 1: jlid is not meaningful; it gets forgotten if items from different levels roll the same random properties and so are merged. However, the first item generated by the server wins, which is most of the time the lower jlid2 item, which makes sense for the client. Note 2: ItemSeed instead of  AspectRecordA is not enough, becaused different seeds may result in the same  AspectRecordB and we don't want such items to be distinct in UI and elsewhere. VReverse item map, for item creation, to keep items and item identifiers in bijection. GFlavours assigned by the server to item kinds, in this particular game. <The map of item ids to item seeds, needed for item creation. The reverse map to  DiscoveryKind, needed for item creation. #Build an item with the given stats.  Generate an item based on level. Assigns flavours to item kinds. Assures no flavor is repeated for the same symbol, except for items with only one permitted flavour. :Randomly chooses flavour for all item kinds for this game.                        TNone "#$V^j 'Debug commands. See yz for the descriptions. ;Global, server state. =absolute times of next actions >full item kind discoveries data ?#reverse map, used for item creation @already generated unique items Afull item aspect data Bmap from item ids to item seeds C&reverse id map, used for item creation Dassociation of flavour to items Estores next actor index Fstores next item index H!atomic commands performed to date Iperception of all factions J$perception validity for all factions K perception cache of all factions Lfull actor aspect data M"ambient or shining light positions Nclear tiles positions Oambient light positions P active arenas Qwhether active arenas valid Rcurrent random generator Sinitial random generators Texit the game loop Uwrite savegame to a file now Vcurrent debugging mode W debugging mode for the next game Z!Initial, empty game server state.: " # $ % & ' ( : ) * + , - . / 0 1 2 3 4 5 6 7 8 9 ; < H > A L R T = ? @ B C D E F G I J K M N O P Q S U V W X Y Z [: ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Z ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : [ # $ % & " X Y # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V WUNone "#$V^j b9Parse server debug parameters from commandline arguments. b b{Safe "#$V^j^ VNone "#$V^j eARepeatedly save a simple serialized version of the current state. ghRestore a saved game, if it exists. Initialize directory structure and copy over data files, if needed. c d e f g h i c d f g h i eWNone "#$V^jϓ u6Dumps RNG states from the start of the game to stdout. vCRead the high scores dictionary. Return the empty table if no file. w+Generate a new score, register it and save. xFInvoke pseudo-random computation with the generator kept in the state. yNGets a random generator from the arguments or, if not present, generates one. j k l m n o p q r s t u v w x y j k l m n o p q r s t u v w x y j k l m nXNone "#$V^jt -Mapping over actor's items from a give store. z { | } ~   { | z } ~  YNone "#$V^j rEffect of atomic actions on server state is calculated with the global state from before the command is executed.  ZNone "#$V^j$   [None "#$NV^j 2Tell whether a faction that we know is still in game, keeps arena. Keeping arena means, if the faction is still in game, it always has a leader in the dungeon somewhere. So, leaderless factions and spawner factions do not keep an arena, even though the latter usually has a leader for most of the game. 7Create a projectile actor containing the given missile..Projectile has no organs except for the trunk. -actor projecting the item (is on current lvl)!target position of the projectiledigital line parameterthe item to be projected/whether the items comes from floor or inventorywhether the item is a blast -actor projecting the item (is on current lvl) starting point of the projectile(rest of the trajectory of the projectilethe item to be projected/whether the items comes from floor or inventorywhether the item is a blast  \None "#$V^j TFind starting postions for all factions. Try to make them distant from each other. Place as many of the factions, as possible, over stairs, starting from the end of the list, including placing the last factions over escapes (we assume they are guardians of the escapes). This implies the inital factions (if any) start far from escapes. /Apply debug options that don't need a new game.  ]None "#$V^j fSpawn, possibly, a monster according to the level's actor groups. We assume heroes are never spawned. )Advance the move time for the given actor OSwap the relative move times of two actors (e.g., when switching a UI leader).  ^None "#$NV^j The source actor affects the target actor, with a given item. If any of the effects fires up, the item gets identified. This function is mutually recursive with effect and so it's a part of Effect semantics.Note that if we activate a durable item, e.g., armor, from the ground, it will get identified, which is perfectly fine, until we want to add sticky armor that can't be easily taken off (and, e.g., has some maluses). The source actor affects the target actor, with a given effect and power. Both actors are on the current level and can be the same actor. The item may or may not still be in the container. The boolean result indicates if the effect actually fired up, as opposed to fizzled. The faction leaves the dungeon. aAdvance target actor time by this many time clips. Not by actor moves, to hurt fast actors more. }Give target actor the given number of extra moves. Don't give an absolute amount of time units, to benefit slow actors more. XTeleport the target actor. Note that projectiles can be teleported, too, for extra fun. Make the target actor drop all items in a store from the given group (not just a random single item, or cluttering equipment with rubbish would be beneficial). Drop a single actor's item. Note that if there are multiple copies, at most one explodes to avoid excessive carnage and UI clutter (let's say, the multiple explosions interfere with each other or perhaps larger quantities of explosives tend to be packaged more safely). MSend the target actor flying like a projectile. The arguments correspond to ToThrow and Linger properties of items. If the actors are adjacent, the vector is directed outwards, if no, inwards, if it's the same actor, boldpos is used, if it can't, a random outward vector of length 10 is picked. 3Make the target actor drop his best weapon (stack). Activate all items with the given symbol in the target actor's equipment (there's no variant that activates a random one, to avoid the incentive for carrying garbage). Only one item of each stack is activated (and possibly consumed).  _None "#$&'V^j/9 LThe semantics of server commands. AI always takes time and so doesn't loop. EThe semantics of server commands. Only the first two cases take time. (This is a shorthand. Instead of setting bwait in ReqWaitU and unsetting in all other requests, we call this once before executing a request. @Clear deltas for Calm and HP for proper UI display and AI hints. Add a smell trace for the actor to the level. For now, only actors with gender leave strong and unique enough smell. If smell already there and the actor can smell, remove smell. Projectiles are ignored. As long as an actor can smell, he doesn't leave any smell ever. ]Actor moves or attacks. Note that client may not be able to see an invisible monster so it's the server that determines if melee took place, etc. Also, only the server is authorized to check if a move is legal and it needs full context for that, e.g., the initial actor position to check if melee attack does not try to reach to a distant tile. Resolves the result of an actor moving into another. Actors on blocked positions can be attacked without any restrictions. For instance, an actor embedded in a wall can be attacked from an adjacent position. This function is analogous to projectGroupItem, but for melee and not using up the weapon. No problem if there are many projectiles at the spot. We just attack the one specified. +Actor tries to swap positions with another. Search and/or alter the tile. Note that if serverTile /= freshClientTile, freshClientTile should not be alterable (but  serverTile may be).  Do nothing.Something is sometimes done in  . -actor projecting the item (is on current lvl)!target position of the projectiledigital line parameterthe item to be projected/whether the items comes from floor or inventory -actor applying the item (is on current level)the item to be appliedthe location of the item  `None "#$V^j1y %Continue or exit or restart the game. Drop all actor's items.  aNone "#$V^j= 8The monad that gives the client access to UI operations. %The row where the dungeon map starts. BWrite a UI request to the frontend and read a corresponding reply. APush frames or delays to the frame queue. The frames depict the lid level. Write F UI request to the frontend, read the reply, set pointer, return key. The part of speech describing the actor or "you" if a leader of the client's faction. The actor may be not present in the dungeon. The part of speech with the actor's pronoun or "you" if a leader of the client's faction. The actor may be not present in the dungeon. The part of speech describing the actor (designated by actor id and present in the dungeon) or a special name if a leader of the observer's faction.% %   bNone "#$QV^jLJ (Continue running in the given direction. 8This function implements the actual logic of running. It checks if we have to stop running because something interesting cropped up, it ajusts the direction given by the vector if we reached a corridor's corner (we never change direction except in corridors) and it increments the counter of traversed tiles.Note that while goto-xhair commands ignore items on the way, here we stop wnenever we touch an item. Running is more cautious to compensate that the player cannot specify the end-point of running. It's also more suited to open, already explored terrain. Goto-xhair works better with unknown terrain, e.g., it stops whenever an item is spotted, but then ignores the item, leaving it to the player to mark the item position as a goal of the next goto.  cNone "#$V^jQ Produces a textual description of the terrain and items at an already explored position. Mute for unknown positions. The detailed variant is for use in the aiming mode.  detailed?how to start tile descriptioncan be seen right now?position to describethe actor that looksan extra sentence to print  dNone "#$V^jU $Add a message to the current report. #Add a prompt to the current report. #Add a prompt to the current report. 5Store current report in the history and reset report.  eNone "#$V^jX Draw the whole screen: level map and status area. Pass at most a single page if overlay of text unchanged to the frontends to display separately or overlay over map, depending on the frontend.                  fNone "#$V^j^g Draw the current level with the overlay on top. If the overlay is too long, it's truncated. Similarly, for each line of the overlay, if it's too wide, it's truncated. 5Render animations on top of the current screen frame. ARender and display animations on top of the current screen frame.      gNone "#$V^jh XAdd current report to the overlay, split the result and produce, possibly, many slides. &Split current report into a slideshow. =Split current report into a slideshow. Keep report unchanged. Display a message. Return value indicates if the player wants to continue. Feature: if many pages, only the last SPACE exits (but first ESC). iDisplay a message. Ignore keypresses. Feature: if many pages, only the last SPACE exits (but first ESC). ~Print a yes/no question and return the player's answer. Use black and white colours to turn player's attention to the choice.                  hNone "#$V^jlc $CSwitches current member to the next on the level, if any, wrapping. %GSwitches current member to the previous in the whole dungeon, wrapping. '1Select a faction leader. False, if nothing to do. )Create a list of item names.       ! " # $ % & ' ( ) * +       ! " # $ % & ' ( ) * +  iNone "#$-V^jh 3Let a human player choose any item from a given group. Note that this does not guarantee the chosen item belongs to the group, as the player can override the choice. Used e.g., for applying and projecting. 4Display all items from a store and let the human player choose any or switch to any other store. Used, e.g., for viewing inventory and item descriptions. 5Let the human player choose a single, preferably suitable, item from a list of items. Don't display stores empty for all actors. Start with a non-empty store. VLet the human player choose a single, preferably suitable, item from a list of items. 3 which items to consider suitable'specific prompt for only suitable itemsgeneric promptinitial legal modes)legal modes after Calm taken into account 4how to describe suitable items initial mode 5 which items to consider suitable'specific prompt for only suitable itemsgeneric promptinitial legal modes(legal modes with Calm taken into accountFwhether to ask, when the only item in the starting mode is suitable,whether to permit multiple items as a result  which items to consider suitable'specific prompt for only suitable itemsgeneric promptfirst mode, legal or notthe (rest of) legal modesFwhether to ask, when the only item in the starting mode is suitable,whether to permit multiple items as a resultall legal modes - . / 0 1 2 3 4 5 - . / 5 3 4 0 1 2 - . /   jNone "#$V^j 9-Clear current messages, cycle key hints mode. ;PDisplay items from a given container store and possibly let the user chose one. `Check whether one is permitted to aim (for projecting) at a target (this is only checked for actor targets so that the player doesn't miss enemy getting out of sight; but for positions we let player shoot at obstacles, e.g., to destroy them, and shoot at a lying item and then at its posision, after enemy picked up the item). Returns a different seps% if needed to reach the target actor.Note: Perception is not enough for the check, because the target actor can be obscured by a glass wall or be out of sight range, but in weapon range. DJSwitches current member to the next on the viewed level, if any, wrapping. EGSwitches current member to the previous in the whole dungeon, wrapping. O0End aiming mode, rejecting the current position. PMAccept the current x-hair position as target, ending aiming mode, if active. 0End aiming mode, accepting the current position. \Perform look around in the current position of the xhair. Does nothing outside aiming mode. S$Move the xhair. Assumes aiming mode. T Start aiming. U^Cycle aiming mode. Do not change position of the xhair, switch among things at that position. XvChange the displayed level in aiming mode to (at most) k levels shallower. Enters aiming mode, if not already in one. Y Tweak the eps& parameter of the aiming digital line.) 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ `) 8 9 : ; < = @ > ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ `kNone "#$V^j aVisualize atomic actions sent to the client. This is done in the global state after the command is executed and after the client state is modified by the command. &Sentences such as "Dog barks loudly.". b=Display special effects (text, animation) sent to the client. a b a blNone"#$&'-V^j% czPick command depending on area the mouse pointer is in. The first matching area is chosen. If none match, only interrupt. j'Leader waits a turn (and blocks, etc.). k:Leader waits a 1/10th of a turn (and doesn't block, etc.). 3Actor attacks an enemy actor or his own projectile. "Actor swaps position with another.ELeader moves or searches or alters. No visible actor at the position. tGAsk for a direction and alter a tile in the specified way, if possible.;Try to alter a tile using a feature in the given direction.=Try to alter a tile using a feature in at the given position.6Verify important effects, such as fleeing the dungeon.]This is contrived for now, the embedded items are not analyzed, but only recognized by name.-Guess and report why the bump command failed. u6Try to alter a tile using a feature under the pointer. vDisplay command help. yDisplay the main menu. zDisplay the settings menu. {Display the challenges menu." c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  " c d e f g h i j k l m n o p q r s t u v w x y z { } ~  | mNone "#$V^j 7The semantics of human player commands in terms of the Action monad. Decides if the action takes time and what action to perform. Some time cosuming commands are enabled in aiming mode, but cannot be invoked in aiming mode on a remote level (level different than the level of the leader).FCompute the basic action for a command and mark whether it takes time.  nNone "#$V^j Handle the move of a UI player. ALet the human player issue commands until any command takes time.<CDE  !"#$%&'()*+,-   a b = a b  !"#$%&'()*+,- CDE    oNone "#$<V^j(     pNone "#$<V^j *The main game loop for an AI or UI client.  |None "#$V^jZ -  -qNone "#$V^jú >The server monad with the ability to communicate with clients. GConnection information for all factions, indexed by faction identifier. Update connections to the new definition of factions. Connect to clients in old or newly spawned threads that read and write directly to the channels.    rNone "#$V^j 5Send an atomic action to all clients that can see it.)Messages for some unseen atomic commands.Messages for some unseen sfx.  sNone "#$&'V^j0 \Start a game session, including the clients, and then loop, communicating with the clients. Handle a clip (a part of a turn for which one or more frames will be generated). Run the leader and other actors moves. Eventually advance the time and repeat. Handle the end of every clip. Do whatever has to be done every fixed number of time units, e.g., monster generation. Advance time. Perform periodic saves, if applicable.:Check if the given actor is dominated and update his calm. 9Trigger periodic items for all actors on the given level. "Manage trajectory of a projectile.;Colliding with a wall or actor doesn't take time, because the projectile does not move (the move is blocked). Not advancing time forces dead projectiles to be destroyed ASAP. Otherwise, with some timings, it can stay on the game map dead, blocking path of human-controlled actors and alarming the hapless human. $Save game on server and all clients. server debug parametersthe code to run for UI clients  }None "#$V^j8 ' ( : ) * + , - . / 0 1 2 3 4 5 6 7 8 9 b  b ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 :tNone "#$6KV^j "Client state transformation monad. current global state current client state UI state, empty for AI clients "this client connection information connection to the save thread VInit the client, then run an action, with a given session, state and history, in the IO monad. GThe game-state semantics of atomic commands as computed on the client.    uNone "#$KV^jt "Server state transformation monad. current global state current server state $client-server connection information connection to the save thread Run an action in the IO monad, with undefined state. GThe game-state semantics of atomic commands as computed on the server.     ~~~~~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLvMvNvOvPQRSTUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyz{|}~                                                                                                                                                  ! " # $ % & ' ( ) * + , - . . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgghijklmnoopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJJKLMNOPQRSTUVWXYZ[\]^_`)abcdefghijklmnopqrstuvwxyz{|}~@      !"#$%&'()**+,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUUVWXYZ[\]^_`abcdefghijklmnioppqrstuuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ K L M M N O P P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y!z!z!{!|!}!~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""######################################################################################$$$$$$$$$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$&$'$($)$*$+$,$-$.$/$0$1$2$3$4$5$6$7$8$9$:$;$<$=$>$?$@$A$B%C%D%E%E%F%G%H%H%I%J%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%[&\&]&^&_&`&a&w&b&c&d&e&f&g&h&i&j&k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'{'|'}'~''''(((((((((())))))))))))))))))))**********************************+++++++++,,,,,,,,,,,,,,,----ww//////////////////////////0000000000000001111111111 1 1 1 1 1111111222223333333 3!3"3#3$3%3&3'3(3)3*3+3,3-3.3/303132333435363738393:3;3<3=3>3?3@3A3B3C3D3E4F4G4H4I4J4K4L4M4N5O5O5P5P5Q5R5S5T5U5V5W5X5Y5Z5[5\5]5^6_6`6a6b6c6d6e6f6g6h6i6j6k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z8{8|8}8~88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999 9 9 9 9 999999999999999::::: :!:":#:$:%:&:':(:):*:+:,:-:.:/:0:1:2;3;3;4;5;6;7;8;9<:<;<<<=<><?<?<@<A<B<C<D<E<E<F<G<G<H<I<J<K<L<M<N<O<P<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r=s=t=u=v=w=x=y=z={=|=}=~===========================================================================================>>>>>>>>>>>>>>>>>>????@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @ @ @ A A A A A A A A A A A A B B B B B B B B B B B B B !B "B #B $B %B &B 'B (B )B *B +B ,B -B .B /B 0B 1B 2B 3B 4B 5B 6B 7B 8B 9B :B ;B <B =B >B ?B @B AB BC CC DC EC FC GC HC IC JC KC LC MC ND OD PD QD RD SD TD UD VD WD XD YD ZD [E \E ]E ^E _E `E aE bE cE dE eE fE gE hE iE jE kE lE mE nE oE pE qE rE sE tE uE vE wF xF yF zF {F |F }F ~F F F F F F F F F F F F G G H H I I I I I I I I I I I I I I I I I I I I I I I I J J J J J K K L L L L L L L L L L L L L L L L L M M M M M M M M M M M M N N N N N N N N N N N N N N N N O O O O O O O O O O P P P P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R !R "R #R $R %R &R 'R (R )R *R +R ,R -R .R /R 0R 1R 2R 3R 4R 5R 6R 7R 8R 9R :S ;S <S =S >S ?S @S AS BS CS DS ES FS GT HT IT IT JT KT LT LT MT NT OT PT QT RT ST TT UT VT WT XT YT ZT [T \T ]T 6T ^T ^T _T &T `T aT 'T bT cT dT eT fT gT %T hT iT jT )T kT lT mT nT oT ,T pT /T qT rT sT tT uT vT wT xT yT zT {T |T }UzV ~V V V V V V W W W W W IW W W LW W W W W W W MW X X X X X X X X Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Z Z Z Z [ [ O[ [ [ [ [ [ [ [ [ [ [ [ [ [ \ \ \ \ \ ] ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` ` a a a a Ia a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b c c d d d d e e e e e e e e e e e e e e f !f "f #f $f %g &g 'g (g )g *g +g ,g -g .h /h 0h 1h 2h 3h 4h 5h 6h 7h 8h 9h :h ;h <h =h >h ?h @h Ai Bi Ci Di Ei Fi Gi Hi Ii Ji Ki Lj Mj Nj Oj Pj Qj Rj Sj Tj Uj Vj Wj Xj Yj Zj [j \j ]j ^j _j `j aj bj cj dj ej fj gj hj ij jj kj lj mj nj oj pj qj rj sj tj uk vk wl xl yl zl {l |l }l ~l l l l l l l l l l l l l l l l l l l l l l l l l l l m n n o o o o o o o p q q q q Iq q q q q q q q q q r r r r s s s s s s s s s s s s s s s t t t t t t t t t t t t t t t t t t t t t t t u u u u u u u u u u u u u u u u u u ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~ ~ ~  ~ ~ ~ ~ ~ ~ ~ ~   ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  !~  "~  #~  $~ %~ &~ '~  (~ )~ *~ +~ ,~ -~ .~ /~  0~ 1~ 2~ 3~ 4~  5~ 6~ 7~ 8 9~ 8 :~ 8 ;~ 8 <~ 8 =~ 8 >~ 8 ?~ 8 @  A B C D E F G H~ I J~ I K~ I L~  M~ N~  O~  P~  Q~  R~  S~  T~  U~  V~  W~  X~  Y~  Z~  [~  \~  ]~  ^~ _~ `~ a~ b~ c~ d e~ d f~ d g~ d h~  i~ j~ k~ l~ m~ n o~ n p~ n q~ n r~ n s~ n{~ n t~ n u~ n v~ n w~ n x~ n y~ n z~ n {~ | }~ | ~~ | ~ | ~ | ~  ~ ~ ~         ~  ~  ~      ~    ~  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | ~ | ~ | ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~ ~  ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ n ~ ~  ~  ~ ~  ~  ~ ~  ~  ~ ~  ~  ~ ~  ~  ~ ~  ~  ~ ~  ~  ~ ~  ~  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ !~ "~ # $~ # %~ I &~ I '~ ( )~ * +~ * ,~ -~ .~ /~ 0~ 1~ 2~ d 3~ d 4~ d 5~ d 6~ d 7~ 8~ 9~ :~ ;~ <~ =~ >~ ?~ @~ A~ B~ C~ D~ E~ F~ G~ H~ I~ J~ K~ L~ M~ N~ O~ P~ Q~ R~ S~ y~ T~ U V~ U W~ U X~ U Y~ U Z~ U [~ U \~ U ]~ U ^~ _~ `~ 8 a~ b~ c~ d~ e~ f~ g~ h~ i~ j~ k~ l~ m~ n~  o~ p~ q~  r~ s~ t u v w x y zv {Qm | } ~       8 H  v            & & & & & & & & & & & &]&^' ' ' ' ' ' ' ' ' 'l( * * **** * *+ + w ww w w ww w w w w w w w w // / / 01 6_7 I I L M M N N N N S S ={ { { { { { { { Z Z Z Z Z Z Z Z Z Z [ [ [ \ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ ` a b f h 1h i i i i i i i i i j j j k l l l l l llmrrs(LambdaHack-0.6.2.0-6LvAjp6yuzE4Q9dWwe00aGame.LambdaHack.Common.PreludeGame.LambdaHack.Common.FileGame.LambdaHack.Common.Point!Game.LambdaHack.Common.PointArrayGame.LambdaHack.Common.Misc Game.LambdaHack.Common.FrequencyGame.LambdaHack.Common.Dice!Game.LambdaHack.Common.ContentDefGame.LambdaHack.Common.ColorGame.LambdaHack.Common.Flavour$Game.LambdaHack.Common.ClientOptionsGame.LambdaHack.Common.AbilityGame.LambdaHack.Client.Bfs"Game.LambdaHack.Client.AI.StrategyGame.LambdaHack.Common.RandomGame.LambdaHack.Common.KindOps!Game.LambdaHack.Common.RingBufferGame.LambdaHack.Common.ThreadGame.LambdaHack.Common.TimeGame.LambdaHack.Common.VectorGame.LambdaHack.Client.UI.Key Game.LambdaHack.Content.ItemKind Game.LambdaHack.Content.RuleKind Game.LambdaHack.Content.TileKind!Game.LambdaHack.Content.PlaceKind Game.LambdaHack.Content.CaveKind Game.LambdaHack.Content.ModeKindGame.LambdaHack.Common.KindGame.LambdaHack.Common.TileGame.LambdaHack.Common.Item$Game.LambdaHack.Common.ItemStrongestGame.LambdaHack.Common.ActorGame.LambdaHack.Common.Level+Game.LambdaHack.Client.UI.EffectDescriptionGame.LambdaHack.Common.FactionGame.LambdaHack.Common.Request!Game.LambdaHack.Common.Perception Game.LambdaHack.Common.HighScoreGame.LambdaHack.Common.State)Game.LambdaHack.Client.UI.ItemDescription!Game.LambdaHack.Client.UI.OverlayGame.LambdaHack.Client.UI.MsgGame.LambdaHack.Client.UI.Frame)Game.LambdaHack.Client.UI.Frontend.Common+Game.LambdaHack.Client.UI.Frontend.Teletype)Game.LambdaHack.Client.UI.Frontend.Chosen"Game.LambdaHack.Client.UI.Frontend#Game.LambdaHack.Client.UI.Animation!Game.LambdaHack.Client.UI.ActorUI"Game.LambdaHack.Client.Preferences!Game.LambdaHack.Common.ActorState%Game.LambdaHack.Common.MonadStateRead"Game.LambdaHack.Client.UI.ItemSlot#Game.LambdaHack.Client.UI.Slideshow&Game.LambdaHack.Atomic.MonadStateWrite"Game.LambdaHack.Client.UI.HumanCmd)Game.LambdaHack.Client.UI.Content.KeyKind Game.LambdaHack.Client.UI.Config%Game.LambdaHack.Client.UI.KeyBindings#Game.LambdaHack.Client.UI.SessionUI Game.LambdaHack.Atomic.CmdAtomic$Game.LambdaHack.Atomic.PosAtomicRead"Game.LambdaHack.Atomic.MonadAtomic(Game.LambdaHack.Atomic.HandleAtomicWriteGame.LambdaHack.Common.ResponseGame.LambdaHack.Client.State"Game.LambdaHack.Client.MonadClientGame.LambdaHack.Client.CommonMGame.LambdaHack.Client.BfsM$Game.LambdaHack.Client.AI.ConditionM%Game.LambdaHack.Client.AI.PickTargetM$Game.LambdaHack.Client.AI.PickActorM(Game.LambdaHack.Client.AI.HandleAbilityMGame.LambdaHack.Client.AI$Game.LambdaHack.Client.HandleAtomicM&Game.LambdaHack.Server.DungeonGen.Area)Game.LambdaHack.Server.DungeonGen.AreaRnd'Game.LambdaHack.Server.DungeonGen.Place&Game.LambdaHack.Server.DungeonGen.Cave!Game.LambdaHack.Server.DungeonGen!Game.LambdaHack.Server.FovDigitalGame.LambdaHack.Server.FovGame.LambdaHack.Server.ItemRevGame.LambdaHack.Server.State"Game.LambdaHack.Server.CommandlineGame.LambdaHack.Common.Save"Game.LambdaHack.Server.MonadServerGame.LambdaHack.Server.ItemM$Game.LambdaHack.Server.HandleAtomicMGame.LambdaHack.Server.DebugMGame.LambdaHack.Server.CommonMGame.LambdaHack.Server.StartM Game.LambdaHack.Server.PeriodicM$Game.LambdaHack.Server.HandleEffectM%Game.LambdaHack.Server.HandleRequestMGame.LambdaHack.Server.EndM'Game.LambdaHack.Client.UI.MonadClientUIGame.LambdaHack.Client.UI.RunM"Game.LambdaHack.Client.UI.OverlayMGame.LambdaHack.Client.UI.MsgMGame.LambdaHack.Client.UI.DrawM Game.LambdaHack.Client.UI.FrameM$Game.LambdaHack.Client.UI.SlideshowM'Game.LambdaHack.Client.UI.HandleHelperM$Game.LambdaHack.Client.UI.InventoryM+Game.LambdaHack.Client.UI.HandleHumanLocalM(Game.LambdaHack.Client.UI.DisplayAtomicM,Game.LambdaHack.Client.UI.HandleHumanGlobalM&Game.LambdaHack.Client.UI.HandleHumanMGame.LambdaHack.Client.UI&Game.LambdaHack.Client.HandleResponseMGame.LambdaHack.Client.LoopM Game.LambdaHack.Server.ProtocolM&Game.LambdaHack.Server.BroadcastAtomicGame.LambdaHack.Server.LoopM6Game.LambdaHack.SampleImplementation.SampleMonadClient6Game.LambdaHack.SampleImplementation.SampleMonadServerGame.LambdaHack.Common.HSFile&Game.LambdaHack.Client.UI.Frontend.SdlGame.LambdaHack.AtomicServer debugArgsPaths_LambdaHackGame.LambdaHack.ClientGame.LambdaHack.Serverbase Control.Arrowfirst&&&***second System.IOreadFile(directory-1.3.1.1-IsuswObS4lvD16OY5ZW9XBSystem.Directory doesFileExist renameFile#text-1.2.2.2-EGUst8sqNAZCw1xLPcmcMHData.Text.InternalText(minimorph-0.1.6.1-29Dd901qkn9FQ1l3nuB5yjNLP.Minimorph.Util<+>tshowdivUp<$$> partitionMPointpxpyYXmaxLevelDimExponent chessDist euclidDistSqadjacentinsideblafromTo originPoint $fEnumPoint $fNFDataPoint $fBinaryPoint $fShowPoint $fEqPoint $fOrdPoint$fGenericPointArrayGArrayaxsizeaysizeavectorpindexpunindex!accessI// unsafeUpdateA unsafeWriteAunsafeWriteManyA replicateA replicateMA generateA generateMA unfoldrNAsizeAfoldrAfoldrA'foldlA'ifoldlA'ifoldrAifoldrA'foldMA'ifoldMA'mapAimapA unsafeSetAsafeSetAimapMA_ minIndexA minLastIndexA minIndexesA maxIndexA maxLastIndexAforceA fromListAtoListA$fBinaryGArray $fShowGArray $fEqGArrayTacticTExploreTFollowTFollowNoItemsTMeleeAndRangedTMeleeAdjacentTBlockTRoamTPatrolActorIdAbsDepthLevelId FactionIdItemDialogModeMStoreMOwnedMStats MLoreItem MLoreOrganCStoreCGroundCOrganCEqpCInvCSha ContainerCFloorCEmbedCActorCTrunkRarityFreqs GroupName makePhrase makeSentencenormalLevelBound toGroupNamevalidateRaritybreturndescribeTactic appDataDirxMminusMminusM1oneM$fNFDataPolarity$fNFDataPerson $fNFDataPart$fHashableEnumMap$fAdjustableEnumMap$fLookupEnumMap$fIndexableEnumMap$fTraversableWithKeyEnumMap$fFoldableWithKeyEnumMap$fKeyedEnumMap$fZipWithKeyEnumMap $fZipEnumMap$fBinaryHashMap$fBinaryNominalDiffTime$fBinaryEnumSet$fBinaryEnumMap$fNFDataGroupName$fShowGroupName$fIsStringGroupName$fNFDataCStore$fHashableCStore$fBinaryCStore$fBinaryItemDialogMode$fNFDataItemDialogMode$fBinaryContainer$fHashableTactic$fBinaryTactic $fShowTactic$fReadGroupName $fEqGroupName$fOrdGroupName$fHashableGroupName$fBinaryGroupName$fGenericGroupName $fShowCStore $fReadCStore $fEqCStore $fOrdCStore $fEnumCStore$fBoundedCStore$fGenericCStore$fShowItemDialogMode$fReadItemDialogMode$fEqItemDialogMode$fOrdItemDialogMode$fGenericItemDialogMode$fShowFactionId $fEqFactionId$fOrdFactionId$fEnumFactionId$fHashableFactionId$fBinaryFactionId $fShowLevelId $fEqLevelId $fOrdLevelId $fEnumLevelId$fHashableLevelId$fBinaryLevelId$fShowAbsDepth $fEqAbsDepth $fOrdAbsDepth$fHashableAbsDepth$fBinaryAbsDepth $fShowActorId $fEqActorId $fOrdActorId $fEnumActorId$fBinaryActorId$fShowContainer $fEqContainer$fOrdContainer$fGenericContainer $fEqTactic $fOrdTactic $fEnumTactic$fBoundedTactic$fGenericTactic encodeEOFstrictDecodeEOF tryCreateDir tryWriteFile Frequency runFrequency nameFrequency uniformFreqtoFreq scaleFreq renameFreqsetFreqnullFreqminFreqmaxFreqmostFreqmeanFreq$fNFDataFrequency$fBinaryFrequency$fHashableFrequency$fAlternativeFrequency$fMonadPlusFrequency$fApplicativeFrequency$fFunctorFrequency$fMonadFrequency$fShowFrequency $fEqFrequency$fOrdFrequency$fFoldableFrequency$fTraversableFrequency$fGenericFrequencyDiceXYDice diceConst diceLeveldiceMult SimpleDiceddl intToDice|*|maxDiceminDicemeanDice reduceDice maxDiceXY minDiceXY meanDiceXY$fNumFrequency $fNumDice $fNFDataDice $fBinaryDice$fHashableDice $fShowDice$fBinaryDiceXY$fHashableDiceXY$fEqDice $fOrdDice $fGenericDice $fShowDiceXY $fEqDiceXY $fOrdDiceXY$fGenericDiceXY ContentDef getSymbolgetNamegetFreqvalidateSingle validateAllcontentcontentFromList AttrCharW32 attrCharW32AttrCharacAttracCharAttrfgbg Highlight HighlightNone HighlightRed HighlightBlueHighlightYellow HighlightGreyHighlightWhiteHighlightMagentaColorBlackRedGreenBrownBlueMagentaCyanWhiteBrBlackBrRedBrGreenBrYellowBrBlue BrMagentaBrCyanBrWhitedefFGdefAttr attrCharToW32attrCharFromW32 fgFromW32 bgFromW32 charFromW32 attrFromW32attrEnumFromW32 spaceAttrW32 retAttrW32isBrightdarkCol brightColstdCol colorToRGBattrChar2ToW32attrChar1ToW32$fHashableColor $fBinaryColor$fHashableHighlight$fBinaryHighlight $fEnumAttr $fShowColor $fEqColor $fOrdColor $fEnumColor$fBoundedColor$fGenericColor$fShowHighlight $fEqHighlight$fOrdHighlight$fEnumHighlight$fBoundedHighlight$fGenericHighlight $fShowAttr$fEqAttr $fOrdAttr$fShowAttrChar $fEqAttrChar $fOrdAttrChar$fShowAttrCharW32$fEqAttrCharW32$fEnumAttrCharW32$fBinaryAttrCharW32FlavourzipPlainzipFancy zipLiquidstdFlavflavourToColor flavourToNamecolorToPlainNamecolorToFancyNamecolorToTeamName$fBinaryFancyName$fHashableFancyName$fBinaryFlavour$fHashableFlavour$fShowFancyName $fEqFancyName$fOrdFancyName$fGenericFancyName $fShowFlavour $fEqFlavour $fOrdFlavour$fGenericFlavour DebugModeClisgtkFontFamily sdlFontFile sdlTtfSizeAdd sdlFonSizeAdd sfontSize scolorIsBoldsmaxFpssdisableAutoYessnoAnim snewGameCli sbenchmarkstitlesfontDirssavePrefixClisfrontendTeletype sfrontendNull sfrontendLazy sdbgMsgClisstopAfterSecondssstopAfterFramesdefDebugModeCli$fBinaryDebugModeCli$fShowDebugModeCli$fEqDebugModeCli$fGenericDebugModeCliSkillsAbilityAbMoveAbMelee AbDisplaceAbAlterAbWait AbMoveItem AbProjectAbApply tacticSkills zeroSkills unitSkills addSkills scaleSkills blockOnly meleeAdjacentmeleeAndRanged ignoreItems$fHashableAbility$fBinaryAbility$fNFDataAbility $fShowAbility $fEqAbility $fOrdAbility$fGenericAbility $fEnumAbility$fBoundedAbilityAndPathNoPathpathListpathGoalpathLen MoveLegal MoveBlocked MoveToOpen MoveToClosed MoveToUnknown BfsDistance minKnownBfsapartBfsfillBfs findPathBfs accessBfs$fBinaryAndPath$fShowBfsDistance$fEqBfsDistance$fOrdBfsDistance$fEnumBfsDistance$fBoundedBfsDistance$fBitsBfsDistance $fEqMoveLegal $fShowAndPath$fGenericAndPathStrategy nullStrategy liftFrequency.|reject.=>only bestVariantrenameStrategyreturN mapStrategyM$fAlternativeStrategy$fMonadPlusStrategy$fApplicativeStrategy$fFunctorStrategy$fMonadStrategy$fShowStrategy$fFoldableStrategy$fTraversableStrategyChanceRndrandomRrandomoneOf frequencychancecastDice chanceDice castDiceXYfoldrMfoldlM'Opsokind ouniqGroupopick ofoldrWithKeyofoldlWithKey' ofoldlGroup'olengthId$fShowId$fEqId$fOrdId$fEnumId $fBoundedId $fBinaryId RingBufferemptyconsunconstoListlength$fBinaryRingBuffer$fShowRingBuffer$fGenericRingBuffer forkChildwaitForChildrenSpeedDeltaTimetimeZero timeEpsilontimeCliptimeTurn timeSecondabsoluteTimeAddabsoluteTimeSubtract timeShifttimeFit timeFitUptimeDeltaReverseabsoluteTimeNegatetimeDeltaToFromtimeDeltaSubtracttimeDeltaScaletimeDeltaPercent timeDeltaDivtimeDeltaToDigittoSpeed fromSpeed speedZero speedWalk speedLimp speedThrustmodifyDamageBySpeed speedScalespeedAdd speedNegate ticksPerMeterspeedFromWeightrangeFromSpeedAndLinger $fShowSpeed $fShowTime$fEqTime $fOrdTime $fEnumTime $fBoundedTime $fBinaryTime $fShowDelta $fEqDelta $fOrdDelta $fEnumDelta$fBoundedDelta $fBinaryDelta$fFunctorDelta $fEqSpeed $fOrdSpeed $fBinarySpeed RadianAngleVectorvxvyisUnit isDiagonalnegeuclidDistSqVectorchessDistVectormoves compassText movesCardinal movesDiagonalvicinityvicinityUnsafevicinityCardinalvicinityCardinalUnsafesquareUnsafeSetshift shiftBoundedtrajectoryToPathtrajectoryToPathBounded vectorToFrompathToTrajectoryrotatetowards$fNFDataVector $fEnumVector$fBinaryVector $fShowVector $fReadVector $fEqVector $fOrdVector$fGenericVectorKMmodifierkeyModifier NoModifierShiftControlAltKeyEscReturnSpaceTabBackTab BackSpacePgUpPgDnLeftRightUpDownEndBeginInsertDeleteHomeKPCharFunLeftButtonPressMiddleButtonPressRightButtonPressLeftButtonReleaseMiddleButtonReleaseRightButtonRelease WheelNorth WheelSouthUnknownDeadKeyshowKeyshowKMescKMspaceKM safeSpaceKMreturnKMpgupKMpgdnKM wheelNorthKM wheelSouthKMupKMdownKMleftKMrightKMhomeKMendKM backspaceKMleftButtonReleaseKMrightButtonReleaseKM dirAllKey handleDir moveBindingmkKMmkCharmkKP keyTranslatekeyTranslateWeb $fNFDataKey $fBinaryKey$fNFDataModifier$fBinaryModifier$fShowKM $fNFDataKM $fBinaryKM$fOrdKey$fEqKey $fGenericKey$fShowModifier $fOrdModifier $fEqModifier$fGenericModifier$fOrdKM$fEqKM $fGenericKMEqpSlotEqpSlotMiscBonusEqpSlotAddHurtMeleeEqpSlotAddArmorMeleeEqpSlotAddArmorRangedEqpSlotAddMaxHPEqpSlotAddSpeedEqpSlotAddSightEqpSlotLightSource EqpSlotWeaponEqpSlotMiscAbility EqpSlotAbMoveEqpSlotAbMeleeEqpSlotAbDisplaceEqpSlotAbAlterEqpSlotAbProjectEqpSlotAbApplyEqpSlotAddMaxCalmEqpSlotAddSmellEqpSlotAddNoctoEqpSlotAddAggression EqpSlotAbWaitEqpSlotAbMoveItemFeatureFragileLobableDurableToThrow Identified Applicable Equipable MeleeablePreciousThrowMod throwVelocity throwLingerAspectTimeout AddHurtMelee AddArmorMeleeAddArmorRangedAddMaxHP AddMaxCalmAddSpeedAddSightAddSmellAddShineAddNocto AddAggression AddAbility TimerDice TimerNone TimerGameTurnTimerActorTurnEffectELabelBurnExplodeRefillHP RefillCalmDominateImpressSummonAscendEscapeParalyze InsertMoveTeleport CreateItemDropItemPolyItemIdentifyDetect DetectActor DetectItem DetectExit DetectHidden SendFlying PushActor PullActorDropBestWeapon ActivateInv ApplyPerfumeOneOfOnSmash Recharging TemporaryUniquePeriodicItemKindisymbolinameifreqiflavouricountirarityiverbHitiweightidamageiaspectsieffectsifeatureidescikitforApplyEffect forIdEffecttoDmg toVelocitytoLingertoOrganGameTurntoOrganActorTurn toOrganNonevalidateSingleItemKindvalidateAllItemKind$fBinaryTimerDice$fHashableTimerDice$fNFDataTimerDice$fShowTimerDice$fBinaryAspect$fHashableAspect$fBinaryThrowMod$fHashableThrowMod$fNFDataThrowMod$fBinaryFeature$fHashableFeature$fBinaryEqpSlot$fHashableEqpSlot$fNFDataEqpSlot$fBinaryEffect$fHashableEffect$fNFDataEffect $fEqTimerDice$fOrdTimerDice$fGenericTimerDice $fShowAspect $fEqAspect $fOrdAspect$fGenericAspect$fShowThrowMod $fEqThrowMod $fOrdThrowMod$fGenericThrowMod $fShowFeature $fEqFeature $fOrdFeature$fGenericFeature $fShowEqpSlot $fEqEqpSlot $fOrdEqpSlot $fEnumEqpSlot$fBoundedEqpSlot$fGenericEqpSlot $fShowEffect $fEqEffect $fOrdEffect$fGenericEffect$fShowItemKindRuleKindrsymbolrnamerfreqrtitlerfontDir rexeVersion rcfgUIName rcfgUIDefault rmainMenuArtrfirstDeathEndsrwriteSaveClipsrleadLevelClips rscoresFilernearbyvalidateSingleRuleKindvalidateAllRuleKind$fShowRuleKind TileSpeedup isClearTabisLitTab isWalkableTab isDoorTabisChangableTab isSuspectTab isHideAsTabconsideredByAITabisOftenItemTabisOftenActorTab isNoItemTab isNoActorTab isEasyOpenTabalterMinSkillTabalterMinWalkTabEmbedOpenToCloseToChangeToHideAsBuildAsRevealAs ObscureAsWalkableClearDark OftenItem OftenActorNoItemNoActor IndistinctConsideredByAITrailSpiceTileKindtsymboltnametfreqtcolortcolor2taltertfeature isUknownSpace unknownIdvalidateSingleTileKind isSuspectKindisOpenableKindisClosableKindvalidateAllTileKindactionFeaturestalterForStairs floorSymbol$fNFDataFeature$fShowTileKindFenceFWallFFloorFGroundFNoneCover CAlternateCStretchCReflect CVerbatimCMirror PlaceKindpsymbolpnamepfreqpraritypcoverpfenceptopLeft poverridevalidateSinglePlaceKindvalidateAllPlaceKind $fShowCover $fEqCover $fShowFence $fEqFence$fShowPlaceKindCaveKindcsymbolcnamecfreqcxsizecysizecgrid cminPlaceSize cmaxPlaceSize cdarkChance cnightChance cauxConnectscmaxVoid cminStairDist cextraStairs cdoorChance copenChancechidden cactorCoeff cactorFreqcitemNum citemFreq cplaceFreq cpassablecdefTile cdarkCorTile clitCorTile cfillerTilecouterFenceTileclegendDarkTileclegendLitTile cescapeGroup cstairFreqvalidateSingleCaveKindvalidateAllCaveKind$fShowCaveKind AutoLeader autoDungeon autoLevel LeaderMode LeaderNullLeaderAILeaderUIPlayerfnamefgroups fskillsOther fcanEscape fneverEmpty fhiCondPoly fhasGenderftactic fleaderModefhasUI HiCondPoly HiSummand HiPolynomialHiIndeterminantHiConstHiLootHiBlitz HiSurvivalHiKillHiLossOutcomeKilledDefeatedCampingConquerRestartRoster rosterList rosterEnemy rosterAllyCavesModeKindmsymbolmnamemfreqmrostermcavesmdescvalidateSingleModeKindvalidateAllModeKind$fBinaryOutcome$fBinaryHiIndeterminant$fBinaryAutoLeader$fBinaryLeaderMode$fBinaryPlayer $fShowOutcome $fEqOutcome $fOrdOutcome $fEnumOutcome$fBoundedOutcome$fGenericOutcome$fShowHiIndeterminant$fEqHiIndeterminant$fOrdHiIndeterminant$fGenericHiIndeterminant$fShowAutoLeader$fEqAutoLeader$fOrdAutoLeader$fGenericAutoLeader$fShowLeaderMode$fEqLeaderMode$fOrdLeaderMode$fGenericLeaderMode $fShowPlayer $fEqPlayer $fOrdPlayer$fGenericPlayer $fShowRoster $fEqRoster$fShowModeKindCOpscocavecoitemcomodecoplacecorulecotile coTileSpeedup createOps stdRuleset$fEqCOps $fShowCOps createTabcreateTabWithKey accessTabkindHasFeature hasFeatureisClearisLit isWalkableisDoor isChangable isSuspectisHideAsconsideredByAI isOftenItem isOftenActorisNoItem isNoActor isEasyOpen alterMinSkill alterMinWalk isExplorablespeedupopenTocloseTo embeddedItemsrevealAs obscureAshideAsbuildAsisEasyOpenKind isOpenable isClosableItemDictItemBag ItemQuant ItemTimer ItemSourceItemSourceLevelItemSourceFactionItemjkindIxjlidjfidjsymboljnamejflavourjfeaturejweightjdamageItemFullitemBaseitemK itemTimer itemDisco ItemDisco itemKindIditemKinditemAspectMean itemAspectDiscoveryAspect AspectRecordaTimeout aHurtMelee aArmorMelee aArmorRangedaMaxHPaMaxCalmaSpeedaSightaSmellaShineaNocto aAggressionaSkillsItemSeedDiscoveryBenefitBenefitbenInEqp benPickupbenApplybenMeleebenFling DiscoveryKindKindMeankmKindkmMean ItemKindIxItemIdemptyAspectRecordsumAspectRecord itemNoDisco itemToFull itemPrice goesIntoEqpisMelee goesIntoInv goesIntoShaaspectRecordToList seedToAspect aspectsRandom meanAspectaspectRecordFull$fBinaryBenefit$fHashableAspectRecord$fBinaryAspectRecord$fBinaryKindMean $fBinaryItem$fHashableItem$fBinaryItemSource$fHashableItemSource $fShowItemId $fEqItemId $fOrdItemId $fEnumItemId$fBinaryItemId$fShowItemKindIx$fEqItemKindIx$fOrdItemKindIx$fEnumItemKindIx$fIxItemKindIx$fHashableItemKindIx$fBinaryItemKindIx $fShowBenefit$fGenericBenefit$fShowItemSeed $fEqItemSeed $fOrdItemSeed$fEnumItemSeed$fHashableItemSeed$fBinaryItemSeed$fShowAspectRecord$fEqAspectRecord$fOrdAspectRecord$fGenericAspectRecord$fShowKindMean $fEqKindMean$fGenericKindMean$fShowItemDisco $fShowItem$fEqItem $fGenericItem$fShowItemSource$fEqItemSource$fGenericItemSource$fShowItemFullstrengthEffectstrengthOnSmashstrengthCreateOrganstrengthDropOrganstrengthEqpSlotstrengthToThrowcomputeTrajectoryitemTrajectory totalRange prEqpSlot hasChargedamageUsefulnessstrongestMelee strongestSlot unknownMeleefilterRechargingstripRecharging stripOnSmash ActorDict ActorAspectResDeltaresCurrentTurnresPreviousTurnActorbtrunkbhpbhpDeltabcalm bcalmDeltabposboldposblidbfid btrajectoryborganbeqpbinvbweaponbwaitbproj deltaSerious deltaMild actorCanMeleemonsterGenChance actorTemplatebspeedbracedwaitedLastTurn actorDyingactorTrunkIsBlasthpTooLow calmEnoughhpEnough smellTimeout checkAdjacent eqpOverfulleqpFreeN$fBinaryResDelta $fBinaryActor$fShowResDelta $fEqResDelta$fGenericResDelta $fShowActor $fEqActor$fGenericActorLevelldepthlfloorlembedlactorltilelxsizelysizelsmellldesclstairlseen lexplorableltime lactorCoeff lactorFreqlitemNum litemFreqlescapelnightSmellMapTileMapActorMap ItemFloorDungeonascendInBranchwhereToat findPointfindPos findPosTry findPosTry2 $fBinaryLevel $fShowLevel $fEqLeveleffectToSuffixslotToSentence slotToName slotToDescslotToDecorator statSlotskindAspectToSuffix featureToSufffeatureToSentence affixDice ChallengecdiffcwolfcfishTGoal TEnemyPosTEmbedTItemTSmellTUnknownTKnownTAnyTargetTEnemyTPointTVectorStatus stOutcomestDepth stNewGameDipl DiplomacyNeutralAllianceWarFactiongnamegcolorgplayerginitialgdiplgquit_gleadergshagvictims gvictimsD FactionDicttgtKindDescription isHorrorFactnameOfHorrorFactnoRunWithMultiisAIFactautoDungeonLevelautomatePlayerisAtWarisAllieddifficultyBounddifficultyDefaultdifficultyCoeffdifficultyInversedefaultChallenge$fBinaryDiplomacy$fBinaryStatus$fBinaryFaction $fBinaryTGoal$fBinaryTarget$fBinaryChallenge$fShowDiplomacy $fEqDiplomacy$fOrdDiplomacy$fEnumDiplomacy$fGenericDiplomacy $fShowStatus $fEqStatus $fOrdStatus$fGenericStatus $fShowFaction $fEqFaction $fOrdFaction$fGenericFaction $fShowTGoal $fEqTGoal $fOrdTGoal$fGenericTGoal $fShowTarget $fEqTarget $fOrdTarget$fGenericTarget$fShowChallenge $fEqChallenge$fOrdChallenge$fGenericChallenge ReqFailure MoveNothing MeleeSelf MeleeDistantDisplaceDistantDisplaceAccessDisplaceProjectiles DisplaceDyingDisplaceBracedDisplaceImmobileDisplaceSupportedAlterUnskilled AlterUnwalked AlterDistantAlterBlockActorAlterBlockItem AlterNothing EqpOverfull EqpStackFullApplyUnskilled ApplyReadApplyOutOfReach ApplyChargingApplyNoEffects ItemNothing ItemNotCalmNotCalmPreciousProjectUnskilledProjectAimOnselfProjectBlockTerrainProjectBlockActorProjectLobableProjectOutOfReachTriggerNothingNoChangeDunLeader RequestTimedReqMoveReqMelee ReqDisplaceReqAlterReqWait ReqWait10 ReqMoveItems ReqProjectReqApplyRequestAnyAbility RequestUIReqUIReqUINop ReqUITimedReqUIGameRestart ReqUIGameExit ReqUIGameSave ReqUITactic ReqUIAutomate RequestAIReqAI ReqAITimedReqAINop timedToUIimpossibleReqFailureshowReqFailurepermittedPreciouspermittedProjectpermittedProjectAIpermittedApply$fBinaryReqFailure $fShowReqUI $fShowReqAI$fShowReqFailure$fEqReqFailure$fGenericReqFailure$fShowRequestTimed$fShowRequestAnyAbilityPerFidPerLid Perceptionpsightpsmell PerSmelledpsmelled PerVisiblepvisible totalVisible totalSmelledemptyPernullPeraddPerdiffPer$fBinaryPerception$fShowPerVisible$fEqPerVisible$fBinaryPerVisible$fShowPerSmelled$fEqPerSmelled$fBinaryPerSmelled$fShowPerception$fEqPerception$fGenericPerception ScoreDict ScoreTable ScoreRecord showScoregetTable getRecordregister highSlideshow$fBinaryScoreRecord$fShowScoreTable$fEqScoreRecord$fOrdScoreRecord$fShowScoreRecord$fGenericScoreRecord$fEqScoreTable$fBinaryScoreTableStatedefStateGlobal emptyStatelocalFromGlobal updateDungeon updateDepth updateActorD updateItemDupdateFactionD updateTime updateCOpssdungeon stotalDepthsactorDsitemD sfactionDstimescopsshigh sgameModeId $fBinaryState $fShowState $fEqState show64With2partItem partItemShort partItemHigh partItemWspartItemWsRangedpartItemShortAWpartItemMediumAWpartItemShortWownWviewItem FrameForall unFrameForallFrameST ColorMode ColorFullColorBWOverlayAttrLine emptyAttrLinetextToALfgToAL stringToAL<+:> splitAttrLineitemDesc glueLines updateLines writeLine $fEqColorModeHistoryReportRepMsgNMsgtoMsgtoPrompt emptyReport nullReportsingletonReport snocReportconsReportNoScrub renderReport findInReportincrementInReportlastMsgOfReport emptyHistory addReport lengthHistorylastReportOfHistoryreplaceLastReportOfHistorysplitReportForHistory renderHistory $fBinaryMsg$fBinaryRepMsgN$fBinaryHistory $fShowMsg$fEqMsg $fGenericMsg $fShowRepMsgN$fGenericRepMsgN $fShowReport$fBinaryReport $fShowHistory$fGenericHistoryFrames SingleFrame singleFrameblankSingleFrame overlayFrameoverlayFrameWithLines$fEqSingleFrame$fShowSingleFrame RawFrontendfdisplay fshutdownfshowNowfchanKeyKMP kmpKeyMod kmpPointer startupBoundcreateRawFrontend resetChanKeysaveKMPmodifierTranslate frontendNamestartupshutdowndisplayFSession ChanFrontendFrontReq FrontFrame FrontDelayFrontKey FrontPressed FrontDiscardFrontAdd FrontAutoYes FrontShutdown frontFrame frontKeyKeys frontKeyFramegetKey fchanFrontend defaultMaxFps microInSecframeTimeoutThread lazyStartup nullStartupseqFramechanFrontendIO Animation renderAnim pushAndDelayblinkColorActor twirlSplashblockHit blockMiss deathBodyshortDeathBodyactorXteleport swapPlacesfadeout $fEqAnimation$fShowAnimation ActorDictUIActorUIbsymbolbnamebpronounbcolor keySelected partActor partPronoun ppContainerppCStore ppCStoreIn ppCStoreWownWppContainerWownW verbCStore tryFindHeroK$fBinaryActorUI $fShowActorUI $fEqActorUI$fGenericActorUIeffectToBenefit organBenefitaspectToBenefitrecordToBenefittotalUsefulnessfidActorNotProjAssocs actorAssocsactorRegularAssocswarActorRegularListfriendlyActorRegularListfidActorRegularIds getItemBody bagAssocs bagAssocsK posToAidsLvl posToAids posToAssocsnearbyFreePointscalculateTotalmergeItemQuant sharedEqpsharedAllOwnedFidfindIid getActorBodygetCarriedAssocsgetCarriedIidCStoregetContainerBag getFloorBag getEmbedBaggetBodyStoreBagmapActorItems_getActorAssocsmemActor getLocalTimeregenCalmDeltaactorInAmbientcanDeAmbientList actorSkills dispEnemy fullAssocs storeFromCaidFromClidFromCposFromCisEscapeisStair anyFoeAdjactorAdjacentAssocsarmorHurtBonusMonadStateRead getsStategetStategetLevelnUI getGameModeisNoConfirmsGame getEntryArena pickWeaponM ItemSlotsSlotChar slotPrefixslotCharallSlots allZeroSlotsintSlots assignSlot slotLabel$fEnumSlotChar$fBinarySlotChar $fOrdSlotChar$fBinaryItemSlots$fShowSlotChar $fEqSlotChar$fShowItemSlots Slideshow slideshowOKXKYXemptySlideshowunsnoc toSlideshowmenuToSlideshowwrapOKX splitOverlaysplitOKX$fShowSlideshow $fEqSlideshowMonadStateWrite modifyStateputState updateFloorupdateActorMap moveActorMap updateTile updateSmell updateLevel updateActor updateFactioninsertItemContainerinsertItemActordeleteItemContainerdeleteItemActorTrigger ApplyItem AlterFeatureverbobjectsymbolfeatureHumanCmdMacroByArea ByAimMode ByItemModeComposeIfLocalComposeUnlessErrorCompose2ndLocal LoopOnNothingWaitWait10MoveDirRunDir RunOnceAheadMoveOnceToXhairRunOnceToXhairContinueToXhairMoveItemProjectApplyAlterDirAlterWithPointerHelpItemMenuMainMenuGameDifficultyIncrGameWolfToggleGameFishToggleGameScenarioIncr GameRestartGameExitGameSaveAutomate SortSlots ChooseItemChooseItemMenuChooseItemProjectChooseItemApply PickLeaderPickLeaderWithPointer MemberCycle MemberBack SelectActor SelectNoneSelectWithPointerRepeatRecord MarkVision MarkSmell MarkSuspect SettingsMenuChallengesMenuCancelAcceptTgtClear ItemClear MoveXhairAimTgtAimFloorAimEnemyAimItem AimAscendEpsIncr XhairUnknown XhairItem XhairStairXhairPointerFloorXhairPointerEnemyAimPointerFloorAimPointerEnemy explorationaimingts notChosenchosen CmdTripleCmdArea CaMessage CaMapLeader CaMapPartyCaMap CaLevelNumber CaArenaName CaPercentSeen CaXhairDesc CaSelected CaCalmGauge CaHPGauge CaTargetDesc CmdCategory CmdMainMenu CmdItemMenuCmdMoveCmdItemCmdAimCmdMetaCmdMouse CmdInternal CmdNoHelpCmdDebug CmdMinimalcategoryDescriptionareaDescriptionnoRemoteHumanCmd$fBinaryCmdCategory$fNFDataCmdCategory$fBinaryCmdArea$fNFDataCmdArea$fBinaryTrigger$fNFDataTrigger $fReadTrigger$fBinaryHumanCmd$fNFDataHumanCmd$fShowCmdCategory$fReadCmdCategory$fEqCmdCategory$fGenericCmdCategory $fShowCmdArea $fReadCmdArea $fEqCmdArea $fOrdCmdArea$fGenericCmdArea $fShowTrigger $fEqTrigger $fOrdTrigger$fGenericTrigger$fShowHumanCmd$fReadHumanCmd $fEqHumanCmd $fOrdHumanCmd$fGenericHumanCmdKeyKindrhumanCommands evalKeyDefaddCmdCategory replaceDescmoveItemTriple repeatTriplemouseLMBmouseMMBmouseRMBgoToCmd runToAllCmdautoexploreCmdautoexplore25Cmd aimFlingCmdprojectIprojectAflingTsapplyIKapplyI grabItems dropItemsdescTsdefaultHeroSelectConfigconfigCommandsconfigHeroNamesconfigVi configLaptopconfigGtkFontFamilyconfigSdlFontFileconfigSdlTtfSizeAddconfigSdlFonSizeAddconfigFontSizeconfigColorIsBoldconfigHistoryMax configMaxFps configNoAnimconfigRunStopMsgs configCmdlinemkConfigapplyConfigToDebug$fBinaryConfig$fNFDataConfig $fShowConfig$fGenericConfigBindingbcmdMapbcmdListbrevMap stdBindingkeyHelpokxsN KeysHintModeKeysHintBlockedKeysHintAbsentKeysHintPresent LastRecord RunParams runLeader runMembers runInitial runStopMsg runWaitingAimMode aimLevelId SessionUIsxhairsactorUIsslots slastSlot slastItemMoveschanFsbindingsconfigsaimMode sxhairMousedsitemSel sselectedsrunning_sreportshistoryspointer slastRecord slastPlay slastLost swaitTimes smarkVision smarkSmell smenuIxMapsdisplayNeeded skeysHintModesstartsgstartsallTimesnframes sallNframesemptySessionUItoggleMarkVisiontoggleMarkSmell getActorUI$fBinaryRunParams$fBinarySessionUI $fShowAimMode $fEqAimMode$fBinaryAimMode$fShowRunParams$fEqKeysHintMode$fEnumKeysHintMode$fBoundedKeysHintModeSfxMsg SfxUnexpected SfxLoudUpd SfxLoudStrike SfxLoudSummon SfxFizzlesSfxNothingHappensSfxVoidDetectionSfxSummonLackCalmSfxLevelNoMoreSfxLevelPushedSfxBracedImmuneSfxEscapeImpossibleSfxTransImpossibleSfxIdentifyNothingSfxPurposeNothingSfxPurposeTooFewSfxPurposeUnique SfxColdFishSfxTimerExtended SfxAtomic SfxStrike SfxRecoilSfxSteal SfxRelease SfxProject SfxReceiveSfxApplySfxCheck SfxTriggerSfxShun SfxEffect SfxMsgFid UpdAtomicUpdCreateActorUpdDestroyActor UpdCreateItemUpdDestroyItem UpdSpotActor UpdLoseActor UpdSpotItem UpdLoseItem UpdMoveActor UpdWaitActorUpdDisplaceActor UpdMoveItem UpdRefillHP UpdRefillCalm UpdTrajectoryUpdQuitFactionUpdLeadFactionUpdDiplFactionUpdTacticFactionUpdAutoFaction UpdRecordKill UpdAlterTileUpdAlterExplorable UpdSearchTile UpdHideTile UpdSpotTile UpdLoseTile UpdAlterSmell UpdSpotSmell UpdLoseSmell UpdTimeItem UpdAgeGame UpdUnAgeGame UpdDiscoverUpdCoverUpdDiscoverKind UpdCoverKindUpdDiscoverSeed UpdCoverSeed UpdPerception UpdRestartUpdRestartServer UpdResumeUpdResumeServer UpdKillExit UpdWriteSave UpdMsgAll CmdAtomic undoUpdAtomic undoSfxAtomic undoCmdAtomic$fBinaryUpdAtomic$fBinarySfxMsg$fBinarySfxAtomic$fBinaryCmdAtomic$fShowUpdAtomic $fEqUpdAtomic$fGenericUpdAtomic $fShowSfxMsg $fEqSfxMsg$fGenericSfxMsg$fShowSfxAtomic $fEqSfxAtomic$fGenericSfxAtomic$fShowCmdAtomic $fEqCmdAtomic$fGenericCmdAtomic PosAtomicPosSightPosFidAndSightPosSmellPosFid PosFidAndSerPosSerPosAllPosNone posUpdAtomic posSfxAtomic posProjBodybreakUpdAtomic seenAtomicCli seenAtomicSergeneralMoveItem$fShowPosAtomic $fEqPosAtomic MonadAtomic execUpdAtomic execSfxAtomic execSendPerhandleUpdAtomicupdCreateActorupdDestroyActor updCreateItemupdDestroyItem updMoveActor updWaitActorupdDisplaceActor updMoveItem updRefillHP updRefillCalm updTrajectoryupdQuitFactionupdLeadFactionupdDiplFactionupdAutoFactionupdTacticFaction updRecordKill updAlterTileupdAlterExplorable updSpotTile updLoseTile updAlterSmell updSpotSmell updLoseSmell updTimeItem updAgeGame updUnAgeGame updRestartupdRestartServerupdResumeServer ChanServer responseS requestAIS requestUIS CliSerQueueResponse RespUpdAtomic RespQueryAI RespSfxAtomic RespQueryUI$fShowResponseAlterLid TgtAndPathtapTgttapPath BfsAndPath BfsInvalidbfsArrbfsPath StateClientsepsstargetD sexploredsbfsDsundo sdiscoKind sdiscoAspect sdiscoBenefit sactorAspectsfpersaltersrandom_sleader_ssidesquitscurChalsnxtChal snxtScenario smarkSuspect scondInMelee svictories sdebugCliemptyStateClientcycleMarkSuspect updateTarget getTarget updateLeadersside$fBinaryTgtAndPath$fBinaryStateClient$fShowBfsAndPath$fShowTgtAndPath$fGenericTgtAndPath$fShowStateClientMonadClientSetup saveClient restartClient MonadClient getsClient modifyClientliftIO getClient putClientdebugPossiblyPrint rndToActionrndToActionForget getPerFid aidTgtToPosmakeLinemaxActorSkillsClientcurrentSkillsClientfullAssocsClientitemToFullClientpickWeaponClient updateSalter createSalteraspectRecordFromItemClientaspectRecordFromActorClientcreateSactorAspectFleeViaStairsOrEscape ViaStairs ViaStairsUp ViaStairsDown ViaEscape ViaNothing ViaAnythinginvalidateBfsAidinvalidateBfsLidinvalidateBfsAll createBfsupdatePathFromBfsgetCacheBfsAndPath getCacheBfs getCachePath createPathcondBFS furthestKnownclosestUnknown closestSmell embedBenefitclosestTriggerscondEnoughGearMunexploredDepth closestItems closestFoes$fShowFleeViaStairsOrEscape$fEqFleeViaStairsOrEscapecondAimEnemyPresentMcondAimEnemyRememberedMcondTgtNonmovingMcondAnyFoeAdjMcondAdjTriggerableMmeleeThreatDistListcondBlocksFriendsMcondFloorWeaponMcondNoEqpWeaponMcondCanProjectMcondProjectListMbenAvailableItemshinderscondDesirableFloorItemMbenGroundItems desirableItem condSupportcondShineWouldBetrayMfleeList refreshTargettargetStrategypickActorToMove useTacticsApplyItemGroupactionStrategy waitBlockNowpickup equipItemstoShare yieldUnneeded unEquipItemsgroupByEqpSlot bestByEqpSlotharmful meleeBlockermeleeAnytrigger projectItem applyItemflee displaceFoedisplaceBlockerdisplaceTowardschase moveTowards moveOrRunAid$fEqApplyItemGroupqueryAIpickAI pickActionudpdateCondInMelee condInMeleeMcmdAtomicFilterClicmdAtomicSemCli SpecialArea SpecialFixed SpecialMergedAreatoAreafromArea trivialArea isTrivialAreagridshrinkexpandsumAreas $fBinaryArea $fShowArea$fEqArea$fShowSpecialAreaCorridorHVHorizVertxyInArea mkVoidRoommkRoommkFixed connectGridrandomConnection connectPlaces$fEqHV TileMapEMPlaceqkindqareaqseenqlegendqFWallqFFloorqFGround placeCheck buildPlace isChancePos buildFenceRnd $fBinaryPlace $fShowPlaceCavedkinddsecretdmapdplacesdnightbootFixedCenters buildCave $fShowCave FreshDungeon freshDungeonfreshTotalDepthconvertTileMaps buildLevelplaceDownStairslevelFromCaveKind dungeonGen EdgeIntervalEdge ConvexHullLineBumpBbxbyProgressDistancescansteeperaddHulldlinedsteeper intersect _debugSteeper _debugLine $fShowBump $fShowLine FovLitLidFovLitfovLit FovClearLidFovClearfovClear FovLucidLidFovLucidfovLucidFovShinefovShine PerCacheFid PerCacheLidPerceptionCacheptotalperActorPerActorCacheBeforeLucid creachablecnoctocsmell PerReachable preachable PerValidFidFovValid FovInvalidperceptionFromPTotalperActorFromLevelboundSightByCalmcacheBeforeLucidFromActortotalFromPerActorlucidFromLevelshineFromLevelfloorLightSourceslucidFromItemsperFidInDungeonaspectRecordFromActorServer litFromLevel litInDungeonclearFromLevelclearInDungeonlucidInDungeonperLidFromFactionperceptionCacheFromLevelfullscan$fShowFovValid $fEqFovValid$fShowPerReachable$fEqPerReachable$fShowCacheBeforeLucid$fEqCacheBeforeLucid$fShowPerceptionCache$fEqPerceptionCache$fShowFovShine $fEqFovShine$fShowFovLucid $fEqFovLucid$fShowFovClear $fEqFovClear $fShowFovLit $fEqFovLit ItemKnownItemRev FlavourMap UniqueSet ItemSeedDictDiscoveryKindRev serverDiscos buildItemnewItememptyFlavourMapdungeonFlavourMap$fShowFlavourMap$fBinaryFlavourMap ActorTimeRNGsdungeonRandomGeneratorstartingRandomGenerator DebugModeSersknowMap sknowEvents sknowItemssniffInsniffOut sallClearsboostRandomItem sgameMode sautomateAllskeepAutomated sdungeonRngsmainRng snewGameSer scurChalSer sdumpInitRngsssavePrefixSer sdbgMsgSer StateServer sactorTime sdiscoKindRev suniqueSet sitemSeedDsitemRevsflavour sacounter sicounter snumSpawnedsperFid sperValidFid sperCacheFid sfovLucidLid sfovClearLid sfovLitLidsarenas svalidArenassrngs swriteSave sdebugSer sdebugNxtupdateActorTimeageActoremptyStateServerdefDebugModeSer$fBinaryDebugModeSer $fBinaryRNGs $fShowRNGs$fBinaryStateServer$fShowDebugModeSer$fShowStateServerChanSave saveToChanloopSave wrapInSaves restoreGame saveNameCli saveNameSer MonadServer getsServer modifyServersaveChanServer getServer putServerdebugPossiblyPrintAndExit serverPrint saveServerdumpRngs restoreScore registerScore getSetGen registerItemrollItemrollAndRegisterItemplaceItemsInDungeonembedItemsInDungeonfullAssocsServeritemToFullServermapActorCStore_cmdAtomicSemSeraddItemToActor updateSclear updateSlitinvalidateLucidLidinvalidateLucidAid actorHasShineitemAffectsShineRadiusitemAffectsPerRadius addPerActoraddPerActorAnydeletePerActordeletePerActorAnyinvalidatePerActorreconsiderPerActorinvalidatePerLid debugResponsedebugRequestAIdebugRequestUI$fShowDebugAid execFailure revealItems moveStores deduceQuits deduceKilled electLeadersupplantLeader projectFailaddActor registerActor addActorIiddiscoverIfNoEffectspickWeaponServercurrentSkillsServerrecomputeCachePerinitPer reinitGame updatePer gameReset applyDebug spawnMonster addAnyActor advanceTimeoverheadActorTimeswapTime udpateCalmleadLevelSwitchmeleeEffectAndDestroyeffectAndDestroyitemEffectEmbeddedcutCalmdominateFidSfxdropCStoreItem pickDroppablehandleRequestAIhandleRequestUIsetBWaithandleRequestTimedhandleRequestTimedCases switchLeader affectSmellreqMovereqMelee reqDisplacereqAlterreqWait reqMoveItems reqMoveItemcomputeRndTimeout reqProjectreqApplyreqGameRestart reqGameExit reqGameSave reqTactic reqAutomate endOrLoopdieSer MonadClientUI getsSession modifySession clientPrintUI mapStartY getSession putSession displayFramesconnFrontendFrontKeysetFrontAutoYes anyKeyPresseddiscardPressedKey addPressedEscfrontendShutdown chanFrontend getReportUI getLeaderUI getArenaUI viewedLevelUIleaderTgtToPos xhairToPos clearXhair clearAimModescoreToSlideshowdefaultHistory tellAllClipPStellGameClipPSelapsedSessionTimeGTresetSessionStartresetGameStartpartActorLeaderpartActorLeaderFunpartPronounLeader partAidLeader tryRestoreleaderSkillsClientUI continueRundescribeMainKeyslookAtmsgAdd promptAdd promptAddAttr recordHistory targetDesctargetDescLeadertargetDescXhairdrawFrameTerraindrawFrameContent drawFramePathdrawFrameActordrawFrameExtradrawFrameStatus drawBaseFramedrawArenaStatusdrawLeaderStatusdrawLeaderDamage drawSelected drawOverlay promptGetKey stopPlayBackanimate fadeOutOrInoverlayToSlideshowreportToSlideshowreportToSlideshowKeepdisplaySpaceEsc displayMoredisplayMoreKeep displayYesNo getConfirmsdisplayChoiceScreen FailOrCmdMError FailError showFailError mergeMErrorfailWithfailSerfailMsg weaveJust sortSlots memberCycle memberBackpartyAfterLeader pickLeaderpickLeaderWithPointer itemOverlay statsOverlay pickNumber$fShowFailError SuitabilitySuitsEverythingSuitsSomethingppItemDialogModeppItemDialogModeFrom storeFromMode getGroupItem getStoreItemgetFull$fShowItemDialogState$fEqItemDialogState macroHuman clearHumansortSlotsHumanchooseItemHumanchooseItemDialogModechooseItemProjectHumanpsuitReqtriggerSymbolschooseItemApplyHumanpermittedApplyClientpickLeaderHumanpickLeaderWithPointerHumanmemberCycleHumanmemberBackHumanselectActorHumanselectNoneHumanselectWithPointerHuman repeatHuman recordHuman historyHumanmarkVisionHumanmarkSmellHumanmarkSuspectHuman cancelHuman acceptHuman tgtClearHumanitemClearHumanmoveXhairHuman aimTgtHuman aimFloorHuman aimEnemyHuman aimItemHumanaimAscendHuman epsIncrHumanxhairUnknownHumanxhairItemHumanxhairStairHumanxhairPointerFloorHumanxhairPointerEnemyHumanaimPointerFloorHumanaimPointerEnemyHumandisplayRespUpdAtomicUIdisplayRespSfxAtomicUI byAreaHumanbyAimModeHumanbyItemModeHumancomposeIfLocalHumancomposeUnlessErrorHumancompose2ndLocalHumanloopOnNothingHuman waitHuman waitHuman10 moveRunHumanrunOnceAheadHumanmoveOnceToXhairHumanrunOnceToXhairHumancontinueToXhairHuman moveItemHuman projectHuman applyHuman alterDirHumanalterWithPointerHuman helpHuman itemMenuHumanchooseItemMenuHuman mainMenuHumansettingsMenuHumanchallengesMenuHumangameScenarioIncrgameDifficultyIncrgameWolfTogglegameFishTogglegameRestartHuman gameExitHuman gameSaveHuman tacticHuman automateHuman cmdHumanSemqueryUI humanCommandMonadClientWriteRequest sendRequestAI sendRequestUI clientHasUIMonadClientReadResponsereceiveResponsehandleResponseloopCliMonadServerReadRequestgetsDict modifyDictConnServerDictputDict sendUpdatesendSfx sendQueryAI sendQueryUIkillAllClientschildrenServer updateConnhandleCmdAtomicServerhandleAndBroadcastsendPeratomicRememberloopSer factionArena arenasForLoop handleFidUpdloopUpdendClipapplyPeriodicLevelhandleTrajectories hTrajectories setTrajectory handleActorshActorsgameExit restartGame writeSaveAllCliImplementationrunCliImplementationCliStatecliState cliClient cliSessioncliDict cliToSave executorCli$fMonadAtomicCliImplementation*$fMonadClientWriteRequestCliImplementation*$fMonadClientReadResponseCliImplementation $fMonadClientUICliImplementation#$fMonadClientSetupCliImplementation$fMonadClientCliImplementation"$fMonadStateWriteCliImplementation!$fMonadStateReadCliImplementation$fGenericCliState$fMonadCliImplementation$fFunctorCliImplementation$fApplicativeCliImplementationSerImplementationrunSerImplementationSerStateserState serServerserDict serToSave executorSer$fMonadAtomicSerImplementation)$fMonadServerReadRequestSerImplementation$fMonadServerSerImplementation"$fMonadStateWriteSerImplementation!$fMonadStateReadSerImplementation$fMonadSerImplementation$fFunctorSerImplementation$fApplicativeSerImplementationGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzipprint Data.Tuplefstsnd otherwiseassertmap$GHC.Real fromIntegral realToFrac Control.MonadguardjoinGHC.EnumBoundedminBoundmaxBoundEnumenumFrom enumFromThenenumFromThenTo enumFromTofromEnumtoEnumsuccpred GHC.ClassesEq==/= GHC.FloatFloatingpiexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanh Fractional fromRational/recipIntegral toIntegerquotremdivmodquotRemdivModMonadfail>>=>>returnFunctorfmap<$GHC.NumNum*+-negate fromIntegerabssignumOrd>=minmax><<=compareGHC.ReadRead readsPrecreadListReal toRational RealFloat floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2RealFracproperFractiontruncateroundceilingfloorGHC.ShowShow showsPrecshowshowList Applicativepure<*>*><* Data.FoldableFoldablefoldl'foldrfoldMapnullfoldlfoldl1sumproductfoldr1maximumminimumelemData.Traversable TraversabletraversemapM sequenceAsequenceMonoidmemptymappendmconcat GHC.TypesBoolFalseTrueDoubleFloatInt integer-gmpGHC.Integer.TypeIntegerMaybeNothingJustOrderingLTEQGTRationalIOWord Data.EitherEitherliftMideitherGHC.Errerror-assert-failure-0.1.2.2-Cj69daU0Q3fFec0NZlHMHpControl.Exception.Assert.SugarallBswith showFailureblamemfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterM Data.ListisSubsequenceOf mapAccumR mapAccumLforMreadIOreadLninteract getContentsgetLinegetCharputStrLnputStrputCharGHC.IO.ExceptionioErrorGHC.IOFilePath userErrorIOErrorfindnotElem minimumBy maximumByallanyorand concatMapconcatmsum sequence_forM_mapM_ Data.Monoid<>DualgetDualEndoappEndoAllgetAllAnygetAnySumgetSumProduct getProductFirstgetFirstLastgetLastgetAlt Data.OldListunwordswordsunlineslinesunfoldrsortOnsortBysort permutations subsequencestailsinitsgroupBygroupdeleteFirstsByunzip7unzip6unzip5unzip4zipWith7zipWith6zipWith5zipWith4zip7zip6zip5zip4genericReplicate genericIndexgenericSplitAt genericDrop genericTake genericLengthinsertByinsert partition transpose intercalate intersperse intersectByunionByunion\\deleteBydeletenubBynub isInfixOf isSuffixOf isPrefixOf findIndices findIndex elemIndices elemIndex stripPrefix dropWhileEnd Text.Readreadreadslex readParenText.ParserCombinators.ReadPReadS Data.Functorvoid<$>lcmgcd^^^oddeven showParen showStringshowCharshowsShowSunzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl'scanl1scanlfoldl1'initlasttailhead Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeuncurrycurrysubtractasTypeOfuntil$!flip.constapliftM5liftM4liftM3liftM2when=<< MonadPlusmzeromplusString undefinederrorWithoutStackTrace&&||not maxLevelDimblaXY balancedWord encodeData _olorToRGB fancyName baseColorcolorToLiquidName FancyNamePlainFancyLiquidabortedKnownBfsabortedUnknownBfs bfsDistance runStrategyrollFreq rbCarrier rbMaxSizerbNextrbLength _timeTick turnsInSecondsInMsrangeFromSpeed timeTicks maxVectorDim normalizevalidateSingleRosterpointsnegTimedatestatus challenge gplayerName ourVictims theirVictims insertPos showTableshowNearbyScores _sdungeon _stotalDepth_sactorD_sitemD _sfactionD_stime_scops_shigh _sgameModeId partItemNmsgLinemsgHistrepMsg_repN truncateLinestruncateAttrLineFrontendSession modTranslate displayNoLock startupFunswindow srenderersfontsatlasstexturespreviousFramesforcedShutdownsdisplayPermitted fautoYesRef fasyncTimeoutfdelay tryFindActor updateEmbedApplyAll ApplyFirstAid sortPoint mkCorridor interiorAreaolegend buildFence tilePlacerollFlavourMapversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameDebugAidlabelaidcmdfactionlidbHPbtimetime keepArenaFact addProjectile projectBla findEntryPossitemEffectDisco effectSem effectEscapeeffectParalyzeeffectInsertMoveeffectTeleporteffectDropItemeffectSendFlyingeffectDropBestWeaponeffectActivateInvmanagePerRequest dropAllItems connFrontendcontinueRunDir renderFrames failErrorgetItem DefItemKeydefLabeldefCond defActionItemDialogState ISuitableIAll xhairLegalEps endAimingdoLook actorVerbMUmeleeAid displaceAidmoveSearchAlter alterTilealterTileAtPos verifyAlters guessAlter cmdAction loudUpdAtomic loudSfxAtomicmanageCalmAndDomination