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/*
This commit is contained in:
2026-03-05 02:10:32 +01:00
parent 1d3352455e
commit e92c1355d0
74 changed files with 1519 additions and 550 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 KiB

View File

@@ -1,11 +1,12 @@
# Spécifications : Accueil des Animaux # Spécifications : Accueil des Animaux
## Définition ## Définition
Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou transferts). Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou transferts). C'est le point d'entrée unique pour tout animal avant son placement en enclos.
## Fonctionnalités ## Fonctionnalités
- **Acclimatation** : Période obligatoire avant de pouvoir placer l'animal sur la grille active. - **Acclimatation** : Période obligatoire avant de pouvoir placer l'animal sur la grille active.
- **Stockage temporaire** : Évite de devoir placer immédiatement un animal acheté si le terrain n'est pas prêt. - **Stockage temporaire** : Évite de devoir placer immédiatement un animal acheté si le terrain n'est pas prêt.
- **Inspection** : Permet au joueur de voir les stats de l'animal avant placement.
## Niveaux d'Amélioration (7 niveaux) ## Niveaux d'Amélioration (7 niveaux)
- **Coût** : Progressif par palier. - **Coût** : Progressif par palier.
@@ -19,58 +20,74 @@ Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou tr
```json ```json
{ {
"id": "uuid", "id": "uuid",
"type": "animal_reception", "type": "building_reception",
"created_at": "timestamp",
"updated_at": "timestamp",
"level": "integer (1-7)", "level": "integer (1-7)",
"position": { "x": "integer", "y": "integer" },
"slots": [ "slots": [
{ "animal_id": "uuid", "arrival_time": "timestamp", "ready_time": "timestamp" } {
] "slot_id": "integer (0-index)",
"animal_id": "uuid (nullable)",
"status": "enum (EMPTY, OCCUPIED, READY)",
"arrival_time": "timestamp",
"acclimatization_end_time": "timestamp",
"bonus_applied": "boolean"
}
],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Caractéristiques Initiales ### Caractéristiques Initiales
| Caractéristique | Valeur Initiale (Niv 1) | | Caractéristique | Valeur Initiale (Niv 1) | Valeur Max (Niv 7) |
| :--- | :--- | | :--- | :--- | :--- |
| Temps Acclimatation | 10 minutes | | Temps Acclimatation | 600 secondes (10 min) | 0 secondes (Instantané) |
| Capacité | 1 animal | | Capacité | 1 animal | 7 animaux |
### Scores Initiaux ### Scores Initiaux
N/A N/A
## 2. Cycles de Vie et Apparition ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
Présent au démarrage. Présent au démarrage du jeu (Tutorial ou Nouvelle Partie). Position fixe généralement près de l'entrée.
### Conditions de Disparition ### Conditions de Disparition
Indestructible. Indestructible. Ne peut pas être vendu ni déplacé (sauf si feature de réaménagement global).
### Hérédité ### Hérédité
N/A N/A
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### Impact Température
Zone neutre (T° idéale simulée). Zone neutre (T° idéale simulée). Les animaux ne subissent pas de dégâts de température ici.
### Impact Milieu (Biome) ### Impact Milieu (Biome)
Zone neutre. Zone neutre. Compatible avec tous les biomes d'animaux.
### Impact Saisons ### Impact Saisons
Protégé. Protégé des intempéries.
### Impact Heure / Jour-Nuit ### Impact Heure / Jour-Nuit
N/A Fonctionne 24/7. Pas de pénalité la nuit.
## 4. Impacts Biologiques et Sociaux ## 4. Impacts Biologiques et Sociaux
### Impact Reproduction ### Impact Reproduction
**Bonus Repro** : Un animal passant par un accueil de haut niveau gagne un bonus temporaire de fertilité (+10% à +50%). **Bonus Repro** : Un animal passant par un accueil de haut niveau gagne un bonus temporaire de fertilité.
- Niv 1-3 : +0%
- Niv 4-6 : +10% fertilité (durée 2 jours in-game)
- Niv 7 : +25% fertilité (durée 5 jours in-game)
### Impact Mort ### Impact Mort
Pas de mort possible en zone d'accueil (Stase). Pas de mort possible en zone d'accueil (Stase). Les jauges de faim/soif/santé sont gelées.
### Impact Nourriture ### Impact Nourriture
Nourri automatiquement. Nourri automatiquement (coût nul ou inclus dans les frais de gestion globaux).
### Impact Attractivité (Visiteurs/Animaux) ### Impact Attractivité (Visiteurs/Animaux)
N/A N/A - Les visiteurs ne voient pas l'intérieur de l'accueil.
### Impact Valeur ### Impact Valeur
N/A N/A
@@ -78,56 +95,91 @@ N/A
## 5. Impacts Logistiques et Économiques ## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) ### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Réduction Temps Acclimatation** : **Réduction Temps Acclimatation** :
| Niveau | Temps Base | | Niveau | Temps Base | Réduction % |
| :--- | :--- | | :--- | :--- | :--- |
| 1 | 10 min | | 1 | 10 min | 0% |
| 2 | 8 min | | 2 | 8 min | 20% |
| 3 | 6 min | | 3 | 6 min | 40% |
| 4 | 4 min | | 4 | 4 min | 60% |
| 5 | 2 min | | 5 | 2 min | 80% |
| 6 | 1 min | | 6 | 1 min | 90% |
| 7 | Instantané | | 7 | Instantané | 100% |
### Dépenses (Boutiques/Visiteurs) ### Dépenses (Boutiques/Visiteurs)
N/A N/A
### Trajet Visiteurs ### Trajet Visiteurs
N/A N/A - Bâtiment administratif.
## 6. Événements ## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur ### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Arrivée** : Animal livré par camion. * **Arrivée (`ANIMAL_ARRIVAL`)** : Animal livré par camion, entre dans un slot libre.
* **Prêt** : Animal prêt à être placé. * **Prêt (`ANIMAL_READY`)** : Le temps d'acclimatation est écoulé.
* **Placement (`ANIMAL_PLACED`)** : Le joueur sort l'animal de l'accueil vers un enclos.
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
| Niveau | Coût (Pièces) | Capacité | Temps Acclimatation | Temps Construction | | Niveau | Coût (Pièces) | Capacité | Temps Acclimatation | Temps Construction |
| :--- | :--- | :--- | :--- | :--- | | :--- | :--- | :--- | :--- | :--- |
| 1 | 100 | 1 | 10 min | 0s | | 1 | 100 | 1 | 10 min | 0s |
| 2 | 200 | 2 | 8 min | 0s | | 2 | 200 | 2 | 8 min | 10s |
| 3 | 400 | 3 | 6 min | 0s | | 3 | 400 | 3 | 6 min | 30s |
| 4 | 800 | 4 | 4 min | 0s | | 4 | 800 | 4 | 4 min | 1m |
| 5 | 1600 | 5 | 2 min | 0s | | 5 | 1600 | 5 | 2 min | 2m |
| 6 | 3200 | 6 | 1 min | 0s | | 6 | 3200 | 6 | 1 min | 5m |
| 7 | 6400 | 7 | 0 min | 0s | | 7 | 6400 | 7 | 0 min | 10m |
## 8. Logique et Interfaces ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
``` ```python
function updateReception(center): def update_reception(reception_center, current_time):
for slot in center.slots: # Vérification de l'intégrité
if currentTime >= slot.ready_time: if not reception_center or not reception_center.slots:
notifyPlayer("ANIMAL_READY", slot.animal_id) return error("Invalid reception center")
for slot in reception_center.slots:
if slot.status == "OCCUPIED":
# Vérifier si le temps est écoulé
if current_time >= slot.acclimatization_end_time:
slot.status = "READY"
trigger_event("ANIMAL_READY", {"animal_id": slot.animal_id})
def add_animal_to_reception(reception_center, animal):
# Trouver un slot vide
empty_slot = find_first_empty_slot(reception_center.slots)
if not empty_slot:
return error("RECEPTION_FULL")
# Calcul du temps selon le niveau
duration = get_acclimatization_duration(reception_center.level)
empty_slot.animal_id = animal.id
empty_slot.arrival_time = now()
empty_slot.acclimatization_end_time = now() + duration
empty_slot.status = "OCCUPIED"
return success()
``` ```
### Messages d'Infos / Alerte ### Messages d'Infos / Alerte
| ID | Niveau | Message | | ID | Niveau | Message | Condition |
| :--- | :--- | :--- | | :--- | :--- | :--- | :--- |
| `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" | | `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" | `slot.status` passe à `READY` |
| `RECEPTION_FULL` | Warning | "Accueil saturé, impossible d'acheter." | | `RECEPTION_FULL` | Warning | "Accueil saturé, impossible d'acheter." | Tentative d'achat sans slot libre |
| `PLACEMENT_ERROR` | Error | "Impossible de placer ici (Enclos plein / Biome incompatible)." | Drag & Drop invalide |
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Arrivée Animal (Passif) ### Arrivée Animal (Passif)
**Description UX** : Le camion décharge un animal. Il apparaît dans l'Accueil en mode "Attente". **Description UX** : Le camion décharge un animal. Il apparaît dans l'Accueil en mode "Attente".
@@ -187,3 +239,9 @@ function updateReception(center):
- **Couleurs** : N/A - **Couleurs** : N/A
- **Textes** : N/A - **Textes** : N/A
- **Formes** : N/A - **Formes** : N/A
### Vue Isométrique
- **Sprite Bâtiment** : 4 directions (Nord, Sud, Est, Ouest) pour s'aligner avec la route.
- **Occlusion** : Le bâtiment doit être semi-transparent si le joueur passe la souris derrière (pour voir les objets cachés).
- **Indicateur d'état** : Une icône flottante (bulle) au-dessus du bâtiment indique si un animal est prêt (point d'exclamation vert) ou en cours (sablier).
- **Z-Index** : Doit être trié correctement par rapport aux visiteurs passant devant.

View File

@@ -1,24 +1,79 @@
# Spécifications : Achat et Upgrade des Boutiques # Spécifications : Achat et Upgrade des Boutiques
## Construction ## Construction
- Peut être construite sur n'importe quelle case vide. - Peut être construite sur n'importe quelle case vide de type "Terrain".
- Nécessite une connexion à un chemin pour être accessible aux visiteurs.
## Upgrade (7 Niveaux) ## Upgrade (7 Niveaux)
- **Attrait** : Attire les visiteurs de plus loin sur la grille. - **Attrait** : Attire les visiteurs de plus loin sur la grille (Rayon d'action).
- **Revenu** : Augmente le montant dépensé par chaque visiteur qui passe sur la case. - **Revenu** : Augmente le montant dépensé par chaque visiteur qui passe sur la case (Multiplicateur de prix).
- **Capacité** : Augmente le nombre de visiteurs pouvant interagir simultanément. - **Capacité** : Augmente le nombre de visiteurs pouvant interagir simultanément (File d'attente).
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
Voir `boutique.md` pour le modèle de données complet. ### Modèle de Données (Transaction Upgrade)
```json
{
"transaction_id": "uuid",
"building_id": "uuid",
"building_type": "shop",
"current_level": "integer",
"target_level": "integer",
"cost": "float",
"currency": "coins",
"status": "enum (PENDING, COMPLETED, FAILED)",
"timestamp": "timestamp"
}
```
*Voir `boutique.md` pour le modèle de données de l'entité Boutique.*
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
Voir `boutique.md` pour le tableau détaillé des coûts et effets par niveau. *Voir `boutique.md` pour le tableau détaillé des coûts et effets par niveau.*
## 8. Logique et Interfaces
### Pseudo-code Interaction
```python
def upgrade_shop(shop, player_wallet):
# Vérification niveau max
if shop.level >= MAX_LEVEL:
return error("MAX_LEVEL_REACHED")
next_level_config = get_shop_config(shop.type, shop.level + 1)
cost = next_level_config.cost
# Vérification fonds
if player_wallet.coins < cost:
return error("INSUFFICIENT_FUNDS")
# Transaction
player_wallet.debit(cost)
shop.level += 1
shop.stats = next_level_config.stats
shop.visual_state = "UPGRADING" # Déclenche anim
start_upgrade_timer(shop, next_level_config.build_time)
return success("UPGRADE_STARTED")
```
### Cas Limites
- **Fonds insuffisants** : Bouton grisé + Tooltip rouge.
- **Upgrade en cours** : Impossible de lancer un autre upgrade tant que le précédent n'est pas fini.
- **Boutique utilisée** : L'upgrade n'éjecte pas les visiteurs actuels, mais bloque l'entrée de nouveaux pendant les travaux (si temps > 0).
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Rénovation (Action) ### Rénovation (Action)
**Description UX** : Améliorer la boutique change son apparence et ses stats. **Description UX** : Améliorer la boutique change son apparence et ses stats.
@@ -38,3 +93,8 @@ Voir `boutique.md` pour le tableau détaillé des coûts et effets par niveau.
- **Couleurs** : Doré (pour les niveaux élevés). - **Couleurs** : Doré (pour les niveaux élevés).
- **Textes** : "Niveau Supérieur !". - **Textes** : "Niveau Supérieur !".
- **Formes** : Particules Étoiles. - **Formes** : Particules Étoiles.
### Vue Isométrique
- **Travaux** : Si l'upgrade prend du temps, afficher un sprite "En travaux" (bâche, échafaudage) par-dessus la boutique.
- **Particules** : Lors de la complétion, explosion de confettis/étoiles en 3D isométrique au-dessus du toit.
- **Feedback** : Le bâtiment peut faire un petit saut (scale up/down) pour signifier l'upgrade.

View File

@@ -3,25 +3,68 @@
## Achat ## Achat
- Le joueur possède un camion par défaut. - Le joueur possède un camion par défaut.
- Possibilité d'acheter des camions supplémentaires (si le design autorise plusieurs flottes). - Possibilité d'acheter des camions supplémentaires (si le design autorise plusieurs flottes).
- **Limite** : Nombre de camions limité par le niveau du Garage (si existant) ou du QG.
## Upgrade (7 Niveaux) ## Upgrade (7 Niveaux)
- **Niveau 1** : Camion standard. - **Niveau 1** : Camion standard.
- **Niveau 2-7** : - **Niveau 2-7** :
- **Vitesse** : Augmente la vitesse de déplacement sur la carte du monde. - **Vitesse** : Augmente la vitesse de déplacement sur la carte du monde (réduit le temps de mission).
- **Confort** : Réduit la perte de santé/stress des animaux transportés. - **Confort** : Réduit la perte de santé/stress des animaux transportés.
- **Capacité** : (Optionnel) Transport de plusieurs animaux ? *Actuellement 1 unité = 1 camion.* - **Capacité** : (Optionnel) Transport de plusieurs animaux ? *Actuellement 1 unité = 1 camion.*
- **Fiabilité** : Réduit les chances de panne (événement aléatoire "Retard").
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
Voir `camion.md` pour le modèle de données complet. ### Modèle de Données (Action)
```json
{
"action": "upgrade_truck",
"truck_id": "uuid",
"current_stats": { "speed": 50, "comfort": 10 },
"next_stats": { "speed": 60, "comfort": 20 },
"cost": 500
}
```
*Voir `camion.md` pour le modèle de données complet.*
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
Voir `camion.md` pour le tableau détaillé des coûts et effets par niveau. *Voir `camion.md` pour le tableau détaillé des coûts et effets par niveau.*
## 8. Logique et Interfaces
### Pseudo-code
```python
def upgrade_truck(truck, player):
if truck.is_on_mission:
return error("TRUCK_BUSY", "Impossible d'améliorer un camion en mission.")
cost = get_upgrade_cost(truck.level + 1)
if player.money < cost:
return error("NO_MONEY")
player.money -= cost
truck.level += 1
truck.update_stats()
return success("TRUCK_UPGRADED")
```
### Cas Limites
- **Camion en mission** : Bouton upgrade désactivé avec message "En mission".
- **Niveau Max** : Afficher "Max" à la place du prix.
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Garage / Atelier (Consultation) ### Garage / Atelier (Consultation)
**Description UX** : Le joueur gère sa flotte de camions. **Description UX** : Le joueur gère sa flotte de camions.
@@ -60,3 +103,7 @@ Voir `camion.md` pour le tableau détaillé des coûts et effets par niveau.
- **Couleurs** : Palette 16 couleurs. - **Couleurs** : Palette 16 couleurs.
- **Textes** : "Peinture fraîche !". - **Textes** : "Peinture fraîche !".
- **Formes** : Taches de peinture au sol. - **Formes** : Taches de peinture au sol.
### Vue Isométrique
- **Garage** : Si le garage est un bâtiment sur la carte, l'animation d'upgrade se joue dessus.
- **Carte Monde** : Le sprite du camion sur la carte du monde change pour refléter son niveau (ex: plus de fumée, design plus aérodynamique).

View File

@@ -3,6 +3,7 @@
## Construction ## Construction
- Sur une case vide de type "Terrain", le joueur peut acheter un bâtiment. - Sur une case vide de type "Terrain", le joueur peut acheter un bâtiment.
- Le coût dépend du type de bâtiment. - Le coût dépend du type de bâtiment.
- **Pré-requis** : Certaines cases peuvent nécessiter un déblayage (rochers, arbres) avant construction.
## Types Constructibles ## Types Constructibles
- Nurserie - Nurserie
@@ -10,12 +11,22 @@
- (Les autres bâtiments comme Billeterie/Recherche sont souvent uniques et upgradables, mais on peut imaginer en construire d'autres si le design le permet). - (Les autres bâtiments comme Billeterie/Recherche sont souvent uniques et upgradables, mais on peut imaginer en construire d'autres si le design le permet).
## Upgrade de Case (Terrain) ## Upgrade de Case (Terrain)
- **Changement de Milieu** : Payer pour changer la couleur (Biome) d'une case. - **Changement de Milieu (Terraforming)** : Payer pour changer la couleur (Biome) d'une case.
- **Changement de Température** : Payer pour installer un régulateur thermique sur une case. - **Changement de Température** : Payer pour installer un régulateur thermique sur une case (invisible ou petit objet technique).
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
### Modèle de Données (Modification Case)
```json
{
"tile_id": "x_y_coords",
"action": "terraform",
"target_biome": "savanna",
"cost": 500,
"duration_ms": 2000
}
```
Voir `case_zoo.md` et `achat_upgrade_generique.md`. Voir `case_zoo.md` et `achat_upgrade_generique.md`.
## 7. Progression ## 7. Progression
@@ -23,8 +34,8 @@ Voir `case_zoo.md` et `achat_upgrade_generique.md`.
**Changement de Milieu** : **Changement de Milieu** :
| Niveau | Coût | Précision | Temps | | Niveau | Coût | Précision | Temps |
| :--- | :--- | :--- | :--- | | :--- | :--- | :--- | :--- |
| 1 | 500 | Changement vers biome adjacent | 0s | | 1 | 500 | Changement vers biome adjacent uniquement | 5s |
| 7 | 5000 | Changement vers n'importe quel biome | 0s | | 7 | 5000 | Changement vers n'importe quel biome (Terraformation avancée) | 2s |
**Régulateur Thermique** : **Régulateur Thermique** :
| Niveau | Coût | Plage Réglage | Temps | | Niveau | Coût | Plage Réglage | Temps |
@@ -32,8 +43,38 @@ Voir `case_zoo.md` et `achat_upgrade_generique.md`.
| 1 | 200 | +/- 5°C | 0s | | 1 | 200 | +/- 5°C | 0s |
| 7 | 2000 | +/- 50°C | 0s | | 7 | 2000 | +/- 50°C | 0s |
## 8. Logique et Interfaces
### Algorithme de Terraformation
```python
def terraform_tile(tile, target_biome, player):
# Vérifier adjacence (si niveau bas)
if player.terraform_level < 7:
neighbors = get_neighbors(tile)
if target_biome not in [n.biome for n in neighbors]:
return error("BIOME_NOT_ADJACENT", "Vous devez étendre un biome existant.")
if player.money < get_terraform_cost(target_biome):
return error("NO_MONEY")
player.money -= get_terraform_cost(target_biome)
tile.biome = target_biome
update_visuals(tile)
check_animal_compatibility(tile) # Alerte si un animal est dessus
return success()
```
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Modification Terrain (Action) ### Modification Terrain (Action)
**Description UX** : Le joueur sélectionne une case et choisit "Modifier Biome" ou "Température". **Description UX** : Le joueur sélectionne une case et choisit "Modifier Biome" ou "Température".
@@ -54,3 +95,8 @@ Voir `case_zoo.md` et `achat_upgrade_generique.md`.
- **Couleurs** : Vert, Jaune, Blanc. - **Couleurs** : Vert, Jaune, Blanc.
- **Textes** : "Coût : X". - **Textes** : "Coût : X".
- **Formes** : Curseur Pinceau. - **Formes** : Curseur Pinceau.
### Vue Isométrique
- **Grid Overlay** : Lors de l'édition, afficher la grille en surbrillance pour bien délimiter les cases.
- **Feedback Visuel** : La case "saute" légèrement ou émet de la poussière lors du changement de biome.
- **Bords** : Gérer les transitions douces (blends) entre deux cases de biomes différents pour éviter l'effet damier trop strict (sauf si style voxel strict).

View File

@@ -4,12 +4,23 @@
- **Action** : Acheter une nouvelle parcelle de terrain adjacente à la grille existante. - **Action** : Acheter une nouvelle parcelle de terrain adjacente à la grille existante.
- **Coût** : Très élevé, progressif selon la taille actuelle du zoo. - **Coût** : Très élevé, progressif selon la taille actuelle du zoo.
- **Contenu** : La nouvelle case arrive avec un biome par défaut (selon sa position géographique Prairie/Océan/Montagne) et vide. - **Contenu** : La nouvelle case arrive avec un biome par défaut (selon sa position géographique Prairie/Océan/Montagne) et vide.
- **Contraintes** : Limité par la taille de la carte globale ("Monde" ou "Région").
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
### Modèle de Données (JSON) ### Modèle de Données (JSON)
Action sur l'objet `Zoo` (dimensions). Action sur l'objet `Zoo` (dimensions).
```json
{
"zoo_id": "uuid",
"dimensions": { "width": 5, "height": 6 },
"expansion_history": [
{ "direction": "EAST", "cost": 1000, "timestamp": "..." }
],
"max_dimensions": { "width": 20, "height": 20 }
}
```
### Caractéristiques Initiales ### Caractéristiques Initiales
**Taille Initiale** : 5x6 cases (30 cases). **Taille Initiale** : 5x6 cases (30 cases).
@@ -25,8 +36,39 @@ Action sur l'objet `Zoo` (dimensions).
| +1 Colonne (Est 2) | 5000 | +Hauteur cases | | +1 Colonne (Est 2) | 5000 | +Hauteur cases |
| +1 Ligne (Sud 2) | 5000 | +Largeur cases | | +1 Ligne (Sud 2) | 5000 | +Largeur cases |
## 8. Logique et Interfaces
### Algorithme d'Expansion
```python
def expand_zoo(zoo, direction, player):
cost = calculate_expansion_cost(zoo, direction)
if player.money < cost:
return error("INSUFFICIENT_FUNDS")
if reaches_world_limit(zoo, direction):
return error("WORLD_LIMIT_REACHED")
player.money -= cost
# Mise à jour de la grille
new_cells = generate_new_strip(direction, zoo.dimensions)
zoo.grid.merge(new_cells)
zoo.update_dimensions(direction)
return success("ZOO_EXPANDED")
```
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Achat Parcelle (Action) ### Achat Parcelle (Action)
**Description UX** : Le joueur clique sur une zone "Hors Limites" adjacente pour l'acheter. **Description UX** : Le joueur clique sur une zone "Hors Limites" adjacente pour l'acheter.
@@ -46,3 +88,8 @@ Action sur l'objet `Zoo` (dimensions).
- **Couleurs** : Gris (Inaccessible) -> Vert (Accessible). - **Couleurs** : Gris (Inaccessible) -> Vert (Accessible).
- **Textes** : "Acheter Terrain (X Pièces)". - **Textes** : "Acheter Terrain (X Pièces)".
- **Formes** : Carré. - **Formes** : Carré.
### Vue Isométrique
- **Brouillard de Guerre** : Les zones non achetées sont couvertes par des nuages ou un brouillard semi-transparent.
- **Dévoilement** : Lors de l'achat, les nuages se dissipent (fade out + scale up) pour révéler le nouveau terrain.
- **Clôtures** : Les clôtures délimitant le zoo se déplacent automatiquement vers la nouvelle limite.

View File

@@ -3,18 +3,64 @@
## Upgrade (7 Niveaux) ## Upgrade (7 Niveaux)
- **Production** : Augmente le nombre d'Unités de Recherche générées par heure. - **Production** : Augmente le nombre d'Unités de Recherche générées par heure.
- **Portée** : Augmente le rayon de visibilité sur les offres des autres zoos (voir les détails des animaux lointains). - **Portée** : Augmente le rayon de visibilité sur les offres des autres zoos (voir les détails des animaux lointains).
- **Vitesse** : Réduit le temps nécessaire pour compléter une recherche technologique.
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
Voir `centre_recherche.md` pour le modèle de données complet. ### Modèle de Données (Transaction)
```json
{
"action": "upgrade_research_center",
"building_id": "uuid",
"current_level": 2,
"cost": 1500,
"currency": "coins",
"timestamp": "timestamp"
}
```
*Voir `centre_recherche.md` pour le modèle de données complet.*
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
Voir `centre_recherche.md` pour le tableau détaillé des coûts et effets par niveau. *Voir `centre_recherche.md` pour le tableau détaillé des coûts et effets par niveau.*
## 8. Logique et Interfaces
### Pseudo-code Interaction
```python
def upgrade_research_center(center, player):
# Vérifier si une recherche est en cours (bloquant ?)
if center.current_research_project:
return error("RESEARCH_BUSY", "Attendez la fin du projet en cours.")
cost = get_upgrade_cost("research_center", center.level + 1)
if player.money < cost:
return error("INSUFFICIENT_FUNDS")
player.money -= cost
center.level += 1
center.production_rate *= 1.2 # +20% par niveau
center.range += 1 # +1 case de rayon
return success("UPGRADE_COMPLETE")
```
### Cas Limites
- **Recherche Active** : L'upgrade ne doit pas annuler la recherche en cours, mais peut la mettre en pause ou simplement s'appliquer après. (Choix : S'applique immédiatement sur le taux de production restant).
- **Max Level** : Désactiver le bouton.
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Arbre Technologique (Consultation) ### Arbre Technologique (Consultation)
**Description UX** : Visualiser les paliers de recherche. **Description UX** : Visualiser les paliers de recherche.
@@ -34,3 +80,8 @@ Voir `centre_recherche.md` pour le tableau détaillé des coûts et effets par n
- **Couleurs** : Bleu (Science). - **Couleurs** : Bleu (Science).
- **Textes** : "Niveau Suivant : Portée +10km". - **Textes** : "Niveau Suivant : Portée +10km".
- **Formes** : Hexagones. - **Formes** : Hexagones.
### Vue Isométrique
- **Antennes** : À chaque niveau, des antennes paraboliques ou des équipements s'ajoutent sur le toit.
- **Lumières** : Les lumières du bâtiment changent (plus intenses, clignotantes) pour montrer l'activité accrue.
- **Animation** : Les antennes tournent en boucle.

View File

@@ -13,7 +13,23 @@
## 1. Données et États ## 1. Données et États
### Modèle de Données (JSON) ### Modèle de Données (JSON)
**Transaction** : `{ "id": "uuid", "type": "BUY/UPGRADE", "item": "string", "cost": "int", "timestamp": "date" }`. **Transaction** :
```json
{
"id": "uuid",
"type": "BUY/UPGRADE",
"item_type": "string",
"item_id": "uuid",
"cost": "int",
"currency": "coins",
"status": "enum (SUCCESS, FAILED)",
"failure_reason": "string (optional)",
"timestamp": "date",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales ### Caractéristiques Initiales
**Solde Joueur** : Voir `joueur.md`. **Solde Joueur** : Voir `joueur.md`.
@@ -36,7 +52,7 @@
**Isolation** : Les bâtiments de haut niveau résistent mieux aux coûts énergétiques (Chauffage/Clim -10% par niveau). **Isolation** : Les bâtiments de haut niveau résistent mieux aux coûts énergétiques (Chauffage/Clim -10% par niveau).
### Impact Milieu (Biome) ### Impact Milieu (Biome)
**Adaptation** : Construire sur un biome "difficile" (Toundra, Désert) coûte +20% à l'achat initial. **Adaptation** : Construire sur un biome "difficile" (Toundra, Désert) coûte +20% à l'achat initial (frais de fondations).
### Impact Saisons ### Impact Saisons
**Soldes** : Certains items moins chers en Hiver (-15% sur les chauffages). **Soldes** : Certains items moins chers en Hiver (-15% sur les chauffages).
@@ -94,21 +110,44 @@
### Pseudo-code Impacts ### Pseudo-code Impacts
```javascript ```javascript
function processPurchase(player, item): function processPurchase(player, item):
# Vérification pré-requis (ex: niveau joueur)
if player.level < item.required_level:
emitEvent("BUY_FAIL", "Niveau joueur insuffisant")
return
# Vérification espace (si applicable)
if item.is_physical and not map.hasSpace(item.size):
emitEvent("BUY_FAIL", "Pas de place")
return
if player.coins >= item.cost: if player.coins >= item.cost:
player.coins -= item.cost player.coins -= item.cost
player.inventory.add(item) player.inventory.add(item)
emitEvent("BUY_SUCCESS") emitEvent("BUY_SUCCESS")
logTransaction(player, item, "SUCCESS")
else: else:
emitEvent("BUY_FAIL", "Fonds insuffisants") emitEvent("BUY_FAIL", "Fonds insuffisants")
logTransaction(player, item, "FAILED")
``` ```
### Messages d'Infos / Alerte ### Messages d'Infos / Alerte
| ID | Niveau | Message | | ID | Niveau | Message |
| :--- | :--- | :--- | | :--- | :--- | :--- |
| `FUNDS_LOW` | Alerte | "Pas assez de pièces !" | | `FUNDS_LOW` | Alerte | "Pas assez de pièces !" |
| `LEVEL_LOW` | Alerte | "Niveau X requis pour acheter ceci." |
| `NO_SPACE` | Alerte | "Impossible de construire ici." |
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Interface d'Achat (Consultation) ### Interface d'Achat (Consultation)
**Description UX** : Le joueur ouvre le menu de construction ou d'upgrade. **Description UX** : Le joueur ouvre le menu de construction ou d'upgrade.

View File

@@ -2,23 +2,66 @@
## Construction ## Construction
- Nécessaire pour faire éclore plus d'œufs simultanément. - Nécessaire pour faire éclore plus d'œufs simultanément.
- Peut être construite sur une case vide.
## Upgrade (7 Niveaux) ## Upgrade (7 Niveaux)
- **Incubation** : Réduit le temps d'éclosion. - **Incubation** : Réduit le temps d'éclosion.
- **Soins** : Augmente les chances de survie des bébés (réduit l'impact des écarts de température). - **Soins** : Augmente les chances de survie des bébés (réduit l'impact des écarts de température).
- **Génétique** : (Niveaux élevés) Augmente légèrement la probabilité d'obtenir une rareté supérieure. - **Génétique** : (Niveaux élevés) Augmente légèrement la probabilité d'obtenir une rareté supérieure (Shiny/Albinos).
- **Capacité** : Débloque des slots d'incubation supplémentaires.
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
Voir `nurserie.md` pour le modèle de données complet. ### Modèle de Données (Action)
```json
{
"action": "upgrade_nursery",
"building_id": "uuid",
"unlocked_slots": 3,
"incubation_speed_bonus": 0.2
}
```
*Voir `nurserie.md` pour le modèle de données complet.*
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
Voir `nurserie.md` pour le tableau détaillé des coûts et effets par niveau. *Voir `nurserie.md` pour le tableau détaillé des coûts et effets par niveau.*
## 8. Logique et Interfaces
### Pseudo-code
```python
def upgrade_nursery(nursery, player):
cost = get_upgrade_cost("nursery", nursery.level + 1)
if player.money < cost:
return error("NO_MONEY")
player.money -= cost
nursery.level += 1
# Déblocage de slots tous les 2 niveaux
if nursery.level % 2 == 0:
nursery.slots.append(create_empty_slot())
return success("NURSERY_UPGRADED")
```
### Cas Limites
- **Incubateurs pleins** : L'upgrade n'affecte pas les œufs en cours (ou réduit leur temps restant proportionnellement).
- **Max Slots** : Limité à 6 ou 8 slots max pour l'UI.
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Extension (Action) ### Extension (Action)
**Description UX** : Ajouter des slots d'œufs. **Description UX** : Ajouter des slots d'œufs.
@@ -38,3 +81,7 @@ Voir `nurserie.md` pour le tableau détaillé des coûts et effets par niveau.
- **Couleurs** : Rose pastel et Bleu ciel. - **Couleurs** : Rose pastel et Bleu ciel.
- **Textes** : "Slot débloqué". - **Textes** : "Slot débloqué".
- **Formes** : Cercles doux (œufs). - **Formes** : Cercles doux (œufs).
### Vue Isométrique
- **Taille** : Le bâtiment peut s'agrandir visuellement (ajouter une aile) aux niveaux 3 et 5.
- **Fenêtres** : On peut voir la lumière chaude à travers les fenêtres la nuit (incubateurs).

View File

@@ -5,7 +5,7 @@ Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce anim
## 2. Fonctions ## 2. Fonctions
* **Information :** Indique aux visiteurs (et au joueur) quel animal se trouve ici. * **Information :** Indique aux visiteurs (et au joueur) quel animal se trouve ici.
* **Éducation :** Augmente légèrement le score d'éducation du zoo. * **Éducation :** Augmente légèrement le score d'éducation du zoo (les visiteurs s'arrêtent pour lire).
* **Esthétique :** Habille les clôtures et rend le zoo plus réaliste. * **Esthétique :** Habille les clôtures et rend le zoo plus réaliste.
## 3. Icone ## 3. Icone
@@ -15,6 +15,7 @@ Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce anim
## 4. Interactions ## 4. Interactions
* **Clic :** Ouvre la fiche encyclopédique de l'animal ("Zoopédia"). * **Clic :** Ouvre la fiche encyclopédique de l'animal ("Zoopédia").
* **Personnalisation :** (Optionnel) Changer le style du cadre ou l'image. * **Personnalisation :** (Optionnel) Changer le style du cadre ou l'image.
* **Maintenance :** Peut être vandalisé (tagué) ou cassé, nécessitant une réparation par un agent d'entretien.
## 5. Annexes Techniques ## 5. Annexes Techniques
@@ -23,20 +24,61 @@ Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce anim
{ {
"sign_id": "sign_lion_01", "sign_id": "sign_lion_01",
"parent_enclosure_id": "enclosure_lions_01", "parent_enclosure_id": "enclosure_lions_01",
"position": {"x": 10, "y": 11, "face": "south"}, // Position sur la grille et orientation "created_at": "timestamp",
"updated_at": "timestamp",
"position": {
"x": 10,
"y": 11,
"face": "enum (NORTH, SOUTH, EAST, WEST)"
},
"style_id": "wood_basic",
"status": "enum (OK, BROKEN, TAGGED)",
"animal_info": { "animal_info": {
"name": "Lion d'Afrique", "name": "Lion d'Afrique",
"scientific_name": "Panthera leo", "scientific_name": "Panthera leo",
"conservation_status": "VU" // Vulnerable "conservation_status": "VU"
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Règles Métier ### Règles Métier
* **Placement Auto :** Le jeu détermine la meilleure position (côté sud ou est généralement, face au chemin le plus proche). * **Placement Auto :** Le jeu détermine la meilleure position (côté sud ou est généralement, face au chemin le plus proche).
* **Unicité :** Une seule affiche par enclos fusionné (ou une tous les X cases de périmètre). * **Unicité :** Une seule affiche par enclos fusionné (ou une tous les X cases de périmètre).
* **Mise à jour :** Si l'animal change (enclos vidé puis rempli avec autre chose), l'affiche se met à jour automatiquement.
### Algorithme de Placement
```python
def place_sign(enclosure):
# Trouver les murs adjacents à un chemin
valid_walls = []
for wall in enclosure.walls:
if is_path(wall.neighbor):
valid_walls.append(wall)
# Priorité : Sud > Est > Ouest > Nord (pour visibilité isométrique)
best_wall = select_best_wall(valid_walls)
create_sign(best_wall.position, best_wall.orientation)
```
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel :** Petit panneau en bois avec une image miniature de l'animal. * **Visuel :** Petit panneau en bois avec une image miniature de l'animal.
* **Lisibilité :** Doit être visible sans cacher les animaux derrière. * **Lisibilité :** Doit être visible sans cacher les animaux derrière.
* **Zoom :** Devient plus détaillé ou affiche une bulle d'info au survol de la souris. * **Zoom :** Devient plus détaillé ou affiche une bulle d'info au survol de la souris.
* **Vue Isométrique :**
* **Orientation :** Le sprite doit correspondre à l'orientation du mur (4 sprites différents).
* **Z-Index :** Doit être dessiné *après* la clôture mais *avant* les visiteurs passant devant.
# 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.

View File

@@ -7,6 +7,7 @@ Employé responsable de l'ordre et de la sécurité dans le zoo. Il gère les vi
* **Surveillance :** Patrouille dans les allées pour rassurer les visiteurs (+attractivité). * **Surveillance :** Patrouille dans les allées pour rassurer les visiteurs (+attractivité).
* **Intervention :** Expulse les visiteurs qui jettent des déchets ou embêtent les animaux. * **Intervention :** Expulse les visiteurs qui jettent des déchets ou embêtent les animaux.
* **Protection :** Capture les animaux échappés (avec filet ou tranquillisant). * **Protection :** Capture les animaux échappés (avec filet ou tranquillisant).
* **Dissuasion :** Sa simple présence réduit la probabilité d'actes de vandalisme dans un rayon donné.
## 3. Icone ## 3. Icone
* **Représentation :** Écusson ou Casquette de police. * **Représentation :** Écusson ou Casquette de police.
@@ -15,6 +16,7 @@ Employé responsable de l'ordre et de la sécurité dans le zoo. Il gère les vi
## 4. Interactions ## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces. * **Recrutement :** Menu "Employés", coût en pièces.
* **Ordre :** Le joueur peut cliquer sur une zone pour envoyer l'agent en priorité. * **Ordre :** Le joueur peut cliquer sur une zone pour envoyer l'agent en priorité.
* **Licenciement :** Possible via le menu employé.
## 5. Annexes Techniques ## 5. Annexes Techniques
@@ -24,20 +26,67 @@ Employé responsable de l'ordre et de la sécurité dans le zoo. Il gère les vi
"employee_id": "security_05", "employee_id": "security_05",
"type": "agent_securite", "type": "agent_securite",
"name": "Sgt. Pepper", "name": "Sgt. Pepper",
"created_at": "timestamp",
"salary": 40, "salary": 40,
"hire_cost": 400, "hire_cost": 400,
"state": "enum (PATROL, CHASE, REST, INTERACT)",
"position": { "x": 12.5, "y": 14.0 },
"target_position": { "x": 20, "y": 10 },
"stats": { "stats": {
"intimidation": 10, // Efficacité contre vandales "intimidation": 10,
"speed": 1.1 "speed": 1.1,
} "stamina": 100
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Règles Métier ### Règles Métier
* La présence d'agents réduit le taux de "mécontentement" des visiteurs dû à la foule ou aux déchets. * **Rayon d'action :** 5 cases autour de lui.
* Nécessaire pour débloquer certains animaux dangereux. * **Fatigue :** Doit se reposer au Staff Room toutes les 4h in-game.
* **Priorité :** Animal échappé > Vandalism > Déchets > Patrouille.
### Algorithme de Comportement (FSM)
```python
def update_security_agent(agent, world):
if agent.state == "REST":
agent.stamina += 5
if agent.stamina >= 100:
agent.state = "PATROL"
return
# Scan des menaces
threat = scan_for_threats(agent.position, radius=10)
if threat:
agent.state = "CHASE"
agent.target = threat.position
move_towards(agent, threat.position, agent.speed * 1.5) # Course
if distance(agent, threat) < 1:
neutralize(threat)
else:
agent.state = "PATROL"
patrol_randomly(agent)
```
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel Carte :** Personnage en uniforme bleu. * **Visuel Carte :** Personnage en uniforme bleu.
* **Animation :** Siffle ou fait des grands gestes. * **Animation :**
* **Marche :** Calme, mains dans le dos.
* **Course :** Rapide, sifflet à la bouche.
* **Action :** Sort un carnet (amende) ou un filet (animal).
* **Feedback :** Les visiteurs s'écartent sur son passage. * **Feedback :** Les visiteurs s'écartent sur son passage.
* **Vue Isométrique :** Sprite 8 directions pour des déplacements fluides.
# 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.

View File

@@ -14,6 +14,16 @@ La carte du monde est vaste, mais le joueur ne voit initialement qu'une petite z
## 1. Données et États ## 1. Données et États
### Modèle de Données (JSON) ### Modèle de Données (JSON)
Propriété `view_radius` sur `Zoo` ou `Player`. Propriété `view_radius` sur `Zoo` ou `Player`.
```json
{
"player_id": "uuid",
"world_map_state": {
"view_radius_km": 100,
"unlocked_zones": ["zone_0_0", "zone_0_1"],
"fog_of_war_mask": "bitmask_string"
}
}
```
### Caractéristiques Initiales ### Caractéristiques Initiales
| Caractéristique | Valeur Initiale | | Caractéristique | Valeur Initiale |
@@ -32,8 +42,38 @@ Propriété `view_radius` sur `Zoo` ou `Player`.
| 6 | 2500 | 1200 km | | 6 | 2500 | 1200 km |
| 7 | 5000 | 2000 km | | 7 | 5000 | 2000 km |
## 8. Logique et Interfaces
### Algorithme d'Exploration
```python
def explore_world(player):
next_level = get_next_exploration_level(player.exploration_level)
cost = next_level.cost
if player.research_points < cost:
return error("NOT_ENOUGH_RP", "Points de recherche insuffisants.")
player.research_points -= cost
player.exploration_level += 1
player.view_radius = next_level.radius
# Révéler les POI dans le nouveau rayon
new_pois = find_pois_in_radius(player.zoo_location, player.view_radius)
notify_discovery(new_pois)
return success("EXPLORATION_SUCCESS")
```
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Découverte (Passif/Action) ### Découverte (Passif/Action)
**Description UX** : En payant des points de recherche, le brouillard de guerre recule sur la carte du monde. **Description UX** : En payant des points de recherche, le brouillard de guerre recule sur la carte du monde.
@@ -53,3 +93,7 @@ Propriété `view_radius` sur `Zoo` ou `Player`.
- **Couleurs** : Blanc/Gris (Nuages). - **Couleurs** : Blanc/Gris (Nuages).
- **Textes** : "Nouvelle zone découverte !". - **Textes** : "Nouvelle zone découverte !".
- **Formes** : Cercle (Rayon de vue). - **Formes** : Cercle (Rayon de vue).
### Vue Isométrique
- **Carte** : La carte du monde peut être stylisée comme une carte papier posée sur une table, ou un globe holographique.
- **Bords** : Les bords de la zone connue sont flous ou déchirés.

View File

@@ -9,7 +9,8 @@ Entité biologique principale du jeu.
- **Génétique** : - **Génétique** :
- **Couleur** : 15 variations. - **Couleur** : 15 variations.
- **Rareté** : 5 niveaux (pondération Fibonacci). - **Rareté** : 5 niveaux (pondération Fibonacci).
- **État** : Faim, Température, Santé, Âge. - **Traits** : Caractéristiques spéciales (ex: "Gourmand", "Agile").
- **État** : Faim, Température, Santé, Âge, Stress.
- **Cycle de vie** : Œuf -> Bébé -> Adulte -> Mort. - **Cycle de vie** : Œuf -> Bébé -> Adulte -> Mort.
## Besoins ## Besoins
@@ -18,10 +19,6 @@ Entité biologique principale du jeu.
- **Social** : Besoin de congénères (reproduction) ou de solitude (selon espèce). - **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). - **Enrichissement** : Besoin d'un objet spécial dans l'enclos (ex: Arbre à singe).
## Mort
Causes possibles : Faim, Froid/Chaud, Solitude, Maladie, Vieillesse (si implémenté), Attaque (si implémenté).
Conséquence : Perte sèche, pénalité d'attractivité.
# Annexes Techniques # Annexes Techniques
## 1. Données et États ## 1. Données et États
@@ -38,14 +35,20 @@ Conséquence : Perte sèche, pénalité d'attractivité.
"health": "float (0-100)", "health": "float (0-100)",
"hunger": "float (0-100)", "hunger": "float (0-100)",
"temperature_comfort": "float (-1.0 to 1.0)", "temperature_comfort": "float (-1.0 to 1.0)",
"stress": "float (0-100)" "stress": "float (0-100)",
"energy": "float (0-100)"
}, },
"genetics": { "genetics": {
"parent_a_id": "uuid_v4 | null", "parent_a_id": "uuid_v4 | null",
"parent_b_id": "uuid_v4 | null", "parent_b_id": "uuid_v4 | null",
"mutation_factor": "float" "mutation_factor": "float",
"traits": ["glutton", "nocturnal"]
}, },
"position": { "x": "int", "y": "int" } "position": { "x": "float", "y": "float", "z": "float" },
"orientation": "enum (N, S, E, W)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -57,12 +60,6 @@ Conséquence : Perte sèche, pénalité d'attractivité.
| Stress | 0.0 | | Stress | 0.0 |
| Âge | 0 (Bébé) | | Âge | 0 (Bébé) |
### Scores Initiaux
| Score | Valeur |
| :--- | :--- |
| Valeur Vente (Base) | 10 * Fibonacci(Rareté) |
| Attractivité (Base) | 5 * Rareté |
## 2. Cycles de Vie et Apparition ## 2. Cycles de Vie et Apparition
### Conditions d'Apparition ### Conditions d'Apparition
| Type | Condition | | Type | Condition |
@@ -79,12 +76,6 @@ Conséquence : Perte sèche, pénalité d'attractivité.
| Vente | Transaction validée | | Vente | Transaction validée |
| Libération | Action joueur | | Libération | Action joueur |
### Hérédité
| Paramètre | Formule / Logique |
| :--- | :--- |
| Rareté | `Moyenne(Parents) + Random(-1, +1)` (Pondéré par mutation) |
| Couleur | `Parent_A` (50%) ou `Parent_B` (50%) + Faible chance mutation |
## 3. Impacts Environnementaux ## 3. Impacts Environnementaux
### Impact Température ### Impact Température
| Delta T° (Idéal - Réel) | Effet sur Santé / Heure | Effet sur Stress / Heure | | Delta T° (Idéal - Réel) | Effet sur Santé / Heure | Effet sur Stress / Heure |
@@ -102,110 +93,31 @@ Conséquence : Perte sèche, pénalité d'attractivité.
| Adjacente (Cercle chromatique) | 0 | 0 | | Adjacente (Cercle chromatique) | 0 | 0 |
| Opposée | -5 | +10 | | Opposée | -5 | +10 |
### Impact Saisons
| Saison | Modificateur Faim | Modificateur Santé |
| :--- | :--- | :--- |
| Printemps | Normal | Bonus Régénération |
| Été | +10% (Soif/Faim) | Malus si T° > Seuil |
| Automne | Normal | Normal |
| Hiver | +20% (Besoin énergie) | Malus si T° < Seuil |
### Impact Heure / Jour-Nuit
| Cycle | Modificateur Faim | Modificateur Stress |
| :--- | :--- | :--- |
| Jour | Normal | Normal |
| Nuit | -50% (Sommeil) | Récupération rapide (si calme) |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
| Condition | Bonus/Malus Score Repro |
| :--- | :--- |
| Santé > 80% | +10 |
| Faim < 20% | +10 |
| Stress < 10% | +20 |
| Partenaire compatible < 2 cases | Déclencheur |
### Impact Mort
| Événement | Effet |
| :--- | :--- |
| Mort d'un congénère (Rayon 5) | Stress +20 (Immédiat) |
| Mort isolée | Stress +5 (Ennui) |
### Impact Nourriture
| État Faim | Effet Santé / Heure |
| :--- | :--- |
| 0-20% | +2 |
| 20-50% | 0 |
| 50-80% | -2 |
| 80-100% | -10 |
### Impact Attractivité (Visiteurs/Animaux)
| Rareté | Attractivité (Rayon d'action) |
| :--- | :--- |
| 1 (Commun) | 2 cases |
| 2 (Peu commun) | 3 cases |
| 3 (Rare) | 5 cases |
| 4 (Épique) | 8 cases |
| 5 (Légendaire) | 12 cases (Tout le zoo) |
### Impact Valeur
| Facteur | Multiplicateur Valeur |
| :--- | :--- |
| Santé 100% | x1.2 |
| Santé < 50% | x0.5 |
| Âge (Adulte jeune) | x1.5 |
| Âge (Vieux) | x0.8 |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Vitesse Déplacement** : Varie selon l'espèce.
- **Lent** (Tortue) : 0.5 case/sec.
- **Moyen** (Zèbre) : 1 case/sec.
- **Rapide** (Guépard) : 2 cases/sec.
### Dépenses (Boutiques/Visiteurs)
**Coût Nourriture** :
- **Petit** : 1 unité/jour.
- **Moyen** : 2 unités/jour.
- **Grand** : 5 unités/jour.
### Trajet Visiteurs
**Point d'Intérêt** : Les visiteurs s'arrêtent 5 à 10 secondes devant l'enclos pour observer l'animal (si visible).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Maladie** : Si Santé < 20% et hygiène faible.
* **Naissance** : Si conditions reproduction réunies.
* **Mort** : Si Santé <= 0.
* **Évasion** : Si clôture cassée (Probabilité faible).
## 7. Progression
### Tableau des Upgrades
*Note : L'animal gagne de l'expérience en vieillissant.*
| Niveau Expérience | Nom | Bonus Valeur | Bonus Attractivité |
| :--- | :--- | :--- | :--- |
| 1 (Jeune) | Novice | +0% | +0% |
| 2 (Adulte) | Mature | +10% | +10% |
| 3 (Vétéran) | Star | +20% | +30% |
| 4 (Doyen) | Légende | +50% | +100% |
## 8. Logique et Interfaces ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
```javascript ```javascript
function updateAnimal(animal, context): function updateAnimal(animal, context):
# Gestion Température
deltaTemp = abs(animal.idealTemp - context.tileTemp) deltaTemp = abs(animal.idealTemp - context.tileTemp)
if deltaTemp > 0: if deltaTemp > 0:
animal.health -= tableImpactTemp[deltaTemp] animal.health -= tableImpactTemp[deltaTemp]
animal.stress += tableImpactTemp[deltaTemp] * 0.5 animal.stress += tableImpactTemp[deltaTemp] * 0.5
# Gestion Biome
if context.tileBiome != animal.idealBiome: if context.tileBiome != animal.idealBiome:
animal.stress += 5 animal.stress += 5
if animal.hunger > 0: # Gestion Faim
if animal.hunger < 100:
animal.hunger += baseHungerRate * context.seasonMod animal.hunger += baseHungerRate * context.seasonMod
else:
animal.health -= 10 # Famine
if animal.hunger >= 100: # Gestion Reproduction
animal.health -= 10 if canReproduce(animal):
mate = findMate(animal)
if mate:
startReproduction(animal, mate)
``` ```
### Messages d'Infos / Alerte ### Messages d'Infos / Alerte
@@ -218,6 +130,15 @@ function updateAnimal(animal, context):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Vie Quotidienne (Passif) ### Vie Quotidienne (Passif)
**Description UX** : L'animal vit sa vie sur la grille. Il bouge, mange, dort. **Description UX** : L'animal vit sa vie sur la grille. Il bouge, mange, dort.
@@ -238,40 +159,7 @@ function updateAnimal(animal, context):
- **Textes** : Bulle "Zzz" (Sommeil), "!" (Alerte). - **Textes** : Bulle "Zzz" (Sommeil), "!" (Alerte).
- **Formes** : Ombre portée ovale sous l'animal. - **Formes** : Ombre portée ovale sous l'animal.
### Consultation (Consultation) ### Vue Isométrique
**Description UX** : Le joueur clique sur l'animal pour voir ses détails (Santé, Faim, Génétique). - **Sprites** : 4 directions (N, S, E, W) minimum. Idéalement 8 pour fluidité.
**Description UI** : **Bottom Sheet** (Mobile) ou Panneau Latéral (Desktop) pour ne pas masquer le jeu. Jauges colorées. Arbre généalogique simplifié. - **Occlusion** : L'animal doit être caché par les murs sud/est de son enclos, mais visible par-dessus les murs nord/ouest.
**Emplacement** : Case Zoo. - **Comportement** : L'animal ne doit jamais traverser les murs (collision box stricte).
**Intégration** : Focus caméra sur l'animal.
**Navigation** : Clic Animal -> Panneau.
**Événements** : `SELECT_ANIMAL`.
#### Assets
- **Musiques** : Thème "Consultation" (calme, analytique).
- **Sons** : Cri spécifique de l'animal sélectionné.
- **Graphiques** : Portrait HD de l'animal.
- **Images** : Icônes Santé (Cœur), Faim (Cuisse), Température (Thermomètre).
- **Vidéos** : Boucle vidéo de l'animal en gros plan (arrière-plan panneau).
- **Animations** : Jauges qui se remplissent.
- **Couleurs** : Vert (>70%), Orange (30-70%), Rouge (<30%).
- **Textes** : Nom, Espèce, Âge.
- **Formes** : Panneau arrondi.
### Interaction (Action)
**Description UX** : Le joueur peut nourrir, soigner ou déplacer l'animal.
**Description UI** : Boutons d'action dans le panneau de consultation.
**Emplacement** : Panneau Consultation.
**Intégration** : Actions contextuelles.
**Navigation** : Clic Action -> Résultat immédiat.
**Événements** : `FEED_ANIMAL`, `HEAL_ANIMAL`, `MOVE_ANIMAL`.
#### Assets
- **Musiques** : Son "Action Réussie" (positif).
- **Sons** : `eat.mp3`, `heal.mp3`.
- **Graphiques** : Particules (Cœurs, Étoiles).
- **Images** : Icône Nourriture (Pomme), Seringue.
- **Vidéos** : Effet visuel de soin (aura verte).
- **Animations** : Animal saute de joie.
- **Couleurs** : Vert (Soin), Marron (Nourriture).
- **Textes** : "+10 PV", "-20 Faim".
- **Formes** : Cercle de sélection au sol.

View File

@@ -15,6 +15,7 @@ Employé dédié au divertissement des visiteurs. Il réalise des spectacles de
## 4. Interactions ## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces. * **Recrutement :** Menu "Employés", coût en pièces.
* **Placement :** Peut être assigné à une "scène" ou un point de passage stratégique. * **Placement :** Peut être assigné à une "scène" ou un point de passage stratégique.
* **Performance :** Le joueur peut déclencher un "Show Spécial" (cooldown) pour un gros boost.
## 5. Annexes Techniques ## 5. Annexes Techniques
@@ -27,10 +28,16 @@ Employé dédié au divertissement des visiteurs. Il réalise des spectacles de
"name": "Melody", "name": "Melody",
"salary": 45, "salary": 45,
"hire_cost": 450, "hire_cost": 450,
"state": "enum (IDLE, PERFORMING, BREAK)",
"performance_cooldown_end": "timestamp",
"stats": { "stats": {
"charisma": 15, "charisma": 15,
"radius": 3 // Rayon d'effet "radius": 3, // Rayon d'effet
} "tips_collected": 0
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -38,7 +45,34 @@ Employé dédié au divertissement des visiteurs. Il réalise des spectacles de
* L'efficacité diminue si l'artiste reste trop longtemps au même endroit (besoin de rotation ou de pause). * L'efficacité diminue si l'artiste reste trop longtemps au même endroit (besoin de rotation ou de pause).
* Attire les foules, ce qui peut créer des bouchons (à gérer avec les chemins). * Attire les foules, ce qui peut créer des bouchons (à gérer avec les chemins).
### Algorithme de Performance
```python
def update_artist(artist, visitors_nearby):
if artist.state == "PERFORMING":
for visitor in visitors_nearby:
visitor.happiness += artist.stats.charisma * 0.1
visitor.stay_duration += 5 # minutes
# Chance de pourboire
if random() < 0.05:
tip = random(1, 5)
artist.tips_collected += tip
add_coins(tip)
```
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel Carte :** Personnage coloré, jonglant ou jouant d'un instrument. * **Visuel Carte :** Personnage coloré, jonglant ou jouant d'un instrument.
* **Effet :** Notes de musique ou étoiles flottant autour de lui. * **Effet :** Notes de musique ou étoiles flottant autour de lui.
* **Son :** Musique d'ambiance locale quand on zoome dessus. * **Son :** Musique d'ambiance locale quand on zoome dessus.
* **Vue Isométrique :** Animation de jonglage ou de jeu d'instrument en boucle.
# 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.

View File

@@ -105,6 +105,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Foule (Passif) ### Foule (Passif)
**Description UX** : Les visiteurs s'agglutinent devant les animaux les plus intéressants. **Description UX** : Les visiteurs s'agglutinent devant les animaux les plus intéressants.

View File

@@ -98,7 +98,7 @@ N/A
function calculateDailyVisitors(zoo, city): function calculateDailyVisitors(zoo, city):
dist = distance(zoo.pos, city.pos) dist = distance(zoo.pos, city.pos)
if dist > zoo.maxAttractionRange: return 0 if dist > zoo.maxAttractionRange: return 0
baseFlow = city.population * (zoo.reputation / (dist * dist)) baseFlow = city.population * (zoo.reputation / (dist * dist))
return baseFlow * seasonMod return baseFlow * seasonMod
``` ```
@@ -108,6 +108,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Visualisation Flux (Consultation) ### Visualisation Flux (Consultation)
**Description UX** : Le joueur regarde la carte du monde pour voir d'où viennent ses visiteurs. **Description UX** : Le joueur regarde la carte du monde pour voir d'où viennent ses visiteurs.

View File

@@ -8,6 +8,7 @@ Représentation visuelle du joueur dans l'interface du jeu. L'avatar est personn
* **Identité :** Associé au pseudonyme du joueur et à son niveau. * **Identité :** Associé au pseudonyme du joueur et à son niveau.
* **Feedback Visuel :** Peut réagir aux événements du zoo (sourire si tout va bien, inquiet si problème). * **Feedback Visuel :** Peut réagir aux événements du zoo (sourire si tout va bien, inquiet si problème).
* **Social :** S'affiche sur la carte du monde à côté du zoo du joueur. * **Social :** S'affiche sur la carte du monde à côté du zoo du joueur.
* **NPC Directeur :** Une version miniature de l'avatar se promène physiquement dans le zoo pour inspecter les enclos.
## 3. Icone ## 3. Icone
* **Représentation :** Tête de l'avatar actuel dans un cadre circulaire ou carré. * **Représentation :** Tête de l'avatar actuel dans un cadre circulaire ou carré.
@@ -16,6 +17,7 @@ Représentation visuelle du joueur dans l'interface du jeu. L'avatar est personn
## 4. Interactions ## 4. Interactions
* **Click :** Ouvre le menu de profil du joueur et l'inventaire de skins. * **Click :** Ouvre le menu de profil du joueur et l'inventaire de skins.
* **Survol :** Affiche le niveau actuel et le titre du joueur (ex: "Directeur Débutant"). * **Survol :** Affiche le niveau actuel et le titre du joueur (ex: "Directeur Débutant").
* **Level Up :** Animation spéciale lorsque le joueur gagne un niveau.
## 5. Annexes Techniques ## 5. Annexes Techniques
@@ -24,16 +26,16 @@ Représentation visuelle du joueur dans l'interface du jeu. L'avatar est personn
{ {
"avatar_id": "player_12345", "avatar_id": "player_12345",
"gender": "female", // "male" | "female" "gender": "female", // "male" | "female"
"level": 12,
"experience": 4500,
"next_level_xp": 5000,
"title": "Expert Zoologist",
"equipped_skins": { "equipped_skins": {
"head": "skin_hat_safari", "head": "skin_hat_safari",
"body": "skin_shirt_ranger", "body": "skin_shirt_ranger",
"accessory": "skin_glasses_sun" "accessory": "skin_glasses_sun"
}, },
"display_position": { "unlocked_titles": ["Beginner", "Novice", "Expert"],
"x": 10,
"y": 10,
"anchor": "top-left"
},
"mood_state": "happy" // "happy" | "neutral" | "worried" "mood_state": "happy" // "happy" | "neutral" | "worried"
} }
``` ```
@@ -47,3 +49,15 @@ Représentation visuelle du joueur dans l'interface du jeu. L'avatar est personn
* **Emplacement :** Coin supérieur (gauche ou droite) de l'interface principale (HUD). * **Emplacement :** Coin supérieur (gauche ou droite) de l'interface principale (HUD).
* **Style :** Cartoon / Isométrique cohérent avec le reste du jeu. * **Style :** Cartoon / Isométrique cohérent avec le reste du jeu.
* **Feedback :** Animation légère (clignement des yeux, mouvement de tête). * **Feedback :** Animation légère (clignement des yeux, mouvement de tête).
* **Vue Isométrique :** Le "Directeur" (NPC) a un pathfinding aléatoire mais priorise les zones à problèmes (animaux malades, déchets).
# 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.

View File

@@ -14,7 +14,7 @@
## 4. Interactions ## 4. Interactions
* **Création :** Lors de la première partie, une pop-up demande le nom du zoo. * **Création :** Lors de la première partie, une pop-up demande le nom du zoo.
* **Modification :** Clic sur la banderole pour ouvrir l'éditeur de nom (peut coûter des pièces ou être gratuit). * **Modification :** Clic sur la banderole pour ouvrir l'éditeur de nom (peut coûter des pièces ou être gratuit avec cooldown).
## 5. Annexes Techniques ## 5. Annexes Techniques
@@ -24,16 +24,34 @@
"banner_id": "main_entrance_banner", "banner_id": "main_entrance_banner",
"text": "Mon Super Zoo", "text": "Mon Super Zoo",
"font_style": "default", // "comic", "serif", "safari" "font_style": "default", // "comic", "serif", "safari"
"font_color": "#FF5733",
"material": "wood", // "stone", "metal" (skins possibles) "material": "wood", // "stone", "metal" (skins possibles)
"position": {"x": 15, "y": 0} // Entrée du zoo "background_pattern": "stripes",
"last_rename": "timestamp",
"position": {"x": 15, "y": 0} // Entrée du zoo,
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Règles Métier ### Règles Métier
* **Longueur Max :** Le nom est limité en caractères (ex: 20 chars) pour tenir sur l'affichage. * **Longueur Max :** Le nom est limité en caractères (ex: 20 chars) pour tenir sur l'affichage.
* **Filtre :** Interdiction des mots offensants (profanity filter). * **Filtre :** Interdiction des mots offensants (profanity filter).
* **Cooldown :** Changement de nom gratuit 1x/semaine, sinon payant (Gemmes/Pièces).
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel :** Modèle 3D/Iso d'une arche en bois rustique avec une planche suspendue par des cordes. * **Visuel :** Modèle 3D/Iso d'une arche en bois rustique avec une planche suspendue par des cordes.
* **Animation :** La planche peut se balancer légèrement au vent. * **Animation :** La planche peut se balancer légèrement au vent.
* **Texte :** Police lisible et "fun", intégrée à la texture du panneau. * **Texte :** Police lisible et "fun", intégrée à la texture du panneau (Texture dynamique).
# 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.

View File

@@ -126,12 +126,12 @@ function updateBaby(baby, context):
# Fragilité accrue # Fragilité accrue
damageMultiplier = 2.0 damageMultiplier = 2.0
growthRate = baseGrowthRate * nurserieLevelBonus growthRate = baseGrowthRate * nurserieLevelBonus
baby.growth_progress += growthRate baby.growth_progress += growthRate
if baby.growth_progress >= 100: if baby.growth_progress >= 100:
transformToAdult(baby) transformToAdult(baby)
# Reste de la logique héritée de Animal avec damageMultiplier # Reste de la logique héritée de Animal avec damageMultiplier
``` ```
@@ -143,6 +143,15 @@ function updateBaby(baby, context):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Croissance en Nurserie (Passif) ### Croissance en Nurserie (Passif)
**Description UX** : Le bébé est visible dans son slot de nurserie. Il grandit visuellement (petite jauge). **Description UX** : Le bébé est visible dans son slot de nurserie. Il grandit visuellement (petite jauge).

View File

@@ -25,8 +25,15 @@ Bâtiment d'entrée du zoo. Point d'apparition et de départ des visiteurs.
"position": { "x": "int", "y": "int" }, "position": { "x": "int", "y": "int" },
"stats": { "stats": {
"total_entries": "integer", "total_entries": "integer",
"daily_revenue": "integer" "daily_revenue": "integer",
} "current_queue_length": "integer"
},
"entry_log": [
{ "timestamp": "...", "visitor_count": 5, "revenue": 50 }
],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -36,71 +43,6 @@ Bâtiment d'entrée du zoo. Point d'apparition et de départ des visiteurs.
| Prix Ticket | 10 pièces | | Prix Ticket | 10 pièces |
| Capacité Max | 20 visiteurs | | Capacité Max | 20 visiteurs |
### Scores Initiaux
**File d'attente** : 0 personnes.
**Revenus cumulés** : 0.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Présent au démarrage (Unique).
### Conditions de Disparition
Indestructible.
### Hérédité
**Renommée** : Un vieux zoo (reset) garde 10% de son flux initial grâce à sa réputation passée.
## 3. Impacts Environnementaux
### Impact Température
**Pluie** : Vente automatique de parapluies à l'entrée (+5 pièces/visiteur).
**Canicule** : Distribution d'éventails (Coût 1 pièce, mais +Satisfaction).
### Impact Milieu (Biome)
**Décoration** : Si le biome de l'entrée correspond au biome majoritaire du zoo, +5% Attractivité (Cohérence thématique).
### Impact Saisons
| Saison | Modificateur Prix Ticket |
| :--- | :--- |
| Été | +20% (Haute saison) |
| Hiver | -10% (Basse saison, promo "Hiver Sauvage") |
| Automne | -5% (Rentrée) |
| Printemps | +10% (Vacances Pâques) |
### Impact Heure / Jour-Nuit
**Ouverture** : 08h00 - 20h00. Fermé la nuit (sauf événements "Nocturne" débloqués au Niv 5).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Mascotte** : Si un bébé rare est né < 24h, affiche "Venez voir le bébé !" -> +10% Ventes Tickets.
### Impact Mort
**Scandale** : Si une mort est visible depuis l'entrée, -50% entrées pendant 24h.
### Impact Nourriture
**Odeur Snack** : Si un stand de nourriture est proche (< 5 cases), +5% faim des visiteurs dès l'entrée (Mise en appétit).
### Impact Attractivité (Visiteurs/Animaux)
Point d'entrée unique. L'attractivité globale du zoo détermine le flux qui se présente à la billeterie.
### Impact Valeur
**Valeur Bâtiment** : 50% du coût de construction/upgrade récupérable si destruction (impossible ici, mais pour info comptable).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Flux Entrée** : 1 visiteur / seconde max (Niv 1) -> 5 visiteurs / seconde (Niv 7 - Portiques auto).
### Dépenses (Boutiques/Visiteurs)
Revenu principal (Ticket). Pas de dépense sauf maintenance (10/jour).
### Trajet Visiteurs
Point de départ (Spawn) et d'arrivée (Despawn). Les visiteurs mécontents courent vers la sortie.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Entrée** : Gain pièces.
* **Refoulement** : Si Capacité Max atteinte.
* **VIP** : Arrivée d'un bus de touristes (Flux x2 pendant 1h).
## 7. Progression ## 7. Progression
### Tableau des Upgrades ### Tableau des Upgrades
| Niveau | Coût (Pièces) | Prix Ticket | Capacité Max | Temps Construction | | Niveau | Coût (Pièces) | Prix Ticket | Capacité Max | Temps Construction |
@@ -115,19 +57,27 @@ Point de départ (Spawn) et d'arrivée (Despawn). Les visiteurs mécontents cour
## 8. Logique et Interfaces ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
``` ```python
function processEntry(zoo): def process_entry(zoo):
potentialVisitors = calculateAttractionFlow(zoo) potential_visitors = calculate_attraction_flow(zoo)
if zoo.currentVisitors >= zoo.billeterie.capacity:
emitEvent("ZOO_FULL")
return
actualVisitors = min(potentialVisitors, zoo.billeterie.capacity - zoo.currentVisitors) # Gestion de la file d'attente
zoo.billeterie.current_queue_length += potential_visitors
for i in 0..actualVisitors:
spawnVisitor() # Traitement des entrées (limité par la vitesse du guichet)
player.addCoins(zoo.billeterie.ticketPrice) entries_per_tick = get_entry_speed(zoo.billeterie.level)
actual_entries = min(zoo.billeterie.current_queue_length, entries_per_tick)
# Vérification capacité zoo
if zoo.current_visitors + actual_entries > zoo.billeterie.capacity:
actual_entries = zoo.billeterie.capacity - zoo.current_visitors
emit_event("ZOO_FULL")
zoo.billeterie.current_queue_length -= actual_entries
for _ in range(actual_entries):
spawn_visitor()
player.add_coins(zoo.billeterie.ticket_price)
``` ```
### Messages d'Infos / Alerte ### Messages d'Infos / Alerte
@@ -135,16 +85,26 @@ function processEntry(zoo):
| :--- | :--- | :--- | | :--- | :--- | :--- |
| `ZOO_FULL` | Alerte | "Le zoo est complet ! Agrandissez la billeterie." | | `ZOO_FULL` | Alerte | "Le zoo est complet ! Agrandissez la billeterie." |
| `VIP_BUS` | Info | "Un bus de touristes arrive !" | | `VIP_BUS` | Info | "Un bus de touristes arrive !" |
| `QUEUE_LONG` | Warning | "La file d'attente est trop longue, des visiteurs partent !" |
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Consultation ### Consultation
**Description UX** : Le joueur clique sur la billeterie pour voir ses statistiques et son niveau. **Description UX** : Le joueur clique sur la billeterie pour voir ses statistiques et son niveau.
**Description UI** : **Bottom Sheet** ou Panneau Latéral affichant le niveau actuel, la capacité, le prix du ticket et les revenus du jour. **Description UI** : **Bottom Sheet** ou Panneau Latéral affichant le niveau actuel, la capacité, le prix du ticket et les revenus du jour.
**Emplacement** : Case Billeterie sur la grille du zoo. **Emplacement** : Case Billeterie sur la grille du zoo.
**Intégration** : Bâtiment fixe (ne peut pas être déplacé ou supprimé). **Intégration** : Bâtiment fixe.
**Navigation** : Clic -> Ouverture Panneau -> Fermeture (Croix ou clic extérieur). **Navigation** : Clic -> Ouverture Panneau -> Fermeture.
**Événements** : `CLICK_BILLETERIE`. **Événements** : `CLICK_BILLETERIE`.
#### Assets #### Assets
@@ -158,40 +118,6 @@ function processEntry(zoo):
- **Textes** : "Billeterie", "Niveau X", "Revenus : Y". - **Textes** : "Billeterie", "Niveau X", "Revenus : Y".
- **Formes** : Carré (case). - **Formes** : Carré (case).
### Amélioration (Upgrade) ### Vue Isométrique
**Description UX** : Le joueur décide d'améliorer la billeterie pour augmenter la capacité et le prix du ticket. - **File d'attente** : Afficher physiquement les sprites des visiteurs qui attendent devant le guichet.
**Description UI** : Bouton "Améliorer" dans le panneau de consultation, avec coût et prévisualisation des gains. - **Portiques** : Animation d'ouverture/fermeture des barrières.
**Emplacement** : Panneau de consultation.
**Intégration** : Action immédiate si fonds suffisants.
**Navigation** : Clic "Améliorer" -> Confirmation (optionnelle) -> Mise à jour UI.
**Événements** : `UPGRADE_BILLETERIE`.
#### Assets
- **Musiques** : Fanfare courte "Level Up".
- **Sons** : `upgrade_success.mp3` (caisse enregistreuse).
- **Graphiques** : Icône flèche vers le haut.
- **Images** : Confettis (Sprite).
- **Vidéos** : Effet de lumière "Rayon divin".
- **Animations** : Particules de succès (confettis/étoiles) autour du bâtiment.
- **Couleurs** : Bouton Vert (si achetable), Gris (si fonds insuffisants).
- **Textes** : "Améliorer (X pièces)".
- **Formes** : Bouton rectangulaire arrondi.
### Flux Visiteurs (Passif)
**Description UX** : Le joueur observe les visiteurs entrer dans le zoo.
**Description UI** : Petits sprites de visiteurs apparaissant à la porte et se dispersant.
**Emplacement** : Devant la billeterie.
**Intégration** : Animation continue pendant les heures d'ouverture.
**Navigation** : Automatique (Flux continu).
**Événements** : `VISITOR_SPAWN`.
#### Assets
- **Musiques** : Bruit de foule (loop).
- **Sons** : `visitor_entry.mp3` (bruit de foule léger, pas à chaque spawn).
- **Graphiques** : Sprites visiteurs variés.
- **Images** : Silhouettes de foule en arrière-plan.
- **Vidéos** : Effet de foule floue en mouvement.
- **Animations** : Marche (4 directions).
- **Couleurs** : Variées (vêtements).
- **Textes** : Bulles de discussion aléatoires.
- **Formes** : Points mouvants (sur la minimap).

View File

@@ -33,7 +33,10 @@ Sélection hiérarchique : **Famille** > **Spécialisation**.
"sell_animal_threshold": "float (price factor)", "sell_animal_threshold": "float (price factor)",
"expand_map_priority": "int (0-10)", "expand_map_priority": "int (0-10)",
"research_priority": "int (0-10)" "research_priority": "int (0-10)"
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -107,10 +110,10 @@ function runBotLogic(bot, zoo):
if zoo.foodStock < bot.logic.buy_food_threshold: if zoo.foodStock < bot.logic.buy_food_threshold:
buyFood(zoo) buyFood(zoo)
return return
if bot.family == 'BREEDER': if bot.family == 'BREEDER':
optimizePairs(zoo) optimizePairs(zoo)
if bot.family == 'TRADER': if bot.family == 'TRADER':
checkMarketArbitrage(zoo) checkMarketArbitrage(zoo)
``` ```
@@ -122,6 +125,15 @@ function runBotLogic(bot, zoo):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Sélection du Profil (Configuration) ### Sélection du Profil (Configuration)
**Description UX** : Le joueur choisit comment son zoo sera géré en son absence. **Description UX** : Le joueur choisit comment son zoo sera géré en son absence.
@@ -149,7 +161,6 @@ function runBotLogic(bot, zoo):
**Intégration** : Bloquant au démarrage. **Intégration** : Bloquant au démarrage.
**Navigation** : Lire -> Fermer. **Navigation** : Lire -> Fermer.
**Événements** : `SHOW_REPORT`. **Événements** : `SHOW_REPORT`.
#### Assets #### Assets
- **Musiques** : N/A - **Musiques** : N/A
- **Sons** : `notification.mp3`. - **Sons** : `notification.mp3`.

View File

@@ -26,7 +26,10 @@ Bâtiment commercial générant des revenus passifs grâce aux visiteurs.
"stats": { "stats": {
"revenue_total": "integer", "revenue_total": "integer",
"visitors_served": "integer" "visitors_served": "integer"
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -127,7 +130,7 @@ Point d'intérêt majeur pour le pathfinding (Poids 50). Arrêt obligatoire si b
function processShop(shop, visitors): function processShop(shop, visitors):
queue = visitors.filter(v => v.target == shop) queue = visitors.filter(v => v.target == shop)
served = min(queue.length, shop.capacity) served = min(queue.length, shop.capacity)
for i in 0..served: for i in 0..served:
revenue = shop.baseRevenue * seasonMod revenue = shop.baseRevenue * seasonMod
player.addCoins(revenue) player.addCoins(revenue)
@@ -143,6 +146,15 @@ function processShop(shop, visitors):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Vente (Passif) ### Vente (Passif)
**Description UX** : Les visiteurs entrent dans la boutique, y restent quelques secondes, puis ressortent. Des pièces volent vers le compteur. **Description UX** : Les visiteurs entrent dans la boutique, y restent quelques secondes, puis ressortent. Des pièces volent vers le compteur.

View File

@@ -29,7 +29,10 @@ Véhicule de transport pour les achats et les ventes d'animaux/œufs.
"status": "enum ('idle', 'moving_to_target', 'moving_home')", "status": "enum ('idle', 'moving_to_target', 'moving_home')",
"cargo": "animal_uuid | null", "cargo": "animal_uuid | null",
"position": { "x": "float", "y": "float" }, "position": { "x": "float", "y": "float" },
"target_site_id": "uuid | null" "target_site_id": "uuid | null",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -131,7 +134,7 @@ function updateTruck(truck, deltaTime):
if truck.status == 'moving': if truck.status == 'moving':
distance = truck.speed * deltaTime distance = truck.speed * deltaTime
moveTowardsTarget(truck, distance) moveTowardsTarget(truck, distance)
if truck.cargo: if truck.cargo:
truck.cargo.stress += baseStress * (1.0 - truck.comfortFactor) * deltaTime truck.cargo.stress += baseStress * (1.0 - truck.comfortFactor) * deltaTime
``` ```
@@ -144,6 +147,15 @@ function updateTruck(truck, deltaTime):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Envoi en Mission (Action) ### Envoi en Mission (Action)
**Description UX** : Le joueur achète un animal sur la carte du monde. Le camion part automatiquement le chercher. **Description UX** : Le joueur achète un animal sur la carte du monde. Le camion part automatiquement le chercher.

View File

@@ -25,7 +25,10 @@ Une carte est une grille de cases représentant un espace de jeu ou de navigatio
"height": "integer", "height": "integer",
"grid": [ "grid": [
[ { "case_ref": "case_id" } ] [ { "case_ref": "case_id" } ]
] ],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -107,6 +110,15 @@ function updateMap(map):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Navigation (Action) ### Navigation (Action)
**Description UX** : Le joueur explore la carte. **Description UX** : Le joueur explore la carte.

View File

@@ -41,7 +41,10 @@ La carte du monde est l'espace multijoueur où sont situés les zoos des joueurs
"width": "integer (très grand)", "width": "integer (très grand)",
"height": "integer", "height": "integer",
"sites": [ { "id": "uuid", "type": "zoo|city|lab", "pos": { "x": "int", "y": "int" } } ], "sites": [ { "id": "uuid", "type": "zoo|city|lab", "pos": { "x": "int", "y": "int" } } ],
"trucks": [ { "id": "uuid", "owner_id": "uuid", "pos": { "x": "float", "y": "float" }, "target": "uuid" } ] "trucks": [ { "id": "uuid", "owner_id": "uuid", "pos": { "x": "float", "y": "float" }, "target": "uuid" } ],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -122,7 +125,7 @@ function updateWorldMap(map, deltaTime):
moveTruck(truck, deltaTime) moveTruck(truck, deltaTime)
if hasArrived(truck): if hasArrived(truck):
processTransaction(truck) processTransaction(truck)
updateWeather(map) updateWeather(map)
updateDayNightCycle(map) updateDayNightCycle(map)
``` ```
@@ -134,6 +137,15 @@ function updateWorldMap(map, deltaTime):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Vue Globale (Passif) ### Vue Globale (Passif)
**Description UX** : Le joueur voit les autres acteurs et les flux économiques. **Description UX** : Le joueur voit les autres acteurs et les flux économiques.

View File

@@ -1,11 +1,12 @@
# Spécifications : Carte du Zoo # Spécifications : Carte du Zoo
## Définition ## Définition
La carte du zoo est l'espace principal de gestion du joueur. Elle prend tout l'espace de l'écran sous la barre supérieure (HUD) et permet de zoomer/dézoomer. La carte du zoo est l'espace principal de gestion du joueur où il place ses bâtiments et ses animaux.
## Structure ## Structure
- **Vue** : Isométrique (2.5D). - **Vue** : Isométrique (2.5D).
- **Grille** : Composée de cases individuelles fusionnables (pour les enclos). - **Affichage** : Plein écran sous la barre du haut, dézoom possible.
- **Grille** : Composée de cases individuelles.
- **Biomes** : Divisée en tiers de largeur : - **Biomes** : Divisée en tiers de largeur :
- Gauche : Prairie - Gauche : Prairie
- Milieu : Océan - Milieu : Océan
@@ -128,6 +129,16 @@ function initZooMap():
# Annexes UX/UI # Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Grille** : Les déplacements se font sur une grille losange.
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
* **Profondeur** : Gestion du Z-index (les éléments "en bas" cachent ceux "en haut").
* **Style Visuel** : Inspiré de `IMG_20260303_170253.jpg`.
* Coloré, vivant, détails foisonnants.
* Aspect "dessiné à la main" ou "cartoon soigné".
* Couleurs vives et contours nets.
## 1. Expérience Utilisateur (UX) ## 1. Expérience Utilisateur (UX)
### Interaction Grille (Action) ### Interaction Grille (Action)
**Description UX** : Le joueur clique sur une case pour voir son contenu ou construire. **Description UX** : Le joueur clique sur une case pour voir son contenu ou construire.

View File

@@ -8,10 +8,7 @@ Une case est l'unité élémentaire de la grille (Zoo ou Monde).
- **Couleur (Milieu)** : Définit le biome et l'environnement visuel. - **Couleur (Milieu)** : Définit le biome et l'environnement visuel.
- **Température** : Liée à la couleur/biome. - **Température** : Liée à la couleur/biome.
- **Contenu** : Peut contenir un bâtiment, un animal, un visiteur, ou être vide. - **Contenu** : Peut contenir un bâtiment, un animal, un visiteur, ou être vide.
- **État** : Peut avoir des indicateurs visuels (herbe jaunie, givre). - **État** : Peut avoir des indicateurs visuels (herbe jaunie, givre, fertilité).
## Règles
- Les transitions de propriétés (couleur, température) entre cases adjacentes doivent être douces.
# Annexes Techniques # Annexes Techniques
@@ -25,107 +22,56 @@ Une case est l'unité élémentaire de la grille (Zoo ou Monde).
"temperature_offset": "float", "temperature_offset": "float",
"content_ref": "uuid | null", "content_ref": "uuid | null",
"content_type": "string", "content_type": "string",
"state_flags": ["frozen", "dry", "dirty"] "fertility_level": "float (0-100)",
"state_flags": ["frozen", "dry", "dirty", "fertilized"],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Caractéristiques Initiales
**Vide** : État par défaut.
### Scores Initiaux
**Usure** : 0% (Neuf).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération carte.
### Conditions de Disparition
**Destruction** : Si la case fait partie d'une extension de zoo vendue/annulée (rare).
### Hérédité
**Mémoire** : Une case se "souvient" de son biome d'origine si on détruit le bâtiment dessus.
## 3. Impacts Environnementaux
### Impact Température
`Température_Réelle = Température_Biome + Température_Offset + Saison_Mod`
### Impact Milieu (Biome)
Définit la couleur de fond.
### Impact Saisons
**Esthétique** : Changement de palette (Vert -> Orange -> Blanc).
### Impact Heure / Jour-Nuit
**Lumière** : Assombrissement global (Overlay nuit).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Support** : Lieu physique de l'acte.
### Impact Mort
**Support** : Lieu physique du décès.
### Impact Nourriture
**Support** : Lieu de dépôt de la nourriture.
### Impact Attractivité (Visiteurs/Animaux)
**Propreté** : Une case sale réduit l'attractivité locale.
### Impact Valeur
**Immobilier** : Valeur intrinsèque du terrain.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Terrain** : Modificateur de vitesse de déplacement (Boue, Sable).
### Dépenses (Boutiques/Visiteurs)
**Entretien** : Coût de maintenance du sol.
### Trajet Visiteurs
**Noeud** : Point de passage pour le pathfinding.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Clic** : Interaction joueur.
## 7. Progression
### Tableau des Upgrades
Voir `achat_upgrade_case.md`.
## 8. Logique et Interfaces ## 8. Logique et Interfaces
### Pseudo-code Impacts ### Pseudo-code Impacts
```javascript ```python
function getCaseState(case): def fertilize_case(case, player):
return { cost = 50
temp: calculateTemp(case), if player.money < cost: return error("NO_MONEY")
biome: case.biome,
isWalkable: !hasBuilding(case) player.money -= cost
} case.fertility_level = 100
case.state_flags.append("fertilized")
# Si plante dessus, boost croissance
if case.content and case.content.type == "plant":
case.content.growth_rate *= 1.5
return success("CASE_FERTILIZED")
``` ```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `CASE_ERROR` | Erreur | "Impossible d'accéder à cette case." |
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Feedback État (Passif) ### Fertilisation (Action)
**Description UX** : La case montre son état physique. **Description UX** : Le joueur améliore le sol pour que l'herbe repousse plus vite.
**Description UI** : Overlay de texture (Givre, Craquelures, Boue). **Description UI** : Outil "Sac d'engrais". Clic sur la case.
**Emplacement** : Case. **Emplacement** : Menu Outils -> Case.
**Intégration** : Layer 1 (Au-dessus du fond, sous le contenu). **Intégration** : Curseur.
**Navigation** : Automatique (Mise à jour visuelle). **Navigation** : Clic.
**Événements** : `STATE_UPDATE`. **Événements** : `FERTILIZE_SOIL`.
#### Assets #### Assets
- **Musiques** : Son d'ambiance très léger (vent). - **Musiques** : Bruit de poudre.
- **Sons** : Bruit de pas (selon texture). - **Sons** : `scatter.mp3`.
- **Graphiques** : Textures alpha (Givre blanc, Craquelures marron). - **Graphiques** : Particules vertes/brunes.
- **Images** : Pattern Sol. - **Images** : Texture terre riche (plus foncée).
- **Vidéos** : Effet de givre qui s'étend. - **Animations** : Poussière qui retombe.
- **Animations** : Apparition progressive (Fade). - **Couleurs** : Marron foncé.
- **Couleurs** : Blanc, Marron, Gris.
- **Textes** : "Gelé", "Sec".
- **Formes** : Carré.

View File

@@ -98,6 +98,15 @@ function getTravelCost(case):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Survol (Passif) ### Survol (Passif)
**Description UX** : Explorer la carte du monde. **Description UX** : Explorer la carte du monde.

View File

@@ -117,6 +117,15 @@ function checkAnimalDisappearance(case):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Sélection (Action) ### Sélection (Action)
**Description UX** : Clic sur une case zoo. **Description UX** : Clic sur une case zoo.

View File

@@ -4,8 +4,7 @@
Bâtiment produisant des points de science/recherche. Bâtiment produisant des points de science/recherche.
## Fonctionnalités ## Fonctionnalités
- **Production** : Génère des unités de recherche périodiquement grâce aux chercheurs assignés (Max 3). - **Production** : Génère des unités de recherche périodiquement.
- **Distinction** : Ne pas confondre avec le Laboratoire (qui gère la génétique et les bébés). Le Centre de Recherche produit du savoir (Science).
- **Déblocage** : Permet de payer l'agrandissement de la carte du monde. - **Déblocage** : Permet de payer l'agrandissement de la carte du monde.
- **Visibilité** : Donne accès aux niveaux d'animaux/bébés supérieurs dans les autres zoos (débloque la vue sur les offres rares). - **Visibilité** : Donne accès aux niveaux d'animaux/bébés supérieurs dans les autres zoos (débloque la vue sur les offres rares).
@@ -23,11 +22,13 @@ Bâtiment produisant des points de science/recherche.
"id": "uuid", "id": "uuid",
"type": "research_center", "type": "research_center",
"level": "integer (1-7)", "level": "integer (1-7)",
"assigned_researchers": ["uuid", "uuid", "uuid"], // Max 3
"stats": { "stats": {
"points_generated": "integer", "points_generated": "integer",
"last_collection": "timestamp" "last_collection": "timestamp"
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -123,7 +124,7 @@ Production continue 24h/24.
function updateResearch(center): function updateResearch(center):
points = center.productionRate * deltaTime points = center.productionRate * deltaTime
player.addResearchPoints(points) player.addResearchPoints(points)
visibleRarity = center.maxRarityVisible visibleRarity = center.maxRarityVisible
updateWorldMapVisibility(center.range, visibleRarity) updateWorldMapVisibility(center.range, visibleRarity)
``` ```
@@ -136,6 +137,15 @@ function updateResearch(center):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Collecte de Points (Action) ### Collecte de Points (Action)
**Description UX** : Les points de recherche s'accumulent. Le joueur clique sur le bâtiment pour les récolter (ou collecte auto si implémenté). **Description UX** : Les points de recherche s'accumulent. Le joueur clique sur le bâtiment pour les récolter (ou collecte auto si implémenté).

View File

@@ -1,48 +1,55 @@
# Chemin # Spécifications : Chemin
## 1. Définition ## Définition
Voie de circulation pour les visiteurs à l'intérieur du zoo. Les chemins relient l'entrée aux enclos et aux bâtiments de service. Ils sont améliorables (Terre -> Gravier -> Pavés -> Marbre, etc.), ce qui influence la vitesse de déplacement et l'attractivité du parc. Les chemins sont des cases aménagées permettant aux visiteurs et au staff de se déplacer efficacement à travers le zoo. Ils connectent les différentes infrastructures (Enclos, Boutiques, Services).
## 2. Fonctions ## Fonctions
* **Circulation :** Guide le flux des visiteurs (pathfinding). * **Circulation :** Permet le déplacement des entités (Visiteurs, Staff).
* **Vitesse :** Les visiteurs marchent plus vite sur des chemins de meilleure qualité. * **Connexion :** Relie les bâtiments entre eux pour former un réseau accessible.
* **Attractivité :** Un beau chemin (pavé, décoré) augmente la note globale du zoo. * **Esthétique :** Améliore l'aspect visuel du zoo.
* **Canalisation :** Les visiteurs préfèrent rester sur les chemins plutôt que de marcher dans l'herbe (si l'herbe est accessible).
## 3. Icone # Annexes Techniques
* **Représentation :** Route sinueuse ou Pavé.
* **Couleur dominante :** Gris et Beige.
## 4. Interactions ## 1. Données et États
* **Construction :** Outil "Route" -> Sélection du type -> Tracer sur la grille. ### Modèle de Données (JSON)
* **Upgrade :** Clic sur une portion de chemin -> Bouton "Améliorer" (coût en pièces).
* **Destruction :** Outil Bulldozer.
## 5. Annexes Techniques
### Données (JSON)
```json ```json
{ {
"path_id": "path_segment_10_12", "type": "path",
"type": "gravel", // "dirt", "paved", "marble" "material": "gravel",
"coordinates": {"x": 10, "y": 12}, "x": 10,
"stats": { "y": 12,
"speed_modifier": 1.2, // x1.2 vitesse de marche "connected_neighbors": ["N", "S", "E"],
"attractiveness_bonus": 2 "iso_x": "integer",
}, "iso_y": "integer",
"cost_per_tile": 10 "z_index": "integer"
} }
``` ```
### Règles Métier ## 2. Règles Métier
* **Connexion :** Les chemins adjacents se connectent visuellement (textures dynamiques). * **Connexion Automatique :** Les textures des chemins se connectent automatiquement aux chemins adjacents (Auto-tiling).
* **Accessibilité :** Les bâtiments doivent être reliés à un chemin pour être fonctionnels. * **Vitesse :** Bonus de vitesse de déplacement pour les entités sur les chemins.
* **Coût :** L'amélioration coûte des pièces par case.
## 6. Annexes UX/UI # Annexes UX/UI
* **Textures :**
* Terre : Marron, irrégulier, poussière.
* Gravier : Gris clair, petits cailloux, bruit de pas "crunchy". ## 0. Direction Artistique & Vue
* Pavés : Motif régulier, propre, bruit de pas "clac". * **Vue** : Isométrique (2.5D).
* Marbre/Luxe : Blanc, brillant, très rapide. * **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Feedback :** Les visiteurs ont une animation de marche plus rapide sur les bons chemins. * **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.
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Grille** : Les déplacements se font sur une grille losange.
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
* **Profondeur** : Gestion du Z-index (les éléments "en bas" cachent ceux "en haut").
* **Style Visuel** : Inspiré de `IMG_20260303_170253.jpg`.
* Coloré, vivant, détails foisonnants.
* Aspect "dessiné à la main" ou "cartoon soigné".
* Couleurs vives et contours nets.
## 1. Détails Spécifiques
* **Textures Connectées :** Les chemins utilisent des textures connectées (Terre, Gravier, Pavés) pour éviter les coupures nettes entre les cases.
* **Variété :** Différents types de sols disponibles (Terre, Gravier, Pavés).

View File

@@ -15,6 +15,7 @@ Employé travaillant dans le Centre de Recherche pour générer des points de sc
## 4. Interactions ## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces. * **Recrutement :** Menu "Employés", coût en pièces.
* **Assignation :** Doit être assigné à un Centre de Recherche (max 3 par centre). * **Assignation :** Doit être assigné à un Centre de Recherche (max 3 par centre).
* **Formation :** Peut être envoyé en stage pour augmenter son intelligence (coût + temps).
## 5. Annexes Techniques ## 5. Annexes Techniques
@@ -27,19 +28,35 @@ Employé travaillant dans le Centre de Recherche pour générer des points de sc
"salary": 60, "salary": 60,
"hire_cost": 600, "hire_cost": 600,
"assigned_building": "research_center_01", "assigned_building": "research_center_01",
"fatigue_level": "float (0-100)",
"current_task": "enum (IDLE, RESEARCHING, TRAINING)",
"stats": { "stats": {
"intelligence": 10, // Points de recherche par cycle "intelligence": 10, // Points de recherche par cycle
"specialty": "genetics" // Bonus dans un domaine "specialty": "genetics" // Bonus dans un domaine
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Règles Métier ### Règles Métier
* **Limite :** Maximum 3 chercheurs par bâtiment "Centre de Recherche". * **Limite :** Maximum 3 chercheurs par bâtiment "Centre de Recherche".
* Ne peut pas travailler sans bâtiment assigné. * **Fatigue :** L'efficacité diminue si la fatigue > 80%. Doit prendre des pauses.
* Le coût de salaire est élevé. * **Synergie :** 3 chercheurs de la même spécialité dans un centre = Bonus +20%.
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel Carte :** Visible à travers les fenêtres du Centre de Recherche ou entrant/sortant. * **Visuel Carte :** Visible à travers les fenêtres du Centre de Recherche ou entrant/sortant.
* **Interface Bâtiment :** Slots d'employés (0/3) dans le menu du Centre de Recherche. * **Interface Bâtiment :** Slots d'employés (0/3) dans le menu du Centre de Recherche.
* **Feedback :** Bulles de science (fioles, atomes) s'élevant du bâtiment quand ils travaillent. * **Feedback :** Bulles de science (fioles, atomes) s'élevant du bâtiment quand ils travaillent.
# 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.

View File

@@ -29,7 +29,10 @@ Mécanisme de vente entre joueurs/bots sur la Carte du Monde.
"highest_bidder_id": "uuid | null", "highest_bidder_id": "uuid | null",
"end_time": "timestamp", "end_time": "timestamp",
"status": "enum ('active', 'pending_validation', 'finalizing', 'completed', 'cancelled')", "status": "enum ('active', 'pending_validation', 'finalizing', 'completed', 'cancelled')",
"finalization_timer": "timestamp (end)" "finalization_timer": "timestamp (end)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -42,13 +45,13 @@ Mécanisme de vente entre joueurs/bots sur la Carte du Monde.
function placeBid(auction, bidder, amount): function placeBid(auction, bidder, amount):
if amount <= auction.current_bid: return Error if amount <= auction.current_bid: return Error
if bidder.coins < amount: return Error if bidder.coins < amount: return Error
auction.current_bid = amount auction.current_bid = amount
auction.highest_bidder_id = bidder.id auction.highest_bidder_id = bidder.id
function finalizeAuction(auction): function finalizeAuction(auction):
if now < auction.finalization_timer: return if now < auction.finalization_timer: return
transferCoins(auction.highest_bidder_id, auction.seller_id, auction.current_bid) transferCoins(auction.highest_bidder_id, auction.seller_id, auction.current_bid)
transferAnimal(auction.seller_id, auction.highest_bidder_id, auction.animal_ref) transferAnimal(auction.seller_id, auction.highest_bidder_id, auction.animal_ref)
auction.status = 'completed' auction.status = 'completed'
@@ -63,6 +66,15 @@ function finalizeAuction(auction):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Consultation des Offres (Consultation) ### Consultation des Offres (Consultation)
**Description UX** : Le joueur survole les zoos sur la carte du monde pour voir les offres. **Description UX** : Le joueur survole les zoos sur la carte du monde pour voir les offres.

View File

@@ -5,19 +5,10 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
## 2. Fonctions ## 2. Fonctions
* **Hébergement :** Lieu de vie des animaux. * **Hébergement :** Lieu de vie des animaux.
* **Fusion (Merge) :** Si deux cases "Enclos [Animal X]" sont posées côte à côte, les barrières internes disparaissent pour créer un espace commun. * **Fusion (Merge) :** Si deux cases "Enclos [Animal X]" sont posées côte à côte, les barrières internes disparaissent pour créer un espace commun (Auto-tiling).
* **Visibilité :** Permet aux visiteurs d'observer les animaux (augmente l'attractivité). * **Visibilité :** Permet aux visiteurs d'observer les animaux (augmente l'attractivité).
* **Sécurité :** Empêche les animaux de s'enfuir (si entretenu). * **Sécurité :** Empêche les animaux de s'enfuir (si entretenu).
## 3. Icone
* **Représentation :** Barrière en bois ou Grillage.
* **Couleur dominante :** Marron et Vert.
## 4. Interactions
* **Construction :** Outil "Enclos" -> Sélection de l'animal -> Clic sur la carte (glisser pour zone).
* **Gestion :** Clic sur n'importe quelle case de l'enclos fusionné ouvre le menu global de cet enclos.
* **Modification :** Ajouter/Retirer des cases, changer le type de barrière.
## 5. Annexes Techniques ## 5. Annexes Techniques
### Données (JSON) ### Données (JSON)
@@ -25,6 +16,7 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
{ {
"enclosure_id": "enclosure_lions_01", "enclosure_id": "enclosure_lions_01",
"animal_type": "lion", "animal_type": "lion",
"biome_type": "savanna",
"cells": [ "cells": [
{"x": 10, "y": 10}, {"x": 10, "y": 10},
{"x": 10, "y": 11}, {"x": 10, "y": 11},
@@ -32,20 +24,43 @@ Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'e
{"x": 11, "y": 11} {"x": 11, "y": 11}
], ],
"area": 4, "area": 4,
"capacity": 6, // Capacité totale calculée (ex: 1.5 animaux par case) "capacity": 6,
"current_population": 3, "current_population": 3,
"cleanliness": 85, "cleanliness": 85,
"fence_health": 100 "fence_health": 100,
"decoration_score": 15,
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
### Règles Métier ### Règles Métier
* **Adjacence :** La fusion se fait horizontalement et verticalement (pas en diagonale seule). * **Algorithme de Fusion :** À chaque placement/suppression de case enclos, recalculer les composants connectés (Connected Components) pour mettre à jour les murs.
* **Cohérence :** Impossible de fusionner deux enclos d'espèces différentes (message d'erreur ou création de deux enclos séparés par une barrière). * **Murs :** Les murs ne sont générés que sur les bords de la zone connectée qui ne touchent pas une autre case du même enclos.
* **Taille Minimum :** Certains animaux nécessitent un enclos de X cases minimum pour être heureux.
* **Affichage Animal :** Les animaux apparaissent "en petit" à l'intérieur de l'enclos, se déplaçant librement dans l'espace fusionné.
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel Barrières :** Génération procédurale des barrières uniquement sur le pourtour de l'ensemble des cases fusionnées (algorithme de "blob" ou "marching squares").
* **Affiche :** Une affiche descriptive de l'animal est placée automatiquement sur une portion horizontale de la clôture (voir `affiche_enclos.md`).
* **Isométrique :** Les barrières doivent avoir une hauteur et une profondeur en vue isométrique. ## 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.
### 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Grille** : Les déplacements se font sur une grille losange.
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
* **Profondeur** : Gestion du Z-index (les éléments "en bas" cachent ceux "en haut").
* **Style Visuel** : Inspiré de `IMG_20260303_170253.jpg`.
* Coloré, vivant, détails foisonnants.
* Aspect "dessiné à la main" ou "cartoon soigné".
* Couleurs vives et contours nets.
### Détails Spécifiques
* **Visuel Barrières :** Génération procédurale des barrières uniquement sur le pourtour (Auto-tiling). Fusion visuelle des barrières si adjacents.
* **Isométrique :** Les barrières au Sud et à l'Est doivent être semi-transparentes ou plus basses pour ne pas cacher les animaux.
* **Signalétique :** Affiche de l'animal visible sur la clôture.

View File

@@ -104,6 +104,15 @@ elif animal.temp > animal.idealTemp + 10:
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Lecture Immédiate (Passif) ### Lecture Immédiate (Passif)
**Description UX** : Le joueur comprend la situation d'un coup d'œil sans ouvrir de menu. **Description UX** : Le joueur comprend la situation d'un coup d'œil sans ouvrir de menu.

View File

@@ -42,12 +42,21 @@ function applyImpact(target, impactType, value):
target.attractiveness += value target.attractiveness += value
elif impactType == 'SURVIVAL': elif impactType == 'SURVIVAL':
target.survival_score += value target.survival_score += value
logEvent(target.id, impactType, value) logEvent(target.id, impactType, value)
``` ```
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Feedback Visuel d'Impact (Passif) ### Feedback Visuel d'Impact (Passif)
**Description UX** : Le joueur voit les conséquences de ses actions. **Description UX** : Le joueur voit les conséquences de ses actions.

View File

@@ -25,7 +25,10 @@ Table statique `animal_types`.
"rarity": "int", "rarity": "int",
"ideal_biome": "int", "ideal_biome": "int",
"ideal_temp": "float", "ideal_temp": "float",
"base_value": "int" "base_value": "int",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -119,6 +122,15 @@ function getCollectionBonus(player):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Bestiaire / Encyclopédie (Consultation) ### Bestiaire / Encyclopédie (Consultation)
**Description UX** : Le joueur consulte les animaux découverts/possédés. **Description UX** : Le joueur consulte les animaux découverts/possédés.

View File

@@ -92,6 +92,15 @@ function getBabyBonus(baby):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Visualisation Bébé (Passif) ### Visualisation Bébé (Passif)
**Description UX** : Différencier les bébés des adultes. **Description UX** : Différencier les bébés des adultes.

View File

@@ -94,6 +94,15 @@ function updateTime(world, deltaTime):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Cycle Jour/Nuit (Passif) ### Cycle Jour/Nuit (Passif)
**Description UX** : La luminosité change progressivement. **Description UX** : La luminosité change progressivement.

View File

@@ -97,6 +97,15 @@ function updateWeather(world):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Ambiance Météo (Passif) ### Ambiance Météo (Passif)
**Description UX** : Le joueur ressent la météo actuelle. **Description UX** : Le joueur ressent la météo actuelle.

View File

@@ -100,6 +100,15 @@ function getBiomeEffect(biome):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Palette Biome (Consultation) ### Palette Biome (Consultation)
**Description UX** : Le joueur consulte la liste des biomes disponibles pour terraformer. **Description UX** : Le joueur consulte la liste des biomes disponibles pour terraformer.

View File

@@ -97,6 +97,15 @@ function checkVisitorNeeds(visitor):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Bulles d'Incidents (Action) ### Bulles d'Incidents (Action)
**Description UX** : Voir `visiteur.md`. **Description UX** : Voir `visiteur.md`.

View File

@@ -17,7 +17,10 @@
"objective_type": "string", "objective_type": "string",
"target_value": "int", "target_value": "int",
"reward_coins": "int", "reward_coins": "int",
"is_completed": "boolean" "is_completed": "boolean",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -106,6 +109,15 @@ function checkQuests(player, action):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Suivi Quêtes (Permanent) ### Suivi Quêtes (Permanent)
**Description UX** : Le joueur voit ses objectifs en cours. **Description UX** : Le joueur voit ses objectifs en cours.

View File

@@ -136,6 +136,15 @@ function updateSeason(world):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Ambiance Saisonnière (Passif) ### Ambiance Saisonnière (Passif)
**Description UX** : Le décor change selon la saison. **Description UX** : Le décor change selon la saison.

View File

@@ -48,3 +48,14 @@ Interface de gestion permettant au joueur de visualiser, trier et équiper les
* **Grille :** Affichage des items sous forme de grille scrollable. * **Grille :** Affichage des items sous forme de grille scrollable.
* **Paper Doll :** Prévisualisation de l'avatar au centre ou sur le côté avec les équipements actuels. * **Paper Doll :** Prévisualisation de l'avatar au centre ou sur le côté avec les équipements actuels.
* **Drag & Drop :** (Optionnel) Glisser un item sur la prévisualisation pour l'équiper. * **Drag & Drop :** (Optionnel) Glisser un item sur la prévisualisation pour l'équiper.
# 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.

View File

@@ -97,6 +97,15 @@ function getTemp(case):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Thermomètre (Consultation) ### Thermomètre (Consultation)
**Description UX** : Le joueur voit la température actuelle. **Description UX** : Le joueur voit la température actuelle.

View File

@@ -34,7 +34,10 @@ L'utilisateur humain.
"settings": { "settings": {
"music_enabled": "boolean", "music_enabled": "boolean",
"bot_profile_id": "integer" "bot_profile_id": "integer"
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -125,6 +128,15 @@ function playerAction(action):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### HUD Principal (Permanent) ### HUD Principal (Permanent)
**Description UX** : Le joueur voit en permanence ses ressources et accès rapides. **Description UX** : Le joueur voit en permanence ses ressources et accès rapides.

View File

@@ -286,6 +286,15 @@ Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie.
## Annexes UX/UI ## 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) ### 1. Expérience Utilisateur (UX)
#### Description UX #### Description UX

View File

@@ -37,7 +37,10 @@ Interface centralisée dédiée aux transactions utilisant la monnaie premium (p
"currency_balance": { "currency_balance": {
"coins": 1500, "coins": 1500,
"gems": 50 "gems": 50
} },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -49,3 +52,14 @@ Interface centralisée dédiée aux transactions utilisant la monnaie premium (p
* **Design :** Fenêtre modale propre, avec de grandes icônes et des prix clairs. * **Design :** Fenêtre modale propre, avec de grandes icônes et des prix clairs.
* **Feedback Achat :** Animation de pièces qui volent vers le compteur total lors de la dépense. * **Feedback Achat :** Animation de pièces qui volent vers le compteur total lors de la dépense.
* **Confirmation :** Pop-up de confirmation pour les achats coûteux (> 1000 pièces). * **Confirmation :** Pop-up de confirmation pour les achats coûteux (> 1000 pièces).
# 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.

View File

@@ -24,7 +24,10 @@ Le milieu représente l'environnement écologique d'une case, défini par sa cou
"name": "string", "name": "string",
"color_hex": "string (#RRGGBB)", "color_hex": "string (#RRGGBB)",
"default_temperature": "float", "default_temperature": "float",
"fertility_bonus": "float" "fertility_bonus": "float",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -122,6 +125,15 @@ function checkBiomeCompatibility(animal, tile):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Identification Visuelle (Passif) ### Identification Visuelle (Passif)
**Description UX** : Le joueur identifie le biome à la couleur du sol. **Description UX** : Le joueur identifie le biome à la couleur du sol.

View File

@@ -102,6 +102,15 @@ function handleBabyDeath(baby):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Drame (Événement) ### Drame (Événement)
**Description UX** : Le bébé meurt. **Description UX** : Le bébé meurt.

View File

@@ -30,7 +30,10 @@ Employé chargé de l'approvisionnement en nourriture des enclos. Il remplit les
"capacity": 50, // Quantité de nourriture transportable "capacity": 50, // Quantité de nourriture transportable
"speed": 1.2 "speed": 1.2
}, },
"current_task": "moving_to_enclosure_12" "current_task": "moving_to_enclosure_12",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -42,3 +45,14 @@ Employé chargé de l'approvisionnement en nourriture des enclos. Il remplit les
* **Visuel Carte :** Personnage avec une brouette ou un sac sur le dos. * **Visuel Carte :** Personnage avec une brouette ou un sac sur le dos.
* **Animation :** Verse de la nourriture dans l'auge. * **Animation :** Verse de la nourriture dans l'auge.
* **Alerte :** Icône "Faim" rouge clignotante si le nourisseur est débordé. * **Alerte :** Icône "Faim" rouge clignotante si le nourisseur est débordé.
# 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.

View File

@@ -43,3 +43,14 @@ Consommable premium achetable avec des pièces, offrant un boost temporaire aux
* **Particules :** Effet scintillant autour de l'animal pendant la durée du boost. * **Particules :** Effet scintillant autour de l'animal pendant la durée du boost.
* **Icône de Buff :** Petite icône (éclair, cœur) à côté de la barre de vie de l'animal. * **Icône de Buff :** Petite icône (éclair, cœur) à côté de la barre de vie de l'animal.
* **Son :** Bruit de mastication joyeux. * **Son :** Bruit de mastication joyeux.
# 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.

View File

@@ -24,7 +24,10 @@ Bâtiment dédié à l'éclosion des œufs et à la croissance des bébés anima
"level": "integer (1-7)", "level": "integer (1-7)",
"slots": [ "slots": [
{ "slot_id": 1, "content": "egg_uuid | baby_uuid | null", "timer_end": "timestamp" } { "slot_id": 1, "content": "egg_uuid | baby_uuid | null", "timer_end": "timestamp" }
] ],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -140,6 +143,15 @@ function updateNurserie(nurserie):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Gestion des Slots (Consultation) ### Gestion des Slots (Consultation)
**Description UX** : Le joueur clique sur la nurserie pour voir l'état de ses œufs et bébés. **Description UX** : Le joueur clique sur la nurserie pour voir l'état de ses œufs et bébés.

View File

@@ -38,3 +38,14 @@
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Visuel 3D/Iso :** Modèle détaillé correspondant au thème de l'animal. * **Visuel 3D/Iso :** Modèle détaillé correspondant au thème de l'animal.
* **Feedback :** Cœurs ou étoiles émanant de l'animal lorsqu'il utilise l'objet. * **Feedback :** Cœurs ou étoiles émanant de l'animal lorsqu'il utilise l'objet.
# 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.

View File

@@ -53,3 +53,14 @@ Système de progression temporaire (durée typique : 1 mois) offrant des récomp
* **Barre de Progression :** Visuel clair de l'avancement (jauge remplie). * **Barre de Progression :** Visuel clair de l'avancement (jauge remplie).
* **Paliers :** Icônes des récompenses cliquables pour détails. * **Paliers :** Icônes des récompenses cliquables pour détails.
* **Mise en avant :** Pop-up à la connexion annonçant le nouveau passe ou les récompenses non réclamées. * **Mise en avant :** Pop-up à la connexion annonçant le nouveau passe ou les récompenses non réclamées.
# 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.

View File

@@ -19,7 +19,10 @@ Classe abstraite ou interface commune.
"id": "uuid", "id": "uuid",
"type": "string", "type": "string",
"position": { "x": "int", "y": "int" }, "position": { "x": "int", "y": "int" },
"active": "boolean" "active": "boolean",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -95,6 +98,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Identification (Passif) ### Identification (Passif)
**Description UX** : Reconnaître le type de personnage au premier coup d'œil. **Description UX** : Reconnaître le type de personnage au premier coup d'œil.

View File

@@ -29,7 +29,10 @@ Structure permettant aux visiteurs (et au personnel) de traverser les étendues
"speed_modifier": 1.0, "speed_modifier": 1.0,
"attractiveness_bonus": 5 "attractiveness_bonus": 5
}, },
"cost_per_tile": 50 "cost_per_tile": 50,
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -41,3 +44,14 @@ Structure permettant aux visiteurs (et au personnel) de traverser les étendues
* **Visuel :** Planches de bois avec rambardes, piliers plongeant dans l'eau. * **Visuel :** Planches de bois avec rambardes, piliers plongeant dans l'eau.
* **Son :** Bruit de pas sur le bois (creux). * **Son :** Bruit de pas sur le bois (creux).
* **Reflet :** Reflet du pont dans l'eau (si moteur graphique le permet). * **Reflet :** Reflet du pont dans l'eau (si moteur graphique le permet).
# 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.

View File

@@ -119,6 +119,15 @@ if checkConditions(parentA, parentB):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Amour (Passif) ### Amour (Passif)
**Description UX** : Deux animaux compatibles se rencontrent. Des cœurs apparaissent. **Description UX** : Deux animaux compatibles se rencontrent. Des cœurs apparaissent.

View File

@@ -96,6 +96,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Affichage Score (Permanent) ### Affichage Score (Permanent)
**Description UX** : Le joueur connaît son niveau de prestige. **Description UX** : Le joueur connaît son niveau de prestige.

View File

@@ -97,6 +97,15 @@ survivalScore = average(allAnimals.health)
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Monitoring Santé (Permanent) ### Monitoring Santé (Permanent)
**Description UX** : Le joueur surveille la santé globale de son zoo. **Description UX** : Le joueur surveille la santé globale de son zoo.

View File

@@ -22,7 +22,10 @@ Un site est un lieu d'intérêt positionné sur la Carte du Monde.
"id": "uuid", "id": "uuid",
"type": "enum", "type": "enum",
"name": "string", "name": "string",
"position": { "x": "int", "y": "int" } "position": { "x": "int", "y": "int" },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -98,6 +101,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Info-bulle (Consultation) ### Info-bulle (Consultation)
**Description UX** : Survoler un site donne ses détails. **Description UX** : Survoler un site donne ses détails.

View File

@@ -31,7 +31,10 @@
"amount": 500, "amount": 500,
"currency": "coins" "currency": "coins"
}, },
"asset_path": "assets/skins/avatar/head/pirate_hat.png" "asset_path": "assets/skins/avatar/head/pirate_hat.png",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -43,3 +46,14 @@
* **Inventaire :** Grille d'icônes représentant les skins possédés. * **Inventaire :** Grille d'icônes représentant les skins possédés.
* **Rareté :** Bordure de couleur autour de l'icône (Gris=Commun, Vert=Atypique, Bleu=Rare, Violet=Épique, Or=Légendaire). * **Rareté :** Bordure de couleur autour de l'icône (Gris=Commun, Vert=Atypique, Bleu=Rare, Violet=Épique, Or=Légendaire).
* **Notification :** "Nouveau skin débloqué !" avec animation de coffre ou d'éclat. * **Notification :** "Nouveau skin débloqué !" avec animation de coffre ou d'éclat.
# 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.

View File

@@ -32,7 +32,10 @@ Employé spécialisé dans la santé des animaux. Il intervient pour prévenir l
"efficiency": 0.8, "efficiency": 0.8,
"range": 5 // Rayon d'action en cases "range": 5 // Rayon d'action en cases
}, },
"assigned_zone": null // null = tout le zoo, ou ID de zone "assigned_zone": null // null = tout le zoo, ou ID de zone,
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -45,3 +48,14 @@ Employé spécialisé dans la santé des animaux. Il intervient pour prévenir l
* **Visuel Carte :** Personnage en blouse blanche avec une mallette. * **Visuel Carte :** Personnage en blouse blanche avec une mallette.
* **Feedback :** Icône de croix verte au-dessus de l'animal soigné. * **Feedback :** Icône de croix verte au-dessus de l'animal soigné.
* **Notification :** "Un animal est malade !" (si pas de soigneur dispo) ou "Animal soigné par [Nom]". * **Notification :** "Un animal est malade !" (si pas de soigneur dispo) ou "Animal soigné par [Nom]".
# 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.

View File

@@ -97,6 +97,15 @@ Certains événements doivent arriver même si le joueur est hors ligne (ex: Enc
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Chargement (Feedback) ### Chargement (Feedback)
**Description UX** : Le joueur attend le calcul du Lazy Update à la connexion. **Description UX** : Le joueur attend le calcul du Lazy Update à la connexion.

View File

@@ -111,6 +111,15 @@ currentTemp = baseBiomeTemp + seasonMod + dayNightMod + caseRegulatorOffset
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Visualisation Thermique (Passif) ### Visualisation Thermique (Passif)
**Description UX** : Le joueur voit la température de chaque case. **Description UX** : Le joueur voit la température de chaque case.

View File

@@ -45,3 +45,14 @@ Ensemble cohérent de skins et d'éléments visuels transformant l'ambiance gén
## 6. Annexes UX/UI ## 6. Annexes UX/UI
* **Sélecteur de Thème :** Carrousel ou liste déroulante dans les options graphiques. * **Sélecteur de Thème :** Carrousel ou liste déroulante dans les options graphiques.
* **Transition :** Fondu au noir ou effet de "rideau" lors du changement de thème. * **Transition :** Fondu au noir ou effet de "rideau" lors du changement de thème.
# 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.

View File

@@ -105,6 +105,15 @@ function sellAnimal(animal, price, mode):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Libération (Action) ### Libération (Action)
**Description UX** : Le joueur relâche un animal (vente système). **Description UX** : Le joueur relâche un animal (vente système).

View File

@@ -88,6 +88,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Mise en Vente (Action) ### Mise en Vente (Action)
**Description UX** : Le joueur sélectionne un animal adulte sur la grille et choisit "Vendre". **Description UX** : Le joueur sélectionne un animal adulte sur la grille et choisit "Vendre".

View File

@@ -29,7 +29,10 @@ Processus de vente spécifique pour les bébés animaux nés dans le zoo.
"current_bid": "int", "current_bid": "int",
"highest_bidder": "uuid | null", "highest_bidder": "uuid | null",
"end_time": "timestamp", "end_time": "timestamp",
"status": "active | sold | expired" "status": "active | sold | expired",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -113,6 +116,15 @@ N/A
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Mise en Vente (Action) ### Mise en Vente (Action)
**Description UX** : Le joueur glisse un bébé depuis la nurserie vers le camion. **Description UX** : Le joueur glisse un bébé depuis la nurserie vers le camion.

View File

@@ -23,7 +23,10 @@ Une ville est une entité sur la Carte du Monde qui génère le flux de visiteur
"type": "city", "type": "city",
"name": "string", "name": "string",
"population": "integer", "population": "integer",
"wealth_factor": "float (0.5 - 2.0)" "wealth_factor": "float (0.5 - 2.0)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
} }
``` ```
@@ -121,6 +124,15 @@ function calculateVisitorFlow(city, zoo):
# Annexes UX/UI # 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) ## 1. Expérience Utilisateur (UX)
### Visualisation Taille (Passif) ### Visualisation Taille (Passif)
**Description UX** : Distinguer les grandes villes des petites. **Description UX** : Distinguer les grandes villes des petites.

View File

@@ -40,3 +40,14 @@ Statut premium pour les joueurs, généralement obtenu par abonnement ou achat i
* **Badge VIP :** Petite icône couronne à côté du pseudo partout dans l'interface. * **Badge VIP :** Petite icône couronne à côté du pseudo partout dans l'interface.
* **Interface Boutique :** Section dédiée "Devenir VIP" avec mise en avant des avantages (surtout la conservation des thèmes). * **Interface Boutique :** Section dédiée "Devenir VIP" avec mise en avant des avantages (surtout la conservation des thèmes).
* **Feedback :** Effet visuel doré lors de la récupération de récompenses. * **Feedback :** Effet visuel doré lors de la récupération de récompenses.
# 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.

View File

@@ -305,6 +305,24 @@ Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, E
## Annexes UX/UI ## 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 du personnage pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
### 0. Direction Artistique & Vue (Existante)
* **Vue** : Isométrique (2.5D).
* **Grille** : Les déplacements se font sur une grille losange.
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
* **Profondeur** : Gestion du Z-index (les éléments "en bas" cachent ceux "en haut").
* **Style Visuel** : Inspiré de `IMG_20260303_170253.jpg`.
* Coloré, vivant, détails foisonnants.
* Aspect "dessiné à la main" ou "cartoon soigné".
* Couleurs vives et contours nets.
### 1. Expérience Utilisateur (UX) ### 1. Expérience Utilisateur (UX)
#### Description UX #### Description UX
@@ -312,8 +330,11 @@ Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, E
|---|---|---| |---|---|---|
| Observation | Zoom sur visiteur | Affichage info-bulle nom/état | | Observation | Zoom sur visiteur | Affichage info-bulle nom/état |
| Plainte | Clic sur bulle rouge | Ouverture fenêtre résolution problème | | Plainte | Clic sur bulle rouge | Ouverture fenêtre résolution problème |
| Déplacement | Se déplace sur les chemins | Attraction forte pour les chemins |
#### Description UI #### Description UI
Style graphique inspiré de `IMG_20260303_170253.jpg` : Coloré, vivant, détails foisonnants, aspect 'dessiné à la main' ou 'cartoon soigné'.
| Élément | Type (Bouton/Panel) | Contenu | État par défaut | | Élément | Type (Bouton/Panel) | Contenu | État par défaut |
|---|---|---|---| |---|---|---|---|
| Bulle Pensée | Icône Flottante | Image (Burger, WC...) | Caché | | Bulle Pensée | Icône Flottante | Image (Burger, WC...) | Caché |

View File

@@ -4,9 +4,9 @@
Représentation d'un zoo (joueur ou bot) sur la Carte du Monde. Représentation d'un zoo (joueur ou bot) sur la Carte du Monde.
## Affichage ## Affichage
- **Nom du zoo** : Sur une banderole d'accueil personnalisable. - **Nom du zoo** : Sur une banderole d'accueil personnalisable (poteaux bois).
- **Avatar Joueur** : Visible à côté du nom ou sur la carte du monde. - **Avatar Joueur** : Visible en coin de l'écran.
- **Vue** : Isométrique (2.5D). - **Vue** : Isométrique (2.5D). Le zoo est présenté comme un diorama vivant. La banderole flotte au vent.
- **Skins** : Le zoo peut avoir des thèmes visuels (Skins de Zoo). - **Skins** : Le zoo peut avoir des thèmes visuels (Skins de Zoo).
- **Icône** : 🏠 - **Icône** : 🏠
- **Slot d'offre** : - **Slot d'offre** :
@@ -170,6 +170,16 @@ function updateZooState(zoo) {
# Annexes UX/UI # Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Grille** : Les déplacements se font sur une grille losange.
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
* **Profondeur** : Gestion du Z-index (les éléments "en bas" cachent ceux "en haut").
* **Style Visuel** : Inspiré de `IMG_20260303_170253.jpg`.
* Coloré, vivant, détails foisonnants.
* Aspect "dessiné à la main" ou "cartoon soigné".
* Couleurs vives et contours nets.
## 1. Expérience Utilisateur (UX) ## 1. Expérience Utilisateur (UX)
### Visualisation Offre (Passif) ### Visualisation Offre (Passif)
**Description UX** : Voir ce que vend un autre joueur. **Description UX** : Voir ce que vend un autre joueur.