Gift汉化相关

本文介绍了破解Gift程序中脚本文件的过程,通过解压并解析textdata.z中的pak文件提取scn与tbl脚本,为进一步翻译游戏对话提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然大概没什么人来看这个blog,但还是要稍微更新一下的。
前段时间被人摆脱去搞gift程序的破解,结果因为自己深陷数坑,搞了这么久才提出对白。Gift的脚本文件封装在一个pak文件里面再用zlib压缩,于是textdata.z就是脚本文件。自己用zlib写个程序解压后得到的pak文件就可以解包了。
值得一提的是虽然解压得出PAK文件里面第一个文件头结构就有指出脚本文件的个数,但实际上在后面还是有很多的空字节,因此用一些提取工具来提取会提取出错误的脚本,以下是自己写的提取脚本程序,代码很挫,没错误处理。
#include "windows.h"
#include<iostream>
#include<string>
#include<fstream>
using namespace std;

struct filehead{
char name[0x30];
DWORD offset1;
DWORD offset2;
DWORD size;
DWORD unknown;
};

int chr='\\';
char path[256];

int main(int argc, char* argv[])
{
fstream is("textdata.z.pak",ios::in|ios::binary);
char *buff=new char [0x1f400];
is.read(buff,0x1f400);
filehead *p=(filehead*)buff;
int i=1;
while(p[i].size!=0)
{
char *pos1,*pos2;
char *temp=new char [p[i].size];
is.read(temp,p[i].size);
if((pos1=strchr(p[i].name,chr))!=NULL)
{
GetCurrentDirectory(256,path);
char *fuck=new char [pos1-p[i].name+2];
ZeroMemory(fuck,pos1-p[i].name+2);
memcpy(fuck,p[i].name,pos1-p[i].name+1);
lstrcat(path,"\\");
lstrcat(path,fuck);
CreateDirectory(path,NULL);
delete []fuck;
if((pos2=strchr(pos1+1,chr))!=NULL)
{
fuck=new char [pos2-pos1+1];
ZeroMemory(fuck,pos2-pos1+1);
memcpy(fuck,pos1+1,pos2-pos1);
lstrcat(path,fuck);
CreateDirectory(path,NULL);
delete []fuck;
}

}
fstream write(p[i].name,ios::out|ios::binary);



write.write(temp,p[i].size);
write.close();
delete []temp;
i++;
}
delete []buff;
is.close();

return 0;
}

提取出来的脚本有两种,一种是scn脚本,一种是tbl脚本,scn内含控制符以及对白,tbl则是对应scn脚本的索引。然后就可以写程序提取对白出来进行翻译了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值