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

15 KiB
Raw Permalink Blame History

Spécifications : Case (Générique)

Définition

Une case est l'unité élémentaire de la grille (Zoo ou Monde).

Propriétés

  • Coordonnées : Position (x, y) dans la grille.
  • Couleur (Milieu) : Définit le biome et l'environnement visuel.
  • Température : Liée à la couleur/biome.
  • Contenu : Peut contenir un bâtiment, un animal, un visiteur, ou être vide.
  • État : Peut avoir des indicateurs visuels (herbe jaunie, givre, fertilité).

Annexes Techniques

1. Données et États

Modèle de Données (JSON)

{
  "x": "integer",
  "y": "integer",
  "grid_id": "string (stable key: `${x}:${y}`)",
  "owner_id": "uuid | null (null = carte neutre/monde)",
  "created_at": "timestamp",
  "updated_at": "timestamp",
  "biome_id": "integer",
  "biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
  "temperature_offset": "float (°C, additive)",
  "content_ref": "uuid | null",
  "content_type": "enum('empty','animal','building','visitor','staff','decoration','path','bridge','water','fence')",
  "fertility_level": "float (0-100)",
  "cleanliness_level": "float (0-100)",
  "state_flags": [
    "enum('frozen','dry','dirty','fertilized','muddy','snowy','flooded','trampled')"
  ],
  "render": {
    "tile_variant": "string (auto-tiling key)",
    "occluder": "boolean",
    "hitbox": "enum('tile','base_sprite','custom_polygon')"
  },
  "iso_x": "integer",
  "iso_y": "integer",
  "z_index": "integer"
}

Contraintes (Invariants)

  • Unicité : (x,y) est unique dans une grille.
  • Cohérence contenu : si content_type === 'empty' alors content_ref === null.
  • Température : temperature_offset sapplique additivement à la température “biome” et aux modificateurs (saison, jour/nuit).
  • Z-index isométrique : z_index est dérivé principalement de y (et secondairement de x) pour garantir le recouvrement correct.

8. Logique et Interfaces

Pseudo-code Impacts

def fertilize_case(case, player):
    cost = 50
    if player.money < cost: return error("NO_MONEY")
    
    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

Type Message Condition Priorité
Info "Sol fertilisé." state_flags ajoute fertilized 2
Warn "Fonds insuffisants." player.money < cost 4
Warn "Case occupée : action indisponible." content_type non compatible 3

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)

Fertilisation (Action)

Description UX : Le joueur améliore le sol pour que l'herbe repousse plus vite. Description UI : Outil "Sac d'engrais". Clic sur la case. Emplacement : Menu Outils -> Case. Intégration : Curseur. Navigation : Clic. Événements : FERTILIZE_SOIL.

Assets

  • Musiques : ambience_garden_soft.mp3 (léger, discret).
  • Sons : scatter.mp3.
  • Graphiques : Particules vertes/brunes.
  • Images : Texture terre riche (plus foncée).
  • Animations : Poussière qui retombe.
  • Couleurs : Marron foncé.
  • Textes : TOOL_FERTILIZE = "Engrais", CASE_FERTILIZED = "Sol fertilisé"
  • Formes : Curseur rond (outil), surbrillance tuile.

Définition

Champ Valeur
Concept Case générique : unité élémentaire ((x,y)) dune carte, portant biome, température, contenu, états de sol et paramètres de rendu isométrique.
Rôle Supporter toutes les interactions bas niveau (occupation, états terrain, outils) et fournir un contrat unique pour les spécialisations (zoo/monde).
Portée Toute grille (zoo/world) ; les entités référencent des cases via coordonnées ou grid_id.
Contrainte Invariants stricts (content_type vs ref) ; pas de fallback silencieux ; dérivés (z_index, tile_variant) calculés à la volée.

Fonctions (tableau détaillé)

Fonction Déclencheur Entrées Sorties Règles Observabilité
Résoudre grid_id création x,y string format ${x}:${y} Event GRID_ID_BUILT
Mettre à jour contenu placement content_type/ref case cohérence obligatoire Event CASE_CONTENT_UPDATED
Appliquer outil (fertilize) action player, cost fertility=100 fonds requis, sinon erreur Event FERTILIZE_SOIL
Mettre à jour flags tick env + actions state_flags clamp + cohérence Event CASE_FLAGS_UPDATED
Calculer température locale tick biome + offset + saison float additif Event CASE_TEMP_COMPUTED

