Tidewright Find /
📐 Infrastructure

Module Design

How a Tidewright module is built — the mandatory slots, and why each one exists

At a Glance

What this is
The standing spec for every module written for this campaign. Read it before filling in the module template.
Derived from
Structural analysis of three published modules by three different authors — see below
The rule
Slots marked required are non-negotiable. They are the ones this repo demonstrably kept forgetting.
Not covered
Prose voice, canon, and worldbuilding — this is structure only

Where this comes from

Three modules, three authors, deliberately different in scale — read in full and compared slot by slot. Nothing below is invented; each rule is a defect that showed up as a real failure in at least one of them, or a technique one of them did well enough to steal.

ModuleAuthorScaleWhat it teaches
Lost Mine of PhandelverWizards of the Coast~64 pp · lv 1–5Keyed-location discipline · General Features · redundant information routing · the written losing branch
The Wild Sheep ChaseRichard Jansen-Parkes6 pp · one-shotThe spoiler summary · antagonist grievance · tactical objectives · branching endings including refusal · stat blocks and NPCs at point of use, in strict clock order
The Delian Tombblake, from Matt Colville5 rooms · lv 1Propagating alert state · parametric rosters · read-aloud split around combat · planted-then-paid puzzles
The RaindrinkersTim Groth (Trilemma)2-page spreadWants / Needs / Has · relational disposition · description as sensory tag-string
The Hounds of Low TideKiel Chenier (Trilemma)2-page spreadKeyed site on one spread · Secrets: as a standing label · transformation over damage · NPC location table
Tomb of the Serpent KingsSkerples52 rooms · 3 levelsTraps solved not rolled · declared design assumptions · teach-then-reward-then-punish

What Tidewright already did better

The Numbers table, read-alouds collected in order on the play surface, pacing valves, “the one thing,” reskin lineage with labelled house tweaks, and the prep-read / play-surface split — none of the three reference modules do any of these. Keep them. This spec adds to that format; it does not replace it.

The two layers

Every session ships two pages, and the split is the point. Sessions are peers — there is no page above them.

A third kind of page exists only when it earns itself: a fight page, owned by no session, holding one fight in full — see the four slots. Three exist: session 1, session 2 and session 3.

There is no module run-sheet. The arc-level slots below still have to be answered — they just live in the session that first needs each answer.

What replaced what, and why — changed 8/19/2026

The module run-sheet is gone, and sessions are peers. A Good Day to Die had an index.html above four nights, and running it felt like duplication even where the pages barely overlapped — because the thing that actually repeated was not the run-sheet at all. Measured: the two prep reads shared ~884 words and the four session pages carried ~3,590 words of stat block between them, while the run-sheet overlapped its own children by about 70. The hierarchy was not the redundancy.

What replaced it. The 6,017-word run-sheet was distributed — each slot to the session where its fact is first true at the table — and the four nights became sibling directories, each with the standard two pages. The arc still exists; it just has no page.

And a shared reference page, for the case the flatten does not solve: one fight, set up on one night and fought on the next, so both pages needed it in full. The session 1 fight page holds both blocks, the torchlight tweak, the targeting order, the roster maths and the group check, and is the only place any of it is written. This is a deliberate exception to no appendices, and it is bounded: the sessions keep a one-line summary at the point of use and link out, and a thing only one session uses stays in the beat that uses it.

What it costs. Mid-fight you hold the one-sheet and the fight page — two pages, which is exactly what the 8/10 consolidation below was written to avoid. It was accepted here because the alternative was maintaining one fight in four places, and simplifying that fight had just taken five hand-edits and still left two stale spots. Information Routing also lost its all-rows-at-once check when it went to session 1; its later rows describe nights that now live elsewhere.

What replaced what, and why — changed 8/10/2026

Until now the second page was a table card (sN-run.html) — a dense mid-scene reference: run order, Numbers, one-line NPCs, every read-aloud collected in order, valves. It has been replaced by the one-sheet, not supplemented by it. Three pages per session was one more than anyone keeps in sync, and the card duplicated the prep read rather than adding to it: every read-aloud on it was already numbered in clock order on the prep read, and every DC was already bolded inline there.

What the one-sheet keeps from the card: the Numbers table, the one-line NPC list, the valves, and the creature quick-reference. What it drops: the collected read-alouds — they live on the prep read, in order, where they are read from. What it adds: the postmortem, the opening monologue, the scene outline as a possibility space, and rewards as a first-class slot.

