Build MVP: campaigns, characters, combat, dice, compendium

- Rules abstraction (5e + pf2e) behind one interface, fully tested
- Pure combat engine: turn-order safe across add/remove/reorder/init-change
- Dexie storage with real cascade deletes + Zod validation on write
- Seedable dice engine with notation parser
- Lazy SRD compendium (code-split), bestiary -> combat
- Strict TS, 54 unit tests, Playwright e2e smoke (all green)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 00:09:42 +02:00
parent fe84dc365d
commit 1a9e5e2c18
93 changed files with 412052 additions and 9 deletions
+20
View File
@@ -0,0 +1,20 @@
import type { RulesSystem, SystemId } from './types';
import { dnd5e } from './dnd5e';
import { pf2e } from './pf2e';
const SYSTEMS: Record<SystemId, RulesSystem> = {
'5e': dnd5e,
pf2e,
};
export function getSystem(id: SystemId): RulesSystem {
return SYSTEMS[id];
}
export const SYSTEM_OPTIONS: { id: SystemId; label: string }[] = [
{ id: '5e', label: dnd5e.label },
{ id: 'pf2e', label: pf2e.label },
];
export * from './types';
export { abilityModifier, ABILITY_ABBR, ABILITY_LABELS } from './abilities';