Icone de base

Élément Spécification
Représentation Tuile + symbole biome
Couleur dominante selon biome
Variantes icon_tile_generic.png, icon_tile_fertilized.png
États dirty, fertilized, snowy, muddy

Interactions (tableau détaillé)

Interaction Type Préconditions Étapes UI Résultat Erreurs / Messages
Fertiliser Action fonds ≥ 50 outil → clic case fertilité 100 NO_MONEY
Lire état case Consultation - survol tooltip flags -

Annexes Techniques

1. Données et États (tableau détaillé)

Donnée / État Type Exemple Source Contraintes
x int 10 DB coord
y int 12 DB coord
grid_id string 10:12 calcul stable
owner_id uuid_v4 | null uuid_v4 DB null pour monde
biome_type enum prairie DB -
temperature_offset float -2.0 DB additif
content_type enum empty DB voir enum
content_ref uuid_v4 | null - DB null si empty
fertility_level float 100 DB 0..100
cleanliness_level float 80 DB 0..100
state_flags[] enum[] dirty DB sans doublons
render.tile_variant string prairie_A calcul auto-tiling
render.hitbox enum tile config access
iso_x int 120 calcul iso
iso_y int 88 calcul iso
z_index int 12088 calcul tri

Caractéristiques Initiales (tableau détaillé)

Caractéristique Valeur initiale Unité Notes
Fertilité 0 pts init
Propreté 100 pts init
Temp offset 0.0 °C init

Scores Initiaux (tableau détaillé)

Score Valeur initiale Plage Impact
Occupation 0 0..100 densité
Dégradation 0 0..100 sol

2. Cycles de Vie et Apparition (tableau détaillé)

Phase Déclencheur Entrées Sorties Invariants
Création gen map biome case unicité
Mutation actions outils flags cohérence

Conditions d'Apparition (tableau détaillé)

Condition Seuil Opérateur Résultat
Génération true est case créée

Conditions de Disparition (tableau détaillé)

Condition Seuil Opérateur Résultat
Suppression compte true est supprimée

Hérédité (tableau détaillé)

Élément Hérité Règle
Coordonnées Oui stables
Flags Oui persistants DB

3. Impacts Environnementaux

Impact Température (tableau détaillé)

Condition Effet Notes
Saison temp (\pm) global

Impact Milieu (Biome) (tableau détaillé)

Biome Effet Notes
jungle humidité visuel

Impact Saisons (tableau détaillé)

Saison Effet Notes
hiver snowy flag

Impact Heure / Jour-Nuit (tableau détaillé)

Période Effet Notes
nuit luminosité - rendu

4. Impacts Biologiques et Sociaux

Impact Reproduction (tableau détaillé)

Facteur Effet sur taux Condition
fertilized + plantes

Impact Mort (tableau détaillé)

Cas Effet Condition
flooded danger event

Impact Nourriture (tableau détaillé)

Ressource Effet Condition
herbe nourriture prairie

Impact Attractivité(Visiteurs (tableau détaillé)

Action/État Gain Rayon Notes
propre + local ambiance

Impact Attractivité Animaux) (tableau détaillé)

Action/État Effet animaux Condition
sale stress + proximité

Impact Valeur (tableau détaillé)

Facteur Variation Condition
tile premium + flag

5. Impacts Logistiques et Économiques

Vitesse (Camion) (tableau détaillé)

Paramètre Effet Condition
movement_cost vitesse - >1

Vitesse (Nurserie) (tableau détaillé)

Paramètre Effet Condition
- neutre base

Vitesse (Accueil) (tableau détaillé)

Paramètre Effet Condition
- neutre base

Vitesse (Recherche) (tableau détaillé)

Paramètre Effet Condition
- neutre base

Vitesse (Labo) (tableau détaillé)

Paramètre Effet Condition
- neutre base

Vitesse (Visite) (tableau détaillé)

Paramètre Effet Condition
walkable route bool

Dépenses (Billeterie) (tableau détaillé)

Poste Coût Unité Condition
fertilize 50 coins outil

Dépenses (Boutiques) (tableau détaillé)

