A realistic corgi puppy in a playful games-themed adventure space
Simple Kingdom

Tabletop Demo Rules

The tabletop version is available now. Use the rules below with the printable kingdom and tile sheets, or download the Markdown rules file for offline use.

Tabletop Ready LAN Planned

SIMPLE KINGDOMS

Demo Rules — 2 Players | 3×3 Map

Build. Thrive. Defend.

Setup time: 10 minutes | Play time: ~60 minutes | Players: 2 | Ages: 10+


WHAT IS THIS GAME?

You and another player each rule a small kingdom on a shared 3×3 map — nine tiles total. Your goal is to build up your towns, grow your people, and work together to stop the Orc threat before it wipes you both out.

Each turn, you type commands to tell your kingdom what to do.


THE MAP

The map is a 3×3 grid of tiles. Coordinates are written as (row, column), starting at (0,0) in the top-left.

     col=0  col=1  col=2
row=0  [ ]    [ ]    [ ]
row=1  [ ]    [ ]    [ ]
row=2  [ ]    [ ]    [ ]
  • Player 1 starts at (0,0)
  • Player 2 starts at (2,2)

Tile Types

Roll 1d6 for each tile at game start. Starting tiles are always Plains.

RollTerrainSpecial BuildingsProduces
1–3Plains (P)Farm (up to 4 farms allowed)Food
4Forest (F)ForestryWood
5Hills (H)Quarry, Gold MineStone, Gold
6Mountain (M)Iron MineIron

STARTING CONDITIONS

Each player begins with:

ResourceAmount
Gold (G)30
Food (F)40
Wood (W)10
Stone (S)5
Iron (I)0
Civilians10
Soldiers3

Starting tile buildings: Village + 1 Farm


HOW A TURN WORKS

Each turn is called a tick. Every tick, both players do these steps in order:

  1. Act — each player takes up to 3 actions
  2. Produce — each building generates resources (food, wood, stone, iron, gold)
  3. Orc exposure — any tile where the Orc Threat Level is above (greater than) its defense score costs its owner 10% gold and 10% food
  4. Collect gold income — earn gold based on your population (see Gold Income)
  5. Feed — your people eat based on population; a fed kingdom is ready to grow, a hungry one loses 1 civilian (see Food Consumption)
  6. Pay soldiers — 1 gold per soldier
  7. Grow — a fully fed kingdom gains civilians (up to its cap)
  8. Orc Threat — roll 1d6; on a 1 (easy) or 1–2 (hard), the shared threat meter goes up by 1 (capped at 20)

YOUR 3 ACTIONS

Each turn you get 3 actions. You can mix and match from these categories:

Build

Spend resources to construct a building on a tile you own. See the Building Guide below.

Buildings finish immediately — one build counts as one action and is ready to use the same tick.

Move Soldiers / Claim

All tiles except for the players' starting tiles are unexplored and unclaimed. Only explored tiles may be claimed.

Move Soldiers — relocate any number of your soldiers from one tile to an adjacent tile (8 directions — up, down, left, right, or diagonal).

  • Soldiers stay on the tile you send them to until you deliberately move them again. This is how you bolster a tile's defense — or weaken it, if you move soldiers away!
  • Sending 2 or more soldiers onto an unexplored tile reveals its terrain to both players — the same as exploring it. The soldiers remain there afterward; nothing returns automatically.
  • move_soldiers(from_row, from_col, to_row, to_col, count)

Claim — take ownership of an explored, unclaimed tile.

  • Requires 4 or more of your soldiers already stationed on that tile — march them there first with Move Soldiers
  • Costs 20 gold
  • A claimed tile starts its own village (settlement) and 10 new civilians move in to settle it — instantly adding +50 to your civilian cap
  • claim_tile(row, col)

Give

Talk it over with the other player out loud and agree on a deal — a trade, or even just a gift. Any agreement you both want is fair, and there are no fees in the 2-player demo. Once you've shaken on it, each side spends one action to actually hand over their half:

  • give("wood", 5) — hands 5 wood to the other kingdom

Example — arranging a trade: Ironhold has spare wood but needs stone; Thornvale has spare stone but needs wood. The players talk it out: "I'll give you 5 wood for 3 stone — deal?" "Deal!" On their turn, Ironhold submits give("wood", 5) and Thornvale submits give("stone", 3). Each give runs on its own — the agreed trade happens because both sides kept their word.

Example — a gift: Thornvale is starving but Ironhold has food to spare. Ironhold doesn't need anything back — they just submit give("food", 10) to help their neighbor out. give doesn't ask why; it's up to the players to agree on what's fair.

Buy

Exchange your kingdom's gold for other resources.

ResourcePrice (gold per unit)
Food (F)2
Wood (W)3
Stone (S)4
Iron (I)6

