第五期游戏感想征集活动

发一下解包封包和编码解决问题的心得方便下次复刻用……

工具EscudeEditor和EsuBinE
EscudeEditor解bin包,解了后里面的文件(.001)用EsuBinE

解决编码问题:
exe反汇编把80改86,如80 C6 44 24改86 C6 44 24兼容GBK

exe同名文件解包,

lib\string.c

    if(use_sjis){
        for(i = 0xa1; i <= 0xdf; i++){ ctype_table[i] |= C_KANA; }
        for(i = 0x81; i <= 0x9f; i++){ ctype_table[i] |= C_KANJI; }
        for(i = 0xe0; i <= 0xfc; i++){ ctype_table[i] |= C_KANJI; }
改成
    if(use_sjis){
        for(i = 0xa1; i <= 0xfe; i++){ ctype_table[i] |= C_KANA; }
        for(i = 0x81; i <= 0xfe; i++){ ctype_table[i] |= C_KANJI; }
        for(i = 0xe0; i <= 0xfe; i++){ ctype_table[i] |= C_KANJI; }


misc\text.c

void init_default_font(int font_id, int weight)
{
    default_font_id = font_id;
    default_font_weight = weight;

    ini_gets("Font", "Face", "", user_font_name, sizeof(user_font_name), NULL);
    if(user_font_name[0] != '\0'){
        default_font_id = FT_USER;
        default_font_weight = 400;
        if(ini_geti("Font", "Bold", 0, NULL)){
            default_font_weight = 700;
        }
    }
}

改成
void init_default_font(int font_id, int weight)
{
    default_font_id = FT_USER;
    default_font_weight = 400;
    strcpy(user_font_name,"SimHei");

兼容字体

以下几处:
    if(mes->font_type == FT_GOTHIC){
        strcpy(text_font.name, "MS Gothic");
    }else if(mes->font_type == FT_MINCHO){
        strcpy(text_font.name, "MS Mincho");
====
    if(mes->ruby_type == FT_GOTHIC){
        strcpy(ruby_font.name, "MS Gothic");
    }else if(mes->ruby_type == FT_MINCHO){
        strcpy(ruby_font.name, "MS Mincho");
    }else if(mes->ruby_type == FT_USER){
        strcpy(ruby_font.name, user_font_name);
    }
两个字体要改成SimHei等兼容字体



        case LANG_JP:
            if(is_ctype(c0, C_KANJI)){
                sjis_to_jis(&c0, &c1);
                c0 -= 0x20;
                c1 -= 0x20;
                if((c0 == 0) || (c0 >= 0x5f)){ return; }
                if((c1 == 0) || (c1 >= 0x5f)){ return; }
                wide_char = true;
            }
改成
        case LANG_JP:
            if(is_ctype(c0, C_KANJI)){
                sjis_to_jis(&c0, &c1);
                c0 -= 0x80;
                c1 -= 0x40;
                if((c0 == 0) || (c0 >= 0x5f)){ return; }
                if((c1 == 0) || (c1 >= 0x5f)){ return; }
                wide_char = true;
            }

解决映射

这块:
        if(!strcmp(tag.attrib[i], "src")){
            sprintf(file, "gfx\\%s", tag.value[i]);
            n = strlen(file);

如果要与日文原版共存需要改名"gfx_chs\\%s"


global.h
与日文原版共存才需要修改:
#define DIR_DATA                "data\\"
#define DIR_SCRIPT                "script\\"
#define DIR_CHART                "gfx\\chart\\"
#define DIR_SYS                    "gfx\\sys\\"
#define DIR_MOT                    "gfx\\mot\\"
#define DIR_BG                    "bg\\"
#define DIR_EV                    "ev\\"
#define DIR_ST                    "st\\"
#define DIR_ETC                    "etc\\"
#define DIR_FACE                "gfx\\face\\"
#define DIR_FONT                "gfx\\font\\"
#define DIR_THUMBS                "gfx\\thumbs\\"

改成(_chs自行命名)
#define DIR_DATA                "data_chs\\"
#define DIR_SCRIPT                "script_chs\\"
#define DIR_CHART                "gfx_chs\\chart\\"
#define DIR_SYS                    "gfx_chs\\sys\\"
#define DIR_MOT                    "gfx_chs\\mot\\"
#define DIR_BG                    "bg\\"
#define DIR_EV                    "ev\\"
#define DIR_ST                    "st_chs\\"
#define DIR_ETC                    "etc\\"
#define DIR_FACE                "gfx_chs\\face\\"
#define DIR_FONT                "gfx_chs\\font\\"
#define DIR_THUMBS                "gfx_chs\\thumbs\\"


scripts脚本文件提取用EsuBinE_ORG, 然后用SExtractor
01_search=^\%\%.+?\%\%\|(.+)$

txt模式,932


然后人名等其他乱码编码的解决方式,用EscudeEditor解包data.bin,然后用SExtractor提取。

BIN引擎,译文长度截断开启,编码对BIN生效开启,编码选932转gbk

正则使用
00_skip=^[\S\s]{0,3}$
10_search=^([\x81-\xFC][\S\s]+)$
ignoreDecodeError=1
separate=(\x00|\x20)

不过这样会遗漏掉个别“单字符”名词,所以可以先用EsuBinL解包看看里面都有什么文字,然后使用
00_skip=^[a-zA-Z0-9\s]{1,3}$
10_search=^([\x81-\xFC][\S\s]+)$
ignoreDecodeError=1
separate=(\x00|\x20)
来在一堆乱码里找单字符名词。

然后使用EscudeEditor和EsuBinE分别封包就完事了。

2025-07-26 17:48:18
分享
三司绫濑 (新人) 回复 Lain1984

大佬请问下,load_file:Failed to open the file.file:''bg\0\bg_black.lsf''这个是什么毛病啊,游戏打不开

2025-07-26 18:13:13
分享

🤔我不到啊, 我和几个小伙伴都没有遇到这个问题。日文版打的开吗?

2025-07-26 19:45:57
分享

下个dl版,补丁打进去转区运行汉化启动(直接启动也没啥事,就是窗口乱码),你是做了啥多余操作?

2025-07-27 14:18:42
分享

看看你游戏根目录是不是少了bg.bin这个文件

2025-07-27 16:17:25
分享
登陆 后方可回复, 如果您还没有账号请先 注册