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.
| Roll | Terrain | Special Buildings | Produces |
|---|---|---|---|
| 1–3 | Plains (P) | Farm (up to 4 farms allowed) | Food |
| 4 | Forest (F) | Forestry | Wood |
| 5 | Hills (H) | Quarry, Gold Mine | Stone, Gold |
| 6 | Mountain (M) | Iron Mine | Iron |
STARTING CONDITIONS
Each player begins with:
| Resource | Amount |
|---|---|
| Gold (G) | 30 |
| Food (F) | 40 |
| Wood (W) | 10 |
| Stone (S) | 5 |
| Iron (I) | 0 |
| Civilians | 10 |
| Soldiers | 3 |
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:
- Act — each player takes up to 3 actions
- Produce — each building generates resources (food, wood, stone, iron, gold)
- Orc exposure — any tile where the Orc Threat Level is above (greater than) its defense score costs its owner 10% gold and 10% food
- Collect gold income — earn gold based on your population (see Gold Income)
- Feed — your people eat based on population; a fed kingdom is ready to grow, a hungry one loses 1 civilian (see Food Consumption)
- Pay soldiers — 1 gold per soldier
- Grow — a fully fed kingdom gains civilians (up to its cap)
- 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.
| Resource | Price (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.
| Resource | Price (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
| Building | Cost | Cap Added | Unlocks |
|---|---|---|---|
| Village | (you start with one) | +50 | All basic buildings |
| Town | 10 [W], 5 [S], 20 [G] | +100 | Big Farm |
| City | 20 [W], 15 [S], 5 [I], 50 [G] | +200 | Wall |
> 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
| Building | Cost | Limit | Produces |
|---|---|---|---|
| Farm | 5 [W] | 2 per tile (4 on Plains) | +10 food/tick |
| Big Farm | 10 [W], 10 [S], 5 [I] | Upgrades 1 Farm | +50 food/tick (replaces Farm) |
Defense Buildings
| Building | Cost | Settlement Required | Limit Per Tile | Effect |
|---|---|---|---|---|
| Watchtower | 5 [W], 5 [S] | Village | 1 | See Tile Defense Score |
| Watchtower | 5 [W], 5 [S] | Town | 2 | See Tile Defense Score |
| Watchtower | 5 [W], 5 [S] | City | 4 | See Tile Defense Score |
| Wall | 15 [S], 5 [I] | City | 1 | See 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.
| Building | Cost | Terrain Required | Produces |
|---|---|---|---|
| Forestry | 3 [W] | Forest | +3 wood/tick |
| Quarry | 4 [W], 2 [S] | Hills | +3 stone/tick |
| Iron Mine | 5 [W], 2 [S] | Mountain | +4 iron/tick |
| Gold Mine | 5 [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
| Situation | Gold 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!
| Population | Food eaten per tick |
|---|---|
| 13 (starting) | ceil(13 * 0.25 + 2) = 6 |
| 20 | ceil(5 + 2) = 7 |
| 30 | ceil(7.5 + 2) = 10 |
| 50 | ceil(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:
| Mode | Threat rises on… | Chance per tick |
|---|---|---|
| Easy (default) | Roll of 1 | 1-in-6 |
| Hard | Roll of 1 or 2 | 2-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:
- Write up to 3 orders in your kingdom's
<KingdomName>_orders.txt(lines starting with#are notes and are ignored) - Run
python3 play.py tick tickchecks 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)- 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
tickagain
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.
| Category | Points |
|---|---|
| Each tile you own | 2 pts |
| Town built | 3 pts |
| City built | 5 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