# 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. - **Staff (Employé / PNJ de service)** : Personnage de service (accueil, guichet, boutique, recherche, soin, sécurité, nurserie, laboratoire). ## Skins, thèmes et personnalisation Les personnages (joueur, visiteurs, bots, staff) sont rendus avec une combinaison : - **Thème global** : voir `theme.md` (palette, ambiance UI, décor, uniformes). - **Skins** : voir `skin.md` et l’équipement/possession via `inventaire_skins.md`. ### Règles de rendu (contrat) - Un personnage peut avoir des **variantes visuelles** (uniforme, accessoires, palette) déterminées par le thème et les skins équipés. - Les personnages affichés dans une UI (portrait, badge, “paper doll”, bulle) doivent rester **cohérents** avec l’avatar/skin courant. - Un même rôle (ex. “vendeur”) peut avoir plusieurs skins, mais **un skin actif** doit être explicite (pas d’auto-déduction silencieuse). ## Personnage contextuel de module (UI) Certains modules affichent un **personnage contextuel** quand le module est actionné ou lorsqu’un événement lié au module survient. ### Objectifs - **Ancrage** : associer un module à un rôle (ex. Nurserie → Nurse). - **Interaction** : proposer des actions directes (1 clic) et des explications factuelles (état, cause, prochaine action). - **Cohérence cosmétique** : appliquer thème + skins sur le personnage. ### Déclencheurs (génériques) - **Ouverture / activation** : ouverture d’un panneau, sélection d’un bâtiment, entrée dans un mode (build, gestion). - **Événement module** : arrivée, incident, succès d’une action, blocage explicite (fonds insuffisants, capacité pleine, gating réputation). - **État critique** : un statut “critique” du module est actif (ex. nurserie pleine, alerte quarantaine, alerte sécurité). ### Interactions (génériques) - **Clic** : ouvre l’écran/action la plus pertinente du module (deep-link). - **Survol / tap** : affiche une fiche courte (rôle + état + action possible). - **Dialogue/bulle** : messages informatifs liés à un événement (sans “best effort”, sans masquage d’erreur). ### Index des rôles (spécifications associées) - **Visiteurs homme/femme** : `visiteur.md` - **Joueur actif (avatar + pseudo + skins + profil)** : `joueur.md`, `avatar_joueur.md`, `inventaire_skins.md` - **Autres joueurs** : `joueur.md` (représentation externe) + `avatar_joueur.md` (portrait partagé) - **Bots** : `bot.md` - **Chercheur** : `chercheur.md` - **Nourisseur** : `nourisseur.md` - **Soigneur** : `soigneur.md` - **Agent de sécurité** : `agent_securite.md` - **Nurse (nurserie)** : `nurse.md` - **Personnel d’accueil (nouveaux animaux)** : `personnel_accueil.md` - **Guichetière (billetterie)** : `guichetiere.md` - **Vendeur (boutique)** : `vendeur.md` - **Vendeur “achat en pièces” (menu achats / conversion monnaies)** : `vendeur_pieces.md` - **Laborantin (site laboratoire carte monde)** : `laborantin.md` - **Maire (ville / carte monde)** : `maire.md` # Annexes Techniques ## 1. Données et États ### Modèle de Données (JSON) Classe abstraite ou interface commune. ```json { "id": "uuid", "type": "enum('player','bot','visitor','animal','staff')", "created_at": "timestamp", "updated_at": "timestamp", "position": { "x": "int", "y": "int" }, "active": "boolean", "status_flags": ["enum('selected','moving','interacting','hidden','dead','sleeping','busy')"], "hitbox": "enum('tile','base_sprite','custom_polygon')", "iso_x": "integer", "iso_y": "integer", "z_index": "integer" } ``` ### Caractéristiques Initiales | Caractéristique | Valeur Initiale | Type | Description | |---|---|---|---| | active | true | bool | L’entité est simulée/rendue si active. | | hitbox | base_sprite | enum | Sélection via base sprite (isométrique). | | status_flags | [] | enum[] | Liste vide au spawn, enrichie par le comportement. | ### Scores Initiaux | Score | Valeur Initiale | Plage (Min-Max) | Impact | |---|---:|---|---| | visibilité | 100 | 0-100 | Probabilité d’être rendu/affiché (ex. foule dense). | | priorité interaction | 50 | 0-100 | Arbitre quel élément capte le clic en cas de chevauchement. | ## 2. Cycles de Vie et Apparition ### Conditions d'Apparition | Condition | Seuil | Opérateur | Résultat | |---|---:|---|---| | Spawn système | true | Est | Création de l’entité (par règle métier). | | Ressources dispo | selon type | >= | Autorise création (ex. staff payé). | ### Conditions de Disparition | Condition | Seuil | Opérateur | Résultat | |---|---:|---|---| | active | false | Est | Retrait du rendu/simulation. | | status_flags contient dead | true | Est | Retrait ou état “cadavre” selon design. | ### Hérédité | Parent | Trait Transmis | Probabilité | Mutation Possible | |---|---|---:|---| | Classe dérivée | Champs spécifiques | 100% | Non | | Skins | Palette/cosmétiques | 100% | Non | ## 3. Impacts Environnementaux ### Impact Température | Plage Température | Effet sur l’entité | Bonus/Malus | |---|---|---| | < 0°C | Animations “froid” (si entité sensible) | vitesse -10% (visiteurs) | | > 30°C | Animations “chaud” | soif +20% (visiteurs) | ### Impact Milieu (Biome) | Biome | Compatibilité | Bonus/Malus | |---|---:|---| | Chemin | 100% | coût de mouvement 1.0 | | Herbe | 100% | coût de mouvement 1.2 | | Boue | 60% | coût de mouvement 1.5 | ### Impact Saisons | Saison | Effet | Modificateur | |---|---|---| | Été | foule + | visiteurs + | | Hiver | foule - | visiteurs - | ### Impact Heure / Jour-Nuit | Période | Activité | Visibilité | |---|---|---| | Jour | simulation normale | haute | | Nuit | entités “dorment” selon type | moyenne/basse | ## 4. Impacts Biologiques et Sociaux ### Impact Reproduction | Facteur | Effet sur Taux | Condition | |---|---|---| | Proximité | augmente | si entité = animal | ### Impact Mort | Cause | Conséquence | Durée | |---|---|---| | État critique | passage dead | selon règles type | ### Impact Nourriture | Type Nourriture | Gain Santé | Coût | Préférence | |---|---:|---:|---:| | selon type | variable | variable | 1–5 | ### Impact Attractivité (Visiteurs/Animaux) | Action/État | Gain Attractivité | Rayon d'action | |---|---:|---:| | entité rare visible | + | 8 cases | ### Impact Valeur | Facteur | Variation Prix | Condition | |---|---:|---| | rareté cosmétique | + | si skin rare | ## 5. Impacts Logistiques et Économiques ### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) | Domaine | Paramètre | Valeur | Unité | |---|---|---:|---| | Déplacement | coût de mouvement | >= 1.0 | multiplicateur | ### Dépenses (Boutiques/Visiteurs) | Poste | Coût | Unité | Condition | |---|---:|---|---| | maintenance entité | variable | /jour | si staff/bâtiment associé | ### Trajet Visiteurs | Trajet | Règle | Priorité | Notes | |---|---|---:|---| | vers POI | A* pondéré | 50 | chemins préférés | ## 6. Événements ### Événements du Jeu / Carte / Zoo / Ville / Visiteur | Event | Déclencheur | Effet | Durée | |---|---|---|---| | `ENTITY_SPAWN` | création | rendu + simulation | instant | | `ENTITY_DESPAWN` | suppression | retrait | instant | ## 7. Progression ### Tableau des Upgrades | Niveau | Coût | Prérequis | Bonus Débloqué | |---|---:|---|---| | 1 | 0 | - | comportement de base | ## 8. Logique et Interfaces ### Pseudo-code Impacts ```text computeZIndex(x, y): return y * 1000 + x hitTest(click): candidates = entities.sortedBy(z_index desc) return first(entity where click inside entity.hitbox) ``` ### Messages d'Infos / Alerte | Type | Message | Condition | Priorité | |---|---|---|---:| | Info | "Entité sélectionnée." | clic valide | 2 | | Warn | "Interaction impossible." | état busy/dead | 4 | # 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) ### 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** : `ui_hover_soft.mp3` (jingle court, optionnel). - **Sons** : `ui_hover.mp3`, `ui_select.mp3`. - **Graphiques** : Silhouettes archétypales. - **Images** : `badge_player.png`, `badge_bot.png`, `badge_visitor.png`, `badge_animal.png`. - **Vidéos** : `hover_glow.webm` (0.6s loop, optionnel). - **Animations** : Glow pulse (hover), pop (select). - **Couleurs** : Joueur (Bleu), Bot (Rouge/Gris), Visiteur (Multicolore), Animal (Naturel). - **Textes** : Nom, Rôle. - **Formes** : Badge rond + tooltip rect arrondi.