Compare commits

...

2 Commits

Author SHA1 Message Date
430e8d3fd5 ok 2026-03-05 04:03:17 +01:00
6c8a710432 ok 2026-03-05 04:01:29 +01:00
34 changed files with 8658 additions and 3 deletions

View File

@@ -266,3 +266,510 @@ def add_animal_to_reception(reception_center, animal):
- **Occlusion** : Le bâtiment doit être semi-transparent si le joueur passe la souris derrière (pour voir les objets cachés).
- **Indicateur d'état** : Une icône flottante (bulle) au-dessus du bâtiment indique si un animal est prêt (point d'exclamation vert) ou en cours (sablier).
- **Z-Index** : Doit être trié correctement par rapport aux visiteurs passant devant.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “Accueil des animaux” : point dentrée unique des animaux livrés/achetés, avec slots, acclimatation/quarantaine, et passage vers placement sur la grille. |
| Rôle | Éviter le placement immédiat, révéler/afficher des informations avant placement, appliquer des règles dacclimatation et incidents sanitaires observables. |
| Portée | Une instance de bâtiment sur la carte zoo (iso), gérant une liste de slots `EMPTY/OCCUPIED/READY`. |
| Contrainte | Timers et statuts recalculés à la volée (lazy update), sans cache/mémorisation ; aucun fallback silencieux en cas dincohérence (log + erreur + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir accueil | clic bâtiment | `reception_id` | bottom sheet slots | liste slots + progression | Event `OPEN_RECEPTION` |
| Réceptionner un animal | livraison camion/achat | `animal_id`, `arrival_time` | slot OCCUPIED | 1 slot libre requis, sinon `RECEPTION_FULL` | Event `ANIMAL_ARRIVAL` |
| Calculer fin acclimatation | arrivée/upgrade | level, baseDuration | `acclimatization_end_time` | formule par niveau ; clamp ≥ now | Event `ACCLIMATIZATION_SCHEDULED` |
| Passer READY | tick lazy | now, end_time | status READY | idempotent ; pas de skip | Event `ANIMAL_READY` |
| Inspection pré-placement | ouverture slot | `animal_id` | UI stats | révèle traits selon “Traçabilité” | Event `RECEPTION_INSPECTED` |
| Placement vers zoo | action joueur | `animal_id`, coord/enclos | animal placé | valide biome/enclos/case, sinon `PLACEMENT_ERROR` | Event `ANIMAL_PLACED` |
| Appliquer bonus temporaire | sortie accueil | level | modifs temporaires | fertilité + calm/confident selon niveau | Event `RECEPTION_BONUS_APPLIED` |
| Déclencher incident quarantaine | tick (par animal) | `risk_contamination` | quarantaine prolongée/coût | probabilité explicite ; jamais silencieux | Event `QUARANTINE_ALERT` |
| Gestion saturation | slot plein | - | signal UI | badge + réduction attractivité façade | Event `RECEPTION_SATURATED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Porte/étable + caisse, badge quarantaine |
| Couleur dominante | Ambre/bois (caisse), vert (prêt) |
| Variantes | `reception_building_dir_{N,E,S,W}.png`, `reception_icon.png` |
| États | `idle`, `occupied`, `ready`, `quarantine_alert`, `full` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir slots | Consultation | - | clic accueil | bottom sheet | - |
| Inspecter animal | Consultation | slot OCCUPIED/READY | clic slot | panneau détail | `ANIMAL_NOT_FOUND` |
| Placer animal | Action | slot READY | bouton “Placer” → mode placement | placement | `PLACEMENT_ERROR` |
| Détails incident | Consultation | `QUARANTINE_ALERT` actif | clic badge | panneau cause/coût | - |
| Quitter | Navigation | sheet ouvert | fermer | retour carte | - |
## Personnage contextuel (événements & interaction)
Voir `personnel_accueil.md`.
### Affichage
Le personnel daccueil saffiche lorsque :
- le module est **actionné** (ouverture de laccueil, inspection dun slot, lancement du placement) ;
- un **événement** lié à laccueil survient (arrivée, prêt, saturation, quarantaine).
### Déclencheurs (événements)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_RECEPTION` | clic bâtiment | portrait + état slots, CTA vers slot/placement |
| `ANIMAL_ARRIVAL` | slot affecté | bulle “Arrivée enregistrée” + deep-link inspection |
| `ANIMAL_READY` | slot passe READY | bulle “Prêt à placer” + CTA “Placer” |
| `RECEPTION_FULL` | pas de slot libre | bulle “Accueil saturé” + CTA “Voir slots” |
| `QUARANTINE_ALERT` | incident actif | bulle “Alerte quarantaine” + CTA “Voir détails” |
### Skins & thèmes
Le rendu du personnage suit `theme.md` et les skins éventuels via `inventaire_skins.md` (uniforme, badge, clipboard).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `building_reception` | DB | constant |
| `level` | int | 1 | DB | 1..7 |
| `position.x` | int | 10 | DB | grid |
| `position.y` | int | 12 | DB | grid |
| `iso_x` | int | 120 | DB/calcul | rendu iso |
| `iso_y` | int | 88 | DB/calcul | rendu iso |
| `z_index` | int | 12088 | calcul | profondeur |
| `slots[].slot_id` | int | 0 | DB | 0..capacity-1 |
| `slots[].animal_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide |
| `slots[].status` | enum | `OCCUPIED` | DB | `EMPTY/OCCUPIED/READY` |
| `slots[].arrival_time` | timestamp \| null | - | DB | UTC |
| `slots[].acclimatization_end_time` | timestamp \| null | - | DB | UTC |
| `slots[].bonus_applied` | boolean | false | DB | idempotent |
| `scores.comfort_quarantine` | int | 60 | calcul/config | 0..100 |
| `scores.risk_contamination` | float | 0.02 | config | 0..0.25 |
| `scores.traceability` | int | 80 | config | 0..100 |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Capacité | 1 | slots | level 1 |
| Temps acclimatation | 600 | s | base |
| Zone température | neutre | - | stase |
| Nourrissage | auto | bool | coût inclus |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Confort quarantaine | 60 | 0..100 | stress initial \(\downarrow\) |
| Risque contamination | 2% | 0..25% | incident sanitaire |
| Traçabilité | 80 | 0..100 | traits révélés |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | début jeu | - | bâtiment présent | indestructible |
| Entrée animal | livraison | animal_id | slot OCCUPIED | capacité |
| READY | fin timer | now | status READY | idempotent |
| Sortie | placement | coord | animal placé | slot libéré |
| Incident | tirage risque | risk | prolongation/coût | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Nouvelle partie | true | est | accueil présent |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | indestructible |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Bonus temporaires | Non | expirent |
| Niveau accueil | Oui | persiste |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet accueil | Notes |
|---|---|---|
| - | neutre | pas de dégâts température |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet accueil | Notes |
|---|---|---|
| - | neutre | compatible tous |
#### Impact Saisons (tableau détaillé)
| Saison | Effet accueil | Notes |
|---|---|---|
| - | protégé | pas dintempéries |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet accueil | Notes |
|---|---|---|
| Nuit | aucun | 24/7 |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Level 4..6 | +10% temporaire | 2 jours in-game |
| Level 7 | +25% temporaire | 5 jours in-game |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Stase | pas de mort | jauges gelées |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stock global | nourri auto | coût inclus |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Façade propre > 80 | +5 | 6 cases | ambiance |
| File visible (saturation) | -10 | 8 cases | frustration |
| Livraison animal rare | +20 | 10 cases | spectacle |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Quarantaine visible | stress voisin + | proximité |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Niveau accueil | +5% / niveau | valeur zoo |
| Sans incident 7 jours | +10% | aucun `QUARANTINE_ALERT` |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison | pousse slot OCCUPIED | camion arrive |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps acclimatation | table par level | 1..7 |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Traçabilité | + | score |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Saturation | détour visiteurs | `QUARANTINE_ALERT` |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Consommables quarantaine | 50 | coins / semaine | utilisation |
| Nettoyage/désinfection | 30 | coins / semaine | maintenance |
| Contrôle vétérinaire | 80 | coins / semaine | périodique |
#### 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 quarantaine | 10 | coins | incident |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Nourrissage auto | 0 | - | inclus |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance accueil | 10 | coins / semaine | base |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | fréquentation \(\downarrow\) si incidents |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allées | Accueil | curiosité façade | détour faible |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Accueil | Boutique | stress/peur | détour fuite |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Accueil | Sortie | quarantaine visible | sortie anticipée |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `ANIMAL_ARRIVAL` | camion | animal_id | slot OCCUPIED |
| `ANIMAL_READY` | timer | animal_id | status READY |
| `ANIMAL_PLACED` | placement | animal_id, coord | sortie slot |
| `RECEPTION_FULL` | livraison | - | message |
| `QUARANTINE_ALERT` | tirage | animal_id | avoidance visiteurs |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `OPEN_RECEPTION` | clic | bottom sheet |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_AVOIDS_QUARANTINE` | `QUARANTINE_ALERT` | reroute |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SEES_QUEUE` | saturation | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_PLACES_ANIMAL_FROM_RECEPTION` | CTA | placement |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | 1 slot, 10 min | base |
| 4 | 800 | fertilité +10% (2j) | bonus calme |
| 7 | 6400 | instant, fertilité +25% (5j) | bonus confiant |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getAcclimatizationDuration` | level | seconds | table |
| `updateReceptionSlots` | reception, now | reception | READY idempotent |
| `tryStartQuarantineIncident` | slot, risk | incident? | observable |
| `applyReceptionBonus` | animal, level | animal | temporaire |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ANIMAL_READY` | Info | "Un animal est prêt à rejoindre le zoo." | slot READY |
| `RECEPTION_FULL` | Warning | "Accueil saturé." | pas de slot libre |
| `PLACEMENT_ERROR` | Error | "Impossible de placer ici." | placement invalide |
| `QUARANTINE_ALERT` | Warning | "Alerte quarantaine." | incident |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir arrivées | savoir quoi faire | dispersion | notif → deep-link accueil |
| Inspecter | vérifier stats | menus | clic slot direct |
| Placer | intégrer au zoo | erreurs | overlay OK/KO + CTA |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Bottom sheet accueil | liste slots | open/closed |
| Slot | portrait + barre | empty/occupied/ready |
| Badge état | sablier/! | visible au-dessus bâtiment |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | bâtiment | sélection base sprite |
| HUD | notifications | deep-link |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | livraison | pousse vers accueil |
| `enclos.md` | placement | validation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir accueil | clic bâtiment | slots |
| Aller depuis notif | clic notif | focus slot |
| Placer | CTA | mode placement |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_RECEPTION` | clic | sheet |
| `CLICK_PLACE_FROM_RECEPTION` | CTA | placement |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ambience_stable_soft.mp3` | accueil | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `crate_drop.mp3` | arrivée | moyen |
| `ui_open.mp3` | ouvrir | bas |
| `ui_confirm_place.mp3` | placer | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `badge_quarantine.png` | état | contraste |
| `reception_icon_ready.png` | prêt | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `reception_building.png` | bâtiment |
| `placement_ghost_ok.png` | overlay |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `delivery_short.webm` | notif | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| badge sablier | OCCUPIED | loop |
| badge ! vert | READY | loop |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `reception_amber` | #F39C12 | en cours |
| `reception_green` | #2ECC71 | prêt |
| `reception_red` | #E74C3C | erreur |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `reception.delivery_done` | Livraison effectuée | Delivery complete |
| `reception.ready` | Prêt | Ready |
| `reception.full` | Accueil saturé | Reception full |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Slot | rectangle arrondi | lisible |
| Badge état | rond | visible |

View File

@@ -80,6 +80,16 @@ def update_security_agent(agent, world):
* **Feedback :** Les visiteurs s'écartent sur son passage.
* **Vue Isométrique :** Sprite 8 directions pour des déplacements fluides.
## Affichage contextuel (modules)
Lagent de sécurité sert de personnage contextuel lors des incidents dordre/sécurité.
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `VANDALISM_ALERT` / `VANDALISM_DETECTED` | menace détectée | bulle “Incident” + CTA “Envoyer sécurité” |
| `ESCAPE_ALERT` / `ESCAPE_DETECTED` | évasion détectée | bulle “Évasion” + CTA focus zone |
| `ZONE_BLOCKED` | zone bloquée | message explicite + explication détour |
# Annexes UX/UI

View File

@@ -250,18 +250,36 @@ function updateBaby(baby, context):
| Sortie prématurée | Action | bébé en nurserie | drag vers case → confirm | bébé sur grille | `PLACEMENT_INVALID`, `BABY_TOO_FRAGILE` |
| Mettre en vente | Action | bébé stable | “Vendre” → choisir mode | listing créé | `BABY_CRITICAL` |
## Personnages contextuels (événements & interaction)
- **Nurse (nurserie)** : voir `nurse.md` (triage, urgences, éclosion).
- **Soigneur** : voir `soigneur.md` (soins santé, maladies, stabilisation globale).
### Affichage
La nurse est le personnage contextuel principal des actions “bébé” (éclosion, sortie prématurée, danger). Le soigneur est affiché lors des événements de santé (maladie, traitement, surcharge).
### Déclencheurs (exemples)
| Event | Condition | Personnage | Effet UI |
|---|---|---|---|
| `BABY_CREATED` | naissance/éclosion | nurse | bulle “Bébé né” + CTA “Voir” |
| `BABY_CRITICAL` | danger critique | nurse | bulle “Urgence” + CTA “Soigner / Voir” |
| `ANIMAL_SICK` (bébé) | état maladie | soigneur | bulle “Maladie détectée” + CTA “Appeler soigneur” |
| `ANIMAL_HEALED` (bébé) | fin soin | soigneur | message fin intervention |
### Skins & thèmes
Rendu des personnages : `theme.md` + skins via `inventaire_skins.md` (si skins de staff).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `animal_id` | uuid_v4 | `...` | DB | identifiant stable |
| `animal_id` | uuid_v4 | `uuid_v4` | DB | identifiant stable |
| `species_id` | string | `PANDA` | DB | enum espèces |
| `is_baby` | boolean | true | DB | vrai jusquà transition adulte |
| `growth_progress` | float | 42.5 | calcul/DB | clamp 0..100 |
| `growth_stage` | string | `juvenile` | calcul | dérivé de `growth_progress` |
| `nurserie_id` | uuid_v4 \| null | `...` | DB | null si sur grille |
| `nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | null si sur grille |
| `position.iso_x` | int \| null | 120 | DB | requis si sur grille |
| `position.iso_y` | int \| null | 88 | DB | requis si sur grille |
| `render.z_index` | int | 12088 | calcul | tri profondeur (iso) |

View File

@@ -121,3 +121,500 @@ def process_entry(zoo):
### Vue Isométrique
- **File d'attente** : Afficher physiquement les sprites des visiteurs qui attendent devant le guichet.
- **Portiques** : Animation d'ouverture/fermeture des barrières.
## Personnage contextuel (événements & interaction)
Voir `guichetiere.md`.
### Affichage
La guichetière saffiche lorsque :
- la billetterie est **actionnée** (clic panneau, upgrade, consultation stats) ;
- un **événement** dentrée survient (saturation, file longue, arrivée VIP).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `CLICK_BILLETERIE` | clic bâtiment | portrait + synthèse (prix, capacité, file) |
| `ZOO_FULL` | capacité atteinte | bulle “Zoo complet” + CTA “Améliorer billetterie” |
| `QUEUE_LONG` | file > seuil | bulle “File longue” + CTA “Voir billetterie” |
| `VIP_BUS` | arrivée VIP | bulle “Bus VIP” + CTA “Voir entrée” |
### Skins & thèmes
Uniforme et guichet suivent `theme.md` ; variantes éventuelles via `inventaire_skins.md`.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “billeterie” : point unique dentrée/sortie des visiteurs et point de monétisation “tickets”. |
| Rôle | Transformer lattractivité (ville → zoo) en entrées contrôlées (capacité/queue) et en revenus (prix ticket), avec signaux visibles (file, portiques, saturation). |
| Portée | Une instance fixe sur la carte zoo, connectée au réseau de chemins, agissant comme spawn/despawn visiteurs. |
| Contrainte | Aucun tracking externe/analytics ; flux et revenus calculés à la volée (lazy update), sans cache/mémorisation ; saturation doit produire message + event (pas silencieux). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir panneau billeterie | clic bâtiment | `ticket_booth_id` | UI stats | montre prix/capacité/queue/revenus jour | Event `CLICK_BILLETERIE` |
| Calculer demandes dentrée | tick logique | attractivité, villes, saison | `potential_visitors` | dépend distance ville + attractivité zoo | Event `VISITOR_DEMAND_COMPUTED` |
| Alimenter file | tick logique | `potential_visitors` | `current_queue_length` | clamp ≥ 0 | Event `QUEUE_UPDATED` |
| Convertir file en entrées | tick logique | level, queue | `actual_entries` | limité par vitesse guichet et capacité zoo | Event `VISITOR_ENTERED` |
| Encaisser ticket | entrée | ticket_price | coins + | atomicité par visiteur entré | Event `TICKET_SOLD` |
| Bloquer si zoo complet | capacité atteinte | `current_visitors` | entrée 0 | déclenche alerte + évaporation file (visiteurs partent) | Event `ZOO_FULL` |
| Gérer bus VIP | event | multiplicateur | pic entrées | bus si condition (réputation/ville riche) | Event `VIP_BUS` |
| Mesurer impatience | queue longue | temps attente | départs | si attente > seuil, départs + malus réputation léger | Event `QUEUE_LONG` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Guichet + ticket + portique |
| Couleur dominante | Bleu/rouge (signalétique), or (coins) |
| Variantes | `billeterie_lvl_{1..7}_dir_{N,E,S,W}.png`, `icon_ticket_booth.png` |
| États | `open`, `busy` (queue), `full` (zoo complet), `vip_bus` (arrivée) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Consulter stats | Consultation | - | clic billeterie | panneau stats | - |
| Upgrader | Action | coins ok | panneau → “Améliorer” | level +1 | `NOT_ENOUGH_COINS` |
| Voir file | Consultation | file > 0 | survol bâtiment | tooltip “X en attente” | - |
| Aller à la saturation | Navigation | `ZOO_FULL` | clic notif | focus billeterie | - |
| Forcer fermeture | Action (option future) | mode maintenance | toggle | entrées stoppées | `MAINTENANCE_REQUIRED` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `ticket_booth` | DB | constant |
| `level` | int | 3 | DB | 1..7 |
| `position.x` | int | 1 | DB | grid |
| `position.y` | int | 1 | DB | grid |
| `stats.total_entries` | int | 1280 | DB | cumul |
| `stats.daily_revenue` | int | 420 | DB | reset journalier in-game |
| `stats.current_queue_length` | int | 18 | DB/calcul | clamp ≥ 0 |
| `entry_log[].timestamp` | timestamp | - | DB | UTC |
| `entry_log[].visitor_count` | int | 5 | DB | batch |
| `entry_log[].revenue` | int | 50 | DB | batch |
| `iso_x` | int | 120 | DB/calcul | rendu |
| `iso_y` | int | 88 | DB/calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Prix ticket (lvl1) | 10 | coins | base |
| Capacité max (lvl1) | 20 | visiteurs | base |
| Vitesse guichet (lvl1) | 2 | visiteurs/tick | file |
| Seuil queue longue | 25 | visiteurs | message + départs |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Satisfaction dentrée | 50 | 0..100 | queue longue la baisse |
| Taux départ file | 0% | 0..100% | impatience |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | création zoo | - | bâtiment présent | fixe |
| Fonctionnement | zoo ouvert | attractivité | entrées | capacité respectée |
| Saturation | zoo plein | - | entrées stoppées | alerte obligatoire |
| Upgrade | action joueur | coins | level ↑ | monotone |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo créé | true | est | billeterie placée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | bâtiment persistant |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Niveau | Oui | persiste |
| Statistiques | Oui | logs conservés, pas danalytics |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet billeterie | Notes |
|---|---|---|
| Canicule | flux -10% | visiteurs évitent attente au soleil |
| Froid extrême | flux -15% | sortie plus rapide |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Proche océan (frais) | impatience - | queue tolérée |
| Boue autour entrée | impatience + | pénalise |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Été | demande +20% | vacances |
| Hiver | demande -30% | froid |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Matin | pics dentrée | 9h-12h |
| Soir | pics de sortie | 17h-19h |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bébés visibles | satisfaction entrée +5 | marketing “naissances” |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Incident visible à lentrée | flux -40% | pendant 1 jour in-game |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stand boisson proche | impatience - | file longue |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Entrée fluide | +5 | 8 cases | file courte |
| File longue | -10 | 8 cases | visiteurs partent |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Foule bruyante | stress + | enclos proche entrée |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Upgrade billeterie | + | valeur zoo | capacité |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Bus VIP | entrées batch | event `VIP_BUS` |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Naissances annoncées | demande + | saison |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Nouveaux animaux placés près entrée | intérêt + | visiteurs |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Marketing recherche | demande + | upgrade futur |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offre rare | pics | annonce |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Portiques auto | entrées/tick + | level élevé |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Impression tickets | 100 | $/semaine | lore |
| Maintenance portiques | 20 | coins/semaine | level ≥ 3 |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Signalétique | 10 | coins/semaine | esthétique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Perte opportunité | ticket non vendu | coins | queue trop longue |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Agent accueil | 1500 | $/mois | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Vitrine bébés | 50 | coins/semaine | option |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Eau file dattente | 5 | coins/jour | été |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Signal “nouvel animal” | 5 | coins | panneau |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Bus touristes | 25 | coins/event | `VIP_BUS` |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Billeterie | demande calculée | spawn file |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Enclos | plan visite | route via chemins |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | faim/soif | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Billeterie | fin visite | sortie |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `TICKET_SOLD` | entrée | price | coins + |
| `ZOO_FULL` | capacité | current/max | stop entrées |
| `QUEUE_LONG` | queue > seuil | length | départs + |
| `VIP_BUS` | event | count | entrées batch |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOCUS_TICKET_BOOTH` | clic notif | caméra |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SPAWNED_AT_ENTRY` | entrée | spawn point |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | demande |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_LEAVES_QUEUE` | impatience | départ |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_TICKET_BOOTH` | UI | stats maj |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 3 | 400 | portiques visibles + vitesse guichet | anim porte |
| 5 | 1600 | file plus courte (vitesse) | satisfaction + |
| 7 | 6400 | capacité 300 + prix 35 | “grand hall” |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getEntrySpeed` | level | int | visiteurs/tick |
| `computePotentialVisitors` | zoo, villes, saison | int | à la volée |
| `processEntry` | zoo, booth | int | encaisse + spawn |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZOO_FULL` | Alerte | "Le zoo est complet." | capacité atteinte |
| `QUEUE_LONG` | Warning | "La file d'attente est trop longue." | queue > seuil |
| `VIP_BUS` | Info | "Un bus de touristes arrive." | event |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir revenus | décider upgrade | stats dispersées | panneau unique billeterie |
| Réagir à saturation | éviter pertes | notif | clic notif → focus |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panneau billeterie | prix/capacité/revenus | normal/full |
| File visuelle | sprites visiteurs | courte/longue |
| Badge bus VIP | icône bus | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | entrée | file visible |
| HUD | compteur coins | feedback pièces |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | spawn/despawn | flux |
| `ville.md` | demande | distance |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir stats | clic bâtiment | panneau |
| Upgrader | panneau → bouton | level ↑ |
| Focus | clic notif | caméra |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `CLICK_BILLETERIE` | clic | ouvre |
| `CLICK_UPGRADE_TICKET_BOOTH` | bouton | upgrade |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ticket_booth_crowd_loop.mp3` | proximité entrée | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `gate_open.mp3` | portiques | bas |
| `coin_jingle.mp3` | ticket vendu | bas |
| `ui_denied.mp3` | zoo plein | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `ticket_booth_ui_panel.png` | panneau | scalable |
| `queue_indicator.png` | badge | lisible |
| `vip_bus_icon.png` | bus | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `billeterie_lvl1.png` | bâtiment |
| `billeterie_lvl7.png` | bâtiment |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `ticket_gate_cycle.webm` | portiques | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièces qui volent | ticket vendu | 0.6s |
| bounce badge | queue longue | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `ticket_blue` | #1976D2 | signalétique |
| `ticket_gold` | #D4AF37 | revenus |
| `ticket_alert_red` | #D32F2F | saturation |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `ticket_booth.title` | Billeterie | Ticket booth |
| `ticket_booth.capacity` | Capacité | Capacity |
| `ticket_booth.queue_long` | File trop longue. | Queue too long. |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Panneau | rectangle arrondi | lisible |
| Badge | rond | constant |

View File

@@ -144,6 +144,25 @@ function processShop(shop, visitors):
| `SHOP_FULL` | Warning | "Boutique pleine ! Des clients partent." |
| `SHOP_PROMO` | Info | "Soldes lancées ! Affluence +20%." |
## Personnage contextuel (événements & interaction)
Voir `vendeur.md`.
### Affichage
Le vendeur saffiche lorsque :
- la boutique est **actionnée** (clic panneau stats, upgrade, skin de boutique) ;
- un **événement** de boutique survient (vente, surcharge, promo).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_SHOP` | clic boutique | portrait + stats + CTA |
| `SALE_MADE` | vente | feedback “caisse” + pièce/FX |
| `SHOP_FULL` | capacité atteinte | bulle “Surcharge” + CTA “Améliorer / Ajouter boutique” |
| `SHOP_PROMO` | promo active | bulle “Promo” + détails (si module) |
### Skins & thèmes
Uniforme et comptoir suivent `theme.md`, avec skins de boutique via `inventaire_skins.md`.
# Annexes UX/UI
## 0. Direction Artistique & Vue
@@ -213,3 +232,483 @@ function processShop(shop, visitors):
- **Couleurs** : Bleu (Blueprint).
- **Textes** : "Construction".
- **Formes** : Grille de placement.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “boutique” : point de vente in-zoo (souvenirs/food/boissons) qui convertit les besoins des visiteurs en revenus. |
| Rôle | Augmenter la rétention et la satisfaction via la résolution des besoins (faim/soif/cadeau), et créer des micro-flux (file, service, rupture). |
| Portée | Une instance de bâtiment sur carte zoo, avec paramètres (capacité, vitesse service, catalogue, skin). |
| Contrainte | Pas danalytics ; revenus calculés à la volée à partir des interactions visiteurs ; pas de fallback silencieux (rupture/plein => message + event). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Construire boutique | mode build | coord, type boutique | bâtiment créé | case vide requise | Event `BUILD_SHOP` |
| Ouvrir stats | clic bâtiment | `shop_id` | UI stats | revenus totaux + clients | Event `OPEN_SHOP` |
| Attirer visiteurs | besoin/curiosité | visitor, rayon | target set | poids pathfinding élevé si besoin > seuil | Event `VISITOR_TARGETS_SHOP` |
| Servir visiteur | arrivée en file | visitor, stock | revenue + satisfaction | service limité par capacité + vitesse | Event `SALE_MADE` |
| Gérer file | dépassement capacité | queue length | impatience | si queue > seuil -> départ + malus | Event `SHOP_FULL` |
| Adapter produits au climat | temp/saison | météo, saison | mod ventes | canicule: eau + ; froid: chocolat + | Event `SHOP_DEMAND_MOD_CHANGED` |
| Appliquer skin biome | skin, biome | ids | bonus | +10% ventes si match | Event `SHOP_THEME_MATCH_BONUS` |
| Réapprovisionner | tick économique | CA, ratio | stock + coût | coût = 10% du CA | Event `SHOP_RESTOCKED` |
| Rupture | stock=0 | - | fermeture temporaire | déclenche panneau “Rupture” | Event `SHOP_OUT_OF_STOCK` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Boutique avec enseigne (cadeau/food) |
| Couleur dominante | Or (revenu) + couleur du type (rouge food, bleu boisson) |
| Variantes | `shop_gift_dir_{N,E,S,W}.png`, `shop_food_dir_{N,E,S,W}.png`, `shop_drink_dir_{N,E,S,W}.png` |
| États | `open`, `busy`, `full`, `out_of_stock`, `promo` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Placer boutique | Action | case libre | sélectionner → placer | construction | `CELL_OCCUPIED` |
| Voir revenus | Consultation | boutique posée | clic | panneau stats | - |
| Upgrader | Action | coins ok | panneau → améliorer | level ↑ | `NOT_ENOUGH_COINS` |
| Voir file | Consultation | visiteurs proches | survol | tooltip file | - |
| Activer promo | Action (event) | condition event | clic toggle | affluence + | `PROMO_NOT_AVAILABLE` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `shop` | DB | constant |
| `subtype` | string | `gift` | DB/config | `gift/food/drink` |
| `level` | int | 2 | DB | 1..7 |
| `position.x` | int | 10 | DB | grid |
| `position.y` | int | 12 | DB | grid |
| `stats.revenue_total` | int | 12500 | DB | cumul |
| `stats.visitors_served` | int | 840 | DB | cumul |
| `stock.units` | int | 100 | DB | >=0 |
| `popularity` | int | 10 | calcul/DB | 0..100 |
| `capacity` | int | 5 | config | visitors simultanés |
| `service_seconds_per_visitor` | float | 5.0 | config | 1..10 |
| `attractiveness` | int | 10 | config | poids target |
| `skin_id` | string | `shop_wood_forest` | DB | cosmétique |
| `iso_x` | int | 120 | DB/calcul | rendu |
| `iso_y` | int | 88 | DB/calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Revenu / visiteur | 15 | coins | level 1 |
| Capacité | 5 | visiteurs | level 1 |
| Vitesse service | 5 | s/visiteur | level 1 |
| Rayon attraction | 2 | cases | level 1 |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Stock | 100 | 0..∞ | rupture possible |
| Popularité | 10 | 0..100 | mod conversion |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Construction | joueur | coins + coord | bâtiment | case occupée |
| Service | visiteurs | besoins | revenus | capacité respectée |
| Réappro | tick | CA | stock + | coût 10% CA |
| Rupture | stock=0 | - | fermeture | observable |
| Upgrade | action | coins | level ↑ | monotone |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Construction | true | est | boutique posée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Destruction | true | est | remboursement 50% |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Franchise | Oui | coût -10% si 5 identiques |
| Stats | Oui | cumul |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet boutique | Notes |
|---|---|---|
| > 30°C | eau +200% | canicule |
| < 5°C | chocolat +200% | froid |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| forêt + skin bois | ventes +10% | thème match |
| désert + skin oasis | ventes +10% | thème match |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Été | ventes boisson +20% | règle |
| Hiver | ventes cadeaux +10% | règle |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| 12h-14h | demande food ++ | pic |
| Nuit | fermé | 0 ventes |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Naissance rare | ventes peluche x2 | “espèce du moment” |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Mort récente proche | ventes -20% | ambiance |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Concurrence < 3 cases | ventes food -10% | partage |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Boutique level 7 | + | 10 cases | centre commercial |
| Rupture stock | - | 6 cases | frustration |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Odeurs food | stress + | espèces sensibles |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Revente | 50% + upgrades | destruction |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison stock | stock + | si feature livraison |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Peluches bébé | ventes + | bébés visibles |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Nouvel animal rare | promo | event |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tech caisse auto | service 1s | level 7 |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Produit “science” | panier moyen + | zone labo |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| File dattente | temps boutique + | capacité limitée |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | signalétique (conservée) |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Réappro | 10% CA | coins | automatique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Temps perdu file | satisfaction - | points | queue |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Caissier (lore) | 1800 | $/mois | level < 7 |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Peluche naissance | 2 | coins | production |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Matières food | 2 | coins/vente | marge |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Cadeau “nouvel arrivant” | 1 | coins | souvenir |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Livraison premium | 5 | coins | option |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | entrée | besoins init 0 |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | faim/soif > 80 | target |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Boutique | Enclos | besoins résolus | continue visite |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Boutique | Sortie | budget 0 | départ |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `SALE_MADE` | service | revenue | coins + |
| `SHOP_FULL` | queue | length | départs |
| `SHOP_OUT_OF_STOCK` | stock | units | fermeture |
| `SHOP_RESTOCKED` | tick | cost | stock + |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOCUS_SHOP` | clic | caméra |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_BUYS_ITEM` | transaction | satisfaction + |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WEATHER_HEATWAVE` | météo | eau ++ |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_LEAVES_SHOP_QUEUE` | impatience | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_SHOP` | UI | params + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 4 | 340 | capacité 18 + service plus rapide | file réduite |
| 7 | 1150 | 50 capacité + caisses auto | 1s/visiteur |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeSeasonDemandMod` | season, temp | float | eau/glaces/chocolat |
| `serveVisitor` | shop, visitor | revenue | résout besoins |
| `restockIfNeeded` | shop, CA | shop | coût 10% CA |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SHOP_FULL` | Warning | "Boutique pleine." | queue > cap |
| `SHOP_OUT_OF_STOCK` | Warning | "Rupture de stock." | stock=0 |
| `SALE_MADE` | Info | "Vente effectuée." | service |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Construire | générer revenus | placement | mode construction direct |
| Lire stats | décider upgrade | menus | clic bâtiment |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Popup coins | +XX | burst | feedback |
| Panneau stats | total + served | open/closed |
| Badge rupture | icône | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | sur case | sélection base sprite |
| HUD | compteur | pièces volantes |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | besoins | faim/soif |
| `chemin.md` | pathfinding | poids boutique |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir stats | clic | panneau |
| Upgrader | panneau → CTA | level ↑ |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SHOP` | clic | panneau |
| `BUILD_SHOP` | build | placement |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `shop_muzak_loop.mp3` | proximité boutique | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `cash_register.mp3` | vente | bas |
| `coin_jingle.mp3` | revenue | bas |
| `ui_open.mp3` | panneau | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `shop_coin_popup.png` | popup | lisible |
| `shop_queue_badge.png` | queue | contraste |
| `shop_out_of_stock_badge.png` | rupture | rouge |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `shop_blueprint.png` | construction |
| `shop_product_icons.png` | UI |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `shop_sales_bars.webm` | stats | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièce monte | vente | 0.6s |
| porte ouvre/ferme | visiteur | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `shop_gold` | #FFD700 | revenus |
| `shop_profit_green` | #2E7D32 | stats |
| `shop_alert_red` | #D32F2F | rupture |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `shop.title` | Boutique | Shop |
| `shop.revenue` | Revenus | Revenue |
| `shop.out_of_stock` | Rupture de stock | Out of stock |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Popup | rectangle arrondi | lisible |
| Badge | rond | constant |

View File

@@ -231,3 +231,495 @@ function updateTruck(truck, deltaTime):
- **Couleurs** : Rouge (Feux stop).
- **Textes** : "Livraison effectuée".
- **Formes** : Carré de stationnement.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Unité de transport “Camion” : véhicule qui exécute des missions (achat/vente/transfert) entre sites (carte monde) et le zoo. |
| Rôle | Relier les transactions (enchères/achats/ventes) à une logistique observable (trajet, délais, incidents), et injecter le cargo dans `accueil_animaux` / `nurserie` selon le cas. |
| Portée | Entité persistante (par joueur/zoo) avec `level`, `status`, `cargo`, `target_site_id`. |
| Contrainte | ETA et trajectoire calculés à la volée, sans cache/mémorisation ; aucun fallback silencieux (cargo manquant => erreur + log). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Démarrer mission | achat/vente | `target_site_id`, cargo | status moving | refuse si déjà en mission | Event `TRUCK_DEPART` |
| Calculer durée | départ | distance, level | ETA | vitesse table par level + météo | Event `TRUCK_ETA_COMPUTED` |
| Déplacer sur carte | tick lazy | now, route | position | interpolation | Event `TRUCK_POSITION_UPDATED` |
| Appliquer stress cargo | tick | cargo, confort | fertilité/stress | perte fertilité/h selon level | Event `CARGO_STRESS_APPLIED` |
| Gérer incidents | tick | météo, entretien | delay | crevaison/panne explicités | Event `TRUCK_DELAYED` |
| Arriver au site | ETA atteint | - | status arrived | charge/décharge | Event `TRUCK_ARRIVED_SITE` |
| Retourner au zoo | fin opération | - | status moving_home | trajet retour | Event `TRUCK_RETURNING` |
| Décharger au zoo | arrivée | cargo | slot réception | adultes → `accueil_animaux`, œufs/bébés → `nurserie` (selon type) | Event `DELIVERY_COMPLETE` |
| Mini-jeu attente | clic camion | - | bonus léger | bonus borné, non obligatoire | Event `CLEAN_WINDSHIELD` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Camion isométrique + flèche direction |
| Couleur dominante | Jaune/noir ou blanc |
| Variantes | `truck_lvl_{1..7}_dir_{N,E,S,W}.png` |
| États | `idle`, `moving`, `delayed`, `arrived`, `cargo_loaded` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Envoyer en mission | Action | camion idle | achat → auto départ | mission lancée | `TRUCK_BUSY` |
| Suivre trajet | Consultation | mission active | clic icône | panel ETA | - |
| Ouvrir mini-jeu | Action | mission active | clic camion | modal mini-jeu | - |
| Voir arrivée | Consultation | mission finie | notif | focus cargo | - |
## Personnages contextuels (événements & interaction)
Selon le contexte de la mission, le camion peut afficher un personnage contextuel :
- **Personnel daccueil (déchargement au zoo)** : voir `personnel_accueil.md` (cargo adulte).
- **Nurse (déchargement vers nurserie)** : voir `nurse.md` (cargo œuf/bébé).
- **Laborantin (achat depuis le laboratoire)** : voir `laborantin.md` (refus/gating/validation).
- **Agent de sécurité (incident de trajet)** : voir `agent_securite.md` (retard/menace si la cause est “sécurité”).
### Déclencheurs (exemples)
| Event | Condition | Personnage | Effet UI |
|---|---|---|---|
| `TRUCK_DEPART` | mission démarrée | (option UI) | état “en route” + destination |
| `TRUCK_DELAYED` | incident détecté | sécurité | bulle “Retard” + cause + CTA “Voir trajet” |
| `TRUCK_ARRIVE` / `DELIVERY_COMPLETE` | arrivée zoo | accueil ou nurse | bulle “Livraison effectuée” + deep-link vers `accueil_animaux`/`nurserie` selon cargo |
| `TRUCK_ARRIVED_SITE` | arrivée site | laborantin (si site labo) | bulle “Offre disponible” + CTA “Ouvrir labo” |
### Skins & thèmes
Le rendu des personnages suit `theme.md` et `inventaire_skins.md` (uniformes + accessoires). Le camion lui-même reste skinable via `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `level` | int | 1 | DB | 1..7 |
| `status` | enum | `idle` | DB | `idle/moving_to_target/moving_home/delayed` |
| `cargo.type` | string \| null | `animal` | DB | null si vide |
| `cargo.id` | uuid_v4 \| null | `uuid_v4` | DB | - |
| `position.x` | float | 10.2 | calcul/DB | carte monde |
| `position.y` | float | 12.7 | calcul/DB | carte monde |
| `target_site_id` | uuid_v4 \| null | `uuid_v4` | DB | - |
| `iso_x` | int | 120 | DB/calcul | si rendu zoo |
| `iso_y` | int | 88 | DB/calcul | si rendu zoo |
| `z_index` | int | 12088 | calcul | profondeur |
| `maintenance.km_since_service` | float | 0 | DB | - |
| `timers.departed_at` | timestamp \| null | - | DB | UTC |
| `timers.eta_at` | timestamp \| null | - | calcul/DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Vitesse (lvl1) | 50 | km/h | simulé |
| Capacité | 1 | cargo | par camion |
| Confort | 0.0 | score | réduit stress |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Kilométrage | 0 | 0..∞ | entretien |
| Retards cumulés | 0 | 0..∞ | info joueur |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | début jeu | - | camion idle | 1 camion min |
| Mission | achat/vente | cargo+site | moving | exclusif |
| Arrivée | ETA | - | arrived | décharge |
| Retour | fin op | - | moving_home | - |
| Idle | arrivée zoo | - | idle | cargo null |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Début partie | true | est | camion créé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | camion persiste |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Upgrades | Oui | persiste |
| Cargo | Non | mission-only |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet camion | Notes |
|---|---|---|
| > 40°C | vitesse -10% | surchauffe |
| < -10°C | démarrage +5s | gel |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet camion | Notes |
|---|---|---|
| Sable | vitesse - | sans pneus |
| Terre | vitesse + | pneus adaptés |
#### Impact Saisons (tableau détaillé)
| Saison | Effet camion | Notes |
|---|---|---|
| Hiver | vitesse -20% | neige |
| Automne | vitesse -5% | boue |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet camion | Notes |
|---|---|---|
| Nuit sans phares | vitesse -30% | prudence |
| Nuit avec phares | normal | level ≥ 2 |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Stress transport | fertilité \(\downarrow\) | cargo animal |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Trajet > 24h + confort bas | risque mort | cas extrême |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Carburant | coût/km | mission |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Skin camion | +1 | zoo | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Klaxon | stress + | au passage |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Niveau camion | + | richesse (score) |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Niveau | table vitesse | 1..7 |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison œuf/bébé | push vers nurserie | cargo type |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison adulte | push vers accueil | cargo type |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Route labo | vitesse selon route | autoroute/piste |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Entretien | 10 | coins / 1000 km | règle |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Chauffeur (abstrait) | 0 | - | inclus |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### 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 |
|---|---:|---|---|
| Carburant | variable | coins | distance |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `TRUCK_DEPART` | mission | target, cargo | moving |
| `TRUCK_DELAYED` | incident | reason, delta | ETA \(\uparrow\) |
| `TRUCK_ARRIVE` | retour zoo | cargo | décharge |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `TRACK_TRUCK` | clic | panel |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `DELIVERY_COMPLETE` | arrivée | push accueil/nurserie |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_OPENS_TRUCK_PANEL` | clic | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | 50 km/h | base |
| 2 | 200 | 70 km/h + phares | nuit |
| 7 | 6400 | 200 km/h | rapide |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeTruckSpeed` | level, season, temp | float | table + mods |
| `computeETA` | distance, speed | timestamp | à la volée |
| `applyCargoStress` | cargo, comfort, dt | cargo | fertilité/stress |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `TRUCK_ARRIVED` | Info | "Le camion est revenu au zoo." | arrivée |
| `TRUCK_DELAY` | Info | "Le camion a du retard." | incident |
| `TRUCK_BUSY` | Warning | "Camion déjà en mission." | lancement |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Acheter sur carte | déclencher livraison | navigation | auto-focus camion |
| Suivre | connaître ETA | dispersion | panel clic icône |
| Mini-jeu | occuper attente | option | accessible en 1 clic |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Icône camion | position + badge | moving/delayed |
| Panel trajet | ETA + destination | open/closed |
| Modal mini-jeu | taches | progress |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | overlay | camion |
| Carte zoo | case camion | départ/arrivée |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `accueil_animaux.md` | livraison adulte | dépôt |
| `nurserie.md` | livraison œuf/bébé | dépôt |
| `vente_animal.md` | logistique | mission |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Suivre | clic camion | panel |
| Jouer | clic camion → mini-jeu | modal |
| Voir arrivée | clic notif | focus |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `TRACK_TRUCK` | clic | panel |
| `CLEAN_WINDSHIELD` | clic | mini-jeu |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `truck_radio_lofi.mp3` | mini-jeu | loop | doux |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `engine_start.mp3` | départ | moyen |
| `truck_stop.mp3` | arrivée | moyen |
| `wipe.mp3` | mini-jeu | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `truck_route_dotted.png` | route | overlay |
| `truck_badge_delayed.png` | retard | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `truck_map_icon.png` | carte |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `truck_depart_zoom.webm` | départ | 1.5s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fumée échappement | moving | loop |
| rotation roues | moving | loop |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `truck_yellow` | #FBC02D | carrosserie |
| `truck_black` | #212121 | accents |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `truck.en_route` | En route vers {dest} | En route to {dest} |
| `truck.arrived` | Camion rentré | Truck arrived |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Badge | rond | statut |
| Flèche | triangle | direction |

View File

@@ -138,3 +138,464 @@ function updateMap(map):
- **Couleurs** : Fond neutre hors carte.
- **Textes** : Coordonnées (Debug).
- **Formes** : Rectangulaire.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Abstraction “carte” : structure de grille + règles de navigation + horloge, déclinée en carte zoo et carte monde. |
| Rôle | Offrir un contrat commun de coordonnées, rendu isométrique, événements de déplacement/zoom, et cycle temps (jour/nuit, saisons). |
| Portée | Base pour `carte_zoo.md` et `carte_monde.md`, et pour les types `case_*`. |
| Contrainte | Aucun cache/mémorisation obligatoire : la carte fournit des fonctions de calcul à la volée (variants, z_index, routes). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Initialiser carte | création | type, seed | grid | dimensions fixées | Event `MAP_INIT` |
| Résoudre case | lookup | x,y | case | unicité coord | Event `MAP_CASE_RESOLVED` |
| Convertir coord → iso | rendu | x,y | iso_x/iso_y | formule iso stable | Event `MAP_COORD_CONVERTED` |
| Calculer z_index | rendu | x,y | int | priorité y puis x | Event `MAP_ZINDEX_COMPUTED` |
| Déclencher tick | loop | deltaTime | events | mise à jour entités | Event `MAP_TICK` |
| Déplacement caméra | input | pan/zoom | camera state | clamp | Event `MAP_MOVE` / `MAP_ZOOM` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Grille + boussole |
| Couleur dominante | Neutre |
| Variantes | `icon_map_generic.png`, `icon_compass.png` |
| États | normal, loading, locked |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Pan | Navigation | carte autorise pan | drag | caméra bouge | - |
| Zoom | Navigation | - | pinch/wheel | caméra zoom | - |
| Sélection case | Consultation | case interactive | clic | panneau | `CASE_LOCKED` |
## Personnage contextuel (événements & interaction)
Les cartes peuvent afficher un personnage contextuel quand un module de carte est actionné ou lorsquun événement impacte la navigation.
### Références
- **Carte du zoo** : avatar du joueur actif comme contexte principal (`avatar_joueur.md`), plus visiteurs/staff selon événements (`carte_zoo.md`).
- **Carte du monde** : maire pour les événements de ville (`maire.md`, `ville.md`), joueurs/bots pour les interactions sociales (`joueur.md`, `bot.md`), visiteurs comme flux (`visiteur.md`).
### Déclencheurs (génériques)
| Event / Action | Condition | Effet UI personnage |
|---|---|---|
| `MAP_LOADED` | carte prête | portrait/mascotte de contexte (selon type) |
| `MAP_MOVE` / `MAP_ZOOM` | navigation | feedback passif (pas de spam) |
| `CASE_LOCKED` | gating | message explicite (raison + action) |
### Skins & thèmes
Le personnage contextuel suit `theme.md`. Les portraits/mini-avatars peuvent utiliser les skins via `inventaire_skins.md` si la mécanique est activée.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | unique |
| `type` | enum | `zoo` | DB | `zoo/world` |
| `width` | int | 6 | DB | >0 |
| `height` | int | 5 | DB | >0 |
| `grid[x][y].case_ref` | uuid_v4 | `uuid_v4` | DB | référence |
| `time.day_phase` | enum | `day` | calcul | jour/nuit |
| `time.season` | enum | `spring` | calcul | saisons |
| `iso_x` | int | 0 | calcul | origine |
| `iso_y` | int | 0 | calcul | origine |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Densité occupée | 0 | % | init |
| DeltaTime | 1 | tick | logique |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Exploration | 0 | 0..100 | carte monde |
| Aménagement | 0 | 0..100 | carte zoo |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | init jeu | seed | carte | stable |
| Utilisation | session | input | camera | clamp |
| Destruction | suppression compte | - | supprimée | - |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Initialisation | true | est | carte créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte supprimé | true | est | carte supprimée |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Configuration seed | Oui | rejouable |
| Variants render | Non | recalcul |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet carte | Notes |
|---|---|---|
| Météo globale | mod cases | propagée |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet carte | Notes |
|---|---|---|
| Répartition | gen/procédural | cohérence |
#### Impact Saisons (tableau détaillé)
| Saison | Effet carte | Notes |
|---|---|---|
| Cycle | mod visuel | global |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet carte | Notes |
|---|---|---|
| Nuit | assombrissement | global |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Population globale | caps | simulation |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Traces | journal | option |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stocks | centralisation | option |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Score global | agrégation | monde | carte monde |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | base |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Terrain | + | cases |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| deltaTime | avance mission | tick |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| timers | progress | tick |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| timers | progress | tick |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| projets | durations | tick |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| refresh offres | 24h | tick |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| pathfinding | recalcul | obstacles |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Affichage UI | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | attractivité | flux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Enclos | curiosité | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | route |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Sortie | fermeture | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `MAP_TICK` | loop | dt | update |
| `MAP_LOADED` | init | type | ready |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_MOVE` | input | camera |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_INIT` | create | grid |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_ZOOM` | input | camera |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_CASE_RESOLVED` | lookup | case |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_COORD_CONVERTED` | render | iso |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | zoom + | map |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateMap` | map, dt | map | tick |
| `toIso` | x,y | iso | projection |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `MAP_LOADED` | Info | "Carte chargée." | init |
| `CASE_LOCKED` | Warning | "Zone verrouillée." | gating |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Explorer | comprendre espace | navigation | pan/zoom |
| Centrer | retrouver point | perte | bouton recentrer |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| HUD carte | boutons | visible |
| Tooltip | coord/site | hover |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Plein écran | centre | carte |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_zoo.md` | usage | build |
| `carte_monde.md` | usage | navigation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Pan | drag | move |
| Zoom | pinch | scale |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `MAP_MOVE` | drag | camera |
| `MAP_ZOOM` | pinch | camera |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `map_generic_loop.mp3` | carte | loop | neutre |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `hover_soft.mp3` | hover | bas |
| `ui_zoom.mp3` | zoom | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `grid_lines.png` | overlay | subtil |
| `tooltip_bg.png` | tooltip | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `skybox.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `clouds_overlay.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| inertie pan | move | 0.2s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `map_bg` | #202020 | hors carte |
| `map_highlight` | #FFFFFF | hover |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `map.coords` | Coordonnées | Coordinates |
| `map.loaded` | Carte chargée | Map loaded |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tooltip | rectangle arrondi | lisible |

View File

@@ -184,3 +184,475 @@ function updateWorldMap(map, deltaTime):
- **Couleurs** : Blanc/Gris.
- **Textes** : "Zone Inexplorée".
- **Formes** : Zone non cliquable.
## Définition
| Champ | Valeur |
|---|---|
| Concept | “Carte du monde” : vue multijoueur/économie, affichant sites (zoos, villes, labos) et camions en transit. |
| Rôle | Permettre lachat/vente via transport, visualiser la dynamique (flux, météo, jour/nuit) et lexploration (brouillard). |
| Portée | Singleton logique (serveur), rendu client par zooms et marqueurs, sans pan manuel si règle active. |
| Contrainte | Pas de cache/mémorisation des flux : distances/choix calculés à la volée ; pas dalternative HTTP/analytics ; interaction zone masquée => blocage explicite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir carte monde | bouton UI | player | écran monde | charge sites visibles | Event `OPEN_WORLD_MAP` |
| Résoudre visibilité | upgrade zoom | rayon | sites visibles | dépend upgrade carte | Event `WORLD_VISIBILITY_UPDATED` |
| Afficher sites | rendu | sites | markers | z_index stable | Event `WORLD_SITES_RENDERED` |
| Suivre camions | tick lazy | dt | pos camions | interpolation | Event `WORLD_TRUCKS_UPDATED` |
| Bloquer zone inexplorée | clic | coord | tooltip | pas de reveal gratuit | Event `FOG_CLICK_BLOCKED` |
| Délivrer cargo | camion arrive | cargo | dépôt zoo | adultes→accueil, œufs/bébés→nurserie | Event `DELIVERY_COMPLETE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Globe + pins |
| Couleur dominante | Désaturé (fond) + accents (pins) |
| Variantes | `icon_world_map.png`, `icon_pin_site.png` |
| États | normal, fogged, event_weather |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Clic site | Consultation | visible | clic marker | panneau site | `ZONE_NOT_EXPLORED` |
| Achat offre | Action | fonds + camion idle | drag offre→camion | mission | `TRUCK_BUSY`, `NOT_ENOUGH_COINS` |
| Zoom-out | Navigation | upgrade ok | bouton/gesture | rayon ↑ | `UPGRADE_REQUIRED` |
## Personnages contextuels (événements & interaction)
La carte du monde affiche des personnages contextuels selon le type de site sélectionné et les événements globaux.
### Sites et personnages
- **Ville** : maire (`maire.md`) — événements de ville, flux visiteurs, relation/jumelage.
- **Laboratoire** : laborantin (`laborantin.md`) — offres rares, services, alertes.
- **Zoo joueur** : joueur/portrait (`joueur.md`, `avatar_joueur.md`) — identité, indicateurs, interactions sociales.
- **Zoo bot** : bot (`bot.md`) — profil de stratégie et indicateurs.
### Déclencheurs (exemples)
| Event / Action | Condition | Personnage | Effet UI |
|---|---|---|---|
| `OPEN_WORLD_MAP` | ouverture écran | (contexte) | personnage de contexte selon dernier site sélectionné |
| clic site `city` | sélection ville | maire | panneau ville + événements |
| clic site `lab` | sélection labo | laborantin | panneau labo + offres/services |
| clic site `zoo` (autre joueur) | sélection zoo | joueur | panneau identité + actions permises |
| `ZONE_NOT_EXPLORED` | fog | (contexte) | message explicite (gating) |
### Skins & thèmes
Les portraits/mascottes suivent `theme.md`. Les mini-avatars des joueurs suivent leurs skins (si le profil est accessible) via les règles de `avatar_joueur.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | string | `world_map` | DB | singleton |
| `width` | int | 200 | DB | très grand |
| `height` | int | 200 | DB | - |
| `sites[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `sites[].type` | enum | `city` | DB | `zoo/city/lab` |
| `sites[].pos.x` | int | 40 | DB | grid |
| `sites[].pos.y` | int | 70 | DB | grid |
| `trucks[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].pos.x` | float | 40.2 | calcul | monde |
| `trucks[].pos.y` | float | 69.8 | calcul | monde |
| `trucks[].target` | uuid_v4 | `uuid_v4` | DB | site |
| `fog.revealed_radius` | float | 500 | config | km simulé |
| `weather.global` | enum | `rain` | calcul | rendu |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon visible | 500 | km | simulé |
| Nb villes | 10 | count | départ |
| Nb labos | 2 | count | départ |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Exploration | 0 | 0..100 | fog |
| Trafic camions | 0 | 0..∞ | routes visibles |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | serveur | seed | sites init | singleton |
| Exploration | upgrade | zoom | reveal | blocage zones |
| Événements | météo | saison | overlays | observables |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Démarrage | true | est | carte disponible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | jamais |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Cartographie | Oui | zones découvertes persistent |
| Routes “usuelles” | Oui | visibles si trafic haut |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Météo globale | visuel + mod vitesse | pluie/neige |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Montagne | coût traversée + | camions |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | teinte blanche | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | lumières villes/zoos | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Migration (décor) | 0 | purement visuel |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Easter egg | bonus | découverte |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Villes produisent | stock + | marchés |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Halo zoo attractif | visuel | monde | signal |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Marché global | prix ± | offre/demande |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Embouteillage | vitesse - | event |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offres bébés | compteur + | listings |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offres animaux | compteur + | listings |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Zoom upgrade | visibilité + | agrandissement carte |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Refresh offers | TTL 24h | remplacement |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Flux ville→zoo | distance | calcul |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Péages | 1% cargaison | coins | routes |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Voyage rapide | 100 | coins | si héliport |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | attractivité | flux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Enclos | visite | path |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Boutique | besoins | achats |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Sortie | fin | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_WORLD_MAP` | UI | - | écran |
| `MAP_EVENT` | météo | region | overlay |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOG_HOVER` | hover | tooltip |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_TRUCKS_UPDATED` | tick | positions |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | flux |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_NOT_EXPLORED` | clic | denied |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_VISIBILITY_UPDATED` | upgrade | reveal |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 1000 | zoom + | rayon |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateWorldMap` | map, dt | map | move trucks |
| `canReveal` | upgrade | bool | fog |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog |
| `UPGRADE_REQUIRED` | Warning | "Amélioration requise." | zoom |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Lire le marché | choisir offres | densité | compteurs + filtres |
| Acheter | déclencher camion | drag | drag direct vers camion |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Pins sites | zoo/city/lab | hover/selected |
| Fog mask | nuages | revealed/hidden |
| Compteurs | offres | live |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Plein écran | centre | carte monde |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | transport | missions |
| `ville.md` | flux | visiteurs |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | bouton carte monde | écran |
| Retour | bouton zoo | ferme |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_WORLD_MAP` | clic | open |
| `FOG_CLICK_BLOCKED` | clic fog | tooltip |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `world_map_travel_loop.mp3` | carte monde | loop | aventure |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `fog_whoosh.mp3` | reveal | bas |
| `ui_denied.mp3` | blocked | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `world_pins_atlas.png` | pins | lisible |
| `fog_clouds.png` | fog | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `world_biomes_blur.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `clouds_shader.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| déplacement camions | tick | continu |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `world_desat` | #8A8A8A | fond |
| `world_pin_gold` | #D4AF37 | halo |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `world.fog` | Zone inexplorée | Unexplored zone |
| `world.back` | Retour zoo | Back to zoo |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Pin | goutte | site |

View File

@@ -203,3 +203,498 @@ function initZooMap():
- **Couleurs** : Vert/Rouge (Alpha 0.5).
- **Textes** : "Placer ici".
- **Formes** : Carrés.
## Définition
| Champ | Valeur |
|---|---|
| Concept | “Carte du zoo” : grille isométrique principale de gestion (construction, placement animaux/bâtiments, chemins, déplacements visiteurs). |
| Rôle | Centraliser lédition (build/paint), le rendu isométrique (tri z-index, occlusion), et la simulation locale (pathfinding, signaux terrain). |
| Portée | Une map par zoo (`owner_id`), composée de `cases[]` et dentités rendues (bâtiments, animaux, visiteurs, décorations). |
| Contrainte | Pas de cache/mémorisation : états dérivés (z_index, variants auto-tiling, heatmap) calculés à la volée ; aucune interaction silencieuse (placement invalide => erreur + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Rendre grille iso | frame render | cases visibles | draw list | tri par `z_index` + occlusion | Event `ZOO_MAP_RENDERED` |
| Sélectionner une case | clic/tap | coord | panneau contexte | contenu dépend occupancy | Event `CLICK_CASE` |
| Entrer mode build | bouton UI | type item | overlay | indique cases valides | Event `ENTER_BUILD_MODE` |
| Placer entité | drop/tap place | entity, coord | occupancy update | invariants case/biome/enclos | Event `PLACE_ENTITY` |
| Paint multi-case | drag | brush, path | batch placements | pas de “continue” silencieux : stop sur case invalide + message | Event `PAINT_APPLIED` |
| Auto-tiling terrain/chemins | placement | voisins | variant keys | recalcul local voisinage | Event `AUTOTILE_UPDATED` |
| Calculer pathfinding visiteurs | besoin/objectif | graph | route | A* à la volée, coûts par tuile | Event `VISITOR_ROUTE_COMPUTED` |
| Mettre à jour signaux terrain | tick lazy | env | flags | givre/jaunissement selon compatibilité | Event `TERRAIN_SIGNAL_UPDATED` |
| Gérer zoom | input | zoom level | camera scale | clamp + snap | Event `ZOO_MAP_ZOOM` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône carte pliée / grille losange |
| Couleur dominante | Vert (prairie), bleu (océan), gris (montagne) |
| Variantes | `icon_zoo_map.png`, `icon_grid_iso.png` |
| États | normal, build_mode, placement_invalid |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Clic case | Consultation | - | clic | panneau | - |
| Construire bâtiment | Action | item choisi | build → place | entité posée | `CELL_OCCUPIED`, `PLACEMENT_INVALID` |
| Placer animal | Action | animal prêt | drag → drop | animal enclos | `BIOME_INCOMPATIBLE` |
| Déplacer (réaménager) | Action | feature active | drag entité | relocalisation | `MOVE_BLOCKED` |
| Zoom | Navigation | - | pinch/wheel | vue ajustée | - |
## Personnages contextuels (événements & interaction)
La carte du zoo est un module transversal : plusieurs personnages peuvent servir de contexte selon lévénement.
### Personnage principal
- **Joueur actif (avatar)** : voir `avatar_joueur.md`. Visible en HUD et utilisé comme personnage contextuel des actions de construction/gestion.
### Personnages secondaires (selon événement)
- **Visiteurs homme/femme** : voir `visiteur.md` (flux, pathfinding, congestion).
- **Staff** : `nourisseur.md`, `soigneur.md`, `agent_securite.md`, `personnel_accueil.md`, `nurse.md` (déplacements et actions visibles sur la carte).
### Déclencheurs (exemples)
| Event / Action | Condition | Personnage | Effet UI |
|---|---|---|---|
| `CLICK_CASE` | clic case | avatar | panneau contexte + action principale |
| `ENTER_BUILD_MODE` | build activé | avatar | rappel des invariants (cases valides) |
| `PLACEMENT_INVALID` / `CELL_OCCUPIED` | placement refusé | avatar | message explicite + surbrillance cause |
| `VISITOR_ROUTE_COMPUTED` | recalcul route | visiteur | bulle info si congestion/obstacle |
| `DELIVERY_COMPLETE` | arrivée camion | accueil/nurse | bulle livraison + deep-link module |
### Skins & thèmes
Rendu des personnages : `theme.md` + équipements `inventaire_skins.md` (avatar + uniformes + variantes visiteurs si activées).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `width` | int | 5 | DB | init |
| `height` | int | 6 | DB | init |
| `cases[].id` | uuid_v4 | `uuid_v4` | DB | unique |
| `cases[].grid.x` | int | 2 | DB | 0..width-1 |
| `cases[].grid.y` | int | 4 | DB | 0..height-1 |
| `cases[].iso.iso_x` | int | 120 | calcul | rendu |
| `cases[].iso.iso_y` | int | 88 | calcul | rendu |
| `cases[].z_index` | int | 12088 | calcul | tri |
| `cases[].biome` | enum | `prairie` | DB | tiers |
| `cases[].terrain.ground_type` | enum | `herbe` | DB | - |
| `cases[].terrain.path_type` | enum | `gravier` | DB | auto-tiling |
| `cases[].occupancy.type` | enum | `building` | DB | un principal |
| `cases[].occupancy.entity_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide |
| `cases[].render.tile_variant` | string | `path_gravel_T` | calcul | key |
| `cases[].render.occluder` | boolean | true | config | - |
| `cases[].render.click_hitbox` | enum | `base_sprite` | config | accessibilité clic |
| `timestamps.updated_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Taille | 30 | cases | ~5x6 |
| Biomes | 3 | count | tiers |
| Zoom min/max | 0.7 / 1.6 | scale | clamp |
| Coût marche herbe | 1.2 | coef | pathfinding |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Score aménagement | 0 | 0..100 | utilisation espace |
| Propreté globale | 100 | 0..100 | satisfaction |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | compte | seed | cases init | contenu initial |
| Expansion | achat case | coord | width/height | adjacency |
| Réaménagement | action | entité | nouvelle position | pas de collision |
| Catastrophes | event | saison | flags case | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte joueur | true | est | map créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Suppression compte | true | est | map supprimée |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Extensions achetées | Oui | conservées en prestige (soft reset) |
| Variants render | Non | recalcul à la volée |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Proche océan | -2°C | micro-climat |
| Montagne | -5°C | micro-climat |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Prairie | herbe repousse | nourriture passive |
| Océan | humidité + | froid adjacent |
| Montagne | givre + | froid |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | neige/givre | décor + path cost |
| Automne | teintes orange | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | lumières | lampadaires/bâtiments |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Buissons “intimité” | +5% | autour enclos |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Animal mort sur case | fertilité sol + | case verdit après TTL |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Herbe prairie vide | repousse | tick lent |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Décoration | +1 | 3 cases | beauté |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Foule proche | stress + | densité élevée |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Case achetée | + | foncier | valeur zoo |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Accès camion | chemin connecté | case camion |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Overlay placement | valid/invalid | mode sortie |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Mode placement | overlay | READY |
#### 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 |
|---|---|---|
| Chemins | +50% vitesse | path tiles |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Entretien espaces verts | 1 | coins/case/semaine | propreté |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance routes | 1 | coins/tuile/semaine | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Saleté | temps staff | min | déchets |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soigneur déplacement | temps | min | chemins |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | visuel couplé |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Stock global | variable | coins | achats |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Quarantaine | variable | coins | incidents |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Carburant | variable | coins | distance |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Ville | sortie | despawn |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Enclos | plan visite | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Billeterie | fin visite | sortie |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `MAP_EXPAND` | achat | coord | size + |
| `AUTOTILE_UPDATED` | terrain | coord | variants |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZOO_MAP_ZOOM` | input | camera |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLACE_ENTITY` | placement | occupancy |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_ROUTE_COMPUTED` | besoin | route |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_REROUTE` | obstacle | route |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ENTER_BUILD_MODE` | UI | overlay |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | +1 case | extension |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getBiomeByColumn` | x, width | biome | tiers |
| `computeZIndex` | x,y | int | tri iso |
| `isPlacementValid` | entity, coord | bool | invariants |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `MAP_EXPAND` | Info | "Le zoo s'agrandit." | achat |
| `PLACEMENT_INVALID` | Warning | "Placement invalide." | validation |
| `CELL_OCCUPIED` | Warning | "Case occupée." | collision |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Construire | façonner zoo | erreurs placement | overlay OK/KO |
| Inspecter case | comprendre contenu | navigation | panneau contextuel |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Highlight case | outline | hover/selected |
| Bottom sheet | infos/actions | open/closed |
| Overlay build | vert/rouge | valid/invalid |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Canvas monde | plein écran | caméra |
| HUD build | barre | outils |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `case_zoo.md` | unité case | occupancy |
| `chemin.md` | auto-tiling | path |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Sélection | clic case | panneau |
| Build | bouton build | overlay |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `CLICK_CASE` | clic | panneau |
| `ENTER_BUILD_MODE` | clic | overlay |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `zoo_map_ambience_loop.mp3` | carte zoo | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `click_tile.mp3` | sélection | bas |
| `grid_snap.mp3` | placement | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `tile_highlight.png` | hover | overlay |
| `build_overlay.png` | build | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `biome_prairie_tiles.png` | sol |
| `biome_mountain_tiles.png` | sol |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `grid_holo.webm` | build | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pulsation highlight | hover | 0.4s |
| snap | placement | 0.2s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `build_ok_green` | #00FF00 | valid |
| `build_ko_red` | #FF0000 | invalid |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `zoo_map.place_here` | Placer ici | Place here |
| `zoo_map.invalid` | Placement invalide | Invalid placement |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Case | losange | iso |
| Panneau | rectangle arrondi | lisible |

View File

@@ -103,3 +103,445 @@ def fertilize_case(case, player):
- **Couleurs** : Marron foncé.
- **Textes** : `TOOL_FERTILIZE` = "Engrais", `CASE_FERTILIZED` = "Sol fertilisé"
- **Formes** : Curseur rond (outil), surbrillance tuile.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case générique : unité élémentaire \((x,y)\) dune carte, portant biome, température, contenu, états de sol et paramètres de rendu isométrique. |
| Rôle | Supporter toutes les interactions bas niveau (occupation, états terrain, outils) et fournir un contrat unique pour les spécialisations (zoo/monde). |
| Portée | Toute grille (zoo/world) ; les entités référencent des cases via coordonnées ou `grid_id`. |
| Contrainte | Invariants stricts (content_type vs ref) ; pas de fallback silencieux ; dérivés (z_index, tile_variant) calculés à la volée. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Résoudre `grid_id` | création | x,y | string | format `${x}:${y}` | Event `GRID_ID_BUILT` |
| Mettre à jour contenu | placement | content_type/ref | case | cohérence obligatoire | Event `CASE_CONTENT_UPDATED` |
| Appliquer outil (fertilize) | action | player, cost | fertility=100 | fonds requis, sinon erreur | Event `FERTILIZE_SOIL` |
| Mettre à jour flags | tick | env + actions | state_flags | clamp + cohérence | Event `CASE_FLAGS_UPDATED` |
| Calculer température locale | tick | biome + offset + saison | float | additif | Event `CASE_TEMP_COMPUTED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Tuile + symbole biome |
| Couleur dominante | selon biome |
| Variantes | `icon_tile_generic.png`, `icon_tile_fertilized.png` |
| États | `dirty`, `fertilized`, `snowy`, `muddy` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Fertiliser | Action | fonds ≥ 50 | outil → clic case | fertilité 100 | `NO_MONEY` |
| Lire état case | Consultation | - | survol | tooltip flags | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `x` | int | 10 | DB | coord |
| `y` | int | 12 | DB | coord |
| `grid_id` | string | `10:12` | calcul | stable |
| `owner_id` | uuid_v4 \| null | `uuid_v4` | DB | null pour monde |
| `biome_type` | enum | `prairie` | DB | - |
| `temperature_offset` | float | -2.0 | DB | additif |
| `content_type` | enum | `empty` | DB | voir enum |
| `content_ref` | uuid_v4 \| null | - | DB | null si empty |
| `fertility_level` | float | 100 | DB | 0..100 |
| `cleanliness_level` | float | 80 | DB | 0..100 |
| `state_flags[]` | enum[] | `dirty` | DB | sans doublons |
| `render.tile_variant` | string | `prairie_A` | calcul | auto-tiling |
| `render.hitbox` | enum | `tile` | config | access |
| `iso_x` | int | 120 | calcul | iso |
| `iso_y` | int | 88 | calcul | iso |
| `z_index` | int | 12088 | calcul | tri |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Fertilité | 0 | pts | init |
| Propreté | 100 | pts | init |
| Temp offset | 0.0 | °C | init |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Occupation | 0 | 0..100 | densité |
| Dégradation | 0 | 0..100 | sol |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | gen map | biome | case | unicité |
| Mutation | actions | outils | flags | cohérence |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération | true | est | case créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Suppression compte | true | est | supprimée |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Coordonnées | Oui | stables |
| Flags | Oui | persistants DB |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Saison | temp \(\pm\) | global |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| jungle | humidité | visuel |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | `snowy` | flag |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| nuit | luminosité - | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| fertilized | + | plantes |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| flooded | danger | event |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| herbe | nourriture | prairie |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| propre | + | local | ambiance |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| sale | stress + | proximité |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| tile premium | + | flag |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| movement_cost | vitesse - | >1 |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | base |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | base |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | base |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | base |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| walkable | route | bool |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| fertilize | 50 | coins | outil |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| nettoyage | 5 | coins | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| saleté | temps | min | déchets |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| intervention | temps | min | staff |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| ville | zoo | attractivité | flux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| entrée | enclos | visite | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| enclos | boutique | faim | achats |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| zoo | sortie | fin | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `CASE_FERTILIZED` | outil | grid_id | flag + |
| `CASE_CONTENT_UPDATED` | placement | content | cohérence |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_TEMP_COMPUTED` | tick | temp |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_FLAGS_UPDATED` | tick | flags |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `GRID_ID_BUILT` | init | id |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_HOVERED` | UI | tooltip |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_FERTILIZES` | clic | sol |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Outil engrais | 50 | fertilité 100 | action |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `fertilize_case` | case, player | result | fonds |
| `getLocalTemp` | case, season | float | additif |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CASE_FERTILIZED` | Info | "Sol fertilisé." | succès |
| `NO_MONEY` | Warn | "Fonds insuffisants." | coût |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Utiliser outil | améliorer case | menus | outil direct |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Curseur outil | sac engrais | actif |
| Feedback case | particules | succès |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Menu outils | HUD | accès |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `case_zoo.md` | spécialisation | zoo |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Fertiliser | outil → clic | succès |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `FERTILIZE_SOIL` | clic | action |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ambience_garden_soft.mp3` | outil | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `scatter.mp3` | engrais | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `fertilize_particles.png` | FX | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `soil_rich.png` | tuile |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `fertilize_fx.webm` | feedback | 0.8s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| poussière | action | 0.6s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `soil_brown` | #4E342E | sol |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `tool.fertilize` | Engrais | Fertilize |
| `case.fertilized` | Sol fertilisé | Soil fertilized |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Curseur | rond | outil |

View File

@@ -126,3 +126,428 @@ function getTravelCost(case):
- **Couleurs** : Blanc (Alpha).
- **Textes** : Coordonnées X,Y.
- **Formes** : Carré/Hexagone.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case “monde” : tuile de la grille globale supportant sites fixes (zoo/ville/labo) et widgets fonctionnels (compteurs, upgrade carte). |
| Rôle | Assurer une base de navigation camion (node du graphe), afficher des informations au survol, et porter des modificateurs de traversée (biome). |
| Portée | Carte du monde, immuable structurellement (les cases persistent), contenu majoritairement fixe. |
| Contrainte | Routes et coûts de déplacement calculés à la volée (pas de cache/mémorisation) ; aucun péage/incidence silencieux (message + event). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Survol case monde | hover | x,y | tooltip | affiche coord + type | Event `HOVER_WORLD_CASE` |
| Résoudre contenu | rendu | case | marker | type site/compteur | Event `WORLD_CASE_RENDERED` |
| Calculer coût traversée | path camion | biome | cost | multiplicateur biome | Event `WORLD_TRAVEL_COST_COMPUTED` |
| Marquer route visible | trafic | count | route flag | si trafic > seuil | Event `WORLD_ROUTE_MARKED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Tuile + pin |
| Couleur dominante | selon biome |
| Variantes | `icon_world_tile.png`, `icon_world_pin.png` |
| États | normal, highlighted, route |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Hover | Consultation | - | survol | tooltip | - |
| Clic site | Navigation | case contient site | clic | ouvre panneau | `ZONE_NOT_EXPLORED` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `content.site_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide |
| `content.site_type` | enum \| null | `city` | DB | `zoo/city/lab` |
| `content.counter_type` | enum \| null | `animals_for_sale` | DB | compteur |
| `traffic.trucks_passed` | int | 0 | DB | cumul |
| `travel_cost_multiplier` | float | 1.0 | config | >=1.0 |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Trafic | 0 | count | init |
| Péage | 0 | % | par défaut |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Valeur de passage | 0 | 0..100 | influence routes |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Génération | monde | seed | cases | immuables |
| Marquage routes | trafic | count | flag | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération monde | true | est | case existe |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | jamais |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Routes visibles | Oui | persist reset |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Orage | vitesse camion - | météo |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| montagne | cost + | traversée |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | neige | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| nuit | luminosité - | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| faune décor | 0 | visuel |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| cycle naturel | 0 | décor |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| baies | décor | région |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| proche ville | valeur passage + | monde | trafic |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| lore terrain | + | descriptif |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| frottement | vitesse - | sable |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| route pavée | +10% | upgrade |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| flux migratoire | visuel | overlay |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| péage | 1 | % | zones |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| usure | 1 | coins | lore |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| ville | zoo | attractivité | flux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| zoo | animaux | visite | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| zoo | boutiques | besoins | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| zoo | sortie | fin | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `ZONE_DISCOVERED` | reveal | coord | visible |
| `WORLD_ROUTE_MARKED` | trafic | count | route |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `HOVER_WORLD_CASE` | hover | tooltip |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_CASE_RENDERED` | render | marker |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_TRAVEL_COST_COMPUTED` | route | cost |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_NOT_EXPLORED` | click | denied |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_CLICKS_SITE` | click | open |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 1000 | route pavée +10% | speed |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getTravelCost` | case | float | multiplicateur |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZONE_DISCOVERED` | Info | "Nouvelle zone découverte." | reveal |
| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Explorer | trouver sites | info | tooltip sur hover |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Highlight | outline | hover |
| Tooltip | coord/type | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | cases | iso |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_monde.md` | usage | world |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Hover | souris | tooltip |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `HOVER_WORLD_CASE` | hover | tooltip |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `world_exploration_loop.mp3` | monde | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `hover_soft.mp3` | hover | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `world_tile_highlight.png` | outline | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `biome_texture.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `shine_hover.webm` | hover | 0.6s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| glow | hover | léger |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `hover_white` | #FFFFFF | outline |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `world.coords` | Coordonnées X,Y | Coordinates X,Y |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tuile | losange | iso |

View File

@@ -165,3 +165,454 @@ function checkAnimalDisappearance(case):
- **Couleurs** : Blanc.
- **Textes** : "Case [X,Y]".
- **Formes** : Carré.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case “zoo” : spécialisation de `case_generique` avec contraintes doccupation, métriques de visite, et signaux qualité/propreté. |
| Rôle | Supporter le gameplay de placement (animal/bâtiment), le pathfinding (walkable/cost), et la logique “animal observé” (last_visit_time). |
| Portée | Une tuile de la carte du zoo, identifiée par coordonnées, rendue en isométrie. |
| Contrainte | Mesures dérivées (heatmap, quality_score) calculées à la volée ; pas de fallback : si `content_type` incohérent => log + erreur. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Sélectionner case | clic | x,y | menu contexte | actions selon contenu | Event `SELECT_ZOO_CASE` |
| Résoudre walkable | update terrain | content_type | `pathing.walkable` | bâtiment/animal => false (sauf exceptions) | Event `PATHING_UPDATED` |
| Mettre à jour last_visit_time | visiteur observe | visitor_id | timestamp | observe != traverse | Event `CASE_VISITED` |
| Accumuler heatmap | passage | dt | heatmap_score | 0..100 | Event `HEATMAP_UPDATED` |
| Dégrader propreté | déchets | visitor behavior | cleanliness ↓ | clamp 0..100 | Event `CASE_DIRTY` |
| Mettre à jour qualité | compat animal/terrain | biome/temp | quality_score | signaux visuels | Event `CASE_QUALITY_UPDATED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Tuile losange + marqueur |
| Couleur dominante | dépend biome/terrain |
| Variantes | `icon_tile.png`, `icon_tile_dirty.png` |
| États | `dirty`, `fertilized`, `frozen`, `muddy` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Construire ici | Action | case vide | menu → item → place | occupancy building | `CELL_OCCUPIED` |
| Placer animal | Action | enclos compatible | drag/drop | occupancy animal | `BIOME_INCOMPATIBLE` |
| Nettoyer | Action | sale | outil nettoyage | cleanliness ↑ | `NO_STAFF` |
## Personnage contextuel (événements & interaction)
La case est actionnée via la sélection sur la carte du zoo. Le personnage contextuel attendu est le **joueur actif** (avatar) : voir `avatar_joueur.md`.
### Déclencheurs (exemples)
| Event / Message | Condition | Effet UI personnage |
|---|---|---|
| `SELECT_ZOO_CASE` | clic case | avatar présent dans le panneau contexte |
| `CELL_OCCUPIED` / `BIOME_INCOMPATIBLE` | action refusée | avatar affiche la cause et laction suivante possible |
| `CASE_DIRTY` | case sale | avatar propose CTA “Nettoyer” (si action permise) |
### Skins & thèmes
Le rendu du portrait/overlay suit `theme.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `last_visit_time` | timestamp \| null | - | DB | UTC |
| `visit_count_total` | int | 120 | DB | cumul |
| `visit_count_day` | int | 12 | DB | reset day |
| `heatmap_score` | float | 35.5 | calcul | 0..100 |
| `quality_score` | float | 92.0 | calcul | 0..100 |
| `pathing.walkable` | boolean | true | calcul | dépend contenu |
| `pathing.movement_cost` | float | 1.2 | config | >=1.0 |
| `zoo_specific_flags[]` | enum[] | `near_entry` | DB | - |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Propreté | 100 | pts | init |
| Fertilité | 0 | pts | init |
| Coût marche herbe | 1.2 | coef | default |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Passages | 0 | 0..∞ | heatmap |
| Qualité | 100 | 0..100 | rendu |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | génération map | biome | case | existe toujours |
| Occupation | placement | entity | occupancy | un principal |
| Nettoyage | action | outil | propreté ↑ | clamp |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération zoo | true | est | case créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | case persiste |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Sol fertilisé | Oui | garde bonus soft reset |
| Heatmap | Non | recalcul |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet case | Notes |
|---|---|---|
| < 0°C | flag `frozen` | givre |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| prairie | herbe repousse | nourriture |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | `snowy` | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| nuit | ombres tournent | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| buissons | +5% | proximité enclos |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| odeur | stress + | 24h in-game |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| pâturage | herbe→terre | animal broute |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| point de vue | + | 4 cases | hauteur |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| foule | stress + | densité |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| near_entry | + | premium spot |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| revêtement | vitesse ± | chemin/pavés |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| placement mode | overlay | sortie bébé |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| placement mode | overlay | sortie animal |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| cost | route | A* |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| nettoyage | 5 | coins | si sale |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| maintenance sol | 1 | coin/case | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| déchets | temps | min | propreté |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| passage staff | temps | min | path |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| section dupliquée | 1 | coin | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| hygiène | 1 | coin | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| pâturage | 0 | - | herbe |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| quarantaine | 1 | coin | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| usure | 1 | coin | lore |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| entrée | allées | ticket | spawn |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| allée | enclos | curiosité | observe |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| enclos | boutique | faim | achat |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| allées | sortie | budget 0 | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `CASE_DIRTY` | déchet | coord | flag |
| `PATH_BLOCKED` | obstacle | coord | reroute |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PATHING_UPDATED` | terrain | coûts |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_QUALITY_UPDATED` | compat | rendu |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_VISITED` | observe | last_visit_time |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_REROUTE` | blocage | route |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_CLEANS_TILE` | outil | propreté + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Pavés | 250 | cost marche 1.0 | route |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `checkAnimalDisappearance` | case, now | bool | visite |
| `computeMovementCost` | terrain | float | >=1.0 |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CASE_DIRTY` | Info | "Une case est sale." | déchet |
| `PATH_BLOCKED` | Warning | "Chemin bloqué." | reroute |
| `ANIMAL_NOT_VISITED` | Warning | "Animal non observé." | timeout |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Ouvrir menu case | agir vite | contexte | menu auto-adapté |
| Nettoyer | propreté | outil | raccourci dans menu |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Menu contextuel | actions | selon contenu |
| Highlight | outline | hover/selected |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Tuile | monde | iso |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_zoo.md` | sélection | panneau |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Sélection | clic | menu |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `SELECT_ZOO_CASE` | clic | open |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `select_tile_click.mp3` | sélection | 0.2s | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `select_soft.mp3` | clic | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `tile_outline.png` | highlight | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `context_menu_icon.png` | menu |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `tile_select.webm` | feedback | 0.5s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| bounce contenu | sélection | léger |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `tile_white` | #FFFFFF | outline |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `tile.coords` | Case {x},{y} | Tile {x},{y} |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tuile | losange | iso |

View File

@@ -233,6 +233,25 @@ function updateResearch(center):
| Consommer RP | Action | RP ≥ coût | Arbre/Carte monde → déverrouiller | unlock | `INSUFFICIENT_RESEARCH_POINTS` |
| Affecter chercheurs | Action | slots < 3 | Panel centre → slots | production + | `RESEARCH_CENTER_FULL` |
## Personnage contextuel (événements & interaction)
Voir `chercheur.md`.
### Affichage
Le chercheur saffiche lorsque :
- le module est **actionné** (ouverture du centre, affectation, collecte, upgrade) ;
- un **événement** de recherche survient (gain RP, percée, déverrouillage).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_RESEARCH` | ouverture panel | portrait + production/h + slots |
| `RESEARCH_TICK` / `RESEARCH_UNIT_GAINED` | tick | bulles science + feedback UI |
| `RESEARCH_BOOST` | percée | bulle “Percée” + détails |
| `INSUFFICIENT_RESEARCH_POINTS` | dépense refusée | bulle cause + CTA “Collecter / Attendre” |
### Skins & thèmes
Uniforme et accessoires suivent `theme.md` ; variantes via `inventaire_skins.md` si skins de staff.
## Annexes Techniques
### 1. Données et États (tableau détaillé)

View File

@@ -53,3 +53,475 @@ Les chemins sont des cases aménagées permettant aux visiteurs et au staff de s
## 1. Détails Spécifiques
* **Textures Connectées :** Les chemins utilisent des textures connectées (Terre, Gravier, Pavés) pour éviter les coupures nettes entre les cases.
* **Variété :** Différents types de sols disponibles (Terre, Gravier, Pavés).
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case “chemin” : tuile de circulation sur grille isométrique, auto-connectée (auto-tiling) pour former un réseau. |
| Rôle | Supporter le pathfinding visiteurs/staff, améliorer la vitesse, et garantir la connectivité entre points dintérêt. |
| Portée | Tuile placée sur `case_zoo`, utilisée par `visiteur` et employés. |
| Contrainte | Pas de cache/mémorisation des routes : chemins calculés à la volée (A*/Dijkstra) ; pas de fallback silencieux si réseau cassé (message + log). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Placer chemin | action build | coord, material | tuile chemin | interdit sur case occupée | Event `PATH_PLACED` |
| Supprimer chemin | action delete | coord | tuile vide | interdit si bloque sortie (option) | Event `PATH_REMOVED` |
| Auto-tiling | placement/suppression | voisins N/E/S/W | sprite variant | recalcul local (voisinage) | Event `PATH_AUTOTILE_UPDATED` |
| Bonus vitesse | déplacement entité | type entité | speed multiplier | appliqué uniquement sur chemin | Event `PATH_SPEED_APPLIED` |
| Connectivité | navigation | graph chemins | route | route recalculée à la volée | Event `PATH_ROUTE_COMPUTED` |
| Esthétique | rendu | material + neighbors | sprite | variations (terre/gravier/pavés) | - |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône pavés / empreintes |
| Couleur dominante | Beige/gris selon matériau |
| Variantes | `icon_path_pavers.png`, `icon_path_footprints.png` |
| États | normal, hover, invalid (rouge) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Construire chemin | Action | mode build | sélectionner chemin → cliquer cases | chemins posés | `CELL_OCCUPIED` |
| Choisir matériau | Action | build | dropdown | material appliqué | - |
| Supprimer | Action | mode delete | clic chemin | supprimé | `CANNOT_REMOVE_BLOCKING` |
| Prévisualiser auto-tiling | Consultation | build | survol | ghost variant | - |
## Personnage contextuel (événements & interaction)
Le module “Chemin” affiche prioritairement un **visiteur** (homme/femme) comme personnage contextuel (voir `visiteur.md`) afin de rendre visibles les conséquences de connectivité, de blocage et de flux.
### Affichage
Le visiteur saffiche lorsque :
- le module est **actionné** (entrée en mode build chemins, pose/suppression, sélection matériau) ;
- un **événement** lié à la connectivité survient (route recalculée, blocage daccès, saturation locale).
### Déclencheurs (exemples)
| Event / Message | Condition | Effet UI personnage |
|---|---|---|
| `ENTER_PATH_BUILD_MODE` | activation build | portrait visiteur + rappel “connectivité” |
| `CELL_OCCUPIED` | pose invalide | bulle : cause (case occupée) |
| `CANNOT_REMOVE_BLOCKING` | suppression bloquante | bulle : cause (accès bloqué) + CTA annuler |
| `PATH_ROUTE_COMPUTED` | route recalculée | bulle : “Itinéraire mis à jour” (info) |
### Interactions utilisateur
- Clic sur le personnage : ouvre le panneau “connectivité”/aide du mode chemin (si présent) ou met en surbrillance les zones impactées (entrée, POI).
### Skins & thèmes
Le visiteur suit `theme.md`. Les variantes homme/femme sont des skins/variantes de visiteurs (voir `visiteur.md` + `inventaire_skins.md` si les visiteurs sont skinnables).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `type` | string | `path` | DB | constant |
| `material` | string | `gravel` | DB/config | enum |
| `grid.x` | int | 10 | DB | coord |
| `grid.y` | int | 12 | DB | coord |
| `connected_neighbors` | string[] | `["N","S","E"]` | calcul | à la volée |
| `iso_x` | int | 120 | calcul/DB | rendu |
| `iso_y` | int | 88 | calcul/DB | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Bonus vitesse visiteurs | 1.15 | coef | sur chemin |
| Bonus vitesse staff | 1.25 | coef | sur chemin |
| Coût pose | 1 | coins | par tuile (exemple) |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Connectivité | 0 | 0..100 | accessibilité |
| Chemins posés | 0 | 0..∞ | progression build |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | build | coord | path | autotile local |
| Mise à jour | voisin change | voisins | sprite | cohérence |
| Disparition | delete | coord | vide | graph maj |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat/placement | true | est | chemin créé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Suppression | true | est | chemin retiré |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Matériau | Oui | persiste sur tuile |
| Connectivité | Non | recalcul à la volée |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet chemin | Notes |
|---|---|---|
| Neige | visuel + glissant léger | option saisonnière |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet chemin | Notes |
|---|---|---|
| Boue | vitesse - si pas pavés | material “terre” |
#### Impact Saisons (tableau détaillé)
| Saison | Effet chemin | Notes |
|---|---|---|
| Hiver | variante sprite | neige |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet chemin | Notes |
|---|---|---|
| Nuit | éclairage lampadaires | via objets |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Embouteillage | risque incidents | trop dense |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Accès boutiques | consommation ↑ | chemin connecte |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Chemins propres | + | zoo | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Passage trop proche | stress + | enclos sans barrière |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Pavés premium | + | cosmétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Itinéraire camion | préfère chemins | si autorisé |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Accès nurserie | temps staff - | chemin connecté |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| File visiteurs | plus fluide | chemin large |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Staff | déplacement + | chemin |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Visiteurs | vitesse + | chemin |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance | 1 | coins / tuile / jour | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Temps déplacement | - | min | chemins |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | ouverture | route |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allée | Enclos | curiosité | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | route |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billetterie | Allées | entrée | flux |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `PATH_PLACED` | build | coord, material | tuile |
| `PATH_REMOVED` | delete | coord | tuile |
| `PATH_AUTOTILE_UPDATED` | voisin | coord | sprite |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PATH_ROUTE_COMPUTED` | visite | route | navigation |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_MOVES` | tick | speed bonus |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_BUILDS_PATH` | build | réseau |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Terre | 0 | base | - |
| Gravier | 100 | vitesse + | matériau |
| Pavés | 250 | vitesse ++ | matériau |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeNeighborsMask` | grid, coord | mask | N/E/S/W |
| `selectAutotileVariant` | material, mask | sprite_id | atlas |
| `computeSpeedMultiplier` | entity, tile | float | sur chemin |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CELL_OCCUPIED` | Warning | "Case occupée." | placement |
| `CANNOT_REMOVE_BLOCKING` | Warning | "Suppression impossible : bloque un accès." | option |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Tracer une allée | connecter zones | répétition | drag paint “pinceau” |
| Changer matériau | esthétique | navigation | quick switch |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Palette matériaux | terre/gravier/pavés | actif |
| Curseur pinceau | taille 1..3 | preview |
| Ghost tile | variant | valid/invalid |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Mode build | barre | accès direct |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | pathfinding | routes |
| `zoo.md` | grille | coords |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Construire | build → chemin | pinceau |
| Supprimer | build → delete | gomme |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `ENTER_PATH_BUILD_MODE` | clic | palette |
| `PAINT_PATH` | drag | pose |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `build_mode_loop.mp3` | build | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `path_place.mp3` | pose | bas |
| `path_remove.mp3` | retrait | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `path_autotile_atlas.png` | sprites | atlas |
| `path_preview_overlay.png` | ghost | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `path_material_icon_set.png` | palette |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `path_paint.webm` | tuto | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| sparkle pavés | hover | subtil |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `path_beige` | #D7C7A4 | terre |
| `path_gray` | #9E9E9E | pavés |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `path.title` | Chemin | Path |
| `path.material` | Matériau | Material |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Palette | rectangles | clairs |

View File

@@ -50,6 +50,9 @@ Employé travaillant dans le Centre de Recherche pour générer des points de sc
* **Interface Bâtiment :** Slots d'employés (0/3) dans le menu du Centre de Recherche.
* **Feedback :** Bulles de science (fioles, atomes) s'élevant du bâtiment quand ils travaillent.
## Affichage contextuel (modules)
Le chercheur est le personnage contextuel du `centre_recherche.md` lors de louverture du panneau, de lassignation et des événements de production/déverrouillage.
# Annexes UX/UI

57
docs/specs/guichetiere.md Normal file
View File

@@ -0,0 +1,57 @@
# Guichetière (Billetterie)
## 1. Définition
Personnage de service associé à la billetterie. Il matérialise la vente de tickets (file, contrôle capacité) et sert de personnage contextuel lors des événements dentrée/saturation/VIP.
## 2. Fonctions
* **Traitement file** : Représente le débit du guichet (entrées par tick).
* **Gestion saturation** : Signale `ZOO_FULL`, `QUEUE_LONG`.
* **Accueil visiteurs** : Déclenche des feedbacks visuels cohérents avec le thème.
## 3. Icone
* **Représentation :** Ticket + tampon.
* **Couleur dominante :** Rouge (ticket) + or (pièces).
## 4. Interactions
* **Clic billetterie** : ouvre le panneau stats (prix, capacité, file).
* **Clic sur alerte** : deep-link vers la billetterie et met en avant la cause (capacité, file).
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "ticket_clerk_01",
"type": "guichetiere",
"name": "Nina",
"salary": 0,
"hire_cost": 0,
"assigned_building": "ticket_booth_uuid",
"state": "enum (IDLE, SELLING, VIP_PROCESS, OVERLOADED)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Le personnage est lié à la `billeterie.md` (bâtiment fixe).
* Les événements `ZOO_FULL` et `QUEUE_LONG` déclenchent une UI explicite (pas de fallback).
# 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.
## Affichage contextuel (modules)
- **Billetterie** (`billeterie.md`) : clic panneau, saturation, file longue, arrivée bus VIP.
- **Chemins** (`chemin.md`) : si la suppression de chemins casse laccès entrée (erreur `CANNOT_REMOVE_BLOCKING`), la guichetière peut être le personnage contextuel du problème “entrée inaccessible”.
## Skins & thèmes
* Uniforme/guichet dépend du thème (`theme.md`).
* Accessoires (casquette, badge, ticket) via `skin.md` / `inventaire_skins.md` si activé.

View File

@@ -120,3 +120,483 @@ function getBabyBonus(baby):
- **Couleurs** : Identiques Adulte.
- **Textes** : "Bébé".
- **Formes** : Rond.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Inventaire/registre des variantes “bébé” par espèce (mapping adulte → bébé), et vue de gestion des bébés possédés (nurserie + zoo). |
| Rôle | Permettre lidentification visuelle, laccès rapide aux fiches bébés, et laffichage des signaux de risque (froid, faim, biome) sans masquer létat. |
| Portée | Catalogue (par type danimal) + instances (bébés présents) dans un zoo. |
| Contrainte | Aucun compteur de vues/revenus par bébé (pas danalytics) ; calculs et filtres à la volée, sans cache/mémorisation. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Résoudre variante bébé | rendu / fiche | `species_id` | `baby_sprite_set_id` | 1 adulte → 1 bébé, stable | Log si sprite manquant |
| Lister bébés possédés | ouverture inventaire | `zoo_id` | liste | tri stable (danger > croissance > rareté) | Event `OPEN_BABY_INVENTORY` |
| Filtrer “en danger” | toggle UI | états (temp, faim, santé) | sous-liste | critères explicites (seuils) | Event `FILTER_BABY_DANGER` |
| Afficher potentiel génétique | fiche bébé | genetics | étoiles grises | informatif, non “best-effort” | Event `BABY_GENETIC_VIEWED` |
| Deep-link vers bébé | notif/slot | `animal_id` | navigation | ouvre nurserie/zoom case | Event `NAVIGATE_TO_BABY` |
| Calculer bonus mignonnerie | tick logique | nb bébés distincts | mod boutique | bonus borné, condition “simultané” | Event `CUTE_BONUS_APPLIED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône tétine/biberon + badge “B” |
| Couleur dominante | Pastel (selon thème) |
| Variantes | `icon_baby.png`, `icon_bottle.png`, `icon_pacifier.png` |
| États | `danger_cold` (flocon), `danger_hunger` (biberon), `sleeping` (zzz) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir inventaire bébés | Consultation | - | menu inventaire → bébés | liste affichée | - |
| Ouvrir fiche bébé | Consultation | bébé listé | clic ligne | panneau détail | `BABY_NOT_FOUND` |
| Filtrer “en danger” | Consultation | - | toggle | liste filtrée | - |
| Aller au bébé | Navigation | position/slot connu | bouton “Voir” | zoom + focus | `LOCATION_UNAVAILABLE` |
| Comparer adulte/bébé | Consultation | espèce connue | onglet | mapping visible | - |
## Personnage contextuel (événements & interaction)
Voir `nurse.md`.
### Affichage
La nurse saffiche lorsque :
- le module est **actionné** (ouverture inventaire, filtre danger, navigation “Voir bébé”) ;
- un **événement** de bébé survient (naissance, danger, passage adulte).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_BABY_INVENTORY` | ouverture | portrait nurse + rappel des priorités “danger” |
| `FILTER_BABY_DANGER` | toggle | bulle “Liste filtrée” + critères |
| `BABY_BORN` | naissance | bulle “Nouveau bébé” + CTA “Voir” |
| `BABY_DANGER` / `BABY_CRITICAL` | danger | bulle “Urgence” + CTA deep-link |
| `BABY_BECAME_ADULT` | transition | bulle “Devenu adulte” + CTA “Voir adulte” |
### Skins & thèmes
Palette et accessoires suivent `theme.md` ; la nurse peut être skinnable via `inventaire_skins.md` (si des skins de staff existent).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `catalog.species_id` | string | `PANDA` | DB | enum |
| `catalog.baby_sprite_set_id` | string | `PANDA_BABY_SET` | assets | requis |
| `catalog.scale_factor` | float | 0.5 | config | 0.3..0.7 |
| `catalog.name_key` | string | `baby.PANDA` | i18n | FR/EN |
| `catalog.badges` | string[] | `["B"]` | config | - |
| `instance.animal_id` | uuid_v4 | `uuid_v4` | DB | - |
| `instance.nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | - |
| `instance.iso_x` | int \| null | 120 | DB | null si nurserie |
| `instance.iso_y` | int \| null | 88 | DB | null si nurserie |
| `instance.growth_progress` | float | 42.0 | DB | 0..100 |
| `instance.danger_flags` | string[] | `["COLD","HUNGER"]` | calcul | à la volée |
| `timestamps.updated_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Compteur bébés | 0 | count | par zoo |
| Score maternité | 0 | points | indicateur interne |
| Bonus mignonnerie | 0 | % | dépend diversité |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Diversité bébés | 0 | 0..∞ | bonus boutique “peluches” |
| Taux bébés en danger | 0% | 0..100% | gestion, pas danalytics |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | naissance/achat œuf | espèce | bébé | mapping stable |
| Suivi | ouverture inventaire | zoo_id | liste | tri stable |
| Disparition | croissance/mort | animal | retiré de la vue bébés | historique conservé |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Naissance | true | est | bébé apparaît |
| Achat œuf | true | est | futur bébé (à éclosion) |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Croissance | 100 | >= | bascule “adulte” |
| Mort | 0 santé | <= | retiré |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Lien parents | Oui | fiche bébé → parents |
| Potentiel | Oui | affichage étoiles grises |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet inventaire | Notes |
|---|---|---|
| Froid/chaud | flag + icône flocon/soleil | clignote si critique |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet inventaire | Notes |
|---|---|---|
| Incompatible | filtre “en danger” | signal fort |
#### Impact Saisons (tableau détaillé)
| Saison | Effet inventaire | Notes |
|---|---|---|
| Printemps | mise en avant naissances | tri optionnel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet inventaire | Notes |
|---|---|---|
| Nuit | état “Dort” | zzz |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bébé | 0 | non reproductible |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Historique | tag “mort en bas âge” | informatif |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Faim | icône biberon | seuil faim |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Diversité bébés ≥ 10 | + | - | bonus boutique peluches |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Potentiel | affichage estimé | basé génétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Croissance | barre temps réel | refresh à la volée |
#### 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 |
|---|---|---|
| Vedette | indicateur | bébé le plus consulté en jeu, sans analytics |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Peluches | +5% ventes | % | diversité bébés ≥ 10 |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soins | estimation | coins | selon bébés malades |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Interventions | + | min | bébés en danger |
#### 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 |
|---|---:|---|---|
| Slots | variable | coins | niveau |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Rations bébé | + | coins | métabolisme |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Bébé vedette | signal “mignonnerie” | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Bébé vedette | Boutique peluches | bonus actif | achat |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_BABY_INVENTORY` | menu | - | UI |
| `FILTER_BABY_DANGER` | toggle | flags | UI |
| `NAVIGATE_TO_BABY` | clic | `animal_id` | zoom |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `BABY_MARKER_SHOW` | map open | marker |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CLICK_BABY` | clic | panneau |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_OPENS_BABY_INVENTORY` | menu | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Nurserie 1 | 0 | slots base | gestion |
| Nurserie 3 | 400 | vitrine | nouveaux signaux |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getBabyBonus` | baby | float | attractivité |
| `computeDangerFlags` | baby, env | string[] | à la volée |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `BABY_BORN` | Info | "Un nouveau bébé est né." | naissance |
| `BABY_DANGER` | Warning | "Un bébé est en danger." | flags |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Trouver bébés | suivi | dispersion | filtre danger + tri |
| Ouvrir fiche | actions | navigation | clic ligne + bouton voir |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Liste bébés | lignes + icônes | normal/danger |
| Badges danger | flocon/biberon/zzz | clignotant critique |
| Panneau détail | génétique + croissance | actions |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Inventaire | menu | registre |
| Nurserie | slots | deep-link |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `bebe_animal.md` | états bébé | flags |
| `nurserie.md` | slots | navigation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | menu → bébés | liste |
| Filtrer danger | toggle | tri |
| Voir bébé | bouton | zoom |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_BABY_INVENTORY` | menu | UI |
| `CLICK_BABY_ROW` | clic | panneau |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `baby_inventory_loop.mp3` | inventaire | loop | doux |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_toggle.mp3` | filtre | bas |
| `baby_chirp_01.mp3` | survol | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `baby_badge_b.png` | badge | lisible |
| `baby_flag_cold.png` | flocon | contraste |
| `baby_flag_hunger.png` | biberon | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `baby_list_bg.png` | fond liste |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `baby_steps.webm` | décoratif | 1.5s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| clignotement danger | critique | 0.6s |
| bounce badge | apparition | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `baby_pastel` | #A7D8FF | UI |
| `baby_danger` | #D32F2F | alerte |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `baby.inventory.title` | Bébés | Babies |
| `baby.inventory.danger` | En danger | In danger |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Ligne | rectangle arrondi | lisible |
| Badge | rond | constant |

View File

@@ -95,6 +95,18 @@ function checkVisitorNeeds(visitor):
| :--- | :--- | :--- |
| `INCIDENT_ALERT` | Warning | "Un visiteur se plaint !" |
## Personnages contextuels (événements & interaction)
- **Visiteur** : voir `visiteur.md` (source de lincident, bulle, besoins).
- **Agent de sécurité** : voir `agent_securite.md` (incidents dordre/vandalisme si présents dans la liste dincidents).
- **Soigneur** : voir `soigneur.md` (si incident “blessure/urgence” est introduit).
- **Nourisseur** : voir `nourisseur.md` (incidents faim/soif indirects via stocks et boutiques).
### Déclencheurs (exemples)
| Event | Condition | Personnage | Effet UI |
|---|---|---|---|
| `INCIDENT_ALERT` | incident créé | visiteur | bulle + CTA résolution |
| incident non résolu | TTL dépassé | sécurité/soigneur | bulle “Intervention requise” + deep-link |
# Annexes UX/UI
## 0. Direction Artistique & Vue

View File

@@ -59,3 +59,473 @@ Interface de gestion permettant au joueur de visualiser, trier et équiper les
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Inventaire “Skins” : vue de possession + équipement de cosmétiques (avatar et zoo). |
| Rôle | Donner un accès rapide à léquipement, au filtrage, et à la prévisualisation sans étapes inutiles. |
| Portée | UI profil/boutique ; impact avatar, bâtiments, décorations. |
| Contrainte | Pas de cache/mémorisation : état “équipé” lu comme source de vérité ; pas danalytics ; aucune suppression/vente implicite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir inventaire | menu | `player_id` | page/grille | affiche items possédés + grisés | Event `OPEN_SKIN_INVENTORY` |
| Filtrer | UI | catégorie/thème/rareté | liste filtrée | filtres combinables | Event `FILTER_SKINS` |
| Trier | UI | critère | liste triée | stable | Event `SORT_SKINS` |
| Prévisualiser | clic item | `item_id` | preview | paper doll / rendu zoo | Event `PREVIEW_SKIN` |
| Équiper | clic “Équiper” | `item_id`, slot | `is_equipped=true` | un item équipé par slot | Event `EQUIP_SKIN` |
| Déséquiper | clic “Retirer” | slot | `is_equipped=false` | revient au skin de base explicite | Event `UNEQUIP_SKIN` |
| Synchroniser après achat | achat | receipt | inventaire maj | immédiat, sans cache | Event `SKIN_ACQUIRED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Cintre / coffre |
| Couleur dominante | Marron + or |
| Variantes | `icon_skin_hanger.png`, `icon_skin_chest.png` |
| États | normal, selected, disabled (non possédé) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir | Navigation | - | profil → skins | grille | - |
| Équiper item | Action | possédé | clic item → équiper | appliqué | `SKIN_NOT_OWNED` |
| Prévisualiser | Consultation | - | clic item | preview | - |
| Filtrer | Consultation | - | toggles | liste | - |
| Drag & drop | Action | option active | drag → drop | équipe | `DROP_INVALID` |
## Personnage contextuel (événements & interaction)
Le module “Inventaire Skins” affiche le **joueur actif** via son avatar (voir `avatar_joueur.md`) comme personnage contextuel.
### Affichage
Lavatar saffiche lorsque :
- le module est **actionné** (ouverture inventaire, sélection dun item, équipement/déséquipement) ;
- un **événement** lié aux skins survient (acquisition, équipement réussi/échoué).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_SKIN_INVENTORY` | ouverture | avatar/paper doll visible, cohérent avec léquipement courant |
| `PREVIEW_SKIN` | clic item | lavatar adopte la prévisualisation (paper doll) |
| `EQUIP_SKIN` / `UNEQUIP_SKIN` | action | feedback visuel sur lavatar + message |
| `SKIN_ACQUIRED` | achat/gain | bulle “Nouveau skin” + CTA “Équiper” |
### Skins & thèmes
Le module applique `theme.md` et léquipement de `inventaire_skins.md` sur lavatar, sans inférer silencieusement un skin “par défaut”.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `inventory_id` | string | `inv_skins_<player_id>` | DB | stable |
| `items[].item_id` | string | `skin_hat_01` | DB | id unique |
| `items[].acquired_at` | timestamp | - | DB | UTC |
| `items[].is_equipped` | boolean | true | DB | par slot |
| `items[].slot` | string | `HAT` | DB | enum |
| `items[].theme` | string | `JUNGLE` | config | enum |
| `items[].rarity` | string | `RARE` | config | enum |
| `capacity` | string \| int | `unlimited` | config | pas de limite par défaut |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Capacité | illimitée | - | règle existante |
| Slots avatar | 6 | count | ex: hat, top, bottom, shoes, accessory, back |
| Slots zoo | 8 | count | ex: sol, clôture, portes, UI, etc. |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Skins possédés | 0 | 0..∞ | collection |
| Skins équipés | 0 | 0..slots | rendu |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Acquisition | achat/gain | item_id | inventaire +1 | pas de doublon |
| Équipement | action | slot | is_equipped | exclusivité slot |
| Déséquipement | action | slot | base | base explicite |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat skin | true | est | item ajouté |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | pas de suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Inventaire | Oui | persiste compte |
| Équipement | Oui | persiste par profil |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| - | aucun | cosmétique |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| - | aucun | - |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Saison active | skins saisonniers visibles | gating |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| - | aucun | - |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Skins zoo | + | zoo | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Collection | + | complétude |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### 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 |
|---|---|---|
| - | - | - |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### 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 |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_SKIN_INVENTORY` | menu | - | UI |
| `EQUIP_SKIN` | clic | item_id, slot | équipé |
| `UNEQUIP_SKIN` | clic | slot | base |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FILTER_SKINS` | toggle | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | inventaire dispo | - |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `equipSkin` | item, slot | state | exclusif slot |
| `filterSkins` | list, filters | list | combinable |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SKIN_NOT_OWNED` | Warning | "Skin non possédé." | équiper |
| `SKIN_EQUIPPED` | Info | "Skin équipé." | succès |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Équiper avatar | personnaliser | navigation | paper doll + bouton direct |
| Équiper zoo | thème | sélection | filtres |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Grille | items | owned/missing |
| Paper doll | preview | slot highlight |
| Bouton équiper | CTA | enabled/disabled |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Profil | onglet skins | - |
| Boutique | lien | - |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `skin.md` | definition item | ids cohérents |
| `avatar_joueur.md` | rendu avatar | slots |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | profil → skins | grille |
| Équiper | item → CTA | appliqué |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SKIN_INVENTORY` | menu | UI |
| `CLICK_EQUIP` | CTA | équipe |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `skins_inventory_loop.mp3` | inventaire | loop | neutre |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_equip.mp3` | équiper | bas |
| `ui_unequip.mp3` | retirer | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `paper_doll_frame.png` | preview | scalable |
| `skin_item_tile.png` | tuile | grille |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `skin_missing_overlay.png` | grisé |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `equip_fx.webm` | feedback | 0.6s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| glow item | hover | 0.2s |
| bounce CTA | success | 0.3s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `skins_gold` | #D4AF37 | rareté |
| `skins_brown` | #6D4C41 | fond |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `skins.title` | Skins | Skins |
| `skins.equip` | Équiper | Equip |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tuiles | rectangles arrondis | lisibles |

View File

@@ -3,6 +3,17 @@
## Définition
L'utilisateur humain.
## Variantes de représentation
### Joueur actif
Le joueur actif est représenté par :
- **un profil** (pseudo, progression, paramètres) ;
- **un avatar personnalisable** (genre, skins, titres) : voir `avatar_joueur.md` et `inventaire_skins.md`.
### Autres joueurs
Les autres joueurs (humains) peuvent être représentés dans des modules sociaux (carte monde, visite, classements) par :
- un **portrait/mini-avatar** cohérent avec leurs skins (si le profil requis nest pas accessible, afficher un état verrouillé explicite, pas de dégradation silencieuse) ;
- un **pseudo** et des indicateurs de progression (niveau, réputation) selon les règles du module.
## Propriétés
- **Compte** : Authentifié par clé privée (pas de mot de passe).
- **Ressources** : Pièces, Unités de recherche.

51
docs/specs/laborantin.md Normal file
View File

@@ -0,0 +1,51 @@
# Laborantin (Laboratoire — carte monde)
## 1. Définition
Personnage de service associé au site “Laboratoire” sur la carte du monde. Il présente les offres rares, les services danalyse/synthèse et sert de personnage contextuel lors des événements du laboratoire.
## 2. Fonctions
* **Accueil labo** : Introduit les onglets “Offres” et “Services” et le gating (niveau/réputation).
* **Analyse** : Affiche létat dune analyse génétique (en cours/terminée/échec) avec cause explicite.
* **Synthèse** : Affiche létat dune synthèse (succès/échec) et la traçabilité (seed, fiabilité, rareté).
* **Alerte sécurité** : Personnage contextuel dun `LAB_SECURITY_ALERT`.
## 3. Icone
* **Représentation :** Éprouvette + brin ADN.
* **Couleur dominante :** Cyan néon / indigo (hérite du site labo).
## 4. Interactions
* **Ouverture labo** : clic sur POI laboratoire.
* **Achat offre** : drag offre → camion (le laborantin valide lachat et affiche le reçu).
* **Consultation rapport** : clic “Voir rapport”.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"npc_id": "lab_tech_01",
"type": "laborantin",
"name": "Iris",
"assigned_site": "lab_site_uuid",
"state": "enum (IDLE, PRESENTING, ANALYZING, SYNTHESIZING, ALERT)",
"theme_variant": "string"
}
```
### Règles Métier
* Le laborantin est **lié** au `laboratoire.md` (site carte monde).
* Les erreurs doivent être explicitement remontées : `LAB_LOCKED_REPUTATION`, `ANALYSIS_FAILED`, `LAB_SECURITY_ALERT`, etc.
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Style** : Néon / techno, cohérent avec `laboratoire.md`.
* **Rendu** : Portrait + bulles détat dans la modal labo ; pas nécessairement un sprite sur la carte monde.
## Affichage contextuel (modules)
- **Laboratoire** (`laboratoire.md`) : nouvelles offres, analyse terminée, synthèse terminée, alerte sécurité, fermeture temporaire.
- **Camion** (`camion.md`) : au moment de lachat (drag) si le labo refuse (gating/stock/fonds).
## Skins & thèmes
* Palette et décor dérivent du thème (`theme.md`), avec variante “tech” du site.
* Accessoires (lunettes, badge, gants) via skins (`inventaire_skins.md`) si activé.

View File

@@ -20,6 +20,27 @@ Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie.
| Joueur | Glisser-Déposer | Offre (Animal) vers Camion | Achète l'animal et lance le transport vers le zoo. |
| Joueur | Sélectionner | Animal du Zoo | Lance une analyse génétique (si le labo est débloqué). |
## Personnage contextuel (événements & interaction)
Voir `laborantin.md`.
### Affichage
Le laborantin saffiche lorsque :
- le module est **actionné** (ouverture du labo, survol/prévisualisation dune offre, achat, lancement danalyse/synthèse) ;
- un **événement** du laboratoire survient (nouvelles offres, analyse/synthèse terminée, alerte sécurité, fermeture temporaire).
### Déclencheurs (événements)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_LAB_SITE` | clic POI | portrait + état (ouvert/fermé) + onglets |
| `LAB_OFFERS_GENERATED` | refresh TTL | bulle “Nouvelles offres” + CTA “Voir offres” |
| `LAB_OFFER_PURCHASED` | achat validé | reçu + rappel livraison camion |
| `LAB_ANALYSIS_COMPLETED` | analyse terminée | CTA “Voir rapport” |
| `LAB_SYNTHESIS_DONE` | synthèse terminée | résultat + CTA “Voir spécimen” |
| `LAB_SECURITY_ALERT` | incident | bulle alerte + CTA “Voir état” |
### Skins & thèmes
Palette et accessoires suivent `theme.md` (variante “tech”) et `inventaire_skins.md` si activé.
## Annexes Techniques
### 1. Données et États
@@ -383,3 +404,481 @@ Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie.
| Forme | Usage | Style Bordure |
|---|---|---|
| Hexagone | Icônes, Boutons | Solid 2px |
## Définition
| Champ | Valeur |
|---|---|
| Concept | Site “Laboratoire” (carte monde) : POI de recherche, offres rares, analyses génétiques et synthèse/clonage (fonctionnalité avancée). |
| Rôle | Fournir un point daccès à des animaux/offres exclusives et à des services de science (analyse traits cachés, création), avec gating réputation/niveau. |
| Portée | Site externe (world map) + interface de services ; interactions avec `camion` (transport) et `centre_recherche` (recherche). |
| Contrainte | Pas de cache/mémorisation : offres et résultats calculés à la volée (seed explicitée) ; pas de fallback silencieux sur échec (erreur + log + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir labo | clic POI | `site_id` | modal | liste offres + services | Event `OPEN_LAB_SITE` |
| Générer offres | refresh/expiration | `lab_level`, seed | offres | TTL 24h, remplacement complet | Event `LAB_OFFERS_GENERATED` |
| Acheter une offre | drag vers camion | `offer_id`, funds | cargo camion | transaction atomique | Event `LAB_OFFER_PURCHASED` |
| Analyse génétique | sélectionner animal | `animal_id`, fee | rapport | révèle traits selon fiabilité | Event `LAB_ANALYSIS_COMPLETED` |
| Synthèse/clonage | action | fragments, fee, time | nouvel animal | fiabilité vs rareté => succès/échec | Event `LAB_SYNTHESIS_DONE` |
| Fermer temporairement | incident | sécurité < seuil | site fermé | cooldown 24h/48h | Event `LAB_CLOSED_TEMP` |
| Visite publique | jour | module visite | attractivité + | visiteurs/flux | Event `LAB_PUBLIC_VISIT` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Microscope néon + brin ADN |
| Couleur dominante | Cyan néon (#00FFFF) + indigo (#202040) |
| Variantes | `icon_lab.png`, `icon_lab_microscope.png` |
| États | `open`, `closed`, `new_offers`, `security_alert` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Consulter offres | Consultation | réputation ok | clic labo | modal offres | `LAB_LOCKED_REPUTATION` |
| Acheter | Action | fonds ok + camion idle | drag offre → camion | mission camion | `NOT_ENOUGH_COINS`, `TRUCK_BUSY` |
| Lancer analyse | Action | animal sélectionné | choisir animal → payer | rapport | `ANALYSIS_FAILED` |
| Lancer synthèse | Action | fragments | synthétiser → confirmer | file synthèse | `NOT_ENOUGH_FRAGMENTS` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `site_id` | uuid_v4 | `uuid_v4` | DB | - |
| `site_type` | string | `lab_site` | DB | constant |
| `lab_level` | int | 1 | DB | 1..3 (ex) |
| `requires.reputation_min` | int | 500 | config | gating |
| `offers[].offer_id` | uuid_v4 | `uuid_v4` | DB | unique |
| `offers[].expires_at` | timestamp | - | DB | UTC |
| `offers[].item_type` | string | `egg` | DB | `egg/baby/animal` |
| `offers[].species_id` | string | `MAMMOTH` | DB | enum |
| `offers[].price.coins` | int | 20000 | DB | >=0 |
| `scores.reliability` | float | 0.9 | config | 0..1 |
| `scores.prestige` | int | 10 | config | 0..100 |
| `state.is_open` | boolean | true | DB | fermeture temp |
| `state.closed_until` | timestamp \| null | - | DB | UTC |
| `rng.seed` | string | `lab_offer_seed` | DB | auditable |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Niveau tech | 1 | int | offres |
| Slots offres | 3 | count | simultané |
| Réputation requise | 500 | pts | gating |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Fiabilité | 90% | 0..100% | succès |
| Prestige | 10 | 0..100 | rareté |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Découverte | exploration | zone | POI visible | persiste |
| Interactif | niveau joueur | >=5 | UI active | gating réputation |
| Refresh offres | 24h | seed | nouveaux items | TTL |
| Fermeture | incident | sécurité | closed_until | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Exploration carte | zone “Ville/Industrie” | est | POI découvert |
| Niveau joueur | 5 | >= | interactif |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Faillite labo | événement | est | fermeture 24h |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Traits clonés | Oui | 99% + instabilité 1% |
| Analyses | Oui | rapports conservés |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet labo | Notes |
|---|---|---|
| < 0°C | durée synthèse +20% | machines |
| > 35°C | coût énergie +15% | surchauffe |
| 20°C | vitesse +5% | optimal |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Urbain | aucun | nominal |
| Toundra | maintenance +10% | chauffage |
| Désert | maintenance +20% | clim |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | rareté froid +10% | offers |
| Été | rareté chaud +10% | offers |
| Printemps | offres +1 | bébés |
| Automne | coût analyse -10% | maladies |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Jour | ouvert au public | enseignes |
| Nuit | recherche intensive | offres “sombres” |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Fertilité assistée | +20% | recherche débloquée |
| Clonage | reproduction naturelle 0 | espèce éteinte |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Échec synthèse | perte fragments | instant |
| Accident | fermeture 48h | décontamination |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Nutriments synthétiques | santé +50 (clone) | indispensable clones |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Découverte espèce éteinte | +500 (global) | monde | buzz in-game |
| Visite labo | +20 | 10m | module |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Prélèvement ADN | stress +10 | toutes espèces |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Traits légendaires | +200% | rareté génétique |
| Instable | -50% | défaut clonage |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Autoroute | 110 km/h | vers labo |
| Piste | 30 km/h | accès difficile |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Incubation œuf rare | 72h base | -10%/lvl incubateur |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Flux visite | 5/min | capacité 50 |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Séquençage | 2 jours | accélération payante |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tests | 1h..4h | fiabilité |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Guide | +10 min | module |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Guichet spécial | 500 | $/semaine | visite |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Kit chimiste | 20 | $ | marge 40% |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Don recherche | 10 | $ | 1/20 |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Généticien | 3000 | $/mois | prime |
#### 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 |
|---|---:|---|---|
| Suivi clonage | 500 | $/jour | matériel |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Gel nutritif | 100 | $/kg | fournisseur |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Enclos stérile | 10000 | $ | entretien |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Trajet 50km | 50 | $ | usure 2% |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Labo | navette | afflux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Hall | Tunnel vitré | curiosité | passage |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Sortie labo | Boutique | passage obligé | conversion |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée VIP | Labo | ticket | attente 0 |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `LAB_OFFERS_GENERATED` | refresh | seed | nouvelles offres |
| `LAB_ANALYSIS_COMPLETED` | fin | report_id | rapport |
| `LAB_SYNTHESIS_DONE` | fin | success | nouvel animal/échec |
| `LAB_SECURITY_ALERT` | sécurité | - | fermeture |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `LAB_POI_DISCOVERED` | exploration | marker |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `TRUCK_DELIVERS_LAB_CARGO` | retour | dépôt accueil/nurserie |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ANTI_CLONE_PROTEST` | aléatoire | affluence - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SEES_CLONE` | visite | satisfaction + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_FUNDS_RESEARCH` | action | xp science + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 50000 | analyses simples | offres standard |
| 2 | 150000 | séquençage | offres rares |
| 3 | 500000 | clonage | légendaire |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeCloningSuccess` | reliability, rarity | bool | formule |
| `generateLabOffer` | level, seed | offer | auditable |
| `canAccessLab` | reputation, level | bool | gating |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `LAB_TITLE` | Info | "Laboratoire de Génétique." | ouverture |
| `LAB_LOCKED_REPUTATION` | Warning | "Réputation insuffisante." | gating |
| `LAB_SECURITY_ALERT` | Error | "Alerte de sécurité au laboratoire." | fuite/intrusion |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir nouvelle offre | découvrir | notif | clic notif → focus POI |
| Acheter | obtenir rare | transport | drag → camion |
| Analyser | révéler traits | coût | CTA direct dans fiche |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Modal labo | onglets offres/services | open/closed |
| Cartes offre | prix + rareté | locked/available |
| Bouton synthèse | fragments requis | enabled/disabled |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | POI | halo |
| Modal | centre | 80% largeur |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | transport | drag offre |
| `accueil_animaux.md` | dépôt | adultes |
| `nurserie.md` | dépôt | œufs/bébés |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | clic POI | modal |
| Acheter | drag offre → camion | mission |
| Fermer | bouton X | retour carte |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_LAB_SITE` | clic | modal |
| `CLICK_BUY_OFFER` | drag | achat |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `lab_ambient.mp3` | modal | loop | néon |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `dna_scan.mp3` | analyse ok | moyen |
| `buy_success.mp3` | achat | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `dna_strand.png` | UI | décor |
| `icon_lab.png` | POI | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `bg_lab_interior.jpg` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `cloning_process.mp4` | succès | 5.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| `pulse_neon` | bordures | 2000ms |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `lab_cyan` | #00FFFF | accents |
| `lab_indigo` | #202040 | fond |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `LAB_TITLE` | Laboratoire de Génétique | Genetics Lab |
| `BTN_SYNTHESIZE` | Synthétiser | Synthesize |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Boutons | hexagone | bordure 2px |

49
docs/specs/maire.md Normal file
View File

@@ -0,0 +1,49 @@
# Maire (Ville)
## 1. Définition
Personnage représentant la ville sur la carte du monde. Il sert dinterface narrative-fonctionnelle pour les événements de ville (festival, grève, bonus économique) qui impactent le flux de visiteurs et le budget moyen.
## 2. Fonctions
* **Annonce événements** : Présente les événements de ville et leurs impacts chiffrés.
* **Relation ville-zoo** : Expose létat de relation/jumelage (si présent dans `ville.md`).
* **Point dentrée UI** : Personnage contextuel quand le joueur sélectionne une ville ou quand un événement `CITY_EVENT` survient.
## 3. Icone
* **Représentation :** Écharpe tricolore / blason.
* **Couleur dominante :** Bleu (institution) + accents thème.
## 4. Interactions
* **Clic ville** : ouvre le panneau ville (population, richesse, événements).
* **Clic alerte** : deep-link vers la ville concernée depuis une notification.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"npc_id": "mayor_01",
"type": "maire",
"city_id": "uuid",
"name": "M. Dubois",
"state": "enum (IDLE, ANNOUNCING, NEGOTIATING)",
"current_event": "string | null"
}
```
### Règles Métier
* Les impacts annoncés par le maire doivent être **indexés** par la ville (population, richesse, distance, événement actif) conformément aux formules de `ville.md`.
* Pas de promesse “best effort” : si un événement est actif, il est listé, daté et son effet est explicite.
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Carte monde (UI panneau + portrait).
* **Style** : Cohérent avec le thème (costume, écharpe, badge).
## Affichage contextuel (modules)
- **Ville** (`ville.md`) : sélection de ville, événements, variations de flux visiteurs.
- **Attractivité sur ville** (`attractivite_zoo_sur_ville.md`) : explication des variations de flux (si le module expose une UI).
## Skins & thèmes
* Variantes par thème (costume, palette) via `theme.md`.
* Accessoires via `inventaire_skins.md` si des skins “carte monde / ville” existent.

View File

@@ -63,3 +63,472 @@ Interface centralisée dédiée aux transactions utilisant la monnaie premium (p
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Menu “Achats” : hub UI des transactions (employés, consommables, cosmétiques, upgrades). |
| Rôle | Réduire les clics dachat via catégories/onglets, et garantir des transactions atomiques (débit + attribution). |
| Portée | UI globale (HUD) ; impacte inventaires, bâtiments, personnel, monnaies. |
| Contrainte | Aucun tracking/analytics ; pas de cache/mémorisation côté app : catalogue et soldes sont lus comme état courant à louverture. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir menu achats | clic HUD | `player_id` | modal hub | focus dernière catégorie (état UI local) | Event `OPEN_SHOP_HUB` |
| Charger catalogue | ouverture | `shop_version` | catégories + items | filtrer par niveau, conditions | Event `SHOP_CATALOG_LOADED` |
| Filtrer catégorie | clic onglet | `category_id` | liste items | tri stable, recherche | Event `SHOP_CATEGORY_SELECTED` |
| Prévisualiser item | clic item | `item_id` | panneau détail | affiche prix, effets, prérequis | Event `SHOP_ITEM_PREVIEWED` |
| Acheter item | clic “Acheter” | `item_id`, quantité | débit + attribution | transaction atomique ; pas dachat si fonds insuffisants | Event `SHOP_PURCHASED` |
| Confirmer achat coûteux | seuil | `price` | modal confirm | requis si > 1000 coins | Event `SHOP_CONFIRM_SHOWN` |
| Achat en quantité | clic x1/x10 | quantité | panier/achat | clamp par stock/solde | Event `SHOP_QUANTITY_CHANGED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Caisse / panier |
| Couleur dominante | Vert + or |
| Variantes | `icon_shop_cash.png`, `icon_shop_cart.png` |
| États | normal, hover, disabled (fonds) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Accès hub | Navigation | - | clic HUD | ouvre hub | - |
| Changer onglet | Navigation | - | clic onglet | liste update | - |
| Achat simple | Action | fonds ok | clic acheter | item attribué | `NOT_ENOUGH_COINS` |
| Achat coûteux | Action | fonds ok | acheter → confirm | item attribué | `CANCELLED` |
| Achat x10 | Action | fonds/stock ok | select x10 → acheter | 10 items | `LIMIT_REACHED` |
## Personnage contextuel (événements & interaction)
Deux personnages contextuels peuvent être affichés selon la section :
- **Vendeur “achat en pièces”** : voir `vendeur_pieces.md` (section “Pièces”, conversion/pack).
- **Vendeur (boutique)** : voir `vendeur.md` (prévisualisation/achat ditems boutique/cosmétiques si le hub les expose).
### Déclencheurs (exemples)
| Section | Event / Action | Effet UI personnage |
|---|---|---|
| Hub | `OPEN_SHOP_HUB` | personnage visible dans len-tête du hub (thématisé) |
| Hub | `SHOP_ITEM_PREVIEWED` | bulle “Détails item” + CTA “Acheter” |
| Hub | `SHOP_CONFIRM_SHOWN` | confirmation contextualisée (prix, quantité) |
| Pièces | ouverture section | vendeur pièces présente les packs + limites |
| Pièces | achat pack | reçu + solde mis à jour ; erreur explicite si paiement impossible |
### Skins & thèmes
Le rendu suit `theme.md` et les skins de la UI/boutique si disponibles via `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `shop_categories[].id` | string | `employees` | config/DB | stable |
| `shop_categories[].label_key` | string | `shop.cat.employees` | i18n | FR/EN |
| `shop_categories[].items[]` | string[] | `["healer_01"]` | config/DB | ids |
| `items[item_id].price.coins` | int | 250 | config | >=0 |
| `items[item_id].price.gems` | int | 0 | config | >=0 |
| `items[item_id].requires.zoo_level` | int | 3 | config | gating |
| `items[item_id].stock_daily` | int \| null | 10 | config | null = illimité |
| `currency_balance.coins` | int | 1500 | DB | source de vérité |
| `currency_balance.gems` | int | 50 | DB | source de vérité |
| `ui.last_category_id` | string | `employees` | client | état UI |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Seuil confirmation | 1000 | coins | règle existante |
| Quantités rapides | 1,10 | unités | boutons |
| Catégorie par défaut | `employees` | id | configurable |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Achats du jour | 0 | 0..∞ | historique local, pas danalytics |
| Dépenses du jour | 0 | 0..∞ | transparence UI |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | jeu lancé | config | hub dispo | bouton HUD |
| Navigation | clic onglets | category_id | liste | tri stable |
| Transaction | achat | item+prix | débit+attribution | atomicité |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte créé | true | est | hub visible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Mode tutorial verrou | true | est | hub masqué temporairement |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Soldes | Oui | persistants DB |
| Achats | Oui | items attribués |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet shop | Notes |
|---|---|---|
| - | aucun | UI |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet shop | Notes |
|---|---|---|
| - | aucun | UI |
#### Impact Saisons (tableau détaillé)
| Saison | Effet shop | Notes |
|---|---|---|
| Saison active | items saisonniers visibles | gating explicite |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet shop | Notes |
|---|---|---|
| - | aucun | - |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | shop nimpacte pas directement |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Achat nourriture spéciale | stock + | transaction ok |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| - | 0 | 0 | UI |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Skins/thèmes achetés | + | valeur perçue | cosmétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat upgrade nurserie | level ↑ | transaction ok |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat accueil | capacité ↑ | transaction ok |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat recherche | vitesse ↑ | transaction ok |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat labo | capacité ↑ | transaction ok |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat décor | attractivité ↑ | transaction ok |
#### 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 |
|---|---:|---|---|
| Recrutement | variable | coins | item employé |
#### 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 | variable | coins | achat |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Consommables | variable | coins | achat |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat capacité | variable | coins | achat |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat upgrade | variable | coins | achat |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_SHOP_HUB` | clic | - | ouvre |
| `SHOP_CATALOG_LOADED` | open | version | liste |
| `SHOP_PURCHASED` | achat | item_id, qty | attribue |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `SHOP_CATEGORY_SELECTED` | onglet | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Hub 1 | 0 | catégories base | - |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `canPurchase` | balance, price | bool | fonds + gating |
| `purchaseItem` | item_id, qty | receipt | atomique |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `NOT_ENOUGH_COINS` | Warning | "Fonds insuffisants." | achat |
| `SHOP_PURCHASED` | Info | "Achat effectué." | succès |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Acheter employé | renforcer zoo | navigation | hub + onglet + CTA |
| Acheter consommable | soigner/booster | quantité | x1/x10 direct |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Onglets | catégories | actif/inactif |
| Carte item | icône, prix, CTA | disabled si fonds |
| Modal confirm | item + prix | ok/cancel |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | bouton | accès direct |
| Modal | centre | hub |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `boutique.md` | boutique interne | cohérence |
| `inventaire_skins.md` | cosmétiques | attribution |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | HUD → menu | hub |
| Acheter | item → CTA | attribution |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SHOP_HUB` | clic | modal |
| `CLICK_BUY_ITEM` | CTA | achat |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `shop_hub_loop.mp3` | menu achats | loop | neutre |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_purchase_success.mp3` | succès | moyen |
| `ui_purchase_fail.mp3` | échec | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `shop_item_card.png` | carte item | scalable |
| `shop_coin_fly_fx.png` | feedback achat | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `shop_banner.png` | header |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `coin_fly.webm` | feedback | 0.8s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièces qui volent | achat | 0.8s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `shop_green` | #2E7D32 | CTA |
| `shop_gold` | #D4AF37 | prix |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `shop.title` | Achats | Shop |
| `shop.buy` | Acheter | Buy |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cartes | rectangles arrondis | lisible |

View File

@@ -46,6 +46,16 @@ Employé chargé de l'approvisionnement en nourriture des enclos. Il remplit les
* **Animation :** Verse de la nourriture dans l'auge.
* **Alerte :** Icône "Faim" rouge clignotante si le nourisseur est débordé.
## Affichage contextuel (modules)
Le nourisseur sert de personnage contextuel lorsque des événements de nourriture surviennent sur la carte du zoo.
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `FEED_LOW` | auge < seuil | bulle “Mangeoire vide” + CTA “Voir enclos” |
| `FOOD_STOCK_EMPTY` | stock global = 0 | bulle “Stock vide” + deep-link `menu_achats.md` |
| `FEEDER_OVERLOADED` | trop de tâches | bulle “Débordé” + CTA recruter/ajuster priorités |
# Annexes UX/UI

75
docs/specs/nurse.md Normal file
View File

@@ -0,0 +1,75 @@
# Nurse (Nurserie)
## 1. Définition
Employée spécialisée dans la gestion de la nurserie : incubation, soins de base aux bébés, assistance au joueur lors des événements déclosion et durgence. Achetable avec des pièces (même logique que les autres employés).
## 2. Fonctions
* **Triage nurserie :** Priorise les slots (œuf prêt, bébé critique, croissance).
* **Soins pédiatriques :** Applique des soins de stabilisation (réduit la vitesse de dégradation quand un bébé est en danger), en complément du `soigneur` (qui gère la santé globale).
* **Régulation :** Contribue à la régulation de température de la nurserie (effet borné, dépend du niveau de nurserie).
* **Assistance UI :** Sert de personnage contextuel quand la nurserie est actionnée ou quun événement nurserie survient.
## 3. Icone
* **Représentation :** Biberon + petit badge croix (pédiatrie).
* **Couleur dominante :** Pastel + blanc.
## 4. Interactions
* **Recrutement :** Menu “Employés” (ou Menu Achats → Personnel).
* **Assignation :** Assignable à une `nurserie` spécifique ou à une zone (si plusieurs nurseries existent).
* **Priorités :** “Œufs prêts” > “Bébés critiques” > “Croissance” > “Maintenance”.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "nurse_01",
"type": "nurse",
"name": "Aline",
"created_at": "timestamp",
"salary": 45,
"hire_cost": 450,
"assigned_building": "nurserie_uuid | null",
"stats": {
"speed": 1.0,
"stabilization": 0.7,
"temp_help": 1
},
"state": "enum (IDLE, MOVING, STABILIZING, CHECKING_SLOTS, BREAK)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* La nurse ne remplace pas le `soigneur` : elle **nagit** que sur les bébés et la nurserie (périmètre borné).
* Si aucun chemin nexiste vers la nurserie, laction est refusée avec message explicite (pas de fallback silencieux).
# 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.
## Affichage contextuel (modules)
Le personnage “Nurse” saffiche dans les modules suivants :
- **Nurserie** (`nurserie.md`) : ouverture, éclosion prête, nurserie pleine, urgence bébé.
- **Inventaire bébés** (`inventaire_bebe_animaux.md`) : filtre “en danger”, deep-link, actions “voir”.
- **Fiche bébé** (`bebe_animal.md`) : état critique, sortie prématurée (confirmation), soins.
### Déclencheurs (exemples)
| Module | Event / Action | Effet UI |
|---|---|---|
| Nurserie | `OPEN_NURSERIE` | La nurse apparaît en vignette/portrait dans le panneau. |
| Nurserie | `EGG_HATCHED` / slot prêt | Bulle : “Éclosion prête” + CTA deep-link slot. |
| Nurserie | `NURSERIE_FULL` | Bulle : cause (slots pleins) + CTA “Voir slots”. |
| Bébé | `BABY_CRITICAL` | Bulle : raison (froid/faim/santé) + CTA “Voir bébé”. |
## Skins & thèmes
* Uniforme et palette dérivent du thème (`theme.md`).
* Accessoires (stéthoscope, badge, serre-tête) via skins (`skin.md`, `inventaire_skins.md`).

View File

@@ -229,3 +229,514 @@ function updateNurserie(nurserie):
- **Couleurs** : Vert #00FF00 (OK), Rouge #FF0000 (KO).
- **Textes** : Tooltip "Placer ici".
- **Formes** : Carré de sélection.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “nurserie” : incubation des œufs, croissance sécurisée des bébés, et tampon avant placement sur la grille. |
| Rôle | Réduire la mortalité infantile via régulation température/soins, gérer les slots, et fournir un parcours UI simple (clic nurserie → slots). |
| Portée | Une instance de bâtiment sur la grille isométrique, avec `level` et `slots[]`. |
| Contrainte | Pas de cache/mémorisation : timers et progressions recalculés à la volée (lazy update) ; pas de fallback silencieux (slot invalide => erreur + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir nurserie | clic bâtiment | `nurserie_id` | UI slots | affiche slots + timers | Event `OPEN_NURSERIE` |
| Affecter œuf à slot | achat/repro | `egg_id` | slot rempli | auto si slot vide ; sinon erreur | Event `EGG_ADDED` / `NURSERIE_FULL` |
| Éclosion | fin timer + clic | `egg_id` | `baby_id` | reveal au clic ; slot passe bébé | Event `EGG_HATCHED` |
| Croissance | tick lazy | temps, level | `growth_progress` ↑ | multiplicateur par level ; clamp | Event `BABY_GROWTH_UPDATED` |
| Réguler température | calcul impact | env temp | dégâts temp ↓ | tolérance selon level | Event `NURSERIE_TEMP_REGULATED` |
| Nourrir auto | tick | stock nourriture | faim ↓ | si stock > 0, conso | Event `BABY_AUTO_FED` |
| Sortir bébé | drag/tap place | `baby_id`, case | bébé placé | validation case ; transfert iso coords | Event `PLACE_BABY` |
| Upgrade nurserie | action joueur | coins, niveau | level ↑ | max 7 ; effets cumulés | Event `NURSERIE_UPGRADED` |
| Urgence soins | action | `baby_id` | santé ↑ | dispo level ≥ 4 | Event `NURSERIE_EMERGENCY_CARE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Bâtiment couveuse/vitrine, fumée douce, lumières chaudes |
| Couleur dominante | Pastel (jaune paille, bleu clair) |
| Variantes | `nursery_lvl_{1..7}_dir_{N,E,S,W}.png` |
| États | `idle`, `egg_ready` (brille), `baby_ready` (jauge 100), `full` (badge) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir slots | Consultation | - | clic nurserie | bottom sheet slots | - |
| Placer œuf | Action | slot vide | achat/repro → auto place | slot occupé | `NURSERIE_FULL` |
| Cliquer œuf éclos | Action | timer fini | clic slot | popup bébé | - |
| Sortir bébé | Action | bébé en slot | drag vers grille + confirm | bébé placé | `PLACEMENT_INVALID`, `BABY_TOO_FRAGILE` |
| Upgrade | Action | coins ok | clic “Améliorer” | level ↑ | `NOT_ENOUGH_COINS` |
| Soins durgence | Action | level ≥ 4 | bouton “Urgence” | santé ↑ | `LEVEL_TOO_LOW` |
## Personnage contextuel (événements & interaction)
Voir `nurse.md`.
### Affichage
La nurse saffiche lorsque :
- la nurserie est **actionnée** (ouverture, clic slot, éclosion, placement, urgence) ;
- un **événement** de nurserie survient (slot prêt, nurserie pleine, bébé critique).
### Déclencheurs (événements)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_NURSERIE` | clic bâtiment | portrait + état slots + CTA |
| `EGG_ADDED` | œuf affecté | bulle “Œuf placé” + deep-link slot |
| `EGG_HATCHED` | clic éclosion | bulle “Bébé né” + CTA “Voir bébé” |
| `NURSERIE_FULL` | slots pleins | bulle “Nurserie pleine” + CTA “Voir slots” |
| `BABY_CRITICAL` | bébé en danger | bulle “Urgence” + CTA “Voir bébé” |
### Skins & thèmes
Uniforme et accessoires de la nurse suivent `theme.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `nurserie` | DB | constant |
| `level` | int | 1 | DB | 1..7 |
| `slots[].slot_id` | int | 1 | DB | 1..level |
| `slots[].content_type` | string \| null | `egg` | DB | `egg`/`baby`/null |
| `slots[].content_id` | uuid_v4 \| null | `uuid_v4` | DB | egg_id/baby_id |
| `slots[].timer_end` | timestamp \| null | - | DB | UTC |
| `slots[].growth_progress` | float \| null | 42.0 | DB | 0..100 si bébé |
| `iso_x` | int | 120 | DB | grille |
| `iso_y` | int | 88 | DB | grille |
| `z_index` | int | 12088 | calcul | profondeur iso |
| `modules.has_vitrine` | boolean | false | DB | unlock level ≥ 3 |
| `modules.has_emergency_care` | boolean | false | DB | unlock level ≥ 4 |
| `timestamps.created_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Slots | 1 | count | level 1 |
| Vitesse éclosion | 1.0 | coef | base |
| Vitesse croissance | 1.0 | coef | base |
| Tolérance T° | 2 | °C | ± |
| Auto-nourrissage | actif | bool | si stock > 0 |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Taux survie (si conditions) | 100% | 0..100% | objectif gestion |
| Jumeaux | 1% | 0..5% | événement rare |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Construction | joueur | coins | nurserie | position iso fixe |
| Utilisation | achat/repro | œufs | slots | capacité limitée |
| Éclosion | timer fini + clic | egg_id | baby_id | reveal explicite |
| Croissance | temps | baby_id | progress | clamp |
| Sortie | placement | baby_id | sur grille | slot libéré |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Construction | true | est | nurserie créée |
| Début partie | true | est | nurserie initiale (si scénario) |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Destruction | true | est | supprimée si vide |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Niveau nurserie | Oui | persiste |
| Bonus génétique | Oui | chance rareté (level ≥ 5) |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet nurserie | Notes |
|---|---|---|
| \(|\Delta T|\le 2\) (lvl1) | pas de dégâts | tolérance |
| \(|\Delta T|\le 10\) (lvl7) | pas de dégâts | climatisation |
| hors tolérance | dégâts réduits | protège mais pas invincible |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Compatible avec œuf | croissance +10% | règle existante |
| Incompatible | aucun bonus | pas de malus direct |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver/Été | atténue extrêmes | via régulation |
| Printemps | vitesse +10% | règle existante |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | veilleuse | pas de malus obscurité |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Incubateur | vitesse +10% | parents présents (règle existante) |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Bébé en nurserie | mortalité ↓ | santé stable sauf faim extrême |
| Urgence | soins | level ≥ 4 |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stock global > 0 | nourrir auto | conso réduite 50% vs adulte |
| Stock = 0 | faim ↑ | alertes |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Vitrine active | + | 1 case | attroupement devant vitre |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Certificat bonne santé | +10% | bébé né + bien traité |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Level 1..7 | x{1.0,1.2,1.5,2.0,3.0,5.0,10.0} | progression existante |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Bonus rareté | +5% | level ≥ 5 |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Vitrine | attroupement | module vitrine |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Électricité | 5 | coins / h | règle existante |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soins urgence | 10 | coins | level ≥ 4 |
#### 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 | variable | coins | level up |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Conso bébé | 0.5 | ration | vs adulte |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Contrôle santé | 0 | - | inclus (spécif) |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allées | Vitrine nurserie | curiosité | attroupement |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Vitrine | Boutique | souvenir | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Nurserie | signal UI | route directe |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_NURSERIE` | clic | `nurserie_id` | UI |
| `EGG_ADDED` | auto | `egg_id` | slot rempli |
| `EGG_HATCHED` | clic | `egg_id`, `baby_id` | spawn bébé |
| `NURSERIE_FULL` | erreur | `nurserie_id` | message |
| `NURSERIE_UPGRADED` | action | `level` | effets |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `NURSERY_MARKER_SHOW` | map open | marker |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `HATCH_CLICK` | clic | animation |
| `PLACE_BABY` | placement | transfert |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_GATHERS_AT_NURSERY` | vitrine | attroupement |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_STOPS_AT_WINDOW` | proximité | temps visite + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_NURSERY` | clic | level ↑ |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | 1 slot, tolérance ±2°C | base |
| 2 | 200 | 2 slots, vitesse x1.2 | - |
| 3 | 400 | 3 slots, vitrine | visiteurs |
| 4 | 800 | 4 slots, urgence soins | soins |
| 5 | 1600 | 5 slots, rareté +5% | génétique |
| 6 | 3200 | 6 slots, vitesse x5 | - |
| 7 | 6400 | 7 slots, tolérance ±10°C | clim |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `assignEggToSlot` | egg, slots | slot_id | pas de slot => erreur |
| `hatchEgg` | egg | baby | reveal au clic |
| `computeNurseryMultiplier` | level | float | table |
| `applyTempRegulation` | envTemp, level | delta | tolérance |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `EGG_HATCHED` | Info | "Un œuf a éclos en nurserie." | éclosion |
| `NURSERIE_FULL` | Warning | "Nurserie pleine." | slots pleins |
| `TWINS` | Info | "Des jumeaux sont nés." | chance 1% |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Gérer slots | suivre œufs/bébés | navigation | clic direct bâtiment |
| Éclosion | révéler bébé | attente | badge “prêt” + clic unique |
| Sortir bébé | placement | erreurs | overlay vert/rouge |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Bottom sheet | grille slots | open/closed |
| Slot | icône + barre | egg/baby/empty |
| Popup récompense | espèce/rareté | confirm |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | sur case | clic |
| Modal | centre/bottom | slots |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `bebe_animal.md` | croissance | jauge |
| `inventaire_bebe_animaux.md` | deep-link | navigation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | clic nurserie | slots |
| Aller slot | clic notif | focus slot |
| Placer | drag → drop | bébé sur grille |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_NURSERIE` | clic | modal |
| `HATCH_CLICK` | clic slot | reveal |
| `DRAG_START` | drag | placement mode |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `nursery_lullaby_loop.mp3` | nurserie | loop | doux |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_open.mp3` | ouvrir | bas |
| `crack_egg.mp3` | éclosion | moyen |
| `baby_cry.mp3` | reveal | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `nursery_slot_frame.png` | slot | scalable |
| `placement_grid_overlay.png` | placement | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `egg_rarity_badge.png` | rareté |
| `baby_card_bg.png` | popup |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `nursery_clouds_bg.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| tremblement œuf | proche éclosion | 0.8s loop |
| glow slot | prêt | 0.6s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `nursery_pastel_yellow` | #F7E7A6 | fond |
| `nursery_ok_green` | #00FF00 | placement |
| `nursery_ko_red` | #FF0000 | placement |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `nursery.title` | Nurserie | Nursery |
| `nursery.slot` | Slot | Slot |
| `nursery.full` | Nurserie pleine. | Nursery full. |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Slot | rectangle arrondi | lisible |
| Badge prêt | rond | contraste |

View File

@@ -8,6 +8,52 @@ Entité active dans le jeu, qu'elle soit contrôlée par un humain, une IA ou un
- **Bot** : IA gérant un zoo concurrent.
- **Visiteur** : PNJ se promenant dans le zoo.
- **Animal** : Entité biologique gérée par le joueur.
- **Staff (Employé / PNJ de service)** : Personnage de service (accueil, guichet, boutique, recherche, soin, sécurité, nurserie, laboratoire).
## Skins, thèmes et personnalisation
Les personnages (joueur, visiteurs, bots, staff) sont rendus avec une combinaison :
- **Thème global** : voir `theme.md` (palette, ambiance UI, décor, uniformes).
- **Skins** : voir `skin.md` et léquipement/possession via `inventaire_skins.md`.
### Règles de rendu (contrat)
- Un personnage peut avoir des **variantes visuelles** (uniforme, accessoires, palette) déterminées par le thème et les skins équipés.
- Les personnages affichés dans une UI (portrait, badge, “paper doll”, bulle) doivent rester **cohérents** avec lavatar/skin courant.
- Un même rôle (ex. “vendeur”) peut avoir plusieurs skins, mais **un skin actif** doit être explicite (pas dauto-déduction silencieuse).
## Personnage contextuel de module (UI)
Certains modules affichent un **personnage contextuel** quand le module est actionné ou lorsquun événement lié au module survient.
### Objectifs
- **Ancrage** : associer un module à un rôle (ex. Nurserie → Nurse).
- **Interaction** : proposer des actions directes (1 clic) et des explications factuelles (état, cause, prochaine action).
- **Cohérence cosmétique** : appliquer thème + skins sur le personnage.
### Déclencheurs (génériques)
- **Ouverture / activation** : ouverture dun panneau, sélection dun bâtiment, entrée dans un mode (build, gestion).
- **Événement module** : arrivée, incident, succès dune action, blocage explicite (fonds insuffisants, capacité pleine, gating réputation).
- **État critique** : un statut “critique” du module est actif (ex. nurserie pleine, alerte quarantaine, alerte sécurité).
### Interactions (génériques)
- **Clic** : ouvre lécran/action la plus pertinente du module (deep-link).
- **Survol / tap** : affiche une fiche courte (rôle + état + action possible).
- **Dialogue/bulle** : messages informatifs liés à un événement (sans “best effort”, sans masquage derreur).
### Index des rôles (spécifications associées)
- **Visiteurs homme/femme** : `visiteur.md`
- **Joueur actif (avatar + pseudo + skins + profil)** : `joueur.md`, `avatar_joueur.md`, `inventaire_skins.md`
- **Autres joueurs** : `joueur.md` (représentation externe) + `avatar_joueur.md` (portrait partagé)
- **Bots** : `bot.md`
- **Chercheur** : `chercheur.md`
- **Nourisseur** : `nourisseur.md`
- **Soigneur** : `soigneur.md`
- **Agent de sécurité** : `agent_securite.md`
- **Nurse (nurserie)** : `nurse.md`
- **Personnel daccueil (nouveaux animaux)** : `personnel_accueil.md`
- **Guichetière (billetterie)** : `guichetiere.md`
- **Vendeur (boutique)** : `vendeur.md`
- **Vendeur “achat en pièces” (menu achats / conversion monnaies)** : `vendeur_pieces.md`
- **Laborantin (site laboratoire carte monde)** : `laborantin.md`
- **Maire (ville / carte monde)** : `maire.md`
# Annexes Techniques

View File

@@ -0,0 +1,68 @@
# Personnel daccueil (nouveaux animaux)
## 1. Définition
Personnel de service associé à lAccueil des animaux. Il gère le check-in (quarantaine/acclimatation), la traçabilité (documents, historique) et sert de personnage contextuel lors des arrivées et incidents daccueil.
## 2. Fonctions
* **Check-in** : Associe lanimal livré/acheté à un slot daccueil (contrôle capacité, timers).
* **Traçabilité** : Rend visibles des informations (traits révélés, historique) selon le score “Traçabilité” de laccueil.
* **Quarantaine** : Surveille et signale les incidents `QUARANTINE_ALERT` avec action de consultation.
* **Assistance UI** : Personnage contextuel de lAccueil et des livraisons camion.
## 3. Icone
* **Représentation :** Tampon “OK” + caisse (logistique).
* **Couleur dominante :** Ambre + bleu (service).
## 4. Interactions
* **Consultation :** Clic sur lAccueil → bottom sheet slots (personnel visible dans le panneau).
* **Incident :** Clic sur badge quarantaine → panneau cause/coût/durée.
* **Placement :** CTA “Placer” (deep-link) vers le mode placement.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "reception_staff_01",
"type": "personnel_accueil_animaux",
"name": "Sam",
"salary": 35,
"hire_cost": 0,
"assigned_building": "reception_uuid",
"state": "enum (IDLE, CHECKIN, PAPERWORK, QUARANTINE, BREAK)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Par défaut, le personnel daccueil est **lié** au bâtiment `accueil_animaux.md` (pas un employé libre).
* En cas daccueil saturé, lerreur est explicite (`RECEPTION_FULL`) et le personnage affiche létat (pas de dégradation silencieuse).
# 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.
## Affichage contextuel (modules)
- **Accueil des animaux** (`accueil_animaux.md`) : arrivée, prêt, saturation, incident quarantaine.
- **Camion** (`camion.md`) : arrivée au zoo, déchargement vers accueil (adulte).
### Déclencheurs (exemples)
| Module | Event / Action | Effet UI |
|---|---|---|
| Accueil | `OPEN_RECEPTION` | Portrait + état “slots” (libres/occupés/prêts). |
| Accueil | `ANIMAL_ARRIVAL` | Bulle “Arrivée enregistrée” + CTA inspecter. |
| Accueil | `ANIMAL_READY` | Bulle “Prêt à placer” + CTA “Placer”. |
| Accueil | `RECEPTION_FULL` | Bulle “Accueil saturé” + CTA “Voir slots”. |
| Accueil | `QUARANTINE_ALERT` | Bulle “Alerte quarantaine” + CTA “Voir détails”. |
## Skins & thèmes
* Uniforme dépend du thème (`theme.md`) : veste, badge, clipboard.
* Variantes cosmétiques via `inventaire_skins.md` si le thème autorise des uniformes alternatifs.

View File

@@ -49,6 +49,16 @@ Employé spécialisé dans la santé des animaux. Il intervient pour prévenir l
* **Feedback :** Icône de croix verte au-dessus de l'animal soigné.
* **Notification :** "Un animal est malade !" (si pas de soigneur dispo) ou "Animal soigné par [Nom]".
## Affichage contextuel (modules)
Le soigneur sert de personnage contextuel lors des événements de santé animale.
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `ANIMAL_SICK` | animal passe `SICK` | bulle “Maladie détectée” + CTA “Voir animal” |
| `NO_HEALER_AVAILABLE` | file saturée / absent | bulle “Aucun soigneur dispo” + CTA recruter |
| `HEALTH_SYSTEM_OVERLOADED` | trop malades | bulle “Système santé saturé” + CTA prioriser zones |
# Annexes UX/UI

57
docs/specs/vendeur.md Normal file
View File

@@ -0,0 +1,57 @@
# Vendeur (Boutique)
## 1. Définition
Personnage de service associé aux boutiques du zoo. Il matérialise la vente (service, file), les promotions et sert de personnage contextuel lors des événements de boutique.
## 2. Fonctions
* **Service clients** : Représente la cadence de service de la boutique (entrée/sortie visiteurs).
* **Animation vente** : Déclenche les FX de caisse (“pièces qui volent”) et les popups.
* **Gestion file/plein** : Signale `SHOP_FULL` avec cause (capacité) et action (upgrade / poser une autre boutique).
## 3. Icone
* **Représentation :** Sac cadeau / caisse.
* **Couleur dominante :** Vert (vente) + or (pièces).
## 4. Interactions
* **Clic boutique** : ouvre stats et options (upgrade, skin boutique).
* **Clic sur promo** : ouvre un panneau de détails (durée, effet) si la mécanique existe.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "vendor_01",
"type": "vendeur",
"name": "Léo",
"salary": 0,
"hire_cost": 0,
"assigned_building": "shop_uuid",
"state": "enum (IDLE, SERVING, RESTOCKING, OVERLOADED)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Le vendeur est lié à une `boutique.md` (pas un employé libre).
* En surcharge (file), létat est visible (badge / bulle) et déclenche un message explicite.
# 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.
## Affichage contextuel (modules)
- **Boutique** (`boutique.md`) : vente, surcharge, rupture de stock (si activée), consultation stats.
- **Menu Achats** (`menu_achats.md`) : pour les items “boutique”/cosmétiques, le vendeur peut être le personnage contextuel lors de la prévisualisation et de la confirmation dachat (UI).
## Skins & thèmes
* Uniforme et comptoir dépendent du thème (`theme.md`).
* Variantes (type de boutique : food/souvenir/boisson) via skins (`inventaire_skins.md`) côté bâtiment + accessoires du vendeur.

View File

@@ -0,0 +1,55 @@
# Vendeur (achat en pièces pour le zoo)
## 1. Définition
Personnage contextuel du module de conversion/achat de monnaie “pièces” pour le zoo. Il intervient dans le `menu_achats.md` pour présenter les packs, confirmer les transactions et afficher les erreurs de paiement/fonds.
## 2. Fonctions
* **Présentation packs** : Affiche les packs de pièces (et, si présent, la monnaie source : gems, coupons).
* **Transaction** : Déclenche une transaction atomique (débit monnaie source + crédit pièces).
* **Transparence** : Affiche le détail (taux, bonus éventuel, limites) sans masquage.
## 3. Icone
* **Représentation :** Pile de pièces + symbole échange.
* **Couleur dominante :** Or.
## 4. Interactions
* **Ouverture** : Menu Achats → section “Pièces”.
* **Achat** : Sélection pack → confirmer (si requis) → crédit.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"npc_id": "coin_merchant_01",
"type": "vendeur_pieces",
"name": "Maya",
"offers": [
{
"offer_id": "coins_pack_s",
"coins_amount": 1000,
"price": { "gems": 10 }
}
],
"limits": {
"daily_purchases_max": 10
}
}
```
### Règles Métier
* Aucune alternative silencieuse : si paiement impossible, afficher la cause (`NOT_ENOUGH_GEMS`, `LIMIT_REACHED`, `PAYMENT_FAILED`).
* Les offres doivent rester cohérentes avec le thème (bannière, palette) et les règles “pas danalytics”.
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Style** : Cohérent UI shop (réutilise `menu_achats.md`).
* **Personnage** : Portrait/mascotte dans le panneau “Pièces”.
## Affichage contextuel (modules)
- **Menu Achats** (`menu_achats.md`) : ouverture section pièces, confirmation, achat réussi/échoué.
## Skins & thèmes
* Tenue et décor dérivent du thème (`theme.md`).
* Accessoires (bourse, caisse, badge) via `inventaire_skins.md` si des skins “UI shop staff” existent.

View File

@@ -13,6 +13,23 @@ Une ville est une entité sur la Carte du Monde qui génère le flux de visiteur
- **Facteur de Distance** : Plus un zoo est proche d'une ville, plus il attire de visiteurs.
- **Facteur d'Attractivité** : La valeur et la diversité du zoo influencent le choix des visiteurs.
## Personnage contextuel (événements & interaction)
Voir `maire.md`.
### Affichage
Le maire saffiche lorsque :
- la ville est **actionnée** (sélection/clic ville, ouverture panneau ville) ;
- un **événement** de ville survient (festival, grève, bonus économique, `CITY_EVENT`).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| sélection ville | clic icône ville | portrait + synthèse (population, richesse, flux) |
| `CITY_EVENT` | événement actif | bulle “Événement en cours” + impacts chiffrés |
### Skins & thèmes
Portrait et accessoires suivent `theme.md` ; variantes “ville” possibles via `inventaire_skins.md`.
# Annexes Techniques
## 1. Données et États
@@ -152,3 +169,443 @@ function calculateVisitorFlow(city, zoo):
- **Couleurs** : Gris/Bleu.
- **Textes** : Nom Ville.
- **Formes** : Cercle d'influence (zone de chalandise).
## Définition
| Champ | Valeur |
|---|---|
| Concept | Site “Ville” : nœud de la carte monde générant un potentiel de visiteurs et un budget moyen (wealth_factor). |
| Rôle | Alimenter le flux ville→zoo (choix par attractivité/distance) et porter des événements (festivals, grèves) modifiant la demande. |
| Portée | Une entité fixe sur carte monde, référencée par les calculs dattractivité. |
| Contrainte | Flux calculé à la volée (pas de cache/mémorisation) ; aucun mécanisme danalytics ; événements doivent être explicités via events/messages. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Calculer flux vers un zoo | tick / ouverture carte | `population`, `wealth_factor`, distance, attractivité zoo | `baseFlow` | formule \(Pop \cdot A / d^2\) + mods heure/event | Event `CITY_FLOW_DISPATCHED` |
| Déclencher événement ville | calendrier/saison | type event | mod flux/budget | durée bornée | Event `CITY_EVENT` |
| Vendre nourriture (marché) | interaction (feature) | stock, price | items | pricing selon wealth | Event `CITY_MARKET_OPENED` |
| Marquer jumelage | relation max | city_id | bonus permanent | +5% flux vers zoo jumelé | Event `CITY_TWINNED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Skyline (petite/moyenne/grande) |
| Couleur dominante | Gris/bleu + lumières jaunes |
| Variantes | `city_small.png`, `city_medium.png`, `city_large.png` |
| États | jour (clair), nuit (lumières), event (feux dartifice) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir ville | Consultation | ville visible | clic marker | panneau | `ZONE_NOT_EXPLORED` |
| Voir flux | Consultation | zoo sélectionné | onglet flux | valeurs | - |
| Lancer campagne (feature) | Action | coins ok | bouton campagne | flux + | `NOT_ENOUGH_COINS` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `city` | DB | constant |
| `name` | string | `Rivemont` | DB | - |
| `population` | int | 250000 | DB | >0 |
| `wealth_factor` | float | 1.2 | DB | 0.5..2.0 |
| `events.active_event` | enum \| null | `NATIONAL_HOLIDAY` | DB | null si none |
| `events.ends_at` | timestamp \| null | - | DB | UTC |
| `iso_x` | int | 120 | calcul | rendu |
| `iso_y` | int | 88 | calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Bonheur ville | 50 | % | influe fréquence |
| Îlot chaleur | +2 | °C | vs campagne |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Relation | 0 | 0..100 | jumelage |
| Flux envoyé | 0 | 0..∞ | suivi in-game |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Génération | seed monde | biome | ville | fixe |
| Événement | calendrier | type | mods | durée |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération carte | true | est | ville créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Désastre rare | true | est | ville détruite (event) |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Jumelage | Oui | bonus permanent |
| Événements | Non | expirent |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| îlot chaleur | +2°C | constant |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| toundra | architecture igloos | visuel |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | marché Noël | flux + |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| nuit | lumières | pollution lumineuse |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| baby boom | pop + | 1 semaine in-game |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| épidémie | pop - | temporaire |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| marché | stock joueur + | achats |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| richesse | budget ↑ | monde | VIP |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| PIB | dépense moyenne ± | wealth_factor |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| trafic pointe | vitesse - | 8-9h, 17-18h |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| campagne marketing | flux + | achat |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| conférence science | affluence + | event |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| distance | flux \(\downarrow\) | d^2 |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| campagne 1 | 500 | coins | panneaux |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| budget visiteurs | wealth_factor × | $ | ville |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| marchés | variable | coins | achats |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| parking (lore) | 5 | $ | voiture |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | flux | entrée billeterie |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Enclos | visite | satisfaction |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Boutiques | besoins | dépenses |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Ville | sortie | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `CITY_EVENT` | calendrier | type | flux mod |
| `CITY_TWINNED` | relation 100 | city_id | bonus + |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_ZOOM` | zoom | taille icône |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | spawn potentiels |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `NATIONAL_HOLIDAY` | event | flux x2 |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SPAWNS_FROM_CITY` | flux | origine |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_STARTS_CITY_CAMPAIGN` | action | flux + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 2 | 1500 | flux +10% | radio |
| 3 | 5000 | flux +20% | TV |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `calculateVisitorFlow` | city, zoo | float | distance |
| `isPeakHour` | now | bool | trafic |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CITY_EVENT` | Info | "C'est la fête à {city}." | event |
| `CITY_STRIKE` | Warning | "Grève : flux réduit." | event |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Identifier ville | choisir cible | densité | taille icône + tooltip |
| Comprendre flux | arbitrer | maths | panneau simple “flux” |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Marker ville | sprite skyline | petit/moyen/grand |
| Cercle influence | rayon | visible |
| Tooltip | nom + pop | hover |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | sites | iso |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_monde.md` | usage | map |
| `billeterie.md` | entrées | spawn |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir ville | clic marker | panneau |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `MAP_ZOOM` | zoom | scale |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `city_ambience_loop.mp3` | proximité ville | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `traffic_far.mp3` | ville | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `city_skyline_set.png` | sprites | 4 dirs |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `city_influence_ring.png` | cercle |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `city_lights_night.webm` | nuit | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fumée | idle | loop |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `city_gray` | #546E7A | bâtiments |
| `city_light_yellow` | #FFEE58 | fenêtres |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `city.population` | Population | Population |
| `city.wealth` | Richesse | Wealth |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cercle influence | cercle | zone |

View File

@@ -11,7 +11,12 @@ Personnage non-joueur (PNJ) qui visite le zoo. Il est la source principale de re
| Jugement | Évalue la qualité du zoo et influence la réputation. | État Zoo, Prix | Score Réputation |
## Icone de base
Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, Enfant).
Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, Enfant) et la variante (Homme/Femme).
## Variantes (homme/femme) et skins
- **Variantes** : homme/femme (et autres variantes si le catalogue le prévoit), sélectionnées par le générateur de visiteurs.
- **Thèmes** : la tenue/couleurs suivent `theme.md` (saisons, météo, ambiance).
- **Skins** : si activé, certaines variantes de visiteurs sont des skins (voir `inventaire_skins.md`) appliqués au rendu (sans impact gameplay).
## Interactions
| Acteur A | Action | Acteur B | Résultat |