Initial commit
**Motivations:** - Initialisation du versionning git pour le projet **Root causes:** - N/A (Nouveau projet) **Correctifs:** - N/A **Evolutions:** - Structure initiale du projet - Ajout du .gitignore **Pages affectées:** - Tous les fichiers
This commit is contained in:
75
docs/bdd-comptes.md
Normal file
75
docs/bdd-comptes.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Base de données et comptes
|
||||
|
||||
Utilisation de PostgreSQL pour persister les zoos et les comptes joueurs, et du client pour se connecter à l’API.
|
||||
|
||||
---
|
||||
|
||||
## 1. Schéma PostgreSQL
|
||||
|
||||
Fichier : `server/schema.sql`.
|
||||
|
||||
Créer la base et exécuter le schéma une fois :
|
||||
|
||||
```bash
|
||||
createdb builazoo
|
||||
psql -d builazoo -f server/schema.sql
|
||||
```
|
||||
|
||||
Ou avec une URL complète :
|
||||
|
||||
```bash
|
||||
psql "$DATABASE_URL" -f server/schema.sql
|
||||
```
|
||||
|
||||
**Tables :**
|
||||
|
||||
- **accounts** : `id` (UUID), `public_key` (texte unique), `pseudo` (texte unique), `created_at`, `last_seen_at`. Un compte = une clé publique + pseudo (pas de mot de passe).
|
||||
- **zoos** : `id`, `account_id` (FK vers accounts, NULL pour les bots), `name`, `x`, `y`, `is_bot`, `animal_weights` (JSONB), `game_state` (JSONB), `updated_at`. Un compte a au plus un zoo (contrainte UNIQUE sur `account_id`).
|
||||
- **map_config** : une ligne `params` avec `mapWidth`, `mapHeight`, `minZoos` pour la densité de zoos et les bots.
|
||||
|
||||
---
|
||||
|
||||
## 2. Variables d’environnement serveur
|
||||
|
||||
- **DATABASE_URL** : URL de connexion PostgreSQL (ex. `postgres://user:pass@localhost:5442/builazoo`). **Port 5442** si PostgreSQL écoute sur ce port sur la machine. Par défaut `postgres://localhost/builazoo` (port 5432).
|
||||
- **PORT** : Port HTTP du serveur (défaut 3000).
|
||||
|
||||
Le serveur charge un fichier **`.env`** à la racine du projet (via `dotenv`) au démarrage. Copier `.env.example` en `.env` et renseigner les valeurs. Démarrer avec : `node server/index.js` (depuis la racine du projet ou depuis `server/`).
|
||||
|
||||
---
|
||||
|
||||
## 3. Activer l’API côté client
|
||||
|
||||
Trois possibilités :
|
||||
|
||||
1. **Paramètre d’URL** : ouvrir l’app avec `?api=https://votre-serveur.example.com` (sans slash final). Exemple : `https://jeu.example.com/?api=https://api.example.com`.
|
||||
2. **Champ « URL du serveur »** : au premier lancement sans `?api=`, l’écran propose « Jouer en local » ou « Se connecter au serveur ». Saisir l’URL du serveur et cliquer sur « Se connecter au serveur ». L’URL est enregistrée en `localStorage` (`builazoo_api_url`) et réutilisée aux prochains chargements.
|
||||
3. **Injection globale** : définir `window.BUILAZOO_API_URL` avant le chargement du script (comme le fait le script dans `index.html` pour `?api=`).
|
||||
|
||||
Si une URL est définie (paramètre, localStorage ou `window`), le jeu charge la liste des zoos via `GET /api/zoos`, puis le zoo du joueur via `GET /api/zoos/me` (requête signée). La sauvegarde se fait par `PATCH /api/zoos/me` avec `game_state` en JSON.
|
||||
|
||||
---
|
||||
|
||||
## 4. Flux compte et zoo
|
||||
|
||||
- **401 sur GET /api/zoos/me** : compte inconnu → affichage de l’écran « Créer un compte » (pseudo). Après inscription (`POST /api/auth/register` avec `X-Public-Key`), création du zoo (`POST /api/zoos/me`) puis entrée dans le jeu.
|
||||
- **404 sur GET /api/zoos/me** : compte connu mais aucun zoo → création automatique d’un zoo (`POST /api/zoos/me`) avec état initial, puis entrée dans le jeu.
|
||||
- **200** : zoo existant → chargement de `game_state`, mise à jour de `last_seen_at` côté serveur.
|
||||
|
||||
Authentification : clé Ed25519 générée dans le navigateur, clé publique envoyée à l’inscription ; chaque requête authentifiée est signée (méthode, chemin, timestamp, hash du body). La clé privée reste en local (localStorage).
|
||||
|
||||
---
|
||||
|
||||
## 5. Déploiement
|
||||
|
||||
- **Backend** : héberger le serveur Node (Express) avec accès au PostgreSQL ; exposer l’URL de l’API (proxy, CORS si besoin).
|
||||
- **Front** : déployer les fichiers statiques ; les utilisateurs passent par `?api=...` ou par l’écran « Se connecter au serveur » pour pointer vers l’API.
|
||||
- **CORS** : le serveur utilise `cors({ origin: true, credentials: true })` ; adapter si des origines précises sont imposées.
|
||||
|
||||
---
|
||||
|
||||
## 6. Références
|
||||
|
||||
- Schéma et routes : `server/schema.sql`, `server/db.js`, `server/routes/zoos.js`.
|
||||
- Client : `web/js/api-client.js`, `web/js/auth-client.js`, `web/js/main.js`.
|
||||
- Fonctionnalités détaillées : `docs/features/carte-fixe-serveur-auth.md`, `docs/features/reste-a-implementer-carte-serveur.md`.
|
||||
411
docs/cahier des charges.md
Normal file
411
docs/cahier des charges.md
Normal file
@@ -0,0 +1,411 @@
|
||||
# Spécifications finales – Build a Zoo (Evo Zoo)
|
||||
|
||||
Document consolidé décrivant l'état final du projet, sans les étapes intermédiaires ni le fil des évolutions.
|
||||
|
||||
---
|
||||
|
||||
## 1. Périmètre et objectif
|
||||
|
||||
Reconstruction, à fonctionnalités équivalentes, d'un tycoon centré sur l'achat d'œufs (via une carte du monde), l'éclosion en animaux, la production passive de monnaie, l'extension du terrain et l'amélioration des chances de rareté. Version web (navigateur), pas Roblox. Jeu multi-joueur : comptes, base de données, zoos des autres joueurs et bots visibles sur la carte.
|
||||
|
||||
### Boucle de jeu
|
||||
|
||||
- Achat d'œufs depuis la carte du monde (glisser l'œuf sur le camion pour acheter).
|
||||
- Placement des œufs en nurserie ou sur une case vide (grille du zoo).
|
||||
- Éclosion temporisée → animal selon biome et rareté (tirage pondéré).
|
||||
- Revenus passifs (animaux + visiteurs + boutiques).
|
||||
- Dépense de pièces : améliorer compétences (école), parcelle, camion, carte du monde, nurseries, boutiques.
|
||||
|
||||
### Garanties au démarrage et au chargement
|
||||
|
||||
- À la création d'un zoo (inscription) : état initial avec 200 pièces, offres déjà renouvelées avant envoi au serveur.
|
||||
- **Démarrage autonome** : Le joueur commence systématiquement avec **3 couples reproducteurs d'animaux basiques** (ex. Lapins, Poules, Canards selon biome de départ) déjà placés ou dans l'inventaire. Cela garantit une reproduction immédiate et alimente le marché "bas prix" dès le début sans dépendre des enchères externes.
|
||||
- Au chargement (localStorage ou API) : si pièces < 100, correction à 200 ; si liste d'offres vide, rafraîchissement des offres. Ainsi le joueur a toujours de quoi jouer.
|
||||
|
||||
### Règles économie
|
||||
|
||||
- Revenu par animal : revenu de base × multiplicateur mutation × multiplicateur niveau, par intervalle de temps.
|
||||
- Coûts d'upgrade : progression par paliers (ex. coût de base × facteur^(niveau−1)).
|
||||
- Loot œuf → animal : tirage pondéré selon le biome de la case et la table de l'œuf (15 couleurs, 5 niveaux de rareté par couleur, 75 animaux). Les niveaux de rareté sont pondérés par la suite de Fibonacci (F(1)=1, F(2)=1, F(3)=2, F(4)=3, F(5)=5) pour les revenus et la valeur de vente. Identification des animaux par couleur et rareté (ex. c0_r0 à c14_r4). Compatibilité anciennes sauvegardes : au chargement, animal inconnu → c0_r0, œuf inconnu → Color_1.
|
||||
- Sécurité : pas de confiance au client pour pièces, loot, timers, placements ; limitation de la fréquence des actions ; traçabilité des transactions.
|
||||
|
||||
---
|
||||
|
||||
## 2. Carte du zoo (grille)
|
||||
|
||||
### Cases spéciales
|
||||
|
||||
- **École** : une case (ex. (1,1)) affiche l'icône école ; niveau de compétences = max des niveaux d'écoles ; déblocage des types d'œufs selon ce niveau. Amélioration en cliquant sur la case (flèche ▲ si upgrade possible).
|
||||
- **Nurserie** : œufs achetés apparaissent dans les cases nurserie (au-dessus de la zone « Agrandir zoo »), un œuf par case ; placement par clic sur une case vide ou glisser. Construction payante sur case vide (choix Nurserie ou Boutique). Le jeu commence avec une case nurserie à côté de l'école.
|
||||
- **Boutique de souvenirs** : construction payante sur case vide. Les visiteurs qui passent par une boutique rapportent plus de pièces. Évolution payante pour augmenter les revenus par passage.
|
||||
- **Nurserie – évolution** : payante ; éclosion plus rapide selon le niveau ; les animaux plus rares ont un temps d'éclosion plus long (multiplicateur rareté).
|
||||
- **Agrandir zoo** : zone dédiée au-dessus de la zone du camion (📐 + flèche ▲ si upgrade possible). Plus d'icônes « Agrandir » ou « Agrandir la carte » à côté de l'école sur la grille.
|
||||
- **Zone camion (vente)** : en bas à droite du panneau parcelle. Glisser un animal sur cette zone pour le vendre (envoi à un autre zoo, animation camion sur la carte du monde).
|
||||
|
||||
### Grille et Feedbacks Visuels Environnementaux
|
||||
|
||||
- Biomes par tiers de largeur : prairie (gauche), océan (milieu), montagne (droite).
|
||||
- **Feedbacks visuels de terrain** (remplace les jauges) :
|
||||
- **Mauvais biome** : L'herbe jaunit fortement, le sol se craquelle ou devient boueux (changement de teinte global de la case).
|
||||
- **Température inadaptée** : Le sol se couvre de givre blanc (trop froid) ou émet des vapeurs rougeâtres (trop chaud).
|
||||
- **Saleté** : Accumulation visible de déchets sombres ou de poussière grise si l'entretien laisse à désirer.
|
||||
- Glisser-déposer : œufs et animaux déplaçables d'une case à l'autre ; image de glissement = contenu de la case (emoji + libellé).
|
||||
- **Disparition des animaux** : un animal non visité par un visiteur pendant une durée configurable (ex. 5 min, `Visitor.MaxSecondsWithoutVisit`) est retiré ; la case redevient vide.
|
||||
|
||||
### Visiteurs et Incidents (Gameplay d'attente)
|
||||
|
||||
- Les visiteurs se déplacent sur la grille (attraction vers les animaux à forte valeur).
|
||||
- **Incidents et Exigences** : Les visiteurs peuvent rencontrer des problèmes ou exprimer des exigences spécifiques (soif, poubelle pleine, banc requis, animal trop loin, envie de photo).
|
||||
- **Apparition contextuelle** : Ces incidents apparaissent plus fréquemment lorsque le joueur est en phase d'attente (camion en déplacement, enchère en cours, éclosion longue) pour combler les temps morts et offrir une activité gratifiante.
|
||||
- **Affichage** : Une bulle d'icône apparaît au-dessus du visiteur concerné.
|
||||
- **Résolution** : Le joueur doit cliquer sur la bulle ou effectuer une action correctrice (poser un banc, nettoyer).
|
||||
- **Impact** :
|
||||
- Résolu : Gain immédiat d'attraction et bonus de pièces.
|
||||
- Ignoré/Non résolu : Perte d'attraction et départ prématuré du visiteur.
|
||||
- **Invités de luxe** : Une part des visiteurs (ex. 8 %) paie plus l'entrée et dépense plus en boutique.
|
||||
|
||||
---
|
||||
|
||||
## 3. Carte du monde
|
||||
|
||||
### Présentation
|
||||
|
||||
- Carte fixe avec zoos en positions fixes. Le **zoom** dépend uniquement du niveau d'upgrade « Agrandir carte » (pas de molette ni de pan manuel). Grille de fond aux couleurs des biomes (prairie / océan / montagne), comme la grille du zoo. Zoos, villes et laboratoire affichés par-dessus.
|
||||
- Un seul œuf visible par zoo : nom du zoo puis un slot fixe avec soit l'icône zoo (🏠), soit un œuf (type + prix) pour les autres zoos. Pour le zoo du joueur : pas d'œuf affiché, seulement nom + icône zoo.
|
||||
- Achat d'œuf : glisser l'œuf depuis le slot d'un zoo (ou du laboratoire) sur le **camion** du joueur ; le camion fait l'aller-retour zoo joueur → zoo vendeur → zoo joueur ; la vitesse dépend du niveau du camion. Les œufs achetés apparaissent en nurserie sur la carte du zoo.
|
||||
|
||||
### Zones sur la carte du monde
|
||||
|
||||
- **Agrandir la carte** : zone au même emplacement que le camion (au-dessus), avec flèche ▲ si upgrade possible.
|
||||
- **Camion** : zone pour déposer un œuf (achat) ; même zone pour l'animation de vente (animal vendu → camion vers un autre zoo).
|
||||
|
||||
### Laboratoire
|
||||
|
||||
- POI « Laboratoire » (🔬) sur la carte. Parfois une offre d'œuf (prix fixe, pas d'enchères) ; achat en glissant l'œuf sur le camion ou équivalent selon l'UI.
|
||||
|
||||
### Villes
|
||||
|
||||
- Villes affichées (icône 🏙️). Plus le zoo est proche d'une ville, plus il « attire » de visiteurs (formule d'attraction). La valeur totale des animaux du zoo augmente aussi l'attraction.
|
||||
|
||||
### Stagnation
|
||||
|
||||
- Zoos qui évoluent peu (aucune action d'évolution depuis un certain temps) subissent une baisse progressive du multiplicateur de visiteurs (jusqu'à un plancher, ex. 10 %).
|
||||
|
||||
### Camions NPC
|
||||
|
||||
- Des camions (ventes d'œufs entre zoos) sont visibles sur la carte ; ils se déplacent entre deux zoos (animation interpolée), ajoutés périodiquement par la boucle de jeu.
|
||||
|
||||
### Bots
|
||||
|
||||
- Les zoos bots ont les mêmes indicateurs et formules que le joueur (revenus, niveaux). Leurs décisions (achat, vente, upgrades) sont pilotées par un **profil** (fast ~70 % du coût pour agir, slow ~200 %, balanced intermédiaire). Les couleurs d'œufs achetées sont pondérées par les **zoos voisins** sur la carte (distance max configurable) et les poids propres.
|
||||
|
||||
---
|
||||
|
||||
## 4. Interface et barre du haut
|
||||
|
||||
### Barre du jeu (tout en haut, toute la largeur)
|
||||
|
||||
- À gauche : titre « Construis un zoo » + icône d'aide « ? » (tooltip sur la ligne de statut).
|
||||
- Barre d'indicateurs avec icônes uniquement ; texte (libellé) au survol (tooltip). Indicateurs : Pièces (🪙), Parcelle (📐), Case sélectionnée (📍, format « x y » sans virgule), Compétences (🎓), Visiteurs (👤), Œufs à vendre (🥚), Météo/heure (🌤️). Aucune décimale (valeurs entières).
|
||||
- À droite : bouton Musique (🎵, actif / grisé si désactivé), icône Quêtes (📋, ouverture d'un menu type notification avec « Objectifs du jour »), Prestige (⭐), Recommencer (🔄), Mode automatique (✋ inactif / 🤖 actif). Le bouton de vue (zoo / monde) affiche l'icône de la vue active (🦒 ou 🗺️) et bascule au clic.
|
||||
|
||||
### Contenu sous la barre
|
||||
|
||||
- Pas de barre (ligne) de séparation entre la barre et le contenu. Pas d'onglets « Carte du zoo » / « Carte du monde » ni titres « Parcelles (?) » / « Carte du monde (?) ». Un seul sélecteur dans la barre : deux icônes zoo / monde pour afficher soit la grille du zoo soit la carte du monde.
|
||||
- Message d'erreur : affiché au-dessus du contenu ; masqué (non visible, ne prend pas de place) lorsqu'il n'y a pas d'erreur.
|
||||
|
||||
### Rafraîchissement
|
||||
|
||||
- La barre du haut n'est pas reconstruite à chaque mise à jour ; seules les parties dynamiques (indicateurs, grille, carte du monde) sont rafraîchies. La vue active (zoo ou monde) reste celle affichée après un rafraîchissement.
|
||||
|
||||
### Sons, musique, quêtes, météo, prestige
|
||||
|
||||
- Sons distincts par action (achat, placement, éclosion, upgrade, vente, quête, erreur). Musique de fond activable (bouton 🎵) ; préférence enregistrée (ex. localStorage).
|
||||
- Quêtes / objectifs journaliers : 3 quêtes par jour (placer œufs, gagner pièces, vendre animaux, améliorer tapis/parcelle) ; récompense en pièces à la complétion ; affichage en menu type notification (icône 📋).
|
||||
- Météo (ensoleillé / nuageux / pluie) et cycle jour–nuit (longueur configurable) ; affichage dans la barre (ex. « Jour · Ensoleillé »). Fond de page dont la couleur ou le dégradé varie selon la phase (aube, jour, crépuscule, nuit) et la météo.
|
||||
- Prestige : reset grille et progression contre bonus permanent de revenus (+15 % par niveau) ; coût minimal en pièces. Bouton ⭐ dans la barre.
|
||||
- Visiteurs : sprites animés sur la grille (trajectoires uniques, attraction vers le centre pondéré par la valeur de vente des animaux) ; revenu additionnel = (nombre de visiteurs) × paiement par visiteur.
|
||||
|
||||
---
|
||||
|
||||
## 5. Comptes, persistance et multijoueur
|
||||
|
||||
### Accès
|
||||
|
||||
- Pas de jeu en local : au démarrage, écran avec champ « URL du serveur » (pré-rempli si déjà enregistré) et bouton « Se connecter au serveur ». Après connexion, bootstrap : chargement des zoos, chargement du zoo du joueur (GET /api/zoos/me).
|
||||
|
||||
### Comptes
|
||||
|
||||
- Authentification par clé (pseudo sans mot de passe ; paire clé générée dans le navigateur ; requêtes signées ; clé privée stockée en local). Comptes en base (ex. table `accounts` : id, public_key, pseudo, etc.).
|
||||
- **401** sur GET /api/zoos/me : compte inconnu → écran « Créer un compte » (pseudo), puis inscription et création du zoo.
|
||||
- **404** : compte connu mais aucun zoo → création automatique d'un zoo avec état initial, puis entrée dans le jeu.
|
||||
- **200** : chargement du `game_state` et affichage du jeu.
|
||||
|
||||
### Données joueurs et bots
|
||||
|
||||
- Table `zoos` : une ligne par zoo (joueur ou bot) avec id, name, position (x, y), animal_weights, game_state (JSONB), is_bot, account_id (NULL pour les bots). Les bots ont leur game_state persisté et mis à jour par un tick serveur ; le client affiche les zoos reçus de l'API (refetch périodique).
|
||||
|
||||
### Mode automatique et Profils d'absence
|
||||
|
||||
Le joueur peut activer un « mode automatique » (bouton dans la barre) pour maintenir son zoo en vie lors de ses absences. Il doit choisir un **profil de gestion** parmi 50 archétypes (basés sur les logiques des bots).
|
||||
|
||||
**Interface de sélection des profils :**
|
||||
|
||||
- L'interface ne doit pas être une simple liste déroulante.
|
||||
- Elle doit proposer une sélection hiérarchique :
|
||||
1. **Choix de la Famille** (Conservateur, Éleveur, Commerçant, Expansionniste, Scientifique).
|
||||
2. **Choix de la Spécialisation** au sein de la famille choisie (ex: "Le Jardinier Prudent" vs "Le Gardien").
|
||||
- Chaque profil affiche clairement ses priorités et ses risques.
|
||||
|
||||
**Liste des 50 profils disponibles (catégories principales) :**
|
||||
|
||||
1. **Les Conservateurs (1-10)** : Priorité absolue à la survie. Achètent uniquement de la nourriture, ne vendent pas, ne s'étendent pas.
|
||||
* *Profils :* "Le Jardinier Prudent", "L'Économe", "Le Gardien", "Le Protecteur", "Le Minimaliste", etc.
|
||||
2. **Les Éleveurs (11-20)** : Priorité à la reproduction. Optimisent les placements pour les naissances, achètent des partenaires.
|
||||
* *Profils :* "Le Généticien", "Le Marieur", "La Cigogne", "Le Producteur de Masse", "L'Expert en Rareté", etc.
|
||||
3. **Les Commerçants (21-30)** : Priorité à l'achat/vente. Achètent bas, revendent dès qu'une marge est possible.
|
||||
* *Profils :* "Le Trader", "L'Importateur", "Le Grossiste", "Le Spéculateur", "Le Négociant Rapide", etc.
|
||||
4. **Les Expansionnistes (31-40)** : Priorité à l'agrandissement du terrain et des infrastructures. Investissent tout le cash dans la pierre.
|
||||
* *Profils :* "Le Bâtisseur", "L'Architecte", "Le Conquérant", "Le Visionnaire", "L'Urbaniste", etc.
|
||||
5. **Les Scientifiques (41-50)** : Priorité à la recherche et à l'école. Cherchent à débloquer les niveaux supérieurs avant tout.
|
||||
* *Profils :* "Le Chercheur", "Le Professeur", "L'Innovateur", "Le Technologue", "Le Savant Fou", etc.
|
||||
|
||||
Chaque profil dispose de paramètres spécifiques (seuil de dépense, fréquence d'action, type d'animaux préférés) qui influencent l'évolution du zoo pendant l'absence du joueur.
|
||||
|
||||
---
|
||||
|
||||
## 6. Intervalles et charge
|
||||
|
||||
- Boucle de jeu (revenus, météo, temps, visites, bots, éclosions, sauvegarde) : environ toutes les **5 s**.
|
||||
- Sauvegarde locale et API : au plus toutes les **5 s** ; throttle côté API (pas plus d'un envoi toutes les 5 s).
|
||||
- Rafraîchissement des offres (carte du monde) : au plus toutes les **8 s**.
|
||||
|
||||
---
|
||||
|
||||
## 7. Éléments non implémentés / suite possible
|
||||
|
||||
### Billeterie
|
||||
|
||||
- Demande : une icône « boutique » au démarrage = billeterie ; les visiteurs arrivent par la billeterie, paient l'entrée une fois, repartent avant la fin de la journée, puis reviennent selon l'attraction du zoo. **Non implémenté** : pas de case billeterie ni de modèle explicite arrivée / départ / retour selon l'attraction. Suite possible : préciser le design (case dédiée, lien avec boutiques souvenir et calcul des visiteurs), puis implémenter le flux.
|
||||
|
||||
### Optionnel / à trancher
|
||||
|
||||
- Rafraîchissement périodique de la liste des zoos (GET /api/zoos) : déjà en place (ex. 30 s). Usage de mapWidth / mapHeight renvoyés par l'API pour adapter l'échelle de la carte au nombre de joueurs : non utilisé pour l'instant (positions en %).
|
||||
|
||||
### Autres
|
||||
|
||||
- Trading joueur–joueur (échanges directs).
|
||||
- Événements live réels (fenêtres UTC avec œufs / récompenses limités dans le temps).
|
||||
- Leveling des animaux (mécanique pour faire monter le niveau au-delà du multiplicateur actuel).
|
||||
- Options de confort (vitesse du jeu x2, auto-collect distinct).
|
||||
- Décorations sur la parcelle.
|
||||
|
||||
---
|
||||
|
||||
## 8. Références
|
||||
|
||||
- **BDD et comptes** : `docs/bdd-comptes.md` (schéma SQL, variables d'environnement, flux 401/404/200, déploiement).
|
||||
|
||||
---
|
||||
|
||||
## 9. Rappel des grandes règles
|
||||
|
||||
### Cartes
|
||||
|
||||
- Même style avec des cases de couleurs influençant le développement des animaux en cohérence animal/milieu.
|
||||
- Les cases forment le quadrillage des cartes.
|
||||
|
||||
### Cases
|
||||
|
||||
- Elles ont forcément une couleur (milieu eau douce, eau salée, montagne, prairie, forêt… et une température).
|
||||
- Les transitions de couleurs et de températures sont douces entre les cases.
|
||||
- Certains animaux prennent plusieurs cases.
|
||||
|
||||
---
|
||||
|
||||
## 10. Carte du zoo – cases détaillées
|
||||
|
||||
### Types de cases
|
||||
|
||||
#### Centre de recherche
|
||||
|
||||
- Produit des unités de recherche à dépenser pour agrandir la carte du monde.
|
||||
- 7 niveaux : par palier : niveaux plus élevés, nombre de zoos plus élevé.
|
||||
- Donne accès à des niveaux d'animaux et de bébés dans les autres zoos.
|
||||
- 1 unité couvre 10 zoos définis maximum dans la carte (par proximité).
|
||||
|
||||
#### Billeterie
|
||||
|
||||
- 7 niveaux : par palier : plus cher, plus de visiteurs dans le zoo en simultané.
|
||||
- Permet de vendre des entrées aux visiteurs.
|
||||
- 1 unité couvre 20 visiteurs dans le zoo en simultané maximum (limite les visiteurs dans le zoo).
|
||||
|
||||
#### Boutique
|
||||
|
||||
- 7 niveaux : par palier : plus cher, plus de visiteurs simultanés.
|
||||
- Permet de vendre des produits aux visiteurs lorsqu'ils passent par des boutiques.
|
||||
- 1 unité couvre 5 visiteurs simultanés au maximum.
|
||||
|
||||
#### Nurserie
|
||||
|
||||
- 7 niveaux : par palier : plus rapide, meilleurs reproducteurs.
|
||||
- Permet de faire naître des bébés durant une période de temps.
|
||||
- 1 unité fait grandir 1 bébé maximum.
|
||||
|
||||
#### Nourriture
|
||||
|
||||
- 7 niveaux : par palier : plus de nourriture de meilleurs effets sur les animaux (reproduction).
|
||||
- Permet de nourrir les animaux (chaque animal a une consommation / unité de temps, sinon il meurt et un doit avoir toujours bien mangé pour se reproduire).
|
||||
- Permet de se reproduire.
|
||||
- 1 unité couvre 5 animaux maximum.
|
||||
|
||||
#### Accueil nouveaux animaux
|
||||
|
||||
- 7 niveaux : par palier : plus rapide, meilleurs reproducteurs.
|
||||
- Permet d'acclimater les nouveaux animaux durant une période de temps.
|
||||
- 1 unité couvre 1 animal.
|
||||
|
||||
#### Camion
|
||||
|
||||
- 7 niveaux : par palier : plus rapide, dégrade moins le score de reproduction avec la durée du transport.
|
||||
- Dans la carte du zoo : quand on déplace dessus un bébé ou un animal il sort de la carte du zoo et il est mis en vente sur la carte du monde dans une case de vente.
|
||||
- Dans la carte du monde : se déplace (allers retours) entre le zoo du joueur et les autres zoos (achats/ventes), les objets sont pris en compte une fois arrivés au zoo ou retirés du zoo par le camion.
|
||||
- 1 unité couvre 1 camion.
|
||||
|
||||
#### Changement de milieu (couleur choisie) (payant)
|
||||
|
||||
- 7 niveaux : par palier : plus détaillé, plage de température plus précise, améliore la reproduction, diminue le besoin de nourriture, allonge le temps avant de mourir dans le cas des morts.
|
||||
- Dans la carte du monde : se déplace (allers retours) entre le zoo du joueur et les autres zoos (achats/ventes), les objets sont pris en compte une fois arrivés au zoo ou retirés du zoo par le camion.
|
||||
- 1 unité couvre 1 camion.
|
||||
|
||||
#### Changement de milieu (température choisie)
|
||||
|
||||
- 7 niveaux : par palier : plus détaillé, plage de température plus précise, améliore la reproduction, diminue le besoin de nourriture, allonge le temps avant de mourir dans le cas des morts.
|
||||
|
||||
#### Bébé mature
|
||||
|
||||
- Fin de période de nurserie dans la nurserie pour être déplacé sur une case du zoo (devient un animal) ou sur le camion (bébé).
|
||||
|
||||
#### Animal prêt
|
||||
|
||||
- Fin de période d'accueil de l'animal dans l'accueil des animaux pour être déplacé sur une case du zoo ou sur le camion.
|
||||
|
||||
### Règles communes aux cases
|
||||
|
||||
- Certains animaux prennent plusieurs cases.
|
||||
- Une couleur et température de départ.
|
||||
- On peut acheter dessus (occupe la case) : recherche, billeterie, boutique, nurserie, nourriture, Accueil nouveaux animaux, camion, changement de milieu (couleur choisie), changement de milieu (température choisie).
|
||||
- On peut déplacer dessus (occupe la case) : bébé mature, animal prêt.
|
||||
|
||||
### Cases du zoo au lancement du jeu
|
||||
|
||||
- 1 Agrandissement du zoo (+1 case, payant) (changement)
|
||||
- 1 Recherche tout en haut à gauche
|
||||
- 1 Billeterie tout en haut à gauche
|
||||
- 1 Nurserie tout en haut à gauche
|
||||
- 1 Accueil nouveaux animaux tout en haut à gauche (changement)
|
||||
- 1 Nourriture générale tout en haut à gauche (changement)
|
||||
- 1 Camion tout en haut à gauche (changement)
|
||||
- 24 cases de 3 couleurs différentes
|
||||
|
||||
### Attractivité des animaux
|
||||
|
||||
- Les visiteurs arrivent dans le zoo depuis la billeterie et repartent par la billeterie.
|
||||
- Les visiteurs restent au maximum 1 journée.
|
||||
- Les visiteurs restent dans la journée plus longtemps par boutiques et en fonction du nombre d'animaux différents.
|
||||
- Les visiteurs se déplacent en étant plutôt attirés.
|
||||
|
||||
### Attractivité du zoo
|
||||
|
||||
- Attractivité proportionnelle à la valeur cumulée des animaux du zoo.
|
||||
- Attractivité proportionnelle au nombre d'animaux différents dans le zoo.
|
||||
- Attractivité proportionnelle à la rareté (niveau) des animaux.
|
||||
- Attractivité proportionnelle au taux de remplissage en animaux.
|
||||
- Les morts pénalisent l'attractivité du zoo auprès des visiteurs à venir dans les villes.
|
||||
- Les morts pénalisent l'apparition de naissances dans le zoo.
|
||||
- Les naissances augmentent l'attractivité du zoo auprès des visiteurs à venir dans les villes.
|
||||
- Les naissances augmentent l'apparition d'autres naissances dans le zoo.
|
||||
|
||||
### Score de reproduction du zoo
|
||||
|
||||
- Nombre de naissances.
|
||||
- Taux d'alimentation des animaux.
|
||||
- Un animal dans un zoo de bon score de reproduction aura quand il est vendu un bon score de reproduction.
|
||||
|
||||
---
|
||||
|
||||
## 11. Carte du monde – cases et éléments
|
||||
|
||||
### Cases du monde au lancement du jeu
|
||||
|
||||
- 1 Agrandissement de la carte (grisé ou non payé en unités de recherche produites par les centres de recherche des zoos du joueur : plus cher en unité de recherche par paliers même nombre de cases ajoutées) (changement)
|
||||
- 1 Compteur de bébés à vendre
|
||||
- 1 Compteur d'animaux à vendre
|
||||
- 1 Compteur de laboratoires
|
||||
- 1 Compteur de zoos
|
||||
- 1 Compteur de villes
|
||||
- 1 Accueil nouveaux animaux tout en haut à gauche (changement)
|
||||
- 1 Nourriture générale tout en haut à gauche (changement)
|
||||
- 1 Camion tout en haut à gauche (changement)
|
||||
- 24 cases de 3 couleurs différentes
|
||||
|
||||
### Autres cases
|
||||
|
||||
- **Case du zoo du joueur** : 1 case du nom du zoo, juste dessous 1 case du score d'attractivité, juste dessous 1 case du score de reproduction, juste dessous 1 case de vente, possibilité d'acheter sur les cases voisines d'autres cases de ventes.
|
||||
- **Cases des zoos des autres joueurs** : mêmes principes que pour le joueur actif.
|
||||
- **Cases des zoos des bots** : mêmes principes que pour le joueur actif.
|
||||
- **Cases des villes** : 1 case nom, 1 case nombre de visiteurs maximums vers les zoos.
|
||||
|
||||
---
|
||||
|
||||
## 12. Animaux
|
||||
|
||||
- Niveaux de rareté des bébés de ce type d'animaux.
|
||||
- Niveaux de rareté de ce type d'animaux.
|
||||
|
||||
### Feedbacks visuels d'état (pas de jauges)
|
||||
|
||||
- **Froid** : L'animal devient bleuâtre/pâle, givre visible sur le sprite.
|
||||
- **Chaud** : L'animal devient rougeâtre, vapeur de chaleur visible.
|
||||
- **Faim** : Déplacement lent, maigreur visible, cherche le sol, icône "faim" discrète.
|
||||
- **Maladie/Mort proche** : L'animal est couché, couleurs ternes, mouches autour.
|
||||
- **Heureux/Reproduction** : Cœurs, sautillements, couleurs vives.
|
||||
- **Lisibilité** : Pour garantir la lisibilité sur mobile, les changements de couleur (teinte globale du sprite) sont privilégiés par rapport aux micro-animations (tremblements).
|
||||
|
||||
### Mort
|
||||
|
||||
- Seuls, pas visités, manque de nourriture, tué par un autre animal d'un autre zoo, niveau de recherche trop inférieur par rapport au niveau de l'animal, bébé non vendu dans les délais, bébé de nurserie prêt non placé dans les délais, animal d'accueil prêt non placé sur la carte après un délai, animal non placé sur la carte dans les délais (vente échouée), température trop en écart avec la température de l'animal, milieu (couleur) trop en écart avec la température de l'animal.
|
||||
|
||||
### Reproduction
|
||||
|
||||
- Après un délai en proximité d'un autre animal de même type mais issu d'un zoo différent (donne un nouveau bébé à placer en nurserie ou à vendre, va directement en nurserie si disponible sinon directement en vente).
|
||||
- Score de reproduction du zoo qui le vend au moment de la vente accélère l'arrivée d'un bébé.
|
||||
- Température en très bonne adéquation avec la température de l'animal.
|
||||
- Milieu (couleur) en très bonne adéquation avec la température de l'animal.
|
||||
|
||||
### Scores et paramètres
|
||||
|
||||
- Score de reproduction par milieux (couleurs).
|
||||
- Score de survie par milieux (couleurs).
|
||||
- Température idéale.
|
||||
- **Saisons** : Les 4 saisons (Printemps, Été, Automne, Hiver) influencent la météo, la température et les bonus/malus de reproduction et de survie selon le type d'animal.
|
||||
|
||||
---
|
||||
|
||||
## 13. Ventes
|
||||
|
||||
- Sur la carte du monde, case sous les noms des zoos (autre case) : bébé à vendre ou animal à vendre sur des cases de vente du zoo sur la carte du monde.
|
||||
- Enchères entre joueurs et bots (l'utilisateur qui vend choisit de valider ou non la vente après un temps, si bébé invendu il meurt), montant initial décidé par le vendeur.
|
||||
- **Validation différée et synchronisation** :
|
||||
- Pour éviter les "race conditions" et ajouter une tension de jeu, la base de données attend **10 minutes** avant de valider définitivement un achat.
|
||||
- Durant ce délai, un **sablier** s'affiche sur la transaction.
|
||||
- L'achat n'est effectif (transfert de propriété et de fonds) qu'à la fin du sablier.
|
||||
- Déplacer l'animal ou le bébé sur le camion :
|
||||
- Dans la carte du zoo : met en vente, l'animal ou le bébé s'affiche avec le dernier montant des enchères sur la carte.
|
||||
|
||||
---
|
||||
|
||||
## 14. Changements par rapport à la version œufs
|
||||
|
||||
- Ce ne sont plus des œufs qui apparaissent dans les zoos mais des bébés animaux.
|
||||
- Les zoos vendent aussi des animaux adultes.
|
||||
50
docs/features/attractivite-visiteurs-phase8.md
Normal file
50
docs/features/attractivite-visiteurs-phase8.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Phase 8 – Attractivité et visiteurs (billeterie, cap, score)
|
||||
|
||||
**Objectif :** Plafonner les visiteurs par la capacité billeterie, calculer un score d’attractivité (valeur, espèces, rareté, remplissage, pénalités morts, bonus naissances) et l’afficher sur la carte du monde.
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md` phase 8.
|
||||
|
||||
## Impacts
|
||||
|
||||
- Les visiteurs sont plafonnés par la capacité billeterie (20 × niveau total billeterie). Sans billeterie, le plafond n’est pas appliqué (comportement inchangé).
|
||||
- Nouveau score d’attractivité exposé dans `state.attractivityScore` et affiché sous le nom du zoo (joueur) sur la carte du monde.
|
||||
- La formule d’attractivité pourra servir plus tard à l’allocation des visiteurs depuis les villes (phase 11).
|
||||
|
||||
## Modifications
|
||||
|
||||
- **income.js** : suppression des imports dupliqués ; `getBilleterieCapacity(state)` ; dans `getVisitorParams`, plafonnement de `visitorCount` par `getBilleterieCapacity(state)` ; `getAttractivityScore(state)` (valeur cumulée, nombre d’espèces, rareté moyenne, taux de remplissage, pénalité morts, bonus naissances).
|
||||
- **config.js** : `Visitor.AttractivityDeathPenalty`, `Visitor.AttractivityBirthBonus`.
|
||||
- **types.js** : `GameState.attractivityScore?`.
|
||||
- **game-loop.js** : import `getAttractivityScore` ; après `tickResearch`, `state.attractivityScore = getAttractivityScore(state)`.
|
||||
- **ui.js** : pour le zoo joueur, ligne « Score attractivité: X.X » sous le score de reproduction (classe `world-map-zoo-attractivity-score`).
|
||||
- **main.css** : style `.world-map-zoo-attractivity-score`.
|
||||
|
||||
## Disparition des animaux non visités (§2)
|
||||
|
||||
- **Config** : `Visitor.MaxSecondsWithoutVisit` (300 s par défaut). Un animal dont aucune visite n’a été enregistrée sur sa case depuis plus de cette durée est retiré (case vidée, `deathCountRecent` incrémenté).
|
||||
- **animal-visits.js** : `tickAnimalVisits(state, nowUnix, nowMs)` met à jour `lastVisitedAt` des cases animales sous la position actuelle des visiteurs (orbites autour du centre d’attraction).
|
||||
- **food.js** : `checkDeathCauses(state, nowUnix)` utilise `MaxSecondsWithoutVisit` ; si `nowUnix - lastVisitedAt >= maxVisit`, le bloc animal est supprimé.
|
||||
- **game-loop.js** : `tickAnimalVisits` est appelé avant `tickFeeding` et `checkDeathCauses`.
|
||||
|
||||
## Stagnation (§3)
|
||||
|
||||
- **Config** : `Visitor.StagnationDecayAfterSeconds` (60 s), `Visitor.StagnationDecayPerMinute` (0.05). Après ce délai sans action d’évolution, le multiplicateur de demande visiteurs décroît (plancher 10 %).
|
||||
- **income.js** : `getStagnationMultiplier(state, nowUnix)` utilise `state.lastEvolutionAt` ; appliqué dans `getVisitorDemand(state, nowUnix)`.
|
||||
- **lastEvolutionAt** est mis à jour sur : upgrade (plot, conveyor, truck, world map, school, nursery, shop, research, billeterie, food, reception, biome), place (egg, baby, reception animal), vente (sellAnimalToNpc, addMatureBabyToSale, addReceptionAnimalToSale), prestige, moveCell.
|
||||
|
||||
## Implémenté ultérieurement (modèle visiteurs par entité)
|
||||
|
||||
- **Durée max 1 journée par visiteur** : `state.visitorArrivals[]` avec `{ arrivedAt }` ; base = `Time.DayLengthSeconds` (1 jour) ; sortie quand `now > arrivedAt + getStayDurationSeconds(state)`.
|
||||
- **Prolongation par boutiques et diversité** : `getStayMultiplier(state)` = 1 + (niveaux boutique × `Visitor.StayMultiplierPerShopLevel`) + (espèces distinctes × `Visitor.StayMultiplierPerSpecies`) ; `getStayDurationSeconds(state) = base × getStayMultiplier(state)`.
|
||||
- **Config** : `Visitor.StayMultiplierPerShopLevel`, `Visitor.StayMultiplierPerSpecies` (base jour = `Time.DayLengthSeconds`).
|
||||
- **Game loop** : `tickVisitorArrivals(state, nowUnix)` appelé avant `incomeTick` ; `getVisitorParams(state)` utilise `state.visitorArrivals.length` ; sans billeterie, fallback sur l’ancienne formule pour rétrocompatibilité.
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Aucun déploiement serveur. Rechargement client suffit.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Sans billeterie : le nombre de visiteurs reste calculé comme avant (sans plafond).
|
||||
- Avec au moins une case billeterie : le nombre de visiteurs affiché et utilisé pour les revenus ne dépasse pas (niveau total billeterie × 20).
|
||||
- Carte du monde, zoo joueur : affichage « Score attractivité: X.X » mis à jour à chaque tick.
|
||||
28
docs/features/carte-monde-recherche-compteurs-phase9.md
Normal file
28
docs/features/carte-monde-recherche-compteurs-phase9.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Phase 9 – Carte du monde : agrandissement en recherche et compteurs
|
||||
|
||||
**Objectif :** Agrandissement de la carte payé en unités de recherche (plus en pièces) ; affichage des compteurs (bébés à vendre, animaux à vendre, laboratoires, zoos, villes).
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md` phase 9.
|
||||
|
||||
## Impacts
|
||||
|
||||
- L’agrandissement de la carte consomme `state.researchPoints` au lieu de `state.coins`. Le bouton est grisé si `researchPoints` insuffisants.
|
||||
- Compteurs affichés sous la zone « Agrandir carte » : Bébés à vendre, Animaux à vendre, Laboratoires, Zoos, Villes.
|
||||
|
||||
## Modifications
|
||||
|
||||
- **config.js** : `WorldMap.MapUpgrade.BaseResearchCost`, `ResearchUpgradeGrowth` (coût en unités de recherche par palier).
|
||||
- **economy.js** : `getWorldMapUpgradeResearchCost(currentLevel)` ; `getWorldMapUpgradeCost` conservé pour compatibilité.
|
||||
- **zoo.js** : `tryUpgradeWorldMap` utilise `getWorldMapUpgradeResearchCost`, déduit `state.researchPoints` au lieu de `state.coins` ; retourne `NotEnoughResearch` si pas assez de points.
|
||||
- **ui.js** : zone agrandissement carte affiche le coût en recherche (`X 🔬`) et le titre avec le coût ; `canUpgradeMap` basé sur `researchPoints >= getWorldMapUpgradeResearchCost(mapLevel)` ; nouvelle zone `world-map-counters` avec cinq compteurs mis à jour au refresh.
|
||||
- **texts-fr.js** : `errorMessage.NotEnoughResearch`.
|
||||
- **main.css** : `.world-map-upgrade-zone-cost`, `.world-map-counters`, `.world-map-counter`.
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Aucun déploiement serveur. Rechargement client suffit.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Agrandir la carte : coût affiché en unités de recherche ; si pas assez de `researchPoints`, le bouton est grisé et un clic affiche « Pas assez d’unités de recherche ».
|
||||
- Compteurs : Bébés à vendre = `saleListings` avec `isBaby` ; Animaux à vendre = `saleListings` sans `isBaby` ; Laboratoires = 1 ; Zoos = `worldZoos.length` ; Villes = `WorldMap.Cities.length`.
|
||||
41
docs/features/causes-mort-audit.md
Normal file
41
docs/features/causes-mort-audit.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Audit des causes de mort (§12)
|
||||
|
||||
**Référence :** Cahier des charges §12 (Mort).
|
||||
|
||||
## Liste du cahier
|
||||
|
||||
1. Seuls
|
||||
2. Pas visités
|
||||
3. Manque de nourriture
|
||||
4. Tué par un autre animal d'un autre zoo
|
||||
5. Niveau de recherche trop inférieur par rapport au niveau de l'animal
|
||||
6. Bébé non vendu dans les délais
|
||||
7. Bébé de nurserie prêt non placé dans les délais
|
||||
8. Animal d'accueil prêt non placé sur la carte après un délai
|
||||
9. Animal non placé sur la carte dans les délais (vente échouée)
|
||||
10. Température trop en écart avec la température de l'animal
|
||||
11. Milieu (couleur) trop en écart avec la température de l'animal
|
||||
|
||||
## Implémenté
|
||||
|
||||
- **Pas visités** : `Visitor.MaxSecondsWithoutVisit`, `checkDeathCauses` → `maybeDeathBlock` (visitedOk), `food.js` + `animal-visits.js`.
|
||||
- **Manque de nourriture** : `Food.MaxSecondsWithoutFood`, `maybeDeathBlock` (fedOk), `tickFeeding` / `checkDeathCauses`.
|
||||
- **Température en écart** : `maybeDeathBlock` (tempOk), `getDisplayTemperature`, `idealTemperature` / `temperatureTolerance` (loot-tables).
|
||||
- **Milieu (couleur) en écart** : `maybeDeathBlock` (biomeOk), `isAnimalAllowedOnBiome`, `getDisplayBiome`.
|
||||
- **Bébé nurserie prêt non placé** : `Nursery.MaxSecondsMatureNotPlaced`, `filterPendingBabies` dans `checkDeathCauses`.
|
||||
- **Animal accueil prêt non placé** : `Reception.MaxSecondsReadyNotPlaced`, `filterReceptionAnimals` dans `checkDeathCauses`.
|
||||
- **Bébé non vendu dans les délais** : `Sale.ListingDurationSeconds`, `tickSaleListings` (trade.js) ; annonce expirée et `isBaby` → `deathCountRecent` incrémenté. Côté serveur : `expireSaleListings` (db.js).
|
||||
|
||||
## Non implémenté
|
||||
|
||||
- **Seuls** : pas de règle « animal seul meurt ».
|
||||
- **Tué par un autre animal d'un autre zoo** : pas de mécanique inter-zoo.
|
||||
- **Niveau de recherche trop inférieur** : pas de vérification niveau recherche vs niveau animal.
|
||||
- **Animal (adulte) vente échouée** : à l'expiration d'une annonce adulte (`isBaby: false`), `deathCountRecent` n'est pas incrémenté (actuellement seul le bébé invendu est compté).
|
||||
|
||||
## Fichiers
|
||||
|
||||
- `web/js/food.js` : `checkDeathCauses`, `maybeDeathBlock`, `filterPendingBabies`, `filterReceptionAnimals`.
|
||||
- `web/js/trade.js` : `tickSaleListings` (expiration bébé).
|
||||
- `web/js/animal-visits.js` : `lastVisitedAt` pour cause « pas visités ».
|
||||
- `server/db.js` : `expireSaleListings` (bébé invendu).
|
||||
39
docs/features/centralisations-mutualisations.md
Normal file
39
docs/features/centralisations-mutualisations.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Centralisations et mutualisations
|
||||
|
||||
**Objectif :** Réduire la duplication et centraliser les helpers réutilisables.
|
||||
|
||||
## Modifications récentes
|
||||
|
||||
### server/db.js
|
||||
|
||||
- **mapZooRowBase(row)** : id, name, x, y (Number) partagés par `getAllZoos`, `getZooById`, `getBotZoosForTick`. Chaque fonction étend avec ses champs spécifiques (animal_weights/game_state, is_bot/account_id, animalWeights/botState).
|
||||
- **mapSaleListingRow(row)** : mapping unique des lignes `sale_listings` pour `getSaleListingById`, `getActiveSaleListings`, `getSalesForZoo` (asSeller, asBuyerUndelivered, active). Colonnes absentes dans le SELECT deviennent `undefined`.
|
||||
- **validateListingForSeller(listingId, sellerZooId)** : chargement + vérifications (ListingNotFound, ListingNotActive, NotSeller) utilisées par `acceptSale` et `rejectSale`. Retourne `{ ok: true, listing }` ou `{ ok: false, reason }`.
|
||||
- **processValidatedSales** : boucle refactorée sans `continue` (blocs imbriqués) pour respecter la règle no-continue.
|
||||
|
||||
### web/js/loot-tables.js
|
||||
|
||||
- **zeroAnimalWeights()** : retourne un objet `{ [colorName]: 0 }` pour toutes les couleurs. Utilisé pour agrégations et valeurs initiales.
|
||||
|
||||
### web/js/state.js
|
||||
|
||||
- **defaultAnimalWeights()** : s’appuie sur `zeroAnimalWeights()` puis met la première couleur à 1.
|
||||
- **normalizeZooWeights(legacy)** : utilise `zeroAnimalWeights()` au lieu de recréer l’objet à la main.
|
||||
- **setScalarDefault(data, key, defaultVal)** : assigne `data[key]` si null/undefined ; `defaultVal` peut être une fonction (ex. `lastEvolutionAt`). Utilisé dans **applyLoadStateScalarDefaults** avec la liste **LOAD_STATE_SCALAR_DEFAULTS** (tableau [key, default]) pour éviter la répétition des ~25 lignes `if (data.x === null || ...) data.x = default`.
|
||||
|
||||
### web/js/bot-zoo.js
|
||||
|
||||
- **getNeighborColorWeights** : utilise `zeroAnimalWeights()` pour initialiser `out` au lieu de `Object.fromEntries(colorNames.map(...))`.
|
||||
|
||||
### web/js/auto-mode-profiles.js + bot-zoo.js (déjà documenté)
|
||||
|
||||
- Bots : `LEGACY_PROFILE_TO_ID` + `getProfileParams(profileId)` pour toutes les décisions (upgrade, sell, buy) ; plus de ternaires sur "fast"|"slow"|"balanced".
|
||||
|
||||
## Fichiers concernés
|
||||
|
||||
- server/db.js
|
||||
- web/js/loot-tables.js
|
||||
- web/js/state.js
|
||||
- web/js/bot-zoo.js
|
||||
- docs/features/ventes-encheres-phase10.md (référence mapSaleListingRow, validateListingForSeller)
|
||||
- docs/features/mode-auto-50-profils.md (référence bots + profils)
|
||||
45
docs/features/grille-lancement.md
Normal file
45
docs/features/grille-lancement.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Grille au lancement et 3 couples reproducteurs
|
||||
|
||||
**Objectif :** Au premier lancement (nouveau zoo ou après prestige), le joueur dispose d’une grille zoo complète (recherche, billeterie, nurserie, accueil, nourriture, école) et de 3 couples reproducteurs d’animaux basiques déjà placés.
|
||||
|
||||
**Référence :** Cahier des charges §1 (garanties au démarrage), §10 (carte du zoo, layout).
|
||||
|
||||
## Impacts
|
||||
|
||||
- **Nouveau zoo / pas de sauvegarde :** `defaultState()` produit une grille 6×6 avec 6 cases fixes en ligne 1 et 6 animaux (3 couples) en ligne 2. Les 24 autres cases restent vides (3 biomes visuels par tiers de largeur, pas de champ biome sur les cases).
|
||||
- **Prestige :** `doPrestige()` réinitialise la grille avec le même layout et les mêmes 3 couples.
|
||||
- **Chargement ancienne sauvegarde :** `applyLoadStateLegacyCells` et `ensureSchoolCell` conservent la compatibilité (2_1 forcé en nurserie si manquant ou ancien plotUpgrade ; école ajoutée en 1_1 si absente). Les anciennes parties gardent 1_1 école et 2_1 nurserie tant qu’elles ne sont pas réinitialisées.
|
||||
|
||||
## Modifications
|
||||
|
||||
- **web/js/default-grid-layout.js** (nouveau, partagé) : `buildDefaultRow1Cells()`, `STARTER_ANIMAL_IDS_BY_BIOME`, `STARTER_ANIMAL_POSITIONS`, `addStarterAnimals(state)`.
|
||||
- **state.js**
|
||||
- `buildDefaultCells()` : appelle `buildDefaultRow1Cells()` du module partagé `default-grid-layout.js` (research, billeterie, nursery, reception, food, school en ligne 1).
|
||||
- `addStarterAnimals(state)` : importée depuis `default-grid-layout.js` ; place 6 animaux (3 couples) sur la ligne 2.
|
||||
- `defaultState()` : construit le state puis appelle `addDefaultStarterAnimals(state)` avant retour.
|
||||
- **prestige.js**
|
||||
- Même layout de grille et mêmes 3 couples après reset, via `buildDefaultRow1Cells()` et `addStarterAnimals()` importés de `default-grid-layout.js`. Réinitialisation de `pendingBabies` et `receptionAnimals`.
|
||||
|
||||
## Layout détaillé
|
||||
|
||||
- **Niveau 1 (6×6) :** `plotSizeFromLevel(1)` → largeur 6, hauteur 6.
|
||||
- **Ligne 1 :** 1_1 research, 2_1 billeterie, 3_1 nursery, 4_1 reception, 5_1 food, 6_1 school.
|
||||
- **Ligne 2 :** 1_2 et 2_2 = couple Meadow (c0_r0), 3_2 et 4_2 = couple Ocean (c5_r0), 5_2 et 6_2 = couple Mountain (c10_r0).
|
||||
- **Lignes 3–6 :** vides ; 24 cases libres pour placement (affichage 3 couleurs/biomes par tiers de largeur, sans donnée biome sur cellule).
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Client uniquement. Aucune migration BDD. Rechargement suffit. Les nouveaux zoos et les resets prestige utilisent le nouveau layout ; les sauvegardes existantes ne sont pas modifiées de force.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Nouveau jeu : grille avec 6 bâtiments ligne 1, 6 animaux ligne 2, 24 cases vides.
|
||||
- Prestige : même grille + 3 couples ; pièces à 0, niveaux plot/conveyor/camion/carte à 1, listes pendingBabies/receptionAnimals vides.
|
||||
- Chargement ancienne sauvegarde : pas de réécriture des cases 1_1/2_1 si déjà présentes (sauf correction legacy 2_1 = nursery si manquant ou ancien plotUpgrade).
|
||||
|
||||
## Carte du monde au lancement (§11)
|
||||
|
||||
- **Agrandissement carte** : niveau `worldMapLevel` (1 par défaut) ; zone d’upgrade en unités de recherche (config `WorldMap.MapUpgrade`). Affichage dans la vue carte du monde.
|
||||
- **Compteurs** : affichés en haut de la vue carte (Bébés à vendre, Animaux à vendre, Laboratoires, Zoos, Villes). Valeurs dérivées du state et de la config (`state.saleListings`, `state.worldZoos`, `GameConfig.WorldMap.Cities`, etc.).
|
||||
- **Accueil / Nourriture / Camion** : sur la carte du monde, ces fonctions sont couvertes par la même zone « camion » (achat d’œufs, vente) et les panneaux ventes (Mes ventes, À récupérer, Enchères). Pas de grille dédiée « 24 cases 3 couleurs » sur la carte du monde dans l’implémentation actuelle ; la carte affiche zoos, villes, laboratoire, compteurs et panneaux ventes.
|
||||
- **Layout actuel** : zone carte (zoos, villes, labo), panneau ventes à gauche, compteurs en haut. Alignement §11 partiel (compteurs + agrandissement carte) ; les « 24 cases 3 couleurs » et les cases Accueil/Nourriture/Camion sur la carte monde restent optionnels ou à préciser en design.
|
||||
34
docs/features/incidents-visiteurs-phase4.md
Normal file
34
docs/features/incidents-visiteurs-phase4.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Incidents visiteurs (§4.2)
|
||||
|
||||
**Objectif :** Visiteurs peuvent rencontrer des incidents (soif, poubelle pleine, banc requis, animal trop loin, envie de photo). Apparition plus fréquente en phase d’attente. Bulle au-dessus du visiteur ; clic = résolution (bonus pièces + attractivité) ; non résolu = timeout puis départ du visiteur et pénalité d’attractivité.
|
||||
|
||||
**Référence :** Cahier des charges §2 (Visiteurs et Incidents).
|
||||
|
||||
## Impacts
|
||||
|
||||
- **State :** `VisitorEntry` étendu avec `incidentType?` ("thirst"|"bin"|"bench"|"animalFar"|"photo"), `incidentSince?`. `attractivityBonusFromIncidents?` (cumul résolus − non résolus).
|
||||
- **Phase d’attente :** camion en cours (`eggPurchaseTruck`, `truckSale`) ou vente en attente de validation (`asBuyerUndelivered` avec `validated_at` dans le futur).
|
||||
- **Résolution :** clic sur la bulle → suppression de l’incident, ajout de pièces et bonus d’attractivité.
|
||||
- **Timeout :** après `IncidentTimeoutSeconds` sans résolution, le visiteur est retiré et une pénalité d’attractivité est appliquée.
|
||||
|
||||
## Modifications
|
||||
|
||||
- **types.js** : `VisitorEntry` avec `incidentType?`, `incidentSince?` ; `GameState.attractivityBonusFromIncidents?`.
|
||||
- **config.js** : `Visitor.IncidentChanceBase`, `IncidentChanceWaitMultiplier`, `IncidentTimeoutSeconds`, `IncidentResolveAttractivityBonus`, `IncidentResolveCoinBonus`, `IncidentUnresolvedAttractivityPenalty`.
|
||||
- **visitor-incidents.js** (nouveau) : `isInWaitPhase(state)`, `tickVisitorIncidents(state, nowUnix)`, `resolveIncident(state, visitorIndex)`, `INCIDENT_TYPES`, `INCIDENT_EMOJI`.
|
||||
- **game-loop.js** : appel à `tickVisitorIncidents` après `tickVisitorArrivals`.
|
||||
- **income.js** : `getAttractivityScore` inclut `state.attractivityBonusFromIncidents`.
|
||||
- **state.js** : au chargement, défaut `attractivityBonusFromIncidents = 0`.
|
||||
- **main.js** : boucle visiteurs basée sur `state.visitorArrivals.length` ; pour chaque visiteur avec incident, affichage d’une bulle (emoji + tooltip) ; clic appelle `resolveIncident` puis `fullRender`.
|
||||
- **texts-fr.js** : `incidentLabel` (soif, poubelle pleine, etc.), `incidentBubbleAria`.
|
||||
- **main.css** : `.visitor-incident-bubble` (position au-dessus du sprite, cliquable).
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Client uniquement. Rechargement suffit.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Avoir des visiteurs (billeterie) et attendre ou déclencher une phase d’attente (achat œuf, vente en cours) : des bulles d’incident apparaissent au-dessus de certains visiteurs.
|
||||
- Clic sur une bulle : incident disparaît, pièces et attractivité augmentent.
|
||||
- Ne pas cliquer : après le délai configuré, le visiteur disparaît et l’attractivité baisse.
|
||||
35
docs/features/mode-auto-50-profils.md
Normal file
35
docs/features/mode-auto-50-profils.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Mode automatique – 50 profils et sélection hiérarchique
|
||||
|
||||
**Objectif :** Proposer 50 profils de mode automatique répartis en 5 familles, avec une interface de sélection en deux étapes (Famille → Spécialisation) et utilisation des paramètres du profil choisi pour les décisions d’upgrade du joueur.
|
||||
|
||||
**Référence :** Cahier des charges §5 ; plan d’action BLOC 3.
|
||||
|
||||
## Impacts
|
||||
|
||||
- **State :** `autoModeProfileId` (1–50) stocke le profil choisi ; `autoModeProfile` ("fast"|"slow"|"balanced") reste pour rétrocompatibilité et est mappé à un profil par défaut (balanced→25, fast→33, slow→7).
|
||||
- **Mode auto joueur :** Les décisions d’upgrade (parcelle, compétences, camion) utilisent les paramètres du profil (seuil de dépense, probabilité d’upgrade) au lieu des 3 profils legacy uniquement.
|
||||
- **UI :** Clic sur le bouton mode auto quand il est inactif ouvre un panneau (Famille → Spécialisation) ; choix d’une spécialisation active le mode auto avec ce profil. Clic quand le mode auto est actif le désactive.
|
||||
- **Bots :** Les décisions upgrade/sell/buy utilisent `getProfileParams(LEGACY_PROFILE_TO_ID[profile])` ; paramètres centralisés dans auto-mode-profiles (plus de ternaires fast/slow/balanced).
|
||||
|
||||
## Modifications
|
||||
|
||||
- **web/js/auto-mode-profiles.js** (nouveau) : 50 profils avec id, familyId (1–5), spendThreshold, upgradeChance, sellChance, clés i18n (label, priorities, risks). Familles : Conservateurs (1–10), Éleveurs (11–20), Commerçants (21–30), Expansionnistes (31–40), Scientifiques (41–50). `getEffectiveProfileId(state)`, `getProfileParams(profileId)`, `getProfilesByFamily(familyId)`, `getAllProfiles()`.
|
||||
- **web/js/types.js** : `GameState.autoModeProfileId?`, `autoProfilePickerOpen?`, `autoProfilePickerFamily?`.
|
||||
- **web/js/state.js** : `saveState` omet les champs `autoProfilePickerOpen` et `autoProfilePickerFamily` avant persistance ; `applyLoadStateScalarDefaults` remet ces champs à false/undefined au chargement.
|
||||
- **web/js/bot-zoo.js** : `tickPlayerAutoMode` utilise `getEffectiveProfileId(state)` et `getProfileParams(profileId)` ; `playerAutoDoOneUpgrade(state, params, rng)` reçoit des paramètres numériques. Pour les bots, `tickBotDecisions` utilise `LEGACY_PROFILE_TO_ID[b.profile]` et `getProfileParams(profileId)` ; `botDecideUpgrade`, `botDecideSell`, `botDecideBuy` reçoivent un objet `params` (spendThreshold, upgradeChance, sellChance) au lieu du libellé.
|
||||
- **web/js/ui.js** : Clic sur le bouton mode auto ouvre le picker si inactif ; panneau avec 5 familles puis 10 spécialisations, bouton Annuler. Au choix d’une spécialisation : `autoModeProfileId`, `autoMode: true`, fermeture du picker.
|
||||
- **web/js/texts-fr.js** : `autoProfileFamilyLabel` (5 familles), `autoProfileSpecialisationLabel` (1–50), `autoProfilePrioritiesLabel`, `autoProfileRisksLabel` (placeholders), libellés du picker.
|
||||
- **web/css/main.css** : `.auto-profile-picker-wrap`, `.auto-profile-picker-title`, `.auto-profile-picker-step`, `.auto-profile-picker-families`, `.auto-profile-picker-specialisations`, boutons famille/spécialisation, bouton Annuler.
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Client uniquement. Rechargement suffit.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Désactiver le mode auto, cliquer sur le bouton mode auto : le panneau « Choisir le profil » s’affiche avec 5 familles.
|
||||
- Choisir une famille : affichage des 10 spécialisations.
|
||||
- Choisir une spécialisation : le mode auto s’active avec le profil correspondant (🤖), le panneau se ferme.
|
||||
- Annuler : le panneau se ferme sans activer le mode auto.
|
||||
- Avec le mode auto actif, les upgrades automatiques utilisent les paramètres du profil sélectionné (seuil de dépense et probabilité d’upgrade).
|
||||
- Ancienne sauvegarde sans `autoModeProfileId` : comportement identique à « balanced » (profil 25).
|
||||
28
docs/features/reproduction-phase6.md
Normal file
28
docs/features/reproduction-phase6.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Phase 6 – Reproduction
|
||||
|
||||
**Objectif :** Deux animaux de même type, dont au moins un provient d’un autre zoo, en proximité produisent un bébé après un délai. Le délai est réduit par le score de reproduction du zoo et l’adéquation température/milieu.
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md` phase 6.
|
||||
|
||||
## Impacts
|
||||
|
||||
- Nouveau module `web/js/reproduction.js` (détection de paires, timers, naissances).
|
||||
- État : `reproductionTimers`, `fromOtherZoo` sur animaux et bébés.
|
||||
- Bébés créés par reproduction vont en nurserie si place libre, sinon en `saleListings` (vente phase 10).
|
||||
|
||||
## Modifications
|
||||
|
||||
- **types.js** : `AnimalCell.fromOtherZoo?`, `PendingBaby.fromOtherZoo?`, `GameState.reproductionTimers?`.
|
||||
- **config.js** : `Reproduction.BaseSeconds`, `Reproduction.MaxDistance`.
|
||||
- **state.js** : `defaultState.reproductionTimers`, migration `loadState` pour `reproductionTimers`.
|
||||
- **zoo.js** : `addPendingBaby(state, animalId, fromOtherZoo?)`, `placeMatureBabyOnCell` / `placeReceptionAnimalOnCell` renseignent `fromOtherZoo` sur l’animal placé ; `tryBuyBaby` appelle `addPendingBaby(..., true)`.
|
||||
- **reproduction.js** : `getReproductionScore`, `getBiomeReproductionFactor`, `getTemperatureFactor`, `findReproductionPairs`, `tickReproduction` ; appel depuis la game loop après `checkDeathCauses`.
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Aucun déploiement serveur. Rechargement client suffit.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Vérifier en jeu : placer deux animaux de même type (dont un acheté en accueil/conveyor) sur deux cases adjacentes ; après le délai (réduit par score/biome/temp), un bébé apparaît en nurserie ou en vente.
|
||||
- `state.reproductionTimers` doit contenir les paires en attente avec `dueAt` ; après échéance, entrée retirée et `birthCount` incrémenté.
|
||||
28
docs/features/score-reproduction-phase7.md
Normal file
28
docs/features/score-reproduction-phase7.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Phase 7 – Score de reproduction du zoo
|
||||
|
||||
**Objectif :** Exposer un score de reproduction agrégé (birthCount, feedingRate) pour affichage et pour attacher à l’entité vendue (reproductionScoreAtSale). Réutiliser `getReproductionScore` pour le délai de reproduction (phase 6) et pour l’affichage.
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md` phase 7.
|
||||
|
||||
## Impacts
|
||||
|
||||
- Un seul « zoo score » : `getReproductionScore(state)` utilisé dans la game loop pour le délai de reproduction et pour remplir `state.reproductionScore` (affichage).
|
||||
- Carte du monde : case « Score repro » sous le nom du zoo (joueur).
|
||||
- Vente : les entrées `saleListings` créées (nursery full en reproduction) portent `reproductionScoreAtSale` pour usage côté acheteur (phase 10).
|
||||
|
||||
## Modifications
|
||||
|
||||
- **types.js** : `GameState.reproductionScore?`.
|
||||
- **game-loop.js** : après `tickReproduction`, `state.reproductionScore = getReproductionScore(state)` ; import de `getReproductionScore` depuis `reproduction.js`.
|
||||
- **reproduction.js** : lors du push en `saleListings` (NoFreeNursery), ajout de `reproductionScoreAtSale: getReproductionScore(state)`.
|
||||
- **ui.js** : pour le zoo joueur sur la carte du monde, ajout d’une ligne « Score repro: X.X » sous le nom (classe `world-map-zoo-reproduction-score`).
|
||||
- **main.css** : style `.world-map-zoo-reproduction-score`.
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- Aucun déploiement serveur. Rechargement client suffit.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- En jeu : onglet carte du monde, zoo joueur → sous le nom, affichage « Score repro: X.X » (mis à jour à chaque tick).
|
||||
- Après une naissance (reproduction) sans place en nurserie, une entrée dans `saleListings` doit contenir `reproductionScoreAtSale` égal au score courant du zoo.
|
||||
51
docs/features/ventes-encheres-phase10.md
Normal file
51
docs/features/ventes-encheres-phase10.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Phase 10 – Ventes et enchères (bébés et animaux adultes)
|
||||
|
||||
**Objectif :** Mise en vente de bébés et d’animaux depuis le camion ; affichage des ventes sur la carte du monde ; expiration des annonces (bébé invendu meurt) ; enchères (offres joueurs/bots), validation par le vendeur, transfert vers l’acheteur (nurserie/accueil), persistance serveur (API/BDD).
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md` phase 10.
|
||||
|
||||
## Vérification des phases précédentes
|
||||
|
||||
Voir `docs/plan-verification-phases-0-a-9.md`. Les prérequis (4, 6, 7, 9) sont en place.
|
||||
|
||||
## Impacts
|
||||
|
||||
- Glisser un **bébé mature** (nurserie) ou un **animal prêt** (accueil) sur la zone camion (vente) → l’entité est retirée de la nurserie/accueil et ajoutée à `state.saleListings` ; création côté serveur via `POST /api/sales` ; l’annonce apparaît sur la carte du monde dans la case du zoo joueur.
|
||||
- Les annonces expirent après un délai configurable (côté client via `tickSaleListings` et côté serveur via `expireSaleListings`) ; si l’annonce concernait un **bébé** et n’a pas été vendue, le bébé est considéré mort (`deathCountRecent` incrémenté côté client et serveur).
|
||||
- **Enchères :** les joueurs et les bots peuvent enchérir sur les ventes actives (`POST /api/sales/:id/bid`). Le vendeur peut accepter ou refuser la meilleure enchère (`POST /api/sales/:id/accept`, `POST /api/sales/:id/reject`). À l’acceptation, la vente passe en statut `sold` avec un délai de **validation différée de 10 minutes** : les pièces ne sont pas transférées immédiatement ; `validated_at = now() + 10 min`. Un traitement à la lecture (`processValidatedSales`) exécute le transfert (débit acheteur, crédit vendeur) et passe le statut à `validated` lorsque `validated_at <= now()`. L’acheteur ne peut « Récupérer » qu’après validation ; un **sablier** (compte à rebours) s’affiche pour les ventes en attente.
|
||||
|
||||
## Modifications
|
||||
|
||||
- **config.js** : `Sale.ListingDurationSeconds` (3600), `Sale.DefaultPrice` (50).
|
||||
- **trade.js** : `addMatureBabyToSale`, `addReceptionAnimalToSale`, `tickSaleListings`.
|
||||
- **game-loop.js** : appel à `tickSaleListings` après `tickReproduction`.
|
||||
- **ui.js** : zone camion (drop) crée la vente localement et appelle `createSale` si API configurée ; carte du monde : affichage des ventes (sync avec `getSales()` à l’ouverture) ; panneau « Mes ventes » (Accepter / Refuser), « À récupérer » (Récupérer), « Enchères » (saisie montant + Enchérir).
|
||||
- **types.js** : `SaleListing` étendu avec `serverId?`, `bestBidAmount?`, `bestBidderZooId?`, `status?` ; `GameState.salesFromApi?` pour les données renvoyées par `GET /api/sales`.
|
||||
- **api-client.js** : `getSales()`, `createSale(payload)`, `placeBid(listingId, amount)`, `acceptSale(listingId)`, `rejectSale(listingId)`, `deliverSale(listingId)`.
|
||||
- **Serveur**
|
||||
- **server/migrations/001_sale_listings.sql** : tables `sale_listings` (…), **002_sale_listings_validated_at.sql** : colonne `validated_at TIMESTAMPTZ`, statut `validated` ajouté au CHECK.
|
||||
- **server/db.js** : `mapSaleListingRow(row)` centralise le mapping des lignes `sale_listings` (utilisé par `getSaleListingById`, `getActiveSaleListings`, `getSalesForZoo`). `mapZooRowBase(row)` pour zoos (getAllZoos, getZooById, getBotZoosForTick). `validateListingForSeller(listingId, sellerZooId)` pour les vérifications vendeur (acceptSale, rejectSale). … `acceptSale` (ne transfère plus les pièces ; pose `sold_at`, `validated_at = now() + 10 min`), `processValidatedSales()` (transfert et passage à `validated`), `markSaleDelivered` (exige `status = 'validated'`).
|
||||
- **server/routes/sales.js** : GET `/api/sales` appelle `processValidatedSales()` avant `getSalesForZoo` si auth. Réponses incluent `validated_at`.
|
||||
- **server/bot-tick.js** : après `expireSaleListings`, récupération des ventes actives et enchère aléatoire d’un bot (si assez de pièces, pas vendeur).
|
||||
- **web** : panneau « À récupérer » : sablier et compte à rebours (ex. « Validation dans X min ») pour les ventes `status === 'sold'` avec `validated_at` dans le futur ; bouton « Récupérer » désactivé jusqu’à validation. **texts-fr.js** : `salesPendingValidation`, `salesValidationInMinutes`.
|
||||
- **texts-fr.js** : `errorMessage.BabyNotMature`, `NoBabyInNursery`, `AnimalNotReady`, `NoAnimalInReception`.
|
||||
- **web/css/main.css** : styles `.world-map-sales-panel`, `.sales-panel-title`, `.sales-panel-row`, boutons Accepter/Refuser/Récupérer/Enchérir.
|
||||
|
||||
## Modalités de déploiement
|
||||
|
||||
- **Base de données :** exécuter la migration `server/migrations/001_sale_listings.sql`, puis `server/migrations/002_sale_listings_validated_at.sql` (validation différée).
|
||||
- Redémarrage serveur et rechargement client.
|
||||
|
||||
## Modalités d’analyse
|
||||
|
||||
- Glisser un bébé mature / animal prêt sur la zone camion : annonce créée localement et sur le serveur (si API configurée) ; affichage sur la carte du monde.
|
||||
- Ouvrir la carte du monde avec API + auth : `getSales()` est appelé ; panneau « Mes ventes », « À récupérer », « Enchères » affiché selon les données.
|
||||
- Enchérir sur une vente active : saisir un montant > meilleure enchère puis « Enchérir ».
|
||||
- En tant que vendeur : « Accepter » ou « Refuser » sur la meilleure enchère ; à l’acceptation, vente en statut `sold`, `validated_at = now() + 10 min` ; pas de transfert de pièces immédiat.
|
||||
- En tant qu’acheteur ayant gagné une vente : affichage sablier « Validation dans X min » tant que `validated_at > now()` ; après 10 min, un prochain GET exécute `processValidatedSales`, la vente passe en `validated`, le bouton « Récupérer » s’active ; clic ajoute le bébé/animal à la nurserie/accueil puis appelle `deliverSale`.
|
||||
- Expiration : après `end_at`, la vente passe en `expired` ; si bébé, `deathCountRecent` du vendeur incrémenté (GET /api/sales ou bot tick).
|
||||
- Bots : à chaque tick, un bot peut placer une enchère sur une vente active (autre zoo, assez de pièces).
|
||||
|
||||
## Phase suivante
|
||||
|
||||
Phase 11 – Villes : `docs/features/villes-phase11.md`.
|
||||
25
docs/features/villes-phase11.md
Normal file
25
docs/features/villes-phase11.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Phase 11 – Villes
|
||||
|
||||
**Objectif :** Cases des villes sur la carte du monde avec nom et nombre maximum de visiteurs vers les zoos ; plafond ou répartition des visiteurs depuis les villes.
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md` phase 11.
|
||||
|
||||
## Dépendances
|
||||
|
||||
- Phase 8 (Attractivité et visiteurs).
|
||||
|
||||
## Livrables (implémentés)
|
||||
|
||||
- **Cases des villes :** Sur la carte du monde, chaque ville affiche le nom et le « nombre maximum de visiteurs vers les zoos » (`maxVisitorsTowardZoos`). Rendu : icône 🏙️ + libellé nom + ligne « max N ».
|
||||
- **Règle d'attraction :** Dans `getCityAttraction` (income.js), la contribution de chaque ville est plafonnée par `city.maxVisitorsTowardZoos` : `contrib = min(maxVisitorsTowardZoos, raw * 100)` avec `raw = 1/(1+distance)`, puis somme × `CityAttractionScale`. Les villes proches contribuent plus, sans dépasser leur plafond.
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
- **config.js** : `WorldMap.Cities[].maxVisitorsTowardZoos` (ex. 80, 100).
|
||||
- **income.js** : `getCityAttraction()` utilise le plafond par ville.
|
||||
- **ui.js** : Rendu des villes avec nom et « max N » ; tooltip et aria-label avec « max N visiteurs vers zoos ».
|
||||
- **main.css** : `.world-map-city-label`, `.world-map-city-max-visitors`.
|
||||
|
||||
## Phase précédente
|
||||
|
||||
Phase 10 – Ventes et enchères : `docs/features/ventes-encheres-phase10.md`.
|
||||
33
docs/lint.md
Normal file
33
docs/lint.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Lint – Configuration ESLint
|
||||
|
||||
Configuration initialisée selon les règles du projet (Rappel des grandes règles / qualité du code).
|
||||
|
||||
## Fichiers
|
||||
|
||||
- **package.json** (racine) : scripts `lint`, `lint:web`, `lint:server` ; devDependencies `eslint`, `@eslint/js`, `eslint-plugin-jsdoc`.
|
||||
- **eslint.config.js** : config plate (ESLint 9) pour `web/js/**/*.js` et `server/**/*.js` (hors `node_modules`).
|
||||
|
||||
## Règles activées (résumé)
|
||||
|
||||
- **Longueur / complexité** : max 250 lignes/fichier, 40 lignes/fonction, 4 paramètres, profondeur 4, complexité cyclomatique 10 (warn).
|
||||
- **Non utilisés** : `no-unused-vars` (args/vars/erreurs commençant par `_` ignorés).
|
||||
- **Égalité** : `eqeqeq` (=== / !==).
|
||||
- **Variables** : `no-var`, `prefer-const`.
|
||||
- **Contrôle** : `no-else-return`, `no-continue`, `no-labels`.
|
||||
- **Console / debug** : `no-console` (warn, allow warn/error), `no-debugger`, `no-alert`.
|
||||
- **Sécurité** : `no-eval`, `no-implied-eval`, `no-new-func`.
|
||||
- **JSDoc** : `jsdoc/require-returns`, `jsdoc/check-param-names` (warn).
|
||||
|
||||
Règles non disponibles en core ESLint (à appliquer manuellement ou via plugin dédié) : `prefer-nullish-coalescing`, `prefer-optional-chain` (préférer `??` et `?.` selon les règles projet).
|
||||
|
||||
## Utilisation
|
||||
|
||||
```bash
|
||||
npm run lint # web/js + server (hors node_modules)
|
||||
npm run lint:web # web/js uniquement
|
||||
npm run lint:server # server uniquement
|
||||
```
|
||||
|
||||
## Conformité progressive
|
||||
|
||||
Le premier passage sur le dépôt signale des violations existantes (eqeqeq, no-continue, max-lines-per-function, complexity, etc.). Les corriger au fil de l’eau ou par lot ; ne pas désactiver les règles pour contourner.
|
||||
173
docs/plan-action-cahier-des-charges.md
Normal file
173
docs/plan-action-cahier-des-charges.md
Normal file
@@ -0,0 +1,173 @@
|
||||
# Plan d'action – Alignement du code avec le cahier des charges
|
||||
|
||||
Document de référence : `docs/cahier des charges.md`.
|
||||
Objectif : identifier les écarts entre le cahier des charges (version actuelle) et le code, puis ordonner les mises à jour.
|
||||
|
||||
---
|
||||
|
||||
## 1. Démarrage et grille au lancement (§1, §10, §11)
|
||||
|
||||
### Écarts
|
||||
|
||||
- **Démarrage autonome (§1)** : ~~Le joueur doit commencer avec 3 couples reproducteurs… Non implémenté~~ **Implémenté** : `default-grid-layout.js` + `addStarterAnimals(state)` placent 6 animaux (3 couples Meadow/Ocean/Mountain) en ligne 2.
|
||||
- **Grille zoo au lancement (§10)** : ~~pas de recherche, billeterie, accueil, nourriture, ni 24 cases~~ **Implémenté** : `buildDefaultRow1Cells()` (research, billeterie, nursery, reception, food, school) ligne 1 ; 24 cases vides lignes 3–6.
|
||||
- **Grille monde au lancement (§11)** : 1 Agrandissement carte, compteurs (bébés, animaux, labos, zoos, villes) présents dans l’UI ; Accueil/Nourriture/Camion couverts par la zone camion et les panneaux ventes. Documenté dans `docs/features/grille-lancement.md`.
|
||||
|
||||
### Actions
|
||||
|
||||
1. ~~Définir le layout…~~ Fait : `default-grid-layout.js`, `buildDefaultRow1Cells()`, `addStarterAnimals()`.
|
||||
2. ~~Adapter buildDefaultCells()~~ Fait : appelle `buildDefaultRow1Cells()`.
|
||||
3. ~~Placer 3 couples reproducteurs~~ Fait : `addStarterAnimals(state)` dans `defaultState()` et `doPrestige()`.
|
||||
4. Documenter layout carte du monde : fait dans `docs/features/grille-lancement.md` (§11).
|
||||
|
||||
**Fichiers concernés :** `web/js/state.js`, `web/js/config.js`, `web/js/placement.js` (ou `grid-utils.js`), éventuellement `web/js/main-bootstrap.js`, `docs/features/` (fiche grille au lancement).
|
||||
|
||||
---
|
||||
|
||||
## 2. Mode automatique et 50 profils (§5)
|
||||
|
||||
### Écart
|
||||
|
||||
- Le cahier exige **50 archétypes de profils** (Conservateurs 1–10, Éleveurs 11–20, Commerçants 21–30, Expansionnistes 31–40, Scientifiques 41–50), avec **sélection hiérarchique** : Famille → Spécialisation (pas une simple liste déroulante). Chaque profil affiche priorités et risques.
|
||||
- Le code n’a que **3 profils** (`fast` / `slow` / `balanced`) et **aucune UI** de choix de profil (uniquement `autoModeProfile` dans le state).
|
||||
|
||||
### Actions
|
||||
|
||||
1. Introduire un **modèle de données des 50 profils** : identifiant, famille, spécialisation, libellé, paramètres (seuil dépense, fréquence, types d’animaux préférés, etc.), priorité et risques (texte ou clés i18n).
|
||||
2. Étendre `GameState` (ou équivalent) pour stocker le **profil choisi** (ex. id du profil ou famille + spécialisation) au lieu de seulement `autoModeProfile: "fast"|"slow"|"balanced"`.
|
||||
3. Adapter la **logique bot / mode auto** (`bot-zoo.js`, `game-loop.js`) pour utiliser les paramètres du profil sélectionné (seuils, fréquences, priorités).
|
||||
4. Ajouter une **interface de sélection hiérarchique** : étape 1 = choix de la Famille (Conservateur, Éleveur, Commerçant, Expansionniste, Scientifique), étape 2 = choix de la Spécialisation dans la famille, avec affichage des priorités et risques. Remplacer/augmenter le simple toggle mode auto actuel.
|
||||
5. Centraliser les libellés et textes dans `texts-fr.js` (noms des familles, spécialisations, priorités, risques).
|
||||
|
||||
**Fichiers concernés :** `web/js/types.js`, `web/js/bot-zoo.js`, `web/js/game-loop.js`, `web/js/ui.js`, `web/js/texts-fr.js`, nouveau module optionnel `web/js/auto-mode-profiles.js` (définition des 50 profils).
|
||||
|
||||
---
|
||||
|
||||
## 3. Ventes – Validation différée et sablier (§13)
|
||||
|
||||
### Écart
|
||||
|
||||
- Le cahier impose une **validation différée de 10 minutes** en base : l’achat n’est effectif (transfert de propriété et de fonds) qu’à la fin de ce délai ; un **sablier** doit s’afficher sur la transaction pendant ce temps.
|
||||
- Le code actuel valide la vente **immédiatement** à l’acceptation (accept → sold, transfert de pièces et livraison côté acheteur sans délai).
|
||||
|
||||
### Actions
|
||||
|
||||
1. Étendre le **schéma BDD** des ventes : ajouter un champ type `validated_at` (ou `pending_until`) pour marquer la fin du délai de 10 minutes après acceptation ; conserver `sold_at` comme date d’acceptation par le vendeur.
|
||||
2. Adapter la **logique métier serveur** : à l’accept, créer la vente en statut « vendu en attente » et enregistrer l’heure de validation future ; un cron ou un traitement à la lecture vérifie `now >= validated_at` pour effectuer le transfert de pièces et marquer la vente comme définitivement validée. L’acheteur ne peut « récupérer » qu’après cette validation.
|
||||
3. **API** : exposer pour chaque vente (côté vendeur et acheteur) l’état « en attente de validation » et le temps restant (ou `validated_at`). Le client affiche le sablier à partir de ces infos.
|
||||
4. **Client** : sur la carte du monde / panneau ventes, afficher un **sablier** (ou compte à rebours) pour les ventes vendues mais pas encore validées ; désactiver le bouton « Récupérer » jusqu’à validation définitive.
|
||||
|
||||
**Fichiers concernés :** `server/schema.sql` ou migrations, `server/db.js`, `server/routes/sales.js`, `web/js/api-client.js`, `web/js/ui.js`, `web/js/types.js`, `docs/features/ventes-encheres-phase10.md`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Visiteurs, incidents et invités de luxe (§2, §10)
|
||||
|
||||
### Écarts
|
||||
|
||||
- **Disparition des animaux (§2)** : ~~Un animal non visité pendant une durée configurable (ex. 5 min) doit être retiré. À vérifier / implémenter.~~ **Implémenté** : `Visitor.MaxSecondsWithoutVisit` (300 s), `tickAnimalVisits` (mise à jour `lastVisitedAt`), `checkDeathCauses` (retrait si dépassement). Documenté dans `docs/features/attractivite-visiteurs-phase8.md`.
|
||||
- **Incidents et exigences (§2)** : Les visiteurs peuvent rencontrer des problèmes (soif, poubelle pleine, banc requis, animal trop loin, envie de photo) ; apparition contextuelle en phase d’attente ; bulle d’icône ; résolution par clic ou action ; impact attractivité et pièces. **Implémenté** : voir `docs/features/incidents-visiteurs-phase4.md`.
|
||||
- **Invités de luxe (§2)** : Une part des visiteurs (ex. 8 %) paie plus l’entrée et dépense plus en boutique. **Implémenté** : `getVisitorParams` (income.js) applique `LuxuryGuestChance`, `LuxuryEntryMultiplier` sur l’entrée et `LuxuryShopMultiplier` sur le bonus boutique ; les revenus visiteurs en tiennent compte.
|
||||
|
||||
### Actions
|
||||
|
||||
1. **Visitor.MaxSecondsWithoutVisit** : Ajouter la config, et dans la boucle de jeu (ou module visiteurs) retirer les animaux non visités depuis plus de X secondes ; mettre à jour `deathCountRecent` ou équivalent si le cahier le lie aux morts.
|
||||
2. **Incidents** : Modéliser les types d’incidents (soif, poubelle, banc, animal loin, photo), les associer aux visiteurs, gérer l’affichage des bulles et le clic/action de résolution ; appliquer bonus/malus attractivité et pièces. Config pour fréquence en phase d’attente.
|
||||
3. **Invités de luxe** : Introduire un flag ou type « luxe » sur une part des visiteurs (ex. 8 %) et modifier le calcul des revenus (entrée + boutique) pour ces visiteurs.
|
||||
|
||||
**Fichiers concernés :** `web/js/config.js`, `web/js/income.js` (ou module visiteurs), `web/js/game-loop.js`, `web/js/ui.js` (bulles, clics), `web/js/types.js`, `web/js/texts-fr.js`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Carte du monde – Villes, stagnation, camions NPC (§3)
|
||||
|
||||
### Écarts
|
||||
|
||||
- **Villes (§3, §11)** : Plus le zoo est proche d’une ville, plus il attire de visiteurs (formule d’attraction). Cases villes : 1 case nom, 1 case nombre max visiteurs vers les zoos. **Implémenté** : `maxVisitorsTowardZoos` par ville dans config ; `getCityAttraction` plafonne la contribution par ville ; carte du monde affiche nom + « max N » par ville (voir `docs/features/villes-phase11.md`).
|
||||
- **Stagnation (§3)** : Zoos qui n’évoluent pas subissent une baisse progressive du multiplicateur de visiteurs (jusqu’à un plancher, ex. 10 %). **Implémenté** : getStagnationMultiplier, lastEvolutionAt (voir attractivite-visiteurs-phase8).
|
||||
- **Camions NPC (§3)** : Des camions (ventes d’œufs entre zoos) sont visibles sur la carte, en mouvement entre deux zoos, ajoutés périodiquement par la boucle de jeu. **Implémenté** : `world-map.js` (`addNpcTruckSale`, `shouldAddNpcTruck`, `pruneTruckSales`) ; game-loop appelle `shouldAddNpcTruck` / `addNpcTruckSale` ; ui.js affiche `worldTruckSales` dans `worldMapNpcTrucksEl` avec position interpolée selon `truckMs`.
|
||||
|
||||
### Actions
|
||||
|
||||
1. **Villes** : Vérifier / implémenter la formule d’attraction (proximité zoo–ville + valeur des animaux) et le plafond « max visiteurs vers zoos » par ville ; afficher sur la carte les cases ville avec nom et compteur max visiteurs (voir `docs/features/villes-phase11.md`).
|
||||
2. **Stagnation** : Suivre la « dernière action d’évolution » par zoo (ou par joueur) ; appliquer un multiplicateur de visiteurs dégressif jusqu’à un plancher (ex. 10 %) si aucune action depuis un délai configurable.
|
||||
3. **Camions NPC** : S’assurer que la boucle de jeu et l’UI créent et affichent bien des camions entre zoos (animations interpolées) selon la config existante.
|
||||
|
||||
**Fichiers concernés :** `web/js/config.js`, `web/js/income.js` ou module attractivité, `web/js/ui.js` (carte du monde, villes), `web/js/game-loop.js`, `docs/features/villes-phase11.md`.
|
||||
|
||||
---
|
||||
|
||||
## 6. Interface et barre du haut (§4)
|
||||
|
||||
### Écarts
|
||||
|
||||
- **Rafraîchissement (§4)** : La barre du haut ne doit pas être reconstruite à chaque mise à jour ; seules les parties dynamiques (indicateurs, grille, carte) sont rafraîchies. **Vérifié** : `setState()` appelle la closure `fullRender()` retournée par `render()` ; celle-ci ne recrée pas le DOM de la barre, elle appelle seulement `updateStatus()` puis `renderWorldMap()` et `renderGrid()`. La barre est créée une seule fois au premier `render(root, opts)`.
|
||||
- **Pas d’onglets avec titres** : Pas d’onglets « Carte du zoo » / « Carte du monde » avec titres ; un seul sélecteur (icônes zoo / monde). À vérifier dans l’UI.
|
||||
- **Message d’erreur** : Masqué et ne prenant pas de place lorsqu’il n’y a pas d’erreur. **Fait** : `setError("")` met `errEl.hidden = true` ; la règle CSS `.error-msg[hidden] { display: none; margin: 0; padding: 0; min-height: 0; }` garantit l’absence d’emprise au layout.
|
||||
|
||||
### Actions
|
||||
|
||||
1. **Barre** : Isoler la barre dans des composants ou n’actualiser que les nœuds dynamiques (indicateurs, icônes) au lieu de recréer toute la barre à chaque rendu.
|
||||
2. **Onglets** : Supprimer ou ne pas afficher de titres d’onglets « Carte du zoo » / « Carte du monde » si présents ; garder uniquement le sélecteur icônes.
|
||||
3. **Erreur** : S’assurer que le message d’erreur est caché (et n’occupe pas d’espace) quand `errorMsg` est vide.
|
||||
|
||||
**Fichiers concernés :** `web/js/ui.js`.
|
||||
|
||||
---
|
||||
|
||||
## 7. Animaux – Feedbacks visuels, morts, saisons (§12)
|
||||
|
||||
### Écarts
|
||||
|
||||
- **Feedbacks visuels (§12)** : Froid (bleuâtre, givre), chaud (rougeâtre, vapeur), faim (lent, maigre, icône), maladie/mort proche (couché, ternes, mouches), heureux/reproduction (cœurs, couleurs vives). Pas de jauges. Non implémenté côté rendu.
|
||||
- **Mort (§12)** : Toutes les causes listées (seuls, pas visités, nourriture, tué autre zoo, recherche trop basse, bébé non vendu à temps, bébé mature non placé à temps, animal accueil non placé à temps, vente échouée, température/milieu en écart). Partiellement implémentées ; recensement dans `docs/features/causes-mort-audit.md`.
|
||||
- **Saisons (§12)** : Les 4 saisons influencent météo, température, bonus/malus reproduction et survie. Non implémenté.
|
||||
|
||||
### Actions
|
||||
|
||||
1. **Feedbacks** : Définir les états visuels des animaux (froid, chaud, faim, maladie, heureux) à partir des données déjà calculées (température, nourriture, visite, etc.) et adapter le rendu (CSS, teintes, icônes) sans ajouter de jauges.
|
||||
2. **Morts** : Auditer les causes de mort dans le code et les comparer à la liste du §12 ; implémenter les manquantes (délais bébé mature / accueil / vente échouée, température/milieu, etc.).
|
||||
3. **Saisons** : Introduire une notion de saison (Printemps, Été, Automne, Hiver) liée au temps de jeu ou à la date ; faire évoluer météo, température et formules de reproduction/survie selon la saison.
|
||||
|
||||
**Fichiers concernés :** `web/js/loot-tables.js`, `web/js/game-loop.js`, `web/js/income.js` (ou modules nourriture/visiteurs), `web/js/ui.js` (rendu animaux), `web/js/config.js`, `web/js/types.js`.
|
||||
|
||||
---
|
||||
|
||||
## 8. Billeterie – Flux explicite (§7, §10)
|
||||
|
||||
### Écart
|
||||
|
||||
- Le cahier indique que la **billeterie** (entrée des visiteurs, 20 visiteurs/unité) et le flux arrivée/départ/retour selon l’attraction sont **non implémentés** (§7). Le code a déjà une capacité billeterie et un plafond de visiteurs ; le flux « entrée par la billeterie, départ avant fin de journée, retour selon attraction » reste à préciser et à coder.
|
||||
|
||||
### Actions
|
||||
|
||||
1. Clarifier le **design** : arrivée des visiteurs depuis les villes → billeterie (cap), durée max 1 journée, départ par la billeterie, retour selon attractivité.
|
||||
2. Implémenter le flux dans le module visiteurs / income : génération des arrivées, suivi du temps passé, départ, et réinjection selon attractivité (en lien avec phase Villes si besoin).
|
||||
|
||||
**Fichiers concernés :** `web/js/income.js`, `web/js/config.js`, `docs/features/` (fiche billeterie).
|
||||
|
||||
---
|
||||
|
||||
## 9. Références et cohérence
|
||||
|
||||
- **Règles économie (§1)** : Compatibilité anciennes sauvegardes (animal inconnu → c0_r0, œuf inconnu → Color_1) : déjà gérée dans `normalizeLoadedCells` / loadState.
|
||||
- **Sécurité (§1)** : Pas de confiance au client, limitation fréquence, traçabilité : à garder en tête pour toute évolution API/serveur.
|
||||
- **BDD et comptes** : Rester aligné avec `docs/bdd-comptes.md` pour tout changement de schéma ou de flux 401/404/200.
|
||||
|
||||
---
|
||||
|
||||
## 10. Ordre recommandé des mises à jour
|
||||
|
||||
1. **Grille au lancement + 3 couples reproducteurs** (§1, §10) – prérequis pour un démarrage conforme.
|
||||
2. **Ventes – validation différée + sablier** (§13) – changement métier important et visible.
|
||||
3. **Mode automatique – 50 profils et UI hiérarchique** (§5) – grosse évolution UX et données.
|
||||
4. **Visitor.MaxSecondsWithoutVisit + disparition animaux** (§2) – rapide si la boucle de jeu existe déjà.
|
||||
5. **Interface – barre non reconstruite, erreur masquée** (§4) – rapide.
|
||||
6. **Villes – formule attraction + cases** (§3, §11) – voir `docs/features/villes-phase11.md`.
|
||||
7. **Stagnation** (§3) – après ou avec le module visiteurs.
|
||||
8. **Incidents visiteurs + invités de luxe** (§2) – après flux visiteurs stable.
|
||||
9. **Feedbacks visuels animaux + causes de mort manquantes** (§12) – progressif.
|
||||
10. **Saisons** (§12) – après température/milieu et reproduction.
|
||||
11. **Billeterie – flux complet** (§7, §10) – après design validé.
|
||||
|
||||
Ce plan peut être découpé en fiches `docs/features/` ou en issues par bloc, et réordonné selon les priorités du projet.
|
||||
321
docs/plan-implementation-rappel-grandes-regles.md
Normal file
321
docs/plan-implementation-rappel-grandes-regles.md
Normal file
@@ -0,0 +1,321 @@
|
||||
# Plan d'implémentation – Rappel des grandes règles (cahier des charges 174-324)
|
||||
|
||||
Plan pour implémenter l’intégralité du bloc « Rappel des grandes règles » sans exception. Les phases sont ordonnées par dépendances ; chaque phase livre un ensemble cohérent et testable.
|
||||
|
||||
---
|
||||
|
||||
## 0. Modèle de données et configuration
|
||||
|
||||
**Objectif** : Fondations pour tout le reste (cases avec couleur + température, bâtiments, bébés vs animaux, ventes).
|
||||
|
||||
**Livrables** :
|
||||
- **Cases** : chaque case a une **couleur** (milieu : eau douce, eau salée, montagne, prairie, forêt, etc.) et une **température** (nombre ou plage). Transitions douces = formules d’interpolation entre cases voisines (calcul côté moteur).
|
||||
- **Animaux multi-cases** : définition des types d’animaux qui occupent N×M cases (shape), et stockage dans `grid.cells` (référence à une entité « animal » multi-case ou marquage des cases).
|
||||
- **Types de bâtiments** (remplacement / extension des kinds actuels) :
|
||||
- `research` (Centre de recherche), 7 niveaux
|
||||
- `billeterie`, 7 niveaux
|
||||
- `boutique` (déjà présent en `souvenirShop` → renommer/aligner), 7 niveaux
|
||||
- `nursery`, 7 niveaux (au lieu de 5)
|
||||
- `food` (Nourriture), 7 niveaux
|
||||
- `reception` (Accueil nouveaux animaux), 7 niveaux
|
||||
- `truck` (camion : actuellement métadonnée d’état, pas une case – à trancher : case dédiée ou zone comme aujourd’hui)
|
||||
- `biomeChangeColor` (changement de milieu couleur), 7 niveaux
|
||||
- `biomeChangeTemp` (changement de milieu température), 7 niveaux
|
||||
- **Entités déplaçables** : `baby` (bébé, en nurserie ou en vente), `animal` (adulte, sur carte ou en accueil ou en vente). Plus d’œufs comme objet principal : les zoos exposent des **bébés** et des **animaux** à l’achat/vente.
|
||||
- **Config** : GameConfig étendu (niveaux max à 7 pour les bâtiments listés, coûts, capacités : recherche 10 zoos/unité, billeterie 20 visiteurs/unité, boutique 5 visiteurs/unité, nurserie 1 bébé/unité, nourriture 5 animaux/unité, accueil 1 animal/unité, camion 1/unité).
|
||||
|
||||
**Fichiers impactés** : `web/js/types.js`, `web/js/config.js`, `web/js/state.js`, `server/schema.sql` (si extension game_state), `web/js/loot-tables.js` (animaux avec `cellsWide`, `cellsHigh`, température idéale, score reproduction/survie par milieu).
|
||||
|
||||
**Dépendances** : aucune.
|
||||
|
||||
---
|
||||
|
||||
## 1. Cartes : couleurs et températures des cases
|
||||
|
||||
**Objectif** : Les cases ont une couleur (milieu) et une température ; les transitions sont douces entre cases.
|
||||
|
||||
**Livrables** :
|
||||
- **Couleurs** : élargir les biomes au-delà de prairie/océan/montagne (eau douce, eau salée, montagne, prairie, forêt, etc.) ; chaque case a un `biome` (couleur/milieu) et un `temperature` (valeur ou min/max).
|
||||
- **Transitions douces** : calcul de la couleur et de la température affichées par interpolation avec les cases voisines (ou gradient par position). Export d’une fonction du type `getDisplayColor(x, y, grid)`, `getDisplayTemperature(x, y, grid)`.
|
||||
- **Rendu** : CSS/Canvas ou styles dynamiques pour fond de case selon couleur et température (dégradés entre cases).
|
||||
- **Grille** : les cases forment le cadrillage des cartes (zoo et monde) ; pas de changement de structure, seulement sémantique couleur/température.
|
||||
|
||||
**Fichiers impactés** : `web/js/biome-rules.js` (ou nouveau `cell-environment.js`), `web/js/grid-utils.js`, `web/css/main.css`, `web/js/ui.js` (rendu grille).
|
||||
|
||||
**Dépendances** : Phase 0.
|
||||
|
||||
---
|
||||
|
||||
## 2. Animaux multi-cases
|
||||
|
||||
**Objectif** : Certains animaux prennent plusieurs cases.
|
||||
|
||||
**Livrables** :
|
||||
- **Définition** : dans les données animaux (loot-tables ou équivalent), champs `cellsWide`, `cellsHigh` (ex. 1×1, 2×2). Placement valide si toutes les cases cibles sont vides et dans les limites.
|
||||
- **Stockage** : soit une entité « animal » avec `originKey` (case coin) + `animalId` + `width`, `height`, soit marquage de chaque case avec référence à la même entité. Suppression/mouvement : toute la surface est libérée ou déplacée.
|
||||
- **Règles** : cohérence animal/milieu et température (phase 1) appliquée sur la zone couverte (ex. toutes les cases dans la plage de température idéale ou au moins la case d’origine).
|
||||
- **UI** : affichage d’un sprite ou emprise sur plusieurs cases ; glisser-déposer d’un animal multi-case déplace tout le bloc.
|
||||
|
||||
**Fichiers impactés** : `web/js/loot-tables.js`, `web/js/placement.js`, `web/js/grid-utils.js`, `web/js/ui.js`, `web/js/state.js` (structure cells).
|
||||
|
||||
**Dépendances** : Phase 0, 1.
|
||||
|
||||
---
|
||||
|
||||
## 3. Bâtiments zoo (types et niveaux)
|
||||
|
||||
**Objectif** : Implémenter tous les types de cases « achetables » avec 7 niveaux et leurs effets.
|
||||
|
||||
**Livrables** :
|
||||
- **Centre de recherche** (`research`) : 7 niveaux. Produit des **unités de recherche** par tick (formule par niveau). Stock dans le game_state (ex. `researchPoints`). 1 unité = 10 zoos max couverts (par proximité sur la carte du monde) ; ces zoos débloquent des niveaux d’animaux/bébés. Coût d’upgrade par palier.
|
||||
- **Billeterie** : 7 niveaux. Cap visiteurs en simultané = 20 × niveau (ou 20 par unité comme dans le rappel). Entrée des visiteurs uniquement via la billeterie (voir phase 8). Coût par palier.
|
||||
- **Boutique** : passer à 7 niveaux. 1 unité = 5 visiteurs simultanés max (effet sur revenus quand un visiteur « passe » par une boutique). Coût par palier.
|
||||
- **Nurserie** : 7 niveaux. 1 unité = 1 bébé max en croissance. Effet « plus rapide » et « meilleurs reproducteurs » (à lier à la reproduction, phase 7). Coût par palier.
|
||||
- **Nourriture** : 7 niveaux. 1 unité = 5 animaux max nourris (voir phase 4). Coût par palier.
|
||||
- **Accueil nouveaux animaux** : 7 niveaux. 1 unité = 1 animal en acclimatation. Durée d’acclimatation selon niveau ; à la fin, état « animal prêt » déplaçable sur une case ou sur le camion. Coût par palier.
|
||||
- **Camion** : 7 niveaux. Représentation : soit une case dédiée « camion », soit une zone comme aujourd’hui ; 1 unité = 1 camion. Effets : plus rapide (durée trajet), dégrade moins le score de reproduction avec la durée du transport (à lier aux ventes et au score de reproduction).
|
||||
- **Changement de milieu (couleur)** : 7 niveaux, payant. Permet de modifier la couleur/milieu d’une case (ou d’une zone selon niveau). Effets : plage de température plus précise, améliore reproduction, diminue besoin nourriture, allonge temps avant mort.
|
||||
- **Changement de milieu (température)** : 7 niveaux, payant. Même idée pour la température des cases.
|
||||
|
||||
**Grille au lancement** (à appliquer en phase 11) : 1 Agrandissement zoo, 1 Recherche, 1 Billeterie, 1 Nurserie, 1 Accueil, 1 Nourriture, 1 Camion, 24 cases (3 couleurs). Pas de « changement de milieu » au lancement.
|
||||
|
||||
**Fichiers impactés** : `web/js/config.js`, `web/js/state.js`, `web/js/economy.js`, `web/js/placement.js`, `web/js/zoo.js`, `web/js/ui.js`, `server/` si game_state étendu.
|
||||
|
||||
**Dépendances** : Phase 0.
|
||||
|
||||
---
|
||||
|
||||
## 4. Bébés et flux nurserie / accueil (remplacement œufs)
|
||||
|
||||
**Objectif** : Ce ne sont plus des œufs qui apparaissent dans les zoos mais des bébés ; flux nurserie → bébé mature, achat/accueil → animal prêt.
|
||||
|
||||
**Livrables** :
|
||||
- **Suppression du modèle « œuf »** comme objet acheté sur la carte du monde. Les zoos (et le labo) proposent des **bébés** ou des **animaux adultes** à l’achat.
|
||||
- **Nurserie** : un bébé est « en croissance » dans une case nurserie (1 bébé par unité de capacité). À la fin de la durée : état **bébé mature**. Déplacement possible : vers une case vide du zoo (devient animal) ou vers le camion (mise en vente, voir phase 9).
|
||||
- **Accueil nouveaux animaux** : un animal acheté (ou reçu) est d’abord en **accueil** (1 animal par unité). À la fin de l’acclimatation : **animal prêt**. Déplacement possible : vers une case vide du zoo ou vers le camion (mise en vente).
|
||||
- **Carte du zoo** : on peut **acheter** (occupe la case) : recherche, billeterie, boutique, nurserie, nourriture, accueil, camion, changement de milieu (couleur), changement de milieu (température). On peut **déplacer dessus** (occupe la case) : bébé mature, animal prêt.
|
||||
- **État** : `pendingBabies` / `receptionAnimals` avec `readyAt`, `babyId` / `animalId`, lien vers case nurserie/accueil. Quand `now >= readyAt`, l’entité est déplaçable (bébé mature / animal prêt).
|
||||
|
||||
**Fichiers impactés** : `web/js/state.js`, `web/js/zoo.js`, `web/js/placement.js`, `web/js/hatching.js` (remplacer par croissance bébé + acclimatation), `web/js/conveyor.js` (offres = bébés/animaux, pas œufs), `web/js/ui.js`, `web/js/world-map.js`, API offres.
|
||||
|
||||
**Dépendances** : Phase 0, 3.
|
||||
|
||||
---
|
||||
|
||||
## 5. Nourriture, consommation et morts
|
||||
|
||||
**Objectif** : Chaque animal a une consommation / unité de temps ; sinon il meurt. Toutes les causes de mort listées.
|
||||
|
||||
**Livrables** :
|
||||
- **Nourriture** : par tick, calcul de la consommation totale des animaux du zoo. Les bâtiments « nourriture » ont une capacité (5 animaux × niveau ou 5 par unité). Répartition : nourrir jusqu’à la capacité ; les animaux non nourris accumulent un déficit (ou un timer « sans nourriture »).
|
||||
- **Mort si pas nourri** : au-delà d’un seuil (temps ou déficit), l’animal meurt (retiré de la grille, enregistré pour pénalités attractivité / naissances).
|
||||
- **Autres causes de mort** (toutes à implémenter) :
|
||||
- **Seul** : à définir (ex. animal seul sur l’île sans voisin après un délai).
|
||||
- **Pas visité** : déjà en place (MaxSecondsWithoutVisit).
|
||||
- **Manque de nourriture** : ci-dessus.
|
||||
- **Tué par un autre animal d’un autre zoo** : règle métier (ex. événement rare ou mécanique croisée entre zoos).
|
||||
- **Niveau de recherche trop inférieur** : si niveau du centre de recherche du zoo < seuil requis pour le type d’animal, après un délai l’animal meurt.
|
||||
- **Bébé non vendu dans les délais** : si un bébé en vente n’est pas vendu avant une date limite, il meurt (voir phase 9).
|
||||
- **Bébé de nurserie prêt non placé dans les délais** : si bébé mature n’est pas déplacé (case ou camion) avant un délai, il meurt.
|
||||
- **Animal d’accueil prêt non placé sur la carte après un délai** : idem.
|
||||
- **Animal non placé sur la carte dans les délais (vente échouée)** : si une vente est annulée ou expire sans que l’animal soit récupéré, mort.
|
||||
- **Température trop en écart** : si la température de la case (ou de la zone) n’est pas dans la plage acceptable pour l’animal, après un délai mort.
|
||||
- **Milieu (couleur) trop en écart** : idem pour le biome.
|
||||
- **Historique des morts** : stockage (compteur ou liste récente) pour calcul d’attractivité et de naissances (phases 8 et 7).
|
||||
|
||||
**Fichiers impactés** : `web/js/config.js`, `web/js/state.js`, nouveau `web/js/food.js` (ou dans `income.js`), `web/js/game-loop.js`, `web/js/animal-visits.js` (étendre pour morts), `web/js/loot-tables.js` (température idéale, plages par animal).
|
||||
|
||||
**Dépendances** : Phase 0, 1, 3, 4.
|
||||
|
||||
---
|
||||
|
||||
## 6. Reproduction
|
||||
|
||||
**Objectif** : Après un délai, en proximité d’un autre animal de même type mais issu d’un zoo différent, naissance d’un bébé (nurserie ou vente). Score de reproduction du zoo et adéquation température/milieu influencent.
|
||||
|
||||
**Livrables** :
|
||||
- **Proximité** : deux animaux de même type (même `animalId` ou même « type ») sur des cases adjacentes (ou à distance N). Un des deux doit avoir une origine « autre zoo » (vendue achetée) pour permettre la reproduction.
|
||||
- **Délai** : timer par paire ou par animal ; à l’échéance, génération d’un **bébé**. Le bébé va en nurserie si une place est libre, sinon directement en vente (case de vente sur la carte du monde).
|
||||
- **Score de reproduction du zoo** (voir phase 7) : utilisé pour accélérer l’arrivée du bébé (réduction du délai).
|
||||
- **Température et milieu** : « très bonne adéquation » avec la température/milieu de l’animal réduit le délai ou augmente la chance de reproduction.
|
||||
- **Score de reproduction par milieux (couleurs)** et **score de survie par milieux (couleurs)** : définis dans les données animaux ; utilisés dans les formules de reproduction et de mort.
|
||||
- **Température idéale** : par type d’animal (déjà prévu en phase 5 pour les morts) ; utilisée aussi pour la reproduction.
|
||||
|
||||
**Fichiers impactés** : `web/js/loot-tables.js`, nouveau `web/js/reproduction.js`, `web/js/state.js`, `web/js/game-loop.js`.
|
||||
|
||||
**Dépendances** : Phase 0, 1, 4, 5.
|
||||
|
||||
---
|
||||
|
||||
## 7. Score de reproduction du zoo
|
||||
|
||||
**Objectif** : Nombre de naissances, taux d’alimentation, et score « vendu » attaché aux animaux.
|
||||
|
||||
**Livrables** :
|
||||
- **Nombre de naissances** : compteur dans le game_state (incrémenté à chaque bébé né en reproduction).
|
||||
- **Taux d’alimentation** : ratio (animaux nourris / animaux total) sur une fenêtre ou instantané ; stocké ou dérivé pour l’affichage et les formules.
|
||||
- **Score de reproduction** (valeur agrégée du zoo) : formule combinant naissances, taux d’alimentation, et éventuellement autres facteurs. Exposé pour l’UI (carte du monde : case « score de reproduction » sous le nom du zoo).
|
||||
- **Animal vendu** : quand un animal quitte le zoo (vente), il garde en mémoire le **score de reproduction du zoo au moment de la vente** (pour accélérer l’arrivée d’un bébé dans le zoo acheteur, phase 6).
|
||||
|
||||
**Fichiers impactés** : `web/js/state.js`, `web/js/income.js` ou `web/js/food.js`, `web/js/reproduction.js`, `web/js/trade.js`, `web/js/world-map.js` (affichage score).
|
||||
|
||||
**Dépendances** : Phase 5, 6.
|
||||
|
||||
---
|
||||
|
||||
## 8. Attractivité et visiteurs (billeterie, 1 journée, boutiques)
|
||||
|
||||
**Objectif** : Visiteurs entrent par la billeterie, restent max 1 journée, plus longtemps avec boutiques et nombre d’animaux différents. Attractivité du zoo avec toutes les composantes et pénalités.
|
||||
|
||||
**Livrables** :
|
||||
- **Billeterie** : seule entrée des visiteurs dans le zoo. Capacité simultanée = 20 × niveau billeterie (ou 20 par unité). Le nombre de visiteurs présents est plafonné par cette capacité.
|
||||
- **Durée max 1 journée** : chaque visiteur a une « arrivée » ; il repart au plus tard après 1 journée (temps de jeu). Il repart par la billeterie.
|
||||
- **Temps passé** : les visiteurs restent plus longtemps dans la journée s’il y a des boutiques et plus d’animaux différents (formule à définir).
|
||||
- **Déplacement** : les visiteurs se déplacent en étant attirés (déjà partiellement en place ; conserver et adapter si besoin).
|
||||
- **Attractivité du zoo** (formule globale) :
|
||||
- proportionnelle à la valeur cumulée des animaux du zoo
|
||||
- proportionnelle au nombre d’animaux différents
|
||||
- proportionnelle à la rareté (niveau) des animaux
|
||||
- proportionnelle au taux de remplissage en animaux
|
||||
- **Pénalités** : les morts pénalisent l’attractivité auprès des visiteurs à venir (depuis les villes) ; les morts pénalisent l’apparition de naissances dans le zoo.
|
||||
- **Bonus** : les naissances augmentent l’attractivité auprès des visiteurs à venir ; les naissances augmentent l’apparition d’autres naissances dans le zoo.
|
||||
- **Villes** : nombre de visiteurs maximum vers les zoos (voir phase 10). L’attractivité du zoo détermine combien de ces visiteurs sont « alloués » au zoo.
|
||||
- **Affichage** : sur la carte du monde, sous le nom du zoo : une case « score d’attractivité » (et une « score de reproduction », phase 7).
|
||||
|
||||
**Fichiers impactés** : `web/js/income.js`, `web/js/visitor-attraction.js`, `web/js/config.js`, `web/js/state.js`, `web/js/ui.js`, `web/js/world-map.js`.
|
||||
|
||||
**Dépendances** : Phase 3, 5, 7.
|
||||
|
||||
---
|
||||
|
||||
## 9. Carte du monde : agrandissement en unités de recherche et compteurs
|
||||
|
||||
**Objectif** : Agrandissement de la carte payé en unités de recherche ; affichage des compteurs et des cases zoo (attractivité, reproduction, vente).
|
||||
|
||||
**Livrables** :
|
||||
- **Agrandissement de la carte** : plus payé en pièces mais en **unités de recherche** produites par les centres de recherche des zoos du joueur. Coût en unités par palier (plus cher par palier, même nombre de cases ajoutées). Si pas assez d’unités, bouton/zone grisé.
|
||||
- **Compteurs** (sur la carte du monde ou dans une barre dédiée) :
|
||||
- Compteur de bébés à vendre (total ou par zoo)
|
||||
- Compteur d’animaux à vendre
|
||||
- Compteur de laboratoires
|
||||
- Compteur de zoos
|
||||
- Compteur de villes
|
||||
- **Cases monde au lancement** : 1 Agrandissement carte, 1 Compteur bébés à vendre, 1 Compteur animaux à vendre, 1 Compteur laboratoires, 1 Compteur zoos, 1 Compteur villes, 1 Accueil, 1 Nourriture, 1 Camion, 24 cases 3 couleurs.
|
||||
- **Case du zoo (joueur et autres)** : 1 case nom du zoo, juste en dessous 1 case score d’attractivité, juste en dessous 1 case score de reproduction, juste en dessous 1 case de vente (voir phase 10). Possibilité d’acheter sur les cases voisines d’autres cases de vente (achats multi-slots).
|
||||
- Même principe pour zoos des autres joueurs et zoos bots.
|
||||
|
||||
**Fichiers impactés** : `web/js/state.js`, `web/js/economy.js`, `web/js/world-map.js`, `web/js/ui.js`, `web/js/config.js`.
|
||||
|
||||
**Dépendances** : Phase 3, 7, 8.
|
||||
|
||||
---
|
||||
|
||||
## 10. Ventes et enchères (bébés et animaux adultes)
|
||||
|
||||
**Objectif** : Bébés et animaux en vente sur la carte du monde ; enchères joueurs/bots ; vendeur valide ou non ; bébé invendu meurt.
|
||||
|
||||
**Livrables** :
|
||||
- **Cases de vente** : sur la carte du monde, sous le nom de chaque zoo, une (ou plusieurs) case(s) de vente affichant un bébé ou un animal à vendre, avec le dernier montant d’enchère.
|
||||
- **Mise en vente** : depuis la carte du zoo, déplacer un animal ou un bébé mature sur le camion → l’entité sort du zoo et apparaît en **vente** sur la carte du monde (case de vente du joueur).
|
||||
- **Enchères** : joueurs et bots peuvent enchérir. Montant initial décidé par le vendeur (ou dérivé d’un prix de base). Après un temps, le **vendeur** choisit de valider ou non la vente (acceptation de la meilleure enchère ou refus).
|
||||
- **Si vente validée** : l’acheteur reçoit le bébé ou l’animal (en accueil dans son zoo, ou en nurserie si bébé). Le score de reproduction du zoo vendeur au moment de la vente est attaché à l’entité (pour accélérer bébé en phase 6).
|
||||
- **Si bébé invendu** (délai dépassé sans vente validée) : le bébé **meurt** (supprimé, pénalités éventuelles).
|
||||
- **Animaux adultes** : les zoos vendent aussi des animaux adultes (pas seulement des bébés) ; même flux : mise sur le camion → case de vente → enchères → validation ou refus.
|
||||
|
||||
**Fichiers impactés** : `web/js/state.js`, `web/js/trade.js`, `web/js/world-map.js`, `web/js/ui.js`, `server/routes/zoos.js` ou nouveau `server/routes/trades.js` (enchères temps réel ou polling), `server/db.js` (table ou champs pour offres de vente / enchères).
|
||||
|
||||
**Dépendances** : Phase 4, 6, 7, 9.
|
||||
|
||||
---
|
||||
|
||||
## 11. Villes
|
||||
|
||||
**Objectif** : Cases des villes avec nom et nombre de visiteurs maximum vers les zoos.
|
||||
|
||||
**Livrables** :
|
||||
- **Cases des villes** : sur la carte du monde, chaque ville a 1 case nom et 1 case « nombre de visiteurs maximum vers les zoos » (capacité totale ou par zoo à définir).
|
||||
- **Règle** : ce nombre limite ou répartit les visiteurs qui peuvent aller vers les zoos (déjà partiellement en place avec CityAttractionScale ; adapter pour un plafond « max visiteurs vers zoos » par ville).
|
||||
|
||||
**Fichiers impactés** : `web/js/config.js`, `web/js/world-map.js`, `web/js/income.js` ou `web/js/visitor-attraction.js`, `web/js/ui.js`.
|
||||
|
||||
**Dépendances** : Phase 8.
|
||||
|
||||
---
|
||||
|
||||
## 12. UI et grille au lancement
|
||||
|
||||
**Objectif** : Grille zoo et monde conformes au rappel ; transitions douces visibles ; tous les types de cases et actions.
|
||||
|
||||
**Livrables** :
|
||||
- **Carte du zoo au lancement** : 1 Agrandissement du zoo (+1 case, payant), 1 Recherche (en haut à gauche), 1 Billeterie, 1 Nurserie, 1 Accueil nouveaux animaux, 1 Nourriture, 1 Camion, 24 cases de 3 couleurs différentes. Positions exactes (ex. 1_1 = Recherche, 2_1 = Billeterie, …) à fixer dans `defaultState()` et config.
|
||||
- **Carte du monde au lancement** : 1 Agrandissement de la carte (payé en unités de recherche), compteurs (bébés, animaux, labos, zoos, villes), 1 Accueil, 1 Nourriture, 1 Camion, 24 cases de 3 couleurs. Layout à définir (même zone que la grille zoo ou zone dédiée).
|
||||
- **Transitions douces** : rendu des couleurs et températures avec interpolation (phase 1) visible sur les deux cartes.
|
||||
- **Actions** : achat sur case vide (recherche, billeterie, boutique, nurserie, nourriture, accueil, camion, changement de milieu couleur, changement de milieu température) ; déplacement sur case vide (bébé mature, animal prêt). Messages d’erreur et feedback clairs.
|
||||
- **Accessibilité** : ARIA, clavier, contraste (règles projet).
|
||||
|
||||
**Fichiers impactés** : `web/js/state.js`, `web/js/ui.js`, `web/js/world-map.js`, `web/css/main.css`.
|
||||
|
||||
**Dépendances** : Toutes les phases précédentes.
|
||||
|
||||
---
|
||||
|
||||
## 13. Migration et compatibilité
|
||||
|
||||
**Objectif** : Anciennes sauvegardes (modèle œufs/école actuel) restent jouables ou migration propre.
|
||||
|
||||
**Livrables** :
|
||||
- **Détection de version** : `game_state.version` ou `game_state.specVersion` pour distinguer « ancien » (œufs, école, 5 niveaux) et « nouveau » (bébés, recherche, 7 niveaux, etc.).
|
||||
- **Migration** : script ou logique au chargement : si ancienne version, soit conversion (œufs → bébés en nurserie, école → centre de recherche niveau 1, etc.), soit message « sauvegarde incompatible, recommencer ».
|
||||
- **API et BDD** : extension de `game_state` (JSONB) pour tous les nouveaux champs ; pas de perte de données existantes si migration choisie.
|
||||
|
||||
**Fichiers impactés** : `web/js/state.js` (loadState, defaultState), `server/routes/zoos.js`, éventuellement script de migration côté serveur.
|
||||
|
||||
**Dépendances** : Toutes les phases 0–12.
|
||||
|
||||
---
|
||||
|
||||
## Synthèse des dépendances
|
||||
|
||||
```
|
||||
0 (modèle) ─┬─ 1 (couleurs/temp) ─┬─ 2 (multi-cases)
|
||||
│ └─ 5 (nourriture/morts)
|
||||
├─ 3 (bâtiments)
|
||||
└─ 4 (bébés/flux)
|
||||
│
|
||||
├─ 5 (nourriture/morts) ─ 7 (score repro)
|
||||
├─ 6 (reproduction) ──── 7
|
||||
├─ 8 (attractivité/visiteurs)
|
||||
├─ 9 (carte monde recherche/compteurs)
|
||||
└─ 10 (ventes/enchères) ─ 11 (villes)
|
||||
│
|
||||
└─ 12 (UI / grilles lancement) ─ 13 (migration)
|
||||
```
|
||||
|
||||
**Ordre recommandé d’implémentation** : 0 → 1 → 3 → 4 → 2 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 12 → 13.
|
||||
|
||||
---
|
||||
|
||||
## Checklist exhaustive (référence 174-324)
|
||||
|
||||
- [ ] Cases : couleur (milieu) + température ; transitions douces
|
||||
- [ ] Animaux multi-cases
|
||||
- [ ] Centre de recherche : 7 niv., unités de recherche, 10 zoos/unité, déblocage niveaux animaux/bébés
|
||||
- [ ] Billeterie : 7 niv., 20 visiteurs/unité, entrée/sortie visiteurs
|
||||
- [ ] Boutique : 7 niv., 5 visiteurs simultanés/unité
|
||||
- [ ] Nurserie : 7 niv., 1 bébé/unité, bébé mature → case ou camion
|
||||
- [ ] Nourriture : 7 niv., consommation/animal, mort si pas nourri, 5 animaux/unité, reproduction
|
||||
- [ ] Accueil nouveaux animaux : 7 niv., 1 animal/unité, animal prêt → case ou camion
|
||||
- [ ] Camion : 7 niv., bébé/animal sur camion → vente carte monde, 1 camion/unité
|
||||
- [ ] Changement de milieu (couleur) : 7 niv., payant
|
||||
- [ ] Changement de milieu (température) : 7 niv., payant
|
||||
- [ ] Bébés animaux (plus d’œufs) ; zoos vendent bébés et animaux adultes
|
||||
- [ ] Morts : seuls, pas visités, nourriture, tué autre zoo, recherche trop basse, bébé non vendu à temps, bébé mature non placé à temps, animal accueil non placé à temps, vente échouée, température/milieu en écart
|
||||
- [ ] Reproduction : délai, proximité même type autre zoo, score repro, température/milieu adéquats ; score repro/survie par milieu ; température idéale
|
||||
- [ ] Score de reproduction du zoo : naissances, taux alimentation, score vendu sur l’animal
|
||||
- [ ] Attractivité : valeur cumulée, nombre d’animaux différents, rareté, taux remplissage ; pénalités morts ; bonus naissances
|
||||
- [ ] Visiteurs : entrée billeterie, max 1 journée, plus longtemps avec boutiques et diversité animaux, déplacement attiré
|
||||
- [ ] Carte du monde : agrandissement en unités de recherche ; compteurs bébés, animaux, labos, zoos, villes ; cases zoo (nom, attractivité, reproduction, vente) ; villes (nom, max visiteurs vers zoos)
|
||||
- [ ] Ventes : cases de vente sous les zoos ; enchères joueurs/bots ; vendeur valide ou non ; bébé invendu meurt
|
||||
- [ ] Grille zoo au lancement : 1 agrandissement, 1 recherche, 1 billeterie, 1 nurserie, 1 accueil, 1 nourriture, 1 camion, 24 cases 3 couleurs
|
||||
- [ ] Grille monde au lancement : 1 agrandissement carte (recherche), compteurs, 1 accueil, 1 nourriture, 1 camion, 24 cases 3 couleurs
|
||||
- [ ] Migration anciennes sauvegardes / compatibilité
|
||||
131
docs/plan-verification-phases-0-a-9.md
Normal file
131
docs/plan-verification-phases-0-a-9.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# Vérification des phases 0 à 9 avant phase 10
|
||||
|
||||
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md`.
|
||||
**Objectif :** S’assurer que tout le nécessaire pour la phase 10 (Ventes et enchères) est en place.
|
||||
|
||||
---
|
||||
|
||||
## Phase 0 – Modèle de données et configuration
|
||||
|
||||
| Livrable | Statut | Note |
|
||||
|----------|--------|------|
|
||||
| Cases couleur + température | Fait | biome-rules, grid, config |
|
||||
| Animaux multi-cases (shape, stockage) | Fait | cellsWide/cellsHigh dans types, placement, loot-tables |
|
||||
| Types de bâtiments 7 niveaux | Fait | research, billeterie, souvenirShop, nursery, food, reception, truck, biomeChangeColor, biomeChangeTemp dans config |
|
||||
| Entités déplaçables (bébé, animal) | Partiel | pendingBabies, receptionAnimals, saleListings en place ; conveyor et labo utilisent encore des œufs (eggType) |
|
||||
| Config (niveaux max, coûts, capacités) | Fait | GameConfig étendu |
|
||||
|
||||
**Blocant phase 10 :** Non. saleListings, pendingBabies, receptionAnimals sont en place.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 – Cartes : couleurs et températures
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| Biomes / température par case | Fait (biome-rules.js, getDisplayBiome, getDisplayTemperature) |
|
||||
| Transitions douces (interpolation) | Fait |
|
||||
| Rendu grille | Fait |
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 – Animaux multi-cases
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| cellsWide / cellsHigh (loot-tables, placement) | Fait |
|
||||
| Stockage et mouvement du bloc | Fait (placement, zoo, hatching) |
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 – Bâtiments zoo (types et niveaux)
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| Research, Billeterie, Boutique, Nurserie, Food, Reception, Truck, BiomeColor, BiomeTemp | Fait (config 7 niv., build/upgrade dans zoo, placement, ui) |
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 – Bébés et flux nurserie / accueil
|
||||
|
||||
| Livrable | Statut | Note |
|
||||
|----------|--------|------|
|
||||
| Bébés (nurserie → mature) | Fait | pendingBabies, readyAt, placeMatureBabyOnCell |
|
||||
| Accueil (reception → animal prêt) | Fait | receptionAnimals, placeReceptionAnimalOnCell |
|
||||
| Achat / déplacement (bébé mature, animal prêt) | Fait | zoo, placement, ui |
|
||||
| Suppression complète du modèle « œuf » | Partiel | Conveyor et labo exposent encore des œufs ; bébés/animaux en parallèle |
|
||||
|
||||
**Blocant phase 10 :** Non. Flux bébé/animal et saleListings (nursery full) existent.
|
||||
|
||||
---
|
||||
|
||||
## Phase 5 – Nourriture, consommation et morts
|
||||
|
||||
| Livrable | Statut | Note |
|
||||
|----------|--------|------|
|
||||
| Nourriture (capacité, répartition, lastFedAt) | Fait | food.js, getFoodCapacity, tickFeeding |
|
||||
| Mort si pas nourri | Fait | checkDeathCauses, MaxSecondsWithoutFood |
|
||||
| Pas visité | Fait | MaxSecondsWithoutVisit |
|
||||
| Température / milieu en écart | Fait | maybeDeathBlock (temp + biome) |
|
||||
| Bébé mature non placé à temps | Fait | filterPendingBabies, MaxSecondsMatureNotPlaced |
|
||||
| Animal accueil prêt non placé à temps | Fait | filterReceptionAnimals, MaxSecondsReadyNotPlaced |
|
||||
| Autres causes (seul, tué autre zoo, recherche trop basse, bébé non vendu, vente échouée) | Non fait | Optionnel pour phase 10 ; « bébé invendu meurt » = phase 10 |
|
||||
|
||||
**Blocant phase 10 :** Non.
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 – Reproduction
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| Paires même type + autre zoo, adjacentes | Fait (findReproductionPairs, blocksAreAdjacent) |
|
||||
| Délai (score repro, biome, température) | Fait (tickReproduction, timers, dueAt) |
|
||||
| Bébé → nurserie ou vente (saleListings) | Fait (addPendingBaby, NoFreeNursery → saleListings) |
|
||||
|
||||
---
|
||||
|
||||
## Phase 7 – Score de reproduction du zoo
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| getReproductionScore (birthCount, feedingRate) | Fait |
|
||||
| Affichage carte monde (score repro) | Fait (world-map-zoo-reproduction-score) |
|
||||
| reproductionScoreAtSale sur vente | Fait (reproduction.js lors du push saleListings) |
|
||||
|
||||
---
|
||||
|
||||
## Phase 8 – Attractivité et visiteurs
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| Billeterie = seule entrée, cap 20/unité | Fait (getBilleterieCapacity, tickVisitorArrivals) |
|
||||
| Durée max 1 journée par visiteur | Fait (visitorArrivals, arrivedAt, getStayDurationSeconds) |
|
||||
| Prolongation boutiques / diversité | Fait (getStayMultiplier, StayMultiplierPerShopLevel, StayMultiplierPerSpecies) |
|
||||
| Score attractivité (valeur, espèces, rareté, remplissage, pénalités, bonus) | Fait (getAttractivityScore) |
|
||||
| Affichage carte monde (score attractivité) | Fait (world-map-zoo-attractivity-score) |
|
||||
|
||||
---
|
||||
|
||||
## Phase 9 – Carte du monde : recherche et compteurs
|
||||
|
||||
| Livrable | Statut |
|
||||
|----------|--------|
|
||||
| Agrandissement carte en unités de recherche | Fait (getWorldMapUpgradeResearchCost, tryUpgradeWorldMap) |
|
||||
| Compteurs (bébés à vendre, animaux à vendre, labos, zoos, villes) | Fait (worldMapCounters dans ui.js) |
|
||||
| Case zoo : nom, score attractivité, score reproduction | Fait (world-map-zoo-name, -reproduction-score, -attractivity-score) |
|
||||
| Case de vente sous le zoo | Partiel | Un slot « world-map-zoo-slot » existe ; il affiche conveyor offers (œufs / bébé/animal) ; phase 10 doit y afficher saleListings + enchères |
|
||||
|
||||
**Blocant phase 10 :** Non. Le slot existe ; phase 10 ajoute l’affichage des ventes (saleListings) et les enchères.
|
||||
|
||||
---
|
||||
|
||||
## Synthèse pour la phase 10
|
||||
|
||||
- **Prérequis phase 10 (4, 6, 7, 9) :** Tous satisfaits au niveau nécessaire.
|
||||
- **Manques non bloquants :**
|
||||
- Phase 0/4 : modèle œuf encore présent (conveyor, labo) ; phase 10 peut s’appuyer sur saleListings et bébés/animaux tels qu’ils sont.
|
||||
- Phase 5 : certaines causes de mort (seul, autre zoo, recherche trop basse, bébé non vendu) non implémentées ; « bébé invendu meurt » sera ajouté en phase 10.
|
||||
- Phase 9 : case de vente = slot actuel ; phase 10 y branchera les saleListings et l’UI d’enchères.
|
||||
|
||||
**Conclusion :** On peut démarrer la phase 10 (Ventes et enchères). Les écarts listés ci-dessus pourront être traités en parallèle ou dans les phases suivantes.
|
||||
189
docs/specs/accueil_animaux.md
Normal file
189
docs/specs/accueil_animaux.md
Normal file
@@ -0,0 +1,189 @@
|
||||
# Spécifications : Accueil des Animaux
|
||||
|
||||
## Définition
|
||||
Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou transferts).
|
||||
|
||||
## Fonctionnalités
|
||||
- **Acclimatation** : Période obligatoire avant de pouvoir placer l'animal sur la grille active.
|
||||
- **Stockage temporaire** : Évite de devoir placer immédiatement un animal acheté si le terrain n'est pas prêt.
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
- **Effet** : Réduit le temps d'acclimatation. Améliore le potentiel reproducteur de l'animal entrant.
|
||||
- **Ratio** : 1 unité couvre 1 animal en cours d'accueil.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "animal_reception",
|
||||
"level": "integer (1-7)",
|
||||
"slots": [
|
||||
{ "animal_id": "uuid", "arrival_time": "timestamp", "ready_time": "timestamp" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Temps Acclimatation | 10 minutes |
|
||||
| Capacité | 1 animal |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Présent au démarrage.
|
||||
|
||||
### Conditions de Disparition
|
||||
Indestructible.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Zone neutre (T° idéale simulée).
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Zone neutre.
|
||||
|
||||
### Impact Saisons
|
||||
Protégé.
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Bonus Repro** : Un animal passant par un accueil de haut niveau gagne un bonus temporaire de fertilité (+10% à +50%).
|
||||
|
||||
### Impact Mort
|
||||
Pas de mort possible en zone d'accueil (Stase).
|
||||
|
||||
### Impact Nourriture
|
||||
Nourri automatiquement.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Réduction Temps Acclimatation** :
|
||||
| Niveau | Temps Base |
|
||||
| :--- | :--- |
|
||||
| 1 | 10 min |
|
||||
| 2 | 8 min |
|
||||
| 3 | 6 min |
|
||||
| 4 | 4 min |
|
||||
| 5 | 2 min |
|
||||
| 6 | 1 min |
|
||||
| 7 | Instantané |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Arrivée** : Animal livré par camion.
|
||||
* **Prêt** : Animal prêt à être placé.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Capacité | Temps Acclimatation | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 100 | 1 | 10 min | 0s |
|
||||
| 2 | 200 | 2 | 8 min | 0s |
|
||||
| 3 | 400 | 3 | 6 min | 0s |
|
||||
| 4 | 800 | 4 | 4 min | 0s |
|
||||
| 5 | 1600 | 5 | 2 min | 0s |
|
||||
| 6 | 3200 | 6 | 1 min | 0s |
|
||||
| 7 | 6400 | 7 | 0 min | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateReception(center):
|
||||
for slot in center.slots:
|
||||
if currentTime >= slot.ready_time:
|
||||
notifyPlayer("ANIMAL_READY", slot.animal_id)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" |
|
||||
| `RECEPTION_FULL` | Warning | "Accueil saturé, impossible d'acheter." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Arrivée Animal (Passif)
|
||||
**Description UX** : Le camion décharge un animal. Il apparaît dans l'Accueil en mode "Attente".
|
||||
**Description UI** : Notification "Livraison effectuée". L'icône de l'Accueil change (ex: porte fermée -> porte avec caisse devant).
|
||||
**Notification Push** : "Votre [Animal] est arrivé à l'accueil !" envoyée si le joueur est hors ligne.
|
||||
**Emplacement** : Case Accueil.
|
||||
**Intégration** : Suite de l'action Camion.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `DELIVERY_COMPLETE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `truck_door.mp3`, `crate_drop.mp3`.
|
||||
- **Graphiques** : Sprite Caisse en bois.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Camion qui repart.
|
||||
- **Couleurs** : Marron (Caisse).
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
|
||||
### Consultation & Acclimatation (Consultation)
|
||||
**Description UX** : Le joueur vérifie le temps restant avant de pouvoir placer l'animal.
|
||||
**Description UI** : **Bottom Sheet** listant les animaux en transit. Barre de progression "Acclimatation" pour chacun.
|
||||
**Emplacement** : Modal Accueil.
|
||||
**Intégration** : Liste verticale.
|
||||
**Navigation** : Clic Accueil -> Modal.
|
||||
**Événements** : `OPEN_RECEPTION`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_open.mp3`
|
||||
- **Graphiques** : Style "Quarantaine" ou "Étable propre".
|
||||
- **Images** : Portrait animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Barre de progression qui avance.
|
||||
- **Couleurs** : Orange (En cours), Vert (Prêt).
|
||||
- **Textes** : "Prêt dans X min".
|
||||
- **Formes** : Barres arrondies.
|
||||
|
||||
### Transfert vers Zoo (Action)
|
||||
**Description UX** : L'animal est prêt. Le joueur le glisse vers le zoo.
|
||||
**Description UI** : Bouton "Placer" ou Drag & Drop depuis la liste.
|
||||
**Alternative** : Tap to Select -> Tap to Place.
|
||||
**Emplacement** : Modal Accueil -> Carte Zoo.
|
||||
**Intégration** : Mode placement (comme Nurserie).
|
||||
**Navigation** : Drag -> Drop.
|
||||
**Événements** : `PLACE_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `animal_happy.mp3` (cri de l'animal).
|
||||
- **Graphiques** : Sprite Animal.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Animal qui saute de joie au placement.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
40
docs/specs/achat_upgrade_boutique.md
Normal file
40
docs/specs/achat_upgrade_boutique.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Spécifications : Achat et Upgrade des Boutiques
|
||||
|
||||
## Construction
|
||||
- Peut être construite sur n'importe quelle case vide.
|
||||
|
||||
## Upgrade (7 Niveaux)
|
||||
- **Attrait** : Attire les visiteurs de plus loin sur la grille.
|
||||
- **Revenu** : Augmente le montant dépensé par chaque visiteur qui passe sur la case.
|
||||
- **Capacité** : Augmente le nombre de visiteurs pouvant interagir simultanément.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
Voir `boutique.md` pour le modèle de données complet.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `boutique.md` pour le tableau détaillé des coûts et effets par niveau.
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Rénovation (Action)
|
||||
**Description UX** : Améliorer la boutique change son apparence et ses stats.
|
||||
**Description UI** : Le sprite du bâtiment change (devient plus grand/beau).
|
||||
**Emplacement** : Case Boutique.
|
||||
**Intégration** : Visuel immédiat.
|
||||
**Navigation** : Upgrade -> Validation.
|
||||
**Événements** : `UPGRADE_SHOP_VISUAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `construction_finish.mp3`.
|
||||
- **Graphiques** : Sprites Boutiques Niv 1-7.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Effet de "pop" ou échafaudage rapide.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
62
docs/specs/achat_upgrade_camion.md
Normal file
62
docs/specs/achat_upgrade_camion.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# Spécifications : Achat et Upgrade des Camions
|
||||
|
||||
## Achat
|
||||
- Le joueur possède un camion par défaut.
|
||||
- Possibilité d'acheter des camions supplémentaires (si le design autorise plusieurs flottes).
|
||||
|
||||
## Upgrade (7 Niveaux)
|
||||
- **Niveau 1** : Camion standard.
|
||||
- **Niveau 2-7** :
|
||||
- **Vitesse** : Augmente la vitesse de déplacement sur la carte du monde.
|
||||
- **Confort** : Réduit la perte de santé/stress des animaux transportés.
|
||||
- **Capacité** : (Optionnel) Transport de plusieurs animaux ? *Actuellement 1 unité = 1 camion.*
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
Voir `camion.md` pour le modèle de données complet.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `camion.md` pour le tableau détaillé des coûts et effets par niveau.
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Garage / Atelier (Consultation)
|
||||
**Description UX** : Le joueur gère sa flotte de camions.
|
||||
**Description UI** : Liste des camions avec stats (Vitesse, Confort). Bouton "Améliorer".
|
||||
**Emplacement** : Bâtiment Garage (si existe) ou Menu Transport.
|
||||
**Intégration** : Modal.
|
||||
**Navigation** : Menu -> Transport.
|
||||
**Événements** : `OPEN_GARAGE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `wrench.mp3` (bruit d'outil).
|
||||
- **Graphiques** : Fond garage.
|
||||
- **Images** : Sprites Camions évolutifs (Vieux tacot -> Camion futuriste).
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Gris, Métal.
|
||||
- **Textes** : "Niveau X".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Customisation (Cosmétique)
|
||||
**Description UX** : Changer la couleur du camion.
|
||||
**Description UI** : Palette de couleurs.
|
||||
**Emplacement** : Garage.
|
||||
**Intégration** : Sélecteur.
|
||||
**Navigation** : Clic Couleur -> Appliquer.
|
||||
**Événements** : `PAINT_TRUCK`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `spray.mp3`.
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Camion change de couleur.
|
||||
- **Couleurs** : Palette 16 couleurs.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
56
docs/specs/achat_upgrade_case.md
Normal file
56
docs/specs/achat_upgrade_case.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Spécifications : Achat et Upgrade des Cases
|
||||
|
||||
## Construction
|
||||
- Sur une case vide de type "Terrain", le joueur peut acheter un bâtiment.
|
||||
- Le coût dépend du type de bâtiment.
|
||||
|
||||
## Types Constructibles
|
||||
- Nurserie
|
||||
- Boutique
|
||||
- (Les autres bâtiments comme Billeterie/Recherche sont souvent uniques et upgradables, mais on peut imaginer en construire d'autres si le design le permet).
|
||||
|
||||
## Upgrade de Case (Terrain)
|
||||
- **Changement de Milieu** : Payer pour changer la couleur (Biome) d'une case.
|
||||
- **Changement de Température** : Payer pour installer un régulateur thermique sur une case.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
Voir `case_zoo.md` et `achat_upgrade_generique.md`.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
**Changement de Milieu** :
|
||||
| Niveau | Coût | Précision | Temps |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 1 | 500 | Changement vers biome adjacent | 0s |
|
||||
| 7 | 5000 | Changement vers n'importe quel biome | 0s |
|
||||
|
||||
**Régulateur Thermique** :
|
||||
| Niveau | Coût | Plage Réglage | Temps |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 1 | 200 | +/- 5°C | 0s |
|
||||
| 7 | 2000 | +/- 50°C | 0s |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Modification Terrain (Action)
|
||||
**Description UX** : Le joueur sélectionne une case et choisit "Modifier Biome" ou "Température".
|
||||
**Description UI** : Palette de couleurs (Biomes) ou Slider (Température).
|
||||
**Mode Peinture** : Permet de glisser le doigt pour appliquer le biome/température à plusieurs cases adjacentes rapidement.
|
||||
**Emplacement** : Menu Contextuel Case.
|
||||
**Intégration** : Outil pinceau ou slider.
|
||||
**Navigation** : Clic Case -> Outil -> Appliquer.
|
||||
**Événements** : `TERRAFORM_CASE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `digging.mp3` (Biome), `hissing_gas.mp3` (Température).
|
||||
- **Graphiques** : Icône Pelle, Thermomètre.
|
||||
- **Images** : Textures sol (Herbe, Sable, Neige).
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Transition de couleur (Fade) sur la case.
|
||||
- **Couleurs** : Vert, Jaune, Blanc.
|
||||
- **Textes** : "Coût : X".
|
||||
- **Formes** : N/A
|
||||
44
docs/specs/achat_upgrade_case_zoo.md
Normal file
44
docs/specs/achat_upgrade_case_zoo.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Spécifications : Achat et Upgrade des Cases du Zoo (Agrandissement)
|
||||
|
||||
## Agrandissement du Zoo
|
||||
- **Action** : Acheter une nouvelle parcelle de terrain adjacente à la grille existante.
|
||||
- **Coût** : Très élevé, progressif selon la taille actuelle du zoo.
|
||||
- **Contenu** : La nouvelle case arrive avec un biome par défaut (selon sa position géographique Prairie/Océan/Montagne) et vide.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Action sur l'objet `Zoo` (dimensions).
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades (Agrandissement)
|
||||
| Extension | Coût (Pièces) | Gain |
|
||||
| :--- | :--- | :--- |
|
||||
| +1 Colonne | `1000 * (LargeurActuelle^2)` | +Hauteur cases |
|
||||
| +1 Ligne | `1000 * (HauteurActuelle^2)` | +Largeur cases |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Achat Parcelle (Action)
|
||||
**Description UX** : Le joueur clique sur une zone "Hors Limites" adjacente pour l'acheter.
|
||||
**Description UI** : Zone grisée ou avec panneau "À Vendre". Au survol, prix affiché.
|
||||
**Emplacement** : Bords de la Carte Zoo.
|
||||
**Intégration** : Grille étendue.
|
||||
**Navigation** : Clic Zone Grisée -> Confirmer Achat.
|
||||
**Événements** : `EXPAND_ZOO`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `land_buy.mp3`.
|
||||
- **Graphiques** : Panneau "For Sale".
|
||||
- **Images** : Texture herbe (cachée par brouillard).
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Brouillard se dissipe, herbe apparaît.
|
||||
- **Couleurs** : Gris (Inaccessible) -> Vert (Accessible).
|
||||
- **Textes** : "Acheter Terrain (X Pièces)".
|
||||
- **Formes** : Carré.
|
||||
36
docs/specs/achat_upgrade_centre_recherche.md
Normal file
36
docs/specs/achat_upgrade_centre_recherche.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# Spécifications : Achat et Upgrade des Centres de Recherche
|
||||
|
||||
## Upgrade (7 Niveaux)
|
||||
- **Production** : Augmente le nombre d'Unités de Recherche générées par heure.
|
||||
- **Portée** : Augmente le rayon de visibilité sur les offres des autres zoos (voir les détails des animaux lointains).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
Voir `centre_recherche.md` pour le modèle de données complet.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `centre_recherche.md` pour le tableau détaillé des coûts et effets par niveau.
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Arbre Technologique (Consultation)
|
||||
**Description UX** : Visualiser les paliers de recherche.
|
||||
**Description UI** : Arbre vertical ou liste de niveaux avec cadenas (verrouillé/déverrouillé).
|
||||
**Emplacement** : Modal Recherche.
|
||||
**Intégration** : Onglet "Améliorations".
|
||||
**Navigation** : Clic Recherche -> Onglet Upgrade.
|
||||
**Événements** : `VIEW_TECH_TREE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Lignes de connexion.
|
||||
- **Images** : Icônes Radar, Fiole.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Bleu (Science).
|
||||
- **Textes** : "Niveau Suivant : Portée +10km".
|
||||
- **Formes** : N/A
|
||||
127
docs/specs/achat_upgrade_generique.md
Normal file
127
docs/specs/achat_upgrade_generique.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# Spécifications : Achat et Upgrade (Générique)
|
||||
|
||||
## Mécanique
|
||||
- **Coût** : Payé en Pièces (ou Unités de Recherche pour la Carte du Monde).
|
||||
- **Progression** : 7 Niveaux pour la plupart des éléments.
|
||||
- **Formule de Coût** : `Coût_Niveau_N = Coût_Base * Multiplicateur^(N-1)`.
|
||||
|
||||
## Validation
|
||||
- L'achat est instantané si les fonds sont disponibles.
|
||||
- L'effet est immédiat (pas de temps de construction, sauf si spécifié autrement).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
N/A
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Interface d'Achat (Consultation)
|
||||
**Description UX** : Le joueur ouvre le menu de construction ou d'upgrade.
|
||||
**Description UI** : Grille d'éléments achetables. Prix affiché clairement. Grisé si trop cher.
|
||||
**Emplacement** : HUD Bas.
|
||||
**Intégration** : Menu déroulant ou fixe.
|
||||
**Navigation** : Clic Catégorie -> Liste Objets.
|
||||
**Événements** : `OPEN_SHOP_MENU`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_hover.mp3`.
|
||||
- **Graphiques** : Icônes Bâtiments.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Fond sombre, Texte clair.
|
||||
- **Textes** : Prix, Nom.
|
||||
- **Formes** : Cartes carrées.
|
||||
|
||||
### Confirmation Achat (Action)
|
||||
**Description UX** : Le joueur clique pour acheter.
|
||||
**Description UI** : Feedback immédiat (son + animation pièces déduites).
|
||||
**Emplacement** : HUD.
|
||||
**Intégration** : Immédiat.
|
||||
**Navigation** : Clic Achat.
|
||||
**Événements** : `BUY_ITEM`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `buy_success.mp3`.
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Compteur pièces descend.
|
||||
- **Couleurs** : Rouge (déduction).
|
||||
- **Textes** : "-500".
|
||||
- **Formes** : N/A
|
||||
40
docs/specs/achat_upgrade_nurserie.md
Normal file
40
docs/specs/achat_upgrade_nurserie.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Spécifications : Achat et Upgrade des Nurseries
|
||||
|
||||
## Construction
|
||||
- Nécessaire pour faire éclore plus d'œufs simultanément.
|
||||
|
||||
## Upgrade (7 Niveaux)
|
||||
- **Incubation** : Réduit le temps d'éclosion.
|
||||
- **Soins** : Augmente les chances de survie des bébés (réduit l'impact des écarts de température).
|
||||
- **Génétique** : (Niveaux élevés) Augmente légèrement la probabilité d'obtenir une rareté supérieure.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
Voir `nurserie.md` pour le modèle de données complet.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `nurserie.md` pour le tableau détaillé des coûts et effets par niveau.
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Extension (Action)
|
||||
**Description UX** : Ajouter des slots d'œufs.
|
||||
**Description UI** : La grille de slots s'agrandit (nouvelles cases déverrouillées).
|
||||
**Emplacement** : Modal Nurserie.
|
||||
**Intégration** : UI Grid.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `UNLOCK_SLOT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `unlock.mp3`.
|
||||
- **Graphiques** : Cadenas qui s'ouvre.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Slot qui s'illumine.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "Slot débloqué".
|
||||
- **Formes** : N/A
|
||||
55
docs/specs/agrandissement_carte.md
Normal file
55
docs/specs/agrandissement_carte.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Spécifications : Agrandissement de la Carte du Monde
|
||||
|
||||
## Concept
|
||||
La carte du monde est vaste, mais le joueur ne voit initialement qu'une petite zone autour de son zoo.
|
||||
|
||||
## Mécanique
|
||||
- **Coût** : Ne se paie pas en pièces, mais en **Unités de Recherche** produites par les Centres de Recherche.
|
||||
- **Palier** : Chaque niveau d'agrandissement coûte plus cher.
|
||||
- **Effet** : Dézoome la carte / Débloque le brouillard de guerre, révélant de nouveaux zoos, villes et laboratoires plus lointains.
|
||||
- **Intérêt** : Accès à plus de marchés (achat/vente), plus de villes (visiteurs potentiels).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Propriété `view_radius` sur `Zoo` ou `Player`.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Rayon Vue | 100 km |
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Points Recherche) | Rayon Vue |
|
||||
| :--- | :--- | :--- |
|
||||
| 1 | 0 | 100 km |
|
||||
| 2 | 100 | 200 km |
|
||||
| 3 | 250 | 350 km |
|
||||
| 4 | 500 | 550 km |
|
||||
| 5 | 1000 | 800 km |
|
||||
| 6 | 2500 | 1200 km |
|
||||
| 7 | 5000 | 2000 km |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Découverte (Passif/Action)
|
||||
**Description UX** : En payant des points de recherche, le brouillard de guerre recule sur la carte du monde.
|
||||
**Description UI** : Animation de nuages qui s'écartent. De nouvelles icônes (Villes, Zoos) apparaissent.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Vue globale.
|
||||
**Navigation** : Bouton "Explorer" (HUD) -> Animation.
|
||||
**Événements** : `EXPLORE_WORLD`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Jingle découverte (style Zelda/Civ).
|
||||
- **Sons** : `wind_whoosh.mp3`.
|
||||
- **Graphiques** : Nuages (Brouillard de guerre).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Fade out des nuages. Scale up de la vue (Dezoom).
|
||||
- **Couleurs** : Blanc/Gris (Nuages).
|
||||
- **Textes** : "Nouvelle zone découverte !".
|
||||
- **Formes** : Cercle (Rayon de vue).
|
||||
262
docs/specs/animal_generique.md
Normal file
262
docs/specs/animal_generique.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# Spécifications : Animal (Générique)
|
||||
|
||||
## Définition
|
||||
Entité biologique principale du jeu.
|
||||
|
||||
## Propriétés
|
||||
- **Type/Espèce** : Défini par le loot (75 animaux possibles).
|
||||
- **Génétique** :
|
||||
- **Couleur** : 15 variations.
|
||||
- **Rareté** : 5 niveaux (pondération Fibonacci).
|
||||
- **État** : Faim, Température, Santé, Âge.
|
||||
- **Cycle de vie** : Œuf -> Bébé -> Adulte -> Mort.
|
||||
|
||||
## Besoins
|
||||
- **Nourriture** : Consommation périodique.
|
||||
- **Environnement** : Adéquation Biome/Température.
|
||||
- **Social** : Besoin de congénères (reproduction) ou de solitude (selon espèce).
|
||||
|
||||
## Mort
|
||||
Causes possibles : Faim, Froid/Chaud, Solitude, Maladie, Vieillesse (si implémenté), Attaque (si implémenté).
|
||||
Conséquence : Perte sèche, pénalité d'attractivité.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid_v4",
|
||||
"type": "string (ex: 'rabbit')",
|
||||
"rarity": "integer (1-5)",
|
||||
"color_id": "integer (0-14)",
|
||||
"name": "string",
|
||||
"birth_date": "timestamp",
|
||||
"state": {
|
||||
"health": "float (0-100)",
|
||||
"hunger": "float (0-100)",
|
||||
"temperature_comfort": "float (-1.0 to 1.0)",
|
||||
"stress": "float (0-100)"
|
||||
},
|
||||
"genetics": {
|
||||
"parent_a_id": "uuid_v4 | null",
|
||||
"parent_b_id": "uuid_v4 | null",
|
||||
"mutation_factor": "float"
|
||||
},
|
||||
"position": { "x": "int", "y": "int" }
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Santé | 100.0 |
|
||||
| Faim | 0.0 (Rassasié) |
|
||||
| Stress | 0.0 |
|
||||
| Âge | 0 (Bébé) |
|
||||
|
||||
### Scores Initiaux
|
||||
| Score | Valeur |
|
||||
| :--- | :--- |
|
||||
| Valeur Vente (Base) | 10 * Fibonacci(Rareté) |
|
||||
| Attractivité (Base) | 5 * Rareté |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
| Type | Condition |
|
||||
| :--- | :--- |
|
||||
| Œuf | Achat Carte Monde / Loot Labo |
|
||||
| Bébé | Éclosion Œuf / Naissance (Reproduction) |
|
||||
| Adulte | Fin croissance Bébé / Achat Carte Monde |
|
||||
|
||||
### Conditions de Disparition
|
||||
| Cause | Seuil |
|
||||
| :--- | :--- |
|
||||
| Mort (Faim) | Faim >= 100 pendant 24h (in-game) |
|
||||
| Mort (Santé) | Santé <= 0 |
|
||||
| Vente | Transaction validée |
|
||||
| Libération | Action joueur |
|
||||
|
||||
### Hérédité
|
||||
| Paramètre | Formule / Logique |
|
||||
| :--- | :--- |
|
||||
| Rareté | `Moyenne(Parents) + Random(-1, +1)` (Pondéré par mutation) |
|
||||
| Couleur | `Parent_A` (50%) ou `Parent_B` (50%) + Faible chance mutation |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
| Delta T° (Idéal - Réel) | Effet sur Santé / Heure | Effet sur Stress / Heure |
|
||||
| :--- | :--- | :--- |
|
||||
| +/- 0 (Idéal) | 0 | -5 |
|
||||
| +/- 1 (Supportable) | -1 | +2 |
|
||||
| +/- 2 (Inconfort) | -5 | +10 |
|
||||
| +/- 3 (Danger) | -20 | +25 |
|
||||
| > +/- 3 (Mortel) | -50 | +50 |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
| Compatibilité | Effet sur Santé / Heure | Effet sur Stress / Heure |
|
||||
| :--- | :--- | :--- |
|
||||
| Parfaite (Même couleur) | +1 (Régénération) | -5 |
|
||||
| Adjacente (Cercle chromatique) | 0 | 0 |
|
||||
| Opposée | -5 | +10 |
|
||||
|
||||
### Impact Saisons
|
||||
| Saison | Modificateur Faim | Modificateur Santé |
|
||||
| :--- | :--- | :--- |
|
||||
| Printemps | Normal | Bonus Régénération |
|
||||
| Été | +10% (Soif/Faim) | Malus si T° > Seuil |
|
||||
| Automne | Normal | Normal |
|
||||
| Hiver | +20% (Besoin énergie) | Malus si T° < Seuil |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
| Cycle | Modificateur Faim | Modificateur Stress |
|
||||
| :--- | :--- | :--- |
|
||||
| Jour | Normal | Normal |
|
||||
| Nuit | -50% (Sommeil) | Récupération rapide (si calme) |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
| Condition | Bonus/Malus Score Repro |
|
||||
| :--- | :--- |
|
||||
| Santé > 80% | +10 |
|
||||
| Faim < 20% | +10 |
|
||||
| Stress < 10% | +20 |
|
||||
| Partenaire compatible < 2 cases | Déclencheur |
|
||||
|
||||
### Impact Mort
|
||||
| Événement | Effet |
|
||||
| :--- | :--- |
|
||||
| Mort d'un congénère (Rayon 5) | Stress +20 (Immédiat) |
|
||||
| Mort isolée | N/A |
|
||||
|
||||
### Impact Nourriture
|
||||
| État Faim | Effet Santé / Heure |
|
||||
| :--- | :--- |
|
||||
| 0-20% | +2 |
|
||||
| 20-50% | 0 |
|
||||
| 50-80% | -2 |
|
||||
| 80-100% | -10 |
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
| Rareté | Attractivité (Rayon d'action) |
|
||||
| :--- | :--- |
|
||||
| 1 (Commun) | 2 cases |
|
||||
| 2 (Peu commun) | 3 cases |
|
||||
| 3 (Rare) | 5 cases |
|
||||
| 4 (Épique) | 8 cases |
|
||||
| 5 (Légendaire) | 12 cases (Tout le zoo) |
|
||||
|
||||
### Impact Valeur
|
||||
| Facteur | Multiplicateur Valeur |
|
||||
| :--- | :--- |
|
||||
| Santé 100% | x1.2 |
|
||||
| Santé < 50% | x0.5 |
|
||||
| Âge (Adulte jeune) | x1.5 |
|
||||
| Âge (Vieux) | x0.8 |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A (Concerne les bâtiments)
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Maladie** : Si Santé < 20% et hygiène faible.
|
||||
* **Naissance** : Si conditions reproduction réunies.
|
||||
* **Mort** : Si Santé <= 0.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A (L'animal n'a pas d'upgrade, il a de l'expérience/âge)
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateAnimal(animal, context):
|
||||
deltaTemp = abs(animal.idealTemp - context.tileTemp)
|
||||
if deltaTemp > 0:
|
||||
animal.health -= tableImpactTemp[deltaTemp]
|
||||
animal.stress += tableImpactTemp[deltaTemp] * 0.5
|
||||
|
||||
if context.tileBiome != animal.idealBiome:
|
||||
animal.stress += 5
|
||||
|
||||
if animal.hunger > 0:
|
||||
animal.hunger += baseHungerRate * context.seasonMod
|
||||
|
||||
if animal.hunger >= 100:
|
||||
animal.health -= 10
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `ANIMAL_HUNGRY` | Warning | "Un animal a faim !" |
|
||||
| `ANIMAL_SICK` | Alerte | "Un animal est malade." |
|
||||
| `ANIMAL_DEAD` | Critique | "Un animal est mort." |
|
||||
| `ANIMAL_BORN` | Info | "Un bébé est né !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Vie Quotidienne (Passif)
|
||||
**Description UX** : L'animal vit sa vie sur la grille. Il bouge, mange, dort.
|
||||
**Description UI** : Sprite animé. Si problème (faim/froid), feedback visuel immédiat (changement couleur/tremblement).
|
||||
**Emplacement** : Case Zoo.
|
||||
**Intégration** : Grille principale.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `ANIMAL_IDLE`, `ANIMAL_MOVE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Ambiance nature (oiseaux, vent).
|
||||
- **Sons** : Cris d'animaux aléatoires (faible volume).
|
||||
- **Graphiques** : Sprites Pixel Art (4 directions).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Idle, Walk, Eat, Sleep.
|
||||
- **Couleurs** : Selon espèce + Teinte bleue (Froid) / Rouge (Chaud).
|
||||
- **Textes** : Bulle "Zzz" (Sommeil), "!" (Alerte).
|
||||
- **Formes** : N/A
|
||||
|
||||
### Consultation (Consultation)
|
||||
**Description UX** : Le joueur clique sur l'animal pour voir ses détails (Santé, Faim, Génétique).
|
||||
**Description UI** : **Bottom Sheet** (Mobile) ou Panneau Latéral (Desktop) pour ne pas masquer le jeu. Jauges colorées. Arbre généalogique simplifié.
|
||||
**Emplacement** : Case Zoo.
|
||||
**Intégration** : Focus caméra sur l'animal.
|
||||
**Navigation** : Clic Animal -> Panneau.
|
||||
**Événements** : `SELECT_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Cri spécifique de l'animal sélectionné.
|
||||
- **Graphiques** : Portrait HD de l'animal.
|
||||
- **Images** : Icônes Santé (Cœur), Faim (Cuisse), Température (Thermomètre).
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Jauges qui se remplissent.
|
||||
- **Couleurs** : Vert (>70%), Orange (30-70%), Rouge (<30%).
|
||||
- **Textes** : Nom, Espèce, Âge.
|
||||
- **Formes** : Panneau arrondi.
|
||||
|
||||
### Interaction (Action)
|
||||
**Description UX** : Le joueur peut nourrir, soigner ou déplacer l'animal.
|
||||
**Description UI** : Boutons d'action dans le panneau de consultation.
|
||||
**Emplacement** : Panneau Consultation.
|
||||
**Intégration** : Actions contextuelles.
|
||||
**Navigation** : Clic Action -> Résultat immédiat.
|
||||
**Événements** : `FEED_ANIMAL`, `HEAL_ANIMAL`, `MOVE_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `eat.mp3`, `heal.mp3`.
|
||||
- **Graphiques** : Particules (Cœurs, Étoiles).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Animal saute de joie.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "+10 PV", "-20 Faim".
|
||||
- **Formes** : N/A
|
||||
126
docs/specs/attractivite_interne_zoo.md
Normal file
126
docs/specs/attractivite_interne_zoo.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# Spécifications : Attractivité dans le Zoo sur les Visiteurs
|
||||
|
||||
## Définition
|
||||
Comportement des visiteurs une fois qu'ils sont entrés dans l'enceinte du zoo.
|
||||
|
||||
## Mécanique de Déplacement
|
||||
Les visiteurs ne se déplacent pas au hasard. Ils ont des "cibles" d'intérêt.
|
||||
- **Cibles Prioritaires** : Animaux Rares > Animaux Communs > Boutiques.
|
||||
- **Algorithme** : À chaque intersection ou fin d'action, le visiteur évalue l'attrait des cases environnantes.
|
||||
|
||||
## Facteurs de Rétention
|
||||
- **Diversité** : Voir des animaux différents prolonge la visite.
|
||||
- **Confort** : La présence de bancs, poubelles et boutiques augmente le temps de séjour.
|
||||
- **Départ** : Si l'attrait local tombe sous un seuil (ennui) ou si la journée finit, le visiteur se dirige vers la sortie (Billeterie).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Propriétés de `Visiteur`.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
**Canicule/Grand Froid** : Réduit le temps de séjour (-30%).
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
Voir `visiteur.md` (Départ immédiat).
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
**Poids des Cibles** :
|
||||
| Type Cible | Poids |
|
||||
| :--- | :--- |
|
||||
| Animal Rareté 1 | 10 |
|
||||
| Animal Rareté 5 | 100 |
|
||||
| Boutique | 50 |
|
||||
| Banc (si fatigué) | 200 |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
Algorithme de choix de cible pondéré.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function chooseNextTarget(visitor, zoo):
|
||||
candidates = getAllPOIs(zoo)
|
||||
scoredCandidates = candidates.map(c => {
|
||||
score = c.attractiveness / distance(visitor, c)
|
||||
return { target: c, score: score }
|
||||
})
|
||||
return weightedRandomSelect(scoredCandidates)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Foule (Passif)
|
||||
**Description UX** : Les visiteurs s'agglutinent devant les animaux les plus intéressants.
|
||||
**Description UI** : Densité de sprites visiteurs plus élevée autour des cases "Stars".
|
||||
**Emplacement** : Grille Zoo.
|
||||
**Intégration** : Comportement IA.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `CROWD_GATHER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Rumeur de foule (volume variable selon densité).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Applaudissements, Photos.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
129
docs/specs/attractivite_zoo_sur_ville.md
Normal file
129
docs/specs/attractivite_zoo_sur_ville.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# Spécifications : Attractivité des Zoos sur les Visiteurs des Villes
|
||||
|
||||
## Définition
|
||||
Capacité d'un zoo à faire déplacer des visiteurs depuis une ville située sur la Carte du Monde.
|
||||
|
||||
## Formule d'Attraction
|
||||
L'attraction est calculée pour chaque couple (Ville, Zoo).
|
||||
`Attraction = (Score_Reputation_Zoo / Distance^2) * Facteur_Ville`
|
||||
|
||||
## Facteurs d'Influence
|
||||
1. **Score de Réputation** : Plus le zoo est prestigieux, plus il attire de loin.
|
||||
2. **Distance** : La proximité géographique sur la carte du monde est déterminante.
|
||||
3. **Concurrence** : Les visiteurs se répartissent entre les zoos attractifs.
|
||||
|
||||
## Impact
|
||||
- Détermine le flux entrant quotidien de visiteurs (le nombre de personnes qui passent la porte de la Billeterie).
|
||||
- Si l'attraction est nulle, aucun visiteur ne vient.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Calculé à la volée ou mis en cache.
|
||||
```json
|
||||
{
|
||||
"zoo_id": "uuid",
|
||||
"city_id": "uuid",
|
||||
"attraction_score": "float"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
**Hiver** : Réduit la volonté de voyager (-20% rayon d'attraction).
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Voir formule.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function calculateDailyVisitors(zoo, city):
|
||||
dist = distance(zoo.pos, city.pos)
|
||||
if dist > zoo.maxAttractionRange: return 0
|
||||
|
||||
baseFlow = city.population * (zoo.reputation / (dist * dist))
|
||||
return baseFlow * seasonMod
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Visualisation Flux (Consultation)
|
||||
**Description UX** : Le joueur regarde la carte du monde pour voir d'où viennent ses visiteurs.
|
||||
**Description UI** : Lignes pointillées mouvantes reliant les villes au zoo. Épaisseur = Volume flux. **Particules** : Petits points ou voitures circulant sur les lignes pour donner une sensation de vie.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Overlay.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `VIEW_FLOW`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Lignes de flux.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Pointillés qui avancent (effet fourmis).
|
||||
- **Couleurs** : Blanc ou Vert fluo.
|
||||
- **Textes** : "150 visiteurs/jour".
|
||||
- **Formes** : Courbes de Bézier.
|
||||
196
docs/specs/bebe_animal.md
Normal file
196
docs/specs/bebe_animal.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# Spécifications : Bébé Animal
|
||||
|
||||
## Définition
|
||||
Stade de développement entre l'éclosion de l'œuf et l'âge adulte.
|
||||
|
||||
## Spécificités
|
||||
- **Lieu** : Doit grandir en Nurserie (recommandé) ou sur une case adaptée.
|
||||
- **Fragilité** : Plus sensible aux écarts de température/faim que les adultes.
|
||||
- **Vente** : Peut être vendu comme "Bébé" (souvent plus cher car potentiel reproducteur intact).
|
||||
- **Évolution** : Devient "Bébé mature" en fin de nurserie, prêt à être placé sur la grille comme adulte.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Structure identique à `Animal` (voir `animal_generique.md`), avec un flag ou état spécifique :
|
||||
```json
|
||||
{
|
||||
"is_baby": true,
|
||||
"growth_progress": "float (0-100)",
|
||||
"nurserie_id": "uuid_v4 | null"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Santé | 100.0 |
|
||||
| Faim | 0.0 |
|
||||
| Croissance | 0.0 |
|
||||
|
||||
### Scores Initiaux
|
||||
| Score | Valeur |
|
||||
| :--- | :--- |
|
||||
| Valeur Vente | 1.5 * Valeur Adulte (Potentiel) |
|
||||
| Attractivité | 2 * Attractivité Adulte (Effet "Mignon") |
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
| Type | Condition |
|
||||
| :--- | :--- |
|
||||
| Naissance | Reproduction réussie |
|
||||
| Éclosion | Fin timer œuf en Nurserie |
|
||||
|
||||
### Conditions de Disparition
|
||||
| Cause | Seuil |
|
||||
| :--- | :--- |
|
||||
| Croissance terminée | Croissance >= 100 (Devient Adulte) |
|
||||
| Mort | Santé <= 0 (Plus fragile) |
|
||||
|
||||
### Hérédité
|
||||
Voir `animal_generique.md`.
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
**Facteur de fragilité : x2** par rapport à l'adulte.
|
||||
| Delta T° | Effet sur Santé / Heure |
|
||||
| :--- | :--- |
|
||||
| +/- 1 | -2 |
|
||||
| +/- 2 | -10 |
|
||||
| > +/- 2 | -40 (Mort rapide) |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
| Compatibilité | Effet |
|
||||
| :--- | :--- |
|
||||
| Mauvais Biome | Stress x2 par rapport à l'adulte |
|
||||
|
||||
### Impact Saisons
|
||||
Voir `animal_generique.md`.
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
Voir `animal_generique.md`.
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A (Un bébé ne se reproduit pas).
|
||||
|
||||
### Impact Mort
|
||||
| Événement | Effet Satisfaction |
|
||||
| :--- | :--- |
|
||||
| Mort d'un bébé | Malus Réputation x2 (Tristesse visiteurs) |
|
||||
|
||||
### Impact Nourriture
|
||||
**Métabolisme rapide :** Faim augmente 1.5x plus vite que l'adulte.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
| Rareté | Attractivité |
|
||||
| :--- | :--- |
|
||||
| Toutes | Bonus "Cuteness" (+50% rayon attraction) |
|
||||
|
||||
### Impact Valeur
|
||||
| Facteur | Effet |
|
||||
| :--- | :--- |
|
||||
| Croissance 0-50% | Valeur max (Potentiel) |
|
||||
| Croissance 50-99% | Valeur décroissante vers prix adulte |
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Croissance** : Passage à l'âge adulte (Notification).
|
||||
* **Besoin Soin** : Alerte plus fréquente.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateBaby(baby, context):
|
||||
# Fragilité accrue
|
||||
damageMultiplier = 2.0
|
||||
growthRate = baseGrowthRate * nurserieLevelBonus
|
||||
|
||||
baby.growth_progress += growthRate
|
||||
|
||||
if baby.growth_progress >= 100:
|
||||
transformToAdult(baby)
|
||||
|
||||
# Reste de la logique héritée de Animal avec damageMultiplier
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `BABY_GROWN` | Info | "Un bébé est devenu adulte !" |
|
||||
| `BABY_CRITICAL` | Critique | "Un bébé est en danger critique !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Croissance en Nurserie (Passif)
|
||||
**Description UX** : Le bébé est visible dans son slot de nurserie. Il grandit visuellement (petite jauge).
|
||||
**Description UI** : Sprite "Bébé" (tête disproportionnée, grands yeux). Jauge de croissance.
|
||||
**Emplacement** : Modal Nurserie.
|
||||
**Intégration** : Slot.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `BABY_GROWING`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Petits bruits aigus.
|
||||
- **Graphiques** : Sprite Bébé.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Respiration (Scale up/down léger).
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "Bébé [Espèce]".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Sortie Prématurée (Action)
|
||||
**Description UX** : Le joueur décide de placer le bébé dans le zoo avant l'âge adulte (risqué).
|
||||
**Description UI** : Warning "Attention, ce bébé est fragile !".
|
||||
**Emplacement** : Nurserie -> Zoo.
|
||||
**Intégration** : Confirmation modale.
|
||||
**Navigation** : Drag -> Confirm -> Drop.
|
||||
**Événements** : `PLACE_BABY`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `warning_beep.mp3`.
|
||||
- **Graphiques** : Icône Danger.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Rouge.
|
||||
- **Textes** : "Risque de mort élevé !".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Passage Adulte (Événement)
|
||||
**Description UX** : Le bébé atteint 100% de croissance. Il se transforme en adulte.
|
||||
**Description UI** : Flash lumineux. Le sprite change. Notification "Adulte !".
|
||||
**Emplacement** : Nurserie ou Zoo.
|
||||
**Intégration** : Immédiat.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `BECOME_ADULT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Jingle évolution.
|
||||
- **Sons** : `level_up.mp3`.
|
||||
- **Graphiques** : Particules brillantes.
|
||||
- **Images** : Sprite Adulte.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Morphing ou Fade cross.
|
||||
- **Couleurs** : Blanc/Or.
|
||||
- **Textes** : "Adulte".
|
||||
- **Formes** : N/A
|
||||
191
docs/specs/billeterie.md
Normal file
191
docs/specs/billeterie.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# Spécifications : Billeterie
|
||||
|
||||
## Définition
|
||||
Bâtiment d'entrée du zoo. Point d'apparition et de départ des visiteurs.
|
||||
|
||||
## Fonctionnalités
|
||||
- **Entrée/Sortie** : Génère le flux de visiteurs.
|
||||
- **Vente de tickets** : Génère des revenus par visiteur entrant.
|
||||
- **Capacité** : Limite le nombre de visiteurs simultanés dans le zoo.
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
- **Effet** : Augmente le prix du ticket et la capacité maximale de visiteurs simultanés.
|
||||
- **Ratio** : 1 unité couvre 20 visiteurs simultanés max.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "ticket_booth",
|
||||
"level": "integer (1-7)",
|
||||
"position": { "x": "int", "y": "int" },
|
||||
"stats": {
|
||||
"total_entries": "integer",
|
||||
"daily_revenue": "integer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Prix Ticket | 10 pièces |
|
||||
| Capacité Max | 20 visiteurs |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Présent au démarrage (Unique).
|
||||
|
||||
### Conditions de Disparition
|
||||
Indestructible.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
| Saison | Modificateur Prix Ticket |
|
||||
| :--- | :--- |
|
||||
| Été | +20% (Haute saison) |
|
||||
| Hiver | -10% (Basse saison) |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
**Ouverture** : 08h00 - 20h00. Fermé la nuit (sauf événements).
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Point d'entrée unique. L'attractivité globale du zoo détermine le flux qui se présente à la billeterie.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Flux Entrée** : 1 visiteur / seconde max.
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
Revenu principal (Ticket).
|
||||
|
||||
### Trajet Visiteurs
|
||||
Point de départ (Spawn) et d'arrivée (Despawn).
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Entrée** : Gain pièces.
|
||||
* **Refoulement** : Si Capacité Max atteinte.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Prix Ticket | Capacité Max | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 0 (Base) | 10 | 20 | 0s |
|
||||
| 2 | 200 | 12 | 40 | 0s |
|
||||
| 3 | 400 | 15 | 70 | 0s |
|
||||
| 4 | 800 | 18 | 110 | 0s |
|
||||
| 5 | 1600 | 22 | 160 | 0s |
|
||||
| 6 | 3200 | 28 | 220 | 0s |
|
||||
| 7 | 6400 | 35 | 300 | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function processEntry(zoo):
|
||||
potentialVisitors = calculateAttractionFlow(zoo)
|
||||
|
||||
if zoo.currentVisitors >= zoo.billeterie.capacity:
|
||||
emitEvent("ZOO_FULL")
|
||||
return
|
||||
|
||||
actualVisitors = min(potentialVisitors, zoo.billeterie.capacity - zoo.currentVisitors)
|
||||
|
||||
for i in 0..actualVisitors:
|
||||
spawnVisitor()
|
||||
player.addCoins(zoo.billeterie.ticketPrice)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `ZOO_FULL` | Alerte | "Le zoo est complet ! Agrandissez la billeterie." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Consultation
|
||||
**Description UX** : Le joueur clique sur la billeterie pour voir ses statistiques et son niveau.
|
||||
**Description UI** : **Bottom Sheet** ou Panneau Latéral affichant le niveau actuel, la capacité, le prix du ticket et les revenus du jour.
|
||||
**Emplacement** : Case Billeterie sur la grille du zoo.
|
||||
**Intégration** : Bâtiment fixe (ne peut pas être déplacé ou supprimé).
|
||||
**Navigation** : Clic -> Ouverture Panneau -> Fermeture (Croix ou clic extérieur).
|
||||
**Événements** : `CLICK_BILLETERIE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_open.mp3`
|
||||
- **Graphiques** : Pixel Art, style guichet.
|
||||
- **Images** : `billeterie_lvl[1-7].png`
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Légère surbrillance au survol.
|
||||
- **Couleurs** : Palette UI standard.
|
||||
- **Textes** : "Billeterie", "Niveau X", "Revenus : Y".
|
||||
- **Formes** : Carré (case).
|
||||
|
||||
### Amélioration (Upgrade)
|
||||
**Description UX** : Le joueur décide d'améliorer la billeterie pour augmenter la capacité et le prix du ticket.
|
||||
**Description UI** : Bouton "Améliorer" dans le panneau de consultation, avec coût et prévisualisation des gains.
|
||||
**Emplacement** : Panneau de consultation.
|
||||
**Intégration** : Action immédiate si fonds suffisants.
|
||||
**Navigation** : Clic "Améliorer" -> Confirmation (optionnelle) -> Mise à jour UI.
|
||||
**Événements** : `UPGRADE_BILLETERIE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `upgrade_success.mp3` (caisse enregistreuse).
|
||||
- **Graphiques** : Icône flèche vers le haut.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Particules de succès (confettis/étoiles) autour du bâtiment.
|
||||
- **Couleurs** : Bouton Vert (si achetable), Gris (si fonds insuffisants).
|
||||
- **Textes** : "Améliorer (X pièces)".
|
||||
- **Formes** : Bouton rectangulaire arrondi.
|
||||
|
||||
### Flux Visiteurs (Passif)
|
||||
**Description UX** : Le joueur observe les visiteurs entrer dans le zoo.
|
||||
**Description UI** : Petits sprites de visiteurs apparaissant à la porte et se dispersant.
|
||||
**Emplacement** : Devant la billeterie.
|
||||
**Intégration** : Animation continue pendant les heures d'ouverture.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `VISITOR_SPAWN`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `visitor_entry.mp3` (bruit de foule léger, pas à chaque spawn).
|
||||
- **Graphiques** : Sprites visiteurs variés.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Marche (4 directions).
|
||||
- **Couleurs** : Variées (vêtements).
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
162
docs/specs/bot.md
Normal file
162
docs/specs/bot.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# Spécifications : Bot (Profil d'Absence)
|
||||
|
||||
## Définition
|
||||
Intelligence Artificielle qui gère un zoo. Peut être un concurrent permanent ou le remplaçant du joueur en cas d'absence.
|
||||
|
||||
## Profils d'Absence (50 Archétypes)
|
||||
Le joueur choisit un profil pour gérer son zoo quand il est hors ligne.
|
||||
Sélection hiérarchique : **Famille** > **Spécialisation**.
|
||||
|
||||
### Familles
|
||||
1. **Les Conservateurs** : Priorité survie, achat nourriture, pas d'expansion.
|
||||
2. **Les Éleveurs** : Priorité reproduction, optimisation placements.
|
||||
3. **Les Commerçants** : Priorité achat/vente, spéculation.
|
||||
4. **Les Expansionnistes** : Priorité agrandissement terrain/bâtiments.
|
||||
5. **Les Scientifiques** : Priorité recherche et école.
|
||||
|
||||
## Fonctionnement
|
||||
- **Cycle** : Agit à chaque tick serveur ou selon sa fréquence définie.
|
||||
- **Ressources** : Utilise les ressources du zoo (pièces) selon les seuils du profil.
|
||||
- **Indicateurs** : Visible sur la carte du monde (Pièces, Parcelle).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "integer",
|
||||
"family": "enum",
|
||||
"name": "string",
|
||||
"logic": {
|
||||
"buy_food_threshold": "float (0-1)",
|
||||
"sell_animal_threshold": "float (price factor)",
|
||||
"expand_map_priority": "int (0-10)",
|
||||
"research_priority": "int (0-10)"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Activation par joueur (déconnexion) ou Spawn serveur (Bot permanent).
|
||||
|
||||
### Conditions de Disparition
|
||||
Connexion joueur.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Fréquence Action** : 1 action toutes les 5 à 60 minutes (selon profil).
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Action Bot** : Achat/Vente automatisé.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function runBotLogic(bot, zoo):
|
||||
if zoo.foodStock < bot.logic.buy_food_threshold:
|
||||
buyFood(zoo)
|
||||
return
|
||||
|
||||
if bot.family == 'BREEDER':
|
||||
optimizePairs(zoo)
|
||||
|
||||
if bot.family == 'TRADER':
|
||||
checkMarketArbitrage(zoo)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `BOT_ACTIVE` | Info | "Le mode automatique est activé." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Sélection du Profil (Configuration)
|
||||
**Description UX** : Le joueur choisit comment son zoo sera géré en son absence.
|
||||
**Description UI** : Interface à deux niveaux. 1. Choix Famille (5 grosses cartes illustrées). 2. Choix Spécialisation (Liste déroulante ou grille de sous-profils).
|
||||
**Emplacement** : Profil Joueur -> Onglet Absence.
|
||||
**Intégration** : Modal dédiée.
|
||||
**Navigation** : Clic Famille -> Clic Spécialisation -> Valider.
|
||||
**Événements** : `SELECT_BOT_PROFILE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `card_flip.mp3`.
|
||||
- **Graphiques** : Illustrations des familles (ex: Conservateur avec bouclier, Commerçant avec bourse).
|
||||
- **Images** : Portraits Bots.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Flip de carte au choix.
|
||||
- **Couleurs** : Code couleur par famille (Vert=Conservateur, Jaune=Commerçant, etc.).
|
||||
- **Textes** : Titres et Descriptions courtes.
|
||||
- **Formes** : Cartes rectangulaires.
|
||||
|
||||
### Feedback Activité (Passif)
|
||||
**Description UX** : Le joueur revient et voit ce que le bot a fait.
|
||||
**Description UI** : Rapport de connexion ("Pendant votre absence, le bot a : Vendu 2 lapins, Acheté 100 nourriture").
|
||||
**Emplacement** : Écran de connexion (Popup).
|
||||
**Intégration** : Bloquant au démarrage.
|
||||
**Navigation** : Lire -> Fermer.
|
||||
**Événements** : `SHOW_REPORT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `notification.mp3`.
|
||||
- **Graphiques** : Icône Robot.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Gris/Métal.
|
||||
- **Textes** : Liste des actions.
|
||||
- **Formes** : Liste à puces.
|
||||
196
docs/specs/boutique.md
Normal file
196
docs/specs/boutique.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# Spécifications : Boutique
|
||||
|
||||
## Définition
|
||||
Bâtiment commercial générant des revenus passifs grâce aux visiteurs.
|
||||
|
||||
## Fonctionnalités
|
||||
- **Vente** : Vend des produits (souvenirs, nourriture, boissons) aux visiteurs.
|
||||
- **Attraction** : Attire les visiteurs sur sa case.
|
||||
- **Rétention** : Augmente la durée de visite (satisfaction besoins).
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
- **Effet** : Augmente le revenu par visiteur et la capacité d'accueil simultanée.
|
||||
- **Ratio** : 1 unité couvre 5 visiteurs simultanés max.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "shop",
|
||||
"level": "integer (1-7)",
|
||||
"position": { "x": "int", "y": "int" },
|
||||
"stats": {
|
||||
"revenue_total": "integer",
|
||||
"visitors_served": "integer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Revenu / Visiteur | 15 pièces |
|
||||
| Capacité | 5 visiteurs |
|
||||
| Attractivité | 10 |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Construction par le joueur sur case vide.
|
||||
|
||||
### Conditions de Disparition
|
||||
Destruction par le joueur (Remboursement partiel ?).
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
| Saison | Modificateur Ventes |
|
||||
| :--- | :--- |
|
||||
| Été | +20% (Boissons/Glaces) |
|
||||
| Hiver | +10% (Chocolat chaud/Cadeaux) |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
| Heure | Fréquentation |
|
||||
| :--- | :--- |
|
||||
| 12h-14h | Pic (Repas) |
|
||||
| 16h-18h | Pic (Souvenirs avant départ) |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
| Niveau | Rayon Attraction |
|
||||
| :--- | :--- |
|
||||
| 1 | 2 cases |
|
||||
| 7 | 10 cases |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Vitesse Service** : 1 visiteur / 5 secondes (Niv 1) -> 1 visiteur / 1 seconde (Niv 7).
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
Génère du revenu, ne coûte rien (sauf achat/upgrade).
|
||||
|
||||
### Trajet Visiteurs
|
||||
Point d'intérêt majeur pour le pathfinding (Poids 50).
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Vente** : Gain de pièces.
|
||||
* **File d'attente** : Si Capacité atteinte, visiteurs frustrés.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Revenu/Visiteur | Capacité | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 100 | 15 | 5 | 0s |
|
||||
| 2 | 150 | 20 | 8 | 0s |
|
||||
| 3 | 225 | 25 | 12 | 0s |
|
||||
| 4 | 340 | 35 | 18 | 0s |
|
||||
| 5 | 510 | 50 | 25 | 0s |
|
||||
| 6 | 765 | 70 | 35 | 0s |
|
||||
| 7 | 1150 | 100 | 50 | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function processShop(shop, visitors):
|
||||
queue = visitors.filter(v => v.target == shop)
|
||||
served = min(queue.length, shop.capacity)
|
||||
|
||||
for i in 0..served:
|
||||
revenue = shop.baseRevenue * seasonMod
|
||||
player.addCoins(revenue)
|
||||
visitors[i].satisfaction += 5
|
||||
visitors[i].needs.thirst = 0
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `SHOP_FULL` | Warning | "Boutique pleine ! Des clients partent." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Vente (Passif)
|
||||
**Description UX** : Les visiteurs entrent dans la boutique, y restent quelques secondes, puis ressortent. Des pièces volent vers le compteur.
|
||||
**Description UI** : Animation de porte qui s'ouvre/ferme. Popups "+15" au-dessus du toit.
|
||||
**Emplacement** : Case Boutique.
|
||||
**Intégration** : Automatique.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `SALE_MADE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `coin_jingle.mp3` (volume bas, pas trop répétitif).
|
||||
- **Graphiques** : Sprite Boutique (différents skins selon type : Burger, Cadeaux).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Pièce dorée qui monte et disparaît.
|
||||
- **Couleurs** : Or #FFD700.
|
||||
- **Textes** : "+XX".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Consultation Stats (Consultation)
|
||||
**Description UX** : Le joueur clique pour voir combien la boutique a rapporté.
|
||||
**Description UI** : **Bottom Sheet** simple avec "Revenus totaux" et "Clients servis".
|
||||
**Emplacement** : Case Boutique.
|
||||
**Intégration** : Standard.
|
||||
**Navigation** : Clic -> Modal.
|
||||
**Événements** : `OPEN_SHOP`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_open.mp3`
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : Icône Caisse.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : Chiffres clés.
|
||||
- **Formes** : N/A
|
||||
|
||||
### Construction (Action)
|
||||
**Description UX** : Le joueur choisit "Boutique" dans le menu construction et la place sur la grille.
|
||||
**Description UI** : Fantôme du bâtiment vert/rouge selon validité.
|
||||
**Alternative** : Tap to Select -> Tap to Place.
|
||||
**Emplacement** : Menu Construction -> Grille.
|
||||
**Intégration** : Mode construction global.
|
||||
**Navigation** : Clic Menu -> Drag/Click Grille.
|
||||
**Événements** : `BUILD_SHOP`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `construction_hammer.mp3`.
|
||||
- **Graphiques** : Sprite Fantôme semi-transparent.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Petit effet de poussière à la pose.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
219
docs/specs/camion.md
Normal file
219
docs/specs/camion.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# Spécifications : Camion
|
||||
|
||||
## Définition
|
||||
Véhicule de transport pour les achats et les ventes d'animaux/œufs.
|
||||
|
||||
## Fonctionnalités
|
||||
- **Transport** : Effectue les trajets entre le zoo du joueur et les autres sites (zoos, labo) sur la Carte du Monde.
|
||||
- **Vente** : Zone de dépôt sur la carte du zoo pour mettre un animal en vente.
|
||||
- **Achat** : Zone de réception sur la carte du monde pour acheter une offre.
|
||||
|
||||
## Comportement
|
||||
- **Trajet** : Aller-retour physique sur la carte du monde. La durée dépend de la distance et du niveau du camion.
|
||||
- **Capacité** : Transporte un animal/œuf à la fois (par unité de camion).
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
- **Effet** : Augmente la vitesse de déplacement. Réduit la dégradation du score de reproduction due au transport (stress).
|
||||
- **Ratio** : 1 unité couvre 1 camion actif.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"owner_id": "uuid",
|
||||
"level": "integer (1-7)",
|
||||
"status": "enum ('idle', 'moving_to_target', 'moving_home')",
|
||||
"cargo": "animal_uuid | null",
|
||||
"position": { "x": "float", "y": "float" },
|
||||
"target_site_id": "uuid | null"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Vitesse | 50 km/h (simulé) |
|
||||
| Confort | Basique (Stress normal) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Démarrage jeu.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
**Hiver** : Vitesse réduite de 20% (Neige).
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Stress Transport** : Réduit temporairement la fertilité de l'animal transporté.
|
||||
| Niveau Camion | Perte Fertilité / Heure Trajet |
|
||||
| :--- | :--- |
|
||||
| 1 | -10% |
|
||||
| 7 | -1% |
|
||||
|
||||
### Impact Mort
|
||||
Si trajet trop long (> 24h) sans confort, risque de mort (Faim/Stress).
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Vitesse Déplacement** :
|
||||
| Niveau | Vitesse |
|
||||
| :--- | :--- |
|
||||
| 1 | 50 km/h |
|
||||
| 2 | 70 km/h |
|
||||
| 3 | 90 km/h |
|
||||
| 4 | 110 km/h |
|
||||
| 5 | 130 km/h |
|
||||
| 6 | 150 km/h |
|
||||
| 7 | 200 km/h (Avion/Hélico ?) |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Départ** : Camion part.
|
||||
* **Arrivée** : Camion revient avec marchandise.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Vitesse | Confort | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 100 | 50 | Bas | 0s |
|
||||
| 2 | 200 | 70 | Moyen | 0s |
|
||||
| 3 | 400 | 90 | Moyen | 0s |
|
||||
| 4 | 800 | 110 | Bon | 0s |
|
||||
| 5 | 1600 | 130 | Bon | 0s |
|
||||
| 6 | 3200 | 150 | Excellent | 0s |
|
||||
| 7 | 6400 | 200 | Parfait | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateTruck(truck, deltaTime):
|
||||
if truck.status == 'moving':
|
||||
distance = truck.speed * deltaTime
|
||||
moveTowardsTarget(truck, distance)
|
||||
|
||||
if truck.cargo:
|
||||
truck.cargo.stress += baseStress * (1.0 - truck.comfortFactor) * deltaTime
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `TRUCK_ARRIVED` | Info | "Le camion est revenu au zoo." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Envoi en Mission (Action)
|
||||
**Description UX** : Le joueur achète un animal sur la carte du monde. Le camion part automatiquement le chercher.
|
||||
**Description UI** : Le camion quitte sa case au zoo (animation départ) et apparaît sur la carte du monde, se déplaçant vers la cible.
|
||||
**Emplacement** : Zoo -> Carte Monde.
|
||||
**Intégration** : Transition fluide.
|
||||
**Navigation** : Achat -> Vue Carte Monde (auto ou manuelle).
|
||||
**Événements** : `TRUCK_DEPART`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `engine_start.mp3`, `horn.mp3`.
|
||||
- **Graphiques** : Sprite Camion (Vue dessus et côté).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Roues qui tournent, fumée échappement.
|
||||
- **Couleurs** : Jaune/Noir (Chantier) ou Blanc (Livraison).
|
||||
- **Textes** : "En route vers [Destination]".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Suivi Trajet (Passif/Actif)
|
||||
**Description UX** : Le joueur peut suivre le camion sur la carte du monde.
|
||||
**Description UI** : Icône camion qui bouge sur la ligne de trajet. Timer estimé au survol.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Overlay.
|
||||
**Navigation** : Clic Camion -> Info Trajet.
|
||||
**Événements** : `TRACK_TRUCK`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Bruit moteur continu (faible).
|
||||
- **Graphiques** : Ligne pointillée (trajet).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Déplacement linéaire.
|
||||
- **Couleurs** : Ligne Blanche.
|
||||
- **Textes** : "Arrivée dans MM:SS".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Activité d'Attente (Gameplay)
|
||||
**Description UX** : Pendant le trajet (temps mort), le joueur peut cliquer sur le camion pour le "booster" ou nettoyer le pare-brise (mini-jeu simple) pour gagner quelques secondes ou de l'XP.
|
||||
**Description UI** : Zoom sur le camion. Taches apparaissent, clic pour nettoyer.
|
||||
**Emplacement** : Modal Camion (en trajet).
|
||||
**Intégration** : Mini-jeu optionnel.
|
||||
**Navigation** : Clic Camion -> Mini-jeu.
|
||||
**Événements** : `CLEAN_WINDSHIELD`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Radio camion (musique lo-fi).
|
||||
- **Sons** : `wipe.mp3` (essuie-glace). **Design ASMR** : Bruit d'éponge mouillée ou de raclette satisfaisant.
|
||||
- **Graphiques** : Taches de boue/insectes.
|
||||
- **Images** : Vue cockpit simplifiée.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Essuie-glace qui bouge.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "Boost !"
|
||||
- **Formes** : N/A
|
||||
|
||||
### Arrivée (Passif)
|
||||
**Description UX** : Le camion revient au zoo et se gare.
|
||||
**Description UI** : Animation d'arrivée. Notification "Camion rentré".
|
||||
**Notification Push** : "Le camion est de retour !" (si application fermée).
|
||||
**Emplacement** : Case Camion.
|
||||
**Intégration** : Fin cycle.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `TRUCK_ARRIVE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `truck_stop.mp3`.
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Freinage.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
122
docs/specs/carte_generique.md
Normal file
122
docs/specs/carte_generique.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Spécifications : Carte (Générique)
|
||||
|
||||
## Définition
|
||||
Une carte est une grille de cases représentant un espace de jeu ou de navigation.
|
||||
|
||||
## Propriétés
|
||||
- **Dimensions** : Largeur et hauteur définies en nombre de cases.
|
||||
- **Biomes** : Les cases ont une couleur de fond représentant leur biome (milieu).
|
||||
- **Quadrillage** : Les cases sont disposées en grille orthogonale.
|
||||
- **Cohérence** : Les transitions de couleurs (milieux) et de températures doivent être douces entre les cases adjacentes.
|
||||
|
||||
## Types de cartes
|
||||
- Carte du Zoo (Espace de gestion du joueur)
|
||||
- Carte du Monde (Espace de navigation multijoueur)
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "enum ('zoo', 'world')",
|
||||
"width": "integer",
|
||||
"height": "integer",
|
||||
"grid": [
|
||||
[ { "case_ref": "case_id" } ]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A (Dépendant du type)
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Création à l'initialisation du jeu/compte.
|
||||
|
||||
### Conditions de Disparition
|
||||
Suppression du compte.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A (Porté par les cases)
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A (Porté par les cases)
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Navigation (Action)
|
||||
**Description UX** : Le joueur explore la carte.
|
||||
**Description UI** : Drag & Drop (Pan) pour se déplacer. Zoom In/Out (Molette/Pinch).
|
||||
**Emplacement** : Vue Principale.
|
||||
**Intégration** : Plein écran.
|
||||
**Navigation** : Pan/Zoom.
|
||||
**Événements** : `MAP_MOVE`, `MAP_ZOOM`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Ambiance calme (Zoo) / Aventure (Monde).
|
||||
- **Sons** : Vent léger.
|
||||
- **Graphiques** : Grille (Grid lines) subtile.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Inertie du mouvement.
|
||||
- **Couleurs** : Fond neutre hors carte.
|
||||
- **Textes** : Coordonnées (Debug).
|
||||
- **Formes** : Rectangulaire.
|
||||
162
docs/specs/carte_monde.md
Normal file
162
docs/specs/carte_monde.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# Spécifications : Carte du Monde
|
||||
|
||||
## Définition
|
||||
La carte du monde est l'espace multijoueur où sont situés les zoos des joueurs, des bots, les villes et les laboratoires.
|
||||
|
||||
## Structure
|
||||
- **Grille** : Fixe, avec des positions définies pour chaque entité.
|
||||
- **Fond** : Reprend les biomes de la carte du zoo (Prairie/Océan/Montagne) en fond.
|
||||
- **Zoom** : Niveau de zoom dépendant de l'upgrade "Agrandir la carte". Pas de pan manuel.
|
||||
|
||||
## Contenu Initial (Lancement)
|
||||
- 1 Case Agrandissement de la carte (Payable en unités de recherche)
|
||||
- 1 Compteur de bébés à vendre
|
||||
- 1 Compteur d'animaux à vendre
|
||||
- 1 Compteur de laboratoires
|
||||
- 1 Compteur de zoos
|
||||
- 1 Compteur de villes
|
||||
- 1 Case Accueil nouveaux animaux (Haut gauche)
|
||||
- 1 Case Nourriture générale (Haut gauche)
|
||||
- 1 Case Camion (Haut gauche)
|
||||
- 24 Cases de terrain (3 couleurs différentes)
|
||||
|
||||
## Entités Visibles
|
||||
- **Zoos Joueurs** : Nom, icône, indicateurs.
|
||||
- **Zoos Bots** : Identiques aux joueurs.
|
||||
- **Villes** : Sources de visiteurs.
|
||||
- **Laboratoires** : Sources d'œufs/bébés rares.
|
||||
- **Camions** : En transit entre les entités.
|
||||
|
||||
## Mécaniques
|
||||
- **Navigation** : Vue d'ensemble du marché.
|
||||
- **Interactions** : Achat d'œufs/animaux via le camion.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "world_map",
|
||||
"width": "integer (très grand)",
|
||||
"height": "integer",
|
||||
"sites": [ { "id": "uuid", "type": "zoo|city|lab", "pos": { "x": "int", "y": "int" } } ],
|
||||
"trucks": [ { "id": "uuid", "owner_id": "uuid", "pos": { "x": "float", "y": "float" }, "target": "uuid" } ]
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Rayon Visible | 500km (simulé) |
|
||||
| Nb Villes | 10 (dans rayon départ) |
|
||||
| Nb Labos | 2 (dans rayon départ) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Unique (Singleton serveur).
|
||||
|
||||
### Conditions de Disparition
|
||||
Jamais.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
Calcul des distances Ville -> Zoo pour l'attractivité.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Spawn Bot** : Apparition nouveau zoo bot.
|
||||
* **Spawn Truck** : Camion visible.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `agrandissement_carte.md`.
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Vue Globale (Passif)
|
||||
**Description UX** : Le joueur voit les autres acteurs et les flux économiques.
|
||||
**Description UI** : Carte style "Google Maps" simplifiée ou grille hexagonale. Icônes (Maisons, Gratte-ciels, Fioles). **Flux** : Petites particules (voitures/points) voyageant entre les villes et les zoos attractifs.
|
||||
**Emplacement** : Écran Carte Monde.
|
||||
**Intégration** : Plein écran.
|
||||
**Navigation** : Bouton Retour Zoo.
|
||||
**Événements** : `OPEN_WORLD_MAP`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Thème Aventure/Voyage.
|
||||
- **Sons** : Vent, Bruit lointain trafic.
|
||||
- **Graphiques** : Fond carte (Biomes flous).
|
||||
- **Images** : Icônes Sites.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Camions qui bougent.
|
||||
- **Couleurs** : Desaturées (pour faire ressortir les icônes).
|
||||
- **Textes** : Noms des villes/zoos.
|
||||
- **Formes** : Pins/Marqueurs.
|
||||
|
||||
### Brouillard de Guerre (Passif)
|
||||
**Description UX** : Les zones inexplorées sont cachées.
|
||||
**Description UI** : Nuages ou zone sombre en périphérie.
|
||||
**Emplacement** : Bords Carte.
|
||||
**Intégration** : Mask.
|
||||
**Navigation** : N/A
|
||||
**Événements** : N/A
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Texture Nuages.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Nuages qui dérivent lentement.
|
||||
- **Couleurs** : Blanc/Gris.
|
||||
- **Textes** : "Zone Inexplorée".
|
||||
- **Formes** : N/A
|
||||
166
docs/specs/carte_zoo.md
Normal file
166
docs/specs/carte_zoo.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# Spécifications : Carte du Zoo
|
||||
|
||||
## Définition
|
||||
La carte du zoo est l'espace principal de gestion du joueur où il place ses bâtiments et ses animaux.
|
||||
|
||||
## Structure
|
||||
- **Grille** : Composée de cases individuelles.
|
||||
- **Biomes** : Divisée en tiers de largeur :
|
||||
- Gauche : Prairie
|
||||
- Milieu : Océan
|
||||
- Droite : Montagne
|
||||
- **Dégradés** : Couleurs et températures varient doucement au sein des biomes.
|
||||
|
||||
## Contenu Initial (Lancement)
|
||||
- 1 Case Agrandissement du zoo (+1 case, payant)
|
||||
- 1 Case Recherche (Coin haut gauche)
|
||||
- 1 Case Billeterie (Coin haut gauche)
|
||||
- 1 Case Nurserie (Coin haut gauche)
|
||||
- 1 Case Accueil nouveaux animaux (Coin haut gauche)
|
||||
- 1 Case Nourriture générale (Coin haut gauche)
|
||||
- 1 Case Camion (Coin haut gauche)
|
||||
- 24 Cases de terrain (3 couleurs différentes réparties selon les biomes)
|
||||
|
||||
## Mécaniques
|
||||
- **Placement** : Le joueur peut placer des œufs, des animaux et des bâtiments sur les cases vides.
|
||||
- **Déplacement** : Glisser-déposer pour réorganiser.
|
||||
- **Visiteurs** : Les visiteurs se déplacent sur la grille.
|
||||
- **Feedbacks** : L'état du terrain (herbe jaunie, givre) reflète l'adéquation avec les animaux.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"owner_id": "uuid",
|
||||
"width": "integer (init 5)",
|
||||
"height": "integer (init 6)",
|
||||
"cases": [ ... ]
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Taille | 30 cases (5x6 approx) |
|
||||
| Biomes | 3 (Tiers) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Création du compte joueur.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A (Géré par case)
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A (Géré par case)
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
Support du pathfinding (A* sur la grille).
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Agrandissement** : Ajout d'une colonne/ligne ou case adjacente.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `achat_upgrade_case_zoo.md`.
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function initZooMap():
|
||||
width = 6
|
||||
height = 5
|
||||
for x in 0..width:
|
||||
for y in 0..height:
|
||||
biome = getBiomeByColumn(x, width)
|
||||
createCase(x, y, biome)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Interaction Grille (Action)
|
||||
**Description UX** : Le joueur clique sur une case pour voir son contenu ou construire.
|
||||
**Description UI** : Surbrillance de la case au survol. Clic ouvre un **Panneau Latéral (Bottom Sheet)** non bloquant (Info/Construire).
|
||||
**Emplacement** : Grille.
|
||||
**Intégration** : Curseur.
|
||||
**Navigation** : Clic -> Menu.
|
||||
**Événements** : `CLICK_CASE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `click_tile.mp3`.
|
||||
- **Graphiques** : Cadre de sélection blanc/brillant.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Pulsation du cadre.
|
||||
- **Couleurs** : Blanc.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : Carré.
|
||||
|
||||
### Mode Construction (Action)
|
||||
**Description UX** : Le joueur place un bâtiment ou modifie le terrain.
|
||||
**Description UI** : Grille visible. Cases valides en vert, invalides en rouge.
|
||||
**Mode Peinture** : Le joueur peut glisser son doigt (Drag) pour construire/modifier plusieurs cases d'affilée (ex: peindre un biome ou poser une route).
|
||||
**Alternative Accessibilité** : Tap to Select (Bâtiment) -> Tap to Place (Case) pour éviter le Drag & Drop.
|
||||
**Emplacement** : Grille.
|
||||
**Intégration** : Overlay.
|
||||
**Navigation** : Drag -> Drop.
|
||||
**Événements** : `ENTER_BUILD_MODE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `grid_snap.mp3`.
|
||||
- **Graphiques** : Grille semi-transparente.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Snap to grid.
|
||||
- **Couleurs** : Vert/Rouge (Alpha 0.5).
|
||||
- **Textes** : N/A
|
||||
- **Formes** : Carrés.
|
||||
122
docs/specs/case_generique.md
Normal file
122
docs/specs/case_generique.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Spécifications : Case (Générique)
|
||||
|
||||
## Définition
|
||||
Une case est l'unité élémentaire de la grille (Zoo ou Monde).
|
||||
|
||||
## Propriétés
|
||||
- **Coordonnées** : Position (x, y) dans la grille.
|
||||
- **Couleur (Milieu)** : Définit le biome et l'environnement visuel.
|
||||
- **Température** : Liée à la couleur/biome.
|
||||
- **Contenu** : Peut contenir un bâtiment, un animal, un visiteur, ou être vide.
|
||||
- **État** : Peut avoir des indicateurs visuels (herbe jaunie, givre).
|
||||
|
||||
## Règles
|
||||
- Les transitions de propriétés (couleur, température) entre cases adjacentes doivent être douces.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"x": "integer",
|
||||
"y": "integer",
|
||||
"biome_id": "integer",
|
||||
"temperature_offset": "float",
|
||||
"content_ref": "uuid | null",
|
||||
"content_type": "string",
|
||||
"state_flags": ["frozen", "dry", "dirty"]
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération carte.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
`Température_Réelle = Température_Biome + Température_Offset + Saison_Mod`
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Définit la couleur de fond.
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Feedback État (Passif)
|
||||
**Description UX** : La case montre son état physique.
|
||||
**Description UI** : Overlay de texture (Givre, Craquelures, Boue).
|
||||
**Emplacement** : Case.
|
||||
**Intégration** : Layer 1 (Au-dessus du fond, sous le contenu).
|
||||
**Navigation** : N/A
|
||||
**Événements** : `STATE_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Textures alpha (Givre blanc, Craquelures marron).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Apparition progressive (Fade).
|
||||
- **Couleurs** : Blanc, Marron, Gris.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : Carré.
|
||||
112
docs/specs/case_monde.md
Normal file
112
docs/specs/case_monde.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Spécifications : Case de Monde (Générique)
|
||||
|
||||
## Définition
|
||||
Case spécifique à la grille du monde, servant de support aux sites et aux compteurs.
|
||||
|
||||
## Types de Contenu Possibles
|
||||
- **Sites** : Zoo (Joueur/Bot), Ville, Laboratoire.
|
||||
- **Compteurs** : Bébés à vendre, Animaux à vendre, Labos, Zoos, Villes.
|
||||
- **Zones Fonctionnelles** : Agrandissement carte, Camion (zone de dépôt/vente).
|
||||
|
||||
## Propriétés Spécifiques
|
||||
- **Fixité** : Le contenu des cases monde est généralement fixe (sites) ou fonctionnel (zones d'interface).
|
||||
- **Navigation** : Les camions naviguent de case en case entre les sites.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Hérite de `Case (Générique)`.
|
||||
Pas de propriétés supplémentaires spécifiques.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération monde.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Survol (Passif)
|
||||
**Description UX** : Explorer la carte du monde.
|
||||
**Description UI** : Curseur main. Tooltip au survol des sites.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Standard.
|
||||
**Navigation** : Mouse move.
|
||||
**Événements** : `HOVER_WORLD_CASE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
135
docs/specs/case_zoo.md
Normal file
135
docs/specs/case_zoo.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# Spécifications : Case de Zoo (Générique)
|
||||
|
||||
## Définition
|
||||
Case spécifique à la grille du zoo, pouvant accueillir les éléments de gestion.
|
||||
|
||||
## Types de Contenu Possibles
|
||||
- **Bâtiments** : Billeterie, Nurserie, Boutique, Centre de Recherche, École, Accueil Animaux.
|
||||
- **Animaux** : Bébés matures, Animaux adultes.
|
||||
- **Éléments Mobiles** : Visiteurs, Camion (sur sa zone dédiée).
|
||||
- **Vide** : Terrain libre pour construction ou placement.
|
||||
|
||||
## Propriétés Spécifiques
|
||||
- **Occupation** : Une case ne peut contenir qu'un seul élément principal (bâtiment/animal) à la fois.
|
||||
- **Visite** : Enregistre la date de dernier passage d'un visiteur (pour la règle de disparition).
|
||||
- **Qualité** : Indicateur visuel d'adéquation avec l'animal posé dessus (Jaunissement, Givre).
|
||||
|
||||
## Liste des Cases Spéciales (cf. Carte Zoo)
|
||||
- Agrandissement
|
||||
- Recherche
|
||||
- Billeterie
|
||||
- Nurserie
|
||||
- Accueil
|
||||
- Nourriture
|
||||
- Camion
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Hérite de `Case (Générique)`.
|
||||
```json
|
||||
{
|
||||
"last_visit_time": "timestamp",
|
||||
"quality_score": "float (0-100)"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Dernière Visite | Création du zoo |
|
||||
| Qualité | 100 |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération zoo.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir `case_generique.md`.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Voir `case_generique.md`.
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Passage Visiteur** : Met à jour `last_visit_time`.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
Voir `achat_upgrade_case.md`.
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function checkAnimalDisappearance(case):
|
||||
if currentTime - case.last_visit_time > MAX_TIME_WITHOUT_VISIT:
|
||||
removeAnimal(case.content)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Sélection (Action)
|
||||
**Description UX** : Clic sur une case zoo.
|
||||
**Description UI** : Highlight + Menu contextuel adapté au contenu (Animal -> Stats, Bâtiment -> Upgrade, Vide -> Construire).
|
||||
**Emplacement** : Grille.
|
||||
**Intégration** : Standard.
|
||||
**Navigation** : Clic.
|
||||
**Événements** : `SELECT_ZOO_CASE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `select_soft.mp3`.
|
||||
- **Graphiques** : Cadre sélection.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Blanc.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : Carré.
|
||||
190
docs/specs/centre_recherche.md
Normal file
190
docs/specs/centre_recherche.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# Spécifications : Centre de Recherche
|
||||
|
||||
## Définition
|
||||
Bâtiment produisant des points de science/recherche.
|
||||
|
||||
## Fonctionnalités
|
||||
- **Production** : Génère des unités de recherche périodiquement.
|
||||
- **Déblocage** : Permet de payer l'agrandissement de la carte du monde.
|
||||
- **Visibilité** : Donne accès aux niveaux d'animaux/bébés supérieurs dans les autres zoos (débloque la vue sur les offres rares).
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
- **Effet** : Augmente la production et le niveau de visibilité des offres externes.
|
||||
- **Ratio** : 1 unité couvre la visibilité sur 10 zoos définis (par proximité).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "research_center",
|
||||
"level": "integer (1-7)",
|
||||
"stats": {
|
||||
"points_generated": "integer",
|
||||
"last_collection": "timestamp"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Production | 10 pts / heure |
|
||||
| Portée Radar | 10 zoos voisins |
|
||||
| Rareté Visible | Niveau 1 (Commun) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Présent au démarrage.
|
||||
|
||||
### Conditions de Disparition
|
||||
Indestructible (ou un seul obligatoire).
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
Production continue 24h/24.
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Vitesse Recherche** :
|
||||
| Niveau | Points / Heure |
|
||||
| :--- | :--- |
|
||||
| 1 | 10 |
|
||||
| 2 | 20 |
|
||||
| 3 | 40 |
|
||||
| 4 | 80 |
|
||||
| 5 | 150 |
|
||||
| 6 | 300 |
|
||||
| 7 | 600 |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Découverte** : Déblocage d'une nouvelle zone carte monde.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Production | Portée (Zoos) | Rareté Visible | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 0 | 10 | 10 | 1 | 0s |
|
||||
| 2 | 300 | 20 | 20 | 2 | 0s |
|
||||
| 3 | 600 | 40 | 30 | 2 | 0s |
|
||||
| 4 | 1200 | 80 | 50 | 3 | 0s |
|
||||
| 5 | 2400 | 150 | 80 | 3 | 0s |
|
||||
| 6 | 4800 | 300 | 120 | 4 | 0s |
|
||||
| 7 | 9600 | 600 | Tout | 5 | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateResearch(center):
|
||||
points = center.productionRate * deltaTime
|
||||
player.addResearchPoints(points)
|
||||
|
||||
visibleRarity = center.maxRarityVisible
|
||||
updateWorldMapVisibility(center.range, visibleRarity)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `RESEARCH_UNLOCK` | Info | "Nouvelle zone de carte découverte !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Collecte de Points (Action)
|
||||
**Description UX** : Les points de recherche s'accumulent. Le joueur clique sur le bâtiment pour les récolter (ou collecte auto si implémenté).
|
||||
**Description UI** : Une icône "Fiole" ou "Atome" flotte au-dessus du bâtiment quand des points sont disponibles. Au clic, les points volent vers le compteur global.
|
||||
**Emplacement** : Case Centre Recherche.
|
||||
**Intégration** : Overlay au-dessus du sprite.
|
||||
**Navigation** : Clic Bâtiment -> Collecte.
|
||||
**Événements** : `COLLECT_RESEARCH`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `bubble_pop.mp3` ou `sci_fi_bloop.mp3`. **Design ASMR** : "Bloop" liquide ou tintement cristallin.
|
||||
- **Graphiques** : Icône Fiole bleue/violette.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Flottement (bobbing) de l'icône. Trajectoire courbe des points vers le HUD.
|
||||
- **Couleurs** : Bleu Science #0088FF.
|
||||
- **Textes** : "+10 RP".
|
||||
- **Formes** : Cercle ou Fiole.
|
||||
|
||||
### Consultation & Arbre Techno (Consultation)
|
||||
**Description UX** : Le joueur veut voir sa production et débloquer des zones.
|
||||
**Description UI** : **Bottom Sheet** affichant "Production : X/h". Un bouton "Carte du Monde" pour voir l'effet du radar.
|
||||
**Emplacement** : Modal Centre Recherche.
|
||||
**Intégration** : Lien vers la Carte du Monde.
|
||||
**Navigation** : Clic Bâtiment (si pas de collecte ou double clic) -> Modal.
|
||||
**Événements** : `OPEN_RESEARCH`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_open.mp3`
|
||||
- **Graphiques** : Style High-Tech / Labo.
|
||||
- **Images** : `radar_icon.png`.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Radar qui balaie (décoratif).
|
||||
- **Couleurs** : Blanc, Gris, Bleu néon.
|
||||
- **Textes** : "Portée Radar : X km".
|
||||
- **Formes** : Panneaux anguleux.
|
||||
|
||||
### Amélioration (Upgrade)
|
||||
**Description UX** : Augmenter la production et la portée.
|
||||
**Description UI** : Bouton standard d'upgrade avec comparaison "Actuel vs Suivant".
|
||||
**Emplacement** : Modal Centre Recherche.
|
||||
**Intégration** : Standard.
|
||||
**Navigation** : Clic Upgrade.
|
||||
**Événements** : `UPGRADE_RESEARCH`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `upgrade_tech.mp3` (son électronique).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Flash bleu sur le bâtiment.
|
||||
- **Couleurs** : Bleu.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
142
docs/specs/enchere_generique.md
Normal file
142
docs/specs/enchere_generique.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Spécifications : Enchère (Générique)
|
||||
|
||||
## Définition
|
||||
Mécanisme de vente entre joueurs/bots sur la Carte du Monde.
|
||||
|
||||
## Fonctionnement
|
||||
1. **Mise en vente** : Le vendeur place un animal/bébé sur la case Camion/Vente de son zoo. Définit un prix initial.
|
||||
2. **Offre** : Visible sur la Carte du Monde (slot sous le zoo).
|
||||
3. **Enchères** : Les acheteurs (joueurs/bots) proposent des prix.
|
||||
4. **Validation** : Le vendeur accepte une offre ou laisse courir.
|
||||
5. **Sécurisation** : Une fois l'offre acceptée/validée, un **délai de 10 minutes** (Sablier) s'enclenche.
|
||||
6. **Finalisation** : À la fin du sablier, le transfert de propriété et de fonds est effectué (anti-race condition).
|
||||
|
||||
## Types
|
||||
- Vente de Bébés
|
||||
- Vente d'Animaux Adultes
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"seller_id": "uuid",
|
||||
"animal_ref": "uuid",
|
||||
"start_price": "integer",
|
||||
"current_bid": "integer",
|
||||
"highest_bidder_id": "uuid | null",
|
||||
"end_time": "timestamp",
|
||||
"status": "enum ('active', 'pending_validation', 'finalizing', 'completed', 'cancelled')",
|
||||
"finalization_timer": "timestamp (end)"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function placeBid(auction, bidder, amount):
|
||||
if amount <= auction.current_bid: return Error
|
||||
if bidder.coins < amount: return Error
|
||||
|
||||
auction.current_bid = amount
|
||||
auction.highest_bidder_id = bidder.id
|
||||
|
||||
function finalizeAuction(auction):
|
||||
if now < auction.finalization_timer: return
|
||||
|
||||
transferCoins(auction.highest_bidder_id, auction.seller_id, auction.current_bid)
|
||||
transferAnimal(auction.seller_id, auction.highest_bidder_id, auction.animal_ref)
|
||||
auction.status = 'completed'
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `BID_PLACED` | Info | "Offre placée avec succès." |
|
||||
| `OUTBID` | Alerte | "Vous avez été surenchéri !" |
|
||||
| `AUCTION_WON` | Succès | "Vous avez remporté l'enchère ! Livraison en cours..." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Consultation des Offres (Consultation)
|
||||
**Description UX** : Le joueur survole les zoos sur la carte du monde pour voir les offres.
|
||||
**Description UI** : Tooltip ou Slot sous le zoo affichant l'icône de l'animal et le prix actuel.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Overlay Zoo.
|
||||
**Navigation** : Survol -> Info.
|
||||
**Événements** : `HOVER_OFFER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `hover_soft.mp3`.
|
||||
- **Graphiques** : Cadre Offre (Doré si rare).
|
||||
- **Images** : Icône Animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Prix qui clignote si nouvelle enchère.
|
||||
- **Couleurs** : Vert (Abordable), Rouge (Trop cher).
|
||||
- **Textes** : "Lapin Rare - 500$".
|
||||
- **Formes** : Rectangle arrondi.
|
||||
|
||||
### Enchérir (Action)
|
||||
**Description UX** : Le joueur clique sur une offre pour ouvrir le détail et placer une enchère.
|
||||
**Description UI** : **Bottom Sheet** d'enchère. Infos complètes de l'animal. Champ de saisie "Votre offre" ou boutons rapides (+10, +50, +100).
|
||||
**Emplacement** : Modal Enchère.
|
||||
**Intégration** : Modal centrée.
|
||||
**Navigation** : Clic Offre -> Modal -> Enchérir.
|
||||
**Événements** : `PLACE_BID`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `bid_placed.mp3` (bruit de marteau).
|
||||
- **Graphiques** : Icône Marteau.
|
||||
- **Images** : Portrait Animal HD.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Compteur prix qui monte.
|
||||
- **Couleurs** : Bouton Vert.
|
||||
- **Textes** : "Enchérir".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Sablier de Validation (Attente)
|
||||
**Description UX** : L'enchère est remportée, le transfert est en cours (10 min).
|
||||
**Description UI** : Icône Sablier sur l'offre et dans le HUD de l'acheteur.
|
||||
**Notification Push** : "Enchère remportée ! Animal livré." à la fin du timer.
|
||||
**Emplacement** : Carte Monde & HUD.
|
||||
**Intégration** : Statut "En cours".
|
||||
**Navigation** : N/A
|
||||
**Événements** : `TIMER_START`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `tick_tock.mp3` (ambiance très discrète si focus).
|
||||
- **Graphiques** : Sablier animé.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Sable qui coule.
|
||||
- **Couleurs** : Orange.
|
||||
- **Textes** : "Validation : MM:SS".
|
||||
- **Formes** : N/A
|
||||
|
||||
### 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 UI** : Le sablier réagit au clic (secousse).
|
||||
**Emplacement** : Modal Validation.
|
||||
**Intégration** : Mini-jeu.
|
||||
**Navigation** : Clic Sablier.
|
||||
**Événements** : `CLICK_HOURGLASS`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `sand_shake.mp3`. **Design ASMR** : Bruit de sable qui crisse ou petit choc mat.
|
||||
- **Graphiques** : Particules de sable.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Secousse.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "+1 XP".
|
||||
- **Formes** : N/A
|
||||
120
docs/specs/etat.md
Normal file
120
docs/specs/etat.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Spécifications : États (Feedbacks Visuels)
|
||||
|
||||
## Définition
|
||||
Indicateurs visuels permettant au joueur de comprendre l'état de ses animaux et de son terrain sans utiliser de jauges (UI).
|
||||
|
||||
## États des Animaux
|
||||
- **Froid** : Teinte bleuâtre/pâle, givre visible sur le sprite.
|
||||
- **Chaud** : Teinte rougeâtre, vapeur de chaleur visible.
|
||||
- **Faim** : Déplacement lent, maigreur visible, cherche le sol, icône "faim" discrète.
|
||||
- **Maladie / Mort proche** : Animal couché, couleurs ternes, mouches autour.
|
||||
- **Heureux / Reproduction** : Cœurs, sautillements, couleurs vives.
|
||||
|
||||
## États du Terrain
|
||||
- **Mauvais Biome** : Herbe jaunie, sol craquelé ou boueux (changement de teinte global).
|
||||
- **Température Inadaptée** : Sol givré (froid) ou vapeurs (chaud).
|
||||
- **Saleté** : Déchets sombres, poussière grise.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Liste d'enums ou flags dans l'objet `Animal` ou `Case`.
|
||||
`visual_states: ["frozen", "hungry"]`
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Déclenchés par les seuils de stats (Santé, Faim, T°).
|
||||
|
||||
### Conditions de Disparition
|
||||
Retour à la normale des stats.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Déclencheurs Froid/Chaud.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Déclencheurs Mauvais Biome.
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
Déclencheur Heureux.
|
||||
|
||||
### Impact Mort
|
||||
Déclencheur Maladie/Mort.
|
||||
|
||||
### Impact Nourriture
|
||||
Déclencheur Faim.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Les états négatifs (Sale, Malade) repoussent les visiteurs.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
if animal.temp < animal.idealTemp - 10:
|
||||
addVisualState("frozen")
|
||||
elif animal.temp > animal.idealTemp + 10:
|
||||
addVisualState("overheat")
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Lecture Immédiate (Passif)
|
||||
**Description UX** : Le joueur comprend la situation d'un coup d'œil sans ouvrir de menu.
|
||||
**Description UI** : Pas d'UI. Tout passe par le rendu graphique des entités.
|
||||
**Emplacement** : Grille Zoo.
|
||||
**Intégration** : Moteur de rendu.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `STATE_CHANGE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Shaders (Color Overlay), Systèmes de particules.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Animations spécifiques (Trembler, Boiter).
|
||||
- **Couleurs** : Code universel (Bleu=Froid, Rouge=Chaud, Vert=OK, Jaune=Malade).
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
69
docs/specs/impacts_generique.md
Normal file
69
docs/specs/impacts_generique.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# Spécifications : Impacts (Générique)
|
||||
|
||||
## Définition
|
||||
Les impacts sont les conséquences des actions du joueur ou des événements du jeu sur les scores et l'état du zoo.
|
||||
|
||||
## Types d'Impacts
|
||||
|
||||
### Sur l'Attractivité
|
||||
- **Positif** : Naissance, Achat d'animal rare, Résolution d'incident visiteur, Diversité élevée.
|
||||
- **Négatif** : Mort d'animal, Incident visiteur ignoré, Zoo vide.
|
||||
|
||||
### Sur la Reproduction
|
||||
- **Positif** : Animal bien nourri, Température idéale, Biome (couleur) idéal, Proximité partenaire compatible.
|
||||
- **Négatif** : Faim, Température inadaptée, Mauvais biome, Stress (transport long), Morts dans le zoo.
|
||||
|
||||
### Sur les Revenus
|
||||
- **Positif** : Visiteurs nombreux, Boutiques améliorées, Animaux rares (revenu passif), Ventes réussies.
|
||||
- **Négatif** : Coûts d'entretien (nourriture), Achats onéreux.
|
||||
|
||||
### Sur la Survie
|
||||
- **Positif** : Adéquation Biome/Animal, Nourriture suffisante.
|
||||
- **Négatif** : Froid/Chaud extrême, Faim prolongée, Isolement.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Structure de configuration des impacts (Ruleset).
|
||||
```json
|
||||
{
|
||||
"impact_rules": [
|
||||
{ "trigger": "event_type", "target": "score_type", "value": "float", "duration": "int" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function applyImpact(target, impactType, value):
|
||||
if impactType == 'ATTRACTIVENESS':
|
||||
target.attractiveness += value
|
||||
elif impactType == 'SURVIVAL':
|
||||
target.survival_score += value
|
||||
|
||||
logEvent(target.id, impactType, value)
|
||||
```
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Feedback Visuel d'Impact (Passif)
|
||||
**Description UX** : Le joueur voit les conséquences de ses actions.
|
||||
**Description UI** : Popups flottants ("Floating Text") au-dessus des entités concernées.
|
||||
**Emplacement** : World Space.
|
||||
**Intégration** : Temporaire (Fade out).
|
||||
**Navigation** : N/A
|
||||
**Événements** : `IMPACT_APPLIED`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `positive.mp3` (montant), `negative.mp3` (descendant).
|
||||
- **Graphiques** : Flèches Vertes (Haut) / Rouges (Bas).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Texte qui monte et disparaît.
|
||||
- **Couleurs** : Vert, Rouge.
|
||||
- **Textes** : "+10 Attractivité", "-5 Santé".
|
||||
- **Formes** : N/A
|
||||
122
docs/specs/inventaire_animaux.md
Normal file
122
docs/specs/inventaire_animaux.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Spécifications : Inventaire des Animaux
|
||||
|
||||
## Structure
|
||||
75 Animaux répartis sur les 15 Milieux (Couleurs) et 5 Niveaux de Rareté.
|
||||
|
||||
## Exemples (Extrait)
|
||||
- **Prairie / Rareté 1** : Lapin
|
||||
- **Prairie / Rareté 5** : Licorne
|
||||
- **Océan / Rareté 1** : Poisson Clown
|
||||
- **Océan / Rareté 5** : Kraken
|
||||
- **Montagne / Rareté 1** : Chèvre
|
||||
- **Montagne / Rareté 5** : Dragon
|
||||
|
||||
*(La liste complète des 75 animaux doit être définie dans un fichier de données ou une table de loot).*
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique `animal_types`.
|
||||
```json
|
||||
{
|
||||
"id": "string (ex: 'rabbit')",
|
||||
"name": "string",
|
||||
"rarity": "int",
|
||||
"ideal_biome": "int",
|
||||
"ideal_temp": "float",
|
||||
"base_value": "int"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Bestiaire / Encyclopédie (Consultation)
|
||||
**Description UX** : Le joueur consulte les animaux découverts/possédés.
|
||||
**Description UI** : Livre ou Grille d'icônes. Les animaux non découverts sont des silhouettes noires.
|
||||
**Emplacement** : Menu Principal -> Bestiaire.
|
||||
**Intégration** : Modal Plein Écran.
|
||||
**Navigation** : Filtres (Biome, Rareté) -> Clic Animal -> Détail.
|
||||
**Événements** : `OPEN_BESTIARY`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `page_turn.mp3`.
|
||||
- **Graphiques** : Fond Livre ancien.
|
||||
- **Images** : 75 Icônes Animaux.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Sépia/Papier.
|
||||
- **Textes** : Lore/Description.
|
||||
- **Formes** : N/A
|
||||
104
docs/specs/inventaire_bebe_animaux.md
Normal file
104
docs/specs/inventaire_bebe_animaux.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Spécifications : Inventaire des Bébés Animaux
|
||||
|
||||
## Correspondance
|
||||
Pour chaque animal adulte, il existe une version "Bébé".
|
||||
- **Visuel** : Version "chibi" ou réduite du sprite adulte.
|
||||
- **Nom** : "Bébé [Nom Animal]".
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Même table que `animal_types` avec flag `is_baby`.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Visualisation Bébé (Passif)
|
||||
**Description UX** : Différencier les bébés des adultes.
|
||||
**Description UI** : Sprite plus petit (50% taille), tête plus grosse, yeux plus grands.
|
||||
**Emplacement** : Grille / Nurserie.
|
||||
**Intégration** : Sprite.
|
||||
**Navigation** : N/A
|
||||
**Événements** : N/A
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Cris plus aigus.
|
||||
- **Graphiques** : Sprites Chibi.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Démarche maladroite.
|
||||
- **Couleurs** : Identiques Adulte.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
105
docs/specs/inventaire_heures.md
Normal file
105
docs/specs/inventaire_heures.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# Spécifications : Inventaire des Heures de la Journée
|
||||
|
||||
## Cycle Journalier
|
||||
- **Aube** (06h-09h) : Arrivée des premiers visiteurs.
|
||||
- **Jour** (09h-18h) : Pic d'activité, chaleur maximale.
|
||||
- **Crépuscule** (18h-21h) : Départ des visiteurs.
|
||||
- **Nuit** (21h-06h) : Zoo fermé (sauf événements nocturnes), Température baisse, Repos des animaux.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Cycle perpétuel.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir `temperature.md`.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Aube/Crépuscule** : Changement luminosité globale.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Cycle Jour/Nuit (Passif)
|
||||
**Description UX** : La luminosité change progressivement.
|
||||
**Description UI** : Filtre global de couleur (Bleu nuit -> Orange aube -> Blanc jour -> Orange crépuscule).
|
||||
**Emplacement** : Écran entier.
|
||||
**Intégration** : Layer FX.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `TIME_CHANGE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Thème Jour / Thème Nuit (plus calme).
|
||||
- **Sons** : Coq (Matin), Hibou (Nuit).
|
||||
- **Graphiques** : Ombres qui tournent (si 3D ou simulé).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Transition couleur.
|
||||
- **Couleurs** : Palette Cycle.
|
||||
- **Textes** : Horloge "14:00".
|
||||
- **Formes** : N/A
|
||||
109
docs/specs/inventaire_meteos.md
Normal file
109
docs/specs/inventaire_meteos.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# Spécifications : Inventaire des Météos
|
||||
|
||||
## Types de Météo
|
||||
1. **Ensoleillé** : Bonus attractivité, Température +1°C.
|
||||
2. **Nuageux** : Neutre.
|
||||
3. **Pluvieux** : Malus attractivité (visiteurs partent plus vite), Bonus biome "Marécage/Océan".
|
||||
4. **Orage** : Stress animaux (bruit), Malus fort visiteurs.
|
||||
5. **Neige** : Température -5°C, Bonus biome "Polaire/Montagne".
|
||||
6. **Canicule** : Température +5°C, Risque surchauffe.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Probabilités selon Saison.
|
||||
|
||||
### Conditions de Disparition
|
||||
Changement toutes les X heures ou jours.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Neige/Orage** : Ralentissement camions (-20%).
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
**Pluie** : Augmente vente parapluies/abris.
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Changement Météo** : Notification.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `WEATHER_CHANGE` | Info | "La météo change : [Nouvelle Météo]" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Ambiance Météo (Passif)
|
||||
**Description UX** : Le joueur ressent la météo actuelle.
|
||||
**Description UI** : Overlay plein écran (Pluie, Neige, Rayons soleil). Nuages qui passent (ombres).
|
||||
**Emplacement** : Écran entier.
|
||||
**Intégration** : Layer FX.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `WEATHER_FX`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Pluie, Vent, Tonnerre.
|
||||
- **Graphiques** : Particules Pluie/Neige.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Chute particules.
|
||||
- **Couleurs** : Teinte Bleue (Nuit/Pluie), Jaune (Soleil).
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
116
docs/specs/inventaire_milieux.md
Normal file
116
docs/specs/inventaire_milieux.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# Spécifications : Inventaire des Milieux
|
||||
|
||||
## Liste des Milieux (Couleurs)
|
||||
1. **Prairie Tendre** (Vert clair)
|
||||
2. **Forêt Dense** (Vert foncé)
|
||||
3. **Savane** (Jaune/Ocre)
|
||||
4. **Désert** (Sable)
|
||||
5. **Plage** (Beige)
|
||||
6. **Océan Surface** (Bleu clair)
|
||||
7. **Océan Profond** (Bleu foncé)
|
||||
8. **Récif** (Corail/Multicolore)
|
||||
9. **Montagne Basse** (Gris vert)
|
||||
10. **Roche** (Gris)
|
||||
11. **Sommet Enneigé** (Blanc)
|
||||
12. **Volcanique** (Noir/Rouge)
|
||||
13. **Marécage** (Vert boue)
|
||||
14. **Toundra** (Bleu gris)
|
||||
15. **Jungle** (Vert saturé)
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique (Reference Data).
|
||||
|
||||
### Caractéristiques Initiales
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Chaque milieu a une T° par défaut.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Palette Biome (Consultation)
|
||||
**Description UX** : Le joueur consulte la liste des biomes disponibles pour terraformer.
|
||||
**Description UI** : Grille de carrés colorés avec infobulle (Nom, T°).
|
||||
**Emplacement** : Outil Terraformation.
|
||||
**Intégration** : Sélecteur.
|
||||
**Navigation** : Clic Couleur.
|
||||
**Événements** : `SELECT_BIOME`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `select.mp3`.
|
||||
- **Graphiques** : Carrés de texture.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Palette 15 couleurs.
|
||||
- **Textes** : Noms des milieux.
|
||||
- **Formes** : Carrés.
|
||||
108
docs/specs/inventaire_problemes_visiteurs.md
Normal file
108
docs/specs/inventaire_problemes_visiteurs.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Spécifications : Inventaire des Problèmes et Exigences Visiteurs
|
||||
|
||||
## Liste des Incidents
|
||||
1. **Soif** : "J'ai soif !" -> Nécessite un stand de boisson ou une boutique proche.
|
||||
2. **Fatigue** : "J'ai mal aux pieds..." -> Nécessite un banc.
|
||||
3. **Saleté** : "C'est sale ici !" -> Nécessite un nettoyage (clic) ou une poubelle.
|
||||
4. **Frustration** : "On ne voit rien !" -> Animal trop loin ou caché.
|
||||
5. **Envie** : "Je veux une peluche !" -> Nécessite une boutique de souvenirs.
|
||||
6. **Photo** : "Quelle merveille !" -> Le visiteur veut prendre une photo (clic bonus).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Aléatoire sur Visiteur.
|
||||
|
||||
### Conditions de Disparition
|
||||
Résolution ou Départ visiteur.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
**Canicule** : Augmente probabilité "Soif".
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Incident Apparu** : Bulle visible.
|
||||
* **Incident Résolu** : Gain.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Bulles d'Incidents (Action)
|
||||
**Description UX** : Voir `visiteur.md`.
|
||||
**Description UI** : Icônes spécifiques pour chaque problème (Goutte, Zzz, Poubelle, Œil barré, Cadeau, Appareil photo).
|
||||
**Emplacement** : Visiteur.
|
||||
**Intégration** : Bulle.
|
||||
**Navigation** : Clic.
|
||||
**Événements** : `INCIDENT_ICON`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Variés selon incident (Bruit eau, Bâillement).
|
||||
- **Graphiques** : Set d'icônes vectorielles.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Pop.
|
||||
- **Couleurs** : Noir sur Blanc.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : Bulle.
|
||||
116
docs/specs/inventaire_quetes.md
Normal file
116
docs/specs/inventaire_quetes.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# Spécifications : Inventaire des Quêtes
|
||||
|
||||
## Types d'Objectifs (Journaliers)
|
||||
1. **Économique** : "Gagner 1000 pièces", "Vendre pour 500 pièces".
|
||||
2. **Construction** : "Construire une boutique", "Améliorer la nurserie".
|
||||
3. **Élevage** : "Faire naître un bébé", "Avoir 3 animaux de milieu Océan".
|
||||
4. **Social** : "Avoir 50 visiteurs simultanés", "Résoudre 5 incidents".
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "quest",
|
||||
"objective_type": "string",
|
||||
"target_value": "int",
|
||||
"reward_coins": "int",
|
||||
"is_completed": "boolean"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Reset quotidien (Minuit serveur).
|
||||
|
||||
### Conditions de Disparition
|
||||
Complétion ou Reset.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Quête Complétée** : Gain récompense.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `QUEST_COMPLETE` | Succès | "Quête terminée ! Récompense reçue." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Suivi Quêtes (Permanent)
|
||||
**Description UX** : Le joueur voit ses objectifs en cours.
|
||||
**Description UI** : Liste compacte dans le HUD (ex: "Naissances : 2/5"). Coche verte quand fini.
|
||||
**Emplacement** : HUD Droite.
|
||||
**Intégration** : Widget rétractable.
|
||||
**Navigation** : Clic -> Détail Quêtes.
|
||||
**Événements** : `QUEST_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `quest_complete.mp3`.
|
||||
- **Graphiques** : Icône Parchemin.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Flash vert à la complétion.
|
||||
- **Couleurs** : Blanc (En cours), Vert (Fini).
|
||||
- **Textes** : Titre Quête, Progression.
|
||||
- **Formes** : Liste.
|
||||
146
docs/specs/inventaire_saisons.md
Normal file
146
docs/specs/inventaire_saisons.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Spécifications : Inventaire des Saisons
|
||||
|
||||
## Cycle Annuel
|
||||
Le jeu intègre un cycle de 4 saisons qui influence l'environnement et les animaux.
|
||||
Chaque saison dure un nombre défini de jours de jeu (ex: 7 jours réels ou 30 jours in-game).
|
||||
|
||||
## Liste des Saisons
|
||||
|
||||
### 1. Printemps
|
||||
- **Météo dominante** : Ensoleillé, Pluvieux.
|
||||
- **Température** : Tempérée (+0°C).
|
||||
- **Impact Général** :
|
||||
- **Reproduction** : Bonus fort pour la plupart des animaux (+20% naissances).
|
||||
- **Visiteurs** : Affluence moyenne.
|
||||
- **Impact Spécifique** :
|
||||
- Favorise les animaux de type "Prairie" et "Forêt".
|
||||
|
||||
### 2. Été
|
||||
- **Météo dominante** : Ensoleillé, Canicule, Orage.
|
||||
- **Température** : Chaude (+5°C à +10°C).
|
||||
- **Impact Général** :
|
||||
- **Survie** : Risque de surchauffe pour les animaux polaires/montagne.
|
||||
- **Visiteurs** : Pic d'affluence (vacances), forte demande en boissons/glaces.
|
||||
- **Impact Spécifique** :
|
||||
- Favorise les animaux de type "Désert", "Savane", "Jungle".
|
||||
- Pénalise les animaux de type "Toundra", "Polaire".
|
||||
|
||||
### 3. Automne
|
||||
- **Météo dominante** : Pluvieux, Nuageux, Vent.
|
||||
- **Température** : Fraîche (-2°C).
|
||||
- **Impact Général** :
|
||||
- **Reproduction** : Taux normal.
|
||||
- **Maladie** : Légère augmentation des risques si les animaux sont mouillés/froids.
|
||||
- **Impact Spécifique** :
|
||||
- Favorise les animaux de type "Forêt", "Marécage".
|
||||
|
||||
### 4. Hiver
|
||||
- **Météo dominante** : Neige, Nuageux, Froid.
|
||||
- **Température** : Froide (-5°C à -15°C).
|
||||
- **Impact Général** :
|
||||
- **Survie** : Risque d'hypothermie pour les animaux tropicaux.
|
||||
- **Reproduction** : Malus fort (sauf espèces adaptées).
|
||||
- **Visiteurs** : Baisse d'affluence, sauf si événements spéciaux (Noël).
|
||||
- **Impact Spécifique** :
|
||||
- Favorise les animaux de type "Toundra", "Polaire", "Montagne".
|
||||
- Pénalise fortement les animaux de type "Désert", "Jungle", "Récif".
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Cycle annuel fixe.
|
||||
|
||||
### Conditions de Disparition
|
||||
Fin de durée saison.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Impact Mort
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Voir liste ci-dessus.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Changement Saison** : Notification majeure.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `SEASON_CHANGE` | Info | "C'est le [Saison] !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Ambiance Saisonnière (Passif)
|
||||
**Description UX** : Le décor change selon la saison.
|
||||
**Description UI** : Tilesets modifiés (Herbe verte -> Herbe jaune -> Feuilles mortes -> Neige).
|
||||
**Emplacement** : Grille Zoo.
|
||||
**Intégration** : Assets graphiques.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `SEASON_VISUAL_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Thèmes saisonniers (Vivaldi remix ?).
|
||||
- **Sons** : Vent hivernal, Oiseaux printemps.
|
||||
- **Graphiques** : 4 variantes de chaque Tile.
|
||||
- **Images** : Icône Saison HUD.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Feuilles qui tombent (Automne).
|
||||
- **Couleurs** : Vert, Jaune, Orange, Blanc.
|
||||
- **Textes** : "Printemps", "Été", etc.
|
||||
- **Formes** : N/A
|
||||
108
docs/specs/inventaire_temperatures.md
Normal file
108
docs/specs/inventaire_temperatures.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Spécifications : Inventaire des Températures
|
||||
|
||||
## Échelle de Température
|
||||
1. **Polaire** (-30°C à -10°C) - Feedback : Givre intense
|
||||
2. **Froid** (-10°C à 5°C) - Feedback : Givre léger
|
||||
3. **Frais** (5°C à 15°C)
|
||||
4. **Tempéré** (15°C à 25°C) - Idéal pour la plupart des animaux de base
|
||||
5. **Chaud** (25°C à 35°C)
|
||||
6. **Aride** (35°C à 50°C) - Feedback : Vapeur légère
|
||||
7. **Brûlant** (> 50°C) - Feedback : Vapeur rouge/Feu
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Table statique.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Thermomètre (Consultation)
|
||||
**Description UX** : Le joueur voit la température actuelle.
|
||||
**Description UI** : Jauge verticale (Thermomètre) avec mercure rouge. Graduations colorées (Bleu bas, Rouge haut).
|
||||
**Emplacement** : HUD ou Info Case.
|
||||
**Intégration** : Widget.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `UPDATE_TEMP`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Sprite Thermomètre.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Niveau qui monte/descend.
|
||||
- **Couleurs** : Dégradé Bleu/Rouge.
|
||||
- **Textes** : "20°C".
|
||||
- **Formes** : N/A
|
||||
158
docs/specs/joueur.md
Normal file
158
docs/specs/joueur.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# Spécifications : Joueur
|
||||
|
||||
## Définition
|
||||
L'utilisateur humain.
|
||||
|
||||
## Propriétés
|
||||
- **Compte** : Authentifié par clé privée (pas de mot de passe).
|
||||
- **Ressources** : Pièces, Unités de recherche.
|
||||
- **Zoo** : Possède et gère un unique zoo.
|
||||
- **Démarrage** : Commence avec 200 pièces et 3 couples reproducteurs basiques.
|
||||
|
||||
## Actions
|
||||
- Achat/Vente.
|
||||
- Placement/Déplacement.
|
||||
- Upgrade bâtiments/carte.
|
||||
- Gestion des incidents visiteurs.
|
||||
- Configuration du profil d'absence (Bot).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"public_key": "string (ed25519)",
|
||||
"username": "string",
|
||||
"created_at": "timestamp",
|
||||
"last_login": "timestamp",
|
||||
"resources": {
|
||||
"coins": "integer",
|
||||
"research_points": "integer"
|
||||
},
|
||||
"settings": {
|
||||
"music_enabled": "boolean",
|
||||
"bot_profile_id": "integer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Pièces | 200 |
|
||||
| Recherche | 0 |
|
||||
| Animaux | 3 couples (6 animaux) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Inscription.
|
||||
|
||||
### Conditions de Disparition
|
||||
Suppression compte.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Démarrage autonome** : Le joueur reçoit 3 couples reproducteurs basiques (Lapins/Poules/Canards selon biome) pour garantir une reproduction immédiate et alimenter le marché bas prix.
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Connexion** : Chargement état.
|
||||
* **Quête** : Validation.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `WELCOME` | Info | "Bienvenue dans votre nouveau zoo !" |
|
||||
| `NO_MONEY` | Alerte | "Fonds insuffisants." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### HUD Principal (Permanent)
|
||||
**Description UX** : Le joueur voit en permanence ses ressources et accès rapides.
|
||||
**Description UI** : Barre supérieure avec Compteurs (Pièces, Recherche, Réputation). Barre inférieure ou latérale avec Menus (Construction, Carte Monde, Inventaire, Profil).
|
||||
**Emplacement** : Écran (Overlay).
|
||||
**Intégration** : Fixe.
|
||||
**Navigation** : Clic Menu -> Ouverture Panneau.
|
||||
**Événements** : `UI_CLICK`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_click.mp3`.
|
||||
- **Graphiques** : Style UI "Bois et Pierre" ou "Moderne Clean".
|
||||
- **Images** : Icônes (Pièce, Fiole, Marteau, Carte).
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Compteurs qui défilent quand gain/perte.
|
||||
- **Couleurs** : Or, Bleu, Blanc.
|
||||
- **Textes** : Chiffres, Labels menus.
|
||||
- **Formes** : Barres, Boutons ronds.
|
||||
|
||||
### Profil & Bot (Configuration)
|
||||
**Description UX** : Le joueur configure son avatar et son bot d'absence.
|
||||
**Description UI** : Modal Profil. Onglet "Gestion Absence" avec sélecteur de Bot (Famille > Spécialisation).
|
||||
**Emplacement** : Menu Profil.
|
||||
**Intégration** : Modal.
|
||||
**Navigation** : Profil -> Bot -> Sauvegarder.
|
||||
**Événements** : `SAVE_PROFILE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `save_success.mp3`.
|
||||
- **Graphiques** : Portraits de bots.
|
||||
- **Images** : Avatars joueurs.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : Description des bots ("Le Conservateur : Achète de la nourriture...").
|
||||
- **Formes** : Cartes de sélection.
|
||||
118
docs/specs/laboratoire.md
Normal file
118
docs/specs/laboratoire.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# Spécifications : Laboratoire (Site)
|
||||
|
||||
## Définition
|
||||
Un laboratoire est un point d'intérêt spécial sur la Carte du Monde (POI).
|
||||
|
||||
## Fonction
|
||||
- **Offres Spéciales** : Propose périodiquement des œufs ou bébés animaux rares.
|
||||
- **Prix Fixe** : Contrairement aux zoos, les ventes du laboratoire sont souvent à prix fixe, sans enchères (ou règles spécifiques).
|
||||
- **Icône** : 🔬
|
||||
|
||||
## Interaction
|
||||
- **Achat** : Glisser l'offre du laboratoire vers le camion du joueur.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "lab",
|
||||
"current_offer": { "animal_type": "string", "rarity": "int", "price": "int", "expires_at": "timestamp" }
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération carte.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Rotation Offres** : 1 offre toutes les 4h à 24h.
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Nouvelle Offre Rare** : Notification globale ou locale.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `LAB_OFFER` | Info | "Le laboratoire propose un spécimen rare !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Offre Rare (Passif)
|
||||
**Description UX** : Le laboratoire a un stock spécial.
|
||||
**Description UI** : Halo brillant autour du labo. Icône "!" ou "ADN".
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Effet visuel.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `LAB_GLOW`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `sci_fi_hum.mp3`.
|
||||
- **Graphiques** : Halo bleu néon.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Pulsation.
|
||||
- **Couleurs** : Bleu électrique / Violet.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
153
docs/specs/milieu.md
Normal file
153
docs/specs/milieu.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Spécifications : Milieu (Biome/Couleur)
|
||||
|
||||
## Définition
|
||||
Le milieu représente l'environnement écologique d'une case, défini par sa couleur.
|
||||
|
||||
## Types de Milieux
|
||||
- **Prairie** (Tiers Gauche)
|
||||
- **Océan** (Tiers Milieu)
|
||||
- **Montagne** (Tiers Droite)
|
||||
- *Note : D'autres milieux (Forêt, Désert...) peuvent être définis par des couleurs intermédiaires.*
|
||||
|
||||
## 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.
|
||||
- **Reproduction** : Un milieu idéal favorise la reproduction (bonus de score).
|
||||
- **Visuel** : Le fond de la case affiche la couleur du milieu.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "integer (0-14)",
|
||||
"name": "string",
|
||||
"color_hex": "string (#RRGGBB)",
|
||||
"default_temperature": "float",
|
||||
"fertility_bonus": "float"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| ID | Nom | Couleur | T° Base |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 0 | Prairie Tendre | #90EE90 | 20°C |
|
||||
| 5 | Océan Surface | #00BFFF | 15°C |
|
||||
| 9 | Montagne Basse | #A9A9A9 | 5°C |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération carte (fixe).
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Le milieu définit la température de base de la case (avant modificateurs saison/upgrade).
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Référence pour la compatibilité animale.
|
||||
|
||||
### Impact Saisons
|
||||
| Milieu | Sensibilité Saisons |
|
||||
| :--- | :--- |
|
||||
| Océan | Faible (Inertie thermique) |
|
||||
| Montagne | Forte (Neige en hiver) |
|
||||
| Prairie | Moyenne |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Bonus** : +10% fertilité si animal sur son biome exact.
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
**Esthétique** : Un zoo avec des biomes variés est plus attractif (+5% par biome différent utilisé).
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
**Changement de Milieu** :
|
||||
| Niveau | Coût | Précision | Temps |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 1 | 500 | Changement vers biome adjacent | 0s |
|
||||
| 7 | 5000 | Changement vers n'importe quel biome | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Identification Visuelle (Passif)
|
||||
**Description UX** : Le joueur identifie le biome à la couleur du sol.
|
||||
**Description UI** : Textures distinctes (Herbe, Sable, Roche, Eau). Transitions douces (dégradés) entre les cases adjacentes.
|
||||
**Textures** : Motifs discrets (brins d'herbe, cailloux, craquelures) superposés à la couleur pour l'accessibilité (daltonisme).
|
||||
**Emplacement** : Fond de Case.
|
||||
**Intégration** : Layer 0 (Background).
|
||||
**Navigation** : N/A
|
||||
**Événements** : `MAP_RENDER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Tilesets (15 variations de couleur/texture).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Eau qui ondule (Océan), Herbe qui bouge (Prairie).
|
||||
- **Couleurs** : Palette 15 couleurs (Cercle chromatique).
|
||||
- **Textes** : Tooltip "Biome : Prairie".
|
||||
- **Formes** : Carré.
|
||||
|
||||
### Feedback Incompatibilité (Passif)
|
||||
**Description UX** : Un animal est sur le mauvais biome.
|
||||
**Description UI** : L'herbe sous l'animal jaunit ou devient boueuse. L'animal a une bulle "Beurk".
|
||||
**Emplacement** : Case Zoo.
|
||||
**Intégration** : Overlay Case.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `BIOME_MISMATCH`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Overlay "Sol Mort".
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Transition lente vers le jaune/marron.
|
||||
- **Couleurs** : Jaune paille, Marron.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
130
docs/specs/mort_bebe.md
Normal file
130
docs/specs/mort_bebe.md
Normal file
@@ -0,0 +1,130 @@
|
||||
# Spécifications : Mort des Bébés
|
||||
|
||||
## Causes Spécifiques
|
||||
- **Nurserie Pleine** : Si un œuf éclot et qu'il n'y a pas de place en nurserie ni sur le terrain.
|
||||
- **Vente Échouée** : Bébé resté trop longtemps en zone de vente (camion) sans acheteur et sans rapatriement.
|
||||
- **Conditions Extrêmes** : Les bébés ont des tolérances de température plus faibles que les adultes.
|
||||
|
||||
## Conséquences
|
||||
- Perte définitive de l'animal.
|
||||
- Pénalité forte sur le Score de Réputation.
|
||||
- Pas de récupération de ressources (pièces).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Événement loggé.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Voir Causes.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Voir `bebe_animal.md`.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
**Malus** : -50 points de Réputation (temporaire 24h).
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Mort Bébé** : Notification critique.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `BABY_DIED` | Critique | "Un bébé est mort ! Les visiteurs sont choqués." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Drame (Événement)
|
||||
**Description UX** : Le bébé meurt.
|
||||
**Description UI** : Le sprite devient gris/fantôme puis disparaît (montée au ciel). Musique triste.
|
||||
**Emplacement** : Case Zoo/Nurserie.
|
||||
**Intégration** : Immédiat.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `DEATH_ANIMATION`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Jingle Triste (Violon).
|
||||
- **Sons** : `gong.mp3` ou vent lugubre.
|
||||
- **Graphiques** : Fantôme.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Opacité 100% -> 0%. Translation Y vers le haut.
|
||||
- **Couleurs** : Gris, Noir.
|
||||
- **Textes** : "RIP".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Notification (Alerte)
|
||||
**Description UX** : Le joueur est informé de la perte.
|
||||
**Description UI** : Popup Rouge/Noir. "Vous avez perdu un bébé [Cause]".
|
||||
**Emplacement** : Centre Écran.
|
||||
**Intégration** : Modal bloquante (Acknowledgment requis).
|
||||
**Navigation** : Clic OK.
|
||||
**Événements** : `DEATH_ACKNOWLEDGE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Crâne (icône).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Noir #000000.
|
||||
- **Textes** : Cause du décès.
|
||||
- **Formes** : N/A
|
||||
215
docs/specs/nurserie.md
Normal file
215
docs/specs/nurserie.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# Spécifications : Nurserie
|
||||
|
||||
## Définition
|
||||
Bâtiment dédié à l'éclosion des œufs et à la croissance des bébés animaux.
|
||||
|
||||
## Fonctionnalités
|
||||
- **Éclosion** : Lieu où les œufs achetés sont placés pour éclore.
|
||||
- **Croissance** : Permet aux bébés de grandir en sécurité.
|
||||
- **Stockage** : Zone tampon avant placement dans le zoo.
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
- **Effet** : Accélère le temps d'éclosion/croissance. Améliore la qualité des reproducteurs (bonus génétique).
|
||||
- **Ratio** : 1 unité permet de faire grandir 1 bébé maximum à la fois.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "nurserie",
|
||||
"level": "integer (1-7)",
|
||||
"slots": [
|
||||
{ "slot_id": 1, "content": "egg_uuid | baby_uuid | null", "timer_end": "timestamp" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Slots | 1 |
|
||||
| Vitesse Éclosion | x1.0 |
|
||||
| Protection T° | +/- 2°C tolérance |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Construction par joueur ou présent au début.
|
||||
|
||||
### Conditions de Disparition
|
||||
Destruction par joueur (si vide).
|
||||
|
||||
### Hérédité
|
||||
**Bonus Génétique** : Niveau 5+ donne +5% chance rareté supérieure à l'éclosion.
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
La nurserie régule la température interne.
|
||||
| Niveau | Régulation |
|
||||
| :--- | :--- |
|
||||
| 1 | +/- 2°C |
|
||||
| 7 | +/- 10°C (Climatisation parfaite) |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
Protège des effets négatifs des saisons (Hiver/Été).
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
Fonctionne 24h/24.
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A (Lieu de résultat de la reproduction).
|
||||
|
||||
### Impact Mort
|
||||
Réduit drastiquement la mortalité infantile (Santé ne baisse pas sauf si Faim extrême).
|
||||
|
||||
### Impact Nourriture
|
||||
Les bébés sont nourris automatiquement si stock nourriture global > 0.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A (Les visiteurs ne voient pas l'intérieur).
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Vitesse Éclosion/Croissance** :
|
||||
| Niveau | Multiplicateur Vitesse |
|
||||
| :--- | :--- |
|
||||
| 1 | x1.0 |
|
||||
| 2 | x1.2 |
|
||||
| 3 | x1.5 |
|
||||
| 4 | x2.0 |
|
||||
| 5 | x3.0 |
|
||||
| 6 | x5.0 |
|
||||
| 7 | x10.0 |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Éclosion** : Œuf -> Bébé.
|
||||
* **Maturité** : Bébé -> Adulte (prêt à sortir).
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Slots | Vitesse | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 100 | 1 | x1.0 | 0s |
|
||||
| 2 | 200 | 2 | x1.2 | 0s |
|
||||
| 3 | 400 | 3 | x1.5 | 0s |
|
||||
| 4 | 800 | 4 | x2.0 | 0s |
|
||||
| 5 | 1600 | 5 | x3.0 | 0s |
|
||||
| 6 | 3200 | 6 | x5.0 | 0s |
|
||||
| 7 | 6400 | 7 | x10.0 | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateNurserie(nurserie):
|
||||
for slot in nurserie.slots:
|
||||
if slot.content is Egg:
|
||||
slot.timer -= baseTime * nurserie.speedMultiplier
|
||||
if slot.timer <= 0:
|
||||
hatchEgg(slot.content)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `EGG_HATCHED` | Info | "Un œuf a éclos en Nurserie !" |
|
||||
| `NURSERIE_FULL` | Warning | "Nurserie pleine, impossible d'acheter/reproduire." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Gestion des Slots (Consultation)
|
||||
**Description UX** : Le joueur clique sur la nurserie pour voir l'état de ses œufs et bébés.
|
||||
**Description UI** : **Bottom Sheet** avec une grille de slots (1 à 7 selon niveau). Chaque slot affiche l'icône de l'œuf/bébé, une barre de progression (éclosion/croissance) et un timer restant.
|
||||
**Emplacement** : Case Nurserie.
|
||||
**Intégration** : Modal centrée.
|
||||
**Navigation** : Clic Nurserie -> Modal -> Clic Slot (Action) ou Fermer.
|
||||
**Événements** : `OPEN_NURSERIE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `ui_open.mp3`
|
||||
- **Graphiques** : Style "Couveuse" ou "Nid douillet".
|
||||
- **Images** : `egg_[rarity].png`, `baby_[species].png`.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Œuf qui tremble légèrement quand proche éclosion.
|
||||
- **Couleurs** : Tons pastels (rose, bleu clair, jaune paille).
|
||||
- **Textes** : "Slot X", "Temps restant : MM:SS".
|
||||
- **Formes** : Cases de grille arrondies.
|
||||
|
||||
### Placement d'un Œuf
|
||||
**Description UX** : Après achat ou reproduction, l'œuf va automatiquement dans un slot vide. Si plein, notification d'erreur.
|
||||
**Description UI** : Animation de l'œuf "volant" vers la nurserie (si visible) ou simple apparition dans le slot.
|
||||
**Emplacement** : HUD -> Nurserie.
|
||||
**Intégration** : Automatique.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `EGG_ADDED`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `pop_soft.mp3`
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Fade in + Scale up de l'œuf dans le slot.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
|
||||
### Éclosion (Action)
|
||||
**Description UX** : Quand le timer est fini, l'œuf se fissure. Le joueur clique pour "ouvrir" l'œuf et découvrir le bébé.
|
||||
**Description UI** : Le slot brille ou clignote. Au clic, animation d'éclosion et popup "Nouveau Bébé !" avec ses stats.
|
||||
**Emplacement** : Modal Nurserie.
|
||||
**Intégration** : Bloque le slot jusqu'à validation.
|
||||
**Navigation** : Clic Œuf éclos -> Popup Récompense -> Retour Modal.
|
||||
**Événements** : `HATCH_CLICK`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Jingle court "Victoire/Naissance".
|
||||
- **Sons** : `crack_egg.mp3`, `baby_cry.mp3`.
|
||||
- **Graphiques** : Coquilles brisées.
|
||||
- **Images** : Sprite bébé.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Séquence d'éclosion (3 frames).
|
||||
- **Couleurs** : Rayons dorés/blancs.
|
||||
- **Textes** : "C'est un [Espèce] [Rareté] !".
|
||||
- **Formes** : Étoile ou Cercle rayonnant.
|
||||
|
||||
### Sortie de Nurserie (Placement)
|
||||
**Description UX** : Le bébé est mature (ou le joueur veut le sortir). Drag & drop du slot vers une case du zoo.
|
||||
**Description UI** : Le curseur devient le sprite du bébé/animal. Les cases valides s'illuminent en vert, invalides en rouge.
|
||||
**Alternative** : Sélectionner le bébé -> Cliquer sur la case cible (Tap to Place).
|
||||
**Emplacement** : Modal Nurserie -> Carte Zoo.
|
||||
**Intégration** : Ferme la modal et passe en mode placement.
|
||||
**Navigation** : Drag Slot -> Drop Carte.
|
||||
**Événements** : `DRAG_START`, `DRAG_DROP`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `pickup.mp3`, `place_ok.mp3` / `place_error.mp3`.
|
||||
- **Graphiques** : Grille de placement overlay.
|
||||
- **Images** : Sprite fantôme (translucide) sous le curseur.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Vert #00FF00 (OK), Rouge #FF0000 (KO).
|
||||
- **Textes** : Tooltip "Placer ici".
|
||||
- **Formes** : N/A
|
||||
116
docs/specs/personnage_generique.md
Normal file
116
docs/specs/personnage_generique.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# Spécifications : Personnage (Générique)
|
||||
|
||||
## Définition
|
||||
Entité active dans le jeu, qu'elle soit contrôlée par un humain, une IA ou un script.
|
||||
|
||||
## Types
|
||||
- **Joueur** : Utilisateur humain gérant son zoo.
|
||||
- **Bot** : IA gérant un zoo concurrent.
|
||||
- **Visiteur** : PNJ se promenant dans le zoo.
|
||||
- **Animal** : Entité biologique gérée par le joueur.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Classe abstraite ou interface commune.
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "string",
|
||||
"position": { "x": "int", "y": "int" },
|
||||
"active": "boolean"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A (Spécifique aux sous-types)
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Identification (Passif)
|
||||
**Description UX** : Reconnaître le type de personnage au premier coup d'œil.
|
||||
**Description UI** : Silhouette distincte, Code couleur, Badge/Nom au survol.
|
||||
**Emplacement** : Grille.
|
||||
**Intégration** : Tooltip.
|
||||
**Navigation** : Survol souris / Tap.
|
||||
**Événements** : `HOVER_CHARACTER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Silhouettes archétypales.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Joueur (Bleu), Bot (Rouge/Gris), Visiteur (Multicolore), Animal (Naturel).
|
||||
- **Textes** : Nom, Rôle.
|
||||
- **Formes** : N/A
|
||||
145
docs/specs/reproduction.md
Normal file
145
docs/specs/reproduction.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# Spécifications : Reproduction
|
||||
|
||||
## Conditions
|
||||
- **Proximité** : Deux animaux compatibles (même espèce, sexe opposé si géré, ou juste compatibilité) proches l'un de l'autre.
|
||||
- **Environnement** : Température et Biome idéaux.
|
||||
- **Nourriture** : Animaux bien nourris.
|
||||
- **Score de Reproduction** : Le zoo doit avoir un score suffisant pour favoriser les naissances.
|
||||
|
||||
## Résultat
|
||||
- **Naissance** : Apparition d'un nouveau bébé.
|
||||
- **Destination** : Va directement en Nurserie si place disponible, sinon doit être placé ou vendu immédiatement.
|
||||
- **Hérédité** : Le bébé hérite des caractéristiques des parents avec une part de mutation (Rareté/Couleur).
|
||||
|
||||
## Bonus
|
||||
- Les naissances augmentent l'attractivité du zoo.
|
||||
- Les naissances favorisent l'apparition d'autres naissances (cercle vertueux).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Logique serveur.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
| Parent A | Parent B | Enfant (Probabilités) |
|
||||
| :--- | :--- | :--- |
|
||||
| Rareté N | Rareté N | N (80%), N+1 (15%), N-1 (5%) |
|
||||
| Rareté N | Rareté N+1 | N (40%), N+1 (40%), N+2 (10%), N-1 (10%) |
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
**Condition** : T° doit être dans la plage "Idéale" (+/- 2°C).
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
**Condition** : Biome doit être "Parfait".
|
||||
|
||||
### Impact Saisons
|
||||
**Printemps** : +20% chance réussite.
|
||||
**Hiver** : -50% chance réussite (sauf animaux froids).
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
**Condition** : Faim < 20%.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Accouplement** : Tentative.
|
||||
* **Grossesse** : Délai avant naissance.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
if checkConditions(parentA, parentB):
|
||||
chance = baseChance + seasonBonus + zooReproScoreBonus
|
||||
if random() < chance:
|
||||
createBaby(parentA, parentB)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `REPRO_SUCCESS` | Succès | "Un couple attend un heureux événement !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Amour (Passif)
|
||||
**Description UX** : Deux animaux compatibles se rencontrent. Des cœurs apparaissent.
|
||||
**Description UI** : Particules Cœurs au-dessus des animaux. Ils se rapprochent.
|
||||
**Emplacement** : Case Zoo.
|
||||
**Intégration** : Animation comportementale.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `MATING_START`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `kiss.mp3` ou bruit doux.
|
||||
- **Graphiques** : Cœurs roses.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Cœurs qui montent.
|
||||
- **Couleurs** : Rose.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : Cœur.
|
||||
|
||||
### Naissance (Événement)
|
||||
**Description UX** : Un bébé apparaît (ou un œuf en nurserie). Notification joyeuse.
|
||||
**Description UI** : Popup "Carnet Rose".
|
||||
**Emplacement** : HUD.
|
||||
**Intégration** : Notification Toast.
|
||||
**Navigation** : Clic Notification -> Voir Bébé.
|
||||
**Événements** : `BIRTH`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Jingle Naissance.
|
||||
- **Sons** : `tada.mp3`.
|
||||
- **Graphiques** : Cigogne (icône).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Confettis.
|
||||
- **Couleurs** : Rose/Bleu.
|
||||
- **Textes** : "Bienvenue au nouveau [Espèce] !".
|
||||
- **Formes** : N/A
|
||||
117
docs/specs/score_reputation.md
Normal file
117
docs/specs/score_reputation.md
Normal file
@@ -0,0 +1,117 @@
|
||||
# Spécifications : Score de Réputation
|
||||
|
||||
## Définition
|
||||
Indicateur global de la qualité et du prestige du zoo. C'est le moteur de l'économie (Visiteurs).
|
||||
|
||||
## Composantes
|
||||
- **Valeur du Cheptel** : Somme des valeurs de rareté des animaux vivants.
|
||||
- **Diversité** : Bonus pour chaque espèce différente présente.
|
||||
- **Bien-être** : Bonus si le Score de Survie moyen est élevé.
|
||||
- **Esthétique/Aménagement** : Bonus pour les bâtiments améliorés.
|
||||
|
||||
## Malus
|
||||
- **Morts** : Chaque mort inflige une pénalité temporaire mais significative.
|
||||
- **Insatisfaction** : Visiteurs repartant mécontents (incidents non résolus).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Propriété de `Zoo`.
|
||||
`reputation_score: integer`
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Réputation | 0 |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Bonus** : +10 pts par naissance.
|
||||
|
||||
### Impact Mort
|
||||
**Malus** : -50 pts par mort (décroissance sur 24h).
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
C'est la métrique de base de l'attractivité.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Passage Niveau** : Notification.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
score = sum(animal.rarity * 10) + (uniqueSpecies * 50) + buildingsValue - deathPenalty
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Affichage Score (Permanent)
|
||||
**Description UX** : Le joueur connaît son niveau de prestige.
|
||||
**Description UI** : Étoiles ou Couronne dans le HUD avec barre de progression vers le niveau suivant.
|
||||
**Emplacement** : HUD Haut.
|
||||
**Intégration** : Fixe.
|
||||
**Navigation** : Survol -> Détail calcul.
|
||||
**Événements** : `SCORE_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `level_up_jingle.mp3`.
|
||||
- **Graphiques** : Icône Couronne.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Brillance quand augmente.
|
||||
- **Couleurs** : Or.
|
||||
- **Textes** : "Niveau 5 (4500 pts)".
|
||||
- **Formes** : Étoile.
|
||||
118
docs/specs/score_survie.md
Normal file
118
docs/specs/score_survie.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# Spécifications : Score de Survie
|
||||
|
||||
## Définition
|
||||
Indicateur de la santé et de l'adaptation des animaux dans le zoo.
|
||||
|
||||
## Calcul
|
||||
Moyenne des états de santé individuels de tous les animaux.
|
||||
`Santé_Animal = f(Faim, Adéquation_Température, Adéquation_Biome, Stress)`
|
||||
|
||||
## Impact
|
||||
- **Reproduction** : Un score de survie élevé est pré-requis pour la reproduction.
|
||||
- **Maladie** : Un score faible déclenche l'apparition de maladies et augmente la mortalité.
|
||||
- **Vente** : Influe sur la valeur perçue des animaux (un animal en bonne santé vaut plus cher).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Propriété de `Zoo`.
|
||||
`survival_score: float (0-100)`
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Survie | 100% |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Moyenne des adéquations T°.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Moyenne des adéquations Biome.
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
Seuil mini : 80% pour reproduire.
|
||||
|
||||
### Impact Mort
|
||||
Seuil critique : < 20% (Risque épidémie).
|
||||
|
||||
### Impact Nourriture
|
||||
Moyenne des Faims.
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
survivalScore = average(allAnimals.health)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `SURVIVAL_LOW` | Alerte | "Attention ! Le score de survie est dangereusement bas." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Monitoring Santé (Permanent)
|
||||
**Description UX** : Le joueur surveille la santé globale de son zoo.
|
||||
**Description UI** : Jauge Cœur ou Croix Verte. Rouge si critique.
|
||||
**Emplacement** : HUD Haut.
|
||||
**Intégration** : Fixe.
|
||||
**Navigation** : Survol -> Liste animaux en danger.
|
||||
**Événements** : `HEALTH_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `heartbeat.mp3` (si critique).
|
||||
- **Graphiques** : Icône Cœur.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Battement (Pulsation).
|
||||
- **Couleurs** : Vert -> Jaune -> Rouge.
|
||||
- **Textes** : "98%".
|
||||
- **Formes** : Cœur.
|
||||
119
docs/specs/site_generique.md
Normal file
119
docs/specs/site_generique.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# Spécifications : Site (Générique)
|
||||
|
||||
## Définition
|
||||
Un site est un lieu d'intérêt positionné sur la Carte du Monde.
|
||||
|
||||
## Types de sites
|
||||
1. **Zoo** : Espace de gestion d'un joueur ou d'un bot.
|
||||
2. **Ville** : Zone résidentielle générant des visiteurs.
|
||||
3. **Laboratoire** : Lieu de production d'animaux spéciaux/rares.
|
||||
|
||||
## Propriétés Communes
|
||||
- **Position** : Coordonnées fixes (x, y) sur la grille du monde.
|
||||
- **Nom** : Identifiant unique ou généré.
|
||||
- **Représentation** : Icône spécifique + Informations contextuelles (Offres, stats).
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "enum",
|
||||
"name": "string",
|
||||
"position": { "x": "int", "y": "int" }
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération procédurale ou création joueur.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Info-bulle (Consultation)
|
||||
**Description UX** : Survoler un site donne ses détails.
|
||||
**Description UI** : Tooltip avec Nom, Type, et Info clé (ex: Population pour Ville, Offre pour Zoo).
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Tooltip souris / Tap hold mobile.
|
||||
**Navigation** : Survol.
|
||||
**Événements** : `HOVER_SITE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `pop.mp3` léger.
|
||||
- **Graphiques** : Fond noir semi-transparent.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Fade in rapide.
|
||||
- **Couleurs** : Blanc sur Noir.
|
||||
- **Textes** : "Paris (1M hab.)".
|
||||
- **Formes** : Rectangle arrondi.
|
||||
134
docs/specs/tech_architecture.md
Normal file
134
docs/specs/tech_architecture.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# Spécifications Techniques : Architecture et Performance
|
||||
|
||||
## 1. Stack Technologique Recommandée
|
||||
|
||||
### Backend
|
||||
- **Langage** : Node.js (TypeScript) ou Go (pour la performance brute des workers).
|
||||
- **Framework** : NestJS (Node) ou Gin (Go).
|
||||
- **Base de Données** : PostgreSQL.
|
||||
- Utilisation intensive du type `JSONB` pour les données flexibles (états animaux, génétique).
|
||||
- Indexation GIN sur les champs JSONB souvent requêtés.
|
||||
|
||||
### Frontend
|
||||
- **Framework** : React ou Vue.js.
|
||||
- **État** : Zustand ou Pinia (léger et performant).
|
||||
- **Rendu Grille** : Canvas API (via PixiJS ou Konva) si > 100 éléments animés, sinon DOM optimisé (CSS Grid + Transforms).
|
||||
|
||||
### Infrastructure
|
||||
- **Cache** : Redis (pour les sessions, les compteurs temps réel et les files d'attente de jobs).
|
||||
- **Message Broker** : BullMQ (Redis) ou RabbitMQ pour les tâches asynchrones (morts, naissances, enchères).
|
||||
|
||||
---
|
||||
|
||||
## 2. Modélisation des Données (Hybride Relationnel / Document)
|
||||
|
||||
L'approche hybride permet de garder l'intégrité référentielle sur les entités (Zoo, User) tout en gardant la souplesse sur les attributs de gameplay.
|
||||
|
||||
### Schéma SQL Simplifié
|
||||
|
||||
```sql
|
||||
CREATE TABLE zoos (
|
||||
id UUID PRIMARY KEY,
|
||||
owner_id UUID NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
resources JSONB DEFAULT '{"coins": 200, "research": 0}',
|
||||
stats JSONB DEFAULT '{"reputation": 0, "survival": 100}',
|
||||
last_update TIMESTAMPTZ DEFAULT NOW() -- Clé pour le Lazy Update
|
||||
);
|
||||
|
||||
CREATE TABLE animals (
|
||||
id UUID PRIMARY KEY,
|
||||
zoo_id UUID REFERENCES zoos(id),
|
||||
type VARCHAR(50),
|
||||
birth_date TIMESTAMPTZ,
|
||||
state JSONB, -- { health, hunger, stress, ... }
|
||||
genetics JSONB, -- { color, rarity, parents... }
|
||||
position JSONB -- { x, y }
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Stratégie de Performance : "Lazy Updates"
|
||||
|
||||
Le calcul temps réel pour 1000 joueurs * 50 animaux est impossible à scaler naïvement.
|
||||
|
||||
### Principe
|
||||
Ne jamais mettre à jour la BDD à chaque seconde ("tick").
|
||||
Calculer l'état d'un zoo **uniquement quand c'est nécessaire** (lecture par le joueur ou interaction).
|
||||
|
||||
### Algorithme de Mise à Jour Différée (Lazy Update)
|
||||
|
||||
1. **État Stocké** : Le zoo est sauvegardé à `T0` avec `Faim = 10`.
|
||||
2. **Requête** : Le joueur se connecte à `T1` (2 heures plus tard).
|
||||
3. **Calcul à la Volée** :
|
||||
* `Delta_Temps = T1 - T0`.
|
||||
* `Faim_Actuelle = Faim_Initiale + (Vitesse_Faim * Delta_Temps)`.
|
||||
* Appliquer les seuils (si Faim > 100, déclencher Mort).
|
||||
4. **Persistance** : Sauvegarder le nouvel état à `T1`.
|
||||
5. **Réponse** : Envoyer l'état à jour au client.
|
||||
|
||||
### Exceptions (Workers)
|
||||
Certains événements doivent arriver même si le joueur est hors ligne (ex: Enchères, Morts impactant le marché).
|
||||
* Utiliser des **Cron Jobs** ou des **Delayed Jobs** (Redis) pour traiter ces événements spécifiques à leur heure d'échéance prévue.
|
||||
|
||||
---
|
||||
|
||||
## 4. API : Définition des Endpoints (REST)
|
||||
|
||||
### Core Loop (Jeu)
|
||||
- `GET /api/zoo/me` : Récupère l'état complet du zoo (déclenche le Lazy Update).
|
||||
- `POST /api/zoo/move` : Déplace un élément (Animal/Bâtiment).
|
||||
- Body: `{ "entity_id": "uuid", "x": 10, "y": 5 }`
|
||||
- `POST /api/zoo/feed` : Nourrit les animaux (Global ou Ciblé).
|
||||
|
||||
### Économie & Marché
|
||||
- `GET /api/market/auctions` : Liste les enchères actives (Filtres: Type, Rareté).
|
||||
- `POST /api/market/bid` : Placer une offre.
|
||||
- Body: `{ "auction_id": "uuid", "amount": 500 }`
|
||||
- `POST /api/market/sell` : Créer une enchère.
|
||||
|
||||
### Système
|
||||
- `POST /api/auth/login` : Authentification par clé.
|
||||
- `GET /api/config` : Récupère les tables statiques (Animaux, Coûts, Saisons) pour le cache client.
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Chargement (Feedback)
|
||||
**Description UX** : Le joueur attend le calcul du Lazy Update à la connexion.
|
||||
**Description UI** : Écran de chargement avec barre de progression ou animation (Animal qui marche).
|
||||
**Emplacement** : Plein écran (Démarrage).
|
||||
**Intégration** : Bloquant.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `APP_LOAD`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : Thème Principal.
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Logo Jeu.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Loader.
|
||||
- **Couleurs** : Thème Jeu.
|
||||
- **Textes** : "Calcul de la simulation...", "Rattrapage du temps...".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Erreur Connexion (Feedback)
|
||||
**Description UX** : Perte de connexion ou erreur API.
|
||||
**Description UI** : Toast ou Modal "Erreur Réseau". Bouton "Réessayer".
|
||||
**Emplacement** : Overlay.
|
||||
**Intégration** : Bloquant ou Non-bloquant.
|
||||
**Navigation** : Clic Réessayer.
|
||||
**Événements** : `NETWORK_ERROR`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `error.mp3`.
|
||||
- **Graphiques** : Icône Wifi barré.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Secousse.
|
||||
- **Couleurs** : Rouge.
|
||||
- **Textes** : "Connexion perdue".
|
||||
- **Formes** : N/A
|
||||
149
docs/specs/temperature.md
Normal file
149
docs/specs/temperature.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# Spécifications : Température
|
||||
|
||||
## Définition
|
||||
Paramètre environnemental lié au milieu (couleur) de la case.
|
||||
|
||||
## Impact
|
||||
- **Survie** : Chaque animal a une plage de température idéale.
|
||||
- **Trop Froid** : L'animal gèle (feedback givre/bleu). Risque de mort.
|
||||
- **Trop Chaud** : L'animal surchauffe (feedback vapeur/rouge). Risque de mort.
|
||||
- **Reproduction** : Une température idéale est requise pour la reproduction optimale.
|
||||
|
||||
## Modification
|
||||
- La température est intrinsèque à la case (liée au biome).
|
||||
- **Upgrade** : L'achat d'un "Changement de milieu (température choisie)" permet d'ajuster la température d'une case spécifique pour l'adapter à un animal.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Propriété de `Case`.
|
||||
`temperature: float`
|
||||
|
||||
### Caractéristiques Initiales
|
||||
Définie par le biome (voir `milieu.md`).
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A (C'est la définition même).
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
| Saison | Modificateur Global |
|
||||
| :--- | :--- |
|
||||
| Printemps | +0°C |
|
||||
| Été | +10°C |
|
||||
| Automne | -2°C |
|
||||
| Hiver | -15°C |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
| Cycle | Modificateur |
|
||||
| :--- | :--- |
|
||||
| Jour | +5°C (Midi) |
|
||||
| Nuit | -5°C (Minuit) |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Fenêtre Fertilité** : +/- 5°C autour de l'idéal de l'animal.
|
||||
|
||||
### Impact Mort
|
||||
**Seuil Critique** : +/- 20°C autour de l'idéal = Dégâts massifs.
|
||||
|
||||
### Impact Nourriture
|
||||
**Froid** : Augmente la consommation de nourriture (+20% par tranche de 5°C sous l'idéal).
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Canicule** : +10°C temporaire.
|
||||
* **Vague de Froid** : -10°C temporaire.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
**Régulateur Thermique (Case)** :
|
||||
| Niveau | Coût | Plage Réglage | Temps |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 1 | 200 | +/- 5°C | 0s |
|
||||
| 7 | 2000 | +/- 50°C | 0s |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
currentTemp = baseBiomeTemp + seasonMod + dayNightMod + caseRegulatorOffset
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `TEMP_CRITICAL` | Alerte | "Température critique sur une case !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Visualisation Thermique (Passif)
|
||||
**Description UX** : Le joueur voit la température de chaque case.
|
||||
**Description UI** : Mode "Vue Thermique" (Overlay). Cases froides = Bleu, Chaudes = Rouge.
|
||||
**Emplacement** : Bouton HUD "Filtres".
|
||||
**Intégration** : Overlay global.
|
||||
**Navigation** : Toggle On/Off.
|
||||
**Événements** : `TOGGLE_THERMAL_VIEW`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `switch.mp3`.
|
||||
- **Graphiques** : Overlay dégradé Bleu/Rouge semi-transparent.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Fade In/Out de l'overlay.
|
||||
- **Couleurs** : Bleu (#0000FF) -> Rouge (#FF0000).
|
||||
- **Textes** : "25°C" (sur chaque case).
|
||||
- **Formes** : N/A
|
||||
|
||||
### Feedback Critique (Alerte)
|
||||
**Description UX** : Une case est mortelle pour son occupant.
|
||||
**Description UI** : La case clignote ou a un bord rouge. L'animal tremble (froid) ou transpire (chaud).
|
||||
**Emplacement** : Case.
|
||||
**Intégration** : Immédiat.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `TEMP_ALERT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `shiver.mp3` (dents qui claquent) ou `pant.mp3`.
|
||||
- **Graphiques** : Particules Givre ou Vapeur.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Tremblement sprite.
|
||||
- **Couleurs** : Bleu Glace / Rouge Feu.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
107
docs/specs/vente_animal.md
Normal file
107
docs/specs/vente_animal.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Spécifications : Ventes d'Animaux (Général)
|
||||
|
||||
## Types de Ventes
|
||||
- **Aux Enchères** : Vers d'autres joueurs (prix potentiellement élevé).
|
||||
- **Libération (Vente rapide)** : Vente au "système" (prix bas fixe) pour faire de la place rapidement (si implémenté pour éviter la mort). *Note : Le cahier des charges privilégie le marché joueurs, la libération est une option de secours.*
|
||||
|
||||
## Contraintes
|
||||
- Un animal malade ou mourant ne peut pas être mis en vente.
|
||||
- Le transport (Camion) immobilise l'animal pendant la durée de la vente.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
N/A
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
N/A
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
**Prix Libération** : 10% de la valeur théorique de l'animal.
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Libération (Action)
|
||||
**Description UX** : Le joueur relâche un animal (vente système).
|
||||
**Description UI** : Bouton "Libérer" (souvent rouge ou discret pour éviter les erreurs). Confirmation "Êtes-vous sûr ? Vous gagnerez peu (X pièces)".
|
||||
**Emplacement** : Panneau Animal.
|
||||
**Intégration** : Option secondaire.
|
||||
**Navigation** : Clic Libérer -> Confirmer.
|
||||
**Événements** : `RELEASE_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `bird_fly_away.mp3` (bruit de nature positif).
|
||||
- **Graphiques** : Icône Cage ouverte.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Animal s'estompe ou court hors de l'écran.
|
||||
- **Couleurs** : Vert (Nature).
|
||||
- **Textes** : "Libéré !".
|
||||
- **Formes** : N/A
|
||||
128
docs/specs/vente_enchere_animal.md
Normal file
128
docs/specs/vente_enchere_animal.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Spécifications : Vente aux Enchères d'Animaux
|
||||
|
||||
## Définition
|
||||
Processus de vente pour les animaux adultes.
|
||||
|
||||
## Spécificités
|
||||
- **Valeur Variable** : Dépend de la rareté, mais aussi de l'âge et du "Score de Reproduction" restant. Un vieil animal vaut moins cher.
|
||||
- **Résistance** : Les adultes supportent mieux la période de mise en vente que les bébés.
|
||||
|
||||
## Processus
|
||||
Identique à la vente de bébés, mais avec des tolérances plus grandes sur les délais avant impact négatif sur la santé de l'animal.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
Identique à `vente_enchere_bebe.md`.
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Action joueur.
|
||||
|
||||
### Conditions de Disparition
|
||||
Vente ou Expiration.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
**Risque** : Si `status == expired` et non récupéré sous 24h -> Mort.
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Mise en Vente (Action)
|
||||
**Description UX** : Le joueur sélectionne un animal adulte sur la grille et choisit "Vendre".
|
||||
**Description UI** : Bouton contextuel "Vendre" sur le panneau animal. Ouvre la **Bottom Sheet** de configuration (Prix, Durée).
|
||||
**Emplacement** : Panneau Animal -> Modal Vente.
|
||||
**Intégration** : Contextuel.
|
||||
**Navigation** : Clic Animal -> Vendre -> Config -> Valider.
|
||||
**Événements** : `CREATE_AUCTION_ADULT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `cash_register_open.mp3`.
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : Portrait Animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Animal disparaît de la grille (part en zone de vente).
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "Mise à prix".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Retour Invendu (Action)
|
||||
**Description UX** : L'enchère est finie sans acheteur. Le joueur doit récupérer l'animal.
|
||||
**Description UI** : Notification "Vente expirée". Bouton "Récupérer" dans le menu Ventes.
|
||||
**Emplacement** : Menu Ventes -> Accueil Animaux.
|
||||
**Intégration** : Action requise.
|
||||
**Navigation** : Clic Récupérer -> Choix Case (si Accueil plein).
|
||||
**Événements** : `RECLAIM_ANIMAL`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `sad_trombone.mp3` (échec).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Retour visuel de l'animal.
|
||||
- **Couleurs** : Gris (Désactivé).
|
||||
- **Textes** : "Invendu".
|
||||
- **Formes** : N/A
|
||||
153
docs/specs/vente_enchere_bebe.md
Normal file
153
docs/specs/vente_enchere_bebe.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Spécifications : Vente aux Enchères de Bébés
|
||||
|
||||
## Définition
|
||||
Processus de vente spécifique pour les bébés animaux nés dans le zoo.
|
||||
|
||||
## Spécificités
|
||||
- **Forte Valeur** : Les bébés ont souvent une valeur supérieure aux adultes car ils ont tout leur potentiel de vie et de reproduction devant eux.
|
||||
- **Fragilité** : Un bébé mis en vente doit être vendu rapidement.
|
||||
- **Risque** : Si l'enchère échoue ou dure trop longtemps sans acheteur, le bébé risque de mourir dans le camion ou la zone de vente (faim/froid).
|
||||
|
||||
## Processus
|
||||
1. Sélection du bébé en Nurserie ou sur la grille.
|
||||
2. Glisser-déposer vers la zone Camion.
|
||||
3. Définition du prix de départ.
|
||||
4. Apparition sur la Carte du Monde.
|
||||
5. Si vendu : Transfert après délai de 10 min.
|
||||
6. Si invendu : Retour nécessaire en Nurserie ou Mort.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"seller_id": "uuid",
|
||||
"animal_id": "uuid",
|
||||
"start_price": "int",
|
||||
"current_bid": "int",
|
||||
"highest_bidder": "uuid | null",
|
||||
"end_time": "timestamp",
|
||||
"status": "active | sold | expired"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur |
|
||||
| :--- | :--- |
|
||||
| Durée Enchère | 1h - 24h (au choix) |
|
||||
| Délai Validation | 10 min (fixe) |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Action joueur.
|
||||
|
||||
### Conditions de Disparition
|
||||
Vente ou Expiration.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
**Risque** : Si `status == expired` et non récupéré sous 1h -> Mort du bébé.
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
|
||||
### Impact Valeur
|
||||
**Dépréciation** : Aucune (c'est une enchère).
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Nouvelle Enchère** : Notification.
|
||||
* **Surenchère** : Notification vendeur.
|
||||
* **Vente Terminée** : Notification.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `AUCTION_SOLD` | Succès | "Bébé vendu !" |
|
||||
| `AUCTION_FAIL` | Alerte | "Enchère terminée sans acheteur. Récupérez le bébé !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Mise en Vente (Action)
|
||||
**Description UX** : Le joueur glisse un bébé depuis la nurserie vers le camion.
|
||||
**Description UI** : **Bottom Sheet** de configuration "Vendre ce bébé". Choix du prix de départ et de la durée.
|
||||
**Emplacement** : Zoo -> Modal Vente.
|
||||
**Intégration** : Formulaire.
|
||||
**Navigation** : Drag -> Config -> Valider.
|
||||
**Événements** : `CREATE_AUCTION`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `cash_register_open.mp3`.
|
||||
- **Graphiques** : Icône Bourse/Pièce.
|
||||
- **Images** : Portrait Bébé.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Or.
|
||||
- **Textes** : "Prix de départ", "Durée".
|
||||
- **Formes** : Champs de saisie.
|
||||
|
||||
### Suivi Vente (Passif)
|
||||
**Description UX** : Le joueur voit son offre active sur son propre zoo (Carte Monde) ou dans son menu "Ventes".
|
||||
**Description UI** : Liste "Mes Ventes". Compteur d'enchères reçues.
|
||||
**Emplacement** : Menu Gestion -> Ventes.
|
||||
**Intégration** : Liste.
|
||||
**Navigation** : Menu -> Ventes.
|
||||
**Événements** : `OPEN_MY_SALES`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `notification.mp3` (si offre reçue).
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "Meilleure offre : X".
|
||||
- **Formes** : N/A
|
||||
123
docs/specs/ville.md
Normal file
123
docs/specs/ville.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Spécifications : Ville (Site)
|
||||
|
||||
## Définition
|
||||
Une ville est une entité sur la Carte du Monde qui génère le flux de visiteurs vers les zoos.
|
||||
|
||||
## Propriétés
|
||||
- **Nom** : Nom de la ville.
|
||||
- **Population** : Nombre de visiteurs potentiels maximum.
|
||||
- **Icône** : 🏙️
|
||||
|
||||
## Mécanique d'Attraction
|
||||
- Les visiteurs partent de la ville pour aller vers les zoos.
|
||||
- **Facteur de Distance** : Plus un zoo est proche d'une ville, plus il attire de visiteurs.
|
||||
- **Facteur d'Attractivité** : La valeur et la diversité du zoo influencent le choix des visiteurs.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "city",
|
||||
"name": "string",
|
||||
"population": "integer",
|
||||
"wealth_factor": "float (0.5 - 2.0)"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Moyenne |
|
||||
| :--- | :--- |
|
||||
| Population | 10,000 - 1,000,000 |
|
||||
| Richesse | 1.0 |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Génération carte.
|
||||
|
||||
### Conditions de Disparition
|
||||
N/A
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Source du flux. `Flux = Pop * (AttractivitéZoo / Distance²)`.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
**Facteur Richesse** : Multiplie le budget des visiteurs issus de cette ville.
|
||||
|
||||
### Trajet Visiteurs
|
||||
Point de départ.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
N/A
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Visualisation Taille (Passif)
|
||||
**Description UX** : Distinguer les grandes villes des petites.
|
||||
**Description UI** : Taille de l'icône proportionnelle à la population. Gratte-ciels vs Maisons.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Sprite.
|
||||
**Navigation** : N/A
|
||||
**Événements** : N/A
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Sprites Ville (Petit, Moyen, Grand).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : Gris/Bleu.
|
||||
- **Textes** : Nom Ville.
|
||||
- **Formes** : N/A
|
||||
228
docs/specs/visiteur.md
Normal file
228
docs/specs/visiteur.md
Normal file
@@ -0,0 +1,228 @@
|
||||
# Spécifications : Visiteur
|
||||
|
||||
## Définition
|
||||
Personnage non-joueur (PNJ) qui visite le zoo.
|
||||
|
||||
## Comportement
|
||||
- **Apparition** : Arrive par la Billeterie (venant d'une Ville).
|
||||
- **Déplacement** : Se promène sur la grille, attiré par les animaux et boutiques.
|
||||
- **Durée** : Reste jusqu'à 1 journée (variable selon attractivité).
|
||||
- **Dépense** : Paie l'entrée + achats en boutique.
|
||||
|
||||
## Incidents et Exigences
|
||||
- **Besoins** : Soif, Repos (banc), Propreté (poubelle), Envie de photo.
|
||||
- **Feedback** : Bulle d'icône au-dessus du visiteur.
|
||||
- **Résolution** : Clic du joueur sur la bulle.
|
||||
- **Conséquence** :
|
||||
- Résolu : Gain de pièces + Attractivité.
|
||||
- Ignoré : Perte d'attractivité, départ anticipé.
|
||||
- **Contexte** : Apparaissent plus souvent pendant les temps d'attente (camion/enchère).
|
||||
|
||||
## Types
|
||||
- **Standard**
|
||||
- **Luxe** (8%) : Paie plus cher, plus exigeant.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid_v4",
|
||||
"type": "enum ('standard', 'vip')",
|
||||
"entry_time": "timestamp",
|
||||
"max_duration": "integer (seconds)",
|
||||
"budget": "integer",
|
||||
"satisfaction": "float (0-100)",
|
||||
"needs": {
|
||||
"thirst": "float (0-100)",
|
||||
"rest": "float (0-100)",
|
||||
"toilet": "float (0-100)"
|
||||
},
|
||||
"current_target": { "x": "int", "y": "int" },
|
||||
"position": { "x": "int", "y": "int" }
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Standard | Luxe (VIP) |
|
||||
| :--- | :--- | :--- |
|
||||
| Budget | 50 | 200 |
|
||||
| Durée Max | 300s (5 min) | 600s (10 min) |
|
||||
| Satisfaction | 50 | 50 |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
| Facteur | Taux |
|
||||
| :--- | :--- |
|
||||
| Attractivité Zoo | `log(Attractivité) * FacteurVille` |
|
||||
| Heure | Pic à 14h, Nul à 22h |
|
||||
|
||||
### Conditions de Disparition
|
||||
| Cause | Seuil |
|
||||
| :--- | :--- |
|
||||
| Temps écoulé | Durée > Max Duration |
|
||||
| Insatisfaction | Satisfaction <= 0 |
|
||||
| Budget épuisé | Budget <= 0 (Départ normal) |
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
| Météo | Effet |
|
||||
| :--- | :--- |
|
||||
| Canicule | Soif augmente 2x plus vite |
|
||||
| Pluie | Satisfaction baisse plus vite (sauf si abri) |
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
| Saison | Affluence (Multiplicateur) |
|
||||
| :--- | :--- |
|
||||
| Printemps | x1.0 |
|
||||
| Été | x1.5 (Vacances) |
|
||||
| Automne | x0.8 |
|
||||
| Hiver | x0.6 |
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
| Heure | Flux Entrant |
|
||||
| :--- | :--- |
|
||||
| 08h-10h | Faible |
|
||||
| 10h-16h | Fort |
|
||||
| 16h-18h | Décroissant |
|
||||
| > 18h | Nul |
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
N/A
|
||||
|
||||
### Impact Mort
|
||||
| Événement | Effet Satisfaction |
|
||||
| :--- | :--- |
|
||||
| Voir animal mort | -50 (Départ quasi immédiat) |
|
||||
|
||||
### Impact Nourriture
|
||||
N/A (Concerne les animaux, ici c'est "Soif/Faim visiteur" -> Boutiques)
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
| Cible | Poids Attraction |
|
||||
| :--- | :--- |
|
||||
| Animal Légendaire | 100 |
|
||||
| Animal Commun | 10 |
|
||||
| Boutique | 50 (si besoin > 50) |
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
| Paramètre | Valeur |
|
||||
| :--- | :--- |
|
||||
| Vitesse Marche | 1 case / 2 sec |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
| Action | Dépense |
|
||||
| :--- | :--- |
|
||||
| Ticket Entrée | 10 (Standard) / 50 (VIP) |
|
||||
| Boutique Souvenir | 15-30 |
|
||||
| Boisson | 5 |
|
||||
|
||||
### Trajet Visiteurs
|
||||
**Algorithme** : `Weighted Random Walk` vers les points d'intérêt (POI) avec decay sur la distance.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Incident (Bulle)** : Apparition aléatoire (probabilité augmentée si attente joueur).
|
||||
* **Achat** : Interaction avec boutique.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateVisitor(visitor):
|
||||
visitor.satisfaction -= decayRate
|
||||
visitor.needs.thirst += 1
|
||||
|
||||
if visitor.needs.thirst > 80:
|
||||
target = findNearestShop()
|
||||
if not target:
|
||||
visitor.satisfaction -= 5 (Frustration)
|
||||
spawnIncident("Soif")
|
||||
|
||||
if visitor.satisfaction <= 0:
|
||||
leaveZoo(visitor)
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `VISITOR_ANGRY` | Info | "Un visiteur est parti mécontent." |
|
||||
| `VISITOR_HAPPY` | Info | "Un visiteur a adoré le zoo !" |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Visite (Passif)
|
||||
**Description UX** : Le visiteur entre, marche, regarde les animaux, achète, repart.
|
||||
**Description UI** : Petit sprite humain. Vêtements colorés.
|
||||
**Emplacement** : Grille Zoo.
|
||||
**Intégration** : Foule.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `VISITOR_WALK`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : Pas sur l'herbe/béton.
|
||||
- **Graphiques** : Sprites variés (H/F/Enfant).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Marche, Regarde (tourne la tête), Prend photo (flash).
|
||||
- **Couleurs** : Aléatoires.
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
|
||||
### Incident / Besoin (Action)
|
||||
**Description UX** : Une bulle apparaît au-dessus d'un visiteur (ex: Soif, Perdu, Envie pipi). Le joueur clique pour résoudre (ex: Indiquer toilettes, Donner eau).
|
||||
**Description UI** : Bulle blanche avec icône noire. Clignote si urgent.
|
||||
**Emplacement** : Au-dessus du sprite visiteur.
|
||||
**Intégration** : Overlay World Space.
|
||||
**Navigation** : Clic Bulle -> Résolution (Animation + Gain).
|
||||
**Événements** : `INCIDENT_SPAWN`, `INCIDENT_SOLVE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `bubble_pop.mp3` (apparition), `coin_collect.mp3` (résolution). **Design ASMR** : Son satisfaisant et tactile ("Pop" organique).
|
||||
- **Graphiques** : Icônes (Goutte d'eau, Point interrogation, Appareil photo).
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Bulle qui pop. Visiteur qui sourit après résolution.
|
||||
- **Couleurs** : Bulle Blanche/Rouge (Urgent).
|
||||
- **Textes** : "Merci !" (flottant).
|
||||
- **Formes** : Bulle BD.
|
||||
|
||||
### Départ (Passif)
|
||||
**Description UX** : Le visiteur quitte le zoo.
|
||||
**Description UI** : Marche vers la sortie et disparaît (Fade out).
|
||||
**Emplacement** : Billeterie.
|
||||
**Intégration** : Fin cycle.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `VISITOR_EXIT`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : N/A
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Fade out.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
153
docs/specs/zoo.md
Normal file
153
docs/specs/zoo.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Spécifications : Zoo (Site)
|
||||
|
||||
## Définition
|
||||
Représentation d'un zoo (joueur ou bot) sur la Carte du Monde.
|
||||
|
||||
## Affichage
|
||||
- **Nom du zoo**
|
||||
- **Icône** : 🏠
|
||||
- **Slot d'offre** :
|
||||
- Pour les autres zoos : Affiche l'œuf/bébé/animal en vente (Type + Prix).
|
||||
- Pour le zoo du joueur : Masqué (pas d'offre visible pour soi-même).
|
||||
- **Indicateurs (Bots)** : Pièces disponibles, Niveau de parcelle.
|
||||
|
||||
## Indicateurs de Performance (Cases dédiées sous le zoo)
|
||||
1. **Score d'Attractivité** : Influence la venue des visiteurs.
|
||||
2. **Score de Reproduction** : Influence la qualité des naissances.
|
||||
3. **Case de Vente** : Offre active visible par les autres joueurs.
|
||||
|
||||
## Interaction
|
||||
- **Achat** : Glisser l'offre du zoo vers le camion du joueur.
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "zoo",
|
||||
"owner_id": "uuid",
|
||||
"scores": {
|
||||
"attractiveness": "int",
|
||||
"reproduction": "int"
|
||||
},
|
||||
"current_offer": { "animal_id": "uuid", "price": "int" }
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale |
|
||||
| :--- | :--- |
|
||||
| Attractivité | 0 |
|
||||
| Reproduction | 0 |
|
||||
|
||||
### Scores Initiaux
|
||||
Voir ci-dessus.
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Création compte.
|
||||
|
||||
### Conditions de Disparition
|
||||
Suppression compte.
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
N/A
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
N/A
|
||||
|
||||
### Impact Saisons
|
||||
N/A
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
Score visible publiquement.
|
||||
|
||||
### Impact Mort
|
||||
N/A
|
||||
|
||||
### Impact Nourriture
|
||||
N/A
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
Score visible publiquement.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
N/A
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
Destination possible.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Nouvelle Offre** : Mise en vente.
|
||||
* **Vente** : Offre achetée.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
N/A
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
N/A
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Visualisation Offre (Passif)
|
||||
**Description UX** : Voir ce que vend un autre joueur.
|
||||
**Description UI** : Une "bulle" ou un "panneau" accroché sous l'icône du zoo. Affiche l'animal (sprite) et le prix.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : World Space UI.
|
||||
**Navigation** : N/A
|
||||
**Événements** : `OFFER_UPDATE`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : N/A
|
||||
- **Graphiques** : Cadre Offre.
|
||||
- **Images** : Sprite Animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Prix qui clignote si bas.
|
||||
- **Couleurs** : Or (Prix).
|
||||
- **Textes** : "500".
|
||||
- **Formes** : Bulle.
|
||||
|
||||
### Interaction Achat (Action)
|
||||
**Description UX** : Acheter l'animal.
|
||||
**Description UI** : Drag de l'offre vers le camion (en bas de l'écran ou sur la carte).
|
||||
**Alternative** : Tap Offre -> Tap Camion.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Drag & Drop.
|
||||
**Navigation** : Drag -> Drop.
|
||||
**Événements** : `DRAG_OFFER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `pickup.mp3`.
|
||||
- **Graphiques** : Fantôme offre sous curseur.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : N/A
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
Reference in New Issue
Block a user