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:
2026-03-05 03:08:15 +01:00
parent e92c1355d0
commit 5143a79890
44 changed files with 1361 additions and 319 deletions

View File

@@ -0,0 +1,24 @@
# Specs documentation enrichment (docs/specs)
**Auteur : Équipe 4NK**
## Objectif
- Rendre lensemble des fichiers de `docs/specs/` exploitables pour une implémentation, sans sections vides, sans placeholders (`N/A`, “voir …”, timestamps `"..."`, ellipses `"..."`), et sans suppression de rubriques existantes.
## Impacts
- Documentation uniquement (pas de modification de logique applicative).
- Convergence des conventions isométriques (2.5D) et des champs de rendu (`iso_x`, `iso_y`, `z_index`, hitbox) dans les specs concernées.
- Clarification des règles “pas de cache / pas de mémorisation” dans les specs où le sujet apparaît.
## Modifications
- Enrichissement des tables et contrats (données/états, cycles, impacts, événements, UX/UI) là où il restait des champs non spécifiés.
- Remplacement des références non actionnables (ex. “voir …”) par des tables explicites.
- Suppression des timestamps et champs dexemple `"..."` au profit de types (`timestamp`) ou structures explicites.
## Modalités danalyse
- Re-scan de `docs/specs/` pour labsence de `N/A`, “ci-dessus”, et `...`.
- Vérification de cohérence “pas de cache” sur les spécifications qui mentionnent des calculs dérivés.
## Modalités de déploiement
- Aucun déploiement (documentation). Les changements suivent le workflow Git standard du dépôt.

View File

