Files
builazoo/docs/specs/animal_generique.md
Nicolas Cantu e92c1355d0 Enrichissement exhaustif des specs : Vue Isométrique et Design
**Motivations:**
- Aligner toute la documentation technique avec la nouvelle direction artistique isométrique (Réf IMG_20260303_170253).
- Faciliter l'implémentation en ajoutant les contraintes techniques liées à la 2.5D (Z-index, Sprites 4 directions).

**Root causes:**
- Besoin de cohérence visuelle et technique sur l'ensemble du projet.

**Correctifs:**
- N/A

**Evolutions:**
- Ajout systématique de la section "Direction Artistique & Vue" dans `Annexes UX/UI` de tous les fichiers.
- Enrichissement des modèles JSON avec coordonnées isométriques (`iso_x`, `iso_y`, `z_index`).
- Précision des interactions (clic, survol) adaptées à la grille losange.
- Conservation stricte de la structure existante (aucun titre supprimé).

**Pages affectées:**
- docs/specs/*
2026-03-05 02:10:32 +01:00

166 lines
5.3 KiB
Markdown

# Spécifications : Animal (Générique)
## Définition
Entité biologique principale du jeu.
## Propriétés
- **Type/Espèce** : Défini par le loot (75 animaux possibles).
- **Affichage** : Apparaît "en petit" dans l'enclos fusionné.
- **Génétique** :
- **Couleur** : 15 variations.
- **Rareté** : 5 niveaux (pondération Fibonacci).
- **Traits** : Caractéristiques spéciales (ex: "Gourmand", "Agile").
- **État** : Faim, Température, Santé, Âge, Stress.
- **Cycle de vie** : Œuf -> Bébé -> Adulte -> Mort.
## Besoins
- **Nourriture** : Consommation périodique.
- **Environnement** : Adéquation Biome/Température.
- **Social** : Besoin de congénères (reproduction) ou de solitude (selon espèce).
- **Enrichissement** : Besoin d'un objet spécial dans l'enclos (ex: Arbre à singe).
# Annexes Techniques
## 1. Données et États
### Modèle de Données (JSON)
```json
{
"id": "uuid_v4",
"type": "string (ex: 'rabbit')",
"rarity": "integer (1-5)",
"color_id": "integer (0-14)",
"name": "string",
"birth_date": "timestamp",
"state": {
"health": "float (0-100)",
"hunger": "float (0-100)",
"temperature_comfort": "float (-1.0 to 1.0)",
"stress": "float (0-100)",
"energy": "float (0-100)"
},
"genetics": {
"parent_a_id": "uuid_v4 | null",
"parent_b_id": "uuid_v4 | null",
"mutation_factor": "float",
"traits": ["glutton", "nocturnal"]
},
"position": { "x": "float", "y": "float", "z": "float" },
"orientation": "enum (N, S, E, W)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
| Caractéristique | Valeur Initiale |
| :--- | :--- |
| Santé | 100.0 |
| Faim | 0.0 (Rassasié) |
| Stress | 0.0 |
| Âge | 0 (Bébé) |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
| Type | Condition |
| :--- | :--- |
| Œuf | Achat Carte Monde / Loot Labo |
| Bébé | Éclosion Œuf / Naissance (Reproduction) |
| Adulte | Fin croissance Bébé / Achat Carte Monde |
### Conditions de Disparition
| Cause | Seuil |
| :--- | :--- |
| Mort (Faim) | Faim >= 100 pendant 24h (in-game) |
| Mort (Santé) | Santé <= 0 |
| Vente | Transaction validée |
| Libération | Action joueur |
## 3. Impacts Environnementaux
### Impact Température
| Delta T° (Idéal - Réel) | Effet sur Santé / Heure | Effet sur Stress / Heure |
| :--- | :--- | :--- |
| +/- 0 (Idéal) | 0 | -5 |
| +/- 1 (Supportable) | -1 | +2 |
| +/- 2 (Inconfort) | -5 | +10 |
| +/- 3 (Danger) | -20 | +25 |
| > +/- 3 (Mortel) | -50 | +50 |
### Impact Milieu (Biome)
| Compatibilité | Effet sur Santé / Heure | Effet sur Stress / Heure |
| :--- | :--- | :--- |
| Parfaite (Même couleur) | +1 (Régénération) | -5 |
| Adjacente (Cercle chromatique) | 0 | 0 |
| Opposée | -5 | +10 |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```javascript
function updateAnimal(animal, context):
# Gestion Température
deltaTemp = abs(animal.idealTemp - context.tileTemp)
if deltaTemp > 0:
animal.health -= tableImpactTemp[deltaTemp]
animal.stress += tableImpactTemp[deltaTemp] * 0.5
# Gestion Biome
if context.tileBiome != animal.idealBiome:
animal.stress += 5
# Gestion Faim
if animal.hunger < 100:
animal.hunger += baseHungerRate * context.seasonMod
else:
animal.health -= 10 # Famine
# Gestion Reproduction
if canReproduce(animal):
mate = findMate(animal)
if mate:
startReproduction(animal, mate)
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ANIMAL_HUNGRY` | Warning | "Un animal a faim !" |
| `ANIMAL_SICK` | Alerte | "Un animal est malade." |
| `ANIMAL_DEAD` | Critique | "Un animal est mort." |
| `ANIMAL_BORN` | Info | "Un bébé est né !" |
# 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)
### Vie Quotidienne (Passif)
**Description UX** : L'animal vit sa vie sur la grille. Il bouge, mange, dort.
**Description UI** : Sprite animé. Si problème (faim/froid), feedback visuel immédiat (changement couleur/tremblement).
**Emplacement** : Case Zoo.
**Intégration** : Grille principale.
**Navigation** : Clic Animal (Focus).
**Événements** : `ANIMAL_IDLE`, `ANIMAL_MOVE`.
#### Assets
- **Musiques** : Ambiance nature (oiseaux, vent).
- **Sons** : Cris d'animaux aléatoires (faible volume).
- **Graphiques** : Sprites Pixel Art (4 directions).
- **Images** : Portraits HD pour les dialogues.
- **Vidéos** : Mini-cinématique d'introduction de l'espèce (découverte).
- **Animations** : Idle, Walk, Eat, Sleep.
- **Couleurs** : Selon espèce + Teinte bleue (Froid) / Rouge (Chaud).
- **Textes** : Bulle "Zzz" (Sommeil), "!" (Alerte).
- **Formes** : Ombre portée ovale sous l'animal.
### Vue Isométrique
- **Sprites** : 4 directions (N, S, E, W) minimum. Idéalement 8 pour fluidité.
- **Occlusion** : L'animal doit être caché par les murs sud/est de son enclos, mais visible par-dessus les murs nord/ouest.
- **Comportement** : L'animal ne doit jamais traverser les murs (collision box stricte).