Feb 3, 2025

Abiotic Factor Community Localization

Team of 4
August 2024 - December 2024
Skills Utilized: Python, Unreal Engine, Binary Manipulation 

Introduction

I enjoyed playing Abiotic Factor and wanted more of my friends to experience it, but the lack of Korean language support was a barrier. While the game supported eight languages, Korean wasn’t one of them. So, I decided—why not create a patch myself?

I began analyzing the game files and discovered that many texts and images weren’t exposed for localization. To work around this, I directly modified binary .uasset files and dealt with Unreal Engine’s IO Store files (.utoc and .ucas) as well as .pak archives. Using various tools, I unpacked and repacked these files and extracted .usmap data from the game.

Through this process, I gained a deeper understanding of how Unreal Engine packs and stores game assets.


Showcase


Technical Highlights

Overwriting Texts and Encoding

When replacing text with Korean, the game failed to display it correctly. Suspecting an encoding issue, I created a test Unreal Engine project and discovered that the game stored text in UTF-16 with the size recorded as a negative integer. Understanding this allowed me to properly overwrite text while maintaining compatibility.

UObject and Export Map Entry Manipulation

For assets containing multiple UObjects, such as levels and widgets, Unreal Engine stores individual object offsets and sizes within an export map. Modifying text changed the size of these entries, requiring me to adjust offsets for all subsequent entries to maintain file integrity.

↑Parse the existing entry map

↑And calculate new offsets and sizes after overwriting the strings.

Extracting Images and Dialogue Audio Files

Using CUE4Parse, I iterated through the game’s archive files, performed type checks, and decoded and extracted image and audio assets.

Conclusion

Through this project, I gained a deeper understanding of how Unreal Engine packs and stores files, as well as the intricacies of binary file manipulation. This experience strengthened my ability to analyze and modify game assets at a low level, enhancing my skills in reverse engineering and data structure handling.

No comments:

Post a Comment