◀ All systems documents

Punball · systems design

Pencil and d20

A stick figure on graph paper, drawn like a bored teenager did it in the back of a maths exercise book. Underneath: an energy scheduler, a Dijkstra flow field, and a table of trade-offs that will not let you have anything for free.

Cabinet 02Basis d20 SRD 5.1, CC-BY-4.0Status Live

§ 1

The disguise

The art is deliberately naive. Biro on graph paper, circles for heads, four lines for limbs. It should look like something you could draw yourself in a lesson you were not paying attention in.

That is the disguise. The design goal is to hide a nuanced, difficult, strategic game under the guise of a stick figure dungeon — so a player who dismisses it on sight and then dies on floor three has to go back and work out why.

§ 2

Time is not a turn

The first version moved everything in lockstep: you stepped, then every monster stepped. That is the shallowest possible model of time, and it makes speed meaningless — a fast monster and a slow one arrive together.

So time is now an energy scheduler. Every actor banks energy at its own rate. When an actor's bank reaches the cost of an action, it acts and spends it.

The scheduler

energy += speed · act when energy ≥ 100 · then energy -= 100

The player's speed is 10, so a plain action is ten micro-ticks of the world clock. A cave rat at speed 15 acts three times while you act twice. A shambling corpse at speed 5 acts once while you act twice.

Monster speeds in the table run from 5 to 16. That spread is the entire reason positioning matters: you cannot outrun everything, so you have to choose what to outrun.

The world does not wait politely

Standing still is a decision, not a pause. After a grace period the dungeon takes a step without you — monsters close, and whatever was hunting you gets nearer.

ConstantValueWhat it does
Action cost100The price of one action, for everybody
Player speed10Ten micro-ticks per action; the yardstick
Idle grace650 msHow long you may think before the floor moves
Idle step850 msHow fast it keeps moving once it starts
Sim radius20Cells around you that actually think, for cost

§ 3

Four abilities, no filler

Six abilities is the tabletop convention, and two of them are always dead weight in a game this size. Four, each of which changes something you can feel within a floor:

Might

Force and carry

  • Melee attack and damage
  • Forcing a stuck or locked door
  • How much gear you can wear before it slows you

Finesse

Speed and precision

  • Your speed, and therefore your share of the world's actions
  • Ranged attack rolls
  • Dodging what you stepped on

Grit

Endurance

  • Hit points per level
  • Resisting poison, bleed and exhaustion
  • Shrugging off a trap you failed to spot

Sight

Perception and lore

  • How far you see, and how much of the floor you reveal
  • Whether a trap is visible before you stand on it
  • Focus damage — the wizard's whole offence

The modifier

mod(score) = floor((score − 10) / 2)

Straight from the d20 model. Ten is average and every two points is one step. Keeping the familiar curve means anyone who has played a tabletop RPG already knows how the numbers behave.

ClassMightFinesseGritSightHPOpening kit
Fighter151114924Shortsword, leather
Archer1014111422Shortbow, cloth
Wizard812111821Cracked staff, cloth

The wizard's Might of 8 is a negative modifier. That is intentional: a wizard who swings a staff is doing the wrong thing, and the sheet says so before the player finds out the hard way.

§ 4

The most important number in the game

Finesse buys speed. Speed buys actions. Actions buy everything else. Left unchecked, that is a runaway: stack Finesse, act twice per monster turn, win.

Half rate, and only half

speed = 10 + mod(finesse) × 0.5

A Finesse modifier of +4 is worth +2 speed, not +4. So the archer acts about 20% more often than the fighter rather than 40% more often.

This single coefficient is what keeps three classes inside the same game. Set it to 1.0 and Finesse becomes the only ability worth having.

§ 5

Gear that costs you something

39 items, and not one of them is a straight upgrade. Plate armour is the clearest case: it is the best protection in the game and it makes you slower, which in a game where time is currency means it can get you killed.

