[文献] 关于MW的二三事

[复制链接]

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-7 13:23:18 | 显示全部楼层
蓝色开关砖的二级功能是切换流体的显/隐。流体的显/隐无法被CP保存。游戏开始时流体固定是显状态,如果顶了蓝色开关砖,则流体会消失不见,但自动流体和流体砖仍能改变流体高度,红开关也能改变流体类型(只是看不见而已)。再次顶蓝色开关砖,流体会在其应有的高度、以应有的类型显形。
但是需要注意,如果在流体是隐状态时触发了带改变流体高度的场景控制元件,则流体的隐状态会失效,流体会显形并处于场景控制元件的设置的高度。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-8 13:34:16 | 显示全部楼层
紫色开关砖的二级功能是切换所有的探照灯的旋转方向,相当于把所有探照灯的转速乘以-1。
白色开关砖的二级功能是同时切换所有基础颜色(红、黄、绿、青、蓝、紫)对应的阴阳砖。当然白开关本身也能切换白色阴阳砖,因此触发带有二级功能的白色开关砖的实际效果是同时切换除黑色外的所有颜色对应的阴阳砖。
黑色开关砖的二级功能是同时触发所有基础颜色开关砖的二级功能。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-9 22:51:00 | 显示全部楼层
再次提醒阴阳砖的状态(包括与二级功能相关的各种状态)是无法被CP保存的,从CP复活时,所有状态都会还原成初始状态。
阴砖在游戏开始时有一瞬间的实体判定。如果将板栗、乌龟等敌人与阴砖重合放置并在游戏开始时触发,则它们的运动方向会与预期相反(因为与阴阳砖发生了一次碰撞)。
图235.png 图236.png
还有一个比较离谱的BUG。脚踩桥(移动桥、桥实心或单向实心)+无横向速度+与实体重合=马里奥传送到关卡最顶部。如下图的摆放就可以在游戏开局触发这一BUG(因为阴阳砖有一瞬间的实体判定)。当然游戏中也可以在阴砖切换成阳砖时触发这一BUG。
图237.png

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-10 18:57:33 | 显示全部楼层
编辑界面的全部内容已经介绍完了,接下来会简单介绍一下代码技术。事实上现在SMWP编辑界面的功能已经比较强大,一般来讲做绝大多数普通的关卡没有太大必要使用代码技术了(至少我已经很少用了)。但是在一些特殊需求下,通过代码技术对关卡进行编辑还是会方便不少的。
简单来说,代码技术就是对关卡的源代码进行直接的操作。我认为目前来讲,代码技术主要用于生成或修改【大批量】,且分布【有规律】的物件。这种情况下,通过使用文本文档的复制、查找和替换等功能,或Excel软件的自动填充功能,或代码机器等方式对相关物件的代码进行批量的操作会比在编辑界面手动操作方便得多。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-11 12:53:34 | 显示全部楼层
只有单关(.smwl或.mfl)和未加密的作品(.smws或.mfs)可以查看和修改代码,加密的作品(.smwp)无法查看代码。
每个关卡的代码文件实际上都是一个文本文件,但是如果我们直接把关卡文件的后缀改成文本文件的后缀.txt直接打开,或直接双击关卡文件选择用记事本打开,看到的一般都会是一大堆乱码。为什么会这样呢?实际上,SMWP在保存单关,或生成作品时,都会对关卡的代码进行压缩,因此只有解了压缩才能看到关卡真正的代码。
查看代码的正确方式为:将文件后缀改为压缩包文件的后缀(.rar或.zip),然后打开压缩包,双击里面的文件,选择用记事本打开,这样就可查看到代码了。代码中绝大多数的内容应该是数字,如下图。
图238.png
如果打开压缩包时跳出提示“这个压缩文件格式未知或数据已经被损坏”,说明这个关卡文件没有被压缩,那么此时可以直接双击文件选用记事本打开。从文件的大小上也可以大致判断关卡文件有没有被压缩,未被压缩的文件的大小一般会比压缩文件的大小大数倍。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-12 16:48:42 | 显示全部楼层
接下来介绍一下代码文件的结构。首先来看单关的代码文件。
一个单关的代码文件从上到下大致可以分为四部分:
基本信息部分——对应于编辑界面PREF’s中填写的关卡信息,以及关卡尺寸、初始背景、BGM和流体高度等内容。
BLOCK’s部分——对应于编辑界面的BLOCK’s的布局。
物件部分——对应于编辑界面除BLOCK’s外的所有物件。
附加设置——对应于编辑界面PREF’s中ADDITIONAL SETTINGS中的部分内容。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 2025-1-13 13:08:23 | 显示全部楼层
基本信息部分为代码文件开头到BlocksDataStart之前的部分。
图239.png
第1行和第2行分别是关卡的长度和高度,单位为像素。
第3行是关卡的标题。第4行是关卡作者。第5行是时间。第6行是引力值。第7行是库巴血量。这些都与PREF’s中相应的内容对应。
第8行是流体高度,对应于ADDITIONAL SETTINGS中的WATER LEVEL。
第9行是背景序号,第10行是BGM序号,分别与PREF’s中选择的关卡背景和关卡BGM对应。每个背景和每个BGM都有一个对应的序号,对应关系可查看代码列表

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 7 天前 | 显示全部楼层
附加设置部分为代码文件底部从modifiedmov=X开始到version=X结束的部分。
图240.png
除了最后一行外全部对应于ADDITIONAL SETTINGS中的设置,结合英文单词不难理解各行的含义,不再赘述。
最后一行代表该关卡制作时使用的SMWP版本号,用于打开关卡时的版本检测。如果用较低版本的SMWP打开了较高版本的SMWP制作的关卡(不建议这样做),会跳出提示提醒“可能会因版本差异而导致部分内容丢失”。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 6 天前 | 显示全部楼层
本帖最后由 马里奥奥里马 于 2025-1-15 15:04 编辑

