Devlog 001: Building Ilchuu-dvn — People of the River
- Philip Rilatos

- Mar 30
- 9 min read
A pre-contact Tututni village management game, made by an enrolled tribal member.
This devlog should bring you up to speed for where the game currently is.
What Is This Devlog 001 and Game?
You are the headman of Tutudun, a Tututni village on the lower Rogue River in what is now southern Oregon. Before European contact. Before everything changed.
Your job is to keep your people alive. Allocate labor to fishing, gathering, and building. Manage food stores through brutal winters. Teach the next generation before the elders pass on and take irreplaceable knowledge with them. Navigate diplomacy with 15 neighboring villages. Settle disputes. Hold ceremonies. Make hard choices with no right answers.
The game is text driven, with a rich audio, and planned artwork by native artist(s). There is no map screen, no tech tree, no resource spreadsheet. You read about your village the way you'd read a novel, and the village writes itself differently every day, because every line of prose is assembled from combinatorial fragment pools that produce thousands of unique variations.
It runs in a browser. Vanilla JavaScript, no framework. Electron wrapper for desktop. Targeting Steam, with a potential mobile edition.
It is my hope that the language, history, and stories of my ancestors will be kept alive in the game and tell the player a story of a peoples they very well may never heard of. These logs will be how I update anyone who is interested and gives myself a log of what I did.
The Build
The Foundation
The first commit was already v0.1.0 — I'd been building the core game logic, devtools, and save system before putting it under version control. This phase was about getting the bones right: a knowledge and teaching system (elders hold skills that die with them), a Language Archive with authentic Dee-ni vocabulary from the Tolowa (Siletz Dee-ni coming soon), a conflict and war system built on the grievance model (not "attack/defend" — you track insults, injuries, and unpaid debts until someone decides it's worth fighting over and collecting a debt by force. Winning doesn't always mean you win in the long run).
It took a while get a lot of the core systems to work, but before I knew it, I had a rather deep social simulation: politics, justice, cosmology, oral tradition, generational memory, household identity. A Village Pulse panel that synthesized the village condition into a narrative snapshot. An experience curve so the first 30 days teach you the game without a tutorial screen* (*this still needs work).
12 commits. The village exists.
The Village Remembers
The game has a memory (sort of). I built a 10-phase system where the village tracks your leadership patterns and reacts to them over time:
World Heartbeat — daily background evaluators that assess village health
Decision Preview — you can see the likely consequences before you choose
Pressure Chains — sustained problems develop into crises
Consequence Memory — the village remembers what you did and didn't do
NPC Reactions — people start responding to your patterns
Legacy Judgments — communal memory of your leadership crystallizes
Generational Memory + Cultural Identity
Inter-Village Identity — your reputation spreads
World Entanglement — the 15 neighboring villages interact independently of you
Narrative Coherence — all these threads weave together into a consistent story
Also built the ending system: terminal states, post-ending reflection ("What Remains"), best-remembered leader, best-remembered moment. The game doesn't just end, it tells you how you'll be remembered.
41 commits. The village has soul.
Consequences
A focused pass. Polished the "Because you..." decision feedback system, when you give an order, the village tells you what happened because of your earlier choices. NPCs follow through on their reactions. "Because you didn't" messages appear when inaction has consequences.
Built the consequence visibility layer and a message density governor so the game doesn't overwhelm you with text.
7 commits. Decisions have weight.
Infrastructure
Extracted three major modules from main.js (NarrativeComposer, ViewRouter, EventPresenter, 2,429 lines moved). Built the Electron desktop app for filesystem saves. Added Steamworks.js integration for achievements and cloud saves. Started surfacing hidden game state to the player, the simulation was running but the player couldn't see most of it.
17 commits. The game is in a rough demo/playtest state.
The Ethnographic Deep Dive
The biggest push. I went deep into the ethnographic research — Edward Curtis's 1924 documentation, linguistic records, trade network analysis, as well as stories and history from family — and rebuilt mechanics to match:
Warfare as armed litigation. Tututni warfare wasn't about conquest. It was a 4-phase escalation: demand payment, threaten, raid, negotiate peace. Every fight had a price in dentalium shells.
Debt-slavery as justice. When someone couldn't pay their compensation, they worked it off. Not chattel slavery — a legal institution with specific terms.
The Salmon Covenant. The First Salmon ceremony isn't a flat ritual bonus. The salmon choose to return. The relationship is reciprocal and sacred.
Gendered knowledge. Women's acorn processing knowledge is as critical as men's fishing knowledge. Lose the wrong elder and the village starves.
The Headman Authority System. You don't command. You persuade, you model, you earn. Authority is a finite resource that regenerates through good leadership.
Bride price, commoner defection, wealth redistribution at death. When a headman dies, the wealth doesn't pass to the heir — it gets redistributed. The new leader starts from zero.
Also did the complete UI overhaul: ripped out the original 3-column layout, built a new 2-column layout in 12 phases, added seasonal scene placeholder art, border weaves, warm parchment tones.
Character creation went from 6 screens to 3.
~80 commits. The game became culturally grounded.
Making It Real
Balance fixes, performance optimization, village autonomy (households make their own micro-decisions), knowledge confidence model (knowledge degrades if not practiced), onboarding pacing. Built the wealth-based succession system, when you die, the next headman is chosen by wealth, influence, and village politics, not a menu.
The deep text engine went in: combinatorial narrative pools and archetype voice systems. 777 new narrative lines in one commit. Five voice archetypes (elder, fisher, woman, warrior, youth) each with distinct speech patterns.
33 commits. The game felt alive.
The Volume Push
This is where the game went from "functional" to "deep." I studied Warsim (a game with 700+ events and massive text variety) and applied those lessons:
Phase A: Make the village talk. Idle chatter, overheard conversations, people commenting on the weather and the food and each other.
Phase B: Deepen every pool. Humor, craft descriptions, village naming ceremonies. Warrior voice pool. Woman voice pool tripled.
Phase C: Audio system, 72 situation templates, diplomacy events.
Then built all the missing systems from a Steam competitor audit: localization, calendar events, content filter, banter system, 3-tier text rendering, building tiers, epidemic system, demographic modeling, dual economy, practice gates, mod loader, animal migration, production chains.
The Coyote system went in, a hidden trickster pressure mechanic that occasionally upends the best-laid plans. Shaman healing with diagnosis, treatment, and fallibility. Personal wealth tracking for every person in the village. Pregnancy lifecycle from conception through delivery.
QA suite: 13 test files, 191 tests, all green. Headless playthrough simulation for regression testing.
~70 commits. 1,322 new narrative lines in a single volume pass.
Sound and Story
The audio system overhaul: 252 OGG files mapped, 186 sounds wired to game events. Title screen gets a randomized forest soundscape — 1,680 unique ambient combinations from layered canopy sounds, distant river rumble, and asymmetric volume jitter so it never loops the same way twice.
NarrativeWeaver v2 with tonal coherence and bridge sentences. Environment content pack: 420 observation lines across 26 categories. Volume injection passes added 104 narrative blocks for the story assembly engine.
25 commits. The game had a voice.
The Polish Pass
The final push. Complete UI redesign to story panels, every interaction (walking the village, holding ceremonies, evening downtime) now opens a narrative panel instead of dumping text into a feed. The Daily Chronicle system auto-composes literary paragraphs from each day's events using combinatorial fragments (1,484 unique combinations, rolling dedup so nothing repeats).
WorldSimulation.js: all 15 neighboring villages now simulate independently. Population drift, pressure states, world events, trade availability. Information reaches you through returning parties and visiting traders, hedged by confidence decay, fresh news is reliable, old news becomes rumor, ancient news becomes legend.
Accessibility audit and fixes. Prose quality linter (automated AI-idiom detection, register slip checking, banned terminology enforcement). 50+ new events across 6 systems. Corrected ethnographically wrong starting relations (the Tolowa were close allies, not strangers, their village was a day's walk away and the children played together).
2 commits (large). The game was ready to show.
By The Numbers
Total commits: 283
JavaScript files: 162
Total lines of code: 112,920
Core simulation modules: 66
Narrative text pool lines: 7,207
Voice archetypes: 5
Neighboring villages simulated: 15
Declarative events: 25
Situation templates: 72
Calendar events: 35
Walk encounters: ~70
Ceremony types: 10
Dispatch complications: 12
Petition types: 12
Audio files mapped: 252
Title screen ambient combos: 1,680
Daily chronicle combinations: 1,484
Morning report variants: 588
QA test files: 15
Tests passing: 435/435
What I Learned
Text is the game. In a text-driven village sim, writing quality isn't polish, it's the core mechanic. I spent more time on prose than on any single system. Every line gets run through an automated linter that catches AI-sounding idioms, register slips (no "efficiency" or "morale" in a pre-contact village), and banned terminology. If a line wouldn't hold up in a Le Guin novel, it gets rewritten.
Combinatorial beats volume. Instead of writing 1,000 fixed daily reports, I built a system where independent sentence fragments combine: 5 openers times 4 middle parts times 5 closings = 100 unique paragraphs from 14 fragments. The Daily Chronicle produces 1,484 unique entries from 346 fragments. Players will never see the same day described the same way.
Ethnographic grounding makes everything better. The moment I stopped inventing "fantasy village" mechanics and started reading Edward Curtis, the game got dramatically better. Real cultures have more interesting rules than anything I could design. Warfare as armed litigation. Knowledge as a fragile ecosystem. Wealth as obligation, not accumulation. The research did the design work for me.
The village needs to talk. I studied Warsim, a game famous for making its world feel alive through sheer volume of text events, as well as the systems of other games. The lesson: idle chatter, overheard arguments, children playing, dogs barking at nothing. A village that only speaks when you give orders feels like a spreadsheet. A village that mutters and laughs and worries while you're just sitting there feels like a place that is lived in.
15 simulated neighbor villages changes everything. When the other villages have their own populations, their own food crises, their own political upheavals and when that information reaches you unreliably, through traders and returning parties, the world stops feeling like a stage set. You hear that the Tolowa had a bad salmon run. Is that true? It was two seasons ago. Do you send food anyway? That's a real decision.
By The Numbers
Codebase
Development time: 300+ days
Total commits: 283
JavaScript files: 162
Total lines of code: 112,920
CSS lines: 7,475
Total words in source: 859,296
Core simulation modules: 66
UI modules: 18
Data files: 77
Narrative Content
Narrative text pool words: 106,806
Winter story words: 77,472
Text pool lines (dedicated files): 7,207
Voice response functions: 106
Voice archetypes: 5 (elder, fisher, woman, warrior, youth)
Wisdom sayings: 186
Winter stories: 339 entries
Daily chronicle unique combinations: 1,484
Events & Encounters
Main scripted events: 243
Declarative events: 25
Situation templates: 76
Calendar events: 35
Walk encounters: ~49 across 20 zones
Ceremony types: 10
Dispatch complications: 13
Petition types: 12
Total event touchpoints: ~463
World Simulation
Neighboring villages simulated: 15
World event types: 15
Trade routes: 15
Knowledge confidence tiers: 4 (fresh / stale / rumor / unknown)
Audio & Art
Audio files: 271 OGG
Title screen ambient combinations: 1,680
Scene images: 41 (AI create placeholder imagery - need native artist(s))
Quality Assurance
Test files: 15
Tests passing: 435 / 435
Prose lint categories: 4 (weak words, banned terms, incorrect flora/fauna)
For context: 859,296 total words in source is roughly the length of the Lord of the Rings trilogy (576k) plus the entire first three Harry Potter books combined. Most of that is code, but the dedicated narrative content alone — text pools, winter stories, and the chronicle — clocks in around 184,000 words. That's a full-length novel and a half of hand-written prose the game assembles and recombines into unique daily stories.

What's Next
Devlog 001 shows that the core game is built. 112,000 lines of JavaScript, 283 commits. The simulation runs very deep. The text reads well, but it needs a lot of work (it's blocky in a lot of areas). The world feels alive under the hood, I need to bring that so its player facing in more direct ways.
Next: more events (targeting 1000+), deeper walk encounters (targeting 500+), Steam integration testing, and the long content push to fill every pool until no two playthroughs read the same way. Then polish.
The river runs. The village endures. The story writes itself.
Ilchuu-dvn: People of the River is in active development. Follow the project at github.com/DyslexicYodah/ilchuu-dvn
Comments