标题: 求助 关于data的结构
性别:未知-离线 岭(云定)
(岭)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 18
编号 148474
注册 2007-4-28


发表于 2007-4-29 14:24 资料 短消息 只看该作者
求助 关于data的结构

data.e5的ls12文件头前端和终端有什么特殊意义?


顶部
性别:未知-离线 岭(云定)
(岭)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 18
编号 148474
注册 2007-4-28


发表于 2007-4-29 16:46 资料 短消息 只看该作者
呵呵,今天偶然发现的关于data.e5
从110h开始 有10个段
00004000 char.dat的大小16384
0000018c top.dat的大小 396   char.dat的首偏地址
00000a28 item.dat的大小 2600
0000418c item.dat的首偏地址
00000828 shopsetting.dat的大小 2088
00004bb4 shopsetting.dat的首偏地址
00000597 troop.dat的大小 1431
000053dc troop.dat的首偏地址
00000654 terrain.dat的大小 1620
00005973 terrain.dat的首偏地址
000013f6 magic.dat的大小 5110
00005fc7 magic.dat的首偏地址
00002200 未知段1的大小 8704
000073bd 未知段1的首偏地址
000006e8 未知段2的大小 1768
000095bd 未知段2的首偏地址
00000484 未知段3的大小 1156
00009ca5 未知段3的首偏地址
000004c2 未知段4的大小 1218
0000a129 未知段4的首偏地址
0000a5eb 总文件大小 42475


顶部
性别:未知-离线 岭(云定)
(岭)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 18
编号 148474
注册 2007-4-28


发表于 2007-4-29 16:56 资料 短消息 只看该作者
根据上面的资料,可能可以在Data.e5扩展而不需要太多的exe修改.
顶部
性别:未知-离线 岭(云定)
(岭)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 18
编号 148474
注册 2007-4-28


发表于 2007-4-29 17:03 资料 短消息 只看该作者
顺便看了一下岳飞的data 真的扩展了
求达人说明一下.
顶部
性别:男-离线 岱瀛
(deving)

长平侯
川峡东路经略使
监管使

Rank: 19Rank: 19Rank: 19Rank: 19
组别 经略使
级别 左将军
好贴 1
功绩 2293
帖子 1370
编号 55810
注册 2005-12-22
来自 人间
家族 慕容世家


发表于 2007-4-29 22:25 资料 个人空间 短消息 只看该作者
Data文件,可以简单的理解成游戏的本地库吧。原来是经过LS算法压缩过的,不过这个在long long ago 就有Van大的破解LS压缩算法的反压缩了。

我们现在做的MOD,全部用的Data事实上都是解压过的。叶落的修改器我记得是带有解压功能的。

那么,对于解压后的Data文件,事实上他已经就没有秘密可言了。

而exe和data的关系是什么呢?

exe是游戏的核心引擎,他要一些初始数据,从Data中读取,根据曹操传引擎的特征,应该说很多小型的桌面或者客户端程序,对简单的本地库也常用这种做法,就是一次性把数据Load进内存。

这个Data文件有个很重要的特征,是只读的,不写的,这也是过去他用LS算法压缩的原因。LS压缩率不高,但是解压方便快捷,能一次解压Load进内存,由于数据的不更改性,他无需压回去。


象曹操传,存储用户数据的是存档,那个才带有写入功能。

这是存档和Data作为数据方面相比的差异性。但是,他们运行的时候,都是一次性的加载入内存,而不会去时时I/O读取的。

那么,回过头再看Data,楼主的想法问题。

解压后的Data,其实已经基本就是一份内存中的拷贝了。 所以说,你可以随意的改变Data的内容,Data的结构,(过去压缩的就不行,改完就解不了了),但是,随意修改Data的内容,Data的结构,有效吗?

答案是,如果Exe不跟随变更,显然无效。

楼主可以搜索下ssbye的关于曹操传FPE修改的贴子,你会发现,里面内存中的值多么的似曾相识。

修改Data,比如东方教主以前的扩展1024Data,首先就是得在exe的进程空间中分配出新的一块足够的内存空间来存放这1024人的资料。

而Data的扩展,只是二进制文件长短的变化而已。从文件的哪个位置,哪个字节的划分,那全是在exe里的控制的。

C语言的fseek函数,不知道楼主了解否。

另外一个关于Data变化的,就是五围从单字节改成双字节,这其实也是这样的道理。但是那个改动没有破坏Data的结构,只是把表示名字的字节空间给缩了,盈出字节来记录五围,exe里相应的读五围的代码改动下就完成了。这个其实也是楼主想横向扩展Data的一种可借鉴的方法。不过只改Data,不动Exe那是远远没那么便宜的事情的。还有,象你说的那种义理,斗志等类似增加五围到六围,七围的做法,还要考虑去修改exe的资源,至少得让武将信息里能显示出来吧。这些也是需要修改exe的。


扩展Data的例子还有,比如隋唐的扩展宝物总量。

还有听姑姑说轩辕传里也扩展过策略的总数。

这些都是扩展Data的做法。当然,你所谓的纵向的比较多。其实就是一偏移的问题。

当然了,纵的比横的扩展好扩,特别是如果横的那种扩展,不是从原来的信息里盈出字节,而是扩展字节那样。

这个有点类似于数据库里,增加记录总是比加字段改变表结构遇见的问题来得简单。

楼主用UE探索Data的精神还是需要鼓励的。作为一个Moder,正需要这种精神。不断探索,不断尝试是MOD进步的要求。

所以,哪怕现在你真的不想改exe,在这Data里的数字中,也说不定能玩出自己的花样来。

--------------------------

不过,又想多说几句。个人觉得曹操传引擎的Modify已经是达到了一种比较颠峰的境界了,本区名为设计与修改,当然也得提倡下设计的气氛。

OO世界里,本人对其中的一条 开闭原则倒是颇为认同。 面向修改关闭,面向新增开放。不过这和MOD似乎是背离的。不过,能达到目的就是好事吧。

所以,我个人对曹操传的修改,更喜欢的一种手法是封存其原来的,新添我们自己的。原来的有用则存,无用则封,现在的需要则增。

瓦岗的exe,我把战场特殊形象就给迁移出来,没有象过去那样存在于exe中,这部分数据,本来应该是在Data里的,更应该是在Data的个人信息里的,不过以开闭的设计原则,我自己就建立了一个person.wa的文件,其中的信息就有每个人的战场特殊形象的信息,是1024人都有的。

还有,数据信息的存放我也没有混进原来的存档中,而是单独建立一个b类型的存档。

象绝招,指针变量,整数变量这些新增内容,其实都存放在B存档中,这也是叶落说发现原来三个存档没什么变化的原因所在。

---------------

直接的下手修改,还是以封,存,添的设计手法修改,其实目的也都是为了心中期望的效果。

难易和繁琐程度嘛,修改也许容易,却不容易维护,而且容易出BUG。而设计手法虽然麻烦,虽然写的辛苦,却BUG能控制住,维护简单。

两者因人而异,楼主愿意研究也可相互参详。
顶部
性别:未知-离线 岭(云定)
(岭)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 18
编号 148474
注册 2007-4-28


发表于 2007-4-30 00:26 资料 短消息 只看该作者
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针,offset为偏移,origin 为标志是从文件开始还是末尾。应该是这样的吧!
岱大哥,你没有觉得没有用的四个段很可疑吗?
还有用w32dasm 看到了很多标签.这是w32dasm的优点吧!
现在把.text提出看.
ida有整体的函数脉络.
容易分清函数的开头.
个人觉得pe结构的ekd5象机器的剧本.
希望岱大哥的exe的修改器象van达人和 z 达人 剧本修改器一样.
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-8-24 00:52
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.011491 second(s), 10 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP