Chatura Dissanayake presents

Road Remains

"Don't worry, the road is going to be fixed this time."

Isometric Visual Novel Misinformation & Voting Sri Lanka 30–40 min session

Game Design Document  |  v2.0.3  |  18 June 2026

Documentation

Overview & Vision Statement

The Game in Plain Language
The Road Arc
WEEKS 6–3

The Promise

Mahinda Bandara's campaign is everywhere. Calendars. Posters. His manifesto has a section about the road. It sounds specific. It sounds achievable. The player has no reason to doubt him yet. Uncle Sirisena says he's always supported Mahinda because he finally gets things done. Mudalali says the road will be sorted before the monsoon hits. The ambient optimism is real, and it's the game's most important lie.

WEEK 2 (Hidden)

The Crack Shows

If the player clicks Nandadasa's filing cabinet, not Nandadasa, the cabinet, they find the Road File. Every repair application filed since 2007. Every one processed correctly. Every one forwarded correctly. Every one received and filed. The road is not fixed because the budget was reallocated at a level above Nandadasa's jurisdiction. He has known this since 2009. He has never mentioned it. It is not his place. This scene is 90 seconds. It recontextualises everything without a single didactic line.

WEEK 2 (Hidden)

The Manifesto

If the player has read the current manifesto AND clicks an unmarked box in the campaign tent, a side-by-side comparison appears. The road section of the 2010 manifesto vs the current one. 94% identical. The only change: "within the next term" became "as a priority." The game says nothing. It just shows it.

WEEK 0

The Road Remains

The election happens. Mahinda Bandara may win or lose. The road is still broken. This is not a twist ending, it is the premise. The game is called Road Remains. Every ending shares the same name. The player voted anyway. Aunty Soma has been voting since 1983 with no illusions. That's the point.

Design Mandate for the Entire Team: The road must feel genuinely fixable for the first two-thirds of the game. The optimism is real. Mahinda Bandara is not cartoonishly corrupt, he might even believe the promise himself. The disappointment only lands if the hope was real first. Do not undercut the hope early. Do not signal the ending prematurely. Let the player believe. Then show them the filing cabinet.
Tone Reference — "GTA SA, But It's About Voting"

It Has Edge

Uncle Sirisena runs a WhatsApp group called "Alupotha Patriots" with 847 members and forwards everything without reading it. He is not a villain, his motivations are entirely good. His information hygiene is catastrophic. Both things are true at the same time, and the game never smooths the contradiction.

It's Not Safe

Mudalali has voted for the same party since 1977 and regards this as a form of integrity. His father ran the boutique before him. The 1977 receipt is behind the counter. He has never mentioned it to anyone. The game does not tell you what to make of that. It just leaves it there.

It's Honest

Sergeant Wickramasinghe is the most competent person in Alupotha and has made peace with the fact that this does not make him the most influential. He finds most situations mildly amusing. He requested this posting specifically and will not explain why. That thread does not resolve. It is simply there for players paying attention.

0. Canonical Definitions

This section exists solely to resolve conflicts identified between GDD v1.0 and supporting design documents. Every developer, artist, writer, and translator uses this section as the final authority. No other document overrides these definitions.

0.1 Week Numbering - Canonical Definition

The week counter is a countdown. The game opens at Week 6 (six weeks until election day) and ends at Week 0 (election day). The counter decrements by 1 each time the player completes a chapter. Week 4 means four weeks remain before the election. Registration closes when the counter reaches Week 4. The campaign period ends when the counter reaches Week 1. Voting day is Week 0. This convention is used in all documents, all code, all UI labels without exception.

Counter DisplayMeaningLocks / Events
Week 6Game start - 6 weeks until electionAll locations accessible except Polling Station
Week 5Community momentumRumours begin escalating. Uncle Sirisena's frequency increases.
Week 4Registration deadlineVoter registration permanently closes if not completed
Week 3Candidate list notice postedElections Commission board updated with official candidate list. Sandya's note appears.
Week 2Mid-campaignMahinda Bandara's manifesto comparison becomes available
Week 1Campaign period closesMahinda Bandara no longer gives interviews. Campaign tent still accessible.
Week 0Election dayPolling Station unlocks. All other locations become read-only.

0.2 Character Name - Canonical Spelling

The third playable character is named Kumaran. Not Kumar. Not Kumaran Pillai. Kumaran. This spelling is used in all code variable names, all dialogue files, all UI labels, all translation files. Any supporting document that uses "Kumar" is incorrect and must be updated before production.

0.3 Skeptics Cafe - Canonical Status

Skeptics Cafe is a discoverable unlockable space, not a mapped location. It does not appear on the town map at the start of the game. It becomes accessible only after the player verifies three or more messages using the Elections Commission board in a single playthrough. It is referenced in dialogue by Nandadasa Mahaththaya as "a group of people who check things before they share them" - not named directly. Players who find it discover a secondary information network. Its existence is not documented anywhere the player can read before unlocking it.

Technical note: in map-data.json, Skeptics Cafe is the only location entry carrying an unlockedBy field (value: verifiedAtBoardCount_gte_3). All 12 other locations omit this field entirely rather than setting it to a falsy value, so checkMapUnlocks() can treat "no field" as "always visible" without a special case.

0.4 Difficulty Scope - MVP vs Post-Launch

MVP scope includes Standard mode only. Hard mode, Expert mode, and Speedrun mode are documented in Section 22.2 as post-launch features. They are not built in the initial release. The game state architecture must be designed to support them without refactoring, but they are not activated in v1.0 of the product.

0.5 Platform Scope - MVP

MVP is web browser only. Both Component A and Component B are web applications. Android packaging (Android 12+) is a post-launch deliverable documented in Section 22.2. The web build must be responsive and function correctly on mobile browsers as a prerequisite for eventual Android packaging.

0.6 Premise Disclosure vs Mechanical Instruction, Canonical Distinction

"It does not lecture" (Section 1.1) governs how the player is taught to play. It does not govern whether the player is told what the game is. These are two different kinds of telling, and conflating them is the single most common implementation mistake on this project.

Withhold: the correct response to a misinformation message, the existence of Skeptics Cafe, the consequence of a specific choice before it happens. Do not withhold: the premise (six weeks before an election; three numbers track community and personal outcomes), the stakes (gauge values at Week 0 determine which ending is reachable), and the fact that choices made early compound later. The second category must reach every first-time player before gameplay begins, through a mandatory screen (Section 18, row 15), never through an opt-in "About" panel that a player only finds if they go looking for it.

1. Vision Statement

Road Remains is a single-player, top-down isometric game set in the fictional Sri Lankan town of Alupotha — not Colombo, not a village, but the kind of semi-urban junction town most Sri Lankans either come from or pass through. There is a kovil on one side of the main road and a temple on the other. One traffic light that is technically functional. A bus that comes when it comes. Coconut trees everywhere, including in places where coconut trees probably should not be.

The player navigates the town for six weeks before an election, making decisions about what to share, who to trust, when to verify, and what to ignore. Three numbers track the consequences — Civic Trust, Information Health, Voter Participation — and they move based on every choice made. The town reacts. Characters remember. Mahinda Bandara keeps promising to fix the road.

The game does not tell the player who to vote for, what the correct politics are, or what conclusions to draw. It puts the player inside a system — flawed, functional, frustrating, real — and asks them to participate in it anyway. The road is not fixed at the end. This is not a failure state. This is the point.

Session length: 30–40 minutes Structural replay paths English, Sinhala, Tamil Vanilla JS DOM Engine The road is still broken at the end. That's intentional.

1.1 What This Game Is Not

  • It does not resolve the road. The road is still not fixed at the end of the game. Every ending shares the same title: "The Road Remains." This is the premise, not the punchline. The game is called Road Remains for a reason, and players should feel the weight of that title when they reach it, not surprise.
  • It does not reward cynicism. Non-participation makes the imperfections worse, not better. The game asks the player to participate in the system with full awareness of its flaws. Aunty Soma has voted since 1983 with no illusions about what it will or won't fix. That's the model, not the exception.
  • It does not tell the player who to vote for. Mahinda Bandara is fictional. No real party is named. The Elections Commission is referenced as an institution, no real officials depicted. The game has no endorsed candidate and does not signal one through consequence design.
  • It does not claim the system is perfect. Nandadasa Mahaththaya's Road File exists precisely to show that correct process and good outcomes are not the same thing. The system can work exactly as designed and still fail the people it serves.
  • It does not lecture. The situation speaks. The player learns by experiencing consequences, not by being told what the consequences are, not by a character explaining the lesson, not by a UI element marking the correct choice. The game trusts the player to work it out.

Screen 15, Premise & Stakes Card MVP · Mandatory · First Launch Only

Every first-time player sees this screen before the game begins. It cannot be skipped on the first launch. It is not an "About" panel. It is not in a menu. It appears once, in sequence, and is then permanently gone. This is the solution to the playtesting problem documented in Section 0.6, confirmed directly: first-time players reported not understanding the goal of the game at all.

The mockup below is the canonical design reference for the implementation of Screen 15. Implement this exactly. Do not move the road-promise statement. Do not soften it. Do not move it to an info panel.

Road Remains — Before You Begin Screen 15 of 17

Six weeks before the election. Alupotha, Sri Lanka.

