Implement the 025-display-initiative feature that adds initiative modifier and passive initiative display to creature stat blocks, calculated as DEX modifier + (proficiency multiplier × proficiency bonus) from bestiary data, shown in MM 2024 format on the AC line
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -48,6 +48,7 @@ interface RawMonster {
|
||||
legendaryActionsLair?: number;
|
||||
legendaryHeader?: string[];
|
||||
spellcasting?: RawSpellcasting[];
|
||||
initiative?: { proficiency?: number };
|
||||
}
|
||||
|
||||
interface RawEntry {
|
||||
@@ -377,6 +378,7 @@ export function normalizeBestiary(raw: { monster: RawMonster[] }): Creature[] {
|
||||
cha: m.cha,
|
||||
},
|
||||
cr: crStr,
|
||||
initiativeProficiency: m.initiative?.proficiency ?? 0,
|
||||
proficiencyBonus: proficiencyBonus(crStr),
|
||||
passive: m.passive,
|
||||
savingThrows: formatSaves(m.save),
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import type { Creature } from "@initiative/domain";
|
||||
import {
|
||||
type Creature,
|
||||
calculateInitiative,
|
||||
formatInitiativeModifier,
|
||||
} from "@initiative/domain";
|
||||
|
||||
interface StatBlockProps {
|
||||
creature: Creature;
|
||||
@@ -40,6 +44,12 @@ export function StatBlock({ creature }: StatBlockProps) {
|
||||
{ label: "CHA", score: creature.abilities.cha },
|
||||
];
|
||||
|
||||
const initiative = calculateInitiative({
|
||||
dexScore: creature.abilities.dex,
|
||||
cr: creature.cr,
|
||||
initiativeProficiency: creature.initiativeProficiency,
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="space-y-1 text-foreground">
|
||||
{/* Header */}
|
||||
@@ -65,6 +75,11 @@ export function StatBlock({ creature }: StatBlockProps) {
|
||||
({creature.acSource})
|
||||
</span>
|
||||
)}
|
||||
<span className="ml-3">
|
||||
<span className="font-semibold">Initiative</span>{" "}
|
||||
{formatInitiativeModifier(initiative.modifier)} (
|
||||
{initiative.passive})
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span className="font-semibold">Hit Points</span>{" "}
|
||||
|
||||
Reference in New Issue
Block a user