Files
Genarrative/src/data/functionCatalog/state/battleAllInCrush.ts
2026-04-28 19:36:39 +08:00

79 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { AnimationState } from '../../../types';
import type { StateFunctionRuntimeSource } from '../types';
/**
* battle_all_in_crush
*
* 战斗中的正面爆发动作。它要求主角不绕、不拖,直接把当前回合的叙事、
* 技能权重和视觉表现都推向“强压正面敌人”的方向。
*/
export const BATTLE_ALL_IN_CRUSH_FUNCTION_SOURCE: StateFunctionRuntimeSource = {
definition: {
id: 'battle_all_in_crush',
state: 'battle',
category: 'battle',
text: '战斗:全力压上',
description:
'正面强攻,优先触发高爆发和终结类技能,伤害更高,但承受的反击也更重。',
visual: {
playerAnimation: AnimationState.SKILL3,
playerMoveMeters: 0,
playerOffsetY: 0,
playerFacing: 'right',
scrollWorld: false,
monsterActionTemplate: '{monster}被正面强攻逼得节节后退',
monsterAnimation: 'attack',
monsterMoveMeters: 0,
},
effect: {
damageMultiplier: 1.3,
incomingDamageMultiplier: 1.15,
turnTimeMultiplier: 1,
skillWeights: {
finisher: 5,
burst: 4,
mobility: 2,
steady: 1.5,
projectile: 1.2,
},
},
},
promptDescription:
'对面前敌人全力猛攻,文案可以自然改写,但仍要保持这是正面强攻而不是别的行为。',
documentation: {
id: 'battle_all_in_crush',
domain: 'state',
title: '战斗:全力压上',
source: 'src/data/functionCatalog/state/battleAllInCrush.ts',
summary: '战斗阶段的高风险高收益强攻 function。',
detailedDescription:
'这个 function 用于把当前回合塑造成硬碰硬的压制回合,让主角优先打出爆发和终结倾向更强的技能或叙事动作。',
trigger: '仅在 battle 状态且场上仍有存活敌人时参与候选。',
execution:
'提高 damageMultiplier并抬高 finisher / burst 权重,同时略微提高 incomingDamageMultiplier突出换血压力。',
result: '适合在残局抢收头、需要快速压血,或者希望把敌人直接压回去时使用。',
state: 'battle',
category: 'battle',
active: true,
},
runtime: {
buildSuggestedActionText({ metrics, environment }) {
if (metrics.monsterHpRatio <= 0.25) {
return `压上去收掉${environment.monsterName}最后一口气`;
}
if (metrics.playerHpRatio <= 0.35) {
return `顶着伤势强压${environment.monsterName}赌一波强杀`;
}
return `正面强压${environment.monsterName}不给喘息`;
},
getPriority({ metrics }) {
return metrics.monsterHpRatio <= 0.25
? 8
: metrics.playerHpRatio <= 0.35
? 2
: 4;
},
},
};