Buying resources

buy_resource("food", 5)    # costs 10 gold
buy_resource("wood", 2)    # costs 6 gold

Sell

Trade resources back for gold when you have a surplus — at a quarter of the buy price.

ResourcePrice (gold per unit)
Food (F)0.5
Wood (W)0.75
Stone (S)1
Iron (I)1.5

Selling resources (total proceeds are rounded down):

sell_resource("food", 10)   # sell 10 food for 5 gold
sell_resource("iron", 4)    # sell 4 iron for 6 gold

BUILDING GUIDE

Settlements — 1 per tile, upgrade in place

BuildingCostCap AddedUnlocks
Village(you start with one)+50All basic buildings
Town10 [W], 5 [S], 20 [G]+100Big Farm
City20 [W], 15 [S], 5 [I], 50 [G]+200Wall

> Villages upgrade to Towns; Towns upgrade to Cities. One settlement per tile.

Kingdom civilian cap is additive. Each settlement on each tile you own adds its cap to your kingdom total. A kingdom with one Village tile and one City tile has a cap of 50 + 200 = 250 civilians. Claiming more tiles and building settlements is the main way to grow a large population.


Food Buildings

BuildingCostLimitProduces
Farm5 [W]2 per tile (4 on Plains)+10 food/tick
Big Farm10 [W], 10 [S], 5 [I]Upgrades 1 Farm+50 food/tick (replaces Farm)

Defense Buildings

BuildingCostSettlement RequiredLimit Per TileEffect
Watchtower5 [W], 5 [S]Village1See Tile Defense Score
Watchtower5 [W], 5 [S]Town2See Tile Defense Score
Watchtower5 [W], 5 [S]City4See Tile Defense Score
Wall15 [S], 5 [I]City1See Tile Defense Score

> Watchtower limit is based on the settlement on that tile, not your whole kingdom: Village=1, Town=2, City=4. > Walls can only be built on tiles with a City.


Resource Buildings

Resource buildings can only be built on specific types of tile. There is a limit of one per tile.

BuildingCostTerrain RequiredProduces
Forestry3 [W]Forest+3 wood/tick
Quarry4 [W], 2 [S]Hills+3 stone/tick
Iron Mine5 [W], 2 [S]Mountain+4 iron/tick
Gold Mine5 [W], 3 [S]Hills or Mountain+6 gold/tick

GOLD INCOME

Every tick your kingdom collects gold from taxes and trade. The amount depends on how many people you have:

Gold income = floor( 0.5 × total people + 5 )

This is a y = mx + b equation with population on the x-axis:

  • m = 0.5 — each person contributes half a gold per tick
  • b = 5 — base income; even a tiny kingdom earns something
SituationGold income
Start (13 people)floor(6.5 + 5) = 11
Growing (20 people)floor(10 + 5) = 15
Thriving (30 people)floor(15 + 5) = 20
Booming (50 people)floor(25 + 5) = 30

FOOD CONSUMPTION

Every tick your people eat. Food consumed follows a y = mx + b equation:

Food consumed = ceil( 0.25 × total people + 2 )
  • m = 0.25 — each person eats a quarter unit of food per tick
  • b = 2 — base consumption; the castle and infrastructure always need food
  • More people always means more food needed — build farms to keep up!
PopulationFood eaten per tick
13 (starting)ceil(13 * 0.25 + 2) = 6
20ceil(5 + 2) = 7
30ceil(7.5 + 2) = 10
50ceil(12.5 + 2) = 15

PEOPLE

Civilians

  • Population is tracked as a single pool for the whole kingdom — not split across tiles
  • Each tick: if your kingdom was fully fed, civilians grow by 10% (up to cap). If it went hungry, you lose 1 civilian
  • Civilian cap adds up across all your tiles: each settlement contributes its cap amount

