The Wudlands is a dark, story-driven fantasy adventure rooted in the tradition of Fighting Fantasy gamebooks and old-school dungeon crawling. It is a world of desperate choices, hidden dangers, and hard-earned survival. Anyone can contribute an adventure addon — a self-contained story that players can enter, explore, and struggle through. Addon creators are free to shape their own corner of the Wudlands: invent monsters, ancient ruins, secret factions, forbidden magic, cursed artefacts, weather-battered wilderness, and whatever strange wonders or horrors they imagine. The only rule is that everything must serve the story. In the future we will add more content like Sci-Fi, Cthulhu 1920 horror, and more, but for now we are focused on the core fantasy experience.

The Wudlands is not a sandbox. There is no base-building, no permanent home, no safe corner of the world to retreat to. Temporary shelters, makeshift camps, collapsed forts, and story-driven structures are allowed when the narrative calls for them — a cave to weather a storm, a barricaded inn to hold against the night, a ruined tower that becomes a brief refuge. These places exist within the story, not as persistent player-owned properties. Survival systems such as hunger, thirst, exhaustion, wounds, disease, and harsh weather are welcome additions as long as they create tension, push decisions, and deepen the sense of danger rather than functioning as mechanical busywork disconnected from the plot.
Stories in the Wudlands do not have to be linear. Addon creators are encouraged to build branching paths, narrative loops, and N:M relationships between scenes and outcomes. A single choice may open into several possible scenes. Several entirely different choices may converge back to the same location, encounter, or conclusion. Players may revisit places, retrace steps, or circle back through the world in ways that feel natural rather than forced. What matters is that the story remains clear and playable at every point — no dead ends, no broken loops, no scenes that leave the player stranded without any path forward.
Adventures in The Wudlands can depend on one another. An addon creator may declare that their adventure requires one or more other adventures to have been completed first — and that completing a given adventure opens the way to one specific continuation or branches into several, depending on how the player reached the end. This means a player may need to finish an earlier story before a later one becomes accessible to them. Creators are responsible for declaring these dependencies clearly when submitting their addon. Where an adventure requires a prerequisite, that prerequisite must be reasonably completable on its own terms — it cannot exist solely as a gate. The chain of adventures should feel like a natural progression through the world, not an artificial lock. Dependencies between addons are resolved by the platform and presented to players before they begin.
Every addon must include a default ending or escape route. This is not optional. When a player is overwhelmed, badly wounded, out of resources, or simply lost, there must always be a valid path they can take to retreat, recover, or reach some form of conclusion. This fallback path should work as a short, complete adventure on its own — not a punishment for failure, but an honest exit that respects the player's experience. A story without an escape route is an incomplete story.
The engine that runs addon stories is built to handle missing or undefined scenes gracefully. If a requested node, scene, or encounter cannot be found in the addon data, the system will not crash or break the session. Instead it falls back to the addon's emergency_exit scene — a dedicated error-recovery scene that must lead the player toward the escape_route. The description of the emergency scene should contain a description of something unusual, unforeseen, blocking the way forward — a collapsed tunnel, a sudden rockfall, an ambush by bandits, a magical trap, or any other narrative obstacle that fits the tone of the story. Addon creators are responsible for defining this scene and ensuring it leads somewhere meaningful. A play through only counts against the limit of 3 replays, if any scene with ending: true was encountered. Several endings should be available. Being redirected to the escape route through the emergency_exit does not count as a playthrough, and does not consume one of the three replays.
| Topic | Guideline |
|---|---|
| Game Style | Dark, choice-based fantasy adventure with an old-school dungeon crawling feel. Atmosphere and tension come first. |
| Core Focus | Every addon must center on a clear, driven storyline. Open sandboxes without narrative direction are not accepted. |
| Player Experience | Dangerous, immersive, and sometimes deadly — but always meaningful. Failure should feel earned, not arbitrary. |
| Choices Matter | Every significant decision must lead to real consequences. Choices that change nothing undermine the experience. |
| Fame | Fame is a measure of the path the adventurer has chosen — not merely of deeds done, but of how the world chooses to remember them. It runs in two directions. A famed hero earns the warmth of crowds, the trust of strangers, and the kind of stories that are told in daylight: ballads, toasts, whispered admiration in the market square. An infamous wanderer earns something else — a darker renown that makes even kings lower their voices before sending for them. Courts still negotiate with the infamous; they simply bolt their doors afterwards. Creators are encouraged to let fame shape how NPCs react, what doors open, and what rumours follow the adventurer into the next town. The stories of the famed are told openly, embellished with honour. The stories of the infamous are told at night, around the campfire, by those who survived knowing them. |
| Notoriety | Where fame measures the nature of an adventurer's reputation, notoriety measures its reach — how far the tales have travelled, how many ears they have found. A wanderer of low notoriety may be celebrated or feared within a single village, yet step one valley over and be a complete stranger. High notoriety means the name has crossed borders: merchants recognise it, gatekeepers have heard the stories, and even distant lords know whether to set an extra place at the table or double the guard. Creators may use notoriety to determine what a character already knows about the adventurer before they speak a word, and how far ahead of the player their reputation walks. |
| Story Structure | Branching paths, loops, and N:M scene relationships are allowed and encouraged. Stories do not need to be linear. |
| Adventure Dependencies | Addons may require other adventures to be completed first. Finishing one adventure can unlock one or more others, as declared by the creator. |
| Combat Scenes | Combat scenes may disable the escape route only when the story has clearly forewarned the player of the danger — through audible warnings, environmental cues, or an explicit threat of ambush. The player must always have a fair opportunity to prepare or withdraw before the fight begins. In all other combat scenes the escape route remains available, though the author may impose consequences — injury, lost items, narrative fallout — for choosing to flee. |
| Default Entry | The default_entry is the scene id where every new session begins. It also acts as the non-error fallback when a requested scene cannot be resolved under normal conditions. It must exist in the scene map and must provide a path toward the escape route. |
| Missing Scene Fallback | If a scene cannot be found, the engine redirects to the addon's emergency_exit scene. That scene must lead toward the escape_route. Only one scene of this should be provided. |
| Escape Route | Every addon must include one default retreat route. Characters must always have a chance to run away, recover, or conclude. The escape route can be a short adventure in itself. When the next scene does have a disabled escape button the player must be warned in the current scene! |
| Survival | Hunger, thirst, exhaustion, wounds, disease, and harsh weather may be used to deepen tension. They must serve the story. |
| Addon Freedom | Creators may invent anything — monsters, factions, magic systems, strange worlds — as long as it serves the adventure. |
| Rule of Thumb | If it does not strengthen the story, the tension, or the atmosphere, it should not be in the contribution. |
The Wudlands draws deep inspiration from the fantasy literature and interactive fiction of the 1980s and 1990s — an era defined by the pulp paperbacks of Fighting Fantasy, the early Dungeons & Dragons modules, and the illustrated gamebooks that shaped a generation of adventurers. That tradition is vivid, atmospheric, and full of imagination. It is also a product of its time. The storytelling conventions of that era carried with them the gender roles, social assumptions, and romantic archetypes that were commonplace in popular fiction of the period. Players returning to this style of adventure will recognise them. They are part of what makes the experience feel authentic to its roots.

