设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3609|回复: 4

[原创发布] RTAB的基本战斗原理及无冲突实现方法简说

 关闭 [复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22403
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

发表于 2005-10-27 08:26:26 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
RTAB和不少战斗脚本冲突,所以……这也是为什么几乎所有战斗脚本都不能用于RTAB的原因

要了解RTAB的战斗原理,先说一下回合战斗的原理:
phase1 -> phase2 -> phase3 -> phase4
             | ^-------------------/
             V
           phase5
这个phase分别代表什么我就不再多说,去看Scene_Battle的相关注释就会明白

站上的RTAB脚本,其原理是:
               +---------+
               V  -->phase4
phase1 -> phase0 -->phase3
             | A  -->phase2
             V +---------+
           phase5

RTAB的战斗方式,它最主要的不同点在于:
RTAB之所以和其他不少战斗脚本发生冲突,是因为它把phase4这个表现战斗效果的部分切碎了,为了能够实现“绝对的实时”,也就是任何动作过程都不等待,RTAB不得不将phase4分担到每一个战斗者头上去,并在phase0控制中根据每一个战斗者的phase4_step值来决定这个战斗者应该表现出什么效果。伤害值也是一样,为了实现多人攻击一人时伤害值不覆盖,不得不将damage这个基本属性分开定义,这就是RTAB和几乎所有战斗表现类、战斗系统伤害修改类冲突的原因。

如果要实现没有冲突,那就必须放弃“绝对的实时”,在RTAB的实时设定中,有4级
1. 绝对的实时
2. 动作表现时等待
3. 2以外,选择道具、特技时等待
4. 所有动作全部等待,只在没人可以行动时实施CP积累和控制

除了1级以外,以下的3级,全都可以在不对phase4相关部分重定义中实现。

比如说实现2级实时:
phase1
进入CP积累控制进程
有人可以行动的情况:
   是敌人->生成行动后进入phase4,执行行动,这个中途不需要积累CP
   是我方->进入phase3(选择行动),这个中途继续积累CP,如果敌人积满了就让敌人行动(反正这个时候我方那个角色在phase3,不会执行动作),我方选好行动以后进入phase4,执行行动,行动过程中不需要积累CP
无人可以行动的情况:
    积累到有人可以行动为止


这样,phase4虽然也从敌我双方各行动一次变成了敌我双方中一个角色行动一次,但这一次行动是完整的(step1到step6一气呵成),中间没有打断的可能,这就不需要去定义各角色的phase4_step,也无需重定义damage属性(因为攻击者在一时间只有1个人)。

而3级、4级的实时战斗就更简单了……(顺便说一下,樱雅的RTAB脚本就是实现的4级实时战斗)

自写RTAB有一个问题要解决,就是phase3的打断问题,比如当一个角色在输入命令时,敌人行动,把它打死了,或中了某个状态让它动不了了,或不能使用魔法了等等,这时phase3都要强行结束而让这个正在输命令的角色直接进入phase4去。此外还有一个小问题,就是我方有多人可以同时行动时如何切换输入命令的问题。所以RTAB对phase3_update的改动一定是相当大的。

主控(CP积累)回合可以另行定义phase0,但也可以不这么做,把phase2“挪作它用”,要知道phase2原来在回合制里是回合的标记,现在RTAB根本无所谓“回合”这个概念,所以当然可以这么来用。phase2的逃跑功能,可以另作安排,比如热键逃跑(如我的游戏就用了按压L+R在战斗中逃跑)。

图示:         <----------------------+
phase1 -> phase2 ->(我) phase3 -> phase4
             |    ->(敌)---------> phase4
             V
           phase5
由于phase4不和主控回合并行,所以原理上相对简单了很多

RTAB的另一个大问题是修改“强制行动”的解释器(Interpreter command_338好像是),这个解释器必须重写(特别是当设定为“按正常的顺序行动”时)RTAB脚本用的办法是另行定义一个"forcing_action"属性,如果有强制行动,在phase4时临时赋给current_action,我也基本上沿用了这个办法。

最后还有一个战斗事件的解释触发(回合),这个算法可以自己写,以前在旧站讨论过有这么几种算法:
--每人行动一次算一回合,缺点是有人不能行动时,甚至有人CP不能积累时(比如中了停止状态)回合数就卡死了
--每人行动次数除以战场上存活人数,每满人数次算一回合,在战斗事件触发上这是个比较好的办法,但是有速度快的人陷入战斗不能时,回合数会混乱,另外,怪物的动作过快(过慢)时,行动会和设置的预期相去比较远
--每人行动一次自己算一回合,没有全局回合数,这样怪物的行动会比较正常,但是战斗事件的触发以哪个为准呢……可以另设一个全局回合数,比如以所有人平均速度值积累……

最后一句话,无冲突实现RTAB的话就是照着2级实时的方法去实现,这样大多数的战斗特效、血条什么的基本都可以用,反击也没问题,原有的RTAB预留的“咏唱”“连体技”都可以实现……RTAB自带的近大远小的功能,站上也有单独功能的脚本可以套用

除非是一定要实现1级实时的效果,那就用RTAB脚本吧……


              [本贴由 柳柳 于 2005-10-28 6:23:57 最后编辑]
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22403
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

 楼主| 发表于 2005-10-27 08:26:26 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
RTAB和不少战斗脚本冲突,所以……这也是为什么几乎所有战斗脚本都不能用于RTAB的原因

要了解RTAB的战斗原理,先说一下回合战斗的原理:
phase1 -> phase2 -> phase3 -> phase4
             | ^-------------------/
             V
           phase5
这个phase分别代表什么我就不再多说,去看Scene_Battle的相关注释就会明白

站上的RTAB脚本,其原理是:
               +---------+
               V  -->phase4
phase1 -> phase0 -->phase3
             | A  -->phase2
             V +---------+
           phase5

RTAB的战斗方式,它最主要的不同点在于:
RTAB之所以和其他不少战斗脚本发生冲突,是因为它把phase4这个表现战斗效果的部分切碎了,为了能够实现“绝对的实时”,也就是任何动作过程都不等待,RTAB不得不将phase4分担到每一个战斗者头上去,并在phase0控制中根据每一个战斗者的phase4_step值来决定这个战斗者应该表现出什么效果。伤害值也是一样,为了实现多人攻击一人时伤害值不覆盖,不得不将damage这个基本属性分开定义,这就是RTAB和几乎所有战斗表现类、战斗系统伤害修改类冲突的原因。

如果要实现没有冲突,那就必须放弃“绝对的实时”,在RTAB的实时设定中,有4级
1. 绝对的实时
2. 动作表现时等待
3. 2以外,选择道具、特技时等待
4. 所有动作全部等待,只在没人可以行动时实施CP积累和控制

除了1级以外,以下的3级,全都可以在不对phase4相关部分重定义中实现。

比如说实现2级实时:
phase1
进入CP积累控制进程
有人可以行动的情况:
   是敌人->生成行动后进入phase4,执行行动,这个中途不需要积累CP
   是我方->进入phase3(选择行动),这个中途继续积累CP,如果敌人积满了就让敌人行动(反正这个时候我方那个角色在phase3,不会执行动作),我方选好行动以后进入phase4,执行行动,行动过程中不需要积累CP
无人可以行动的情况:
    积累到有人可以行动为止


这样,phase4虽然也从敌我双方各行动一次变成了敌我双方中一个角色行动一次,但这一次行动是完整的(step1到step6一气呵成),中间没有打断的可能,这就不需要去定义各角色的phase4_step,也无需重定义damage属性(因为攻击者在一时间只有1个人)。

而3级、4级的实时战斗就更简单了……(顺便说一下,樱雅的RTAB脚本就是实现的4级实时战斗)

自写RTAB有一个问题要解决,就是phase3的打断问题,比如当一个角色在输入命令时,敌人行动,把它打死了,或中了某个状态让它动不了了,或不能使用魔法了等等,这时phase3都要强行结束而让这个正在输命令的角色直接进入phase4去。此外还有一个小问题,就是我方有多人可以同时行动时如何切换输入命令的问题。所以RTAB对phase3_update的改动一定是相当大的。

主控(CP积累)回合可以另行定义phase0,但也可以不这么做,把phase2“挪作它用”,要知道phase2原来在回合制里是回合的标记,现在RTAB根本无所谓“回合”这个概念,所以当然可以这么来用。phase2的逃跑功能,可以另作安排,比如热键逃跑(如我的游戏就用了按压L+R在战斗中逃跑)。

图示:         <----------------------+
phase1 -> phase2 ->(我) phase3 -> phase4
             |    ->(敌)---------> phase4
             V
           phase5
由于phase4不和主控回合并行,所以原理上相对简单了很多

RTAB的另一个大问题是修改“强制行动”的解释器(Interpreter command_338好像是),这个解释器必须重写(特别是当设定为“按正常的顺序行动”时)RTAB脚本用的办法是另行定义一个"forcing_action"属性,如果有强制行动,在phase4时临时赋给current_action,我也基本上沿用了这个办法。

最后还有一个战斗事件的解释触发(回合),这个算法可以自己写,以前在旧站讨论过有这么几种算法:
--每人行动一次算一回合,缺点是有人不能行动时,甚至有人CP不能积累时(比如中了停止状态)回合数就卡死了
--每人行动次数除以战场上存活人数,每满人数次算一回合,在战斗事件触发上这是个比较好的办法,但是有速度快的人陷入战斗不能时,回合数会混乱,另外,怪物的动作过快(过慢)时,行动会和设置的预期相去比较远
--每人行动一次自己算一回合,没有全局回合数,这样怪物的行动会比较正常,但是战斗事件的触发以哪个为准呢……可以另设一个全局回合数,比如以所有人平均速度值积累……

最后一句话,无冲突实现RTAB的话就是照着2级实时的方法去实现,这样大多数的战斗特效、血条什么的基本都可以用,反击也没问题,原有的RTAB预留的“咏唱”“连体技”都可以实现……RTAB自带的近大远小的功能,站上也有单独功能的脚本可以套用

除非是一定要实现1级实时的效果,那就用RTAB脚本吧……


              [本贴由 柳柳 于 2005-10-28 6:23:57 最后编辑]
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2005-10-21
帖子
55
发表于 2005-10-27 19:26:45 | 显示全部楼层
- -原来主要都是及时惹的祸.不过偶现在把及时度降的很多了.基本就像真说武士道那类的游戏那样...除了积累槽是有效果的...其他的...都静止了...让大家按顺序行动= =...
QQ:345762628  MSN:[email protected]
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-26
帖子
31
发表于 2005-10-28 01:20:17 | 显示全部楼层
看来我得改成2级了.......这样可以套点有用特效~(不过其实话说回来,即时的话,用2级已经很不错了~)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

堕落天使

梦石
0
星屑
55
在线时间
73 小时
注册时间
2005-10-22
帖子
337
发表于 2005-10-28 02:09:23 | 显示全部楼层
没看明白......回去再看看~~~卡卡~
厌世了……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-18 22:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表