The thing that makes one page possible is details.foldout: a creature costs one line — name, count, lineage, CR, AC, HP, and the single rule that makes it different — until you open it, and then it is the whole block. Statblocks are the only reason a play surface ever had to be long.

Session-level slots — the one-sheet

Slot names are flat on purpose — changed 8/19/2026. They were “Scenes in play”, “Who’s here” and “What might come up the sand”, which read as prose rather than as a schema — and the last of those was the strand’s prose, so a session set in a taproom had nothing coming up any sand and quietly drifted to “What might come”. A slot name is a label a DM scans for at the table, not a line of writing. Keep the flavour in the beat names and the h-notes, never in the slot.

Seven slots, in this order. The order is the point: it runs from orientation to the opening line, and only then into what might happen. Six are required; Numbers is optional and near-mandatory for any session with a fight.

There is no recap slot — removed 8/22/2026. Slot 2 was Last time, a postmortem of the previous session written into the top of the next one. The prep read carried a second copy as What carries over. Every session now has its own recap page, so both were the same facts written a third time on the page you open to run tonight. What happened last time lives on the recap and nowhere else. The sheet links to it from the rail.

SlotHoldsThe rule
1 · Tonight
a .glance block
The run-down — what happens tonight, one line per event, in the order it wants to happen. The party fights this, goes here, talks to her, comes out knowing that.Five to seven plain sentences and nothing else. Each names an event, not a mood, and reads as flatly as you can write it — no clauses hung off dashes, no phrase doing atmosphere. The flavour is already in the beat names, the h-notes and the read-alouds; here it is in the way. It replaced a five-row dl (the night · for · first thing you do · the one thing · the curtain) on 8/20/2026, and a run-facts footer line went with it the same day — party size, level and runtime are not what you open the page to find out. “The one thing” is not lost: it lives in the prep read’s Pacing slot, which is where the valves are.
2 · Opening monologueBoxed text that starts the night — second person, present tense, no mechanics. Three short paragraphs: what they think is true · what has changed · the image that puts them in scene oneEffectively read-aloud 0; the prep read's numbered boxes continue from it. It is the only boxed text at the top of the night — do not follow it straight into the prep read's first numbered box. Both sheets did, and two pieces of read-aloud back to back is one piece of read-aloud that is too long: the table has nothing to do through either of them. Where the first numbered box is scene-setting for the same moment, fold it in as the monologue's last paragraph, delete it, and renumber the rest. Where it is genuinely a later moment, cut the hand-off line and let the beat start. Pitched at the whole night, not one beat — that is what separates it from a scene read-aloud. Collapsed by default, in a details.foldout whose summary carries its opening words: it is read once, at minute zero, and it should not cost a third of the page for the rest of the night. Its foldout__line is one line, and it is the when“read to start the night”, not a paragraph count and the opening words. Never echo the heading directly above it.
3 · ScenesEvery scene that could fire, as a table: name · what it is · it ends when. Plus the long / short / wrong valvesA possibility space, not a schedule. The clock lives in the prep read's Pacing block. Include scenes the party may never reach — that is the difference between this and a run order.
4 · NPCsEvery NPC who could appear, one line each: who they are, and the one thing that makes them play differently from anyone else in the roomNo wants/needs/has here — that schema belongs on the NPC page and beside the beat you talk to them in. If a line needs a semicolon and a clause, it is two NPCs or the wrong detail.
5 · MonstersEvery creature, as a details.foldout: summary line carries count, reskin lineage, CR, AC, HP and the one distinguishing rule; the open block carries the full statline plus objective, morale and tell. Then the encounter budget and its scale-downCollapsed by default. No combat is an answer — say so in a .lore box and say why, so the sheet shows the decision was made rather than forgotten.
6 · Numbers (optional)Every DC, count, price and initiative block you would otherwise hunt for mid-sceneWrite a DC down only when failure has a consequence you would otherwise invent under pressure. A session with no rolls says “no DCs” here and explains what to do instead.
7 · Rewards (always last)Coin as a number or a named thing · what is available but not obvious, and what it costs · the intangibles — an NPC's regard, a confidence given up, a standing that moved · and XP, stated even when it is noneNever “a modest sum”. List the intangible rewards like rewards; they are usually the ones that matter, and they are the ones that get left off.

Fight-page slots — four, and most of them are short

A fight gets its own page when it has something beyond a statblock and a hit-point total — a second wave, a terrain rule, a guest character, an ending that is not “kill it.” Anything simpler stays in the one-sheet’s Monsters foldout and no page exists. It is named after its episodesN-fight.html, beside sN-sheet.html and the prep read — and titled the same way: Reading the Marks — the fight. Do not give a fight a name of its own; a page called The Skirmish tells a DM scanning the rail nothing about which night it belongs to.

