From the Devlogs #12 (7/1/24)

Love & Country

Tensions run high and the boys run UPSETTINGLY HANDSOME in this World War I historical romance-spy thriller visual novel!

(Quick aside from the other dev, Juliana: "TODAY IS KATIE'S BIRTHDAY!!! Happy bday KT 💖") Greetings lovelies! First off, we are overflowing with gratitude to everyone who has checked out ‘Love & Country’! It was terrifying to put something we poured so much of ourselves into out in the world, not knowing how people would react to it. To see that people are drawn to these characters who have existed only to us for so long leaves us thankful to the bottom of our hearts. We [i]so[/i] appreciate you giving Team Gu a chance! We hope you will continue to leave comments, ratings, and reviews, etc. Your support means the world to us. As a dev with a new game out there, I’ve had a lot on my mind over the past week, thinking about what went well (and inevitably what I wish had gone better) with the final stages of development. We will be doing an actual postmortem down the line, but today I wanted to talk about some of the challenges I ran into with the accessibility features. You may remember us hyping up the cool accessibility features native to Ren’py in our previous devlogs, particularly for visually impaired players. When playing a game made with Ren'py, you simply hit the “v” key to activate self-voicing; the system voice uses text to speech (TTS) technology to read out all text from the dialogue box, as well as message windows, and any buttons that you mouse over. There are a couple of different ways that a programmer can customize this feature. To begin with, you can customize which system voice is employed for this feature. “Zira” is the female American English voice and “David” is the male American English voice for Windows. There are other voices for other languages, which is great for emulating the best possible experience of your text. (Quick digression: It’s very important to remember that system voices are in NO way a substitute for voice acting. Firstly, switching between different system voices for different characters is likely to be distracting to the player. Second: real people can perform lines through voice acting in a way that the computer cannot. System voices are not designed to give emotional weight to words. Third: system voices are TERRIBLE at pronunciation. More on this later.) Next, you can add additional text for the system voice to read. This is fantastic for describing visuals on screen that may not be in the text or painting a mental picture of the setting or character in greater detail than you would for a sighted person. Also, adding text can be very helpful for providing instructions for play mechanics. For example, the system will read our choices when the player mouses over the choice buttons. But what happens if your player cannot see that the choices are located at the center of the screen? Additional voiced text here might be helpful to tell the player that they have reached a decision point, and that they can use the left/right arrows to navigate from the quick menu to the choice buttons. Conversely, you can opt to have the system skip over text that is unhelpful to the player. We used this frequently when we had a character speaking another language. A sighted player may find it interesting to see a character’s line “[i]Wie gehts?[/i] (How’s it going?)” in its original language (italicized) and the English translation (in parenthesis). This also allows us to visually signal to the player when a foreign language is spoken. However, to have the system voice read that line will be….well…bad. Unlike a sighted player, someone using self voicing can’t skip to the translation. Also, the system voice will absolutely butcher the pronunciation for the foreign language. It’s much better to program the system voice to announce what language the character is using (Lillian, in German: ...) and then to skip directly to the translation. The last way to customize self voicing is to apply the above addition/subtraction technique to improve pronunciation and the quality of reading. As I mentioned above, TTS technology is flawed and often when it comes to reading, a human will do a much better job. If the system is butchering a character name or a word that the system doesn’t know, you can fix it. Kind of. You tell the system “pronounce [a string of characters] like this: [a phonetic spelling of the word or phrase.]” (When you see "candelabra'', say "candle ah bra".) This is a great fix if the word only appears once as you have to execute this at every instance of the word appearing in the script. It’s much more of a pain to implement if the word appears a lot–think a character’s name. It also involves quite a bit of trial and error, because the system doesn’t always pronounce combinations of syllables the way you think it will. So it’s great that Ren'py 8.2 has a command “define config.tts_substitutions”. It allows you to instruct the program “anytime you see[this string of characters] pronounce it like this: [a phonetic spelling of the word or phrase.]”. So basically, you get to teach the system once, and it remembers it for the whole game. In the final week before the release, I spent several days going through the script to list out all the words we needed to teach the system. (Yes, I should not have still been programming at this point, but we were pretty behind and there was a crunch.) But I couldn’t get it to work. For some reason the “define config.tts_substitutions” command broke the game. After asking around on dev forums and doing a little research I realized the problem: I was using Ren'py 8.0. Apparently, “define config.tts_substitutions” is very new. And it was going to be so much easier to use it than to go back through the code to find every instance of every non-English character name. So I committed a grave sin for a developer: I tried to upgrade my version of Ren'py. All the more experienced programmers out there are shaking their heads at me right now. But the truth is, I didn’t know. I’m VERY new at programming. I came to this project not knowing anything, and taught myself as we went along. I have never used Ren'py or even its base language Python before starting ‘Love & Country’. We couldn’t afford to hire a programmer because we had a budget of [b]$0[/b]. So the mistake was made. And while I could get L&C to run on my computer, it broke our Steam build only days before release. In the end, I had to roll back Ren'py, and I ran out of time to fix all the terrible pronunciation. I was bummed. And unfortunately, any visually impaired early adopters will hear our LI’s names as “[i]A meal Dirosee[/i]” and “[i]Anton Scootman[/i]”. That brings me to now: I’m working on our first patch for the game. I’m in the process of finding as many instances of mispronunciation in the script to try to fix them as best I can. The majority of the coding updates will address that, and hopefully provide our visually impaired players with the best experience possible. We also will be fixing some textual errors (we had reports of a handful of repeated lines). And lastly, we will be adding Steam Achievements! We hope you enjoy them as we had a ton of fun thinking them up. In the meantime, tell your friends and your online communities about ‘Love & Country’! We’re a small outfit and while we do what we can to market the game in our free time, word of mouth works amazingly. If you like us, leave a review! If you hate us, leave a review! If you’re somewhere in between, etc, etc. Thank you guys, again– we really love you! Ta ta for now, Katie from Team Gu