Files
initiative/packages/domain/src/initiative.ts

31 lines
945 B
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 { proficiencyBonus } from "./creature-types.js";
export interface InitiativeResult {
readonly modifier: number;
readonly passive: number;
}
/**
* Calculates initiative modifier and passive initiative from creature stats.
* Returns undefined for combatants without bestiary creature data.
*/
export function calculateInitiative(creature: {
readonly dexScore: number;
readonly cr: string;
readonly initiativeProficiency: number;
}): InitiativeResult {
const dexMod = Math.floor((creature.dexScore - 10) / 2);
const pb = proficiencyBonus(creature.cr);
const modifier = dexMod + (creature.initiativeProficiency ?? 0) * pb;
return { modifier, passive: 10 + modifier };
}
/**
* Formats an initiative modifier with explicit sign.
* Uses U+2212 () for negative values.
*/
export function formatInitiativeModifier(modifier: number): string {
if (modifier >= 0) return `+${modifier}`;
return `\u2212${Math.abs(modifier)}`;
}