It is the only place the fight’s numbers are written down. The sessions keep a one-line summary at the point of use and link here. The read-alouds stay on the prep read in clock order — boxed text is the night’s voice, and only the mechanics move.

SlotHoldsThe rule
1 · At a glance
a .glance block
Who is in it · how long it runs · how it ends · the one rule that makes this fight different from a brawlFour lines. If you cannot name the one rule, the fight does not need a page.
2 · The rosterEach creature as a statblock, and directly under it the two or three lines on how it fights — who it goes for, when it stops. Then Scaling: the maths, and the ceiling.Targeting lives with the hit points, not in a tactics section a screen away — that is a cross-reference you cannot afford mid-round. Reskin lineage named, house tweaks labelled.
3 · EnvironmentLight · footing · cover · anything that can be picked up or used · bystanders, if there are any. Then the environment prompt in a .prompt block.Five bullets of rulings, then the query. Bystanders who cannot be panicked or moved are terrain, not a mob, and they belong here rather than in the roster.
4 · How it endsThe win condition, the lose condition, what each one costs, and any DC that is not already on a statblockSeparate from the glance because the ending is usually a mechanic rather than a beat. Every outcome gets a line, including nobody made it.

Four, and no fifth. Seven were drafted — a shape, tactics, and a numbers table as their own sections — and it read as information overload for a fight that is one creature in a room. The shape is the glance’s one rule, tactics belong to the creature, and for most fights the statblock is the numbers.

The environment prompt

Every fight page carries a query for the image generator that makes the battle map, in a .prompt block so it can be taken in one click. It is short and general on purpose.

Arc-level slots — and where they live

These are the questions an arc has to answer. Until 8/19/2026 they sat together on a module run-sheet; now each goes to the session that first needs it, and later sessions link back. Three are new, marked with the module that taught them.

Placing one: the session where the fact is first true at the table, not the session that talks about it most. Premise and the truth go to the opening night, because its ending depends on them. Failure goes to the night whose fight can be lost. Endings go to the last night.

SlotHoldsSource
At a GlanceFor / where / tone / the job / the truth / ends when
PremiseThe situation walked into, grounded in canon without restating it
The TruthBehind the screen: what's actually happening, and at least two ways to winLMoP
HooksCoin · a personal thread · a strange sign. Three, so any party finds one
Scene FlowThe sessions in order, as cards
Information Routing (required, new)Every fact the module can't survive the party missing, with ≥2 independent routes — counted in a column so a 1 is visibleLMoP
Session ClockThe pressure, and how it advances. Delete if untimed
Encounter BudgetParty size × level, 2014 DMG thresholds, every fight banded
Monster RosterEvery creature, its MM lineage, CR, and which page carries the block
Failure & Setbacks (required, new)They lose the fight · never find the thing · walk away · a key NPC dies early. Each routed back into the storyLMoP
RewardsA number or a named thing. Never “a modest sum”LMoP
Endings (required, new)At least three, one of them refusal. Each with a material consequence and a dangling threadWild Sheep
ScalingFormulas, not counts1 + #PCs, with a floor and ceilingDelian
Canon TouchpointsLinked, never restated. Canon is frozen
Lore LockerOptional discoverables, each naming its scene. None required for the arc to land
NPC pages (required schema)Per named NPC: Description (sensory tag-run) · Mannerisms · Tell · Wants / Needs / Has · Standing (relational) · Grievance. See Prose rulesHas is what makes sole-source facts visible.Trilemma · Wild Sheep

Scene-level slots — the prep read

SlotHoldsSource
At a GlanceWhere / when / who / purpose / curtain
General Features (required, new)Light · sound · footing · cover · verticality · smell — answered once, so no zone re-litigates themLMoP
ZonesRead-aloud → what's here → terrain / tactics / morale / tell → Developments → stat block. Same order every time.LMoP
Developments (required, new)Per zone: if they sneak · if they talk · if they do the obvious clever thing · if they loseLMoP
TacticsOpening move, positioning, and the objective — often not “kill the party”Wild Sheep
MoraleEvery roster gets a flee / surrender / stop condition. No exceptionsAll three
Stat blocksReskin lineage named, every house tweak labelled
The CurtainThe closing image, and the conditions that mean the night is done
PacingTime budget · long / short valves · the one thing

Page order — required, and the one this repo keeps breaking

The slots above say what a prep read holds. This says where it goes on the page, because a page can carry every mandatory slot and still be unreadable if they are in the wrong order.

