[文献] 关于MW的二三事

[复制链接]

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

 楼主| 发表于 2025-1-3 17:59:07 | 显示全部楼层
场景控制元件也可以和库巴联动触发。联动触发的摆放方式为:将场景控制元件放在库巴的右侧1格。放置完成后,这库巴和场景控制元件之间会有一条短横线连接,代表二者已经绑定成功,如下图。
图233.png
完成绑定后,该场景控制元件的效果将在该库巴被触发时触发。注意这里的库巴被触发是指马里奥和库巴横向相距一屏左右或以内,即触发库巴的移动,并不是指触发以该库巴为目标的库巴滚屏。
例如在横向关卡的最左侧起点附近先放一个立即摔死的库巴,然后在最右侧也放一个库巴,构建起从左到右的库巴滚屏。如果这两个库巴都绑定了场景控制元件,那么会生效左侧库巴的绑定的元件,右侧库巴的元件的效果要到屏幕推进到该库巴附近时才会生效。如果进一步在关卡中间放一些“退化成普通敌人”的库巴,并都绑定上场景控制元件,那么每经过一个库巴,都会生效该库巴绑定的元件。
还有一个比较有趣的事情。库巴滚屏过程中,视野控制元件的视野限制肯定是不会生效的,但是与视野控制元件绑定的场景控制元件可以生效。例如在库巴滚屏过程中通过水管传送到了某个视野控制元件的范围内,则与该视野控制元件绑定的场景控制元件会生效。
另外,如果只删除了和场景控制元件绑定的视野控制元件或库巴后运行游戏(没有删除原本与之绑定的场景控制元件),将会报错,可能算是一个BUG。

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

 楼主| 发表于 2025-1-4 13:51:24 | 显示全部楼层
最后一个要介绍的物件是开关砖。
图234.png
开关砖包含开关(上图左侧的物件),以及阴、阳砖(上图右侧两个物件)这些组件。开关砖还共有8种颜色,分别为红、黄、绿、青、蓝、紫、黑、白。可以通过鼠标滚轮进行切换。
开关砖的基础功能是通过开关切换阴阳砖的状态。阴砖是虚心的,阳砖是实心的。开关可以通过被顶,或被MF甜菜砸,或被滚动硬壳撞的方式触发。触发开关后,相应颜色的阴阳砖将被切换成相反的状态,即阴砖切换成阳砖,阳砖切换成阴砖。同一个开关可以被无限次触发。

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

 楼主| 发表于 2025-1-5 13:26:11 | 显示全部楼层
在PREF’s的ADDITIONAL SETTINGS中有两项和开关砖有关,分别是开关砖二级功能(ADVANCED SWITCH)和蔚蓝模式开关砖(CELESTE STYLE SWITCH)。今天先介绍蔚蓝模式。
当马里奥与阴砖重合时,开关砖被切换,会发生什么呢?正常来说,阴砖会被切换成阳砖,然后马里奥就会被卡在砖里动弹不得,只有阳砖再被切换成阴砖时马里奥才能脱身,这确实就是不开启蔚蓝模式的情况。而如果开启了蔚蓝模式,开关砖会变得更加“友好”,即当马里奥与阴砖重合时开关砖被切换,则与马里奥重合的阴砖不会立即切换,而是等到马里奥与之完全不重合时再切换成其本应处于的状态,这样马里奥就不会被开关砖卡住了。
事实上,蔚蓝模式对阳砖也有同样的处理方式,即马里奥与阳砖重合时,即使切换了开关砖,阳砖也不会变成阴砖。只是在开启蔚蓝模式的状态下,一般不会出现马里奥与阳砖重合的情况,除非是开局就重合或是通过水管通道传送的方式。

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

 楼主| 发表于 2025-1-6 21:17:51 | 显示全部楼层
开启开关砖二级功能后,所有颜色的开关切换时除了会切换相应颜色的阴阳砖以外,还能够附加切换一种(或一些)别的物件的属性。
红色开关砖的二级功能是切换流体的类型,即在水和岩浆之间切换。
黄色开关砖的二级功能是把所有金币切换成可碎砖,把所有可碎砖切换成金币。
绿色开关砖的二级功能是把所有静止龟壳切换成滚动龟壳,把所有滚动龟壳切换成静止龟壳。注意切换后所有的龟壳都会变成未触发的状态,只有马里奥靠近时才会触发。
青色开关砖的二级功能是把除悬浮桥外所有的运输桥反向,即横向移动桥会立刻尝试掉头(但如果移动桥正与实心重合,还是会强行向右走,不会掉头成功),上升桥会变成下降桥,下降桥会变成上升桥。

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

第二届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都有一个对应的序号,对应关系可查看代码列表

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

 楼主| 发表于 2025-1-15 14:57:56 | 显示全部楼层
本帖最后由 马里奥奥里马 于 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行。多余的行不影响关卡运行(只要不少行或者少列就行)。此外,如果关卡横向格数太大,一行的字符数可能会非常多,这时即使在记事本中关闭了自动换行也可能会换行展示(可能是超出了一行能容纳的上限)。

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

 楼主| 发表于 2025-1-16 22:16:16 | 显示全部楼层
代码剩余的部分均为物件部分,在代码文件中占比最大。物件部分的每行代码均对应于一个关卡中摆放的非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的代码列表查看。

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

10

主题

329

回帖

4

精华

版主

经验
4476
硬币
885 枚

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

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

本版积分规则