Project1

标题: 【2024.4.27 增加S爆发技功能】MZ插件-CTB战斗系统 [打印本页]

作者: alderpaw    时间: 2024-4-22 00:27
标题: 【2024.4.27 增加S爆发技功能】MZ插件-CTB战斗系统
本帖最后由 alderpaw 于 2024-4-27 10:23 编辑

重要:这个插件是基于VisuMZ_1_BattleCore写的,目前必须一起使用!!!
单独使用会报错,这个报错目前我解决不了,因为我的很多处理逻辑都是按照战斗核心修改了以后来写的,不太了解官方原生的哪里有差别。
使用时,将此插件放在战斗核心下面,并将战斗系统设置为“时间制-等待”。


********** 简介 **********
这个插件实现的是类似轨迹的CTB战斗系统,即根据人物速度(agi)和不同行动的耗时来决定各角色的行动顺序。
yep在mv和mz都有写ctb战斗系统,不过跟我想象中的不太一样,很多功能没有,于是自己写了一个,基本是照着轨迹系列来的。
最好用1280*720分辨率。

具体来说,每名敌我角色都有一个AT(Action Time)值,AT=0时该名角色就可以行动。战斗开始时,每名角色都有一个随机的AT值,agi越高则AT值小的概率就越大。
战斗开始时以及每次行动结束时,都会同步减少所有角色的AT,直到有角色的AT减至0。然后,这名角色就可以行动。
不同的行动(技能、物品、普攻等)具有不同的耗时,称之为ST(Skill Time)。对于ST,可以分别设置驱动时间castST和硬直时间delayST。
-驱动时间是指该技能使用后无法立即产生效果, 必须读条一段时间,一般可用于魔法技能。
-硬直时间是指该技能演出结束后,角色需要等待多久才能再次行动。物理和魔法技能均有硬直时间,一般大招的硬直比较长。
每次行动后,根据ST和agi可以计算得知该名角色的AT会增加多少,公式为ΔAT=100*ST/agi。
然后,根据AT重新对所有角色进行排队,行动结束的角色会插到相应的位置。
因此,每次行动时都会根据AT值重新排队,然后轮到下一个AT最小的角色行动,这样就实现了CTB战斗系统的时间流转。

此外,行动条上还会随机出现AT奖励,会使当前行动的角色受到一些增益或减益效果。
你可以控制AT奖励的出现概率,并定义AT奖励的种类。

* ********** v1.01新增 **********
1. 当获得零驱动AT奖励时,选择魔法时预测的行动位置显示为硬直时间,而不是驱动时间。
2. 增加插件参数,可选择竖向放置ctb行动条。
3. 增加新功能:可为装备设定AT延迟效果,装备上后攻击就能延迟敌人。
4. 增加新功能:S爆发技。类似空轨,按下键盘上的1~4数字键可无视行动顺序瞬发S技。此时会强制进入S技选择界面,只能使用S技,不能做其他任何操作。可以在插件参数中设置爆S技时的音效以及需要多少TP才能发动S技。另外,最好在人物栏创建一个标记,符合发动S技的条件时就亮起。但由于每个人的UI都不同,这里就不提供了,可以自己简单写一下。

********** Notetags **********
实现额外效果需要在备注栏写一些参数,以下是可用的备注参数。
1. [技能、物品栏备注]设定技能的驱动时间和硬直时间
<castST:50>表示该技能的驱动时间为50,若不设置则驱动时间默认为0(即不需要驱动)
<delayST:120>表示该技能的硬直时间为120,若不设置则硬直时间默认为100。此外,攻击的默认硬直为100,防御的默认硬直为70。

2. [技能、物品栏备注]增加命中目标的AT,可用于实现具有延迟效果的技能
<AT Delay By Value:+x>表示技能命中后直接将目标的AT增加x,这种延迟与敌我速度无关,延迟量固定为x
<AT Delay By ST:+x>表示技能命中后使目标的硬直增加x,通过100*x/target.agi可以计算得到AT延迟量
<AT Delay Chance:0.x>表示有0.x的概率触发延迟,若不写则默认100%触发(但如果敌人有延迟抗性,还要相应折算)