RuleWhat it meansSource
Clock order, one schemeBeats run top to bottom in the order they happen at the table, and the page commits to one organising scheme — a timeline or a keyed site, never both. Numbered beats promise a sequence; if two of them are simultaneous, they are one beat with sub-headings, not two.Wild Sheep · Delian
No appendicesOne exception, 8/19/2026: a block more than one session needs in full moves to a shared reference page, and the beat keeps a one-line summary and a link. Otherwise stat blocks and NPC entries sit at the point of use. A creature's block goes in the beat it enters on; an NPC's page-block goes beside the beat you actually talk to them in. Nothing a DM needs mid-scene is filed behind the scenes that need it.Wild Sheep · Serpent Kings
Read-alouds in page orderNumbered, and they appear down the page in the order they are read. If read-aloud 4 sits above read-aloud 3, a beat is in the wrong place — this is the cheapest possible check on the whole layout. Checked by the buildbin/build-canon-digest warns if a page’s numbered boxes are not 1..N straight down it.
The h-note says what happensEvery heading’s note is what a DM scans instead of the heading. It carries the clock and the content“2:35 · 10 min · they are seen leaving with the ledger”, never “watched”. Mood belongs in the beat, not in the line you read to find the beat.
Front matter is what you read onceOnly three things sit above beat 1: the table business, the background the DM reads once, and General Features. Everything else earns its position by when it fires.LMoP

The evidence — The Wild Sheep Chase's heading order

It declares the method outright — “the main text is divided into several distinct scenes… enemy stat blocks and notes are highlighted in grey boxes” — and then holds to it without a single appendix:

SUMMARY → USING THIS ADVENTURE → ADVENTURE HOOKS → BAAAA-D NEWS → GUZ → SHEPHERDS, CROOKS → ROLEPLAYING SHINEBRIGHT → AFTER THE DUST SETTLES → ROLEPLAYING GUZ → THE HOUSE IN THE WOODS → ROLEPLAYING NOKERED DRAGON WYRMLINGAHMED NOKE → CONSEQUENCES

Every bold entry is a block or an NPC, and every one of them sits immediately beside the scene that needs it. Tomb of the Serpent Kings goes further and indents the statline inside the room entry; The Delian Tomb keys everything to the room and re-states the alert flag forward, per room. None of the three defers a creature to the back of the document.

The failure it is written against — session 0 of A Few Questions

The page carried every mandatory slot and was still hard to read, because it ran fight rules → pre-fight → fight → after-fight → monsters → the people you met before the fight. Three separate causes, all of them ordering:

1 · Two schemes at once. Five numbered beats, but 3 and 4 were two aspects of one continuous fight and 5 was half mid-fight and half after it. The numbering promised a clock and delivered a topic list.

2 · A subsystem in the Alert State slot. The three anchors — the rule, two tables, and a d6 crowd table — sat above a 25-minute no-dice opening because “one variable the location shares” seemed to describe it. Alert state is “have they been alerted?”. This was the fight. The variable stays up top as two lines; the rules moved into the beat.

3 · Blocks and people as appendices. Both stat blocks sat at position 13 of 16 and the NPCs at 14, below every scene that used them — far enough down that a reader asked whether the module had monster blocks at all.

Prose rules

Everything that is not read aloud

Two registers, and only one of them gets to be literary. Read-aloud, opening monologues and quoted NPC speech are spoken word — they are performed, and the writing there earns its keep. Every other word on every page is scanned mid-session by a DM who is looking for one fact, and it is written flat: clear, concise, straightforward, no flowery filler.

Read-aloud

Which DCs to write down

Lost Mine specifies every check; Wild Sheep specifies about five, and plays fine. The test: write the DC when failure has a consequence you'd have to invent under pressure. The trap, the locked door, the talk-him-down. Ambient checks the DM can improvise don't need a number.

When you do write one, write the whole chain — passive threshold, active DC, the save, the condition, the damage, and how it ends. Then put it in the Numbers table on the card.

Monsters

NPCs

Every named antagonist gets a grievance — one sentence that makes them right from where they stand. Not a justification; a position. This is the single highest-value 200 words in Wild Sheep, and it's why anyone remembers that module.

Beyond that, three fields from Trilemma, all required on any NPC with a page:

Why Has is load-bearing, not flavour

