Things to finish
These do not necessarily prevent a playtest.
- Phase "Primary" has no windows.
- No board or player setup has been configured.
3
Stats
3
Effects
3
Piece Types
3
Pieces
2
Actions
1
Phases
0
Windows
Build the game
Existing editors are retained while authoring is rebuilt around the runtime definition.
1. Game & Stats
Identity, players, categories, mechanics, and runtime values.
2. Pieces
Piece types, templates, concrete pieces, attributes, costs, and relationships.
3. Effects & Actions
Define reusable state changes, then compose them into player and system actions.
4. Rules & Timeline
Rounds contain phases; phases contain ordered windows; windows expose legal actions.
5. Setup
Lay out the main game area and reusable player areas with defined piece types.
6. Playtest
Run the compiled definition and inspect every state change in the session log.
Design notes
Simple draw, play, and score card game seed that demonstrates triggers, effects, and actions.
Runtime definition
One canonical document compiled from the current editors.
- Schema
- v1
- Ruleset
- Core Rules
- Rules version
- 1
- Round order
Inspect compiled JSON
{
"schema_version": 1,
"game": {
"id": 2,
"name": "Basic Card Game",
"key": "basic-card-game",
"status": "published",
"description": "Simple draw, play, and score card game seed that demonstrates triggers, effects, and actions.",
"players": {
"min": 2,
"max": 4
},
"play_time": {
"min": 10,
"max": 25,
"per_player": 5
},
"categories": [
"Card Game"
],
"mechanics": [
"Hand Management",
"Set Collection"
]
},
"stats": {
"round": {
"id": 9,
"name": "Round",
"key": "round",
"scope": "global",
"default": 1
},
"score": {
"id": 10,
"name": "Score",
"key": "score",
"scope": "single_player",
"default": 0
},
"cards_in_hand": {
"id": 11,
"name": "Cards In Hand",
"key": "cards_in_hand",
"scope": "single_player",
"default": 5
}
},
"triggers": {
"card_played": {
"id": 9,
"name": "Card Played",
"key": "card_played"
},
"turn_end": {
"id": 10,
"name": "Turn End",
"key": "turn_end"
},
"turn_start": {
"id": 8,
"name": "Turn Start",
"key": "turn_start"
}
},
"effects": {
"gain_one_score": {
"id": 17,
"name": "Gain 1 Score",
"key": "gain_one_score",
"summary": "Gain {X} score.",
"piece_text": "+{X} Score",
"target": {
"type": "self",
"scope": "single_player"
},
"operation": {
"type": "modify_stat",
"stat_key": "score",
"operation": "add"
},
"variables": [
1
],
"triggers": []
},
"draw_one_card": {
"id": 18,
"name": "Draw 1 Card",
"key": "draw_one_card",
"summary": "Draw {X} card.",
"piece_text": "Draw {X}",
"target": {
"type": "self",
"scope": "single_player"
},
"operation": {
"type": "modify_stat",
"stat_key": "cards_in_hand",
"operation": "add"
},
"variables": [
1
],
"triggers": [
{
"trigger_id": 8
}
]
},
"spend_one_card": {
"id": 19,
"name": "Spend 1 Card",
"key": "spend_one_card",
"summary": "Lose {X} card from hand.",
"piece_text": "-{X} Hand",
"target": {
"type": "self",
"scope": "single_player"
},
"operation": {
"type": "modify_stat",
"stat_key": "cards_in_hand",
"operation": "subtract"
},
"variables": [
1
],
"triggers": []
}
},
"statuses": [],
"piece_types": {
"playing_card": {
"key": "playing_card",
"name": "Playing Card",
"base_type": "card",
"effects": []
},
"deck": {
"key": "deck",
"name": "Deck",
"base_type": "deck",
"effects": []
},
"discard_pile": {
"key": "discard_pile",
"name": "Discard Pile",
"base_type": "deck",
"effects": []
}
},
"pieces": {
"basic_point_card": {
"id": 53,
"name": "Basic Point Card",
"key": "basic_point_card",
"piece_type_key": "playing_card",
"base_type": "card",
"image_template_path": null,
"image_path": null,
"attributes": [
{
"label": "Card Value",
"key": "value",
"value": "1"
}
],
"relationships": [],
"costs": [],
"spent": {
"when_played": "discard"
},
"effects": [
{
"effect_id": 17,
"effect_key": "gain_one_score",
"overrides": []
},
{
"effect_id": 19,
"effect_key": "spend_one_card",
"overrides": []
}
],
"triggers": [
{
"trigger_id": 9
}
]
},
"starter_deck": {
"id": 54,
"name": "Starter Deck",
"key": "starter_deck",
"piece_type_key": "deck",
"base_type": "deck",
"image_template_path": null,
"image_path": null,
"attributes": [
{
"label": "Copies",
"key": "copies",
"value": "20"
}
],
"relationships": [],
"costs": [],
"spent": [],
"effects": [],
"triggers": []
},
"starter_discard": {
"id": 55,
"name": "Starter Discard Pile",
"key": "starter_discard",
"piece_type_key": "discard_pile",
"base_type": "deck",
"image_template_path": null,
"image_path": null,
"attributes": [
{
"label": "Purpose",
"key": "purpose",
"value": "Used cards"
}
],
"relationships": [],
"costs": [],
"spent": [],
"effects": [],
"triggers": []
}
},
"actions": {
"draw_card": {
"id": 12,
"name": "Draw Card",
"key": "draw_card",
"inputs": [
{
"key": "from_zone",
"label": "From Zone",
"type": "zone",
"selection_mode": "single"
}
],
"outcome": {
"identity": {
"category": "core",
"source": "player"
},
"timing": {
"speed": "normal",
"window": [
"main_phase"
]
},
"effects": [
{
"effect_id": 18,
"effect_key": "draw_one_card"
}
],
"resolution": {
"mode": "sequential_continue_on_fail",
"stack_behavior": "immediate",
"priority": 0
}
},
"triggers": [
{
"trigger_id": 8
}
]
},
"play_card": {
"id": 13,
"name": "Play Card",
"key": "play_card",
"inputs": [
{
"key": "card",
"label": "Card",
"type": "piece",
"selection_mode": "single"
}
],
"outcome": {
"identity": {
"category": "core",
"source": "player"
},
"timing": {
"speed": "normal",
"window": [
"main_phase"
]
},
"effects": [
{
"effect_id": 19,
"effect_key": "spend_one_card"
},
{
"effect_id": 17,
"effect_key": "gain_one_score"
}
],
"resolution": {
"mode": "sequential_continue_on_fail",
"stack_behavior": "immediate",
"priority": 1
}
},
"triggers": [
{
"trigger_id": 9
}
]
}
},
"rules": {
"id": 2,
"name": "Core Rules",
"key": "core_rules",
"version": 1,
"round": {
"total": null,
"label": "Round",
"key": "round",
"turn_order": "",
"phase_behavior": "",
"different_first_phase": false,
"different_last_phase": false
},
"windows": [],
"phases": [
{
"id": 8,
"name": "Primary",
"key": "primary",
"windows": []
}
],
"polls": []
},
"setup": []
}