feat(falukant): add character visual representation and settings
All checks were successful
Deploy to production / deploy (push) Successful in 2m53s

- Introduced FalukantCharacterVisual component to display character portraits and 3D figures based on user settings.
- Updated DirectorInfo, ChurchView, PoliticsView, and other components to utilize the new character visual component.
- Added visual settings management for users, allowing selection between portrait styles and display modes (portraits, 3D, or both).
- Implemented age rules for engagement and marriage in the backend, ensuring compliance with specified age limits.
- Created a new settings view for Falukant to manage visual preferences.
- Added new images for medieval character portraits.
- Updated translations for new settings and features in multiple languages.
This commit is contained in:
Torsten Schulz (local)
2026-07-24 10:55:19 +02:00
parent c13339f771
commit 16703f467f
36 changed files with 811 additions and 49 deletions

View File

@@ -0,0 +1,78 @@
# Falukant: Altersregeln für Werbung, Ehe und Kinder
## Verbindliche Spielregel
Ein realer Kalendertag entspricht einem Falukant-Spieljahr. Die Altersprüfung
verwendet daher die Differenz zwischen `CURRENT_DATE` und `birthdate` in Tagen.
| Bereich | Mindestalter | Regel |
| --- | ---: | --- |
| Werbung | 12 | Partner können vorgeschlagen und ein Vorschlag kann angenommen werden. |
| Hochzeit | 14 | Eine Verlobung kann durch eine Hochzeitsfeier vollzogen werden. |
| Gemeinsamer Haushalt und Kinder | 16 | Erst dann darf die Spielmechanik eine Schwangerschaft oder Geburt aus einer Ehe erzeugen. |
Die Regeln gelten für **beide** Personen einer Beziehung. Sie bilden bewusst
Spielphasen ab; es gibt keine individuelle Prüfung körperlicher Reife und keine
explizite Sexualmechanik.
## Bereits im Backend und Daemon umgesetzt
- `backend/services/falukantService.js`
- erzeugt Heiratsvorschläge nur für mindestens 12 Jahre alte Partner;
- prüft beim Annehmen eines Vorschlags beide Alter erneut;
- bietet den Hochzeitstyp erst ab 14 an und prüft beim Bestellen der Feier
beide Verlobte serverseitig;
- plant die Hochzeits-Schwangerschaft erst, wenn beide mindestens 16 sind.
- `src/valuerecalculationworker.h`
- vollzieht die Hochzeit nach der mindestens einen Tag alten Hochzeitsfeier
nur, wenn beide Verlobte mindestens 14 sind.
- `src/usercharacterworker.h`
- berücksichtigt für die bestehende zufällige Ehe-Kinderlogik ausschließlich
Paare, bei denen beide mindestens 16 sind.
## Auftrag für den externen Daemon
Falls der produktive Daemon aus diesem Repository herausgelöst ist, müssen die
folgenden Guards in dessen gleichnamige Queries übernommen werden.
### 1. Übergang `engaged` → `married`
Beim Verarbeiten einer Hochzeit sind beide Charaktere zu prüfen:
```sql
c.birthdate <= CURRENT_DATE - INTERVAL '14 days'
AND partner.birthdate <= CURRENT_DATE - INTERVAL '14 days'
```
Die bestehende Wartezeit von `party.created_at <= NOW() - INTERVAL '1 day'`
bleibt unverändert. Erfüllt ein Paar die Altersregel noch nicht, bleibt es
verlobt; die bereits angelegte Feier wird nicht verworfen und kann nach Erreichen
des Alters vollzogen werden.
### 2. Eheliche Schwangerschaften und Geburten
Jeder automatische Empfängnis- oder Geburtenkandidat muss beide Bedingungen
erfüllen:
```sql
mother.birthdate <= CURRENT_DATE - INTERVAL '16 days'
AND father.birthdate <= CURRENT_DATE - INTERVAL '16 days'
```
Das gilt sowohl für die Zufallslogik als auch für einen geplanten
`pregnancy_due_at`-Pfad. Beim geplanten Pfad soll der Daemon die Felder nicht
leeren, solange mindestens ein Elternteil noch unter 16 ist; die Schwangerschaft
wird erst verarbeitet, sobald beide die Grenze erreicht haben. Admin-Tools
können weiterhin ein bewusstes, separat protokolliertes Override anbieten.
### 3. Tests für den Daemon
- 13/13 Jahre, verlobt, Hochzeitsfeier älter als 24 Stunden: bleibt `engaged`.
- 14/14 Jahre, verlobt, Hochzeitsfeier älter als 24 Stunden: wird `married`.
- Verheiratet, ein Elternteil 15: keine automatische Schwangerschaft/Geburt.
- Verheiratet, beide 16: normaler Schwangerschafts-/Geburtspfad ist möglich.
## Bestehende Daten
Es ist keine Migration nötig. Bereits bestehende Ehen bleiben bestehen; die
Grenzen steuern ausschließlich neue Übergänge und automatische Kinderereignisse.