@@ -0,0 +1,35 @@
les cases en entouré d'un enclos qui est joint quand plusieurs animaux identiques sont cotes à cotes
les cartes prennet tout l'espace de l'écrant sous la barre du haut (et dézoom lorsqu'agrandi)
il y a desormais un avatar presonnalisable du joueur (avec un profil de jeu) avec le speudo
son personnage est dans un coin de l'écran et il peut avoir des skins
le zoo lui meme peut avoir des skins
graphiquement le zoo à une banderole d'acceuil avec son nom (à définir au début) tenu par des poteaux en bois
il est possible de changer des cases en chemins upgadables (payant) (terre, gravier, sols jolis...) avec un effet sur l'attractivité plus elevée et la rapidité des visiteurs (plus rapides), les visiteurs sont très attirés à rester sur les chemins
pour traverser l'eau il faut des ponds (techniquement comme les chemins mais pour l'eau)
chaque animal a aussi son objet spécial dans l'enclos (arbre à singe par exemple)
il y a desormais des employés que l'on peut acheter avec les pieces du zoo:
soigneur
nourisseur
agent de sécurité
artiste
checheur (jusqu'à 3 chercheur par centres de recheche)
ne pas confondre les laboratoires sur les cartes avec des bébés ou animaux rares et les centres de recherche de zoos qui produisent des unités de recherche
on peut acheter avec des pièces de la nourriture spéciales différente des cases nourriture pour booster durant un temps limité les caractéristique de la nourriture pour un animal en particulier (nouriture dédiée) ainsi les animaux ont 1 nourriture préférée
Faire un menu spécial pour les achats du zoo avec les pièces
Faire des personnages homme et femme
mettre en place un système de passes temporaires qui permettent d'avoir acces à des skins et thèmes durant 1 mois : jungle, tigre,ourse,lapin,lion,chat,dinosore,pentère,jaguar,crocodile 3d
sac tigre,ourse,lapin,lion,chat,dinosore,pentèrejaguar,crocodile
les VIP peuvent conserver leurs thèmes pour toujours tant qu'ils sont vip
un inventaire est ajouté pour gérer les pièces des skins unitairement
les animaux sont en petit dans leur enclos, une affiche de l'animal est sur une des portions horizontales de l'enclos
prévoir un passage en monde isométrique
sur la carte du monde à coté de la case du nom du zoo, une case avec l'avator du joueur (ou bot) du zoo.

View File

@@ -0,0 +1,192 @@
# Plan Cursor (Cas A) — Exécution “build-ready” : enrichir `docs/specs/` sans suppression
Référence direction artistique : `docs/specs/IMG_20260303_170253.jpg`.
## Objectif exécutable
Enrichir **tous** les fichiers `docs/specs/*.md` pour quils soient “prêts à coder” (règles, données, cas limites, UX/UI), en garantissant :
- **Aucune suppression** de rubriques existantes (même vides).
- **Aucune renommage / réordonnancement** de la structure.
## Règles immuables (garde-fous)
- Ne supprimer aucun titre / sous-titre / tableau / section, même si vide.
- Ne pas renommer les rubriques.
- Si une section existe déjà mais est faible : enrichir **dans la même section**.
- Si une section existe en doublon : conserver les deux, enrichir, ajouter une ligne de clarification (“complément / fait foi”).
- Intégrer partout où pertinent la contrainte **isométrique 2.5D** (grille losange, sprites 4 directions, occlusion, `z_index`, hitbox base sprite).
- Ne pas déclencher de build/checks sans validation explicite “OK build”.
- Ne pas committer sans validation explicite du message de commit.
## Definition of Done (DoD) — par fichier
Un fichier est “Done” si :
- **Structure intacte** (rubriques identiques à avant).
- Tous les placeholders évidents (`N/A`, `...`, “voir ci-dessus” non actionnable) ont été remplacés par des détails implémentables.
- Les tableaux ont unités, plages, règles de cumul, caps/planchers **si la rubrique existe**.
- Si un modèle de données existe : il contient `id`, `created_at`, `updated_at`, types/enums, et les champs isométriques si entité visuelle (`grid`, `iso_x`, `iso_y`, `z_index`, `hitbox`).
- Si UX/UI existe : interactions (clic base sprite), feedback hover/selection, assets, événements, messages i18n (clés FR/EN).
## Protocole exécutable (à dérouler mécaniquement)
### Étape 0 — Pré-scan global
- [ ] Rechercher `N/A` dans `docs/specs/` et obtenir la liste des fichiers impactés.
- [ ] Rechercher `...` / placeholders de structure (“`[ ... ]`”, “voir ci-dessus”) dans `docs/specs/`.
- [ ] Classer les fichiers en 5 lots (A→E) ci-dessous.
**Critère de sortie Étape 0 :** liste des fichiers à corriger par placeholder, et ordre de traitement.
### Étape 1 — Traitement par lots (ordre strict)
#### Lot A — Fondations carte / iso / rendu
Objectif : tout ce qui touche à grille, cases, enclos, chemins, ponts, profondeur.
- [ ] Traiter chaque fichier du lot A en suivant “Procédure par fichier”.
**Critère de sortie Lot A :** champs transverses iso (`grid`, `iso_x`, `iso_y`, `z_index`, `hitbox`) cohérents entre ces fichiers.
#### Lot B — Entités vivantes
Objectif : visiteurs, animaux, bébés, reproduction, mort, besoins.
- [ ] Traiter chaque fichier du lot B en suivant “Procédure par fichier”.
**Critère de sortie Lot B :** cycles de vie, seuils, impacts et événements cohérents entre fichiers (ex. reproduction ↔ saisons ↔ température).
#### Lot C — Bâtiments & services
Objectif : boutique, billeterie, nurserie, accueil, camion, centre recherche, labo.
- [ ] Traiter chaque fichier du lot C en suivant “Procédure par fichier”.
**Critère de sortie Lot C :** capacités, files dattente, dépenses/recettes, préconditions, erreurs, interactions UI codables.
#### Lot D — Économie & méta
Objectif : scores, attractivité, enchères, ventes, upgrades, skins/themes/passes/VIP, inventaires, menu achats.
- [ ] Traiter chaque fichier du lot D en suivant “Procédure par fichier”.
**Critère de sortie Lot D :** toutes les mécaniques ont unités, formules, règles de cumul, caps/planchers et messages UX.
#### Lot E — Inventaires & tables de référence
Objectif : saisons, météo, températures, milieux, quêtes, problèmes visiteurs, heures.
- [ ] Traiter chaque fichier du lot E en suivant “Procédure par fichier”.
**Critère de sortie Lot E :** tables de ref complètes (enums/ranges/priorités) et réutilisées par les autres specs.
### Procédure par fichier (checklist atomique)
Pour chaque fichier `.md` ciblé :
- [ ] Lire le fichier en entier.
- [ ] Vérifier la liste des rubriques existantes (ne rien supprimer).
- [ ] Remplacer chaque occurrence de `N/A` par un contenu implémentable (valeurs, conditions, règles, assets).
- [ ] Remplacer chaque placeholder de structure (`...`, `[ ... ]`) par un exemple complet cohérent.
- [ ] Compléter les tableaux : unités, plages, cumul, caps/planchers, préconditions, postconditions.
- [ ] Compléter les interactions : erreurs (fonds insuffisants, inventaire plein, placement invalide), cas limites (pathfinding bloqué, occlusion, click ambiguity).
- [ ] Si la rubrique JSON existe : ajouter/normaliser `id`, timestamps, enums, et champs iso si entité visuelle.
- [ ] Si UX/UI existe : préciser hitbox base sprite, feedback hover/selection, Z-order, assets, events, messages i18n FR/EN.
- [ ] Vérifier quaucun titre/sous-titre na disparu.
**Critère de sortie du fichier :** DoD “par fichier” satisfait.
### Étape 2 — Contrôle final global
- [ ] Vérifier cohérence des champs transverses (`id`, `created_at`, `updated_at`, `owner_id`, `grid`, `iso_x`, `iso_y`, `z_index`, `status_flags`).
- [ ] Vérifier cohérence des événements/messages (noms, niveaux, conditions).
- [ ] Vérifier conformité aux règles projet (ex. interdiction de cache dans les specs).
## Commit et checks (gated)
- [ ] Préparer le message de commit au format imposé (`**Motivations:**`, `**Root causes:**`, `**Correctifs:**`, `**Evolutions:**`, `**Pages affectées:**`) et demander validation.
- [ ] **Ne pas committer** sans validation explicite.
- [ ] **Ne pas exécuter de build/checks** sans “OK build”.
## Mapping des lots (ordre recommandé)
- **Lot A** : `carte_zoo.md`, `case_generique.md`, `case_zoo.md`, `enclos.md`, `chemin.md`, `pont.md`, `affiche_enclos.md`, `objet_enclos.md`, `tech_architecture.md`
- **Lot B** : `animal_generique.md`, `bebe_animal.md`, `visiteur.md`, `reproduction.md`, `mort_bebe.md`, `temperature.md`, `milieu.md`, `etat.md`
- **Lot C** : `boutique.md`, `billeterie.md`, `nurserie.md`, `accueil_animaux.md`, `camion.md`, `centre_recherche.md`, `laboratoire.md`
- **Lot D** : `score_reputation.md`, `score_survie.md`, `attractivite_interne_zoo.md`, `attractivite_zoo_sur_ville.md`, `enchere_generique.md`, `vente_animal.md`, `vente_enchere_animal.md`, `vente_enchere_bebe.md`, `achat_upgrade_*.md`, `inventaire_animaux.md`, `inventaire_bebe_animaux.md`, `menu_achats.md`, `skin.md`, `theme.md`, `passe_saisonnier.md`, `vip.md`, `inventaire_skins.md`, `joueur.md`, `personnage_generique.md`, `bot.md`, `zoo.md`
- **Lot E** : `inventaire_saisons.md`, `inventaire_meteos.md`, `inventaire_temperatures.md`, `inventaire_milieux.md`, `inventaire_quetes.md`, `inventaire_problemes_visiteurs.md`, `inventaire_heures.md`, `carte_monde.md`, `carte_generique.md`, `case_monde.md`, `site_generique.md`, `agrandissement_carte.md`
## Checklist exhaustive — fichiers `docs/specs/` à enrichir (sans suppression)
- [ ] `docs/specs/accueil_animaux.md`
- [ ] `docs/specs/achat_upgrade_boutique.md`
- [ ] `docs/specs/achat_upgrade_camion.md`
- [ ] `docs/specs/achat_upgrade_case.md`
- [ ] `docs/specs/achat_upgrade_case_zoo.md`
- [ ] `docs/specs/achat_upgrade_centre_recherche.md`
- [ ] `docs/specs/achat_upgrade_generique.md`
- [ ] `docs/specs/achat_upgrade_nurserie.md`
- [ ] `docs/specs/affiche_enclos.md`
- [ ] `docs/specs/agent_securite.md`
- [ ] `docs/specs/agrandissement_carte.md`
- [ ] `docs/specs/animal_generique.md`
- [ ] `docs/specs/artiste.md`
- [ ] `docs/specs/attractivite_interne_zoo.md`
- [ ] `docs/specs/attractivite_zoo_sur_ville.md`
- [ ] `docs/specs/avatar_joueur.md`
- [ ] `docs/specs/banderole_accueil.md`
- [ ] `docs/specs/bebe_animal.md`
- [ ] `docs/specs/billeterie.md`
- [ ] `docs/specs/bot.md`
- [ ] `docs/specs/boutique.md`
- [ ] `docs/specs/camion.md`
- [ ] `docs/specs/carte_generique.md`
- [ ] `docs/specs/carte_monde.md`
- [ ] `docs/specs/carte_zoo.md`
- [ ] `docs/specs/case_generique.md`
- [ ] `docs/specs/case_monde.md`
- [ ] `docs/specs/case_zoo.md`
- [ ] `docs/specs/centre_recherche.md`
- [ ] `docs/specs/chemin.md`
- [ ] `docs/specs/chercheur.md`
- [ ] `docs/specs/enchere_generique.md`
- [ ] `docs/specs/enclos.md`
- [ ] `docs/specs/etat.md`
- [ ] `docs/specs/impacts_generique.md`
- [ ] `docs/specs/inventaire_animaux.md`
- [ ] `docs/specs/inventaire_bebe_animaux.md`
- [ ] `docs/specs/inventaire_heures.md`
- [ ] `docs/specs/inventaire_meteos.md`
- [ ] `docs/specs/inventaire_milieux.md`
- [ ] `docs/specs/inventaire_problemes_visiteurs.md`
- [ ] `docs/specs/inventaire_quetes.md`
- [ ] `docs/specs/inventaire_saisons.md`
- [ ] `docs/specs/inventaire_skins.md`
- [ ] `docs/specs/inventaire_temperatures.md`
- [ ] `docs/specs/joueur.md`
- [ ] `docs/specs/laboratoire.md`
- [ ] `docs/specs/menu_achats.md`
- [ ] `docs/specs/milieu.md`
- [ ] `docs/specs/mort_bebe.md`
- [ ] `docs/specs/nourisseur.md`
- [ ] `docs/specs/nourriture_speciale.md`
- [ ] `docs/specs/nurserie.md`
- [ ] `docs/specs/objet_enclos.md`
- [ ] `docs/specs/passe_saisonnier.md`
- [ ] `docs/specs/personnage_generique.md`
- [ ] `docs/specs/pont.md`
- [ ] `docs/specs/reproduction.md`
- [ ] `docs/specs/score_reputation.md`
- [ ] `docs/specs/score_survie.md`
- [ ] `docs/specs/site_generique.md`
- [ ] `docs/specs/skin.md`
- [ ] `docs/specs/soigneur.md`
- [ ] `docs/specs/tech_architecture.md`
- [ ] `docs/specs/temperature.md`
- [ ] `docs/specs/theme.md`
- [ ] `docs/specs/vente_animal.md`
- [ ] `docs/specs/vente_enchere_animal.md`
- [ ] `docs/specs/vente_enchere_bebe.md`
- [ ] `docs/specs/ville.md`
- [ ] `docs/specs/vip.md`
- [ ] `docs/specs/visiteur.md`
- [ ] `docs/specs/zoo.md`

View File

@@ -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 lanimal lors du placement (\(-\)stress = +confort). |
| Risque Contamination | 2% | 0-25% | Probabilité dincident 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 dattente 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 nest pas une attraction nominale, mais une façade visible peut influer sur lambiance. |
| 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 dacclimatation (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.

View File

@@ -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 }
}

