h$0+7      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Nonet:FunGEn#invisible colors (in RGB) of bitmap;FunGEn width, height and data of bitmap<FunGEncolor in RGB format=FunGEna bidimensional point in space>FunGEn%position, size and name of the window:;<=>None?FunGEn7String to be printed, font, screen position, color RGB.@FunGEnDisplay these texts on screen. 98765432?@NoneAFunGEn0trace an expression using a custom show functionBFunGEntrace a showable expressionCFunGEn4labelled trace - like strace, with a label prependedDFunGEnmonadic trace - like strace, but works as a standalone line in a monadTFunGEnto be used when no invisibility must be added when loading a fileWFunGEnreturn the max indexes of a matrix (assumed that its lines have the same length)ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]None'^_`abcdefghijklmnopqrstuvwxyz{|}~None 4FunGEnA game background (flat color, scrollable texture, or tile map), or several of them.FunGEncreates a PreColorMapFunGEncreates a PreTextureMapFunGEncreates a PreTileMap, cheking if the tileMatrix given is valid and automatically defining the map sizeFunGEncreates a multimapFunGEnclear the screenFunGEndraw the background mapFunGEnindex of picture, possibility to move, cost to move, additional paramsNone FunGEnLoads a bitmap from a file.FunGEnLoads n bitmaps from n files. None-FunGEnIOGame is the monad in which game actions run. An IOGame action takes a Game (with type parameters t s u v), performs some IO, and returns an updated Game along with a result value (a): newtype IOGame t s u v a = IOG (Game t s u v -> IO (Game t s u v,a))The name IOGame was chosen to remind that each action deals with a Game, but an IO operation can also be performed between game actions (such as the reading of a file or printing something in the prompt).FunGEnA game has the type  Game t s u v, where ,t is the type of the game special attributes.s is the type of the object special attributes(u is the type of the game levels (state)v is the type of the map tile special attribute, in case we use a Tile Map as the background of our gameFor a mnemonic, uh...t - Top-level game attribute type,s - Sprite object attribute type,u - Updating game state type,v - V"icinity (map tile) attribute type.Internally, a Game consists of: gameMap :: IORef (GameMap v) -- a map (background) gameState :: IORef u -- initial game state gameFlags :: IORef GameFlags -- initial game flags objManagers :: IORef [(ObjectManager s)] -- some object managers 8textList :: IORef [Text] -- some texts =quadricObj :: QuadricPrimitive -- a quadric thing windowConfig :: IORef WindowConfig -- a config for the main window >gameAttribute :: IORef t -- a game attribute ;pictureList :: IORef [TextureObject] -- some pictures fpsInfo :: IORef (Int,Int,Float) -- only for debuggingFunGEndraws the background mapFunGEn?returns a mapTile, given its pixel position (x,y) in the screenFunGEn8returns a mapTile, given its index (x,y) in the tile mapFunGEn1paint the whole screen with a specified RGB colorFunGEn"set the current map for a MultiMapFunGEndraws all visible objectsFunGEndraw one objectFunGEn/changes objects position according to its speedFunGEndestroys objects from the gameFunGEn destroys an object from the gameFunGEnreturns the list of all objects from the group whose name is givenFunGEn,adds an object to a previously created groupFunGEnadds an object to a new groupFunGEnreturns an object manager of the game, given its name (internal use)FunGEnreturns an object of the game, given its name and is object manager nameFunGEnthere is no need to search through the managers, because the name of an object is never modified so the result of this function will always be safe.FunGEnbecause an object can have its group (manager) name modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe.FunGEnbecause an object can have its sleeping status modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe.FunGEnbecause an object can have its size modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe.FunGEnbecause an object can have its position modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe.FunGEnbecause an object can have its speed modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe.FunGEnbecause an object can have its attribute modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe.FunGEn>changes the sleeping status of an object, given its new statusFunGEn9changes the position of an object, given its new positionFunGEn3changes the speed of an object, given its new speedFunGEn5changes the current picture of a multitextured objectFunGEn;changes the attribute of an object, given its new attributeFunGEnreplaces an object by a new one, given the old object and the function that must be applied to it.FunGEn=checks the collision between an object and the top of the mapFunGEnchecks the collision between an object and the top of the map in the next game cicleFunGEnchecks the collision between an object and the bottom of the mapFunGEnchecks the collision between an object and the bottom of the map in the next game cicleFunGEnchecks the collision between an object and the right side of the mapFunGEnchecks the collision between an object and the right side of the map in the next game cicleFunGEnchecks the collision between an object and the left side of the mapFunGEnchecks the collision between an object and the left side of the map in the next game cicleFunGEn(checks the collision between two objectsFunGEn?checks the collision between two objects in the next game cicleFunGEnprints a string in the promptFunGEn%prints a string in the current windowFunGEninternal use of the engineFunGEn,shows the frame rate (or frame per seconds) FunGEn>delay for N seconds while continuing essential game functions None!GFunGEnGiven a fungen Game and IOGame step action, generate a GLUT display callback that steps the game and renders its resulting state.   runs this automatically.None"FunGEnInitialise the input system, which keeps a list of input event to action bindings and executes the the proper actions automatically. Returns a function for adding bindings, and another which should be called periodically (eg from refresh) to trigger still-down actions. *)'( *)'( None#IFunGEnUsed by  . to configure the main loop's timing strategy.FunGEn#Change the current timing strategy. None&FunGEn2A mapping from an input event to an input handler.FunGEnA FunGEn input handler is like an IOGame (game action) that takes two extra arguments: the current keyboard modifiers state, and the current mouse position. (For a StillDown event, these will be the original state and position from the Press event.)FunGEnInitialise the input system, which keeps a list of input event to action bindings and executes the the proper actions automatically. Returns a function for adding bindings (GLUT's - should return the FunGEn-aware one instead ?), and another which should be called periodically (eg from refresh) to trigger still-down actions.9!  &%$#"*)'(10/.-,+None'FunGEn-Configure a FunGEn game and start it running.FunGEn:Exit the program successfully (from within a game action). FunGEnmain window layoutFunGEnbackground/map(s)FunGEn object groupsFunGEninitial game stateFunGEninitial game attributeFunGEninput bindingsFunGEn step actionFunGEnmain loop timingFunGEn image filesNone(!  &%"$#*()'1+,-.0/92345687:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>=<;:98765432?@ghabcdef^_`zijklnmoprstuvq}~{|wxy*)'(!  10/.-,+&%$#"EFHIJKLMNOPQSRTUVWXYZ[\]GABCD Safe-Inferred+" !"#$%&'()*+,-./012345678894:;<=<><?<@<A<B<9CDCECFCGCHCICJCKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                    !FunGEn-1.1-F456cE7tEf9Aztmb9tu65yGraphics.UI.FungenGraphics.UI.GLUT.InputGraphics.UI.Fungen.TypesGraphics.UI.Fungen.TextGraphics.UI.Fungen.UtilGraphics.UI.Fungen.ObjectsGraphics.UI.Fungen.MapGraphics.UI.Fungen.LoaderGraphics.UI.Fungen.GameGraphics.UI.Fungen.DisplayfunInitGraphics.UI.Fungen.TimerGraphics.UI.Fungen.InputGraphics.UI.Fungen.Init Paths_FunGEn%OpenGL-3.0.3.0-BvJfRyaBtyWCfrqcxNRHjQ'Graphics.Rendering.OpenGL.GL.CoordTransPosition$GLUT-2.7.0.15-68CUTLvofdNH28uxC58kJ3!Graphics.UI.GLUT.Callbacks.Window KeyUnknownKeyAltRKeyAltLKeyCtrlRKeyCtrlL KeyShiftR KeyShiftL KeyDeleteKeyBegin KeyNumLock KeyInsertKeyEndKeyHome KeyPageDown KeyPageUpKeyDownKeyRightKeyUpKeyLeftKeyF12KeyF11KeyF10KeyF9KeyF8KeyF7KeyF6KeyF5KeyF4KeyF3KeyF2KeyF1 SpecialKeyaltctrlshift Modifiers MouseButtonCharKeyGraphics.UI.GLUT.TypesAdditionalButton WheelDownWheelUp RightButton MiddleButton LeftButtonGraphics.UI.GLUT.Raw.Fonts Helvetica18 Helvetica12 Helvetica10 TimesRoman24 TimesRoman10 Fixed9By15 Fixed8By13 BitmapFontInvList AwbfBitmap ColorList3Point2D WindowConfigText putGameText tracewithstraceltracemtrace texCoord2vertex3 bindTexturetexStufftoRadrandInt randFloat randDouble shiftLeft toDecimalpow2toBinarymake0ord2 dropGLsizeiaddNoInvisibilityracMod matrixToList matrixSize inv2color3pathAndInv2color3Listpoint2DtoVertex3isEmptywhenunlessFillModeFilledUnfilled ObjectPictureTexBasic PrimitivePolygCircle ObjectManager GameObjectgetGameObjectIdgetGameObjectNamegetGameObjectManagerNamegetGameObjectAsleepgetGameObjectSizegetGameObjectPositiongetGameObjectSpeedgetGameObjectAttributeupdateObjectPictureupdateObjectAsleepupdateObjectSizeupdateObjectPositionupdateObjectSpeedupdateObjectAttributegetObjectManagerNamegetObjectManagerCountergetObjectManagerObjectsobject objectGroupaddObjectsToManagerdrawGameObjectsdrawGameObjectfindObjectFromIdsearchObjectManagersearchGameObject updateObjectmoveGameObjectsdestroyGameObjectGameMap TileMatrixTile getMapSize isTileMapgetTileMapTileMatrixgetTileMapTileSizegetTileMapScrollgetTileMapSizegetTilePictureIndexgetTileBlockedgetTileMoveCostgetTileSpecialAttribute getCurrentMapupdateCurrentMap isMultiMapupdateCurrentIndexcolorMap textureMaptileMapmultiMapclearGameScreen drawGameMapFilePictureList loadBitmaploadBitmapListIOGameGame runIOGame runIOGameMliftIOtoIOGameliftIOtoIOGame' getGameState setGameState getGameFlags setGameFlagsgetObjectManagerssetObjectManagersgetGameAttributesetGameAttribute createGamedrawMapgetTileFromWindowPositiongetTileFromIndex clearScreensetCurrentMapIndexenableGameFlagsdisableGameFlagsenableMapDrawingdisableMapDrawingenableObjectsDrawingdisableObjectsDrawingenableObjectsMovingdisableObjectsMovingdrawAllObjects drawObjectmoveAllObjectsdestroyObjects destroyObjectgetObjectsFromGroupaddObjectsToGroupaddObjectsToNewGroupfindObjectManager findObject getObjectNamegetObjectGroupNamegetObjectAsleep getObjectSizegetObjectPositiongetObjectSpeedgetObjectAttributesetObjectAsleepsetObjectPositionsetObjectSpeedsetObjectCurrentPicturesetObjectAttribute replaceObject reverseXSpeed reverseYSpeedobjectTopMapCollisionobjectTopMapFutureCollisionobjectBottomMapCollisionobjectBottomMapFutureCollisionobjectRightMapCollisionobjectRightMapFutureCollisionobjectLeftMapCollisionobjectLeftMapFutureCollisionobjectsCollisionobjectsFutureCollisionobjectListObjectCollisionobjectListObjectFutureCollisionpointsObjectCollisionpointsObjectListCollision printOnPrompt printOnScreen printText randomInt randomFloat randomDoubleshowFPSwaitdisplayStillDownHandler KeyBinder InputHandlerKeyEventPress StillDownRelease glutInitInput $fEqKeyEvent RefreshTypeIdleTimer setRefresh InputBinding funInitInputfunExitversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName