katashi Posted November 18, 2023 Posted November 18, 2023 (edited) Hello, I want to translate the game monster tale into my language The text structure is quite simple header 8 bytes, - filesize-(something) 4byte, - pointers counter, 4byte - pointers table, 4byte * counter But editing manually will be very difficult and I'm not good at programming to write a program for it Someone please help me, thank you very much Note: i found the tool on this site: https://gbatemp.net/threads/trying-to-enable-hidden-unavailable-language-modes-in-nds-games.558533/page-2 but it only supports cp-1252, but i need utf 16 LE because cp-1252 won't be enough loctext_IntroCutscene_ENG_US.zip Edited November 18, 2023 by katashi
Engineer Solution LinkOFF Posted November 18, 2023 Engineer Solution Posted November 18, 2023 Spoiler import os import sys import struct def writeInt32(f, val): f.write((val).to_bytes(4, byteorder='little')) def readInt32(f): return struct.unpack('<i', f.read(4))[0] def writeString(f, string): f.write(string.encode('utf-16le')) f.write(b'\x00\x00') def readString(f, pos): cur = f.tell() f.seek(pos) cstr = bytearray() while True: ch = f.read(2) if(ch == b'\x00\x00'): f.seek(cur) return str(cstr, "utf-16") cstr.extend(ch) def extract(file): f = open(file, 'rb') magic, start, length, num = struct.unpack('<4I', f.read(16)) text = '' for i in range(0, num): text += '%s\n' % readString(f, readInt32(f)).replace('\n', '<lf>') f.close() f = open('%s.txt' % file, 'w', encoding='utf-8') f.write(text) f.close() def build(file): f = open(file, 'r', encoding='utf-8') lines = f.readlines() f.close() f = open(os.path.splitext(file)[0], 'wb') f.seek(16 + (len(lines) * 4)) # calculate string table start offset and slice to it offsets = [] for line in lines: # store offsets and write lines itself offsets.append(f.tell()) writeString(f, line.strip('\n').replace('<lf>', '\n')) length = f.tell() - 0xC # for header # write header + offsets f.seek(0) writeInt32(f, 0x54434C) writeInt32(f, 0xC) writeInt32(f, length) writeInt32(f, len(lines)) for offset in offsets: writeInt32(f, offset) f.close() #extract('loctext_IntroCutscene_ENG_US.bin_') #build('loctext_IntroCutscene_ENG_US.bin.txt') 1 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now