# Hurry Curry! Data

The game data includes recipes and maps. Its only required on the server side.

`index.yaml` is where all maps and recipe sets are listed for the server to use;
This includes additional metadata for maps.

## Recipes

Each recipe set is a YAML file too containing a list of each possible recipe.
The default recipe set this is generated from `recipes/default.js`. Anticurry is
based of this but just switches input and output fields via a sed script.

## Map format

Maps are defined in YAML format containing "ASCII-art" picture of the map tiles.
Each character is assigned a tile name and additionaly properties in a
lookup-table below. Properties are parsed like command-line argument.

- Exclusive (`-x`): The player is only allowed to put items on that tile that
  have a recipe specific to that tile.
- Walkable (`-w`): The tile has no collision and no items can be put on it.
- Collider (`-c`): No items can be put on the tile (and it has collision, which
  is the default).
- Book (`--book`): Clicking on the tile opens the book.
- Chef spawn (`--chef-spawn`): Marks the spawn point for chefs and bots.
- Customer spawn (`--customer-spawn`): Marks the spawn point for customers
- Item (`-i=<name>`): Populates the tile with a give item.
- Conveyor (`--conveyor=<x>,<y>`): Moves items on this tile to another tile with
  relative position specified.

Tile properties of any specific tile should generally be the same across all
maps. For example crates should always be exclusive.

## Entities

An incomplete list of entities.

- `!customers` Customers that walk to chairs, order items and reward points.
  - `spawn_cooldown`(number): Minimum delay between spawning new customers in
    seconds. The actual time is randomized in range min..min*2.
  - `scaling_factor`(number): Maximum number of customers to be spawned per
    chair. If the limit is not reached, new ones are spawned regularly.
- `!environment` A static list of environment modifiers (strings) for this map.
- `!environment_effect` Environment modifier that is toggles on and off in
  intervals
  - `name`(string)
  - `on`(number, default=40): Delay from enable to disable
  - `off`(number, default=40): Delay from disable to enable
  - `on_stdev`(opt. number): If set, randomizes delay with gaussian distribition
    and given standard deviation.
  - `off_stdev`(opt. number)
- `!player_portal` Teleports players that get fairly close to `from` to `to`.
  - `from`(2d float vector)
  - `to`(2d float vector)
- `!item_portal` Teleports items.
  - `from`(2d int vector)
  - `to`(2d int vector)
- `!player_portal_pair` Like a bidirectional player_portal. Automatically places
  walkable black holes on both ends that convert to white when a player exits
  them.
  - `a`(2d int vector)
  - `b`(2d int vector)
- `!tag_minigame`