3. [技能、物品栏备注]减少命中目标的AT,可用于实现提行动条的技能
<AT Advance By Value:+x>表示技能命中后使目标的AT减少x,与速度无关
<AT Advance By ST:+x>表示技能命中后使目标的硬直减少x,通过100*x/target.agi可以计算得到AT减少量

4. [技能、物品栏备注]解除驱动的效果
<Cancel Cast>

5. [技能栏备注]特定状态下才能/不能使用的技能
<Disabled In State: x>表示该技能在x号状态下无法使用
<Enabled In State: x>表示该技能只有在x号状态下才能使用

6. 指定技能为S爆发技,写在技能栏备注
<奥义技>表示将此技能设定为S爆发技,可以设定多个,爆S时选择一个使用

7. 为装备设定AT延迟特效,特定类型的技能命中后可延迟敌人
<AT Delay By Value:+x>
<AT Delay By ST:+x>
<AT Delay Chance:0.x>
将这些标签写在装备栏备注即可。
另外,可以在插件参数中指定哪些类型的技能会触发装备的延迟特效。

********** 插件参数说明 **********

(1)这个战斗系统中,存在需要读条的技能(即魔法),所以在开始驱动的时候可以设置在角色身上播放动画,并指定动画时长。若不指定的话,驱动的那一瞬间会马上快进到下一回合,感觉会比较唐突。
(2)无效行动的技能ID:ctb战斗系统中,即使是无法行动的角色,其AT也会同步减少,只不过在轮到其行动时会直接跳过回合。因此,需要指定一个作为无效行动的“空技能”。一般来说,无效行动的硬直可以设得比较小,并且无法行动的异常状态建议把解除时机设置成“行动结束时”。
(3)指示当前/未来位置的指针:这里需要在img/system中选择2个箭头图片,用于在玩家选择行动时,告知其目前所处的位置以及行动结束后将要插入的位置。我这里准备了2个箭头文件,分别是anchor_current和anchor_predict,可以直接用我的。
(4)AT延迟/加速/驱动解除相关的参数:可以为某些技能指定特殊效果,即AT延迟(击退行动条)、AT加速(行动条往前提)和驱动解除。可以选择是否在触发效果时弹出提示。另外,可以指定一个状态作为“AT延迟”,设置此状态的有效率就能设置目标对延迟的抗性。最后,如果你设定了需要驱动时间的魔法技能的话,还需要指定哪些状态下会封印该类技能。这是因为如果目标被施加此类状态时正在读条,则需要对其进行强制驱动解除。
(5)AT奖励相关设置:和轨迹系列类似,行动条里会随机插入一些奖励,角色行动时若正好和某个奖励平齐则可以获得额外效果。在参数里可以设置AT奖励的出现概率,以及具体会有哪些AT奖励出现。目前可以设置HP回复、MP回复、TP回复、本次暴击和本次零驱动这五种增益。
(6)S爆发技相关设置:可以设定TP达到多少才能发动S技,以及发动时的音效。

********** 示例图 **********
(1)不同行动有不同的硬直时间,还可以为某些技能指定驱动读条时间。若角色正在读条,则其头像上会显示绿色的“M"字样

(2)使用带有延迟效果的战技指定敌人时,会出现行动条位置变动的提示

(3)AT奖励示意:本次魔法免驱动,可立即发动

(4)AT奖励示意:轮到回合时回复MP

(5)S爆发技:无视行动顺序插队,满足条件才能发动,人物头像上会显示红色的“S”字样


********** 其他说明 **********
1. 必须搭配战斗核心,否则会报错。目前这个报错没法解决。
2. 需要对插件参数做一些设置再使用,参考上面的插件参数说明。
3. 还在测试阶段,有bug请提出,有空就解决。

anchor_current.png (1.53 KB, 下载次数: 93)

放在img/system

放在img/system

anchor_predict.png (1.27 KB, 下载次数: 92)

放在img/system

放在img/system

Alderpaw_CtbBattleSystem.zip

15.23 KB, 下载次数: 70

售价: 1 星屑  [记录]


