This is what I got for you. I think if you going to translate this is going to be more complicated that you think because of the way the company programmed this game, but anyway...
I am using PCSX2 to execute the game and GameConqueror (alternative to Cheat Engine on Linux) to check the memory.
First I thought that the game was importing the text from a file and mapping the characters from the text file on the image to show it graphically so I got to the point in the game where it shows ASCII character like here:
With GameConqueror I searched for strings that contain 'R1' until I got to this address 0x202a3c00
; then I checked the memory and I got this chunk of data:
By now I know that indeed they are using some ASCII and that they are importing it from a file so I extract the files inside of the ISO image, enter that folder and then I start searching in the files for those hex values with:
grep -rnw '.' -e $(echo -e '\x52\x31\x20\xb9')
I got:
Binary file ./RES/SUBSYS.RES matches
Great! Then I opened it with a hex editor and searched for the values. If you do that you will notice that they are using some type of syntax to tell the game what to show. In this case they show a text type 'TIP'
I think that by now you could start translating but I wanted to go beyond and disassemble the code to modify it because there is going to be a problem if you translate that file (I will address that later) so with PCSX2 debugger I added a breakpoint to 0x202a3c00
and I got two functions that access to this address:
z_un_0014bdf0 write
z_un_00155c70 read
I use Binary Ninja to disassemble it better (PSCX2 debugger sucks) but I had some problems... I wanted to use Hopper but I need to install some plugins and it's too annoying... If I use IDA Pro I have to buy it because it's mips.... So I guess there is not other option than translate that file. The problem with translating that file is that you would have to come with a translation with less bytes than it already contains. For example.
The text in the first image has 57 bytes. Meaning, if the translation is more than 57 ASCII characters then you would have to come with a slightly different translation. If it is less then that its easy because you can fill it with 0x20 (spaces).
So what encoder are they using? I'm not an expert on encoding formats but I'm pretty sure that they are not using any standard one and they decided to came with a custom one. I know this for 3 reasons:
- They have ASCII values that actually represent ASCII values but
very limited.
- They are not using the Unicode block Hangul Syllables. The character
버
in the game is 0xb9f6
but it should be 0xbc84
, 튼
is in the game 0xc6b0
it should be 0xd2bc
, etc.
- The images that you extracte. has no more than 500 Korean characters but the Unicode Hangul table has 11,172.
UPDATE:
Thanks to @IgorSkochinsky to check the encoder with different method. It is EUC-KR