The road outside your house has been broken for years. The candidate says this time it will be fixed. People in your community are getting messages about the election — some of them aren't true.

Over the next six weeks, three numbers track what's happening: community trust, how accurately you understand the process, and how many people in Alupotha will actually vote. What you share, verify, or ignore affects all three. Deadlines are real. Some close and do not reopen.

Civic Trust

Does this community believe the election is worth participating in?

Information Health

How accurate is your understanding of how the process actually works?

Voter Participation

How many people in Alupotha are going to vote on election day?

One thing to know before you start

The road is still broken at the end, whatever you do. The game is not about fixing it. It is about what you do anyway.

Begin — Week 6

The "Begin — Week 6" button is the only interactive element on this screen. There is no "skip" option, no settings link, no back button. The screen is shown exactly once per device. The premiseCardShown flag is set in localStorage before the character select screen loads.

Documentation

World, Locations & Characters

2. The Town, Alupotha

Alupotha means Middle Town. It is a composite of everywhere in Sri Lanka, not Colombo, not a village, but the kind of semi-urban junction town that most Sri Lankans either come from or pass through. There is a kovil on one side of the main road and a temple on the other. One traffic light that is technically functional. A bus that comes when it comes. Coconut trees everywhere, including in places where coconut trees probably should not be.

The road through the centre of town has been broken since before anyone can agree on exactly when. There are three competing stories about why. Mahinda Bandara's campaign posters are everywhere. His calendar is on the wall of Mudalali's boutique, the police station, the Grama Sevaka Office, and four other locations. The road is in his manifesto. It has been in his manifesto since 2010.

The game world is a clickable illustrated town map on a 1920×1080 canvas. Twelve of the thirteen locations are accessible from the start; the thirteenth unlocks only if the player verifies three or more messages at the Elections Commission board. The week countdown and three gauges are always visible, the player is never without information about where they stand.

Alupotha Town Map Wireframe
Fig 1. Alupotha Map Layout (Draft)

3. The 13 Map Locations

The map has been expanded to 13 locations to improve atmospheric depth and world-building. Interactive hubs drive the narrative, while atmospheric nodes provide texture.

Interactive Hubs

Grama Sevaka Office

Grama Sevaka Office

Procedural core. Voter registration, NIC issues.

Uncle Sirisena's House

Uncle Sirisena's House

Main misinformation mechanic.

EC Notice Board

EC Notice Board

The verification authority. Updates automatically.

Mudalali's Boutique

Mudalali's Boutique

Informal information exchange and junction shop.

Police Station

Police Station

Election law enforcement and violation reporting.

Campaign Tent

Campaign Tent

Political promises and manifesto comparison.

Skeptics Cafe

Skeptics Cafe

Hidden location unlocked after 3 successful verifications.

Polling Station

Polling Station

Locked until Week 0. The climax of the game.

Atmospheric / Secondary Nodes

Kovil

Kovil

Peaceful spot. "Whatever you came here for, it is not here."

Temple

Temple

Peaceful spot. "Whatever you came here for, it is not here."

The Bar

The Bar

Quiet daytime spot. "No election talk. Owner's orders."

Community Hall

Community Hall

Empty space with notices for next week.

Boarding House

Boarding House

Kumaran's residence. Includes bilingual paperwork hurdles for his specific path.

4. The Three Playable Characters

The player selects one character at the start. Each character experiences the same town and the same election but enters from a different position, has a different relationship with the community, and has one mechanical advantage and one mechanical disadvantage that changes how the game feels without changing what it teaches. The educational content is identical across all three - what changes is the texture of reaching it.

Karunasena (Playable MVP)

19 years old  |  First-time voter from Kurunegala

Karunasena Sprite
Karunasena Default

Background: He has just moved to Alupotha to live with his uncle while attending a vocational training programme. He is not particularly political. He has opinions but is not sure yet where they come from. Uncle Sirisena is his actual uncle, which means the WhatsApp group is not optional - he is a member by default and receives every notification in the game whether he wants to or not.

Perk - Curiosity: At every location he gets one additional dialogue option the other characters do not - he can ask why something works the way it does and receive a deeper explanation. This makes him the character best suited to players who want to understand the system from the ground up.

Disadvantage - Exposure: Because Uncle Sirisena is family, ignoring his messages has a social cost. Civic Trust takes a penalty of -10 CT for every 3 messages Karunasena dismisses without engaging. He cannot simply opt out of the misinformation - he has to navigate it.

Starting Gauges: Civic Trust 60  |  Information Health 70  |  Voter Participation 50

Best suited to: Players who want to understand the system from the ground up. First playthrough recommended character.

Kamala (Locked - Coming Soon)

34 years old  |  School teacher - has voted before, but inattentively

Kamala Sprite
Kamala Default

Background: She has lived in Alupotha for eight years. She knows most people. She voted in the last two elections and filled in her ballot the way she always had, assuming she was doing it correctly. She was mostly right. Mostly.

Perk - Network: She has social capital in every location - queues are slightly shorter, characters share information more readily, and she occasionally gets warned about a problem before it becomes one.

Disadvantage - Assumption: The game periodically gives her information she believes she already knows but has subtly wrong - a detail about the preference vote system, a rule about polling station conduct, a deadline she thought was later than it is. She must recognise and correct these assumptions to maintain her Information Health score. Correcting a false assumption gives a +15 IH bonus. The lesson is that experience without attention accumulates errors.

Starting Gauges: Civic Trust 75  |  Information Health 65  |  Voter Participation 65

Best suited to: Players who want the social texture of the game. Second playthrough recommended character.

Kumaran (Locked - Coming Soon)

28 years old  |  Migrant worker from the Northern Province - Tamil-speaking

Kumaran Sprite
Kumaran Default

Background: He moved to Alupotha two years ago for work. His voter registration is in his home district. He needs to transfer it. The process involves more steps than it should and some of those steps involve forms that exist only in Sinhala, being processed by an officer who is doing his best but whose Tamil is limited. Kumaran's story is harder. It is also more complete.

Perk - Persistence: He earns significantly more points for completing each step because each step costs him more. He also unlocks a separate thread of content - conversations and situations that only arise when the player is navigating the system in a second language. The bilingual ballot. The Tamil notice on the Elections Commission board that contradicts the Sinhala notice because it was printed at a different time. The polling officer who mispronounced his name on the register.

Disadvantage - Distance: He does not have the social network Kamala has or the family anchor Karunasena has. He has fewer informal information sources, which makes accurate information harder to find and misinformation slightly harder to counter without the Elections Commission board.

Starting Gauges: Civic Trust 50  |  Information Health 75  |  Voter Participation 40

Language note: Kumaran's presence in the game is the reason the trilingual support is not cosmetic. For Kumaran, the language of the ballot and the language of the instructions at the polling station are the literal difference between a valid vote and a spoiled one.

Best suited to: Players who want to experience the full scope of the game's electoral justice content. Third playthrough recommended character.

Character Visual Specifications & Emotional States

Art Style Direction: Illustrated, flat vector style with clean lines. Colors must adhere to the Visual Style Bible (garnet red, slate, off-white). Proportions should be semi-realistic to ground the serious subject matter.

CharacterVisual Age & BuildClothing StyleSkin ToneRequired Sprites (States)
Karunasena19, slim/youthful build, average heightCasual but neat (e.g., untucked short-sleeve button-up or polo)Medium brownNeutral, Talking, Happy, Worried, Surprised
Kamala34, confident posture, slightly taller than KarunasenaProfessional/Teacher attire (e.g., modest saree or formal dress)Warm brownNeutral, Talking, Happy, Worried, Surprised
Kumaran28, athletic/labor-accustomed buildPractical workwear (e.g., simple collared shirt, slightly worn)Dark brownNeutral, Talking, Happy, Worried, Surprised

NPC Portrait Specifications (8 Characters)

  • Nandadasa Mahaththaya: 50s, stern, spectacles, government issued short-sleeve shirt. States: Neutral (stamping), Talking, Annoyed.
  • Uncle Sirisena: 60s, expressive, slightly unbuttoned shirt, welcoming. States: Neutral, Talking, Enthusiastic.
  • Sergeant Wickramasinghe: 40s, sharp uniform, relaxed posture. States: Neutral, Talking, Amused.
  • Mudalali Perera: 50s, apron, leaning forward. States: Neutral, Talking, Loud.
  • Mahinda Bandara: 40s/50s, overly groomed, politician's smile, maroon sash/accent. States: Neutral, Talking, Evasive.
  • Aunty Soma: 50s, kind eyes, traditional modest dress. States: Neutral, Talking, Warm/Reflective.
  • Elderly Woman (Queue): 70s, frail but determined, glasses. States: Neutral, Confused, Relieved.
  • Sandya (Reference): Profile picture style, anxious but hopeful. States: Neutral.

5. The Supporting Cast

Nandadasa Mahaththaya

Nandadasa Portrait

The grama sevaka. Has been at this posting since 1994. Processes approximately 40 files per day at a consistent pace that has never been observed to vary based on external conditions including urgency, rainfall, or the proximity of election day. He is not obstructing anyone. He is being thorough, which in this context is indistinguishable from obstruction. He secretly thinks the democratic system is one of the better things human beings have managed to build and would be embarrassed if anyone found out.

Uncle Sirisena

Uncle Sirisena Portrait

