# ink.igav.galaxius.temp.game

> Published by [galaxius-gm.igav.ink](https://lexicon.garden/identity/did:plc:whg4cehv5lzx6yorjkwzbk56)

✓ This is the authoritative definition for this NSID.

## Description

A Galaxius game: its map, its ruleset and the settings a server needs to run it.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:whg4cehv5lzx6yorjkwzbk56/ink.igav.galaxius.temp.game)
- [Documentation](https://lexicon.garden/lexicon/did:plc:whg4cehv5lzx6yorjkwzbk56/ink.igav.galaxius.temp.game/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:whg4cehv5lzx6yorjkwzbk56/ink.igav.galaxius.temp.game/examples)

## Definitions

### `ink.igav.galaxius.temp.game#botSeat`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `kind` | `string` | Yes | The bot's kind, one of the M1d bot configurations. |
| `seat` | `integer` | Yes | The seat the bot plays. |

### `ink.igav.galaxius.temp.game`

**Type**: `record`

A Galaxius game, written once by the game master; the game's whole public identity and the commitment its periods hang from.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `botSeats` | `array` | Yes | The seats the game master plays with in-process bots. |
| `chainHead` | `string` | Yes | The hash chain's head, sha256 of period zero's secret, as 64 lowercase hex digits. |
| `createdAt` | `string` (datetime) | Yes | When the game was created. |
| `endTick` | `integer` | Yes | The tick the game ends on, from one; the period count is the ceiling of endTick over periodTicks. |
| `engineVersion` | `string` | Yes | The engine version the game is pinned to; a changed engine refuses to resume it. |
| `liveKey` | `string` | Yes | The server's ack key as a did:key, so anyone can check its acknowledgements. |
| `map` | `ref` → `com.atproto.repo.strongRef` | Yes | A strongRef to the map record. |
| `options` | `ref` → `#options` | Yes | The creation flags that change the rules. |
| `periodTicks` | `integer` | Yes | How many ticks make one period. |
| `preset` | `string` | Yes | The game's shape: a short match, or a persistent game that runs for days. |
| `publicKey` | `string` | No | The game master's public key, for M4's encrypted periods. |
| `ruleset` | `ref` → `com.atproto.repo.strongRef` | Yes | A strongRef to the ruleset record. |
| `seats` | `integer` | Yes | The number of seats the game was created with, from two to sixteen. |
| `startRule` | `string` | Yes | How the seats got their start stars; drawn from the game's seed in M3b1. |
| `tickMs` | `integer` | Yes | Real milliseconds per tick, fixed for the game. |

### `ink.igav.galaxius.temp.game#options`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `anonymous` | `boolean` | No | Whether seats after the first may be taken without an ATProto account; absent in games from before identity. |
| `diplomacy` | `string` | No | The diplomacy mode the ruleset's flags.diplomacy is set to; absent keeps the ruleset's own. |
| `redirect` | `boolean` | Yes | Whether fleets in flight may always be redirected, overriding the ruleset's redirect gate. |
| `rich` | `boolean` | Yes | Whether the game has the rich start: more starting money and capacity. |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "botSeat": {
      "properties": {
        "kind": {
          "description": "The bot's kind, one of the M1d bot configurations.",
          "knownValues": [
            "raider",
            "balanced",
            "turtle"
          ],
          "maxGraphemes": 32,
          "type": "string"
        },
        "seat": {
          "description": "The seat the bot plays.",
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "seat",
        "kind"
      ],
      "type": "object"
    },
    "main": {
      "description": "A Galaxius game, written once by the game master; the game's whole public identity and the commitment its periods hang from.",
      "key": "any",
      "record": {
        "properties": {
          "botSeats": {
            "description": "The seats the game master plays with in-process bots.",
            "items": {
              "ref": "#botSeat",
              "type": "ref"
            },
            "maxLength": 100,
            "type": "array"
          },
          "chainHead": {
            "description": "The hash chain's head, sha256 of period zero's secret, as 64 lowercase hex digits.",
            "maxLength": 64,
            "type": "string"
          },
          "createdAt": {
            "description": "When the game was created.",
            "format": "datetime",
            "type": "string"
          },
          "endTick": {
            "description": "The tick the game ends on, from one; the period count is the ceiling of endTick over periodTicks.",
            "minimum": 1,
            "type": "integer"
          },
          "engineVersion": {
            "description": "The engine version the game is pinned to; a changed engine refuses to resume it.",
            "maxGraphemes": 64,
            "type": "string"
          },
          "liveKey": {
            "description": "The server's ack key as a did:key, so anyone can check its acknowledgements.",
            "maxLength": 128,
            "type": "string"
          },
          "map": {
            "description": "A strongRef to the map record.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "options": {
            "description": "The creation flags that change the rules.",
            "ref": "#options",
            "type": "ref"
          },
          "periodTicks": {
            "description": "How many ticks make one period.",
            "minimum": 1,
            "type": "integer"
          },
          "preset": {
            "description": "The game's shape: a short match, or a persistent game that runs for days.",
            "knownValues": [
              "match",
              "persistent"
            ],
            "maxGraphemes": 32,
            "type": "string"
          },
          "publicKey": {
            "description": "The game master's public key, for M4's encrypted periods.",
            "maxLength": 128,
            "type": "string"
          },
          "ruleset": {
            "description": "A strongRef to the ruleset record.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "seats": {
            "description": "The number of seats the game was created with, from two to sixteen.",
            "maximum": 16,
            "minimum": 2,
            "type": "integer"
          },
          "startRule": {
            "description": "How the seats got their start stars; drawn from the game's seed in M3b1.",
            "knownValues": [
              "drawn"
            ],
            "maxGraphemes": 32,
            "type": "string"
          },
          "tickMs": {
            "description": "Real milliseconds per tick, fixed for the game.",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "map",
          "ruleset",
          "preset",
          "tickMs",
          "periodTicks",
          "endTick",
          "seats",
          "botSeats",
          "options",
          "startRule",
          "engineVersion",
          "chainHead",
          "liveKey",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "options": {
      "properties": {
        "anonymous": {
          "description": "Whether seats after the first may be taken without an ATProto account; absent in games from before identity.",
          "type": "boolean"
        },
        "diplomacy": {
          "description": "The diplomacy mode the ruleset's flags.diplomacy is set to; absent keeps the ruleset's own.",
          "knownValues": [
            "none",
            "open",
            "fixed_teams"
          ],
          "maxGraphemes": 32,
          "type": "string"
        },
        "redirect": {
          "description": "Whether fleets in flight may always be redirected, overriding the ruleset's redirect gate.",
          "type": "boolean"
        },
        "rich": {
          "description": "Whether the game has the rich start: more starting money and capacity.",
          "type": "boolean"
        }
      },
      "required": [
        "rich",
        "redirect"
      ],
      "type": "object"
    }
  },
  "description": "A Galaxius game: its map, its ruleset and the settings a server needs to run it.",
  "id": "ink.igav.galaxius.temp.game",
  "lexicon": 1
}
```
