# 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