570 lines
12 KiB
Markdown
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.
|