じ☆ve冰风 发表于 2024-11-21 22:13:17

脚本开发者向|战斗流程与伤害计算规则的初步研究与更改

结论

修改Game_Action.prototype.makeDamageValue来实现对伤害系统的改写。

废话

对RMMV的伤害判定机制进行了初步摸索,基本确定了RMMV的伤害判定流程。
于是在这里将研究成果记录下来,梳理梳理脑子,顺带做个备份避免以后忘了(〃´-ω-) 。

如果发现这里对伤害机制的说明有问题,欢迎指正_(:з」∠)_ 。

启动流程

RMMV需要进入战斗场景并在执行操作时进行伤害计算,其中战斗场景可以通过多种方式进入:
* 地图随机遇敌
* 编辑器测试战斗
* 事件触发战斗
* 通过F8窗口输入脚本手动进入(略)

但无论通过什么方式进入战斗场景,在进入之前都会调用BattleManager.setup完成对战斗数据的配置。

地图随机遇敌

脚本调用顺序:
* Scene_Map.prototype.update
* Scene_Map.prototype.updateScene
* Scene_Map.prototype.updateEncounter
* 进入战斗场景:Scene_Battle

编辑器测试战斗

脚本调用顺序:
* Scene_Boot.prototype.start
* 进入战斗场景:Scene_Battle

事件触发战斗

脚本调用顺序:
* Game_Interpreter.prototype.command301
* 进入战斗场景:Scene_Battle

战斗数据流程

进入战斗场景后,游戏的主逻辑将会开始在Scene_Battle中循环。

Scene_Battle会处理战斗场景的UI表现逻辑。
战斗数据的相关逻辑会被Scene_Battle通过updateBattleProcess转交给BattleManager来推进。

脚本调用顺序(从Scene_Battle到实际演算伤害的代码块):
* Scene_Battle.prototype.update
* Scene_Battle.prototype.updateBattleProcess
* BattleManager.update
* BattleManager.updateAction
* BattleManager.invokeAction
* BattleManager.invokeNormalAction
* Game_Action.prototype.apply
* Game_Action.prototype.makeDamageValue

其中决定回合战斗中,某次战斗所造成的实际伤害的方法是:“Game_Action.prototype.makeDamageValue”。
通过修改Game_Action.prototype.makeDamageValue,就可以实现对伤害系统的改写。

示例

假设现在游戏中需要有一个光和暗的系统,其中光属性的角色可以对暗属性的角色造成双倍伤害,反之伤害减半,则可以通过如下代码来改写:

JAVASCRIPT 代码
var makeDamageValue = Game_Action.prototype.makeDamageValue;
Game_Action.prototype.makeDamageValue = function(target, critical){
    var value = makeDamageValue.call(this, target, critical);
    value *= this.applyElementType(target);
    return Math.round(value); // 放置Math.round的位置会影响伤害的精度。
};
Game_Action.prototype.applyElementType = function(target){
var subject = this.subject();
var element_a = subject.elementType(); // elementType是不存在的方法,这里假设elementType可以获取战斗角色的光暗属性
var element_b = target.elementType();
return{
    "light": {"light": 1, "dark": 2},
    "dark": {"light": 0.5, "dark": 1},
};
};

            本帖来自P1论坛作者怠惰な騎士,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=400950若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 脚本开发者向|战斗流程与伤害计算规则的初步研究与更改