Just a quick update to the recently-released ancient decade-old patch I revealed in December.
Since the previous release, my QA testers have been hard at work continuing to test the game and identifying issues. I thought it would be a good time to release the results publicly. This version doesn’t translate more of the story, but cleans up a lot of stuff that will crop up later in the game so it’s all ready to go for future translation.
[Summoner’s Lineage English Patch v0.20][Readme]
I thought I would also highlight some of the changes made and bugs fixed, as a demonstration of the sorts of things that need to happen during proper localization (as opposed to fanfic writing masquerading as localization). Some of this could get a little technical, so you can skip it if it doesn’t interest you.
One aspect would be that, in the initial release, there were potential buffer overflow crashes when you got later into the game and did things like stacking passive skills or stealing items. In the original Japanese game, text strings were below a certain length. For example, item names were 6 characters or below, or passive skill prefixes were 2-4 characters, or attack names were 3-5 characters. When strings had to be constructed involving those strings, the programmers allocated space in memory (the “buffer”) that was just enough to fit the constructed string to be displayed to the player. The sum total length of the constructed string was expected to not exceed the space allotted.
In English, we need rather more characters than in Japanese:
If you use more characters than the original developers intended, and write them to the buffer, then the buffer “overflows”, or spills over into adjacent memory areas, overwriting other data. This could lead to data corruption, weird game behavior, or crashing/freezing. I actually already fixed one such issue prior to release involving Combining items with units. Unfortunately, for the combat strings, due to the way the game is programmed, it isn’t quite so simple as just making more space in memory. For example, all actions (and action name strings) are pre-computed before combat begins, and then displayed during combat when the action plays out. There’s a setting to just skip the pictorial representation of combat and go directly to the results, which is why it was done this way. The string for each unit’s action is actually stored within the unit’s battle entity object. So, expanding the buffer would require adjusting every single reference everywhere in the code that is referring to any part of any of these objects — a herculean task. Dynamically allocating the memory required would also be a total mess in terms of tracking when it should be allocated and freed; if it is not freed, you get a memory leak, and if it is freed and then used, it’s a null pointer error. These are all things that would be easy to accommodate when you are compiling the game from the source code, but not so much when you are hacking an already-compiled game.
Luckily, a certain person made the brilliant suggestion to, instead of constructing the strings right away and storing them in the buffer, instead reuse the space in memory to store the string pointers. One can then construct the strings from the lists of pointers right before actually displaying the string in combat, when it would be easy to keep track of the extra memory used and deal with it cleanly. Voila! Also, I added buffer overflow checking anyway just in case because lol why wouldn’t you. They probably should have already back in 2003, but it would be inexcusable not to in the modern era. (Not that this stops people from finding out new buffer overflow exploits all the time…)
There were various other improvements to the text presentation, like moving and centering stage names to accommodate longer strings:
Or hiding generic units’ names if their names match their class name, reducing clutter and effectively no longer pretending that you have a harpy in your party named literally “Harpy”:
In the process of going through the game’s code and data, I also managed to put together a class compendium, for anyone who might be interested in each class’s statistics and skills and don’t mind spoilers or trying to figure things out on their own:
[Summoner’s Lineage Class Data]
Finally, one topic perhaps of some interest for those of you that are yawning and looking for their coffee mug by now: debug cheats. At least for people who aren’t already Fire Emblem whizzes, the game’s difficulty ramps up and is already not a total walk in the park by the third stage (the last of the translated ones in the initial release). In order to aid playtesters in making their way through the game, I added cheats. Have fun figuring out how to access them, and let me know if you give up and really just want to go fast and make everything explode!
That’s all for now. Until next time!
February 10, 2025 at 8:57 pm | Permalink
Well, it’s so nice to see progress for this baby. Hopefully we could see white smoke about a full translated patch for it.
Thanks for your efforts!