Soldiers

  • Soldiers can be moved between adjacent tiles to scout, claim, or bolster defense (see Move Soldiers / Claim)
  • Train soldiers on any tile you own: costs 5 gold per soldier; 1 civilian becomes 1 soldier
  • Upkeep: 1 gold per soldier per tick (if you can't pay, soldiers desert)
  • Dismiss soldiers: soldiers return to civilian life at any time (free)

Tile Defense Score

Defense = soldiers + (soldiers × watchtowers) + WALL_BONUS (only if you've built a Wall here)

Watchtowers multiply your soldiers' effectiveness rather than adding a flat amount — a watchtower with no soldiers in it provides zero defense. WALL_BONUS is 10, and only counts on a tile where you've actually built a Wall.

Kingdom Defense

A kingdom's defense is the lowest defense score among all its tiles. One undefended tile is enough to expose the whole kingdom. When the orcs raid, they find your weakest point.


THE ORC THREAT

The Orc Threat Meter is a single number shared by the whole game world — it is not owned by either kingdom. Both players see it go up together.

It starts at 0 and may go up any turn, up to a maximum of 20.

Each tick, roll 1d6 — how often the threat rises depends on difficulty:

ModeThreat rises on…Chance per tick
Easy (default)Roll of 11-in-6
HardRoll of 1 or 22-in-6

Set the difficulty at game start: python3 play.py setup (easy) or python3 play.py setup hard.

Exposed Tiles

At the start of each tick — before the orc threat roll — check every tile both kingdoms own. You get raided if the Orc Threat Level is above (greater than) a tile's defense score — when that happens, the kingdom that owns it immediately loses:

  • 10% of their total gold (round down)
  • 10% of their total food (round down)

This penalty applies once per exposed tile, so a kingdom with multiple insufficiently defended tiles is penalized multiple times.


COMMANDS QUICK REFERENCE

Each order takes tile coordinates as row, col (both 0–2), written (row, column) just like the map. Resource names are "gold", "food", "wood", "stone", "iron".

# Building — row, col is the tile you own
build(0,0, "farm")
build(0,0, "big_farm")
build(0,0, "town")
build(0,0, "city")
build(0,0, "watchtower")
build(0,0, "wall")
build(0,0, "forestry")
build(0,0, "quarry")
build(0,0, "iron_mine")
build(0,0, "gold_mine")

# Military
hire_soldiers(0,0, 2)          # Train 2 soldiers on the tile at (0,0)
dismiss_soldiers(0,0, 1)       # Return 1 soldier at (0,0) to civilian life

# Move Soldiers and Claim
move_soldiers(0,0, 1,0, 2)     # Move 2 soldiers from (0,0) to (1,0) — reveals unexplored tiles
claim_tile(1,0)                # Claim an explored tile with 4+ of your soldiers on it (costs 20 gold)

# Give — agree on a trade or gift out loud first, then each side gives their half!
give("wood", 5)                # Hand 5 wood to the other kingdom

# Buy
buy_resource("food", 5)        # costs 10 gold
buy_resource("wood", 2)        # costs 6 gold

# Sell — at 1/4 of the buy price
sell_resource("food", 10)      # sells for 5 gold
sell_resource("iron", 4)       # sells for 6 gold

PLAYING ON THE COMPUTER — ORDER FILES

play.py runs the game for you. Each kingdom gets its own order file — Ironhold/Ironhold_orders.txt, Thornvale/Thornvale_orders.txt — where you write your orders in plain text, one per line, using the commands above.

python3 play.py setup     # start a brand-new game
python3 play.py tick      # check both files and play one tick

Each tick:

  1. Write up to 3 orders in your kingdom's <KingdomName>_orders.txt (lines starting with # are notes and are ignored)
  2. Run python3 play.py tick
  3. tick checks both files first — correct syntax, 3 orders or fewer, and every order actually possible right now (enough resources, soldiers in place, tiles adjacent, and so on)
  4. Only if everything checks out does it run both kingdoms' orders and play the tick. If anything is wrong, nothing happens — fix the file(s) it points to and run tick again

This means you can't accidentally half-execute a turn — either the whole tick goes through, or nothing does.

Sheet Snapshots

After each tick, play.py writes a fresh, plain-text snapshot of your Kingdom Sheet and a Tile Sheet for every tile you own straight into your kingdom's folder — already filled in with that tick's numbers, so you don't have to copy anything by hand. File names start with the 3-digit tick number so they always sort in play order:

Ironhold/
  001_ironhold_sheet.txt
  001_ironhold_tile_0_0_sheet.txt
  Ironhold_orders.txt
  archive/

Each new tick moves last tick's snapshot files into archive/ first, so the kingdom folder always shows just the current tick's sheets — open them in any text editor or print them with cat or type to see exactly where your kingdom stands right now. Want to compare with an earlier tick? It's all still there in archive/.

Order History

Your kingdom folder also keeps an executed_orders.txt — a running log of every order that's actually been carried out, tick by tick. It doesn't exist until your first successful tick; after that, each tick appends a # Tick N line followed by that tick's orders:

# Tick 1
build(0,0, "farm")
move_soldiers(0,0, 1,0, 2)

# Tick 2
buy_resource("wood", 1)

Only orders from ticks that actually ran appear here — if a tick was rejected for bad syntax or an infeasible order, nothing is logged, since nothing happened.


END OF GAME

The game ends after 24 ticks. Simple Kingdoms is cooperative — there's no winner between the two of you. Add each kingdom's score together to get one shared final score for your team.

CategoryPoints
Each tile you own2 pts
Town built3 pts
City built5 pts
Population 30+1 pt per 10 people

Your team's score = your kingdom's total + the other kingdom's total.


Simple Kingdoms Demo v3