战斗建模简介

简介

Tip

强烈建议在继续阅读之前对游戏《崩坏:星穹铁道》有一定了解

《崩坏:星穹铁道》是一款回合制的战斗游戏, 玩家的目标是控制所用的角色击败所有敌方单位(使其血量值归零并且从战场上消失). 游戏开始后,可控角色和敌方单位会根据各自当前行动值依次行动,行动值最小的单位将执行动作. 玩家单位具有能量条,能量条充满以后可以执行在任意位置插入的终结技回合.

这部分内容将会介绍战斗建模部分的代码框架逻辑: 整个游戏由GameManager进行控制,游戏内的所有可互动对象将会由CombatEntity描述. 对于战斗部分的建模 我们主要关注以下两大部分

  • 角色和角色之间, 角色和敌人之间, 敌人和敌人之间的互动. 主要有包括: 攻击, 施加状态, 治疗三大类

  • 所有可互动对象的行动情况

  • 角色和敌人的数值,状态管理

游戏主循环和行动管理

  • GameManager: GameManager由一个主循环驱动,在游戏开始后开始从一个最小堆里取出需要行动的Cycle. 每个Cycle在执行之前需要从决策空间里进行一次决策. 如果这个Cycle是由敌方行动,GameManager将使用EnemeyAgent和RLAgent进行共同决策(RLAgent会决定是否执行插入回合), 如果这个Cycle是己方行动,那么这个Cycle将会由RLAgent进行决策(普攻/战技和插入回合).GameManager同时进行战技点数的管理.

  • Cycle: Cycle是一个Agent可以执行决策的最小单位. Agent需要在每个Cycle的起始执行决策, 并在Cycle结束以后获得feedback. 每个Cycle属于一个CombatEntity. Cycle包含一个行动值,由所对应的CombatEntity的内置Timer决定. 如果这个Cycle属于插入回合/额外回合, 则拥有最高优先级, 优先于正常Cycle执行 每个CombatEntity会给定一个决策空间

  • Timer: 用于管理行动值计算

See also

关于游戏的行动值机制:NGA 行动值计算教学

对象互动

  • CombatEntity: CombatEntity是最基本的战斗对象, 主要包括角色和敌人两类. 神君,回合计数器等特殊单位也由CombatEntity实现.ComBatEntity会储存这个实体当前的状态和基础状态.
    • Enemy Enemy是CombatEntity的一个子类, Enemy的基础属性由敌人类型, 敌人等级共同决定

    • Character Character是CombatEntity的一个子类,Character的基础属性由角色本身,角色等级,角色光锥共同决定
      • LightCone. 光锥是一个会给Character提升基础属性的装备, 不同的光锥有不同的属性,由LightCone类进行解析. 由光锥的名字和等级决定属性

  • StateAdjust: 游戏内的大多数特殊效果都由StatesAdjust实现. 尽管一些特殊效果在实际游戏中并不以可见buff形式出现,但是在本项目的框架中,这是最有效的实现方式 包括以下部分
    • 遗器效果

    • 光锥的特效

    • 普攻,战技的特效

    • 持续伤害

    • buff和debuff

    StateAdjust有以下几个基本类型
    • 开发中

  • Event: StateAdjust拥有一个触发器列表, 会监听CombatEntity/GameManager内的触发器. 当CombatEntity或者GameManager执行特定动作的时候 会触发StatesAdjust的函数 执行相应动作.

  • 主要事件包括以下部分
    • Entity事件
      • 攻击事件
        • 普通攻击

        • 战技攻击

        • 追加攻击

        • 终结技攻击

      • 受击事件

      • 生命值变化

      • 能量值变化

      • BUFF/DEBUFF变化

      • 角色Cycle开始

      • 角色Cycle结束

    • 世界事件
      • 游戏开始

      • 游戏结束

      • 战技点变化

数据管理

  • DataManager: 单例对象,用于储存各种表格数据以供解析 目前数据来源为666bj的解包数据.包括角色和敌人属性 目前需要开发技能倍率部分的解析