Day 1 was manageable. Ten scenes. Ten choices. I could play through it, take notes, check boxes, and feel reasonably confident I'd hit all the branches. Took a while, but I could do it.
Then I finished Day 2.
Forty minutes. That's how long it takes to test a single path through Day 2. And there are dozens of paths. Hundreds if you count all the flag combinations. I sat there realizing that if I wanted to test everything, I'd be playing my own game for weeks. Not writing. Not building. Just clicking through dialog I'd already written, over and over, trying to catch bugs.
It made me not want to work on the story anymore. The thing I loved had become tedious.
And then I thought about Act 1. Four days. If Day 2 was this bad, what would Day 4 look like? I've been putting 30+ hours a week into this game on top of my job. Because I love it. Because I think it tells a good story. But I can't spend all that time just testing.
So I built tools.
I need to talk about Life is Strange for a second.
That game made me feel like a real person in high school. Not a character. A person. The little details did it. The music Max listens to. The emails and posts people write. The mystery. Things that feel like what it was actually like when you were in school. You get connected because they feel real.
You go on this journey. You fall in love. Your friend maybe dies. And at the end, you have to make an impossible choice. At least, people think it's impossible. Bae over bay, every day.
I wanted to build something that made someone feel that way. Blue Light in Winter is my attempt. A visual novel about a hacker kid dealing with bullies, friendships, and choices that actually matter. The conversation you have at lunch affects what you can do at midnight. Stand up to Marcus when he's bullying Sadie? She trusts you more. Stay quiet? She's more guarded. Both work. Both feel completely different.
That's the promise. That's also the problem. Because if choices matter, I have to test them. All of them.
I had a JSON file that was 2,000 lines. The cafeteria scene. It gets really emotional. Sadie opens up about something, and depending on your earlier choices, the whole conversation shifts. But it's also about Marcus. You think he's going to let things go when you stood up to him? Or that he'll just leave you alone when you let him bully you?
I kept testing it and it would break just when it was getting good. Right when the scene was landing, it would just... stop. No error. Just nothing.
Looking through 2,000 lines of JSON trying to find a typo is a nightmare. I was checking every label, every jump, every flag reference. Hours of my life, gone.
So I built a validator.
npm run validate-storyRuns through every JSON file. Catches the dumb stuff:
✗ act1_day2_lunch.json
- Broken reference: @missing_label (line 47)
- Undefined character: "marcus" (not in characters array)
- Flag "saw_photo" set but never checkedThat last one matters more than you'd think. I set flags with good intentions. "I'll use this later." Then I forget. The validator catches those orphaned flags and forces me to decide: am I actually going to use this, or should I delete it? If I'm going to use it, I can figure out where. If not, it's gone before a player makes a choice that does nothing.
I also made it so scenes can load other JSON files. Keeps things lean. That 2,000 line file is now several smaller files that are actually readable.
Here's what "choices matter" actually looks like. Same scene, different paths:
I like to change the story. A lot. The JSON format is great because I can add to the story quickly. But it also means I sometimes miss the jumps.
I'd have dialog that would just get stuck. Before I had better tools, that meant another 30 minutes playing through to get back to that spot and see if my fix worked.
npm run audit-flow✗ act1_day2_morning_class.json
- Unreachable label: @unused_branch (step 84)
- Dead end: path from choice "ignore_her" never reaches endpoint
- Orphaned code after unconditional goto (steps 92-97)Not as painful as the validator problems, but still saves me hours.
This is the big one. The thing that made it possible to keep going.
I don't know how many different paths there are through Day 2. I genuinely don't. But a script can figure it out. And it can keep track of which ones I've tested. And when I change something, it knows what needs to be tested again.
I built a separate React app. Loads the scene JSON. No animations, no transitions, no waiting for text to appear. Just text and choices. I can blast through a path in two minutes instead of forty.
But the real value is the coverage tracking. Green means tested. Orange means the JSON changed since I last tested. Red means never touched.
I don't want to play my own game for five weeks just to test dialog. Just to change a few flags and have to test it all over again. I don't have time for that. Nobody does.
The flag index shows me which flags I'm using in which scenes. Where they get set, where they get checked.
This helps me figure out if things make sense. Do I want more flags in this scene? Is this flag doing enough work across the story? Should a choice in Day 1 affect something in Day 3?
That's the magic I'm trying to build. Something from three days ago suddenly comes up. You thought that choice didn't do anything. But it did. The flag index helps me see where those connections are, and where they could be.
My daughter likes the story and helps me test. The flowchart lets us see everything at once and break up who's testing what.
She looked at the Day 1 visualization and said it looked like a subway map designed by someone having a breakdown.
She wasn't wrong.
But visually seeing things shows me if I'm being too ambitious, or if I need to add more options somewhere. Sometimes I look at a section and realize it's too thin. Sometimes I look at it and realize I need to calm down.
Once the dialog is figured out, I need to test it in the actual game. Position, emotions, how the characters look and react.
The dev tools let me jump to any scene with any flag combination. I can go to the computer section on any day with any state. The computer has a lot going on. Hacking options. Social engineering. Emails, instant messages, news articles, jobs you can pick up. All of it affected by your choices.
This is where I add the polish. When the dialog is right, I make sure the characters look right too.
This one is mostly to keep myself motivated. And to show others that choices actually matter.
It uses d3. Circles for scenes, choices, flags, characters, branches, relationship changes. I can look at a single day or multiple days together.
Sometimes I wonder if I'm not being ambitious enough. Sometimes I wonder if I'm being too ambitious. This helps me not go crazy on a game I'd never be able to finish. It also shows me how important different characters are and if someone needs more screen time.
I'm not a game developer. I'm a guy who knows how to solve problems, and these tools solve my problems. For now.
Day 2 is almost done. All the actions are there. Now I'm looking at dialog and character reactions. I finished Day 2's computer section and I love it. There are multiple ways to hack things. You might use a program, or you might try social engineering and get your password reset. Sometimes you can do it without extra knowledge. Sometimes it's impossible without help. But there's always a way in. Some more risky than others.
I also got the night instant messaging working. You can chat with characters after hours. That felt great to finish.
I was spending weeks just looking at dialog choices. And things are never final with me. I keep changing stuff. I needed to be able to do that quickly.
These tools help me see where I need to be more creative, where I'm putting too much effort, and how to stay on track. There will still be a million bugs. But fewer than there would have been.
I have a story to tell. There are a lot of ways to tell it. Now I can actually explore them without losing my mind.
Day 1: 10 scenes. 10 choices. 26 options. 37 flags. 848 lines.
Days 1-2: 21 scenes. 26 choices. 70 options. 88 flags. 1,799 lines.
And that's just the visual novel portion. The computer sections have their own choices. Which systems you hack. What order you do things. Whether you cover your tracks or get sloppy.
It's a lot. But I can see it now. And I can test it.
That's enough.