79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
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;
|
||
},
|
||
},
|
||
};
|
||
|