class Game s where
update :: Asset -> Input -> s -> Update s
draw :: s -> Draw Units is a game state data type which can be flexibly defined.
Each functions are executed in order update, draw, sound at every frame.
See Action and Interpreter Guide
exampleMap :: RawMap
exampleMap = RawMap """
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈚🈚🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈚🈚🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈵🈵🈵🈵🈳🈳🈳🈳🈳🈳🈳🈳🈵🈵🈵🈵
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈵🈵🈵🈵🈵🈵🈵🈵🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳🈳
🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵🈵
"""Each emoji is mapped to a tile image and drawn in the position shown. Line wrapping may effect how the map is displayed in the code editor but will not effect how it is parsed.
Note: 🈳 is the special emoji that represents vacant space.
See type Asset and use mkAsset function for loading map that you edited.
mkAsset :: Array RawMap -> Effect AssetStarts the main game loop that will continuously render the game on the canvas until the web page is closed or the canvas becomes unavaiable.
emo8 :: forall s. Game s => s -> Asset -> MonitorSize -> Effect UnitDefines the keyboard inputs that will be used for the game. This includes A-Z, Space, Enter and Backspace. All other keys are ignored.
type InputFlags = {
isSpace :: Boolean,
isEnter :: Boolean,
isBackspace :: Boolean,
isA :: Boolean,
isB :: Boolean,
isC :: Boolean,
isD :: Boolean,
...
}Defines the state of each of the InputFlags.
activerefers to input keys that are were pressed or held down at the last input poll.catchedrefers to input keys that were pressed at the last input poll.releaserefers to input keys that were release at the last input poll.
type Input = {
active :: InputFlags,
catched :: InputFlags,
released :: InputFlags
}See FFI Guide