Files
builazoo/docs/specs/mort_bebe.md
2026-03-05 03:39:33 +01:00

623 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Spécifications : Mort des Bébés
## Causes Spécifiques
- **Nurserie Pleine** : Si un œuf éclot et qu'il n'y a pas de place en nurserie ni sur le terrain.
- **Vente Échouée** : Bébé resté trop longtemps en zone de vente (camion) sans acheteur et sans rapatriement.
- **Conditions Extrêmes** : Les bébés ont des tolérances de température plus faibles que les adultes.
## Conséquences
- Perte définitive de l'animal.
- Pénalité forte sur le Score de Réputation.
- Pas de récupération de ressources (pièces).
# Annexes Techniques
## 1. Données et États
### Modèle de Données (JSON)
Événement loggé.
### Caractéristiques Initiales
**Compteur Morts** : 0.
### Scores Initiaux
**Taux Mortalité Infantile** : 0%.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Voir Causes.
### Conditions de Disparition
**Oubli** : Le souvenir (et le malus) s'estompe après 7 jours in-game.
### Hérédité
**Traumatisme** : Les parents ont -50% fertilité pendant 1 semaine (Choc émotionnel).
## 3. Impacts Environnementaux
### Impact Température
Voir `bebe_animal.md`.
### Impact Milieu (Biome)
**Tombe** : Une petite stèle apparaît temporairement sur la case (décoratif, disparaît au clic).
### Impact Saisons
**Hiver rigoureux** : Cause fréquente de mortalité infantile (Froid).
### Impact Heure / Jour-Nuit
**Nuit glaciale** : Moment critique (baisse T°).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Deuil** : Pas de reproduction possible pour les parents pendant 24h.
### Impact Mort
**Effet domino** : Tristesse contagieuse aux animaux proches (Stress +10).
### Impact Nourriture
**Gaspillage** : La nourriture allouée au bébé est perdue (pourrit).
### Impact Attractivité (Visiteurs/Animaux)
**Malus** : -50 points de Réputation (temporaire 24h). Les visiteurs pleurent.
### Impact Valeur
**Perte sèche** : Valeur potentielle (élevée) perdue définitivement.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Décomposition** : Le corps reste 1h avant de disparaître (Urgence sanitaire).
### Dépenses (Boutiques/Visiteurs)
**Frais d'équarrissage** : 10 pièces pour enlever le corps.
### Trajet Visiteurs
**Évitement** : Les visiteurs contournent la zone de mort (Rayon 2 cases).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Mort Bébé** : Notification critique.
* **Enterrement** : Animation de disparition.
## 7. Progression
### Tableau des Upgrades
*Note : Prévention via Infirmerie.*
| Niveau Infirmerie | Réduction Risque Mort |
| :--- | :--- |
| 1 | -10% |
| 2 | -20% |
| 3 | -50% |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```javascript
function handleBabyDeath(baby):
zoo.reputation -= 50
baby.parents.forEach(p => p.fertilityMod = 0.5)
spawnGrave(baby.position)
notifyPlayer("BABY_DIED")
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `BABY_DIED` | Critique | "Un bébé est mort ! Les visiteurs sont choqués." |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Drame (Événement)
**Description UX** : Le bébé meurt.
**Description UI** : Le sprite devient gris/fantôme puis disparaît (montée au ciel). Musique triste.
**Emplacement** : Case Zoo/Nurserie.
**Intégration** : Immédiat.
**Navigation** : Auto (Cinématique).
**Événements** : `DEATH_ANIMATION`.
#### Assets
- **Musiques** : Jingle Triste (Violon).
- **Sons** : `gong.mp3` ou vent lugubre.
- **Graphiques** : Fantôme.
- **Images** : Pierre tombale (Sprite).
- **Vidéos** : Effet de pluie (Overlay).
- **Animations** : Opacité 100% -> 0%. Translation Y vers le haut.
- **Couleurs** : Gris, Noir.
- **Textes** : "RIP".
- **Formes** : Halo sombre.
### Notification (Alerte)
**Description UX** : Le joueur est informé de la perte.
**Description UI** : Popup Rouge/Noir. "Vous avez perdu un bébé [Cause]".
**Emplacement** : Centre Écran.
**Intégration** : Modal bloquante (Acknowledgment requis).
**Navigation** : Clic OK.
**Événements** : `DEATH_ACKNOWLEDGE`.
#### Assets
- **Musiques** : Silence (Coupure son).
- **Sons** : Bruit de tonnerre lointain.
- **Graphiques** : Crâne (icône).
- **Images** : Portrait du bébé avec ruban noir.
- **Vidéos** : `death_alert_glitch.webm` (0.7s loop, optionnel), `black_ribbon_fade.webm` (1.2s non loop).
- **Animations** : Tremblement de la fenêtre.
- **Couleurs** : Noir #000000.
- **Textes** : Cause du décès.
- **Formes** : Bordure noire épaisse.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Événement de décès dun animal au stade bébé, avec cause, conséquences (réputation, stress), et traces visuelles temporaires. |
| Rôle | Sanctionner les erreurs de gestion (nurserie pleine, conditions extrêmes), informer clairement le joueur, et déclencher des impacts sociaux/logistiques sans silence. |
| Portée | Un `animal_id` (bébé) + un contexte (zoo, emplacement iso) + une cause normalisée. |
| Contrainte | Pas de fallback silencieux : cause inconnue => log + erreur ; calculs à la volée, sans cache/mémorisation. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Détecter décès bébé | tick logique / action | `animal_id`, états | event décès | Mort si `health<=0` ou condition spéciale | Event `BABY_DIED` |
| Normaliser cause | au décès | signaux (nurserie pleine, temp, vente) | `cause_code` | Cause dans enum, sinon `UNKNOWN` + erreur | Log structuré `baby_death_unknown_cause` |
| Appliquer malus réputation | au décès | `cause_code` | réputation ↓ | Malus fort ; pondéré par visibilité visiteurs | Event `REPUTATION_CHANGED` |
| Appliquer stress proche | au décès | position iso | stress ↑ | Rayon 2 cases iso autour | Event `ANIMAL_STRESS_APPLIED` |
| Créer trace visuelle | au décès | position | stèle/fantôme | Trace TTL (ex. 1h) ; supprimable par clic | Event `GRAVE_SPAWNED` |
| Facturer enlèvement | au décès | - | coût | Coût fixe “équarrissage” si option active | Event `SANITATION_FEE_CHARGED` |
| Alerter joueur | au décès | cause + animal | notification | Modal dack obligatoire si critique | Event `UI_DEATH_ALERT_SHOWN` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône crâne + ruban noir, variante “bébé” (petit crâne) |
| Couleur dominante | Noir / gris |
| Variantes | `icon_baby_death.png`, `icon_grave.png` |
| États | `critique` (rouge), `info` (gris), `acknowledged` (ruban) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Voir détail décès | Consultation | événement présent | clic notif | panneau cause + impacts | - |
| Acknowledge modal | Action | modal affichée | clic OK | fermeture + trace possible | - |
| Retirer stèle | Action | trace visible | clic stèle | suppression trace | `GRAVE_NOT_FOUND` |
| Aller à lemplacement | Navigation | position connue | clic “Voir sur la carte” | caméra centre | `LOCATION_UNAVAILABLE` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `death_id` | uuid_v4 | `uuid_v4` | DB | identifiant event |
| `animal_id` | uuid_v4 | `uuid_v4` | DB | cible |
| `is_baby` | boolean | true | DB | invariant |
| `cause_code` | string | `NURSERY_FULL` | calcul | enum |
| `scope.zoo_id` | uuid_v4 | `uuid_v4` | DB | - |
| `location.iso_x` | int \| null | 120 | DB | null si nurserie (slot) |
| `location.iso_y` | int \| null | 88 | DB | null si nurserie (slot) |
| `location.nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | null si sur grille |
| `location.slot_id` | int \| null | 3 | DB | requis si nurserie |
| `effects.reputation_delta` | int | -50 | calcul | signé |
| `effects.stress_radius_tiles` | int | 2 | config | iso |
| `effects.cleanup_fee` | int | 10 | config | coins |
| `ttl.grave_seconds` | int | 3600 | config | suppression auto |
| `timestamps.created_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Compteur morts bébés | 0 | count | par zoo |
| Frais enlèvement | 10 | coins | configurable |
| Durée trace | 3600 | s | stèle/fantôme |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Taux mortalité infantile | 0% | 0..100% | affichage suivi, pas danalytics |
| Malus réputation moyen | 0 | points | calcul à la volée sur fenêtre |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Détection | tick | états bébé | décès | cause déterminée |
| Notification | décès | cause | modal | ack requis |
| Trace | décès | position | stèle | TTL |
| Oubli | temps | 7 jours in-game | malus amorti | fenêtre glissante |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Bébé meurt | true | est | event `BABY_DIED` |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Trace TTL | 3600 | atteint | suppression auto |
| Clic stèle | true | est | suppression manuelle |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Deuil parents | Oui | fertilité \(-50%\) pendant 1 semaine in-game |
| Historique décès | Oui | visible journal zoo |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Temp extrême | risque décès ↑ | cf. `bebe_animal.md` |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| - | stèle décorative | apparaît sur case (si décès sur grille) |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | cause fréquente (froid) | surveillance accrue |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | risque froid ↑ | baisse T° |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Deuil | \(-50%\) | parents du bébé |
| Blocage court | 0 | 24h in-game après décès |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Domino | stress +10 | animaux à ≤2 cases iso |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Ration allouée | perdue | décès avant consommation |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Décès visible | - | 2 cases | visiteurs évitent |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Décès proche | stress ↑ | zone impact |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Perte potentielle | -100% | bébé disparu |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Décès en camion | blocage slot | vente échouée, non rapatriée |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Saturation | risque décès | nurserie pleine + éclosion |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Zone de décès | ralentit flux | évitement visiteurs |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Intervention sanitaire | 10 | coins | option équarrissage |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Upgrade prévention | variable | coins | infirmerie/nurserie |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Rapatriement | 5 | coins | vente échouée |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | baisse fréquentation si répétée |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allées | Zone décès | proximité | évitement |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zone décès | Boutique | fuite | déplacement rapide |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zone décès | Sortie | choc | sortie anticipée |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `BABY_DIED` | décès | `animal_id`, `cause_code` | impacts |
| `GRAVE_SPAWNED` | trace | `iso_x`, `iso_y` | stèle |
| `SANITATION_FEE_CHARGED` | option | `amount` | coins - |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `DEATH_MARKER_SHOW` | map open | marker zone |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `UI_DEATH_ALERT_SHOWN` | notif | modal |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_AVOID_DEATH_ZONE` | proximité | reroute |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_CRIES` | mort visible | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_ACK_DEATH` | clic OK | clôture |
| `PLAYER_REMOVE_GRAVE` | clic stèle | suppression |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Infirmerie 1 | 100 | risque -10% | soins |
| Infirmerie 2 | 250 | risque -20% | urgence |
| Infirmerie 3 | 800 | risque -50% | protocole |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `handleBabyDeath` | baby, cause | event | applique malus |
| `computeDeathVisibility` | location, visitors | bool | pondère impacts |
| `spawnGrave` | location | grave | TTL |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `BABY_DIED` | Critique | "Un bébé est mort." | décès |
| `NURSERY_FULL_DEATH` | Critique | "Nurserie pleine : décès." | cause `NURSERY_FULL` |
| `SALE_TRUCK_DEATH` | Warning | "Décès en camion : vente échouée." | cause `SALE_TRUCK_TIMEOUT` |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Recevoir lalerte | comprendre la cause | choc | modal + bouton “voir sur carte” |
| Retirer trace | nettoyer zone | navigation | clic direct sur stèle |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Modal décès | cause + impacts | critique/ack |
| Stèle | sprite décoratif | clickable/ttl |
| Marker carte | icône | visible/masqué |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | notifications | priorité haute |
| Carte zoo | sur case | stèle |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `bebe_animal.md` | fragilité temp | causes |
| `score_reputation.md` | malus réputation | impacts |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir détail | notif → modal | cause affichée |
| Aller sur carte | bouton modal | caméra centre |
| Retirer stèle | clic stèle | suppression |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_DEATH_MODAL` | event | modal |
| `CLICK_VIEW_ON_MAP` | bouton | caméra |
| `CLICK_REMOVE_GRAVE` | stèle | suppression |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `baby_death_sting.mp3` | décès | 2.0s | triste |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_death_gong.mp3` | alerte | moyen |
| `ui_modal_close.mp3` | ack | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `grave_stone_iso.png` | stèle | iso 4 dirs |
| `baby_ghost_fx.png` | fantôme | overlay |
| `death_skull_icon.png` | icône | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `black_ribbon.png` | modal |
| `death_bg_noise.png` | overlay |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `death_alert_glitch.webm` | modal | 0.7s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fade fantôme | décès | 1.0s |
| tremblement modal | alerte | 0.5s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `death_black` | #000000 | fond |
| `death_gray` | #616161 | texte |
| `death_red` | #D32F2F | critique |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `death.baby.title` | Décès dun bébé | Baby death |
| `death.baby.cause` | Cause | Cause |
| `death.ack` | OK | OK |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Modal | rectangle arrondi | accessible |
| Icône | rond | constant |