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 | | Capacité | 1 animal | 7 animaux |
### Scores Initiaux ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'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). Indestructible. Ne peut pas être vendu ni déplacé (sauf si feature de réaménagement global).
### Hérédité ### 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 ## 3. Impacts Environnementaux
### Impact Température ### 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). Nourri automatiquement (coût nul ou inclus dans les frais de gestion globaux).
### Impact Attractivité (Visiteurs/Animaux) ### 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 ### 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 ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
@@ -106,10 +120,17 @@ N/A
| 7 | Instantané | 100% | | 7 | Instantané | 100% |
### Dépenses (Boutiques/Visiteurs) ### 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 ### 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 ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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. **Notification Push** : "Votre [Animal] est arrivé à l'accueil !" envoyée si le joueur est hors ligne.
**Emplacement** : Case Accueil. **Emplacement** : Case Accueil.
**Intégration** : Suite de l'action Camion. **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`. **Événements** : `DELIVERY_COMPLETE`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ambience_stable_soft.mp3` (léger, discret, pas intrusif).
- **Sons** : `truck_door.mp3`, `crate_drop.mp3`. - **Sons** : `truck_door.mp3`, `crate_drop.mp3`.
- **Graphiques** : Sprite Caisse en bois. - **Graphiques** : Sprite Caisse en bois.
- **Images** : N/A - **Images** : `reception_building.png` (bâtiment), `reception_icon.png` (icône), `badge_quarantine.png` (badge).
- **Vidéos** : N/A - **Vidéos** : `delivery_short.webm` (2s, loop optionnel sur notif).
- **Animations** : Camion qui repart. - **Animations** : Camion qui repart.
- **Couleurs** : Marron (Caisse). - **Couleurs** : Marron (Caisse).
- **Textes** : N/A - **Textes** : `RECEPTION_DELIVERY_DONE` = "Livraison effectuée", `RECEPTION_ANIMAL_ARRIVED` = "Votre {animalName} est arrivé à l'accueil !"
- **Formes** : N/A - **Formes** : Bulle (notif), badge rond (état).
### Consultation & Acclimatation (Consultation) ### Consultation & Acclimatation (Consultation)
**Description UX** : Le joueur vérifie le temps restant avant de pouvoir placer l'animal. **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`. **Événements** : `OPEN_RECEPTION`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_modal_soft.mp3` (jingle court).
- **Sons** : `ui_open.mp3` - **Sons** : `ui_open.mp3`
- **Graphiques** : Style "Quarantaine" ou "Étable propre". - **Graphiques** : Style "Quarantaine" ou "Étable propre".
- **Images** : Portrait animal. - **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. - **Animations** : Barre de progression qui avance.
- **Couleurs** : Orange (En cours), Vert (Prêt). - **Couleurs** : Orange (En cours), Vert (Prêt).
- **Textes** : "Prêt dans X min". - **Textes** : "Prêt dans X min".
@@ -230,18 +251,18 @@ def add_animal_to_reception(reception_center, animal):
**Événements** : `PLACE_ANIMAL`. **Événements** : `PLACE_ANIMAL`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_confirm_place.mp3` (jingle court de confirmation).
- **Sons** : `animal_happy.mp3` (cri de l'animal). - **Sons** : `animal_happy.mp3` (cri de l'animal).
- **Graphiques** : Sprite Animal. - **Graphiques** : Sprite Animal.
- **Images** : N/A - **Images** : `placement_ghost_ok.png`, `placement_ghost_ko.png` (surbrillance vert/rouge).
- **Vidéos** : N/A - **Vidéos** : `placement_glow.webm` (1.2s, non loop).
- **Animations** : Animal qui saute de joie au placement. - **Animations** : Animal qui saute de joie au placement.
- **Couleurs** : N/A - **Couleurs** : Vert (#2ECC71) placement valide, Rouge (#E74C3C) placement invalide, Ambre (#F39C12) état “en acclimatation”.
- **Textes** : N/A - **Textes** : `BTN_PLACE` = "Placer", `RECEPTION_READY` = "Prêt"
- **Formes** : N/A - **Formes** : Badge “!” (prêt), sablier (en cours).
### Vue Isométrique ### 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). - **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). - **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. - **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", "zoo_id": "uuid",
"dimensions": { "width": 5, "height": 6 }, "dimensions": { "width": 5, "height": 6 },
"expansion_history": [ "expansion_history": [
{ "direction": "EAST", "cost": 1000, "timestamp": "..." } { "direction": "EAST", "cost": 1000, "timestamp": "timestamp" }
], ],
"max_dimensions": { "width": 20, "height": 20 } "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", "style_id": "wood_basic",
"status": "enum (OK, BROKEN, TAGGED)", "status": "enum (OK, BROKEN, TAGGED)",
"status_since": "timestamp",
"repair_cost": "integer",
"clean_cost": "integer",
"cooldowns": {
"next_interaction_at": "timestamp"
},
"animal_info": { "animal_info": {
"name": "Lion d'Afrique", "name": "Lion d'Afrique",
"scientific_name": "Panthera leo", "scientific_name": "Panthera leo",
"conservation_status": "VU" "conservation_status": "VU"
}, },
"i18n": {
"title_key": "string",
"subtitle_key": "string"
},
"iso_x": "integer", "iso_x": "integer",
"iso_y": "integer", "iso_y": "integer",
"z_index": "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). * **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). * **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. * **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 ### Algorithme de Placement
```python ```python
@@ -72,6 +86,11 @@ def place_sign(enclosure):
* **Orientation :** Le sprite doit correspondre à l'orientation du mur (4 sprites différents). * **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. * **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 # 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 ## 1. Données et États
### Modèle de Données (JSON) ### Modèle de Données (JSON)
Propriétés de `Visiteur`. 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 ### 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 ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'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 ### Conditions de Disparition
N/A | Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Ennui | 70 | >= | Cible sortie (billeterie). |
| Heure | fermeture | >= | Cible sortie. |
### Hérédité ### 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 ## 3. Impacts Environnementaux
### Impact Température ### Impact Température
**Canicule/Grand Froid** : Réduit le temps de séjour (-30%). **Canicule/Grand Froid** : Réduit le temps de séjour (-30%).
### Impact Milieu (Biome) ### Impact Milieu (Biome)
N/A | Biome | Compatibilité | Bonus/Malus |
|---|---:|---|
| Chemin pavés | 100% | fatigue -10%/min |
| Boue | 30% | fatigue +20%/min, satisfaction - |
### Impact Saisons ### Impact Saisons
N/A | Saison | Effet | Modificateur |
|---|---|---|
| Été | recherche dombre/boutiques | soif + |
| Hiver | recherche dintérieur | fatigue + |
### Impact Heure / Jour-Nuit ### Impact Heure / Jour-Nuit
N/A | Période | Activité | Visibilité |
|---|---|---|
| 10h16h | exploration max | haute |
| 17h19h | achats sortie | moyenne |
## 4. Impacts Biologiques et Sociaux ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Bébés visibles | + | visiteurs restent plus |
### Impact Mort ### Impact Mort
Voir `visiteur.md` (Départ immédiat). Voir `visiteur.md` (Départ immédiat).
### Impact Nourriture ### Impact Nourriture
N/A | Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Boisson | soif -50 | 5 | 5 |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
**Poids des Cibles** : **Poids des Cibles** :
@@ -68,25 +113,39 @@ N/A
| Banc (si fatigué) | 200 | | Banc (si fatigué) | 200 |
### Impact Valeur ### Impact Valeur
N/A | Facteur | Variation Prix | Condition |
|---|---:|---|
| Visiteur VIP | dépense x2 | si satisfait |
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### Dépenses (Boutiques/Visiteurs)
N/A | Action | Dépense | Condition |
|---|---:|---|
| Achat boisson | 5 | soif > 50 |
| Achat souvenir | 15-30 | proche sortie |
### Trajet Visiteurs ### Trajet Visiteurs
Algorithme de choix de cible pondéré. Algorithme de choix de cible pondéré.
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
@@ -101,7 +160,10 @@ function chooseNextTarget(visitor, zoo):
``` ```
### Messages d'Infos / Alerte ### 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 # Annexes UX/UI
@@ -120,16 +182,16 @@ N/A
**Description UI** : Densité de sprites visiteurs plus élevée autour des cases "Stars". **Description UI** : Densité de sprites visiteurs plus élevée autour des cases "Stars".
**Emplacement** : Grille Zoo. **Emplacement** : Grille Zoo.
**Intégration** : Comportement IA. **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`. **Événements** : `CROWD_GATHER`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ambience_crowd_dynamic.mp3` (volume selon densité).
- **Sons** : Rumeur de foule (volume variable selon densité). - **Sons** : Rumeur de foule (volume variable selon densité).
- **Graphiques** : N/A - **Graphiques** : Particules “flash photo”, bulles démotion.
- **Images** : N/A - **Images** : `icon_camera.png`, `icon_star.png`.
- **Vidéos** : N/A - **Vidéos** : `crowd_flash.webm` (0.6s loop, optionnel).
- **Animations** : Applaudissements, Photos. - **Animations** : Applaudissements, Photos.
- **Couleurs** : N/A - **Couleurs** : Blanc/Jaune (flash), Or (star).
- **Textes** : N/A - **Textes** : `CROWD_GATHER` = "La foule se rassemble"
- **Formes** : N/A - **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 ## 1. Données et États
### Modèle de Données (JSON) ### 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 ```json
{ {
"zoo_id": "uuid", "zoo_id": "uuid",
@@ -30,67 +30,105 @@ Calculé à la volée ou mis en cache.
``` ```
### Caractéristiques Initiales ### 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 ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
N/A | Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo et ville existent | true | Est | Calcul possible. |
### Conditions de Disparition ### Conditions de Disparition
N/A | Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo supprimé | true | Est | Flux devient 0. |
### Hérédité ### Hérédité
N/A | Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Soft reset | Cartographie connue | 100% | Non |
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### 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) ### Impact Milieu (Biome)
N/A | Biome / route | Effet |
|---|---|
| Montagne (routes lentes) | distance effective + | flux - |
### Impact Saisons ### Impact Saisons
**Hiver** : Réduit la volonté de voyager (-20% rayon d'attraction). **Hiver** : Réduit la volonté de voyager (-20% rayon d'attraction).
### Impact Heure / Jour-Nuit ### Impact Heure / Jour-Nuit
N/A | Période | Effet |
|---|---|
| Nuit | pas de départs | flux 0 vers billeterie |
## 4. Impacts Biologiques et Sociaux ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Naissances médiatisées | flux + | événement “baby boom” |
### Impact Mort ### Impact Mort
N/A | Cause | Conséquence | Durée |
|---|---|---|
| Série de morts | flux - | 24h (décroissance) |
### Impact Nourriture ### Impact Nourriture
N/A | Facteur | Variation | Condition |
|---|---|---|
| Prix nourriture élevé | visiteurs budget - | dépense moyenne - |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
Voir formule. Voir formule.
### Impact Valeur ### Impact Valeur
N/A | Facteur | Variation | Condition |
|---|---|---|
| Ville riche | dépense moyenne + | facteur ville > 1 |
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### Dépenses (Boutiques/Visiteurs)
N/A | Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Marketing ville ciblée | 5005000 | coins | augmente facteur ville temporaire |
### Trajet Visiteurs ### Trajet Visiteurs
N/A | Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Ville→Zoo | calcul distance | flux | distance^2 + plafond rayon |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
@@ -104,7 +142,10 @@ function calculateDailyVisitors(zoo, city):
``` ```
### Messages d'Infos / Alerte ### 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 # 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. **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. **Emplacement** : Carte Monde.
**Intégration** : Overlay. **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`. **Événements** : `VIEW_FLOW`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ambience_world_flow.mp3` (léger, optionnel).
- **Sons** : N/A - **Sons** : `ui_flow_toggle.mp3` (toggle overlay).
- **Graphiques** : Lignes de flux. - **Graphiques** : Lignes de flux.
- **Images** : N/A - **Images** : `flow_dotted_line.png`, `car_particle.png`.
- **Vidéos** : N/A - **Vidéos** : `flow_ants.webm` (1s loop, optionnel).
- **Animations** : Pointillés qui avancent (effet fourmis). - **Animations** : Pointillés qui avancent (effet fourmis).
- **Couleurs** : Blanc ou Vert fluo. - **Couleurs** : Blanc ou Vert fluo.
- **Textes** : "150 visiteurs/jour". - **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" "current_queue_length": "integer"
}, },
"entry_log": [ "entry_log": [
{ "timestamp": "...", "visitor_count": 5, "revenue": 50 } { "timestamp": "timestamp", "visitor_count": 5, "revenue": 50 }
], ],
"iso_x": "integer", "iso_x": "integer",
"iso_y": "integer", "iso_y": "integer",

