Files
yourpart3/docs/FALUKANT_MARRIAGE_HOUSEHOLD_CONTROL_SPEC.md

570 lines
12 KiB
Markdown

# Falukant: Steuerung von Ehezustand und Hausfrieden
Dieses Dokument beschreibt:
- wie Spieler `Ehezustand` und `Hausfrieden` direkt beeinflussen können
- welche Werte dafür im Backend sichtbar und änderbar sein müssen
- was der externe Daemon täglich und monatlich berechnen soll
Die Datei ist bewusst als gemeinsame Arbeitsgrundlage für UI, Backend und externen Daemon formuliert.
## 1. Zielbild
Es soll zwei getrennte, aber gekoppelte Systeme geben:
- `marriageSatisfaction`
- numerisch `0..100`
- individueller Kernwert der Ehe
- `householdTension`
- aggregierter Haushaltszustand
- nach außen in UI als `low | medium | high`
- intern sinnvollerweise als numerischer Spannungswert `0..100`
Interpretation:
- `marriageSatisfaction` beschreibt die Qualität der Paarbeziehung
- `householdTension` beschreibt Spannungen im gesamten Haus
- Liebschaften
- Unterversorgung
- Ordnung
- Kinderkonflikte
- Dienerschaft
## 2. Werte und Ableitungen
## 2.1 Ehe
Bestehend:
- `relationship_state.marriage_satisfaction`
Neu sinnvoll:
- `relationship_state.marriage_public_stability`
- besteht bereits
- soll aktiv genutzt werden
- optional später:
- `last_affection_action_at`
- `last_conflict_action_at`
- `last_shared_time_at`
UI-Ableitung:
- `0..19` => `broken`
- `20..39` => `fragile`
- `40..59` => `strained`
- `60..79` => `stable`
- `80..100` => `harmonious`
## 2.2 Hausfrieden
Der bisherige reine UI-Helfer
- `low`
- `medium`
- `high`
reicht für eine echte Steuerung nicht aus.
Neu sinnvoll:
- interner Wert `householdTensionScore`
- Bereich `0..100`
- `0` = sehr ruhig
- `100` = offener Hauskonflikt
UI-Ableitung:
- `0..24` => `low`
- `25..59` => `medium`
- `60..100` => `high`
Falls kein eigener Persistenzwert angelegt werden soll, darf der Daemon den Score auch nur berechnen und als API-Feld zurückgeben.
## 3. Direkte Spieleraktionen
Es braucht direkte Spielzüge, die der Spieler bewusst auslösen kann.
Wichtig:
- nicht jede Aktion muss sofort große Werte ändern
- direkte Aktionen sollen kleine, klare Effekte haben
- der Daemon übernimmt Drift, Gegenkräfte und Folgewirkungen
## 3.1 Ehe-Aktionen
Diese Aktionen gehören fachlich in `FamilyView`.
### A. Zeit mit Ehepartner verbringen
Zweck:
- Standardaktion zur Pflege der Beziehung
Regel:
- verfügbar nur bei aktiver Ehe
- Cooldown: `1x pro Tag`
- Kosten: `0` oder sehr klein
Soforteffekt:
- `marriageSatisfaction +2`
- `householdTensionScore -1`
Modifikatoren:
- wenn aktive sichtbare Liebschaft `visibility >= 45`: nur `+1`
- wenn `householdOrder <= 35`: kein Bonus auf Hausfrieden
- wenn `marriageSatisfaction < 25`: stattdessen nur `+1`
### B. Geschenk an Ehepartner
Zweck:
- Geld gegen schnellere Stabilisierung
Regel:
- verfügbar nur bei aktiver Ehe
- Stufen: `small`, `decent`, `lavish`
- Cooldown: `1x pro 3 Tage`
Soforteffekt:
- `small`: `marriageSatisfaction +2`
- `decent`: `marriageSatisfaction +4`
- `lavish`: `marriageSatisfaction +7`
Nebeneffekt:
- `marriagePublicStability +1/+2/+3`
Malus:
- bei gleichzeitig unterfinanzierter Liebschaft halbierter Effekt
### C. Streit schlichten
Zweck:
- gezielte Krisenintervention
Regel:
- verfügbar nur wenn `householdTensionScore >= 35` oder `marriageSatisfaction <= 50`
- Cooldown: `1x pro 2 Tage`
Soforteffekt:
- `householdTensionScore -4`
- `marriageSatisfaction +1`
Malus:
- wenn `visibility` einer aktiven Liebschaft `>= 60`, dann nur `householdTensionScore -2`
### D. Fest nur für den Haushalt
Zweck:
- Hausfrieden über Geld und Repräsentation stützen
Regel:
- verfügbar bei vorhandenem Haus
- kleiner interner Hausakt, nicht großes Reputationsfest
- Cooldown: `1x pro Monat`
Soforteffekt:
- `householdTensionScore -6`
- `marriageSatisfaction +2`
- `householdOrder +2`
Malus:
- bei unterbesetzter Dienerschaft nur halbe Wirkung
## 3.2 Haus-Aktionen
Diese Aktionen gehören fachlich in `HouseView`.
### A. Haus ordnen
Zweck:
- kleine direkte Ordnungsmaßnahme
Regel:
- Cooldown: `1x pro Tag`
- Kosten: niedrig
Soforteffekt:
- `householdOrder +3`
- wenn `householdOrder > 70`: stattdessen nur `+1`
Indirekter Effekt:
- besserer Daily-Wert für `householdTensionScore`
### B. Diener einstellen
Bereits vorhanden.
Neue fachliche Wirkung:
- wenn vorher `servantCount < expectedMin`
- sofort `householdTensionScore -2`
### C. Diener entlassen
Bereits vorhanden.
Neue fachliche Wirkung:
- wenn danach `servantCount < expectedMin`
- sofort `householdTensionScore +3`
### D. Bezahlung erhöhen
Bereits vorhanden.
Neue fachliche Wirkung:
- wenn von `low -> normal` oder `normal -> high`
- sofort `householdOrder +2`
- `householdTensionScore -1`
## 3.3 Familien-/Kinder-Aktionen
### A. Uneheliches Kind anerkennen
Zweck:
- offenere, geordnetere Lösung statt versteckter Konfliktlage
Soforteffekt:
- `publicKnown = true`
- `legitimacy = acknowledged_bastard`
- `householdTensionScore -2`, wenn Beziehung bereits öffentlich geordnet
- `householdTensionScore +3`, wenn Ehe schwach und Beziehung skandalös
Eheeffekt:
- `marriageSatisfaction -2` bis `-6` je nach Sichtbarkeit und Stand
### B. Erbenfrage regeln
Wenn uneheliche Kinder sichtbar werden, kann die UI später eine Handlung
`Erbfolge klären` bekommen.
Erste Version:
- nur vorgemerkt
- noch keine direkte Aktion nötig
## 3.4 Liebschafts-Aktionen mit Einfluss auf Ehe und Haus
Bestehend:
- Unterhalt ändern
- Beziehung anerkennen
- Beziehung beenden
Diese Aktionen sollen explizit folgende Sofortwirkung haben:
### Unterhalt erhöhen
- `monthsUnderfunded` baut sich später im Daemon ab
- sofort kein großer Ehebonus
- aber `householdTensionScore -1`, wenn vorher Unterversorgung bestand
### Beziehung anerkennen
- `visibility` steigt nicht automatisch hart, aber öffentlicher Charakter nimmt zu
- bei hohen Ständen geordnet eher neutral bis leicht positiv für Ehe-Stabilität
- bei niedrigen Ständen eher negativ
Sofortregel:
- Standesgruppe `0-1`: `marriageSatisfaction -3`, `householdTensionScore +2`
- Standesgruppe `2`: `marriageSatisfaction -1`, `householdTensionScore +1`
- Standesgruppe `3`: `marriagePublicStability +1`, `householdTensionScore -1`, wenn Diskretion und Versorgung gut sind
### Beziehung beenden
- sofort `householdTensionScore -3`, wenn Liebschaft riskant war
- sofort `marriageSatisfaction +1`, wenn aktive Ehe existiert
- aber bei hoher `affection >= 70` auch möglicher Malus auf Stimmungssystem später
## 4. Daemon-Berechnung
## 4.1 Daily-Input
Der externe Daemon braucht pro Spielerfigur:
- aktive Ehebeziehung mit `marriageSatisfaction`, `marriagePublicStability`
- aktive Liebschaften mit:
- `loverRole`
- `visibility`
- `discretion`
- `maintenanceLevel`
- `statusFit`
- `monthsUnderfunded`
- `acknowledged`
- Kinderdaten:
- `legitimacy`
- `birthContext`
- `publicKnown`
- Hausdaten:
- `servantCount`
- `servantQuality`
- `servantPayLevel`
- `householdOrder`
- Charakterdaten:
- `titleOfNobility`
- `reputation`
## 4.2 Daily-Berechnung für Ehe
Grunddrift:
```text
marriageDelta = 0
if marriageSatisfaction > 55: marriageDelta -= 1 every 3 days
if marriageSatisfaction < 55: marriageDelta += 1 every 5 days
```
Liebschaften:
```text
for each active lover:
if visibility >= 60: marriageDelta -= 2
else if visibility >= 35: marriageDelta -= 1
if monthsUnderfunded >= 2: marriageDelta -= 1
if acknowledged = true and statusGroup <= 1: marriageDelta -= 1
if acknowledged = true and statusGroup = 3 and visibility <= 35 and maintenanceLevel >= 60:
marriageDelta += 0 or +1 every few days
```
Zu jung:
```text
if minAge <= 15: marriageDelta -= 1
if minAge <= 13: marriageDelta -= 2
```
Haus:
```text
if householdOrder >= 75: marriageDelta += 1
if householdOrder <= 35: marriageDelta -= 1
if householdTensionScore >= 60: marriageDelta -= 1
```
Dienerschaft:
```text
if servantCount < expectedMin: marriageDelta -= 1
if servantPayLevel = high and servantQuality >= 70 and householdOrder >= 70:
marriageDelta += 1 every 3 days
```
Danach:
- clamp `0..100`
## 4.3 Daily-Berechnung für Hausfrieden
Interner Wert:
```text
householdTensionScore = base
```
Empfohlene Berechnung:
```text
base = 10
for each active lover:
if visibility >= 60: base += 18
else if visibility >= 35: base += 10
else: base += 4
if monthsUnderfunded >= 1: base += 6
if monthsUnderfunded >= 2: base += 6
if acknowledged = true: base += 4
if statusFit = -1: base += 3
if statusFit = -2: base += 6
```
Kinder:
```text
for each child where birthContext = 'lover':
if publicKnown = true: base += 6
else: base += 2
if legitimacy = 'acknowledged_bastard': base += 2
if legitimacy = 'hidden_bastard': base += 4
```
Haus:
```text
if householdOrder >= 80: base -= 6
else if householdOrder >= 65: base -= 3
if householdOrder <= 35: base += 8
else if householdOrder <= 50: base += 4
```
Dienerschaft:
```text
if servantCount < expectedMin: base += 5
if servantPayLevel = low: base += 2
if servantQuality >= 70 and servantPayLevel = high: base -= 3
```
Ehe:
```text
if marriageSatisfaction <= 35: base += 6
if marriageSatisfaction >= 75: base -= 2
```
Danach:
- clamp `0..100`
- UI-Ableitung auf `low/medium/high`
## 4.4 Monthly-Berechnung
Monatlich soll der Daemon zusätzlich:
- Dienerkosten abbuchen
- Liebschaftskosten abbuchen
- bei Unterversorgung `householdTensionScore` stärker erhöhen
- langfristige Ordnungs- oder Eheboni addieren
Empfohlene Zusatzregeln:
```text
if a lover was underfunded this month:
householdTensionScore += 4
if servantCount far below expectedMin for full month:
householdTensionScore += 3
if householdOrder >= 80 for full month:
marriageSatisfaction += 1
if householdOrder <= 30 for full month:
marriageSatisfaction -= 2
```
## 5. UI-Anforderungen
## 5.1 FamilyView
Neu sinnvolle Aktionen:
- `Zeit miteinander verbringen`
- `Geschenk machen`
- `Streit schlichten`
- `Liebschaft beenden`
- `Uneheliches Kind anerkennen`
Zusätzlich hilfreiche Anzeige:
- kurze Ursachenliste für `Hausfrieden`
- z. B. `sichtbare Liebschaft`
- `Unruhe im Haus`
- `zu wenig Diener`
- `anerkanntes uneheliches Kind`
## 5.2 HouseView
Neu sinnvolle Aktionen:
- `Haus ordnen`
- vorhandene Dieneraktionen mit klarer Auswirkungstextzeile
Anzeige:
- `Haushaltsordnung`
- `erwartete Dienerzahl`
- `Auswirkung auf Hausfrieden`
## 6. Backend-Anforderungen
## 6.1 Direktaktionen
Dieses Projekt sollte Endpunkte für direkte Einflussaktionen bereitstellen:
- `POST /api/falukant/family/marriage/spend-time`
- `POST /api/falukant/family/marriage/gift`
- `POST /api/falukant/family/marriage/reconcile`
- `POST /api/falukant/houses/order`
- später optional:
- `POST /api/falukant/family/children/acknowledge`
## 6.2 API-Rückgabe
Family-API sollte zusätzlich liefern:
- `marriageSatisfaction`
- `marriageState`
- `marriagePublicStability`
- `householdTension`
- `householdTensionScore`
- optional:
- `householdTensionReasons[]`
House-API sollte zusätzlich liefern:
- `householdOrder`
- `expectedServantsMin`
- `expectedServantsMax`
- `marriageComfortModifier`
## 7. Priorisierte Umsetzung
## Phase A
- `statusFit`-Fehler korrigieren
- direkte Ehe-Aktionen `Zeit`, `Geschenk`, `Streit schlichten`
- direkte Haus-Aktion `Haus ordnen`
- Family-API um `householdTensionScore` erweitern
## Phase B
- externer Daemon berechnet Daily-Drift für Ehe und Hausfrieden
- Dienerschaft fließt in Hausfrieden ein
- Liebschaften und Unterversorgung wirken vollständig auf Hausfrieden
## Phase C
- uneheliche Kinder als aktiver Konfliktfaktor
- Anerkennungsaktion
- genauere Ursachenlisten in der UI
## 8. Offene Balancing-Punkte
Diese Werte sind absichtlich noch nicht final:
- exakte Geldkosten für Ehe-Aktionen
- Stärke der Boni für hohe Stände
- Stärke des Malus bei sichtbaren Liebschaften
- Stärke der Dienerwirkung auf Ehe und Haus
Die Struktur sollte jetzt aber stabil genug sein, damit UI und Daemon unabhängig voneinander anfangen können.