After the highly productive last week, I knew that completing M2 was a matter of “time and code”, as I say: a couple of days of coding tasks in areas I was already fairly comfortable with. M2 then ends, leaving the game in a playable state with full UI theming support, scalable fonts across the board, and most of the bells and whistles I wanted in the gameplay engine.
For those planning to build games one day, know that one of the trickiest things to get right in 2D games is ensuring that your game works across different screen aspect ratios and resolutions, including text. It is easy to screw things up and have sprites and text looking fuzzy or poorly downscaled. Because of that, I am designing the entire game in a resizable window, which I play around in size and aspect ratio during development. Within reason, the game should look sharp in whatever horizontal monitor you throw at it, with resolutions ranging from low (800x600, let’s say) to 8K and beyond. It doesn’t support vertical screens, not because I can’t make it work, but because parts of the game don’t make sense on a vertical screen… Think of playing Super Mario Bros. on a vertical screen.
Font scaling, particularly, is hard to get right with UIs across different aspect ratios. If you have ever designed web applications and needed to ensure they would look great across different font and size settings, you know what I mean. Accessibility is important for Galantrix, so I wanted to ensure that Outsider looks right from 50% to 200%+ font zoom settings and can support high contrast and colorblind themes. I will not claim the game is fully accessible (I don’t plan to support narration for launch, if ever), but it will hopefully reach more players than the average text-reliant narrative game. Themes are now implemented “the right way”, and it is a breeze to dynamically retheme the UI with different colors, sizes, and fonts while the game is running!
I said I finished the previous milestone early, so what did I do with the remaining time? That’s the part where I share some of the hardships I faced this week; not all bad news, but worse than I planned.
When I finished the work early last week, I planned to surprise everybody by saying that the Chapter 1 story, the biggest M3 goal, was done in M2 (I would have to postpone the theming work mentioned above). I hoped to finish a draft in five days, but I now think it will take up to ten days after I faced the brutal reality of writing nonstop from Monday to Wednesday.
Writing is hard. Not only that, but dynamic narratives like Outsider’s are double hard because the Outsider story files are actually a mix of dialogue and code. My initial calculations assumed a productivity of over 2000 words per day and a text size estimate of 7000 words (50% bigger than Outsider for Chapter 1); I averaged around 1700 words per day against an updated Chapter 1 estimate of 8000 words. By Wednesday, I felt completely “burned out” for writing, knowing that I would be lucky if I could get 1000 words/day on Thursday and Friday.
Stephen King and other writers recommend a strict routine with no interruptions, often starting early in the morning, to reach high productivity. I would start around 9-10 AM and eat lunch at 11:30 AM, which I later realized wasn’t great because of the interruption. After lunch, I’d be sleepy until around 2:30 AM, and my writing output would suffer greatly. By 4:30 PM, my brain was melting, and output suffered again. Ultimately, I only got 2-3 productive hours of writing per day…
If this week’s productivity is the best I can do, I will have to spend 45-60 work days to write the game, which would ensure Outsider’s final release doesn’t happen before April of next year. Maybe it was never realistic to expect a final release before then, but I want to leave schedule slack for things other than writing.
But it was not all bad news in the writing arena. I dreaded starting writing because I needed better tools for writing a dynamic narrative such as Outsider’s. There are many tools out there, but they all suck for this game because, well, Outsider is different from most major (and minor) narrative games out there. I will not say that Outsider’s story paradigm is completely novel, but I’ve never played a game like it.
This week, I invented a mini-language for writing, and I’m quite happy with it! This is different from the language used by the Ink engine during runtime because it’s optimized for seamless writing rather than runtime flexibility. I’m doing all the writing in VSCode using a hacked version of the JSON syntax highlighter that happens to work quite well for writing. No, my language has nothing to do with JSON; it’s just that the JSON highlighter works well with the language by pure happenstance, and this mini-tooling resolved a months-long source of anxiety! Let’s hope I can just move faster in the future…