# 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. ## Personnage contextuel (événements & interaction) Voir `maire.md`. ### Affichage Le maire s’affiche lorsque : - la ville est **actionnée** (sélection/clic ville, ouverture panneau ville) ; - un **événement** de ville survient (festival, grève, bonus économique, `CITY_EVENT`). ### Déclencheurs (exemples) | Event | Condition | Effet UI personnage | |---|---|---| | sélection ville | clic icône ville | portrait + synthèse (population, richesse, flux) | | `CITY_EVENT` | événement actif | bulle “Événement en cours” + impacts chiffrés | ### Skins & thèmes Portrait et accessoires suivent `theme.md` ; variantes “ville” possibles via `inventaire_skins.md`. # 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)", "iso_x": "integer", "iso_y": "integer", "z_index": "integer" } ``` ### Caractéristiques Initiales | Caractéristique | Valeur Moyenne | | :--- | :--- | | Population | 10,000 - 1,000,000 | | Richesse | 1.0 | ### Scores Initiaux **Niveau de Bonheur** : 50% (Influence la fréquence des visites). ## 2. Cycles de Vie et Apparition ### Conditions d'Apparition Génération carte. ### Conditions de Disparition **Désastre** : Ville détruite (Event rare "Météorite" ou "Crise Éco"). ### Hérédité **Jumelage** : Bonus permanent de flux (+5%) si relation max atteinte avec une ville. ## 3. Impacts Environnementaux ### Impact Température **Ilot de chaleur** : La ville est toujours +2°C par rapport à la campagne environnante. ### Impact Milieu (Biome) **Architecture** : Adaptée au biome (Igloos en Toundra, Tentes en Désert, Gratte-ciels en Plaine). ### Impact Saisons **Festivals** : Event saisonnier en ville (+Visiteurs pendant 24h). - Été : Carnaval. - Hiver : Marché de Noël. ### Impact Heure / Jour-Nuit **Lumières** : La ville brille la nuit (Pollution lumineuse visible). ## 4. Impacts Biologiques et Sociaux ### Impact Reproduction **Baby Boom** : Augmente la population de la ville (+Flux) pendant 1 semaine. ### Impact Mort **Épidémie** : Baisse population temporaire (-Flux). ### Impact Nourriture **Marché** : La ville vend de la nourriture au joueur (Source d'approvisionnement). ### Impact Attractivité (Visiteurs/Animaux) Source du flux. `Flux = Pop * (AttractivitéZoo / Distance²)`. ### Impact Valeur **PIB** : Influence le budget des visiteurs (Richesse). Une ville riche envoie des VIP. ## 5. Impacts Logistiques et Économiques ### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) **Trafic** : Ralentit les camions traversant la ville aux heures de pointe (8h-9h, 17h-18h). ### Dépenses (Boutiques/Visiteurs) **Facteur Richesse** : Multiplie le budget des visiteurs issus de cette ville. ### Trajet Visiteurs Point de départ. Les visiteurs arrivent en bus/voiture depuis la ville. ## 6. Événements ### Événements du Jeu / Carte / Zoo / Ville / Visiteur * **Fête Nationale** : Flux x2. * **Grève** : Flux / 2. ## 7. Progression ### Tableau des Upgrades *Note : Campagnes Marketing ciblées.* | Niveau Campagne | Coût | Effet | | :--- | :--- | :--- | | 1 (Panneaux) | 500 | +5% Flux | | 2 (Radio) | 1500 | +10% Flux | | 3 (TV) | 5000 | +20% Flux | ## 8. Logique et Interfaces ### Pseudo-code Impacts ```javascript function calculateVisitorFlow(city, zoo): distance = getDistance(city, zoo) baseFlow = city.population * (zoo.attractiveness / (distance * distance)) if isPeakHour(): baseFlow *= 1.5 if city.hasEvent(): baseFlow *= 2.0 return baseFlow ``` ### Messages d'Infos / Alerte | ID | Niveau | Message | | :--- | :--- | :--- | | `CITY_EVENT` | Info | "C'est la fête à [NomVille] ! Attendez-vous à du monde." | # 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) ### 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** : Zoom sur la carte. **Événements** : `MAP_ZOOM`. #### Assets - **Musiques** : Ambiance urbaine (klaxons lointains, vent). - **Sons** : Bruit de trafic faible. - **Graphiques** : Sprites Ville (Petit, Moyen, Grand). - **Images** : Silhouette Skyline. - **Vidéos** : Lumières des fenêtres qui s'allument la nuit (Pixel Art animé). - **Animations** : Fumée des cheminées. - **Couleurs** : Gris/Bleu. - **Textes** : Nom Ville. - **Formes** : Cercle d'influence (zone de chalandise). ## Définition | Champ | Valeur | |---|---| | Concept | Site “Ville” : nœud de la carte monde générant un potentiel de visiteurs et un budget moyen (wealth_factor). | | Rôle | Alimenter le flux ville→zoo (choix par attractivité/distance) et porter des événements (festivals, grèves) modifiant la demande. | | Portée | Une entité fixe sur carte monde, référencée par les calculs d’attractivité. | | Contrainte | Flux calculé à la volée (pas de cache/mémorisation) ; aucun mécanisme d’analytics ; événements doivent être explicités via events/messages. | ## Fonctions (tableau détaillé) | Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | |---|---|---|---|---|---| | Calculer flux vers un zoo | tick / ouverture carte | `population`, `wealth_factor`, distance, attractivité zoo | `baseFlow` | formule \(Pop \cdot A / d^2\) + mods heure/event | Event `CITY_FLOW_DISPATCHED` | | Déclencher événement ville | calendrier/saison | type event | mod flux/budget | durée bornée | Event `CITY_EVENT` | | Vendre nourriture (marché) | interaction (feature) | stock, price | items | pricing selon wealth | Event `CITY_MARKET_OPENED` | | Marquer jumelage | relation max | city_id | bonus permanent | +5% flux vers zoo jumelé | Event `CITY_TWINNED` | ## Icone de base | Élément | Spécification | |---|---| | Représentation | Skyline (petite/moyenne/grande) | | Couleur dominante | Gris/bleu + lumières jaunes | | Variantes | `city_small.png`, `city_medium.png`, `city_large.png` | | États | jour (clair), nuit (lumières), event (feux d’artifice) | ## Interactions (tableau détaillé) | Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | |---|---|---|---|---|---| | Ouvrir ville | Consultation | ville visible | clic marker | panneau | `ZONE_NOT_EXPLORED` | | Voir flux | Consultation | zoo sélectionné | onglet flux | valeurs | - | | Lancer campagne (feature) | Action | coins ok | bouton campagne | flux + | `NOT_ENOUGH_COINS` | ## Annexes Techniques ### 1. Données et États (tableau détaillé) | Donnée / État | Type | Exemple | Source | Contraintes | |---|---|---|---|---| | `id` | uuid_v4 | `uuid_v4` | DB | - | | `type` | string | `city` | DB | constant | | `name` | string | `Rivemont` | DB | - | | `population` | int | 250000 | DB | >0 | | `wealth_factor` | float | 1.2 | DB | 0.5..2.0 | | `events.active_event` | enum \| null | `NATIONAL_HOLIDAY` | DB | null si none | | `events.ends_at` | timestamp \| null | - | DB | UTC | | `iso_x` | int | 120 | calcul | rendu | | `iso_y` | int | 88 | calcul | rendu | | `z_index` | int | 12088 | calcul | profondeur | #### Caractéristiques Initiales (tableau détaillé) | Caractéristique | Valeur initiale | Unité | Notes | |---|---:|---|---| | Bonheur ville | 50 | % | influe fréquence | | Îlot chaleur | +2 | °C | vs campagne | #### Scores Initiaux (tableau détaillé) | Score | Valeur initiale | Plage | Impact | |---|---:|---|---| | Relation | 0 | 0..100 | jumelage | | Flux envoyé | 0 | 0..∞ | suivi in-game | ### 2. Cycles de Vie et Apparition (tableau détaillé) | Phase | Déclencheur | Entrées | Sorties | Invariants | |---|---|---|---|---| | Génération | seed monde | biome | ville | fixe | | Événement | calendrier | type | mods | durée | #### Conditions d'Apparition (tableau détaillé) | Condition | Seuil | Opérateur | Résultat | |---|---:|---|---| | Génération carte | true | est | ville créée | #### Conditions de Disparition (tableau détaillé) | Condition | Seuil | Opérateur | Résultat | |---|---:|---|---| | Désastre rare | true | est | ville détruite (event) | #### Hérédité (tableau détaillé) | Élément | Hérité | Règle | |---|---|---| | Jumelage | Oui | bonus permanent | | Événements | Non | expirent | ### 3. Impacts Environnementaux #### Impact Température (tableau détaillé) | Condition | Effet | Notes | |---|---|---| | îlot chaleur | +2°C | constant | #### Impact Milieu (Biome) (tableau détaillé) | Biome | Effet | Notes | |---|---|---| | toundra | architecture igloos | visuel | #### Impact Saisons (tableau détaillé) | Saison | Effet | Notes | |---|---|---| | hiver | marché Noël | flux + | #### Impact Heure / Jour-Nuit (tableau détaillé) | Période | Effet | Notes | |---|---|---| | nuit | lumières | pollution lumineuse | ### 4. Impacts Biologiques et Sociaux #### Impact Reproduction (tableau détaillé) | Facteur | Effet sur taux | Condition | |---|---|---| | baby boom | pop + | 1 semaine in-game | #### Impact Mort (tableau détaillé) | Cas | Effet | Condition | |---|---|---| | épidémie | pop - | temporaire | #### Impact Nourriture (tableau détaillé) | Ressource | Effet | Condition | |---|---|---| | marché | stock joueur + | achats | #### Impact Attractivité(Visiteurs (tableau détaillé) | Action/État | Gain | Rayon | Notes | |---|---:|---:|---| | richesse | budget ↑ | monde | VIP | #### Impact Attractivité Animaux) (tableau détaillé) | Action/État | Effet animaux | Condition | |---|---|---| | - | neutre | - | #### Impact Valeur (tableau détaillé) | Facteur | Variation | Condition | |---|---:|---| | PIB | dépense moyenne ± | wealth_factor | ### 5. Impacts Logistiques et Économiques #### Vitesse (Camion) (tableau détaillé) | Paramètre | Effet | Condition | |---|---|---| | trafic pointe | vitesse - | 8-9h, 17-18h | #### Vitesse (Nurserie) (tableau détaillé) | Paramètre | Effet | Condition | |---|---|---| | - | neutre | - | #### Vitesse (Accueil) (tableau détaillé) | Paramètre | Effet | Condition | |---|---|---| | - | neutre | - | #### Vitesse (Recherche) (tableau détaillé) | Paramètre | Effet | Condition | |---|---|---| | campagne marketing | flux + | achat | #### Vitesse (Labo) (tableau détaillé) | Paramètre | Effet | Condition | |---|---|---| | conférence science | affluence + | event | #### Vitesse (Visite) (tableau détaillé) | Paramètre | Effet | Condition | |---|---|---| | distance | flux \(\downarrow\) | d^2 | #### Dépenses (Billeterie) (tableau détaillé) | Poste | Coût | Unité | Condition | |---|---:|---|---| | campagne 1 | 500 | coins | panneaux | #### 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 | |---|---:|---|---| | budget visiteurs | wealth_factor × | $ | ville | #### 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 | |---|---:|---|---| | marchés | variable | coins | achats | #### 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 | |---|---:|---|---| | parking (lore) | 5 | $ | voiture | #### Trajet Visiteurs ##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) | Source | Destination | Déclencheur | Effet | |---|---|---|---| | Ville | Zoo | flux | entrée billeterie | ##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) | Source | Destination | Déclencheur | Effet | |---|---|---|---| | Zoo | Enclos | visite | satisfaction | ##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) | Source | Destination | Déclencheur | Effet | |---|---|---|---| | Zoo | Boutiques | besoins | dépenses | ##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) | Source | Destination | Déclencheur | Effet | |---|---|---|---| | Zoo | Ville | sortie | despawn | ### 6. Événements #### Événements du Jeu (tableau détaillé) | Event | Déclencheur | Payload | Effet | |---|---|---|---| | `CITY_EVENT` | calendrier | type | flux mod | | `CITY_TWINNED` | relation 100 | city_id | bonus + | #### Événements du Carte (tableau détaillé) | Event | Déclencheur | Effet | |---|---|---| | `MAP_ZOOM` | zoom | taille icône | #### Événements du Zoo (tableau détaillé) | Event | Déclencheur | Effet | |---|---|---| | `CITY_FLOW_DISPATCHED` | calcul | spawn potentiels | #### Événements du Ville / Visiteur (tableau détaillé) | Event | Déclencheur | Effet | |---|---|---| | `NATIONAL_HOLIDAY` | event | flux x2 | #### Événements du Visiteur (tableau détaillé) | Event | Déclencheur | Effet | |---|---|---| | `VISITOR_SPAWNS_FROM_CITY` | flux | origine | #### Événements du Joueur (tableau détaillé) | Event | Déclencheur | Effet | |---|---|---| | `PLAYER_STARTS_CITY_CAMPAIGN` | action | flux + | ### 7. Progression #### Tableau des Upgrades (tableau détaillé) | Niveau | Coût | Effet | Débloque | |---|---:|---|---| | 2 | 1500 | flux +10% | radio | | 3 | 5000 | flux +20% | TV | ### 8. Logique et Interfaces #### Pseudo-code Impacts (tableau détaillé) | Fonction | Entrées | Sorties | Notes | |---|---|---|---| | `calculateVisitorFlow` | city, zoo | float | distance | | `isPeakHour` | now | bool | trafic | #### Messages d'Infos / Alerte (tableau détaillé) | ID | Niveau | Message | Condition | |---|---|---|---| | `CITY_EVENT` | Info | "C'est la fête à {city}." | event | | `CITY_STRIKE` | Warning | "Grève : flux réduit." | event | ## Annexes UX/UI ### 1. Expérience Utilisateur (UX) #### Description UX (tableau détaillé) | Parcours | But | Friction | Réduction clics | |---|---|---|---| | Identifier ville | choisir cible | densité | taille icône + tooltip | | Comprendre flux | arbitrer | maths | panneau simple “flux” | #### Description UI (tableau détaillé) | Composant | Contenu | États | |---|---|---| | Marker ville | sprite skyline | petit/moyen/grand | | Cercle influence | rayon | visible | | Tooltip | nom + pop | hover | #### Emplacement (tableau détaillé) | Zone UI | Position | Notes | |---|---|---| | Carte monde | sites | iso | #### Intégration (tableau détaillé) | Intégration | Contrat | Notes | |---|---|---| | `carte_monde.md` | usage | map | | `billeterie.md` | entrées | spawn | #### Navigation (tableau détaillé) | Action | Chemin | Résultat | |---|---|---| | Ouvrir ville | clic marker | panneau | #### Événements (tableau détaillé) | Event UI | Déclencheur | Effet | |---|---|---| | `MAP_ZOOM` | zoom | scale | #### Assets Skinables ##### Musiques (tableau détaillé) | Asset | Usage | Durée | Notes | |---|---|---:|---| | `city_ambience_loop.mp3` | proximité ville | loop | discret | ##### Sons (tableau détaillé) | Asset | Usage | Volume | |---|---|---| | `traffic_far.mp3` | ville | bas | ##### Graphiques (tableau détaillé) | Asset | Usage | Contraintes | |---|---|---| | `city_skyline_set.png` | sprites | 4 dirs | ##### Images (tableau détaillé) | Asset | Usage | |---|---| | `city_influence_ring.png` | cercle | ##### Vidéos (tableau détaillé) | Asset | Usage | Durée | |---|---|---:| | `city_lights_night.webm` | nuit | 2.0s | ##### Animations (tableau détaillé) | Animation | Déclencheur | Notes | |---|---|---| | fumée | idle | loop | ##### Couleurs (tableau détaillé) | Token | Valeur | Usage | |---|---|---| | `city_gray` | #546E7A | bâtiments | | `city_light_yellow` | #FFEE58 | fenêtres | ##### Textes (tableau détaillé) | Clé | FR | EN | |---|---|---| | `city.population` | Population | Population | | `city.wealth` | Richesse | Wealth | ##### Formes (tableau détaillé) | Élément | Forme | Notes | |---|---|---| | Cercle influence | cercle | zone |