View File

@@ -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` : naffecte pas la lisibilité mais réduit lattractivité (ex. -5 rayon 6 cases) jusquau 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

View File

@@ -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 dombre/boutiques | soif + |
| Hiver | recherche dintérieur | fatigue + |
### Impact Heure / Jour-Nuit
N/A
| Période | Activité | Visibilité |
|---|---|---|
| 10h16h | exploration max | haute |
| 17h19h | 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 dattroupement.
**É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).

View File

@@ -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 | 5005000 | 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 dune 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".

View File

@@ -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",

View File

@@ -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 dabsence → 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.

View File

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

View File

@@ -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).

View File

@@ -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"
}
}
]
}
```

View File

@@ -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` sapplique 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.

View File

@@ -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

View File

@@ -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 dun 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 locclusion 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).

View File

@@ -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).

View File

@@ -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 quun `animal_type` nominal. Si une case est convertie, elle déclenche un split/merge.
* **Capacité** : `capacity = floor(area * capacity_per_tile)``capacity_per_tile` dépend de lespè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 lenclos 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 lenclos mais influence la pose de laffiche (priorité visibilité).
* **Occlusion** : si un segment de clôture masque lanimal (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 dajouter un animal dune autre espèce dans un enclos fusionné → refus + message.

View File

@@ -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 530°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 dun 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

View File

@@ -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
```

