Weekly Update: October 13, 2023

The big item from this past week was making Icarus the default build. A big thanks to players who did opt-in play testing of the build: it seems like this build is solid with few serious issues reported (knock wood).

I’ve spent most of the past ten days or so chiseling away at localization. There are currently over 70,000 words of text in the game spread across 4500 chunks of text, even more than¬†Starcom: Nexus. (In the Icarus news update I had the count at less, but the localization process has revealed that I undercounted some areas.)

Localization requires organizing and exporting all of those text strings into a format that can be used for translation.

The text in the game can be organized into three broad categories:

Story Content

One of the technical design decisions for the game was to move content out of the game engine’s domain. This includes all conversations, anomalies, missions, items, discoveries, etc. There were several reasons for this: one, the Unity engine tries to serialize everything in the project before running in the editor which created a significant drag on iteration for Starcom: Nexus. Two, it allows me to use version control more effectively for the content. Three, it theoretically should make it easier to allow modders to create content. And finally four, exporting the text for localization became very simple.

Story content makes up 95% of the text in the game, but there was still…

Static UI Text

There’s a bunch of text in the game that never changes. E.g., the “New Game” button on the main menu always says “New Game”. This text was also pretty easy to localize. Basically I added a component to these UI elements that identifies them as localization targets and an Editor script grabs everything with those components. These components also register themselves with a LocalizationManager so if the current language changes they know to replace their text and font.

Finally there is…

Code Generated Text

Code generated text is a very small percentage of text in the game, but every string needed a small amount of work. E.g. change the code that said:

return string.Format("Fire rate: {0} shots/sec", baseFireRate);

to

return $"{LocalizationManager.GetTextWithDefault("SHIPYARD_UI->FIRE_RATE")}: {baseFireRate} {LocalizationManager.GetTextWithDefault("SHIPYARD_UI->SHOTS_SEC")}";

Here is the Operations screen with localization applied:

The “language” is “Progent-A”: a fictitious language I created to pseudolocalize¬†Starcom: Nexus¬†using symbols from extended Unicode characters. Besides looking vaguely sci-fi, I can sort of read it, while at the same time can immediately tell if some text has not been replaced. It also uses a different character set, making sure font substitution works correctly.

This is what took up the most time of the past week, but the good news is that I made a lot of progress: almost all UI elements have been exported except for the options/keybinding menus. None of the text has actually been translated to a real language yet, but all of this work is a necessary precursor to that.

Finally, as I mentioned previously, I will be having eye surgery next week so there may not be the regularly scheduled weekly update.

Until next update!
Kevin