ItemGivesTakes
Plate armourHeavy protectionSpeed, and a Might floor to wear it at all
Tower shieldBest block in the gameYour off hand — no bow, no two-hander
GreatswordBiggest melee damageSpeed, and the same off hand
LanternSight far past your natural rangeAnnounces you to everything with ears
Cursed ringA genuinely strong bonusCannot be removed once worn
Heavy packCarry more lootSlower, and worse at dodging

The build gate is checkNoFreeLunch(). It reads the gear table, finds any item whose modifiers are all non-negative, and fails. Adding a tempting item to this game means first deciding what it costs.

§ 6

What you cannot see

Fog of war is absolute. You see rooms you have opened and corridors you have walked. Not the monsters in the next room, not its doors, not its shape — nothing outside what you have actually revealed.

That is what makes Sight an ability rather than a display setting, and it is what makes a door a decision. Opening one is committing to whatever is behind it.

Traps are perception-relative

A trap you can see is a puzzle. A trap you cannot see is a tax. The interesting version is a trap that some characters see and others do not.

Detection

visible if passiveSight(abilities) ≥ trap.detectDc and within sightRange

Six trap kinds, each with its own difficulty. The wizard at Sight 18 walks the floor reading it. The fighter at Sight 9 finds traps with their feet.

This is not a handicap, it is the class identity — and § 8 shows it turning up in the measurements.

§ 7

Doors live on lines

On a real hand-drawn dungeon map a door is a gap in a wall. It sits on the line between two squares, not inside a square of its own.

So doors are edges. Each has a canonical key — v:x,y for a vertical edge, h:x,y for a horizontal one — and blocking movement means blocking an edge rather than occupying a cell. A shut door costs no floor space, which is why corridors can meet rooms cleanly.

RuleWhy
A shut door stops anything that cannot work a handleClosing a door behind you is a real tactic, not decoration
Ghosts pass through regardlessOne monster class that ignores your best tactic keeps it from being the answer to everything
Monsters do not open doorsOtherwise the tactic never works and the door is a speed bump
Monsters take trap damageThe floor is not on anyone's side. Leading a chase over a trap you spotted is a play

§ 8

The audit

Three classes are only three classes if they all reach roughly the same depth. Otherwise there is one real class and two traps for new players.

So the game is played headlessly, 2,000 runs per class, by a policy that is deliberately unskilled — it does not use terrain, does not shut doors, does not retreat. Whatever survives that is the baseline the design provides, not the ceiling a good player reaches.

3.47×

Before

One class reached three and a half times the depth of another. That is not a difficulty curve, it is a wrong answer and two decoys.

1.22×

After

Archer 19.2, Fighter 16.8, Wizard 15.8 average floors. Close enough that the spread is play, not sheet.

ClassAvg depthDamage taken from traps
Archer19.29%
Fighter16.824%
Wizard15.80%

That third column is the design working. Nothing tells the fighter they are bad at spotting traps — Sight 9 does, and a quarter of all damage they take is the floor itself. The wizard's zero is the same fact from the other end.

§ 9

Score rewards decisions

The first scoring model gave points for picking things up. That rewards walking into every room and touching everything, which is the opposite of a strategy game — it rewards thoroughness, and thoroughness is just time.

Score is now paid for actions that carried risk.

  • Killing something meaningfully above your depth
  • Disarming a trap you spotted rather than eating it
  • Reaching a new floor, scaled by how deep it is
  • Completing a quest a resident actually asked you for
  • Surviving a guardian

A player optimising for score and a player optimising for survival now want mostly the same things — which is the only honest arrangement, because the alternative is a leaderboard that teaches bad habits.

On the art staying bad

The other cabinets on this arcade are getting generated pixel art. This one never will, and that is a design decision rather than a backlog item.

The identity of this game is ink on a page. A rendered sprite pasted onto graph paper does not read as a nicer monster — it reads as a sticker on someone's homework. The naive drawing is load-bearing: it sets the expectation that the systems then violate.