View File

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

View File

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

View File

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

View File

@@ -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é.

View File

@@ -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

View File

@@ -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 | 05 | pièces / visite | Selon politique du joueur | Ajuste satisfaction visiteurs et revenus. |
| Marketing | 05000 | pièces / action | Campagne publicitaire | Augmente affluence temporaire. |
| Skins / thèmes | 02000 | 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.

View File

@@ -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 loption \"Synthèse\" est utilisée au lieu dun cycle de reproduction |
#### Impact Mort
| Cause | Conséquence | Durée |

View File

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

View File

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

View File

@@ -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

View File

@@ -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** : lobjet est un obstacle interne à lenclos (visiteurs ne le traversent pas si lenclos est visitable ; animaux lutilisent 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

View File

@@ -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 | Lentité 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 lentité (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 lentité | 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 | 15 |
### 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.

View File

@@ -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 deau 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 daffilé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."

View File

@@ -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)

View File

@@ -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 | 10005000 | 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)".

View File

@@ -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 dombre/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%".

View File

@@ -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 dincident. |
## 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.)".

View File

@@ -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 à lheure 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 dattente 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 laffichage de lerreur.
- **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).

View File

@@ -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 leau à 50% de lamplitude. |
| Inertie sol | 1.0 | facteur | Le sol suit lamplitude complète. |
| Lissage | 15 | min in-game | La variation sapplique 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).

View File

@@ -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 à louverture 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.

View File

@@ -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 dincident 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 dentretien” | 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é |
| 1525°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 |
|---|---|---|
| 18h22h | 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 lanimal." | 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”.

View File

@@ -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 |
|---|---|---|
| 18h22h | 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 sincré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.

View File

@@ -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 dun visiteur sélectionné (HUD) | 1.5s (loop) |
##### Animations
| Nom | Cible | Durée | Type (CSS/JS) |

View File

@@ -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