Central to medieval fantasy — and to the literature that inspired it — is the concept of Minne: the courtly love tradition of the German-speaking world, rooted in the poetry of the Minnesingers and the chivalric romances of the high Middle Ages. In this tradition, a knight or wandering hero pledges his service and devotion to a noble lady — often unattainable, often of higher station — and undertakes trials, quests, and feats of courage in her name. The lady holds power not through force but through honour, favour, and the withholding or granting of affection. This dynamic — the devoted wanderer and the compelling, unreachable figure — recurs throughout The Wudlands in NPC relationships, quest structures, and story rewards. It is intended as atmosphere, not instruction.
Some content in The Wudlands and its addons can reflect the gender dynamics, stereotypes, and romantic conventions common to 80s and 90s fantasy fiction. Female characters may be depicted as mysterious, seductive, or as objects of chivalric pursuit. Male characters may be portrayed through the lens of the classic lone adventurer archetype. Power imbalances rooted in social class, beauty, or magical allure may appear as narrative devices. These elements can be presented as vintage atmosphere — the deliberate aesthetic of a genre that carries both charm and the limitations of its era. They do not reflect the personal values of The Wudlands team, nor are they intended as endorsements of real-world attitudes toward gender, relationships, or social hierarchy.
Romantic storylines in addons may include flirtation, seduction, courtly intrigue, jealousy, unrequited devotion, and morally ambiguous power dynamics between characters — all common tropes of the genre. These may appear in text, dialogue, and branching choices. In adult-flagged addons, romantic storylines may extend into explicit erotic territory under the rules described in Section Content Standards of the GTCs. Where romance is present, creators are encouraged to give it weight and consequence within the story — a kiss earned through three nights of danger means more than one handed out freely. Romantic and erotic elements should feel like part of the world, not tacked-on rewards.
Writers who prefer to avoid romantic or courtly love storylines entirely are free to do so — no addon is required to contain them. If a specific story carries significant romantic themes, creators are asked to indicate this clearly in the addon description so players can make informed choices before entering.
Every addon submitted to The Wudlands is made up of two core elements: JSON file that defines the structure and flow of the story, images that give scenes a visual presence. Those addons will be listed as unapproved until they meet the platform requirements and pass the validation checks. Once approved, they become available to players worldwide. Below are the detailed specifications for each element, along with an example of a complete addon at the end.
The story itself is defined in a single JSON file. This file describes every scene, every choice, every connection between scenes, and the metadata the engine needs to run the addon correctly. The file must be valid JSON and must pass the platform schema validation before it can be published. Below is the full structure with all available fields.
{
"id": "string — unique addon id, lowercase, hyphens only. e.g. the-black-tower",
"title": "string — display name shown to players",
"author": "string — your name or handle",
"version": "string — semver format, e.g. 1.0.0",
"Polkadot_address": "string — optional. your Polkadot address for revenue share",
"eth_address": "string — optional. your ETH address for revenue share",
"adult": false, // boolean — true if addon contains adult content",
"require": ["array or requirements to enter - e.g. m, d, f, solo],
"tags": ["array of strings — e.g. dungeon, horror, romance, survival"],
"requires": ["array of addon ids, one must be completed before this one is accessible"],
"unlocks": ["array of addon ids that become accessible after this one is completed"],
"default_entry": "string — scene id used as start point AND missing-scene fallback",
"emergency_exit": "string — scene id used on errors to lead to the escape route",
"escape_route": "string — scene id of the retreat / fallback ending",
"scenes": {
"<scene_id>": {
"title": "string — optional short label for the scene",
"text": "string — narrative prose shown to the player. Supports \n for line breaks.",
"image": "string — optional. filename of the scene image, e.g. ruined-gate.jpg",
"image_style": "string — optional. display preset applied to the image. available styles:",
// origin — no filter, image shown as-is (default when field is omitted)",
// mirrorh — horizontally flipped image",
// mirrorv — vertically flipped image",
// darkened — heavy shadow, very gloomy atmosphere",
// pitchblack — near total darkness, only outlines remain",
// bright — lifted and warmed, rare daylight or hope",
// blackwhite — full desaturation, all colour removed",
// vintage — aged, parchment-like tone",
// deepsepia — full sepia burn, old photograph feel",
// cold — icy blue shift, ghostly and frozen",
// moonlight — deep cold contrast, pale silver light",
// crimson — dark blood-red wash, dread and danger",
// copper — warm metallic orange, firelit scenes",
// deepocean — submerged blue-green darkness",
// poison — sickly green hue, cursed or toxic places",
// infrared — alien colour inversion, heat-map look",
// goldenhour — warm amber sunset glow",
// apocalypse — scorched high-contrast ruin",
// neonsurge — blown-out electric colour overload",
// inverted — full colour inversion, uncanny and unsettling",
// xray — white-on-black skeletal exposure",
// drunk — soft blur with lifted saturation",
// fog — pale mist veil, washed-out and desaturated",
// rain — animated diagonal rain streaks, cold blue-grey wash",
// drunk — animated: slow irregular sway and rotation (5s)",
// emerge — emerges once from black to full brightness",
// colorpulse — animated: cycles between greyscale and full colour (6s)",
// heat — animated: slow hue and saturation pulse (2s)",
// scanlines — soft horizontal scanline overlay",
// scanlinesdark — scanlines over darkened image",
// verticalstrips — soft vertical strip overlay",
// flicker — animated: erratic rapid brightness flicker",
"ending": true, // 'ending' marks this as a terminal scene — deducts from the 3 playthroughs."
// 'false' is also a terminal scene, but does not deduct from the 3 playthroughs."
// default_entry must not be marked as an ending!
"choices": [
{
"text": "string — the choice label the player sees",
"to": "string — target <scene id>"
}
]
}
}
}A few rules that apply across the whole file: the default_entry scene must exist in scenes and must have at least one choice that eventually leads to the escape_route. The escape_route scene must be marked "ending": true. The emergency_exit scene must be provided to recover from errors, it must lead to the escape_route. Every to value in a choice must reference a valid scene id within the same addon — cross-addon jumps are handled through unlocks, not through choices. Scene ids must be lowercase and may only contain letters, digits, and hyphens.
Each scene in your addon may reference one image. Images are not required for every scene and can be used for several scenes, but they strongly reinforce atmosphere and help players orient themselves within the world. The image is displayed above the scene text when the player enters that scene.
The aspect ratio of your image directly affects how much space remains on the screen for story text, choices, and interactive buttons. Choose your image dimensions strategically based on the pacing and focus of each scene.
16:9 Landscape (Wide) — Minimal text space. The image dominates the screen. Use this for overland travel scenes, vast vistas, and moments where the visual landscape tells most of the story. These scenes work best with few choices or simple decision points. Ideal for establishing shots and atmosphere.
3:2 Ratio — Moderate text space. Balanced between image and content. Works well for most general scenes where image and narrative share equal weight. Good for exploration, discovery, and scenes that need both visual context and detailed description.
1:1 Square — Significant text space. The image becomes a portrait or symbol rather than a landscape. Use for NPC encounters, close-up character moments, and scenes where the visual focus is narrow and the text dialogue must carry more weight.
2:3 Portrait (Tall) — Ample text space for complex choices. Ideal for market scenes with many vendors, tavern encounters with multiple NPCs, or any scene where players need to read and compare several options. Portrait images work well for character close-ups and intricate indoor spaces.
4:5 Portrait (Very Tall) — Maximum text space. Use when story complexity demands it: branching dialogue, multi-step decisions, or detailed descriptions of crafting, trading, or negotiation. These scenes prioritize reading and decision-making over visual spectacle. Avoid using this ratio unless your narrative truly requires the extra space.
Best Practice: Design your scenes with a clear visual hierarchy. Overland travel and exploration scenes benefit from wide, immersive landscapes. Intimate moments, trade sequences, and dialogue-heavy scenes work better with portrait ratios that leave room for text. Vary your aspect ratios throughout your addon to pace the visual rhythm — wide scenes for wonder, narrow scenes for intimacy.
Images must be submitted as .jpg or .webp files, at a minimum resolution of 1024 × 576 px (16:9 landscape). Portrait or square crops are accepted but landscape is preferred as it fills the scene frame without letterboxing. File size should not exceed 400 KB per image — compress before submitting. Name each file after its scene id, for example ruined-gate.jpg for a scene with id ruined-gate. This makes the link between scene and image unambiguous.
Images should match the tone of the world: dark, painterly, atmospheric. Avoid bright, saturated modern renders or photographs. Pencil illustrations, oil-style digital paintings, and desaturated fantasy art all work well. The platform applies a subtle grayscale pulse and vignette overlay to all scene images at runtime, so images that already lean dark and moody will read best. Avoid images with embedded text — all text is handled by the scene content, not the image.
| Property | Value | Notes |
|---|---|---|
| Format | .jpg / .webp | PNG accepted but not preferred — file sizes are larger. |
| Min resolution | 1024 × 576 px | 16:9 landscape is the native display ratio. |
| Max resolution | 1200 × 700 px | Images larger than this will be scaled down by the engine. |
| Max file size | 400 KB | Compress before submitting. Large files slow scene loading. |
| Naming | scene-id.jpg | Must match the scene id in your JSON exactly. |
| Style | Dark fantasy art | Painterly, desaturated, atmospheric. No embedded text. |
| Required | No | Images are optional per scene but at least one is strongly recommended. |
The following gallery shows all available image_style presets applied to a sample set of scene images. Click any image to enlarge it. Click again to close. Use the images filters below sparingly and intentionally to create mood and tone. A well-chosen image can make a scene memorable, while a poorly chosen one can feel out of place or even break immersion.
Original
(no filter applied)
MirrorH
(css transform scaleX(-1))
MirrorV
(css transform scale(-1))
Darkened
(css brightness(0.55))
Pitch Black
(css brightness(0.35) contrast(1.2))
Bright
(css brightness(1.3) saturate(1.2))
Blackwhite
(css grayscale(1))
Vintage
(css sepia(0.55) contrast(1.1))
DeepSepia
(css sepia(1) contrast(1.2))
Cold
(css hue-rotate(200deg) saturate(0.7) brightness(0.9))
Moonlight
(css hue-rotate(220deg) brightness(0.75) saturate(0.4) contrast(1.3))
Crimson
(css sepia(1) hue-rotate(-50deg) saturate(3) brightness(0.8))
Copper
(css sepia(1) hue-rotate(330deg) saturate(2.5) brightness(0.85))
DeepOcean
(css hue-rotate(180deg) saturate(1.8) brightness(0.8) contrast(1.2))
Poison
(css hue-rotate(90deg) saturate(1.5) brightness(0.8))
Infrared
(css hue-rotate(140deg) saturate(2.5) contrast(1.2) brightness(0.9))
GoldenHour
(css sepia(0.4) saturate(2.5) brightness(1.15) hue-rotate(350deg))
Apocalypse
(css sepia(0.9) contrast(1.6) brightness(0.65))
NeonSurge
(css brightness(1.5) contrast(2.5) saturate(4))
Inverted
(css invert(1))
XRay
(css invert(1) grayscale(1) contrast(1.15) brightness(1.05))
Emerge
(looping preview but one-time ingame, animation — brightness(0) → brightness(1))
ColorPulse
(animation — grayscale ↔ full colour, 6s cycle)
Heat
(animation — hue shift + saturation pulse, 2s cycle)
Fog
(overlay — radial mist veil + brightness(1.1) contrast(0.72) saturate(0.55))
Rain
(overlay — animated diagonal rain streaks + brightness(0.8) saturate(0.65))
Scanlines
(overlay — horizontal scanlines every 5px)
ScanlinesDark
(overlay scanlines + css brightness(0.5))
VerticalStrips
(overlay — vertical strips every 7px)
Drunk
(css blur(0.6px) brightness(1.15) saturate(1.4) contrast(0.85))
Flicker
(warning in adventure description required, animation — erratic brightness flicker)
Below is a complete minimal addon with three scenes. It demonstrates a starting scene with two choices, a deeper scene that leads either forward or back, and an escape route marked as a terminal ending. This structure is the smallest valid addon the platform will accept.
{
"id": "the-ruined-gate",
"title": "The Ruined Gate",
"author": "Grimwald of Ashfen",
"version": "1.0.0",
"Poldkadot_address": "",
"eth_address": "",
"adult": false,
"require": ["m", "d", "f", "solo"],
"tags": ["dungeon", "ruins"],
"requires": [],
"unlocks": [],
"default_entry": "approach",
"emergency_exit": "broken_ceiling",
"escape_route": "run_away",
"scenes": {
"approach": {
"title": "Collapsing Mouth",
"text": "After a few hours of travel, you stand at the lip of a yawning sinkhole,
the air below smelling of damp stone and old rot. <br>
You claimed down carefully into the pit, but the ground beneath you
crumbles and gives way. You fall a short distance,
scraping your arms and legs on the jagged rock. <br>
At the bottom you see a narrow staircase carved into the rock
descends into the dark — a cold draft sighs up from the depths. <br>
Loose pebbles skitter underfoot. Far below, something moves that is not the
wind.",
"image": "approach.jpg",
"image_style": "deepocean",
"choices": [
{ "text": "Descend the carved steps", "to": "inner-court" },
{ "text": "You don't feel ready for this. Climb out", "to": "forest-retreat" }
]}
},
"inner-court": {
"title": "The Lower Vault",
"text": "You step into a vaulted cavern where moulded pillars hold a ceiling
low with mineral veins.<br>
Water drips in slow, musical patterns.
Ancient scratches mark a path toward a half-buried gate carved
with symbols. The gate is broken and some metal pieces hang loose.<br>
From somewhere deeper comes a metallic, distant clank.",
"image": "inner-court.jpg",
"image_style": "scanlines",
"choices": [
{ "text": "Follow the scratched path", "to": "inner-court" },
{ "text": "Grab a rusty metal bar and return home", "to": "return-home" },
{ "text": "Leave to get better equippment", "to": "forest-retreat" }
]
},
# Remark: Every adventure must have at least one terminal ending scene, marked with "ending": true.
"return-home": {
"title": "Run home with trophy",
"text": "With effort, you grab one of the rusty metal poles and wrench it free.
Clutching the dusty metal bar, you quickly run back to the surface and
climb out of the sinkhole. The sun is warm on your face as you emerge,
though the air tastes of dust and earth.<br>
Still, you feel lucky to have returned with your prize.",
"image": "peaceful-forest.jpg",
"image_style": "origin",
"ending": true,
},
"forest-retreat": {
"title": "Getting equippment",
"text": "You claw your way back to the surface and emerge from the sinkhole
into a quiet forest. Sunlight filters through the canopy above, and
the air is crisp with the scent of pine and earth.<br>
You make your way home, vowing to return better equipped and
ready to claim what the depths have guarded.",
"image": "forest-path.jpg",
"image_style": "origin",
"ending": true,
}
# Remark: This is the mandatory emergency_exit. It is scene fallback in case of
# a broken reference. It is not reachable through normal play and does
# not count against the 3 reruns.
"broken-ceiling": {
"title": "Broken Ceiling",
"text": "Suddenly an earthquake shakes the caverns. Dust falls like rain and a
thunder of collapsing stone drowns the sound of your breath.<br>
A fissure opens, dropping you into a fractured passage; rubble blocks
the way you came. You must fight your way through the shifting dark
toward any route that leads upward.<br>
Debris underfoot threatens to give; the air tastes of iron and panic.",
"image": "broken-ceiling.jpg",
"image_style": "apocalypse",
"ending": false,
}
# Remark: This is the standard escape_route, it is marked as a true ending.
# The escape route can be accessed from any scene by pressing the 'escape'
# button in the UI when it is green. In cases where the 'escape' button is
# disabled, it is colored red.
"run_away": {
"title": "Climb to Daylight",
"text": "You scramble up a narrow shaft and find a ragged slit of sky. <br>
The surface is a maze of broken earth and toppled root, but above you,
the world is open and the air warm. <br>
You make your way back to the light, lungs burning and pockets
full of dust, alive and changed.",
"image": "forest-retreat.jpg",
"image_style": "origin",
"ending": true,
"choices": []
},
}
}This example is intentionally spare. A published addon will typically contain between sixty and five hundred scenes, with multiple branching paths, several dead ends that loop back to earlier scenes, and at least two or three distinct endings depending on the choices the player made. The escape route will always be reachable from any scene. The escape route might be a short story in itself.