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:
- 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.
- Generative ground truth. LLM agents reading the same rules as human players enable direct comparison of language-mediated and heuristic decision processes.
- 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-urlfor model selection--forest-noise FLOATfor Gaussian noise on the Forest Deck estimate--nudgefor archetype-specific behavioural nudges--lock-defectionto 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.
Print & Play¶
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.