Files
builazoo/docs/specs/carte_monde.md
2026-03-05 04:01:29 +01:00

659 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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" } ],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### 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
**Score Exploration** : 0% (Carte dévoilée).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Unique (Singleton serveur).
### Conditions de Disparition
Jamais.
### Hérédité
**Cartographie** : Les zones découvertes restent visibles après un reset (Connaissance acquise).
## 3. Impacts Environnementaux
### Impact Température
**Météo Globale** : Nuages, Pluie ou Neige visibles sur la carte (Effet visuel + Gameplay).
### Impact Milieu (Biome)
**Diversité** : Les biomes influencent le type de zoo bot (ex: Zoo Polaire au Nord, Zoo Tropical à l'Équateur).
### Impact Saisons
**Visuel** : La carte change de teinte (Blanc en Hiver, Orange en Automne, Vert vif au Printemps).
### Impact Heure / Jour-Nuit
**Cycle Jour/Nuit** : Assombrissement global. Les villes et zoos s'allument (Pixel Art lumineux).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Migration** : En saison des amours, des troupeaux sauvages (décoratifs) migrent sur la carte.
### Impact Mort
**Cimetière des Éléphants** : Lieu légendaire caché (Easter Egg) donnant un bonus si découvert.
### Impact Nourriture
**Ressources** : Les villes produisent de la nourriture (Champs autour des villes).
### Impact Attractivité (Visiteurs/Animaux)
**Rayonnement** : Un zoo très attractif (> 10k visiteurs) émet un halo doré visible de loin.
### Impact Valeur
**Économie** : Les prix du marché fluctuent selon l'offre globale (Loi de l'offre et la demande simulée).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Voyage Rapide** : Coût en pièces pour téléportation instantanée (si module "Héliport" débloqué).
### Dépenses (Boutiques/Visiteurs)
**Péages** : Taxe de passage sur certaines routes commerciales (1% valeur cargaison).
### Trajet Visiteurs
Calcul des distances Ville -> Zoo pour l'attractivité. Les visiteurs prennent le chemin le plus court.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Spawn Bot** : Apparition nouveau zoo bot.
* **Spawn Truck** : Camion visible.
* **Embouteillage** : Ralentissement sur les routes principales.
## 7. Progression
### Tableau des Upgrades
Voir `agrandissement_carte.md`.
## 8. Logique et Interfaces
### Pseudo-code Impacts
```javascript
function updateWorldMap(map, deltaTime):
for truck in map.trucks:
moveTruck(truck, deltaTime)
if hasArrived(truck):
processTransaction(truck)
updateWeather(map)
updateDayNightCycle(map)
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `MAP_EVENT` | Info | "Un événement météo touche la région Nord." |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 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** : Nuages dynamiques (shader).
- **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** : Zoom-out via upgrade carte ; au clic sur une zone masquée, afficher un tooltip “Zone non explorée”.
**Événements** : `FOG_HOVER`, `FOG_CLICK_BLOCKED`
#### Assets
- **Musiques** : `ambience_fog_soft.mp3` (optionnel, très discret).
- **Sons** : `fog_whoosh.mp3` (au reveal), `ui_denied.mp3` (clic zone bloquée).
- **Graphiques** : Texture Nuages.
- **Images** : Masque alpha (bords flous).
- **Vidéos** : Effet de brume (particules).
- **Animations** : Nuages qui dérivent lentement.
- **Couleurs** : Blanc/Gris.
- **Textes** : "Zone Inexplorée".
- **Formes** : Zone non cliquable.
## Définition
| Champ | Valeur |
|---|---|
| Concept | “Carte du monde” : vue multijoueur/économie, affichant sites (zoos, villes, labos) et camions en transit. |
| Rôle | Permettre lachat/vente via transport, visualiser la dynamique (flux, météo, jour/nuit) et lexploration (brouillard). |
| Portée | Singleton logique (serveur), rendu client par zooms et marqueurs, sans pan manuel si règle active. |
| Contrainte | Pas de cache/mémorisation des flux : distances/choix calculés à la volée ; pas dalternative HTTP/analytics ; interaction zone masquée => blocage explicite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir carte monde | bouton UI | player | écran monde | charge sites visibles | Event `OPEN_WORLD_MAP` |
| Résoudre visibilité | upgrade zoom | rayon | sites visibles | dépend upgrade carte | Event `WORLD_VISIBILITY_UPDATED` |
| Afficher sites | rendu | sites | markers | z_index stable | Event `WORLD_SITES_RENDERED` |
| Suivre camions | tick lazy | dt | pos camions | interpolation | Event `WORLD_TRUCKS_UPDATED` |
| Bloquer zone inexplorée | clic | coord | tooltip | pas de reveal gratuit | Event `FOG_CLICK_BLOCKED` |
| Délivrer cargo | camion arrive | cargo | dépôt zoo | adultes→accueil, œufs/bébés→nurserie | Event `DELIVERY_COMPLETE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Globe + pins |
| Couleur dominante | Désaturé (fond) + accents (pins) |
| Variantes | `icon_world_map.png`, `icon_pin_site.png` |
| États | normal, fogged, event_weather |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Clic site | Consultation | visible | clic marker | panneau site | `ZONE_NOT_EXPLORED` |
| Achat offre | Action | fonds + camion idle | drag offre→camion | mission | `TRUCK_BUSY`, `NOT_ENOUGH_COINS` |
| Zoom-out | Navigation | upgrade ok | bouton/gesture | rayon ↑ | `UPGRADE_REQUIRED` |
## Personnages contextuels (événements & interaction)
La carte du monde affiche des personnages contextuels selon le type de site sélectionné et les événements globaux.
### Sites et personnages
- **Ville** : maire (`maire.md`) — événements de ville, flux visiteurs, relation/jumelage.
- **Laboratoire** : laborantin (`laborantin.md`) — offres rares, services, alertes.
- **Zoo joueur** : joueur/portrait (`joueur.md`, `avatar_joueur.md`) — identité, indicateurs, interactions sociales.
- **Zoo bot** : bot (`bot.md`) — profil de stratégie et indicateurs.
### Déclencheurs (exemples)
| Event / Action | Condition | Personnage | Effet UI |
|---|---|---|---|
| `OPEN_WORLD_MAP` | ouverture écran | (contexte) | personnage de contexte selon dernier site sélectionné |
| clic site `city` | sélection ville | maire | panneau ville + événements |
| clic site `lab` | sélection labo | laborantin | panneau labo + offres/services |
| clic site `zoo` (autre joueur) | sélection zoo | joueur | panneau identité + actions permises |
| `ZONE_NOT_EXPLORED` | fog | (contexte) | message explicite (gating) |
### Skins & thèmes
Les portraits/mascottes suivent `theme.md`. Les mini-avatars des joueurs suivent leurs skins (si le profil est accessible) via les règles de `avatar_joueur.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | string | `world_map` | DB | singleton |
| `width` | int | 200 | DB | très grand |
| `height` | int | 200 | DB | - |
| `sites[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `sites[].type` | enum | `city` | DB | `zoo/city/lab` |
| `sites[].pos.x` | int | 40 | DB | grid |
| `sites[].pos.y` | int | 70 | DB | grid |
| `trucks[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].pos.x` | float | 40.2 | calcul | monde |
| `trucks[].pos.y` | float | 69.8 | calcul | monde |
| `trucks[].target` | uuid_v4 | `uuid_v4` | DB | site |
| `fog.revealed_radius` | float | 500 | config | km simulé |
| `weather.global` | enum | `rain` | calcul | rendu |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon visible | 500 | km | simulé |
| Nb villes | 10 | count | départ |
| Nb labos | 2 | count | départ |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Exploration | 0 | 0..100 | fog |
| Trafic camions | 0 | 0..∞ | routes visibles |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | serveur | seed | sites init | singleton |
| Exploration | upgrade | zoom | reveal | blocage zones |
| Événements | météo | saison | overlays | observables |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Démarrage | true | est | carte disponible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | jamais |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Cartographie | Oui | zones découvertes persistent |
| Routes “usuelles” | Oui | visibles si trafic haut |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Météo globale | visuel + mod vitesse | pluie/neige |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Montagne | coût traversée + | camions |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | teinte blanche | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | lumières villes/zoos | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Migration (décor) | 0 | purement visuel |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Easter egg | bonus | découverte |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Villes produisent | stock + | marchés |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Halo zoo attractif | visuel | monde | signal |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Marché global | prix ± | offre/demande |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Embouteillage | vitesse - | event |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offres bébés | compteur + | listings |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offres animaux | compteur + | listings |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Zoom upgrade | visibilité + | agrandissement carte |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Refresh offers | TTL 24h | remplacement |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Flux ville→zoo | distance | calcul |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Péages | 1% cargaison | coins | routes |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 1 | coins | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Voyage rapide | 100 | coins | si héliport |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | attractivité | flux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Enclos | visite | path |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Boutique | besoins | achats |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Sortie | fin | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_WORLD_MAP` | UI | - | écran |
| `MAP_EVENT` | météo | region | overlay |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOG_HOVER` | hover | tooltip |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_TRUCKS_UPDATED` | tick | positions |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | flux |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_NOT_EXPLORED` | clic | denied |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_VISIBILITY_UPDATED` | upgrade | reveal |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 1000 | zoom + | rayon |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateWorldMap` | map, dt | map | move trucks |
| `canReveal` | upgrade | bool | fog |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog |
| `UPGRADE_REQUIRED` | Warning | "Amélioration requise." | zoom |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Lire le marché | choisir offres | densité | compteurs + filtres |
| Acheter | déclencher camion | drag | drag direct vers camion |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Pins sites | zoo/city/lab | hover/selected |
| Fog mask | nuages | revealed/hidden |
| Compteurs | offres | live |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Plein écran | centre | carte monde |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | transport | missions |
| `ville.md` | flux | visiteurs |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | bouton carte monde | écran |
| Retour | bouton zoo | ferme |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_WORLD_MAP` | clic | open |
| `FOG_CLICK_BLOCKED` | clic fog | tooltip |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `world_map_travel_loop.mp3` | carte monde | loop | aventure |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `fog_whoosh.mp3` | reveal | bas |
| `ui_denied.mp3` | blocked | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `world_pins_atlas.png` | pins | lisible |
| `fog_clouds.png` | fog | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `world_biomes_blur.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `clouds_shader.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| déplacement camions | tick | continu |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `world_desat` | #8A8A8A | fond |
| `world_pin_gold` | #D4AF37 | halo |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `world.fog` | Zone inexplorée | Unexplored zone |
| `world.back` | Retour zoo | Back to zoo |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Pin | goutte | site |