combat-system-creator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCombat System Creator - SHINOBI WAY
战斗系统创建工具 - 《SHINOBI WAY》
Create combat system components following the dual-system architecture: pure calculations separated from state workflow.
遵循双系统架构创建战斗系统组件:将纯计算与状态工作流分离。
Architecture Principle
架构原则
Player Action → CombatCalculationSystem (pure math) → CombatWorkflowSystem (apply to state)CombatCalculationSystem: Pure functions, no mutations, returns complete results
CombatWorkflowSystem: State management, applies calculated results, controls flow
Player Action → CombatCalculationSystem (pure math) → CombatWorkflowSystem (apply to state)CombatCalculationSystem:纯函数,无状态变更,返回完整结果
CombatWorkflowSystem:状态管理,应用计算结果,控制流程
When to Use
适用场景
- Add new damage calculations or formulas
- Create new status effects or mitigation mechanics
- Add new combat phases or turn logic
- Refactor existing combat code
- Balance or modify combat math
- 添加新的伤害计算或公式
- 创建新的状态效果或减伤机制
- 添加新的战斗阶段或回合逻辑
- 重构现有战斗代码
- 平衡或修改战斗数值
Quick Reference
快速参考
Damage Pipeline (5 Steps)
伤害计算流程(5步)
1. Hit Check → MELEE: Speed vs Speed | RANGED: Accuracy vs Speed | AUTO: Always hits
2. Base Damage → ScalingStat × damageMult
3. Element → Super: 1.5× (+10% crit) | Resist: 0.5× | Neutral: 1.0×
4. Critical → 8% + (DEX × 0.5) + bonuses, max 75%, multiplier 1.75×
5. Defense → Flat (max 60% reduction) then % (soft cap 75%)1. Hit Check → MELEE: Speed vs Speed | RANGED: Accuracy vs Speed | AUTO: Always hits
2. Base Damage → ScalingStat × damageMult
3. Element → Super: 1.5× (+10% crit) | Resist: 0.5× | Neutral: 1.0×
4. Critical → 8% + (DEX × 0.5) + bonuses, max 75%, multiplier 1.75×
5. Defense → Flat (max 60% reduction) then % (soft cap 75%)Mitigation Pipeline (Priority Order)
减伤流程(优先级顺序)
1. INVULNERABILITY → Blocks ALL damage (return 0)
2. REFLECTION → Calculate reflected damage (before curse)
3. CURSE → Amplify: damage × (1 + curseValue)
4. SHIELD → Absorb damage before HP
5. GUTS → Survive at 1 HP if roll succeeds1. INVULNERABILITY → Blocks ALL damage (return 0)
2. REFLECTION → Calculate reflected damage (before curse)
3. CURSE → Amplify: damage × (1 + curseValue)
4. SHIELD → Absorb damage before HP
5. GUTS → Survive at 1 HP if roll succeedsDefense Formulas
防御公式
| Type | Flat | Percent (Soft Cap) |
|---|---|---|
| Physical | | |
| Elemental | | |
| Mental | | |
| 类型 | 固定防御 | 百分比防御(软上限) |
|---|---|---|
| 物理 | | |
| 元素 | | |
| 精神 | | |
Damage Properties
伤害属性
| Property | Flat Def | % Def |
|---|---|---|
| NORMAL | ✅ (max 60%) | ✅ |
| PIERCING | ❌ | ✅ |
| ARMOR_BREAK | ✅ | ❌ |
| TRUE | ❌ | ❌ |
| 属性 | 固定防御减免 | 百分比防御减免 |
|---|---|---|
| NORMAL | ✅(最高60%) | ✅ |
| PIERCING | ❌ | ✅ |
| ARMOR_BREAK | ✅ | ❌ |
| TRUE | ❌ | ❌ |
Workflow: Adding New Mechanics
工作流:添加新机制
Step 1: Identify System
步骤1:确定所属系统
Ask: Is this pure math or state management?
| CombatCalculationSystem | CombatWorkflowSystem |
|---|---|
| Damage formulas | Applying damage to HP |
| Hit/miss/evasion rolls | Turn order management |
| Crit calculations | Buff duration tracking |
| Defense reduction | Phase transitions |
| Effect chance rolls | Combat log generation |
思考:这是纯计算还是状态管理?
| CombatCalculationSystem | CombatWorkflowSystem |
|---|---|
| 伤害公式 | 将伤害应用到HP |
| 命中/闪避判定 | 回合顺序管理 |
| 暴击计算 | 增益效果时长追踪 |
| 防御减免计算 | 阶段转换 |
| 效果触发概率判定 | 战斗日志生成 |
Step 2: Design the Calculation Interface
步骤2:设计计算接口
For new calculations, define the result interface:
typescript
interface NewMechanicResult {
// All values needed to apply this mechanic
value: number;
triggered: boolean;
// Metadata for logging
logs: CombatLogEntry[];
}对于新的计算逻辑,定义结果接口:
typescript
interface NewMechanicResult {
// 应用该机制所需的所有值
value: number;
triggered: boolean;
// 日志元数据
logs: CombatLogEntry[];
}Step 3: Implement Pure Function
步骤3:实现纯函数
typescript
// In CombatCalculationSystem
function calculateNewMechanic(
attackerStats: DerivedStats,
defenderStats: DerivedStats,
context: CombatContext
): NewMechanicResult {
// Pure calculation - NO state mutation
return { value, triggered, logs };
}typescript
// 在CombatCalculationSystem中
function calculateNewMechanic(
attackerStats: DerivedStats,
defenderStats: DerivedStats,
context: CombatContext
): NewMechanicResult {
// 纯计算 - 无状态变更
return { value, triggered, logs };
}Step 4: Implement Workflow Application
步骤4:实现工作流应用逻辑
typescript
// In CombatWorkflowSystem
function applyNewMechanic(
state: CombatWorkflowState,
result: NewMechanicResult
): CombatWorkflowState {
// Apply result to state - returns NEW state
return { ...state, /* updated values */ };
}typescript
// 在CombatWorkflowSystem中
function applyNewMechanic(
state: CombatWorkflowState,
result: NewMechanicResult
): CombatWorkflowState {
// 将结果应用到状态 - 返回新状态
return { ...state, /* 更新后的值 */ };
}Creating New Status Effects
创建新状态效果
Effect Types Available
可用效果类型
typescript
// Damage Over Time
DOT, BLEED, BURN, POISON
// Crowd Control
STUN, CONFUSION, SILENCE
// Defensive
SHIELD, INVULNERABILITY, REFLECTION
// Stat Modifiers
BUFF, DEBUFF, CURSE
// Recovery
HEAL, REGEN, CHAKRA_DRAINtypescript
// 持续伤害
DOT, BLEED, BURN, POISON
// 群体控制
STUN, CONFUSION, SILENCE
// 防御类
SHIELD, INVULNERABILITY, REFLECTION
// 属性修改
BUFF, DEBUFF, CURSE
// 恢复类
HEAL, REGEN, CHAKRA_DRAINEffect Interface
效果接口
typescript
interface SkillEffect {
type: EffectType;
value: number; // Damage/heal amount or multiplier
duration: number; // Turns (-1 = permanent)
chance: number; // 0.0-1.0 application chance
targetStat?: PrimaryStat; // For BUFF/DEBUFF
damageType?: DamageType; // For DoTs
damageProperty?: DamageProperty;
}typescript
interface SkillEffect {
type: EffectType;
value: number; // 伤害/治疗量或乘数
duration: number; // 持续回合数(-1 = 永久)
chance: number; // 触发概率(0.0-1.0)
targetStat?: PrimaryStat; // 用于BUFF/DEBUFF
damageType?: DamageType; // 用于持续伤害
damageProperty?: DamageProperty;
}DoT Damage Formula
持续伤害公式
typescript
// DoTs get 50% defense mitigation
dotDamage = max(1, baseDamage - (flatDef × 0.5) - (damage × percentDef × 0.5))typescript
// 持续伤害仅受到50%的防御减免
dotDamage = max(1, baseDamage - (flatDef × 0.5) - (damage × percentDef × 0.5))Creating New Combat Phases
创建新战斗阶段
Existing Turn Phases
现有回合阶段
Player Turn:
- TURN_START → Reset flags
- UPKEEP → Toggle costs, passive regen
- MAIN_ACTION → Skill execution
- DEATH_CHECK → Victory/defeat
- TURN_END → Mark turn complete
Enemy Turn:
- DOT_ENEMY → Process enemy DoTs
- DOT_PLAYER → Process player DoTs (through shield)
- DEATH_CHECK_DOT → Check DoT kills
- ENEMY_ACTION → AI skill selection + execution
- DEATH_CHECK_ATTACK → Check combat kills
- RESOURCE_RECOVERY → Cooldowns, chakra regen
- TERRAIN_HAZARDS → Environmental damage
- FINAL_DEATH_CHECK → Hazard kills
玩家回合:
- TURN_START → 重置标记
- UPKEEP → 扣除消耗,被动恢复
- MAIN_ACTION → 技能执行
- DEATH_CHECK → 判定胜负
- TURN_END → 标记回合结束
敌人回合:
- DOT_ENEMY → 处理敌人的持续伤害
- DOT_PLAYER → 处理玩家的持续伤害(先通过护盾抵消)
- DEATH_CHECK_DOT → 判定持续伤害是否造成击杀
- ENEMY_ACTION → AI选择并执行技能
- DEATH_CHECK_ATTACK → 判定攻击是否造成击杀
- RESOURCE_RECOVERY → 冷却重置,查克拉恢复
- TERRAIN_HAZARDS → 环境伤害
- FINAL_DEATH_CHECK → 判定环境伤害是否造成击杀
Adding New Phase
添加新阶段
typescript
// 1. Add to CombatPhase enum
enum CombatPhase {
// ... existing
NEW_PHASE,
}
// 2. Create calculation function
function calculateNewPhaseEffects(state: CombatWorkflowState): NewPhaseResult;
// 3. Create workflow handler
function processNewPhase(state: CombatWorkflowState): CombatWorkflowState;
// 4. Insert into turn flow in processEnemyTurn or executePlayerActiontypescript
// 1. 添加到CombatPhase枚举
enum CombatPhase {
// ... 现有阶段
NEW_PHASE,
}
// 2. 创建计算函数
function calculateNewPhaseEffects(state: CombatWorkflowState): NewPhaseResult;
// 3. 创建工作流处理函数
function processNewPhase(state: CombatWorkflowState): CombatWorkflowState;
// 4. 插入到processEnemyTurn或executePlayerAction的回合流程中Output Templates
输出模板
New Calculation Function
新计算函数
typescript
/**
* [Description of what this calculates]
* @param attackerStats - Attacker's derived stats
* @param defenderStats - Defender's derived stats
* @param skill - The skill being used
* @returns [ResultType] with all calculation details
*/
export function calculateX(
attackerStats: DerivedStats,
defenderStats: DerivedStats,
skill: Skill
): XResult {
const result: XResult = {
// Initialize result object
};
// Pure calculations here
// NO state mutation
// Use Math.random() for rolls
return result;
}typescript
/**
* [该函数的计算说明]
* @param attackerStats - 攻击者的派生属性
* @param defenderStats - 防御者的派生属性
* @param skill - 当前使用的技能
* @returns [结果类型],包含所有计算细节
*/
export function calculateX(
attackerStats: DerivedStats,
defenderStats: DerivedStats,
skill: Skill
): XResult {
const result: XResult = {
// 初始化结果对象
};
// 纯计算逻辑
// 无状态变更
// 使用Math.random()进行概率判定
return result;
}New Workflow Function
新工作流函数
typescript
/**
* [Description of what state changes this applies]
* @param state - Current combat state
* @param result - Calculation result to apply
* @returns New combat state with changes applied
*/
export function applyX(
state: CombatWorkflowState,
result: XResult
): CombatWorkflowState {
// Create new state object (immutable)
const newState = { ...state };
// Apply result values to state
// Add combat logs
// Check for combat end conditions
return newState;
}typescript
/**
* [该函数的状态变更说明]
* @param state - 当前战斗状态
* @param result - 要应用的计算结果
* @returns 应用变更后的新战斗状态
*/
export function applyX(
state: CombatWorkflowState,
result: XResult
): CombatWorkflowState {
// 创建新的状态对象(不可变)
const newState = { ...state };
// 将结果值应用到状态
// 添加战斗日志
// 检查战斗结束条件
return newState;
}New Effect Implementation
新效果实现
typescript
// In constants/index.ts - Add to SKILLS
NEW_SKILL: {
id: 'new_skill',
name: 'New Skill Name',
// ... other properties
effects: [{
type: EffectType.NEW_EFFECT,
value: 10,
duration: 3,
chance: 0.8,
damageType: DamageType.PHYSICAL,
damageProperty: DamageProperty.NORMAL
}]
}
// In CombatSystem.ts - Handle in applyMitigation or processDoT
if (buff.effect.type === EffectType.NEW_EFFECT) {
// Calculate effect
// Apply to appropriate target
}typescript
// 在constants/index.ts中 - 添加到SKILLS
NEW_SKILL: {
id: 'new_skill',
name: 'New Skill Name',
// ... 其他属性
effects: [{
type: EffectType.NEW_EFFECT,
value: 10,
duration: 3,
chance: 0.8,
damageType: DamageType.PHYSICAL,
damageProperty: DamageProperty.NORMAL
}]
}
// 在CombatSystem.ts中 - 在applyMitigation或processDoT中处理
if (buff.effect.type === EffectType.NEW_EFFECT) {
// 计算效果
// 应用到目标
}Reference Files
参考文件
- combat-mechanics.md - Full combat formulas and constants
- architecture.md - Dual-system architecture details
- combat-mechanics.md - 完整的战斗公式和常量
- architecture.md - 双系统架构细节
Balance Constants
平衡常量
Resource Pools
资源池
- HP:
50 + (WIL × 12) - Chakra:
30 + (CHA × 8) - HP Regen:
maxHP × 0.02 × (WIL / 20) - Chakra Regen:
INT × 2
- HP:
50 + (WIL × 12) - 查克拉:
30 + (CHA × 8) - HP恢复:
maxHP × 0.02 × (WIL / 20) - 查克拉恢复:
INT × 2
Combat Constants
战斗常量
- Base Hit: 92%
- Hit Range: 30-98%
- Base Crit: 8%
- Crit Cap: 75%
- Crit Mult: 1.75×
- Flat Def Cap: 60% of damage
- % Def Cap: 75%
- 基础命中率: 92%
- 命中范围: 30-98%
- 基础暴击率: 8%
- 暴击率上限: 75%
- 暴击倍数: 1.75×
- 固定防御减免上限: 伤害的60%
- 百分比防御减免上限: 75%
Survival
生存相关
- Guts:
WIL / (WIL + 200) - Status Resist:
CAL / (CAL + 80) - Evasion:
SPD / (SPD + 250)
- 不屈(Guts):
WIL / (WIL + 200) - 状态抗性:
CAL / (CAL + 80) - 闪避率:
SPD / (SPD + 250)