关于本手册
本手册讲解 ACTION GAME MAKER 的持续效果。它把以下 4 项一并介绍:以一定间隔持续改变数值的「开始持续效果(ApplyEffectOverTime)」、用于移除该效果的「清除持续效果(ClearEffectOverTime)」、用于改写已施加效果的「变更持续效果(ModifyEffectOverTime)」,以及判断是否正在生效的条件「持续效果生效中(EffectOverTimeActive)」。
ACTION GAME MAKER 中持续效果的概要
持续效果是「以一定的间隔,按固定的量持续改变数值」的功能。由于它不占用流程中的状态,因此在效果生效期间对象仍会照常运作。
| 想做的事 | 用持续效果的做法 |
|---|---|
| 中毒・持续伤害 | 以一定间隔减少 hp |
| 持续回复(回血) | 以一定间隔增加 hp |
| 随时间增长的收入 | 以一定间隔增加项目变量 |
| 仅限一段时间的强化・弱化 | 改变数值 1 次,持续时间结束后还原 |
在此之前要做同样的事,必须占用 1 个状态来搭配计时器和伤害。持续效果把这些折叠进了 1 个动作里。
添加方法
- 在可视化脚本中打开添加动作的画面。
- 从「其他动作」中选择「游戏设置」分类(与「等待」「计时器计数」排在一起)。
- 选择「开始持续效果」。
条件「持续效果生效中」位于「其他条件」的「变量」分类中。
效果会在通过该动作的时点开始,之后即使切换状态,效果本身也会继续保留并推进。想停止时,请设置持续时间,或用「清除持续效果」移除。
「开始持续效果(ApplyEffectOverTime)」
效果名
用于识别效果的名称。「清除」「变更」「持续效果生效中」都通过这个名称来查找效果。 同时,同名的效果也是叠加(stack)的判定依据。
名称留空就无法识别,因此既不会叠加,也不会成为指定名称的清除对象。中毒和减益请务必命名。
变化对象的设置
- 对象的种类:从「变量」「开关」「节点的属性」中选择。
- 目标对象:从「自身」「指定的对象」「指定锁定对象」「父对象」「最后接触的对象」「共享数据板的对象」「项目变量」「数据库」中选择。
- 变量名:要改变的变量(或开关)的名称。指定
hp后,其变化就可以作为伤害来处理。 - 目标属性:对象的种类为「节点的属性」时,选择节点和属性。可选择布尔值・整数・实数类型的属性。
选择「项目变量」时,效果会放在管理器一侧而非对象上。即使施加效果的对象消失、或切换场景,效果也会继续。 收入这类机制请使用它。
开关和布尔值属性无法增减,因此用法是在开始时写入 1 次,持续时间结束后再还原。
变化方式的设置
- 运算符:从
=+=-=*=/=%=中选择。 - 变化量的设置方式 / 变化量:除直接输入外,也可以从变量、数据库、共享数据板的值中取得。
- 变化间隔(秒):每隔几秒应用 1 次。
间隔设为 0 时的行为因运算符而异。
| 运算符 | 间隔为 0 时的含义 |
|---|---|
+= -= |
每帧应用。变化量会被当作「每秒的量」处理 |
*= /= = %= |
仅在开始时应用 1 次(因为每帧相乘会呈指数级失控) |
想用倍率做临时弱化时,「间隔 0 + 乘法」是最自然的形式。
持续时间的设置
- 持续时间的指定方式:从「无限」「秒」「次数」中选择。
- 持续时间:秒数,或应用的次数。
- 开始时立即应用一次:打开后,不必等待 1 个间隔,开始的同时就应用第 1 次。
- 每次重新读取数值:打开后,每次都会从变量重新读取变化量・间隔・持续时间。想按施加时的强度固定下来的中毒请关闭,想跟随当前数值的收入请打开。
- 结束时还原数值:打开后,效果结束时会恢复为开始前一刻的数值。用于限时的强化・弱化。
停止条件的设置
这是与持续时间分开的设置,用于在数值满足条件时也结束效果。
- 停止条件:从「无」「数值比较」中选择。
- 监视的数值 / 比较方式 / 比较的值:比较方式为
=!=<<=>>=。
判定每帧进行。即使是间隔 1 秒的效果,也会在条件成立的瞬间立刻停止。若要做出「中毒不会致死」,请把监视的数值设为 hp、比较方式设为 <=、比较的值设为 1。
停止时同样会经过正常的结束处理,因此「结束时还原数值」会确实生效。
叠加与保存的设置
- 重复时的处理:同名效果已在生效时的处理方式。从「叠加」「覆盖」「延长时间」「不执行」中选择。
- 最大叠加数:同名效果可叠加的上限。设为 0 则无限制。
- 可保存:打开后,效果会被写入存档数据,读档时会连同剩余时间一起复原。默认为关闭。
叠加时,由最前面的那一层统一应用。 即使中毒叠了 3 层,每秒也只会出现「把 3 层合并成 1 个的伤害显示」,不会出现 3 个数字重叠看不清的情况。
另外,并入已有叠加层时,「开始时立即应用一次」不会生效(否则在并入的瞬间会多进 1 次)。并入的层会沿用原有层的间隔。
作为伤害处理的设置
只有在对象为 hp、且运算符为 += 或 -= 时才会出现的设置。
- 作为伤害处理:打开后,不直接写入变量,而是走伤害的处理路径。
- 属性设置 / 属性:效果的属性。从「无属性设置」「用属性类型数据库指定」「用属性值指定」中选择。
- 无敌中暂缓:打开后,在对象处于无敌期间会暂缓应用,等无敌结束后再生效(默认开启)。
- 同时发生无敌时间:打开后,也会触发对象上设置的无敌时间(默认关闭)。
- 伤害计算公式 / 取整方式 / 最小伤害:可选择「传统计算」或「自定义公式」。在自定义公式中,
a.为施加方、b.为承受方,还可以使用a.attack、b.hp这样的变量名。
把这里打开后,既有的属性系统就会直接接入。 中毒的跳字为紫色、火焰的跳字为橙色这类配色由属性的伤害显示设置决定,弱点属性的 2 倍伤害也通过属性伤害率成立。回复(正向变化)会以伤害显示的回复色呈现。
「清除持续效果(ClearEffectOverTime)」
移除正在生效的效果。可用于防止在过场动画中因中毒而死亡、制作全回复的存档点、制作解毒药等用途。
- 效果所在的对象:要移除效果的对象。选择「项目变量」则会移除像收入那样放在管理器一侧的效果。
- 目标对象范围:从「单体」「全部」中选择(仅在以场景指定时才有意义)。
- 清除的对象:从「所有效果」「指定效果名」中选择。
- 效果名 / 剥除的叠加数:把剥除的叠加数设为 0,就会移除该效果名下的全部。设为 1 则只剥除 1 层。
移除时会经过效果正常的结束处理,因此设置了「结束时还原数值」的效果会确实还原数值。
「变更持续效果(ModifyEffectOverTime)」
对已经在生效的效果进行事后调整。
- 效果所在的对象 / 目标对象范围:与清除相同。
- 效果名:要变更的效果名称。留空则任何效果都会成为对象,但变更叠加数时必须有名称(否则无法确定要给哪一层增加)。
- 变更的项目:从「叠加数」「剩余的效果时间」「变化量」「间隔」中选择。
- 运算符 / 值的设置方式 / 值:
*=乘以 2 就是 2 倍,乘以 0.5 就是一半。 - 最大叠加数:增加叠加数时的上限。设为 0 则无限制。
剩余的效果时间不是通过改变已经过时间,而是通过改变持续时间来实现的,因此不会与应用次数或间隔产生矛盾。剩余时间归 0 的效果会经过正常的结束处理,所以「结束时还原数值」同样有效。
增加的叠加层是复制仍在持续的层来创建的。它会原样继承复制源的剩余时间,因此由较早的层复制出来的会先结束。
无限持续的效果没有剩余时间,因此即使选择「剩余的效果时间」也不会发生任何事。
条件「持续效果生效中(EffectOverTimeActive)」
- 效果所在的对象:查找效果的对象。
- 效果名:留空则任何效果都会成为对象。
- 判定的时机:从「生效期间」「效果发生的瞬间」中选择。
- 叠加数的比较方式 / 叠加数:从「大于等于指定数」「等于指定数」「小于等于指定数」中选择。
选择「效果发生的瞬间」后,只有在数值实际发生变化的那一帧才成立。 可以实现每次中毒伤害生效时播放音效、施加顿帧等用法。即使叠加了多层也会合并为 1 次,因此音效不会重叠成 3 次。
实用示例
给被攻击命中的对象施加可叠加的中毒
中毒由「承受方给自己施加」是最可靠的做法。
- 在敌人(承受方)的可视化脚本中,创建「接触攻击判定」的转换。
- 在转换目标处放置「开始持续效果」,并按如下设置:
- 效果名:
poison - 对象的种类:变量 / 目标对象:自身 / 变量名:
hp - 运算符:
-=/ 变化量:5 / 变化间隔(秒):1 - 持续时间的指定方式:秒 / 持续时间:5
- 重复时的处理:叠加 / 最大叠加数:5
- 作为伤害处理:开 / 属性设置:用属性类型数据库指定 → 毒
- 效果名:
- 每次命中都会增加一层,并每秒以紫色显示「把各层合并为 1 个的伤害」。
如果想从攻击方施加,请把目标对象设为「最后接触的对象」。不过这是由接触条件(「接触碰撞体」「接触对象的墙壁判定」)记录下来的对象,仅仅命中攻击判定是不会被填入的,请做成接触判定也一并命中的形式。
让中毒叠加数翻倍的技能
- 在技能的可视化脚本中放置「变更持续效果」。
- 效果所在的对象:最后接触的对象(或共享数据板的对象)
- 效果名:
poison - 变更的项目:叠加数
- 运算符:
*=/ 值:2 - 最大叠加数:10
- 3 层就会变成 6 层。增加的部分会继承原有层的剩余时间。
- 不设上限的话,连打就会无限增加。请务必设置最大叠加数。
若要做把剩余时间减半的减益缩短效果,请把变更的项目设为「剩余的效果时间」,并用 *= 指定 0.5。
给自己施加 10 秒的回血
- 在回复技能的可视化脚本中放置「开始持续效果」。
- 效果名:
regen - 对象的种类:变量 / 目标对象:自身 / 变量名:
hp - 运算符:
+=/ 变化量:5 / 变化间隔(秒):1 - 持续时间的指定方式:秒 / 持续时间:10
- 重复时的处理:延长时间
- 作为伤害处理:开 / 属性设置:无属性设置
- 效果名:
- 每秒回复 5 点,10 秒后结束。由于打开了「作为伤害处理」,回复量会以伤害显示的回复色呈现。
- 设为「延长时间」后,重复施加不会叠加而是延长时间。想让回复量叠加时请设为「叠加」。
对周围 5 个敌人施加 10 秒攻击力下降 30% 的减益
范围减益分两步来做:「搜索并记录到共享数据板」→「对该列表施加效果」。
1. 收集目标
- 放置「搜索对象并记录到共享数据板」。
- 键名称:
DebuffTargets(需要事先准备对象引用列表类型的键) - 指定目标组:敌人的组
- 距离范围(0为不限):300
- 排序依据:距离 / 排列顺序:升序(由近及小)
- 记录数量:5
- 键名称:
2. 对全员施加
- 接着放置「开始持续效果」。
- 效果名:
atk_down - 对象的种类:节点的属性
- 目标对象:共享数据板的对象 / 共享数据板键:
DebuffTargets - 目标属性:攻击设置节点的「攻击力调整(%)」
- 运算符:
*=/ 变化量:0.7 / 变化间隔(秒):0 - 持续时间的指定方式:秒 / 持续时间:10
- 开始时立即应用一次:开
- 结束时还原数值:开
- 效果名:
指定对象引用列表的键后,效果会施加到所有存活的对象上。 只想施加给 1 个时,请使用对象引用键(非列表的那种)。
「攻击力调整(%)」默认为 100,是乘算到基本设置中攻击力上的倍率。用 *= 的 0.7 会变成 70(=下降 30%),10 秒后恢复为 100。
把间隔设为 0 是关键。 乘法在间隔为 0 时只在开始时应用 1 次,因此不会出现 10 秒内持续乘以 0.7 而不断衰减的情况。
另外,打开「结束时还原数值」后,重复时的处理中会去掉「叠加」(因为开始前的数值无法在各层之间共享),默认会变为「覆盖」。
注意事项
- 停止条件无法中断一次应用。 在 hp 100・停止条件为「hp 小于等于 50」・伤害为 200 的情况下,会先进 200 点伤害变成 0,然后才停止。因为判定只能在两次应用之间进行,而在伤害路径上,最终伤害要经过属性率和计算公式之后才确定。请给阈值留出余量。
- 「每次重新读取数值」的开关含义差别很大。 关闭时按施加瞬间的数值固定(中毒的强度不会事后改变),打开时每次重新读取(收入会跟随当前数值)。
- 无敌期间伤害路径的应用会被暂缓,但持续时间照常推进。 因此「用 10 秒无敌熬过 10 秒中毒」是成立的。
- 请让「同时发生无敌时间」保持默认关闭。 打开后每次效果生效都会产生无敌时间,导致真正的攻击打不进去(间隔 1 秒+无敌 1 秒就等于实质无敌)。
- 「可保存」默认关闭。 这是为了避免读档后中毒复活带来的意外。打开后会连同剩余时间一起复原。
- 效果名为空的效果无法识别,因此既不能清除、也不能变更或用于条件判定。
- 「最后接触的对象」是由接触条件记录的对象,仅仅命中攻击判定是不会被填入的。
- 以项目变量为对象的效果,即使施加它的对象消失、或切换场景也会继续。想停止时,请用「清除持续效果」并把对象指定为「项目变量」。
- 使用「结束时还原数值」的效果无法叠加(因为开始前的数值无法在各层之间共享)。
- 暂停期间效果也会停止。