satan53x / SExtractor

从GalGame脚本提取和导入文本
GNU General Public License v3.0
225 stars 15 forks source link

Reallive引擎 #1

Closed yqw1231 closed 1 year ago

yqw1231 commented 1 year ago

QK6E Y9F%Z5%WU2$2VWAMAW 您好,我打算使用您的工具提取Reallive引擎的文本(Seen.txt),工作目录底下就一个txt文件,选项如图所示,但是生成的文件夹是空文件夹,可以请您指导一下吗?

yqw1231 commented 10 months ago

是的,我看他这个charset是1,所以我把上面的push 0x01改成了push 0x86

恩,有些游戏可能有多个createFont,有些并不是对话的文本用的,搜下是不是还有CreateFontIndirect? 还有就是有些游戏是不能转区或者是只能转区运行的,不然文字会有问题,都试试。

搜了一下只有createfontA,改完以后,运行保存的exe,一碰到文字,游戏就直接挂掉了,也没有什么报错。 image

satan53x commented 10 months ago

搜了一下只有createfontA,改完以后,运行保存的exe,一碰到文字,游戏就直接挂掉了,也没有什么报错。

那不一定是编码问题,一般编码只会乱码,不会闪退,编码范围没改完导致闪退的情况更多。 你直接用你原版的日文包Seen.txt,然后用改过的exe看,如果已经是乱码了说明exe的编码是改到了的。

yqw1231 commented 10 months ago

搜了一下只有createfontA,改完以后,运行保存的exe,一碰到文字,游戏就直接挂掉了,也没有什么报错。

那不一定是编码问题,一般编码只会乱码,不会闪退,编码范围没改完导致闪退的情况更多。 你直接用你原版的日文包Seen.txt,然后用改过的exe看,如果已经是乱码了说明exe的编码是改到了的。

试了一下用原版的seen.txt还是会崩溃。。我编码范围现在就只剩一个没改了,其他都改成FE72了

yqw1231 commented 10 months ago

搜了一下只有createfontA,改完以后,运行保存的exe,一碰到文字,游戏就直接挂掉了,也没有什么报错。

那不一定是编码问题,一般编码只会乱码,不会闪退,编码范围没改完导致闪退的情况更多。 你直接用你原版的日文包Seen.txt,然后用改过的exe看,如果已经是乱码了说明exe的编码是改到了的。

我在使用dbg调试的时候,还是能显示乱码的文字的,但保存以后就会发生挂掉的状况

satan53x commented 10 months ago

试了一下用原版的seen.txt还是会崩溃。。我编码范围现在就只剩一个没改了,其他都改成FE72了

奇怪了,原版Seen.txt即使不改exe也不会崩溃啊。原版seen再把charset改回去能正常运行吗?

yqw1231 commented 10 months ago

试了一下用原版的seen.txt还是会崩溃。。我编码范围现在就只剩一个没改了,其他都改成FE72了

奇怪了,原版Seen.txt即使不改exe也不会崩溃啊。原版seen再把charset改回去能正常运行吗?

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

satan53x commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

yqw1231 commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

只改编码范围不会崩溃,但是显示乱码,就跟dira佬视频里面那种乱码一样。 image

yqw1231 commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

总共确实有314个FE72,但是我听你的剩了一个没改,模仿的别人的exe

satan53x commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

只改编码范围不会崩溃,但是显示乱码,就跟dira佬视频里面那种乱码一样。 image

你这是中文包+只改了编码范围的exe吧。 那编码范围应该没问题,不确定你剩的那个是不是剩对了,测试也可以先全部改试试。 再试下日文包+只改86的exe呢,重新复制一个原版exe来只改charset。

yqw1231 commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

只改编码范围不会崩溃,但是显示乱码,就跟dira佬视频里面那种乱码一样。 image

你这是中文包+只改了编码范围的exe吧。 那编码范围应该没问题,不确定你剩的那个是不是剩对了,测试也可以先全部改试试。 再试下日文包+只改86的exe呢,重新复制一个原版exe来只改charset。

只改86的exe,用日文包和中文包都会挂,一到显示文字的地方就会挂。 我是这样改的: image

yqw1231 commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

只改编码范围不会崩溃,但是显示乱码,就跟dira佬视频里面那种乱码一样。 image

你这是中文包+只改了编码范围的exe吧。 那编码范围应该没问题,不确定你剩的那个是不是剩对了,测试也可以先全部改试试。 再试下日文包+只改86的exe呢,重新复制一个原版exe来只改charset。

我把两个createfonta上面的push都改了,然后我发现如果只改第一个的话,显示文本不会挂掉,但用中文包还是会乱码。两个都改就会挂

satan53x commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

只改编码范围不会崩溃,但是显示乱码,就跟dira佬视频里面那种乱码一样。 image

你这是中文包+只改了编码范围的exe吧。 那编码范围应该没问题,不确定你剩的那个是不是剩对了,测试也可以先全部改试试。 再试下日文包+只改86的exe呢,重新复制一个原版exe来只改charset。

只改86的exe,用日文包和中文包都会挂,一到显示文字的地方就会挂。 我是这样改的: image

看到了,你改错了,你把其他参数改到了,等于是函数参数变少了,push 01下边的两个push 00是其他参数,不能少。 直接把6A 01改成6A 86,只改86这一个字节,不要通过语句来修改。

yqw1231 commented 10 months ago

噢大佬,我的意思是用原版的seen和改过的exe,运行改过的exe还是会崩溃

恩,我的意思是你改过的exe包括charset86吗?把86改回去,只剩改编码范围的FE,用原版seen也会崩溃? 那是不是FE72改多了啊?一般是314个左右。

只改编码范围不会崩溃,但是显示乱码,就跟dira佬视频里面那种乱码一样。 image

你这是中文包+只改了编码范围的exe吧。 那编码范围应该没问题,不确定你剩的那个是不是剩对了,测试也可以先全部改试试。 再试下日文包+只改86的exe呢,重新复制一个原版exe来只改charset。

只改86的exe,用日文包和中文包都会挂,一到显示文字的地方就会挂。 我是这样改的: image

看到了,你改错了,你把其他参数改到了,等于是函数参数变少了,push 01下边的两个push 00是其他参数,不能少。 直接把6A 01改成6A 86,只改86这一个字节,不要通过语句来修改。

噢噢噢,我恍然大悟了,之前有些疑问也解决了,十分感谢你的指点

yqw1231 commented 10 months ago

请问现在Reallive引擎,写入的方式有什么改变吗,我用新版本写入的时候,发现没有任何文件输出在new文件夹,然后程序会直接结束。

yqw1231 commented 10 months ago

提取也会失败。 {'file': 'bin', 'workpath': 'D:/SExtractor-main/tools/RealLive/Seen.txt~/new', 'engineName': 'BIN', 'outputFormat': 2, 'outputPartMode': 1, 'nameList': '', 'regDic': '00_skip=[^\x81-\xFE][^\x40-\xFC]$\n11_search=\x40[\x00-\xFF]{2}【(?P[\x40-\xFE]+?)】([\x40-\xFE]+)$\n12_search=\x40[\x00-\xFF]{2}([\x40-\xFE]+)$\n13_search=^([\x40-\xFE]{4,})$\nignoreDecodeError=1\nseprate=\x23\x00\nsample=<暴力匹配文本需要截断,如果需要变长,脚本解密后可使用VNT提取>\n<仅匹配全角日文, 单个文件文本序号不超0x4040>\n', 'cutoff': True, 'cutoffCopy': True, 'outputFormatExtra': -1, 'noInput': False} 控制台输出这些信息,输出完以后进程会直接结束

satan53x commented 10 months ago

写入应该是没变化,只改了下正则,之前有部分可能漏提取。不知道是不是正则变化引起的。 好像是加了13_search和ignoreDecodeError,你删了就是之前的正则了。 但是最多写入行数不一致报错,应该不会引起提取闪退,后边没有更多的报错了吗? 你从cmd里边运行看看有没有更多的打印呢。

yqw1231 commented 10 months ago

写入应该是没变化,只改了下正则,之前有部分可能漏提取。不知道是不是正则变化引起的。 好像是加了13_search和ignoreDecodeError,你删了就是之前的正则了。 但是最多写入行数不一致报错,应该不会引起提取闪退,后边没有更多的报错了吗? 你从cmd里边运行看看有没有更多的打印呢。

这个是我从pycharm拷贝的打印,只打印了这些信息。

satan53x commented 10 months ago

那你把13_search和ignoreDecodeError删了能提取吗?不要放译文,只是提取。 推荐还是用VNT提取吧,我是暴力匹配的长度不能变要截断,不如VNT好。

yqw1231 commented 10 months ago

