战斗系统流程

本文是军事与战斗系统的流程设计文档,描述从「小队模板 → 编队 → 养成 → 行军 → 战斗 → 战斗结果」的完整闭环。后续开发以本文为准。

核心操作原则:战斗自动进行,玩家低频干预。 战斗结果主要由战前的编制、训练、装备、补给、统帅与行军决策决定;玩家可在关键节点下达少量军令调整局面,但不需要持续盯着战斗或逐时辰操作。

闭环总览

小队模板(兵种图纸)
  → 创建编队、编组小队
  → 日常养成(补兵、训练、补给)
  → 行军(大地图移动)
  → 同单元格遭遇,触发战斗
  → 战斗过程(自动按时辰结算,玩家可低频下达军令,伤亡实时作用于编队)
  → 战斗结果(全歼 / 溃败 / 战胜,战报展示)

一、编队创建与运营

玩家作为势力,需要创建编队来为势力的军事目标提供基础。

UI界面操作先略

  • 编队必须指定一名统帅(势力麾下人物)。
  • 编队创建时绑定一座供给城市,日常补给由该城市提供。
  • 编队创建时获得初始战术点,用于战斗中下达军令。
  • 编队在大地图上拥有坐标,创建时位于所属城市。

创建编队后需要在编队中创建小队,小队决定了编队中有哪些兵种。 小队可以直接使用已有的小队模板,也可以自定义创建小队模板(复制官式模板后修改配装;修改后模板版本提升,已建成的旧小队需排队换装)。 玩家创建小队时需要分别设定小队最大人数与小队模板。两者是互相独立的配置:人数属于小队实例,模板不保存、推荐或覆盖人数;同一个模板可以用于任意合法人数的小队。

小队模板是兵种的”图纸”,包含:

  • 战线宽度:该小队在战线上占据的接战正面宽度。
  • 偏好战线:前线 / 支援 / 预备 / 自动。
  • 装备、训练方式与模块:共同决定小队的战斗能力倾向(近战、远程、骑兵、水战等)。水域作战的小队模板必须包含船体模块。

应用模板只改变小队的装备、训练方式、模块、战线偏好等模板化配置,绝不改变小队最大人数。装备需求由“小队最大人数 × 模板中的个人装备”实时计算;因此同一模板应用于 300 人和 1000 人的小队时,会分别产生对应数量的个人装备需求。

