239 lines
9.3 KiB
Markdown
239 lines
9.3 KiB
Markdown
# 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.
|