亨少 工具原帖发布地址 Magic Patcher 是国外网友 Pilzinsel64 在俄狐论坛发布的一种 38A 版本专用的关卡辅助工具。这种工具的功能是创建关卡中各种自定义物件(如NPC/砖块的自定义属性参数、脚本、变量等)的补丁,并将其加载到其他关卡。有了这种工具,在发布脚本或使用他人的脚本的话则会轻松很多,自定义脚本只需加载一个补丁即可使用到你的关卡中! 但是,应该如何使用这种工具呢?下面就是使用它的教程! 创建补丁 如图所示即是 Magic Patcher 的补丁创建界面。这个界面的各个选项内容均已在图上做了汉化。如果光标在各个选项的确认框上悬停一段时间可以看到这些选项的解释。下面让我来解释一下各个选项的作用: 使用空白关卡:创建补丁时默认选择这个选项即可。 使用自定义关卡:用途暂时不明。看选项解释似乎可以忽视原关卡的一些自定义设置,适合应用于整个地图的关卡。 原关卡:用途暂时不明。看选项解释似乎是加载没有需要的自定义属性的关卡的路径。配合“使用自定义关卡”选项使用。 修改的关卡:需要加进补丁里的带有自定义属性的关卡的路径。 保存为:创建出来的补丁所保存的路径。 砖块/NPC 等:若勾选这个选项,创建补丁时则会将关卡中的所有砖块/NPC/背景 等物件加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部的这些物件。(原关卡中的这些物件在什么位置,加载了补丁的关卡的这些物件都还在原来那个位置) 流体:若勾选这个选项,创建补丁时则会将关卡中的所有流体加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部流体。(原关卡中的这些流体在什么位置,加载了补丁的关卡的这些流体都还在原来那个位置) 自定义素材:若勾选这个选项,创建补丁时则会将关卡所使用的所有自定义素材加进补丁中,加载了这个补丁的关卡将会应用补丁内包含的全部自定义素材。(默认应用的素材文件和加载补丁的关卡文件处于同一文件夹) 自定义属性参数:若勾选这个选项,创建补丁时则会将关卡所修改的全部的砖块/NPC/背景的自定义参数全部加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部的这些自定义属性参数。(如果你要创建的补丁是 NPC 脚本,请务必勾选这个选项,因为 NPC 脚本是通过 NPC 自定义属性设置来触发的,且很多 NPC 脚本需要应用到 NPC 的修改后的自定义属性) 脚本:若勾选这个选项,创建补丁时则会将关卡内所使用的全部脚本加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部的脚本。(这个就不用我多说了吧……?) 事件:若勾选这个选项,创建补丁时则会将关卡内所使用的全部事件加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部的事件。(如果你要创建的补丁包含的所使用的脚本是由事件触发的话,请务必勾选这个选项) 变量:若勾选这个选项,创建补丁时则会将关卡内所使用的全部变量加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部的变量。(只包含关卡内使用的局部变量,不包含全局变量。如果你要创建的补丁包含的所使用的脚本或事件中涉及到了自定义变量(并不是在脚本内部使用 Dim 定义出的变量)的话,请务必勾选这个选项) 图层:若勾选这个选项,创建补丁时则会将关卡内所使用的全部图层加进补丁中,加载了这个补丁的关卡将会有补丁内包含的全部的图层。(如果你要创建的补丁包含的所使用的脚本或事件中涉及到了图层的话,请务必勾选这个选项) 在设置完毕后,只需点击“创建补丁!”按钮,即可将你所创建的补丁保存在你想要保存的位置。 注意:在创建补丁时,请仔细根据关卡内所使用到的自定义设置和你的需要来灵活地选择上述的选项!比如你如果想要使用某个示例关卡中的自定义 NPC,则只需要勾选“自定义素材”“自定义属性参数”和“脚本”。假如这个示例关卡中用到了触发脚本的事件(如 NPC 死亡时所触发的自动事件“NPC - Death”,用于触发一个指定的脚本),则需要另勾选“事件”选项;又假如这个示例关卡中用到了脚本中所涉及到的自定义变量,请再勾选“变量”选项。 目前由于这个工具本身的问题,无论如何设置选项,关卡内的 Warp 都会被加进补丁,并由补丁加载到关卡中。在这种情况下,如果 Warp 是你所不需要的,建议在原关卡中将这些无用的 Warp 提前去掉。 加载补丁 如图所示即是 Magic Patcher 的补丁加载界面。这个界面的各个选项内容均已在图上做了汉化。和补丁创建界面一样,如果光标在各个选项的确认框上悬停一段时间可以看到这些选项的解释。 在这里,只需选好所需要加载补丁的关卡的所在路径和所加载的补丁的所在路径,再点击“加载补丁!”按钮,即可将补丁内的内容加载到你正在制作的关卡中啦! 使用示范 下面,将使用我之前制作的旋转金币脚本来做创建和加载补丁的示范。 首先,先准备好一个正在制作的、还没有使用想要使用的脚本的关卡。在这里,我以“Magic Test.lvl”关卡为例。 接下来,准备好要使用的脚本的示例关卡。打开关卡文件夹可以发现,这个示例关卡使用了自定义素材并且修改了 NPC 的属性参数。 接下来使用关卡编辑器查看示例关卡。发现这个示例关卡没有使用任何的事件、图层或变量。但是这个示例关卡使用了一个 Warp。保险起见,建议先将这个 Warp 删除后保存关卡,以防使用这个关卡创建补丁时把这个 Warp 也加进去,引发一些不必要的麻烦。 根据刚刚查看示例关卡的情况,在 Magic Patcher 中的“Create Patch”界面对要创建的补丁进行设置。因为没有使用任何的事件、图层或者变量,这三个选项都不需要勾选。砖块、NPC和流体之类的物件也是不必要的,因为这里我们只是想要把这关所使用的脚本放到另外一关中,所以这两个选项也不勾选。 之后选择要使用的脚本的示例关卡,并选择补丁保存的位置,再点击“Create Patch!”来创建补丁。等到“Patch successfully created!”的信息弹出后,说明补丁已经创建成功。 然后,切换到 Magic Patcher 的“Apply Patch”界面,选择要加载补丁的关卡和要使用的补丁文件,点击“Apply Patch!”来加载补丁。等到“All Patches applied successfully”的信息弹出后,说明补丁已经加载完毕。 此时,再让我们用关卡编辑器打开最初的“Magic Test.lvl”关卡,然后我们就会惊喜地发现:示例关卡中的脚本奇迹般地出现在了这个关卡中!没错,在这种情况下,我们终于可以开始使用这个脚本了!并且之前创建好的补丁,也可以留着给之后要使用这个脚本的关卡用。如果你要发布你制作的脚本,以这种补丁的方式发布也是极为方便的! 就这样,我们在刚刚还是平淡无奇的关卡中顺利地加上了旋转金币圈。好好使用这些脚本吧!顺带一提,如果你在刚刚创建补丁的时候,没有删除示例关卡中的 Warp 的话,就会出现上面那张图的右下角的情况。设想如果你已经在这个关卡使用了 Warp 的话……后果似乎不好想象呢…… 常见问题 在有些时候,当我们把一个包含别人制作的脚本的补丁加载到自己做的关卡以后,脚本可能会无法正常运行。这种情况往往是由于加载的内容和关卡原有的内容产生冲突而导致的。下面我来总结一些常见的冲突问题。 物件冲突:在这种情况下,由于补丁内所包含的自定义 NPC 或其它物件,和关卡原有的物件刚好使用了同一种(比如我想要使用自定义 NPC 猛牛鱼,同时关卡中也放置了 SMW 的泡泡怪(此处指 Blurp,一种戴着潜水镜的鱼类敌人),我想让这两种敌人在关卡中同时出现,可当加载补丁时,所有的泡泡怪变成了猛牛鱼,因为猛牛鱼是使用泡泡怪替换的),从而导致了关卡中原本放置的物件变成了从补丁中加载的物件,而且这并不是做关者想要的效果。若遇到这种情况,那么就要想办法把已经加载的自定义 NPC 换成别的 NPC(不单单只是要换 NPC 的 ID,同时还要考虑到脚本内涉及到 NPC 的 ID 的部分,以及被替换的 NPC 的本身的特性)。 涉及到脚本内关于 NPC 的 ID 的,建议将脚本内容复制粘贴到一个支持查找替换的文档编辑工具中,将里面的原本的 NPC 的 ID 换成修改后的 NPC 的 ID(比如,将全部的".id = 232" 替换为 ".id = 236"),再粘贴回编辑器的脚本页面中。涉及到利用 NPC 本身特性的自定义 NPC 脚本,建议将 NPC 替换为使用了同一种 AI 的“姐妹 NPC”。(比如将原本的 SMB3 害羞幽灵替换为 SMW 害羞幽灵,因为它们使用了同一种 AI,属于“姐妹 NPC”。) 事件冲突:这是另一种常见的问题。这种情况是由于补丁内所包含的事件名称和关卡中已有的事件名称重名而导致的。要知道,在正常情况下,SMBX 中不可能会出现两个完全重名的事件。而这种情况如果发生了,那么游戏只会执行这两个事件中的其中一个!遇到这种情况下,通常最简单的方法就是修改两个重名事件中其中一个的名称,再同时对其它涉及到这个事件的内容(如其它事件、脚本或触发事件的要素)进行调整。 需要注意的是,如果重名的事件恰好是自动执行事件(如"Level - Start" "NPC - Death"这些),那么就需要做关者自己将两个事件进行整合了(反正这类事件通常只能在某些条件达成时自动触发,没有其它的触发方式且没有别的方式来自动触发,"Level - Start" 除外)。如果重名的事件是"Level - Start",那么就没必要将两个事件整合,只需将后来加载的"Level - Start" 直接重命名并设置为关卡开始时自动触发即可。如果重名的事件是其它的自动执行事件(如"NPC - Death"),那么就需要进行手动整合。比如关卡中原有的自动执行事件和加载的自动执行事件都触发了脚本,那么就要把这两个脚本进行整合,并删除其中一个自动执行事件。 脚本冲突:遇到这种情况的话,建议还是直接修改脚本名称和调整其它涉及到该脚本的地方来避免冲突吧。 图层冲突:解决方法同上,但如果是特殊图层(如"att-screen(*)",即在图层列表中字体显示为红色,本身具有特殊性质的图层),那么则需要修改图层名称中括号内的内容来防止冲突了。 变量冲突:解决方法同上。如果脚本中涉及到过多关于此变量的内容的话,建议还是用能使用查找替换功能的文档编辑工具来快速替换吧…… 总之,如果我们学会正确使用 Magic Patcher 来创建和加载补丁,那么它将会变成一个对我们做关很有帮助的工具(尤其是对不会使用脚本的新人而言)!那么,教程在此结束!希望我的这个教程能对大家有帮助~如果还有什么不懂的可以在这里发帖询问,如果我的教程有什么问题的话,也欢迎在这个帖子里回帖补充! 文档形式教程下载