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

239 lines
9.3 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 : 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 lavatar/skin courant.
- Un même rôle (ex. “vendeur”) peut avoir plusieurs skins, mais **un skin actif** doit être explicite (pas dauto-déduction silencieuse).
## Personnage contextuel de module (UI)
Certains modules affichent un **personnage contextuel** quand le module est actionné ou lorsquun é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 dun panneau, sélection dun bâtiment, entrée dans un mode (build, gestion).
- **Événement module** : arrivée, incident, succès dune 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 derreur).
### 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 daccueil (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 | Lentité 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 lentité (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 lentité | 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 | 15 |
### 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.