简介
Super Mario Ultra Edition Legacy 是一个以全新思路重构的基于 Clickteam Fusion 2.5+ 的 Mario Forever 制作模板。
我们的目标并非还原原版,而是制作更舒适的 MF。我们这里有:
- 体系完备的分组系统
- 完全精确的碰撞检测
- 方便快捷的可扩展性
- 不计其数的细节优化
你可以:
- 肆无忌惮地摆放地形,不必担心穿墙问题
- 轻松迅速地开发新物件,将难搞的碰撞检测交由各分组
- 充分利用 CTF2.5+ 的特性,更方便地开发维护
清晰的事件结构
与传统的 Mario Forever Remake Engine 以及当下流行的 Rainbow Engine 不同,该引擎的思路是 物理 与 对象 分开处理:
为对象加入 Group.Instance 和 Group.Gravity,附加一个简单的 init(参考已有物件)即可获得重力,就是如此简单。
为充分发挥 CTF2.5+ 的特性,引擎核心事件写入了两个对象:
(右为 Frame End Event)
其中包括各类分组的事件,滚屏等核心内容。由于 物理 已经隔离开来,像 马里奥 一类的对象,便只需编写操作事件。
强大的分组功能
你是否曾设想过 360° 的重力系统?
真正的 “Mario Forever Galaxy” 已不再是梦想!!!
(当然,本引擎不会提供自动生成圆形重力场之类的功能,这类功能难以做成统一方便的模式,需要开发者自行解决。
同时,如果你需要变换重力方向,除了马里奥以外你都需要自行修改贴图,或者使用 Angle 方法进行动态的调整,
此类事件的技术细节仍然比较复杂,所以在短时间内,让 Mario Forever Galaxy 的编辑跟 RE 一样方便基本是不可能的。)
抛弃 Bouncing Ball,Group.Movable 更加强健
有碰撞检测的 Bouncing Ball,它不香吗.jpg
- 什么?啥都能放到运动实心上了?
(好吧我承认性能上的消耗会大很多,但 directX 11 也给我们提供了更多的性能)
稳固的游戏系统
我们有完善的滚屏系统(后续有教程介绍)
完善的暂停系统(当然,这同时也给开发带来了一些不便)
你甚至可以自己做自己的暂停系统。
下载
Super Mario Ultra Edition Legacy 210227.1ver
更新日志:
20210227.1ver
- 修改了部分默认无实心的水管
- 修复了运动实心踩上补正的指代问题 (Frame End Event)
- 为部分事件追加了 foreach 调用的接口 (Frame Start Event)
- 调整了石盾的事件以适应被运动实心带走的情况
20210224.1ver
- 修复多 Frame CP 跳转的 bug (Check Flag, Pipe Link Frame)
20210221.1ver
物件:
- 修复了马里奥尸体角度旋转延迟的 bug
- 调整了龟壳、跳乌龟、刺猬(法礼)的图像大小,以避免穿墙 bug
- 修复了爆米花同时创建抽风 bug
- 调整了 Pause 对象的事件以修复图层 bug
- 将图层设置转置单独的 Active “Layer Setting” 中,以便不同关卡不同处理
- 现在默认自带一个 Movable Solid 对象
- Camera 对象新增更多功能
Frame Start Event:
- 修复了暂停时图层错乱的 bug
- 优化了 Group.Gravity 和 Movable 的部分算法
Frame End Event:
- 适配其他重力方向的运动实心以及高速实心
- 新增分组:防穿墙系统 Group.AutoPlace (ver 500+)
- 滚屏事件完善
Mod 201018.1ver
包含内容:
- 天气特效包
- 敬请期待!
永硕:http://dasasdhba.ys168.com/
蓝奏:https://wwa.lanzous.com/b02bgtrub
MEGA:https://mega.nz/folder/Nah22BbC#LMpoE1NNuaiJ5pbpWJRdog
后续将会不断提供稳定性更新,功能性更新可能会以 Mod 的形式放出。
教程
本教程会对 Ultra Edition Legacy (后简称 UEL)部分物件的使用进行简单说明,
同时也会给开发者提供一些参考。
编辑须知
这是在使用 UEL 时特别需要注意的一些地方,请一定要仔细阅读!!!
- 不要随意删改已有的图层及其名称
否则将会导致各种问题的出现!!! - level_main 为关卡主图层,level_back 为第一背景层
食人花,进水管的马里奥等将会被移至第一背景层
因此做背景时请特别注意遮挡问题的出现
当然,你可以随意添加新的图层,放在第一背景层之后,这是万无一失的做法。 - 保持 sys_setting 图层在 编号1 的位置,否则事件顺序会被打乱,出现难以预料的情况
- 在同一工程中,建议保持各个物件的名称相同,以方便未来维护
(若有重大 bug 修复,你到时候才能用 Global Object 进行全局修改)
移植须知
UEL 支持移植到其他的引擎,以下是方法:
在 Frame Start Event 中,激活/禁用相关事件
将 Global Event 复制至移植目标工程(只有一行)
修改工程设置,如图:
将 Event Order 调整为“Frame events, Behaviors, Global events”如果需要,请禁用 UEL 的内部暂停事件。
禁用 Pause 对象的 Behavior 事件即可。
若从其他引擎移植物件进 UEL,请特别注意暂停事件的添加!
部分物件说明
系统
在图层 level_info 的 Info Time 对象中设置时间:
若设置为 ≤0,则不限时
通关器 和 小通关器 的相对位置决定其方向,可放心摆放。
滚屏 的使用:
当 马里奥 与 Scroll Free/Scroll Set 碰撞时,将会切换滚屏;
Scroll Set 拥有变量 ID,马里奥触发滚屏时,滚屏将会切换到拥有同样 ID 的 Scroll Region 对象中,
该对象的覆盖范围即为滚屏的范围。
如果 Scroll Set 的 渐变 Flag 打开,则会渐变式切换滚屏。
因此,当你需要制作不同区域的滚屏时,克隆 Scroll Set 和 Scroll Region 对象,修改 ID 使其对应即可。
使用样例(SMMWW 2-2):
敌人
(不要吐槽部分物件名)
你可以轻松地指定一个敌人的初始方向,如图:
部分敌人支持 32 个方向,包括:
- 食人花:你应该 Clone 食人花并修改其方向,以此获得其他方向的食人花。
如有需要,你可以修改 Clone 后的食人花的编辑界面贴图,以方便编辑。 - 火球:不作过多解释,但需要说明的是,火球会记忆其初始距离岩浆的高度,
如果没有岩浆,那火球也回不来了。 - 石盾:也不需要太多解释,但需要注意的是,
以一个比较奇怪的方向砸到与其不垂直的实心上可能导致爆炸特效创建失败。
此外,炮台也支持 4 个方向。
道具
将 道具 覆盖于 问号砖/砖块 上,以装入此道具:
注意,道具 在升起的过程中也位于 level_back 图层。
水管链接
红绿箭头对象只拥有动画效果。
特别地,在一开始将马里奥与红色箭头重叠可以使其在一开始的时候出水管。
而后,我们需要其他的对象来完成水管的传送,跳帧等事件:
- 传送:
红绿 Warp 对象 根据其摆放的顺序进行瞬移式传送。 - 滚屏:
紫色 Warp 对象 将会开启滚屏式传送,通过黄色箭头更改滚屏的方向。
运动实心
修改实心类型:
对于平台和实心的转换,修改分组即可:
你还可以修改变量 实心类型:
0:正常实心
1:马里奥实心
2:敌人实心Reverse 的使用:
运动实心正常情况下为 Normal (后简称 N)状态,与其边缘接触后将会进入 Reverse (后简称 R)状态;
同样,处于 R 状态的运动实心与其接触后会切回 N 状态。
而后在特定的设置下会进行相应的速度反向。
当运动实心同时具有 x、y速度 时,Reverse 对象的 单方向碰撞 Flag 将决定反向一个方向的速度还是两个。箭头的使用:
当运动实心只在单方向拥有速度的时候可以响应运动箭头,其响应的位置在箭头的中心。
若运动实心处于 N 状态,则响应绿色箭头;
若运动实心处于 R 状态,则响应红色箭头;
以此我们就可以制作复杂路径的往返。
致开发者
- 开发过程中请特别注意 暂停条件 的限制,其中
对于 Group.Instance 对象,暂停条件应为 Var.1000 = -1
对于其他对象,暂停条件应为 Pause 对象的 Flag 0 on - 我在开发过程中,对于一些重要的东西都写了较为详细的注释,可供参考。
而对于一些外源引用的事件(均注明来源)则并没有作太多的处理。 - 你可能会注意到,有一些物件并不属于 Group.Instance,
理论上我们把所有物件都加上此组,那么就根本不需要 Pause 对象了。
你可能也已经发现,部分物件的行为中有 “低配版” Gravity 和 Movable。
其原因在于,CTF 对于分组的使用有上限!!!
这个上限具体我并不清楚,但这个上限是存在的,
如果超过,将会导致 Out of memory,编译直接崩溃!别问我怎么知道的,辣鸡 Clickteam
因此,对于不需要碰撞检测的对象,用“低配版”是更好的选择。 - Group.MovingBlock 绝对不能同时与 Group.Instance/Gravity 等加在同一个对象上,
原因可参见 Group.Solid&Platform 的注释。
如果需要开发其他运动方式的平台(如圆周运动),
直接禁用掉原生运动事件(比如将 Var.300 设为 233),然后自行在 Behavior 中编写即可。
这不会影响补正事件,因为补正事件用的是差值法计算。 - 我深知我使用的一些 For each 事件存在风险,
比如我迫不得已修改全局事件顺序来保证 Frame End Event 的正常运行(已改为 loop),
如果你实在担心,也可以自己改一改。
特别鸣谢
- 感谢 @虹原翼 的 Rainbow Engine 为本引擎提供了大量素材和源代码参考,减轻了我不少工作量。
- 感谢 @2333ty 在开发之初为部分移植工作作出的突出贡献。
- 感谢 @s小s飞s侠s 在测试阶段积极做关寻找问题。
- 感谢 @koopa4 为部分事件提供最初的灵感来源。
最后,欢迎评论,有 bug 欢迎指出,在这里和论坛都可以(