global.res 編集

文字データは data1.fuk の locale\enus\global.res に格納されている。
global.res はバイナリデータ

res の構造

struct Res {
    magic: u32,
    version: u32,
    entry_count: u32,
    entries: Vec<Entry>,
}
struct Entry {
    id: u32,
    offset: u32,
    size: u32,
}

export 処理:

entries[0] = 66 00 0D 00 80 18 01 00 36 00 00 00
offset = 0x11880, size = 0x36

シーク offset だが Res のヘッダー分(u32*3=0xC)もプラスする。
つまり 0x1188C から 0x36 バイト

3C 00 66 00 6F 00 6E 00 74 00 20 00 73 00 69 00
7A 00 65 00 3D 00 27 00 34 00 27 00 3E 00 3C 00
62 00 72 00 3E 00 3C 00 2F 00 66 00 6F 00 6E 00
74 00 3E 00 00 00

文字コードは UTF-16-LE で null 終端(00 00)
したがって "<font size='4'><br></font>" となる。
これを entry_count 繰り返す。

import 処理:

上記の文字列が "<font size='4'></font>" と変化した場合を考える。
"<br>" = 3C 00 62 00 72 00 3E 00 が削除なので

3C 00 66 00 6F 00 6E 00 74 00 20 00 73 00 69 00
7A 00 65 00 3D 00 27 00 34 00 27 00 3E 00 3C 00
2F 00 66 00 6F 00 6E 00 74 00 3E 00 00 00

となる。size が変わるということは、次以降の entry の offset が変わることに注意。

実装としては、文字列の size を計算しすべての offset を再計算してから
ファイルに出力すると良い。