BLOCK’s部分为从BlocksDataStart开始到BlocksEnd的部分。查看BLOCK’s部分时建议取消记事本的自动换行功能(格式-自动换行)。
图241.png
关闭自动换行时,BLOCK’s部分的代码行数就是关卡的纵向格数,从上到下每一行的代码就对应了关卡中从上到下每一行的BLOCK情况。SMWP中每个BLOCK都对应一个二位编码,例如空BLOCK对应00,绿色草地的左上部分对应01,85号砖对应85,紫砖对应C9等等。因此,BLOCK’s部分每一行的代码中,从开头开始每相邻两个字符就对应了该行中的一个BLOCK。
BLOCK’s部分的代码某种程度上还是很“形象”的,基本上就是把关卡中的BLOCK布局用代码的形式重新“画”了出来,仅仅通过代码也能大致看出关卡中的地形样子。例如从上图的BLOCK代码可以看出关卡左侧部分的地形大致就是:上方空白,下方有三行紫砖。从BLOCK’s部分的代码格式也可以理解为什么BLOCK无法微调——因为这种代码格式相当于强制要求BLOCK只能处于格点位置。
需要注意,BLOCK’s部分的代码可能会有一个多余的0行,如上图的代码对应关卡高度为15格,但BLOCK’s部分代码有16行,最下方一行就是多余的0行。多余的行不影响关卡运行(只要不少行或者少列就行)。此外,如果关卡横向格数太大,一行的字符数可能会非常多,这时即使在记事本中关闭了自动换行也可能会换行展示(可能是超出了一行能容纳的上限)。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 5 天前 | 显示全部楼层
代码剩余的部分均为物件部分,在代码文件中占比最大。物件部分的每行代码均对应于一个关卡中摆放的非BLOCK’s的物件。
绝大多数物件代码的长度为11。前三位是物件的编号,后八位是物件的坐标。后八位中前四位是横坐标,后四位是纵坐标,均以像素为单位。10000像素以内的坐标直接用四位数。对于大于等于10000的像素,前两位数将转化成字母编码,即A代表10,B代表11,C代表12,以此类推,大写字母轮完一遍后再继续用小写字母,即Z表示35,a表示36,一直到z表示61。最大的像素数为z999即61999像素,约1937格。
例如,031B9520144代表坐标位于(B952,0144)即(11952,144)的布布鬼(布布鬼的物件编号是031)。物件编号可以在wiki的代码列表查看。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 4 天前 | 显示全部楼层
有一些带参数的物件的代码长度可能不止11,多出的参数即对应该物件的参数。例如探照灯的代码结构为020XXXXYYYYrrraaavvv,前11位即为编号+坐标。第12~14位即rrr为半径,第15~17位即aaa为初相,第18~20位即vvv为转速。
例如,02050880160160270359代表灯芯位于(5088,160),半径为160像素(5格),初相为270度(正下方),转速为359(顺时针1度/帧)的探照灯。
这里不再列举更多带参数物件的代码结构,有需要的朋友可自行研究或查看wiki代码列表

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 3 天前 | 显示全部楼层
通过代码技术,有可能可以设置出一些超出编辑界面限制的参数。例如可以把时间设置成超过编辑界面上限10000,把库巴血量或引力值设置成小数等等。
对于物件部分的代码,我们当然也可以通过代码技术直接修改物件的一些参数,甚至可以把一些参数设置成小数或负数。但是修改这一部分代码时需要注意,不管设置成什么参数,代码的位数是不能变的,这就可能导致无法设置出一些想要的参数。例如修改坐标时,由于坐标是四位长度,如果是负坐标的话负号就要占一位,因此最小的坐标只能是-999,无法比它更小。再例如修改探照灯转速时,转速在探照灯的代码结构中占三位,因此逆时针的最小转速可以设置成.01(即0.01,整数部分为0的小数可以省略整数部分的0),而顺时针的最小转速只能为-.1,原因同样是负号多占了一位。

9

主题

322

回帖

4

精华

版主

经验
4215
硬币
814 枚

第二届MW杯冠军请务必再光临秘密合战!请务必再光临秘密合战!他山之石盲猜大王

 楼主| 发表于 前天 21:23 | 显示全部楼层
与编辑界面相关的内容差不多讲完了。接下来暂时停更一阵。
您需要登录后才可以回帖 登录 | 创建账户

本版积分规则