ROBIUL.HASAN
All projects

Fan game · Godot 4 · personal project

Innworld RPG

Free, Non-Commercial Fan RPG in Godot 4 with a Headless Deterministic Simulation Core and Six Books of Canon Encoded as Data

Books As Canon
1–6
Canon Events
898
Release
v0.1.1-alpha

Why I built it

A live project to learn the systems my day job never touches

This is a learning project with a real deadline culture: branches, ADRs, tests and tagged releases. It is free and non-commercial. The Wandering Inn and its world belong to pirateaba. No book text lives in the repository — canon events are short summaries in my own words with chapter references.

The problem

You cannot hard-code ten million words

A faithful adaptation of a 10-million-word serial cannot be hard-coded. Six books of plot, hundreds of named characters and a live world needed to be playable, changeable by the player, and reproducible for testing — without rewriting engine code every time a new book was added, and without putting any copyrighted book text into the repository.

The build

A headless simulation under a pixel-art skin

Engineered a headless simulation core in GDScript with no nodes and no scenes: all rules live in game/core/, the Godot view only reads state and sends commands. Every game lives in one GameState object that serialises to versioned JSON with migrations, and all randomness runs through a single seeded RNG, so the same seed and the same commands replay the same game. Classes, Skills, spells, enemies, maps, NPC schedules and canon events are all JSON data validated by a Python schema checker, so a new book adds content, not code. Canon events are declarative nodes with roles, preconditions, fallbacks and effects, which is what lets the player bend the timeline instead of breaking it.

Fights happen on the same map grid, XCOM-style: turn order by Agility, action points for moving and attacking, cover, combat Skills, mana and spells. Nights are the commit point — sleeping closes the day, resolves levels and Skill picks, offers classes, then runs the canon events of that night and simulates the world off-screen.

You Level By Living

Cooking, fighting, trading and talking feed hidden class pools. At night the System may offer a class — decline it and that offer never returns.

Canon As Data, Not A Rail

898 events from Books 1–6 as declarative nodes with roles, preconditions and fallbacks, so the player can delay, change or stop them.

Deterministic Headless Core

All rules in game/core/ with no nodes or scenes, one GameState, one seeded RNG. Same seed plus same commands replays the same game.

Canon coverage

Six books, encoded as data

Book Chapters Events
1 The Wandering Inn 1.00 – 1.63 151
2 Fae and Fare Interlude – 2.48 207
3 Flowers of Esthelm 3.00 – 3.25 157
4 Winter Solstice 3.26 – 3.40 111
5 The Last Light 4.00 K – 4.31 140
6 The General of Izril 4.32 G – 4.49 132

898 events, 261 characters and 103 places across 38 maps. Next up is Book 7, The Rains of Liscor. Anything the text does not state outright is tagged as a guess in the data.

Results

What shipped

  • Shipped v0.1.1-alpha playable three ways from one release script: in the browser via WebAssembly on GitHub Pages, plus Windows and Linux downloads.
  • Encoded Books 1–6 as validated data — 898 canon events, 261 characters, 103 places, 38 maps — so a new book adds JSON, not engine code.
  • Covered the simulation with 147 GUT test scripts (~1,400 tests) plus 102 Python tool tests and a JSON data validator, all runnable from one command.

An alpha, so expect bugs. The browser build needs a keyboard and a first load of about 100 MB, and saves from this build may not load in a later one.

Open to sysadmin & cloud infra roles

Got a messy network? I like those.