{% if error %}{% endif %} {% if room.status == "lobby" %}

Seats

{{ members|length }}/4
    {% for seat in members %}
  1. {{ seat.seat + 1 }} {{ seat.name }}{{ seat.difficulty|capitalize if seat.controller == 'ai' else ('Ready' if seat.ready else 'Not ready') }}{% if seat.is_host %} · Host{% endif %} {% if member.is_host and not seat.is_host %}
    {% endif %}
  2. {% endfor %}
{% if member.is_host and members|length < 4 %}
{% endif %} {% if member.controller == 'human' %}
{% endif %}

Content pack

{% if room.pack %}Loaded and validated{% else %}Not loaded{% endif %}
{% if room.pack %}

{{ room.pack.metadata.name }} v{{ room.pack.metadata.version }}

{% else %}

No content pack is loaded. The game cannot start until the host uploads a valid JSON pack.

{% endif %} {% if member.is_host %}
{% endif %}

JSON Schema{% if room.pack %} · Download active pack{% endif %}

Table rules

Frozen on start
{% if member.is_host %}
{% for key, label in [('classic','Classic'),('objectives','Objective race'),('objectives_outposts','Objective + outpost'),('eastern_fortifications','Eastern + fortification'),('all','All modules')] %}
{% endfor %}
{% endif %}

Modules

{% for key, label in [('objectives','Objectives'),('outposts','Outposts'),('eastern_decks','Eastern decks'),('fortifications','Fortifications')] %} {% endfor %}
Advanced module interactions
{% for key, value in room.settings.interactions %}{% endfor %}
{% if member.is_host %}{% endif %}
{% if member.is_host %}
{{ 'Pack loaded' if room.pack else 'Pack required' }} · {{ 'Players ready' if all_humans_ready else 'Waiting for every human to ready up' }} · Rules set
{% endif %} {% else %}
Round {{ state.round_number }}{% if room.status == 'finished' %}Game complete · {% for seat in state.winners %}{{ state.players[seat].name }}{% if not loop.last %}, {% endif %}{% endfor %}{% else %}{{ state.players[state.current_seat].name }}’s turn{% endif %}Target {{ room.settings.target_score }}
History
{% for entry in state.log[-12:]|reverse %}

{{ entry }}

{% endfor %}
{% if room.status == 'finished' %}{% if member.is_host %}
{% else %}Waiting for the host{% endif %}{% endif %}
{% for key, market in state.markets.items() %}
{{ key|replace(':',' · Tier ') }}{{ state.decks[key] }} left{% if deck_reserve_actions.get(key) %}
{% else %}{% endif %}
{% for card_id in market %}{% set card = cards[card_id] %}{% set available = card_actions.get(card_id, {}) %}
{{ card.points }}◆{% if card.bonus_resource %}{{ resources[card.bonus_resource].symbol }}{% else %}{% endif %}

{{ card.label }}

Tier {{ card.tier }} · {{ card.effect.kind|replace('_',' ') }}

{% for resource_id, value in card.cost.items() %}{{ resources[resource_id].symbol }} {{ value }}{% endfor %}
{% if state.fortifications.get(card_id) %}Fortified{% endif %}
{% if available.get('purchase') %}
{% else %}{% endif %} {% if available.get('reserve') %}
{% else %}{% endif %}
{% endfor %}
{% endfor %}
{% set viewing_player = state.players[member.seat] %}
{{ viewing_player.name }}{{ viewing_player.tokens.values()|sum }} / {{ room.settings.token_limit }}GemsGems / Cards
{% for resource_id in normal_resource_ids %}{% set resource = resources[resource_id] %}{{ resource.symbol }}{{ viewing_player.tokens[resource_id] }}/{{ bonus_counts[viewing_player.seat].get(resource_id, 0) }}{% endfor %} {% set wild = pack.wild_resource %}{{ wild.symbol }}{{ viewing_player.tokens[wild.id] }}/0
{% if viewing_player.reserved %}
Reserved{% for card_id in viewing_player.reserved %}{% set card = cards[card_id] %}{% set purchase = card_actions.get(card_id, {}).get('purchase') %}
{{ card.label }}{{ card.points }}◆ · {% for resource_id, value in card.cost.items() %}{{ resources[resource_id].symbol }}{{ value }} {% endfor %}{% if purchase %}
{% else %}{% endif %}
{% endfor %}
{% endif %}
{% if room.status != 'finished' and member.seat == state.current_seat and state.pending %}

Your move

Resolve: {{ state.pending.kind|replace('_',' ') }}{% if state.pending.kind == 'discard_tokens' %}Return exactly {{ state.pending.amount }} excess gem{{ '' if state.pending.amount == 1 else 's' }}.{% endif %}
{% if state.pending.kind == 'discard_tokens' %}
{% for resource_id in all_resource_ids %}{% set resource = resources[resource_id] %}{% endfor %}
{% else %}
{% for label, command_json in actions %}
{% else %}No legal action available.{% endfor %}
{% endif %}
{% endif %} {% endif %}