Retired. Connected to everything. Correct about nothing election-related. Runs the WhatsApp group Alupotha Patriots with 847 members. Has a television that is always on. Has a framed photo of every president since 1978, including some he later removed from the wall and then quietly put back. Feeds everyone who enters his house regardless of the political situation. His motivations are entirely good. His information hygiene is catastrophic.

Sergeant Wickramasinghe

Sergeant Wickramasinghe Portrait

Eleven years at this posting. Has seen voter fraud attempts, illegal poster campaigns, election violence, and one incident involving a candidate's supporter and a loudhailer that he is not at liberty to discuss. He finds most situations mildly amusing. He gives accurate information efficiently. He is the most competent person in Alupotha and has made peace with the fact that this does not make him the most influential.

Mudalali Perera

Mudalali Perera Portrait

Junction shop owner. Has voted for the same party since 1977 and regards this as a form of integrity. Generous with short eats and political commentary in roughly equal measure. Not malicious. Just very certain and very loud. His father ran this boutique before him. The 1977 receipt is behind the counter. He has never mentioned it to anyone.

Mahinda Bandara

Mahinda Bandara Portrait

Provincial Council candidate. Has been in politics long enough to have several hairstyles documented in public records. Gives out calendars every election cycle with a new photo but the same smile. Has a manifesto. The manifesto has a section about the road. The section about the road has been in every manifesto since 2010, with minor edits. The road section of the 2010 manifesto and the current one are being compared somewhere in this game, if the player looks hard enough.

Aunty Soma

Aunty Soma Portrait

Karunasena's mother. Appears in his storyline directly; referenced by name in the other two characters' storylines. Has voted in every election since she turned eligible in 1983. Does not regard this as exceptional. Regards not voting the same way she regards not eating - technically survivable but why would you. She appears at the beginning of the game and at the end. Her scene at the end, outside the polling station, is the emotional anchor of the whole thing.

The Queue People

The Queue People Scene

At the polling station, three people are around the player in the queue. An elderly woman who needs help locating her name on the voter register. A young man who left his NIC at home and is conducting a crisis in real time. A couple who have discovered they are in the wrong queue and are handling this differently from each other. Helping any of them is optional. The game does not tell you to. It just presents the situation and lets you choose. These three characters represent the highest single-source Voter Participation gains available in the game.

Documentation

Game Systems, Mechanics & Consequences

6. The Three Gauges

All three gauges are always visible at the top of the screen. Gauges run from 0 to 100. They are shown as: a labelled bar, an icon, and a numerical value. Colour is never the sole indicator of information - gauge states are also shown with icons and numerical values (WCAG 1.4.1 compliance). All animations on gauge changes can be disabled for players with motion sensitivity.

  • Civic Trust (CT): Does this community believe the election is legitimate and worth participating in? This is a community score, not a personal one. It drops when misinformation spreads, when violations go unreported, when the player chooses cynicism over engagement. It rises when the player verifies information before sharing, reports illegal campaign activity, and helps others navigate the process.
  • Information Health (IH): How accurate is the player's personal understanding of the electoral process? This drops when the player accepts false information, skips verification, or follows Mahinda Bandara's instructions about voting procedure without checking official sources. It rises when the player reads the Elections Commission board, asks Nandadasa Mahaththaya direct questions, and resists the pressure to share things they have not confirmed.
  • Voter Participation (VP): How many eligible people in Alupotha are going to vote? This is affected most by what the player does in the community rather than for themselves. Helping the queue people at the polling station raises this permanently. Spreading the fake story about the 4am voting time drops it. One action the player takes in Week 5 determines whether the elderly woman's family comes with her on election day.

6.1 Gauge Delta Table

Every action in the game and its exact gauge impact. CT = Civic Trust. IH = Information Health. VP = Voter Participation. Values marked with * are permanent and cannot be recovered through any subsequent action.

ActionCTIHVP
Misinformation Decisions
Share Uncle Sirisena's fake 4am voting time message-20-15-20
Share Uncle Sirisena's fake candidate list-15-20-10
Share accurate information from a verified source+10+10+10
Verify message at Elections Commission board before acting+10+15+5
Ask Nandadasa Mahaththaya and follow his advice+5+20+5
Ignore ALL Uncle Sirisena messages - blanket distrust across entire playthrough-5-5-5
Karunasena only: every 3 Uncle Sirisena messages dismissed without engagement-10--
Registration and Civic Process
Complete voter registration before Week 4 deadline+10+15+20
Miss voter registration deadline - permanent, cannot be recovered*-5-20*-30*
Check Elections Commission notice board (first visit per notice)+5+10+5
Report illegal campaign posters to Sergeant Wickramasinghe+15+5+10
Ignore voter intimidation scenario when presented-20-5-15
Report voter intimidation to Sergeant Wickramasinghe+20+5+20
Kumaran only: complete each step of district transfer (extra reward per step)-+20+30
Information Gathering and Research
Read Mahinda Bandara's current manifesto in full+5+15+5
Find and complete the 2010 vs current manifesto comparison+10+20+10
Find the Road File in the Grama Sevaka Office filing cabinet+5+25+5
Find the 1977 receipt behind Mudalali's counter+5+10-
Follow Mahinda Bandara's voting advice without checking an official source-5-15-
Kamala only: correctly identify and correct a false assumption she held-+15-
Accept pol roti from Uncle Sirisena+3--
Ask Mudalali Perera a critical follow-up question about a political claim-+5-
Polling Station - Week 0 Only
Help elderly woman find her name on the voter register - permanent*+10+5+25*
Help young man who forgot his NIC understand his options+5+5+10
Help lost couple find their correct queue+10+5+15
Leave polling station without helping any of the queue people-5--10
Cast a valid ballot correctly+10+10+20
Spoil ballot due to acting on misinformation about the fold-10-20-10
Bulletin Board Thread - Cumulative Across Weeks 3 to 0
Find Sandya's note in Week 3 and follow the thread each subsequent week+10 total+10 total+15 total

Glitch Prevention: Gauge increases for verifying EC notices are hard-capped to once per week/notice using the verifiedAtBoardCount flags to prevent players from artificially inflating their Information Health.

7. The Consequence System - Cross-Zone Reactivity

Every significant decision in one location leaves a trace in at least one other location. The town remembers what the player did. This is the most technically complex system in the game and the most educationally important.

The system works by reading the gameState.flags object when a new location is loaded. If a relevant flag is true, the location renders a modified version of itself. These modifications are additive - multiple flags can combine in the same location simultaneously.

7.1 Confirmed Consequence Chains

Trigger (Player Action)Affected LocationWorld Change
Player shares fake 4am voting messageGrama Sevaka Office23 confused people in queue who came at 4am. Wait is visibly longer. Nandadasa has heard about it and references it directly.
Player shares fake 4am voting messageMudalali Perera's BoutiqueMudalali references the confusion. New dialogue available: "Can you believe people came at 4am?"
Player shares fake 4am voting messageElections Commission BoardFormal correction notice posted on the board, referencing the circulating rumour. Board now shows the debunked version.
Player shares fake 4am voting messagePolice StationSergeant Wickramasinghe has received three calls about it. New dialogue option available about community misinformation spread.
Player reads Mahinda's current manifestoPolice StationSergeant will comment on it if player asks - shares specific thoughts on the infrastructure promises relative to the actual known budget allocation.
Player reads Mahinda's current manifestoCampaign TentMahinda notices the player read it. Slightly different opening dialogue - slightly more careful with his specific claims than before.
Player helps elderly woman at polling station queueEnding screen statisticsHer granddaughter registers to vote the following cycle - this fact is shown in the ending screen statistics panel.
Player finds Road File in Grama Sevaka OfficeCampaign TentThe 2010 manifesto comparison becomes available if the player subsequently finds the unmarked box in the corner of the tent.
Player reports illegal posters to Sergeant WickramasingheCampaign TentSergeant has spoken to Mahinda's supporters. Fewer posters visible. Mahinda is more guarded in his opening dialogue.
Sandya's note found and followed across Weeks 3 to 0Polling Station - voter registerSandya's name appears on the voter register. Visible if player checks the register before voting.
Player verifies 3 or more messages at Elections Commission board in one playthroughTown mapSkeptics Cafe becomes visible - a small unlabelled icon appears near the notice board on the map. Player must click it to discover it.
Player reports voter intimidation scenario to Sergeant WickramasinghePolling StationIncreased security presence visible. Presiding officer references the earlier report. Gauge: additional +10 VP on election day.

8. The Countdown Mechanic and Permanent Consequences

The election is in 6 weeks. The countdown is always visible. Some doors close as time passes and do not reopen. The game does not announce these closures in advance - they are discovered by absence. The player's first playthrough teaches them that deadlines are real. Their second playthrough shows them what to do about it.

  • Week 4 - Registration closes: If the player has not completed the registration chapter by the end of Week 4, voter registration is permanently unavailable. Information Health takes a permanent reduction of -20 that cannot be recovered. The game does not stop. The player can still vote if they were already registered - but the lesson is built into the experience, not delivered as a message.
  • Week 3 - Official candidate list posted: Players who visit the Elections Commission board at or after Week 3 can compare this list to Uncle Sirisena's circulating version, which has two candidates who do not exist and is missing one who does.
  • Week 2 - Manifesto comparison unlocks: Mahinda Bandara's manifesto comparison mechanic becomes available. The 2010 copy can be found in the campaign tent from this point.
  • Week 1 - Campaign period closes: Mahinda Bandara no longer gives interviews. His manifesto can still be read. His calendar is still on walls everywhere. But the conversation about his promises is no longer available.
  • Week 0 - Election day: The Polling Station unlocks. All other locations become read-only. This is the only day the player can vote. Consequences of all previous weeks are visible in this one location simultaneously.

