blogger

JackS·Zhao

人生就像开车在路上走,你我只是其中的一个驾驶员。送走老的、迎来小的,匆匆看过路边风景。一直向前行驶,却不知道是谁修的这条路。
传奇地图数据分析

时间:2021-9-28    作者:JackS·Zhao    分类: GameOfMir2(热血传奇)



本文系传奇素材网Arthas殿下原创,转载请注明出处。

首先祝大家新年快乐。

好了废话不多说。盛大早在传奇归来国际版时就开始测试推出“新画面”版本时,默默的加入了第三种地图格式:36字节地图格式。新画面版本的画面细腻,动态感更漂亮,赢得了好评。随后热血传奇也更新了新画面,还加入了全新的资料片“神龙帝国”,但是,这些地图只有少量新引擎支持使用,这让大量使用老引擎、老登陆器的GM们怨声载道。

我们常用的地图编辑器是不能打开36字节地图的,如图

看过我在本站发表的“GM的自我修养”系列的朋友,都知道老地图分为12字节地图和14字节地图,这36字节地图多出来的22字节又是干什么用的呢?
首先想到的是,多出来的22字节可能是增加了每个要素的长度,比如原来表示Tiles地砖需要2个字节,现在用4个字节表示,其他的小地砖,OBJ也是类似。但是等我去验证的时候,发现并非如此。

www.cfabc.net
[hide=5000]
用UE打开神龙帝国龙飞城的地图sldg.map文件,文件头的前4个表示地图大小的字节为 30 02 58 02,根据高位在后的原理,应该是02 30 02 58即 长为16进制数(230)16 =(560)10,宽为(258)16=(600)10,即龙飞城地图为560X600=336000个坐标点的地图。

UE的右下角我们可以看到地图的文件大小为12096052字节,那么除开52个字节的文件头,(12096052-52)/336000=36,可见龙飞城地图格式是36字节的。

可以发现,文件里有大量连续的 00 00 00 00 00 00 00 00 00...,这和我预料的中间夹杂00 的情况截然不同,由此我猜测,这些多出来的00会不会是直接加在老14字节地图的基础上的呢,会不会多出来的22字节是预留的空字节呢,于是我用替换功能,把22个00替换为空,如图:

发现居然有387816个地方被替换,比336000还要多,可见每个地图的坐标点都增加了22个00。经过细心验证比对,发现这22个字节都是直接加在14个字节后面的,由此新36字节地图格式真相大白。
为了验证这个结果,我又测试了神龙地穴这张地图sldx.map,地图大小为50X50=2500,替换22个00的结果是2501,所以基本上可以断定,新增的22个00可能是盛大预留的字节了,或者说是抵制SF也说得通。

结论:


新36字节地图格式是由14字节地图格式+22个多余节00构成。

根据这个结论,我们就可以制作出UE的宏来删除这些多余的空字节了。
我把sldg.map文件切割为3部分,打开3个UE来分别打开其中一部分,再用宏来删除这些多余字节,再把转换好的结果合并在一起,就成了老引擎、老登陆器能识别的14字节地图了。

由于我切割文件大小不一样,3个部分花的时间不一样,前两个分别用了7小时,第三个用了10小时,当然3者是同时进行的。如果哪位会编程的人来转换地图格式,写出工具来处理估计是1秒钟的事情。。。我的办法比较笨,但是实在

好吧,我也不知道哪儿处理问题,切割出来的3个文件sldg_1和sldg_3都没问题,但是sldg_2出了问题,可能是我哪儿切出错了吧,所以等我哪天空了再把sldg_2重新转换一次,哎,又要等7个小时。

合并后,用地图编辑器能打开了,由于sldg_2转换错误,所以中间的有问题,不过还是把结果给大家看看吧,如图:



小地图有点问题,不过方法是没错的,讲究看吧。

评论:

AC 2023-01-05 21:38
I read your Mir2(传奇) ImageEdit C # code in Github.

I want to ask you two questions.

1. Is this C# code original?

2. Do you C# code Mir2 Server files?
JackS·Zhao 2024-10-02 01:07
@AC:Yes,I C# code Mir2 Server files