# 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.