docs: enrich docs/specs and remove placeholders
**Motivations:** - Make docs/specs implementation-ready without empty sections or placeholders. **Root causes:** - Multiple specs still contained non-actionable placeholders (N/A, “see above”, "..."), and inconsistent “no cache” wording. **Correctifs:** - Replace placeholders with explicit tables, structures, and typed examples. - Align “no cache / no memorization” statements where relevant. **Evolutions:** - Add a features doc entry to track the documentation enrichment effort. **Pages affectées:** - docs/specs/* - docs/features/docs-specs-enrichment.md - docs/leo.md - docs/plan-enrich-docs-specs.md
This commit is contained in:
@@ -48,7 +48,11 @@ Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou tr
|
||||
| Capacité | 1 animal | 7 animaux |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| Confort Quarantaine | 60 | 0-100 | Modifie le stress initial de l’animal lors du placement (\(-\)stress = +confort). |
|
||||
| Risque Contamination | 2% | 0-25% | Probabilité d’incident sanitaire (quarantaine prolongée, coût supplémentaire) par animal accueilli. |
|
||||
| Traçabilité | 80 | 0-100 | Qualité des infos affichées au joueur (traits révélés, historique). |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
@@ -58,7 +62,10 @@ Présent au démarrage du jeu (Tutorial ou Nouvelle Partie). Position fixe gén
|
||||
Indestructible. Ne peut pas être vendu ni déplacé (sauf si feature de réaménagement global).
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---|---|
|
||||
| Accueil Niv 4+ | Trait temporaire “Calme” (+5 Satisfaction Visiteurs à proximité après placement) | 100% | Non (effet temporaire, non génétique) |
|
||||
| Accueil Niv 7 | Trait temporaire “Confiant” (stress \(-15\) au placement) | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
@@ -87,10 +94,17 @@ Pas de mort possible en zone d'accueil (Stase). Les jauges de faim/soif/santé s
|
||||
Nourri automatiquement (coût nul ou inclus dans les frais de gestion globaux).
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A - Les visiteurs ne voient pas l'intérieur de l'accueil.
|
||||
| Action/État | Gain Attractivité | Rayon d'action |
|
||||
|---|---:|---:|
|
||||
| Façade entretenue (Propreté > 80) | +5 | 6 cases |
|
||||
| File d’attente visible (Capacité saturée) | -10 | 8 cases |
|
||||
| Livraison spectaculaire (animal rare) | +20 | 10 cases |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation Prix | Condition |
|
||||
|---|---:|---|
|
||||
| Niveau Accueil | +5% / niveau | Appliqué à la valeur du zoo (bâtiment clé non revendable). |
|
||||
| Historique sans incident | +10% | Si aucun événement `QUARANTINE_ALERT` sur 7 jours in-game. |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
@@ -106,10 +120,17 @@ N/A
|
||||
| 7 | Instantané | 100% |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût Hebdo | Maintenance |
|
||||
|---|---:|---:|
|
||||
| Consommables quarantaine | 50 pièces | 10 pièces |
|
||||
| Nettoyage & désinfection | 30 pièces | 5 pièces |
|
||||
| Contrôle vétérinaire | 80 pièces | 0 pièce (service périodique) |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A - Bâtiment administratif.
|
||||
| Trajet | Condition | Effet | Détails |
|
||||
|---|---|---|---|
|
||||
| Visiteurs passent devant | Chemin adjacent | Attraction faible | Le bâtiment n’est pas une attraction nominale, mais une façade visible peut influer sur l’ambiance. |
|
||||
| Visiteurs évitent la zone | `QUARANTINE_ALERT` actif | Déviation | Les visiteurs recalculent leur chemin pour éviter un rayon de 6 cases autour. |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
@@ -187,19 +208,19 @@ def add_animal_to_reception(reception_center, animal):
|
||||
**Notification Push** : "Votre [Animal] est arrivé à l'accueil !" envoyée si le joueur est hors ligne.
|
||||
**Emplacement** : Case Accueil.
|
||||
**Intégration** : Suite de l'action Camion.
|
||||
**Navigation** : N/A
|
||||
**Navigation** : Clic sur Accueil → Bottom Sheet “Accueil” (liste slots) → action “Placer” ouvre le mode placement sur la carte du zoo.
|
||||
**Événements** : `DELIVERY_COMPLETE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ambience_stable_soft.mp3` (léger, discret, pas intrusif).
|
||||
- **Sons** : `truck_door.mp3`, `crate_drop.mp3`.
|
||||
- **Graphiques** : Sprite Caisse en bois.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `reception_building.png` (bâtiment), `reception_icon.png` (icône), `badge_quarantine.png` (badge).
|
||||
- **Vidéos** : `delivery_short.webm` (2s, loop optionnel sur notif).
|
||||
- **Animations** : Camion qui repart.
|
||||
- **Couleurs** : Marron (Caisse).
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
- **Textes** : `RECEPTION_DELIVERY_DONE` = "Livraison effectuée", `RECEPTION_ANIMAL_ARRIVED` = "Votre {animalName} est arrivé à l'accueil !"
|
||||
- **Formes** : Bulle (notif), badge rond (état).
|
||||
|
||||
### Consultation & Acclimatation (Consultation)
|
||||
**Description UX** : Le joueur vérifie le temps restant avant de pouvoir placer l'animal.
|
||||
@@ -210,11 +231,11 @@ def add_animal_to_reception(reception_center, animal):
|
||||
**Événements** : `OPEN_RECEPTION`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_modal_soft.mp3` (jingle court).
|
||||
- **Sons** : `ui_open.mp3`
|
||||
- **Graphiques** : Style "Quarantaine" ou "Étable propre".
|
||||
- **Images** : Portrait animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `progress_fill.webm` (0.8s loop) pour la barre d’acclimatation (optionnel).
|
||||
- **Animations** : Barre de progression qui avance.
|
||||
- **Couleurs** : Orange (En cours), Vert (Prêt).
|
||||
- **Textes** : "Prêt dans X min".
|
||||
@@ -230,18 +251,18 @@ def add_animal_to_reception(reception_center, animal):
|
||||
**Événements** : `PLACE_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_confirm_place.mp3` (jingle court de confirmation).
|
||||
- **Sons** : `animal_happy.mp3` (cri de l'animal).
|
||||
- **Graphiques** : Sprite Animal.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `placement_ghost_ok.png`, `placement_ghost_ko.png` (surbrillance vert/rouge).
|
||||
- **Vidéos** : `placement_glow.webm` (1.2s, non loop).
|
||||
- **Animations** : Animal qui saute de joie au placement.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
- **Couleurs** : Vert (#2ECC71) placement valide, Rouge (#E74C3C) placement invalide, Ambre (#F39C12) état “en acclimatation”.
|
||||
- **Textes** : `BTN_PLACE` = "Placer", `RECEPTION_READY` = "Prêt"
|
||||
- **Formes** : Badge “!” (prêt), sablier (en cours).
|
||||
|
||||
### Vue Isométrique
|
||||
- **Sprite Bâtiment** : 4 directions (Nord, Sud, Est, Ouest) pour s'aligner avec la route.
|
||||
- **Sprite Bâtiment** : 4 directions isométriques (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest) pour s'aligner avec les chemins.
|
||||
- **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.
|
||||
|
||||
@@ -16,7 +16,7 @@ Action sur l'objet `Zoo` (dimensions).
|
||||
"zoo_id": "uuid",
|
||||
"dimensions": { "width": 5, "height": 6 },
|
||||
"expansion_history": [
|
||||
{ "direction": "EAST", "cost": 1000, "timestamp": "..." }
|
||||
{ "direction": "EAST", "cost": 1000, "timestamp": "timestamp" }
|
||||
],
|
||||
"max_dimensions": { "width": 20, "height": 20 }
|
||||
}
|
||||
|
||||
@@ -33,11 +33,21 @@ Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce anim
|
||||
},
|
||||
"style_id": "wood_basic",
|
||||
"status": "enum (OK, BROKEN, TAGGED)",
|
||||
"status_since": "timestamp",
|
||||
"repair_cost": "integer",
|
||||
"clean_cost": "integer",
|
||||
"cooldowns": {
|
||||
"next_interaction_at": "timestamp"
|
||||
},
|
||||
"animal_info": {
|
||||
"name": "Lion d'Afrique",
|
||||
"scientific_name": "Panthera leo",
|
||||
"conservation_status": "VU"
|
||||
},
|
||||
"i18n": {
|
||||
"title_key": "string",
|
||||
"subtitle_key": "string"
|
||||
},
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
@@ -48,6 +58,10 @@ Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce anim
|
||||
* **Placement Auto :** Le jeu détermine la meilleure position (côté sud ou est généralement, face au chemin le plus proche).
|
||||
* **Unicité :** Une seule affiche par enclos fusionné (ou une tous les X cases de périmètre).
|
||||
* **Mise à jour :** Si l'animal change (enclos vidé puis rempli avec autre chose), l'affiche se met à jour automatiquement.
|
||||
* **Dégradation** :
|
||||
* `TAGGED` : n’affecte pas la lisibilité mais réduit l’attractivité (ex. -5 rayon 6 cases) jusqu’au nettoyage.
|
||||
* `BROKEN` : la Zoopédia est inaccessible au clic, et malus attractivité plus fort (ex. -15 rayon 8 cases).
|
||||
* **Cooldown clic** : éviter les spams ; appliquer `next_interaction_at` (ex. 1s) sur ouverture Zoopédia.
|
||||
|
||||
### Algorithme de Placement
|
||||
```python
|
||||
@@ -72,6 +86,11 @@ def place_sign(enclosure):
|
||||
* **Orientation :** Le sprite doit correspondre à l'orientation du mur (4 sprites différents).
|
||||
* **Z-Index :** Doit être dessiné *après* la clôture mais *avant* les visiteurs passant devant.
|
||||
|
||||
### Messages i18n (exemples)
|
||||
* `ENCLOSURE_SIGN_OPEN` : FR "Ouvrir la Zoopédia" / EN "Open Zoopedia"
|
||||
* `ENCLOSURE_SIGN_TAGGED` : FR "Affiche taguée" / EN "Sign tagged"
|
||||
* `ENCLOSURE_SIGN_BROKEN` : FR "Affiche cassée" / EN "Sign broken"
|
||||
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
|
||||
@@ -18,45 +18,90 @@ Les visiteurs ne se déplacent pas au hasard. Ils ont des "cibles" d'intérêt.
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Propriétés de `Visiteur`.
|
||||
```json
|
||||
{
|
||||
"visitor_id": "uuid",
|
||||
"current_target": { "type": "enum('animal','shop','bench','toilet','exit')", "entity_id": "uuid" },
|
||||
"target_score": "float",
|
||||
"memory": {
|
||||
"seen_species": "string[]",
|
||||
"last_shop_at": "timestamp | null",
|
||||
"fatigue": "float (0-100)",
|
||||
"thirst": "float (0-100)"
|
||||
},
|
||||
"pathing": {
|
||||
"preferred_tiles": "enum('path','bridge')",
|
||||
"avoid_zones": "uuid[]",
|
||||
"repath_cooldown_ms": "integer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
| Caractéristique | Valeur Initiale | Type | Description |
|
||||
|---|---|---|---|
|
||||
| Fatigue | 0 | float | Monte avec la marche ; déclenche recherche de banc. |
|
||||
| Soif | 0 | float | Monte avec le temps/température ; déclenche boutique. |
|
||||
| Diversité vue | 0 | int | Compte d'espèces différentes vues. |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Enthousiasme | 50 | 0-100 | Modifie durée de visite et dépenses. |
|
||||
| Ennui | 0 | 0-100 | Si > 70, visiteur part vers sortie. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Visiteur spawn | true | Est | IA interne démarre (choix cibles). |
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Ennui | 70 | >= | Cible sortie (billeterie). |
|
||||
| Heure | fermeture | >= | Cible sortie. |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Groupe famille | Itinéraire (préférence boutique/enclos) | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
**Canicule/Grand Froid** : Réduit le temps de séjour (-30%).
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome | Compatibilité | Bonus/Malus |
|
||||
|---|---:|---|
|
||||
| Chemin pavés | 100% | fatigue -10%/min |
|
||||
| Boue | 30% | fatigue +20%/min, satisfaction - |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Été | recherche d’ombre/boutiques | soif + |
|
||||
| Hiver | recherche d’intérieur | fatigue + |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Activité | Visibilité |
|
||||
|---|---|---|
|
||||
| 10h–16h | exploration max | haute |
|
||||
| 17h–19h | achats sortie | moyenne |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Bébés visibles | + | visiteurs restent plus |
|
||||
|
||||
### Impact Mort
|
||||
Voir `visiteur.md` (Départ immédiat).
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Type Nourriture | Gain Santé | Coût | Préférence |
|
||||
|---|---:|---:|---:|
|
||||
| Boisson | soif -50 | 5 | 5 |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
**Poids des Cibles** :
|
||||
@@ -68,25 +113,39 @@ N/A
|
||||
| Banc (si fatigué) | 200 |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation Prix | Condition |
|
||||
|---|---:|---|
|
||||
| Visiteur VIP | dépense x2 | si satisfait |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Paramètre | Valeur | Unité | Détail |
|
||||
|---|---:|---|---|
|
||||
| Repath cooldown | 500 | ms | évite recalcul permanent |
|
||||
| Poids chemin | 2.0 | facteur | préférence chemin vs herbe |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Action | Dépense | Condition |
|
||||
|---|---:|---|
|
||||
| Achat boisson | 5 | soif > 50 |
|
||||
| Achat souvenir | 15-30 | proche sortie |
|
||||
|
||||
### Trajet Visiteurs
|
||||
Algorithme de choix de cible pondéré.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `TARGET_CHANGED` | nouvelle cible | path recalculé | instant |
|
||||
| `VISITOR_BORED` | ennui seuil | départ | jusqu’à sortie |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | IA basique |
|
||||
| 2 | 2000 | chemins niv 2 | préférence chemins + |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
@@ -101,7 +160,10 @@ function chooseNextTarget(visitor, zoo):
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "La foule se déplace vers une star." | animal rare visible | 2 |
|
||||
| Warn | "Les visiteurs s'ennuient." | ennui moyen > seuil | 4 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -120,16 +182,16 @@ N/A
|
||||
**Description UI** : Densité de sprites visiteurs plus élevée autour des cases "Stars".
|
||||
**Emplacement** : Grille Zoo.
|
||||
**Intégration** : Comportement IA.
|
||||
**Navigation** : N/A
|
||||
**Navigation** : Aucune (passif). Option debug : toggle “Heatmap foule” dans HUD pour visualiser les zones d’attroupement.
|
||||
**Événements** : `CROWD_GATHER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ambience_crowd_dynamic.mp3` (volume selon densité).
|
||||
- **Sons** : Rumeur de foule (volume variable selon densité).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Graphiques** : Particules “flash photo”, bulles d’émotion.
|
||||
- **Images** : `icon_camera.png`, `icon_star.png`.
|
||||
- **Vidéos** : `crowd_flash.webm` (0.6s loop, optionnel).
|
||||
- **Animations** : Applaudissements, Photos.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
- **Couleurs** : Blanc/Jaune (flash), Or (star).
|
||||
- **Textes** : `CROWD_GATHER` = "La foule se rassemble"
|
||||
- **Formes** : Bulle BD (émotions).
|
||||
|
||||
@@ -20,7 +20,7 @@ L'attraction est calculée pour chaque couple (Ville, Zoo).
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Calculé à la volée ou mis en cache.
|
||||
Calculé à la volée, sans cache (cf. règle “pas de mémorisation”).
|
||||
```json
|
||||
{
|
||||
"zoo_id": "uuid",
|
||||
@@ -30,67 +30,105 @@ Calculé à la volée ou mis en cache.
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
| Caractéristique | Valeur Initiale | Type | Description |
|
||||
|---|---|---|---|
|
||||
| Rayon attraction max | 30 | cases monde | Au-delà, attraction = 0 (plafond). |
|
||||
| Facteur ville | 1.0 | float | Multiplie le flux (population/aisance). |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Attraction brute | 0 | 0-∞ | Avant concurrence/plafonds. |
|
||||
| Flux visiteurs/jour | 0 | 0-∞ | Résultat final injecté à la billeterie. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Zoo et ville existent | true | Est | Calcul possible. |
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Zoo supprimé | true | Est | Flux devient 0. |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Soft reset | Cartographie connue | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Condition | Effet |
|
||||
|---|---|
|
||||
| Températures extrêmes régionales | réduit la volonté de voyager | flux -10% à -30% |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome / route | Effet |
|
||||
|---|---|
|
||||
| Montagne (routes lentes) | distance effective + | flux - |
|
||||
|
||||
### Impact Saisons
|
||||
**Hiver** : Réduit la volonté de voyager (-20% rayon d'attraction).
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Effet |
|
||||
|---|---|
|
||||
| Nuit | pas de départs | flux 0 vers billeterie |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Naissances médiatisées | flux + | événement “baby boom” |
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
| Cause | Conséquence | Durée |
|
||||
|---|---|---|
|
||||
| Série de morts | flux - | 24h (décroissance) |
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Prix nourriture élevé | visiteurs budget - | dépense moyenne - |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Voir formule.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Ville riche | dépense moyenne + | facteur ville > 1 |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Paramètre | Valeur | Unité | Effet |
|
||||
|---|---:|---|---|
|
||||
| Recalcul flux | 1 | jour in-game | Recalcul quotidien (ou lazy). |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Marketing ville ciblée | 500–5000 | coins | augmente facteur ville temporaire |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Trajet | Condition | Effet | Notes |
|
||||
|---|---|---|---|
|
||||
| Ville→Zoo | calcul distance | flux | distance^2 + plafond rayon |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `FLOW_UPDATED` | recalcul quotidien | met à jour overlay | instant |
|
||||
| `CITY_FESTIVAL` | événement ville | flux - | 1 jour |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Flux visible sur carte monde |
|
||||
| 2 | 2000 | réputation 300 | Rayon attraction +10% |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
@@ -104,7 +142,10 @@ function calculateDailyVisitors(zoo, city):
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "Nouvelle estimation visiteurs/jour : {n}" | recalcul | 2 |
|
||||
| Warn | "La distance réduit fortement vos visiteurs." | dist proche plafond | 3 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -123,15 +164,15 @@ N/A
|
||||
**Description UI** : Lignes pointillées mouvantes reliant les villes au zoo. Épaisseur = Volume flux. **Particules** : Petits points ou voitures circulant sur les lignes pour donner une sensation de vie.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Overlay.
|
||||
**Navigation** : N/A
|
||||
**Navigation** : Toggle “Flux visiteurs” dans le HUD carte monde → survol d’une ligne → affiche détail (ville, visiteurs/jour, facteur saison, distance).
|
||||
**Événements** : `VIEW_FLOW`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Musiques** : `ambience_world_flow.mp3` (léger, optionnel).
|
||||
- **Sons** : `ui_flow_toggle.mp3` (toggle overlay).
|
||||
- **Graphiques** : Lignes de flux.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `flow_dotted_line.png`, `car_particle.png`.
|
||||
- **Vidéos** : `flow_ants.webm` (1s loop, optionnel).
|
||||
- **Animations** : Pointillés qui avancent (effet fourmis).
|
||||
- **Couleurs** : Blanc ou Vert fluo.
|
||||
- **Textes** : "150 visiteurs/jour".
|
||||
|
||||
@@ -29,7 +29,7 @@ Bâtiment d'entrée du zoo. Point d'apparition et de départ des visiteurs.
|
||||
"current_queue_length": "integer"
|
||||
},
|
||||
"entry_log": [
|
||||
{ "timestamp": "...", "visitor_count": 5, "revenue": 50 }
|
||||
{ "timestamp": "timestamp", "visitor_count": 5, "revenue": 50 }
|
||||
],
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
|
||||
@@ -41,10 +41,18 @@ Sélection hiérarchique : **Famille** > **Spécialisation**.
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
| Caractéristique | Valeur Initiale | Type | Description |
|
||||
|---|---:|---|---|
|
||||
| Fréquence min | 5 | minutes | Intervalle minimal entre actions. |
|
||||
| Fréquence max | 60 | minutes | Intervalle maximal (profil lent). |
|
||||
| Budget action | 10% | % coins | Part des coins max utilisable par action (plafond anti-ruine). |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Agressivité marché | 50 | 0-100 | Propension à acheter/vendre. |
|
||||
| Prudence survie | 50 | 0-100 | Propension à acheter nourriture/soins. |
|
||||
| Priorité expansion | 20 | 0-100 | Propension à agrandir carte/améliorer bâtiments. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
@@ -54,46 +62,72 @@ Activation par joueur (déconnexion) ou Spawn serveur (Bot permanent).
|
||||
Connexion joueur.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Profil choisi | Paramètres logique | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Condition | Effet |
|
||||
|---|---|
|
||||
| Froid/Chaud extrême | Augmente achats régulation/biome | priorité survie + |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome | Effet |
|
||||
|---|---|
|
||||
| Biome défavorable à la majorité | Achats “changement milieu” | priorité survie + |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Printemps | Focus reproduction | priorité éleveur + |
|
||||
| Hiver | Focus survie | priorité conservateur + |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Effet |
|
||||
|---|---|
|
||||
| Nuit | Actions limitées | fréquence + lente |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Score survie élevé | Bot tente reproduction | profil éleveur |
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
| Cause | Conséquence | Durée |
|
||||
|---|---|---|
|
||||
| Série de morts | Bot achète nourriture/soins | 24h |
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Stock bas | Achat immédiat | seuil profil |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
| Action/État | Gain Attractivité | Rayon d'action |
|
||||
|---|---:|---:|
|
||||
| Placements optimisés | + | zoo du bot |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Profil commerçant | Valeur cash + | ventes fréquentes |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Fréquence Action** : 1 action toutes les 5 à 60 minutes (selon profil).
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Achats auto nourriture | variable | coins | selon seuil |
|
||||
| Achat upgrades | variable | coins | selon priorité |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Trajet | Règle | Notes |
|
||||
|---|---|---|
|
||||
| Rapport d’absence → décisions | Script profilé | Le bot ne “se déplace” pas : il calcule des actions sur l’état du zoo et sur le marché. |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
@@ -101,7 +135,10 @@ N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Profil basique |
|
||||
| 2 | 5000 | Réputation 300 | Stratégies avancées (arbitrage) |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
@@ -144,11 +181,11 @@ function runBotLogic(bot, zoo):
|
||||
**Événements** : `SELECT_BOT_PROFILE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_bot_family_pick.mp3` (jingle court).
|
||||
- **Sons** : `card_flip.mp3`.
|
||||
- **Graphiques** : Illustrations des familles (ex: Conservateur avec bouclier, Commerçant avec bourse).
|
||||
- **Images** : Portraits Bots.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `bot_family_cards.webm` (1s loop, optionnel).
|
||||
- **Animations** : Flip de carte au choix.
|
||||
- **Couleurs** : Code couleur par famille (Vert=Conservateur, Jaune=Commerçant, etc.).
|
||||
- **Textes** : Titres et Descriptions courtes.
|
||||
@@ -162,12 +199,12 @@ function runBotLogic(bot, zoo):
|
||||
**Navigation** : Lire -> Fermer.
|
||||
**Événements** : `SHOW_REPORT`.
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_report_open.mp3` (jingle court).
|
||||
- **Sons** : `notification.mp3`.
|
||||
- **Graphiques** : Icône Robot.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Images** : `icon_robot.png`, `report_bg.png`.
|
||||
- **Vidéos** : `report_scroll.webm` (0.8s loop, optionnel).
|
||||
- **Animations** : Apparition slide-in + highlight des lignes importantes.
|
||||
- **Couleurs** : Gris/Métal.
|
||||
- **Textes** : Liste des actions.
|
||||
- **Formes** : Liste à puces.
|
||||
|
||||
@@ -211,5 +211,5 @@ function processShop(shop, visitors):
|
||||
- **Vidéos** : Time-lapse construction (accéléré).
|
||||
- **Animations** : Petit effet de poussière à la pose.
|
||||
- **Couleurs** : Bleu (Blueprint).
|
||||
- **Textes** : "Construction...".
|
||||
- **Textes** : "Construction".
|
||||
- **Formes** : Grille de placement.
|
||||
|
||||
@@ -171,12 +171,12 @@ function updateWorldMap(map, deltaTime):
|
||||
**Description UI** : Nuages ou zone sombre en périphérie.
|
||||
**Emplacement** : Bords Carte.
|
||||
**Intégration** : Mask.
|
||||
**Navigation** : N/A
|
||||
**Événements** : N/A
|
||||
**Navigation** : Zoom-out via upgrade carte ; au clic sur une zone masquée, afficher un tooltip “Zone non explorée”.
|
||||
**Événements** : `FOG_HOVER`, `FOG_CLICK_BLOCKED`
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Musiques** : `ambience_fog_soft.mp3` (optionnel, très discret).
|
||||
- **Sons** : `fog_whoosh.mp3` (au reveal), `ui_denied.mp3` (clic zone bloquée).
|
||||
- **Graphiques** : Texture Nuages.
|
||||
- **Images** : Masque alpha (bords flous).
|
||||
- **Vidéos** : Effet de brume (particules).
|
||||
|
||||
@@ -39,7 +39,33 @@ La carte du zoo est l'espace principal de gestion du joueur où il place ses bâ
|
||||
"owner_id": "uuid",
|
||||
"width": "integer (init 5)",
|
||||
"height": "integer (init 6)",
|
||||
"cases": [ ... ]
|
||||
"cases": [
|
||||
{
|
||||
"id": "uuid",
|
||||
"grid": { "x": "integer", "y": "integer" },
|
||||
"iso": { "iso_x": "integer", "iso_y": "integer" },
|
||||
"z_index": "integer",
|
||||
"biome": "enum('prairie','ocean','montagne')",
|
||||
"terrain": {
|
||||
"ground_type": "enum('herbe','terre','sable','roche','eau')",
|
||||
"path_type": "enum('none','terre','gravier','paves','bois_pont')",
|
||||
"decoration_ids": "uuid[]"
|
||||
},
|
||||
"occupancy": {
|
||||
"type": "enum('empty','animal','building','service','enclosure_fence','water_obstacle')",
|
||||
"entity_id": "uuid | null"
|
||||
},
|
||||
"render": {
|
||||
"tile_variant": "string (auto-tiling key)",
|
||||
"occluder": "boolean",
|
||||
"click_hitbox": "enum('tile','base_sprite','custom_polygon')"
|
||||
},
|
||||
"timestamps": {
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -18,18 +18,37 @@ Une case est l'unité élémentaire de la grille (Zoo ou Monde).
|
||||
{
|
||||
"x": "integer",
|
||||
"y": "integer",
|
||||
"grid_id": "string (stable key: `${x}:${y}`)",
|
||||
"owner_id": "uuid | null (null = carte neutre/monde)",
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"biome_id": "integer",
|
||||
"temperature_offset": "float",
|
||||
"biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
|
||||
"temperature_offset": "float (°C, additive)",
|
||||
"content_ref": "uuid | null",
|
||||
"content_type": "string",
|
||||
"content_type": "enum('empty','animal','building','visitor','staff','decoration','path','bridge','water','fence')",
|
||||
"fertility_level": "float (0-100)",
|
||||
"state_flags": ["frozen", "dry", "dirty", "fertilized"],
|
||||
"cleanliness_level": "float (0-100)",
|
||||
"state_flags": [
|
||||
"enum('frozen','dry','dirty','fertilized','muddy','snowy','flooded','trampled')"
|
||||
],
|
||||
"render": {
|
||||
"tile_variant": "string (auto-tiling key)",
|
||||
"occluder": "boolean",
|
||||
"hitbox": "enum('tile','base_sprite','custom_polygon')"
|
||||
},
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
}
|
||||
```
|
||||
|
||||
### Contraintes (Invariants)
|
||||
* **Unicité** : (`x`,`y`) est unique dans une grille.
|
||||
* **Cohérence contenu** : si `content_type === 'empty'` alors `content_ref === null`.
|
||||
* **Température** : `temperature_offset` s’applique additivement à la température “biome” et aux modificateurs (saison, jour/nuit).
|
||||
* **Z-index isométrique** : `z_index` est dérivé principalement de `y` (et secondairement de `x`) pour garantir le recouvrement correct.
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```python
|
||||
@@ -48,6 +67,13 @@ def fertilize_case(case, player):
|
||||
return success("CASE_FERTILIZED")
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "Sol fertilisé." | `state_flags` ajoute `fertilized` | 2 |
|
||||
| Warn | "Fonds insuffisants." | `player.money < cost` | 4 |
|
||||
| Warn | "Case occupée : action indisponible." | `content_type` non compatible | 3 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 0. Direction Artistique & Vue
|
||||
@@ -69,9 +95,11 @@ def fertilize_case(case, player):
|
||||
**Événements** : `FERTILIZE_SOIL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Bruit de poudre.
|
||||
- **Musiques** : `ambience_garden_soft.mp3` (léger, discret).
|
||||
- **Sons** : `scatter.mp3`.
|
||||
- **Graphiques** : Particules vertes/brunes.
|
||||
- **Images** : Texture terre riche (plus foncée).
|
||||
- **Animations** : Poussière qui retombe.
|
||||
- **Couleurs** : Marron foncé.
|
||||
- **Textes** : `TOOL_FERTILIZE` = "Engrais", `CASE_FERTILIZED` = "Sol fertilisé"
|
||||
- **Formes** : Curseur rond (outil), surbrillance tuile.
|
||||
|
||||
@@ -30,11 +30,27 @@ Case spécifique à la grille du zoo, pouvant accueillir les éléments de gesti
|
||||
Hérite de `Case (Générique)`.
|
||||
```json
|
||||
{
|
||||
"last_visit_time": "timestamp",
|
||||
"quality_score": "float (0-100)"
|
||||
"last_visit_time": "timestamp | null",
|
||||
"visit_count_total": "integer",
|
||||
"visit_count_day": "integer",
|
||||
"heatmap_score": "float (0-100)",
|
||||
"quality_score": "float (0-100)",
|
||||
"pathing": {
|
||||
"walkable": "boolean",
|
||||
"movement_cost": "float (>= 1.0)",
|
||||
"preferred": "boolean (true for path tiles)"
|
||||
},
|
||||
"zoo_specific_flags": [
|
||||
"enum('premium_spot','near_entry','near_shop','near_enclosure','staff_only')"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Contraintes (Invariants)
|
||||
* **Walkable** : une case avec `content_type` bâtiment/animal est généralement `walkable=false` pour les visiteurs (sauf exceptions design).
|
||||
* **last_visit_time** : mis à jour uniquement quand un visiteur “observe” réellement (pas juste traverse) si la mécanique de “visite” est distincte.
|
||||
* **movement_cost** : > 1.0 sur herbe/boue, = 1.0 sur chemins, < 1.0 interdit (évite vitesse infinie).
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
@@ -43,6 +59,8 @@ Hérite de `Case (Générique)`.
|
||||
|
||||
### Scores Initiaux
|
||||
**Passages** : 0 (Heatmap de fréquentation).
|
||||
**Propreté** : 100 (aucun déchet).
|
||||
**Coût de marche** : 1.2 (herbe) par défaut, 1.0 (chemin) si la case est convertie.
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
@@ -114,6 +132,8 @@ function checkAnimalDisappearance(case):
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `CASE_DIRTY` | Info | "Une case est sale." |
|
||||
| `PATH_BLOCKED` | Warning | "Chemin bloqué : les visiteurs recalculent leur trajet." |
|
||||
| `ANIMAL_NOT_VISITED` | Warning | "Un animal n'a pas été observé depuis longtemps." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
|
||||
@@ -15,10 +15,25 @@ Les chemins sont des cases aménagées permettant aux visiteurs et au staff de s
|
||||
```json
|
||||
{
|
||||
"type": "path",
|
||||
"material": "gravel",
|
||||
"material": "enum('terre','gravier','paves','bois','tapis_rouge')",
|
||||
"level": "integer (1-7)",
|
||||
"x": 10,
|
||||
"y": 12,
|
||||
"connected_neighbors": ["N", "S", "E"],
|
||||
"connected_neighbors": ["enum('N','S','E','W')"],
|
||||
"movement": {
|
||||
"visitor_speed_multiplier": "float (>= 1.0)",
|
||||
"staff_speed_multiplier": "float (>= 1.0)",
|
||||
"visitor_preference_weight": "integer (0-100)"
|
||||
},
|
||||
"economy": {
|
||||
"build_cost": "integer (coins)",
|
||||
"upkeep_cost_per_day": "integer (coins)",
|
||||
"attractiveness_bonus": "integer"
|
||||
},
|
||||
"render": {
|
||||
"auto_tile_key": "string",
|
||||
"variant_seed": "integer (for random subtle variation)"
|
||||
},
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
@@ -28,6 +43,15 @@ Les chemins sont des cases aménagées permettant aux visiteurs et au staff de s
|
||||
## 2. Règles Métier
|
||||
* **Connexion Automatique :** Les textures des chemins se connectent automatiquement aux chemins adjacents (Auto-tiling).
|
||||
* **Vitesse :** Bonus de vitesse de déplacement pour les entités sur les chemins.
|
||||
* Terre : visiteurs x1.15, staff x1.25
|
||||
* Gravier : visiteurs x1.25, staff x1.35
|
||||
* Pavés : visiteurs x1.35, staff x1.45
|
||||
* Bois (pont / passerelle) : visiteurs x1.20, staff x1.30
|
||||
* Tapis rouge (VIP) : visiteurs VIP x1.50 (sinon x1.10), bonus satisfaction +2/min sur la tuile
|
||||
* **Attraction** : les visiteurs préfèrent rester sur les chemins quand ils se déplacent (`visitor_preference_weight`).
|
||||
* **Construction** : une tuile chemin ne peut pas être posée si la case est occupée par un bâtiment/animal/enclos (sauf règle “chemin sous enclos” explicitement définie ailleurs).
|
||||
* **Auto-tiling** : le `auto_tile_key` dépend de `connected_neighbors` et de `material` (ex. `paves_NSE`).
|
||||
* **Cas limites** : conversion d’un chemin sous un visiteur → appliquer au tick suivant, pas instantanément (évite téléportations).
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -53,3 +77,5 @@ 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).
|
||||
* **Lisibilité iso** : les bordures de chemin doivent rester visibles même sous l’occlusion partielle (contraste + outline discret).
|
||||
* **Hitbox** : clic sur le losange (tuile) sélectionne la tuile chemin ; un clic sur une entité au-dessus a priorité (z-order + hit testing).
|
||||
|
||||
@@ -62,7 +62,7 @@ function finalizeAuction(auction):
|
||||
| :--- | :--- | :--- |
|
||||
| `BID_PLACED` | Info | "Offre placée avec succès." |
|
||||
| `OUTBID` | Alerte | "Vous avez été surenchéri !" |
|
||||
| `AUCTION_WON` | Succès | "Vous avez remporté l'enchère ! Livraison en cours..." |
|
||||
| `AUCTION_WON` | Succès | "Vous avez remporté l'enchère ! Livraison en cours." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -85,11 +85,11 @@ function finalizeAuction(auction):
|
||||
**Événements** : `HOVER_OFFER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_market_hover.mp3` (jingle discret optionnel).
|
||||
- **Sons** : `hover_soft.mp3`.
|
||||
- **Graphiques** : Cadre Offre (Doré si rare).
|
||||
- **Images** : Icône Animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `offer_hover_glow.webm` (0.6s loop, optionnel).
|
||||
- **Animations** : Prix qui clignote si nouvelle enchère.
|
||||
- **Couleurs** : Vert (Abordable), Rouge (Trop cher).
|
||||
- **Textes** : "Lapin Rare - 500$".
|
||||
@@ -104,15 +104,15 @@ function finalizeAuction(auction):
|
||||
**Événements** : `PLACE_BID`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_market_bid.mp3` (jingle court).
|
||||
- **Sons** : `bid_placed.mp3` (bruit de marteau).
|
||||
- **Graphiques** : Icône Marteau.
|
||||
- **Images** : Portrait Animal HD.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `bid_counter_up.webm` (0.8s loop, optionnel).
|
||||
- **Animations** : Compteur prix qui monte.
|
||||
- **Couleurs** : Bouton Vert.
|
||||
- **Textes** : "Enchérir".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Boutons rapides (+10/+50/+100), champ numérique.
|
||||
|
||||
### Sablier de Validation (Attente)
|
||||
**Description UX** : L'enchère est remportée, le transfert est en cours (10 min).
|
||||
@@ -120,19 +120,19 @@ function finalizeAuction(auction):
|
||||
**Notification Push** : "Enchère remportée ! Animal livré." à la fin du timer.
|
||||
**Emplacement** : Carte Monde & HUD.
|
||||
**Intégration** : Statut "En cours".
|
||||
**Navigation** : N/A
|
||||
**Navigation** : Clic sur sablier dans HUD → ouvre le détail transaction (temps restant, statut, destination).
|
||||
**Événements** : `TIMER_START`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_timer_soft.mp3` (optionnel, très discret).
|
||||
- **Sons** : `tick_tock.mp3` (ambiance très discrète si focus).
|
||||
- **Graphiques** : Sablier animé.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `icon_hourglass.png`, `badge_pending.png`.
|
||||
- **Vidéos** : `hourglass_flow.webm` (1s loop, optionnel).
|
||||
- **Animations** : Sable qui coule.
|
||||
- **Couleurs** : Orange.
|
||||
- **Textes** : "Validation : MM:SS".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Badge rond (HUD), icône sur slot.
|
||||
|
||||
### Activité "Clic" (Gameplay)
|
||||
**Description UX** : Pendant les 10 min, le joueur peut cliquer sur le sablier pour "accélérer" (symboliquement) ou gagner un petit bonus (XP/Pièce) pour patienter.
|
||||
@@ -143,12 +143,12 @@ function finalizeAuction(auction):
|
||||
**Événements** : `CLICK_HOURGLASS`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_click_reward.mp3` (jingle court).
|
||||
- **Sons** : `sand_shake.mp3`. **Design ASMR** : Bruit de sable qui crisse ou petit choc mat.
|
||||
- **Graphiques** : Particules de sable.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `sand_particle.png`.
|
||||
- **Vidéos** : `hourglass_shake.webm` (0.5s non loop, optionnel).
|
||||
- **Animations** : Secousse.
|
||||
- **Couleurs** : Doré.
|
||||
- **Textes** : "+1 XP".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Bouton rond (tap cible), badge sablier (HUD).
|
||||
|
||||
@@ -14,9 +14,12 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
|
||||
### Données (JSON)
|
||||
```json
|
||||
{
|
||||
"enclosure_id": "enclosure_lions_01",
|
||||
"animal_type": "lion",
|
||||
"biome_type": "savanna",
|
||||
"enclosure_id": "uuid",
|
||||
"owner_zoo_id": "uuid",
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"animal_type": "string (ref inventaire_animaux)",
|
||||
"biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
|
||||
"cells": [
|
||||
{"x": 10, "y": 10},
|
||||
{"x": 10, "y": 11},
|
||||
@@ -29,6 +32,24 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
|
||||
"cleanliness": 85,
|
||||
"fence_health": 100,
|
||||
"decoration_score": 15,
|
||||
"perimeter_edges": "integer",
|
||||
"fence_style_id": "string (skin/theme)",
|
||||
"sign": {
|
||||
"enabled": "boolean",
|
||||
"sign_id": "uuid | null"
|
||||
},
|
||||
"render": {
|
||||
"auto_tile_key": "string",
|
||||
"fence_segments": [
|
||||
{
|
||||
"edge": "enum('N','S','E','W')",
|
||||
"x": "integer",
|
||||
"y": "integer",
|
||||
"variant": "string",
|
||||
"occluder": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
@@ -38,6 +59,14 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
|
||||
### Règles Métier
|
||||
* **Algorithme de Fusion :** À chaque placement/suppression de case enclos, recalculer les composants connectés (Connected Components) pour mettre à jour les murs.
|
||||
* **Murs :** Les murs ne sont générés que sur les bords de la zone connectée qui ne touchent pas une autre case du même enclos.
|
||||
* **Cohérence espèce** : un composant connecté ne peut contenir qu’un `animal_type` nominal. Si une case est convertie, elle déclenche un split/merge.
|
||||
* **Capacité** : `capacity = floor(area * capacity_per_tile)` où `capacity_per_tile` dépend de l’espèce (valeur par défaut 1.5).
|
||||
* **Propreté** : décroît par présence animale et par visiteurs proches ; remonte via employé (soigneur/nourisseur selon design) et/ou nettoyage.
|
||||
|
||||
### Cas limites (Edge cases)
|
||||
* **Split** : retirer une case centrale peut séparer l’enclos en 2 composants → créer 2 enclos (nouveaux `enclosure_id`) et recalculer clôtures/affiches.
|
||||
* **Pont/chemin** : une case chemin/pont adjacente ne fait pas partie de l’enclos mais influence la pose de l’affiche (priorité visibilité).
|
||||
* **Occlusion** : si un segment de clôture masque l’animal (S/E), utiliser variante basse ou alpha réduit.
|
||||
|
||||
## 6. Annexes UX/UI
|
||||
|
||||
@@ -51,6 +80,7 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
|
||||
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
|
||||
|
||||
### 0. Direction Artistique & Vue
|
||||
* **Note** : ce bloc double un autre bloc similaire ; les deux sont conservés. Celui-ci précise les règles de grille/profondeur.
|
||||
* **Vue** : Isométrique (2.5D).
|
||||
* **Grille** : Les déplacements se font sur une grille losange.
|
||||
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
|
||||
@@ -64,3 +94,8 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
|
||||
* **Visuel Barrières :** Génération procédurale des barrières uniquement sur le pourtour (Auto-tiling). Fusion visuelle des barrières si adjacents.
|
||||
* **Isométrique :** Les barrières au Sud et à l'Est doivent être semi-transparentes ou plus basses pour ne pas cacher les animaux.
|
||||
* **Signalétique :** Affiche de l'animal visible sur la clôture.
|
||||
|
||||
### Interactions (sélection / inspection)
|
||||
* **Sélection enclos** : clic sur une clôture ou sur une case enclos ouvre un panneau “Enclos”.
|
||||
* **Panneau** : espèce, population/capacité, propreté, santé clôture, bonus déco, bouton “Améliorer clôture”, bouton “Déplacer affiche” (si optionnel).
|
||||
* **Erreurs** : tentative d’ajouter un animal d’une autre espèce dans un enclos fusionné → refus + message.
|
||||
|
||||
@@ -69,17 +69,30 @@ Les états négatifs (Sale, Malade) repoussent les visiteurs.
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Contexte | État | Effet vitesse | Condition | Notes |
|
||||
|---|---|---:|---|---|
|
||||
| Visiteurs | “Confort OK” | x1.0 | Température 5–30°C, sol non boueux | Vitesse nominale. |
|
||||
| Visiteurs | “Stress” | x0.85 | Animal malade visible / zone sale | Les visiteurs ralentissent pour observer/éviter. |
|
||||
| Animaux | “Faim” | x0.7 | `hunger > 70` | Animation lente, impact visuel. |
|
||||
| Animaux | “Heureux” | x1.1 | Conditions idéales + visite récente | Sautillements, micro-boost. |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| État | Coût | Unité | Déclencheur | Règle |
|
||||
|---|---:|---|---|---|
|
||||
| “Sale” | 10 | pièces / case / jour | Déchets non ramassés | Nettoyage automatique si employé dédié, sinon manuel. |
|
||||
| “Malade” | 50 | pièces / animal | Maladie / mort proche | Frais vétérinaires ; si non payés, risque de mort augmente. |
|
||||
| “T° critique” | 10 | pièces / degré / jour | Chauffage/Clim régule | Dépend de `temperature.md` (régulateurs). |
|
||||
|
||||
### Trajet Visiteurs
|
||||
**Fuite** : Les visiteurs évitent les animaux avec l'état "Malade".
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `STATE_APPLIED` | Ajout d’un flag visuel | Met à jour rendu | Instantané |
|
||||
| `STATE_CLEARED` | Retour à la normale | Retire overlay/particules | Instantané |
|
||||
| `STATE_CRITICAL` | Seuil critique franchi | Alerte + focus optionnel | Tant que critique |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
|
||||
@@ -111,7 +111,9 @@ function getCollectionBonus(player):
|
||||
count = countDistinctSpecies(player.animals)
|
||||
if count >= 75: return 0.20
|
||||
if count >= 50: return 0.10
|
||||
// ...
|
||||
if count >= 30: return 0.05
|
||||
if count >= 15: return 0.02
|
||||
if count >= 5: return 0.01
|
||||
return 0
|
||||
```
|
||||
|
||||
|
||||
@@ -32,7 +32,14 @@ Changement toutes les X heures ou jours.
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir liste ci-dessus.
|
||||
| Météo | Modificateur Température | Notes |
|
||||
|---|---:|---|
|
||||
| Ensoleillé | +1°C | Bonus attractivité. |
|
||||
| Nuageux | 0°C | Neutre. |
|
||||
| Pluvieux | 0°C | Humidité, pousse herbe. |
|
||||
| Orage | 0°C | Stress animaux. |
|
||||
| Neige | -5°C | Risque froid. |
|
||||
| Canicule | +5°C | Risque chaud. |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
**Réaction** : La pluie remplit les mares (visuel). La neige couvre le sol.
|
||||
@@ -54,7 +61,14 @@ Voir liste ci-dessus.
|
||||
**Pousse** : Pluie = Herbe pousse plus vite.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Voir liste ci-dessus.
|
||||
| Météo | Modificateur visiteurs | Notes |
|
||||
|---|---:|---|
|
||||
| Ensoleillé | +10% | Confort. |
|
||||
| Nuageux | 0% | Neutre. |
|
||||
| Pluvieux | -15% | Sans abris, départs plus rapides. |
|
||||
| Orage | -30% | Peur, incidents. |
|
||||
| Neige | -20% | Froid, sauf événements. |
|
||||
| Canicule | -10% | Sauf glaces/ombre (boutiques). |
|
||||
|
||||
### Impact Valeur
|
||||
**Ventes** : Parapluies vs Glaces.
|
||||
|
||||
@@ -24,7 +24,23 @@
|
||||
Table statique (Reference Data).
|
||||
|
||||
### Caractéristiques Initiales
|
||||
Voir liste ci-dessus.
|
||||
| Milieu | Couleur | T° base (°C) | Walkable | Notes |
|
||||
|---|---|---:|---|---|
|
||||
| Prairie Tendre | Vert clair | 20 | Oui | Biome neutre de départ. |
|
||||
| Forêt Dense | Vert foncé | 18 | Oui | Bonus ombre (été). |
|
||||
| Savane | Jaune/Ocre | 28 | Oui | Favorise espèces chaudes. |
|
||||
| Désert | Sable | 38 | Oui | Coût eau élevé. |
|
||||
| Plage | Beige | 30 | Oui | Transition océan. |
|
||||
| Océan Surface | Bleu clair | 22 | Non (sans pont) | Aquatique. |
|
||||
| Océan Profond | Bleu foncé | 10 | Non | Infranchissable, pont interdit si “profond”. |
|
||||
| Récif | Corail | 24 | Non (sans pont) | Visuel riche, attractivité. |
|
||||
| Montagne Basse | Gris vert | 12 | Oui | Ralentit camions. |
|
||||
| Roche | Gris | 8 | Oui | Froid, peu fertile. |
|
||||
| Sommet Enneigé | Blanc | -5 | Oui | Hiver permanent. |
|
||||
| Volcanique | Noir/Rouge | 45 | Oui | Danger chaleur. |
|
||||
| Marécage | Vert boue | 16 | Oui | Boue, maladies. |
|
||||
| Toundra | Bleu gris | 0 | Oui | Froid, adapté polaire. |
|
||||
| Jungle | Vert saturé | 32 | Oui | Humidité, croissance. |
|
||||
|
||||
### Scores Initiaux
|
||||
**Surface** : 0 cases.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Liste des Incidents
|
||||
1. **Soif** : "J'ai soif !" -> Nécessite un stand de boisson ou une boutique proche.
|
||||
2. **Fatigue** : "J'ai mal aux pieds..." -> Nécessite un banc.
|
||||
2. **Fatigue** : "J'ai mal aux pieds" -> Nécessite un banc.
|
||||
3. **Saleté** : "C'est sale ici !" -> Nécessite un nettoyage (clic) ou une poubelle.
|
||||
4. **Frustration** : "On ne voit rien !" -> Animal trop loin ou caché.
|
||||
5. **Envie** : "Je veux une peluche !" -> Nécessite une boutique de souvenirs.
|
||||
|
||||
@@ -69,7 +69,12 @@ Fin de durée saison.
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir liste ci-dessus.
|
||||
| Saison | Modificateur Global | Notes |
|
||||
|---|---:|---|
|
||||
| Printemps | +0°C | Référence neutre. |
|
||||
| Été | +10°C | Peut déclencher canicule via météo. |
|
||||
| Automne | -2°C | Accentue pluie/vent. |
|
||||
| Hiver | -15°C | Peut déclencher neige/vague de froid via météo. |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
**Adaptation** : Les biomes réagissent visuellement (Neige sur Montagne en Hiver).
|
||||
@@ -82,16 +87,29 @@ Voir liste ci-dessus.
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
Voir liste ci-dessus.
|
||||
| Saison | Modificateur | Condition |
|
||||
|---|---:|---|
|
||||
| Printemps | +20% | Bonus général (sauf espèces “solitaires” si définies). |
|
||||
| Été | +0% | Neutre. |
|
||||
| Automne | +0% | Neutre. |
|
||||
| Hiver | -50% | Sauf espèces adaptées au froid (cf. `inventaire_milieux.md`). |
|
||||
|
||||
### Impact Mort
|
||||
Voir liste ci-dessus.
|
||||
| Saison | Risque additionnel | Condition |
|
||||
|---|---:|---|
|
||||
| Été | +10% | Pour espèces froides si pas de régulation. |
|
||||
| Hiver | +20% | Pour espèces tropicales si pas de régulation. |
|
||||
|
||||
### Impact Nourriture
|
||||
**Disponibilité** : Fruits abondants en Été (Prix bas), rares en Hiver (Prix haut).
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Voir liste ci-dessus.
|
||||
| Saison | Modificateur visiteurs | Notes |
|
||||
|---|---:|---|
|
||||
| Printemps | x1.0 | Standard. |
|
||||
| Été | x1.5 | Vacances. |
|
||||
| Automne | x0.8 | Pluie/vent. |
|
||||
| Hiver | x0.6 | Froid, sauf événements spéciaux. |
|
||||
|
||||
### Impact Valeur
|
||||
**Offre/Demande** : Prix des glaces x2 en Été.
|
||||
|
||||
@@ -14,7 +14,7 @@ Interface de gestion permettant au joueur de visualiser, trier et équiper les
|
||||
|
||||
## 4. Interactions
|
||||
* **Ouverture :** Depuis le menu profil ou la boutique.
|
||||
* **Filtrage :** Par catégorie (Chapeaux, T-shirts, Zoo...), par thème (Jungle, Espace...) ou par rareté.
|
||||
* **Filtrage :** Par catégorie (Chapeaux, T-shirts, Zoo), par thème (Jungle, Espace) ou par rareté.
|
||||
* **Sélection :** Clic sur un item pour voir les détails et le bouton "Équiper".
|
||||
|
||||
## 5. Annexes Techniques
|
||||
|
||||
@@ -92,10 +92,21 @@ Suppression compte.
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Domaine | Paramètre | Valeur | Unité | Règle |
|
||||
|---|---|---:|---|---|
|
||||
| Camion | Actions/minute | 6 | actions | Limite anti-spam côté UI (évite double-clic achats/ventes). |
|
||||
| Nurserie | Ouverture panel | 250 | ms | Transition UI (snappy) pour boucles fréquentes. |
|
||||
| Accueil | Placement animal | 1 | interaction | Tap-to-select → Tap-to-place en 1 geste (accessibilité). |
|
||||
| Recherche | Lancement projet | 1 | clic | 1 clic depuis menu achats → centre recherche → projet. |
|
||||
| Labo | Achat offre rare | 1 | drag/drop | Alternatif : tap offre → tap camion (mobile). |
|
||||
| Visite | Pan/zoom | 60 | FPS | Cible de fluidité sur la carte isométrique. |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition | Impact |
|
||||
|---|---:|---|---|---|
|
||||
| Parking | 0–5 | pièces / visite | Selon politique du joueur | Ajuste satisfaction visiteurs et revenus. |
|
||||
| Marketing | 0–5000 | pièces / action | Campagne publicitaire | Augmente affluence temporaire. |
|
||||
| Skins / thèmes | 0–2000 | pièces / item | Achat cosmétique | Aucun impact gameplay (sauf attractivité visuelle si spécifié ailleurs). |
|
||||
|
||||
### Trajet Visiteurs
|
||||
**Design** : Le joueur trace les routes.
|
||||
@@ -147,11 +158,11 @@ function playerAction(action):
|
||||
**Événements** : `UI_CLICK`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_hud_ambience.mp3` (très léger, optionnel, volume 15%).
|
||||
- **Sons** : `ui_click.mp3`.
|
||||
- **Graphiques** : Style UI "Bois et Pierre" ou "Moderne Clean".
|
||||
- **Images** : Icônes (Pièce, Fiole, Marteau, Carte).
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `hud_counters_hint.webm` (micro-anim 1s, loop, optionnel sur tutoriel).
|
||||
- **Animations** : Compteurs qui défilent quand gain/perte.
|
||||
- **Couleurs** : Or, Bleu, Blanc.
|
||||
- **Textes** : Chiffres, Labels menus.
|
||||
@@ -166,12 +177,12 @@ function playerAction(action):
|
||||
**Événements** : `SAVE_PROFILE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_profile_open.mp3` (jingle court).
|
||||
- **Sons** : `save_success.mp3`.
|
||||
- **Graphiques** : Portraits de bots.
|
||||
- **Images** : Avatars joueurs.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `profile_avatar_spin.webm` (aperçu rotation/pose, 2s, loop).
|
||||
- **Animations** : Checkmark vert.
|
||||
- **Couleurs** : Bleu UI.
|
||||
- **Textes** : Description des bots ("Le Conservateur : Achète de la nourriture...").
|
||||
- **Textes** : Description des bots ("Le Conservateur : Achète de la nourriture, évite les risques").
|
||||
- **Formes** : Cartes de sélection.
|
||||
|
||||
@@ -93,7 +93,7 @@ Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie.
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Fertilité Assistée | +20% | Si recherche "Fécondation In Vitro" débloquée |
|
||||
| Clonage | N/A (Création artificielle) | Remplace la reproduction naturelle pour les espèces éteintes |
|
||||
| Clonage | Reproduction Naturelle = 0%, Production par Synthèse = 100% | Si l'espèce est éteinte ou si l’option \"Synthèse\" est utilisée au lieu d’un cycle de reproduction |
|
||||
|
||||
#### Impact Mort
|
||||
| Cause | Conséquence | Durée |
|
||||
|
||||
@@ -7,7 +7,7 @@ Le milieu représente l'environnement écologique d'une case, défini par sa cou
|
||||
- **Prairie** (Tiers Gauche)
|
||||
- **Océan** (Tiers Milieu)
|
||||
- **Montagne** (Tiers Droite)
|
||||
- *Note : D'autres milieux (Forêt, Désert...) peuvent être définis par des couleurs intermédiaires.*
|
||||
- *Note : D'autres milieux (Forêt, Désert, Savane, Jungle, Marécage, Toundra, Volcanique) peuvent être définis par des couleurs intermédiaires.*
|
||||
|
||||
## Impact
|
||||
- **Survie** : Chaque animal a un milieu de prédilection. Un écart trop important entre la couleur de la case et la couleur idéale de l'animal entraîne stress, maladie et mort.
|
||||
|
||||
@@ -144,7 +144,7 @@ function handleBabyDeath(baby):
|
||||
- **Sons** : Bruit de tonnerre lointain.
|
||||
- **Graphiques** : Crâne (icône).
|
||||
- **Images** : Portrait du bébé avec ruban noir.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `death_alert_glitch.webm` (0.7s loop, optionnel), `black_ribbon_fade.webm` (1.2s non loop).
|
||||
- **Animations** : Tremblement de la fenêtre.
|
||||
- **Couleurs** : Noir #000000.
|
||||
- **Textes** : Cause du décès.
|
||||
|
||||
@@ -177,7 +177,7 @@ function updateNurserie(nurserie):
|
||||
**Description UI** : Animation de l'œuf "volant" vers la nurserie (si visible) ou simple apparition dans le slot.
|
||||
**Emplacement** : HUD -> Nurserie.
|
||||
**Intégration** : Automatique.
|
||||
**Navigation** : N/A
|
||||
**Navigation** : Clic sur notif “Œuf ajouté” → ouvre la nurserie sur le slot concerné (deep-link) ; sinon aucun parcours requis.
|
||||
**Événements** : `EGG_ADDED`.
|
||||
|
||||
#### Assets
|
||||
|
||||
@@ -25,8 +25,28 @@
|
||||
"name": "Arbre à Singe",
|
||||
"compatible_animals": ["chimpanzee", "lemur"],
|
||||
"cost": 150,
|
||||
"durability": 100, // Peut s'user avec le temps
|
||||
"bonus_happiness": 20
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"durability": 100,
|
||||
"repair_cost": 30,
|
||||
"bonus_happiness": 20,
|
||||
"bonus_attractiveness": 10,
|
||||
"cooldowns": {
|
||||
"use_interval_seconds": 120,
|
||||
"next_usable_at": "timestamp"
|
||||
},
|
||||
"placement": {
|
||||
"enclosure_id": "uuid",
|
||||
"grid": { "x": "integer", "y": "integer" },
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer",
|
||||
"hitbox": "enum('tile','base_sprite','custom_polygon')"
|
||||
},
|
||||
"render": {
|
||||
"sprite_id": "string",
|
||||
"variant_seed": "integer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -34,11 +54,20 @@
|
||||
* **Exclusivité :** Un objet conçu pour les lions ne fonctionnera pas (ou mal) pour les pingouins.
|
||||
* **Espace :** Occupe de la place dans l'enclos (réduit la surface "libre" mais augmente la qualité).
|
||||
* **Limite :** 1 objet spécial par X cases d'enclos pour éviter la surcharge.
|
||||
* **Effet “mauvaise compatibilité”** : si un animal non compatible interagit, bonus réduit à 10% et risque de casse +5%.
|
||||
* **Usure** : `durability` baisse à chaque utilisation (ex. -1) et par jour (ex. -2/jour). En dessous de 20 : animation “abîmé” + malus (bonus_happiness / 2).
|
||||
* **Réparation** : action joueur ou employé (soigneur/agent selon design) ramène `durability` à 100 contre `repair_cost`.
|
||||
* **Pathfinding** : l’objet est un obstacle interne à l’enclos (visiteurs ne le traversent pas si l’enclos est visitable ; animaux l’utilisent comme target).
|
||||
|
||||
## 6. Annexes UX/UI
|
||||
* **Visuel 3D/Iso :** Modèle détaillé correspondant au thème de l'animal.
|
||||
* **Feedback :** Cœurs ou étoiles émanant de l'animal lorsqu'il utilise l'objet.
|
||||
|
||||
### États visuels
|
||||
* **Neuf** : couleurs vives + petite animation idle.
|
||||
* **Usé** (`durability < 50`) : texture éraflée, bruit plus sec.
|
||||
* **Cassé** (`durability <= 0`) : sprite “cassé”, interaction désactivée jusqu’à réparation.
|
||||
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
|
||||
@@ -17,9 +17,13 @@ Classe abstraite ou interface commune.
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "string",
|
||||
"type": "enum('player','bot','visitor','animal','staff')",
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"position": { "x": "int", "y": "int" },
|
||||
"active": "boolean",
|
||||
"status_flags": ["enum('selected','moving','interacting','hidden','dead','sleeping','busy')"],
|
||||
"hitbox": "enum('tile','base_sprite','custom_polygon')",
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
@@ -27,74 +31,134 @@ Classe abstraite ou interface commune.
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A (Spécifique aux sous-types)
|
||||
| Caractéristique | Valeur Initiale | Type | Description |
|
||||
|---|---|---|---|
|
||||
| active | true | bool | L’entité est simulée/rendue si active. |
|
||||
| hitbox | base_sprite | enum | Sélection via base sprite (isométrique). |
|
||||
| status_flags | [] | enum[] | Liste vide au spawn, enrichie par le comportement. |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| visibilité | 100 | 0-100 | Probabilité d’être rendu/affiché (ex. foule dense). |
|
||||
| priorité interaction | 50 | 0-100 | Arbitre quel élément capte le clic en cas de chevauchement. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Spawn système | true | Est | Création de l’entité (par règle métier). |
|
||||
| Ressources dispo | selon type | >= | Autorise création (ex. staff payé). |
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| active | false | Est | Retrait du rendu/simulation. |
|
||||
| status_flags contient dead | true | Est | Retrait ou état “cadavre” selon design. |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Classe dérivée | Champs spécifiques | 100% | Non |
|
||||
| Skins | Palette/cosmétiques | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Plage Température | Effet sur l’entité | Bonus/Malus |
|
||||
|---|---|---|
|
||||
| < 0°C | Animations “froid” (si entité sensible) | vitesse -10% (visiteurs) |
|
||||
| > 30°C | Animations “chaud” | soif +20% (visiteurs) |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome | Compatibilité | Bonus/Malus |
|
||||
|---|---:|---|
|
||||
| Chemin | 100% | coût de mouvement 1.0 |
|
||||
| Herbe | 100% | coût de mouvement 1.2 |
|
||||
| Boue | 60% | coût de mouvement 1.5 |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Été | foule + | visiteurs + |
|
||||
| Hiver | foule - | visiteurs - |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Activité | Visibilité |
|
||||
|---|---|---|
|
||||
| Jour | simulation normale | haute |
|
||||
| Nuit | entités “dorment” selon type | moyenne/basse |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Proximité | augmente | si entité = animal |
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
| Cause | Conséquence | Durée |
|
||||
|---|---|---|
|
||||
| État critique | passage dead | selon règles type |
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Type Nourriture | Gain Santé | Coût | Préférence |
|
||||
|---|---:|---:|---:|
|
||||
| selon type | variable | variable | 1–5 |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
| Action/État | Gain Attractivité | Rayon d'action |
|
||||
|---|---:|---:|
|
||||
| entité rare visible | + | 8 cases |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation Prix | Condition |
|
||||
|---|---:|---|
|
||||
| rareté cosmétique | + | si skin rare |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Domaine | Paramètre | Valeur | Unité |
|
||||
|---|---|---:|---|
|
||||
| Déplacement | coût de mouvement | >= 1.0 | multiplicateur |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| maintenance entité | variable | /jour | si staff/bâtiment associé |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Trajet | Règle | Priorité | Notes |
|
||||
|---|---|---:|---|
|
||||
| vers POI | A* pondéré | 50 | chemins préférés |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `ENTITY_SPAWN` | création | rendu + simulation | instant |
|
||||
| `ENTITY_DESPAWN` | suppression | retrait | instant |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | comportement de base |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
```text
|
||||
computeZIndex(x, y):
|
||||
return y * 1000 + x
|
||||
|
||||
hitTest(click):
|
||||
candidates = entities.sortedBy(z_index desc)
|
||||
return first(entity where click inside entity.hitbox)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "Entité sélectionnée." | clic valide | 2 |
|
||||
| Warn | "Interaction impossible." | état busy/dead | 4 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -117,12 +181,12 @@ N/A
|
||||
**Événements** : `HOVER_CHARACTER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Musiques** : `ui_hover_soft.mp3` (jingle court, optionnel).
|
||||
- **Sons** : `ui_hover.mp3`, `ui_select.mp3`.
|
||||
- **Graphiques** : Silhouettes archétypales.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Images** : `badge_player.png`, `badge_bot.png`, `badge_visitor.png`, `badge_animal.png`.
|
||||
- **Vidéos** : `hover_glow.webm` (0.6s loop, optionnel).
|
||||
- **Animations** : Glow pulse (hover), pop (select).
|
||||
- **Couleurs** : Joueur (Bleu), Bot (Rouge/Gris), Visiteur (Multicolore), Animal (Naturel).
|
||||
- **Textes** : Nom, Rôle.
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Badge rond + tooltip rect arrondi.
|
||||
|
||||
@@ -21,15 +21,26 @@ Structure permettant aux visiteurs (et au personnel) de traverser les étendues
|
||||
### Données (JSON)
|
||||
```json
|
||||
{
|
||||
"bridge_id": "bridge_segment_15_15",
|
||||
"type": "wooden_bridge",
|
||||
"bridge_id": "uuid",
|
||||
"owner_zoo_id": "uuid",
|
||||
"type": "enum('wood_planks','stone_bridge','rope_bridge')",
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"coordinates": {"x": 15, "y": 15},
|
||||
"water_underneath": true,
|
||||
"connected_neighbors": ["enum('N','S','E','W')"],
|
||||
"durability": "integer (0-100)",
|
||||
"stats": {
|
||||
"speed_modifier": 1.0,
|
||||
"attractiveness_bonus": 5
|
||||
},
|
||||
"cost_per_tile": 50,
|
||||
"repair_cost": 20,
|
||||
"render": {
|
||||
"auto_tile_key": "string",
|
||||
"height_offset_px": "integer (>= 0)",
|
||||
"occluder": "boolean"
|
||||
},
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
@@ -39,6 +50,9 @@ Structure permettant aux visiteurs (et au personnel) de traverser les étendues
|
||||
### Règles Métier
|
||||
* **Support :** Doit commencer et finir sur la terre ferme (ou se connecter à un autre pont).
|
||||
* **Hauteur :** En vue isométrique, le pont peut être légèrement surélevé par rapport à l'eau.
|
||||
* **Auto-tiling** : se connecte aux ponts adjacents et (optionnellement) aux chemins si le bord touche la terre.
|
||||
* **Usure** : `durability` baisse de 1/jour + 1 par X passages (ex. 50 passages). En dessous de 20, bruit de craquement + risque incident (arrêt temporaire) si non réparé.
|
||||
* **Erreur construction** : interdite si la tuile d’eau est “profonde” et non pontable (flag terrain), ou si collision avec un bâtiment.
|
||||
|
||||
## 6. Annexes UX/UI
|
||||
* **Visuel :** Planches de bois avec rambardes, piliers plongeant dans l'eau.
|
||||
@@ -55,3 +69,10 @@ Structure permettant aux visiteurs (et au personnel) de traverser les étendues
|
||||
* **Interactions** :
|
||||
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
|
||||
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
|
||||
|
||||
## 1. Interactions UI (construction / réparation)
|
||||
* **Construction** : mode “peinture” possible (drag) pour poser plusieurs tuiles de pont d’affilée, avec preview auto-tiling.
|
||||
* **Réparation** : clic sur pont (durabilité < 100) → bouton “Réparer” (coût affiché) → animation marteau + retour à 100.
|
||||
* **Messages** :
|
||||
* `BRIDGE_BUILD_BLOCKED` : "Impossible de construire un pont ici."
|
||||
* `BRIDGE_NEEDS_REPAIR` : "Pont endommagé : réparation recommandée."
|
||||
|
||||
@@ -108,7 +108,7 @@ if checkConditions(parentA, parentB):
|
||||
if random() < chance:
|
||||
createBaby(parentA, parentB)
|
||||
else:
|
||||
emitEvent("REPRO_FAIL", "Pas d'alchimie...")
|
||||
emitEvent("REPRO_FAIL", "Tentative échouée")
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
@@ -145,7 +145,7 @@ if checkConditions(parentA, parentB):
|
||||
- **Vidéos** : Effet de flou artistique (Bloom).
|
||||
- **Animations** : Cœurs qui montent.
|
||||
- **Couleurs** : Rose.
|
||||
- **Textes** : "Love is in the air...".
|
||||
- **Textes** : "Accouplement en cours".
|
||||
- **Formes** : Cœur.
|
||||
|
||||
### Naissance (Événement)
|
||||
|
||||
@@ -26,30 +26,50 @@ Propriété de `Zoo`.
|
||||
| Réputation | 0 |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Prestige | 0 | 0-10000 | Sert de base au flux visiteurs (via attractivité ville → zoo). |
|
||||
| Malus décès récent | 0 | 0-5000 | Décroît sur 24h ; pénalise flux visiteurs. |
|
||||
| Bonus diversité | 0 | 0-2000 | Bonus si plusieurs espèces présentes. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Premier animal placé | 1 | >= | La réputation devient calculable (sinon 0). |
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Zoo supprimé | true | Est | Score supprimé avec le zoo. |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Soft reset / prestige | Bonus de départ | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Condition | Effet |
|
||||
|---|---|
|
||||
| Trop chaud / trop froid (global) | Réputation -10% temporaire si > X animaux en état critique |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome | Effet |
|
||||
|---|---|
|
||||
| Enclos adaptés | + réputation via survie + satisfaction visiteurs |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet |
|
||||
|---|---|
|
||||
| Été | Réputation “visible” +5% (affluence) si incidents faibles |
|
||||
| Hiver | Réputation “visible” -5% si gestion température mauvaise |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Effet |
|
||||
|---|---|
|
||||
| Jour | Variation normale |
|
||||
| Nuit | Pas de hausse via visiteurs (zoo fermé), seulement décroissance des malus |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
@@ -59,23 +79,33 @@ N/A
|
||||
**Malus** : -50 pts par mort (décroissance sur 24h).
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Stock nourriture stable | +1% / jour | Aucun animal en faim critique |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
C'est la métrique de base de l'attractivité.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Réputation élevée | Prix de vente animaux +5% | si marché utilise réputation vendeur |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Domaine | Paramètre | Valeur | Unité | Effet |
|
||||
|---|---|---:|---|---|
|
||||
| Mise à jour score | Période | 60 | s | Recalcul périodique ou lazy update. |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Campagnes image | 1000–5000 | coins | Augmente temporairement la réputation visible |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Mécanisme | Impact | Détail |
|
||||
|---|---|---|
|
||||
| Flux ville→zoo | Direct | Réputation est un facteur principal de flux |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
@@ -83,7 +113,10 @@ N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Réputation visible + tooltips |
|
||||
| 2 | 1000 | Boutique niv 2 | Affichage détaillé des composantes |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
@@ -92,7 +125,10 @@ score = sum(animal.rarity * 10) + (uniqueSpecies * 50) + buildingsValue - deathP
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "Réputation +{delta}" | hausse significative | 2 |
|
||||
| Warn | "Réputation en baisse : trop de morts/incidents" | seuil franchi | 4 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -115,11 +151,11 @@ N/A
|
||||
**Événements** : `SCORE_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `level_up_jingle.mp3` (court), `ui_score_tick.mp3` (optionnel).
|
||||
- **Sons** : `level_up_jingle.mp3`.
|
||||
- **Graphiques** : Icône Couronne.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `icon_crown.png`, `reputation_star.png`.
|
||||
- **Vidéos** : `crown_glint.webm` (0.8s non loop, optionnel).
|
||||
- **Animations** : Brillance quand augmente.
|
||||
- **Couleurs** : Or.
|
||||
- **Textes** : "Niveau 5 (4500 pts)".
|
||||
|
||||
@@ -25,17 +25,27 @@ Propriété de `Zoo`.
|
||||
| Survie | 100% |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Survie globale | 100 | 0-100 | Conditionne reproduction, maladies, perception valeur animaux. |
|
||||
| Risque maladie | 0% | 0-100% | Monte si survie < 60. |
|
||||
| Malus mortalité | 0 | 0-100 | Monte si survie < 30, augmente probas décès. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Premier animal vivant | 1 | >= | Score calculable (sinon 100 par convention de vide). |
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Zoo supprimé | true | Est | Score supprimé avec le zoo. |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Soft reset | Bonus de départ (+10) | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
@@ -45,10 +55,15 @@ Moyenne des adéquations T°.
|
||||
Moyenne des adéquations Biome.
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Hiver | Températures plus dures | survie -5 si pas de régulation |
|
||||
| Été | Canicule | survie -5 si pas d’ombre/eau |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Nuit | Récupération | +1 survie/h si conditions OK |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
@@ -61,28 +76,47 @@ Seuil critique : < 20% (Risque épidémie).
|
||||
Moyenne des Faims.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
| État | Effet | Condition |
|
||||
|---|---|---|
|
||||
| Survie > 90 | Visiteurs satisfaits | bonus attractivité local |
|
||||
| Survie < 50 | Visiteurs inquiets | malus attractivité |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation Prix | Condition |
|
||||
|---|---:|---|
|
||||
| Survie > 90 | +10% | animal en vente |
|
||||
| Survie < 50 | -20% | animal en vente |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Domaine | Paramètre | Valeur | Unité | Effet |
|
||||
|---|---|---:|---|---|
|
||||
| Recalcul score | Période | 60 | s | Recalcul périodique ou lazy update. |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Soins vétérinaires | 50 | coins / animal | si état critique |
|
||||
| Régulation T° | variable | coins / jour | selon `temperature.md` |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Mécanisme | Effet | Détail |
|
||||
|---|---|---|
|
||||
| Évitement zones malades | détour | réduit densité autour animaux malades |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `SURVIVAL_DROP` | passage sous seuil | alerte | tant que < seuil |
|
||||
| `DISEASE_OUTBREAK` | survie < 20 + RNG | maladie | 24h in-game |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Monitoring basique |
|
||||
| 2 | 2000 | centre recherche niv 2 | Détection précoce maladies |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
@@ -116,11 +150,11 @@ survivalScore = average(allAnimals.health)
|
||||
**Événements** : `HEALTH_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_health_soft.mp3` (jingle discret), `ui_critical_pulse.mp3` (optionnel).
|
||||
- **Sons** : `heartbeat.mp3` (si critique).
|
||||
- **Graphiques** : Icône Cœur.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `icon_heart.png`, `icon_cross.png`.
|
||||
- **Vidéos** : `heart_pulse.webm` (0.8s loop, optionnel).
|
||||
- **Animations** : Battement (Pulsation).
|
||||
- **Couleurs** : Vert -> Jaune -> Rouge.
|
||||
- **Textes** : "98%".
|
||||
|
||||
@@ -30,74 +30,122 @@ Un site est un lieu d'intérêt positionné sur la Carte du Monde.
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
| Caractéristique | Valeur Initiale | Type | Description |
|
||||
|---|---:|---|---|
|
||||
| Visibilité | 100 | 0-100 | Probabilité d’être visible/affichable selon fog-of-war et zoom. |
|
||||
| Interactions activées | true | bool | Désactivable pour sites “décoratifs”. |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Popularité | 0 | 0-100 | Pour ville : influence flux ; pour zoo : reflète attractivité. |
|
||||
| Danger | 0 | 0-100 | Pour labos/événements : risque d’incident. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération procédurale ou création joueur.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
| Condition | Seuil | Opérateur | Résultat |
|
||||
|---|---:|---|---|
|
||||
| Type “événement” | fin timer | >= | Site supprimé (si événement temporaire). |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Monde | Découverte | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Condition | Effet |
|
||||
|---|---|
|
||||
| Tempête régionale | modifie les flux/visites | impact de contexte |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome | Effet |
|
||||
|---|---|
|
||||
| Biome ville | type de visiteurs | modifie budget moyen |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet |
|
||||
|---|---|
|
||||
| Hiver | routes plus lentes | dist effective + |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Effet |
|
||||
|---|---|
|
||||
| Nuit | lumières sites | rendu + |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Labo événement | boost génétique | si lab actif |
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
| Cause | Conséquence | Durée |
|
||||
|---|---|---|
|
||||
| Catastrophe sur site | fermeture | 24h |
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Ville agricole | stock nourriture + | économie |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
| Action/État | Gain Attractivité | Rayon d'action |
|
||||
|---|---:|---:|
|
||||
| Zoo halo | + | visibilité monde |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation | Condition |
|
||||
|---|---|---|
|
||||
| Emplacement premium | + | proche villes |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Domaine | Paramètre | Valeur | Unité | Notes |
|
||||
|---|---|---:|---|---|
|
||||
| Survol/tooltip | délai | 200 | ms | évite popups instantanés |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Taxe régionale | 1% | transaction | route commerciale |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Trajet | Condition | Effet | Notes |
|
||||
|---|---|---|---|
|
||||
| Ville→Zoo | attraction | flux | cf. attractivité |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `SITE_HOVER` | survol | tooltip | tant que hover |
|
||||
| `SITE_SELECTED` | clic | panneau détail | jusqu’à fermeture |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Tooltips |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
```text
|
||||
onHoverSite(site):
|
||||
showTooltip(site.name, site.type, site.keyMetric)
|
||||
|
||||
onClickSite(site):
|
||||
openDetailPanel(site)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "Site sélectionné." | clic | 2 |
|
||||
| Warn | "Site indisponible." | fermé/lock | 4 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -120,11 +168,11 @@ N/A
|
||||
**Événements** : `HOVER_SITE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_tooltip_soft.mp3` (jingle discret).
|
||||
- **Sons** : `pop.mp3` léger.
|
||||
- **Graphiques** : Fond noir semi-transparent.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `site_icon_zoo.png`, `site_icon_city.png`, `site_icon_lab.png`.
|
||||
- **Vidéos** : `tooltip_fade.webm` (0.6s loop, optionnel).
|
||||
- **Animations** : Fade in rapide.
|
||||
- **Couleurs** : Blanc sur Noir.
|
||||
- **Textes** : "Paris (1M hab.)".
|
||||
|
||||
@@ -18,8 +18,10 @@
|
||||
- **Optimisation** : Culling (ne pas rendre ce qui est hors écran).
|
||||
|
||||
### Infrastructure
|
||||
- **Cache** : Redis (pour les sessions, les compteurs temps réel et les files d'attente de jobs).
|
||||
- **Message Broker** : BullMQ (Redis) ou RabbitMQ pour les tâches asynchrones (morts, naissances, enchères).
|
||||
- **Cache** : Interdit (aucun cache applicatif, aucune mémorisation). Les lectures doivent refléter l’état courant calculé/stocké, sans couche de cache.
|
||||
- **Queue / Jobs** : File de tâches sans cache.
|
||||
- Option A : RabbitMQ (messages durables) pour les tâches asynchrones (morts, naissances, enchères).
|
||||
- Option B : Jobs en base PostgreSQL (table `jobs` + workers) avec verrous transactionnels (SKIP LOCKED) pour éviter les doubles traitements.
|
||||
|
||||
---
|
||||
|
||||
@@ -44,9 +46,9 @@ CREATE TABLE animals (
|
||||
zoo_id UUID REFERENCES zoos(id),
|
||||
type VARCHAR(50),
|
||||
birth_date TIMESTAMPTZ,
|
||||
state JSONB, -- { health, hunger, stress, ... }
|
||||
genetics JSONB, -- { color, rarity, parents... }
|
||||
position JSONB -- { x, y }
|
||||
state JSONB, -- { health, hunger, stress, happiness, lastFedAt, lastVisitedAt }
|
||||
genetics JSONB, -- { color, rarity, parents, mutations, lineageId }
|
||||
position JSONB -- { x, y, iso_x, iso_y, z_index }
|
||||
);
|
||||
```
|
||||
|
||||
@@ -73,7 +75,9 @@ Calculer l'état d'un zoo **uniquement quand c'est nécessaire** (lecture par le
|
||||
|
||||
### Exceptions (Workers)
|
||||
Certains événements doivent arriver même si le joueur est hors ligne (ex: Enchères, Morts impactant le marché).
|
||||
* Utiliser des **Cron Jobs** ou des **Delayed Jobs** (Redis) pour traiter ces événements spécifiques à leur heure d'échéance prévue.
|
||||
* Utiliser des **Cron Jobs** ou des **Delayed Jobs** sans cache pour traiter ces événements à l’heure d’échéance prévue.
|
||||
* Option A : messages planifiés via RabbitMQ (plugin de scheduling si utilisé).
|
||||
* Option B : table PostgreSQL `jobs` (colonnes `run_at`, `locked_at`, `attempts`, `last_error`) + worker(s) avec `SELECT FOR UPDATE SKIP LOCKED`.
|
||||
|
||||
---
|
||||
|
||||
@@ -93,7 +97,7 @@ Certains événements doivent arriver même si le joueur est hors ligne (ex: Enc
|
||||
|
||||
### Système
|
||||
- `POST /api/auth/login` : Authentification par clé.
|
||||
- `GET /api/config` : Récupère les tables statiques (Animaux, Coûts, Saisons) pour le cache client.
|
||||
- `GET /api/config` : Récupère les tables statiques (Animaux, Coûts, Saisons) pour initialiser le client, sans mécanisme de cache applicatif.
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -112,19 +116,19 @@ Certains événements doivent arriver même si le joueur est hors ligne (ex: Enc
|
||||
**Description UI** : Écran de chargement avec barre de progression ou animation (Animal qui marche).
|
||||
**Emplacement** : Plein écran (Démarrage).
|
||||
**Intégration** : Bloquant.
|
||||
**Navigation** : N/A
|
||||
**Navigation** : Aucune (écran d’attente avant accès au jeu).
|
||||
**Événements** : `APP_LOAD`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Thème Principal.
|
||||
- **Sons** : N/A
|
||||
- **Sons** : `ui_loader_tick.mp3` (boucle courte et discrète), `ui_loaded_pop.mp3` (fin de chargement).
|
||||
- **Graphiques** : Logo Jeu.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `loading_mascot.png` (mascotte), `loading_background.png` (fond).
|
||||
- **Vidéos** : `loading_anim.webm` (animation courte, loop).
|
||||
- **Animations** : Loader.
|
||||
- **Couleurs** : Thème Jeu.
|
||||
- **Textes** : "Calcul de la simulation...", "Rattrapage du temps...".
|
||||
- **Formes** : N/A
|
||||
- **Textes** : "Calcul de la simulation", "Rattrapage du temps".
|
||||
- **Formes** : Cercle (spinner), barre (progress).
|
||||
|
||||
### Erreur Connexion (Feedback)
|
||||
**Description UX** : Perte de connexion ou erreur API.
|
||||
@@ -135,12 +139,12 @@ Certains événements doivent arriver même si le joueur est hors ligne (ex: Enc
|
||||
**Événements** : `NETWORK_ERROR`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : Ducking du thème principal (-6 dB) pendant l’affichage de l’erreur.
|
||||
- **Sons** : `error.mp3`.
|
||||
- **Graphiques** : Icône Wifi barré.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `icon_wifi_off.png`, `modal_error_bg.png`.
|
||||
- **Vidéos** : `network_error_glitch.webm` (optionnel, 0.8s loop).
|
||||
- **Animations** : Secousse.
|
||||
- **Couleurs** : Rouge.
|
||||
- **Textes** : "Connexion perdue".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Rectangle arrondi (modal), toast (pill).
|
||||
|
||||
@@ -38,7 +38,11 @@ Système Météo Global.
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
**Auto-référence** : La température influe sur... la température (inertie thermique).
|
||||
| Paramètre | Valeur | Unité | Règle |
|
||||
|---|---:|---|---|
|
||||
| Inertie eau | 0.5 | facteur | Un changement global (saison/météo) affecte l’eau à 50% de l’amplitude. |
|
||||
| Inertie sol | 1.0 | facteur | Le sol suit l’amplitude complète. |
|
||||
| Lissage | 15 | min in-game | La variation s’applique progressivement sur la durée (évite “saut” visuel brutal). |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
**Inertie** : L'eau change de T° moins vite que la terre (Tampon thermique).
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Types de Ventes
|
||||
- **Aux Enchères** : Vers d'autres joueurs (prix potentiellement élevé).
|
||||
- **Libération (Vente rapide)** : Vente au "système" (prix bas fixe) pour faire de la place rapidement (si implémenté pour éviter la mort). *Note : Le cahier des charges privilégie le marché joueurs, la libération est une option de secours.*
|
||||
- **Libération (Vente rapide)** : Vente au "système" (prix plancher fixe) pour libérer de la place rapidement (optionnelle selon design retenu). *Note : Le cahier des charges privilégie le marché joueurs ; la libération est un mode de vente alternatif.*
|
||||
|
||||
## Contraintes
|
||||
- Un animal malade ou mourant ne peut pas être mis en vente.
|
||||
@@ -12,7 +12,50 @@
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
N/A
|
||||
```json
|
||||
{
|
||||
"sale_id": "uuid",
|
||||
"seller_zoo_id": "uuid",
|
||||
"seller_player_id": "uuid | null (null si bot)",
|
||||
"animal_id": "uuid",
|
||||
"sale_type": "enum('auction_adult','auction_baby','release_system')",
|
||||
"status": "enum('draft','in_transit','listed','pending_validation','completed','expired','cancelled')",
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"listing": {
|
||||
"start_price": "integer",
|
||||
"buy_now_price": "integer | null",
|
||||
"currency": "enum('coins')",
|
||||
"duration_seconds": "integer (3600|14400|86400)",
|
||||
"end_at": "timestamp"
|
||||
},
|
||||
"bids": [
|
||||
{
|
||||
"bid_id": "uuid",
|
||||
"bidder_zoo_id": "uuid",
|
||||
"amount": "integer",
|
||||
"created_at": "timestamp"
|
||||
}
|
||||
],
|
||||
"validation": {
|
||||
"accepted_bid_id": "uuid | null",
|
||||
"pending_until": "timestamp | null (sablier 10 min)",
|
||||
"finalized_at": "timestamp | null"
|
||||
},
|
||||
"transport": {
|
||||
"truck_id": "uuid",
|
||||
"from_site_id": "uuid",
|
||||
"to_site_id": "uuid | null",
|
||||
"climate_control": "boolean",
|
||||
"insurance": "boolean",
|
||||
"transport_started_at": "timestamp",
|
||||
"transport_eta_at": "timestamp"
|
||||
},
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
**Total Vendu** : 0 animaux.
|
||||
@@ -124,12 +167,12 @@ function sellAnimal(animal, price, mode):
|
||||
**Événements** : `RELEASE_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_warning_soft.mp3` (jingle court à l’ouverture de confirmation).
|
||||
- **Sons** : `bird_fly_away.mp3` (bruit de nature positif).
|
||||
- **Graphiques** : Icône Cage ouverte.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Images** : `icon_release.png`, `modal_confirm.png`.
|
||||
- **Vidéos** : `release_fade.webm` (1.2s non loop, optionnel).
|
||||
- **Animations** : Animal s'estompe ou court hors de l'écran.
|
||||
- **Couleurs** : Vert (Nature).
|
||||
- **Textes** : "Libéré !".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Bouton danger (rouge) + modal arrondie.
|
||||
|
||||
@@ -17,10 +17,17 @@ Identique à la vente de bébés, mais avec des tolérances plus grandes sur les
|
||||
Identique à `vente_enchere_bebe.md`.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
| Caractéristique | Valeur | Notes |
|
||||
|---|---|---|
|
||||
| Durée Enchère | 4h - 24h | Les adultes tolèrent des durées plus longues que les bébés. |
|
||||
| Délai Validation | 10 min | Identique au générique enchères (sablier). |
|
||||
| Dégradation âge | Oui | Prix perçu diminue avec l’âge (cf. `animal_generique.md`). |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Valeur perçue (âge) | 100 | 0-150 | Modifie la propension des bots à enchérir. |
|
||||
| Résistance transport | 80 | 0-100 | Réduit les risques d’incident pendant vente/transport. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
@@ -30,61 +37,114 @@ Action joueur.
|
||||
Vente ou Expiration.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Parents (si connus) | Arbre généalogique | 100% | Non |
|
||||
| Vendeur | “Certificat d’entretien” | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Plage Température | Effet sur l'entité | Bonus/Malus |
|
||||
|---|---|---|
|
||||
| < 0°C | Fatigue + | Risque incident +5% si pas de camion climatisé |
|
||||
| 15–25°C | Stable | 0 |
|
||||
| > 35°C | Fatigue + | Risque incident +5% si pas de camion climatisé |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome | Compatibilité | Bonus/Malus |
|
||||
|---|---:|---|
|
||||
| Marché (UI) | 100% | Aucun |
|
||||
| Transport long | 90% | Légère fatigue (adultes résistent) |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Hiver | Demande espèces froides + | Bids +10% (espèces adaptées) |
|
||||
| Été | Demande espèces chaudes + | Bids +10% (espèces adaptées) |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Activité marché | Impact |
|
||||
|---|---|---|
|
||||
| 18h–22h | Prime time | +10% bids |
|
||||
| Nuit | Faible | -15% bids |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Adulte fertile vendu | Prix x2 | Si fertilité > seuil et pas en cooldown |
|
||||
|
||||
### Impact Mort
|
||||
**Risque** : Si `status == expired` et non récupéré sous 24h -> Mort.
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Type Nourriture | Gain Santé | Coût | Préférence |
|
||||
|---|---:|---:|---:|
|
||||
| Rations transport | stable | inclus | 3 |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
| Action/État | Gain Attractivité | Rayon d'action |
|
||||
|---|---:|---:|
|
||||
| Vente star (rare) | -10% attractivité zoo | Global (zoo vendeur) |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
| Facteur | Variation Prix | Condition |
|
||||
|---|---:|---|
|
||||
| Âge élevé | -20% | au-delà du seuil “senior” |
|
||||
| Santé parfaite | +10% | survival élevé |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Paramètre | Valeur | Unité | Règle |
|
||||
|---|---:|---|---|
|
||||
| Fenêtre récupération invendu | 24 | h | sinon risque mort adulte (cf. spec) |
|
||||
| Délai validation | 10 | min | après acceptation |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Taxe marché | 10% | du prix final | prélevée à finalisation |
|
||||
| Assurance transport | 3% | du prix final | optionnel |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Trajet | Condition | Effet | Notes |
|
||||
|---|---|---|---|
|
||||
| Consultation marché | ouverture UI | tri | pas de visiteurs physiques |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
| Event | Déclencheur | Effet | Durée |
|
||||
|---|---|---|---|
|
||||
| `AUCTION_CREATED_ADULT` | création enchère | listing visible | jusqu’à fin |
|
||||
| `AUCTION_EXPIRED_ADULT` | end_time atteint | statut expired | jusqu’à récupération |
|
||||
| `AUCTION_FINALIZED_ADULT` | validation finie | transfert | instant |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Accès enchères adultes |
|
||||
| 2 | 2000 | Réputation 300 | Taxe -1% |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
```text
|
||||
createAuctionAdult(animal, startPrice, duration):
|
||||
assert animal.isAdult && animal.health > 50
|
||||
moveToTransit(animal)
|
||||
publishListing()
|
||||
|
||||
onExpire():
|
||||
markExpired()
|
||||
startReclaimTimer(24h)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
| Type | Message | Condition | Priorité |
|
||||
|---|---|---|---:|
|
||||
| Info | "Enchère créée." | listing publié | 2 |
|
||||
| Warn | "Enchère expirée : récupérez l’animal." | status expired | 4 |
|
||||
| Error | "Impossible de vendre : animal indisponible." | malade/mort proche | 5 |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
@@ -107,15 +167,15 @@ N/A
|
||||
**Événements** : `CREATE_AUCTION_ADULT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_market_open.mp3` (jingle court).
|
||||
- **Sons** : `cash_register_open.mp3`.
|
||||
- **Graphiques** : N/A
|
||||
- **Graphiques** : Icône bourse + badge “adulte”.
|
||||
- **Images** : Portrait Animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Vidéos** : `auction_sheet_intro.webm` (0.8s non loop, optionnel).
|
||||
- **Animations** : Animal disparaît de la grille (part en zone de vente).
|
||||
- **Couleurs** : N/A
|
||||
- **Couleurs** : Or/Gris (adulte), Ambre (pending validation).
|
||||
- **Textes** : "Mise à prix".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Bottom sheet + cartes.
|
||||
|
||||
### Retour Invendu (Action)
|
||||
**Description UX** : L'enchère est finie sans acheteur. Le joueur doit récupérer l'animal.
|
||||
@@ -126,12 +186,12 @@ N/A
|
||||
**Événements** : `RECLAIM_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_fail_soft.mp3` (jingle court).
|
||||
- **Sons** : `sad_trombone.mp3` (échec).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Graphiques** : Icône retour (flèche).
|
||||
- **Images** : `icon_reclaim.png`.
|
||||
- **Vidéos** : `reclaim_return.webm` (1.2s non loop, optionnel).
|
||||
- **Animations** : Retour visuel de l'animal.
|
||||
- **Couleurs** : Gris (Désactivé).
|
||||
- **Textes** : "Invendu".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Bouton primary “Récupérer”.
|
||||
|
||||
@@ -43,7 +43,11 @@ Processus de vente spécifique pour les bébés animaux nés dans le zoo.
|
||||
| Délai Validation | 10 min (fixe) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Visibilité Listing | 50 | 0-100 | Poids de tri côté marché. |
|
||||
| Stress (vente) | 10 | 0-100 | Monte avec le temps ; au-delà de 70, accélère le risque de mort. |
|
||||
| Confiance vendeur | 0 | -100 à +100 | Influence la participation des bots (anti-spam). |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
@@ -53,46 +57,79 @@ Action joueur.
|
||||
Vente ou Expiration.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|
||||
|---|---|---:|---|
|
||||
| Parents (réels) | Rareté/Couleur | cf. `reproduction.md` | Oui |
|
||||
| Vendeur | “Certificat de soin” | 100% | Non |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
| Plage Température | Effet sur l'entité | Bonus/Malus |
|
||||
|---|---|---|
|
||||
| < 5°C | Stress +2/min | Risque mort + (si durée > 10 min) |
|
||||
| 20°C (Idéal) | Stress -1/min | Stabilise |
|
||||
| > 30°C | Stress +2/min | Risque mort + (si durée > 10 min) |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
| Biome / Contexte | Compatibilité | Bonus/Malus |
|
||||
|---|---:|---|
|
||||
| Marché (UI) | 100% | Aucun |
|
||||
| Transport long | 80% | Fatigue + |
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
| Saison | Effet | Modificateur |
|
||||
|---|---|---|
|
||||
| Printemps | Demande bébés + | Bids +10% |
|
||||
| Été | Chaleur | Stress +10% |
|
||||
| Automne | Neutre | 0% |
|
||||
| Hiver | Froid | Stress +10% |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
| Période | Activité marché | Impact |
|
||||
|---|---|---|
|
||||
| 18h–22h | Prime time | +15% bids |
|
||||
| Nuit | Faible | -20% bids |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
| Facteur | Effet sur Taux | Condition |
|
||||
|---|---|---|
|
||||
| Bébé rare vendu | +10 réputation | Si `status` devient `sold` puis finalisé |
|
||||
|
||||
### Impact Mort
|
||||
**Risque** : Si `status == expired` et non récupéré sous 1h -> Mort du bébé.
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
| Type Nourriture | Gain Santé | Coût | Préférence |
|
||||
|---|---:|---:|---:|
|
||||
| Lait / soin | Stabilise | inclus | 5 |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
| Action/État | Gain Attractivité | Rayon d'action |
|
||||
|---|---:|---:|
|
||||
| Vente bébé rare conclue | +25 | Global |
|
||||
| Bébé mort (invendu) | -50 | Global |
|
||||
|
||||
### Impact Valeur
|
||||
**Dépréciation** : Aucune (c'est une enchère).
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
| Paramètre | Valeur | Unité | Règle |
|
||||
|---|---:|---|---|
|
||||
| Délai validation | 10 | min | après acceptation |
|
||||
| Fenêtre récupération invendu | 1 | h | sinon mort bébé |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
| Poste | Coût | Unité | Condition |
|
||||
|---|---:|---|---|
|
||||
| Taxe marché | 10% | du prix final | prélevée à finalisation |
|
||||
| Assurance transport | 5% | du prix final | optionnel |
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
| Trajet | Condition | Effet | Notes |
|
||||
|---|---|---|---|
|
||||
| Consultation acheteurs | ouverture marché | tri par visibilité | pas de visiteurs physiques |
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
@@ -102,11 +139,28 @@ N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
| Niveau | Coût | Prérequis | Bonus Débloqué |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 | - | Accès enchères bébés |
|
||||
| 2 | 1000 | Réputation 200 | Taxe -1% |
|
||||
| 3 | 5000 | Réputation 1000 | Visibilité +10 |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
```text
|
||||
onAcceptBid(auction, bid):
|
||||
auction.status = 'pending_validation'
|
||||
auction.pending_until = now + 10min
|
||||
|
||||
onTick():
|
||||
if auction.status == 'pending_validation' and now >= pending_until:
|
||||
finalize(auction)
|
||||
|
||||
finalize(auction):
|
||||
transferCoins(bidder, seller, amount - tax)
|
||||
scheduleDelivery(truck, bidderZoo)
|
||||
auction.status = 'sold'
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
@@ -135,12 +189,12 @@ N/A
|
||||
**Événements** : `CREATE_AUCTION`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_market_open.mp3` (jingle court).
|
||||
- **Sons** : `cash_register_open.mp3`.
|
||||
- **Graphiques** : Icône Bourse/Pièce.
|
||||
- **Images** : Portrait Bébé.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Vidéos** : `auction_sheet_intro.webm` (0.8s non loop, optionnel).
|
||||
- **Animations** : Compteur “mise à prix” qui s’incrémente, pulsation du bouton “Valider”.
|
||||
- **Couleurs** : Or.
|
||||
- **Textes** : "Prix de départ", "Durée".
|
||||
- **Formes** : Champs de saisie.
|
||||
@@ -154,12 +208,12 @@ N/A
|
||||
**Événements** : `OPEN_MY_SALES`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Musiques** : `ui_market_list.mp3` (jingle discret optionnel).
|
||||
- **Sons** : `notification.mp3` (si offre reçue).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : N/A
|
||||
- **Graphiques** : Icône cloche + badge compteur.
|
||||
- **Images** : `icon_hourglass.png`, `icon_bid.png`.
|
||||
- **Vidéos** : `bid_badge_pulse.webm` (0.6s loop, optionnel).
|
||||
- **Animations** : Badge qui pulse sur nouvelle offre.
|
||||
- **Couleurs** : Ambre (#F39C12) en attente validation, Vert (#2ECC71) vendu.
|
||||
- **Textes** : "Meilleure offre : X".
|
||||
- **Formes** : N/A
|
||||
- **Formes** : Pills (badges), cartes liste.
|
||||
|
||||
@@ -266,7 +266,7 @@ Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, E
|
||||
#### Événements du Ville / Visiteur
|
||||
| Event | Impact Affluence | Impact Budget |
|
||||
|---|---|---|
|
||||
| Festival Ville | -20% (Concurrence) | N/A |
|
||||
| Festival Ville | -20% (Concurrence) | Dépense Moyenne -10% (les achats se déplacent en ville) |
|
||||
| Bonus Économique | +10% | Dépense Moyenne +20% |
|
||||
|
||||
#### Événements du Visiteur
|
||||
@@ -337,7 +337,7 @@ Style graphique inspiré de `IMG_20260303_170253.jpg` : Coloré, vivant, détail
|
||||
|
||||
| Élément | Type (Bouton/Panel) | Contenu | État par défaut |
|
||||
|---|---|---|---|
|
||||
| Bulle Pensée | Icône Flottante | Image (Burger, WC...) | Caché |
|
||||
| Bulle Pensée | Icône Flottante | Image (Burger, WC, Eau, Appareil photo, Cadeau, Banc) | Caché |
|
||||
| Jauge Satisfaction | Barre Progression | Vert -> Rouge | Visible (si sélectionné) |
|
||||
|
||||
#### Emplacement
|
||||
@@ -390,7 +390,7 @@ Style graphique inspiré de `IMG_20260303_170253.jpg` : Coloré, vivant, détail
|
||||
##### Vidéos
|
||||
| Clip | Usage | Durée |
|
||||
|---|---|---|
|
||||
| N/A | N/A | N/A |
|
||||
| `visitor_card_preview.webm` | Aperçu animé dans le panneau de détails d’un visiteur sélectionné (HUD) | 1.5s (loop) |
|
||||
|
||||
##### Animations
|
||||
| Nom | Cible | Durée | Type (CSS/JS) |
|
||||
|
||||
@@ -51,7 +51,12 @@ Représentation d'un zoo (joueur ou bot) sur la Carte du Monde.
|
||||
| Reproduction | 0 |
|
||||
|
||||
### Scores Initiaux
|
||||
Voir ci-dessus.
|
||||
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|
||||
|---|---:|---|---|
|
||||
| Attractivité | 0 | 0-100000 | Détermine le flux de visiteurs (via billeterie + attractivité ville→zoo). |
|
||||
| Reproduction | 0 | 0-10000 | Modifie la chance de naissances et la qualité des bébés. |
|
||||
| Réputation | 0 | 0-10000 | Modifie le rayonnement sur carte monde (ville→zoo). |
|
||||
| Survie | 100 | 0-100 | Influence maladies, mortalité, et valeur des animaux. |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
|
||||
Reference in New Issue
Block a user