# Cauldron2D v0.1.3 - Table of Contents > A 2D tile engine for terminals: a grid of tile ids, cheaply, as pixels or glyphs. ## Pages - [Cauldron2D](readme.md) - [Your first game: Cistern](tutorial.md) ## Modules - [Cauldron2D](Cauldron2D.md): A 2D tile engine for terminals: a grid of tile ids, drawn as pixels or as glyphs depending on what the terminal supports. - [Cauldron2D.Arenas](Cauldron2D.Arenas.md): The arenas a game offers: a `Cauldron2D.World` each, with whatever runs beside it, started on the first use of its name and stopped again once no player has been in it for a while. - [Cauldron2D.Arenas.OnDemand](Cauldron2D.Arenas.OnDemand.md): The name registry behind `Cauldron2D.Arenas.world_name/1`: `{:via, Cauldron2D.Arenas.OnDemand, id}` resolves to arena `id`'s world, starting the arena when it is not running. An id no arena is registered for resolves to `:undefined`. - [Cauldron2D.Arenas.Sweeper](Cauldron2D.Arenas.Sweeper.md): Stops arenas that have had no human in them for a while; they start again on the next use of their world's name. Each sweep also seats the children a running arena is short of (`Cauldron2D.Arenas.reseat/1`). - [Cauldron2D.Arenas.Table](Cauldron2D.Arenas.Table.md): The registered arenas, one record each, in an ETS table this process owns. - [Cauldron2D.Atlas](Cauldron2D.Atlas.md): A named catalogue of tiles. - [Cauldron2D.Atlas.Manifest](Cauldron2D.Atlas.Manifest.md): The `atlas.txt` beside an art directory's pictures: what a text renderer draws for each art, and how fast its frames go. - [Cauldron2D.Atlas.Tables](Cauldron2D.Atlas.Tables.md): Owns every atlas's composited-tile cache table, so a table outlives whichever process installed the atlas. - [Cauldron2D.Audio](Cauldron2D.Audio.md): Sound effects and music for one listener, over one `TuningFork` stage. - [Cauldron2D.Audio.Music](Cauldron2D.Audio.Music.md): Music in sections and layers, switched on bar boundaries and mixed per listener. - [Cauldron2D.Audio.Rendered](Cauldron2D.Audio.Rendered.md): Every sound a game plays, rendered once: a `TuningFork.Voice` at a rate becomes mono PCM the first time it is asked for and is kept in an ETS table for every stage on the node after, whatever its gain or pan, which are applied to the copy each time. - [Cauldron2D.Beacon](Cauldron2D.Beacon.md): How a server on the local network is found: the host says so every two seconds on a UDP port — `port/0`, the `:beacon_port` in the `:cauldron_2d` config, 2299 unless set — to the broadcast address and to this machine, and whoever listens (`Cauldron2D.Beacon.Listener`) hears it. - [Cauldron2D.Beacon.Listener](Cauldron2D.Beacon.Listener.md): Hears the servers of one game calling on the local network (`Cauldron2D.Beacon`) and keeps those heard in the last six seconds. - [Cauldron2D.Body](Cauldron2D.Body.md): A point mass with a heading: position, velocity, and one of `headings` directions. - [Cauldron2D.Camera](Cauldron2D.Camera.md): Resolves which part of a world is on screen. - [Cauldron2D.Camera.Follow](Cauldron2D.Camera.Follow.md): A camera that trails its target and can be shaken, as a value the game steps. - [Cauldron2D.Client.Game](Cauldron2D.Client.Game.md): What a game gives a client — the terminal's, the browser's or the desktop's — to put its worlds in front of a player. One contract; every front end draws from it. - [Cauldron2D.Client.Hud](Cauldron2D.Client.Hud.md): The shapes a game's hud comes in, and one form every front end reads. - [Cauldron2D.Collision](Cauldron2D.Collision.md): Bodies against a tile grid, and against each other. - [Cauldron2D.Collision.Buckets](Cauldron2D.Collision.Buckets.md): Bodies sorted into square buckets, so that only neighbours are compared. - [Cauldron2D.Game](Cauldron2D.Game.md): What a game gives `Cauldron2D.World` to run: a pure value and the callbacks that change it. - [Cauldron2D.Grid.Coarse](Cauldron2D.Grid.Coarse.md): A tile grid in blocks, for finding a way when the tiles are many: a block is passable when every tile in it is open, and a path is a run of block centres. - [Cauldron2D.Grid.Fov](Cauldron2D.Grid.Fov.md): Recursive shadowcasting: which tiles an observer can see from where it stands. - [Cauldron2D.Grid.Path](Cauldron2D.Grid.Path.md): Ways across a tile grid: breadth-first for the fewest steps, A* for the cheapest. - [Cauldron2D.Input](Cauldron2D.Input.md): Turns terminal events into the set of actions a player is holding. - [Cauldron2D.Ledger](Cauldron2D.Ledger.md): Every player's results, kept on disk, and the boards made from them. - [Cauldron2D.Ledger.Recorder](Cauldron2D.Ledger.Recorder.md): One arena's scribe: subscribed to its world's events (`Cauldron2D.World.Events`), it puts every `{tag, row}` — `:result` unless told otherwise — in the ledger under the arena's name. It stops when the world does. - [Cauldron2D.Loop](Cauldron2D.Loop.md): A fixed timestep. - [Cauldron2D.Map](Cauldron2D.Map.md): A tile map written as text: a grid of characters, one per tile, with optional `name: value` options ahead of it. - [Cauldron2D.Minimap](Cauldron2D.Minimap.md): The whole map in a few rows of braille: walls in one colour, marks — players, bases, goals — over them, each a dot or a two-by-two. - [Cauldron2D.Particles](Cauldron2D.Particles.md): Short-lived sprites — sparks, debris, smoke — with a cap on how many exist at once. - [Cauldron2D.Paths](Cauldron2D.Paths.md): Where a game keeps its files: one directory per game under each of the XDG base directories. - [Cauldron2D.Player](Cauldron2D.Player.md): A player's side of a `Cauldron2D.World`: join, send input, receive frames, leave. - [Cauldron2D.Renderer](Cauldron2D.Renderer.md): Chooses between drawing a surface as pixels or as glyphs. - [Cauldron2D.Replay](Cauldron2D.Replay.md): A record of everything that was done to a world, and the means to do it again. - [Cauldron2D.Replay.Viewer](Cauldron2D.Replay.Viewer.md): Plays a `Cauldron2D.Replay` back on a clock, sending a watcher the frames one recorded player saw. - [Cauldron2D.Rng](Cauldron2D.Rng.md): A random number generator carried in a game's state rather than the process dictionary. - [Cauldron2D.Robot](Cauldron2D.Robot.md): A computer player: a process that joins a world as `{:robot, n}` and plays by its view, deciding every few frames through a brain module the game supplies. - [Cauldron2D.Save](Cauldron2D.Save.md): Saved games: a game state kept on disk under a slot name, and read back to start a `Cauldron2D.World` from with its `:state` option. - [Cauldron2D.Sheet](Cauldron2D.Sheet.md): A `Cauldron2D.Atlas` packed onto one raster, with an index of where every art is. - [Cauldron2D.Stats](Cauldron2D.Stats.md): How this node is keeping up: every running arena's world as `Cauldron2D.World.stats/1` gives it, and the node it runs on. - [Cauldron2D.Surface](Cauldron2D.Surface.md): Composites a grid of cells into one `FrenchCurve.Raster`. - [Cauldron2D.Test](Cauldron2D.Test.md): Drives a `Cauldron2D.Game` in a test, with no world process and no clock: join players, hold actions, run ticks, read views and events. - [Cauldron2D.Trace](Cauldron2D.Trace.md): A trace of what happened and when, written as one line per event, and read back for `mix cauldron.report`. - [Cauldron2D.Tuning](Cauldron2D.Tuning.md): Every number that decides how a game plays, in one value the game carries in its state and a settings page can show and change. - [Cauldron2D.World](Cauldron2D.World.md): Runs a `Cauldron2D.Game` at a fixed tick and keeps its players supplied with views. - [Cauldron2D.World.Events](Cauldron2D.World.Events.md): A world's events, told each tick to processes that are not its players — a recorder, a referee, a bot that reads the game without playing it. - [Cauldron2D.World.Presence](Cauldron2D.World.Presence.md): Who comes and goes in every world on the node, told to whoever asks. ## Mix Tasks - [mix cauldron.report](Mix.Tasks.Cauldron.Report.md): Summarise a trace written by `Cauldron2D.Trace`.