Poste Coût Unité Condition
nettoyage 5 coins option

Dépenses (Visiteurs) (tableau détaillé)

Poste Coût Unité Condition
saleté temps min déchets

Dépenses (Employés) (tableau détaillé)

Poste Coût Unité Condition
intervention temps min staff

Dépenses (Boutiques) (tableau détaillé)

Poste Coût Unité Condition
section dupliquée 1 coins conservée

Dépenses (Nurseries) (tableau détaillé)

Poste Coût Unité Condition
- 1 coins lore

Dépenses (Nourriture) (tableau détaillé)

Poste Coût Unité Condition
- 1 coins lore

Dépenses (Acceuil des animaux) (tableau détaillé)

Poste Coût Unité Condition
- 1 coins lore

Dépenses (Camion) (tableau détaillé)

Poste Coût Unité Condition
- 1 coins lore

Trajet Visiteurs

Trajet Visiteurs vers/depuis la ville (tableau détaillé)
Source Destination Déclencheur Effet
ville zoo attractivité flux
Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
Source Destination Déclencheur Effet
entrée enclos visite route
Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
Source Destination Déclencheur Effet
enclos boutique faim achats
Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
Source Destination Déclencheur Effet
zoo sortie fin despawn

6. Événements

Événements du Jeu (tableau détaillé)

Event Déclencheur Payload Effet
CASE_FERTILIZED outil grid_id flag +
CASE_CONTENT_UPDATED placement content cohérence

Événements du Carte (tableau détaillé)

Event Déclencheur Effet
CASE_TEMP_COMPUTED tick temp

Événements du Zoo (tableau détaillé)

Event Déclencheur Effet
CASE_FLAGS_UPDATED tick flags

Événements du Ville / Visiteur (tableau détaillé)

Event Déclencheur Effet
GRID_ID_BUILT init id

Événements du Visiteur (tableau détaillé)

Event Déclencheur Effet
CASE_HOVERED UI tooltip

Événements du Joueur (tableau détaillé)

Event Déclencheur Effet
PLAYER_FERTILIZES clic sol

7. Progression

Tableau des Upgrades (tableau détaillé)

Niveau Coût Effet Débloque
Outil engrais 50 fertilité 100 action

8. Logique et Interfaces

Pseudo-code Impacts (tableau détaillé)

Fonction Entrées Sorties Notes
fertilize_case case, player result fonds
getLocalTemp case, season float additif

Messages d'Infos / Alerte (tableau détaillé)

ID Niveau Message Condition
CASE_FERTILIZED Info "Sol fertilisé." succès
NO_MONEY Warn "Fonds insuffisants." coût

Annexes UX/UI

1. Expérience Utilisateur (UX)

Description UX (tableau détaillé)

Parcours But Friction Réduction clics
Utiliser outil améliorer case menus outil direct

Description UI (tableau détaillé)

Composant Contenu États
Curseur outil sac engrais actif
Feedback case particules succès

Emplacement (tableau détaillé)

Zone UI Position Notes
Menu outils HUD accès

Intégration (tableau détaillé)

Intégration Contrat Notes
case_zoo.md spécialisation zoo

Navigation (tableau détaillé)

Action Chemin Résultat
Fertiliser outil → clic succès

Événements (tableau détaillé)

Event UI Déclencheur Effet
FERTILIZE_SOIL clic action

Assets Skinables

Musiques (tableau détaillé)
Asset Usage Durée Notes
ambience_garden_soft.mp3 outil loop discret
Sons (tableau détaillé)
Asset Usage Volume
scatter.mp3 engrais bas
Graphiques (tableau détaillé)
Asset Usage Contraintes
fertilize_particles.png FX overlay
Images (tableau détaillé)
Asset Usage
soil_rich.png tuile
Vidéos (tableau détaillé)
Asset Usage Durée
fertilize_fx.webm feedback 0.8s
Animations (tableau détaillé)
Animation Déclencheur Notes
poussière action 0.6s
Couleurs (tableau détaillé)
Token Valeur Usage
soil_brown #4E342E sol
Textes (tableau détaillé)
Clé FR EN
tool.fertilize Engrais Fertilize
case.fertilized Sol fertilisé Soil fertilized
Formes (tableau détaillé)
Élément Forme Notes
Curseur rond outil