7.6 KiB
7.6 KiB
DSA 4.1 Helfer (PWA)
Offline-fähiger Spielerhelfer für Das Schwarze Auge 4.1. Verwaltet Helden lokal im Browser (IndexedDB), berechnet abgeleitete Werte und unterstützt am Tisch beim Fern- und Nahkampf sowie bei Zauberproben. Alles läuft als installierbare PWA ohne Server – die Daten verlassen den Rechner nicht.
Schwerpunkt liegt aktuell auf Fernkampf mit dem Bogen: die komplette Modifikatoren-Tabelle (Distanz, Sicht, Bewegung, Trefferzonen, Schussart/Nachladen, Wind, Steilschuss, Zielen, Scharf-/Meisterschütze) ist implementiert.
Funktionen
Heldenverwaltung
- Mehrere Helden parallel, lokal in IndexedDB gespeichert (
dsa-ranger-DB via Dexie). - Anlegen, Öffnen, Löschen direkt aus der Übersicht (
/). - Export & Import als JSON oder YAML (z. B. für Backup oder Austausch zwischen Geräten).
- Eingaben werden über Zod validiert; mitgelieferte
migrateCharacter-Funktion hält Altdateien beim Import auf dem aktuellen Schema (schemaVersion: 1).
Charakterbogen (/characters/:id/sheet)
- Stammdaten (Name, Rasse, Kultur, Profession).
- Eigenschaften MU/KL/IN/CH/FF/GE/KO/KK mit Startwert und Mod.
- Energien LeP/AsP/AuP/MR mit individuellem Mod-Feld; AsP optional aktivierbar.
- Talente und Kampftalente mit TaW sowie eigenen AT/PA-Werten; ein Helfer setzt AT/PA aus Basis + TaW neu.
- Vorteile / Nachteile / Sonderfertigkeiten aus typisierten Regeltabellen (mit Stufenwahl, wo vorgesehen).
- Inventarliste, Notizen (Freitext) und Nahkampfwaffen-Instanzen mit Talentbindung und AT-/PA-Modifikator.
Übersicht (/characters/:id)
- Zeigt automatisch berechnete Basiswerte: AT-, PA-, FK-, INI- und MR-Basis sowie LeP-, AsP- und AuP-Maximum. Formeln nach DSA 4.1 inkl. Rassen-Modifikatoren (Mittelländer, Auelf, Zwerg, Ork, Achaz, …).
Fernkampf-Rechner (/characters/:id/combat/ranged)
- Aktuell sechs Bögen modelliert: Elfen-, Komposit-, Krieg-, Kurz-, Lang-, Ork. Reiterbogen – inkl. Reichweiten, Bonusschaden je Distanz, Nachladezeit und KK-Anforderung.
- Berechnet die Zielzahl für 1W20 aus FK-Basis + (wirksamem) TaW und allen
ausgewählten Erschwernissen:
- Entfernung (sehr nah … extrem weit),
- Zielgröße, Sichtverhältnisse, Bewegung des Ziels,
- Trefferzone (Zwei- oder Vierbeiner),
- Schussart / Nachladezustand (Pfeil auf Sehne, Bogen gespannt, gezielter Schuss, Schuss mit Ansage, Schnellschuss, Schnellladen),
- Zielen über mehrere Kampfrunden,
- Wind, Steilschuss nach oben/unten,
- aktive Vorteile/Nachteile/SF (z. B. Entfernungssinn, Talentspezialisierung Bogen),
- Scharf-/Meisterschütze modifiziert automatisch viele Werte (z. B. Trefferzonen, Schnellschuss, Schuss mit Ansage).
- Liefert pro Berechnung eine Aufschlüsselung aller Modifikatoren und einen Schadenshinweis inkl. Entfernungs-Bonus.
Nahkampf-Rechner (/characters/:id/combat/melee)
- Liest AT/PA aus den Kampftalenten und addiert die Waffen-Modifikatoren der gewählten Nahkampfwaffe.
- Erschwernisse als kommaseparierte Liste plus eigene AT-/PA-Zusätze.
- Optional vereinfachte Ansagen-Verteilung (AT-Anteil auf PA).
- Manöver-Details (Wuchtschlag, Finte, Ausweichen …) bleiben bewusst generisch – am Tisch beziffern und eintragen.
Magie (/characters/:id/spells)
- Liste eigener Zauber (Name, Stufe, ZfP-Notiz, Notiz) wird im Charakter gespeichert.
- Generische 3W20-Zielzahlen-Anzeige für eine wählbare Eigenschafts-Triade (Default MU/KL/CH) + ZfW.
- Optionale Liturgien-Freitextliste.
Einstellungen & Hilfen
/settings: Status des Helden-Software-Imports (noch nicht implementiert) und ein kleiner 1W20/3W20-Würfelhelfer.- Online-/Offline-Anzeige in der Topbar, optionaler „Installieren“-Button im
Browser, Service-Worker-Update über
@vite-pwa/sveltekit.
Technik
- SvelteKit 2 + Svelte 5 als SPA (
@sveltejs/adapter-static,fallback: 'index.html'). - TypeScript (strict).
- Vite 6 +
@vite-pwa/sveltekit(Service Worker, Web App Manifest). - Dexie für IndexedDB (Charaktere und Meta-Tabelle für aktiven Helden).
- Zod für Schema-Definition & -Validierung.
- js-yaml für YAML-Export/-Import.
- Vitest + fake-indexeddb für Tests.
Projektstruktur
src/
routes/ # SvelteKit-Routen (SPA)
+layout.svelte # Topbar, PWA-Registrierung, Online-Status
+page.svelte # Heldenübersicht (Anlegen/Import/Export)
settings/+page.svelte # Einstellungen + Würfelhelfer
characters/[id]/
+page.svelte # Übersicht mit Basiswerten + Subnavigation
sheet/+page.svelte # Charakterbogen (Editor)
combat/ranged/+page.svelte
combat/melee/+page.svelte
spells/+page.svelte
lib/
characters/ # Default-Charakter-Factory
components/ # Shared Svelte-Komponenten (DiceRoller)
engine/ # Reine Berechnungen (derived, ranged, melee, spell, …)
rules/ # DSA-4.1-Regeltabellen (Rassen, Talente, Waffen, SF, …)
schema/ # Zod-Schemata + Schema-Versionierung
storage/ # Dexie-DB, Repository, JSON-/YAML-IO
import/ # Reservierter Helden-Software-Importer
tests/engine/ # Unit-Tests (Vitest)
static/ # Favicon, Manifest-Icons
scripts/ # Hilfsskripte (Placeholder-Icons)
Entwicklung
npm install
npm run icons # Platzhalter-PNGs (für Produktion ersetzen)
npm run dev # Vite-Dev-Server
Tests, Lint & Build
npm test # Vitest (einmalig)
npm run test:watch # Vitest im Watch-Mode
npm run check # svelte-check + TypeScript
npm run lint # ESLint
npm run format # Prettier
npm run build # Produktions-Build (statisch)
npm run preview # Build lokal servieren
Datenmodell (Kurz)
Der Character (siehe src/lib/schema/character.ts) enthält u. a.:
meta(Name, Rasse, Kultur, Profession, optional Geschlecht/GP),eigenschaften(alle 8 Werte mitstartwert+mod),energien(lep,aup,mr, optionalasp,kap),advantages,disadvantages,abilities(jeweils mitdefIdauf den Regeleintrag),talente/kampftalente,zauber,liturgien(optional),waffen.fernkampf+waffen.nahkampfals Instanzen,inventar,notizen,schemaVersion(aktuell1).
Persistenz läuft ausschließlich über src/lib/storage/repo.ts – Komponenten
greifen nicht direkt auf die Dexie-Datenbank zu.
Stand & bekannte Einschränkungen
- Helden-Software-Import ist noch ein Platzhalter
(
src/lib/import/helden.ts). JSON-/YAML-Import funktioniert. - Spell-Engine ist bewusst minimal: 3W20-Zielzahlen für eine generische Eigenschafts-Triade. Verteilungen, Modifikatoren, Reichweite/Dauer-Berechnung noch nicht modelliert.
- Nahkampf liefert AT-/PA-Zielzahlen, kennt aber keine konkreten Manöver – Wuchtschlag, Finte usw. als Zahlen eingeben.
- Regeltabellen sind erweiterbar, aber nicht vollständig (z. B. Vorteile, SF, Nahkampfwaffen).
- Nur eine Schema-Version (
1); zukünftige Migrationen übermigrateCharacterinsrc/lib/schema/version.ts. - Symbole unter
static/icons/sind Platzhalter (npm run icons). Für eine Produktivversion eigene 192/512/maskable-PNGs hinterlegen.
Hinweise für Mitwirkende
- Domain-Vokabular ist deutsch (
Eigenschaften,Talente,Sonderfertigkeiten,Vorteile,Nachteile,MU/KL/IN/CH/FF/GE/KO/KK) und sollte so bleiben – bestehende Daten und Tests hängen daran. - Architekturhinweise und Konventionen stehen in
AGENTS.md.