View File

@@ -41,10 +41,18 @@ Sélection hiérarchique : **Famille** > **Spécialisation**.
``` ```
### Caractéristiques Initiales ### 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 ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
@@ -54,46 +62,72 @@ Activation par joueur (déconnexion) ou Spawn serveur (Bot permanent).
Connexion joueur. Connexion joueur.
### Hérédité ### Hérédité
N/A | Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Profil choisi | Paramètres logique | 100% | Non |
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### Impact Température
N/A | Condition | Effet |
|---|---|
| Froid/Chaud extrême | Augmente achats régulation/biome | priorité survie + |
### Impact Milieu (Biome) ### Impact Milieu (Biome)
N/A | Biome | Effet |
|---|---|
| Biome défavorable à la majorité | Achats “changement milieu” | priorité survie + |
### Impact Saisons ### Impact Saisons
N/A | Saison | Effet | Modificateur |
|---|---|---|
| Printemps | Focus reproduction | priorité éleveur + |
| Hiver | Focus survie | priorité conservateur + |
### Impact Heure / Jour-Nuit ### Impact Heure / Jour-Nuit
N/A | Période | Effet |
|---|---|
| Nuit | Actions limitées | fréquence + lente |
## 4. Impacts Biologiques et Sociaux ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Score survie élevé | Bot tente reproduction | profil éleveur |
### Impact Mort ### Impact Mort
N/A | Cause | Conséquence | Durée |
|---|---|---|
| Série de morts | Bot achète nourriture/soins | 24h |
### Impact Nourriture ### Impact Nourriture
N/A | Facteur | Variation | Condition |
|---|---|---|
| Stock bas | Achat immédiat | seuil profil |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
N/A | Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Placements optimisés | + | zoo du bot |
### Impact Valeur ### Impact Valeur
N/A | Facteur | Variation | Condition |
|---|---|---|
| Profil commerçant | Valeur cash + | ventes fréquentes |
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Fréquence Action** : 1 action toutes les 5 à 60 minutes (selon profil). **Fréquence Action** : 1 action toutes les 5 à 60 minutes (selon profil).
### Dépenses (Boutiques/Visiteurs) ### 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 ### 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 ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -101,7 +135,10 @@ N/A
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
@@ -144,11 +181,11 @@ function runBotLogic(bot, zoo):
**Événements** : `SELECT_BOT_PROFILE`. **Événements** : `SELECT_BOT_PROFILE`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_bot_family_pick.mp3` (jingle court).
- **Sons** : `card_flip.mp3`. - **Sons** : `card_flip.mp3`.
- **Graphiques** : Illustrations des familles (ex: Conservateur avec bouclier, Commerçant avec bourse). - **Graphiques** : Illustrations des familles (ex: Conservateur avec bouclier, Commerçant avec bourse).
- **Images** : Portraits Bots. - **Images** : Portraits Bots.
- **Vidéos** : N/A - **Vidéos** : `bot_family_cards.webm` (1s loop, optionnel).
- **Animations** : Flip de carte au choix. - **Animations** : Flip de carte au choix.
- **Couleurs** : Code couleur par famille (Vert=Conservateur, Jaune=Commerçant, etc.). - **Couleurs** : Code couleur par famille (Vert=Conservateur, Jaune=Commerçant, etc.).
- **Textes** : Titres et Descriptions courtes. - **Textes** : Titres et Descriptions courtes.
@@ -162,12 +199,12 @@ function runBotLogic(bot, zoo):
**Navigation** : Lire -> Fermer. **Navigation** : Lire -> Fermer.
**Événements** : `SHOW_REPORT`. **Événements** : `SHOW_REPORT`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_report_open.mp3` (jingle court).
- **Sons** : `notification.mp3`. - **Sons** : `notification.mp3`.
- **Graphiques** : Icône Robot. - **Graphiques** : Icône Robot.
- **Images** : N/A - **Images** : `icon_robot.png`, `report_bg.png`.
- **Vidéos** : N/A - **Vidéos** : `report_scroll.webm` (0.8s loop, optionnel).
- **Animations** : N/A - **Animations** : Apparition slide-in + highlight des lignes importantes.
- **Couleurs** : Gris/Métal. - **Couleurs** : Gris/Métal.
- **Textes** : Liste des actions. - **Textes** : Liste des actions.
- **Formes** : Liste à puces. - **Formes** : Liste à puces.

