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)}`; }