8.1 Difficulty Modes

Standard mode is the MVP. Hard, Expert, and Speedrun modes are post-launch features. The game state architecture must support them without refactoring - they are not activated in v1.0.

Standard Mode - MVP

Misinformation: Moderate difficulty. False content is plausible but detectable with attention.

Deadlines: Missed deadlines reduce gauges but do not block the ending.

Gauges: Fully visible at all times.

Status: Built in v1.0.

Hard Mode - Post-launch

Misinformation: High difficulty. Lies are highly plausible and well-sourced-seeming.

Deadlines: Missed deadlines lock specific ending paths.

Gauges: Progress bars hidden. Numbers only.

Status: Documented, not built in v1.0.

Expert Mode - Post-launch

Misinformation: Extreme difficulty. Context-heavy, requires cross-referencing.

Consequences: Permanent credibility loss for a single mistake. Some locations become permanently inaccessible.

Gauges: Completely hidden.

Status: Documented, not built in v1.0.

Speedrun Mode - Post-launch

Timeline: 6 weeks compressed to 2. All decisions are faster.

Mechanic: Rapid decisions, instant cross-zone ripples. Leaderboard integration required.

Challenge: Reach the secret ending in under 10 minutes.

Status: Documented, not built in v1.0. Requires backend for leaderboard.

Documentation

Scenarios, Misinformation Flow & Endings

9. Linear Chapter / Scene Breakdown (Karunasena Template)

This path outlines the expected chronological flow for Karunasena from Week 6 to Week 0. This serves as the narrative map for DOM scene connections and dialogue sequencing.