View File

@@ -211,5 +211,5 @@ function processShop(shop, visitors):
- **Vidéos** : Time-lapse construction (accéléré). - **Vidéos** : Time-lapse construction (accéléré).
- **Animations** : Petit effet de poussière à la pose. - **Animations** : Petit effet de poussière à la pose.
- **Couleurs** : Bleu (Blueprint). - **Couleurs** : Bleu (Blueprint).
- **Textes** : "Construction...". - **Textes** : "Construction".
- **Formes** : Grille de placement. - **Formes** : Grille de placement.

View File

@@ -171,12 +171,12 @@ function updateWorldMap(map, deltaTime):
**Description UI** : Nuages ou zone sombre en périphérie. **Description UI** : Nuages ou zone sombre en périphérie.
**Emplacement** : Bords Carte. **Emplacement** : Bords Carte.
**Intégration** : Mask. **Intégration** : Mask.
**Navigation** : N/A **Navigation** : Zoom-out via upgrade carte ; au clic sur une zone masquée, afficher un tooltip “Zone non explorée”.
**Événements** : N/A **Événements** : `FOG_HOVER`, `FOG_CLICK_BLOCKED`
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ambience_fog_soft.mp3` (optionnel, très discret).
- **Sons** : N/A - **Sons** : `fog_whoosh.mp3` (au reveal), `ui_denied.mp3` (clic zone bloquée).
- **Graphiques** : Texture Nuages. - **Graphiques** : Texture Nuages.
- **Images** : Masque alpha (bords flous). - **Images** : Masque alpha (bords flous).
- **Vidéos** : Effet de brume (particules). - **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", "owner_id": "uuid",
"width": "integer (init 5)", "width": "integer (init 5)",
"height": "integer (init 6)", "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", "x": "integer",
"y": "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", "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_ref": "uuid | null",
"content_type": "string", "content_type": "enum('empty','animal','building','visitor','staff','decoration','path','bridge','water','fence')",
"fertility_level": "float (0-100)", "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_x": "integer",
"iso_y": "integer", "iso_y": "integer",
"z_index": "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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
```python ```python
@@ -48,6 +67,13 @@ def fertilize_case(case, player):
return success("CASE_FERTILIZED") 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 # Annexes UX/UI
## 0. Direction Artistique & Vue ## 0. Direction Artistique & Vue
@@ -69,9 +95,11 @@ def fertilize_case(case, player):
**Événements** : `FERTILIZE_SOIL`. **Événements** : `FERTILIZE_SOIL`.
#### Assets #### Assets
- **Musiques** : Bruit de poudre. - **Musiques** : `ambience_garden_soft.mp3` (léger, discret).
- **Sons** : `scatter.mp3`. - **Sons** : `scatter.mp3`.
- **Graphiques** : Particules vertes/brunes. - **Graphiques** : Particules vertes/brunes.
- **Images** : Texture terre riche (plus foncée). - **Images** : Texture terre riche (plus foncée).
- **Animations** : Poussière qui retombe. - **Animations** : Poussière qui retombe.
- **Couleurs** : Marron foncé. - **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)`. Hérite de `Case (Générique)`.
```json ```json
{ {
"last_visit_time": "timestamp", "last_visit_time": "timestamp | null",
"quality_score": "float (0-100)" "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éristiques Initiales
| Caractéristique | Valeur Initiale | | Caractéristique | Valeur Initiale |
| :--- | :--- | | :--- | :--- |
@@ -43,6 +59,8 @@ Hérite de `Case (Générique)`.
### Scores Initiaux ### Scores Initiaux
**Passages** : 0 (Heatmap de fréquentation). **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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
@@ -114,6 +132,8 @@ function checkAnimalDisappearance(case):
| ID | Niveau | Message | | ID | Niveau | Message |
| :--- | :--- | :--- | | :--- | :--- | :--- |
| `CASE_DIRTY` | Info | "Une case est sale." | | `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 # 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 ```json
{ {
"type": "path", "type": "path",
"material": "gravel", "material": "enum('terre','gravier','paves','bois','tapis_rouge')",
"level": "integer (1-7)",
"x": 10, "x": 10,
"y": 12, "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_x": "integer",
"iso_y": "integer", "iso_y": "integer",
"z_index": "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 ## 2. Règles Métier
* **Connexion Automatique :** Les textures des chemins se connectent automatiquement aux chemins adjacents (Auto-tiling). * **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. * **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 # 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 ## 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. * **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). * **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." | | `BID_PLACED` | Info | "Offre placée avec succès." |
| `OUTBID` | Alerte | "Vous avez été surenchéri !" | | `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 # Annexes UX/UI
@@ -85,11 +85,11 @@ function finalizeAuction(auction):
**Événements** : `HOVER_OFFER`. **Événements** : `HOVER_OFFER`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_market_hover.mp3` (jingle discret optionnel).
- **Sons** : `hover_soft.mp3`. - **Sons** : `hover_soft.mp3`.
- **Graphiques** : Cadre Offre (Doré si rare). - **Graphiques** : Cadre Offre (Doré si rare).
- **Images** : Icône Animal. - **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. - **Animations** : Prix qui clignote si nouvelle enchère.
- **Couleurs** : Vert (Abordable), Rouge (Trop cher). - **Couleurs** : Vert (Abordable), Rouge (Trop cher).
- **Textes** : "Lapin Rare - 500$". - **Textes** : "Lapin Rare - 500$".
@@ -104,15 +104,15 @@ function finalizeAuction(auction):
**Événements** : `PLACE_BID`. **Événements** : `PLACE_BID`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_market_bid.mp3` (jingle court).
- **Sons** : `bid_placed.mp3` (bruit de marteau). - **Sons** : `bid_placed.mp3` (bruit de marteau).
- **Graphiques** : Icône Marteau. - **Graphiques** : Icône Marteau.
- **Images** : Portrait Animal HD. - **Images** : Portrait Animal HD.
- **Vidéos** : N/A - **Vidéos** : `bid_counter_up.webm` (0.8s loop, optionnel).
- **Animations** : Compteur prix qui monte. - **Animations** : Compteur prix qui monte.
- **Couleurs** : Bouton Vert. - **Couleurs** : Bouton Vert.
- **Textes** : "Enchérir". - **Textes** : "Enchérir".
- **Formes** : N/A - **Formes** : Boutons rapides (+10/+50/+100), champ numérique.
### Sablier de Validation (Attente) ### Sablier de Validation (Attente)
**Description UX** : L'enchère est remportée, le transfert est en cours (10 min). **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. **Notification Push** : "Enchère remportée ! Animal livré." à la fin du timer.
**Emplacement** : Carte Monde & HUD. **Emplacement** : Carte Monde & HUD.
**Intégration** : Statut "En cours". **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`. **Événements** : `TIMER_START`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_timer_soft.mp3` (optionnel, très discret).
- **Sons** : `tick_tock.mp3` (ambiance très discrète si focus). - **Sons** : `tick_tock.mp3` (ambiance très discrète si focus).
- **Graphiques** : Sablier animé. - **Graphiques** : Sablier animé.
- **Images** : N/A - **Images** : `icon_hourglass.png`, `badge_pending.png`.
- **Vidéos** : N/A - **Vidéos** : `hourglass_flow.webm` (1s loop, optionnel).
- **Animations** : Sable qui coule. - **Animations** : Sable qui coule.
- **Couleurs** : Orange. - **Couleurs** : Orange.
- **Textes** : "Validation : MM:SS". - **Textes** : "Validation : MM:SS".
- **Formes** : N/A - **Formes** : Badge rond (HUD), icône sur slot.
### Activité "Clic" (Gameplay) ### 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. **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`. **Événements** : `CLICK_HOURGLASS`.
#### Assets #### 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. - **Sons** : `sand_shake.mp3`. **Design ASMR** : Bruit de sable qui crisse ou petit choc mat.
- **Graphiques** : Particules de sable. - **Graphiques** : Particules de sable.
- **Images** : N/A - **Images** : `sand_particle.png`.
- **Vidéos** : N/A - **Vidéos** : `hourglass_shake.webm` (0.5s non loop, optionnel).
- **Animations** : Secousse. - **Animations** : Secousse.
- **Couleurs** : Doré. - **Couleurs** : Doré.
- **Textes** : "+1 XP". - **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) ### Données (JSON)
```json ```json
{ {
"enclosure_id": "enclosure_lions_01", "enclosure_id": "uuid",
"animal_type": "lion", "owner_zoo_id": "uuid",
"biome_type": "savanna", "created_at": "timestamp",
"updated_at": "timestamp",
"animal_type": "string (ref inventaire_animaux)",
"biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
"cells": [ "cells": [
{"x": 10, "y": 10}, {"x": 10, "y": 10},
{"x": 10, "y": 11}, {"x": 10, "y": 11},
@@ -29,6 +32,24 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
"cleanliness": 85, "cleanliness": 85,
"fence_health": 100, "fence_health": 100,
"decoration_score": 15, "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_x": "integer",
"iso_y": "integer", "iso_y": "integer",
"z_index": "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 ### 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. * **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. * **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 ## 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. * **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
### 0. Direction Artistique & Vue ### 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). * **Vue** : Isométrique (2.5D).
* **Grille** : Les déplacements se font sur une grille losange. * **Grille** : Les déplacements se font sur une grille losange.
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest). * **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. * **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. * **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. * **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 ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### 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 ### Trajet Visiteurs
**Fuite** : Les visiteurs évitent les animaux avec l'état "Malade". **Fuite** : Les visiteurs évitent les animaux avec l'état "Malade".
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades

View File

@@ -111,7 +111,9 @@ function getCollectionBonus(player):
count = countDistinctSpecies(player.animals) count = countDistinctSpecies(player.animals)
if count >= 75: return 0.20 if count >= 75: return 0.20
if count >= 50: return 0.10 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 return 0
``` ```

View File

@@ -32,7 +32,14 @@ Changement toutes les X heures ou jours.
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### 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) ### Impact Milieu (Biome)
**Réaction** : La pluie remplit les mares (visuel). La neige couvre le sol. **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. **Pousse** : Pluie = Herbe pousse plus vite.
### Impact Attractivité (Visiteurs/Animaux) ### 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 ### Impact Valeur
**Ventes** : Parapluies vs Glaces. **Ventes** : Parapluies vs Glaces.

View File

@@ -24,7 +24,23 @@
Table statique (Reference Data). Table statique (Reference Data).
### Caractéristiques Initiales ### 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 ### Scores Initiaux
**Surface** : 0 cases. **Surface** : 0 cases.

View File

@@ -2,7 +2,7 @@
## Liste des Incidents ## Liste des Incidents
1. **Soif** : "J'ai soif !" -> Nécessite un stand de boisson ou une boutique proche. 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. 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é. 4. **Frustration** : "On ne voit rien !" -> Animal trop loin ou caché.
5. **Envie** : "Je veux une peluche !" -> Nécessite une boutique de souvenirs. 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 ## 3. Impacts Environnementaux
### Impact Température ### 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) ### Impact Milieu (Biome)
**Adaptation** : Les biomes réagissent visuellement (Neige sur Montagne en Hiver). **Adaptation** : Les biomes réagissent visuellement (Neige sur Montagne en Hiver).
@@ -82,16 +87,29 @@ Voir liste ci-dessus.
## 4. Impacts Biologiques et Sociaux ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### 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 ### 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 ### Impact Nourriture
**Disponibilité** : Fruits abondants en Été (Prix bas), rares en Hiver (Prix haut). **Disponibilité** : Fruits abondants en Été (Prix bas), rares en Hiver (Prix haut).
### Impact Attractivité (Visiteurs/Animaux) ### 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 ### Impact Valeur
**Offre/Demande** : Prix des glaces x2 en Été. **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 ## 4. Interactions
* **Ouverture :** Depuis le menu profil ou la boutique. * **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". * **Sélection :** Clic sur un item pour voir les détails et le bouton "Équiper".
## 5. Annexes Techniques ## 5. Annexes Techniques

View File

@@ -92,10 +92,21 @@ Suppression compte.
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### 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 ### Trajet Visiteurs
**Design** : Le joueur trace les routes. **Design** : Le joueur trace les routes.
@@ -147,11 +158,11 @@ function playerAction(action):
**Événements** : `UI_CLICK`. **Événements** : `UI_CLICK`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_hud_ambience.mp3` (très léger, optionnel, volume 15%).
- **Sons** : `ui_click.mp3`. - **Sons** : `ui_click.mp3`.
- **Graphiques** : Style UI "Bois et Pierre" ou "Moderne Clean". - **Graphiques** : Style UI "Bois et Pierre" ou "Moderne Clean".
- **Images** : Icônes (Pièce, Fiole, Marteau, Carte). - **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. - **Animations** : Compteurs qui défilent quand gain/perte.
- **Couleurs** : Or, Bleu, Blanc. - **Couleurs** : Or, Bleu, Blanc.
- **Textes** : Chiffres, Labels menus. - **Textes** : Chiffres, Labels menus.
@@ -166,12 +177,12 @@ function playerAction(action):
**Événements** : `SAVE_PROFILE`. **Événements** : `SAVE_PROFILE`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_profile_open.mp3` (jingle court).
- **Sons** : `save_success.mp3`. - **Sons** : `save_success.mp3`.
- **Graphiques** : Portraits de bots. - **Graphiques** : Portraits de bots.
- **Images** : Avatars joueurs. - **Images** : Avatars joueurs.
- **Vidéos** : N/A - **Vidéos** : `profile_avatar_spin.webm` (aperçu rotation/pose, 2s, loop).
- **Animations** : Checkmark vert. - **Animations** : Checkmark vert.
- **Couleurs** : Bleu UI. - **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. - **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 | | Facteur | Effet sur Taux | Condition |
|---|---|---| |---|---|---|
| Fertilité Assistée | +20% | Si recherche "Fécondation In Vitro" débloquée | | 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 #### Impact Mort
| Cause | Conséquence | Durée | | 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) - **Prairie** (Tiers Gauche)
- **Océan** (Tiers Milieu) - **Océan** (Tiers Milieu)
- **Montagne** (Tiers Droite) - **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 ## 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. - **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. - **Sons** : Bruit de tonnerre lointain.
- **Graphiques** : Crâne (icône). - **Graphiques** : Crâne (icône).
- **Images** : Portrait du bébé avec ruban noir. - **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. - **Animations** : Tremblement de la fenêtre.
- **Couleurs** : Noir #000000. - **Couleurs** : Noir #000000.
- **Textes** : Cause du décès. - **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. **Description UI** : Animation de l'œuf "volant" vers la nurserie (si visible) ou simple apparition dans le slot.
**Emplacement** : HUD -> Nurserie. **Emplacement** : HUD -> Nurserie.
**Intégration** : Automatique. **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`. **Événements** : `EGG_ADDED`.
#### Assets #### Assets

View File

@@ -25,8 +25,28 @@
"name": "Arbre à Singe", "name": "Arbre à Singe",
"compatible_animals": ["chimpanzee", "lemur"], "compatible_animals": ["chimpanzee", "lemur"],
"cost": 150, "cost": 150,
"durability": 100, // Peut s'user avec le temps "created_at": "timestamp",
"bonus_happiness": 20 "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. * **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é). * **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. * **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 ## 6. Annexes UX/UI
* **Visuel 3D/Iso :** Modèle détaillé correspondant au thème de l'animal. * **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. * **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 # Annexes UX/UI

View File

@@ -17,9 +17,13 @@ Classe abstraite ou interface commune.
```json ```json
{ {
"id": "uuid", "id": "uuid",
"type": "string", "type": "enum('player','bot','visitor','animal','staff')",
"created_at": "timestamp",
"updated_at": "timestamp",
"position": { "x": "int", "y": "int" }, "position": { "x": "int", "y": "int" },
"active": "boolean", "active": "boolean",
"status_flags": ["enum('selected','moving','interacting','hidden','dead','sleeping','busy')"],
"hitbox": "enum('tile','base_sprite','custom_polygon')",
"iso_x": "integer", "iso_x": "integer",
"iso_y": "integer", "iso_y": "integer",
"z_index": "integer" "z_index": "integer"
@@ -27,74 +31,134 @@ Classe abstraite ou interface commune.
``` ```
### Caractéristiques Initiales ### 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 ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'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 ### 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é ### 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 ## 3. Impacts Environnementaux
### Impact Température ### 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) ### 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 ### Impact Saisons
N/A | Saison | Effet | Modificateur |
|---|---|---|
| Été | foule + | visiteurs + |
| Hiver | foule - | visiteurs - |
### Impact Heure / Jour-Nuit ### 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 ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Proximité | augmente | si entité = animal |
### Impact Mort ### Impact Mort
N/A | Cause | Conséquence | Durée |
|---|---|---|
| État critique | passage dead | selon règles type |
### Impact Nourriture ### Impact Nourriture
N/A | Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| selon type | variable | variable | 15 |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
N/A | Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| entité rare visible | + | 8 cases |
### Impact Valeur ### Impact Valeur
N/A | Facteur | Variation Prix | Condition |
|---|---:|---|
| rareté cosmétique | + | si skin rare |
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### Dépenses (Boutiques/Visiteurs)
N/A | Poste | Coût | Unité | Condition |
|---|---:|---|---|
| maintenance entité | variable | /jour | si staff/bâtiment associé |
### Trajet Visiteurs ### Trajet Visiteurs
N/A | Trajet | Règle | Priorité | Notes |
|---|---|---:|---|
| vers POI | A* pondéré | 50 | chemins préférés |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
N/A | Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | comportement de base |
## 8. Logique et Interfaces ## 8. Logique et Interfaces
### Pseudo-code Impacts ### 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 ### 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 # Annexes UX/UI
@@ -117,12 +181,12 @@ N/A
**Événements** : `HOVER_CHARACTER`. **Événements** : `HOVER_CHARACTER`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_hover_soft.mp3` (jingle court, optionnel).
- **Sons** : N/A - **Sons** : `ui_hover.mp3`, `ui_select.mp3`.
- **Graphiques** : Silhouettes archétypales. - **Graphiques** : Silhouettes archétypales.
- **Images** : N/A - **Images** : `badge_player.png`, `badge_bot.png`, `badge_visitor.png`, `badge_animal.png`.
- **Vidéos** : N/A - **Vidéos** : `hover_glow.webm` (0.6s loop, optionnel).
- **Animations** : N/A - **Animations** : Glow pulse (hover), pop (select).
- **Couleurs** : Joueur (Bleu), Bot (Rouge/Gris), Visiteur (Multicolore), Animal (Naturel). - **Couleurs** : Joueur (Bleu), Bot (Rouge/Gris), Visiteur (Multicolore), Animal (Naturel).
- **Textes** : Nom, Rôle. - **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) ### Données (JSON)
```json ```json
{ {
"bridge_id": "bridge_segment_15_15", "bridge_id": "uuid",
"type": "wooden_bridge", "owner_zoo_id": "uuid",
"type": "enum('wood_planks','stone_bridge','rope_bridge')",
"created_at": "timestamp",
"updated_at": "timestamp",
"coordinates": {"x": 15, "y": 15}, "coordinates": {"x": 15, "y": 15},
"water_underneath": true, "water_underneath": true,
"connected_neighbors": ["enum('N','S','E','W')"],
"durability": "integer (0-100)",
"stats": { "stats": {
"speed_modifier": 1.0, "speed_modifier": 1.0,
"attractiveness_bonus": 5 "attractiveness_bonus": 5
}, },
"cost_per_tile": 50, "cost_per_tile": 50,
"repair_cost": 20,
"render": {
"auto_tile_key": "string",
"height_offset_px": "integer (>= 0)",
"occluder": "boolean"
},
"iso_x": "integer", "iso_x": "integer",
"iso_y": "integer", "iso_y": "integer",
"z_index": "integer" "z_index": "integer"
@@ -39,6 +50,9 @@ Structure permettant aux visiteurs (et au personnel) de traverser les étendues
### Règles Métier ### Règles Métier
* **Support :** Doit commencer et finir sur la terre ferme (ou se connecter à un autre pont). * **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. * **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 ## 6. Annexes UX/UI
* **Visuel :** Planches de bois avec rambardes, piliers plongeant dans l'eau. * **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** : * **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner. * **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. * **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: if random() < chance:
createBaby(parentA, parentB) createBaby(parentA, parentB)
else: else:
emitEvent("REPRO_FAIL", "Pas d'alchimie...") emitEvent("REPRO_FAIL", "Tentative échouée")
``` ```
### Messages d'Infos / Alerte ### Messages d'Infos / Alerte
@@ -145,7 +145,7 @@ if checkConditions(parentA, parentB):
- **Vidéos** : Effet de flou artistique (Bloom). - **Vidéos** : Effet de flou artistique (Bloom).
- **Animations** : Cœurs qui montent. - **Animations** : Cœurs qui montent.
- **Couleurs** : Rose. - **Couleurs** : Rose.
- **Textes** : "Love is in the air...". - **Textes** : "Accouplement en cours".
- **Formes** : Cœur. - **Formes** : Cœur.
### Naissance (Événement) ### Naissance (Événement)

View File

@@ -26,30 +26,50 @@ Propriété de `Zoo`.
| Réputation | 0 | | Réputation | 0 |
### Scores Initiaux ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'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 ### Conditions de Disparition
N/A | Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo supprimé | true | Est | Score supprimé avec le zoo. |
### Hérédité ### Hérédité
N/A | Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Soft reset / prestige | Bonus de départ | 100% | Non |
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### 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) ### Impact Milieu (Biome)
N/A | Biome | Effet |
|---|---|
| Enclos adaptés | + réputation via survie + satisfaction visiteurs |
### Impact Saisons ### 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 ### 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 ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
@@ -59,23 +79,33 @@ N/A
**Malus** : -50 pts par mort (décroissance sur 24h). **Malus** : -50 pts par mort (décroissance sur 24h).
### Impact Nourriture ### Impact Nourriture
N/A | Facteur | Variation | Condition |
|---|---|---|
| Stock nourriture stable | +1% / jour | Aucun animal en faim critique |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
C'est la métrique de base de l'attractivité. C'est la métrique de base de l'attractivité.
### Impact Valeur ### 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 ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### Dépenses (Boutiques/Visiteurs)
N/A | Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Campagnes image | 10005000 | coins | Augmente temporairement la réputation visible |
### Trajet Visiteurs ### Trajet Visiteurs
N/A | Mécanisme | Impact | Détail |
|---|---|---|
| Flux ville→zoo | Direct | Réputation est un facteur principal de flux |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -83,7 +113,10 @@ N/A
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
@@ -92,7 +125,10 @@ score = sum(animal.rarity * 10) + (uniqueSpecies * 50) + buildingsValue - deathP
``` ```
### Messages d'Infos / Alerte ### 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 # Annexes UX/UI
@@ -115,11 +151,11 @@ N/A
**Événements** : `SCORE_UPDATE`. **Événements** : `SCORE_UPDATE`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `level_up_jingle.mp3` (court), `ui_score_tick.mp3` (optionnel).
- **Sons** : `level_up_jingle.mp3`. - **Sons** : `level_up_jingle.mp3`.
- **Graphiques** : Icône Couronne. - **Graphiques** : Icône Couronne.
- **Images** : N/A - **Images** : `icon_crown.png`, `reputation_star.png`.
- **Vidéos** : N/A - **Vidéos** : `crown_glint.webm` (0.8s non loop, optionnel).
- **Animations** : Brillance quand augmente. - **Animations** : Brillance quand augmente.
- **Couleurs** : Or. - **Couleurs** : Or.
- **Textes** : "Niveau 5 (4500 pts)". - **Textes** : "Niveau 5 (4500 pts)".

View File

@@ -25,17 +25,27 @@ Propriété de `Zoo`.
| Survie | 100% | | Survie | 100% |
### Scores Initiaux ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'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 ### Conditions de Disparition
N/A | Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo supprimé | true | Est | Score supprimé avec le zoo. |
### Hérédité ### Hérédité
N/A | Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Soft reset | Bonus de départ (+10) | 100% | Non |
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### Impact Température
@@ -45,10 +55,15 @@ Moyenne des adéquations T°.
Moyenne des adéquations Biome. Moyenne des adéquations Biome.
### Impact Saisons ### 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 ### 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 ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
@@ -61,28 +76,47 @@ Seuil critique : < 20% (Risque épidémie).
Moyenne des Faims. Moyenne des Faims.
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
N/A | État | Effet | Condition |
|---|---|---|
| Survie > 90 | Visiteurs satisfaits | bonus attractivité local |
| Survie < 50 | Visiteurs inquiets | malus attractivité |
### Impact Valeur ### 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 ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### 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 ### Trajet Visiteurs
N/A | Mécanisme | Effet | Détail |
|---|---|---|
| Évitement zones malades | détour | réduit densité autour animaux malades |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
@@ -116,11 +150,11 @@ survivalScore = average(allAnimals.health)
**Événements** : `HEALTH_UPDATE`. **Événements** : `HEALTH_UPDATE`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_health_soft.mp3` (jingle discret), `ui_critical_pulse.mp3` (optionnel).
- **Sons** : `heartbeat.mp3` (si critique). - **Sons** : `heartbeat.mp3` (si critique).
- **Graphiques** : Icône Cœur. - **Graphiques** : Icône Cœur.
- **Images** : N/A - **Images** : `icon_heart.png`, `icon_cross.png`.
- **Vidéos** : N/A - **Vidéos** : `heart_pulse.webm` (0.8s loop, optionnel).
- **Animations** : Battement (Pulsation). - **Animations** : Battement (Pulsation).
- **Couleurs** : Vert -> Jaune -> Rouge. - **Couleurs** : Vert -> Jaune -> Rouge.
- **Textes** : "98%". - **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 ### 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 ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
Génération procédurale ou création joueur. Génération procédurale ou création joueur.
### Conditions de Disparition ### 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é ### Hérédité
N/A | Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Monde | Découverte | 100% | Non |
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### Impact Température
N/A | Condition | Effet |
|---|---|
| Tempête régionale | modifie les flux/visites | impact de contexte |
### Impact Milieu (Biome) ### Impact Milieu (Biome)
N/A | Biome | Effet |
|---|---|
| Biome ville | type de visiteurs | modifie budget moyen |
### Impact Saisons ### Impact Saisons
N/A | Saison | Effet |
|---|---|
| Hiver | routes plus lentes | dist effective + |
### Impact Heure / Jour-Nuit ### Impact Heure / Jour-Nuit
N/A | Période | Effet |
|---|---|
| Nuit | lumières sites | rendu + |
## 4. Impacts Biologiques et Sociaux ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Labo événement | boost génétique | si lab actif |
### Impact Mort ### Impact Mort
N/A | Cause | Conséquence | Durée |
|---|---|---|
| Catastrophe sur site | fermeture | 24h |
### Impact Nourriture ### Impact Nourriture
N/A | Facteur | Variation | Condition |
|---|---|---|
| Ville agricole | stock nourriture + | économie |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
N/A | Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Zoo halo | + | visibilité monde |
### Impact Valeur ### Impact Valeur
N/A | Facteur | Variation | Condition |
|---|---|---|
| Emplacement premium | + | proche villes |
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### Dépenses (Boutiques/Visiteurs)
N/A | Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Taxe régionale | 1% | transaction | route commerciale |
### Trajet Visiteurs ### Trajet Visiteurs
N/A | Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Ville→Zoo | attraction | flux | cf. attractivité |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
N/A | Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Tooltips |
## 8. Logique et Interfaces ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
N/A ```text
onHoverSite(site):
showTooltip(site.name, site.type, site.keyMetric)
onClickSite(site):
openDetailPanel(site)
```
### Messages d'Infos / Alerte ### 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 # Annexes UX/UI
@@ -120,11 +168,11 @@ N/A
**Événements** : `HOVER_SITE`. **Événements** : `HOVER_SITE`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_tooltip_soft.mp3` (jingle discret).
- **Sons** : `pop.mp3` léger. - **Sons** : `pop.mp3` léger.
- **Graphiques** : Fond noir semi-transparent. - **Graphiques** : Fond noir semi-transparent.
- **Images** : N/A - **Images** : `site_icon_zoo.png`, `site_icon_city.png`, `site_icon_lab.png`.
- **Vidéos** : N/A - **Vidéos** : `tooltip_fade.webm` (0.6s loop, optionnel).
- **Animations** : Fade in rapide. - **Animations** : Fade in rapide.
- **Couleurs** : Blanc sur Noir. - **Couleurs** : Blanc sur Noir.
- **Textes** : "Paris (1M hab.)". - **Textes** : "Paris (1M hab.)".

View File

@@ -18,8 +18,10 @@
- **Optimisation** : Culling (ne pas rendre ce qui est hors écran). - **Optimisation** : Culling (ne pas rendre ce qui est hors écran).
### Infrastructure ### Infrastructure
- **Cache** : Redis (pour les sessions, les compteurs temps réel et les files d'attente de jobs). - **Cache** : Interdit (aucun cache applicatif, aucune mémorisation). Les lectures doivent refléter létat courant calculé/stocké, sans couche de cache.
- **Message Broker** : BullMQ (Redis) ou RabbitMQ pour les tâches asynchrones (morts, naissances, enchères). - **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), zoo_id UUID REFERENCES zoos(id),
type VARCHAR(50), type VARCHAR(50),
birth_date TIMESTAMPTZ, birth_date TIMESTAMPTZ,
state JSONB, -- { health, hunger, stress, ... } state JSONB, -- { health, hunger, stress, happiness, lastFedAt, lastVisitedAt }
genetics JSONB, -- { color, rarity, parents... } genetics JSONB, -- { color, rarity, parents, mutations, lineageId }
position JSONB -- { x, y } 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) ### Exceptions (Workers)
Certains événements doivent arriver même si le joueur est hors ligne (ex: Enchères, Morts impactant le marché). 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 ### Système
- `POST /api/auth/login` : Authentification par clé. - `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 # 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). **Description UI** : Écran de chargement avec barre de progression ou animation (Animal qui marche).
**Emplacement** : Plein écran (Démarrage). **Emplacement** : Plein écran (Démarrage).
**Intégration** : Bloquant. **Intégration** : Bloquant.
**Navigation** : N/A **Navigation** : Aucune (écran dattente avant accès au jeu).
**Événements** : `APP_LOAD`. **Événements** : `APP_LOAD`.
#### Assets #### Assets
- **Musiques** : Thème Principal. - **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. - **Graphiques** : Logo Jeu.
- **Images** : N/A - **Images** : `loading_mascot.png` (mascotte), `loading_background.png` (fond).
- **Vidéos** : N/A - **Vidéos** : `loading_anim.webm` (animation courte, loop).
- **Animations** : Loader. - **Animations** : Loader.
- **Couleurs** : Thème Jeu. - **Couleurs** : Thème Jeu.
- **Textes** : "Calcul de la simulation...", "Rattrapage du temps...". - **Textes** : "Calcul de la simulation", "Rattrapage du temps".
- **Formes** : N/A - **Formes** : Cercle (spinner), barre (progress).
### Erreur Connexion (Feedback) ### Erreur Connexion (Feedback)
**Description UX** : Perte de connexion ou erreur API. **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`. **Événements** : `NETWORK_ERROR`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : Ducking du thème principal (-6 dB) pendant laffichage de lerreur.
- **Sons** : `error.mp3`. - **Sons** : `error.mp3`.
- **Graphiques** : Icône Wifi barré. - **Graphiques** : Icône Wifi barré.
- **Images** : N/A - **Images** : `icon_wifi_off.png`, `modal_error_bg.png`.
- **Vidéos** : N/A - **Vidéos** : `network_error_glitch.webm` (optionnel, 0.8s loop).
- **Animations** : Secousse. - **Animations** : Secousse.
- **Couleurs** : Rouge. - **Couleurs** : Rouge.
- **Textes** : "Connexion perdue". - **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 ## 3. Impacts Environnementaux
### Impact Température ### 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) ### Impact Milieu (Biome)
**Inertie** : L'eau change de T° moins vite que la terre (Tampon thermique). **Inertie** : L'eau change de T° moins vite que la terre (Tampon thermique).

View File

@@ -2,7 +2,7 @@
## Types de Ventes ## Types de Ventes
- **Aux Enchères** : Vers d'autres joueurs (prix potentiellement élevé). - **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 ## Contraintes
- Un animal malade ou mourant ne peut pas être mis en vente. - Un animal malade ou mourant ne peut pas être mis en vente.
@@ -12,7 +12,50 @@
## 1. Données et États ## 1. Données et États
### Modèle de Données (JSON) ### 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 ### Caractéristiques Initiales
**Total Vendu** : 0 animaux. **Total Vendu** : 0 animaux.
@@ -124,12 +167,12 @@ function sellAnimal(animal, price, mode):
**Événements** : `RELEASE_ANIMAL`. **Événements** : `RELEASE_ANIMAL`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_warning_soft.mp3` (jingle court à louverture de confirmation).
- **Sons** : `bird_fly_away.mp3` (bruit de nature positif). - **Sons** : `bird_fly_away.mp3` (bruit de nature positif).
- **Graphiques** : Icône Cage ouverte. - **Graphiques** : Icône Cage ouverte.
- **Images** : N/A - **Images** : `icon_release.png`, `modal_confirm.png`.
- **Vidéos** : N/A - **Vidéos** : `release_fade.webm` (1.2s non loop, optionnel).
- **Animations** : Animal s'estompe ou court hors de l'écran. - **Animations** : Animal s'estompe ou court hors de l'écran.
- **Couleurs** : Vert (Nature). - **Couleurs** : Vert (Nature).
- **Textes** : "Libéré !". - **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`. Identique à `vente_enchere_bebe.md`.
### Caractéristiques Initiales ### 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 ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
@@ -30,61 +37,114 @@ Action joueur.
Vente ou Expiration. Vente ou Expiration.
### Hérédité ### 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 ## 3. Impacts Environnementaux
### Impact Température ### 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) ### 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 ### 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 ### 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 ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Adulte fertile vendu | Prix x2 | Si fertilité > seuil et pas en cooldown |
### Impact Mort ### Impact Mort
**Risque** : Si `status == expired` et non récupéré sous 24h -> Mort. **Risque** : Si `status == expired` et non récupéré sous 24h -> Mort.
### Impact Nourriture ### Impact Nourriture
N/A | Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Rations transport | stable | inclus | 3 |
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
N/A | Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Vente star (rare) | -10% attractivité zoo | Global (zoo vendeur) |
### Impact Valeur ### 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 ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### 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 ### Trajet Visiteurs
N/A | Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Consultation marché | ouverture UI | tri | pas de visiteurs physiques |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### É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 ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### 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 ### 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 # Annexes UX/UI
@@ -107,15 +167,15 @@ N/A
**Événements** : `CREATE_AUCTION_ADULT`. **Événements** : `CREATE_AUCTION_ADULT`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_market_open.mp3` (jingle court).
- **Sons** : `cash_register_open.mp3`. - **Sons** : `cash_register_open.mp3`.
- **Graphiques** : N/A - **Graphiques** : Icône bourse + badge “adulte”.
- **Images** : Portrait Animal. - **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). - **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". - **Textes** : "Mise à prix".
- **Formes** : N/A - **Formes** : Bottom sheet + cartes.
### Retour Invendu (Action) ### Retour Invendu (Action)
**Description UX** : L'enchère est finie sans acheteur. Le joueur doit récupérer l'animal. **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`. **Événements** : `RECLAIM_ANIMAL`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_fail_soft.mp3` (jingle court).
- **Sons** : `sad_trombone.mp3` (échec). - **Sons** : `sad_trombone.mp3` (échec).
- **Graphiques** : N/A - **Graphiques** : Icône retour (flèche).
- **Images** : N/A - **Images** : `icon_reclaim.png`.
- **Vidéos** : N/A - **Vidéos** : `reclaim_return.webm` (1.2s non loop, optionnel).
- **Animations** : Retour visuel de l'animal. - **Animations** : Retour visuel de l'animal.
- **Couleurs** : Gris (Désactivé). - **Couleurs** : Gris (Désactivé).
- **Textes** : "Invendu". - **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) | | Délai Validation | 10 min (fixe) |
### Scores Initiaux ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
@@ -53,46 +57,79 @@ Action joueur.
Vente ou Expiration. Vente ou Expiration.
### Hérédité ### 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 ## 3. Impacts Environnementaux
### Impact Température ### 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) ### Impact Milieu (Biome)
N/A | Biome / Contexte | Compatibilité | Bonus/Malus |
|---|---:|---|
| Marché (UI) | 100% | Aucun |
| Transport long | 80% | Fatigue + |
### Impact Saisons ### 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 ### 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 ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
N/A | Facteur | Effet sur Taux | Condition |
|---|---|---|
| Bébé rare vendu | +10 réputation | Si `status` devient `sold` puis finalisé |
### Impact Mort ### Impact Mort
**Risque** : Si `status == expired` et non récupéré sous 1h -> Mort du bébé. **Risque** : Si `status == expired` et non récupéré sous 1h -> Mort du bébé.
### Impact Nourriture ### Impact Nourriture
N/A | Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Lait / soin | Stabilise | inclus | 5 |
### Impact Attractivité (Visiteurs/Animaux) ### 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 ### Impact Valeur
**Dépréciation** : Aucune (c'est une enchère). **Dépréciation** : Aucune (c'est une enchère).
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### 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) ### 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 ### Trajet Visiteurs
N/A | Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Consultation acheteurs | ouverture marché | tri par visibilité | pas de visiteurs physiques |
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -102,11 +139,28 @@ N/A
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### 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 ## 8. Logique et Interfaces
### Pseudo-code Impacts ### 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 ### Messages d'Infos / Alerte
| ID | Niveau | Message | | ID | Niveau | Message |
@@ -135,12 +189,12 @@ N/A
**Événements** : `CREATE_AUCTION`. **Événements** : `CREATE_AUCTION`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_market_open.mp3` (jingle court).
- **Sons** : `cash_register_open.mp3`. - **Sons** : `cash_register_open.mp3`.
- **Graphiques** : Icône Bourse/Pièce. - **Graphiques** : Icône Bourse/Pièce.
- **Images** : Portrait Bébé. - **Images** : Portrait Bébé.
- **Vidéos** : N/A - **Vidéos** : `auction_sheet_intro.webm` (0.8s non loop, optionnel).
- **Animations** : N/A - **Animations** : Compteur “mise à prix” qui sincrémente, pulsation du bouton “Valider”.
- **Couleurs** : Or. - **Couleurs** : Or.
- **Textes** : "Prix de départ", "Durée". - **Textes** : "Prix de départ", "Durée".
- **Formes** : Champs de saisie. - **Formes** : Champs de saisie.
@@ -154,12 +208,12 @@ N/A
**Événements** : `OPEN_MY_SALES`. **Événements** : `OPEN_MY_SALES`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : `ui_market_list.mp3` (jingle discret optionnel).
- **Sons** : `notification.mp3` (si offre reçue). - **Sons** : `notification.mp3` (si offre reçue).
- **Graphiques** : N/A - **Graphiques** : Icône cloche + badge compteur.
- **Images** : N/A - **Images** : `icon_hourglass.png`, `icon_bid.png`.
- **Vidéos** : N/A - **Vidéos** : `bid_badge_pulse.webm` (0.6s loop, optionnel).
- **Animations** : N/A - **Animations** : Badge qui pulse sur nouvelle offre.
- **Couleurs** : N/A - **Couleurs** : Ambre (#F39C12) en attente validation, Vert (#2ECC71) vendu.
- **Textes** : "Meilleure offre : X". - **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 #### Événements du Ville / Visiteur
| Event | Impact Affluence | Impact Budget | | 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% | | Bonus Économique | +10% | Dépense Moyenne +20% |
#### Événements du Visiteur #### É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 | | É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é) | | Jauge Satisfaction | Barre Progression | Vert -> Rouge | Visible (si sélectionné) |
#### Emplacement #### Emplacement
@@ -390,7 +390,7 @@ Style graphique inspiré de `IMG_20260303_170253.jpg` : Coloré, vivant, détail
##### Vidéos ##### Vidéos
| Clip | Usage | Durée | | 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 ##### Animations
| Nom | Cible | Durée | Type (CSS/JS) | | 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 | | Reproduction | 0 |
### Scores Initiaux ### 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 ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition