欢迎来到 Mario Forever 百科!编辑前请创建一个账号,或使用现有的账号登录;并认真阅读用户须知

自2020年7月14日起,未验证邮箱的用户将无法编辑页面。请前往参数设置验证邮箱,谢谢您的配合。

Mario Worker关卡文件结构

来自Mario Forever 百科
跳转到导航 跳转到搜索

本文介绍Mario Worker的关卡文件(即.mfl文件和.mfs文件的结构)
原文载自百度永远的玛丽吧的帖子《哈哈,终于知道用MW生成的mfl文件和mfs文件的结构了,发帖庆祝!》,原作者为@_AgOH 。在转载的过程中编者对原文进行了重新排版与整理。 习惯上大家认为MW的关卡文件结构由_AgOH发现,但是根据已有资料,这项研究成果可能是由_AgOH和lyh在那段时间分别独立发现的。

压缩方式

MFL文件和MFS文件均使用Gzip格式压缩,可以轻松地使用 WinRAR或 7-Zip 打开,打开后里面是一个纯文本文件。运行时产生的.mfsx文件即为.mfs文件解压缩后产生的文件。我们暂时把解压缩后的MFL文件称为MFLX文件

MFLX文件的结构

头部(Header):

我们把BlocksDataStart之前的数据称为MFLX文件的头部,这一部分储存着关卡的基本信息,一共10行,大多可以在PREF'S部分设置。

含义 举例 举例释义
1 (关卡长度*32)+10 6410 关卡长度=(6410-10)/32=200
2 (关卡高度*32)+10 650 关卡高度=(650-10)/32=20
3 关卡名称 1-1 关卡名为1-1
4 关卡作者 _AgOH 关卡作者为_AgOH
5 关卡时间 400 关卡时间为400s
6 重力(1-5) 4 重力为4
7 库巴能量 10 库巴一共10格能量
8 水的深度信息 1900 这个数据的计算方法较为复杂,目前尚在研究当中,数值越大,水就越浅
9 关卡背景 3 第3个背景(GRASSLANDS)
10 背景音乐 7 音乐7(Map2)

方格数据(BlocksData)

下面我们就要进入mflx的核心了,这一部分存储的是Blocks的信息,其内容介于BlocksDataStart与BlocksEnd之间。
咋一眼看去,哇,都是0101,看不懂?其实,不要担心,这不是2进制数据,更不是乱码,而是每一个方格的Block信息!
其实Softendo在这一点上的处理相当弱智------他居然使用遍历的方法,每一个方格的信息都写入,即使这是个空的方格!
BlocksData一共分为n行,每一行对应关卡的一行,例如关卡的高度为50,那么一共就50行。
每一个方格占用2个字节储存信息,例如关卡长度为300,那么每一行就有600个字节。
储存每个方格Block信息的是利用对应Block的ID,如水管管体左部为17,右部为18,而如果什么都没有就用00来存储(具体每个Block的ID是什么就不说了,相信大家也不太需要这些数据)。
了解了这个规则,再看一看文件,不可思议的事情发生了:由1~9这9个数字居然组成了这个地图!多么完美的地形!!!

其它数据(Other Data)

上面说得这么多,您可能要说了:关卡的内容不仅仅是Blocks啊,还有风景(Scenery)、敌人(Enemies)等,呵呵,不要着急,BlocksEnd下面还有东西呢!
BlocksEnd下的数据分为若干行,每一行有11个字节,不过这些数据就更难解读了,先来说说基本格式吧:
21800640480

218:物品ID
0064:物品X坐标(是乘上32之后的结果)
0480物品Y坐标(是乘上32后的结果)
这里坐标的计算原则与我们平时不相同, 左上角为(0,0)往右X坐标增加,往下Y坐标增加
因此,上面的数据被解析为:在坐标(2,15)下放一个实心块(实心块的ID为218)
又如:
00132640448
含义为:在坐标(102(=3264/32),14(=448/32))下放一个Gommba(ID=001)

具体的物品与其ID的关系,有兴趣的朋友们可以去研究研究~

OK,貌似这个文件都分析完了?不对,后面怎么还有三个小黑块??呵呵,其实这个并不是什么神秘的东西,它只是标记这个文件的结束罢了~呵呵~

OK,mfl分析完了,下面该分析MFS了。。。

MFSX文件的结构

其实mfsx文件就是几个mflx的简单拼接,并未经过任何特殊处理,因此要反编译这些文件是相当简单的!!当然mw为了识别每一个关卡,还是要加一些分界线的,好了,现在什么都不说了,立刻开始吧!!

头部(Header)

除了mfl文件之外,mfs文件还要储存一些特殊信息,但是这样的信息只有1项:Mario的生命数,所以MFS文件的头部也只有1行!这一行就是Mario 的生命数,如15。 下面就是mfsx文件的主体了。

关卡分界线(New Level)

在mfs里,New Level字符的出现,将意味着一个mfl文件的结束(关卡1除外),以及另外一个mfl的开始。所以,New Level就是关卡的分界线啦~

小关卡主体(MFL Body)

在两个New Level之间的数据是这个关卡的主体,将它提取出来就是mflx文件啦!其实这就是反编译的原理,后面我会详细介绍~

结束标志(The End)

与mflx相同,mfsx同样使用一个小黑块作为文件结束标志。

如何把mfs文件反编译为mfl文件

其实可能部分朋友看到这里已经学会反编译的方法,不过为了方便新手们学习,这里还是在唠叨几句k~

所需工具:支持GZip解压缩的工具(如WinRAR、7-Zip、GZip等)、支持GZip压缩的工具(如7-Zip、GZip等)、一个mfs地图文件。

OK,操作开始----

  1. 使用GZip解压工具打开MFS文件,提取出里面的MFSX文件。
  2. 仿照2.3的方法,从里面提取出mflx文件。
  3. 使用GZip解压工具将mflx文件压缩,然后扩展名改为mfl。

OK,现在------大功告成!用MW打开反编译后的MFL文件,看看我们是不是成功了!