那你把13_search和ignoreDecodeError删了能提取吗?不要放译文,只是提取。 推荐还是用VNT提取吧,我是暴力匹配的长度不能变要截断,不如VNT好。

也不行了,老版本还是可以的。请问VNT是指的什么软件呀,是VNTextPatch吗

satan53x commented 10 months ago

也不行了,老版本还是可以的。请问VNT是指的什么软件呀,是VNTextPatch吗

对,galTransl里有它的图形界面。 还不行那应该就不是正则问题了,是不是你设置有问题,不是纯文本的bin不要勾选BIN使用纯文本

satan53x commented 10 months ago

主要是你这没错误打印就比较奇怪,光靠猜不好处理,建议直接cmd里运行。 或者是把运行.bat里边的@pause改成pause,以便观察打印。

yqw1231 commented 10 months ago

也不行了,老版本还是可以的。请问VNT是指的什么软件呀,是VNTextPatch吗

对,galTransl里有它的图形界面。 还不行那应该就不是正则问题了,是不是你设置有问题,不是纯文本的bin不要勾选BIN使用纯文本

vnt可以用的,我之前就想过用vnt来提取,但是那时候不知道seen.txt需要解包,所以也忘了。设置的话,我因为是直接覆盖的文件,所以设置应该没啥变化。请问BIN使用纯文本这个设置我好像没看到。 image

satan53x commented 10 months ago

哦,那可能是覆盖的问题,不要覆盖,之前移动过一次mainWindow.py,新的最好直接解压到新文件。 然后把旧的config.ini复制到新的main文件夹下边就有之前的配置了。 因为mainWindow.py已经移动到main文件夹了,直接覆盖就覆盖不到之前的根目录的py,所以现在你是读的旧的mainWindow.py,但是src里的脚本又是新的。

yqw1231 commented 10 months ago

哦,那可能是覆盖的问题,不要覆盖,之前移动过一次mainWindow.py,新的最好直接解压到新文件。 然后把旧的config.ini复制到新的main文件夹下边就有之前的配置了。 因为mainWindow.py已经移动到main文件夹了,直接覆盖就覆盖不到之前的根目录的py,所以现在你是读的旧的mainWindow.py,但是src里的脚本又是新的。

好的,谢谢啦

yqw1231 commented 10 months ago

image 抱歉又要麻烦你了,我用seenfix以后得txt丢进script jp,然后提取成json jp,然后重新注入的时候报了这个错误,请问你有遇见过这种情况吗?

yqw1231 commented 10 months ago

找到原因了,是因为vnt提取的时候把txt后缀删掉了,但是压回去的时候需要这个后缀

yqw1231 commented 10 months ago

刚刚发现虽然压回去没有报错,但是文件和script jp里的一模一样,所以说还是压失败了,感觉还是得用你的工具去压回去

yqw1231 commented 10 months ago

image 还是不行,没法用。 这个是我的文件,拜托大佬看一下是啥情况了 Seen.txt~.zip 麻烦您了

satan53x commented 10 months ago

运行还是闪退吗?报错打印信息呢?

yqw1231 commented 10 months ago

运行还是闪退吗?报错打印信息呢?

噢,忘记发了,抱歉 image

yqw1231 commented 10 months ago

我因为用的是anaconda,所以没法直接跑那个bat脚本

satan53x commented 10 months ago

python版本过低,要3.9以上。推荐是安装3.11,galTransl不支持3.12

yqw1231 commented 10 months ago

python版本过低,要3.9以上。推荐是安装3.11,galTransl不支持3.12

我cmd是3.11的,但是没法装PyQt5,所以我才用的3.8

satan53x commented 10 months ago

为啥没法装pyqt5,有报错吗?运行安装依赖那个脚本

yqw1231 commented 10 months ago

为啥没法装pyqt5,有报错吗?运行安装依赖那个脚本

是会有报错,然后没法安装成功,所以我在anaconda装了,但是具体报什么错误我也有点忘记了,反正现在是没法装的,我记得我还特意去pyqt5的官网下载,也没有用,搜了很久说是python版本不兼容。 image

satan53x commented 10 months ago

这个打印是说已经装过了啊,不是走的cmd吗? 你cmd是3.11的就用cmd运行bat。还是说因为cmd的pip是装到3.8的。 总之就是需要3.9以上,我平时是用的VSCode,VSCode的终端里可以切换python版本,如果你装了多个的话。

yqw1231 commented 10 months ago

