DH-SRPG 六:技能与效果实现

好久不见。说起来战棋游戏里一般都有技能
最近实现了技能的框架并更新了SelectManage。虽然还没有固定下来,但是然做了几个技能来测试,感觉还不错。现在来介绍一下,希望能给大家带来一些帮助。
技能框架:
首先技能与其它游戏一样分为两个大类:主动技能与被动技能,它们分别有两个调用的入口:
主动技能:start
被动技能:auto
这两个方法都接收一个字典作为参数。
对于主动技能,因为是手动调用的,所以参数固定,而被动技能因为是在多种情况下都会调用所以参数内容会有所不同,以下是目前的所有auto有的技能调用的参数:
auto 参数一般有以下参数
"class": 大的种类
"type": 小的种类
"state": 状态
"target": 目标,应该是一个对象
"target_position": 目标位置
战斗时触发
"class": "ATTACK" # 表示攻击
"type": "ordinary" # 表示伤害类型
"state": "START" # 表示攻击状态,如果是攻击结束时就是 "END"
"target": <unit> # 被攻击的对象
"harm": <int> # 伤害值
使用例:/game/skills/s_double_attack_magic.tscn
该例子使用了这个参数来在攻击结束时进行一次附加攻击:
可以看到,在auto方法中判断了参数来确定是在攻击结束并且满足cost时调用。

移动时触发
"class": "MOVE"
"start_position": Vector2 # 出发坐标
"target_position": Vector2 # 目的地
"start_cell": 触发的图块信息
"target_cell": 目的地的图块信息,可以利用这个来判别目标区域,实现类似于“走到草地上时hp+1”的技能
"path": 路径数组
"index": 当前的下标
暂时没有使用例子,不过感兴趣可以参考其它技能来试着做一个类似于迅捷步伐的效果:“移动时充能,每移动一格充能+1,达到6时会在强化下一次攻击并为自己回复一定生命值。”
这应该是一个auto类型的效果,并判断传入参数的class是不是MOVE,是就index+1,然后如果达到目标值就设置一个key值,然后auto在key为true时再检测class是不是ATTACK且是STATE,这里可以增加额外效果,当然,这个auto应该还检测ATTACK的END,如果需要在攻击结束后根据实际照成的伤害来恢复生命值的话。
回合结束时调用
"class": "ROUND_END"
"user": 技能持有者,
"round_number": 回合数
使用例:/game/skills/s_rolling_currrent_attack_up.tscn
这是一个捏他VN的技能:翻滚并强化下一次攻击,因为强化攻击拥有时效性所以有用到这个参数,以下是部分代码实现:

在技能时效期间照成了4点伤害,而技能过期后回复成了3点伤害

SelectManage更新:
为了能更加好的配合Skill,做了一些更新。
现在加入了”层级“的概念:
layer里增加了许多回调,也得益于回调,很多效果得以顺利实现。来看一下用到了clear_callable, move_callable, callable回调的技能例子:/game/skills/s_dark_explode.tscn

虽然说技能还没有确定下来,但是已经初见形状了。下一个目标是制作局域网联机功能,这样就完全从之前的旧项目迁移过来了,感谢您的关注。
致歉:因为项目的更新随时都有可能会破坏原有的代码,您在看到此文时它可能已经不是最新的了,请以现在项目的具体情况为准。
欢迎大家给项目提Issues
项目地址:https://gitee.com/DH-DoveG/dh-srpg-demo