Game_Num_Basics_And_Calc

⚔️ 战斗系统详解 (Combat System Mechanics)

本文档定义了 Project Vampirefall 的核心战斗规则,包括伤害计算流程、属性相互作用、异常状态及控制机制。

设计哲学: 本系统的核心目标是构建一个深度可扩展的数值框架,通过乘区理论状态机创造多样化的 Build 体验,同时通过韧性反馈系统保证动作游戏的爽快感。


1. 伤害类型与抗性 (Damage Types & Resistances)

1.1 核心伤害类型

为了保证战斗策略的深度,我们采用经典的“三系”分类。

1.2 🧠 核心理论:乘区理论 (Bucket Theory)

引用自 PoE 与 Diablo 的数值基石,伤害计算遵循乘区理论以防止数值失控并提供策略深度。

最终伤害 = 基础伤害 × 增伤区(Inc) × 独立乘区(More) × 暴击区 × 抗性区

  1. 基础区 (Base): 技能面板 × 武器伤害。
  2. 增伤区 (Additive / Inc): (1 + 物理伤% + 全伤% + 近战伤%)。所有此类词条相加。
    • 设计意图: 随着数值堆叠,收益产生稀释效应
  3. 独立乘区 (Multiplicative / More): (1 + 额外伤A) × (1 + 额外伤B)
    • 设计意图: 极其珍贵,无稀释,是后期 Build 的核心追求。
  4. 抗性区 (Resistance): (1 - (目标抗性 - 穿透))

💡 业界案例 (Path of Exile): PoE 的成功在于通过大量的 “Inc” 词条让新手获得稳定成长,同时用稀有的 “More” 词条奖励深度玩家,创造了极高的 Build 上限。

1.3 核心公式

物理护甲 (Armor) - 线性有效生命值

// 护甲减伤公式 (DR)
// K 为常数 (推荐 3000),决定了减伤曲线的陡峭程度
float damageReduction = Armor / (Armor + K);

元素抗性 (Resistance) - 硬上限

// 抗性计算
// 穿透 (Penetration) 直接做减法
float finalRes = Mathf.Min(TargetRes - AttackerPen, MaxResCap); // MaxResCap 通常为 75%
float multiplier = 1.0f - finalRes;

2. 异常状态 (Status Ailments)

2.1 状态体系

| 状态 | 来源 | 效果定位 | 核心机制 | | :— | :— | :— | :— | | 点燃 (Ignite) | 🔥 火焰 | 持续输出 | 快照机制: 伤害基于触发时的单次击中伤害。不可叠加,只取最高。 | | 冰缓/冻结 (Chill/Freeze) | ❄️ 冰霜 | 控场/窗口 | 阈值机制: 效果取决于伤害占目标 MaxHP 的比例。 | | 感电 (Shock) | ⚡ 雷电 | 易伤/爆发 | 团队共享: 增加目标受到的所有伤害 (独立乘区)。 | | 流血 (Bleed) | ⚔️ 物理 | 移动惩罚 | 动态判定: 目标移动时受到额外 200% 伤害。 |

2.2 🧠 核心算法:伪随机分布 (PRD)

为了避免“脸黑”导致的体验断层,所有概率触发的状态(如暴击、异常)必须使用 PRD 算法。

PRD 原理: 每次触发失败,下次触发概率提升;触发成功,概率重置。 参见: Tech/Algorithms/Roguelike_RNG_Systems.md

// 伪代码逻辑
class PRDCounter {
    float C; // 基础概率对应的增量常数
    int N = 1; // 失败计数器

    bool Check(float baseChance) {
        if (Random.value < C * N) {
            N = 1; return true;
        } else {
            N++; return false;
        }
    }
}

3. 硬直与韧性 (Stagger & Poise)

引入类似《黑暗之魂》的韧性系统,赋予战斗“重量感”和“节奏感”。

3.1 韧性机制

  1. 韧性条 (Poise Bar): 所有单位拥有的隐藏属性。
  2. 削韧 (Poise Damage): 攻击会扣除韧性。韧性伤害 = 伤害 × 冲击系数
  3. 硬直 (Stagger): 当韧性 <= 0 时,单位进入硬直状态,动作被打断,受击动画播放。
  4. 恢复: 若一段时间未受击,韧性开始快速恢复。

3.2 🧠 设计哲学:节奏控制

韧性系统不仅仅是防御属性,更是战斗节奏的控制器。

3.3 核心逻辑示例

// 韧性伤害处理核心逻辑
void TakePoiseDamage(float amount, bool hasForce) {
    if (isStaggered) return; // 硬直中不重复计算

    currentPoise -= amount;
    resetRecoveryTimer(); // 重置恢复计时器

    if (currentPoise <= 0) {
        TriggerStagger(); // 触发硬直
        if (hasForce) ApplyKnockback(); // 仅在破韧时触发击退
    }
}

💡 业界案例 (Dark Souls): 魂系列通过隐藏的韧性数值和分级的硬直动画(小/中/大),创造了精确的打击反馈。我们需要简化此系统,使其适应快节奏的塔防战斗。


4. 仇恨系统 (Aggro System)

由于混合了塔防元素,怪物的仇恨逻辑需要平衡“攻击玩家”和“攻击塔/基地”。

4.1 优先级堆栈

  1. 强制嘲讽 (Taunt): 能够强制覆盖所有逻辑(持续 3s)。
  2. 路径阻挡: 若去往基地的路被堵死,攻击阻挡物(破墙)。
  3. 动态权重: 基于伤害和距离的加权计算。

4.2 🧠 权重公式

AggroScore = (Damage_Dealt_Recent * Weight_Dmg) + (1 / Distance * Weight_Dist)


5. 连击与评分 (Combo & Style)

5.1 连击设计

连击不仅是数字,更是资源获取效率的倍增器。

5.2 阶段奖励

💡 业界案例 (Devil May Cry): 鬼泣的 Style 系统鼓励花样进攻。在我们的设计中,连击主要作为“高风险高回报”的状态,奖励维持战斗流 (Flow) 的玩家。


6. 引用与参考 (References)