Skip to content

Card Game

The Forest of Humbaba is a strategic card game for 2–4 players set in ancient Mesopotamia. It is both a standalone tabletop experience and a research instrument for exploring the Tragedy of the Commons, the Seneca Effect, and the paradoxes of adaptive behaviour. Players take the roles of rival powers vying for the precious cedar of the sacred forest — but the forest is finite, its health fragile, and its true depth uncertain.


The Game Concept

The card game translates every mechanical element of the BDPD Platform into the language of a physical tabletop experience. Players draw cards from personal decks, play them simultaneously, and harvest cedars from a shared Forest Deck. The forest regenerates each turn, but its capacity depends on its Health — a track from 0 to 10. If the forest collapses, no one wins. The winner is whoever has the most cedars — but only if the forest survives.

"The card game builds intuition. The simulation explains why." — BDPD Project Mantra


Relationship to the Platform

Every mechanical element has a direct analogue:

BDPD Platform The Forest of Humbaba
Commons stock \(S_t\) Forest Deck — visible cedars
Hidden reserve Box Reserve — concealed pool feeding regeneration
Regeneration rate \(r\) Forest Health (0–10). Each turn, \(\lfloor H/2 \rfloor\) cedars move from Box Reserve to Forest Deck
Stochastic collapse (Forest Die) Physical Forest Die (d6) — when the Forest Deck is empty and harvest is demanded, roll for each excess unit
Seneca Effect (regen shock asymmetry) Seneca Clip — triggered when Health drops ≥2 in one turn; next turn's regeneration reduced by 2
Harvest capacity Capacity tokens — each adds +1 to every harvest
The Mule (strategy override) Stranger-King dual mode — cooperative phase accumulates Patience; defection converts them into a devastating burst
Gate+Rank victory Survival prerequisite — collapse → no winner; otherwise most cedars wins
Observation noise Simulator only--forest-noise injects noise for LLM agents

The mapping is exact but not redundant. The platform's stochastic collapse and Seneca asymmetry are mapped to distinct mechanisms: the Forest Die handles threshold uncertainty, while the Seneca Clip handles the asymmetric regen-shock dynamic. They are complementary.


Three Epistemic Functions

The card game serves three purposes that the computational platform cannot:

  1. Behavioural validation. Do human players exhibit the same paradoxes observed in the platform? If so, they are properties of the strategic structure, not artefacts of heuristic design.
  2. Generative ground truth. LLM agents reading the same rules as human players enable direct comparison of language-mediated and heuristic decision processes.
  3. Tacit knowledge elicitation. The tabletop setting compels players to articulate reasoning about hidden reserves and collapse risk in real time, yielding qualitative data that complements quantitative logs.

Neither instrument alone is sufficient: the platform produces statistical regularities but no intuition; the card game produces intuition but no statistics. Together they form a dual-mode laboratory.


Components (Physical Edition)

Component Quantity Description
Archetype Decks 1 × 18 + 3 × 20 cards Warrior-King (18), Temple Keeper, River Merchant, Stranger-King
Event Deck 12 cards Exogenous perturbations drawn on rounds 3, 5, 7
Forest Deck 30 cards Visible cedar pool (face down)
Box Reserve 20 cards Hidden regeneration pool
Forest Health Track 0–10 Starts at 6
Capacity tokens 12 Permanent +1 harvest bonus
Patience tokens 10 Stranger-King resource
Renewal tokens 6 One-time regeneration boost
Forest Die 1 × d6 Stochastic collapse
Defection Token 1 Double-sided: Cooperative / Aggressive

Simulation Modes

The Python simulator (cards_ai_play.py) implements all rules for automated play in two modes:

All players run the same built-in strategies as the platform — Warrior-King (aggressive), Temple Keeper (conservative), River Merchant (adaptive), Stranger-King (dual-mode). No LLM required. Used for all CT1–CT5 tournament experiments.

One or more players are replaced by language model agents accessed via an OpenAI-compatible API. Supports:

  • --api-model / --api-base-url for model selection
  • --forest-noise FLOAT for Gaussian noise on the Forest Deck estimate
  • --nudge for archetype-specific behavioural nudges
  • --lock-defection to prevent voluntary Stranger-King defection

The Four Archetypes

Archetype Strategy Platform Equivalent Wins By
Warrior-King 🗡️ Maximises harvest; self-amplifying Capacity Aggressive Accumulating Stockpile rapidly — often at cost of collapse
Temple Keeper 🌿 Heals the forest; sacrifices personal gain Conservative Surviving to the end with a modest Stockpile while others collapse
River Merchant 📈 Reactive; copies trends; exploits information Adaptive Flexibility — but suffers from fatal lag and the Vacuum Effect
Stranger-King 🎭 Dual-mode: cooperative → devastating defection The Mule Timing the betrayal for maximum burst without triggering collapse

See Archetypes for deck compositions, key cards, and strategy details.


Key Mechanics at a Glance

Mechanic Effect Platform Equivalent
Forest Die d6 roll per excess harvest unit; failure = collapse Stochastic collapse
Seneca Clip Health drop ≥2 → −2 regen next turn Regen shock
Vacuum Effect Exactly one player harvests 0 → richest gains +1 Reactive < Conservative externality (P8 strategic vacuum)
Capacity tokens Permanent +1 per harvest Wealth-scaled capacity
Patience tokens Stranger-King burst on defection Strategy override
Events 9 exogenous perturbations on rounds 3, 5, 7 Perturbation engine

See Mechanics for rules, probability tables, and design rationale.


CLI flags (cards_ai_play.py)

The card-game simulator exposes the following frequently-used flags. For the full list run python3 agents/cards_ai_play.py --help.

Flag Default Effect
--deck1, --deck2 required Archetype decks (warrior, temple, merchant, stranger)
--cards required Path to deck JSON (e.g. cards/cards_v03.json)
--seed 42 Master RNG seed — game is byte-deterministic per (seed, decks, args)
--games 1 Number of matches to play
--max-rounds 8 Cap on rounds per game
--forest-deck 30 Initial visible Forest Deck size
--box-reserve 20 Initial hidden Box Reserve size
--forest-collapse-on 5 Forest Die collapses on this value or higher (1–6). Lower = harsher
--forest-noise 0.0 Gaussian noise σ as a fraction of Forest Deck (used by CT3)
--history-window 3 Past turns shown to the LLM in the prompt (a.k.a. max_history for the SDK)
--demo off Verbose per-turn log; equivalent to --verbose plus rich formatting
--nudge off Add behavioural nudges to LLM system prompts
--lock-defection off Remove explicit DEFECT option from the LLM prompt (Stranger-only)
--temperature 0.6 LLM sampling temperature
--api, --api-model, --api-base-url, --api-key-env Use an external OpenAI-compatible API instead of the local llama-server
--save-dir logs Where the per-run subdirectory is created

Reproducibility

Any change to --seed, --forest-collapse-on, --forest-noise, --forest-deck, or --box-reserve produces a different game stream even with the same decks. Keep them pinned when comparing runs.


All cards can be generated as print-ready PNGs using the SVG-based pipeline. See Card Generator for usage and Print & Play for assembly instructions.