作者: 小秋橙    时间: 2024-4-22 08:31
顶一个。最近正在拿古早的psvita玩空轨fc,楼主的截图不但有CTB还有【移动】指令真是太棒啦w CTB系统最大的亮点之一就是bonus,另一个亮点是S-Break不知道楼主有没有兴趣做一下w
CTB系统里最纠结的点感觉是【buff / state 持续时间】的问题,按固定AT值或按自己行动回合数感觉各有各的问题(后者还要额外考虑cast回合是否应该不消耗层数),似乎要取决于这个 buff/state 是在打人还是挨打时获益。
作者: alderpaw    时间: 2024-4-22 08:50
本帖最后由 alderpaw 于 2024-4-22 09:03 编辑
小秋橙 发表于 2024-4-22 08:31
顶一个。最近正在拿古早的psvita玩空轨fc,楼主的截图不但有CTB还有【移动】指令真是太棒啦w CTB系统最大的 ...


移动和战斗网格不是我写的,是用的yep最近发的一个20刀的battleGrid插件,完全自己写一套移动+网格+技能范围还要兼容战斗核心的话有点麻烦。
S-Break有空会做一下的。
另外状态计数我采用的就是mz原生的逻辑,按回合算且cast不消耗回合数,这样比较方便,而且跟闪轨以后是一样的。
作者: 小秋橙    时间: 2024-4-22 11:39
本帖最后由 小秋橙 于 2024-4-22 11:41 编辑

确实,grid的瞄准感觉就超级麻烦,闪轨战场是圆形的所以我偏向于零碧(但cast不消耗层数),技能范围有圆(有半径大小,但方格用圆挺奇怪的,应该提供曼哈顿和切比雪夫邻域)和射线(有宽度大小),瞄准有指定敌人(还要考虑死亡自动更改)、指定绝对位置(如果是射线那么技能使用者因为挨打而偏移会导致射线被旋转)、指定相对位置(还要考虑挨打是否转身及其影响,如果不转身的话射线会保持和原来平行)
状态计数按自己的回合算我觉得比较适合「中毒、灼烧、封技、封魔」这些,但可能不太适合某些挨打时获益的状态,否则会出现「速度越慢越有利」的尴尬情况?
说起来除了S-Break,空轨从sc开始还有了chain craft这种东西,都可以安排上(基本的AT Delay和AT Advance截图中已经看到了)。
作者: alderpaw    时间: 2024-4-22 15:27
小秋橙 发表于 2024-4-22 11:39
确实,grid的瞄准感觉就超级麻烦,闪轨战场是圆形的所以我偏向于零碧(但cast不消耗层数),技能范围有圆( ...

我之前做过玩具性质的战场网格,但只做到了方形范围的技能,其他的有各种困难。比如直线技,最好是根据方向不同人物的方向也要调整,但目前sv战斗图只有左右方向的,上下直线和斜向直线没法很好的展现;带位移的技能,在战斗核心下各种bug,而且yep加密不好解决;大型怪物占多个格子,碰撞体积也要解决;还有rm战场不够大,最好是camera能跟着玩家的位置动来扩展范围,这个超出了能力范围。如果只是简略版的,圆形技+直线技且不需要对齐方位,应该还能做做。
关于挨打增益的状态,应该也就防御提升、回避提升这些算spd慢的时候有益的了吧,护盾反射之类的都是挨打就没了,感觉总体影响不算大。
作者: alderpaw    时间: 2024-4-27 10:25
增加S爆发技的功能,但是目前不搭配yep战斗核心一起使用的话会报错,且暂时没法解决。
所以如果想使用或参考的话,请和VisuMZ_1_BattleCore一起用吧。
作者: 小秋橙    时间: 2024-4-29 15:08
报个bug,第824行:
//画当前行动的角色
        if (this._battlers[0].isEnemy()) {
            this._battlerFaces[0].setFrame(24, 0, 96, 96);
        }
        else {
            this._battlerFaces[0].setFrame(24 + (this._battlers[i]._faceIndex % 4) * 144, 24 + Math.floor(this._battlers[i]._faceIndex / 4) * 144, 96, 96); // i is not defined
        }
作者: hanyilun    时间: 2024-5-10 11:35
楼主真是太棒了!用了几年的RM,都没有找到和轨迹一样的ctb系统,终于看到有人做了
作者: hanyilun    时间: 2024-11-7 09:55
本帖最后由 hanyilun 于 2024-11-7 11:57 编辑

想请教一下楼主,castST和delayST现在都是固定值,可以实现改动操作吗?
比如轨迹里有减少魔法驱动时间的回路,或者减少技能硬直时间的buff,现在不太清楚要怎么实现这个功能




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1