全局事件 - dasasdhba/Super-Mario-Vandal-Editor GitHub Wiki
本章主要介绍本项目的全局事件,其为 persistent 对象 o_main 负责。
游戏初始化
在对象 o_main 的 Create 事件中,有着本游戏的初始化代码,其中包括 dll、script、音乐、背景、存档的初始化等诸多内容,也包括一些全局变量的声明。 以下内容是需要你注意的:
data
global.savekey = "dasasdhbasuperdasasdhbamariodasasdhba" //用于存档加密的秘钥,建议修改
global.audiokey = "dasasdhbavandaldasasdhbaeditordasasdhba" //用于外置音频加密的秘钥,建议修改
global.checkkey = "dasasdhbagamedasasdhbamakerdasasdhba" //用于外置音频验证的秘钥,建议修改
global.audioext = "fmod" //外置音频的扩展名(未加密)
global.audiocryptext = "fev" //外置音频的扩展名(加密后),如何加密将在后续章节说明
global.soundencrypt = false //是否加密音效(.\Data\Sound\ 中的音频)
global.musicencrypt = false //是否加密音乐(.\Data\Music\ 中的音频)
music channel
global.channel_max = 32
这是本项目音乐的通道数量(音乐,不是音效),默认是 32 个(0~31,其中 32 用于无敌星音乐)
如果你根本不需要多通道,或者根本不需要这么多,可以设置为 1 或者其他值。
control 与 setting
global.key_up = vk_up
global.key_down = vk_down
global.key_left = vk_left
global.key_right = vk_right
global.key_jump = ord("Z")
global.key_fire = ord("X")
global.key_pause = ord("P")
本项目的按键设置以及其他设置都是通过全局变量的方式实现的,如果你需要做相关开发调整,请务必注意。 比如,如果你要编写检测玩家是否按跳的代码,你就不能使用:
if keyboard_check(ord("Z"))
...
这样你的玩家设置的按键就无效了,正确方法应该是:
if keyboard_check(global.key_jump)
...
顺带一提,当 \Data\Save\setting.ini 文件存在时,游戏会优先读取,否则游戏会将此处的默认设置写入此文件。
pause
global.pause 是用于控制整个游戏是否暂停的,目前所有的对象都受到这个条件的限制。
你可能已经发现,所有的对象的 Create 事件都有 instance_init() 这么一条代码,这是在声明暂停系统以及物理系统需要使用的一些变量。
其中,如果你的对象不需要暂停系统来控制其动画的暂停,你可以将变量 pause 设为 -1。
如果你要作一些开发,请务必注意这一点。
level
global.life = 4
global.scores = 0
global.coin = 0
global.time = -1 //-1 表示无时间限制,也是待命状态,当该变量 >= 0 时,如果 Room 发生了跳转,时间会被继承而不是重新设置
global.mario = 0 //0 = 小马里奥;1 = 大马里奥;2 = 花身;3 = 甜菜;4 = 绿果
global.checkpoint = 0 //记录玩家碰到的 CP 数量,其中还有一个数组 global.checkid[] 用于记录玩家碰到的 CP
global.checkroom = 0
global.deathroom = 0
global.oneoff = false //在当前关卡死了一次之后设为 true
物理系统相关
在对象 o_main 的 Begin Step 和 End Step 事件中,有一些用于运动实心补正的代码。 注意,它们的作用对象不是 o_main 本身,而是 o_solid/platform_moving,一般来说你不需要管这块的内容。 而在 End Step 中,还对物理系统有一些额外处理。
滚屏相关
在对象 o_main 的 Begin Step 和 End Step 事件中,有一些滚屏相关的代码,其中部分代码作用于对象 o_camera。 我之所以把这些内容全部堆到 o_main,是因为这里面的一些执行顺序是需要保证的。
背景相关
在对象 o_main 的 Draw 事件中,有一些处理背景系统的绘制代码。 我们知道 GM8 仅仅只支持 8 个背景图层,为了突破这一限制,我内置了这一背景绘制功能。 关于这块具体如何使用将在后续章节说明。 顺带一提,本项目目前还没有使用这个系统。
设置游戏标题
在对象 o_main 的 Room Start 事件中,有一行代码用于设置游戏标题,你很容易找到它。 如果你希望不同房间显示不同的标题名称,请直接去掉这行代码,因为 GM 默认显示的应该是房间的标题。
音频防修改
在对象 o_main 的 Room Start 事件中,有两行用于检测音频是否被修改的代码。 默认情况下,检测到音频被修改会直接退出游戏,如果需要,你也可以作一些调整。
其他
其他代码在你的开发过程中可能不太重要,也不太需要管,不过还是可以看一看的。