应用完毕后,编队会根据预备役进行每月判定:

  • 补兵:补兵过程中会根据国家府库容量补充装备,同时计算数值。「目前由地方单独供给,地方供给粮食、装备、弹药。需要配置供给城市(可修改),供给效率由供给距离决定(供给城市越远,效率越低,最低为 0),编队可随时切换补给城市,同时可以进行一次手动补充(例如切换某个城市为补给城市时,可以手动进行一次装备/弹药补充。因为粮食消耗是持续性的,所以粮食不会自动补充。另外,粮食补给提供快捷按钮【快速选取最近城市】,会选择补给效率最高的城市作为军队补给。」
    • 注:玩家可多个城市同步生产装备,然后使用「运输」来集中装备,也可以让编队行进过程中不断补充。
  • 训练:根据编队状态进行,当编队不处于「行军、战斗」状态时,会自动进行训练,训练效果由科技、编队人物配置和训练方式来共同决定。
    • 训练的输入是兵源与训练方式:补兵到位使小队达到满编,训练完成后小队的组织度、士气、训练度获得基础值。
    • 装备/弹药补充与训练相互独立,遵循以下规则:
      1. 创建时补充(可选):小队创建时可选择立即按模板配齐装备;也可暂不补充,等待装备产能到位后再补。
      2. 自动补充:默认开启,随每月补给判定自动从供给城市补充装备/弹药。
      3. 手动补充:每支小队提供「自动/手动」开关;切换为手动后暂停自动补充,由玩家择机手动执行一次补充。用于装备紧张时暂停部分队伍的补充,将装备优先分配给精锐部队。
    • 训练方式是一个标签,是小队必须的配置项:每支小队需要配置一个训练方式标签作为训练的输入,它决定小队训练的方向与成效。训练方式标签的来源有:
      1. 人物:人物自带训练法标签,例如高顺的「陷阵营训练法」。人物必须在编队中,其标签才可供该编队的小队配置——以此突出传授与人物本身的重要性。一般来说该标签可以传承:人物之间通过教育模块进行传授,与人物关系、教育等因素相关(教育模块为独立系统,后续单独设计);军事系统只关心人物是否具有相应标签。
      2. 科技:科技可以解锁训练法标签。部分训练法由科技与地理环境共同决定,例如「山地训练法」——需要解锁对应科技,且训练所在地具备山地环境,方可获得。
    • 训练方式与装备、模块共同决定小队的战斗能力倾向,并影响小队可激活的战法。
  • 士气与组织度:战斗中会消耗士气,发动军令、阶段转换等阶段会消耗组织度;和平时期通过驻扎缓慢恢(补给充足、武将特性等方面会提供加成),恢复速度受编队或小队的人物相关属性影响。
  • 日常消耗:
    • 粮食:按人数持续消耗;战斗中消耗翻 2 倍。粮食不足的影响面更广:通过 debuff 层数控制,层数越高,每时辰逃跑的士兵越多,相关属性惩罚越高。
    • 装备/弹药:军队不直接消耗钱,所有的钱都通过装备的形式作为维护——需要对应的装备/弹药供给。装备/弹药不足只影响士气与编队属性(包括降低士气),短缺不会造成士兵逃跑。
    • 短缺恢复:供给恢复后,短缺造成的 debuff 不会立刻消失,而是随持续供给逐层消退(每次恢复消除一层),完全恢复需要与短缺程度相当的时间。

二、行军

大地图行军

  • 部队标识:编队在大地图上以统帅武将头像作为标识,位置随连续坐标实时插值移动;移动随游戏时间推进,游戏暂停时编队停止行军。
  • 快捷选择:玩家可随时在大地图上点选部队,也可通过右侧栏快速定位对应编队。
  • 编队界面:选中编队后弹出编队信息界面(类似城市界面),此后玩家处于「编队选择状态」。
  • 移动命令:选择状态下右键目标单元格即可命令编队移动;支持多选编队进行批量移动(参考 EU4)。
  • 驻扎命令:选择状态下可下达停止移动(驻扎)命令,编队记录当前位置与状态,不再行军。注意区分:选择状态下点击编队当前所在单元格,视为向「单元格内」移动,不会暂停行军。

移动结算

  • 位置即状态:编队在大地图上持有连续坐标 (x, y),不记录「已累积路程」;头像位置由坐标直接插值显示。
  • 路径 = 途经点序列:相邻单元格间的移动拆为 A中心 → A/B边界点 → B中心 两段,完整路径为途经点列表,编队始终朝向下一个途经点移动。边界点按相邻格对预计算并缓存。
  • 时辰结算:每个时辰按 基础速度 × 地形修正 × 天气修正 前进,修正取当前坐标所在单元格的地形与实时天气——地形/天气影响的是速度而非时间上限,天气中途变化自然生效。
  • 改道规则:行军途中变更目标时,以当前位置为起点重新寻路,新路径仍需经过目标方向的固定边界点(如 当前位置 → A/C边界点 → C中心),不做直线求交。由此产生的少量绕路视为改道代价(模拟朝令夕改的传令与转向摩擦),偏差有界,最大约为共享边长的一半。
  • 换格事件:越过边界途经点时触发换格——战斗遭遇判定、视野更新、补给效率变化等均挂在此事件上。

寻路与路径规划

  • 寻路算法:途经点图上跑 A*,权重为静态地形预估时间——只考虑地形,不考虑天气。天气不可控,不纳入规划;天气恶化参考 CK3 的恶化事件处理,一般不触发重新寻路。
  • 天气 seed 化:天气由 seed 生成,S/L 后天气不变,降低挫败感;熟练玩家可依据雨季/旱季规律自行规划更优路线(微操空间)。
  • 手动路径:玩家可通过 Shift+右键依次设定多个途经点,自定义完整行军路径。

行军与战斗的衔接

  • 战斗中冻结:时辰内移动途中触发战斗时,编队冻结在当前位置,剩余移动量作废;战斗开始位置即战斗结束位置。
  • 战后位置:战胜方沿原路径继续行军;溃败方进入溃败流程(见「三、战斗结果」),沿原路径撤向补给城市,撤退时可由玩家手动退出「流亡」状态。(初步方案,后续完善)
  • 通过点容量:不做吞吐限制,桥梁、山口等简化处理,不限流。

河流与水路移动

  • 河流表示:单元格的河流是带方向的多层标签。按单元格的 6 个邻接方向(a~f)记录河流出入通路,且支持分层通路——不交汇的河流各占一层,如指定「a 进 c 出」「b 进 e 出」两条通路,则从 a 进入的水流不能从 b/e 出(类似泰拉瑞亚的多色电线)。
  • 水路途经点:航行时途经点链即河流通路(入方向口 → 格内水道 → 出方向口),移动结算复用陆行同一套「坐标 + 途经点 + 时辰速度」体系。
  • 搭载形态:编队具有 陆行 / 航行 状态。航行要求编队船体容量 ≥ 搭载兵力(船体模块提供容量);无船编队只能通过渡口临时渡河,不能沿河机动。
  • 形态转换点(上船/登陆,耗时若干时辰整备,期间组织度大降、受击有惩罚):
    • 港口:城市建筑,己方/盟方可用;转换最快,可补给、修船;敌对港口不可直接登陆,需先攻城或改走滩头。
    • 渡口:河流边界上预配置的通过点;中速,无加成,与渡河战联动。
    • 滩头:任意开放水岸;最慢,登陆时若遭阻击触发登陆战。
  • 港口加成(可扩展):补给效率、水军训练速度、船只产能/维修,可作为水军的「水上供给城市」。

单元格细节

  • 单元格属性(初步):地形、实时天气、城市、河流通路(分层标签)、建筑(含港口)。(待细化)
  • 天气:按天为粒度变化的小区域天气;单元格提供 坐标 <x,y> → weather 的查询接口(当前阶段先预留接口,不深入实现)。
  • 边界类型(初步):开放 / 减速(如森林边缘,附加穿越耗时)/ 受限(仅可通过桥梁、渡口、山口等固定通过点)。(待细化,与渡河战触发判定关联)

三、战斗

战斗创建

当某个单元格(无论是否完全抵达单元格),只要部队判定在同一单元格,则开始判定是否触发战斗。

每个单元格同一时间最多存在一个战斗实例,一场战斗固定只有两个交战阵营。战斗由最先接触的两支敌对编队创建并确定双方阵营;如果单元格已经存在战斗,后续抵达的编队按「援军与第三方编队的加入」规则处理,不另行创建并行战斗。

各类对象的触发区别如下:

  • 单元格如果有城市,只要有一支敌对编队,则触发战斗(攻城战)。
  • 单元格没有城市时:
    • 如果有两支以上的互相敌对编队,则触发战斗(野战)。
    • 出现多支复杂关系编队时,仍由最先接触的两支敌对编队创建两方战斗;其他编队按援军或坐观处理,不进行三方同场混战。
  • 单元格具备一支水军时,如果有敌对陆上编队,则触发封锁(不会触发战斗),封锁时,敌对陆上部队无法跨河移动。
  • 单元格具备两支以上互相敌对的水军时,触发战斗(水战)。

此外还存在两种特殊战斗形态:

  • 渡河战:一方试图跨越河流时遭到阻击触发。正在跨越河流边界的一方为进攻方,已在对岸并实施阻击的一方为防守方,不以谁更早进入整个单元格判定。有无桥梁、滩头、准备程度决定攻方初始可投入的战线宽度;攻方崩溃时承受额外的渡河失败伤亡,伤亡程度受退路控制情况影响。
    • 如果双方同时从河流两侧相向跨越,则视为仓促遭遇,转为普通野战,不设传统意义上的防守方;双方均可受到仓促接战的初始影响。
    • 战斗中的援军如果从河流方向进入,只由该批援军承受渡河部署影响,不改变整场战斗已确定的攻守关系。
  • 登陆战:水军向陆地投送部队时触发。滩头战线宽度随战斗推进逐步扩展,稳固后转为野战。

攻城战以城墙完整度与破口宽度双轨推进:攻击方持续破坏城墙,破口达到一定程度后战斗转入巷战阶段。

首个版本只将野战、攻城战、渡河战、登陆战与水战作为正式战斗形态。伏击、救援、突围、袭营等场景暂作为战斗背景或初始修正,不单独建立新的战斗类型。后续只有当某个场景需要改变战斗阶段、战线结构或结束条件时,再将其扩展为独立形态。

开战部署

战斗创建时,双方编队自动完成部署:

  • 每支小队按偏好战线进入前线、支援、预备三层阵列。
  • 战线有总宽度限制,超出宽度的小队进入预备队,等待前线出现缺口时按部署优先级补位。
  • 兵员不足的小队占据的战线宽度按比例缩减。
  • 按双方统帅的治军与统御选出各自的主帅,主帅影响军令节奏与部队稳定性(具体作用待讨论)。

战斗过程

战斗创建后立即进入自动结算,不等待玩家确认或下达军令。自动结算负责部署、补位、战法评估、伤亡、溃退与结束判定;无论玩家是否查看战斗界面,都使用同一套规则。

玩家可在任意时刻下达军令,但军令属于可选干预:没有新军令时,编队会继续按当前状态正常作战。持续性军令在生效后维持若干时辰,或直至被新军令替换、生效条件消失;即时性军令执行一次后结束。设计目标是一场常规战斗中,玩家通常只需要下达 1—3 次军令,也可以完全不干预。

战斗为时辰判定,每个时辰按固定顺序结算一轮:

  1. 军令结算:新下达的军令延迟一个时辰生效,消耗战术点;已生效的持续性军令在本时辰继续执行。没有军令时不消耗战术点,也不会中断战斗。可用军令:
    • 坚守(持续):降低受到的伤害,适合拖时间等待援军。
    • 投入预备队(即时):将预备队压上战线。
    • 强行突破(限时攻势):持续 3 个结算时辰,到期转坚守,再整备 3 时辰;接战部队平均组织度至少 40、疲劳至多 65。
    • 有序撤退(即时):需要两个时辰准备,准备完成后脱离战斗,减少撤退损失。
    • 全力追击(即时):要求敌方正在撤退且己方拥有骑兵/高机动单位,扩大敌方撤退损失。
  2. 补充战线:前线出现缺口时,预备队按部署优先级(受小队训练度、组织度、疲劳影响)自动补位。
  3. 阶段转换:登陆战滩头稳固后转为野战;攻城战破口达标后转入巷战。
  4. 撤退结算:准备完成的有序撤退在本时辰脱离战斗。
  5. 能力(战法)评估:根据战场地形、天气、科技、小队状态等条件,判定各小队的战法是否激活。激活的战法为本时辰提供增益。
  6. 输出与伤亡:双方计算总输出,按各自占据的战线宽度比例向对方分摊伤亡、组织度与士气损失。远程小队的输出受弹药充足程度影响。小队的疲劳随战斗持续累积,疲劳过高的部队战斗力下降。
  7. 溃退传播:兵力、组织度或士气归零的小队溃逃,退出战线,并向同侧友军扩散士气打击——溃逃可能引发连锁崩溃。
  8. 结束判定:一方总士气低于崩溃线,或已无可以作战的小队时,战斗结束。

其他规则:

  • 伤亡实时生效:每个时辰的伤亡直接削减小队的兵员、组织度、士气并累积疲劳,编队总兵力与士气同步变化——战斗中查看编队,看到的就是实时状态。
  • 关键节点提醒:开战、援军抵达、战线明显动摇、一方开始撤退和战斗结束时向玩家提示。默认只提示而不强制暂停;玩家可分别配置哪些节点自动暂停时间线。
  • 战斗暂停:玩家仍可随时暂停并查看战况,但暂停不是战斗正常运作的前提。多场战斗同时发生时,未被关注的战斗会继续自动结算。
  • 战斗过程中,如果单元格发生战斗,则单元格上会产生一个战斗中的悬浮标志。

援军与第三方编队的加入

  • 战斗创建时已在同一单元格内的其他编队,与战斗进行中新抵达的编队,均按以下相同规则处理。
  • 战斗进行中,新抵达单元格的编队,如果与其中一方属于同一战争阵营或存在明确的共同作战关系,且与另一方敌对,则自动作为援军加入对应阵营。其小队进入预备队,按正常补位规则参战,不要求玩家额外确认。
  • 仅与某一方有共同敌人,但不属于同一战争阵营、也没有明确共同作战关系的编队,不会因“敌人的敌人”而自动加入任何一方。
  • 与交战双方均敌对的第三方编队抵达时,只能坐观,不加入当前战斗,也不作为当前战斗的攻击目标。
  • 当前战斗结束后,系统对单元格内仍然存在的所有编队重新执行战斗触发判定。如果仍有互相敌对的编队,则按同样规则创建下一场两方战斗。

战斗结果

战斗结束只判定当前战斗的两个交战阵营:当一方达到崩溃条件或已无可作战小队时,结束当前战斗并进行结果结算。坐观编队与其他未参战编队不会阻止当前战斗结束;结果结算完成后,再对单元格重新执行战斗触发判定。

战斗结束后,编队状态:

  • 全歼:比较难,此状态触发时,编队所有人被俘虏或者阵亡,包括编队内人物。
  • 溃败:无法被攻击,也无法主动攻击,会主动撤退到补给城市。如果补给城市被占领,则会触发一次选择补给(玩家可以手动选择),选择有效补给城市【如果在行进过程中,该有效补给城市又被占领,会再触发一次;如果没有有效城市,则编队转换为流亡状态,此时可再次被攻击】。这里模拟无城可回、但仍然还有机会的流亡部队。溃败编队回到补给城市后,清空溃败状态。
  • 战胜:触发对应的人物俘虏、战利品、劫掠、占领等后续行为。

无论胜负,参战小队获得经验值,经验提升小队的作战能力(具体收益待讨论)。

战斗结束后会给到战报 UI 展示。战报首先总结影响胜负的主要原因(兵力与装备差距、地形天气、统帅、补给、军令与关键溃退等),再提供每个时辰的伤亡、军令、溃退等事件供详细复盘。玩家即使没有观看战斗过程,也应能从战报中理解为什么获胜或失败。