It is the check that catches sole-source facts by construction. If a fact lives in one NPC's Has and nowhere else in the module, that NPC is a single point of failure — and NPCs die. The campaign's first module had one: two rows of the Surety's routing table leaned on Vasso Krell, a tidepriest who is killable a whole session before the fact is needed — which would have quietly removed the stand-and-kill ending from play. That was found by hand, late. With a Has field it would have been visible on his page from the start.

On the card, one line each: role · manner · tell · wants · has · grievance. The tell is the verbal habit you actually play them with — Krell says ships are “taken,” never sunk.

Numbers

Concrete, always. 50 gp, not “a reward.” ~80 gp of unlogged sundries, not “some valuables.” If a reward is deliberately withheld — Wild Sheep's deadbeat wizard is a good joke — that's a choice you make once, not a way to skip the arithmetic.

Worked examples

From The Ship That Didn't Sink — the campaign's first module, written before this spec, which already got most of it right. The module itself was retired in a fresh start and no longer exists in this repo (it's recoverable from git at the tag pre-campaign-reset). The examples are kept because they're self-contained and because they're the reason this spec is concrete rather than abstract.

Tactics with an objective — good

“They web the biggest threat and bite whatever's wrapped. They will not pursue below decks — the below decks has an owner, and they know it.” Positioning, morale, and a piece of worldbuilding in two sentences.

Information routing — good, but uncounted

The manifest discrepancy has two routes: the true manifest in the chart drawer, or Krell simply saying the hold is light. That's correct — but nothing in the module records that it's two, so the next writer can't tell a robust fact from a fragile one. That's what the new routing table fixes.

General Features — the gap

Session ii carries the information (“the deck lists gently; call for checks only when someone runs, fights, or carries”) but scattered through prose, so it has to be re-found mid-session. Same facts, one block, top of the page.

Alert state — the gap

Nothing tracks whether the Shroudweaver fight on the weather deck is heard in the hold. Krell is a listening, thinking NPC three zones away who would absolutely notice a fight overhead. One variable — did the deck go loud? — would change how he greets the party, and make the party's choice to fight quietly matter.

Read-aloud discipline — good

“The ship is silent the way a held breath is silent. As the boat knocks against her strakes, the gulls overhead cry once, all together, and go somewhere else.” Sensory, no mechanics, ends on something wrong. This is the standard.

Optional — considered, not adopted

Techniques that survived the survey but were deliberately not made mandatory. Reach for any of them when a module wants it; none is a requirement, and nothing is out of compliance for lacking one. Recorded here so the reasoning is on file and nobody re-litigates it from scratch.

TechniqueSourceWhat it is · when to reach for it
Traps solved, not rolledSerpent KingsNo Perception DC — the trap is “identified by examining the door closely, or by checking the ceiling,” then three named disarm vectors (rig a lift from a distance · cut the ceiling chains · tie the pegs to the floor), plus a dirty option with real numbers: use another PC as a springboard, +2 to your save, −2 to theirs. Reach for it when a trap is a set-piece rather than a toll.
Transformation over damageHounds of Low TideA failed trap doesn't deal 4d6 — it turns you into a human-sized prawn person over 1d4+5 minutes, water-breathing and fire-vulnerable. Nobody remembers 4d6. Use where a consequence should be a story, not a subtraction.
Secrets: as a standing room labelHounds of Low TideA fixed sub-label beside Treasure:, holding structural connections — “a small secret door leads to the Secret Hearth (Room 6).” Worth it in a site with real geography; noise in a linear one.
NPC location tableHounds of Low Tided6 Edna's Location — where the antagonist actually is when the party arrives. Use for any NPC who moves, and for any site you might run more than once.
Prices on the pageHounds of Low TideThe tavern's actual menu: rum 1sp, bottle 3sp, stout 1sp, stew 2sp. Trivial, constantly needed, almost never written down. Add wherever the party will plausibly buy something.
Declared design assumptionsSerpent KingsNot CR, but the anchors: “200gp is enough to level a single character… damage is scaled around PCs having between 4 and 16 hit points.” Our encounter budget is better for our purposes, but stating the assumption tells a future reader what to change when the party isn't four level-4 PCs.
“What this establishes”Serpent KingsSkerples annotates rooms with what they teach. Repurposed diegetically — what the party should now believe about the world — it names a thing our zones already do by accident (the webs hold gull and fish bones, no human ones).
Teach, then reward, then punishSerpent KingsRooms 2A and 2B are identical: the first teaches that the statues are hollow and gassed, the second lets you profit from knowing. Room 4 then puts a visible silver ring on a third statue and punishes anyone who didn't learn. Deliberate repetition with variation — the thing five all-different zones can't do. Best tried on a new module, not retrofitted.

What we don't do