- UID
- 1221295
- 主题
- 19
- 阅读权限
- 20
- 帖子
- 230
- 精华
- 0
- 积分
- 158
- 金钱
- 1805
- 荣誉
- 4
- 人气
- 27
- 在线时间
- 560 小时
- 评议
- 0
- 帖子
- 230
- 精华
- 0
- 积分
- 158
- 金钱
- 1805
- 荣誉
- 4
- 人气
- 27
- 评议
- 0
|
其实研究这东西,是想等着太六出来的,但是有达人说太六是不会出来了,绝望了,所以我也没心思整这个了,无限期的搁置,抱歉让大家失望了。。。:
最新进展:
1.[20080611 00:00] 已能用脚本更新所有属性。
2.[20080621 03:09] 发现几个隐藏发生契机,其中两个已经弄明白。
不知道太阁六还出不出,太五五经玩了无数遍而厌烦了。我曾经想过逆向游戏程序,如果成功了,就能把里面的一些重要的函数分析出来,暴露出来供我们使用javascript或者vbscript脚本或其它程序语言调用。这样可以实现很多有趣的功能,很多用剧本或者修改器无法实现的功能,可以从根本上控制游戏。
开始尝试过一下,弄了几天,它的壳都脱不掉,比较灰心。
然后在对写剧本很产生兴趣,但是写剧本全是日文,拷过来拷过去相当没有效率。于是我产生了一个想法,要把这个编译器全部汉化,包括它的指令。本着这个目的,我开始逆向剧本编辑器,经过研究,我发现“T5EvDatTbl.dat“里装有相当关键的数据。比如说人物属性编号,人物属性id,人物属性可否使用更新语句更新等等。
编译器都是要进行词法分析的,因此估计这个文件的格式是文本格式存放的名词,但是打开却是是一堆乱码,就是说,是加了密的。经过几天努力,我逆向出了编译器的解密算法,然后将里面的数据全部提取出来了,生成了一个html文件(见附件T5EvDatTbl.rar)。
摘取其中很小一部分[20080809:16:04更新]:
索引 | 番号 | 識別子 | 名称 | データ種類 | 更新可能 | 説明 | 5847 | 1 | LORDPERSON | 所属当主 | 人物 | FALSE | [空白] | 5848 | 2 | RANK | 身分 | 身分 | FALSE | [空白] | 5849 | 3 | ENTRY_FLAG | 出現フラグ | ローカル列挙 {未出現,出現済み} | FALSE | [空白] | 5850 | 4 | DEAD_FLAG | 死亡フラグ | ローカル列挙 {生存,死亡} | FALSE | [空白] | 5851 | 6 | SORTIE | 出撃フラグ | ローカル列挙 {平常,出撃中} | FALSE | [空白] | 5852 | 7 | SICK_FLAG | 病気フラグ | ローカル列挙 {健康,病気} | TRUE | [空白] | 5853 | 8 | ABSENCE | 留守フラグ | ローカル列挙 {在宅,留守} | TRUE | [空白] | 5854 | 9 | MET | 面識フラグ | ローカル列挙 {面識なし,面識あり} | FALSE | [空白] | 5855 | 10 | FRIENDSHIP | 親密度 | 数値 | TRUE | [空白] | 5856 | 11 | BASE | 所属拠点 | 拠点 | FALSE | [空白] | 5857 | 12 | POST | 立場 | ローカル列挙 {大名,直臣,陪臣,寄騎,その他,無効} | FALSE | [空白] | 5858 | 13 | INFTYPE | 所属勢力タイプ | ローカル列挙 {大名家,商家,忍者衆,海賊衆,浪人} | FALSE | [空白] |
这是一个完全实现对编译器的控制的进程中,不小的一个进步。我对编剧编写不在行,不过我想在大家编写剧本的过程中,这个文件即使只作为参考也应该是会非常有用的。因为它包含了所有的剧本可用的属性名词和其的相关属性。
到此,逆向研究算是有一点成果了。在此基础上,根据解密算法写出加密算法后,利用加密算法可以任意修改这个”T5EvDatTbl.dat“文件。这样从理论上就能可以实现以下功能:
1.可以把不可以用更新语句更新的属性,修改为可以更新,这样编译器遇到这样的更新语句就不会再再报错,能够顺便编译生成剧本文件。不过目前还不能确定,能够通过编译在就意味着剧本事件里更新能不能成功。这要看太阁在执行脚本时,针对属性脚本而进行的操作。
2.可以汉化绝大一部分脚本指令。说绝大部分是因为,其实这个文件里包含的只是名词,而指令字符串则是放在”Tai5UEC.exe“里的。不过“Tai5UEC.exe”里的指令字符串是明文存放,没有加密。汉化起来很简单的。
3.如果说编剧编辑存在某些隐藏属性的话。那么你们应该在这个“T5EvDatTbl.html”里应该能找到所有的隐藏属性。
dqh3000:[原创] 本人的无聊终于被满足了……有关剧本中属性的更新
对比这个发现和解密得到的数据,我发现里面的那些属性之间的相对位置,和这个解密出来数据中的属性之间的相对位置之间,是可计算的。就是说,可以利用已知指令的属性,计算出未知指令的属性。因此,结合他的发现,以及这个数据文件,不难整理出所有剧本中能更新的属性的编译后的指令格式,然后可以进行替换。
[20080608:11:34编辑]:隐藏属性好像没有在那个表出现。看上表135到150的属性都是是没有的,估计这个区间的属性就是某些隐藏属性。比如说dqh3000发现的那个人物消失属性(编译后的指令为03 47)。经过与其它属性的相对距离计算,这个人物消失的属性其索引值是142,正好在这个区间内。这可以一定地证明这个区间是隐藏属性区间。大家不妨一个个地测试,然后给这些隐藏属性命名,再写回数据文件。以后就可以当作非隐藏属性一样,在剧本里更新了。
4.这个文件包含的信息量比较大,我没有仔细分析。大家可以再看看有什么可以利用的。
目前汉指令简体中文化从理论上来说已经完全可行。对于一个人来说,、还是有相当的工作量。还有如果要汉化,那么一定要有一个团队来定制一个标准。否则以后的剧本源代码就会出现不兼容或其它的问题,就是说你的编译器只认你的源代码,我的编译器只认我的源代码,大家的源代码互相不能通用,这个会是很严重的问题。所以现在大家来讨论一下,有没有必要汉化所有指令。
附件解压可得T5EvDatTbl.html。大家一看就明白了。
[20080609:14:25编辑]:今天看了一下这个表,还可以更进步整理分类。
[20080609:15:57编辑]:修改了一下代码把那些丢失的信息补上了,修改了枚举类型(ローカル列挙)的格式,见上表
[20080610:10:08编辑]:这个数据文件似乎是不包含任何指令的,只是一些名字属性和值。指令应该是存放在”Tai5UEC.exe“里面的,名文存放,很好提取。只是指令的详细调用格式还需要逆向程序算法。
[20080611:23:35编辑]:今天下午花了点时间看这个解密算法,发现这个算法其实本身也可用于加密,于是将所有的属性修改为可更新,然后加密回去,写了以下几个语句测试,先用以前没有修改的文件进行编译,提示属性不可更新,再换成修改以后的文件,竟然顺利编译。然后用脚本进入游戏,随便选个男性人物,主人公回家的时候,惊喜的发现,真的有鍛冶屋了,年龄也变成了44岁。证实了我以前想法。真是一个让人高兴的进展啊。- 更新:(人物::主人公.年齢)(44)
- 更新:(人物::主人公.性別)(女)
- 更新:(人物::主人公.自宅隣接仕事場)(鍛冶屋)
复制代码 说明一下如何让脚本可以更新所有属性。下载附件当中的T5EvDatTbl可更新所有属性.rar,然后解压覆盖剧本编辑器下边的同名文件(最好先备分)。然后你就能写脚本测试以前不能更新的属性了。顺便整理了一下那个数据表,将人物的属性整理出来了,见附件人物全属性(不含隐藏属性)).rar
[20080615:15:30编辑]:今天尝试着给编译器增加两个“个人站开始时,个人战终了时”的发生契机,发现必须要同时修改Taikou.exe和Tai5UEC.exe,T5EvDatTbl.dat。后两者修改起来比较容易,Taikou.exe是用SafeDisc加壳的(这也是杀毒软件误报为病毒的原因,因为加密加壳方式,使用了很多的病毒技术。),网上也没找着脱了壳的版本。还得自己手脱,也不知道脱不脱得了。Tai5UEC.exe和T5EvDatTbl.dat虽然修改起来比较容易,但是涉及到内部的数据结构对齐等问题。也需要进一步地调试程序。加上最近工作原因,所以进展比较缓慢。
关于一些属性可以更新,但在游戏中不能生效的问题,这个是游戏本身的限制。要使之生效,也要修改Taikou.exe。
现在的主要问题就是脱壳问题,希望有哪位高手能帮着脱一脱。
[20080621:02:58编辑]:周末弄了一下,发现了几个隐藏脚本发生契机,其中两个已经弄明白,在脚本里测试编译通过。不过具体作用不清楚,用处应该不是很大。因为和已经存在的两条发生契机似乎是差不多的。
"野戦画面表示後"
"攻城戦画面表示後"
"ゲームオーバー時" (游戏结束时发生?目前估计只有一个参数)
"ゲームクリア時" (何时发生?目前估计只有一个参数)
"チャプター凍結時" (何时发生?无参数)
前面两条已经弄明白使用方法,后面两条需要进一步地看下。
- 野戦画面表示後(所属勢力1,所属勢力2)
- 環境変数:
- 所属勢力1の軍団 : 軍団1
- 所属勢力2の軍団 : 軍団2
- 所属勢力1 : 発生勢力
- 攻城戦画面表示後(所属勢力1,所属勢力2)
- 環境変数:
- 所属勢力1の軍団 : 軍団1
- 所属勢力2の軍団 : 軍団2
- 所属勢力1 : 発生勢力
- 例如
- 発生契機:野戦画面表示後(甲賀衆,伊賀衆)
- 発生契機:攻城戦画面表示後(甲賀衆,伊賀衆)
复制代码
希望大家都能把测试出来的问题反馈上来,我好进一步地改进。
[ 本帖最后由 neohost 于 2008-12-3 10:58 编辑 ] |
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
-
总评分: 金钱 + 100
+ 5
查看全部评分
|