这个打印是说已经装过了啊,不是走的cmd吗? 你cmd是3.11的就用cmd运行bat。还是说因为cmd的pip是装到3.8的。 总之就是需要3.9以上,我平时是用的VSCode,VSCode的终端里可以切换python版本,如果你装了多个的话。

我知道他这个是什么意思,我cmd是python3.11装不了,也用不了那个pyqt5。但我现在用anaconda装了个python3.9,搞定了谢谢。这个reallive的暴力截断,应该是只影响提取不影响写入的吧。

satan53x commented 10 months ago

我知道他这个是什么意思,我cmd是python3.11装不了,也用不了那个pyqt5。但我现在用anaconda装了个python3.9,搞定了谢谢。这个reallive的暴力截断,应该是只影响提取不影响写入的吧。

不是,是只影响写入,不影响提取,提取的时候勾不勾都不影响。 是写入的时候会截断和填充,让译文的字节长度和原文一致,就不会影响游戏读取文件里命令的偏移地址。 写入的时候要你自行勾选译文截断填充

yqw1231 commented 10 months ago

我知道他这个是什么意思,我cmd是python3.11装不了,也用不了那个pyqt5。但我现在用anaconda装了个python3.9,搞定了谢谢。这个reallive的暴力截断,应该是只影响提取不影响写入的吧。

不是,是只影响写入,不影响提取,提取的时候勾不勾都不影响。 是写入的时候会截断和填充,让译文的字节长度和原文一致,就不会影响游戏读取文件里命令的偏移地址。

噢,我的意思是,把翻译好的json,回封成txt。就是我目前的方法就是用vnt提取文本,然后用galtransl翻译,然后把翻译好的json_cn和json_jp分别放入trans和orig这两个文件夹,然后再点击“提取/写入”。因为vntextpatch没法回封成txt

satan53x commented 10 months ago

提取和写入要用相同工具。 因为json里边的信息是不足以直接生成txt的,json里只有文本文字信息。

yqw1231 commented 10 months ago

提取和写入要用相同工具。 因为json里边的信息是不足以直接生成txt的,json里只有文本文字信息。

好吧,那也就是说,我无法使用vnt来提取文本了,因为vnt封不回去。。。

yqw1231 commented 10 months ago

但既然json里面只有文本文字信息的话,只要我放入的是json,都可以封回去吧

satan53x commented 10 months ago

那得VNT和SE提取的原文json是一样的才行啊,如果提取的原文内容都不一样就没法复用json。 倒不是说具体文字,如果拼接格式不一样也不行,\r\n是工具加的拼接符,如果拼接不一样就不能复用。 比如有两句话,有可能VNT拼接了但是SE没有,即使文字内容是一样的,但是行数就不一样了。

yqw1231 commented 10 months ago

那得VNT和SE提取的原文json是一样的才行啊,如果提取的原文内容都不一样就没法复用json。 倒不是说具体文字,如果拼接格式不一样也不行,\r\n是工具加的拼接符,如果拼接不一样就不能复用。

是的,我发现了,点击“提取/写入”后,原先放在orig里的文件会被覆盖,导致行数不一样的没法被回封

satan53x commented 10 months ago

是的,我发现了,点击“提取/写入”后,原先放在orig里的文件会被覆盖,导致行数不一样的没法被回封

可以用对比工具对比两个工具的原文json,如果差异不多的话也可以手动处理一下。如果已经翻译完了的话。

yqw1231 commented 10 months ago

是的,我发现了,点击“提取/写入”后,原先放在orig里的文件会被覆盖,导致行数不一样的没法被回封

可以用对比工具对比两个工具的原文json,如果差异不多的话也可以手动处理一下。如果已经翻译完了的话。

嗯是的,目前只有这个办法了,意思就是说,我可以把vnt版本的json cn里多出来的句子合并成一个句子是吗?这样应该不会因为长度原因影响回封吧?

satan53x commented 10 months ago

不一定是合并,是看差异,根据原文的差异去处理译文,最后译文和原文行数就一样了。

yqw1231 commented 10 months ago

不一定是合并,是看差异,根据原文的差异去处理译文,最后译文和原文行数就一样了。

因为存在暴力截断,所以vnt提取的行数应该一定更长吧,所以我想的是用合并的方法

satan53x commented 10 months ago

还有一种自动的方法,就是把galTransl的格式转成ainiee的。两个列表json合并成一个字典json,这样就不存在行数问题了,只是最后导入后会在字典末尾加上未翻译的。