import os, re, struct from PIL import Image, ImageDraw, ImageFont GAME = r"F:\steam\steamapps\common\The I of the Dragon" TBL = r"E:\DragonHD\patch\tables" KEY = b"GBDFYTNE" os.makedirs(TBL, exist_ok=True) CODE = 0xC1FA RED = (122, 0, 138, 16) GREEN = (140, 0, 156, 16) ATLAS = "Shrift_gb_Germany.TGA" # 1. paint red + green solid rects into atlas def paint(raw, x1, y1, x2, y2, b, g, r): w = struct.unpack_from(" red", n) # 3. cjk tables: code -> GREEN gt = bytearray(65536 * 16); mt = bytearray(65536 * 8) u1 = GREEN[0] / 256.0; v1 = GREEN[1] / 128.0; u2 = GREEN[2] / 256.0; v2 = GREEN[3] / 128.0 struct.pack_into("<4f", gt, CODE * 16, u1, v1, u2, v2) struct.pack_into("<2i", mt, CODE * 8, 17, 16) open(os.path.join(TBL, "cjk_glyph.bin"), "wb").write(gt) open(os.path.join(TBL, "cjk_metric.bin"), "wb").write(mt) print("cjk 0x%04X -> green" % CODE) # 4. strings: set menu ids to CODE sp = os.path.join(GAME, "Data", "Misc", "Strings.dat") encs = open(sp, "rb").read() test = bytes([CODE >> 8, CODE & 0xFF]) pat2 = re.compile(rb'(Id\s*=\s*"([^"]*)"\s*[\r\n]+\s*English\s*=\s*")[^"]*(")') def repl(m): sid = m.group(2) if sid.startswith((b"MainMenu", b"OptionsMenu", b"SaveLoadMenu", b"VideoOptions", b"AudioOptions")): return m.group(1) + test + m.group(3) return m.group(0) encs2, n2 = pat2.subn(repl, encs) open(sp, "wb").write(encs2) print("menu strings set:", n2)