WeekLocationNPC EncounteredDecision Point / ActionConsequence / Next Step
Week 6Uncle Sirisena's HouseUncle Sirisena, Aunty SomaReceives first fake message (Registration Deadline). Choose to share or verify.Triggers urgency. Player navigates to Town Map.
Week 6Grama Sevaka OfficeNandadasa MahaththayaAsk about registration deadline. Discover it is actually Week 4.IH increases. Registration process initiated.
Week 5Mudalali's BoutiqueMudalali PereraOverhear rumors about polling station assignments.Introduces the Week 5 misinformation voice note.
Week 4Police StationSgt. WickramasingheReport 4am voting rumor (or deal with fallout if shared).Registration closes. Notice board updates.
Week 3EC Notice BoardNone (Sandya's Note)Read official candidate list. Find Sandya's note.Bulletin Board thread begins. EC verification taught.
Week 2Campaign TentMahinda BandaraRead current manifesto. Uncover 2010 box.Manifesto comparison unlocks. Sergeant commentary unlocks.
Week 1Police / Grama OfficeSgt / NandadasaVerify the ballot fold procedure.Final preparation for election day. Campaign closes.
Week 0Polling StationQueue NPCs, POHelp the queue people. Cast the ballot correctly.Triggers Ending calculations.

10. The Misinformation Mechanic, Detailed Design

Uncle Sirisena sends content in four formats that mirror exactly how misinformation actually circulates. He is not a bot. He is not a bad person. He is a retired man with a lot of time, a phone, and 847 WhatsApp contacts who trusts him. The game does not reward blanket distrust any more than it rewards blanket trust, because one of Uncle Sirisena's messages is correct, and ignoring everything means missing it.

The educational design is in the asymmetry: the false content is faster and easier to act on. The verification requires navigating to another location. That friction is the point. Real misinformation spreads because checking takes effort and sharing takes a second.

10.1 Content Formats

  • Text forward: Looks like a news article. Has a headline, a body, and a source that sounds plausible.
  • Voice note: Cannot be easily fact-checked because there is no text to search. Player reads a written transcript summary, not the audio itself - because audio is inaccessible without transcripts (WCAG compliance).
  • Screenshot: An image of something allegedly said by a real institution. Player must evaluate whether the institution would say this and whether the formatting looks correct.
  • Video clip: Shown as a still frame with a caption. The caption may or may not accurately describe what is in the video.

10.2 Player Response Options

  • Share immediately: Fastest option. Requires no navigation. If the content is false, triggers the cross-zone consequence system immediately.
  • Ignore completely: Safe if content is false. Costly if content is accurate - some accurate information comes through Uncle Sirisena and ignoring everything he sends means missing it.
  • Check the Elections Commission board: Always available but takes time - the player must physically navigate to the town square and find the relevant notice. This simulates the real friction of verification.
  • Ask Nandadasa Mahaththaya: Slowest option. Only available during office hours (posted on the door and not generous). But he is always right. He has never forwarded anything in his life.

10.3 Uncle Sirisena's Complete Message Schedule

WeekFormatContentTrue or FalseVerification Source
Week 6Text forwardClaims registration deadline is Week 6. It is actually Week 4. Creates urgency and panic.FalseElections Commission board, Nandadasa Mahaththaya
Week 5Voice noteClaims that voters can vote at any polling station on election day. This is incorrect - voters must attend their assigned station only.FalseElections Commission board
Week 4ScreenshotA fake Elections Commission notice about voting time change to 4am. The EC logo is slightly wrong. The footer is missing.FalseElections Commission board (real opening hours posted there)
Week 3Text forwardStates that voters need to bring their NIC or passport to vote. This is correct information.True - sharing this is the correct actionN/A - this one should be shared. Not sharing it is a missed opportunity.
Week 2Video clipA fake candidate list - two names that do not exist, one real candidate's name missing. Circulated to cause confusion about who is actually on the ballot.FalseElections Commission board's official candidate list notice (posted at Week 3)
Week 1Voice noteClaims about where to fold the ballot. The procedure described is incorrect. Acting on this advice produces a spoiled ballot.FalseNandadasa Mahaththaya, Sergeant Wickramasinghe

10.4 Interactive Decision Trees - All Six Scenarios

Click any choice to reveal its consequence and gauge impact. Each scenario maps to one Uncle Sirisena message in the schedule above.

Scenario 1 - Week 6: Text Forward about Registration Deadline
Content: "URGENT: Voter registration closes THIS WEEK. If you are not registered by Friday you cannot vote. Share with everyone you know before it is too late."
Scenario 2 - Week 5: Voice Note about Polling Station Assignment
Content: A voice note (shown as transcript): "My cousin who works at the elections office told me - they changed it. You can go to any polling station now. No need to find your assigned one. Pass this on."
Scenario 3 - Week 4: Screenshot of Fake Elections Commission Notice
Content: A screenshot of what looks like an official Elections Commission notice. It states voting hours have changed and polling will begin at 4am instead of 7am due to security concerns. The EC logo is present but slightly wrong.
Scenario 4 - Week 3: Correct Information about NIC Requirement
Content: Text forward: "Reminder to everyone - you MUST bring your NIC or passport to vote. No other ID is accepted. Please remind your family members who might not know this."
Scenario 5 - Week 2: Video Clip with Fake Candidate List
Content: A video clip shared as a still frame with the caption "CONFIRMED: Full candidate list for our district - share before they take it down." The list has two names that do not appear on the official list and is missing one candidate who is actually running.
Scenario 6 - Week 1: Voice Note about Ballot Fold Procedure
Content: Voice note transcript: "I just found out - you have to fold the ballot in thirds, not in half. If you fold it in half your vote does not count. My brother-in-law works at the counting centre and he confirmed this."

10.5 Kumaran's Language Barrier Scenarios (Documented - Locked Path)

Kumaran's path explicitly involves trilingual inclusion mechanics that impact his ability to participate. Kumaran himself remains locked until a later phase (see Section 22.1), but these scenarios are fully designed now so they're ready to activate the moment his path unlocks.

Scenario A: The Sinhala-Only Form (Grama Sevaka Office)

Context: Kumaran attempts to transfer his voter registration. The required form is only available in Sinhala. Nandadasa is trying to help, but his Tamil is limited.

Scenario B: Polling Station Instructions (Week 0)

Context: At the polling station, the presiding officer mispronounces Kumaran's name and issues verbal instructions in rapid Sinhala. Kumaran needs to ensure he doesn't spoil his ballot.

11. Secret Content, Easter Eggs, and Hidden Threads

None of this content is required to complete the game. All of it adds something. It is intentionally designed to reward players who look carefully and play more than once. None of it is flagged, signposted, or marked as interactive in the UI. The player either finds it or they do not.

11.1 The Road File

The Road File visual asset

How to find it: In the Grama Sevaka Office, click on Nandadasa Mahaththaya's filing cabinet rather than on Nandadasa himself. No prompt is given. The interaction is available from Week 3 onwards.

What happens: A 90-second exchange. Nandadasa retrieves a thick folder - a paper trail of every road repair application submitted since 2007. Each application was processed correctly. Each was forwarded. Each was received and filed. The road is not fixed because the budget was reallocated at a level above his jurisdiction. He has known this since 2009. He pulls out a thinner folder - his personal correspondence attempting to escalate the issue. He has never mentioned this to anyone because it is not his place.

What it does: Recontextualises Mahinda Bandara without exonerating him. Also recontextualises Nandadasa entirely. Gauge: +25 IH, +5 CT. Unlocks achievement "Thirty Years in the Same Room".

11.2 The 1977 Receipt

1977 Receipt Asset

How to find it: In Mudalali Perera's boutique, click specifically on the wall behind the counter. Not on Mudalali himself. No prompt given.

What happens: A framed receipt from 1977 - a food order from a political rally. Mudalali's father ran this boutique before him and catered the rally for the party that won that election. The party Mudalali has voted for every election since. He did not choose it for ideological reasons. The game says nothing about what this means. The player decides.

What it does: Gauge: +10 IH, +5 CT. Unlocks achievement "Pol Roti and Politics".

11.3 The Manifesto Comparison

Manifesto Comparison Asset

How to find it: The player must have already read the current manifesto AND click on a specific unmarked box in the corner of the campaign tent. Two conditions required. No prompt given for the box.

What happens: The game generates a side-by-side comparison of the 2010 and current manifesto. The road section is highlighted. The wording is 94% identical. The only substantive change is that 2010 says "within the next term" and the current version says "as a priority." The game says nothing about this comparison. It just shows it.

What it does: Gauge: +20 IH, +10 CT. Unlocks achievement "Actually Read the Fine Print".

11.4 The Sergeant's Transfer

Police Station File Asset

How to find it: The player must first hear about the 2016 road repair attempt from Mudalali Perera. Then visit the Police Station and specifically ask Sergeant Wickramasinghe about 2016. Two conditions required. No hint given.

What happens: He pauses longer than usual. He says he arrived at this posting in 2017. He does not know the specific history of every infrastructure project. If the player waits rather than clicking through dialogue, he adds one more line: that he requested this posting specifically and he is not going to explain why. This thread does not resolve. It is simply there for players who are paying attention.

What it does: No gauge impact. Unlocks achievement "Somebody Had to Ask".

11.5 The Bulletin Board Thread

Bulletin Board Note Asset

How to find it: Visit the Elections Commission board in Week 3. A small handwritten note is pinned in the corner, not from the Elections Commission. It says: "My name is not on the list. Has anyone else had this problem. Please contact Sandya." The phone number given is fictional.

What happens: If the player returns to the notice board each week from Week 3 to Week 0, the note changes. Someone has replied by hand underneath. Then someone else. By election day, there is a small cluster of handwritten notes from people helping each other navigate the registration problem. Sandya's name appears on the voter register inside the polling station on Week 0. She made it.

What it does: Gauge across all weeks: +10 IH, +10 CT, +15 VP total. Unlocks achievement "Sandya Made It".

11.6 Skeptics Cafe

Skeptics Cafe Icon/Location Asset

How to find it: Verify three or more messages using the Elections Commission board in a single playthrough. A small unlabelled icon appears near the notice board on the town map. No announcement. No notification. Player must click it.

What happens: A secondary information network - community members who evaluate content before sharing. They provide additional misinformation commentary and context on any content currently circulating. Nandadasa is not a member. He was invited once. He did not reply to the invitation, which itself took six weeks.

What it does: Provides an additional response option (Share with Skeptics Cafe) for all subsequent Uncle Sirisena messages. Unlocks achievement "You Found the Cafe".

12. Endings

The ending is determined by the player's gauge scores and flag states at Week 0, after voting. Endings are evaluated in order from secret to bad, the game checks for the secret ending first, then good, then neutral, then bad.

Design Note — Why All Four Endings Have the Same Name

Every ending in this game is called "The Road Remains." Good, Bad, Neutral, and Secret. The road does not get fixed in any of them. This is not a mistake. It is the entire argument of the game made structural: the outcome of the election does not depend on whether the candidate fixes the road — it depends on whether the community participated with accurate information. The title of the ending is the same. What changes is the community that reaches it.

12.1 Bad Ending

The Road Remains

Trigger: Any single gauge below 30 at Week 0, OR registration was missed, OR ballot was spoiled due to misinformation.

The town is quieter. The turnout is low. Characters comment on what happened without editorialising. The election happens. The result is announced. Mahinda Bandara may win or lose depending on Voter Participation score - but the ending focuses on the community, not the candidate. The ending screen shows statistics: what percentage of Alupotha voted, where Civic Trust ended, how many people the player helped versus how many were confused by what the player shared.

12.2 Neutral Ending

The Road Remains

Trigger: All gauges between 30 and 60 at Week 0. Valid ballot cast. Registration completed.

The player voted and tried. Some things went wrong. Some went right. The game acknowledges both without sentimentality. The community participated but not at full strength. The ending screen reflects a mixed picture - some people helped, some misinformation still spread, some opportunities missed.

12.3 Good Ending

The Road Remains

Trigger: All gauges above 60 at Week 0. Registration completed. Valid ballot cast.

Karunasena walks out of the polling station. Aunty Soma is waiting outside. The moment passes without dialogue - just the two of them and the quiet of a street that has been through an election. The closing card shows community statistics. Strong turnout. High Civic Trust. A note that the elderly woman's granddaughter registered to vote for the next cycle if the player helped her find her name.

12.4 Secret Ending

The Unbroken Chain

Trigger: All three gauges above 75 at Week 0. Manifesto comparison completed. Road File found. All three queue people helped. Valid ballot cast.

The standard good ending plays in full. After the closing card, there is one more scene. Aunty Soma takes a worn voter registration card from her purse, her original card from 1983. She shows it to Karunasena. She says, in whichever language the player has selected, that she has carried this since the first time she voted. That it is not the card that matters. That the road will probably not be fixed. That Mahinda Bandara will probably win again. That she comes every time anyway because the alternative is to let other people make all the decisions, and she has never found a convincing argument for that.

She puts the card away. The game ends. There are no further statistics or scores. Just the closing.

Implementation Note: The secret ending is always Aunty Soma and Karunasena, regardless of which character the player chose. Kamala and Kumaran reference this scene in their own epilogue text as something they heard about later.
Architecture

Technical Architecture & UI Standards

13. Game State Specification (Vanilla JS)

The game is built entirely using HTML5, CSS3, and JavaScript. The Godot engine approach was deprecated to ensure immediate web compatibility and lightweight DOM manipulation. The game operates in a fixed 1920x1080 canvas scaled dynamically via script.js.

All progression is tracked locally and stored via localStorage (using keys: plv_save, plv_achievements, plv_completed_chars, plv_textsize).

window.gameState = {
  core: {
    character: 'karunasena' | 'kamala' | 'kumaran',
    language: 'en' | 'si' | 'ta',
    textSize: 'standard' | 'large' | 'extra-large',
    week: 6,
    sessionStart: timestamp,
    sessionId: uuid,
    sessionCount: 1
  },
  gauges: {
    civicTrust: Number,
    informationHealth: Number,
    voterParticipation: Number
  },
  flags: {
    visitedLocs: [],
    completedLocs: [],
    achievements: [],
    endingReached: null,
    secretEndingReached: false,
    registrationComplete: false,
    sharedFake4amMessage: false,
    verifiedAtBoardCount: 0,
    skepticsCafeUnlocked: false
  },
  dialogue: { active: false, currentLine: 0, lines: [] }
}

14. Visual Style Bible

  • Color Palette: Garnet Red (#8B1A2B), Slate (#3D4A5C), Gold (#D4AF37) for Civic Trust, Green (#6B9080) for Info Health.
  • UI Treatment & Philosophy: The UI strictly follows a grounded "2006 card" aesthetic. Avoid modern floating glassmorphism entirely. Panels should feel solid, tactile, and editorial with hard beveled edges (.game-btn).
  • Typography: Cormorant Garamond for display, Source Serif 4 for body, DM Sans for UI, and JetBrains Mono for mono.

15. DOM Engine Structure & Technology Stack

The game relies on a bespoke Visual Novel DOM engine located in script.js.

System ComponentPurpose
_renderLine()Parses external JSON scenes to render standard dialogue, narration, and dynamic media cards.
Media CardsRenders simulated WhatsApp bubbles, Voice Notes (with transcript), Screenshots (with forensic cues), and EC Notices.
checkMapUnlocks()Evaluates window.gameState.flags to pulse map nodes (radar ripple) indicating current objectives.
showWeekBanner()Interrupts gameplay with a modal to safely transition weeks only after mandatory tasks are completed.
_evalCondition()Safely parses JSON string conditions against the current state to dynamically alter dialogue branches.
checkAchievements()Owns all 28 achievement trigger conditions. Called after every flag mutation and gauge update. Does not live in config.js - that file holds only the static achievement data, not the evaluation logic.
applyConsequenceFlags()Owns all 12 cross-zone consequence chains from Section 7. Reads window.gameState.flags on location load and renders the modified location variant. Single source of truth for consequence logic so it is never duplicated inside individual scene JSON files.

15.1 Component B - Technical Architecture

Component A above is specified down to function names and state shape. Component B is currently specified only as feature bullets - "real-time session management," "WebSocket communication," "CSV export" - with no architecture behind them. This is the largest unresolved gap in this document and must be closed before Week 4-5 of the production timeline (Section 18.3), since Component B needs infrastructure Component A deliberately avoids: a server.

Decision required before build: Component A's "strictly vanilla, no backend" constraint cannot extend to Component B. A facilitator dashboard pushing live scenario state to multiple participant devices needs either a WebSocket server or a polling fallback; static hosting alone cannot do this. This must be resolved as an explicit, named hosting decision, not discovered mid-build.

Open QuestionWhy It Matters
Where does the WebSocket server run?Determines hosting cost, whether Component B can ship on the same static host as Component A, and who maintains the server after handover to LIRNEasia.
What identifies a session - a join code, a QR code, both?Affects the Facilitator Dashboard and Participant Mobile View screens (Section 18, rows 16-17) directly and cannot be wireframed without this answer.
What is the participant data model - is any participant identity stored, even anonymised?Determines what the component_b_response analytics event (Section 16) can capture, and what the CSV export contains.
What happens to an in-progress session if the facilitator's connection drops?Undefined failure mode. Needs a stated behaviour - session persists server-side vs. session ends - before the Section 18.4 "minimum 10 simultaneous participants" test can be considered complete.
Does Component B share gameState shape with Component A, or use a separate schema?If separate, the two components drift independently over time. If shared, Component A schema changes (Section 13) become breaking changes for Component B with no versioning plan in place.

16. Analytics Event Taxonomy

Every event below is fired to the analytics backend at the moment it occurs. The analytics dashboard shows aggregate data - never individual player data. All data is anonymised by session ID. The funder receives dashboard access. No raw event logs are exposed publicly.

Event NameFired WhenData Payload
session_startGame loads and character is selectedcharacter, language, timestamp, sessionId, sessionCount
session_endAny ending is reachedcharacter, language, duration, endingReached, finalGauges{ct, ih, vp}, sessionId
language_switchedPlayer uses the language switcher mid-sessionfrom, to, week, sessionId, character
location_visitedPlayer navigates to any locationlocationId, week, character, sessionId, visitCount
gauge_updateAny gauge value changesgauge, oldValue, newValue, delta, trigger, week, locationId, character, sessionId
misinformation_choicePlayer responds to any Uncle Sirisena messagemessageId, week, choice (share|ignore|verify|ask), isCorrectChoice, character, sessionId
secret_foundPlayer discovers any secret contentsecretId, week, character, sessionId
deadline_outcomeWeek 4 passes (registration window closes)registrationComplete, character, sessionId
queue_personPlayer interacts with any queue person at polling stationpersonId (elderly|youngman|couple), helped (true|false), character, sessionId
vote_castPlayer casts their ballot at Week 0outcome (valid|spoiled), character, finalIH, sessionId
achievement_unlockedAny achievement is unlockedachievementId, week, character, sessionId, timestamp
component_b_sessionFacilitator starts a Component B sessionsessionCode, participantCount, scenarioPlaylist, language, timestamp
component_b_responseParticipant responds to a scenario in Component BsessionCode, scenarioId, choice, anonymous_participantId, responseTime

17. Accessibility - WCAG Compliance Requirements

Accessibility is not a post-launch feature. Every requirement listed below is a production prerequisite that is tested and confirmed before release. The game failing any of these tests is a build failure, not a nice-to-have fix.

RequirementWCAG StandardImplementation
Minimum tap target sizeWCAG 2.5.5Every tappable element minimum 44×44 pixels. Applies to all interactive elements including map locations, dialogue choices, NPC click targets, and navigation buttons.
Text size optionsWCAG 1.4.4Three display text sizes - standard (1x), large (1.18x), extra-large (1.4x) - applied via a single --text-scale CSS custom property consumed by every reading-path font-size rule (dialogue text, choice options, speaker names, media and document cards). Persisted via localStorage key plv_textsize, restored on load before first paint. This setting is independent of the 1920x1080 canvas scale transform (Section 13) and must never be implemented as a multiplier on that transform, since canvas scale is constrained by viewport fit and would clip content on narrow screens.
Colour independenceWCAG 1.4.1Gauge states shown with icon, numerical value, AND colour. Colour is never the sole indicator of information. Positive/negative gauge changes also shown with +/- symbols, not just green/red.
Motion sensitivityWCAG 2.3.3All animations can be disabled in settings. Also automatically respected via prefers-reduced-motion media query. Setting persists across sessions.
Screen reader navigationWCAG 4.1.2All menu systems navigable via screen reader. All interactive elements have ARIA labels. All sections have aria-labelledby headings. Skip-to-main-content link at top of page.
Sinhala and Tamil font renderingBest practice - essential for trilingual contentNoto Sans Sinhala and Noto Sans Tamil loaded for all Sinhala and Tamil text. :lang(si) and :lang(ta) CSS rules apply correct font, line-height, and letter-spacing.
Contrast ratio - body textWCAG 1.4.3All body text meets minimum 4.5:1 contrast ratio. Garnet red (#8B1A2B) on off-white (#F5F0EA) verified. Slate (#3D4A5C) on off-white verified.
Contrast ratio - large text and UI elementsWCAG 1.4.3All large text and UI components meet minimum 3:1 contrast ratio.
Audio descriptionsWCAG 1.2.3Available for all significant visual elements via settings toggle. Voice note content always displayed as written transcript - audio is never the only format.
Keyboard navigationWCAG 2.1.1Full game navigable by keyboard. Tab order is logical. Focus states are visible. No keyboard traps. All interactive elements reachable without a mouse or touchscreen.
Focus visibilityWCAG 2.4.7All focusable elements have a visible focus indicator with sufficient contrast. Custom focus ring applied consistently across all interactive elements.
Architecture

Systems Network Map

Interactive visualisation of all characters, locations, and systems. Click any node to view its connections and GDD details.

Architecture

Production Plan & AI Tool Assignments

18. Screen Inventory

All 17 required screens must be wireframed in Figma before DOM/CSS implementation begins.

#Screen NameSectionPriority
1Splash / Loading ScreenComponent AMVP
2Language Selection (EN/SI/TA)Component AMVP
3Main MenuComponent AMVP
4Character SelectionComponent AMVP
5Town Map NavigationComponent AMVP
6Location Scene Template (Applies to all 7)Component AMVP
7Dialogue Box UIComponent AMVP
8WhatsApp Message CardComponent AMVP
9Gauge HUDComponent AMVP
10Week Counter DisplayComponent AMVP
11EC Notice Board ViewComponent AMVP
12Ending / Results ScreenComponent AMVP
13Achievements ScreenComponent AMVP
14Settings / Accessibility PanelComponent AMVP
15Premise & Stakes Card (mandatory, first launch only - see Section 0.6)Component AMVP
16Facilitator DashboardComponent BMVP
17Participant Mobile ViewComponent BMVP

18.1 Asset Production Checklist

Master list of all required assets. Must be completed before generating art in Firefly or DALL-E.

Asset NameTypeAI ToolWeb FormatStatus
7 Location BackgroundsBackgroundAdobe Firefly1920x1080 webpPending
1 Town Map IllustrationBackgroundAdobe Firefly1920x1080 webpPending
3 Playable Character Sprites (x5 states)CharacterAdobe FireflyTransparent webpPending
8 NPC Portraits (x3 states)NPCDALL-E 3Transparent webpPending
6 WhatsApp UI CardsUICanva / DALL-EwebpPending
UI Kit (Buttons, Gauges, Dialogue Box)UICanva AICSS / SVGPending
Mahinda Bandara Posters & CalendarsUI / PropDALL-E 3webpPending
EC Notice Board ElementsUI / PropCanva AIwebpPending
7 Ambient Location Audio TracksAudioSunoOGGPending
UI Sounds & WhatsApp NotificationsAudioFreesoundWAVPending

18.2 Visual Style Bible (UI Focus)

Core visual parameters to be defined as Figma components in Week 1.

  • Color Palette: Garnet Red (#8B1A2B) for primary accents/critical actions, Slate (#3D4A5C) for typography/secondary, Off-White (#F5F0EA) for backgrounds.
  • UI Treatment: The UI strictly follows a grounded "2006 card" aesthetic. Avoid modern floating glassmorphism entirely. Panels should feel solid, tactile, and editorial with hard beveled edges.
  • Typography: Cormorant Garamond, Source Serif 4, DM Sans, and JetBrains Mono. Note: Sinhala and Tamil characters render larger than Latin at the same font size. All UI elements (buttons, dialogue boxes) must use flexible auto-layout in Figma to accommodate language switching without text clipping.

18.3 6-Week Production Timeline & Milestones

WeekPhaseDeliverablesDependencies
Week 1FoundationVisual Style Bible, Screen Inventory, Asset Checklist, Linear Scene Breakdown, Karunasena Dialogue Drafts.GDD finalized. Character Brief completed.
Week 2DesignFigma wireframes (all 17 screens). Kamala/Kumaran dialogues. Component B flows. Figma-to-DOM handoff protocol.Week 1 specifications approved.
Week 3Art & AudioGenerate all 7 backgrounds, character sprites, NPC portraits, UI assets, and audio. Submit dialogue for Sinhala/Tamil review.Figma wireframes locked. Visual style locked.
Week 4DOM Build (Core)DOM scene structure setup. Town Map, Gauge HUD, Week Counter, dialogue engine implementation, State save/load system.All Week 3 art and audio exported in correct formats.
Week 5DOM Build (Content) & ReviewAll 7 location scenes built. Cross-zone consequence chains implemented. Formal Milestone: Legal/Accuracy Review of Electoral Law content. Component B coded.Dialogue system fully functional. Translation review completed.
Week 6Testing & PolishManual playtest of 12 consequence chains and 28 achievements. WCAG accessibility checks. Delivery prep.Feature freeze. No new mechanics allowed.

18.4 Critical Production Warnings

Design Systems

Achievements & Subtle Clue System

28 total achievements. 4 hidden. The system exists to give an education game a reason to be replayed.

19. Achievement System - Design Philosophy

Half the achievements are funny. Half are genuinely meaningful. None of them tell the player what to do next. The funny ones should make a first-time player laugh when they read the name before they understand it. The meaningful ones should feel like quiet acknowledgments of something the player actually did, without applause.

This system exists for one practical reason: an education game that takes itself too seriously is one nobody finishes. The achievements give players a reason to replay and reward the curiosity that drives deeper learning.

Storage and Display

  • Achievements are stored in the same gameState localStorage object as everything else. No external platform required for MVP.
  • The Achievements screen is accessible from the main menu only. It is not accessible mid-game.
  • The screen shows all 28 achievements including locked ones. Locked achievements show their name but the description is replaced with a placeholder dash. The player has to earn it to read what it says.
  • Four achievements are fully hidden when locked - they appear as a blank tile with a question mark. The player does not know these exist until they unlock them.
  • The screen shows a simple counter: X / 28 Unlocked. No percentage. No rarity. No global statistics. Just the number.

Notification Types

  • Silent: Achievement appears in the Achievements screen with no in-game notification. Player discovers it when they next visit the screen. The majority of achievements are silent.
  • Immediate pop-up: A small card appears at the bottom right of the screen for 3 seconds before fading. Used only for 5 specific achievements that benefit from immediate acknowledgment. No sound. Subtle animation only.

Hidden Achievements (4 total)

These four achievements show as question marks until unlocked. Their names and descriptions are only visible after being earned:

  • The Unbroken Chain - secret ending
  • Thirty Years in the Same Room - Road File
  • Somebody Had to Ask - Sergeant's Transfer thread
  • You Found the Cafe - Skeptics Cafe

20. All 28 Achievements - Complete List

NameDescription (visible after unlock)Trigger ConditionNotification Type
You started. Brave.
Big MistakeStarted the game.sessionCount equals 1. Fires before character select screen on first ever launch. The first thing that happens.Immediate pop-up - this one fires before the game even begins. The player will laugh or be confused. Both are correct.
Democracy, They SaidSelected a character and began your first playthrough.Character selection confirmed. Week 6 begins. sessionCount equals 1.Silent
You are learning. Slowly.
Read the Fine PrintRead Mahinda Bandara's manifesto. The whole thing.readCurrentManifesto flag set to true.Silent
Actually Read the Fine PrintFound and compared the 2010 manifesto to the current one. Side by side. The road section.manifestoComparisonDone flag set to true.Silent
The Algorithm Would Hate YouVerified a message at the Elections Commission board instead of sharing it immediately.First time player selects Verify option at the Elections Commission board.Silent
Professional SkepticVerified three or more messages in a single playthrough. Unlocked something.verifiedAtBoardCount reaches 3. Skeptics Cafe unlocks simultaneously.Silent - the unlocked Cafe is the bigger discovery moment
Nandadasa ApprovedAsked Nandadasa Mahaththaya before acting on information. He was right. He is always right.First time player selects Ask Nandadasa and follows his advice.Silent
You found things. (4 are hidden until found)
Thirty Years in the Same Room [HIDDEN until unlocked]Found the Road File. You know why the road is not fixed. It is not the reason you expected.foundRoadFile flag set to true.Silent
Pol Roti and PoliticsFound the 1977 receipt behind Mudalali's counter. Political loyalty has stranger origins than you think.found1977Receipt flag set to true.Silent
Sandya Made ItFollowed Sandya's handwritten note from Week 3 to Week 0. Her name is on the register.sandyaOnRegister flag set to true at Week 0.Silent
Somebody Had to Ask [HIDDEN until unlocked]Found the thread about Sergeant Wickramasinghe's 2016 transfer request. He still will not explain why.foundSergeantTransferThread flag set to true.Silent
You Found the Cafe [HIDDEN until unlocked]Found the Skeptics Cafe. It does not have a sign. Nandadasa was invited once. He did not reply.skepticsCafeUnlocked flag set to true.Silent
You helped people.
Not Your JobHelped the elderly woman find her name on the voter register. It was not your job. You did it anyway.helpedElderlyWoman flag set to true.Silent
At Least Someone AskedHelped all three people in the polling station queue in a single playthrough. They noticed.helpedElderlyWoman AND helpedNICYoungMan AND helpedLostCouple all true in same session.Immediate pop-up - this one earns the notification
It Spreads Both WaysShared accurate, verified information through Uncle Sirisena's WhatsApp chain. It works in both directions.First time player correctly identifies the Week 3 true message and shares it.Silent
You made things worse.
847 MembersShared a false message through Uncle Sirisena's WhatsApp group. 847 people received it. This is why the queue at the Grama Sevaka Office looks like that.First time sharedFake4amMessage OR sharedFakeCandidateList is set to true.Silent - player finds this in the screen while dealing with the consequence in the game world. The timing lands better that way.
You Were So ConfidentActed on Mahinda Bandara's voting instructions without checking an official source. The fold was wrong.Player follows Mahinda's voting advice without verification and casts a spoiled ballot.Silent
The 4am PeopleShared the fake voting time message. Twenty-three people came at 4am. Nandadasa has heard about it.sharedFake4amMessage flag set to true. Separate from "847 Members" - this one is specific to the 4am scenario because the world consequence is the most visible.Silent
Blanket PolicyIgnored every single message Uncle Sirisena sent. Including the one that was true.All 6 Uncle Sirisena messages ignored in a single playthrough without any engagement.Silent
You missed things. On purpose or not.
The Door Was Right ThereMissed the voter registration deadline. The door to the Grama Sevaka Office was open every week.registrationDeadlineMissed flag set to true when Week 4 passes.Silent
The Road RemainsReached any ending. The road is still not fixed.ANY ending reached - bad, neutral, good, or secret. Every playthrough. Every character. Every time without exception.Silent - this achievement is always there. That is the point.
You played well.
Information Health: 100Reached Week 0 with perfect Information Health. You verified everything. You trusted no one blindly. You trusted no one not at all.informationHealth at exactly 100 at the start of Week 0.Silent
The Unbroken Chain [HIDDEN until unlocked]Found the secret ending. Aunty Soma's 1983 card. The road is still not fixed. She comes anyway.Secret ending reached - all gauges above 75, manifesto comparison done, Road File found, all three queue people helped.Immediate pop-up - this one earns it
You Finished an Education GameReached any ending. Voluntarily. Most people do not.First time any ending is reached in the very first playthrough. sessionCount equals 1 and endingReached is not null.Immediate pop-up
Character-specific
Uncle's NephewAs Karunasena, dismissed more than 5 of Uncle Sirisena's messages. The family WhatsApp group still has 847 members. He knows.character equals karunasena AND karunasena_dismissedCount exceeds 5.Silent
She Was Mostly RightAs Kamala, identified and corrected all of her false assumptions in a single playthrough.character equals kamala AND kamala_assumptionsCorrected reaches maximum value for the playthrough.Silent
Every Step Cost MoreAs Kumaran, completed every step of the district transfer process. The bilingual form. The officer who mispronounced your name. All of it.character equals kumaran AND kumaran_transferStepsComplete reaches maximum value.Silent
Three PerspectivesCompleted at least one full playthrough with each of the three characters. You have seen Alupotha from every angle it has.All three characters have reached an ending across any number of sessions. Tracked in localStorage across playthroughs.Immediate pop-up

21. The Subtle Clue System

Clues only exist for 3 of the 6 secrets. The other three - the Sergeant's Transfer thread, the 1977 Receipt, and Sandya's Bulletin Board Thread - have no clues at all. Players either find them or they do not.

Clues are delivered as casual NPC dialogue only - not UI tooltips, not tutorial text, not highlight effects. Each clue is a single line delivered once per playthrough. It does not repeat on subsequent visits. The visual treatment is the same dialogue box as all other NPC speech, but in a slightly more muted style, like an afterthought. No special sound. No icon. No signal that this was a clue.

Clue 1 - For The Road File

Delivered by: Mudalali Perera, during any visit to his boutique after Week 4.

Trigger condition: Player has visited the Grama Sevaka Office at least once but has NOT yet found the Road File (foundRoadFile is false).

Dialogue: Said while arranging something behind the counter, not making eye contact with the player:

"You know Nandadasa has been in that office since 1994. Thirty years. You would think a man in the same room for thirty years would run out of things to look at. He never has."

He does not explain this. He moves on. That is the entire clue.

Clue 2 - For the Manifesto Comparison

Delivered by: Sergeant Wickramasinghe, during any visit to the police station after the player has read the current manifesto.

Trigger condition: readCurrentManifesto is true AND player has visited the police station AND foundOldManifesto is false.

Dialogue: Said as a parting comment while turning back to his desk, after finishing his main dialogue:

"That manifesto of his. You read it? I have a copy of the 2010 one somewhere in my files. I was going to compare them once. Never got around to it. Probably not worth the time."

He says this while walking away. The player cannot ask a follow-up question. That is the entire clue.

Clue 3 - For Skeptics Cafe

Delivered by: Nandadasa Mahaththaya, at the end of any conversation after the player has verified at least one message at the Elections Commission board but has not yet unlocked the Cafe.

Trigger condition: verifiedAtBoardCount is 1 or 2 (not 0, not 3 or more) AND skepticsCafeUnlocked is false.

Dialogue: Completely deadpan, while stamping a form, without looking up:

"You have been to the notice board more than most people. There are others who go there regularly. I do not know them personally. I was invited to their group once. I did not reply."

He does not look up. He does not explain. That is the entire clue.

Implementation Note for Developers

Each clue fires exactly once per playthrough and is tracked by a boolean flag in gameState:

flags: {
  clue_roadFile_delivered: false,
  clue_manifesto_delivered: false,
  clue_cafe_delivered: false
}

Once a clue flag is true, that NPC's parting line reverts to standard dialogue on all subsequent visits. The clue is never repeated within the same playthrough.

Design Systems

Scope Definition, MVP vs Post-Launch

What is built in v1.0. What is documented but deferred. What the codebase must support without activation.

22.1 MVP Scope, v1.0, Web Only

Every item listed here is built, tested, and delivered at launch. Nothing in this list is optional.

  • All 13 locations, Karunasena fully playable (Kamala/Kumaran locked), all 3 gauges with full delta system.
  • Full consequence system with all 12 documented cross-zone chains.
  • All 4 endings including the secret ending.
  • All 6 secret content pieces: Road File, 1977 Receipt, Manifesto Comparison, Sergeant's Transfer, Bulletin Board Thread, Skeptics Cafe.
  • Full misinformation mechanic with all 6 Uncle Sirisena messages and all 4 response options.
  • 3 subtle clue dialogues as specified in the Clue System.
  • All 28 achievements with correct trigger conditions and notification types.
  • Component B facilitator tool with real-time session management, WebSocket communication, and CSV export.
  • Trilingual support: English, Sinhala, Tamil - all UI, all dialogue, all system text.
  • Standard difficulty mode only.
  • Web browser delivery only - no Android application in v1.0.
  • Analytics dashboard with all 13 events from Section 16 tracked and accessible.
  • WCAG accessibility compliance as specified in Section 17.
  • Unencrypted source code delivered via GitHub repository.

22.2 Post-Launch - v1.x and v2.0

Every item listed here is architecturally supported by the v1.0 codebase but not activated. Documentation is complete. Implementation is deferred.

  • Android application packaging - Component A wrapped as APK. Compatible with Android 12 and above. Offline-capable core gameplay. Requires no code changes to game logic.
  • Hard mode - misinformation more plausible, missed deadlines lock ending paths, gauge progress bars hidden.
  • Expert mode - permanent credibility loss for single mistakes, some locations become inaccessible, gauges fully hidden.
  • Speedrun mode - 6 weeks compressed to 2, leaderboard integration required, backend changes needed for persistent high scores.
  • Additional misinformation scenarios - election violence reporting module, deepfake video content module.
  • Expanded Kumaran content - Northern Province electoral context, full bilingual form navigation module, additional Tamil-language dialogue threads.
  • Facilitator account system for Component B - persistent session history, multiple facilitator profiles, session comparison across workshops.
  • External achievement platform integration - Steam, if the game is eventually published commercially. Current in-game system is designed to be compatible with Steam achievement API calls with minimal changes.

22.3 Delivery Checklist

All items must be confirmed complete before handover to LIRNEasia.

DeliverableFormatNotes
Component A - Web applicationDeployed URL + GitHub repositoryTested on Chrome, Firefox, Safari, Edge, mobile browsers
Component B - Facilitator toolDeployed URL + same GitHub repositoryTested with minimum 10 simultaneous participants
Source codeGitHub repository - unencrypted, public or client-access privateREADME with setup instructions. No dependency on proprietary tools.
Content JSON filesThree files: content.en.json, content.si.json, content.ta.jsonAll trilingual content finalised and native-speaker reviewed
Analytics dashboardLive URL accessible to LIRNEasia staffAll 13 event types tracked and displaying aggregate data
GDD v2.0This document - HTML + Word exportFinal authority on all design decisions
Deployment documentationMarkdown file in repositoryHow to host, how to run a Component B session, how to add new scenarios
Project Status

Development Status & Patch Notes

Current Phase: Early Alpha · Web Only Build

23. Version History

VersionFocusKey Changes & Developer Notes
v2.0.3Architecture & AudioModularised JS engine into dedicated files (engine.js, state.js, ui.js, config.js). CSS split into component sheets (variables.css, base.css, dialogue.css, map.css). Map data externalised to map-data.json. Full audio layer integrated: BGM tracks for gameplay and credits, ambient audio for the Grama Sevaka Office, and SFX suite (click, hover, pause, slider tick, loading start).
v2.0.2Alpha Core LoopIntegrated custom Visual Novel UI, WhatsApp media cards, and the strict 6-week countdown state machine. Karunasena's path made fully playable. Achievements system built and persistent via localStorage. Map expanded to 13 locations.
v2.0.1UI StandardizationSystem-wide pass to eliminate modern glassmorphism. Enforced the strict "2006 card" design aesthetic for all panels, buttons, and dialogue boxes to properly ground the visual identity.
v2.0.0The Web PivotProject officially renamed from "Play. Learn. Vote." to "Road Remains." Godot engine dependency entirely scrapped in favor of a lightweight, accessible Vanilla JS and HTML5 DOM engine.
v1.5.3Critical Exploit FixFixed a major logic loop glitch where the player could infinitely farm/increase their score by repeatedly interacting with the same single notice on the Elections Commission notice board. Hard-capped verification gains to once per week/notice.
v1.2.0Systems & ScenariosFirst major pass at scene JSONs and dialogue logic trees. Implemented the base misinformation mechanics and the core gauges.
v1.0.0Pre-ProductionInitial "Play. Learn. Vote." concept pitched, focusing on information integrity. Core game design documents drafted with early UI asset generation.

24. Where We Are At

We are still in the early stages of development. The core infrastructure is established, but significant content pipelines remain open. Based on standard indie dev cycles, we are pivoting towards finalizing narrative branches before expanding platform support.

Current Limitations

  • Web Only: The game currently only runs in web browsers. Native Android/APK builds are deferred.
  • English Only (MVP): While the trilingual UI framework is active, Sinhala and Tamil dialogue content is still being translated. Those languages are currently locked.
  • Locked Characters: Kamala and Kumaran narrative paths exist in the GDD but are gated in the live build.

Development Roadmap

  • Phase 1: Complete Karunasena logic and bug-fix core DOM engine (Current).
  • Phase 2: Integrate Sinhala/Tamil localization for Karunasena's path.
  • Phase 3: Unlock Kamala's narrative and specific assumption mechanics.
  • Phase 4: Audio integration, final UI polish, and server-side Component B scaling.

25. Contributions & Co-Creation

An Independent, Purpose-Driven Project

This game is a completely independent, unfunded initiative. The project has been in active development since April 28th, 2026, with over 400+ hours invested into the engine, design, and narrative logic.

I am building this because you rarely see games tackling civic realism and systemic literacy in Sri Lanka. My ultimate goal is to help shape more informed citizens, inspire local game developers, and prove that interactive media can be a powerful educational tool. Currently, there is no financial backing or studio budget—if I had the funds, everyone would be paid for their craft. Until then, I am looking for passionate collaborators who share this vision to help cross the finish line.

Join the Project (Time & Skills)

We are looking for dedicated contributors to help bring this world to life. Here is exactly what the tasks look like at this stage:

  • Localization: Translating JSON dialogue files while maintaining character voices.
  • Playtesting: Purposefully breaking consequence chains and testing browser compatibility.
  • 2D Art: Illustrating top-down isometric assets based on the Visual Style Bible.

Want to co-create?

Become a Contributor

Back the Project (Funding)

If you don't have the time to contribute skills but believe in this mission, financial support is the most direct way to help. 100% of all funds will be used to transform this from a passion project into a fully resourced production.

Donations go directly toward:

  • Compensating Talent: Paying translators, actors, and artists for their craft.
  • Infrastructure: Server hosting and backend architecture.
  • Outreach: Educational workshops once the game launches.

Support Financially

Make a Donation

Project Credits

The team behind the Alupotha precinct.

Direction, Design & Development
Chatura Dissanayake
Writing & Narrative
Imalee Nillekumbura
Chameera Dissanayake
Chatura Dissanayake
TBC (Narrative Consultant)
Art & Visual Design
Praveen Dissanayake
Chatura Dissanayake
TBC (Environment Assets)
TBC (UI Illustration)
Audio & Music
Nathan Perera (Original Music)
TBC (Audio Mixing)
Civic & Cultural Consultants
Mr. Wimal Dissanayake
Mrs. Lakshmi Wilfred
Localisation
TBC (Tamil Translation)
TBC (Sinhala Translation)
Voice Cast
Chamath De Silva
TBC (Supporting Characters)
Quality Assurance
Sri Lanka Reddit Community
Praveen Dissanayake
TBC (Lead QA)