Compare commits

..

9 Commits

Author SHA1 Message Date
430e8d3fd5 ok 2026-03-05 04:03:17 +01:00
6c8a710432 ok 2026-03-05 04:01:29 +01:00
dfecb09b7c ok 2026-03-05 03:39:33 +01:00
349f3b8ac3 docs(specs): complete VIP/pass/skin/theme template sections
**Motivations:**
- Make cosmetic/meta specs implementation-ready with the strict required template.

**Root causes:**
- Specs files were missing the mandatory exact headings/tables required by the new template.

**Correctifs:**
- Added the exact required headings and detailed tables without deleting existing sections.

**Evolutions:**
- Clarified VIP/pass/theme gating rules and UX/UI assets contracts.

**Pages affectées:**
- docs/specs/vip.md
- docs/specs/passe_saisonnier.md
- docs/specs/skin.md
- docs/specs/theme.md
2026-03-05 03:33:23 +01:00
5143a79890 docs: enrich docs/specs and remove placeholders
**Motivations:**
- Make docs/specs implementation-ready without empty sections or placeholders.

**Root causes:**
- Multiple specs still contained non-actionable placeholders (N/A, “see above”, "..."), and inconsistent “no cache” wording.

**Correctifs:**
- Replace placeholders with explicit tables, structures, and typed examples.
- Align “no cache / no memorization” statements where relevant.

**Evolutions:**
- Add a features doc entry to track the documentation enrichment effort.

**Pages affectées:**
- docs/specs/*
- docs/features/docs-specs-enrichment.md
- docs/leo.md
- docs/plan-enrich-docs-specs.md
2026-03-05 03:08:15 +01:00
e92c1355d0 Enrichissement exhaustif des specs : Vue Isométrique et Design
**Motivations:**
- Aligner toute la documentation technique avec la nouvelle direction artistique isométrique (Réf IMG_20260303_170253).
- Faciliter l'implémentation en ajoutant les contraintes techniques liées à la 2.5D (Z-index, Sprites 4 directions).

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

**Correctifs:**
- N/A

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

**Pages affectées:**
- docs/specs/*
2026-03-05 02:10:32 +01:00
1d3352455e Intégration des spécifications Leo : Isométrique, Staff, Cosmétiques
**Motivations:**
- Intégrer les nouvelles fonctionnalités demandées par Leo (vue isométrique, gestion du personnel, personnalisation avatar/zoo).
- Enrichir le gameplay avec des mécaniques de fusion d'enclos et de passes saisonniers.

**Root causes:**
- Demande d'évolution majeure du Game Design (fichier `docs/leo.md`).

**Correctifs:**
- N/A

**Evolutions:**
- Ajout de 19 nouveaux fichiers de spécifications (Staff, Skins, Enclos, Avatar, etc.).
- Mise à jour de 5 fichiers existants pour supporter la vue isométrique et les nouvelles interactions.
- Définition du système de passes temporaires et statut VIP.
- Spécification des employés achetables avec pièces.

**Pages affectées:**
- docs/specs/*
2026-03-05 01:53:05 +01:00
f0219559c5 Standardisation exhaustive des spécifications techniques
**Motivations:**
- Harmoniser la documentation technique pour faciliter le développement.
- Garantir l'exhaustivité des données de Game Design pour chaque entité.

**Root causes:**
- Documentation hétérogène et incomplète.

**Correctifs:**
- N/A

**Evolutions:**
- Réécriture complète de 53 fichiers de spécifications selon un modèle strict.
- Ajout de données de Game Design (prix, durées, impacts) pour combler les manques.
- Ajout systématique des annexes UX/UI.

**Pages affectées:**
- docs/specs/*
2026-03-04 18:07:31 +01:00
ncantu
c7d389ecbb Lint: fix errors and remove unused variables
**Motivations:**
- Ensure lint config is not degraded and fix all lint errors for pousse workflow.

**Root causes:**
- Unused variables kept with _ prefix instead of removed (_row, _questReward, _i).
- getAnimalBlockOrigin had 5 parameters (max 4).
- use of continue statement (no-continue rule).

**Correctifs:**
- ESLint config verified; no eslint-disable in codebase.
- Removed unused variable _row (biome-rules); removed dead function _questReward (quests); removed unused map param _i (state.js).
- getAnimalBlockOrigin refactored to 4 params (pos object instead of x, y).
- Replaced continue with if (cell) block in normalizeLoadedCells (state.js).
- JSDoc param names aligned with _height, _y (biome-rules).

**Evolutions:**
- (none)

**Pages affectées:**
- web/js/biome-rules.js
- web/js/quests.js
- web/js/state.js
- web/js/placement.js
2026-03-04 15:32:27 +01:00
144 changed files with 30554 additions and 4780 deletions

3
.gitignore vendored
View File

@@ -3,6 +3,9 @@ node_modules/
.DS_Store
dist/
build/
app.ini
gitea/
mysql/
.cursor/
terminals/
agent-transcripts/

103
app.ini.example Normal file
View File

@@ -0,0 +1,103 @@
APP_NAME = GIT 4NK
RUN_MODE = prod
RUN_USER = git
WORK_PATH = /data/gitea
[repository]
ROOT = /data/git/repositories
[repository.local]
LOCAL_COPY_PATH = /data/gitea/tmp/local-repo
[repository.upload]
TEMP_PATH = /data/gitea/uploads
[server]
APP_DATA_PATH = /data/gitea
DOMAIN = git1.4nkweb.com
SSH_DOMAIN = git1.4nkweb.com
HTTP_PORT = 3000
ROOT_URL = https://git1.4nkweb.com/
DISABLE_SSH = false
SSH_PORT = 2222
SSH_LISTEN_PORT = 22
LFS_START_SERVER = true
LFS_JWT_SECRET =
OFFLINE_MODE = true
[database]
PATH = /data/gitea/gitea.db
DB_TYPE = mysql
HOST = db:3306
NAME = gitea
USER = gitea
PASSWD =
LOG_SQL = false
SCHEMA =
SSL_MODE = disable
[indexer]
ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve
[session]
PROVIDER_CONFIG = /data/gitea/sessions
PROVIDER = file
[picture]
AVATAR_UPLOAD_PATH = /data/gitea/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars
[attachment]
PATH = /data/gitea/attachments
[log]
MODE = console
LEVEL = info
ROOT_PATH = /data/gitea/log
[security]
INSTALL_LOCK = true
SECRET_KEY =
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = *
INTERNAL_TOKEN =
PASSWORD_HASH_ALGO = pbkdf2
[service]
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
REGISTER_EMAIL_CONFIRM = true
ENABLE_NOTIFY_MAIL = true
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost
[lfs]
PATH = /data/git/lfs
[mailer]
ENABLED = true
SMTP_ADDR = smtp.protonmail.ch
SMTP_PORT = 587
FROM = noreply@4nkweb.com
USER =
PASSWD =
[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true
[cron.update_checker]
ENABLED = false
[repository.pull-request]
DEFAULT_MERGE_STYLE = merge
[repository.signing]
DEFAULT_TRUST_MODEL = committer
[oauth2]
JWT_SECRET =

43
docker-compose-gitea.yml Normal file
View File

@@ -0,0 +1,43 @@
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3016:3000"
- "2222:22"
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql

View File

@@ -0,0 +1,25 @@
# Billeterie flux complet
**Objectif :** Flux dentrée/sortie conforme aux specs : heures douverture 08h20h, entrée limitée à 1 visiteur/s, départs après durée de séjour, affluence selon lheure.
**Référence :** docs/specs/billeterie.md, visiteur.md, inventaire_heures.md ; plan docs/plan-implementation-specs-animaux-billeterie.md.
## Impacts
- **Entrée :** uniquement quand `timeOfDay` dans [OpenHour, CloseHour). Nombre de nouveaux visiteurs par tick plafonné par `MaxEntryPerSecond * secondsPerTick`.
- **Départs :** déjà en place (`getStayDurationSeconds`, filtre `arrivedAt + stayDuration`).
- **Demande :** `getVisitorDemand` multiplié par un coefficient selon lheure (08h10h faible, 10h16h fort, 16h18h décroissant, 18h20h faible, nuit nul).
## Modifications
- **web/js/config.js** : `Billeterie.OpenHour`, `Billeterie.CloseHour`, `Billeterie.MaxEntryPerSecond`.
- **web/js/income.js** : dans `tickVisitorArrivals`, ne pas ajouter de visiteurs si hors créneau ; plafonner les ajouts par tick avec `MaxEntryPerSecond` et `IncomeTickMs` ; `getVisitorDemandHourMultiplier(timeOfDay)` appliqué dans `getVisitorDemand`.
## Modalités de déploiement
Client uniquement. Rechargement suffit.
## Modalités d'analyse
- Nuit (timeOfDay < 8 ou >= 20) : aucun nouveau visiteur nentre.
- Jour : nouveaux visiteurs jusquà cap et demande, avec au plus 1/s réels (selon tick interval).

View File

@@ -28,14 +28,15 @@
## Non implémenté
- **Seuls** : pas de règle « animal seul meurt ».
- **Seuls** : ~~pas de règle « animal seul meurt ».~~ **Implémenté** : `GameConfig.Animal.MinSameSpeciesInRadius`, `RadiusCells`, `MaxSecondsAlone` ; `checkNotAlone` dans `food.js` ; retrait et `deathCountRecent` si seul depuis trop longtemps.
- **Tué par un autre animal d'un autre zoo** : pas de mécanique inter-zoo.
- **Niveau de recherche trop inférieur** : pas de vérification niveau recherche vs niveau animal.
- **Animal (adulte) vente échouée** : à l'expiration d'une annonce adulte (`isBaby: false`), `deathCountRecent` n'est pas incrémenté (actuellement seul le bébé invendu est compté).
- **Niveau de recherche trop inférieur** : ~~pas de vérification niveau recherche vs niveau animal.~~ **Implémenté** : dans `maybeDeathBlock` (food.js), si `def.rarityLevel > getSkillLevel(state)` → retrait et `deathCountRecent`.
- **Animal (adulte) vente échouée** : ~~à l'expiration d'une annonce adulte (`isBaby: false`), deathCountRecent n'est pas incrémenté.~~ **Implémenté** : `tickSaleListings` (trade.js) incrémente `deathCountRecent` pour les listings expirés adulte comme bébé.
## Fichiers
- `web/js/food.js` : `checkDeathCauses`, `maybeDeathBlock`, `filterPendingBabies`, `filterReceptionAnimals`.
- `web/js/trade.js` : `tickSaleListings` (expiration bébé).
- `web/js/food.js` : `checkDeathCauses`, `maybeDeathBlock`, `checkNotAlone`, `filterPendingBabies`, `filterReceptionAnimals` ; cause recherche (getSkillLevel), cause seuls (Animal config).
- `web/js/trade.js` : `tickSaleListings` (expiration bébé et adulte → deathCountRecent).
- `web/js/animal-visits.js` : `lastVisitedAt` pour cause « pas visités ».
- `server/db.js` : `expireSaleListings` (bébé invendu).
- `web/js/config.js` : `Animal.MinSameSpeciesInRadius`, `RadiusCells`, `MaxSecondsAlone`.

View File

@@ -0,0 +1,24 @@
# Specs documentation enrichment (docs/specs)
**Auteur : Équipe 4NK**
## Objectif
- Rendre lensemble des fichiers de `docs/specs/` exploitables pour une implémentation, sans sections vides, sans placeholders (`N/A`, “voir …”, timestamps `"..."`, ellipses `"..."`), et sans suppression de rubriques existantes.
## Impacts
- Documentation uniquement (pas de modification de logique applicative).
- Convergence des conventions isométriques (2.5D) et des champs de rendu (`iso_x`, `iso_y`, `z_index`, hitbox) dans les specs concernées.
- Clarification des règles “pas de cache / pas de mémorisation” dans les specs où le sujet apparaît.
## Modifications
- Enrichissement des tables et contrats (données/états, cycles, impacts, événements, UX/UI) là où il restait des champs non spécifiés.
- Remplacement des références non actionnables (ex. “voir …”) par des tables explicites.
- Suppression des timestamps et champs dexemple `"..."` au profit de types (`timestamp`) ou structures explicites.
## Modalités danalyse
- Re-scan de `docs/specs/` pour labsence de `N/A`, “ci-dessus”, et `...`.
- Vérification de cohérence “pas de cache” sur les spécifications qui mentionnent des calculs dérivés.
## Modalités de déploiement
- Aucun déploiement (documentation). Les changements suivent le workflow Git standard du dépôt.

View File

@@ -0,0 +1,24 @@
# Feedbacks visuels animaux
**Objectif :** États visuels (froid, chaud, faim, malade, heureux) dérivés des données existantes, sans jauges. Specs : animal_generique.md, temperature.md.
## Impacts
- **Rendu :** classes CSS `animal-cold`, `animal-hot`, `animal-hungry`, `animal-sick`, `animal-happy` sur les cellules animal (origine et parties de bloc).
- **Logique :** `getAnimalVisualState(cell, state, grid, originKey)` dans animal-visual-state.js : température (avec saison), lastFedAt, lastVisitedAt, seuils config (Food.MaxSecondsWithoutFood, Visitor.MaxSecondsWithoutVisit) pour déduire cold/hot/hungry/sick/happy.
## Modifications
- **web/js/animal-visual-state.js** : `getAnimalVisualState` (froid = temp < idéal - tolérance, chaud = temp > idéal + tolérance, hungry = fedAgo > 60 % maxFood, sick = cold ou hot ou hungry ou visitAgo > 80 % maxVisit, happy = aucun problème et bien nourri/visité).
- **web/js/ui.js** : import `getAnimalVisualState`, pour chaque cellule animal (origine ou non) récupération de lorigine et application des classes.
- **web/css/main.css** : `.animal-cold` (teinte bleutée, givre), `.animal-hot` (rougeâtre), `.animal-hungry` (opacité, icône faim), `.animal-sick` (saturé/brillance réduits), `.animal-happy` (lueur, brillance).
## Modalités de déploiement
Client uniquement. Rechargement suffit.
## Modalités d'analyse
- Animal sur case froide (ou saison hiver) : classe cold visible.
- Animal non nourri depuis longtemps : hungry puis sick.
- Animal bien nourri et visité, temp ok : happy.

View File

@@ -16,7 +16,7 @@
- **state.js**
- `buildDefaultCells()` : appelle `buildDefaultRow1Cells()` du module partagé `default-grid-layout.js` (research, billeterie, nursery, reception, food, school en ligne 1).
- `addStarterAnimals(state)` : importée depuis `default-grid-layout.js` ; place 6 animaux (3 couples) sur la ligne 2.
- `defaultState()` : construit le state puis appelle `addDefaultStarterAnimals(state)` avant retour.
- `defaultState()` : construit le state puis appelle `addStarterAnimals(state)` avant retour.
- **prestige.js**
- Même layout de grille et mêmes 3 couples après reset, via `buildDefaultRow1Cells()` et `addStarterAnimals()` importés de `default-grid-layout.js`. Réinitialisation de `pendingBabies` et `receptionAnimals`.

View File

@@ -0,0 +1,36 @@
# Saisons cycle et impacts
**Objectif :** Cycle de 4 saisons (Printemps, Été, Automne, Hiver) dérivé du jour de jeu, avec impacts sur température, visiteurs, reproduction et billeterie.
**Référence :** docs/specs/inventaire_saisons.md, temperature.md, visiteur.md, reproduction.md, billeterie.md ; plan docs/plan-implementation-specs-animaux-billeterie.md.
## Impacts
- **State :** `gameDayTotal` (incrémenté à chaque jour de jeu dans `tickTime`), `lastSeason`, `seasonChangeMessage` (pour notification).
- **Température :** `getDisplayTemperature` + `getSeasonTemperatureModifier(getCurrentSeason(state))` dans food.js (mort) et reproduction.js (délai naissance).
- **Visiteurs :** `getVisitorDemand` multiplié par `getSeasonVisitorMultiplier(season)`.
- **Reproduction :** délai multiplié par `(1 + getSeasonReproductionBonus(season))` (Printemps +20 %, Hiver -50 %). En hiver, les espèces adaptées au froid (`biome === "Mountain"`) sont exemptées du malus (`getEffectiveReproductionSeasonBonus` dans reproduction.js).
- **Billeterie :** `getVisitorParams` applique `getSeasonTicketPriceMultiplier(season)` sur le paiement entrée (été +20 %, hiver -10 %).
- **UI :** toast « C'est le [Saison] ! » à chaque changement de saison (3 s).
## Modifications
- **web/js/config.js** : `Season.DaysPerSeason`, `TemperatureModifier`, `VisitorMultiplier`, `ReproductionBonus`, `TicketPriceMultiplier`.
- **web/js/time-weather.js** : incrément `gameDayTotal` quand `timeOfDay` dépasse 24.
- **web/js/state.js**, **web/js/types.js** : `gameDayTotal`, `lastSeason`, `seasonChangeMessage`.
- **web/js/seasons.js** : `getCurrentSeason`, `getSeasonDay`, `getSeasonTemperatureModifier`, `getSeasonVisitorMultiplier`, `getSeasonReproductionBonus`, `getSeasonTicketPriceMultiplier`.
- **web/js/game-loop.js** : détection changement de saison, pose `seasonChangeMessage`.
- **web/js/food.js** : température effective = base + seasonMod pour `maybeDeathBlock`.
- **web/js/reproduction.js** : temp avec seasonMod, facteur × (1 + seasonBonus) ; `getEffectiveReproductionSeasonBonus(season, def)` pour exonérer Mountain en hiver.
- **web/js/income.js** : demande × seasonVisitorMult, paiement × seasonTicketPriceMult.
- **web/js/ui.js** : toast saison (seasonToastEl), `seasonLabel`, `seasonChangeToast`.
- **web/css/main.css** : `.season-toast`.
## Modalités de déploiement
Client uniquement. Rechargement suffit.
## Modalités d'analyse
- Avancer le temps (DayLengthSeconds court) jusquà changement de jour ; vérifier `gameDayTotal` ; après 7 jours (DaysPerSeason), vérifier changement de saison et toast.
- Vérifier en été : demande visiteurs plus forte, prix ticket plus élevé ; en hiver : demande plus faible, prix ticket plus bas.

View File

@@ -0,0 +1,42 @@
# Extraction du rendu UI (render)
## Objectif
Réduire `web/js/ui.js` pour respecter les règles ESLint :
- max 250 lignes par fichier
- max 40 lignes par fonction
## Réalisé
- **no-shadow** : variables `phase` / `weather` dans `updateStatus` renommées en `timePhase` / `weatherVal` ; `mapLevel` dans `fullRender` renommé en `currentMapLevel`.
- **Imports inutilisés** : suppression des imports devenus inutiles après utilisation des modules world-map et grid (zoo, conveyor, economy, placement, texts-fr, api-client) ; suppression de la constante `EGG_EMOJI` non utilisée.
- **Réutilisation des modules** : `render()` utilise désormais `renderWorldMap(ctx)` de `ui-world-map.js` et `renderGrid(ctx)` de `ui-grid.js` au lieu des anciennes fonctions locales (environ 900 lignes supprimées).
- **Refs** : `selectedTokenId`, `emptyCellChoice`, `lastActionWasDrop`, `sellZoneJustDropped` sont passés en refs pour être partagés avec les handlers (grid, sell zone) et les modules.
# Extraction du rendu UI (render)
## Objectif
Réduire `web/js/ui.js` pour respecter les règles ESLint :
- max 250 lignes par fichier
- max 40 lignes par fonction
## Réalisé
- **no-shadow** : variables `phase` / `weather` dans `updateStatus` renommées en `timePhase` / `weatherVal` ; `mapLevel` dans `fullRender` renommé en `currentMapLevel`.
- **Imports inutilisés** : suppression des imports devenus inutiles après utilisation des modules world-map et grid (zoo, conveyor, economy, placement, texts-fr, api-client) ; suppression de la constante `EGG_EMOJI` non utilisée.
- **Réutilisation des modules** : `render()` utilise désormais `renderWorldMap(ctx)` de `ui-world-map.js` et `renderGrid(ctx)` de `ui-grid.js` au lieu des anciennes fonctions locales (environ 900 lignes supprimées).
- **Refs** : `selectedTokenId`, `emptyCellChoice`, `lastActionWasDrop`, `sellZoneJustDropped` sont passés en refs pour être partagés avec les handlers (grid, sell zone) et les modules.
- **Extraction en modules** :
- `ui-render-dom.js` : `buildUIDOM`, `createTabsStructure`, `updateStatusBody`, `createUpdateStatus`, `createFullRender`, `updateWorldMapUpgradeAndCounters`, `buildFinishContexts`, `finishBuildUIDOM` ; `formatQuestListHtml` pour garder `updateStatusBody` sous 40 lignes ; `finishBuildUIDOM` prend un objet `opts` (max-params) et délègue les contextes à `buildFinishContexts`.
- `ui-render-dom-panels.js` : `buildWorldMapWrap`, `buildWorldMapUpgradeZone`, `buildWorldMapTruckDropZone`, `buildWorldMapActions`, `buildWorldMapSection`, `buildPlotUpgradeZone`, `buildGridSection`, `attachSellZoneListeners`, `handleSellZoneClick` ; import de `handleWorldMapTruckDrop` et `handleSellZoneDrop` depuis `ui-render-dom-drops.js`.
- `ui-render-dom-drops.js` (nouveau) : handlers de drop pour la carte du monde (camion) et la sell zone ; `handleWorldMapTruckDrop`, `handleSellZoneDrop` exportés ; sous-handlers `handleTruckDropBaby`, `handleTruckDropAnimal`, `handleTruckDropEgg`, `applyNurseryDrop`, `applyReceptionDrop`, `applyGridCellSell` pour rester sous 40 lignes et réduire la complexité.
- `ui-render-gamebar.js` : `buildGameBar` et helpers (title, status bar, view switcher, music, auto mode, prestige/restart, quest dropdown) ; import de `buildAutoProfilePicker` depuis `ui-render-gamebar-picker.js`.
- `ui-render-gamebar-picker.js` (nouveau) : `buildAutoProfilePicker` avec `buildAutoProfilePickerFamilyStep` et `buildAutoProfilePickerSpecStep` pour respecter max-lines-per-function et max-lines du fichier gamebar.
- `ui.js` : `EMOJI_BY_COLOR`, `animalEmoji`, `buildRenderSetup(opts)`, `render(root, opts)` qui appelle `buildUIDOM(root, setup)` ; fichier et fonctions sous les limites.
- **Imports nettoyés** : `getPlotUpgradeCost` retiré de panels ; `t` retiré de ui-render-dom ; imports inutilisés retirés de ui-render-gamebar (getSkillLevel, getVisitorCount, getTimePhase, doPrestige, playSound, errorMessage, questDescription, timePhaseLabel, weatherLabel, GameConfig ; textes et auto-mode-profiles conservés dans le picker).
## État actuel
- **ESLint** : 0 erreur sur les fichiers modifiés. Les warnings (complexity, etc.) restants sont hors périmètre de cette extraction.
- **Fichiers** : `ui.js`, `ui-render-dom.js`, `ui-render-dom-panels.js`, `ui-render-dom-drops.js`, `ui-render-gamebar.js`, `ui-render-gamebar-picker.js` respectent max-lines (250) et max-lines-per-function (40).

35
docs/leo.md Normal file
View File

@@ -0,0 +1,35 @@
les cases en entouré d'un enclos qui est joint quand plusieurs animaux identiques sont cotes à cotes
les cartes prennet tout l'espace de l'écrant sous la barre du haut (et dézoom lorsqu'agrandi)
il y a desormais un avatar presonnalisable du joueur (avec un profil de jeu) avec le speudo
son personnage est dans un coin de l'écran et il peut avoir des skins
le zoo lui meme peut avoir des skins
graphiquement le zoo à une banderole d'acceuil avec son nom (à définir au début) tenu par des poteaux en bois
il est possible de changer des cases en chemins upgadables (payant) (terre, gravier, sols jolis...) avec un effet sur l'attractivité plus elevée et la rapidité des visiteurs (plus rapides), les visiteurs sont très attirés à rester sur les chemins
pour traverser l'eau il faut des ponds (techniquement comme les chemins mais pour l'eau)
chaque animal a aussi son objet spécial dans l'enclos (arbre à singe par exemple)
il y a desormais des employés que l'on peut acheter avec les pieces du zoo:
soigneur
nourisseur
agent de sécurité
artiste
checheur (jusqu'à 3 chercheur par centres de recheche)
ne pas confondre les laboratoires sur les cartes avec des bébés ou animaux rares et les centres de recherche de zoos qui produisent des unités de recherche
on peut acheter avec des pièces de la nourriture spéciales différente des cases nourriture pour booster durant un temps limité les caractéristique de la nourriture pour un animal en particulier (nouriture dédiée) ainsi les animaux ont 1 nourriture préférée
Faire un menu spécial pour les achats du zoo avec les pièces
Faire des personnages homme et femme
mettre en place un système de passes temporaires qui permettent d'avoir acces à des skins et thèmes durant 1 mois : jungle, tigre,ourse,lapin,lion,chat,dinosore,pentère,jaguar,crocodile 3d
sac tigre,ourse,lapin,lion,chat,dinosore,pentèrejaguar,crocodile
les VIP peuvent conserver leurs thèmes pour toujours tant qu'ils sont vip
un inventaire est ajouté pour gérer les pièces des skins unitairement
les animaux sont en petit dans leur enclos, une affiche de l'animal est sur une des portions horizontales de l'enclos
prévoir un passage en monde isométrique
sur la carte du monde à coté de la case du nom du zoo, une case avec l'avator du joueur (ou bot) du zoo.

View File

@@ -0,0 +1,192 @@
# Plan Cursor (Cas A) — Exécution “build-ready” : enrichir `docs/specs/` sans suppression
Référence direction artistique : `docs/specs/IMG_20260303_170253.jpg`.
## Objectif exécutable
Enrichir **tous** les fichiers `docs/specs/*.md` pour quils soient “prêts à coder” (règles, données, cas limites, UX/UI), en garantissant :
- **Aucune suppression** de rubriques existantes (même vides).
- **Aucune renommage / réordonnancement** de la structure.
## Règles immuables (garde-fous)
- Ne supprimer aucun titre / sous-titre / tableau / section, même si vide.
- Ne pas renommer les rubriques.
- Si une section existe déjà mais est faible : enrichir **dans la même section**.
- Si une section existe en doublon : conserver les deux, enrichir, ajouter une ligne de clarification (“complément / fait foi”).
- Intégrer partout où pertinent la contrainte **isométrique 2.5D** (grille losange, sprites 4 directions, occlusion, `z_index`, hitbox base sprite).
- Ne pas déclencher de build/checks sans validation explicite “OK build”.
- Ne pas committer sans validation explicite du message de commit.
## Definition of Done (DoD) — par fichier
Un fichier est “Done” si :
- **Structure intacte** (rubriques identiques à avant).
- Tous les placeholders évidents (`N/A`, `...`, “voir ci-dessus” non actionnable) ont été remplacés par des détails implémentables.
- Les tableaux ont unités, plages, règles de cumul, caps/planchers **si la rubrique existe**.
- Si un modèle de données existe : il contient `id`, `created_at`, `updated_at`, types/enums, et les champs isométriques si entité visuelle (`grid`, `iso_x`, `iso_y`, `z_index`, `hitbox`).
- Si UX/UI existe : interactions (clic base sprite), feedback hover/selection, assets, événements, messages i18n (clés FR/EN).
## Protocole exécutable (à dérouler mécaniquement)
### Étape 0 — Pré-scan global
- [ ] Rechercher `N/A` dans `docs/specs/` et obtenir la liste des fichiers impactés.
- [ ] Rechercher `...` / placeholders de structure (“`[ ... ]`”, “voir ci-dessus”) dans `docs/specs/`.
- [ ] Classer les fichiers en 5 lots (A→E) ci-dessous.
**Critère de sortie Étape 0 :** liste des fichiers à corriger par placeholder, et ordre de traitement.
### Étape 1 — Traitement par lots (ordre strict)
#### Lot A — Fondations carte / iso / rendu
Objectif : tout ce qui touche à grille, cases, enclos, chemins, ponts, profondeur.
- [ ] Traiter chaque fichier du lot A en suivant “Procédure par fichier”.
**Critère de sortie Lot A :** champs transverses iso (`grid`, `iso_x`, `iso_y`, `z_index`, `hitbox`) cohérents entre ces fichiers.
#### Lot B — Entités vivantes
Objectif : visiteurs, animaux, bébés, reproduction, mort, besoins.
- [ ] Traiter chaque fichier du lot B en suivant “Procédure par fichier”.
**Critère de sortie Lot B :** cycles de vie, seuils, impacts et événements cohérents entre fichiers (ex. reproduction ↔ saisons ↔ température).
#### Lot C — Bâtiments & services
Objectif : boutique, billeterie, nurserie, accueil, camion, centre recherche, labo.
- [ ] Traiter chaque fichier du lot C en suivant “Procédure par fichier”.
**Critère de sortie Lot C :** capacités, files dattente, dépenses/recettes, préconditions, erreurs, interactions UI codables.
#### Lot D — Économie & méta
Objectif : scores, attractivité, enchères, ventes, upgrades, skins/themes/passes/VIP, inventaires, menu achats.
- [ ] Traiter chaque fichier du lot D en suivant “Procédure par fichier”.
**Critère de sortie Lot D :** toutes les mécaniques ont unités, formules, règles de cumul, caps/planchers et messages UX.
#### Lot E — Inventaires & tables de référence
Objectif : saisons, météo, températures, milieux, quêtes, problèmes visiteurs, heures.
- [ ] Traiter chaque fichier du lot E en suivant “Procédure par fichier”.
**Critère de sortie Lot E :** tables de ref complètes (enums/ranges/priorités) et réutilisées par les autres specs.
### Procédure par fichier (checklist atomique)
Pour chaque fichier `.md` ciblé :
- [ ] Lire le fichier en entier.
- [ ] Vérifier la liste des rubriques existantes (ne rien supprimer).
- [ ] Remplacer chaque occurrence de `N/A` par un contenu implémentable (valeurs, conditions, règles, assets).
- [ ] Remplacer chaque placeholder de structure (`...`, `[ ... ]`) par un exemple complet cohérent.
- [ ] Compléter les tableaux : unités, plages, cumul, caps/planchers, préconditions, postconditions.
- [ ] Compléter les interactions : erreurs (fonds insuffisants, inventaire plein, placement invalide), cas limites (pathfinding bloqué, occlusion, click ambiguity).
- [ ] Si la rubrique JSON existe : ajouter/normaliser `id`, timestamps, enums, et champs iso si entité visuelle.
- [ ] Si UX/UI existe : préciser hitbox base sprite, feedback hover/selection, Z-order, assets, events, messages i18n FR/EN.
- [ ] Vérifier quaucun titre/sous-titre na disparu.
**Critère de sortie du fichier :** DoD “par fichier” satisfait.
### Étape 2 — Contrôle final global
- [ ] Vérifier cohérence des champs transverses (`id`, `created_at`, `updated_at`, `owner_id`, `grid`, `iso_x`, `iso_y`, `z_index`, `status_flags`).
- [ ] Vérifier cohérence des événements/messages (noms, niveaux, conditions).
- [ ] Vérifier conformité aux règles projet (ex. interdiction de cache dans les specs).
## Commit et checks (gated)
- [ ] Préparer le message de commit au format imposé (`**Motivations:**`, `**Root causes:**`, `**Correctifs:**`, `**Evolutions:**`, `**Pages affectées:**`) et demander validation.
- [ ] **Ne pas committer** sans validation explicite.
- [ ] **Ne pas exécuter de build/checks** sans “OK build”.
## Mapping des lots (ordre recommandé)
- **Lot A** : `carte_zoo.md`, `case_generique.md`, `case_zoo.md`, `enclos.md`, `chemin.md`, `pont.md`, `affiche_enclos.md`, `objet_enclos.md`, `tech_architecture.md`
- **Lot B** : `animal_generique.md`, `bebe_animal.md`, `visiteur.md`, `reproduction.md`, `mort_bebe.md`, `temperature.md`, `milieu.md`, `etat.md`
- **Lot C** : `boutique.md`, `billeterie.md`, `nurserie.md`, `accueil_animaux.md`, `camion.md`, `centre_recherche.md`, `laboratoire.md`
- **Lot D** : `score_reputation.md`, `score_survie.md`, `attractivite_interne_zoo.md`, `attractivite_zoo_sur_ville.md`, `enchere_generique.md`, `vente_animal.md`, `vente_enchere_animal.md`, `vente_enchere_bebe.md`, `achat_upgrade_*.md`, `inventaire_animaux.md`, `inventaire_bebe_animaux.md`, `menu_achats.md`, `skin.md`, `theme.md`, `passe_saisonnier.md`, `vip.md`, `inventaire_skins.md`, `joueur.md`, `personnage_generique.md`, `bot.md`, `zoo.md`
- **Lot E** : `inventaire_saisons.md`, `inventaire_meteos.md`, `inventaire_temperatures.md`, `inventaire_milieux.md`, `inventaire_quetes.md`, `inventaire_problemes_visiteurs.md`, `inventaire_heures.md`, `carte_monde.md`, `carte_generique.md`, `case_monde.md`, `site_generique.md`, `agrandissement_carte.md`
## Checklist exhaustive — fichiers `docs/specs/` à enrichir (sans suppression)
- [ ] `docs/specs/accueil_animaux.md`
- [ ] `docs/specs/achat_upgrade_boutique.md`
- [ ] `docs/specs/achat_upgrade_camion.md`
- [ ] `docs/specs/achat_upgrade_case.md`
- [ ] `docs/specs/achat_upgrade_case_zoo.md`
- [ ] `docs/specs/achat_upgrade_centre_recherche.md`
- [ ] `docs/specs/achat_upgrade_generique.md`
- [ ] `docs/specs/achat_upgrade_nurserie.md`
- [ ] `docs/specs/affiche_enclos.md`
- [ ] `docs/specs/agent_securite.md`
- [ ] `docs/specs/agrandissement_carte.md`
- [ ] `docs/specs/animal_generique.md`
- [ ] `docs/specs/artiste.md`
- [ ] `docs/specs/attractivite_interne_zoo.md`
- [ ] `docs/specs/attractivite_zoo_sur_ville.md`
- [ ] `docs/specs/avatar_joueur.md`
- [ ] `docs/specs/banderole_accueil.md`
- [ ] `docs/specs/bebe_animal.md`
- [ ] `docs/specs/billeterie.md`
- [ ] `docs/specs/bot.md`
- [ ] `docs/specs/boutique.md`
- [ ] `docs/specs/camion.md`
- [ ] `docs/specs/carte_generique.md`
- [ ] `docs/specs/carte_monde.md`
- [ ] `docs/specs/carte_zoo.md`
- [ ] `docs/specs/case_generique.md`
- [ ] `docs/specs/case_monde.md`
- [ ] `docs/specs/case_zoo.md`
- [ ] `docs/specs/centre_recherche.md`
- [ ] `docs/specs/chemin.md`
- [ ] `docs/specs/chercheur.md`
- [ ] `docs/specs/enchere_generique.md`
- [ ] `docs/specs/enclos.md`
- [ ] `docs/specs/etat.md`
- [ ] `docs/specs/impacts_generique.md`
- [ ] `docs/specs/inventaire_animaux.md`
- [ ] `docs/specs/inventaire_bebe_animaux.md`
- [ ] `docs/specs/inventaire_heures.md`
- [ ] `docs/specs/inventaire_meteos.md`
- [ ] `docs/specs/inventaire_milieux.md`
- [ ] `docs/specs/inventaire_problemes_visiteurs.md`
- [ ] `docs/specs/inventaire_quetes.md`
- [ ] `docs/specs/inventaire_saisons.md`
- [ ] `docs/specs/inventaire_skins.md`
- [ ] `docs/specs/inventaire_temperatures.md`
- [ ] `docs/specs/joueur.md`
- [ ] `docs/specs/laboratoire.md`
- [ ] `docs/specs/menu_achats.md`
- [ ] `docs/specs/milieu.md`
- [ ] `docs/specs/mort_bebe.md`
- [ ] `docs/specs/nourisseur.md`
- [ ] `docs/specs/nourriture_speciale.md`
- [ ] `docs/specs/nurserie.md`
- [ ] `docs/specs/objet_enclos.md`
- [ ] `docs/specs/passe_saisonnier.md`
- [ ] `docs/specs/personnage_generique.md`
- [ ] `docs/specs/pont.md`
- [ ] `docs/specs/reproduction.md`
- [ ] `docs/specs/score_reputation.md`
- [ ] `docs/specs/score_survie.md`
- [ ] `docs/specs/site_generique.md`
- [ ] `docs/specs/skin.md`
- [ ] `docs/specs/soigneur.md`
- [ ] `docs/specs/tech_architecture.md`
- [ ] `docs/specs/temperature.md`
- [ ] `docs/specs/theme.md`
- [ ] `docs/specs/vente_animal.md`
- [ ] `docs/specs/vente_enchere_animal.md`
- [ ] `docs/specs/vente_enchere_bebe.md`
- [ ] `docs/specs/ville.md`
- [ ] `docs/specs/vip.md`
- [ ] `docs/specs/visiteur.md`
- [ ] `docs/specs/zoo.md`

View File

@@ -1,321 +0,0 @@
# Plan d'implémentation Rappel des grandes règles (cahier des charges 174-324)
Plan pour implémenter lintégralité du bloc « Rappel des grandes règles » sans exception. Les phases sont ordonnées par dépendances ; chaque phase livre un ensemble cohérent et testable.
---
## 0. Modèle de données et configuration
**Objectif** : Fondations pour tout le reste (cases avec couleur + température, bâtiments, bébés vs animaux, ventes).
**Livrables** :
- **Cases** : chaque case a une **couleur** (milieu : eau douce, eau salée, montagne, prairie, forêt, etc.) et une **température** (nombre ou plage). Transitions douces = formules dinterpolation entre cases voisines (calcul côté moteur).
- **Animaux multi-cases** : définition des types danimaux qui occupent N×M cases (shape), et stockage dans `grid.cells` (référence à une entité « animal » multi-case ou marquage des cases).
- **Types de bâtiments** (remplacement / extension des kinds actuels) :
- `research` (Centre de recherche), 7 niveaux
- `billeterie`, 7 niveaux
- `boutique` (déjà présent en `souvenirShop` → renommer/aligner), 7 niveaux
- `nursery`, 7 niveaux (au lieu de 5)
- `food` (Nourriture), 7 niveaux
- `reception` (Accueil nouveaux animaux), 7 niveaux
- `truck` (camion : actuellement métadonnée détat, pas une case à trancher : case dédiée ou zone comme aujourdhui)
- `biomeChangeColor` (changement de milieu couleur), 7 niveaux
- `biomeChangeTemp` (changement de milieu température), 7 niveaux
- **Entités déplaçables** : `baby` (bébé, en nurserie ou en vente), `animal` (adulte, sur carte ou en accueil ou en vente). Plus dœufs comme objet principal : les zoos exposent des **bébés** et des **animaux** à lachat/vente.
- **Config** : GameConfig étendu (niveaux max à 7 pour les bâtiments listés, coûts, capacités : recherche 10 zoos/unité, billeterie 20 visiteurs/unité, boutique 5 visiteurs/unité, nurserie 1 bébé/unité, nourriture 5 animaux/unité, accueil 1 animal/unité, camion 1/unité).
**Fichiers impactés** : `web/js/types.js`, `web/js/config.js`, `web/js/state.js`, `server/schema.sql` (si extension game_state), `web/js/loot-tables.js` (animaux avec `cellsWide`, `cellsHigh`, température idéale, score reproduction/survie par milieu).
**Dépendances** : aucune.
---
## 1. Cartes : couleurs et températures des cases
**Objectif** : Les cases ont une couleur (milieu) et une température ; les transitions sont douces entre cases.
**Livrables** :
- **Couleurs** : élargir les biomes au-delà de prairie/océan/montagne (eau douce, eau salée, montagne, prairie, forêt, etc.) ; chaque case a un `biome` (couleur/milieu) et un `temperature` (valeur ou min/max).
- **Transitions douces** : calcul de la couleur et de la température affichées par interpolation avec les cases voisines (ou gradient par position). Export dune fonction du type `getDisplayColor(x, y, grid)`, `getDisplayTemperature(x, y, grid)`.
- **Rendu** : CSS/Canvas ou styles dynamiques pour fond de case selon couleur et température (dégradés entre cases).
- **Grille** : les cases forment le cadrillage des cartes (zoo et monde) ; pas de changement de structure, seulement sémantique couleur/température.
**Fichiers impactés** : `web/js/biome-rules.js` (ou nouveau `cell-environment.js`), `web/js/grid-utils.js`, `web/css/main.css`, `web/js/ui.js` (rendu grille).
**Dépendances** : Phase 0.
---
## 2. Animaux multi-cases
**Objectif** : Certains animaux prennent plusieurs cases.
**Livrables** :
- **Définition** : dans les données animaux (loot-tables ou équivalent), champs `cellsWide`, `cellsHigh` (ex. 1×1, 2×2). Placement valide si toutes les cases cibles sont vides et dans les limites.
- **Stockage** : soit une entité « animal » avec `originKey` (case coin) + `animalId` + `width`, `height`, soit marquage de chaque case avec référence à la même entité. Suppression/mouvement : toute la surface est libérée ou déplacée.
- **Règles** : cohérence animal/milieu et température (phase 1) appliquée sur la zone couverte (ex. toutes les cases dans la plage de température idéale ou au moins la case dorigine).
- **UI** : affichage dun sprite ou emprise sur plusieurs cases ; glisser-déposer dun animal multi-case déplace tout le bloc.
**Fichiers impactés** : `web/js/loot-tables.js`, `web/js/placement.js`, `web/js/grid-utils.js`, `web/js/ui.js`, `web/js/state.js` (structure cells).
**Dépendances** : Phase 0, 1.
---
## 3. Bâtiments zoo (types et niveaux)
**Objectif** : Implémenter tous les types de cases « achetables » avec 7 niveaux et leurs effets.
**Livrables** :
- **Centre de recherche** (`research`) : 7 niveaux. Produit des **unités de recherche** par tick (formule par niveau). Stock dans le game_state (ex. `researchPoints`). 1 unité = 10 zoos max couverts (par proximité sur la carte du monde) ; ces zoos débloquent des niveaux danimaux/bébés. Coût dupgrade par palier.
- **Billeterie** : 7 niveaux. Cap visiteurs en simultané = 20 × niveau (ou 20 par unité comme dans le rappel). Entrée des visiteurs uniquement via la billeterie (voir phase 8). Coût par palier.
- **Boutique** : passer à 7 niveaux. 1 unité = 5 visiteurs simultanés max (effet sur revenus quand un visiteur « passe » par une boutique). Coût par palier.
- **Nurserie** : 7 niveaux. 1 unité = 1 bébé max en croissance. Effet « plus rapide » et « meilleurs reproducteurs » (à lier à la reproduction, phase 7). Coût par palier.
- **Nourriture** : 7 niveaux. 1 unité = 5 animaux max nourris (voir phase 4). Coût par palier.
- **Accueil nouveaux animaux** : 7 niveaux. 1 unité = 1 animal en acclimatation. Durée dacclimatation selon niveau ; à la fin, état « animal prêt » déplaçable sur une case ou sur le camion. Coût par palier.
- **Camion** : 7 niveaux. Représentation : soit une case dédiée « camion », soit une zone comme aujourdhui ; 1 unité = 1 camion. Effets : plus rapide (durée trajet), dégrade moins le score de reproduction avec la durée du transport (à lier aux ventes et au score de reproduction).
- **Changement de milieu (couleur)** : 7 niveaux, payant. Permet de modifier la couleur/milieu dune case (ou dune zone selon niveau). Effets : plage de température plus précise, améliore reproduction, diminue besoin nourriture, allonge temps avant mort.
- **Changement de milieu (température)** : 7 niveaux, payant. Même idée pour la température des cases.
**Grille au lancement** (à appliquer en phase 11) : 1 Agrandissement zoo, 1 Recherche, 1 Billeterie, 1 Nurserie, 1 Accueil, 1 Nourriture, 1 Camion, 24 cases (3 couleurs). Pas de « changement de milieu » au lancement.
**Fichiers impactés** : `web/js/config.js`, `web/js/state.js`, `web/js/economy.js`, `web/js/placement.js`, `web/js/zoo.js`, `web/js/ui.js`, `server/` si game_state étendu.
**Dépendances** : Phase 0.
---
## 4. Bébés et flux nurserie / accueil (remplacement œufs)
**Objectif** : Ce ne sont plus des œufs qui apparaissent dans les zoos mais des bébés ; flux nurserie → bébé mature, achat/accueil → animal prêt.
**Livrables** :
- **Suppression du modèle « œuf »** comme objet acheté sur la carte du monde. Les zoos (et le labo) proposent des **bébés** ou des **animaux adultes** à lachat.
- **Nurserie** : un bébé est « en croissance » dans une case nurserie (1 bébé par unité de capacité). À la fin de la durée : état **bébé mature**. Déplacement possible : vers une case vide du zoo (devient animal) ou vers le camion (mise en vente, voir phase 9).
- **Accueil nouveaux animaux** : un animal acheté (ou reçu) est dabord en **accueil** (1 animal par unité). À la fin de lacclimatation : **animal prêt**. Déplacement possible : vers une case vide du zoo ou vers le camion (mise en vente).
- **Carte du zoo** : on peut **acheter** (occupe la case) : recherche, billeterie, boutique, nurserie, nourriture, accueil, camion, changement de milieu (couleur), changement de milieu (température). On peut **déplacer dessus** (occupe la case) : bébé mature, animal prêt.
- **État** : `pendingBabies` / `receptionAnimals` avec `readyAt`, `babyId` / `animalId`, lien vers case nurserie/accueil. Quand `now >= readyAt`, lentité est déplaçable (bébé mature / animal prêt).
**Fichiers impactés** : `web/js/state.js`, `web/js/zoo.js`, `web/js/placement.js`, `web/js/hatching.js` (remplacer par croissance bébé + acclimatation), `web/js/conveyor.js` (offres = bébés/animaux, pas œufs), `web/js/ui.js`, `web/js/world-map.js`, API offres.
**Dépendances** : Phase 0, 3.
---
## 5. Nourriture, consommation et morts
**Objectif** : Chaque animal a une consommation / unité de temps ; sinon il meurt. Toutes les causes de mort listées.
**Livrables** :
- **Nourriture** : par tick, calcul de la consommation totale des animaux du zoo. Les bâtiments « nourriture » ont une capacité (5 animaux × niveau ou 5 par unité). Répartition : nourrir jusquà la capacité ; les animaux non nourris accumulent un déficit (ou un timer « sans nourriture »).
- **Mort si pas nourri** : au-delà dun seuil (temps ou déficit), lanimal meurt (retiré de la grille, enregistré pour pénalités attractivité / naissances).
- **Autres causes de mort** (toutes à implémenter) :
- **Seul** : à définir (ex. animal seul sur lîle sans voisin après un délai).
- **Pas visité** : déjà en place (MaxSecondsWithoutVisit).
- **Manque de nourriture** : ci-dessus.
- **Tué par un autre animal dun autre zoo** : règle métier (ex. événement rare ou mécanique croisée entre zoos).
- **Niveau de recherche trop inférieur** : si niveau du centre de recherche du zoo < seuil requis pour le type danimal, après un délai lanimal meurt.
- **Bébé non vendu dans les délais** : si un bébé en vente nest pas vendu avant une date limite, il meurt (voir phase 9).
- **Bébé de nurserie prêt non placé dans les délais** : si bébé mature nest pas déplacé (case ou camion) avant un délai, il meurt.
- **Animal daccueil prêt non placé sur la carte après un délai** : idem.
- **Animal non placé sur la carte dans les délais (vente échouée)** : si une vente est annulée ou expire sans que lanimal soit récupéré, mort.
- **Température trop en écart** : si la température de la case (ou de la zone) nest pas dans la plage acceptable pour lanimal, après un délai mort.
- **Milieu (couleur) trop en écart** : idem pour le biome.
- **Historique des morts** : stockage (compteur ou liste récente) pour calcul dattractivité et de naissances (phases 8 et 7).
**Fichiers impactés** : `web/js/config.js`, `web/js/state.js`, nouveau `web/js/food.js` (ou dans `income.js`), `web/js/game-loop.js`, `web/js/animal-visits.js` (étendre pour morts), `web/js/loot-tables.js` (température idéale, plages par animal).
**Dépendances** : Phase 0, 1, 3, 4.
---
## 6. Reproduction
**Objectif** : Après un délai, en proximité dun autre animal de même type mais issu dun zoo différent, naissance dun bébé (nurserie ou vente). Score de reproduction du zoo et adéquation température/milieu influencent.
**Livrables** :
- **Proximité** : deux animaux de même type (même `animalId` ou même « type ») sur des cases adjacentes (ou à distance N). Un des deux doit avoir une origine « autre zoo » (vendue achetée) pour permettre la reproduction.
- **Délai** : timer par paire ou par animal ; à léchéance, génération dun **bébé**. Le bébé va en nurserie si une place est libre, sinon directement en vente (case de vente sur la carte du monde).
- **Score de reproduction du zoo** (voir phase 7) : utilisé pour accélérer larrivée du bébé (réduction du délai).
- **Température et milieu** : « très bonne adéquation » avec la température/milieu de lanimal réduit le délai ou augmente la chance de reproduction.
- **Score de reproduction par milieux (couleurs)** et **score de survie par milieux (couleurs)** : définis dans les données animaux ; utilisés dans les formules de reproduction et de mort.
- **Température idéale** : par type danimal (déjà prévu en phase 5 pour les morts) ; utilisée aussi pour la reproduction.
**Fichiers impactés** : `web/js/loot-tables.js`, nouveau `web/js/reproduction.js`, `web/js/state.js`, `web/js/game-loop.js`.
**Dépendances** : Phase 0, 1, 4, 5.
---
## 7. Score de reproduction du zoo
**Objectif** : Nombre de naissances, taux dalimentation, et score « vendu » attaché aux animaux.
**Livrables** :
- **Nombre de naissances** : compteur dans le game_state (incrémenté à chaque bébé né en reproduction).
- **Taux dalimentation** : ratio (animaux nourris / animaux total) sur une fenêtre ou instantané ; stocké ou dérivé pour laffichage et les formules.
- **Score de reproduction** (valeur agrégée du zoo) : formule combinant naissances, taux dalimentation, et éventuellement autres facteurs. Exposé pour lUI (carte du monde : case « score de reproduction » sous le nom du zoo).
- **Animal vendu** : quand un animal quitte le zoo (vente), il garde en mémoire le **score de reproduction du zoo au moment de la vente** (pour accélérer larrivée dun bébé dans le zoo acheteur, phase 6).
**Fichiers impactés** : `web/js/state.js`, `web/js/income.js` ou `web/js/food.js`, `web/js/reproduction.js`, `web/js/trade.js`, `web/js/world-map.js` (affichage score).
**Dépendances** : Phase 5, 6.
---
## 8. Attractivité et visiteurs (billeterie, 1 journée, boutiques)
**Objectif** : Visiteurs entrent par la billeterie, restent max 1 journée, plus longtemps avec boutiques et nombre danimaux différents. Attractivité du zoo avec toutes les composantes et pénalités.
**Livrables** :
- **Billeterie** : seule entrée des visiteurs dans le zoo. Capacité simultanée = 20 × niveau billeterie (ou 20 par unité). Le nombre de visiteurs présents est plafonné par cette capacité.
- **Durée max 1 journée** : chaque visiteur a une « arrivée » ; il repart au plus tard après 1 journée (temps de jeu). Il repart par la billeterie.
- **Temps passé** : les visiteurs restent plus longtemps dans la journée sil y a des boutiques et plus danimaux différents (formule à définir).
- **Déplacement** : les visiteurs se déplacent en étant attirés (déjà partiellement en place ; conserver et adapter si besoin).
- **Attractivité du zoo** (formule globale) :
- proportionnelle à la valeur cumulée des animaux du zoo
- proportionnelle au nombre danimaux différents
- proportionnelle à la rareté (niveau) des animaux
- proportionnelle au taux de remplissage en animaux
- **Pénalités** : les morts pénalisent lattractivité auprès des visiteurs à venir (depuis les villes) ; les morts pénalisent lapparition de naissances dans le zoo.
- **Bonus** : les naissances augmentent lattractivité auprès des visiteurs à venir ; les naissances augmentent lapparition dautres naissances dans le zoo.
- **Villes** : nombre de visiteurs maximum vers les zoos (voir phase 10). Lattractivité du zoo détermine combien de ces visiteurs sont « alloués » au zoo.
- **Affichage** : sur la carte du monde, sous le nom du zoo : une case « score dattractivité » (et une « score de reproduction », phase 7).
**Fichiers impactés** : `web/js/income.js`, `web/js/visitor-attraction.js`, `web/js/config.js`, `web/js/state.js`, `web/js/ui.js`, `web/js/world-map.js`.
**Dépendances** : Phase 3, 5, 7.
---
## 9. Carte du monde : agrandissement en unités de recherche et compteurs
**Objectif** : Agrandissement de la carte payé en unités de recherche ; affichage des compteurs et des cases zoo (attractivité, reproduction, vente).
**Livrables** :
- **Agrandissement de la carte** : plus payé en pièces mais en **unités de recherche** produites par les centres de recherche des zoos du joueur. Coût en unités par palier (plus cher par palier, même nombre de cases ajoutées). Si pas assez dunités, bouton/zone grisé.
- **Compteurs** (sur la carte du monde ou dans une barre dédiée) :
- Compteur de bébés à vendre (total ou par zoo)
- Compteur danimaux à vendre
- Compteur de laboratoires
- Compteur de zoos
- Compteur de villes
- **Cases monde au lancement** : 1 Agrandissement carte, 1 Compteur bébés à vendre, 1 Compteur animaux à vendre, 1 Compteur laboratoires, 1 Compteur zoos, 1 Compteur villes, 1 Accueil, 1 Nourriture, 1 Camion, 24 cases 3 couleurs.
- **Case du zoo (joueur et autres)** : 1 case nom du zoo, juste en dessous 1 case score dattractivité, juste en dessous 1 case score de reproduction, juste en dessous 1 case de vente (voir phase 10). Possibilité dacheter sur les cases voisines dautres cases de vente (achats multi-slots).
- Même principe pour zoos des autres joueurs et zoos bots.
**Fichiers impactés** : `web/js/state.js`, `web/js/economy.js`, `web/js/world-map.js`, `web/js/ui.js`, `web/js/config.js`.
**Dépendances** : Phase 3, 7, 8.
---
## 10. Ventes et enchères (bébés et animaux adultes)
**Objectif** : Bébés et animaux en vente sur la carte du monde ; enchères joueurs/bots ; vendeur valide ou non ; bébé invendu meurt.
**Livrables** :
- **Cases de vente** : sur la carte du monde, sous le nom de chaque zoo, une (ou plusieurs) case(s) de vente affichant un bébé ou un animal à vendre, avec le dernier montant denchère.
- **Mise en vente** : depuis la carte du zoo, déplacer un animal ou un bébé mature sur le camion → lentité sort du zoo et apparaît en **vente** sur la carte du monde (case de vente du joueur).
- **Enchères** : joueurs et bots peuvent enchérir. Montant initial décidé par le vendeur (ou dérivé dun prix de base). Après un temps, le **vendeur** choisit de valider ou non la vente (acceptation de la meilleure enchère ou refus).
- **Si vente validée** : lacheteur reçoit le bébé ou lanimal (en accueil dans son zoo, ou en nurserie si bébé). Le score de reproduction du zoo vendeur au moment de la vente est attaché à lentité (pour accélérer bébé en phase 6).
- **Si bébé invendu** (délai dépassé sans vente validée) : le bébé **meurt** (supprimé, pénalités éventuelles).
- **Animaux adultes** : les zoos vendent aussi des animaux adultes (pas seulement des bébés) ; même flux : mise sur le camion → case de vente → enchères → validation ou refus.
**Fichiers impactés** : `web/js/state.js`, `web/js/trade.js`, `web/js/world-map.js`, `web/js/ui.js`, `server/routes/zoos.js` ou nouveau `server/routes/trades.js` (enchères temps réel ou polling), `server/db.js` (table ou champs pour offres de vente / enchères).
**Dépendances** : Phase 4, 6, 7, 9.
---
## 11. Villes
**Objectif** : Cases des villes avec nom et nombre de visiteurs maximum vers les zoos.
**Livrables** :
- **Cases des villes** : sur la carte du monde, chaque ville a 1 case nom et 1 case « nombre de visiteurs maximum vers les zoos » (capacité totale ou par zoo à définir).
- **Règle** : ce nombre limite ou répartit les visiteurs qui peuvent aller vers les zoos (déjà partiellement en place avec CityAttractionScale ; adapter pour un plafond « max visiteurs vers zoos » par ville).
**Fichiers impactés** : `web/js/config.js`, `web/js/world-map.js`, `web/js/income.js` ou `web/js/visitor-attraction.js`, `web/js/ui.js`.
**Dépendances** : Phase 8.
---
## 12. UI et grille au lancement
**Objectif** : Grille zoo et monde conformes au rappel ; transitions douces visibles ; tous les types de cases et actions.
**Livrables** :
- **Carte du zoo au lancement** : 1 Agrandissement du zoo (+1 case, payant), 1 Recherche (en haut à gauche), 1 Billeterie, 1 Nurserie, 1 Accueil nouveaux animaux, 1 Nourriture, 1 Camion, 24 cases de 3 couleurs différentes. Positions exactes (ex. 1_1 = Recherche, 2_1 = Billeterie, …) à fixer dans `defaultState()` et config.
- **Carte du monde au lancement** : 1 Agrandissement de la carte (payé en unités de recherche), compteurs (bébés, animaux, labos, zoos, villes), 1 Accueil, 1 Nourriture, 1 Camion, 24 cases de 3 couleurs. Layout à définir (même zone que la grille zoo ou zone dédiée).
- **Transitions douces** : rendu des couleurs et températures avec interpolation (phase 1) visible sur les deux cartes.
- **Actions** : achat sur case vide (recherche, billeterie, boutique, nurserie, nourriture, accueil, camion, changement de milieu couleur, changement de milieu température) ; déplacement sur case vide (bébé mature, animal prêt). Messages derreur et feedback clairs.
- **Accessibilité** : ARIA, clavier, contraste (règles projet).
**Fichiers impactés** : `web/js/state.js`, `web/js/ui.js`, `web/js/world-map.js`, `web/css/main.css`.
**Dépendances** : Toutes les phases précédentes.
---
## 13. Migration et compatibilité
**Objectif** : Anciennes sauvegardes (modèle œufs/école actuel) restent jouables ou migration propre.
**Livrables** :
- **Détection de version** : `game_state.version` ou `game_state.specVersion` pour distinguer « ancien » (œufs, école, 5 niveaux) et « nouveau » (bébés, recherche, 7 niveaux, etc.).
- **Migration** : script ou logique au chargement : si ancienne version, soit conversion (œufs → bébés en nurserie, école → centre de recherche niveau 1, etc.), soit message « sauvegarde incompatible, recommencer ».
- **API et BDD** : extension de `game_state` (JSONB) pour tous les nouveaux champs ; pas de perte de données existantes si migration choisie.
**Fichiers impactés** : `web/js/state.js` (loadState, defaultState), `server/routes/zoos.js`, éventuellement script de migration côté serveur.
**Dépendances** : Toutes les phases 012.
---
## Synthèse des dépendances
```
0 (modèle) ─┬─ 1 (couleurs/temp) ─┬─ 2 (multi-cases)
│ └─ 5 (nourriture/morts)
├─ 3 (bâtiments)
└─ 4 (bébés/flux)
├─ 5 (nourriture/morts) ─ 7 (score repro)
├─ 6 (reproduction) ──── 7
├─ 8 (attractivité/visiteurs)
├─ 9 (carte monde recherche/compteurs)
└─ 10 (ventes/enchères) ─ 11 (villes)
└─ 12 (UI / grilles lancement) ─ 13 (migration)
```
**Ordre recommandé dimplémentation** : 0 → 1 → 3 → 4 → 2 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 12 → 13.
---
## Checklist exhaustive (référence 174-324)
- [ ] Cases : couleur (milieu) + température ; transitions douces
- [ ] Animaux multi-cases
- [ ] Centre de recherche : 7 niv., unités de recherche, 10 zoos/unité, déblocage niveaux animaux/bébés
- [ ] Billeterie : 7 niv., 20 visiteurs/unité, entrée/sortie visiteurs
- [ ] Boutique : 7 niv., 5 visiteurs simultanés/unité
- [ ] Nurserie : 7 niv., 1 bébé/unité, bébé mature → case ou camion
- [ ] Nourriture : 7 niv., consommation/animal, mort si pas nourri, 5 animaux/unité, reproduction
- [ ] Accueil nouveaux animaux : 7 niv., 1 animal/unité, animal prêt → case ou camion
- [ ] Camion : 7 niv., bébé/animal sur camion → vente carte monde, 1 camion/unité
- [ ] Changement de milieu (couleur) : 7 niv., payant
- [ ] Changement de milieu (température) : 7 niv., payant
- [ ] Bébés animaux (plus dœufs) ; zoos vendent bébés et animaux adultes
- [ ] Morts : seuls, pas visités, nourriture, tué autre zoo, recherche trop basse, bébé non vendu à temps, bébé mature non placé à temps, animal accueil non placé à temps, vente échouée, température/milieu en écart
- [ ] Reproduction : délai, proximité même type autre zoo, score repro, température/milieu adéquats ; score repro/survie par milieu ; température idéale
- [ ] Score de reproduction du zoo : naissances, taux alimentation, score vendu sur lanimal
- [ ] Attractivité : valeur cumulée, nombre danimaux différents, rareté, taux remplissage ; pénalités morts ; bonus naissances
- [ ] Visiteurs : entrée billeterie, max 1 journée, plus longtemps avec boutiques et diversité animaux, déplacement attiré
- [ ] Carte du monde : agrandissement en unités de recherche ; compteurs bébés, animaux, labos, zoos, villes ; cases zoo (nom, attractivité, reproduction, vente) ; villes (nom, max visiteurs vers zoos)
- [ ] Ventes : cases de vente sous les zoos ; enchères joueurs/bots ; vendeur valide ou non ; bébé invendu meurt
- [ ] Grille zoo au lancement : 1 agrandissement, 1 recherche, 1 billeterie, 1 nurserie, 1 accueil, 1 nourriture, 1 camion, 24 cases 3 couleurs
- [ ] Grille monde au lancement : 1 agrandissement carte (recherche), compteurs, 1 accueil, 1 nourriture, 1 camion, 24 cases 3 couleurs
- [ ] Migration anciennes sauvegardes / compatibilité

View File

@@ -0,0 +1,192 @@
# Plan d'implémentation Specs Animaux, Morts, Saisons, Billeterie
Références : `docs/plan-action-cahier-des-charges.md` (§7 Animaux/morts/saisons, §8 Billeterie), `docs/features/causes-mort-audit.md`, et tous les fichiers de `docs/specs/` concernés.
---
## Spécifications couvertes
| Spec | Périmètre implémenté |
|------|----------------------|
| **animal_generique.md** | États faim/température/santé ; feedbacks visuels (froid=bleu/givre, chaud=rouge/vapeur, faim=icône, heureux=cœurs) ; pas de jauges. |
| **mort_bebe.md** | Causes déjà en place ; conséquence mort adulte vente échouée (aligné). |
| **inventaire_saisons.md** | Cycle 4 saisons ; modificateurs météo/température/reproduction/survie/visiteurs. |
| **temperature.md** | Modificateur saison (+0 Printemps, +10 Été, -2 Automne, -15 Hiver) ; modificateur jour/nuit (+5 jour, -5 nuit) ; feedback critique (spec déjà partiellement en place via tolerance). |
| **reproduction.md** | Impact saisons : Printemps +20% chance, Hiver -50% (sauf animaux froids). |
| **billeterie.md** | Flux entrée/sortie ; capacité 20/unité ; ouverture 08h20h ; 1 visiteur/s max entrée ; modificateurs saison (été +20% prix, hiver -10%). |
| **visiteur.md** | Arrivée par billeterie ; durée max (1 journée / stayDuration) ; départ par billeterie ; affluence selon heure (08h10h faible, 10h16h fort, >18h nul) ; multiplicateur saison (été x1.5, hiver x0.6, etc.). |
| **inventaire_heures.md** | Cycle jour/nuit (déjà timeOfDay) ; billeterie fermée la nuit. |
| **centre_recherche.md** | Niveau recherche (skill level) : si rareté animal > niveau recherche → mort (cause « niveau de recherche trop inférieur »). |
| **causes-mort-audit.md** | Seuls (animal seul meurt) ; recherche trop basse ; vente adulte échouée (deathCountRecent). |
---
## Phase 1 Causes de mort manquantes
**Objectif :** Compléter les causes de mort listées dans `docs/features/causes-mort-audit.md` (Non implémenté).
### 1.1 Vente adulte échouée
- **Fichier :** `web/js/trade.js`
- **Changement :** Dans `tickSaleListings`, lorsque `nowUnix >= listing.endAt` et `listing.isBaby === false`, incrémenter `state.deathCountRecent` (comme pour les bébés).
- **Spec :** causes-mort-audit §9.
### 1.2 Niveau de recherche trop inférieur
- **Fichier :** `web/js/food.js` (ou module commun appelé par `checkDeathCauses`)
- **Logique :** Pour chaque bloc animal sur la grille, récupérer `LootTables.Animals[cell.id].rarityLevel` et le comparer à `getSkillLevel(state)` (depuis `conveyor.js`). Si `rarityLevel > getSkillLevel(state)`, retirer le bloc et incrémenter `deathCountRecent`.
- **Config optionnelle :** `GameConfig.Research?.MaxRarityAllowed` ou utiliser directement skill level (18) vs rarityLevel (15) ; si le projet utilise skill level comme “niveau école” et que la spec centre_recherche parle de “rareté visible”, interpréter : animal de rareté > niveau compétence → mort.
- **Fichiers :** `web/js/food.js`, `web/js/config.js` (si config ajoutée), `docs/features/causes-mort-audit.md` (mise à jour).
### 1.3 Animal seul (solitude)
- **Spec :** animal_generique “Besoin de congénères (reproduction) ou de solitude (selon espèce)” ; causes-mort-audit §1 “Seuls”.
- **Interprétation :** Au moins une règle “animal seul meurt” : si aucun autre animal de la même espèce (même `cell.id`) dans un rayon de N cases (ex. 5), après un délai configurable, retirer lanimal et incrémenter `deathCountRecent`.
- **Fichiers :** `web/js/config.js` (`Animal.MinSameSpeciesInRadius`, `Animal.MaxSecondsAlone`), `web/js/food.js` dans `checkDeathCauses` (ou helper) : pour chaque origine animal, compter les autres blocs même `id` dans le rayon ; si 0 et `nowUnix - placedAt > MaxSecondsAlone`, retirer.
- **État :** Optionnel si “selon espèce” complique (toutes espèces = besoin congénères par défaut).
---
## Phase 2 Config et données saisons
**Objectif :** Introduire le cycle de saisons et la config sans encore brancher tous les impacts.
### 2.1 Config saisons
- **Fichier :** `web/js/config.js`
- **Ajout :** `Season: { DayLengthSeconds: 120, DaysPerSeason: 7 }` (ou 30 jours in-game). `Season.TemperatureModifier: { spring: 0, summer: 10, autumn: -2, winter: -15 }`. `Season.VisitorMultiplier: { spring: 1, summer: 1.5, autumn: 0.8, winter: 0.6 }`. `Season.ReproductionBonus: { spring: 0.2, summer: 0, autumn: 0, winter: -0.5 }` (Hiver -50% sauf animaux froids à traiter dans reproduction).
- **Référence :** `docs/specs/inventaire_saisons.md`, `temperature.md`, `visiteur.md`, `reproduction.md`.
### 2.2 State et temps de jeu “jour”
- **Fichier :** `web/js/types.js`
- **Ajout :** `gameDay?: number` (jour de jeu absolu, dérivé de `timeOfDay` et `DayLengthSeconds`) ou `season?: 'spring'|'summer'|'autumn'|'winter'`, `seasonDay?: number` (jour dans la saison).
- **Fichier :** `web/js/time-weather.js` ou nouveau `web/js/seasons.js`
- **Logique :** À partir de `state.timeOfDay` et `GameConfig.Time.DayLengthSeconds`, calculer un “game day” (entier). À partir de `gameDay` et `DaysPerSeason`, calculer `season` et `seasonDay`. Exporter `getCurrentSeason(state)`, `getSeasonTemperatureModifier(season)`, `getSeasonVisitorMultiplier(season)`, `getSeasonReproductionBonus(season)`.
---
## Phase 3 Cycle saisons et impacts
**Objectif :** Brancher la saison sur température, reproduction, visiteurs, billeterie.
### 3.1 Température affichée / calculée avec saison
- **Fichiers :** `web/js/placement.js` ou module température existant (ex. `getDisplayTemperature` dans food.js / grid-utils)
- **Changement :** `currentTemp = baseBiomeTemp + seasonMod + dayNightMod + caseRegulatorOffset`. Récupérer `seasonMod` depuis `getSeasonTemperatureModifier(getCurrentSeason(state))`.
- **Spec :** `temperature.md` (Impact Saisons, Impact Heure / Jour-Nuit).
### 3.2 Reproduction et saison
- **Fichier :** `web/js/reproduction.js`
- **Changement :** Intégrer un bonus/malus de saison (Printemps +20%, Hiver -50% sauf animaux “froids” selon biome) dans le calcul de chance de reproduction.
- **Spec :** `reproduction.md`, `inventaire_saisons.md`.
### 3.3 Visiteurs et saison
- **Fichier :** `web/js/income.js`
- **Changement :** Dans `getVisitorDemand`, multiplier par `getSeasonVisitorMultiplier(getCurrentSeason(state))`.
- **Spec :** `visiteur.md` (Impact Saisons).
### 3.4 Billeterie modificateur prix ticket par saison
- **Fichier :** `web/js/income.js` (ou economy)
- **Changement :** Prix ticket base ; si saison été : *1.2 ; si saison hiver : *0.9. Appliquer dans le calcul de `paymentPerVisitor` (entrée).
- **Spec :** `billeterie.md` (Impact Saisons).
### 3.5 Notification changement de saison
- **Fichier :** `web/js/ui.js` ou game-loop
- **Changement :** Lors dun changement de saison (comparer `getCurrentSeason(state)` à une valeur stockée), afficher un message type “Cest le [Saison] !” (toast ou texte temporaire). Stocker `lastSeason` dans le state si nécessaire.
- **Spec :** `inventaire_saisons.md` (Messages SEASON_CHANGE).
---
## Phase 4 Flux billeterie complet
**Objectif :** Heures douverture, départs explicites, limite 1 visiteur/s à lentrée.
### 4.1 Heures douverture (08h20h)
- **Fichier :** `web/js/config.js`
- **Ajout :** `Billeterie.OpenHour: 8`, `Billeterie.CloseHour: 20` (ou 20h = fermeture, pas dentrée après).
- **Fichier :** `web/js/income.js`
- **Changement :** Dans `tickVisitorArrivals`, ne pas ajouter de nouveaux visiteurs si `timeOfDay` est en dehors de [8, 20] (ou équivalent en phase “night”). Utiliser `getTimePhase(state.timeOfDay)` ; si phase “night” ou `timeOfDay < 8` ou `timeOfDay >= 20`, ne pas pousser de nouveaux `{ arrivedAt }`.
- **Spec :** `billeterie.md`, `inventaire_heures.md`.
### 4.2 Départs par billeterie (durée max “1 journée”)
- **Déjà en place :** `getStayDurationSeconds` et filtre `nowUnix < v.arrivedAt + stayDuration`. Sassurer que la durée est bien “1 journée” (DayLengthSeconds × facteur) selon spec. Optionnel : faire partir les visiteurs vers la “sortie” (billeterie) visuellement.
- **Spec :** `visiteur.md` (Durée max, Départ).
### 4.3 Limite 1 visiteur / seconde à lentrée
- **Fichier :** `web/js/income.js`
- **Changement :** Dans `tickVisitorArrivals`, au lieu dajouter `target - current` dun coup, limiter le nombre dentrées sur ce tick à au plus `ceil(dt)` ou 1 par tick si tick = 1s, ou stocker `lastVisitorSpawnAt` et najouter quun visiteur par seconde réelle. Adapter selon `IncomeTickMs` (ex. si tick 5s, ajouter au plus 5 nouveaux visiteurs par tick, ou 1 par seconde en interpolant).
- **Spec :** `billeterie.md` (“1 visiteur / seconde max”).
### 4.4 Affluence selon lheure (optionnel)
- **Fichier :** `web/js/income.js`
- **Changement :** Dans `getVisitorDemand`, appliquer un coefficient selon `timeOfDay` : 08h10h faible, 10h16h fort, 16h18h décroissant, >18h nul (ou très faible). Utiliser `state.timeOfDay` et `getTimePhase`.
- **Spec :** `visiteur.md` (Impact Heure / Jour-Nuit).
---
## Phase 5 Feedbacks visuels animaux
**Objectif :** Pas de jauges ; états visuels dérivés des données existantes (température, nourriture, visite, reproduction).
### 5.1 Détection des états par cellule animal
- **Fichier :** nouveau `web/js/animal-visual-state.js` ou dans `web/js/ui.js` / module rendu
- **Logique :** Pour une cellule animal (origine) : `getDisplayTemperature`, `lastFedAt`, `lastVisitedAt`, état reproduction (paire proche). Exporter `getAnimalVisualState(cell, state, grid)``{ cold: boolean, hot: boolean, hungry: boolean, sick: boolean, happy: boolean }` (sick si proche mort / mal nourri ; happy si récemment visité et nourri et temp ok, ou en reproduction).
- **Spec :** `animal_generique.md`, `temperature.md` (Feedback critique).
### 5.2 Rendu CSS / classes
- **Fichier :** `web/js/ui.js` (rendu grille)
- **Changement :** Pour chaque bloc animal rendu, ajouter des classes CSS selon `getAnimalVisualState` : ex. `animal-cold`, `animal-hot`, `animal-hungry`, `animal-sick`, `animal-happy`. Pas de jauges.
- **Fichier :** `web/css/main.css`
- **Changement :** Styles pour ces classes : teinte bleutée/givre (froid), rougeâtre/vapeur (chaud), icône faim (lent/maigre), ternes/mouches (malade), cœurs/couleurs vives (heureux). Utiliser filter, box-shadow ou pseudo-éléments pour icônes.
- **Spec :** `animal_generique.md` (Vie Quotidienne), `temperature.md` (Feedback critique).
---
## Phase 6 Documentation et clôture
- Mettre à jour `docs/features/causes-mort-audit.md` (causes implémentées : seuls, recherche, vente adulte).
- Créer ou mettre à jour `docs/features/saisons-phase.md` (cycle, config, impacts).
- Créer ou mettre à jour `docs/features/billeterie-flux.md` (heures, 1/s, départs).
- Créer `docs/features/feedbacks-visuels-animaux.md` (états, classes CSS, pas de jauges).
- Vérifier lint, types, compilation.
---
## Ordre dexécution recommandé
1. **Phase 1** Causes de mort (trade.js adulte, food.js recherche, optionnel solitude).
2. **Phase 2** Config et module saisons (config.js, seasons.js, types.js).
3. **Phase 3** Impacts saisons (température, reproduction, visiteurs, billeterie, notification).
4. **Phase 4** Flux billeterie (heures, 1/s, affluence heure).
5. **Phase 5** Feedbacks visuels animaux (animal-visual-state.js, ui.js, main.css).
6. **Phase 6** Documentation.
---
## Fichiers principaux impactés
| Fichier | Phases |
|---------|--------|
| `web/js/trade.js` | 1.1 |
| `web/js/food.js` | 1.2, 1.3 |
| `web/js/config.js` | 1.2, 1.3, 2.1, 4.1 |
| `web/js/types.js` | 2.2 |
| `web/js/time-weather.js` ou `web/js/seasons.js` | 2.2, 3.1 |
| `web/js/placement.js` ou module température | 3.1 |
| `web/js/reproduction.js` | 3.2 |
| `web/js/income.js` | 3.3, 3.4, 4.1, 4.3, 4.4 |
| `web/js/ui.js` | 3.5, 5.2 |
| `web/js/animal-visual-state.js` (nouveau) | 5.1 |
| `web/css/main.css` | 5.2 |
| `docs/features/*.md` | 6 |

View File

@@ -1,131 +0,0 @@
# Vérification des phases 0 à 9 avant phase 10
**Référence :** `docs/plan-implementation-rappel-grandes-regles.md`.
**Objectif :** Sassurer que tout le nécessaire pour la phase 10 (Ventes et enchères) est en place.
---
## Phase 0 Modèle de données et configuration
| Livrable | Statut | Note |
|----------|--------|------|
| Cases couleur + température | Fait | biome-rules, grid, config |
| Animaux multi-cases (shape, stockage) | Fait | cellsWide/cellsHigh dans types, placement, loot-tables |
| Types de bâtiments 7 niveaux | Fait | research, billeterie, souvenirShop, nursery, food, reception, truck, biomeChangeColor, biomeChangeTemp dans config |
| Entités déplaçables (bébé, animal) | Partiel | pendingBabies, receptionAnimals, saleListings en place ; conveyor et labo utilisent encore des œufs (eggType) |
| Config (niveaux max, coûts, capacités) | Fait | GameConfig étendu |
**Blocant phase 10 :** Non. saleListings, pendingBabies, receptionAnimals sont en place.
---
## Phase 1 Cartes : couleurs et températures
| Livrable | Statut |
|----------|--------|
| Biomes / température par case | Fait (biome-rules.js, getDisplayBiome, getDisplayTemperature) |
| Transitions douces (interpolation) | Fait |
| Rendu grille | Fait |
---
## Phase 2 Animaux multi-cases
| Livrable | Statut |
|----------|--------|
| cellsWide / cellsHigh (loot-tables, placement) | Fait |
| Stockage et mouvement du bloc | Fait (placement, zoo, hatching) |
---
## Phase 3 Bâtiments zoo (types et niveaux)
| Livrable | Statut |
|----------|--------|
| Research, Billeterie, Boutique, Nurserie, Food, Reception, Truck, BiomeColor, BiomeTemp | Fait (config 7 niv., build/upgrade dans zoo, placement, ui) |
---
## Phase 4 Bébés et flux nurserie / accueil
| Livrable | Statut | Note |
|----------|--------|------|
| Bébés (nurserie → mature) | Fait | pendingBabies, readyAt, placeMatureBabyOnCell |
| Accueil (reception → animal prêt) | Fait | receptionAnimals, placeReceptionAnimalOnCell |
| Achat / déplacement (bébé mature, animal prêt) | Fait | zoo, placement, ui |
| Suppression complète du modèle « œuf » | Partiel | Conveyor et labo exposent encore des œufs ; bébés/animaux en parallèle |
**Blocant phase 10 :** Non. Flux bébé/animal et saleListings (nursery full) existent.
---
## Phase 5 Nourriture, consommation et morts
| Livrable | Statut | Note |
|----------|--------|------|
| Nourriture (capacité, répartition, lastFedAt) | Fait | food.js, getFoodCapacity, tickFeeding |
| Mort si pas nourri | Fait | checkDeathCauses, MaxSecondsWithoutFood |
| Pas visité | Fait | MaxSecondsWithoutVisit |
| Température / milieu en écart | Fait | maybeDeathBlock (temp + biome) |
| Bébé mature non placé à temps | Fait | filterPendingBabies, MaxSecondsMatureNotPlaced |
| Animal accueil prêt non placé à temps | Fait | filterReceptionAnimals, MaxSecondsReadyNotPlaced |
| Autres causes (seul, tué autre zoo, recherche trop basse, bébé non vendu, vente échouée) | Non fait | Optionnel pour phase 10 ; « bébé invendu meurt » = phase 10 |
**Blocant phase 10 :** Non.
---
## Phase 6 Reproduction
| Livrable | Statut |
|----------|--------|
| Paires même type + autre zoo, adjacentes | Fait (findReproductionPairs, blocksAreAdjacent) |
| Délai (score repro, biome, température) | Fait (tickReproduction, timers, dueAt) |
| Bébé → nurserie ou vente (saleListings) | Fait (addPendingBaby, NoFreeNursery → saleListings) |
---
## Phase 7 Score de reproduction du zoo
| Livrable | Statut |
|----------|--------|
| getReproductionScore (birthCount, feedingRate) | Fait |
| Affichage carte monde (score repro) | Fait (world-map-zoo-reproduction-score) |
| reproductionScoreAtSale sur vente | Fait (reproduction.js lors du push saleListings) |
---
## Phase 8 Attractivité et visiteurs
| Livrable | Statut |
|----------|--------|
| Billeterie = seule entrée, cap 20/unité | Fait (getBilleterieCapacity, tickVisitorArrivals) |
| Durée max 1 journée par visiteur | Fait (visitorArrivals, arrivedAt, getStayDurationSeconds) |
| Prolongation boutiques / diversité | Fait (getStayMultiplier, StayMultiplierPerShopLevel, StayMultiplierPerSpecies) |
| Score attractivité (valeur, espèces, rareté, remplissage, pénalités, bonus) | Fait (getAttractivityScore) |
| Affichage carte monde (score attractivité) | Fait (world-map-zoo-attractivity-score) |
---
## Phase 9 Carte du monde : recherche et compteurs
| Livrable | Statut |
|----------|--------|
| Agrandissement carte en unités de recherche | Fait (getWorldMapUpgradeResearchCost, tryUpgradeWorldMap) |
| Compteurs (bébés à vendre, animaux à vendre, labos, zoos, villes) | Fait (worldMapCounters dans ui.js) |
| Case zoo : nom, score attractivité, score reproduction | Fait (world-map-zoo-name, -reproduction-score, -attractivity-score) |
| Case de vente sous le zoo | Partiel | Un slot « world-map-zoo-slot » existe ; il affiche conveyor offers (œufs / bébé/animal) ; phase 10 doit y afficher saleListings + enchères |
**Blocant phase 10 :** Non. Le slot existe ; phase 10 ajoute laffichage des ventes (saleListings) et les enchères.
---
## Synthèse pour la phase 10
- **Prérequis phase 10 (4, 6, 7, 9) :** Tous satisfaits au niveau nécessaire.
- **Manques non bloquants :**
- Phase 0/4 : modèle œuf encore présent (conveyor, labo) ; phase 10 peut sappuyer sur saleListings et bébés/animaux tels quils sont.
- Phase 5 : certaines causes de mort (seul, autre zoo, recherche trop basse, bébé non vendu) non implémentées ; « bébé invendu meurt » sera ajouté en phase 10.
- Phase 9 : case de vente = slot actuel ; phase 10 y branchera les saleListings et lUI denchères.
**Conclusion :** On peut démarrer la phase 10 (Ventes et enchères). Les écarts listés ci-dessus pourront être traités en parallèle ou dans les phases suivantes.

5664
docs/specs-format-audit.json Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 KiB

View File

@@ -1,11 +1,12 @@
# Spécifications : Accueil des Animaux
## 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
- **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.
- **Inspection** : Permet au joueur de voir les stats de l'animal avant placement.
## Niveaux d'Amélioration (7 niveaux)
- **Coût** : Progressif par palier.
@@ -19,115 +20,187 @@ Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou tr
```json
{
"id": "uuid",
"type": "animal_reception",
"type": "building_reception",
"created_at": "timestamp",
"updated_at": "timestamp",
"level": "integer (1-7)",
"position": { "x": "integer", "y": "integer" },
"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éristique | Valeur Initiale (Niv 1) |
| :--- | :--- |
| Temps Acclimatation | 10 minutes |
| Capacité | 1 animal |
| Caractéristique | Valeur Initiale (Niv 1) | Valeur Max (Niv 7) |
| :--- | :--- | :--- |
| Temps Acclimatation | 600 secondes (10 min) | 0 secondes (Instantané) |
| Capacité | 1 animal | 7 animaux |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
| :--- | :--- | :--- | :--- |
| Confort Quarantaine | 60 | 0-100 | Modifie le stress initial de lanimal lors du placement (\(-\)stress = +confort). |
| Risque Contamination | 2% | 0-25% | Probabilité dincident sanitaire (quarantaine prolongée, coût supplémentaire) par animal accueilli. |
| Traçabilité | 80 | 0-100 | Qualité des infos affichées au joueur (traits révélés, historique). |
## 2. Cycles de Vie et 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
Indestructible.
Indestructible. Ne peut pas être vendu ni déplacé (sauf si feature de réaménagement global).
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---|---|
| Accueil Niv 4+ | Trait temporaire “Calme” (+5 Satisfaction Visiteurs à proximité après placement) | 100% | Non (effet temporaire, non génétique) |
| Accueil Niv 7 | Trait temporaire “Confiant” (stress \(-15\) au placement) | 100% | Non |
## 3. Impacts Environnementaux
### 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)
Zone neutre.
Zone neutre. Compatible avec tous les biomes d'animaux.
### Impact Saisons
Protégé.
Protégé des intempéries.
### Impact Heure / Jour-Nuit
N/A
Fonctionne 24/7. Pas de pénalité la nuit.
## 4. Impacts Biologiques et Sociaux
### 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
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
Nourri automatiquement.
Nourri automatiquement (coût nul ou inclus dans les frais de gestion globaux).
### Impact Attractivité (Visiteurs/Animaux)
N/A
| Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Façade entretenue (Propreté > 80) | +5 | 6 cases |
| File dattente visible (Capacité saturée) | -10 | 8 cases |
| Livraison spectaculaire (animal rare) | +20 | 10 cases |
### Impact Valeur
N/A
| Facteur | Variation Prix | Condition |
|---|---:|---|
| Niveau Accueil | +5% / niveau | Appliqué à la valeur du zoo (bâtiment clé non revendable). |
| Historique sans incident | +10% | Si aucun événement `QUARANTINE_ALERT` sur 7 jours in-game. |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Réduction Temps Acclimatation** :
| Niveau | Temps Base |
| :--- | :--- |
| 1 | 10 min |
| 2 | 8 min |
| 3 | 6 min |
| 4 | 4 min |
| 5 | 2 min |
| 6 | 1 min |
| 7 | Instantané |
| Niveau | Temps Base | Réduction % |
| :--- | :--- | :--- |
| 1 | 10 min | 0% |
| 2 | 8 min | 20% |
| 3 | 6 min | 40% |
| 4 | 4 min | 60% |
| 5 | 2 min | 80% |
| 6 | 1 min | 90% |
| 7 | Instantané | 100% |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût Hebdo | Maintenance |
|---|---:|---:|
| Consommables quarantaine | 50 pièces | 10 pièces |
| Nettoyage & désinfection | 30 pièces | 5 pièces |
| Contrôle vétérinaire | 80 pièces | 0 pièce (service périodique) |
### Trajet Visiteurs
N/A
| Trajet | Condition | Effet | Détails |
|---|---|---|---|
| Visiteurs passent devant | Chemin adjacent | Attraction faible | Le bâtiment nest pas une attraction nominale, mais une façade visible peut influer sur lambiance. |
| Visiteurs évitent la zone | `QUARANTINE_ALERT` actif | Déviation | Les visiteurs recalculent leur chemin pour éviter un rayon de 6 cases autour. |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Arrivée** : Animal livré par camion.
* **Prêt** : Animal prêt à être placé.
* **Arrivée (`ANIMAL_ARRIVAL`)** : Animal livré par camion, entre dans un slot libre.
* **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
### Tableau des Upgrades
| Niveau | Coût (Pièces) | Capacité | Temps Acclimatation | Temps Construction |
| :--- | :--- | :--- | :--- | :--- |
| 1 | 100 | 1 | 10 min | 0s |
| 2 | 200 | 2 | 8 min | 0s |
| 3 | 400 | 3 | 6 min | 0s |
| 4 | 800 | 4 | 4 min | 0s |
| 5 | 1600 | 5 | 2 min | 0s |
| 6 | 3200 | 6 | 1 min | 0s |
| 7 | 6400 | 7 | 0 min | 0s |
| 2 | 200 | 2 | 8 min | 10s |
| 3 | 400 | 3 | 6 min | 30s |
| 4 | 800 | 4 | 4 min | 1m |
| 5 | 1600 | 5 | 2 min | 2m |
| 6 | 3200 | 6 | 1 min | 5m |
| 7 | 6400 | 7 | 0 min | 10m |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
function updateReception(center):
for slot in center.slots:
if currentTime >= slot.ready_time:
notifyPlayer("ANIMAL_READY", slot.animal_id)
```python
def update_reception(reception_center, current_time):
# Vérification de l'intégrité
if not reception_center or not reception_center.slots:
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
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" |
| `RECEPTION_FULL` | Warning | "Accueil saturé, impossible d'acheter." |
| ID | Niveau | Message | Condition |
| :--- | :--- | :--- | :--- |
| `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" | `slot.status` passe à `READY` |
| `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
## 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)
### Arrivée Animal (Passif)
**Description UX** : Le camion décharge un animal. Il apparaît dans l'Accueil en mode "Attente".
@@ -135,19 +208,19 @@ function updateReception(center):
**Notification Push** : "Votre [Animal] est arrivé à l'accueil !" envoyée si le joueur est hors ligne.
**Emplacement** : Case Accueil.
**Intégration** : Suite de l'action Camion.
**Navigation** : N/A
**Navigation** : Clic sur Accueil → Bottom Sheet “Accueil” (liste slots) → action “Placer” ouvre le mode placement sur la carte du zoo.
**Événements** : `DELIVERY_COMPLETE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ambience_stable_soft.mp3` (léger, discret, pas intrusif).
- **Sons** : `truck_door.mp3`, `crate_drop.mp3`.
- **Graphiques** : Sprite Caisse en bois.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `reception_building.png` (bâtiment), `reception_icon.png` (icône), `badge_quarantine.png` (badge).
- **Vidéos** : `delivery_short.webm` (2s, loop optionnel sur notif).
- **Animations** : Camion qui repart.
- **Couleurs** : Marron (Caisse).
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : `RECEPTION_DELIVERY_DONE` = "Livraison effectuée", `RECEPTION_ANIMAL_ARRIVED` = "Votre {animalName} est arrivé à l'accueil !"
- **Formes** : Bulle (notif), badge rond (état).
### Consultation & Acclimatation (Consultation)
**Description UX** : Le joueur vérifie le temps restant avant de pouvoir placer l'animal.
@@ -158,11 +231,11 @@ function updateReception(center):
**Événements** : `OPEN_RECEPTION`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_modal_soft.mp3` (jingle court).
- **Sons** : `ui_open.mp3`
- **Graphiques** : Style "Quarantaine" ou "Étable propre".
- **Images** : Portrait animal.
- **Vidéos** : N/A
- **Vidéos** : `progress_fill.webm` (0.8s loop) pour la barre dacclimatation (optionnel).
- **Animations** : Barre de progression qui avance.
- **Couleurs** : Orange (En cours), Vert (Prêt).
- **Textes** : "Prêt dans X min".
@@ -178,12 +251,525 @@ function updateReception(center):
**Événements** : `PLACE_ANIMAL`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_confirm_place.mp3` (jingle court de confirmation).
- **Sons** : `animal_happy.mp3` (cri de l'animal).
- **Graphiques** : Sprite Animal.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `placement_ghost_ok.png`, `placement_ghost_ko.png` (surbrillance vert/rouge).
- **Vidéos** : `placement_glow.webm` (1.2s, non loop).
- **Animations** : Animal qui saute de joie au placement.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Couleurs** : Vert (#2ECC71) placement valide, Rouge (#E74C3C) placement invalide, Ambre (#F39C12) état “en acclimatation”.
- **Textes** : `BTN_PLACE` = "Placer", `RECEPTION_READY` = "Prêt"
- **Formes** : Badge “!” (prêt), sablier (en cours).
### Vue Isométrique
- **Sprite Bâtiment** : 4 directions isométriques (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest) pour s'aligner avec les chemins.
- **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “Accueil des animaux” : point dentrée unique des animaux livrés/achetés, avec slots, acclimatation/quarantaine, et passage vers placement sur la grille. |
| Rôle | Éviter le placement immédiat, révéler/afficher des informations avant placement, appliquer des règles dacclimatation et incidents sanitaires observables. |
| Portée | Une instance de bâtiment sur la carte zoo (iso), gérant une liste de slots `EMPTY/OCCUPIED/READY`. |
| Contrainte | Timers et statuts recalculés à la volée (lazy update), sans cache/mémorisation ; aucun fallback silencieux en cas dincohérence (log + erreur + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir accueil | clic bâtiment | `reception_id` | bottom sheet slots | liste slots + progression | Event `OPEN_RECEPTION` |
| Réceptionner un animal | livraison camion/achat | `animal_id`, `arrival_time` | slot OCCUPIED | 1 slot libre requis, sinon `RECEPTION_FULL` | Event `ANIMAL_ARRIVAL` |
| Calculer fin acclimatation | arrivée/upgrade | level, baseDuration | `acclimatization_end_time` | formule par niveau ; clamp ≥ now | Event `ACCLIMATIZATION_SCHEDULED` |
| Passer READY | tick lazy | now, end_time | status READY | idempotent ; pas de skip | Event `ANIMAL_READY` |
| Inspection pré-placement | ouverture slot | `animal_id` | UI stats | révèle traits selon “Traçabilité” | Event `RECEPTION_INSPECTED` |
| Placement vers zoo | action joueur | `animal_id`, coord/enclos | animal placé | valide biome/enclos/case, sinon `PLACEMENT_ERROR` | Event `ANIMAL_PLACED` |
| Appliquer bonus temporaire | sortie accueil | level | modifs temporaires | fertilité + calm/confident selon niveau | Event `RECEPTION_BONUS_APPLIED` |
| Déclencher incident quarantaine | tick (par animal) | `risk_contamination` | quarantaine prolongée/coût | probabilité explicite ; jamais silencieux | Event `QUARANTINE_ALERT` |
| Gestion saturation | slot plein | - | signal UI | badge + réduction attractivité façade | Event `RECEPTION_SATURATED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Porte/étable + caisse, badge quarantaine |
| Couleur dominante | Ambre/bois (caisse), vert (prêt) |
| Variantes | `reception_building_dir_{N,E,S,W}.png`, `reception_icon.png` |
| États | `idle`, `occupied`, `ready`, `quarantine_alert`, `full` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir slots | Consultation | - | clic accueil | bottom sheet | - |
| Inspecter animal | Consultation | slot OCCUPIED/READY | clic slot | panneau détail | `ANIMAL_NOT_FOUND` |
| Placer animal | Action | slot READY | bouton “Placer” → mode placement | placement | `PLACEMENT_ERROR` |
| Détails incident | Consultation | `QUARANTINE_ALERT` actif | clic badge | panneau cause/coût | - |
| Quitter | Navigation | sheet ouvert | fermer | retour carte | - |
## Personnage contextuel (événements & interaction)
Voir `personnel_accueil.md`.
### Affichage
Le personnel daccueil saffiche lorsque :
- le module est **actionné** (ouverture de laccueil, inspection dun slot, lancement du placement) ;
- un **événement** lié à laccueil survient (arrivée, prêt, saturation, quarantaine).
### Déclencheurs (événements)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_RECEPTION` | clic bâtiment | portrait + état slots, CTA vers slot/placement |
| `ANIMAL_ARRIVAL` | slot affecté | bulle “Arrivée enregistrée” + deep-link inspection |
| `ANIMAL_READY` | slot passe READY | bulle “Prêt à placer” + CTA “Placer” |
| `RECEPTION_FULL` | pas de slot libre | bulle “Accueil saturé” + CTA “Voir slots” |
| `QUARANTINE_ALERT` | incident actif | bulle “Alerte quarantaine” + CTA “Voir détails” |
### Skins & thèmes
Le rendu du personnage suit `theme.md` et les skins éventuels via `inventaire_skins.md` (uniforme, badge, clipboard).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `building_reception` | DB | constant |
| `level` | int | 1 | DB | 1..7 |
| `position.x` | int | 10 | DB | grid |
| `position.y` | int | 12 | DB | grid |
| `iso_x` | int | 120 | DB/calcul | rendu iso |
| `iso_y` | int | 88 | DB/calcul | rendu iso |
| `z_index` | int | 12088 | calcul | profondeur |
| `slots[].slot_id` | int | 0 | DB | 0..capacity-1 |
| `slots[].animal_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide |
| `slots[].status` | enum | `OCCUPIED` | DB | `EMPTY/OCCUPIED/READY` |
| `slots[].arrival_time` | timestamp \| null | - | DB | UTC |
| `slots[].acclimatization_end_time` | timestamp \| null | - | DB | UTC |
| `slots[].bonus_applied` | boolean | false | DB | idempotent |
| `scores.comfort_quarantine` | int | 60 | calcul/config | 0..100 |
| `scores.risk_contamination` | float | 0.02 | config | 0..0.25 |
| `scores.traceability` | int | 80 | config | 0..100 |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Capacité | 1 | slots | level 1 |
| Temps acclimatation | 600 | s | base |
| Zone température | neutre | - | stase |
| Nourrissage | auto | bool | coût inclus |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Confort quarantaine | 60 | 0..100 | stress initial \(\downarrow\) |
| Risque contamination | 2% | 0..25% | incident sanitaire |
| Traçabilité | 80 | 0..100 | traits révélés |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | début jeu | - | bâtiment présent | indestructible |
| Entrée animal | livraison | animal_id | slot OCCUPIED | capacité |
| READY | fin timer | now | status READY | idempotent |
| Sortie | placement | coord | animal placé | slot libéré |
| Incident | tirage risque | risk | prolongation/coût | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Nouvelle partie | true | est | accueil présent |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | indestructible |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Bonus temporaires | Non | expirent |
| Niveau accueil | Oui | persiste |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet accueil | Notes |
|---|---|---|
| - | neutre | pas de dégâts température |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet accueil | Notes |
|---|---|---|
| - | neutre | compatible tous |
#### Impact Saisons (tableau détaillé)
| Saison | Effet accueil | Notes |
|---|---|---|
| - | protégé | pas dintempéries |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet accueil | Notes |
|---|---|---|
| Nuit | aucun | 24/7 |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Level 4..6 | +10% temporaire | 2 jours in-game |
| Level 7 | +25% temporaire | 5 jours in-game |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Stase | pas de mort | jauges gelées |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stock global | nourri auto | coût inclus |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Façade propre > 80 | +5 | 6 cases | ambiance |
| File visible (saturation) | -10 | 8 cases | frustration |
| Livraison animal rare | +20 | 10 cases | spectacle |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Quarantaine visible | stress voisin + | proximité |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Niveau accueil | +5% / niveau | valeur zoo |
| Sans incident 7 jours | +10% | aucun `QUARANTINE_ALERT` |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison | pousse slot OCCUPIED | camion arrive |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps acclimatation | table par level | 1..7 |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Traçabilité | + | score |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Saturation | détour visiteurs | `QUARANTINE_ALERT` |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Consommables quarantaine | 50 | coins / semaine | utilisation |
| Nettoyage/désinfection | 30 | coins / semaine | maintenance |
| Contrôle vétérinaire | 80 | coins / semaine | périodique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Intervention quarantaine | 10 | coins | incident |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Nourrissage auto | 0 | - | inclus |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance accueil | 10 | coins / semaine | base |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | fréquentation \(\downarrow\) si incidents |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allées | Accueil | curiosité façade | détour faible |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Accueil | Boutique | stress/peur | détour fuite |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Accueil | Sortie | quarantaine visible | sortie anticipée |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `ANIMAL_ARRIVAL` | camion | animal_id | slot OCCUPIED |
| `ANIMAL_READY` | timer | animal_id | status READY |
| `ANIMAL_PLACED` | placement | animal_id, coord | sortie slot |
| `RECEPTION_FULL` | livraison | - | message |
| `QUARANTINE_ALERT` | tirage | animal_id | avoidance visiteurs |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `OPEN_RECEPTION` | clic | bottom sheet |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_AVOIDS_QUARANTINE` | `QUARANTINE_ALERT` | reroute |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SEES_QUEUE` | saturation | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_PLACES_ANIMAL_FROM_RECEPTION` | CTA | placement |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | 1 slot, 10 min | base |
| 4 | 800 | fertilité +10% (2j) | bonus calme |
| 7 | 6400 | instant, fertilité +25% (5j) | bonus confiant |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getAcclimatizationDuration` | level | seconds | table |
| `updateReceptionSlots` | reception, now | reception | READY idempotent |
| `tryStartQuarantineIncident` | slot, risk | incident? | observable |
| `applyReceptionBonus` | animal, level | animal | temporaire |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ANIMAL_READY` | Info | "Un animal est prêt à rejoindre le zoo." | slot READY |
| `RECEPTION_FULL` | Warning | "Accueil saturé." | pas de slot libre |
| `PLACEMENT_ERROR` | Error | "Impossible de placer ici." | placement invalide |
| `QUARANTINE_ALERT` | Warning | "Alerte quarantaine." | incident |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir arrivées | savoir quoi faire | dispersion | notif → deep-link accueil |
| Inspecter | vérifier stats | menus | clic slot direct |
| Placer | intégrer au zoo | erreurs | overlay OK/KO + CTA |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Bottom sheet accueil | liste slots | open/closed |
| Slot | portrait + barre | empty/occupied/ready |
| Badge état | sablier/! | visible au-dessus bâtiment |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | bâtiment | sélection base sprite |
| HUD | notifications | deep-link |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | livraison | pousse vers accueil |
| `enclos.md` | placement | validation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir accueil | clic bâtiment | slots |
| Aller depuis notif | clic notif | focus slot |
| Placer | CTA | mode placement |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_RECEPTION` | clic | sheet |
| `CLICK_PLACE_FROM_RECEPTION` | CTA | placement |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ambience_stable_soft.mp3` | accueil | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `crate_drop.mp3` | arrivée | moyen |
| `ui_open.mp3` | ouvrir | bas |
| `ui_confirm_place.mp3` | placer | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `badge_quarantine.png` | état | contraste |
| `reception_icon_ready.png` | prêt | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `reception_building.png` | bâtiment |
| `placement_ghost_ok.png` | overlay |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `delivery_short.webm` | notif | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| badge sablier | OCCUPIED | loop |
| badge ! vert | READY | loop |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `reception_amber` | #F39C12 | en cours |
| `reception_green` | #2ECC71 | prêt |
| `reception_red` | #E74C3C | erreur |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `reception.delivery_done` | Livraison effectuée | Delivery complete |
| `reception.ready` | Prêt | Ready |
| `reception.full` | Accueil saturé | Reception full |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Slot | rectangle arrondi | lisible |
| Badge état | rond | visible |

View File

@@ -1,24 +1,79 @@
# Spécifications : Achat et Upgrade des Boutiques
## 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)
- **Attrait** : Attire les visiteurs de plus loin sur la grille.
- **Revenu** : Augmente le montant dépensé par chaque visiteur qui passe sur la case.
- **Capacité** : Augmente le nombre de visiteurs pouvant interagir simultanément.
- **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 (Multiplicateur de prix).
- **Capacité** : Augmente le nombre de visiteurs pouvant interagir simultanément (File d'attente).
# Annexes Techniques
## 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
### 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
## 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)
### Rénovation (Action)
**Description UX** : Améliorer la boutique change son apparence et ses stats.
@@ -29,12 +84,17 @@ Voir `boutique.md` pour le tableau détaillé des coûts et effets par niveau.
**Événements** : `UPGRADE_SHOP_VISUAL`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Musique d'ascenseur (Muzak) apaisante.
- **Sons** : `construction_finish.mp3`.
- **Graphiques** : Sprites Boutiques Niv 1-7.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Photo avant/après (style émission rénovation).
- **Vidéos** : Ruban d'inauguration coupé.
- **Animations** : Effet de "pop" ou échafaudage rapide.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Couleurs** : Doré (pour les niveaux élevés).
- **Textes** : "Niveau Supérieur !".
- **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
- Le joueur possède un camion par défaut.
- 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)
- **Niveau 1** : Camion standard.
- **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.
- **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
## 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
### 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
## 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)
### Garage / Atelier (Consultation)
**Description UX** : Le joueur gère sa flotte de camions.
@@ -32,15 +75,15 @@ Voir `camion.md` pour le tableau détaillé des coûts et effets par niveau.
**Événements** : `OPEN_GARAGE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Radio "Trucker" (Rock instrumental léger).
- **Sons** : `wrench.mp3` (bruit d'outil).
- **Graphiques** : Fond garage.
- **Images** : Sprites Camions évolutifs (Vieux tacot -> Camion futuriste).
- **Vidéos** : N/A
- **Animations** : N/A
- **Vidéos** : Rotation 360° du modèle de camion.
- **Animations** : Étincelles de soudure.
- **Couleurs** : Gris, Métal.
- **Textes** : "Niveau X".
- **Formes** : N/A
- **Formes** : Silhouettes de camions en arrière-plan.
### Customisation (Cosmétique)
**Description UX** : Changer la couleur du camion.
@@ -51,12 +94,16 @@ Voir `camion.md` pour le tableau détaillé des coûts et effets par niveau.
**Événements** : `PAINT_TRUCK`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Bruit de spray "Pshhh" musical.
- **Sons** : `spray.mp3`.
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Pistolet peinture.
- **Images** : Nuancier de couleurs (Texture brillante).
- **Vidéos** : Reflet de lumière sur la carrosserie (shader).
- **Animations** : Camion change de couleur.
- **Couleurs** : Palette 16 couleurs.
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : "Peinture fraîche !".
- **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
- Sur une case vide de type "Terrain", le joueur peut acheter un 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
- 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).
## Upgrade de Case (Terrain)
- **Changement de Milieu** : 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 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 (invisible ou petit objet technique).
# Annexes Techniques
## 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`.
## 7. Progression
@@ -23,8 +34,8 @@ Voir `case_zoo.md` et `achat_upgrade_generique.md`.
**Changement de Milieu** :
| Niveau | Coût | Précision | Temps |
| :--- | :--- | :--- | :--- |
| 1 | 500 | Changement vers biome adjacent | 0s |
| 7 | 5000 | Changement vers n'importe quel biome | 0s |
| 1 | 500 | Changement vers biome adjacent uniquement | 5s |
| 7 | 5000 | Changement vers n'importe quel biome (Terraformation avancée) | 2s |
**Régulateur Thermique** :
| 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 |
| 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
## 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)
### Modification Terrain (Action)
**Description UX** : Le joueur sélectionne une case et choisit "Modifier Biome" ou "Température".
@@ -45,12 +86,17 @@ Voir `case_zoo.md` et `achat_upgrade_generique.md`.
**Événements** : `TERRAFORM_CASE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Jingle "Travaux Publics" (bruits de chantier rythmés).
- **Sons** : `digging.mp3` (Biome), `hissing_gas.mp3` (Température).
- **Graphiques** : Icône Pelle, Thermomètre.
- **Images** : Textures sol (Herbe, Sable, Neige).
- **Vidéos** : N/A
- **Vidéos** : Animation de transition de biome (morphing de texture).
- **Animations** : Transition de couleur (Fade) sur la case.
- **Couleurs** : Vert, Jaune, Blanc.
- **Textes** : "Coût : X".
- **Formes** : N/A
- **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,25 +4,71 @@
- **Action** : Acheter une nouvelle parcelle de terrain adjacente à la grille existante.
- **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.
- **Contraintes** : Limité par la taille de la carte globale ("Monde" ou "Région").
# Annexes Techniques
## 1. Données et États
### Modèle de Données (JSON)
Action sur l'objet `Zoo` (dimensions).
```json
{
"zoo_id": "uuid",
"dimensions": { "width": 5, "height": 6 },
"expansion_history": [
{ "direction": "EAST", "cost": 1000, "timestamp": "timestamp" }
],
"max_dimensions": { "width": 20, "height": 20 }
}
```
### Caractéristiques Initiales
N/A
**Taille Initiale** : 5x6 cases (30 cases).
## 7. Progression
### Tableau des Upgrades (Agrandissement)
| Extension | Coût (Pièces) | Gain |
| :--- | :--- | :--- |
| +1 Colonne | `1000 * (LargeurActuelle^2)` | +Hauteur cases |
| +1 Ligne | `1000 * (HauteurActuelle^2)` | +Largeur cases |
| +1 Colonne (Est) | 1000 | +Hauteur cases (6) |
| +1 Ligne (Sud) | 1000 | +Largeur cases (5) |
| +1 Colonne (Ouest) | 2000 | +Hauteur cases |
| +1 Ligne (Nord) | 2000 | +Largeur cases |
| +1 Colonne (Est 2) | 5000 | +Hauteur 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
## 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)
### Achat Parcelle (Action)
**Description UX** : Le joueur clique sur une zone "Hors Limites" adjacente pour l'acheter.
@@ -33,12 +79,17 @@ N/A
**Événements** : `EXPAND_ZOO`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Vent dans les plaines" lors du survol.
- **Sons** : `land_buy.mp3`.
- **Graphiques** : Panneau "For Sale".
- **Images** : Texture herbe (cachée par brouillard).
- **Vidéos** : N/A
- **Vidéos** : Timelapse accéléré de la construction des clôtures (2s).
- **Animations** : Brouillard se dissipe, herbe apparaît.
- **Couleurs** : Gris (Inaccessible) -> Vert (Accessible).
- **Textes** : "Acheter Terrain (X Pièces)".
- **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)
- **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).
- **Vitesse** : Réduit le temps nécessaire pour compléter une recherche technologique.
# Annexes Techniques
## 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
### 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
## 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)
### Arbre Technologique (Consultation)
**Description UX** : Visualiser les paliers de recherche.
@@ -25,12 +71,17 @@ Voir `centre_recherche.md` pour le tableau détaillé des coûts et effets par n
**Événements** : `VIEW_TECH_TREE`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Ambiance "Laboratoire High-Tech" (boucle subtile).
- **Sons** : `lab_hum.mp3`, `data_process.mp3`.
- **Graphiques** : Lignes de connexion.
- **Images** : Icônes Radar, Fiole.
- **Vidéos** : N/A
- **Animations** : N/A
- **Vidéos** : Hologramme rotatif de la technologie sélectionnée.
- **Animations** : Cadenas qui saute.
- **Couleurs** : Bleu (Science).
- **Textes** : "Niveau Suivant : Portée +10km".
- **Formes** : N/A
- **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,80 +13,141 @@
## 1. Données et États
### Modèle de Données (JSON)
N/A
**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
N/A
**Solde Joueur** : Voir `joueur.md`.
### Scores Initiaux
N/A
**Dépenses Totales** : 0.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
**Menu Achat** : Accessible via le HUD.
### Conditions de Disparition
N/A
**Fermeture Menu**.
### Hérédité
N/A
**Historique** : Les transactions sont loggées pour les stats.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Isolation** : Les bâtiments de haut niveau résistent mieux aux coûts énergétiques (Chauffage/Clim -10% par niveau).
### Impact Milieu (Biome)
N/A
**Adaptation** : Construire sur un biome "difficile" (Toundra, Désert) coûte +20% à l'achat initial (frais de fondations).
### Impact Saisons
N/A
**Soldes** : Certains items moins chers en Hiver (-15% sur les chauffages).
**Surcharge** : En Été, les stands de glaces coûtent +10% à l'achat (demande forte).
### Impact Heure / Jour-Nuit
N/A
**Tarif de Nuit** : Les travaux (Upgrades) lancés la nuit (22h-06h) sont 5% moins chers (main d'œuvre nocturne).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Couveuses** : L'achat d'upgrades "Confort" pour les enclos augmente la fertilité de +2%.
### Impact Mort
N/A
**Sécurité** : Les clôtures de haut niveau réduisent le risque de fuite et d'accident mortel de 99%.
### Impact Nourriture
N/A
**Stockage** : Les upgrades de "Réserve" permettent d'acheter la nourriture en gros (-5% prix unitaire).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Nouveauté** : Chaque nouvel achat génère un boost temporaire d'attractivité ("C'est tout neuf !" +10% pendant 2 jours).
### Impact Valeur
N/A
**Inflation** : Les prix augmentent légèrement si le joueur est très riche (équilibrage dynamique).
**Revente** : Un bâtiment peut être revendu pour 50% de son coût total (base + upgrades).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Livraison** : Instantanée pour les bâtiments, temps de trajet pour les animaux.
**Construction** : Les gros bâtiments (Laboratoire, Centre Recherche) prennent 24h in-game à être opérationnels.
### Dépenses (Boutiques/Visiteurs)
N/A
**Investissement** : Dépense principale du joueur.
**Maintenance** : Chaque niveau d'upgrade augmente les frais d'entretien quotidiens de +5%.
### Trajet Visiteurs
N/A
**Obstacle** : Un bâtiment en construction bloque le passage, forçant les visiteurs à faire un détour.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Promo** : Offre limitée dans le temps (-20%).
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Multiplicateur Coût | Effet Général | Apparence |
| :--- | :--- | :--- | :--- |
| 1 | x1.0 | Fonctionnalité de base | Standard |
| 2 | x1.5 | +10% Efficacité | +Détails |
| 3 | x2.2 | +25% Efficacité | +Couleurs |
| 4 | x3.3 | +45% Efficacité | +Éclairage |
| 5 | x5.0 | +70% Efficacité | +Enseigne |
| 6 | x7.5 | +100% Efficacité | +Moderne |
| 7 | x11.0 | +150% Efficacité | Futuriste (Or/Platine) |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
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:
player.coins -= item.cost
player.inventory.add(item)
emitEvent("BUY_SUCCESS")
logTransaction(player, item, "SUCCESS")
else:
emitEvent("BUY_FAIL", "Fonds insuffisants")
logTransaction(player, item, "FAILED")
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `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
## 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)
### Interface d'Achat (Consultation)
**Description UX** : Le joueur ouvre le menu de construction ou d'upgrade.
@@ -97,15 +158,15 @@ N/A
**Événements** : `OPEN_SHOP_MENU`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Jingle "Caisse Enregistreuse" (court).
- **Sons** : `ui_hover.mp3`.
- **Graphiques** : Icônes Bâtiments.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : Sprites des bâtiments dans le menu (2D isométrique).
- **Vidéos** : Mini-clip "Construction en cours" (optionnel).
- **Animations** : Bouton rebondit au survol.
- **Couleurs** : Fond sombre, Texte clair.
- **Textes** : Prix, Nom.
- **Formes** : Cartes carrées.
- **Formes** : Cartes carrées avec coins arrondis.
### Confirmation Achat (Action)
**Description UX** : Le joueur clique pour acheter.
@@ -116,12 +177,12 @@ N/A
**Événements** : `BUY_ITEM`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Jingle "Succès" (trompettes légères).
- **Sons** : `buy_success.mp3`.
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Particules de pièces d'or.
- **Images** : Icône "Vendu" tamponnée.
- **Vidéos** : Transition de fermeture de menu (wipe).
- **Animations** : Compteur pièces descend.
- **Couleurs** : Rouge (déduction).
- **Textes** : "-500".
- **Formes** : N/A
- **Formes** : Effet d'onde de choc circulaire au clic.

View File

@@ -2,39 +2,86 @@
## Construction
- Nécessaire pour faire éclore plus d'œufs simultanément.
- Peut être construite sur une case vide.
## Upgrade (7 Niveaux)
- **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).
- **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
## 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
### 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
## 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)
### Extension (Action)
**Description UX** : Ajouter des slots d'œufs.
**Description UI** : La grille de slots s'agrandit (nouvelles cases déverrouillées).
**Emplacement** : Modal Nurserie.
**Intégration** : UI Grid.
**Navigation** : N/A
**Navigation** : Clic Nurserie -> Onglet Extension.
**Événements** : `UNLOCK_SLOT`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Berceuse douce (boîte à musique).
- **Sons** : `unlock.mp3`.
- **Graphiques** : Cadenas qui s'ouvre.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône "Œuf +" (Slot vide).
- **Vidéos** : Rayon de lumière sur le nouveau slot.
- **Animations** : Slot qui s'illumine.
- **Couleurs** : N/A
- **Couleurs** : Rose pastel et Bleu ciel.
- **Textes** : "Slot débloqué".
- **Formes** : N/A
- **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

@@ -0,0 +1,103 @@
# Affiche Enclos
## 1. Définition
Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce animale qui y réside. Il apparaît automatiquement lorsqu'un enclos est créé et se positionne sur une section horizontale visible de la barrière.
## 2. Fonctions
* **Information :** Indique aux visiteurs (et au joueur) quel animal se trouve ici.
* **É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.
## 3. Icone
* **Représentation :** Panneau rectangulaire avec une photo d'animal.
* **Couleur dominante :** Bois et Blanc.
## 4. Interactions
* **Clic :** Ouvre la fiche encyclopédique de l'animal ("Zoopédia").
* **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
### Données (JSON)
```json
{
"sign_id": "sign_lion_01",
"parent_enclosure_id": "enclosure_lions_01",
"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)",
"status_since": "timestamp",
"repair_cost": "integer",
"clean_cost": "integer",
"cooldowns": {
"next_interaction_at": "timestamp"
},
"animal_info": {
"name": "Lion d'Afrique",
"scientific_name": "Panthera leo",
"conservation_status": "VU"
},
"i18n": {
"title_key": "string",
"subtitle_key": "string"
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### 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).
* **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.
* **Dégradation** :
* `TAGGED` : naffecte pas la lisibilité mais réduit lattractivité (ex. -5 rayon 6 cases) jusquau nettoyage.
* `BROKEN` : la Zoopédia est inaccessible au clic, et malus attractivité plus fort (ex. -15 rayon 8 cases).
* **Cooldown clic** : éviter les spams ; appliquer `next_interaction_at` (ex. 1s) sur ouverture Zoopédia.
### 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
* **Visuel :** Petit panneau en bois avec une image miniature de l'animal.
* **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.
* **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.
### Messages i18n (exemples)
* `ENCLOSURE_SIGN_OPEN` : FR "Ouvrir la Zoopédia" / EN "Open Zoopedia"
* `ENCLOSURE_SIGN_TAGGED` : FR "Affiche taguée" / EN "Sign tagged"
* `ENCLOSURE_SIGN_BROKEN` : FR "Affiche cassée" / EN "Sign broken"
# 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

@@ -0,0 +1,576 @@
# Agent de Sécurité
## 1. Définition
Employé responsable de l'ordre et de la sécurité dans le zoo. Il gère les visiteurs indisciplinés, prévient le vandalisme et peut intervenir en cas d'évasion d'animal (si fonctionnalité présente). Achetable avec des pièces.
## 2. Fonctions
* **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.
* **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
* **Représentation :** Écusson ou Casquette de police.
* **Couleur dominante :** Bleu marine et Jaune.
## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces.
* **Ordre :** Le joueur peut cliquer sur une zone pour envoyer l'agent en priorité.
* **Licenciement :** Possible via le menu employé.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "security_05",
"type": "agent_securite",
"name": "Sgt. Pepper",
"created_at": "timestamp",
"salary": 40,
"hire_cost": 400,
"state": "enum (PATROL, CHASE, REST, INTERACT)",
"position": { "x": 12.5, "y": 14.0 },
"target_position": { "x": 20, "y": 10 },
"stats": {
"intimidation": 10,
"speed": 1.1,
"stamina": 100
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* **Rayon d'action :** 5 cases autour de lui.
* **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
* **Visuel Carte :** Personnage en uniforme bleu.
* **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.
* **Vue Isométrique :** Sprite 8 directions pour des déplacements fluides.
## Affichage contextuel (modules)
Lagent de sécurité sert de personnage contextuel lors des incidents dordre/sécurité.
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `VANDALISM_ALERT` / `VANDALISM_DETECTED` | menace détectée | bulle “Incident” + CTA “Envoyer sécurité” |
| `ESCAPE_ALERT` / `ESCAPE_DETECTED` | évasion détectée | bulle “Évasion” + CTA focus zone |
| `ZONE_BLOCKED` | zone bloquée | message explicite + explication détour |
# 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.
## Définition
| Champ | Valeur |
|---|---|
| Entité | Employé “Agent de sécurité” |
| Rôle | Maintenir lordre, réduire vandalisme/incidents, gérer visiteurs indisciplinés, intervenir (si feature) sur évasions. |
| IA | FSM/priority queue : Évasion > Vandalisme > Déchets > Patrouille. |
| Vue | Isométrique 2.5D, sprite 4 directions (le bloc “8 directions” existant est conservé comme option danimation), hitbox base-sprite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Patrouille | Tick agent | routes, densité | présence | Choisit chemins (visiteurs attirés chemins) | Event `SECURITY_PATROL_TICK` |
| Dissuasion vandalisme | proximité incident | `intimidation`, rayon | proba vandalisme - | Effet plafonné ; dépend densité | Event `SECURITY_DETERRENCE_APPLIED` |
| Intervention visiteur | visiteur “indiscipliné” | target | expulsion/stop | Temps action ; cooldown | Event `SECURITY_INTERACT_START/END` |
| Gestion évasion (option) | animal `ESCAPED` | animal pos | capture | Nécessite équipement (filet) ou tranquillisant | Event `SECURITY_CAPTURE` |
| Gestion fatigue | temps actif | stamina | REST | Repos staff room obligatoire | Event `SECURITY_REST_START/END` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Écusson / casquette |
| Couleur dominante | Bleu marine / jaune |
| Variantes | `icon_security_badge.png`, `icon_security_cap.png` |
| États | Badge “alerte” (rouge), “patrouille” (pas), “recherche” (loupe) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Recruter | Action | coins ≥ `hire_cost` | Menu Employés → Sécurité → Confirmer | agent créé | `INSUFFICIENT_FUNDS`, `EMPLOYEE_CAP_REACHED` |
| Envoyer en priorité | Action | zone/cible valide | clic carte → “Envoyer sécurité” | target prioritaire | `NO_SECURITY_AVAILABLE`, `INVALID_TARGET` |
| Licencier | Action | pas en capture verrouillée | panel agent → “Licencier” | suppression | `ACTION_BLOCKED` |
| Inspecter incidents | Consultation | - | panel → incidents | liste + ETA | - |
| Activer mode “strict” | Configuration | upgrade / coût | toggle | intervention + mais visiteurs stress + | `LOCKED_FEATURE` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `employee_id` | string | `security_05` | DB | unique |
| `type` | enum | `agent_securite` | DB | constante |
| `created_at` | timestamp | - | DB | - |
| `salary` | int | 40 | config | coins/jour |
| `hire_cost` | int | 400 | config | one-shot |
| `state` | enum | `PATROL|CHASE|REST|INTERACT` | runtime | FSM |
| `position` | object | `{x,y}` | runtime | monde |
| `target_position` | object | `{x,y}` | runtime | chase |
| `stats.intimidation` | int | 10 | DB | [1..100] |
| `stats.speed` | float | 1.1 | DB | déplacement |
| `stats.stamina` | int | 100 | runtime | 0..100 |
| `radius` | int | 5 | config | action |
| `grid` | object | `{x,y}` | runtime | position grille zoo |
| `iso_x/iso_y` | int | - | rendu | projection |
| `z_index` | int | - | rendu | profondeur |
| `hitbox` | enum | `base_sprite` | rendu | click base |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon action | 5 | cases | règle existante |
| Vitesse | 1.1 | coef | - |
| Stamina max | 100 | points | - |
| Temps repos | 15 | min in-game | par cycle repos |
| Priorité | 4 niveaux | - | évasion > vandalisme > déchets > patrouille |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Incidents résolus/jour | 0 | 0..∞ | satisfaction + |
| Vandalisme évité | 0 | 0..∞ | réputation + |
| Temps réponse moyen | 0 | 0..∞ | performance |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | embauche | coins | entité | `PATROL` |
| Chase | menace détectée | target | déplacement | sprint consomme stamina |
| Interact | contact menace | menace | neutralisée | cooldown |
| Rest | stamina bas | temps | stamina + | staff room |
| Disparition | licenciement | - | suppression | stop chase |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat | coins ≥ `hire_cost` | vrai | création |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Licenciement | action joueur | vrai | suppression |
| Zoo supprimé | - | vrai | suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Stats | Oui | persistées |
| Stamina | Non | reset quotidien |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Température | Effet | Condition |
|---|---|---|
| Extrême | patrouille - | fatigue + |
| Tempérée | neutre | - |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Chemins | déplacement + | patrouille efficace |
| Pont étroit | congestion | éviter chase sur pont |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Modificateur |
|---|---|---|
| Été | foule + | incidents + |
| Hiver | affluence - | incidents - |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Règle |
|---|---|---|
| Jour | patrouille | - |
| Nuit | sécurité renforcée | incidents peur + si pas déclairage |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bruit intervention | - | près enclos |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Évasion non gérée | risque mort + | collisions/ville |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | agent nalimente pas |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| État | Effet | Condition |
|---|---|---|
| Présence sécurité | confort + | rayon action |
| Interventions fréquentes | confort - | stress visiteurs |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action | Effet animaux | Condition |
|---|---|---|
| Capture évasion | stress + puis - | fin incident |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Zoo sûr | + | réputation/flux visiteurs |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison équipements | + | si feature |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Gestion sortie | + | si foule panique |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tech caméras | incidents - | si débloqué |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Déplacement visiteurs | - | si zones bloquées |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Vente souvenirs “police” | revenu + | coins | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Remboursement peur | -coins | coins | incidents peur |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaire | 40 | coins/jour | actif |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| dégâts évasion | 100 | coins | réparation |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| capture matériel | 50 | coins | filet |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | sécurité augmente confiance |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Incident | Enclos | évasion | zone bloquée |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteurs | Boutique | after incident | achats - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Panique | sortie | peur | départ massif |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `VANDALISM_DETECTED` | scan | pos | chase |
| `ESCAPE_DETECTED` | animal escaped | animal_id | chase |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `SECURITY_CHASE` | menace | animation course |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_BLOCKED` | intervention | pathing détour |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_CALMED` | sécurité proche | satisfaction + |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_EXPELLED` | interaction | sortie immédiate |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_SEND_SECURITY` | clic zone | priorité chase |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | patrouille base | - |
| 2 | 1500 | intimidation +2 | dissuasion |
| 3 | 3000 | speed +0.1 | réponse |
| 4 | 6000 | équipement capture | gestion évasion |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `scan_for_threats` | position, radius | threat | existant |
| `neutralize` | threat | resolved | expulsion/capture |
| `apply_deterrence` | intimidation | proba- | clamp |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SECURITY_BUSY` | Warning | "Agent occupé." | chase/interact |
| `ESCAPE_ALERT` | Alerte | "Évasion détectée !" | animal escaped |
| `VANDALISM_ALERT` | Warning | "Vandalisme !" | incident |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Envoyer agent | résoudre incident | localisation | action contextuelle sur incident |
| Voir sécurité | confiance | info | badges sur carte |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panel agent | stamina, état, target | patrol/chase/rest |
| Badge incident | type | priorité |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte | sprite agent | sélection base |
| Incidents | bulles | clic direct |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Pathfinding | zones bloquées | pas de fallback |
| Incidents visiteurs | expulsion | - |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir panel | clic agent | panel |
| Envoyer | clic incident | target |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SECURITY_PANEL` | clic | panel |
| `CLICK_SEND_SECURITY` | clic zone | send |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `security_loop.mp3` | ambiance | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `whistle.mp3` | chase | moyen |
| `ui_alert.mp3` | alerte | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `security_sprite_[dir].png` | sprite | 4 dirs |
| `fx_alert_ring.png` | FX | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `icon_security_badge.png` | icône |
| `portrait_security.png` | panel |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `security_alert.webm` | popup | 0.9s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| ring alerte | incident | loop |
| dash | chase | burst |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `security_primary` | #1B3B6F | UI |
| `security_accent` | #F1C40F | badge |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `security.send` | Envoyer | Send |
| `security.busy` | Occupé | Busy |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Badge alerte | triangle arrondi | lisible |
| Panel | bottom sheet | standard |

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
### Modèle de Données (JSON)
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éristique | Valeur Initiale |
@@ -32,8 +42,38 @@ Propriété `view_radius` sur `Zoo` ou `Player`.
| 6 | 2500 | 1200 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
## 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)
### Découverte (Passif/Action)
**Description UX** : En payant des points de recherche, le brouillard de guerre recule sur la carte du monde.
@@ -47,9 +87,13 @@ Propriété `view_radius` sur `Zoo` ou `Player`.
- **Musiques** : Jingle découverte (style Zelda/Civ).
- **Sons** : `wind_whoosh.mp3`.
- **Graphiques** : Nuages (Brouillard de guerre).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Carte au trésor (Icône).
- **Vidéos** : Effet de dissipation de brume.
- **Animations** : Fade out des nuages. Scale up de la vue (Dezoom).
- **Couleurs** : Blanc/Gris (Nuages).
- **Textes** : "Nouvelle zone découverte !".
- **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

@@ -5,20 +5,19 @@ Entité biologique principale du jeu.
## Propriétés
- **Type/Espèce** : Défini par le loot (75 animaux possibles).
- **Affichage** : Apparaît "en petit" dans l'enclos fusionné.
- **Génétique** :
- **Couleur** : 15 variations.
- **Rareté** : 5 niveaux (pondération Fibonacci).
- **É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.
## Besoins
- **Nourriture** : Consommation périodique.
- **Environnement** : Adéquation Biome/Température.
- **Social** : Besoin de congénères (reproduction) ou de solitude (selon espèce).
## 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é.
- **Enrichissement** : Besoin d'un objet spécial dans l'enclos (ex: Arbre à singe).
# Annexes Techniques
@@ -36,14 +35,20 @@ Conséquence : Perte sèche, pénalité d'attractivité.
"health": "float (0-100)",
"hunger": "float (0-100)",
"temperature_comfort": "float (-1.0 to 1.0)",
"stress": "float (0-100)"
"stress": "float (0-100)",
"energy": "float (0-100)"
},
"genetics": {
"parent_a_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"
}
```
@@ -55,12 +60,6 @@ Conséquence : Perte sèche, pénalité d'attractivité.
| Stress | 0.0 |
| Âge | 0 (Bébé) |
### Scores Initiaux
| Score | Valeur |
| :--- | :--- |
| Valeur Vente (Base) | 10 * Fibonacci(Rareté) |
| Attractivité (Base) | 5 * Rareté |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
| Type | Condition |
@@ -77,12 +76,6 @@ Conséquence : Perte sèche, pénalité d'attractivité.
| Vente | Transaction validée |
| 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
### Impact Température
| Delta T° (Idéal - Réel) | Effet sur Santé / Heure | Effet sur Stress / Heure |
@@ -100,97 +93,31 @@ Conséquence : Perte sèche, pénalité d'attractivité.
| Adjacente (Cercle chromatique) | 0 | 0 |
| 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 | N/A |
### 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)
N/A (Concerne les bâtiments)
### Dépenses (Boutiques/Visiteurs)
N/A
### Trajet Visiteurs
N/A
## 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.
## 7. Progression
### Tableau des Upgrades
N/A (L'animal n'a pas d'upgrade, il a de l'expérience/âge)
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
```javascript
function updateAnimal(animal, context):
# Gestion Température
deltaTemp = abs(animal.idealTemp - context.tileTemp)
if deltaTemp > 0:
animal.health -= tableImpactTemp[deltaTemp]
animal.stress += tableImpactTemp[deltaTemp] * 0.5
# Gestion Biome
if context.tileBiome != animal.idealBiome:
animal.stress += 5
if animal.hunger > 0:
# Gestion Faim
if animal.hunger < 100:
animal.hunger += baseHungerRate * context.seasonMod
else:
animal.health -= 10 # Famine
if animal.hunger >= 100:
animal.health -= 10
# Gestion Reproduction
if canReproduce(animal):
mate = findMate(animal)
if mate:
startReproduction(animal, mate)
```
### Messages d'Infos / Alerte
@@ -203,60 +130,36 @@ function updateAnimal(animal, context):
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Vie Quotidienne (Passif)
**Description UX** : L'animal vit sa vie sur la grille. Il bouge, mange, dort.
**Description UI** : Sprite animé. Si problème (faim/froid), feedback visuel immédiat (changement couleur/tremblement).
**Emplacement** : Case Zoo.
**Intégration** : Grille principale.
**Navigation** : N/A
**Navigation** : Clic Animal (Focus).
**Événements** : `ANIMAL_IDLE`, `ANIMAL_MOVE`.
#### Assets
- **Musiques** : Ambiance nature (oiseaux, vent).
- **Sons** : Cris d'animaux aléatoires (faible volume).
- **Graphiques** : Sprites Pixel Art (4 directions).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Portraits HD pour les dialogues.
- **Vidéos** : Mini-cinématique d'introduction de l'espèce (découverte).
- **Animations** : Idle, Walk, Eat, Sleep.
- **Couleurs** : Selon espèce + Teinte bleue (Froid) / Rouge (Chaud).
- **Textes** : Bulle "Zzz" (Sommeil), "!" (Alerte).
- **Formes** : N/A
- **Formes** : Ombre portée ovale sous l'animal.
### Consultation (Consultation)
**Description UX** : Le joueur clique sur l'animal pour voir ses détails (Santé, Faim, Génétique).
**Description UI** : **Bottom Sheet** (Mobile) ou Panneau Latéral (Desktop) pour ne pas masquer le jeu. Jauges colorées. Arbre généalogique simplifié.
**Emplacement** : Case Zoo.
**Intégration** : Focus caméra sur l'animal.
**Navigation** : Clic Animal -> Panneau.
**Événements** : `SELECT_ANIMAL`.
#### Assets
- **Musiques** : N/A
- **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** : N/A
- **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** : N/A
- **Sons** : `eat.mp3`, `heal.mp3`.
- **Graphiques** : Particules (Cœurs, Étoiles).
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Animal saute de joie.
- **Couleurs** : N/A
- **Textes** : "+10 PV", "-20 Faim".
- **Formes** : N/A
### Vue Isométrique
- **Sprites** : 4 directions (N, S, E, W) minimum. Idéalement 8 pour fluidité.
- **Occlusion** : L'animal doit être caché par les murs sud/est de son enclos, mais visible par-dessus les murs nord/ouest.
- **Comportement** : L'animal ne doit jamais traverser les murs (collision box stricte).

559
docs/specs/artiste.md Normal file
View File

@@ -0,0 +1,559 @@
# Artiste
## 1. Définition
Employé dédié au divertissement des visiteurs. Il réalise des spectacles de rue, joue de la musique ou peint, augmentant ainsi le bonheur des visiteurs et leur temps de séjour dans le zoo. Achetable avec des pièces.
## 2. Fonctions
* **Divertissement :** Crée une zone d'attractivité temporaire autour de lui.
* **Bonheur :** Augmente la jauge de bonheur des visiteurs à proximité.
* **Dons :** Peut générer de petits revenus supplémentaires (pourboires).
## 3. Icone
* **Représentation :** Masque de théâtre ou Notes de musique.
* **Couleur dominante :** Rose et Violet.
## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces.
* **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
### Données (JSON)
```json
{
"employee_id": "artist_03",
"type": "artiste",
"subtype": "musician", // "clown", "painter", "juggler"
"name": "Melody",
"salary": 45,
"hire_cost": 450,
"state": "enum (IDLE, PERFORMING, BREAK)",
"performance_cooldown_end": "timestamp",
"stats": {
"charisma": 15,
"radius": 3, // Rayon d'effet
"tips_collected": 0
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* 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).
### 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
* **Visuel Carte :** Personnage coloré, jonglant ou jouant d'un instrument.
* **Effet :** Notes de musique ou étoiles flottant autour de lui.
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Entité | Employé “Artiste” |
| Rôle | Divertir les visiteurs pour augmenter satisfaction, temps de séjour et micro-revenus (pourboires). |
| Position | Se déplace sur chemins / points dintérêt (scène) avec un rayon deffet local. |
| Vue | Isométrique 2.5D, sprite 4 directions, hitbox base-sprite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Divertissement de zone | Tick IA / début performance | `radius`, visiteurs proches | `+happiness`, `+stay_duration` | Effet décroissant si performance continue sans pause ; nécessite cases walkable | Event `ARTIST_PERF_TICK`, compteur visiteurs affectés |
| Show spécial | Action joueur | cooldown, coût optionnel | Bonus temporaire fort | Cooldown strict ; annule si artiste en pause forcée | Event `ARTIST_SPECIAL_SHOW_START/END` |
| Pourboires | Aléatoire pendant performance | RNG, densité foule | `+coins` | Plafond par minute ; augmente avec `charisma` | Event `ARTIST_TIP`, cumul `tips_collected` |
| Gestion fatigue | Temps passé en perf | durée | état `BREAK` | Pause obligatoire ; réduit efficacité avant pause | Event `ARTIST_BREAK_START/END` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Masque de théâtre / notes de musique |
| Couleur dominante | Rose / Violet |
| Variantes | `icon_artist_mask.png`, `icon_artist_music.png`, `icon_artist_paint.png` |
| États | Badge “cooldown” (horloge), “en pause” (Zzz) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Recruter | Action | Coins ≥ `hire_cost`, slot employé dispo | Menu Employés → Artiste → Confirmer | Artiste créé/assignable | `INSUFFICIENT_FUNDS`, `EMPLOYEE_CAP_REACHED` |
| Assigner à une scène | Action | Scène/POI existant, path possible | Sélection artiste → “Assigner” → clic scène | Itinéraire fixé + zone perf | `NO_PATH`, `SCENE_BUSY` |
| Déplacer manuellement | Action | Pas en show spécial verrouillé | Drag & drop / tap-to-move | Nouvelle position, recalcul foule | `INVALID_TILE` |
| Lancer show spécial | Action | Cooldown fini | Bouton “Show spécial” | Buff + FX + foule | `COOLDOWN_ACTIVE` |
| Inspecter stats | Consultation | - | Sélection artiste | Panel stats (charisma, tips) | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `employee_id` | string | `artist_03` | DB | Unique |
| `type` | enum | `artiste` | DB | Constante |
| `subtype` | enum | `musician|clown|painter|juggler` | DB | 1 parmi n |
| `salary` | int | 45 | config | Paiement journalier |
| `hire_cost` | int | 450 | config | Paiement à lembauche |
| `state` | enum | `IDLE|PERFORMING|BREAK` | runtime | Transitions contrôlées |
| `performance_cooldown_end` | timestamp | - | runtime | Non nul après show |
| `stats.charisma` | int | 15 | DB | [1..100] |
| `stats.radius` | int | 3 | DB | [1..8] |
| `stats.tips_collected` | int | 0 | runtime | Cumul session/jour |
| `grid` | object | `{x,y}` | runtime | Coord grille |
| `iso_x/iso_y` | int | - | rendu | Proj iso |
| `z_index` | int | - | rendu | Tri profondeur |
| `hitbox` | enum | `base_sprite` | rendu | Click sur base |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon effet | 3 | cases | `radius` |
| Chance pourboire | 5% | / tick perf | modulée par `charisma` |
| Bonus happiness | +0.1 × `charisma` | / tick | clamp max par visiteur |
| Pause requise | 10 | min in-game | après perf continue |
| Cooldown show spécial | 30 | min in-game | après activation |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Satisfaction locale | 0 | -100..+100 | Sajoute au calcul visiteur |
| Densité foule | 0 | 0..∞ | Conditionne bouchons |
| Revenu tips/jour | 0 | 0..∞ | Finance zoo |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | Embauche | coins, config | entité artiste | créé en `IDLE` |
| Activité | Tick | position, visiteurs | effets | pas de perf si `BREAK` |
| Disparition | Licenciement (si prévu) | - | suppression | pas de suppression si en show (attendre fin) |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat employé | coins ≥ `hire_cost` | vrai | création |
| Cap employé | slots > employés actifs | vrai | autorisé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Licenciement | action joueur | vrai | suppression + arrêt effets |
| Zoo supprimé | - | vrai | suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| `subtype` | Oui | reste identique |
| Stats (charisma/radius) | Oui | persistées |
| Tips collectés | Non | remis à 0 par jour |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Température | Effet sur artiste | Effet sur visiteurs | Condition |
|---|---|---|---|
| < 0°C | perf -20% | satisfaction - | si pas dabris proches |
| 1525°C | neutre | neutre | - |
| > 35°C | perf -10% (fatigue) | incidents “soif” + | canicule |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Chemin pavé | foule + | visitors préfèrent rester sur chemins |
| Boue / marécage | perf - | gêne visuelle + saleté |
| Pont | neutre | éviter attroupement sur pont étroit |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Modificateur |
|---|---|---|
| Été | demande shows + | tips +10% |
| Hiver | shows indoor | perf -10% si extérieur |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Règle |
|---|---|---|
| 10h16h | affluence max | perf prioritaire |
| 18h20h | sortie visiteurs | show spécial conseillé |
| Nuit | zoo fermé | artiste `IDLE` |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Foule bruyante | -5% | si densité > seuil près denclos |
| Show doux (musician) | +2% | si proche enclos et calme |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Accident foule | incident | si bouchon + chemins étroits |
| Animal mort visible | choc | artiste stop perf, foule se disperse |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Boisson visiteur | ventes + | show près boutique boisson |
| Nourriture artiste | coût | si mécanique employé nourrit (option) |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain attractivité | Rayon | Notes |
|---|---:|---:|---|
| Performance active | +5 | 3 cases | cumul limité par zone |
| Show spécial | +20 | 5 cases | déclenche attroupement |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Bruit clown | stress + | espèces sensibles |
| Musique douce | stress - | espèces calmes |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Tips collectés | +coins | par tick perf |
| Réputation zoo | + | si artistes actifs sans incidents |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison employés | neutre | pas dimpact direct |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | artiste naffecte pas nurserie |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| File entrée | + lente | foule show proche billeterie |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps de séjour | + | performance active |
| Déplacement | - | si attroupement crée bouchon |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Gestion file | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Stock goodies show | variable | coins | si boutique vend souvenirs |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Pourboires | +revenu (pas dépense) | coins | tips |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaire artiste | `salary` | coins/jour | employé actif |
| Embauche | `hire_cost` | coins | à lachat |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Cross-sell | - | - | section dupliquée conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Snacks show | 10 | coins | option “stand temporaire” |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation/attractivité | lartiste naffecte pas le flux initial |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Show | Enclos proche | curiosité | détour possible, congestion |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Show | Boutique | soif/envie souvenir | augmente dépenses |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Show proche | densité | risque file lente |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `EMPLOYEE_HIRED` | embauche | type, id | ajoute entité |
| `EMPLOYEE_SALARY_PAID` | fin jour | id, amount | dépense |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CROWD_CONGESTION` | densité > seuil | ralentit pathing local |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ARTIST_SPECIAL_SHOW_START` | clic show | buff + FX |
| `ARTIST_BREAK_START` | fatigue | stop perf |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_DONATION` | tip | coins + |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_HAPPINESS_GAIN` | tick perf | happiness + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_TRIGGER_SHOW` | bouton | démarre cooldown |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | artiste basic | subtype 1 |
| 2 | 1000 | `radius` +1 | meilleur crowd control |
| 3 | 2500 | tips +10% | bonus revenu |
| 4 | 5000 | show spécial + | FX + durée |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `update_artist` | artiste, visiteurs proches | happiness/tips | cf. algo existant |
| `trigger_special_show` | artiste | buff | cooldown |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ARTIST_ASSIGNED` | Info | "Artiste assigné." | assign ok |
| `ARTIST_COOLDOWN` | Warning | "Show spécial en recharge." | cooldown actif |
| `CROWD_BLOCKING` | Alerte | "Bouchon détecté près du show." | densité > seuil |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Recruter artiste | augmenter attractivité | coûts/slots | achat direct depuis panneau Employés |
| Lancer show | booster momentané | cooldown | bouton direct sur panneau artiste |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panneau employé | salaire, rayon, subtype | IDLE/PERF/BREAK |
| Bouton show spécial | cooldown + tooltip | enabled/disabled |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | menu Employés | accès rapide |
| Carte | sprite artiste | sélection base |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Pathfinding visiteurs | densité/obstacles | éviter ponts étroits |
| Système incidents | foule/bouchons | événements dédiés |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir panneau | clic artiste | panel visible |
| Recruter | menu → confirmer | entité créée |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_EMPLOYEE_PANEL` | clic artiste | ouvre panel |
| `CLICK_SPECIAL_SHOW` | clic bouton | démarre show |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `artist_theme_loop.mp3` | zone perf | loop | mix selon subtype |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `crowd_cheer.mp3` | show spécial | moyen |
| `coin_tip.mp3` | tip | faible |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `artist_sprite_[subtype]_[dir].png` | sprite | 4 directions |
| `fx_music_notes.png` | FX | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `portrait_artist.png` | panel |
| `icon_artist_mask.png` | liste employés |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `artist_special_show.webm` | popup show | 1.2s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| notes flottantes | perf active | cadence 1/s |
| confetti | show spécial | burst |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `artist_primary` | #C86DD7 | UI |
| `artist_accent` | #FF77AA | FX |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `artist.hire` | Recruter | Hire |
| `artist.special_show` | Show spécial | Special show |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Badge cooldown | pill arrondi | lisible |
| Zone radius | cercle iso-projeté | overlay |

View File

@@ -18,45 +18,90 @@ Les visiteurs ne se déplacent pas au hasard. Ils ont des "cibles" d'intérêt.
## 1. Données et États
### Modèle de Données (JSON)
Propriétés de `Visiteur`.
```json
{
"visitor_id": "uuid",
"current_target": { "type": "enum('animal','shop','bench','toilet','exit')", "entity_id": "uuid" },
"target_score": "float",
"memory": {
"seen_species": "string[]",
"last_shop_at": "timestamp | null",
"fatigue": "float (0-100)",
"thirst": "float (0-100)"
},
"pathing": {
"preferred_tiles": "enum('path','bridge')",
"avoid_zones": "uuid[]",
"repath_cooldown_ms": "integer"
}
}
```
### Caractéristiques Initiales
N/A
| Caractéristique | Valeur Initiale | Type | Description |
|---|---|---|---|
| Fatigue | 0 | float | Monte avec la marche ; déclenche recherche de banc. |
| Soif | 0 | float | Monte avec le temps/température ; déclenche boutique. |
| Diversité vue | 0 | int | Compte d'espèces différentes vues. |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Enthousiasme | 50 | 0-100 | Modifie durée de visite et dépenses. |
| Ennui | 0 | 0-100 | Si > 70, visiteur part vers sortie. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Visiteur spawn | true | Est | IA interne démarre (choix cibles). |
### Conditions de Disparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Ennui | 70 | >= | Cible sortie (billeterie). |
| Heure | fermeture | >= | Cible sortie. |
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Groupe famille | Itinéraire (préférence boutique/enclos) | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
**Canicule/Grand Froid** : Réduit le temps de séjour (-30%).
### Impact Milieu (Biome)
N/A
| Biome | Compatibilité | Bonus/Malus |
|---|---:|---|
| Chemin pavés | 100% | fatigue -10%/min |
| Boue | 30% | fatigue +20%/min, satisfaction - |
### Impact Saisons
N/A
| Saison | Effet | Modificateur |
|---|---|---|
| Été | recherche dombre/boutiques | soif + |
| Hiver | recherche dintérieur | fatigue + |
### Impact Heure / Jour-Nuit
N/A
| Période | Activité | Visibilité |
|---|---|---|
| 10h16h | exploration max | haute |
| 17h19h | achats sortie | moyenne |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Bébés visibles | + | visiteurs restent plus |
### Impact Mort
Voir `visiteur.md` (Départ immédiat).
### Impact Nourriture
N/A
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Boisson | soif -50 | 5 | 5 |
### Impact Attractivité (Visiteurs/Animaux)
**Poids des Cibles** :
@@ -68,25 +113,39 @@ N/A
| Banc (si fatigué) | 200 |
### Impact Valeur
N/A
| Facteur | Variation Prix | Condition |
|---|---:|---|
| Visiteur VIP | dépense x2 | si satisfait |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Paramètre | Valeur | Unité | Détail |
|---|---:|---|---|
| Repath cooldown | 500 | ms | évite recalcul permanent |
| Poids chemin | 2.0 | facteur | préférence chemin vs herbe |
### Dépenses (Boutiques/Visiteurs)
N/A
| Action | Dépense | Condition |
|---|---:|---|
| Achat boisson | 5 | soif > 50 |
| Achat souvenir | 15-30 | proche sortie |
### Trajet Visiteurs
Algorithme de choix de cible pondéré.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `TARGET_CHANGED` | nouvelle cible | path recalculé | instant |
| `VISITOR_BORED` | ennui seuil | départ | jusquà sortie |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | IA basique |
| 2 | 2000 | chemins niv 2 | préférence chemins + |
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -101,26 +160,38 @@ function chooseNextTarget(visitor, zoo):
```
### Messages d'Infos / Alerte
N/A
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "La foule se déplace vers une star." | animal rare visible | 2 |
| Warn | "Les visiteurs s'ennuient." | ennui moyen > seuil | 4 |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Foule (Passif)
**Description UX** : Les visiteurs s'agglutinent devant les animaux les plus intéressants.
**Description UI** : Densité de sprites visiteurs plus élevée autour des cases "Stars".
**Emplacement** : Grille Zoo.
**Intégration** : Comportement IA.
**Navigation** : N/A
**Navigation** : Aucune (passif). Option debug : toggle “Heatmap foule” dans HUD pour visualiser les zones dattroupement.
**Événements** : `CROWD_GATHER`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ambience_crowd_dynamic.mp3` (volume selon densité).
- **Sons** : Rumeur de foule (volume variable selon densité).
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Particules “flash photo”, bulles démotion.
- **Images** : `icon_camera.png`, `icon_star.png`.
- **Vidéos** : `crowd_flash.webm` (0.6s loop, optionnel).
- **Animations** : Applaudissements, Photos.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Couleurs** : Blanc/Jaune (flash), Or (star).
- **Textes** : `CROWD_GATHER` = "La foule se rassemble"
- **Formes** : Bulle BD (émotions).

View File

@@ -20,7 +20,7 @@ L'attraction est calculée pour chaque couple (Ville, Zoo).
## 1. Données et États
### Modèle de Données (JSON)
Calculé à la volée ou mis en cache.
Calculé à la volée, sans cache (cf. règle “pas de mémorisation”).
```json
{
"zoo_id": "uuid",
@@ -30,67 +30,105 @@ Calculé à la volée ou mis en cache.
```
### Caractéristiques Initiales
N/A
| Caractéristique | Valeur Initiale | Type | Description |
|---|---|---|---|
| Rayon attraction max | 30 | cases monde | Au-delà, attraction = 0 (plafond). |
| Facteur ville | 1.0 | float | Multiplie le flux (population/aisance). |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Attraction brute | 0 | 0-∞ | Avant concurrence/plafonds. |
| Flux visiteurs/jour | 0 | 0-∞ | Résultat final injecté à la billeterie. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo et ville existent | true | Est | Calcul possible. |
### Conditions de Disparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo supprimé | true | Est | Flux devient 0. |
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Soft reset | Cartographie connue | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Condition | Effet |
|---|---|
| Températures extrêmes régionales | réduit la volonté de voyager | flux -10% à -30% |
### Impact Milieu (Biome)
N/A
| Biome / route | Effet |
|---|---|
| Montagne (routes lentes) | distance effective + | flux - |
### Impact Saisons
**Hiver** : Réduit la volonté de voyager (-20% rayon d'attraction).
### Impact Heure / Jour-Nuit
N/A
| Période | Effet |
|---|---|
| Nuit | pas de départs | flux 0 vers billeterie |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Naissances médiatisées | flux + | événement “baby boom” |
### Impact Mort
N/A
| Cause | Conséquence | Durée |
|---|---|---|
| Série de morts | flux - | 24h (décroissance) |
### Impact Nourriture
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Prix nourriture élevé | visiteurs budget - | dépense moyenne - |
### Impact Attractivité (Visiteurs/Animaux)
Voir formule.
### Impact Valeur
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Ville riche | dépense moyenne + | facteur ville > 1 |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Paramètre | Valeur | Unité | Effet |
|---|---:|---|---|
| Recalcul flux | 1 | jour in-game | Recalcul quotidien (ou lazy). |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Marketing ville ciblée | 5005000 | coins | augmente facteur ville temporaire |
### Trajet Visiteurs
N/A
| Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Ville→Zoo | calcul distance | flux | distance^2 + plafond rayon |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `FLOW_UPDATED` | recalcul quotidien | met à jour overlay | instant |
| `CITY_FESTIVAL` | événement ville | flux - | 1 jour |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Flux visible sur carte monde |
| 2 | 2000 | réputation 300 | Rayon attraction +10% |
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -104,25 +142,37 @@ function calculateDailyVisitors(zoo, city):
```
### Messages d'Infos / Alerte
N/A
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "Nouvelle estimation visiteurs/jour : {n}" | recalcul | 2 |
| Warn | "La distance réduit fortement vos visiteurs." | dist proche plafond | 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)
### Visualisation Flux (Consultation)
**Description UX** : Le joueur regarde la carte du monde pour voir d'où viennent ses visiteurs.
**Description UI** : Lignes pointillées mouvantes reliant les villes au zoo. Épaisseur = Volume flux. **Particules** : Petits points ou voitures circulant sur les lignes pour donner une sensation de vie.
**Emplacement** : Carte Monde.
**Intégration** : Overlay.
**Navigation** : N/A
**Navigation** : Toggle “Flux visiteurs” dans le HUD carte monde → survol dune ligne → affiche détail (ville, visiteurs/jour, facteur saison, distance).
**Événements** : `VIEW_FLOW`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : `ambience_world_flow.mp3` (léger, optionnel).
- **Sons** : `ui_flow_toggle.mp3` (toggle overlay).
- **Graphiques** : Lignes de flux.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `flow_dotted_line.png`, `car_particle.png`.
- **Vidéos** : `flow_ants.webm` (1s loop, optionnel).
- **Animations** : Pointillés qui avancent (effet fourmis).
- **Couleurs** : Blanc ou Vert fluo.
- **Textes** : "150 visiteurs/jour".

520
docs/specs/avatar_joueur.md Normal file
View File

@@ -0,0 +1,520 @@
# Avatar Joueur
## 1. Définition
Représentation visuelle du joueur dans l'interface du jeu. L'avatar est personnalisable (genre, apparence, vêtements) et s'affiche en permanence dans un coin de l'écran (généralement en haut à gauche ou à droite, à définir selon l'UI). Il sert d'identité visuelle pour le profil du joueur et est visible par les autres joueurs lors des visites ou classements.
## 2. Fonctions
* **Personnalisation :** Permet au joueur de choisir le genre (Homme/Femme) et d'équiper des skins (chapeaux, vêtements, accessoires).
* **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).
* **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
* **Représentation :** Tête de l'avatar actuel dans un cadre circulaire ou carré.
* **Couleur dominante :** Dépend des skins équipés.
## 4. Interactions
* **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").
* **Level Up :** Animation spéciale lorsque le joueur gagne un niveau.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"avatar_id": "player_12345",
"gender": "female", // "male" | "female"
"level": 12,
"experience": 4500,
"next_level_xp": 5000,
"title": "Expert Zoologist",
"equipped_skins": {
"head": "skin_hat_safari",
"body": "skin_shirt_ranger",
"accessory": "skin_glasses_sun"
},
"unlocked_titles": ["Beginner", "Novice", "Expert"],
"mood_state": "happy" // "happy" | "neutral" | "worried"
}
```
### Règles Métier
* Le choix du genre est gratuit et modifiable.
* Les skins doivent être débloqués ou achetés avant d'être équipés.
* L'avatar est persistant entre les sessions.
## 6. Annexes UX/UI
* **Emplacement :** Coin supérieur (gauche ou droite) de l'interface principale (HUD).
* **Style :** Cartoon / Isométrique cohérent avec le reste du jeu.
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Entité | Avatar du joueur (HUD) + “Directeur” (NPC miniature) |
| Rôle | Identité visuelle (pseudo/niveau/titre), personnalisation par skins, feedback détat global du zoo. |
| Visibilité | Toujours visible dans le HUD ; visible sur carte monde et potentiellement en visite/classements. |
| Vue | Isométrique 2.5D (NPC), sprite 4 directions, hitbox base-sprite pour sélection NPC. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Personnaliser | Action joueur | inventaire skins, genre | `equipped_skins` | Équiper uniquement skins possédés ; genre modifiable | Event `AVATAR_EQUIP`, `AVATAR_GENDER_SET` |
| Afficher identité | HUD render | pseudo, level, title | UI avatar | Toujours présent ; tooltip au hover | Event `HUD_AVATAR_RENDER` |
| Réagir état zoo | Tick / événements | incidents, survie, réputation | `mood_state` + anim | Mapping déterministe (pas de “best effort”) | Event `AVATAR_MOOD_CHANGED` |
| Level-up | XP gain | xp, seuil | level+1 | Animation + textes | Event `PLAYER_LEVEL_UP` |
| NPC Directeur | Tick IA | heatmap incidents | déplacement | Priorise zones critiques, respecte chemins | Event `DIRECTOR_NPC_MOVE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Portrait tête (cadre rond/carré) |
| Couleur dominante | Dépend skins équipés |
| Variantes | `avatar_frame_round.png`, `avatar_frame_square.png` |
| États | Badge niveau, badge humeur (🙂/😟) via icônes, pas demoji dans UI final (icônes). |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir profil | Action | - | Clic avatar HUD | ouvre panneau profil | - |
| Ouvrir inventaire skins | Action | - | Profil → onglet Skins | liste + preview | `NO_SKIN_OWNED` (info) |
| Équiper skin | Action | skin possédé | Clic skin → “Équiper” | update `equipped_skins` | `SKIN_LOCKED` |
| Changer genre | Action | - | Profil → genre | update `gender` | - |
| Inspecter NPC | Consultation | NPC visible | Clic base sprite NPC | mini panel | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `avatar_id` | string/uuid | `player_12345` | DB | unique |
| `gender` | enum | `male|female` | DB | modifiable |
| `level` | int | 12 | DB | monotone |
| `experience` | int | 4500 | DB | 0..∞ |
| `next_level_xp` | int | 5000 | config | recalcul |
| `title` | string | `Expert Zoologist` | DB | liste débloquée |
| `equipped_skins.head/body/accessory` | string | `skin_hat_safari` | DB | doit être possédé |
| `unlocked_titles` | string[] | - | DB | append-only |
| `mood_state` | enum | `happy|neutral|worried` | runtime | mapping événements |
| `director_npc` | object | - | runtime | si feature active |
| `grid` | object | `{x,y}` | runtime | NPC |
| `iso_x/iso_y` | int | - | rendu | NPC |
| `z_index` | int | - | rendu | NPC |
| `hitbox` | enum | `base_sprite` | rendu | NPC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Genre | male/female | enum | choix initial |
| Niveau | 1 | level | départ |
| Mood | neutral | enum | départ |
| Slots skins | 3 | slots | head/body/accessory |
| NPC directeur | actif | bool | si feature |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| XP | 0 | 0..∞ | progression |
| Prestige (titre) | 0 | 0..∞ | cosmétiques |
| Incidents vus (NPC) | 0 | 0..∞ | debug IA |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | création compte | pseudo | avatar | persisté |
| Session | login | state | render | HUD constant |
| Level-up | XP seuil | xp | level+1 | animation |
| Disparition | suppression compte | - | supprimé | - |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte créé | true | est | avatar créé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte supprimé | true | est | supprimé |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Skins équipés | Oui | persiste |
| Titres | Oui | persiste |
| Mood | Non | recalcul à louverture session |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Canicule | mood plus “worried” | si incidents chaleur |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Chemins | NPC préfère | pathing |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | tenue “hiver” (si skin) | visuel option |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | NPC plus lent / rentre | zoo fermé |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet | Condition |
|---|---|---|
| Mood “happy” | aucun direct | UI seulement |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Mort animal | mood worried | événement mort |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | avatar ne consomme pas |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Effet | Condition |
|---|---|---|
| Avatar soigné (skins VIP) | perception + | cosmétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| NPC inspecte | stress +/- | si sapproche |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Skins rares | valeur compte + | cosmétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat skins | variable | coins | boutique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | avatar indirect |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `PLAYER_LEVEL_UP` | xp seuil | level | anim |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `DIRECTOR_NPC_MOVE` | tick | déplacement |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `AVATAR_MOOD_CHANGED` | incidents | expression |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `SHOW_PLAYER_AVATAR` | visite/classement | portrait |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `VISITOR_SEE_OWNER` | proximité NPC | réaction |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `AVATAR_EQUIP` | equip | update |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | avatar base | 3 slots |
| 2 | 0 | titres | badges |
| 3 | 1000 | emotes | mood FX |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeMoodState` | incidents/survie | mood_state | mapping |
| `renderAvatarHud` | avatar | DOM | - |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SKIN_LOCKED` | Warning | "Skin non débloqué." | equip fail |
| `PLAYER_LEVEL_UP` | Info | "Niveau supérieur !" | level up |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Accéder skins | personnaliser | navigation | clic avatar → onglet skins direct |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| HUD avatar | portrait + badge | hover |
| Panel skins | grille + preview | equip |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | coin sup | fixe |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Inventaire skins | items | cf. `inventaire_skins.md` |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir profil | clic | panel |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_PROFILE` | clic avatar | panel |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ui_profile_loop.mp3` | panel | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_open.mp3` | open | faible |
| `equip_click.mp3` | equip | faible |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `avatar_portrait.png` | HUD | - |
| `director_sprite_[dir].png` | NPC | 4 dirs |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `icon_gender_male.png` | switch |
| `icon_gender_female.png` | switch |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `level_up.webm` | level up | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| blink | idle | loop |
| smile/frown | mood change | 0.6s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `avatar_frame` | #FFFFFF | cadre |
| `avatar_badge` | #FFD700 | niveau |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `profile.open` | Profil | Profile |
| `skins.open` | Skins | Skins |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Avatar HUD | cercle | accessible |
| Boutons onglets | pills | lisible |

View File

@@ -0,0 +1,57 @@
# Banderole Accueil
## 1. Définition
Élément visuel marquant l'entrée principale du zoo. C'est une grande enseigne suspendue entre deux poteaux en bois (ou autre matériau selon le thème), affichant le nom du zoo choisi par le joueur.
## 2. Fonctions
* **Identité :** Affiche fièrement le nom du parc ("Zoo de Léo", "Safari Park", etc.).
* **Accueil :** Premier élément visible par les visiteurs (et le joueur).
* **Personnalisation :** Le texte est modifiable à tout moment (ou presque).
## 3. Icone
* **Représentation :** Arche avec un panneau.
* **Couleur dominante :** Bois et Texte coloré.
## 4. Interactions
* **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 avec cooldown).
## 5. Annexes Techniques
### Données (JSON)
```json
{
"banner_id": "main_entrance_banner",
"text": "Mon Super Zoo",
"font_style": "default", // "comic", "serif", "safari"
"font_color": "#FF5733",
"material": "wood", // "stone", "metal" (skins possibles)
"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
* **Longueur Max :** Le nom est limité en caractères (ex: 20 chars) pour tenir sur l'affichage.
* **Filtre :** Interdiction des mots offensants (profanity filter).
* **Cooldown :** Changement de nom gratuit 1x/semaine, sinon payant (Gemmes/Pièces).
## 6. Annexes UX/UI
* **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.
* **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

@@ -73,7 +73,7 @@ Voir `animal_generique.md`.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A (Un bébé ne se reproduit pas).
**Stérilité temporaire** : Un bébé ne peut pas se reproduire (Logique biologique).
### Impact Mort
| Événement | Effet Satisfaction |
@@ -96,26 +96,32 @@ N/A (Un bébé ne se reproduit pas).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Vitesse Croissance** : 1% toutes les 30 secondes (rapide) à 1h (lent) selon Rareté.
### Dépenses (Boutiques/Visiteurs)
N/A
**Soins Vétérinaires** : Coût x2 si malade (Fragilité pédiatrique).
### Trajet Visiteurs
N/A
**Aimant** : Priorité absolue pour les visiteurs si le bébé est visible (hors nurserie).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Croissance** : Passage à l'âge adulte (Notification).
* **Besoin Soin** : Alerte plus fréquente.
* **Premiers Pas** : Petit event mignon (+Satisfaction).
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Stades biologiques naturels.*
| Stade | Nom | Effet |
| :--- | :--- | :--- |
| 0-30% | Nouveau-né | Fragilité Max, Dort beaucoup. |
| 30-70% | Jeune | Commence à marcher, Joue. |
| 70-100% | Adolescent | Mange comme un adulte, Moins fragile. |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
```javascript
function updateBaby(baby, context):
# Fragilité accrue
damageMultiplier = 2.0
@@ -137,25 +143,34 @@ function updateBaby(baby, context):
# 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)
### Croissance en Nurserie (Passif)
**Description UX** : Le bébé est visible dans son slot de nurserie. Il grandit visuellement (petite jauge).
**Description UI** : Sprite "Bébé" (tête disproportionnée, grands yeux). Jauge de croissance.
**Emplacement** : Modal Nurserie.
**Intégration** : Slot.
**Navigation** : N/A
**Navigation** : Clic Slot Nurserie (Zoom).
**Événements** : `BABY_GROWING`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Berceuse (Boîte à musique, boucle 30s).
- **Sons** : Petits bruits aigus.
- **Graphiques** : Sprite Bébé.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Photo "Échographie" (si œuf).
- **Vidéos** : Cinématique éclosion (optionnel).
- **Animations** : Respiration (Scale up/down léger).
- **Couleurs** : N/A
- **Couleurs** : Tons pastels.
- **Textes** : "Bébé [Espèce]".
- **Formes** : N/A
- **Formes** : Bulle de protection autour du bébé.
### Sortie Prématurée (Action)
**Description UX** : Le joueur décide de placer le bébé dans le zoo avant l'âge adulte (risqué).
@@ -166,22 +181,22 @@ function updateBaby(baby, context):
**Événements** : `PLACE_BABY`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Alerte "Danger" (rythme rapide).
- **Sons** : `warning_beep.mp3`.
- **Graphiques** : Icône Danger.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : Fond d'écran rouge clignotant (léger).
- **Vidéos** : Effet de tremblement rouge sur le sprite.
- **Animations** : Tremblement de l'interface.
- **Couleurs** : Rouge.
- **Textes** : "Risque de mort élevé !".
- **Formes** : N/A
- **Formes** : Triangle d'avertissement.
### Passage Adulte (Événement)
**Description UX** : Le bébé atteint 100% de croissance. Il se transforme en adulte.
**Description UI** : Flash lumineux. Le sprite change. Notification "Adulte !".
**Emplacement** : Nurserie ou Zoo.
**Intégration** : Immédiat.
**Navigation** : N/A
**Navigation** : Auto (Cutscene).
**Événements** : `BECOME_ADULT`.
#### Assets
@@ -189,8 +204,526 @@ function updateBaby(baby, context):
- **Sons** : `level_up.mp3`.
- **Graphiques** : Particules brillantes.
- **Images** : Sprite Adulte.
- **Vidéos** : N/A
- **Vidéos** : Effet de morphing (shader).
- **Animations** : Morphing ou Fade cross.
- **Couleurs** : Blanc/Or.
- **Textes** : "Adulte".
- **Formes** : N/A
- **Formes** : Rayons de lumière.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Instance danimal au stade “bébé” (post-éclosion), avec progression de croissance vers ladulte. |
| Rôle | Introduire une phase de fragilité et de soins, visible en nurserie et/ou sur le zoo, avec effets dattractivité “mignon” et contraintes biologiques (non reproductible). |
| Portée | Une entité `Animal` (référence `animal_id`) au sein dun zoo, potentiellement rattachée à une `nurserie_id`. |
| Contrainte | Calculs dérivés (croissance, fragilité, dégâts) à la volée, sans cache/mémorisation ; pas de fallback silencieux en cas détat incohérent (log + erreur). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Créer bébé | éclosion / naissance | `parents_ids?`, `species_id`, `genetics` | entité animal `is_baby=true` | Création atomique ; init `growth_progress=0` | Event `BABY_CREATED` |
| Assigner à une nurserie | placement automatique ou choix joueur | `animal_id`, `nurserie_id`, `slot_id` | bébé visible en slot | Un bébé peut être en nurserie ou sur grille, pas les deux | Event `BABY_ASSIGNED_NURSERY` |
| Progresser croissance | tick logique (lazy) | temps, conditions | `growth_progress` ↑ | Vitesse dépend de rareté + niveau nurserie ; clamp 0..100 | Event `BABY_GROWTH_UPDATED` |
| Appliquer fragilité | calcul impacts | température, faim, stress | santé ↓ | Multiplicateur fragilité > adulte ; pas dexception au biome/temp extrêmes | Event `BABY_FRAGILITY_APPLIED` |
| Interdire reproduction | tentative accouplement | `animal_id` | refus | Toujours refus tant que `is_baby=true` | Event `BABY_REPRO_BLOCKED` |
| Transformer en adulte | `growth_progress>=100` | `animal_id` | `is_baby=false` | Transition irréversible ; conserve identité + génétique | Event `BABY_BECAME_ADULT` |
| Mettre en vente (bébé) | action joueur | `animal_id`, type vente | listing créé | Vente possible si pas “en danger critique” | Event `BABY_LISTED_FOR_SALE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Sprite “bébé” (tête plus grande), badge “B” sur coin UI |
| Couleur dominante | Pastel (bleu/rose selon thème), outline blanc au survol |
| Variantes | `animal_baby_<species>_dir_{N,E,S,W}.png` |
| États | `calme`, `affamé`, `froid/chaud`, `malade`, `en_croissance` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir fiche bébé | Consultation | bébé visible (nurserie ou zoo) | clic sprite/base → panneau | stats + actions | - |
| Nourrir bébé | Action | nourriture dispo | clic “Nourrir” | faim ↓, santé stable | `NO_FOOD`, `BABY_CRITICAL` |
| Soigner bébé | Action | employé/soigneur dispo | clic “Soigner” | maladie ↓ | `NO_STAFF`, `NETWORK_ERROR` |
| Sortie prématurée | Action | bébé en nurserie | drag vers case → confirm | bébé sur grille | `PLACEMENT_INVALID`, `BABY_TOO_FRAGILE` |
| Mettre en vente | Action | bébé stable | “Vendre” → choisir mode | listing créé | `BABY_CRITICAL` |
## Personnages contextuels (événements & interaction)
- **Nurse (nurserie)** : voir `nurse.md` (triage, urgences, éclosion).
- **Soigneur** : voir `soigneur.md` (soins santé, maladies, stabilisation globale).
### Affichage
La nurse est le personnage contextuel principal des actions “bébé” (éclosion, sortie prématurée, danger). Le soigneur est affiché lors des événements de santé (maladie, traitement, surcharge).
### Déclencheurs (exemples)
| Event | Condition | Personnage | Effet UI |
|---|---|---|---|
| `BABY_CREATED` | naissance/éclosion | nurse | bulle “Bébé né” + CTA “Voir” |
| `BABY_CRITICAL` | danger critique | nurse | bulle “Urgence” + CTA “Soigner / Voir” |
| `ANIMAL_SICK` (bébé) | état maladie | soigneur | bulle “Maladie détectée” + CTA “Appeler soigneur” |
| `ANIMAL_HEALED` (bébé) | fin soin | soigneur | message fin intervention |
### Skins & thèmes
Rendu des personnages : `theme.md` + skins via `inventaire_skins.md` (si skins de staff).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `animal_id` | uuid_v4 | `uuid_v4` | DB | identifiant stable |
| `species_id` | string | `PANDA` | DB | enum espèces |
| `is_baby` | boolean | true | DB | vrai jusquà transition adulte |
| `growth_progress` | float | 42.5 | calcul/DB | clamp 0..100 |
| `growth_stage` | string | `juvenile` | calcul | dérivé de `growth_progress` |
| `nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | null si sur grille |
| `position.iso_x` | int \| null | 120 | DB | requis si sur grille |
| `position.iso_y` | int \| null | 88 | DB | requis si sur grille |
| `render.z_index` | int | 12088 | calcul | tri profondeur (iso) |
| `render.hitbox` | string | `base_sprite` | client | clic sur base |
| `health` | float | 100.0 | calcul/DB | 0..100 |
| `hunger` | float | 0.0 | calcul/DB | 0..100 |
| `stress` | float | 0.0 | calcul/DB | 0..100 |
| `timestamps.created_at` | timestamp | - | DB | UTC |
| `timestamps.updated_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Santé | 100.0 | pts | base |
| Faim | 0.0 | pts | augmente plus vite quun adulte |
| Stress | 0.0 | pts | sensible aux écarts |
| Croissance | 0.0 | % | 0..100 |
| Fragilité | 2.0 | multiplicateur | dégâts environnement ×2 |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Attractivité “mignon” | +100% vs adulte | 0..+200% | augmente afflux visiteurs |
| Valeur potentielle | 150% du prix adulte | 50%..200% | décroît avec croissance |
| Malus réputation (mort bébé) | ×2 | ×1..×3 | punit davantage un accident |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Éclosion/Naissance | reproduction ok / timer œuf | genetics, species | bébé créé | `is_baby=true` |
| Croissance | temps + conditions | température, nourriture | `growth_progress` ↑ | monotone |
| Transition adulte | `growth_progress>=100` | animal | adulte | identité conservée |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Reproduction réussie | true | est | spawn bébé |
| Éclosion | timer fini | atteint | spawn bébé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Croissance terminée | 100 | >= | devient adulte |
| Santé critique | 0 | <= | mort |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Génétique | Oui | copie des gènes (voir `animal_generique.md`) |
| Traits esthétiques | Oui | pattern/couleurs, appliqués au sprite bébé |
| Affinités milieu/temp | Oui | modifie fragilité effective |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet bébé | Notes |
|---|---|---|
| \(|\Delta T|\le 1\) | santé \(-2\) / h | fragilité ×2 vs adulte |
| \(|\Delta T|=2\) | santé \(-10\) / h | soins requis rapidement |
| \(|\Delta T|\ge 3\) | santé \(-40\) / h | mort rapide si non corrigé |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet bébé | Notes |
|---|---|---|
| Biome compatible | stress +0 | nominal |
| Biome incompatible | stress +2x | plus fort que ladulte |
#### Impact Saisons (tableau détaillé)
| Saison | Effet bébé | Notes |
|---|---|---|
| Hiver | risque froid ↑ | privilégier nurserie |
| Été | risque chaud ↑ | besoin deau/ombre |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet bébé | Notes |
|---|---|---|
| Nuit | sommeil ↑, faim ↑ | bébé se repose, métabolisme reste rapide |
| Jour | attractivité visiteurs ↑ | “mignon” visible |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Stade bébé | 0 | reproduction interdite |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Mort bébé | malus réputation ×2 | si visiteurs exposés à lévénement |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Nourriture espèce | faim \(-\) plus fréquemment | métabolisme ×1.5 |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Bébé visible | +50% | +2 cases | priorité de visite |
| Bébé en nurserie | +0% sur grille | - | visible uniquement via UI |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Présence bébé | stress \(\pm\) selon espèce | certaines espèces parentales calment, dautres stressent |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Croissance 0..50% | +50% | potentiel maximum |
| Croissance 50..99% | décroissance vers adulte | linéaire |
| Santé < 50 | -30% | vente risquée |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Transport bébé | vitesse \(-20%\) | conduite prudente |
| Contrôle température | stabilité ↑ | camion équipé |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Niveau nurserie | croissance +\(\{0,10,20,30\}%\) | upgrade nurserie |
| Soins assignés | dégâts temp \(-25%\) | soigneur actif |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Check-in bébé | durée +10% | contrôles supplémentaires |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Étude bébé | progrès recherche +5% | si centre recherche dispose dun protocole |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Analyses | durée +15% | prélèvements délicats |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps devant bébé | +20% | “effet mignon” |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Communication “naissance” | 0 | - | événement interne, pas danalytics |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Souvenir “bébé” | +1 | item | si boutique souvenir |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Satisfaction (bonus) | + | points | si bébé visible |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Temps soigneur | +1 | min / tick | bébé fragile |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Slot nurserie | 5 | coins / h | par bébé |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Nourriture bébé | +20% | coins / ration | rations plus fréquentes |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Contrôle santé bébé | 10 | coins | à larrivée |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Caisson temp | 15 | coins | transport bébé |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | annonce naissance (in-game) | afflux modéré |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Enclos bébé | bébé visible | priorité haute |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos bébé | Boutique souvenir | souvenir dispo | achat impulsif |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billetterie | Enclos bébé | visite planifiée | détour direct |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `BABY_CREATED` | éclosion/naissance | `animal_id`, `species_id` | ajoute entité |
| `BABY_GROWTH_UPDATED` | tick lazy | `animal_id`, `growth_progress` | UI jauge |
| `BABY_BECAME_ADULT` | seuil 100 | `animal_id` | swap sprite + stats |
| `BABY_CRITICAL` | santé basse | `animal_id`, raison | alerte |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `BABY_MARKER_SHOW` | map open | badge sur bâtiment nurserie |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `BABY_SELECTED` | clic sprite | ouvre panneau |
| `BABY_MOVED` | placement | maj position iso + z_index |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_ATTRACTED_BY_BABY` | bébé visible | route vers enclos |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_TAKES_PHOTO_BABY` | proche enclos | satisfaction + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_FEEDS_BABY` | action | faim ↓ |
| `PLAYER_LISTS_BABY` | vente | listing |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Nurserie 1 | 0 | croissance nominale | slots base |
| Nurserie 2 | 250 | croissance +10% | slot +1 |
| Nurserie 3 | 750 | dégâts temp -10% | protocole soins |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeBabyGrowth` | baby, now, nurserieLevel | float | clamp 0..100 |
| `computeBabyTempDamage` | deltaT, fragility | float | multiplicateur |
| `canReproduce` | baby | bool | false si `is_baby` |
| `transformToAdult` | baby | adult | conserve ID + génétique |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `BABY_GROWING` | Info | "Croissance en cours." | bébé actif |
| `BABY_BECAME_ADULT` | Info | "Un bébé est devenu adulte." | transition |
| `BABY_CRITICAL` | Critique | "Un bébé est en danger critique." | santé basse |
| `BABY_TOO_FRAGILE` | Warning | "Bébé trop fragile pour sortir." | sortie prématurée |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Consulter bébé | suivre croissance | trouver slot | notif deep-link vers slot |
| Nourrir | éviter danger | action répétée | bouton direct dans panneau sélection |
| Sortir prématurément | placer sur grille | validation risque | une seule modale de confirmation |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Slot nurserie | sprite + jauge | normal/critique |
| Panneau bébé | santé, faim, croissance | actions activées/désactivées |
| Badge “B” | état bébé | visible sur sprite et liste |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Nurserie | slots | vue principale |
| Zoo | sur case (iso) | clic sur base |
| Notifications | top UI | deep-link |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `nurserie.md` | slots + jauge | croissance |
| `animal_generique.md` | base stats | mêmes champs + `is_baby` |
| `vente_*` | vente bébé | règles “pas critique” |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir bébé (nurserie) | notif → nurserie → slot | panneau ouvert |
| Ouvrir bébé (zoo) | clic sprite/base | panneau |
| Nourrir | panneau → bouton | action appliquée |
| Sortir prématurément | drag → modale → drop | bébé placé |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_BABY_PANEL` | clic | ouvre panneau |
| `CLICK_FEED_BABY` | bouton | action |
| `CONFIRM_PLACE_BABY` | modale | place |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `nursery_lullaby_loop.mp3` | nurserie | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `baby_chirp_01.mp3` | idle bébé | bas |
| `ui_warning_beep.mp3` | critique | moyen |
| `ui_level_up.mp3` | transition adulte | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `baby_outline_hover.png` | survol | overlay iso |
| `baby_growth_bar.png` | jauge | lisible petit |
| `baby_warning_icon.png` | critique | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `nursery_slot_frame.png` | slot |
| `baby_card_bg.png` | panneau |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `baby_hatch.webm` | éclosion | 2.0s |
| `baby_morph_to_adult.webm` | transition | 1.2s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| respiration légère | idle | 1.5s loop |
| tremblement | critique | 0.4s |
| flash + particules | adulte | 0.8s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `baby_pastel_blue` | #A7D8FF | nurserie |
| `baby_pastel_pink` | #FFB3D9 | accents |
| `baby_warning_red` | #D32F2F | critique |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `baby.title` | Bébé | Baby |
| `baby.feed` | Nourrir | Feed |
| `baby.heal` | Soigner | Heal |
| `baby.too_fragile` | Bébé trop fragile. | Baby too fragile. |
| `baby.became_adult` | Devenu adulte. | Became adult. |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Jauge croissance | rectangle arrondi | compacte |
| Badge “B” | pastille ronde | lisible |
| Alerte critique | triangle | contraste élevé |

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" },
"stats": {
"total_entries": "integer",
"daily_revenue": "integer"
}
"daily_revenue": "integer",
"current_queue_length": "integer"
},
"entry_log": [
{ "timestamp": "timestamp", "visitor_count": 5, "revenue": 50 }
],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -36,66 +43,6 @@ Bâtiment d'entrée du zoo. Point d'apparition et de départ des visiteurs.
| Prix Ticket | 10 pièces |
| Capacité Max | 20 visiteurs |
### Scores Initiaux
N/A
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Présent au démarrage (Unique).
### Conditions de Disparition
Indestructible.
### Hérédité
N/A
## 3. Impacts Environnementaux
### Impact Température
N/A
### Impact Milieu (Biome)
N/A
### Impact Saisons
| Saison | Modificateur Prix Ticket |
| :--- | :--- |
| Été | +20% (Haute saison) |
| Hiver | -10% (Basse saison) |
### Impact Heure / Jour-Nuit
**Ouverture** : 08h00 - 20h00. Fermé la nuit (sauf événements).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
### Impact Mort
N/A
### Impact Nourriture
N/A
### 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
N/A
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Flux Entrée** : 1 visiteur / seconde max.
### Dépenses (Boutiques/Visiteurs)
Revenu principal (Ticket).
### Trajet Visiteurs
Point de départ (Spawn) et d'arrivée (Despawn).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Entrée** : Gain pièces.
* **Refoulement** : Si Capacité Max atteinte.
## 7. Progression
### Tableau des Upgrades
| Niveau | Coût (Pièces) | Prix Ticket | Capacité Max | Temps Construction |
@@ -110,82 +57,564 @@ Point de départ (Spawn) et d'arrivée (Despawn).
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
function processEntry(zoo):
potentialVisitors = calculateAttractionFlow(zoo)
```python
def process_entry(zoo):
potential_visitors = calculate_attraction_flow(zoo)
if zoo.currentVisitors >= zoo.billeterie.capacity:
emitEvent("ZOO_FULL")
return
# Gestion de la file d'attente
zoo.billeterie.current_queue_length += potential_visitors
actualVisitors = min(potentialVisitors, zoo.billeterie.capacity - zoo.currentVisitors)
# Traitement des entrées (limité par la vitesse du guichet)
entries_per_tick = get_entry_speed(zoo.billeterie.level)
actual_entries = min(zoo.billeterie.current_queue_length, entries_per_tick)
for i in 0..actualVisitors:
spawnVisitor()
player.addCoins(zoo.billeterie.ticketPrice)
# 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
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ZOO_FULL` | Alerte | "Le zoo est complet ! Agrandissez la billeterie." |
| `VIP_BUS` | Info | "Un bus de touristes arrive !" |
| `QUEUE_LONG` | Warning | "La file d'attente est trop longue, des visiteurs partent !" |
# 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)
### Consultation
**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.
**Emplacement** : Case Billeterie sur la grille du zoo.
**Intégration** : Bâtiment fixe (ne peut pas être déplacé ou supprimé).
**Navigation** : Clic -> Ouverture Panneau -> Fermeture (Croix ou clic extérieur).
**Intégration** : Bâtiment fixe.
**Navigation** : Clic -> Ouverture Panneau -> Fermeture.
**Événements** : `CLICK_BILLETERIE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Ambiance "Hall de Gare" (brouhaha léger).
- **Sons** : `ui_open.mp3`
- **Graphiques** : Pixel Art, style guichet.
- **Images** : `billeterie_lvl[1-7].png`
- **Vidéos** : N/A
- **Vidéos** : Flux vidéo surveillance (fictif, décoratif).
- **Animations** : Légère surbrillance au survol.
- **Couleurs** : Palette UI standard.
- **Textes** : "Billeterie", "Niveau X", "Revenus : Y".
- **Formes** : Carré (case).
### Amélioration (Upgrade)
**Description UX** : Le joueur décide d'améliorer la billeterie pour augmenter la capacité et le prix du ticket.
**Description UI** : Bouton "Améliorer" dans le panneau de consultation, avec coût et prévisualisation des gains.
**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`.
### Vue Isométrique
- **File d'attente** : Afficher physiquement les sprites des visiteurs qui attendent devant le guichet.
- **Portiques** : Animation d'ouverture/fermeture des barrières.
#### Assets
- **Musiques** : N/A
- **Sons** : `upgrade_success.mp3` (caisse enregistreuse).
- **Graphiques** : Icône flèche vers le haut.
- **Images** : N/A
- **Vidéos** : N/A
- **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.
## Personnage contextuel (événements & interaction)
Voir `guichetiere.md`.
### 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** : N/A
**Événements** : `VISITOR_SPAWN`.
### Affichage
La guichetière saffiche lorsque :
- la billetterie est **actionnée** (clic panneau, upgrade, consultation stats) ;
- un **événement** dentrée survient (saturation, file longue, arrivée VIP).
#### Assets
- **Musiques** : N/A
- **Sons** : `visitor_entry.mp3` (bruit de foule léger, pas à chaque spawn).
- **Graphiques** : Sprites visiteurs variés.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Marche (4 directions).
- **Couleurs** : Variées (vêtements).
- **Textes** : N/A
- **Formes** : N/A
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `CLICK_BILLETERIE` | clic bâtiment | portrait + synthèse (prix, capacité, file) |
| `ZOO_FULL` | capacité atteinte | bulle “Zoo complet” + CTA “Améliorer billetterie” |
| `QUEUE_LONG` | file > seuil | bulle “File longue” + CTA “Voir billetterie” |
| `VIP_BUS` | arrivée VIP | bulle “Bus VIP” + CTA “Voir entrée” |
### Skins & thèmes
Uniforme et guichet suivent `theme.md` ; variantes éventuelles via `inventaire_skins.md`.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “billeterie” : point unique dentrée/sortie des visiteurs et point de monétisation “tickets”. |
| Rôle | Transformer lattractivité (ville → zoo) en entrées contrôlées (capacité/queue) et en revenus (prix ticket), avec signaux visibles (file, portiques, saturation). |
| Portée | Une instance fixe sur la carte zoo, connectée au réseau de chemins, agissant comme spawn/despawn visiteurs. |
| Contrainte | Aucun tracking externe/analytics ; flux et revenus calculés à la volée (lazy update), sans cache/mémorisation ; saturation doit produire message + event (pas silencieux). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir panneau billeterie | clic bâtiment | `ticket_booth_id` | UI stats | montre prix/capacité/queue/revenus jour | Event `CLICK_BILLETERIE` |
| Calculer demandes dentrée | tick logique | attractivité, villes, saison | `potential_visitors` | dépend distance ville + attractivité zoo | Event `VISITOR_DEMAND_COMPUTED` |
| Alimenter file | tick logique | `potential_visitors` | `current_queue_length` | clamp ≥ 0 | Event `QUEUE_UPDATED` |
| Convertir file en entrées | tick logique | level, queue | `actual_entries` | limité par vitesse guichet et capacité zoo | Event `VISITOR_ENTERED` |
| Encaisser ticket | entrée | ticket_price | coins + | atomicité par visiteur entré | Event `TICKET_SOLD` |
| Bloquer si zoo complet | capacité atteinte | `current_visitors` | entrée 0 | déclenche alerte + évaporation file (visiteurs partent) | Event `ZOO_FULL` |
| Gérer bus VIP | event | multiplicateur | pic entrées | bus si condition (réputation/ville riche) | Event `VIP_BUS` |
| Mesurer impatience | queue longue | temps attente | départs | si attente > seuil, départs + malus réputation léger | Event `QUEUE_LONG` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Guichet + ticket + portique |
| Couleur dominante | Bleu/rouge (signalétique), or (coins) |
| Variantes | `billeterie_lvl_{1..7}_dir_{N,E,S,W}.png`, `icon_ticket_booth.png` |
| États | `open`, `busy` (queue), `full` (zoo complet), `vip_bus` (arrivée) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Consulter stats | Consultation | - | clic billeterie | panneau stats | - |
| Upgrader | Action | coins ok | panneau → “Améliorer” | level +1 | `NOT_ENOUGH_COINS` |
| Voir file | Consultation | file > 0 | survol bâtiment | tooltip “X en attente” | - |
| Aller à la saturation | Navigation | `ZOO_FULL` | clic notif | focus billeterie | - |
| Forcer fermeture | Action (option future) | mode maintenance | toggle | entrées stoppées | `MAINTENANCE_REQUIRED` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `ticket_booth` | DB | constant |
| `level` | int | 3 | DB | 1..7 |
| `position.x` | int | 1 | DB | grid |
| `position.y` | int | 1 | DB | grid |
| `stats.total_entries` | int | 1280 | DB | cumul |
| `stats.daily_revenue` | int | 420 | DB | reset journalier in-game |
| `stats.current_queue_length` | int | 18 | DB/calcul | clamp ≥ 0 |
| `entry_log[].timestamp` | timestamp | - | DB | UTC |
| `entry_log[].visitor_count` | int | 5 | DB | batch |
| `entry_log[].revenue` | int | 50 | DB | batch |
| `iso_x` | int | 120 | DB/calcul | rendu |
| `iso_y` | int | 88 | DB/calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Prix ticket (lvl1) | 10 | coins | base |
| Capacité max (lvl1) | 20 | visiteurs | base |
| Vitesse guichet (lvl1) | 2 | visiteurs/tick | file |
| Seuil queue longue | 25 | visiteurs | message + départs |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Satisfaction dentrée | 50 | 0..100 | queue longue la baisse |
| Taux départ file | 0% | 0..100% | impatience |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | création zoo | - | bâtiment présent | fixe |
| Fonctionnement | zoo ouvert | attractivité | entrées | capacité respectée |
| Saturation | zoo plein | - | entrées stoppées | alerte obligatoire |
| Upgrade | action joueur | coins | level ↑ | monotone |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo créé | true | est | billeterie placée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | bâtiment persistant |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Niveau | Oui | persiste |
| Statistiques | Oui | logs conservés, pas danalytics |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet billeterie | Notes |
|---|---|---|
| Canicule | flux -10% | visiteurs évitent attente au soleil |
| Froid extrême | flux -15% | sortie plus rapide |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Proche océan (frais) | impatience - | queue tolérée |
| Boue autour entrée | impatience + | pénalise |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Été | demande +20% | vacances |
| Hiver | demande -30% | froid |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Matin | pics dentrée | 9h-12h |
| Soir | pics de sortie | 17h-19h |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bébés visibles | satisfaction entrée +5 | marketing “naissances” |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Incident visible à lentrée | flux -40% | pendant 1 jour in-game |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stand boisson proche | impatience - | file longue |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Entrée fluide | +5 | 8 cases | file courte |
| File longue | -10 | 8 cases | visiteurs partent |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Foule bruyante | stress + | enclos proche entrée |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Upgrade billeterie | + | valeur zoo | capacité |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Bus VIP | entrées batch | event `VIP_BUS` |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Naissances annoncées | demande + | saison |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Nouveaux animaux placés près entrée | intérêt + | visiteurs |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Marketing recherche | demande + | upgrade futur |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offre rare | pics | annonce |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Portiques auto | entrées/tick + | level élevé |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Impression tickets | 100 | $/semaine | lore |
| Maintenance portiques | 20 | coins/semaine | level ≥ 3 |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Signalétique | 10 | coins/semaine | esthétique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Perte opportunité | ticket non vendu | coins | queue trop longue |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Agent accueil | 1500 | $/mois | lore |
#### 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 |
|---|---:|---|---|
| Vitrine bébés | 50 | coins/semaine | option |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Eau file dattente | 5 | coins/jour | été |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Signal “nouvel animal” | 5 | coins | panneau |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Bus touristes | 25 | coins/event | `VIP_BUS` |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Billeterie | demande calculée | spawn file |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Enclos | plan visite | route via chemins |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | faim/soif | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Billeterie | fin visite | sortie |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `TICKET_SOLD` | entrée | price | coins + |
| `ZOO_FULL` | capacité | current/max | stop entrées |
| `QUEUE_LONG` | queue > seuil | length | départs + |
| `VIP_BUS` | event | count | entrées batch |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOCUS_TICKET_BOOTH` | clic notif | caméra |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SPAWNED_AT_ENTRY` | entrée | spawn point |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | demande |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_LEAVES_QUEUE` | impatience | départ |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_TICKET_BOOTH` | UI | stats maj |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 3 | 400 | portiques visibles + vitesse guichet | anim porte |
| 5 | 1600 | file plus courte (vitesse) | satisfaction + |
| 7 | 6400 | capacité 300 + prix 35 | “grand hall” |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getEntrySpeed` | level | int | visiteurs/tick |
| `computePotentialVisitors` | zoo, villes, saison | int | à la volée |
| `processEntry` | zoo, booth | int | encaisse + spawn |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZOO_FULL` | Alerte | "Le zoo est complet." | capacité atteinte |
| `QUEUE_LONG` | Warning | "La file d'attente est trop longue." | queue > seuil |
| `VIP_BUS` | Info | "Un bus de touristes arrive." | event |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir revenus | décider upgrade | stats dispersées | panneau unique billeterie |
| Réagir à saturation | éviter pertes | notif | clic notif → focus |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panneau billeterie | prix/capacité/revenus | normal/full |
| File visuelle | sprites visiteurs | courte/longue |
| Badge bus VIP | icône bus | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | entrée | file visible |
| HUD | compteur coins | feedback pièces |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | spawn/despawn | flux |
| `ville.md` | demande | distance |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir stats | clic bâtiment | panneau |
| Upgrader | panneau → bouton | level ↑ |
| Focus | clic notif | caméra |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `CLICK_BILLETERIE` | clic | ouvre |
| `CLICK_UPGRADE_TICKET_BOOTH` | bouton | upgrade |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ticket_booth_crowd_loop.mp3` | proximité entrée | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `gate_open.mp3` | portiques | bas |
| `coin_jingle.mp3` | ticket vendu | bas |
| `ui_denied.mp3` | zoo plein | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `ticket_booth_ui_panel.png` | panneau | scalable |
| `queue_indicator.png` | badge | lisible |
| `vip_bus_icon.png` | bus | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `billeterie_lvl1.png` | bâtiment |
| `billeterie_lvl7.png` | bâtiment |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `ticket_gate_cycle.webm` | portiques | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièces qui volent | ticket vendu | 0.6s |
| bounce badge | queue longue | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `ticket_blue` | #1976D2 | signalétique |
| `ticket_gold` | #D4AF37 | revenus |
| `ticket_alert_red` | #D32F2F | saturation |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `ticket_booth.title` | Billeterie | Ticket booth |
| `ticket_booth.capacity` | Capacité | Capacity |
| `ticket_booth.queue_long` | File trop longue. | Queue too long. |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Panneau | rectangle arrondi | lisible |
| Badge | rond | constant |

View File

@@ -33,15 +33,26 @@ Sélection hiérarchique : **Famille** > **Spécialisation**.
"sell_animal_threshold": "float (price factor)",
"expand_map_priority": "int (0-10)",
"research_priority": "int (0-10)"
}
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A
| Caractéristique | Valeur Initiale | Type | Description |
|---|---:|---|---|
| Fréquence min | 5 | minutes | Intervalle minimal entre actions. |
| Fréquence max | 60 | minutes | Intervalle maximal (profil lent). |
| Budget action | 10% | % coins | Part des coins max utilisable par action (plafond anti-ruine). |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Agressivité marché | 50 | 0-100 | Propension à acheter/vendre. |
| Prudence survie | 50 | 0-100 | Propension à acheter nourriture/soins. |
| Priorité expansion | 20 | 0-100 | Propension à agrandir carte/améliorer bâtiments. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -51,46 +62,72 @@ Activation par joueur (déconnexion) ou Spawn serveur (Bot permanent).
Connexion joueur.
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Profil choisi | Paramètres logique | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Condition | Effet |
|---|---|
| Froid/Chaud extrême | Augmente achats régulation/biome | priorité survie + |
### Impact Milieu (Biome)
N/A
| Biome | Effet |
|---|---|
| Biome défavorable à la majorité | Achats “changement milieu” | priorité survie + |
### Impact Saisons
N/A
| Saison | Effet | Modificateur |
|---|---|---|
| Printemps | Focus reproduction | priorité éleveur + |
| Hiver | Focus survie | priorité conservateur + |
### Impact Heure / Jour-Nuit
N/A
| Période | Effet |
|---|---|
| Nuit | Actions limitées | fréquence + lente |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Score survie élevé | Bot tente reproduction | profil éleveur |
### Impact Mort
N/A
| Cause | Conséquence | Durée |
|---|---|---|
| Série de morts | Bot achète nourriture/soins | 24h |
### Impact Nourriture
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Stock bas | Achat immédiat | seuil profil |
### Impact Attractivité (Visiteurs/Animaux)
N/A
| Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Placements optimisés | + | zoo du bot |
### Impact Valeur
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Profil commerçant | Valeur cash + | ventes fréquentes |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Fréquence Action** : 1 action toutes les 5 à 60 minutes (selon profil).
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achats auto nourriture | variable | coins | selon seuil |
| Achat upgrades | variable | coins | selon priorité |
### Trajet Visiteurs
N/A
| Trajet | Règle | Notes |
|---|---|---|
| Rapport dabsence → décisions | Script profilé | Le bot ne “se déplace” pas : il calcule des actions sur létat du zoo et sur le marché. |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -98,7 +135,10 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Profil basique |
| 2 | 5000 | Réputation 300 | Stratégies avancées (arbitrage) |
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -122,6 +162,15 @@ function runBotLogic(bot, zoo):
# 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)
### Sélection du Profil (Configuration)
**Description UX** : Le joueur choisit comment son zoo sera géré en son absence.
@@ -132,11 +181,11 @@ function runBotLogic(bot, zoo):
**Événements** : `SELECT_BOT_PROFILE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_bot_family_pick.mp3` (jingle court).
- **Sons** : `card_flip.mp3`.
- **Graphiques** : Illustrations des familles (ex: Conservateur avec bouclier, Commerçant avec bourse).
- **Images** : Portraits Bots.
- **Vidéos** : N/A
- **Vidéos** : `bot_family_cards.webm` (1s loop, optionnel).
- **Animations** : Flip de carte au choix.
- **Couleurs** : Code couleur par famille (Vert=Conservateur, Jaune=Commerçant, etc.).
- **Textes** : Titres et Descriptions courtes.
@@ -149,14 +198,13 @@ function runBotLogic(bot, zoo):
**Intégration** : Bloquant au démarrage.
**Navigation** : Lire -> Fermer.
**Événements** : `SHOW_REPORT`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_report_open.mp3` (jingle court).
- **Sons** : `notification.mp3`.
- **Graphiques** : Icône Robot.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : `icon_robot.png`, `report_bg.png`.
- **Vidéos** : `report_scroll.webm` (0.8s loop, optionnel).
- **Animations** : Apparition slide-in + highlight des lignes importantes.
- **Couleurs** : Gris/Métal.
- **Textes** : Liste des actions.
- **Formes** : Liste à puces.

View File

@@ -26,7 +26,10 @@ Bâtiment commercial générant des revenus passifs grâce aux visiteurs.
"stats": {
"revenue_total": "integer",
"visitors_served": "integer"
}
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -38,70 +41,76 @@ Bâtiment commercial générant des revenus passifs grâce aux visiteurs.
| Attractivité | 10 |
### Scores Initiaux
N/A
**Stock** : 100 unités.
**Popularité** : 10/100.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Construction par le joueur sur case vide.
### Conditions de Disparition
Destruction par le joueur (Remboursement partiel ?).
Destruction par le joueur (Remboursement 50%).
### Hérédité
N/A
**Franchise** : Coût construction -10% si 5 boutiques identiques déjà posées (Économie d'échelle).
## 3. Impacts Environnementaux
### Impact Température
N/A
**Canicule** : Vente Eau x3. Vente Chocolat -50%.
**Froid** : Vente Chocolat x3. Vente Glaces -80%.
### Impact Milieu (Biome)
N/A
**Thème** : +10% ventes si le skin boutique correspond au biome (ex: Cabane en bois en Forêt).
### Impact Saisons
| Saison | Modificateur Ventes |
| :--- | :--- |
| Été | +20% (Boissons/Glaces) |
| Hiver | +10% (Chocolat chaud/Cadeaux) |
| Automne | +5% (Parapluies) |
| Printemps | Standard |
### Impact Heure / Jour-Nuit
| Heure | Fréquentation |
| :--- | :--- |
| 12h-14h | Pic (Repas) |
| 16h-18h | Pic (Souvenirs avant départ) |
| 12h-14h | Pic (Repas - Food) |
| 16h-18h | Pic (Souvenirs avant départ - Gifts) |
| Nuit | Fermé (0 Ventes) |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Merchandising** : Vente peluche "Espèce du moment" x2 lors d'une naissance rare.
### Impact Mort
N/A
**Deuil** : Ventes -20% dans les boutiques proches d'une mort récente (Ambiance triste).
### Impact Nourriture
N/A
**Concurrence** : Si Stand Nourriture proche (< 3 cases), ventes Food partagées (-10% chacun).
### Impact Attractivité (Visiteurs/Animaux)
| Niveau | Rayon Attraction |
| :--- | :--- |
| 1 | 2 cases |
| 7 | 10 cases |
| 7 | 10 cases (Centre commercial) |
### Impact Valeur
N/A
**Revente** : 50% de l'investissement initial + upgrades.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Vitesse Service** : 1 visiteur / 5 secondes (Niv 1) -> 1 visiteur / 1 seconde (Niv 7).
**Vitesse Service** : 1 visiteur / 5 secondes (Niv 1) -> 1 visiteur / 1 seconde (Niv 7 - Caisses auto).
### Dépenses (Boutiques/Visiteurs)
Génère du revenu, ne coûte rien (sauf achat/upgrade).
Génère du revenu. Coût réapprovisionnement : 10% du CA (automatique).
### Trajet Visiteurs
Point d'intérêt majeur pour le pathfinding (Poids 50).
Point d'intérêt majeur pour le pathfinding (Poids 50). Arrêt obligatoire si besoin > 80.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Vente** : Gain de pièces.
* **File d'attente** : Si Capacité atteinte, visiteurs frustrés.
* **Rupture Stock** : Si stock géré, fermeture temporaire.
## 7. Progression
### Tableau des Upgrades
@@ -133,28 +142,57 @@ function processShop(shop, visitors):
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `SHOP_FULL` | Warning | "Boutique pleine ! Des clients partent." |
| `SHOP_PROMO` | Info | "Soldes lancées ! Affluence +20%." |
## Personnage contextuel (événements & interaction)
Voir `vendeur.md`.
### Affichage
Le vendeur saffiche lorsque :
- la boutique est **actionnée** (clic panneau stats, upgrade, skin de boutique) ;
- un **événement** de boutique survient (vente, surcharge, promo).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_SHOP` | clic boutique | portrait + stats + CTA |
| `SALE_MADE` | vente | feedback “caisse” + pièce/FX |
| `SHOP_FULL` | capacité atteinte | bulle “Surcharge” + CTA “Améliorer / Ajouter boutique” |
| `SHOP_PROMO` | promo active | bulle “Promo” + détails (si module) |
### Skins & thèmes
Uniforme et comptoir suivent `theme.md`, avec skins de boutique via `inventaire_skins.md`.
# 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)
### Vente (Passif)
**Description UX** : Les visiteurs entrent dans la boutique, y restent quelques secondes, puis ressortent. Des pièces volent vers le compteur.
**Description UI** : Animation de porte qui s'ouvre/ferme. Popups "+15" au-dessus du toit.
**Emplacement** : Case Boutique.
**Intégration** : Automatique.
**Navigation** : N/A
**Navigation** : Auto (Comportement).
**Événements** : `SALE_MADE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Musique d'ambiance "Supermarché" (Muzak).
- **Sons** : `coin_jingle.mp3` (volume bas, pas trop répétitif).
- **Graphiques** : Sprite Boutique (différents skins selon type : Burger, Cadeaux).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icônes Produits (Burger, Peluche, Ballon).
- **Vidéos** : Pub télévisée miniature sur l'écran de la boutique (détail).
- **Animations** : Pièce dorée qui monte et disparaît.
- **Couleurs** : Or #FFD700.
- **Textes** : "+XX".
- **Formes** : N/A
- **Formes** : Bulle de dialogue rectangulaire.
### Consultation Stats (Consultation)
**Description UX** : Le joueur clique pour voir combien la boutique a rapporté.
@@ -165,15 +203,15 @@ function processShop(shop, visitors):
**Événements** : `OPEN_SHOP`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Jingle "Caisse" (court).
- **Sons** : `ui_open.mp3`
- **Graphiques** : N/A
- **Graphiques** : Graphique en barres simple.
- **Images** : Icône Caisse.
- **Vidéos** : N/A
- **Animations** : N/A
- **Couleurs** : N/A
- **Vidéos** : Graphique animé des ventes (barres qui montent).
- **Animations** : Barres qui montent progressivement.
- **Couleurs** : Vert (Profit).
- **Textes** : Chiffres clés.
- **Formes** : N/A
- **Formes** : Rectangle arrondi.
### Construction (Action)
**Description UX** : Le joueur choisit "Boutique" dans le menu construction et la place sur la grille.
@@ -185,12 +223,492 @@ function processShop(shop, visitors):
**Événements** : `BUILD_SHOP`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Bruit de chantier (marteau, scie).
- **Sons** : `construction_hammer.mp3`.
- **Graphiques** : Sprite Fantôme semi-transparent.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Plan bleu (Blueprint) au sol.
- **Vidéos** : Time-lapse construction (accéléré).
- **Animations** : Petit effet de poussière à la pose.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Couleurs** : Bleu (Blueprint).
- **Textes** : "Construction".
- **Formes** : Grille de placement.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “boutique” : point de vente in-zoo (souvenirs/food/boissons) qui convertit les besoins des visiteurs en revenus. |
| Rôle | Augmenter la rétention et la satisfaction via la résolution des besoins (faim/soif/cadeau), et créer des micro-flux (file, service, rupture). |
| Portée | Une instance de bâtiment sur carte zoo, avec paramètres (capacité, vitesse service, catalogue, skin). |
| Contrainte | Pas danalytics ; revenus calculés à la volée à partir des interactions visiteurs ; pas de fallback silencieux (rupture/plein => message + event). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Construire boutique | mode build | coord, type boutique | bâtiment créé | case vide requise | Event `BUILD_SHOP` |
| Ouvrir stats | clic bâtiment | `shop_id` | UI stats | revenus totaux + clients | Event `OPEN_SHOP` |
| Attirer visiteurs | besoin/curiosité | visitor, rayon | target set | poids pathfinding élevé si besoin > seuil | Event `VISITOR_TARGETS_SHOP` |
| Servir visiteur | arrivée en file | visitor, stock | revenue + satisfaction | service limité par capacité + vitesse | Event `SALE_MADE` |
| Gérer file | dépassement capacité | queue length | impatience | si queue > seuil -> départ + malus | Event `SHOP_FULL` |
| Adapter produits au climat | temp/saison | météo, saison | mod ventes | canicule: eau + ; froid: chocolat + | Event `SHOP_DEMAND_MOD_CHANGED` |
| Appliquer skin biome | skin, biome | ids | bonus | +10% ventes si match | Event `SHOP_THEME_MATCH_BONUS` |
| Réapprovisionner | tick économique | CA, ratio | stock + coût | coût = 10% du CA | Event `SHOP_RESTOCKED` |
| Rupture | stock=0 | - | fermeture temporaire | déclenche panneau “Rupture” | Event `SHOP_OUT_OF_STOCK` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Boutique avec enseigne (cadeau/food) |
| Couleur dominante | Or (revenu) + couleur du type (rouge food, bleu boisson) |
| Variantes | `shop_gift_dir_{N,E,S,W}.png`, `shop_food_dir_{N,E,S,W}.png`, `shop_drink_dir_{N,E,S,W}.png` |
| États | `open`, `busy`, `full`, `out_of_stock`, `promo` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Placer boutique | Action | case libre | sélectionner → placer | construction | `CELL_OCCUPIED` |
| Voir revenus | Consultation | boutique posée | clic | panneau stats | - |
| Upgrader | Action | coins ok | panneau → améliorer | level ↑ | `NOT_ENOUGH_COINS` |
| Voir file | Consultation | visiteurs proches | survol | tooltip file | - |
| Activer promo | Action (event) | condition event | clic toggle | affluence + | `PROMO_NOT_AVAILABLE` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `shop` | DB | constant |
| `subtype` | string | `gift` | DB/config | `gift/food/drink` |
| `level` | int | 2 | DB | 1..7 |
| `position.x` | int | 10 | DB | grid |
| `position.y` | int | 12 | DB | grid |
| `stats.revenue_total` | int | 12500 | DB | cumul |
| `stats.visitors_served` | int | 840 | DB | cumul |
| `stock.units` | int | 100 | DB | >=0 |
| `popularity` | int | 10 | calcul/DB | 0..100 |
| `capacity` | int | 5 | config | visitors simultanés |
| `service_seconds_per_visitor` | float | 5.0 | config | 1..10 |
| `attractiveness` | int | 10 | config | poids target |
| `skin_id` | string | `shop_wood_forest` | DB | cosmétique |
| `iso_x` | int | 120 | DB/calcul | rendu |
| `iso_y` | int | 88 | DB/calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Revenu / visiteur | 15 | coins | level 1 |
| Capacité | 5 | visiteurs | level 1 |
| Vitesse service | 5 | s/visiteur | level 1 |
| Rayon attraction | 2 | cases | level 1 |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Stock | 100 | 0..∞ | rupture possible |
| Popularité | 10 | 0..100 | mod conversion |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Construction | joueur | coins + coord | bâtiment | case occupée |
| Service | visiteurs | besoins | revenus | capacité respectée |
| Réappro | tick | CA | stock + | coût 10% CA |
| Rupture | stock=0 | - | fermeture | observable |
| Upgrade | action | coins | level ↑ | monotone |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Construction | true | est | boutique posée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Destruction | true | est | remboursement 50% |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Franchise | Oui | coût -10% si 5 identiques |
| Stats | Oui | cumul |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet boutique | Notes |
|---|---|---|
| > 30°C | eau +200% | canicule |
| < 5°C | chocolat +200% | froid |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| forêt + skin bois | ventes +10% | thème match |
| désert + skin oasis | ventes +10% | thème match |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Été | ventes boisson +20% | règle |
| Hiver | ventes cadeaux +10% | règle |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| 12h-14h | demande food ++ | pic |
| Nuit | fermé | 0 ventes |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Naissance rare | ventes peluche x2 | “espèce du moment” |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Mort récente proche | ventes -20% | ambiance |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Concurrence < 3 cases | ventes food -10% | partage |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Boutique level 7 | + | 10 cases | centre commercial |
| Rupture stock | - | 6 cases | frustration |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Odeurs food | stress + | espèces sensibles |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Revente | 50% + upgrades | destruction |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison stock | stock + | si feature livraison |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Peluches bébé | ventes + | bébés visibles |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Nouvel animal rare | promo | event |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tech caisse auto | service 1s | level 7 |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Produit “science” | panier moyen + | zone labo |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| File dattente | temps boutique + | capacité limitée |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | signalétique (conservée) |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Réappro | 10% CA | coins | automatique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Temps perdu file | satisfaction - | points | queue |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Caissier (lore) | 1800 | $/mois | level < 7 |
#### 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 |
|---|---:|---|---|
| Peluche naissance | 2 | coins | production |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Matières food | 2 | coins/vente | marge |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Cadeau “nouvel arrivant” | 1 | coins | souvenir |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Livraison premium | 5 | coins | option |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | entrée | besoins init 0 |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | faim/soif > 80 | target |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Boutique | Enclos | besoins résolus | continue visite |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Boutique | Sortie | budget 0 | départ |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `SALE_MADE` | service | revenue | coins + |
| `SHOP_FULL` | queue | length | départs |
| `SHOP_OUT_OF_STOCK` | stock | units | fermeture |
| `SHOP_RESTOCKED` | tick | cost | stock + |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOCUS_SHOP` | clic | caméra |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_BUYS_ITEM` | transaction | satisfaction + |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WEATHER_HEATWAVE` | météo | eau ++ |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_LEAVES_SHOP_QUEUE` | impatience | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_SHOP` | UI | params + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 4 | 340 | capacité 18 + service plus rapide | file réduite |
| 7 | 1150 | 50 capacité + caisses auto | 1s/visiteur |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeSeasonDemandMod` | season, temp | float | eau/glaces/chocolat |
| `serveVisitor` | shop, visitor | revenue | résout besoins |
| `restockIfNeeded` | shop, CA | shop | coût 10% CA |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SHOP_FULL` | Warning | "Boutique pleine." | queue > cap |
| `SHOP_OUT_OF_STOCK` | Warning | "Rupture de stock." | stock=0 |
| `SALE_MADE` | Info | "Vente effectuée." | service |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Construire | générer revenus | placement | mode construction direct |
| Lire stats | décider upgrade | menus | clic bâtiment |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Popup coins | +XX | burst | feedback |
| Panneau stats | total + served | open/closed |
| Badge rupture | icône | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | sur case | sélection base sprite |
| HUD | compteur | pièces volantes |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | besoins | faim/soif |
| `chemin.md` | pathfinding | poids boutique |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir stats | clic | panneau |
| Upgrader | panneau → CTA | level ↑ |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SHOP` | clic | panneau |
| `BUILD_SHOP` | build | placement |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `shop_muzak_loop.mp3` | proximité boutique | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `cash_register.mp3` | vente | bas |
| `coin_jingle.mp3` | revenue | bas |
| `ui_open.mp3` | panneau | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `shop_coin_popup.png` | popup | lisible |
| `shop_queue_badge.png` | queue | contraste |
| `shop_out_of_stock_badge.png` | rupture | rouge |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `shop_blueprint.png` | construction |
| `shop_product_icons.png` | UI |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `shop_sales_bars.webm` | stats | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièce monte | vente | 0.6s |
| porte ouvre/ferme | visiteur | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `shop_gold` | #FFD700 | revenus |
| `shop_profit_green` | #2E7D32 | stats |
| `shop_alert_red` | #D32F2F | rupture |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `shop.title` | Boutique | Shop |
| `shop.revenue` | Revenus | Revenue |
| `shop.out_of_stock` | Rupture de stock | Out of stock |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Popup | rectangle arrondi | lisible |
| Badge | rond | constant |

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')",
"cargo": "animal_uuid | null",
"position": { "x": "float", "y": "float" },
"target_site_id": "uuid | null"
"target_site_id": "uuid | null",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -40,30 +43,32 @@ Véhicule de transport pour les achats et les ventes d'animaux/œufs.
| Confort | Basique (Stress normal) |
### Scores Initiaux
N/A
**Kilométrage** : 0 km.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Démarrage jeu.
### Conditions de Disparition
N/A
**Panne** : Immobilisation temporaire si pas d'entretien (Réparation requise).
### Hérédité
N/A
**Garage** : Conserve les upgrades de vitesse après reset (Véhicule de fonction).
## 3. Impacts Environnementaux
### Impact Température
N/A
**Surchauffe moteur** : Si T° > 40°C, vitesse -10%.
**Gel** : Si T° < -10°C, démarrage lent (+5s).
### Impact Milieu (Biome)
N/A
**Tout-terrain** : Bonus vitesse sur terre si pneus adaptés (Upgrade). Ralenti sur Sable.
### Impact Saisons
**Hiver** : Vitesse réduite de 20% (Neige).
**Automne** : Risque de boue (Vitesse -5%).
### Impact Heure / Jour-Nuit
N/A
**Phares** : Vitesse normale la nuit (si phares débloqués Niv 2). Sinon -30% (Prudence).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
@@ -77,13 +82,13 @@ N/A
Si trajet trop long (> 24h) sans confort, risque de mort (Faim/Stress).
### Impact Nourriture
N/A
**Carburant** : Consomme de l'essence (coût au km) ou électrique (recharge au zoo).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Design** : Un beau camion (Skin) fait "Pro" (+1 Attractivité).
### Impact Valeur
N/A
**Occasion** : Valeur de revente du camion (fictive, pour score richesse).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
@@ -99,15 +104,16 @@ N/A
| 7 | 200 km/h (Avion/Hélico ?) |
### Dépenses (Boutiques/Visiteurs)
N/A
**Entretien** : 10 pièces tous les 1000 km.
### Trajet Visiteurs
N/A
**Klaxon** : Écarte les visiteurs sur le passage (au zoo) pour éviter les accidents.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Départ** : Camion part.
* **Arrivée** : Camion revient avec marchandise.
* **Crevaison** : Retard aléatoire.
## 7. Progression
### Tableau des Upgrades
@@ -137,9 +143,19 @@ function updateTruck(truck, deltaTime):
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `TRUCK_ARRIVED` | Info | "Le camion est revenu au zoo." |
| `TRUCK_DELAY` | Info | "Le camion a du retard (Météo/Panne)." |
# 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)
### Envoi en Mission (Action)
**Description UX** : Le joueur achète un animal sur la carte du monde. Le camion part automatiquement le chercher.
@@ -150,15 +166,15 @@ function updateTruck(truck, deltaTime):
**Événements** : `TRUCK_DEPART`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Bruit de moteur au démarrage.
- **Sons** : `engine_start.mp3`, `horn.mp3`.
- **Graphiques** : Sprite Camion (Vue dessus et côté).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Carte routière (Icône).
- **Vidéos** : Zoom caméra sur le camion qui part.
- **Animations** : Roues qui tournent, fumée échappement.
- **Couleurs** : Jaune/Noir (Chantier) ou Blanc (Livraison).
- **Textes** : "En route vers [Destination]".
- **Formes** : N/A
- **Formes** : Flèche de direction.
### Suivi Trajet (Passif/Actif)
**Description UX** : Le joueur peut suivre le camion sur la carte du monde.
@@ -169,15 +185,14 @@ function updateTruck(truck, deltaTime):
**Événements** : `TRACK_TRUCK`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Sonar "Ping" régulier.
- **Sons** : Bruit moteur continu (faible).
- **Graphiques** : Ligne pointillée (trajet).
- **Images** : N/A
- **Vidéos** : N/A
- **Vidéos** : Ligne de trajet qui se dessine.
- **Animations** : Déplacement linéaire.
- **Couleurs** : Ligne Blanche.
- **Textes** : "Arrivée dans MM:SS".
- **Formes** : N/A
- **Formes** : Cercle autour du camion.
### Activité d'Attente (Gameplay)
**Description UX** : Pendant le trajet (temps mort), le joueur peut cliquer sur le camion pour le "booster" ou nettoyer le pare-brise (mini-jeu simple) pour gagner quelques secondes ou de l'XP.
@@ -192,11 +207,11 @@ function updateTruck(truck, deltaTime):
- **Sons** : `wipe.mp3` (essuie-glace). **Design ASMR** : Bruit d'éponge mouillée ou de raclette satisfaisant.
- **Graphiques** : Taches de boue/insectes.
- **Images** : Vue cockpit simplifiée.
- **Vidéos** : N/A
- **Vidéos** : Reflet du soleil sur le pare-brise.
- **Animations** : Essuie-glace qui bouge.
- **Couleurs** : N/A
- **Couleurs** : Marron (Boue), Vert (Insectes).
- **Textes** : "Boost !"
- **Formes** : N/A
- **Formes** : Éponge (Curseur).
### Arrivée (Passif)
**Description UX** : Le camion revient au zoo et se gare.
@@ -204,16 +219,507 @@ function updateTruck(truck, deltaTime):
**Notification Push** : "Le camion est de retour !" (si application fermée).
**Emplacement** : Case Camion.
**Intégration** : Fin cycle.
**Navigation** : N/A
**Navigation** : Automatique (Cinématique).
**Événements** : `TRUCK_ARRIVE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Bruit de freins pneumatiques "Pschhh".
- **Sons** : `truck_stop.mp3`.
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Traces de pneus au sol.
- **Vidéos** : Fumée d'échappement qui se dissipe.
- **Animations** : Freinage.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Couleurs** : Rouge (Feux stop).
- **Textes** : "Livraison effectuée".
- **Formes** : Carré de stationnement.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Unité de transport “Camion” : véhicule qui exécute des missions (achat/vente/transfert) entre sites (carte monde) et le zoo. |
| Rôle | Relier les transactions (enchères/achats/ventes) à une logistique observable (trajet, délais, incidents), et injecter le cargo dans `accueil_animaux` / `nurserie` selon le cas. |
| Portée | Entité persistante (par joueur/zoo) avec `level`, `status`, `cargo`, `target_site_id`. |
| Contrainte | ETA et trajectoire calculés à la volée, sans cache/mémorisation ; aucun fallback silencieux (cargo manquant => erreur + log). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Démarrer mission | achat/vente | `target_site_id`, cargo | status moving | refuse si déjà en mission | Event `TRUCK_DEPART` |
| Calculer durée | départ | distance, level | ETA | vitesse table par level + météo | Event `TRUCK_ETA_COMPUTED` |
| Déplacer sur carte | tick lazy | now, route | position | interpolation | Event `TRUCK_POSITION_UPDATED` |
| Appliquer stress cargo | tick | cargo, confort | fertilité/stress | perte fertilité/h selon level | Event `CARGO_STRESS_APPLIED` |
| Gérer incidents | tick | météo, entretien | delay | crevaison/panne explicités | Event `TRUCK_DELAYED` |
| Arriver au site | ETA atteint | - | status arrived | charge/décharge | Event `TRUCK_ARRIVED_SITE` |
| Retourner au zoo | fin opération | - | status moving_home | trajet retour | Event `TRUCK_RETURNING` |
| Décharger au zoo | arrivée | cargo | slot réception | adultes → `accueil_animaux`, œufs/bébés → `nurserie` (selon type) | Event `DELIVERY_COMPLETE` |
| Mini-jeu attente | clic camion | - | bonus léger | bonus borné, non obligatoire | Event `CLEAN_WINDSHIELD` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Camion isométrique + flèche direction |
| Couleur dominante | Jaune/noir ou blanc |
| Variantes | `truck_lvl_{1..7}_dir_{N,E,S,W}.png` |
| États | `idle`, `moving`, `delayed`, `arrived`, `cargo_loaded` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Envoyer en mission | Action | camion idle | achat → auto départ | mission lancée | `TRUCK_BUSY` |
| Suivre trajet | Consultation | mission active | clic icône | panel ETA | - |
| Ouvrir mini-jeu | Action | mission active | clic camion | modal mini-jeu | - |
| Voir arrivée | Consultation | mission finie | notif | focus cargo | - |
## Personnages contextuels (événements & interaction)
Selon le contexte de la mission, le camion peut afficher un personnage contextuel :
- **Personnel daccueil (déchargement au zoo)** : voir `personnel_accueil.md` (cargo adulte).
- **Nurse (déchargement vers nurserie)** : voir `nurse.md` (cargo œuf/bébé).
- **Laborantin (achat depuis le laboratoire)** : voir `laborantin.md` (refus/gating/validation).
- **Agent de sécurité (incident de trajet)** : voir `agent_securite.md` (retard/menace si la cause est “sécurité”).
### Déclencheurs (exemples)
| Event | Condition | Personnage | Effet UI |
|---|---|---|---|
| `TRUCK_DEPART` | mission démarrée | (option UI) | état “en route” + destination |
| `TRUCK_DELAYED` | incident détecté | sécurité | bulle “Retard” + cause + CTA “Voir trajet” |
| `TRUCK_ARRIVE` / `DELIVERY_COMPLETE` | arrivée zoo | accueil ou nurse | bulle “Livraison effectuée” + deep-link vers `accueil_animaux`/`nurserie` selon cargo |
| `TRUCK_ARRIVED_SITE` | arrivée site | laborantin (si site labo) | bulle “Offre disponible” + CTA “Ouvrir labo” |
### Skins & thèmes
Le rendu des personnages suit `theme.md` et `inventaire_skins.md` (uniformes + accessoires). Le camion lui-même reste skinable via `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `level` | int | 1 | DB | 1..7 |
| `status` | enum | `idle` | DB | `idle/moving_to_target/moving_home/delayed` |
| `cargo.type` | string \| null | `animal` | DB | null si vide |
| `cargo.id` | uuid_v4 \| null | `uuid_v4` | DB | - |
| `position.x` | float | 10.2 | calcul/DB | carte monde |
| `position.y` | float | 12.7 | calcul/DB | carte monde |
| `target_site_id` | uuid_v4 \| null | `uuid_v4` | DB | - |
| `iso_x` | int | 120 | DB/calcul | si rendu zoo |
| `iso_y` | int | 88 | DB/calcul | si rendu zoo |
| `z_index` | int | 12088 | calcul | profondeur |
| `maintenance.km_since_service` | float | 0 | DB | - |
| `timers.departed_at` | timestamp \| null | - | DB | UTC |
| `timers.eta_at` | timestamp \| null | - | calcul/DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Vitesse (lvl1) | 50 | km/h | simulé |
| Capacité | 1 | cargo | par camion |
| Confort | 0.0 | score | réduit stress |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Kilométrage | 0 | 0..∞ | entretien |
| Retards cumulés | 0 | 0..∞ | info joueur |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | début jeu | - | camion idle | 1 camion min |
| Mission | achat/vente | cargo+site | moving | exclusif |
| Arrivée | ETA | - | arrived | décharge |
| Retour | fin op | - | moving_home | - |
| Idle | arrivée zoo | - | idle | cargo null |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Début partie | true | est | camion créé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | camion persiste |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Upgrades | Oui | persiste |
| Cargo | Non | mission-only |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet camion | Notes |
|---|---|---|
| > 40°C | vitesse -10% | surchauffe |
| < -10°C | démarrage +5s | gel |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet camion | Notes |
|---|---|---|
| Sable | vitesse - | sans pneus |
| Terre | vitesse + | pneus adaptés |
#### Impact Saisons (tableau détaillé)
| Saison | Effet camion | Notes |
|---|---|---|
| Hiver | vitesse -20% | neige |
| Automne | vitesse -5% | boue |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet camion | Notes |
|---|---|---|
| Nuit sans phares | vitesse -30% | prudence |
| Nuit avec phares | normal | level ≥ 2 |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Stress transport | fertilité \(\downarrow\) | cargo animal |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Trajet > 24h + confort bas | risque mort | cas extrême |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Carburant | coût/km | mission |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Skin camion | +1 | zoo | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Klaxon | stress + | au passage |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Niveau camion | + | richesse (score) |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Niveau | table vitesse | 1..7 |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison œuf/bébé | push vers nurserie | cargo type |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison adulte | push vers accueil | cargo type |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Route labo | vitesse selon route | autoroute/piste |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Entretien | 10 | coins / 1000 km | règle |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Chauffeur (abstrait) | 0 | - | inclus |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Carburant | variable | coins | distance |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `TRUCK_DEPART` | mission | target, cargo | moving |
| `TRUCK_DELAYED` | incident | reason, delta | ETA \(\uparrow\) |
| `TRUCK_ARRIVE` | retour zoo | cargo | décharge |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `TRACK_TRUCK` | clic | panel |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `DELIVERY_COMPLETE` | arrivée | push accueil/nurserie |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_OPENS_TRUCK_PANEL` | clic | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | 50 km/h | base |
| 2 | 200 | 70 km/h + phares | nuit |
| 7 | 6400 | 200 km/h | rapide |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeTruckSpeed` | level, season, temp | float | table + mods |
| `computeETA` | distance, speed | timestamp | à la volée |
| `applyCargoStress` | cargo, comfort, dt | cargo | fertilité/stress |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `TRUCK_ARRIVED` | Info | "Le camion est revenu au zoo." | arrivée |
| `TRUCK_DELAY` | Info | "Le camion a du retard." | incident |
| `TRUCK_BUSY` | Warning | "Camion déjà en mission." | lancement |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Acheter sur carte | déclencher livraison | navigation | auto-focus camion |
| Suivre | connaître ETA | dispersion | panel clic icône |
| Mini-jeu | occuper attente | option | accessible en 1 clic |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Icône camion | position + badge | moving/delayed |
| Panel trajet | ETA + destination | open/closed |
| Modal mini-jeu | taches | progress |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | overlay | camion |
| Carte zoo | case camion | départ/arrivée |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `accueil_animaux.md` | livraison adulte | dépôt |
| `nurserie.md` | livraison œuf/bébé | dépôt |
| `vente_animal.md` | logistique | mission |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Suivre | clic camion | panel |
| Jouer | clic camion → mini-jeu | modal |
| Voir arrivée | clic notif | focus |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `TRACK_TRUCK` | clic | panel |
| `CLEAN_WINDSHIELD` | clic | mini-jeu |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `truck_radio_lofi.mp3` | mini-jeu | loop | doux |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `engine_start.mp3` | départ | moyen |
| `truck_stop.mp3` | arrivée | moyen |
| `wipe.mp3` | mini-jeu | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `truck_route_dotted.png` | route | overlay |
| `truck_badge_delayed.png` | retard | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `truck_map_icon.png` | carte |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `truck_depart_zoom.webm` | départ | 1.5s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fumée échappement | moving | loop |
| rotation roues | moving | loop |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `truck_yellow` | #FBC02D | carrosserie |
| `truck_black` | #212121 | accents |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `truck.en_route` | En route vers {dest} | En route to {dest} |
| `truck.arrived` | Camion rentré | Truck arrived |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Badge | rond | statut |
| Flèche | triangle | direction |

View File

@@ -25,15 +25,18 @@ Une carte est une grille de cases représentant un espace de jeu ou de navigatio
"height": "integer",
"grid": [
[ { "case_ref": "case_id" } ]
]
],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A (Dépendant du type)
**Taille** : Définie à la création.
### Scores Initiaux
N/A
**Densité** : 0% occupée.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -43,64 +46,79 @@ Création à l'initialisation du jeu/compte.
Suppression du compte.
### Hérédité
N/A
**Configuration** : La disposition des biomes peut être conservée ou régénérée.
## 3. Impacts Environnementaux
### Impact Température
N/A (Porté par les cases)
**Globale** : La carte porte la météo globale qui affecte toutes les cases.
### Impact Milieu (Biome)
N/A (Porté par les cases)
**Distribution** : La carte gère la répartition des biomes (Génération procédurale ou fixe).
### Impact Saisons
N/A
**Cycle** : La carte orchestre le changement de saison pour toutes les entités.
### Impact Heure / Jour-Nuit
N/A
**Cycle** : La carte gère l'horloge mondiale.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Population** : La carte suit le nombre total d'animaux pour les limites globales.
### Impact Mort
N/A
**Cimetière** : La carte peut garder une trace des morts (statistiques).
### Impact Nourriture
N/A
**Ressources** : La carte gère les stocks globaux si centralisés.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Score Global** : Somme des attractivités locales.
### Impact Valeur
N/A
**Valorisation** : Valeur totale du terrain.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Temps** : La carte gère le `deltaTime` global.
### Dépenses (Boutiques/Visiteurs)
N/A
**Économie** : La carte centralise les flux financiers (optionnel).
### Trajet Visiteurs
N/A
**Réseau** : La carte définit le graphe de navigation global.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Tick** : Mise à jour périodique de toutes les entités.
## 7. Progression
### Tableau des Upgrades
N/A
Voir `agrandissement_carte.md`.
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function updateMap(map):
foreach entity in map.entities:
entity.update()
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `MAP_LOADED` | Info | "Carte chargée avec succès." |
# 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)
### Navigation (Action)
**Description UX** : Le joueur explore la carte.
@@ -114,9 +132,470 @@ N/A
- **Musiques** : Ambiance calme (Zoo) / Aventure (Monde).
- **Sons** : Vent léger.
- **Graphiques** : Grille (Grid lines) subtile.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Fond d'écran (Skybox).
- **Vidéos** : Nuages qui passent (Overlay).
- **Animations** : Inertie du mouvement.
- **Couleurs** : Fond neutre hors carte.
- **Textes** : Coordonnées (Debug).
- **Formes** : Rectangulaire.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Abstraction “carte” : structure de grille + règles de navigation + horloge, déclinée en carte zoo et carte monde. |
| Rôle | Offrir un contrat commun de coordonnées, rendu isométrique, événements de déplacement/zoom, et cycle temps (jour/nuit, saisons). |
| Portée | Base pour `carte_zoo.md` et `carte_monde.md`, et pour les types `case_*`. |
| Contrainte | Aucun cache/mémorisation obligatoire : la carte fournit des fonctions de calcul à la volée (variants, z_index, routes). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Initialiser carte | création | type, seed | grid | dimensions fixées | Event `MAP_INIT` |
| Résoudre case | lookup | x,y | case | unicité coord | Event `MAP_CASE_RESOLVED` |
| Convertir coord → iso | rendu | x,y | iso_x/iso_y | formule iso stable | Event `MAP_COORD_CONVERTED` |
| Calculer z_index | rendu | x,y | int | priorité y puis x | Event `MAP_ZINDEX_COMPUTED` |
| Déclencher tick | loop | deltaTime | events | mise à jour entités | Event `MAP_TICK` |
| Déplacement caméra | input | pan/zoom | camera state | clamp | Event `MAP_MOVE` / `MAP_ZOOM` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Grille + boussole |
| Couleur dominante | Neutre |
| Variantes | `icon_map_generic.png`, `icon_compass.png` |
| États | normal, loading, locked |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Pan | Navigation | carte autorise pan | drag | caméra bouge | - |
| Zoom | Navigation | - | pinch/wheel | caméra zoom | - |
| Sélection case | Consultation | case interactive | clic | panneau | `CASE_LOCKED` |
## Personnage contextuel (événements & interaction)
Les cartes peuvent afficher un personnage contextuel quand un module de carte est actionné ou lorsquun événement impacte la navigation.
### Références
- **Carte du zoo** : avatar du joueur actif comme contexte principal (`avatar_joueur.md`), plus visiteurs/staff selon événements (`carte_zoo.md`).
- **Carte du monde** : maire pour les événements de ville (`maire.md`, `ville.md`), joueurs/bots pour les interactions sociales (`joueur.md`, `bot.md`), visiteurs comme flux (`visiteur.md`).
### Déclencheurs (génériques)
| Event / Action | Condition | Effet UI personnage |
|---|---|---|
| `MAP_LOADED` | carte prête | portrait/mascotte de contexte (selon type) |
| `MAP_MOVE` / `MAP_ZOOM` | navigation | feedback passif (pas de spam) |
| `CASE_LOCKED` | gating | message explicite (raison + action) |
### Skins & thèmes
Le personnage contextuel suit `theme.md`. Les portraits/mini-avatars peuvent utiliser les skins via `inventaire_skins.md` si la mécanique est activée.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | unique |
| `type` | enum | `zoo` | DB | `zoo/world` |
| `width` | int | 6 | DB | >0 |
| `height` | int | 5 | DB | >0 |
| `grid[x][y].case_ref` | uuid_v4 | `uuid_v4` | DB | référence |
| `time.day_phase` | enum | `day` | calcul | jour/nuit |
| `time.season` | enum | `spring` | calcul | saisons |
| `iso_x` | int | 0 | calcul | origine |
| `iso_y` | int | 0 | calcul | origine |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Densité occupée | 0 | % | init |
| DeltaTime | 1 | tick | logique |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Exploration | 0 | 0..100 | carte monde |
| Aménagement | 0 | 0..100 | carte zoo |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | init jeu | seed | carte | stable |
| Utilisation | session | input | camera | clamp |
| Destruction | suppression compte | - | supprimée | - |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Initialisation | true | est | carte créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte supprimé | true | est | carte supprimée |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Configuration seed | Oui | rejouable |
| Variants render | Non | recalcul |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet carte | Notes |
|---|---|---|
| Météo globale | mod cases | propagée |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet carte | Notes |
|---|---|---|
| Répartition | gen/procédural | cohérence |
#### Impact Saisons (tableau détaillé)
| Saison | Effet carte | Notes |
|---|---|---|
| Cycle | mod visuel | global |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet carte | Notes |
|---|---|---|
| Nuit | assombrissement | global |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Population globale | caps | simulation |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Traces | journal | option |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stocks | centralisation | option |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Score global | agrégation | monde | carte monde |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | base |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Terrain | + | cases |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| deltaTime | avance mission | tick |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| timers | progress | tick |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| timers | progress | tick |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| projets | durations | tick |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| refresh offres | 24h | tick |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| pathfinding | recalcul | obstacles |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Affichage UI | 1 | coins | lore |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### 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 | curiosité | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | route |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Sortie | fermeture | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `MAP_TICK` | loop | dt | update |
| `MAP_LOADED` | init | type | ready |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_MOVE` | input | camera |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_INIT` | create | grid |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_ZOOM` | input | camera |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_CASE_RESOLVED` | lookup | case |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_COORD_CONVERTED` | render | iso |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | zoom + | map |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateMap` | map, dt | map | tick |
| `toIso` | x,y | iso | projection |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `MAP_LOADED` | Info | "Carte chargée." | init |
| `CASE_LOCKED` | Warning | "Zone verrouillée." | gating |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Explorer | comprendre espace | navigation | pan/zoom |
| Centrer | retrouver point | perte | bouton recentrer |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| HUD carte | boutons | visible |
| Tooltip | coord/site | hover |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Plein écran | centre | carte |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_zoo.md` | usage | build |
| `carte_monde.md` | usage | navigation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Pan | drag | move |
| Zoom | pinch | scale |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `MAP_MOVE` | drag | camera |
| `MAP_ZOOM` | pinch | camera |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `map_generic_loop.mp3` | carte | loop | neutre |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `hover_soft.mp3` | hover | bas |
| `ui_zoom.mp3` | zoom | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `grid_lines.png` | overlay | subtil |
| `tooltip_bg.png` | tooltip | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `skybox.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `clouds_overlay.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| inertie pan | move | 0.2s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `map_bg` | #202020 | hors carte |
| `map_highlight` | #FFFFFF | hover |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `map.coords` | Coordonnées | Coordinates |
| `map.loaded` | Carte chargée | Map loaded |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tooltip | rectangle arrondi | lisible |

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)",
"height": "integer",
"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"
}
```
@@ -53,7 +56,7 @@ La carte du monde est l'espace multijoueur où sont situés les zoos des joueurs
| Nb Labos | 2 (dans rayon départ) |
### Scores Initiaux
N/A
**Score Exploration** : 0% (Carte dévoilée).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -63,51 +66,52 @@ Unique (Singleton serveur).
Jamais.
### Hérédité
N/A
**Cartographie** : Les zones découvertes restent visibles après un reset (Connaissance acquise).
## 3. Impacts Environnementaux
### Impact Température
N/A
**Météo Globale** : Nuages, Pluie ou Neige visibles sur la carte (Effet visuel + Gameplay).
### Impact Milieu (Biome)
N/A
**Diversité** : Les biomes influencent le type de zoo bot (ex: Zoo Polaire au Nord, Zoo Tropical à l'Équateur).
### Impact Saisons
N/A
**Visuel** : La carte change de teinte (Blanc en Hiver, Orange en Automne, Vert vif au Printemps).
### Impact Heure / Jour-Nuit
N/A
**Cycle Jour/Nuit** : Assombrissement global. Les villes et zoos s'allument (Pixel Art lumineux).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Migration** : En saison des amours, des troupeaux sauvages (décoratifs) migrent sur la carte.
### Impact Mort
N/A
**Cimetière des Éléphants** : Lieu légendaire caché (Easter Egg) donnant un bonus si découvert.
### Impact Nourriture
N/A
**Ressources** : Les villes produisent de la nourriture (Champs autour des villes).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Rayonnement** : Un zoo très attractif (> 10k visiteurs) émet un halo doré visible de loin.
### Impact Valeur
N/A
**Économie** : Les prix du marché fluctuent selon l'offre globale (Loi de l'offre et la demande simulée).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Voyage Rapide** : Coût en pièces pour téléportation instantanée (si module "Héliport" débloqué).
### Dépenses (Boutiques/Visiteurs)
N/A
**Péages** : Taxe de passage sur certaines routes commerciales (1% valeur cargaison).
### Trajet Visiteurs
Calcul des distances Ville -> Zoo pour l'attractivité.
Calcul des distances Ville -> Zoo pour l'attractivité. Les visiteurs prennent le chemin le plus court.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Spawn Bot** : Apparition nouveau zoo bot.
* **Spawn Truck** : Camion visible.
* **Embouteillage** : Ralentissement sur les routes principales.
## 7. Progression
### Tableau des Upgrades
@@ -115,13 +119,33 @@ Voir `agrandissement_carte.md`.
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function updateWorldMap(map, deltaTime):
for truck in map.trucks:
moveTruck(truck, deltaTime)
if hasArrived(truck):
processTransaction(truck)
updateWeather(map)
updateDayNightCycle(map)
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `MAP_EVENT` | Info | "Un événement météo touche la région Nord." |
# 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)
### Vue Globale (Passif)
**Description UX** : Le joueur voit les autres acteurs et les flux économiques.
@@ -136,7 +160,7 @@ N/A
- **Sons** : Vent, Bruit lointain trafic.
- **Graphiques** : Fond carte (Biomes flous).
- **Images** : Icônes Sites.
- **Vidéos** : N/A
- **Vidéos** : Nuages dynamiques (shader).
- **Animations** : Camions qui bougent.
- **Couleurs** : Desaturées (pour faire ressortir les icônes).
- **Textes** : Noms des villes/zoos.
@@ -147,16 +171,488 @@ N/A
**Description UI** : Nuages ou zone sombre en périphérie.
**Emplacement** : Bords Carte.
**Intégration** : Mask.
**Navigation** : N/A
**Événements** : N/A
**Navigation** : Zoom-out via upgrade carte ; au clic sur une zone masquée, afficher un tooltip “Zone non explorée”.
**Événements** : `FOG_HOVER`, `FOG_CLICK_BLOCKED`
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : `ambience_fog_soft.mp3` (optionnel, très discret).
- **Sons** : `fog_whoosh.mp3` (au reveal), `ui_denied.mp3` (clic zone bloquée).
- **Graphiques** : Texture Nuages.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Masque alpha (bords flous).
- **Vidéos** : Effet de brume (particules).
- **Animations** : Nuages qui dérivent lentement.
- **Couleurs** : Blanc/Gris.
- **Textes** : "Zone Inexplorée".
- **Formes** : N/A
- **Formes** : Zone non cliquable.
## Définition
| Champ | Valeur |
|---|---|
| Concept | “Carte du monde” : vue multijoueur/économie, affichant sites (zoos, villes, labos) et camions en transit. |
| Rôle | Permettre lachat/vente via transport, visualiser la dynamique (flux, météo, jour/nuit) et lexploration (brouillard). |
| Portée | Singleton logique (serveur), rendu client par zooms et marqueurs, sans pan manuel si règle active. |
| Contrainte | Pas de cache/mémorisation des flux : distances/choix calculés à la volée ; pas dalternative HTTP/analytics ; interaction zone masquée => blocage explicite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir carte monde | bouton UI | player | écran monde | charge sites visibles | Event `OPEN_WORLD_MAP` |
| Résoudre visibilité | upgrade zoom | rayon | sites visibles | dépend upgrade carte | Event `WORLD_VISIBILITY_UPDATED` |
| Afficher sites | rendu | sites | markers | z_index stable | Event `WORLD_SITES_RENDERED` |
| Suivre camions | tick lazy | dt | pos camions | interpolation | Event `WORLD_TRUCKS_UPDATED` |
| Bloquer zone inexplorée | clic | coord | tooltip | pas de reveal gratuit | Event `FOG_CLICK_BLOCKED` |
| Délivrer cargo | camion arrive | cargo | dépôt zoo | adultes→accueil, œufs/bébés→nurserie | Event `DELIVERY_COMPLETE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Globe + pins |
| Couleur dominante | Désaturé (fond) + accents (pins) |
| Variantes | `icon_world_map.png`, `icon_pin_site.png` |
| États | normal, fogged, event_weather |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Clic site | Consultation | visible | clic marker | panneau site | `ZONE_NOT_EXPLORED` |
| Achat offre | Action | fonds + camion idle | drag offre→camion | mission | `TRUCK_BUSY`, `NOT_ENOUGH_COINS` |
| Zoom-out | Navigation | upgrade ok | bouton/gesture | rayon ↑ | `UPGRADE_REQUIRED` |
## Personnages contextuels (événements & interaction)
La carte du monde affiche des personnages contextuels selon le type de site sélectionné et les événements globaux.
### Sites et personnages
- **Ville** : maire (`maire.md`) — événements de ville, flux visiteurs, relation/jumelage.
- **Laboratoire** : laborantin (`laborantin.md`) — offres rares, services, alertes.
- **Zoo joueur** : joueur/portrait (`joueur.md`, `avatar_joueur.md`) — identité, indicateurs, interactions sociales.
- **Zoo bot** : bot (`bot.md`) — profil de stratégie et indicateurs.
### Déclencheurs (exemples)
| Event / Action | Condition | Personnage | Effet UI |
|---|---|---|---|
| `OPEN_WORLD_MAP` | ouverture écran | (contexte) | personnage de contexte selon dernier site sélectionné |
| clic site `city` | sélection ville | maire | panneau ville + événements |
| clic site `lab` | sélection labo | laborantin | panneau labo + offres/services |
| clic site `zoo` (autre joueur) | sélection zoo | joueur | panneau identité + actions permises |
| `ZONE_NOT_EXPLORED` | fog | (contexte) | message explicite (gating) |
### Skins & thèmes
Les portraits/mascottes suivent `theme.md`. Les mini-avatars des joueurs suivent leurs skins (si le profil est accessible) via les règles de `avatar_joueur.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | string | `world_map` | DB | singleton |
| `width` | int | 200 | DB | très grand |
| `height` | int | 200 | DB | - |
| `sites[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `sites[].type` | enum | `city` | DB | `zoo/city/lab` |
| `sites[].pos.x` | int | 40 | DB | grid |
| `sites[].pos.y` | int | 70 | DB | grid |
| `trucks[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].pos.x` | float | 40.2 | calcul | monde |
| `trucks[].pos.y` | float | 69.8 | calcul | monde |
| `trucks[].target` | uuid_v4 | `uuid_v4` | DB | site |
| `fog.revealed_radius` | float | 500 | config | km simulé |
| `weather.global` | enum | `rain` | calcul | rendu |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon visible | 500 | km | simulé |
| Nb villes | 10 | count | départ |
| Nb labos | 2 | count | départ |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Exploration | 0 | 0..100 | fog |
| Trafic camions | 0 | 0..∞ | routes visibles |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | serveur | seed | sites init | singleton |
| Exploration | upgrade | zoom | reveal | blocage zones |
| Événements | météo | saison | overlays | observables |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Démarrage | true | est | carte disponible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | jamais |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Cartographie | Oui | zones découvertes persistent |
| Routes “usuelles” | Oui | visibles si trafic haut |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Météo globale | visuel + mod vitesse | pluie/neige |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Montagne | coût traversée + | camions |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | teinte blanche | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | lumières villes/zoos | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Migration (décor) | 0 | purement visuel |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Easter egg | bonus | découverte |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Villes produisent | stock + | marchés |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Halo zoo attractif | visuel | monde | signal |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Marché global | prix ± | offre/demande |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Embouteillage | vitesse - | event |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offres bébés | compteur + | listings |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offres animaux | compteur + | listings |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Zoom upgrade | visibilité + | agrandissement carte |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Refresh offers | TTL 24h | remplacement |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Flux ville→zoo | distance | calcul |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Péages | 1% cargaison | coins | routes |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### 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 |
|---|---:|---|---|
| Voyage rapide | 100 | coins | si héliport |
#### 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 |
|---|---|---|---|
| Zoo | Enclos | visite | path |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Boutique | besoins | achats |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Sortie | fin | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_WORLD_MAP` | UI | - | écran |
| `MAP_EVENT` | météo | region | overlay |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOG_HOVER` | hover | tooltip |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_TRUCKS_UPDATED` | tick | positions |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | flux |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_NOT_EXPLORED` | clic | denied |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_VISIBILITY_UPDATED` | upgrade | reveal |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 1000 | zoom + | rayon |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateWorldMap` | map, dt | map | move trucks |
| `canReveal` | upgrade | bool | fog |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog |
| `UPGRADE_REQUIRED` | Warning | "Amélioration requise." | zoom |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Lire le marché | choisir offres | densité | compteurs + filtres |
| Acheter | déclencher camion | drag | drag direct vers camion |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Pins sites | zoo/city/lab | hover/selected |
| Fog mask | nuages | revealed/hidden |
| Compteurs | offres | live |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Plein écran | centre | carte monde |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | transport | missions |
| `ville.md` | flux | visiteurs |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | bouton carte monde | écran |
| Retour | bouton zoo | ferme |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_WORLD_MAP` | clic | open |
| `FOG_CLICK_BLOCKED` | clic fog | tooltip |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `world_map_travel_loop.mp3` | carte monde | loop | aventure |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `fog_whoosh.mp3` | reveal | bas |
| `ui_denied.mp3` | blocked | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `world_pins_atlas.png` | pins | lisible |
| `fog_clouds.png` | fog | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `world_biomes_blur.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `clouds_shader.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| déplacement camions | tick | continu |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `world_desat` | #8A8A8A | fond |
| `world_pin_gold` | #D4AF37 | halo |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `world.fog` | Zone inexplorée | Unexplored zone |
| `world.back` | Retour zoo | Back to zoo |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Pin | goutte | site |

View File

@@ -4,6 +4,8 @@
La carte du zoo est l'espace principal de gestion du joueur où il place ses bâtiments et ses animaux.
## Structure
- **Vue** : Isométrique (2.5D).
- **Affichage** : Plein écran sous la barre du haut, dézoom possible.
- **Grille** : Composée de cases individuelles.
- **Biomes** : Divisée en tiers de largeur :
- Gauche : Prairie
@@ -37,7 +39,33 @@ La carte du zoo est l'espace principal de gestion du joueur où il place ses bâ
"owner_id": "uuid",
"width": "integer (init 5)",
"height": "integer (init 6)",
"cases": [ ... ]
"cases": [
{
"id": "uuid",
"grid": { "x": "integer", "y": "integer" },
"iso": { "iso_x": "integer", "iso_y": "integer" },
"z_index": "integer",
"biome": "enum('prairie','ocean','montagne')",
"terrain": {
"ground_type": "enum('herbe','terre','sable','roche','eau')",
"path_type": "enum('none','terre','gravier','paves','bois_pont')",
"decoration_ids": "uuid[]"
},
"occupancy": {
"type": "enum('empty','animal','building','service','enclosure_fence','water_obstacle')",
"entity_id": "uuid | null"
},
"render": {
"tile_variant": "string (auto-tiling key)",
"occluder": "boolean",
"click_hitbox": "enum('tile','base_sprite','custom_polygon')"
},
"timestamps": {
"created_at": "timestamp",
"updated_at": "timestamp"
}
}
]
}
```
@@ -48,60 +76,61 @@ La carte du zoo est l'espace principal de gestion du joueur où il place ses bâ
| Biomes | 3 (Tiers) |
### Scores Initiaux
N/A
**Score Aménagement** : 0/100 (Utilisation de l'espace).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Création du compte joueur.
### Conditions de Disparition
N/A
**Reset Joueur** : Suppression du compte ou Faillite totale.
### Hérédité
N/A
**Fondations** : Les extensions de terrain achetées sont conservées en cas de "Soft Reset" (Prestige).
## 3. Impacts Environnementaux
### Impact Température
N/A (Géré par case)
**Micro-climats** : Les cases adjacentes à l'Océan sont plus fraîches (-2°C). Celles en Montagne sont plus froides (-5°C).
### Impact Milieu (Biome)
N/A (Géré par case)
**Bonus Synergie** : Placer 4 cases de même biome en carré crée un "Super Biome" (+10% efficacité).
### Impact Saisons
N/A
**Décor** : Les arbres (décoration) changent de couleur (Vert -> Orange -> Blanc -> Bourgeons).
### Impact Heure / Jour-Nuit
N/A
**Lumières** : Les lampadaires et bâtiments s'allument la nuit (Ambiance).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Intimité** : Les buissons (décoration) placés autour d'un enclos augmentent la fertilité (+5%).
### Impact Mort
N/A
**Compost** : Un animal mort fertilise le sol. L'herbe devient plus verte sur cette case après disparition du corps.
### Impact Nourriture
N/A
**Pousse** : L'herbe (nourriture gratuite) repousse lentement sur les cases Prairie vides.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Beauté** : +1 Attractivité par élément de décoration (Arbre, Banc, Fontaine).
### Impact Valeur
N/A
**Foncier** : Chaque case achetée augmente la valeur théorique du zoo.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Chemins** : Augmentent la vitesse de déplacement des visiteurs (+50%).
### Dépenses (Boutiques/Visiteurs)
N/A
**Entretien Espaces Verts** : Coût hebdomadaire pour garder le zoo propre (1 pièce/case).
### Trajet Visiteurs
Support du pathfinding (A* sur la grille).
Support du pathfinding (A* sur la grille). Les visiteurs évitent les obstacles (Rochers, Eau profonde).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Agrandissement** : Ajout d'une colonne/ligne ou case adjacente.
* **Catastrophe** : Inondation (Océan déborde) ou Éboulement (Montagne).
## 7. Progression
### Tableau des Upgrades
@@ -109,7 +138,7 @@ Voir `achat_upgrade_case_zoo.md`.
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
```javascript
function initZooMap():
width = 6
height = 5
@@ -120,10 +149,22 @@ function initZooMap():
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `MAP_EXPAND` | Succès | "Le zoo s'agrandit ! Nouvelles terres disponibles." |
# 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)
### Interaction Grille (Action)
**Description UX** : Le joueur clique sur une case pour voir son contenu ou construire.
@@ -134,14 +175,13 @@ N/A
**Événements** : `CLICK_CASE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Pop" discret.
- **Sons** : `click_tile.mp3`.
- **Graphiques** : Cadre de sélection blanc/brillant.
- **Images** : N/A
- **Vidéos** : N/A
- **Vidéos** : Effet de "Pop" au clic.
- **Animations** : Pulsation du cadre.
- **Couleurs** : Blanc.
- **Textes** : N/A
- **Textes** : Nom de l'objet sélectionné.
- **Formes** : Carré.
### Mode Construction (Action)
@@ -155,12 +195,506 @@ N/A
**Événements** : `ENTER_BUILD_MODE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Musique "Mode Édition" (calme, boucle).
- **Sons** : `grid_snap.mp3`.
- **Graphiques** : Grille semi-transparente.
- **Images** : N/A
- **Vidéos** : N/A
- **Vidéos** : Effet de grille holographique.
- **Animations** : Snap to grid.
- **Couleurs** : Vert/Rouge (Alpha 0.5).
- **Textes** : N/A
- **Textes** : "Placer ici".
- **Formes** : Carrés.
## Définition
| Champ | Valeur |
|---|---|
| Concept | “Carte du zoo” : grille isométrique principale de gestion (construction, placement animaux/bâtiments, chemins, déplacements visiteurs). |
| Rôle | Centraliser lédition (build/paint), le rendu isométrique (tri z-index, occlusion), et la simulation locale (pathfinding, signaux terrain). |
| Portée | Une map par zoo (`owner_id`), composée de `cases[]` et dentités rendues (bâtiments, animaux, visiteurs, décorations). |
| Contrainte | Pas de cache/mémorisation : états dérivés (z_index, variants auto-tiling, heatmap) calculés à la volée ; aucune interaction silencieuse (placement invalide => erreur + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Rendre grille iso | frame render | cases visibles | draw list | tri par `z_index` + occlusion | Event `ZOO_MAP_RENDERED` |
| Sélectionner une case | clic/tap | coord | panneau contexte | contenu dépend occupancy | Event `CLICK_CASE` |
| Entrer mode build | bouton UI | type item | overlay | indique cases valides | Event `ENTER_BUILD_MODE` |
| Placer entité | drop/tap place | entity, coord | occupancy update | invariants case/biome/enclos | Event `PLACE_ENTITY` |
| Paint multi-case | drag | brush, path | batch placements | pas de “continue” silencieux : stop sur case invalide + message | Event `PAINT_APPLIED` |
| Auto-tiling terrain/chemins | placement | voisins | variant keys | recalcul local voisinage | Event `AUTOTILE_UPDATED` |
| Calculer pathfinding visiteurs | besoin/objectif | graph | route | A* à la volée, coûts par tuile | Event `VISITOR_ROUTE_COMPUTED` |
| Mettre à jour signaux terrain | tick lazy | env | flags | givre/jaunissement selon compatibilité | Event `TERRAIN_SIGNAL_UPDATED` |
| Gérer zoom | input | zoom level | camera scale | clamp + snap | Event `ZOO_MAP_ZOOM` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône carte pliée / grille losange |
| Couleur dominante | Vert (prairie), bleu (océan), gris (montagne) |
| Variantes | `icon_zoo_map.png`, `icon_grid_iso.png` |
| États | normal, build_mode, placement_invalid |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Clic case | Consultation | - | clic | panneau | - |
| Construire bâtiment | Action | item choisi | build → place | entité posée | `CELL_OCCUPIED`, `PLACEMENT_INVALID` |
| Placer animal | Action | animal prêt | drag → drop | animal enclos | `BIOME_INCOMPATIBLE` |
| Déplacer (réaménager) | Action | feature active | drag entité | relocalisation | `MOVE_BLOCKED` |
| Zoom | Navigation | - | pinch/wheel | vue ajustée | - |
## Personnages contextuels (événements & interaction)
La carte du zoo est un module transversal : plusieurs personnages peuvent servir de contexte selon lévénement.
### Personnage principal
- **Joueur actif (avatar)** : voir `avatar_joueur.md`. Visible en HUD et utilisé comme personnage contextuel des actions de construction/gestion.
### Personnages secondaires (selon événement)
- **Visiteurs homme/femme** : voir `visiteur.md` (flux, pathfinding, congestion).
- **Staff** : `nourisseur.md`, `soigneur.md`, `agent_securite.md`, `personnel_accueil.md`, `nurse.md` (déplacements et actions visibles sur la carte).
### Déclencheurs (exemples)
| Event / Action | Condition | Personnage | Effet UI |
|---|---|---|---|
| `CLICK_CASE` | clic case | avatar | panneau contexte + action principale |
| `ENTER_BUILD_MODE` | build activé | avatar | rappel des invariants (cases valides) |
| `PLACEMENT_INVALID` / `CELL_OCCUPIED` | placement refusé | avatar | message explicite + surbrillance cause |
| `VISITOR_ROUTE_COMPUTED` | recalcul route | visiteur | bulle info si congestion/obstacle |
| `DELIVERY_COMPLETE` | arrivée camion | accueil/nurse | bulle livraison + deep-link module |
### Skins & thèmes
Rendu des personnages : `theme.md` + équipements `inventaire_skins.md` (avatar + uniformes + variantes visiteurs si activées).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `width` | int | 5 | DB | init |
| `height` | int | 6 | DB | init |
| `cases[].id` | uuid_v4 | `uuid_v4` | DB | unique |
| `cases[].grid.x` | int | 2 | DB | 0..width-1 |
| `cases[].grid.y` | int | 4 | DB | 0..height-1 |
| `cases[].iso.iso_x` | int | 120 | calcul | rendu |
| `cases[].iso.iso_y` | int | 88 | calcul | rendu |
| `cases[].z_index` | int | 12088 | calcul | tri |
| `cases[].biome` | enum | `prairie` | DB | tiers |
| `cases[].terrain.ground_type` | enum | `herbe` | DB | - |
| `cases[].terrain.path_type` | enum | `gravier` | DB | auto-tiling |
| `cases[].occupancy.type` | enum | `building` | DB | un principal |
| `cases[].occupancy.entity_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide |
| `cases[].render.tile_variant` | string | `path_gravel_T` | calcul | key |
| `cases[].render.occluder` | boolean | true | config | - |
| `cases[].render.click_hitbox` | enum | `base_sprite` | config | accessibilité clic |
| `timestamps.updated_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Taille | 30 | cases | ~5x6 |
| Biomes | 3 | count | tiers |
| Zoom min/max | 0.7 / 1.6 | scale | clamp |
| Coût marche herbe | 1.2 | coef | pathfinding |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Score aménagement | 0 | 0..100 | utilisation espace |
| Propreté globale | 100 | 0..100 | satisfaction |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | compte | seed | cases init | contenu initial |
| Expansion | achat case | coord | width/height | adjacency |
| Réaménagement | action | entité | nouvelle position | pas de collision |
| Catastrophes | event | saison | flags case | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte joueur | true | est | map créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Suppression compte | true | est | map supprimée |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Extensions achetées | Oui | conservées en prestige (soft reset) |
| Variants render | Non | recalcul à la volée |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Proche océan | -2°C | micro-climat |
| Montagne | -5°C | micro-climat |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Prairie | herbe repousse | nourriture passive |
| Océan | humidité + | froid adjacent |
| Montagne | givre + | froid |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | neige/givre | décor + path cost |
| Automne | teintes orange | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | lumières | lampadaires/bâtiments |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Buissons “intimité” | +5% | autour enclos |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Animal mort sur case | fertilité sol + | case verdit après TTL |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Herbe prairie vide | repousse | tick lent |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Décoration | +1 | 3 cases | beauté |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Foule proche | stress + | densité élevée |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Case achetée | + | foncier | valeur zoo |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Accès camion | chemin connecté | case camion |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Overlay placement | valid/invalid | mode sortie |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Mode placement | overlay | READY |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Chemins | +50% vitesse | path tiles |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Entretien espaces verts | 1 | coins/case/semaine | propreté |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance routes | 1 | coins/tuile/semaine | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Saleté | temps staff | min | déchets |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soigneur déplacement | temps | min | chemins |
#### 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 | visuel couplé |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Stock global | variable | coins | achats |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Quarantaine | variable | coins | incidents |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Carburant | variable | coins | distance |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Ville | sortie | despawn |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Enclos | plan visite | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Billeterie | fin visite | sortie |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `MAP_EXPAND` | achat | coord | size + |
| `AUTOTILE_UPDATED` | terrain | coord | variants |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZOO_MAP_ZOOM` | input | camera |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLACE_ENTITY` | placement | occupancy |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_ROUTE_COMPUTED` | besoin | route |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_REROUTE` | obstacle | route |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ENTER_BUILD_MODE` | UI | overlay |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | +1 case | extension |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getBiomeByColumn` | x, width | biome | tiers |
| `computeZIndex` | x,y | int | tri iso |
| `isPlacementValid` | entity, coord | bool | invariants |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `MAP_EXPAND` | Info | "Le zoo s'agrandit." | achat |
| `PLACEMENT_INVALID` | Warning | "Placement invalide." | validation |
| `CELL_OCCUPIED` | Warning | "Case occupée." | collision |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Construire | façonner zoo | erreurs placement | overlay OK/KO |
| Inspecter case | comprendre contenu | navigation | panneau contextuel |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Highlight case | outline | hover/selected |
| Bottom sheet | infos/actions | open/closed |
| Overlay build | vert/rouge | valid/invalid |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Canvas monde | plein écran | caméra |
| HUD build | barre | outils |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `case_zoo.md` | unité case | occupancy |
| `chemin.md` | auto-tiling | path |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Sélection | clic case | panneau |
| Build | bouton build | overlay |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `CLICK_CASE` | clic | panneau |
| `ENTER_BUILD_MODE` | clic | overlay |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `zoo_map_ambience_loop.mp3` | carte zoo | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `click_tile.mp3` | sélection | bas |
| `grid_snap.mp3` | placement | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `tile_highlight.png` | hover | overlay |
| `build_overlay.png` | build | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `biome_prairie_tiles.png` | sol |
| `biome_mountain_tiles.png` | sol |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `grid_holo.webm` | build | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pulsation highlight | hover | 0.4s |
| snap | placement | 0.2s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `build_ok_green` | #00FF00 | valid |
| `build_ko_red` | #FF0000 | invalid |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `zoo_map.place_here` | Placer ici | Place here |
| `zoo_map.invalid` | Placement invalide | Invalid placement |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Case | losange | iso |
| Panneau | rectangle arrondi | lisible |

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.
- **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).
## Règles
- Les transitions de propriétés (couleur, température) entre cases adjacentes doivent être douces.
- **État** : Peut avoir des indicateurs visuels (herbe jaunie, givre, fertilité).
# Annexes Techniques
@@ -21,102 +18,530 @@ Une case est l'unité élémentaire de la grille (Zoo ou Monde).
{
"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",
"temperature_offset": "float",
"biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
"temperature_offset": "float (°C, additive)",
"content_ref": "uuid | null",
"content_type": "string",
"state_flags": ["frozen", "dry", "dirty"]
"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"
}
```
### Caractéristiques Initiales
N/A
### Scores Initiaux
N/A
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération carte.
### Conditions de Disparition
N/A
### Hérédité
N/A
## 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
N/A
### Impact Heure / Jour-Nuit
N/A
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
### Impact Mort
N/A
### Impact Nourriture
N/A
### Impact Attractivité (Visiteurs/Animaux)
N/A
### Impact Valeur
N/A
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
### Dépenses (Boutiques/Visiteurs)
N/A
### Trajet Visiteurs
N/A
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
## 7. Progression
### Tableau des Upgrades
N/A
### 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
N/A
```python
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
N/A
| 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)
### Feedback État (Passif)
**Description UX** : La case montre son état physique.
**Description UI** : Overlay de texture (Givre, Craquelures, Boue).
**Emplacement** : Case.
**Intégration** : Layer 1 (Au-dessus du fond, sous le contenu).
**Navigation** : N/A
**Événements** : `STATE_UPDATE`.
### 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** : N/A
- **Sons** : N/A
- **Graphiques** : Textures alpha (Givre blanc, Craquelures marron).
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Apparition progressive (Fade).
- **Couleurs** : Blanc, Marron, Gris.
- **Textes** : N/A
- **Formes** : Carré.
- **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 |

View File

@@ -20,77 +20,93 @@ Hérite de `Case (Générique)`.
Pas de propriétés supplémentaires spécifiques.
### Caractéristiques Initiales
N/A
**Vide** : Par défaut, une case monde est du vide spatial (ou océan) sauf si un site est généré dessus.
### Scores Initiaux
N/A
**Trafic** : 0 camions passés.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération monde.
### Conditions de Disparition
N/A
**Jamais** : La grille est immuable.
### Hérédité
N/A
**Routes** : Les chemins empruntés fréquemment deviennent des "routes" visibles (bonus vitesse) au fil des resets.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Météo Locale** : La case porte la météo de la région (Nuage, Pluie).
### Impact Milieu (Biome)
N/A
**Fond** : Définit le coût de traversée (Montagne > Plaine).
### Impact Saisons
N/A
**Visuel** : La case change de couleur selon la saison globale.
### Impact Heure / Jour-Nuit
N/A
**Luminosité** : S'assombrit la nuit.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Faune locale** : Reproduction simulée en arrière-plan pour les animaux sauvages (décoratif).
### Impact Mort
N/A
**Cycle naturel** : Les animaux sauvages meurent et disparaissent.
### Impact Nourriture
N/A
**Ressources** : Certaines cases contiennent des buissons de baies.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Influence** : Si proche d'une ville, la case a une "Valeur de Passage" élevée.
### Impact Valeur
N/A
**Terrain** : Prix fictif au m² (pour le lore).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Frottement** : Ralentit les camions selon le biome (Sable = lent).
### Dépenses (Boutiques/Visiteurs)
N/A
**Péage** : Traverser certaines zones coûte des pièces.
### Trajet Visiteurs
N/A
**Flux** : Visualisation des flux migratoires.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Météo** : Orage sur la case.
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Effet |
| :--- | :--- | :--- |
| 1 | 1000 | Route pavée (Vitesse +10%) |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function getTravelCost(case):
return baseCost * biomeMultiplier
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ZONE_DISCOVERED` | Info | "Nouvelle zone découverte !" |
# 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)
### Survol (Passif)
**Description UX** : Explorer la carte du monde.
@@ -101,12 +117,437 @@ N/A
**Événements** : `HOVER_WORLD_CASE`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Musiques** : Thème "Exploration".
- **Sons** : `hover_soft.mp3`.
- **Graphiques** : Highlight case.
- **Images** : Texture Biome.
- **Vidéos** : Effet de brillance au survol.
- **Animations** : Légère surbrillance.
- **Couleurs** : Blanc (Alpha).
- **Textes** : Coordonnées X,Y.
- **Formes** : Carré/Hexagone.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case “monde” : tuile de la grille globale supportant sites fixes (zoo/ville/labo) et widgets fonctionnels (compteurs, upgrade carte). |
| Rôle | Assurer une base de navigation camion (node du graphe), afficher des informations au survol, et porter des modificateurs de traversée (biome). |
| Portée | Carte du monde, immuable structurellement (les cases persistent), contenu majoritairement fixe. |
| Contrainte | Routes et coûts de déplacement calculés à la volée (pas de cache/mémorisation) ; aucun péage/incidence silencieux (message + event). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Survol case monde | hover | x,y | tooltip | affiche coord + type | Event `HOVER_WORLD_CASE` |
| Résoudre contenu | rendu | case | marker | type site/compteur | Event `WORLD_CASE_RENDERED` |
| Calculer coût traversée | path camion | biome | cost | multiplicateur biome | Event `WORLD_TRAVEL_COST_COMPUTED` |
| Marquer route visible | trafic | count | route flag | si trafic > seuil | Event `WORLD_ROUTE_MARKED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Tuile + pin |
| Couleur dominante | selon biome |
| Variantes | `icon_world_tile.png`, `icon_world_pin.png` |
| États | normal, highlighted, route |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Hover | Consultation | - | survol | tooltip | - |
| Clic site | Navigation | case contient site | clic | ouvre panneau | `ZONE_NOT_EXPLORED` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `content.site_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide |
| `content.site_type` | enum \| null | `city` | DB | `zoo/city/lab` |
| `content.counter_type` | enum \| null | `animals_for_sale` | DB | compteur |
| `traffic.trucks_passed` | int | 0 | DB | cumul |
| `travel_cost_multiplier` | float | 1.0 | config | >=1.0 |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Trafic | 0 | count | init |
| Péage | 0 | % | par défaut |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Valeur de passage | 0 | 0..100 | influence routes |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Génération | monde | seed | cases | immuables |
| Marquage routes | trafic | count | flag | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération monde | true | est | case existe |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | jamais |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Routes visibles | Oui | persist reset |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Orage | vitesse camion - | météo |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| montagne | cost + | traversée |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | neige | visuel |
#### 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 |
|---|---|---|
| faune décor | 0 | visuel |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| cycle naturel | 0 | décor |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| baies | décor | région |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| proche ville | valeur passage + | monde | trafic |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| lore terrain | + | descriptif |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| frottement | vitesse - | sable |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| route pavée | +10% | upgrade |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| flux migratoire | visuel | overlay |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| péage | 1 | % | zones |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### 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 |
|---|---:|---|---|
| usure | 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 |
|---|---|---|---|
| zoo | animaux | visite | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| zoo | boutiques | besoins | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| zoo | sortie | fin | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `ZONE_DISCOVERED` | reveal | coord | visible |
| `WORLD_ROUTE_MARKED` | trafic | count | route |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `HOVER_WORLD_CASE` | hover | tooltip |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_CASE_RENDERED` | render | marker |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_TRAVEL_COST_COMPUTED` | route | cost |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_NOT_EXPLORED` | click | denied |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_CLICKS_SITE` | click | open |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 1000 | route pavée +10% | speed |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getTravelCost` | case | float | multiplicateur |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZONE_DISCOVERED` | Info | "Nouvelle zone découverte." | reveal |
| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Explorer | trouver sites | info | tooltip sur hover |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Highlight | outline | hover |
| Tooltip | coord/type | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | cases | iso |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_monde.md` | usage | world |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Hover | souris | tooltip |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `HOVER_WORLD_CASE` | hover | tooltip |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `world_exploration_loop.mp3` | monde | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `hover_soft.mp3` | hover | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `world_tile_highlight.png` | outline | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `biome_texture.png` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `shine_hover.webm` | hover | 0.6s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| glow | hover | léger |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `hover_white` | #FFFFFF | outline |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `world.coords` | Coordonnées X,Y | Coordinates X,Y |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tuile | losange | iso |

View File

@@ -30,11 +30,27 @@ Case spécifique à la grille du zoo, pouvant accueillir les éléments de gesti
Hérite de `Case (Générique)`.
```json
{
"last_visit_time": "timestamp",
"quality_score": "float (0-100)"
"last_visit_time": "timestamp | null",
"visit_count_total": "integer",
"visit_count_day": "integer",
"heatmap_score": "float (0-100)",
"quality_score": "float (0-100)",
"pathing": {
"walkable": "boolean",
"movement_cost": "float (>= 1.0)",
"preferred": "boolean (true for path tiles)"
},
"zoo_specific_flags": [
"enum('premium_spot','near_entry','near_shop','near_enclosure','staff_only')"
]
}
```
### Contraintes (Invariants)
* **Walkable** : une case avec `content_type` bâtiment/animal est généralement `walkable=false` pour les visiteurs (sauf exceptions design).
* **last_visit_time** : mis à jour uniquement quand un visiteur “observe” réellement (pas juste traverse) si la mécanique de “visite” est distincte.
* **movement_cost** : > 1.0 sur herbe/boue, = 1.0 sur chemins, < 1.0 interdit (évite vitesse infinie).
### Caractéristiques Initiales
| Caractéristique | Valeur Initiale |
| :--- | :--- |
@@ -42,17 +58,19 @@ Hérite de `Case (Générique)`.
| Qualité | 100 |
### Scores Initiaux
N/A
**Passages** : 0 (Heatmap de fréquentation).
**Propreté** : 100 (aucun déchet).
**Coût de marche** : 1.2 (herbe) par défaut, 1.0 (chemin) si la case est convertie.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération zoo.
### Conditions de Disparition
N/A
**Jamais** : Une case ne disparaît pas, elle change juste de contenu.
### Hérédité
N/A
**Qualité du Sol** : Un sol bien entretenu (fertilisé) garde ses bonus après un reset partiel.
## 3. Impacts Environnementaux
### Impact Température
@@ -62,40 +80,41 @@ Voir `case_generique.md`.
Voir `case_generique.md`.
### Impact Saisons
N/A
**Neige** : La case devient blanche en hiver (si T° < 0).
### Impact Heure / Jour-Nuit
N/A
**Ombres** : Les ombres des objets sur la case tournent avec le soleil.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Lieu de rencontre** : Les cases "Buissons" favorisent les rencontres.
### Impact Mort
N/A
**Lieu de décès** : Une case où un animal est mort garde une "odeur" (malus stress) pendant 24h.
### Impact Nourriture
N/A
**Pâturage** : Une case herbeuse peut être broutée (devient terreuse).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Vue** : Une case "Point de Vue" (hauteur) augmente l'attractivité des animaux alentour.
### Impact Valeur
N/A
**Emplacement** : Une case proche de l'entrée vaut plus cher (emplacement premium pour boutiques).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Revêtement** : Herbe (Lent), Terre (Moyen), Pavés (Rapide).
### Dépenses (Boutiques/Visiteurs)
N/A
**Nettoyage** : Coût si la case est sale (déchets visiteurs).
### Trajet Visiteurs
N/A
**Obstacle** : Une case occupée par un bâtiment ou de l'eau est infranchissable (sauf pont).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Passage Visiteur** : Met à jour `last_visit_time`.
* **Salissure** : Apparition d'un déchet.
## 7. Progression
### Tableau des Upgrades
@@ -110,10 +129,23 @@ function checkAnimalDisappearance(case):
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `CASE_DIRTY` | Info | "Une case est sale." |
| `PATH_BLOCKED` | Warning | "Chemin bloqué : les visiteurs recalculent leur trajet." |
| `ANIMAL_NOT_VISITED` | Warning | "Un animal n'a pas été observé depuis longtemps." |
# 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)
### Sélection (Action)
**Description UX** : Clic sur une case zoo.
@@ -124,12 +156,463 @@ N/A
**Événements** : `SELECT_ZOO_CASE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Click".
- **Sons** : `select_soft.mp3`.
- **Graphiques** : Cadre sélection.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : Icône Menu Contextuel.
- **Vidéos** : Effet de sélection (contour brillant).
- **Animations** : Rebondissement léger du contenu.
- **Couleurs** : Blanc.
- **Textes** : N/A
- **Textes** : "Case [X,Y]".
- **Formes** : Carré.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case “zoo” : spécialisation de `case_generique` avec contraintes doccupation, métriques de visite, et signaux qualité/propreté. |
| Rôle | Supporter le gameplay de placement (animal/bâtiment), le pathfinding (walkable/cost), et la logique “animal observé” (last_visit_time). |
| Portée | Une tuile de la carte du zoo, identifiée par coordonnées, rendue en isométrie. |
| Contrainte | Mesures dérivées (heatmap, quality_score) calculées à la volée ; pas de fallback : si `content_type` incohérent => log + erreur. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Sélectionner case | clic | x,y | menu contexte | actions selon contenu | Event `SELECT_ZOO_CASE` |
| Résoudre walkable | update terrain | content_type | `pathing.walkable` | bâtiment/animal => false (sauf exceptions) | Event `PATHING_UPDATED` |
| Mettre à jour last_visit_time | visiteur observe | visitor_id | timestamp | observe != traverse | Event `CASE_VISITED` |
| Accumuler heatmap | passage | dt | heatmap_score | 0..100 | Event `HEATMAP_UPDATED` |
| Dégrader propreté | déchets | visitor behavior | cleanliness ↓ | clamp 0..100 | Event `CASE_DIRTY` |
| Mettre à jour qualité | compat animal/terrain | biome/temp | quality_score | signaux visuels | Event `CASE_QUALITY_UPDATED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Tuile losange + marqueur |
| Couleur dominante | dépend biome/terrain |
| Variantes | `icon_tile.png`, `icon_tile_dirty.png` |
| États | `dirty`, `fertilized`, `frozen`, `muddy` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Construire ici | Action | case vide | menu → item → place | occupancy building | `CELL_OCCUPIED` |
| Placer animal | Action | enclos compatible | drag/drop | occupancy animal | `BIOME_INCOMPATIBLE` |
| Nettoyer | Action | sale | outil nettoyage | cleanliness ↑ | `NO_STAFF` |
## Personnage contextuel (événements & interaction)
La case est actionnée via la sélection sur la carte du zoo. Le personnage contextuel attendu est le **joueur actif** (avatar) : voir `avatar_joueur.md`.
### Déclencheurs (exemples)
| Event / Message | Condition | Effet UI personnage |
|---|---|---|
| `SELECT_ZOO_CASE` | clic case | avatar présent dans le panneau contexte |
| `CELL_OCCUPIED` / `BIOME_INCOMPATIBLE` | action refusée | avatar affiche la cause et laction suivante possible |
| `CASE_DIRTY` | case sale | avatar propose CTA “Nettoyer” (si action permise) |
### Skins & thèmes
Le rendu du portrait/overlay suit `theme.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `last_visit_time` | timestamp \| null | - | DB | UTC |
| `visit_count_total` | int | 120 | DB | cumul |
| `visit_count_day` | int | 12 | DB | reset day |
| `heatmap_score` | float | 35.5 | calcul | 0..100 |
| `quality_score` | float | 92.0 | calcul | 0..100 |
| `pathing.walkable` | boolean | true | calcul | dépend contenu |
| `pathing.movement_cost` | float | 1.2 | config | >=1.0 |
| `zoo_specific_flags[]` | enum[] | `near_entry` | DB | - |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Propreté | 100 | pts | init |
| Fertilité | 0 | pts | init |
| Coût marche herbe | 1.2 | coef | default |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Passages | 0 | 0..∞ | heatmap |
| Qualité | 100 | 0..100 | rendu |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | génération map | biome | case | existe toujours |
| Occupation | placement | entity | occupancy | un principal |
| Nettoyage | action | outil | propreté ↑ | clamp |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération zoo | true | est | case créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | case persiste |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Sol fertilisé | Oui | garde bonus soft reset |
| Heatmap | Non | recalcul |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet case | Notes |
|---|---|---|
| < 0°C | flag `frozen` | givre |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| prairie | herbe repousse | nourriture |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | `snowy` | visuel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| nuit | ombres tournent | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| buissons | +5% | proximité enclos |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| odeur | stress + | 24h in-game |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| pâturage | herbe→terre | animal broute |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| point de vue | + | 4 cases | hauteur |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| foule | stress + | densité |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| near_entry | + | premium spot |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| revêtement | vitesse ± | chemin/pavés |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| placement mode | overlay | sortie bébé |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| placement mode | overlay | sortie animal |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| cost | route | A* |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| nettoyage | 5 | coins | si sale |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| maintenance sol | 1 | coin/case | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| déchets | temps | min | propreté |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| passage staff | temps | min | path |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| section dupliquée | 1 | coin | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| hygiène | 1 | coin | lore |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| pâturage | 0 | - | herbe |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| quarantaine | 1 | coin | lore |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| usure | 1 | coin | lore |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| entrée | allées | ticket | spawn |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| allée | enclos | curiosité | observe |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| enclos | boutique | faim | achat |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| allées | sortie | budget 0 | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `CASE_DIRTY` | déchet | coord | flag |
| `PATH_BLOCKED` | obstacle | coord | reroute |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PATHING_UPDATED` | terrain | coûts |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_QUALITY_UPDATED` | compat | rendu |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_VISITED` | observe | last_visit_time |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_REROUTE` | blocage | route |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_CLEANS_TILE` | outil | propreté + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Pavés | 250 | cost marche 1.0 | route |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `checkAnimalDisappearance` | case, now | bool | visite |
| `computeMovementCost` | terrain | float | >=1.0 |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CASE_DIRTY` | Info | "Une case est sale." | déchet |
| `PATH_BLOCKED` | Warning | "Chemin bloqué." | reroute |
| `ANIMAL_NOT_VISITED` | Warning | "Animal non observé." | timeout |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Ouvrir menu case | agir vite | contexte | menu auto-adapté |
| Nettoyer | propreté | outil | raccourci dans menu |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Menu contextuel | actions | selon contenu |
| Highlight | outline | hover/selected |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Tuile | monde | iso |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_zoo.md` | sélection | panneau |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Sélection | clic | menu |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `SELECT_ZOO_CASE` | clic | open |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `select_tile_click.mp3` | sélection | 0.2s | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `select_soft.mp3` | clic | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `tile_outline.png` | highlight | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `context_menu_icon.png` | menu |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `tile_select.webm` | feedback | 0.5s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| bounce contenu | sélection | léger |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `tile_white` | #FFFFFF | outline |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `tile.coords` | Case {x},{y} | Tile {x},{y} |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tuile | losange | iso |

View File

@@ -25,7 +25,10 @@ Bâtiment produisant des points de science/recherche.
"stats": {
"points_generated": "integer",
"last_collection": "timestamp"
}
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -37,7 +40,7 @@ Bâtiment produisant des points de science/recherche.
| Rareté Visible | Niveau 1 (Commun) |
### Scores Initiaux
N/A
**Archives** : 0 découvertes.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -47,36 +50,37 @@ Présent au démarrage.
Indestructible (ou un seul obligatoire).
### Hérédité
N/A
**Archives** : 10% des points de recherche conservés au reset (Savoir accumulé).
## 3. Impacts Environnementaux
### Impact Température
N/A
**Surchauffe** : Production -10% si Canicule (Surchauffe serveurs/cerveaux).
### Impact Milieu (Biome)
N/A
**Stabilité** : Terrain stable requis (pas de marais). Si Marais : Coût construction x2.
### Impact Saisons
N/A
**Rentrée scolaire** : +10% production en Automne (Stagiaires).
**Vacances** : -5% production en Été.
### Impact Heure / Jour-Nuit
Production continue 24h/24.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Étude** : +50 pts recherche à chaque naissance rare dans le zoo.
### Impact Mort
N/A
**Autopsie** : +20 pts recherche à chaque mort (Triste mais utile).
### Impact Nourriture
N/A
**Cafétéria** : Consomme 5 unités nourriture/jour pour le personnel.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Conférences** : +10 Attractivité le week-end (Vulgarisation scientifique).
### Impact Valeur
N/A
**Brevets** : Valeur intrinsèque élevée. Revente impossible (Bien public).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
@@ -92,14 +96,15 @@ N/A
| 7 | 600 |
### Dépenses (Boutiques/Visiteurs)
N/A
**Subventions** : Coût fonctionnement réduit de 50% si Réputation Zoo > 80.
### Trajet Visiteurs
N/A
**Musée** : Si module Musée (Niv 4+), attire visiteurs comme une attraction secondaire.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Découverte** : Déblocage d'une nouvelle zone carte monde.
* **Percée** : Gain immédiat de 500 pts (Aléatoire).
## 7. Progression
### Tableau des Upgrades
@@ -128,9 +133,19 @@ function updateResearch(center):
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `RESEARCH_UNLOCK` | Info | "Nouvelle zone de carte découverte !" |
| `RESEARCH_BOOST` | Info | "Percée scientifique ! +500 pts." |
# 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)
### 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é).
@@ -141,11 +156,11 @@ function updateResearch(center):
**Événements** : `COLLECT_RESEARCH`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Science" (synthé léger).
- **Sons** : `bubble_pop.mp3` ou `sci_fi_bloop.mp3`. **Design ASMR** : "Bloop" liquide ou tintement cristallin.
- **Graphiques** : Icône Fiole bleue/violette.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Particules d'atomes.
- **Vidéos** : Effet de liquide bouillonnant (shader).
- **Animations** : Flottement (bobbing) de l'icône. Trajectoire courbe des points vers le HUD.
- **Couleurs** : Bleu Science #0088FF.
- **Textes** : "+10 RP".
@@ -160,11 +175,11 @@ function updateResearch(center):
**Événements** : `OPEN_RESEARCH`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Ambiance "Laboratoire" (bourdonnement machines).
- **Sons** : `ui_open.mp3`
- **Graphiques** : Style High-Tech / Labo.
- **Images** : `radar_icon.png`.
- **Vidéos** : N/A
- **Vidéos** : Écran de contrôle avec données défilantes.
- **Animations** : Radar qui balaie (décoratif).
- **Couleurs** : Blanc, Gris, Bleu néon.
- **Textes** : "Portée Radar : X km".
@@ -179,12 +194,500 @@ function updateResearch(center):
**Événements** : `UPGRADE_RESEARCH`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Upgrade" futuriste.
- **Sons** : `upgrade_tech.mp3` (son électronique).
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Schéma technique (Blueprint).
- **Images** : Icône Puce Électronique.
- **Vidéos** : Hologramme de construction.
- **Animations** : Flash bleu sur le bâtiment.
- **Couleurs** : Bleu.
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : "Upgrade Terminé".
- **Formes** : Hexagones.
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Production RP | Tick / delta | `level`, mod saison/météo | `research_points +` | Production continue 24h/24 ; modifs cumulables avec caps | Event `RESEARCH_TICK`, compteurs `/h` et `/jour` |
| Déblocage carte | Action joueur | `research_points`, coût | `world_map_unlocks +` | Dépense atomique, refuse si points insuffisants | Event `RESEARCH_SPEND_UNLOCK` |
| Radar offres | Tick visibilité | `range`, `rarity_visible` | UI offre filtrée | La visibilité est une règle daffichage, pas un cache | Event `WORLD_OFFER_VISIBILITY_UPDATED` |
| Musée / conférences | Calendrier | week-end, level | attractivité + | Actif si module/milestone atteint | Event `RESEARCH_TALK` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Fiole / atome / radar |
| Couleur dominante | Bleu science |
| Variantes | `icon_research_flask.png`, `icon_research_atom.png`, `icon_research_radar.png` |
| États | Badge “collectable” (+RP), “boost” (éclair), “surchauffe” (thermo) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Collecter points | Action | points disponibles | Clic bâtiment | RP crédités | `RESEARCH_NOT_READY` |
| Ouvrir détail | Consultation | - | Double clic / bouton “Détails” | panneau stats/upgrade | - |
| Améliorer | Action | coins ≥ coût | Bouton upgrade | level +1 | `INSUFFICIENT_FUNDS` |
| Consommer RP | Action | RP ≥ coût | Arbre/Carte monde → déverrouiller | unlock | `INSUFFICIENT_RESEARCH_POINTS` |
| Affecter chercheurs | Action | slots < 3 | Panel centre → slots | production + | `RESEARCH_CENTER_FULL` |
## Personnage contextuel (événements & interaction)
Voir `chercheur.md`.
### Affichage
Le chercheur saffiche lorsque :
- le module est **actionné** (ouverture du centre, affectation, collecte, upgrade) ;
- un **événement** de recherche survient (gain RP, percée, déverrouillage).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_RESEARCH` | ouverture panel | portrait + production/h + slots |
| `RESEARCH_TICK` / `RESEARCH_UNIT_GAINED` | tick | bulles science + feedback UI |
| `RESEARCH_BOOST` | percée | bulle “Percée” + détails |
| `INSUFFICIENT_RESEARCH_POINTS` | dépense refusée | bulle cause + CTA “Collecter / Attendre” |
### Skins & thèmes
Uniforme et accessoires suivent `theme.md` ; variantes via `inventaire_skins.md` si skins de staff.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid | - | DB | unique |
| `type` | enum | `research_center` | DB | constante |
| `level` | int | 1..7 | DB | clamp |
| `stats.points_generated` | int | 0..∞ | runtime | monotone |
| `stats.last_collection` | timestamp | - | runtime | null au début |
| `production_rate_per_hour` | int | 10..600 | config | selon tableau |
| `range_zoos` | int/string | 10..Tout | config | niveau 7 = Tout |
| `rarity_visible` | int | 1..5 | config | 1=commun, 5=légendaire |
| `assigned_researchers` | uuid[] | max 3 | runtime | cf. `chercheur.md` |
| `grid` | object | `{x,y}` | runtime | position |
| `iso_x/iso_y` | int | - | rendu | projection |
| `z_index` | int | - | rendu | profondeur |
| `hitbox` | enum | `base_sprite` | rendu | click base |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Production | 10 | RP/heure | niv 1 |
| Portée radar | 10 | zoos | proximité |
| Rareté visible | 1 | niveau | commun |
| Slots chercheurs | 0/3 | slots | activés si feature employés |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Archives découvertes | 0 | 0..∞ | progression méta |
| RP cumulés | 0 | 0..∞ | déverrouillages |
| Boost actif | 0 | 0/1 | modifie production |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | début partie | seed | bâtiment | présent au démarrage |
| Production | tick | delta | RP + | 24h/24 |
| Collecte | clic | points | RP global + | atomicité |
| Disparition | supprimé compte | - | supprimé | indestructible en jeu |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Début partie | true | est | présent |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte supprimé | true | est | supprimé |
| Destruction | - | interdit | refus |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Archives | Oui | 10% des RP conservés |
| Level | Oui | persiste |
| RP non collectés | Non | convertis/collectés au login (lazy update) |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Modificateur |
|---|---|---|
| Canicule | production - | -10% |
| Tempérée | neutre | 0% |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Règle |
|---|---|---|
| Marais | coût construction | x2 |
| Terrain stable | normal | x1 |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Modificateur |
|---|---|---|
| Automne | rentrée | +10% |
| Été | vacances | -5% |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Règle |
|---|---|---|
| Jour | production | normale |
| Nuit | production | normale (24h/24) |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Déclencheur | Gain RP | Condition |
|---|---:|---|
| Naissance rare | +50 | rareté ≥ 3 |
#### Impact Mort (tableau détaillé)
| Déclencheur | Gain RP | Condition |
|---|---:|---|
| Mort | +20 | autopsie active |
#### Impact Nourriture (tableau détaillé)
| Poste | Consommation | Unité | Condition |
|---|---:|---|---|
| Cafétéria | 5 | unités/jour | personnel centre |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Conférences | +10 | zoo | week-end |
| Musée module | + | local | niv 4+ |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Aucune interaction directe | aucun | centre nest pas un enclos |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Brevets | valeur élevée | non revendable |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison matériel | indirect | si feature équipement |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tech incub | accélère | si recherche débloquée |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Niveau | Points / Heure | Unité | Notes |
|---|---:|---|---|
| 1 | 10 | RP/h | base |
| 2 | 20 | RP/h | - |
| 3 | 40 | RP/h | - |
| 4 | 80 | RP/h | - |
| 5 | 150 | RP/h | - |
| 6 | 300 | RP/h | - |
| 7 | 600 | RP/h | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | indirect | via tech |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps de séjour | + | musée/conférences |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Souvenirs science | stock | coins | boutique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Conférences | 0 | - | included |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaires chercheurs | variable | coins/jour | selon `chercheur.md` |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Cafétéria | 5 | unités/jour | centre |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | attractivité | centre augmente attractivité |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Centre | Enclos | curiosité | détour (si musée) |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Centre | Boutique | souvenirs | dépense + |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Centre | halo science | visite guidée |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `RESEARCH_TICK` | tick | amount | RP+ |
| `RESEARCH_SPEND_UNLOCK` | spend | cost | unlock |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_OFFER_VISIBILITY_UPDATED` | level/range | UI filtre |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `RESEARCH_BOOST` | percée | +500 RP |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `RESEARCH_TALK` | week-end | attractivité + |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `VISITOR_INTEREST_SCIENCE` | musée | stay + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `COLLECT_RESEARCH` | clic | collecte |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût (Pièces) | Production | Portée (Zoos) | Rareté Visible | Notes |
|---|---:|---:|---|---:|---|
| 1 | 0 | 10 | 10 | 1 | base |
| 2 | 300 | 20 | 20 | 2 | - |
| 3 | 600 | 40 | 30 | 2 | - |
| 4 | 1200 | 80 | 50 | 3 | musée possible |
| 5 | 2400 | 150 | 80 | 3 | - |
| 6 | 4800 | 300 | 120 | 4 | - |
| 7 | 9600 | 600 | Tout | 5 | max |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateResearch` | center, delta | rp | basé sur `level` |
| `updateWorldMapVisibility` | range, rarity | UI | pas de cache |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `RESEARCH_UNLOCK` | Info | "Nouvelle zone de carte découverte !" | spend ok |
| `RESEARCH_BOOST` | Info | "Percée scientifique ! +500 pts." | random proc |
| `INSUFFICIENT_RESEARCH_POINTS` | Warning | "Points de recherche insuffisants." | spend fail |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Collecter | récupérer RP | oubli | badge + clic direct |
| Upgrader | augmenter prod | coût | comparaison “actuel/suivant” |
| Déverrouiller | étendre monde | navigation | deep-link carte monde |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Badge RP | +RP | visible quand dispo |
| Panel centre | prod/h, portée, rareté | level 1..7 |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | bâtiment | clic base |
| HUD | compteur RP | global |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Carte monde | portée radar | overlay |
| Achats upgrades | coût coins | - |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir panel | clic | panel |
| Aller carte monde | bouton | navigation |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_RESEARCH` | clic | ouvre |
| `UPGRADE_RESEARCH` | bouton | upgrade |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `research_center_loop.mp3` | ambiance | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `sci_fi_bloop.mp3` | collecte | faible |
| `upgrade_tech.mp3` | upgrade | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `fx_atoms.png` | overlay | isométrique |
| `radar_sweep.png` | radar | décoratif |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `radar_icon.png` | panel |
| `icon_research_atom.png` | HUD |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `hologram_upgrade.webm` | upgrade | 1.2s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| icône bobbing | points dispo | loop |
| trajectoire points | collecte | 0.6s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `research_primary` | #0088FF | UI |
| `research_neon` | #00E5FF | accent |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `research.collect` | Collecter | Collect |
| `research.upgrade` | Améliorer | Upgrade |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Badge RP | cercle | lisible |
| Panel | bottom sheet | standard |

527
docs/specs/chemin.md Normal file
View File

@@ -0,0 +1,527 @@
# Spécifications : Chemin
## Définition
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).
## Fonctions
* **Circulation :** Permet le déplacement des entités (Visiteurs, Staff).
* **Connexion :** Relie les bâtiments entre eux pour former un réseau accessible.
* **Esthétique :** Améliore l'aspect visuel du zoo.
# Annexes Techniques
## 1. Données et États
### Modèle de Données (JSON)
```json
{
"type": "path",
"material": "gravel",
"x": 10,
"y": 12,
"connected_neighbors": ["N", "S", "E"],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
## 2. Règles Métier
* **Connexion Automatique :** Les textures des chemins se connectent automatiquement aux chemins adjacents (Auto-tiling).
* **Vitesse :** Bonus de vitesse de déplacement pour les entités sur les chemins.
# 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.
## 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).
## Définition
| Champ | Valeur |
|---|---|
| Concept | Case “chemin” : tuile de circulation sur grille isométrique, auto-connectée (auto-tiling) pour former un réseau. |
| Rôle | Supporter le pathfinding visiteurs/staff, améliorer la vitesse, et garantir la connectivité entre points dintérêt. |
| Portée | Tuile placée sur `case_zoo`, utilisée par `visiteur` et employés. |
| Contrainte | Pas de cache/mémorisation des routes : chemins calculés à la volée (A*/Dijkstra) ; pas de fallback silencieux si réseau cassé (message + log). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Placer chemin | action build | coord, material | tuile chemin | interdit sur case occupée | Event `PATH_PLACED` |
| Supprimer chemin | action delete | coord | tuile vide | interdit si bloque sortie (option) | Event `PATH_REMOVED` |
| Auto-tiling | placement/suppression | voisins N/E/S/W | sprite variant | recalcul local (voisinage) | Event `PATH_AUTOTILE_UPDATED` |
| Bonus vitesse | déplacement entité | type entité | speed multiplier | appliqué uniquement sur chemin | Event `PATH_SPEED_APPLIED` |
| Connectivité | navigation | graph chemins | route | route recalculée à la volée | Event `PATH_ROUTE_COMPUTED` |
| Esthétique | rendu | material + neighbors | sprite | variations (terre/gravier/pavés) | - |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône pavés / empreintes |
| Couleur dominante | Beige/gris selon matériau |
| Variantes | `icon_path_pavers.png`, `icon_path_footprints.png` |
| États | normal, hover, invalid (rouge) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Construire chemin | Action | mode build | sélectionner chemin → cliquer cases | chemins posés | `CELL_OCCUPIED` |
| Choisir matériau | Action | build | dropdown | material appliqué | - |
| Supprimer | Action | mode delete | clic chemin | supprimé | `CANNOT_REMOVE_BLOCKING` |
| Prévisualiser auto-tiling | Consultation | build | survol | ghost variant | - |
## Personnage contextuel (événements & interaction)
Le module “Chemin” affiche prioritairement un **visiteur** (homme/femme) comme personnage contextuel (voir `visiteur.md`) afin de rendre visibles les conséquences de connectivité, de blocage et de flux.
### Affichage
Le visiteur saffiche lorsque :
- le module est **actionné** (entrée en mode build chemins, pose/suppression, sélection matériau) ;
- un **événement** lié à la connectivité survient (route recalculée, blocage daccès, saturation locale).
### Déclencheurs (exemples)
| Event / Message | Condition | Effet UI personnage |
|---|---|---|
| `ENTER_PATH_BUILD_MODE` | activation build | portrait visiteur + rappel “connectivité” |
| `CELL_OCCUPIED` | pose invalide | bulle : cause (case occupée) |
| `CANNOT_REMOVE_BLOCKING` | suppression bloquante | bulle : cause (accès bloqué) + CTA annuler |
| `PATH_ROUTE_COMPUTED` | route recalculée | bulle : “Itinéraire mis à jour” (info) |
### Interactions utilisateur
- Clic sur le personnage : ouvre le panneau “connectivité”/aide du mode chemin (si présent) ou met en surbrillance les zones impactées (entrée, POI).
### Skins & thèmes
Le visiteur suit `theme.md`. Les variantes homme/femme sont des skins/variantes de visiteurs (voir `visiteur.md` + `inventaire_skins.md` si les visiteurs sont skinnables).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `type` | string | `path` | DB | constant |
| `material` | string | `gravel` | DB/config | enum |
| `grid.x` | int | 10 | DB | coord |
| `grid.y` | int | 12 | DB | coord |
| `connected_neighbors` | string[] | `["N","S","E"]` | calcul | à la volée |
| `iso_x` | int | 120 | calcul/DB | rendu |
| `iso_y` | int | 88 | calcul/DB | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Bonus vitesse visiteurs | 1.15 | coef | sur chemin |
| Bonus vitesse staff | 1.25 | coef | sur chemin |
| Coût pose | 1 | coins | par tuile (exemple) |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Connectivité | 0 | 0..100 | accessibilité |
| Chemins posés | 0 | 0..∞ | progression build |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | build | coord | path | autotile local |
| Mise à jour | voisin change | voisins | sprite | cohérence |
| Disparition | delete | coord | vide | graph maj |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat/placement | true | est | chemin créé |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Suppression | true | est | chemin retiré |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Matériau | Oui | persiste sur tuile |
| Connectivité | Non | recalcul à la volée |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet chemin | Notes |
|---|---|---|
| Neige | visuel + glissant léger | option saisonnière |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet chemin | Notes |
|---|---|---|
| Boue | vitesse - si pas pavés | material “terre” |
#### Impact Saisons (tableau détaillé)
| Saison | Effet chemin | Notes |
|---|---|---|
| Hiver | variante sprite | neige |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet chemin | Notes |
|---|---|---|
| Nuit | éclairage lampadaires | via objets |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Embouteillage | risque incidents | trop dense |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Accès boutiques | consommation ↑ | chemin connecte |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Chemins propres | + | zoo | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Passage trop proche | stress + | enclos sans barrière |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Pavés premium | + | cosmétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Itinéraire camion | préfère chemins | si autorisé |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Accès nurserie | temps staff - | chemin connecté |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| File visiteurs | plus fluide | chemin large |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Staff | déplacement + | chemin |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Visiteurs | vitesse + | chemin |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance | 1 | coins / tuile / jour | option |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Temps déplacement | - | min | chemins |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | ouverture | route |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allée | Enclos | curiosité | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | route |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billetterie | Allées | entrée | flux |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `PATH_PLACED` | build | coord, material | tuile |
| `PATH_REMOVED` | delete | coord | tuile |
| `PATH_AUTOTILE_UPDATED` | voisin | coord | sprite |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PATH_ROUTE_COMPUTED` | visite | route | navigation |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_MOVES` | tick | speed bonus |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_BUILDS_PATH` | build | réseau |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Terre | 0 | base | - |
| Gravier | 100 | vitesse + | matériau |
| Pavés | 250 | vitesse ++ | matériau |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeNeighborsMask` | grid, coord | mask | N/E/S/W |
| `selectAutotileVariant` | material, mask | sprite_id | atlas |
| `computeSpeedMultiplier` | entity, tile | float | sur chemin |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CELL_OCCUPIED` | Warning | "Case occupée." | placement |
| `CANNOT_REMOVE_BLOCKING` | Warning | "Suppression impossible : bloque un accès." | option |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Tracer une allée | connecter zones | répétition | drag paint “pinceau” |
| Changer matériau | esthétique | navigation | quick switch |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Palette matériaux | terre/gravier/pavés | actif |
| Curseur pinceau | taille 1..3 | preview |
| Ghost tile | variant | valid/invalid |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Mode build | barre | accès direct |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | pathfinding | routes |
| `zoo.md` | grille | coords |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Construire | build → chemin | pinceau |
| Supprimer | build → delete | gomme |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `ENTER_PATH_BUILD_MODE` | clic | palette |
| `PAINT_PATH` | drag | pose |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `build_mode_loop.mp3` | build | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `path_place.mp3` | pose | bas |
| `path_remove.mp3` | retrait | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `path_autotile_atlas.png` | sprites | atlas |
| `path_preview_overlay.png` | ghost | alpha |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `path_material_icon_set.png` | palette |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `path_paint.webm` | tuto | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| sparkle pavés | hover | subtil |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `path_beige` | #D7C7A4 | terre |
| `path_gray` | #9E9E9E | pavés |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `path.title` | Chemin | Path |
| `path.material` | Matériau | Material |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Palette | rectangles | clairs |

534
docs/specs/chercheur.md Normal file
View File

@@ -0,0 +1,534 @@
# Chercheur
## 1. Définition
Employé travaillant dans le Centre de Recherche pour générer des points de science (ou débloquer des technologies). Il est distinct du personnel de laboratoire (qui s'occupe de la génétique/bébés). Achetable avec des pièces.
## 2. Fonctions
* **Recherche :** Génère passivement des points de recherche.
* **Découverte :** Accélère le déblocage de nouveaux animaux, bâtiments ou améliorations.
* **Collaboration :** Travaille plus efficacement en équipe (bonus de synergie).
## 3. Icone
* **Représentation :** Microscope ou Atome.
* **Couleur dominante :** Bleu ciel et Blanc.
## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces.
* **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
### Données (JSON)
```json
{
"employee_id": "researcher_01",
"type": "chercheur",
"name": "Dr. Curie",
"salary": 60,
"hire_cost": 600,
"assigned_building": "research_center_01",
"fatigue_level": "float (0-100)",
"current_task": "enum (IDLE, RESEARCHING, TRAINING)",
"stats": {
"intelligence": 10, // Points de recherche par cycle
"specialty": "genetics" // Bonus dans un domaine
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* **Limite :** Maximum 3 chercheurs par bâtiment "Centre de Recherche".
* **Fatigue :** L'efficacité diminue si la fatigue > 80%. Doit prendre des pauses.
* **Synergie :** 3 chercheurs de la même spécialité dans un centre = Bonus +20%.
## 6. Annexes UX/UI
* **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.
* **Feedback :** Bulles de science (fioles, atomes) s'élevant du bâtiment quand ils travaillent.
## Affichage contextuel (modules)
Le chercheur est le personnage contextuel du `centre_recherche.md` lors de louverture du panneau, de lassignation et des événements de production/déverrouillage.
# 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.
## Définition
| Champ | Valeur |
|---|---|
| Entité | Employé “Chercheur” |
| Rôle | Générer des unités de recherche (science) via `centre_recherche.md` ; distinct du laboratoire de la carte monde. |
| Capacité | Max 3 chercheurs par centre de recherche (contrainte métier). |
| Vue | Isométrique 2.5D, sprite 4 directions, sélection base-sprite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Production recherche | Tick centre | `intelligence`, fatigue, bonus centre | `research_units +` | Production réduite si fatigue élevée ; pause obligatoire | Event `RESEARCH_TICK`, métriques /jour |
| Spécialisation | Assignation | `specialty` | bonus ciblé | Bonus appliqué aux recherches du domaine | Event `RESEARCH_SPECIALTY_APPLIED` |
| Synergie | 3 chercheurs | spécialité identique | +20% | Uniquement si même centre | Event `RESEARCH_SYNERGY_ON/OFF` |
| Formation | Action joueur | coût, temps | `intelligence +` | Immobilise le chercheur pendant training | Event `RESEARCHER_TRAIN_START/END` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Microscope / atome |
| Couleur dominante | Bleu ciel / blanc |
| Variantes | `icon_research_microscope.png`, `icon_research_atom.png` |
| États | Badge “en recherche” (fioles), “en stage” (diplôme), “fatigué” (Zzz) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Recruter | Action | coins ≥ `hire_cost` | Menu Employés → Chercheur → Confirmer | Chercheur créé (non assigné) | `INSUFFICIENT_FUNDS`, `EMPLOYEE_CAP_REACHED` |
| Assigner au centre | Action | centre dispo, slots < 3 | Centre → Slots → Sélectionner → Assigner | Prod active | `RESEARCH_CENTER_FULL`, `NO_PATH` |
| Démarrer formation | Action | coins ≥ coût, centre présent | Panel chercheur → “Former” → Confirmer | état `TRAINING` | `COOLDOWN_ACTIVE`, `INSUFFICIENT_FUNDS` |
| Changer spécialité | Action (si permis) | stage débloqué | Panel → spécialité | bonus différent | `SPECIALTY_LOCKED` |
| Inspecter production | Consultation | - | Centre → onglet Recherche | graphiques / taux | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `employee_id` | string | `researcher_01` | DB | Unique |
| `type` | enum | `chercheur` | DB | Constante |
| `salary` | int | 60 | config | coins/jour |
| `hire_cost` | int | 600 | config | one-shot |
| `assigned_building` | uuid/string | `research_center_01` | runtime | null si non assigné |
| `fatigue_level` | float | 0..100 | runtime | réduit prod |
| `current_task` | enum | `IDLE|RESEARCHING|TRAINING` | runtime | transitions contrôlées |
| `stats.intelligence` | int | 10 | DB | unités/cycle |
| `stats.specialty` | enum | `genetics|ecology|marketing|logistics` | DB | 1 parmi n |
| `grid` | object | `{x,y}` | runtime | position (si visible) |
| `iso_x/iso_y` | int | - | rendu | projection |
| `z_index` | int | - | rendu | profondeur |
| `hitbox` | enum | `base_sprite` | rendu | click base |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Production brute | 10 | units/cycle | `intelligence` |
| Fatigue départ | 0 | % | - |
| Seuil fatigue malus | 80 | % | prod -30% au-delà |
| Pause | 15 | min in-game | après cycle long |
| Synergie | +20% | prod | si 3 mêmes spécialités |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Units/jour | 0 | 0..∞ | progression recherches |
| Efficacité centre | 100 | 0..200 | résume bonus/malus |
| Coût salarial/jour | 60 | 0..∞ | dépenses employé |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | embauche | coins | entité | `IDLE` |
| Assignation | action centre | slot dispo | `RESEARCHING` | max 3/centre |
| Training | action joueur | coins + temps | `intelligence +` | immobilisé |
| Disparition | licenciement (si prévu) | - | suppression | stop production |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat | coins ≥ `hire_cost` | vrai | création |
| Centre existant | optionnel | - | assignation possible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Licenciement | action joueur | vrai | suppression |
| Zoo supprimé | - | vrai | suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Spécialité | Oui | persistée |
| Intelligence | Oui | persistée |
| Fatigue | Non | recalcul / reset quotidien |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Température | Effet sur prod | Condition |
|---|---|---|
| Extrême | -10% | si bâtiment non amélioré (isolation) |
| Tempéré | 0 | - |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Ville/route | neutre | centre en intérieur |
| Zone humide | malus | humidité (option visuelle) |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Modificateur |
|---|---|---|
| Hiver | chauffage coûte + | prod stable |
| Été | canicule | fatigue +5%/jour |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Règle |
|---|---|---|
| Jour | prod normale | - |
| Nuit | prod réduite | -20% si “horaires normaux”, 0% si centre fermé |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet | Condition |
|---|---|---|
| Recherche “fertilité” | +taux | si tech débloquée |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Accident labo | none | chercheur ≠ labo monde |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Café (option) | fatigue - | mécanique employé |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Centre actif visible | +5 | 2 cases | bulles science |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Aucun effet direct | aucun | le chercheur ninteragit pas directement avec les animaux |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Recherche débloquée | + | débloque upgrades, économie |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison composants | - | si mécanique ravitaillement centre |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Recherche incub | + | si tech appliquée |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Production units | + | intelligence/synergie |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | indirect | via tech |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | indirect | via attractivité centre |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Vente “science kit” | +revenu | coins | boutique souvenirs |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaire | `salary` | coins/jour | actif |
| Stage | 300 | coins | par formation |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | attractivité/réputation | chercheur indirect |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Centre | Enclos | curiosité | détour si FX visibles |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Centre | Boutique | achat souvenir | dépense + |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Centre | halo science | visite guidée |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `RESEARCH_UNIT_GAINED` | tick | amount | progression |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `BUILDING_ACTIVE_FX` | centre actif | bulles science |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `RESEARCH_CENTER_FULL` | slots=3 | bloque assignation |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_INTEREST_SCIENCE` | centre proche | temps séjour + |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_PHOTO` | FX visibles | satisfaction + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_START_TRAINING` | bouton | start stage |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | recrutement | base |
| 2 | 1500 | intelligence +2 | prod + |
| 3 | 3000 | fatigue -10% | endurance |
| 4 | 6000 | spécialités avancées | nouveaux domaines |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `update_researcher` | fatigue, intelligence | units | clamp + pause |
| `apply_synergy` | team | multiplier | 3 mêmes |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `RESEARCH_CENTER_FULL` | Warning | "Centre complet." | slots=3 |
| `RESEARCHER_FATIGUED` | Warning | "Chercheur fatigué." | fatigue>80 |
| `RESEARCH_UNLOCKED` | Info | "Recherche débloquée." | units seuil |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Assigner chercheurs | augmenter production | slots | drag & drop dans slots |
| Former | améliorer prod | coût/temps | bouton direct sur carte employé |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panel centre | slots 0/3, prod/h | actifs/plein |
| Carte chercheur | spécialité, fatigue | researching/training |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Menu Employés | HUD | liste |
| Centre recherche | carte | sélection |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Système unités | accumulation | pas de cache |
| Upgrades | coût/effet | via `achat_upgrade_*` |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir centre | clic bâtiment | panel |
| Assigner | slot → choisir | start prod |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_RESEARCH_CENTER` | clic centre | panel |
| `ASSIGN_RESEARCHER` | drag/drop | assign |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `research_center_loop.mp3` | ambiance centre | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `science_bubble.mp3` | FX | faible |
| `ui_assign.mp3` | assignation | faible |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `fx_atoms.png` | bulles science | overlay |
| `researcher_sprite_[dir].png` | sprite | 4 dirs |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `icon_microscope.png` | icône |
| `portrait_researcher.png` | panel |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `research_unlock.webm` | pop unlock | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fioles qui montent | production | loop |
| badge “+units” | tick | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `research_primary` | #6EC6FF | UI |
| `research_accent` | #FFFFFF | highlights |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `research.assign` | Assigner | Assign |
| `research.train` | Former | Train |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Slots employés | cartes | drag target |
| Badge unités | pill | lisible |

View File

@@ -29,12 +29,15 @@ Mécanisme de vente entre joueurs/bots sur la Carte du Monde.
"highest_bidder_id": "uuid | null",
"end_time": "timestamp",
"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"
}
```
### Caractéristiques Initiales
N/A
**Durée par défaut** : 24h.
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -59,10 +62,19 @@ function finalizeAuction(auction):
| :--- | :--- | :--- |
| `BID_PLACED` | Info | "Offre placée avec succès." |
| `OUTBID` | Alerte | "Vous avez été surenchéri !" |
| `AUCTION_WON` | Succès | "Vous avez remporté l'enchère ! Livraison en cours..." |
| `AUCTION_WON` | Succès | "Vous avez remporté l'enchère ! Livraison en cours." |
# 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)
### Consultation des Offres (Consultation)
**Description UX** : Le joueur survole les zoos sur la carte du monde pour voir les offres.
@@ -73,11 +85,11 @@ function finalizeAuction(auction):
**Événements** : `HOVER_OFFER`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_market_hover.mp3` (jingle discret optionnel).
- **Sons** : `hover_soft.mp3`.
- **Graphiques** : Cadre Offre (Doré si rare).
- **Images** : Icône Animal.
- **Vidéos** : N/A
- **Vidéos** : `offer_hover_glow.webm` (0.6s loop, optionnel).
- **Animations** : Prix qui clignote si nouvelle enchère.
- **Couleurs** : Vert (Abordable), Rouge (Trop cher).
- **Textes** : "Lapin Rare - 500$".
@@ -92,15 +104,15 @@ function finalizeAuction(auction):
**Événements** : `PLACE_BID`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_market_bid.mp3` (jingle court).
- **Sons** : `bid_placed.mp3` (bruit de marteau).
- **Graphiques** : Icône Marteau.
- **Images** : Portrait Animal HD.
- **Vidéos** : N/A
- **Vidéos** : `bid_counter_up.webm` (0.8s loop, optionnel).
- **Animations** : Compteur prix qui monte.
- **Couleurs** : Bouton Vert.
- **Textes** : "Enchérir".
- **Formes** : N/A
- **Formes** : Boutons rapides (+10/+50/+100), champ numérique.
### Sablier de Validation (Attente)
**Description UX** : L'enchère est remportée, le transfert est en cours (10 min).
@@ -108,19 +120,19 @@ function finalizeAuction(auction):
**Notification Push** : "Enchère remportée ! Animal livré." à la fin du timer.
**Emplacement** : Carte Monde & HUD.
**Intégration** : Statut "En cours".
**Navigation** : N/A
**Navigation** : Clic sur sablier dans HUD → ouvre le détail transaction (temps restant, statut, destination).
**Événements** : `TIMER_START`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_timer_soft.mp3` (optionnel, très discret).
- **Sons** : `tick_tock.mp3` (ambiance très discrète si focus).
- **Graphiques** : Sablier animé.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `icon_hourglass.png`, `badge_pending.png`.
- **Vidéos** : `hourglass_flow.webm` (1s loop, optionnel).
- **Animations** : Sable qui coule.
- **Couleurs** : Orange.
- **Textes** : "Validation : MM:SS".
- **Formes** : N/A
- **Formes** : Badge rond (HUD), icône sur slot.
### Activité "Clic" (Gameplay)
**Description UX** : Pendant les 10 min, le joueur peut cliquer sur le sablier pour "accélérer" (symboliquement) ou gagner un petit bonus (XP/Pièce) pour patienter.
@@ -131,12 +143,12 @@ function finalizeAuction(auction):
**Événements** : `CLICK_HOURGLASS`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_click_reward.mp3` (jingle court).
- **Sons** : `sand_shake.mp3`. **Design ASMR** : Bruit de sable qui crisse ou petit choc mat.
- **Graphiques** : Particules de sable.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `sand_particle.png`.
- **Vidéos** : `hourglass_shake.webm` (0.5s non loop, optionnel).
- **Animations** : Secousse.
- **Couleurs** : N/A
- **Couleurs** : Doré.
- **Textes** : "+1 XP".
- **Formes** : N/A
- **Formes** : Bouton rond (tap cible), badge sablier (HUD).

101
docs/specs/enclos.md Normal file
View File

@@ -0,0 +1,101 @@
# Enclos
## 1. Définition
Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'enclos est constitué de cases de terrain modifiées pour répondre aux besoins des animaux (biome, végétation, eau). Une caractéristique clé est la fusion automatique des cases adjacentes contenant le même animal pour former un grand enclos unique.
## 2. Fonctions
* **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 (Auto-tiling).
* **Visibilité :** Permet aux visiteurs d'observer les animaux (augmente l'attractivité).
* **Sécurité :** Empêche les animaux de s'enfuir (si entretenu).
## 5. Annexes Techniques
### Données (JSON)
```json
{
"enclosure_id": "uuid",
"owner_zoo_id": "uuid",
"created_at": "timestamp",
"updated_at": "timestamp",
"animal_type": "string (ref inventaire_animaux)",
"biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
"cells": [
{"x": 10, "y": 10},
{"x": 10, "y": 11},
{"x": 11, "y": 10},
{"x": 11, "y": 11}
],
"area": 4,
"capacity": 6,
"current_population": 3,
"cleanliness": 85,
"fence_health": 100,
"decoration_score": 15,
"perimeter_edges": "integer",
"fence_style_id": "string (skin/theme)",
"sign": {
"enabled": "boolean",
"sign_id": "uuid | null"
},
"render": {
"auto_tile_key": "string",
"fence_segments": [
{
"edge": "enum('N','S','E','W')",
"x": "integer",
"y": "integer",
"variant": "string",
"occluder": "boolean"
}
]
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* **Algorithme de Fusion :** À chaque placement/suppression de case enclos, recalculer les composants connectés (Connected Components) pour mettre à jour les murs.
* **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.
* **Cohérence espèce** : un composant connecté ne peut contenir quun `animal_type` nominal. Si une case est convertie, elle déclenche un split/merge.
* **Capacité** : `capacity = floor(area * capacity_per_tile)``capacity_per_tile` dépend de lespèce (valeur par défaut 1.5).
* **Propreté** : décroît par présence animale et par visiteurs proches ; remonte via employé (soigneur/nourisseur selon design) et/ou nettoyage.
### Cas limites (Edge cases)
* **Split** : retirer une case centrale peut séparer lenclos en 2 composants → créer 2 enclos (nouveaux `enclosure_id`) et recalculer clôtures/affiches.
* **Pont/chemin** : une case chemin/pont adjacente ne fait pas partie de lenclos mais influence la pose de laffiche (priorité visibilité).
* **Occlusion** : si un segment de clôture masque lanimal (S/E), utiliser variante basse ou alpha réduit.
## 6. 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.
### 0. Direction Artistique & Vue
* **Note** : ce bloc double un autre bloc similaire ; les deux sont conservés. Celui-ci précise les règles de grille/profondeur.
* **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.
### Interactions (sélection / inspection)
* **Sélection enclos** : clic sur une clôture ou sur une case enclos ouvre un panneau “Enclos”.
* **Panneau** : espèce, population/capacité, propreté, santé clôture, bonus déco, bouton “Améliorer clôture”, bouton “Déplacer affiche” (si optionnel).
* **Erreurs** : tentative dajouter un animal dune autre espèce dans un enclos fusionné → refus + message.

View File

@@ -23,10 +23,10 @@ Liste d'enums ou flags dans l'objet `Animal` ou `Case`.
`visual_states: ["frozen", "hungry"]`
### Caractéristiques Initiales
N/A
**État par défaut** : Neutre.
### Scores Initiaux
N/A
**Compteur États** : 0 actifs.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -36,7 +36,7 @@ Déclenchés par les seuils de stats (Santé, Faim, T°).
Retour à la normale des stats.
### Hérédité
N/A
**Sensibilité** : Les enfants héritent de la résistance aux états (Froid/Chaud) des parents.
## 3. Impacts Environnementaux
### Impact Température
@@ -46,10 +46,10 @@ Déclencheurs Froid/Chaud.
Déclencheurs Mauvais Biome.
### Impact Saisons
N/A
**Hiver** : Augmente la fréquence de l'état "Froid".
### Impact Heure / Jour-Nuit
N/A
**Nuit** : Augmente la fréquence de l'état "Sommeil".
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
@@ -65,25 +65,41 @@ Déclencheur Faim.
Les états négatifs (Sale, Malade) repoussent les visiteurs.
### Impact Valeur
N/A
**Malus** : Un animal avec un état négatif vaut -20% à la vente.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Contexte | État | Effet vitesse | Condition | Notes |
|---|---|---:|---|---|
| Visiteurs | “Confort OK” | x1.0 | Température 530°C, sol non boueux | Vitesse nominale. |
| Visiteurs | “Stress” | x0.85 | Animal malade visible / zone sale | Les visiteurs ralentissent pour observer/éviter. |
| Animaux | “Faim” | x0.7 | `hunger > 70` | Animation lente, impact visuel. |
| Animaux | “Heureux” | x1.1 | Conditions idéales + visite récente | Sautillements, micro-boost. |
### Dépenses (Boutiques/Visiteurs)
N/A
| État | Coût | Unité | Déclencheur | Règle |
|---|---:|---|---|---|
| “Sale” | 10 | pièces / case / jour | Déchets non ramassés | Nettoyage automatique si employé dédié, sinon manuel. |
| “Malade” | 50 | pièces / animal | Maladie / mort proche | Frais vétérinaires ; si non payés, risque de mort augmente. |
| “T° critique” | 10 | pièces / degré / jour | Chauffage/Clim régule | Dépend de `temperature.md` (régulateurs). |
### Trajet Visiteurs
N/A
**Fuite** : Les visiteurs évitent les animaux avec l'état "Malade".
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `STATE_APPLIED` | Ajout dun flag visuel | Met à jour rendu | Instantané |
| `STATE_CLEARED` | Retour à la normale | Retire overlay/particules | Instantané |
| `STATE_CRITICAL` | Seuil critique franchi | Alerte + focus optionnel | Tant que critique |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Effet |
| :--- | :--- |
| 1 | Détection simple |
| 2 | Détection avancée (Prévision) |
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -95,26 +111,37 @@ elif animal.temp > animal.idealTemp + 10:
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `STATE_CRITICAL` | Alerte | "État critique détecté !" |
# 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)
### Lecture Immédiate (Passif)
**Description UX** : Le joueur comprend la situation d'un coup d'œil sans ouvrir de menu.
**Description UI** : Pas d'UI. Tout passe par le rendu graphique des entités.
**Emplacement** : Grille Zoo.
**Intégration** : Moteur de rendu.
**Navigation** : N/A
**Navigation** : Automatique.
**Événements** : `STATE_CHANGE`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Nappe sonore (battement cœur).
- **Sons** : `heartbeat.mp3`.
- **Graphiques** : Shaders (Color Overlay), Systèmes de particules.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône État.
- **Vidéos** : Shader overlay.
- **Animations** : Animations spécifiques (Trembler, Boiter).
- **Couleurs** : Code universel (Bleu=Froid, Rouge=Chaud, Vert=OK, Jaune=Malade).
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : Nom de l'état.
- **Formes** : Icône flottante.

57
docs/specs/guichetiere.md Normal file
View File

@@ -0,0 +1,57 @@
# Guichetière (Billetterie)
## 1. Définition
Personnage de service associé à la billetterie. Il matérialise la vente de tickets (file, contrôle capacité) et sert de personnage contextuel lors des événements dentrée/saturation/VIP.
## 2. Fonctions
* **Traitement file** : Représente le débit du guichet (entrées par tick).
* **Gestion saturation** : Signale `ZOO_FULL`, `QUEUE_LONG`.
* **Accueil visiteurs** : Déclenche des feedbacks visuels cohérents avec le thème.
## 3. Icone
* **Représentation :** Ticket + tampon.
* **Couleur dominante :** Rouge (ticket) + or (pièces).
## 4. Interactions
* **Clic billetterie** : ouvre le panneau stats (prix, capacité, file).
* **Clic sur alerte** : deep-link vers la billetterie et met en avant la cause (capacité, file).
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "ticket_clerk_01",
"type": "guichetiere",
"name": "Nina",
"salary": 0,
"hire_cost": 0,
"assigned_building": "ticket_booth_uuid",
"state": "enum (IDLE, SELLING, VIP_PROCESS, OVERLOADED)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Le personnage est lié à la `billeterie.md` (bâtiment fixe).
* Les événements `ZOO_FULL` et `QUEUE_LONG` déclenchent une UI explicite (pas de fallback).
# 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.
## Affichage contextuel (modules)
- **Billetterie** (`billeterie.md`) : clic panneau, saturation, file longue, arrivée bus VIP.
- **Chemins** (`chemin.md`) : si la suppression de chemins casse laccès entrée (erreur `CANNOT_REMOVE_BLOCKING`), la guichetière peut être le personnage contextuel du problème “entrée inaccessible”.
## Skins & thèmes
* Uniforme/guichet dépend du thème (`theme.md`).
* Accessoires (casquette, badge, ticket) via `skin.md` / `inventaire_skins.md` si activé.

View File

@@ -48,22 +48,31 @@ function applyImpact(target, impactType, value):
# 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)
### Feedback Visuel d'Impact (Passif)
**Description UX** : Le joueur voit les conséquences de ses actions.
**Description UI** : Popups flottants ("Floating Text") au-dessus des entités concernées.
**Emplacement** : World Space.
**Intégration** : Temporaire (Fade out).
**Navigation** : N/A
**Navigation** : Automatique.
**Événements** : `IMPACT_APPLIED`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Jingle court.
- **Sons** : `positive.mp3` (montant), `negative.mp3` (descendant).
- **Graphiques** : Flèches Vertes (Haut) / Rouges (Bas).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône Flèche.
- **Vidéos** : Particules.
- **Animations** : Texte qui monte et disparaît.
- **Couleurs** : Vert, Rouge.
- **Textes** : "+10 Attractivité", "-5 Santé".
- **Formes** : N/A
- **Formes** : Texte flottant.

View File

@@ -25,82 +25,114 @@ Table statique `animal_types`.
"rarity": "int",
"ideal_biome": "int",
"ideal_temp": "float",
"base_value": "int"
"base_value": "int",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A
**Compteur** : 0 animaux découverts.
**Filtre Défaut** : "Tous".
### Scores Initiaux
N/A
**Score Collectionneur** : 0% (Progression globale).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
**Découverte** : Premier achat, naissance ou observation d'un animal.
### Conditions de Disparition
N/A
**Vente/Mort** : L'animal disparaît de l'inventaire actif mais reste dans le "Livre des Records" (grisé).
### Hérédité
N/A
**Bonus Famille** : Si le joueur possède le couple (Mâle/Femelle), l'icône de l'espèce est dorée.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Indicateur** : L'inventaire affiche l'icône "Froid/Chaud" à côté des animaux qui souffrent actuellement.
### Impact Milieu (Biome)
N/A
**Tri** : Possibilité de trier par Biome d'origine.
### Impact Saisons
N/A
**Saisonnalité** : Met en avant les animaux "Tendance" de la saison actuelle.
### Impact Heure / Jour-Nuit
N/A
**Activité** : Affiche "Dort" si l'animal est nocturne et qu'il fait jour.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Statut** : Affiche "Fertile" ou "Gestante" sur les fiches.
### Impact Mort
N/A
**Cimetière** : Les animaux morts apparaissent grisés avec la date de décès.
### Impact Nourriture
N/A
**Alerte** : Badge rouge sur l'icône si Faim > 80%.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Set Complet** : Avoir tous les animaux d'un Biome donne un bonus global +5% Attractivité.
### Impact Valeur
N/A
**Estimation** : Affiche la valeur totale théorique du cheptel.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Recherche Rapide** : Barre de recherche instantanée.
### Dépenses (Boutiques/Visiteurs)
N/A
**Coût Total** : Affiche le coût journalier total en nourriture.
### Trajet Visiteurs
N/A
**Popularité** : Trie les animaux par nombre de vues visiteurs.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Nouveau** : Badge "New" sur une espèce fraîchement acquise.
* **Record** : Badge "Record" si un animal bat un record d'âge/valeur.
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Niveaux de Badge Collectionneur.*
| Niveau | Nom | Condition | Bonus |
| :--- | :--- | :--- | :--- |
| 1 | Amateur | 5 Espèces | +1% Attractivité |
| 2 | Passionné | 15 Espèces | +2% Attractivité |
| 3 | Expert | 30 Espèces | +5% Attractivité |
| 4 | Maître | 50 Espèces | +10% Attractivité |
| 5 | Légende | 75 Espèces | +20% Attractivité |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function getCollectionBonus(player):
count = countDistinctSpecies(player.animals)
if count >= 75: return 0.20
if count >= 50: return 0.10
if count >= 30: return 0.05
if count >= 15: return 0.02
if count >= 5: return 0.01
return 0
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `COLLECTION_LEVEL_UP` | Succès | "Nouveau rang de collectionneur atteint !" |
# 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)
### Bestiaire / Encyclopédie (Consultation)
**Description UX** : Le joueur consulte les animaux découverts/possédés.
@@ -111,12 +143,12 @@ N/A
**Événements** : `OPEN_BESTIARY`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Thème "Bibliothèque" (calme).
- **Sons** : `page_turn.mp3`.
- **Graphiques** : Fond Livre ancien.
- **Images** : 75 Icônes Animaux.
- **Vidéos** : N/A
- **Animations** : N/A
- **Vidéos** : Aperçu de l'animal en mouvement (survol).
- **Animations** : Tourne la page.
- **Couleurs** : Sépia/Papier.
- **Textes** : Lore/Description.
- **Formes** : N/A
- **Formes** : Marque-page.

View File

@@ -12,93 +12,591 @@ Pour chaque animal adulte, il existe une version "Bébé".
Même table que `animal_types` avec flag `is_baby`.
### Caractéristiques Initiales
N/A
**Compteur Bébés** : 0.
### Scores Initiaux
N/A
**Score Maternité** : 0.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
Naissance ou Achat Œuf.
### Conditions de Disparition
N/A
Croissance (Devient Adulte) ou Mort.
### Hérédité
N/A
**Lien** : Lien cliquable vers les parents depuis la fiche bébé.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Alerte Froid** : Icône "Flocon" clignotante si bébé en danger.
### Impact Milieu (Biome)
N/A
**Filtre** : "Bébés en danger" (Mauvais biome).
### Impact Saisons
N/A
**Printemps** : Mise en avant des naissances saisonnières.
### Impact Heure / Jour-Nuit
N/A
**Sommeil** : Indique "Dort" (les bébés dorment plus).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Futur** : Indique le potentiel génétique (Étoiles grisées).
### Impact Mort
N/A
**Historique** : "Mort-né" ou "Mort en bas âge" (Triste mais informatif).
### Impact Nourriture
N/A
**Biberon** : Icône Biberon si faim.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Bonus Mignonnerie** : Avoir 10 bébés différents simultanément = +5% Ventes Boutique Peluches (Effet "Mode").
### Impact Valeur
N/A
**Potentiel** : Affiche la valeur estimée à l'âge adulte.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Croissance** : Barre de progression temps réel.
### Dépenses (Boutiques/Visiteurs)
N/A
**Coût Soins** : Estimation des frais vétérinaires à venir.
### Trajet Visiteurs
N/A
**Vedette** : Indique si le bébé est le plus regardé du zoo.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Éclosion** : Animation dans l'inventaire.
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Niveaux de la Nurserie (voir `nurserie.md`).*
| Niveau | Nom | Bonus |
| :--- | :--- | :--- |
| 1 | Mignonnerie | +10% Attractivité |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function getBabyBonus(baby):
if baby.isCute(): return 1.5 // Multiplicateur attractivité
return 1.0
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `BABY_BORN` | Info | "Un nouveau bébé est né !" |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Visualisation Bébé (Passif)
**Description UX** : Différencier les bébés des adultes.
**Description UI** : Sprite plus petit (50% taille), tête plus grosse, yeux plus grands.
**Emplacement** : Grille / Nurserie.
**Intégration** : Sprite.
**Navigation** : N/A
**Événements** : N/A
**Navigation** : Clic Bébé.
**Événements** : `CLICK_BABY`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Berceuse.
- **Sons** : Cris plus aigus.
- **Graphiques** : Sprites Chibi.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône Tétine.
- **Vidéos** : Vidéo "Premiers pas" (décoratif).
- **Animations** : Démarche maladroite.
- **Couleurs** : Identiques Adulte.
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : "Bébé".
- **Formes** : Rond.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Inventaire/registre des variantes “bébé” par espèce (mapping adulte → bébé), et vue de gestion des bébés possédés (nurserie + zoo). |
| Rôle | Permettre lidentification visuelle, laccès rapide aux fiches bébés, et laffichage des signaux de risque (froid, faim, biome) sans masquer létat. |
| Portée | Catalogue (par type danimal) + instances (bébés présents) dans un zoo. |
| Contrainte | Aucun compteur de vues/revenus par bébé (pas danalytics) ; calculs et filtres à la volée, sans cache/mémorisation. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Résoudre variante bébé | rendu / fiche | `species_id` | `baby_sprite_set_id` | 1 adulte → 1 bébé, stable | Log si sprite manquant |
| Lister bébés possédés | ouverture inventaire | `zoo_id` | liste | tri stable (danger > croissance > rareté) | Event `OPEN_BABY_INVENTORY` |
| Filtrer “en danger” | toggle UI | états (temp, faim, santé) | sous-liste | critères explicites (seuils) | Event `FILTER_BABY_DANGER` |
| Afficher potentiel génétique | fiche bébé | genetics | étoiles grises | informatif, non “best-effort” | Event `BABY_GENETIC_VIEWED` |
| Deep-link vers bébé | notif/slot | `animal_id` | navigation | ouvre nurserie/zoom case | Event `NAVIGATE_TO_BABY` |
| Calculer bonus mignonnerie | tick logique | nb bébés distincts | mod boutique | bonus borné, condition “simultané” | Event `CUTE_BONUS_APPLIED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône tétine/biberon + badge “B” |
| Couleur dominante | Pastel (selon thème) |
| Variantes | `icon_baby.png`, `icon_bottle.png`, `icon_pacifier.png` |
| États | `danger_cold` (flocon), `danger_hunger` (biberon), `sleeping` (zzz) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir inventaire bébés | Consultation | - | menu inventaire → bébés | liste affichée | - |
| Ouvrir fiche bébé | Consultation | bébé listé | clic ligne | panneau détail | `BABY_NOT_FOUND` |
| Filtrer “en danger” | Consultation | - | toggle | liste filtrée | - |
| Aller au bébé | Navigation | position/slot connu | bouton “Voir” | zoom + focus | `LOCATION_UNAVAILABLE` |
| Comparer adulte/bébé | Consultation | espèce connue | onglet | mapping visible | - |
## Personnage contextuel (événements & interaction)
Voir `nurse.md`.
### Affichage
La nurse saffiche lorsque :
- le module est **actionné** (ouverture inventaire, filtre danger, navigation “Voir bébé”) ;
- un **événement** de bébé survient (naissance, danger, passage adulte).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_BABY_INVENTORY` | ouverture | portrait nurse + rappel des priorités “danger” |
| `FILTER_BABY_DANGER` | toggle | bulle “Liste filtrée” + critères |
| `BABY_BORN` | naissance | bulle “Nouveau bébé” + CTA “Voir” |
| `BABY_DANGER` / `BABY_CRITICAL` | danger | bulle “Urgence” + CTA deep-link |
| `BABY_BECAME_ADULT` | transition | bulle “Devenu adulte” + CTA “Voir adulte” |
### Skins & thèmes
Palette et accessoires suivent `theme.md` ; la nurse peut être skinnable via `inventaire_skins.md` (si des skins de staff existent).
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `catalog.species_id` | string | `PANDA` | DB | enum |
| `catalog.baby_sprite_set_id` | string | `PANDA_BABY_SET` | assets | requis |
| `catalog.scale_factor` | float | 0.5 | config | 0.3..0.7 |
| `catalog.name_key` | string | `baby.PANDA` | i18n | FR/EN |
| `catalog.badges` | string[] | `["B"]` | config | - |
| `instance.animal_id` | uuid_v4 | `uuid_v4` | DB | - |
| `instance.nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | - |
| `instance.iso_x` | int \| null | 120 | DB | null si nurserie |
| `instance.iso_y` | int \| null | 88 | DB | null si nurserie |
| `instance.growth_progress` | float | 42.0 | DB | 0..100 |
| `instance.danger_flags` | string[] | `["COLD","HUNGER"]` | calcul | à la volée |
| `timestamps.updated_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Compteur bébés | 0 | count | par zoo |
| Score maternité | 0 | points | indicateur interne |
| Bonus mignonnerie | 0 | % | dépend diversité |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Diversité bébés | 0 | 0..∞ | bonus boutique “peluches” |
| Taux bébés en danger | 0% | 0..100% | gestion, pas danalytics |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | naissance/achat œuf | espèce | bébé | mapping stable |
| Suivi | ouverture inventaire | zoo_id | liste | tri stable |
| Disparition | croissance/mort | animal | retiré de la vue bébés | historique conservé |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Naissance | true | est | bébé apparaît |
| Achat œuf | true | est | futur bébé (à éclosion) |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Croissance | 100 | >= | bascule “adulte” |
| Mort | 0 santé | <= | retiré |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Lien parents | Oui | fiche bébé → parents |
| Potentiel | Oui | affichage étoiles grises |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet inventaire | Notes |
|---|---|---|
| Froid/chaud | flag + icône flocon/soleil | clignote si critique |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet inventaire | Notes |
|---|---|---|
| Incompatible | filtre “en danger” | signal fort |
#### Impact Saisons (tableau détaillé)
| Saison | Effet inventaire | Notes |
|---|---|---|
| Printemps | mise en avant naissances | tri optionnel |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet inventaire | Notes |
|---|---|---|
| Nuit | état “Dort” | zzz |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bébé | 0 | non reproductible |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Historique | tag “mort en bas âge” | informatif |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Faim | icône biberon | seuil faim |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Diversité bébés ≥ 10 | + | - | bonus boutique peluches |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Potentiel | affichage estimé | basé génétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Croissance | barre temps réel | refresh à la volée |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Vedette | indicateur | bébé le plus consulté en jeu, sans analytics |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Peluches | +5% ventes | % | diversité bébés ≥ 10 |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soins | estimation | coins | selon bébés malades |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Interventions | + | min | bébés en danger |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Slots | variable | coins | niveau |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Rations bébé | + | coins | métabolisme |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Bébé vedette | signal “mignonnerie” | route |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Bébé vedette | Boutique peluches | bonus actif | achat |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_BABY_INVENTORY` | menu | - | UI |
| `FILTER_BABY_DANGER` | toggle | flags | UI |
| `NAVIGATE_TO_BABY` | clic | `animal_id` | zoom |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `BABY_MARKER_SHOW` | map open | marker |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CLICK_BABY` | clic | panneau |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_OPENS_BABY_INVENTORY` | menu | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Nurserie 1 | 0 | slots base | gestion |
| Nurserie 3 | 400 | vitrine | nouveaux signaux |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getBabyBonus` | baby | float | attractivité |
| `computeDangerFlags` | baby, env | string[] | à la volée |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `BABY_BORN` | Info | "Un nouveau bébé est né." | naissance |
| `BABY_DANGER` | Warning | "Un bébé est en danger." | flags |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Trouver bébés | suivi | dispersion | filtre danger + tri |
| Ouvrir fiche | actions | navigation | clic ligne + bouton voir |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Liste bébés | lignes + icônes | normal/danger |
| Badges danger | flocon/biberon/zzz | clignotant critique |
| Panneau détail | génétique + croissance | actions |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Inventaire | menu | registre |
| Nurserie | slots | deep-link |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `bebe_animal.md` | états bébé | flags |
| `nurserie.md` | slots | navigation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | menu → bébés | liste |
| Filtrer danger | toggle | tri |
| Voir bébé | bouton | zoom |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_BABY_INVENTORY` | menu | UI |
| `CLICK_BABY_ROW` | clic | panneau |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `baby_inventory_loop.mp3` | inventaire | loop | doux |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_toggle.mp3` | filtre | bas |
| `baby_chirp_01.mp3` | survol | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `baby_badge_b.png` | badge | lisible |
| `baby_flag_cold.png` | flocon | contraste |
| `baby_flag_hunger.png` | biberon | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `baby_list_bg.png` | fond liste |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `baby_steps.webm` | décoratif | 1.5s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| clignotement danger | critique | 0.6s |
| bounce badge | apparition | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `baby_pastel` | #A7D8FF | UI |
| `baby_danger` | #D32F2F | alerte |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `baby.inventory.title` | Bébés | Babies |
| `baby.inventory.danger` | En danger | In danger |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Ligne | rectangle arrondi | lisible |
| Badge | rond | constant |

View File

@@ -13,59 +13,59 @@
Table statique.
### Caractéristiques Initiales
N/A
**Heure Départ** : 08:00 (Ouverture).
### Scores Initiaux
N/A
**Jours passés** : 0.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Cycle perpétuel.
### Conditions de Disparition
N/A
**Jamais** : Le temps ne s'arrête pas (sauf pause).
### Hérédité
N/A
**Temps de Jeu** : Cumulé sur le profil joueur.
## 3. Impacts Environnementaux
### Impact Température
Voir `temperature.md`.
### Impact Milieu (Biome)
N/A
**Lumière** : Les biomes réagissent à la lumière (Bioluminescence).
### Impact Saisons
N/A
**Durée Jour** : Variable selon saison.
### Impact Heure / Jour-Nuit
N/A
**Cycle** : C'est la définition même.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Nuit** : Bonus fertilité.
### Impact Mort
N/A
**Nuit** : Risque froid.
### Impact Nourriture
N/A
**Repas** : Heures fixes (Matin/Soir) pour les animaux.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Horaires** : Zoo fermé la nuit = 0 Visiteurs.
### Impact Valeur
N/A
**Recette du Jour** : Calculée à la fermeture (20h).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Temps** : Accélérateur de temps (x1, x2, x3).
### Dépenses (Boutiques/Visiteurs)
N/A
**Salaire** : Payé à la journée.
### Trajet Visiteurs
N/A
**Sortie** : À 19h, tous les visiteurs se dirigent vers la sortie.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -73,33 +73,52 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
**Horaires Étendus** (Recherche) :
| Niveau | Effet |
| :--- | :--- |
| 1 | Fermeture 21h |
| 2 | Fermeture 22h |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function updateTime(world, deltaTime):
world.time += deltaTime * speedFactor
if world.time >= 24: world.time = 0
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `DAY_START` | Info | "Bonjour ! Le zoo ouvre." |
# 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)
### Cycle Jour/Nuit (Passif)
**Description UX** : La luminosité change progressivement.
**Description UI** : Filtre global de couleur (Bleu nuit -> Orange aube -> Blanc jour -> Orange crépuscule).
**Emplacement** : Écran entier.
**Intégration** : Layer FX.
**Navigation** : N/A
**Navigation** : Boutons Vitesse (x1, x2, Pause).
**Événements** : `TIME_CHANGE`.
#### Assets
- **Musiques** : Thème Jour / Thème Nuit (plus calme).
- **Sons** : Coq (Matin), Hibou (Nuit).
- **Graphiques** : Ombres qui tournent (si 3D ou simulé).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Soleil / Lune (HUD).
- **Vidéos** : Timelapse ciel (Skybox).
- **Animations** : Transition couleur.
- **Couleurs** : Palette Cycle.
- **Textes** : Horloge "14:00".
- **Formes** : N/A
- **Formes** : Cadran.

View File

@@ -15,10 +15,10 @@
Table statique.
### Caractéristiques Initiales
N/A
**Météo Actuelle** : Ensoleillé (Défaut).
### Scores Initiaux
N/A
**Durée Météo** : 4h restantes.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -28,36 +28,50 @@ Probabilités selon Saison.
Changement toutes les X heures ou jours.
### Hérédité
N/A
**Climat** : Le climat général du zoo (Tropical, Tempéré) influence les probabilités météo.
## 3. Impacts Environnementaux
### Impact Température
Voir liste ci-dessus.
| Météo | Modificateur Température | Notes |
|---|---:|---|
| Ensoleillé | +1°C | Bonus attractivité. |
| Nuageux | 0°C | Neutre. |
| Pluvieux | 0°C | Humidité, pousse herbe. |
| Orage | 0°C | Stress animaux. |
| Neige | -5°C | Risque froid. |
| Canicule | +5°C | Risque chaud. |
### Impact Milieu (Biome)
N/A
**Réaction** : La pluie remplit les mares (visuel). La neige couvre le sol.
### Impact Saisons
N/A
**Probabilités** : Neige impossible en Été.
### Impact Heure / Jour-Nuit
N/A
**Visibilité** : Orage la nuit = Éclairs très visibles.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Calme** : La pluie favorise l'intimité (Repro +5%).
### Impact Mort
N/A
**Froid** : Neige + Nuit = Danger mortel.
### Impact Nourriture
N/A
**Pousse** : Pluie = Herbe pousse plus vite.
### Impact Attractivité (Visiteurs/Animaux)
Voir liste ci-dessus.
| Météo | Modificateur visiteurs | Notes |
|---|---:|---|
| Ensoleillé | +10% | Confort. |
| Nuageux | 0% | Neutre. |
| Pluvieux | -15% | Sans abris, départs plus rapides. |
| Orage | -30% | Peur, incidents. |
| Neige | -20% | Froid, sauf événements. |
| Canicule | -10% | Sauf glaces/ombre (boutiques). |
### Impact Valeur
N/A
**Ventes** : Parapluies vs Glaces.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
@@ -67,7 +81,7 @@ N/A
**Pluie** : Augmente vente parapluies/abris.
### Trajet Visiteurs
N/A
**Abri** : Les visiteurs courent se mettre à l'abri s'il pleut.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -75,11 +89,20 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
**Machine Météo** (Endgame) :
| Niveau | Effet |
| :--- | :--- |
| 1 | Déclenche Pluie |
| 2 | Déclenche Soleil |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function updateWeather(world):
if random() < changeChance:
world.weather = pickNewWeather(world.season)
applyWeatherEffects(world)
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
@@ -88,22 +111,31 @@ N/A
# 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)
### Ambiance Météo (Passif)
**Description UX** : Le joueur ressent la météo actuelle.
**Description UI** : Overlay plein écran (Pluie, Neige, Rayons soleil). Nuages qui passent (ombres).
**Emplacement** : Écran entier.
**Intégration** : Layer FX.
**Navigation** : N/A
**Navigation** : Auto.
**Événements** : `WEATHER_FX`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Bruit de pluie relaxant.
- **Sons** : Pluie, Vent, Tonnerre.
- **Graphiques** : Particules Pluie/Neige.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône Météo HUD.
- **Vidéos** : Éclairs (Flash).
- **Animations** : Chute particules.
- **Couleurs** : Teinte Bleue (Nuit/Pluie), Jaune (Soleil).
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : "Il pleut".
- **Formes** : Gouttes.

View File

@@ -24,77 +24,107 @@
Table statique (Reference Data).
### Caractéristiques Initiales
Voir liste ci-dessus.
| Milieu | Couleur | T° base (°C) | Walkable | Notes |
|---|---|---:|---|---|
| Prairie Tendre | Vert clair | 20 | Oui | Biome neutre de départ. |
| Forêt Dense | Vert foncé | 18 | Oui | Bonus ombre (été). |
| Savane | Jaune/Ocre | 28 | Oui | Favorise espèces chaudes. |
| Désert | Sable | 38 | Oui | Coût eau élevé. |
| Plage | Beige | 30 | Oui | Transition océan. |
| Océan Surface | Bleu clair | 22 | Non (sans pont) | Aquatique. |
| Océan Profond | Bleu foncé | 10 | Non | Infranchissable, pont interdit si “profond”. |
| Récif | Corail | 24 | Non (sans pont) | Visuel riche, attractivité. |
| Montagne Basse | Gris vert | 12 | Oui | Ralentit camions. |
| Roche | Gris | 8 | Oui | Froid, peu fertile. |
| Sommet Enneigé | Blanc | -5 | Oui | Hiver permanent. |
| Volcanique | Noir/Rouge | 45 | Oui | Danger chaleur. |
| Marécage | Vert boue | 16 | Oui | Boue, maladies. |
| Toundra | Bleu gris | 0 | Oui | Froid, adapté polaire. |
| Jungle | Vert saturé | 32 | Oui | Humidité, croissance. |
### Scores Initiaux
N/A
**Surface** : 0 cases.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
Génération carte ou Terraformation.
### Conditions de Disparition
N/A
Terraformation (Remplacement).
### Hérédité
N/A
**Mémoire** : Le sol garde des traces de l'ancien biome (fertilité).
## 3. Impacts Environnementaux
### Impact Température
Chaque milieu a une T° par défaut.
**Base** : Chaque milieu a une T° de base.
### Impact Milieu (Biome)
N/A
**Voisinage** : Bonus si adjacent à un biome compatible.
### Impact Saisons
N/A
**Visuel** : Changement de texture selon saison.
### Impact Heure / Jour-Nuit
N/A
**Visuel** : Assombrissement.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Compatibilité** : Requise pour reproduction optimale.
### Impact Mort
N/A
**Incompatibilité** : Stress mortel si mauvais biome.
### Impact Nourriture
N/A
**Production** : Certains biomes produisent de la nourriture (Herbe).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Diversité** : Bonus si zoo varié.
### Impact Valeur
N/A
**Coût** : Prix de terraformation variable.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Terrain** : Vitesse déplacement variable.
### Dépenses (Boutiques/Visiteurs)
N/A
**Entretien** : Coût variable (Eau pour Désert).
### Trajet Visiteurs
N/A
**Obstacle** : Eau/Montagne infranchissable.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Modification** : Changement de biome.
## 7. Progression
### Tableau des Upgrades
N/A
Voir `achat_upgrade_case.md`.
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function getBiomeEffect(biome):
return biomeEffects[biome.id]
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `BIOME_SELECTED` | Info | "Biome sélectionné." |
# 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)
### Palette Biome (Consultation)
**Description UX** : Le joueur consulte la liste des biomes disponibles pour terraformer.
@@ -105,12 +135,12 @@ N/A
**Événements** : `SELECT_BIOME`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Sons d'ambiance nature (boucle).
- **Sons** : `select.mp3`.
- **Graphiques** : Carrés de texture.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : Photos paysage (référence).
- **Vidéos** : Survol drone du biome.
- **Animations** : Texture animée (Eau, Herbe).
- **Couleurs** : Palette 15 couleurs.
- **Textes** : Noms des milieux.
- **Formes** : Carrés.

View File

@@ -2,7 +2,7 @@
## Liste des Incidents
1. **Soif** : "J'ai soif !" -> Nécessite un stand de boisson ou une boutique proche.
2. **Fatigue** : "J'ai mal aux pieds..." -> Nécessite un banc.
2. **Fatigue** : "J'ai mal aux pieds" -> Nécessite un banc.
3. **Saleté** : "C'est sale ici !" -> Nécessite un nettoyage (clic) ou une poubelle.
4. **Frustration** : "On ne voit rien !" -> Animal trop loin ou caché.
5. **Envie** : "Je veux une peluche !" -> Nécessite une boutique de souvenirs.
@@ -15,10 +15,10 @@
Table statique.
### Caractéristiques Initiales
N/A
**Compteur Incidents** : 0.
### Scores Initiaux
N/A
**Satisfaction Moyenne** : 50%.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -28,46 +28,46 @@ Aléatoire sur Visiteur.
Résolution ou Départ visiteur.
### Hérédité
N/A
**Réputation** : Si beaucoup d'incidents non résolus, la réputation baisse durablement.
## 3. Impacts Environnementaux
### Impact Température
**Canicule** : Augmente probabilité "Soif".
### Impact Milieu (Biome)
N/A
**Boue** : Augmente probabilité "Saleté" sur biome Terre/Marais.
### Impact Saisons
N/A
**Pluie** : Augmente "Inconfort" (si pas de parapluie).
### Impact Heure / Jour-Nuit
N/A
**Nuit** : Augmente "Peur" (si pas de lumière).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Calme** : Les visiteurs bruyants (incidents) dérangent la reproduction (-5%).
### Impact Mort
N/A
**Choc** : Voir un animal mort crée un incident "Traumatisme".
### Impact Nourriture
N/A
**Faim** : Incident "J'ai faim".
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Plaintes** : Trop d'incidents = Baisse Attractivité.
### Impact Valeur
N/A
**Remboursement** : Un visiteur très mécontent peut demander le remboursement.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Départ** : Un visiteur avec un incident non résolu marche plus vite vers la sortie.
### Dépenses (Boutiques/Visiteurs)
N/A
**Opportunité** : Résoudre un incident (ex: Soif) génère souvent une vente.
### Trajet Visiteurs
N/A
**Détour** : Le visiteur cherche le bâtiment adéquat pour résoudre son problème.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -76,17 +76,48 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
**Formation Staff** :
| Niveau | Effet |
| :--- | :--- |
| 1 | Résolution auto lente |
| 2 | Résolution auto rapide |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function checkVisitorNeeds(visitor):
if visitor.thirst > 80:
createIncident(visitor, "THIRST")
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `INCIDENT_ALERT` | Warning | "Un visiteur se plaint !" |
## Personnages contextuels (événements & interaction)
- **Visiteur** : voir `visiteur.md` (source de lincident, bulle, besoins).
- **Agent de sécurité** : voir `agent_securite.md` (incidents dordre/vandalisme si présents dans la liste dincidents).
- **Soigneur** : voir `soigneur.md` (si incident “blessure/urgence” est introduit).
- **Nourisseur** : voir `nourisseur.md` (incidents faim/soif indirects via stocks et boutiques).
### Déclencheurs (exemples)
| Event | Condition | Personnage | Effet UI |
|---|---|---|---|
| `INCIDENT_ALERT` | incident créé | visiteur | bulle + CTA résolution |
| incident non résolu | TTL dépassé | sécurité/soigneur | bulle “Intervention requise” + deep-link |
# 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)
### Bulles d'Incidents (Action)
**Description UX** : Voir `visiteur.md`.
@@ -97,12 +128,12 @@ N/A
**Événements** : `INCIDENT_ICON`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Brouhaha de foule.
- **Sons** : Variés selon incident (Bruit eau, Bâillement).
- **Graphiques** : Set d'icônes vectorielles.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Emotes.
- **Vidéos** : Animation de la bulle (pop).
- **Animations** : Pop.
- **Couleurs** : Noir sur Blanc.
- **Textes** : N/A
- **Textes** : "J'ai soif !".
- **Formes** : Bulle.

View File

@@ -17,15 +17,18 @@
"objective_type": "string",
"target_value": "int",
"reward_coins": "int",
"is_completed": "boolean"
"is_completed": "boolean",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A
**Quêtes actives** : 3.
### Scores Initiaux
N/A
**Points de Quête** : 0.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -35,46 +38,46 @@ Reset quotidien (Minuit serveur).
Complétion ou Reset.
### Hérédité
N/A
**Série** : Bonus de connexion quotidienne (Streak).
## 3. Impacts Environnementaux
### Impact Température
N/A
**Quête Météo** : "Vendre 10 glaces pendant une canicule".
### Impact Milieu (Biome)
N/A
**Quête Biome** : "Avoir 50% de cases Océan".
### Impact Saisons
N/A
**Quête Saisonnière** : "Planter 10 arbres en Automne".
### Impact Heure / Jour-Nuit
N/A
**Quête Nocturne** : "Observer un animal nocturne".
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Quête Naissance** : "Faire naître un animal Rare".
### Impact Mort
N/A
**Quête Deuil** : "Honorer un animal disparu" (Planter un arbre).
### Impact Nourriture
N/A
**Quête Stock** : "Avoir 1000 unités de nourriture".
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Quête Popularité** : "Atteindre 100 Attractivité".
### Impact Valeur
N/A
**Quête Richesse** : "Avoir 10.000 pièces en banque".
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Quête Livraison** : "Livrer 5 animaux en moins de 10 minutes".
### Dépenses (Boutiques/Visiteurs)
N/A
**Quête Investissement** : "Dépenser 5000 pièces".
### Trajet Visiteurs
N/A
**Quête Flux** : "Optimiser le chemin vers les Lions".
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -82,11 +85,22 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
**Journal de Quêtes** :
| Niveau | Effet |
| :--- | :--- |
| 1 | 3 Quêtes / jour |
| 2 | 5 Quêtes / jour |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function checkQuests(player, action):
for quest in player.quests:
if quest.type == action.type:
quest.progress += action.value
if quest.progress >= quest.target:
completeQuest(quest)
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
@@ -95,6 +109,15 @@ N/A
# 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)
### Suivi Quêtes (Permanent)
**Description UX** : Le joueur voit ses objectifs en cours.
@@ -105,11 +128,11 @@ N/A
**Événements** : `QUEST_UPDATE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Jingle victoire.
- **Sons** : `quest_complete.mp3`.
- **Graphiques** : Icône Parchemin.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Coffre au trésor (Récompense).
- **Vidéos** : Ouverture du coffre.
- **Animations** : Flash vert à la complétion.
- **Couleurs** : Blanc (En cours), Vert (Fini).
- **Textes** : Titre Quête, Progression.

View File

@@ -52,10 +52,10 @@ Chaque saison dure un nombre défini de jours de jeu (ex: 7 jours réels ou 30 j
Table statique.
### Caractéristiques Initiales
N/A
**Saison Départ** : Printemps.
### Scores Initiaux
N/A
**Jours écoulés** : 0.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -65,46 +65,64 @@ Cycle annuel fixe.
Fin de durée saison.
### Hérédité
N/A
**Calendrier** : Le jour de l'année est conservé entre les sessions.
## 3. Impacts Environnementaux
### Impact Température
Voir liste ci-dessus.
| Saison | Modificateur Global | Notes |
|---|---:|---|
| Printemps | +0°C | Référence neutre. |
| Été | +10°C | Peut déclencher canicule via météo. |
| Automne | -2°C | Accentue pluie/vent. |
| Hiver | -15°C | Peut déclencher neige/vague de froid via météo. |
### Impact Milieu (Biome)
N/A
**Adaptation** : Les biomes réagissent visuellement (Neige sur Montagne en Hiver).
### Impact Saisons
N/A
**Cycle** : Définit la saison suivante.
### Impact Heure / Jour-Nuit
N/A
**Durée Jour** : Plus long en Été, plus court en Hiver.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
Voir liste ci-dessus.
| Saison | Modificateur | Condition |
|---|---:|---|
| Printemps | +20% | Bonus général (sauf espèces “solitaires” si définies). |
| Été | +0% | Neutre. |
| Automne | +0% | Neutre. |
| Hiver | -50% | Sauf espèces adaptées au froid (cf. `inventaire_milieux.md`). |
### Impact Mort
Voir liste ci-dessus.
| Saison | Risque additionnel | Condition |
|---|---:|---|
| Été | +10% | Pour espèces froides si pas de régulation. |
| Hiver | +20% | Pour espèces tropicales si pas de régulation. |
### Impact Nourriture
N/A
**Disponibilité** : Fruits abondants en Été (Prix bas), rares en Hiver (Prix haut).
### Impact Attractivité (Visiteurs/Animaux)
Voir liste ci-dessus.
| Saison | Modificateur visiteurs | Notes |
|---|---:|---|
| Printemps | x1.0 | Standard. |
| Été | x1.5 | Vacances. |
| Automne | x0.8 | Pluie/vent. |
| Hiver | x0.6 | Froid, sauf événements spéciaux. |
### Impact Valeur
N/A
**Offre/Demande** : Prix des glaces x2 en Été.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Météo** : Risque de tempête en Automne (Ralentissement).
### Dépenses (Boutiques/Visiteurs)
N/A
**Chauffage** : Coût en Hiver. **Clim** : Coût en Été.
### Trajet Visiteurs
N/A
**Préférence** : Les visiteurs restent en intérieur (Boutiques) s'il pleut/neige.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -112,35 +130,55 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
**Prévisions Météo** (Centre Recherche) :
| Niveau | Effet |
| :--- | :--- |
| 1 | Prévision à 1 jour |
| 2 | Prévision à 3 jours |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function updateSeason(world):
world.day++
if world.day > SEASON_LENGTH:
world.season = nextSeason(world.season)
world.day = 0
emitEvent("SEASON_CHANGE")
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| 3 | Prévision à 7 jours |
| `SEASON_CHANGE` | Info | "C'est le [Saison] !" |
# 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)
### Ambiance Saisonnière (Passif)
**Description UX** : Le décor change selon la saison.
**Description UI** : Tilesets modifiés (Herbe verte -> Herbe jaune -> Feuilles mortes -> Neige).
**Emplacement** : Grille Zoo.
**Intégration** : Assets graphiques.
**Navigation** : N/A
**Navigation** : Auto.
**Événements** : `SEASON_VISUAL_UPDATE`.
#### Assets
- **Musiques** : Thèmes saisonniers (Vivaldi remix ?).
- **Musiques** : Thèmes saisonniers (Vivaldi remix)..
- **Sons** : Vent hivernal, Oiseaux printemps.
- **Graphiques** : 4 variantes de chaque Tile.
- **Images** : Icône Saison HUD.
- **Vidéos** : N/A
- **Vidéos** : Pluie/Neige (Overlay).
- **Animations** : Feuilles qui tombent (Automne).
- **Couleurs** : Vert, Jaune, Orange, Blanc.
- **Textes** : "Printemps", "Été", etc.
- **Formes** : N/A
- **Formes** : Icône Soleil/Flocon.

View File

@@ -0,0 +1,531 @@
# Inventaire Skins
## 1. Définition
Interface de gestion permettant au joueur de visualiser, trier et équiper les éléments cosmétiques (skins) acquis pour son avatar ou son zoo. Il gère les pièces de skins unitairement.
## 2. Fonctions
* **Stockage :** Centralise tous les skins (têtes, corps, accessoires, décors).
* **Équipement :** Permet d'appliquer un skin à l'avatar ou de sélectionner un skin par défaut pour les bâtiments.
* **Visualisation :** Affiche les items possédés et ceux manquants (grisés).
## 3. Icone
* **Représentation :** Coffre ouvert ou Cintre.
* **Couleur dominante :** Marron (cuir) et Or.
## 4. Interactions
* **Ouverture :** Depuis le menu profil ou la boutique.
* **Filtrage :** Par catégorie (Chapeaux, T-shirts, Zoo), par thème (Jungle, Espace) ou par rareté.
* **Sélection :** Clic sur un item pour voir les détails et le bouton "Équiper".
## 5. Annexes Techniques
### Données (JSON)
```json
{
"inventory_id": "inv_skins_player_123",
"items": [
{
"item_id": "skin_hat_01",
"acquired_date": "2026-03-01",
"is_equipped": true
},
{
"item_id": "skin_shirt_05",
"acquired_date": "2026-03-02",
"is_equipped": false
}
],
"capacity": "unlimited" // Ou valeur numérique si limite
}
```
### Règles Métier
* L'inventaire sépare les skins d'avatar des skins de zoo.
* Impossible de vendre ou supprimer un skin (sauf si fonctionnalité de recyclage prévue).
* Mise à jour en temps réel lors d'un achat ou d'un gain.
## 6. Annexes UX/UI
* **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.
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Inventaire “Skins” : vue de possession + équipement de cosmétiques (avatar et zoo). |
| Rôle | Donner un accès rapide à léquipement, au filtrage, et à la prévisualisation sans étapes inutiles. |
| Portée | UI profil/boutique ; impact avatar, bâtiments, décorations. |
| Contrainte | Pas de cache/mémorisation : état “équipé” lu comme source de vérité ; pas danalytics ; aucune suppression/vente implicite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir inventaire | menu | `player_id` | page/grille | affiche items possédés + grisés | Event `OPEN_SKIN_INVENTORY` |
| Filtrer | UI | catégorie/thème/rareté | liste filtrée | filtres combinables | Event `FILTER_SKINS` |
| Trier | UI | critère | liste triée | stable | Event `SORT_SKINS` |
| Prévisualiser | clic item | `item_id` | preview | paper doll / rendu zoo | Event `PREVIEW_SKIN` |
| Équiper | clic “Équiper” | `item_id`, slot | `is_equipped=true` | un item équipé par slot | Event `EQUIP_SKIN` |
| Déséquiper | clic “Retirer” | slot | `is_equipped=false` | revient au skin de base explicite | Event `UNEQUIP_SKIN` |
| Synchroniser après achat | achat | receipt | inventaire maj | immédiat, sans cache | Event `SKIN_ACQUIRED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Cintre / coffre |
| Couleur dominante | Marron + or |
| Variantes | `icon_skin_hanger.png`, `icon_skin_chest.png` |
| États | normal, selected, disabled (non possédé) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir | Navigation | - | profil → skins | grille | - |
| Équiper item | Action | possédé | clic item → équiper | appliqué | `SKIN_NOT_OWNED` |
| Prévisualiser | Consultation | - | clic item | preview | - |
| Filtrer | Consultation | - | toggles | liste | - |
| Drag & drop | Action | option active | drag → drop | équipe | `DROP_INVALID` |
## Personnage contextuel (événements & interaction)
Le module “Inventaire Skins” affiche le **joueur actif** via son avatar (voir `avatar_joueur.md`) comme personnage contextuel.
### Affichage
Lavatar saffiche lorsque :
- le module est **actionné** (ouverture inventaire, sélection dun item, équipement/déséquipement) ;
- un **événement** lié aux skins survient (acquisition, équipement réussi/échoué).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_SKIN_INVENTORY` | ouverture | avatar/paper doll visible, cohérent avec léquipement courant |
| `PREVIEW_SKIN` | clic item | lavatar adopte la prévisualisation (paper doll) |
| `EQUIP_SKIN` / `UNEQUIP_SKIN` | action | feedback visuel sur lavatar + message |
| `SKIN_ACQUIRED` | achat/gain | bulle “Nouveau skin” + CTA “Équiper” |
### Skins & thèmes
Le module applique `theme.md` et léquipement de `inventaire_skins.md` sur lavatar, sans inférer silencieusement un skin “par défaut”.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `inventory_id` | string | `inv_skins_<player_id>` | DB | stable |
| `items[].item_id` | string | `skin_hat_01` | DB | id unique |
| `items[].acquired_at` | timestamp | - | DB | UTC |
| `items[].is_equipped` | boolean | true | DB | par slot |
| `items[].slot` | string | `HAT` | DB | enum |
| `items[].theme` | string | `JUNGLE` | config | enum |
| `items[].rarity` | string | `RARE` | config | enum |
| `capacity` | string \| int | `unlimited` | config | pas de limite par défaut |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Capacité | illimitée | - | règle existante |
| Slots avatar | 6 | count | ex: hat, top, bottom, shoes, accessory, back |
| Slots zoo | 8 | count | ex: sol, clôture, portes, UI, etc. |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Skins possédés | 0 | 0..∞ | collection |
| Skins équipés | 0 | 0..slots | rendu |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Acquisition | achat/gain | item_id | inventaire +1 | pas de doublon |
| Équipement | action | slot | is_equipped | exclusivité slot |
| Déséquipement | action | slot | base | base explicite |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat skin | true | est | item ajouté |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | pas de suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Inventaire | Oui | persiste compte |
| Équipement | Oui | persiste par profil |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| - | aucun | cosmétique |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| - | aucun | - |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Saison active | skins saisonniers visibles | gating |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| - | aucun | - |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Skins zoo | + | zoo | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Collection | + | complétude |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_SKIN_INVENTORY` | menu | - | UI |
| `EQUIP_SKIN` | clic | item_id, slot | équipé |
| `UNEQUIP_SKIN` | clic | slot | base |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FILTER_SKINS` | toggle | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | inventaire dispo | - |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `equipSkin` | item, slot | state | exclusif slot |
| `filterSkins` | list, filters | list | combinable |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SKIN_NOT_OWNED` | Warning | "Skin non possédé." | équiper |
| `SKIN_EQUIPPED` | Info | "Skin équipé." | succès |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Équiper avatar | personnaliser | navigation | paper doll + bouton direct |
| Équiper zoo | thème | sélection | filtres |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Grille | items | owned/missing |
| Paper doll | preview | slot highlight |
| Bouton équiper | CTA | enabled/disabled |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Profil | onglet skins | - |
| Boutique | lien | - |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `skin.md` | definition item | ids cohérents |
| `avatar_joueur.md` | rendu avatar | slots |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | profil → skins | grille |
| Équiper | item → CTA | appliqué |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SKIN_INVENTORY` | menu | UI |
| `CLICK_EQUIP` | CTA | équipe |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `skins_inventory_loop.mp3` | inventaire | loop | neutre |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_equip.mp3` | équiper | bas |
| `ui_unequip.mp3` | retirer | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `paper_doll_frame.png` | preview | scalable |
| `skin_item_tile.png` | tuile | grille |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `skin_missing_overlay.png` | grisé |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `equip_fx.webm` | feedback | 0.6s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| glow item | hover | 0.2s |
| bounce CTA | success | 0.3s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `skins_gold` | #D4AF37 | rareté |
| `skins_brown` | #6D4C41 | fond |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `skins.title` | Skins | Skins |
| `skins.equip` | Équiper | Equip |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Tuiles | rectangles arrondis | lisibles |

View File

@@ -16,93 +16,112 @@
Table statique.
### Caractéristiques Initiales
N/A
**T° Moyenne** : 20°C.
### Scores Initiaux
N/A
**Record Chaud** : 20°C.
**Record Froid** : 20°C.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
Constante physique.
### Conditions de Disparition
N/A
**Jamais** : La température est toujours présente.
### Hérédité
N/A
**Climat** : Le climat de départ définit la plage de température moyenne.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Auto-référence** : Définit les états (Gel, Vapeur).
### Impact Milieu (Biome)
N/A
**Inertie** : L'eau change de T° moins vite.
### Impact Saisons
N/A
**Variation** : +10°C en Été, -10°C en Hiver.
### Impact Heure / Jour-Nuit
N/A
**Cycle** : +5°C le jour, -5°C la nuit.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Confort** : T° idéale requise.
### Impact Mort
N/A
**Extrêmes** : T° mortelle si hors tolérance.
### Impact Nourriture
N/A
**Conservation** : La nourriture pourrit vite si T° > 30°C.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Confort** : Visiteurs aiment 20-25°C.
### Impact Valeur
N/A
**Coût** : Maintenir une T° artificielle coûte cher.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Gel** : Verglas ralentit les camions.
### Dépenses (Boutiques/Visiteurs)
N/A
**Énergie** : Facture chauffage/clim.
### Trajet Visiteurs
N/A
**Ombre** : Recherche d'ombre si chaud.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Vague de Froid/Chaud** : Event temporaire.
## 7. Progression
### Tableau des Upgrades
N/A
**Chauffage Central** :
| Niveau | Effet |
| :--- | :--- |
| 1 | Rayon 5 cases |
| 2 | Rayon 10 cases |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function getTemp(case):
return baseTemp + seasonMod + dayMod + heaterMod
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| 7 | Rayon Global (Tout le Zoo) |
| `TEMP_CRITICAL` | Alerte | "Température critique !" |
# 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)
### Thermomètre (Consultation)
**Description UX** : Le joueur voit la température actuelle.
**Description UI** : Jauge verticale (Thermomètre) avec mercure rouge. Graduations colorées (Bleu bas, Rouge haut).
**Emplacement** : HUD ou Info Case.
**Intégration** : Widget.
**Navigation** : N/A
**Navigation** : Clic -> Détail.
**Événements** : `UPDATE_TEMP`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Bruit de vent glacé / Cigales.
- **Sons** : `shiver.mp3`.
- **Graphiques** : Sprite Thermomètre.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône Soleil/Flocon.
- **Vidéos** : Effet de chaleur (ondulation).
- **Animations** : Niveau qui monte/descend.
- **Couleurs** : Dégradé Bleu/Rouge.
- **Textes** : "20°C".
- **Formes** : N/A
- **Formes** : Jauge.

View File

@@ -3,6 +3,17 @@
## Définition
L'utilisateur humain.
## Variantes de représentation
### Joueur actif
Le joueur actif est représenté par :
- **un profil** (pseudo, progression, paramètres) ;
- **un avatar personnalisable** (genre, skins, titres) : voir `avatar_joueur.md` et `inventaire_skins.md`.
### Autres joueurs
Les autres joueurs (humains) peuvent être représentés dans des modules sociaux (carte monde, visite, classements) par :
- un **portrait/mini-avatar** cohérent avec leurs skins (si le profil requis nest pas accessible, afficher un état verrouillé explicite, pas de dégradation silencieuse) ;
- un **pseudo** et des indicateurs de progression (niveau, réputation) selon les règles du module.
## Propriétés
- **Compte** : Authentifié par clé privée (pas de mot de passe).
- **Ressources** : Pièces, Unités de recherche.
@@ -34,7 +45,10 @@ L'utilisateur humain.
"settings": {
"music_enabled": "boolean",
"bot_profile_id": "integer"
}
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -46,7 +60,7 @@ L'utilisateur humain.
| Animaux | 3 couples (6 animaux) |
### Scores Initiaux
N/A
**Niveau Joueur** : 1.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -56,46 +70,57 @@ Inscription.
Suppression compte.
### Hérédité
N/A
**Héritage** : Le joueur garde son niveau et ses recherches après un reset.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Confort** : Le joueur doit gérer la température pour ses animaux.
### Impact Milieu (Biome)
N/A
**Stratégie** : Le joueur choisit les biomes à développer.
### Impact Saisons
N/A
**Planification** : Le joueur adapte sa stratégie aux saisons.
### Impact Heure / Jour-Nuit
N/A
**Gestion** : Le joueur gère les cycles d'ouverture.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Démarrage autonome** : Le joueur reçoit 3 couples reproducteurs basiques (Lapins/Poules/Canards selon biome) pour garantir une reproduction immédiate et alimenter le marché bas prix.
### Impact Mort
N/A
**Gestion Crise** : Le joueur doit réagir aux décès.
### Impact Nourriture
N/A
**Logistique** : Le joueur achète la nourriture.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Objectif** : Maximiser l'attractivité.
### Impact Valeur
N/A
**Finance** : Gérer le budget.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Domaine | Paramètre | Valeur | Unité | Règle |
|---|---|---:|---|---|
| Camion | Actions/minute | 6 | actions | Limite anti-spam côté UI (évite double-clic achats/ventes). |
| Nurserie | Ouverture panel | 250 | ms | Transition UI (snappy) pour boucles fréquentes. |
| Accueil | Placement animal | 1 | interaction | Tap-to-select → Tap-to-place en 1 geste (accessibilité). |
| Recherche | Lancement projet | 1 | clic | 1 clic depuis menu achats → centre recherche → projet. |
| Labo | Achat offre rare | 1 | drag/drop | Alternatif : tap offre → tap camion (mobile). |
| Visite | Pan/zoom | 60 | FPS | Cible de fluidité sur la carte isométrique. |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition | Impact |
|---|---:|---|---|---|
| Parking | 05 | pièces / visite | Selon politique du joueur | Ajuste satisfaction visiteurs et revenus. |
| Marketing | 05000 | pièces / action | Campagne publicitaire | Augmente affluence temporaire. |
| Skins / thèmes | 02000 | pièces / item | Achat cosmétique | Aucun impact gameplay (sauf attractivité visuelle si spécifié ailleurs). |
### Trajet Visiteurs
N/A
**Design** : Le joueur trace les routes.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -104,11 +129,18 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Avantage |
| :--- | :--- | :--- |
| 1 | 0 | Accès de base |
| 2 | 1000 | Accès statistiques avancées |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function playerAction(action):
if checkResources(action.cost):
execute(action)
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
@@ -118,6 +150,15 @@ N/A
# 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)
### HUD Principal (Permanent)
**Description UX** : Le joueur voit en permanence ses ressources et accès rapides.
@@ -128,11 +169,11 @@ N/A
**Événements** : `UI_CLICK`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_hud_ambience.mp3` (très léger, optionnel, volume 15%).
- **Sons** : `ui_click.mp3`.
- **Graphiques** : Style UI "Bois et Pierre" ou "Moderne Clean".
- **Images** : Icônes (Pièce, Fiole, Marteau, Carte).
- **Vidéos** : N/A
- **Vidéos** : `hud_counters_hint.webm` (micro-anim 1s, loop, optionnel sur tutoriel).
- **Animations** : Compteurs qui défilent quand gain/perte.
- **Couleurs** : Or, Bleu, Blanc.
- **Textes** : Chiffres, Labels menus.
@@ -147,12 +188,12 @@ N/A
**Événements** : `SAVE_PROFILE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_profile_open.mp3` (jingle court).
- **Sons** : `save_success.mp3`.
- **Graphiques** : Portraits de bots.
- **Images** : Avatars joueurs.
- **Vidéos** : N/A
- **Animations** : N/A
- **Couleurs** : N/A
- **Textes** : Description des bots ("Le Conservateur : Achète de la nourriture...").
- **Vidéos** : `profile_avatar_spin.webm` (aperçu rotation/pose, 2s, loop).
- **Animations** : Checkmark vert.
- **Couleurs** : Bleu UI.
- **Textes** : Description des bots ("Le Conservateur : Achète de la nourriture, évite les risques").
- **Formes** : Cartes de sélection.

51
docs/specs/laborantin.md Normal file
View File

@@ -0,0 +1,51 @@
# Laborantin (Laboratoire — carte monde)
## 1. Définition
Personnage de service associé au site “Laboratoire” sur la carte du monde. Il présente les offres rares, les services danalyse/synthèse et sert de personnage contextuel lors des événements du laboratoire.
## 2. Fonctions
* **Accueil labo** : Introduit les onglets “Offres” et “Services” et le gating (niveau/réputation).
* **Analyse** : Affiche létat dune analyse génétique (en cours/terminée/échec) avec cause explicite.
* **Synthèse** : Affiche létat dune synthèse (succès/échec) et la traçabilité (seed, fiabilité, rareté).
* **Alerte sécurité** : Personnage contextuel dun `LAB_SECURITY_ALERT`.
## 3. Icone
* **Représentation :** Éprouvette + brin ADN.
* **Couleur dominante :** Cyan néon / indigo (hérite du site labo).
## 4. Interactions
* **Ouverture labo** : clic sur POI laboratoire.
* **Achat offre** : drag offre → camion (le laborantin valide lachat et affiche le reçu).
* **Consultation rapport** : clic “Voir rapport”.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"npc_id": "lab_tech_01",
"type": "laborantin",
"name": "Iris",
"assigned_site": "lab_site_uuid",
"state": "enum (IDLE, PRESENTING, ANALYZING, SYNTHESIZING, ALERT)",
"theme_variant": "string"
}
```
### Règles Métier
* Le laborantin est **lié** au `laboratoire.md` (site carte monde).
* Les erreurs doivent être explicitement remontées : `LAB_LOCKED_REPUTATION`, `ANALYSIS_FAILED`, `LAB_SECURITY_ALERT`, etc.
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Style** : Néon / techno, cohérent avec `laboratoire.md`.
* **Rendu** : Portrait + bulles détat dans la modal labo ; pas nécessairement un sprite sur la carte monde.
## Affichage contextuel (modules)
- **Laboratoire** (`laboratoire.md`) : nouvelles offres, analyse terminée, synthèse terminée, alerte sécurité, fermeture temporaire.
- **Camion** (`camion.md`) : au moment de lachat (drag) si le labo refuse (gating/stock/fonds).
## Skins & thèmes
* Palette et décor dérivent du thème (`theme.md`), avec variante “tech” du site.
* Accessoires (lunettes, badge, gants) via skins (`inventaire_skins.md`) si activé.

View File

@@ -1,118 +1,884 @@
# Spécifications : Laboratoire (Site)
## Définition
Un laboratoire est un point d'intérêt spécial sur la Carte du Monde (POI).
Un laboratoire est un point d'intérêt spécial sur la Carte du Monde (POI) dédié à la recherche avancée et à l'obtention de spécimens rares. Il permet au joueur d'accéder à des animaux génétiquement modifiés ou disparus, ainsi qu'à des technologies de pointe pour son zoo.
## Fonction
- **Offres Spéciales** : Propose périodiquement des œufs ou bébés animaux rares.
- **Prix Fixe** : Contrairement aux zoos, les ventes du laboratoire sont souvent à prix fixe, sans enchères (ou règles spécifiques).
- **Icône** : 🔬
## Fonctions
| Fonction | Description | Entrées | Sorties |
|---|---|---|---|
| Offres Spéciales | Propose périodiquement des œufs ou bébés animaux rares, souvent introuvables ailleurs. | Argent, Réputation | Animal Rare (Œuf/Bébé) |
| Analyse Génétique | Permet d'analyser l'ADN d'un animal pour découvrir ses traits cachés ou potentiels de mutation. | Échantillon (Animal), Argent | Rapport Génétique complet |
| Synthèse | Création d'animaux à partir de fragments d'ADN collectés (feature avancée). | Fragments ADN, Argent, Temps | Nouvel Animal (Clone) |
## Interaction
- **Achat** : Glisser l'offre du laboratoire vers le camion du joueur.
## Icone de base
Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie.
# Annexes Techniques
## Interactions
| Acteur A | Action | Acteur B | Résultat |
|---|---|---|---|
| Joueur | Cliquer | Laboratoire | Ouvre l'interface des offres et services du labo. |
| Joueur | Glisser-Déposer | Offre (Animal) vers Camion | Achète l'animal et lance le transport vers le zoo. |
| Joueur | Sélectionner | Animal du Zoo | Lance une analyse génétique (si le labo est débloqué). |
## 1. Données et États
### Modèle de Données (JSON)
```json
{
"id": "uuid",
"type": "lab",
"current_offer": { "animal_type": "string", "rarity": "int", "price": "int", "expires_at": "timestamp" }
}
```
## Personnage contextuel (événements & interaction)
Voir `laborantin.md`.
### Caractéristiques Initiales
N/A
### Affichage
Le laborantin saffiche lorsque :
- le module est **actionné** (ouverture du labo, survol/prévisualisation dune offre, achat, lancement danalyse/synthèse) ;
- un **événement** du laboratoire survient (nouvelles offres, analyse/synthèse terminée, alerte sécurité, fermeture temporaire).
### Scores Initiaux
N/A
### Déclencheurs (événements)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_LAB_SITE` | clic POI | portrait + état (ouvert/fermé) + onglets |
| `LAB_OFFERS_GENERATED` | refresh TTL | bulle “Nouvelles offres” + CTA “Voir offres” |
| `LAB_OFFER_PURCHASED` | achat validé | reçu + rappel livraison camion |
| `LAB_ANALYSIS_COMPLETED` | analyse terminée | CTA “Voir rapport” |
| `LAB_SYNTHESIS_DONE` | synthèse terminée | résultat + CTA “Voir spécimen” |
| `LAB_SECURITY_ALERT` | incident | bulle alerte + CTA “Voir état” |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération carte.
### Skins & thèmes
Palette et accessoires suivent `theme.md` (variante “tech”) et `inventaire_skins.md` si activé.
### Conditions de Disparition
N/A
## Annexes Techniques
### Hérédité
N/A
### 1. Données et États
## 3. Impacts Environnementaux
### Impact Température
N/A
#### Caractéristiques Initiales
| Caractéristique | Valeur Initiale | Type | Description |
|---|---|---|---|
| Niveau Tech | 1 | Entier | Niveau technologique du labo, débloquant des offres plus rares. |
| Slots Offres | 3 | Entier | Nombre d'animaux proposés simultanément. |
| Réputation Requise | 500 | Entier | Score de réputation minimum pour accéder au labo. |
### Impact Milieu (Biome)
N/A
#### Scores Initiaux
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---|---|---|
| Fiabilité | 90% | 0-100% | Probabilité de succès des synthèses ou analyses sans erreur. |
| Prestige | 10 | 0-100 | Influence la rareté des animaux proposés (plus haut = plus rare). |
### Impact Saisons
N/A
### 2. Cycles de Vie et Apparition
### Impact Heure / Jour-Nuit
N/A
#### Conditions d'Apparition
| Condition | Seuil | Opérateur | Résultat |
|---|---|---|---|
| Exploration Carte | Zone "Ville" ou "Industrie" | Est | Le laboratoire est découvert sur la carte du monde. |
| Niveau Joueur | 5 | >= | Le laboratoire devient interactif. |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
#### Conditions de Disparition
| Condition | Seuil | Opérateur | Résultat |
|---|---|---|---|
| Événement "Faillite Labo" | Aléatoire | Est | Le laboratoire ferme temporairement (24h). |
| Offre Expirée | 24h | > | L'offre d'animal est remplacée par une nouvelle. |
### Impact Mort
N/A
#### Hérédité
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---|---|
| Animal Cloné | Traits Génétiques | 99% | Oui (1% instabilité génétique) |
| Animal Analysé | Aucun | 0% | Non (Analyse non invasive) |
### Impact Nourriture
N/A
### 3. Impacts Environnementaux
### Impact Attractivité (Visiteurs/Animaux)
N/A
#### Impact Température
| Plage Température | Effet sur l'entité | Bonus/Malus |
|---|---|---|
| < 0°C | Ralentissement des machines (synthèse) | Durée +20% |
| > 35°C | Surchauffe des serveurs (analyse) | Coût Énergie +15% |
| 20°C (Optimal) | Fonctionnement optimal | Vitesse +5% |
### Impact Valeur
N/A
#### Impact Milieu (Biome)
| Biome | Compatibilité | Bonus/Malus |
|---|---|---|
| Urbain | 100% | Aucun (Emplacement standard) |
| Toundra | 80% | Coût maintenance +10% (Chauffage) |
| Désert | 70% | Coût maintenance +20% (Climatisation) |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Rotation Offres** : 1 offre toutes les 4h à 24h.
#### Impact Saisons
| Saison | Effet | Modificateur |
|---|---|---|
| Hiver | Recherche sur animaux polaires favorisée | Rareté Animaux Froids +10% |
| Été | Recherche sur animaux tropicaux favorisée | Rareté Animaux Chauds +10% |
| Printemps | Pic de naissances (offres bébés) | Nombre Offres +1 |
| Automne | Analyse de maladies (prévention) | Coût Analyse -10% |
### Dépenses (Boutiques/Visiteurs)
N/A
#### Impact Heure / Jour-Nuit
| Période | Activité | Visibilité |
|---|---|---|
| Jour (08h-20h) | Ouvert au public (visites scolaires) | Haute (Enseignes allumées) |
| Nuit (20h-08h) | Recherche intensive (offres "sombres") | Basse (Lumières tamisées) |
### Trajet Visiteurs
N/A
### 4. Impacts Biologiques et Sociaux
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Nouvelle Offre Rare** : Notification globale ou locale.
#### Impact Reproduction
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Fertilité Assistée | +20% | Si recherche "Fécondation In Vitro" débloquée |
| Clonage | Reproduction Naturelle = 0%, Production par Synthèse = 100% | Si l'espèce est éteinte ou si loption \"Synthèse\" est utilisée au lieu dun cycle de reproduction |
## 7. Progression
### Tableau des Upgrades
N/A
#### Impact Mort
| Cause | Conséquence | Durée |
|---|---|---|
| Échec Synthèse | Perte des fragments ADN | Instantané |
| Accident Labo | Fermeture temporaire pour décontamination | 48h |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
#### Impact Nourriture
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---|---|---|
| Nutriments Synthétiques | +50 (pour clones) | 200$ / dose | 5 (Indispensable pour clones) |
| Nourriture Standard | +10 (pour clones) | 50$ / kg | 1 (Mal digéré par clones) |
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `LAB_OFFER` | Info | "Le laboratoire propose un spécimen rare !" |
#### Impact Attractivité Visiteurs
| Action/État | Gain Attractivité | Rayon d'action |
|---|---|---|
| Découverte Espèce Éteinte | +500 (Global Zoo) | Monde entier (Buzz médiatique) |
| Visite du Labo (si module) | +20 | 10m autour du bâtiment |
# Annexes UX/UI
#### Impact Attractivité Animaux
| Espèce | Interaction | Effet Stress |
|---|---|---|
| Toutes | Prélèvement ADN | +10 (Stress léger) |
| Clones | Retour à la vie sauvage | +50 (Stress fort, inadapté) |
## 1. Expérience Utilisateur (UX)
### Offre Rare (Passif)
**Description UX** : Le laboratoire a un stock spécial.
**Description UI** : Halo brillant autour du labo. Icône "!" ou "ADN".
**Emplacement** : Carte Monde.
**Intégration** : Effet visuel.
**Navigation** : N/A
**Événements** : `LAB_GLOW`.
#### Impact Valeur
| Facteur | Variation Prix | Condition |
|---|---|---|
| Rareté Génétique | +200% | Si l'animal a des traits "Légendaires" |
| Défaut de Clonage | -50% | Si l'animal a le trait "Instable" |
#### Assets
- **Musiques** : N/A
- **Sons** : `sci_fi_hum.mp3`.
- **Graphiques** : Halo bleu néon.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Pulsation.
- **Couleurs** : Bleu électrique / Violet.
- **Textes** : N/A
- **Formes** : N/A
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion)
| Type Route | Vitesse Max | Consommation |
|---|---|---|
| Autoroute (vers Labo) | 110 km/h | 10 L/100 |
| Piste (accès difficile) | 30 km/h | 20 L/100 |
#### Vitesse (Nurserie)
| Action | Durée de base | Réduction par Upgrade |
|---|---|---|
| Incubation Œuf Rare | 72h | -10% par niveau d'incubateur |
| Soin Post-Clonage | 24h | -5% par niveau de vétérinaire |
#### Vitesse (Accueil)
| Flux | Visiteurs/Minute | Capacité Max |
|---|---|---|
| Entrée Labo (Visite) | 5 | 50 (Groupe restreint) |
#### Vitesse (Recherche)
| Projet | Durée (Jours) | Coût Accélération |
|---|---|---|
| Séquençage ADN | 2 jours | 1000$ |
| Résurrection Mammouth | 30 jours | 50,000$ |
#### Vitesse (Labo)
| Analyse | Durée | Fiabilité |
|---|---|---|
| Test Paternité | 1h | 99.9% |
| Dépistage Maladies | 4h | 95% |
#### Vitesse (Visite)
| Zone | Temps Moyen | Facteur Ralentissement |
|---|---|---|
| Hall d'exposition | 15 min | Si guide présent (+10 min) |
#### Dépenses (Billeterie)
| Poste | Coût Hebdo | Maintenance |
|---|---|---|
| Guichet Spécial Labo | 500$ | 50$ |
#### Dépenses (Boutiques)
| Article | Coût Achat | Marge |
|---|---|---|
| Kit Petit Chimiste | 20$ | 40% |
| Peluche Dinosaure | 15$ | 60% |
#### Dépenses (Visiteurs)
| Type Dépense | Montant Moyen | Fréquence |
|---|---|---|
| Don pour la Recherche | 10$ | 1 visiteur sur 20 |
| Ticket Visite Guidée | 25$ | 1 visiteur sur 10 |
#### Dépenses (Employés)
| Rôle | Salaire | Prime |
|---|---|---|
| Généticien | 3000$ / mois | +500$ par découverte majeure |
| Agent de Sécurité | 1800$ / mois | Aucune |
#### Dépenses (Nurseries)
| Soin | Coût Matériel | Coût Personnel |
|---|---|---|
| Suivi Clonage | 500$ / jour | 200$ / jour |
#### Dépenses (Nourriture)
| Type | Prix/Kg | Fournisseur |
|---|---|---|
| Gel Nutritif | 100$ | LaboCorp |
#### Dépenses (Acceuil des animaux)
| Installation | Coût Construction | Entretien |
|---|---|---|
| Enclos Stérile | 10,000$ | 500$ / semaine |
#### Dépenses (Camion)
| Trajet | Coût Essence | Usure |
|---|---|---|
| Zoo <-> Labo (50km) | 50$ | 2% |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville
| Moyen Transport | Temps | Coût | Fréquence |
|---|---|---|---|
| Navette Scientifique | 30 min | 5$ | 1/h |
##### Trajet Visiteurs vers/depuis les animaux
| Chemin | Distance | Attrait |
|---|---|---|
| Tunnel Vitré | 50m | 8/10 (Vue sur labo) |
##### Trajet Visiteurs vers/depuis les boutiques
| Emplacement | Détour Moyen | Taux de Conversion |
|---|---|---|
| Sortie Labo | 0m (Passage obligé) | 30% |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo)
| Flux | Temps Attente | Saturation |
|---|---|---|
| Entrée VIP Labo | 0 min | 10% |
### 6. Événements
#### Événements du Jeu
| Event | Déclencheur | Effet Global | Durée |
|---|---|---|---|
| Découverte Majeure | Aléatoire (1/an) | Attractivité Science +20% | 1 mois |
| Fuite de Spécimen | Sécurité < 20% | Panique (Visiteurs partent) | Jusqu'à capture |
#### Événements du Carte
| Event | Lieu | Impact Zone |
|---|---|---|
| Conférence Science | Ville voisine | Hôtels complets, affluence +10% |
#### Événements du Zoo
| Event | Cible | Conséquence |
|---|---|---|
| Mutation Spontanée | Animal en gestation | Naissance d'un variant rare |
#### Événements du Ville / Visiteur
| Event | Impact Affluence | Impact Budget |
|---|---|---|
| Manifestation Anti-Clonage | -15% | Sécurité +10% (Coût) |
#### Événements du Visiteur
| Action | Satisfaction | Besoin |
|---|---|---|
| Voir un clone | +20 (Émerveillement) | Éducation |
| Voir une expérience ratée | -30 (Dégoût) | Sécurité |
#### Événements du Joueur
| Action | Coût Action | Gain XP |
|---|---|---|
| Financer Recherche | 10,000$ | +500 XP Science |
### 7. Progression
#### Tableau des Upgrades
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---|---|---|
| Labo Niv 1 | 50,000$ | Zoo Niv 3 | Analyses simples, Offres standards |
| Labo Niv 2 | 150,000$ | Labo Niv 1 | Séquençage ADN, Offres Rares |
| Labo Niv 3 | 500,000$ | Labo Niv 2 | Clonage, Offres Légendaires |
### 8. Logique et Interfaces
#### Pseudo-code Impacts
| Algorithme | Entrées | Logique Simplifiée | Sortie |
|---|---|---|---|
| Calcul Succès Clonage | Fiabilité Labo, Rareté Animal | `Succès = Fiabilité - (Rareté * 5)` | Booléen (Réussite/Échec) |
| Génération Offre | Niveau Labo, Seed Aléatoire | `Rareté = Rand(1, Niveau * 2)` | Animal proposé |
#### Messages d'Infos / Alerte
| Type | Message | Condition | Priorité |
|---|---|---|---|
| Info | "Le laboratoire propose un spécimen rare !" | Nouvelle offre générée | 3 |
| Warn | "Échec de la synthèse génétique." | Synthèse ratée | 4 |
| Error | "Alerte de sécurité au laboratoire !" | Fuite ou Intrusion | 5 (Max) |
## 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)
#### Description UX
| Étape Utilisateur | Action Attendue | Feedback Système |
|---|---|---|
| Notification Offre | Clic sur notif | Caméra centre sur Labo + Halo |
| Consultation Offres | Clic sur Labo | Ouverture Modal "Offres du Labo" |
| Achat Animal | Drag & Drop vers Camion | Son "Validation", Animation particule ADN |
#### Description UI
| Élément | Type (Bouton/Panel) | Contenu | État par défaut |
|---|---|---|---|
| Panel Labo | Fenêtre Modale | Liste animaux, Stats Labo | Caché |
| Bouton Synthèse | Bouton Action | Icône éprouvette | Grisé (si pas de fragments) |
#### Emplacement
| Élément | Position | Ancrage | Z-Index |
|---|---|---|---|
| Notif Labo | Haut Droite | Top-Right | 100 |
| Modal Labo | Centre Écran | Center | 200 |
#### Intégration
| Composant Parent | Contraintes | Responsive |
|---|---|---|
| HUD Principal | Max 80% largeur écran | Oui |
#### Navigation
| De l'écran | Vers l'écran | Transition | Trigger |
|---|---|---|---|
| Carte Monde | Vue Labo | Zoom fluide | Clic Batiment |
| Vue Labo | Carte Monde | Dezoom | Bouton Fermer |
#### Événements
| Input Utilisateur | Action Système | Son | Animation |
|---|---|---|---|
| Hover Offre | Affiche Tooltip Détails | `hover_tech.mp3` | Scale 1.05 |
| Clic Achat | Débite argent, ajoute animal | `buy_success.mp3` | Flash vert |
#### Assets Skinables
##### Musiques
| Piste | Contexte | Loop | Volume |
|---|---|---|---|
| `lab_ambient.mp3` | Vue intérieure Labo | Oui | 40% |
##### Sons
| SFX | Trigger | Priorité |
|---|---|---|
| `sci_fi_hum.mp3` | Ambiance fond | Basse |
| `dna_scan.mp3` | Analyse terminée | Haute |
##### Graphiques
| Asset | Format | Résolution |
|---|---|---|
| `icon_lab.png` | PNG | 128x128 |
| `bg_lab_interior.jpg` | JPG | 1920x1080 |
##### Images
| Image | Usage | Alt Text |
|---|---|---|
| `dna_strand.png` | Décoration UI | "Brin d'ADN stylisé" |
##### Vidéos
| Clip | Usage | Durée |
|---|---|---|
| `cloning_process.mp4` | Cinématique succès | 5s |
##### Animations
| Nom | Cible | Durée | Type (CSS/JS) |
|---|---|---|---|
| `pulse_neon` | Bordures UI | 2000ms | CSS Keyframes |
##### Couleurs
| Code Hex | Usage | Sémantique |
|---|---|---|
| #00FFFF | Texte, Bordures | Technologie, Futur |
| #202040 | Fond Panel | Mystère, Science |
##### Textes
| Clé i18n | Valeur FR | Valeur EN |
|---|---|---|
| `LAB_TITLE` | Laboratoire de Génétique | Genetics Lab |
| `BTN_SYNTHESIZE` | Synthétiser | Synthesize |
##### Formes
| Forme | Usage | Style Bordure |
|---|---|---|
| Hexagone | Icônes, Boutons | Solid 2px |
## Définition
| Champ | Valeur |
|---|---|
| Concept | Site “Laboratoire” (carte monde) : POI de recherche, offres rares, analyses génétiques et synthèse/clonage (fonctionnalité avancée). |
| Rôle | Fournir un point daccès à des animaux/offres exclusives et à des services de science (analyse traits cachés, création), avec gating réputation/niveau. |
| Portée | Site externe (world map) + interface de services ; interactions avec `camion` (transport) et `centre_recherche` (recherche). |
| Contrainte | Pas de cache/mémorisation : offres et résultats calculés à la volée (seed explicitée) ; pas de fallback silencieux sur échec (erreur + log + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir labo | clic POI | `site_id` | modal | liste offres + services | Event `OPEN_LAB_SITE` |
| Générer offres | refresh/expiration | `lab_level`, seed | offres | TTL 24h, remplacement complet | Event `LAB_OFFERS_GENERATED` |
| Acheter une offre | drag vers camion | `offer_id`, funds | cargo camion | transaction atomique | Event `LAB_OFFER_PURCHASED` |
| Analyse génétique | sélectionner animal | `animal_id`, fee | rapport | révèle traits selon fiabilité | Event `LAB_ANALYSIS_COMPLETED` |
| Synthèse/clonage | action | fragments, fee, time | nouvel animal | fiabilité vs rareté => succès/échec | Event `LAB_SYNTHESIS_DONE` |
| Fermer temporairement | incident | sécurité < seuil | site fermé | cooldown 24h/48h | Event `LAB_CLOSED_TEMP` |
| Visite publique | jour | module visite | attractivité + | visiteurs/flux | Event `LAB_PUBLIC_VISIT` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Microscope néon + brin ADN |
| Couleur dominante | Cyan néon (#00FFFF) + indigo (#202040) |
| Variantes | `icon_lab.png`, `icon_lab_microscope.png` |
| États | `open`, `closed`, `new_offers`, `security_alert` |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Consulter offres | Consultation | réputation ok | clic labo | modal offres | `LAB_LOCKED_REPUTATION` |
| Acheter | Action | fonds ok + camion idle | drag offre → camion | mission camion | `NOT_ENOUGH_COINS`, `TRUCK_BUSY` |
| Lancer analyse | Action | animal sélectionné | choisir animal → payer | rapport | `ANALYSIS_FAILED` |
| Lancer synthèse | Action | fragments | synthétiser → confirmer | file synthèse | `NOT_ENOUGH_FRAGMENTS` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `site_id` | uuid_v4 | `uuid_v4` | DB | - |
| `site_type` | string | `lab_site` | DB | constant |
| `lab_level` | int | 1 | DB | 1..3 (ex) |
| `requires.reputation_min` | int | 500 | config | gating |
| `offers[].offer_id` | uuid_v4 | `uuid_v4` | DB | unique |
| `offers[].expires_at` | timestamp | - | DB | UTC |
| `offers[].item_type` | string | `egg` | DB | `egg/baby/animal` |
| `offers[].species_id` | string | `MAMMOTH` | DB | enum |
| `offers[].price.coins` | int | 20000 | DB | >=0 |
| `scores.reliability` | float | 0.9 | config | 0..1 |
| `scores.prestige` | int | 10 | config | 0..100 |
| `state.is_open` | boolean | true | DB | fermeture temp |
| `state.closed_until` | timestamp \| null | - | DB | UTC |
| `rng.seed` | string | `lab_offer_seed` | DB | auditable |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Niveau tech | 1 | int | offres |
| Slots offres | 3 | count | simultané |
| Réputation requise | 500 | pts | gating |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Fiabilité | 90% | 0..100% | succès |
| Prestige | 10 | 0..100 | rareté |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Découverte | exploration | zone | POI visible | persiste |
| Interactif | niveau joueur | >=5 | UI active | gating réputation |
| Refresh offres | 24h | seed | nouveaux items | TTL |
| Fermeture | incident | sécurité | closed_until | observable |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Exploration carte | zone “Ville/Industrie” | est | POI découvert |
| Niveau joueur | 5 | >= | interactif |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Faillite labo | événement | est | fermeture 24h |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Traits clonés | Oui | 99% + instabilité 1% |
| Analyses | Oui | rapports conservés |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet labo | Notes |
|---|---|---|
| < 0°C | durée synthèse +20% | machines |
| > 35°C | coût énergie +15% | surchauffe |
| 20°C | vitesse +5% | optimal |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Urbain | aucun | nominal |
| Toundra | maintenance +10% | chauffage |
| Désert | maintenance +20% | clim |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | rareté froid +10% | offers |
| Été | rareté chaud +10% | offers |
| Printemps | offres +1 | bébés |
| Automne | coût analyse -10% | maladies |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Jour | ouvert au public | enseignes |
| Nuit | recherche intensive | offres “sombres” |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Fertilité assistée | +20% | recherche débloquée |
| Clonage | reproduction naturelle 0 | espèce éteinte |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Échec synthèse | perte fragments | instant |
| Accident | fermeture 48h | décontamination |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Nutriments synthétiques | santé +50 (clone) | indispensable clones |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Découverte espèce éteinte | +500 (global) | monde | buzz in-game |
| Visite labo | +20 | 10m | module |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Prélèvement ADN | stress +10 | toutes espèces |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Traits légendaires | +200% | rareté génétique |
| Instable | -50% | défaut clonage |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Autoroute | 110 km/h | vers labo |
| Piste | 30 km/h | accès difficile |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Incubation œuf rare | 72h base | -10%/lvl incubateur |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Flux visite | 5/min | capacité 50 |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Séquençage | 2 jours | accélération payante |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tests | 1h..4h | fiabilité |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Guide | +10 min | module |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Guichet spécial | 500 | $/semaine | visite |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Kit chimiste | 20 | $ | marge 40% |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Don recherche | 10 | $ | 1/20 |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Généticien | 3000 | $/mois | prime |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Suivi clonage | 500 | $/jour | matériel |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Gel nutritif | 100 | $/kg | fournisseur |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Enclos stérile | 10000 | $ | entretien |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Trajet 50km | 50 | $ | usure 2% |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Labo | navette | afflux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Hall | Tunnel vitré | curiosité | passage |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Sortie labo | Boutique | passage obligé | conversion |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée VIP | Labo | ticket | attente 0 |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `LAB_OFFERS_GENERATED` | refresh | seed | nouvelles offres |
| `LAB_ANALYSIS_COMPLETED` | fin | report_id | rapport |
| `LAB_SYNTHESIS_DONE` | fin | success | nouvel animal/échec |
| `LAB_SECURITY_ALERT` | sécurité | - | fermeture |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `LAB_POI_DISCOVERED` | exploration | marker |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `TRUCK_DELIVERS_LAB_CARGO` | retour | dépôt accueil/nurserie |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ANTI_CLONE_PROTEST` | aléatoire | affluence - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SEES_CLONE` | visite | satisfaction + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_FUNDS_RESEARCH` | action | xp science + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 50000 | analyses simples | offres standard |
| 2 | 150000 | séquençage | offres rares |
| 3 | 500000 | clonage | légendaire |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeCloningSuccess` | reliability, rarity | bool | formule |
| `generateLabOffer` | level, seed | offer | auditable |
| `canAccessLab` | reputation, level | bool | gating |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `LAB_TITLE` | Info | "Laboratoire de Génétique." | ouverture |
| `LAB_LOCKED_REPUTATION` | Warning | "Réputation insuffisante." | gating |
| `LAB_SECURITY_ALERT` | Error | "Alerte de sécurité au laboratoire." | fuite/intrusion |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir nouvelle offre | découvrir | notif | clic notif → focus POI |
| Acheter | obtenir rare | transport | drag → camion |
| Analyser | révéler traits | coût | CTA direct dans fiche |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Modal labo | onglets offres/services | open/closed |
| Cartes offre | prix + rareté | locked/available |
| Bouton synthèse | fragments requis | enabled/disabled |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | POI | halo |
| Modal | centre | 80% largeur |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | transport | drag offre |
| `accueil_animaux.md` | dépôt | adultes |
| `nurserie.md` | dépôt | œufs/bébés |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | clic POI | modal |
| Acheter | drag offre → camion | mission |
| Fermer | bouton X | retour carte |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_LAB_SITE` | clic | modal |
| `CLICK_BUY_OFFER` | drag | achat |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `lab_ambient.mp3` | modal | loop | néon |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `dna_scan.mp3` | analyse ok | moyen |
| `buy_success.mp3` | achat | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `dna_strand.png` | UI | décor |
| `icon_lab.png` | POI | lisible |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `bg_lab_interior.jpg` | fond |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `cloning_process.mp4` | succès | 5.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| `pulse_neon` | bordures | 2000ms |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `lab_cyan` | #00FFFF | accents |
| `lab_indigo` | #202040 | fond |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `LAB_TITLE` | Laboratoire de Génétique | Genetics Lab |
| `BTN_SYNTHESIZE` | Synthétiser | Synthesize |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Boutons | hexagone | bordure 2px |

49
docs/specs/maire.md Normal file
View File

@@ -0,0 +1,49 @@
# Maire (Ville)
## 1. Définition
Personnage représentant la ville sur la carte du monde. Il sert dinterface narrative-fonctionnelle pour les événements de ville (festival, grève, bonus économique) qui impactent le flux de visiteurs et le budget moyen.
## 2. Fonctions
* **Annonce événements** : Présente les événements de ville et leurs impacts chiffrés.
* **Relation ville-zoo** : Expose létat de relation/jumelage (si présent dans `ville.md`).
* **Point dentrée UI** : Personnage contextuel quand le joueur sélectionne une ville ou quand un événement `CITY_EVENT` survient.
## 3. Icone
* **Représentation :** Écharpe tricolore / blason.
* **Couleur dominante :** Bleu (institution) + accents thème.
## 4. Interactions
* **Clic ville** : ouvre le panneau ville (population, richesse, événements).
* **Clic alerte** : deep-link vers la ville concernée depuis une notification.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"npc_id": "mayor_01",
"type": "maire",
"city_id": "uuid",
"name": "M. Dubois",
"state": "enum (IDLE, ANNOUNCING, NEGOTIATING)",
"current_event": "string | null"
}
```
### Règles Métier
* Les impacts annoncés par le maire doivent être **indexés** par la ville (population, richesse, distance, événement actif) conformément aux formules de `ville.md`.
* Pas de promesse “best effort” : si un événement est actif, il est listé, daté et son effet est explicite.
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Carte monde (UI panneau + portrait).
* **Style** : Cohérent avec le thème (costume, écharpe, badge).
## Affichage contextuel (modules)
- **Ville** (`ville.md`) : sélection de ville, événements, variations de flux visiteurs.
- **Attractivité sur ville** (`attractivite_zoo_sur_ville.md`) : explication des variations de flux (si le module expose une UI).
## Skins & thèmes
* Variantes par thème (costume, palette) via `theme.md`.
* Accessoires via `inventaire_skins.md` si des skins “carte monde / ville” existent.

534
docs/specs/menu_achats.md Normal file
View File

@@ -0,0 +1,534 @@
# Menu Achats
## 1. Définition
Interface centralisée dédiée aux transactions utilisant la monnaie premium (pièces du zoo) ou standard, regroupant les employés, la nourriture spéciale, les skins et les améliorations. C'est le "hub" économique du joueur.
## 2. Fonctions
* **Catalogue :** Présente tous les articles achetables de manière organisée.
* **Transaction :** Gère la validation des achats et le débit des ressources.
* **Offres :** Peut afficher des promotions ou des packs (bundles).
## 3. Icone
* **Représentation :** Caisse enregistreuse ou Panier d'achat.
* **Couleur dominante :** Vert (billet) et Or (pièce).
## 4. Interactions
* **Accès :** Bouton principal dans la barre d'interface (HUD).
* **Navigation :** Onglets par catégorie (Animaux, Enclos, Employés, Déco, Spécial).
* **Achat Rapide :** Possibilité d'acheter en quantité (x1, x10).
## 5. Annexes Techniques
### Données (JSON)
```json
{
"shop_categories": [
{
"id": "employees",
"label": "Personnel",
"items": ["healer_01", "feeder_01", "security_01"]
},
{
"id": "consumables",
"label": "Nourriture Spéciale",
"items": ["food_boost_lion", "food_boost_monkey"]
}
],
"currency_balance": {
"coins": 1500,
"gems": 50
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* **Déblocage :** Certains articles ne sont visibles qu'à partir d'un certain niveau de zoo.
* **Stock :** Certains items peuvent être en quantité limitée (ex: offres du jour).
## 6. Annexes UX/UI
* **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.
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Menu “Achats” : hub UI des transactions (employés, consommables, cosmétiques, upgrades). |
| Rôle | Réduire les clics dachat via catégories/onglets, et garantir des transactions atomiques (débit + attribution). |
| Portée | UI globale (HUD) ; impacte inventaires, bâtiments, personnel, monnaies. |
| Contrainte | Aucun tracking/analytics ; pas de cache/mémorisation côté app : catalogue et soldes sont lus comme état courant à louverture. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir menu achats | clic HUD | `player_id` | modal hub | focus dernière catégorie (état UI local) | Event `OPEN_SHOP_HUB` |
| Charger catalogue | ouverture | `shop_version` | catégories + items | filtrer par niveau, conditions | Event `SHOP_CATALOG_LOADED` |
| Filtrer catégorie | clic onglet | `category_id` | liste items | tri stable, recherche | Event `SHOP_CATEGORY_SELECTED` |
| Prévisualiser item | clic item | `item_id` | panneau détail | affiche prix, effets, prérequis | Event `SHOP_ITEM_PREVIEWED` |
| Acheter item | clic “Acheter” | `item_id`, quantité | débit + attribution | transaction atomique ; pas dachat si fonds insuffisants | Event `SHOP_PURCHASED` |
| Confirmer achat coûteux | seuil | `price` | modal confirm | requis si > 1000 coins | Event `SHOP_CONFIRM_SHOWN` |
| Achat en quantité | clic x1/x10 | quantité | panier/achat | clamp par stock/solde | Event `SHOP_QUANTITY_CHANGED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Caisse / panier |
| Couleur dominante | Vert + or |
| Variantes | `icon_shop_cash.png`, `icon_shop_cart.png` |
| États | normal, hover, disabled (fonds) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Accès hub | Navigation | - | clic HUD | ouvre hub | - |
| Changer onglet | Navigation | - | clic onglet | liste update | - |
| Achat simple | Action | fonds ok | clic acheter | item attribué | `NOT_ENOUGH_COINS` |
| Achat coûteux | Action | fonds ok | acheter → confirm | item attribué | `CANCELLED` |
| Achat x10 | Action | fonds/stock ok | select x10 → acheter | 10 items | `LIMIT_REACHED` |
## Personnage contextuel (événements & interaction)
Deux personnages contextuels peuvent être affichés selon la section :
- **Vendeur “achat en pièces”** : voir `vendeur_pieces.md` (section “Pièces”, conversion/pack).
- **Vendeur (boutique)** : voir `vendeur.md` (prévisualisation/achat ditems boutique/cosmétiques si le hub les expose).
### Déclencheurs (exemples)
| Section | Event / Action | Effet UI personnage |
|---|---|---|
| Hub | `OPEN_SHOP_HUB` | personnage visible dans len-tête du hub (thématisé) |
| Hub | `SHOP_ITEM_PREVIEWED` | bulle “Détails item” + CTA “Acheter” |
| Hub | `SHOP_CONFIRM_SHOWN` | confirmation contextualisée (prix, quantité) |
| Pièces | ouverture section | vendeur pièces présente les packs + limites |
| Pièces | achat pack | reçu + solde mis à jour ; erreur explicite si paiement impossible |
### Skins & thèmes
Le rendu suit `theme.md` et les skins de la UI/boutique si disponibles via `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `shop_categories[].id` | string | `employees` | config/DB | stable |
| `shop_categories[].label_key` | string | `shop.cat.employees` | i18n | FR/EN |
| `shop_categories[].items[]` | string[] | `["healer_01"]` | config/DB | ids |
| `items[item_id].price.coins` | int | 250 | config | >=0 |
| `items[item_id].price.gems` | int | 0 | config | >=0 |
| `items[item_id].requires.zoo_level` | int | 3 | config | gating |
| `items[item_id].stock_daily` | int \| null | 10 | config | null = illimité |
| `currency_balance.coins` | int | 1500 | DB | source de vérité |
| `currency_balance.gems` | int | 50 | DB | source de vérité |
| `ui.last_category_id` | string | `employees` | client | état UI |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Seuil confirmation | 1000 | coins | règle existante |
| Quantités rapides | 1,10 | unités | boutons |
| Catégorie par défaut | `employees` | id | configurable |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Achats du jour | 0 | 0..∞ | historique local, pas danalytics |
| Dépenses du jour | 0 | 0..∞ | transparence UI |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | jeu lancé | config | hub dispo | bouton HUD |
| Navigation | clic onglets | category_id | liste | tri stable |
| Transaction | achat | item+prix | débit+attribution | atomicité |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte créé | true | est | hub visible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Mode tutorial verrou | true | est | hub masqué temporairement |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Soldes | Oui | persistants DB |
| Achats | Oui | items attribués |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet shop | Notes |
|---|---|---|
| - | aucun | UI |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet shop | Notes |
|---|---|---|
| - | aucun | UI |
#### Impact Saisons (tableau détaillé)
| Saison | Effet shop | Notes |
|---|---|---|
| Saison active | items saisonniers visibles | gating explicite |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet shop | Notes |
|---|---|---|
| - | aucun | - |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | shop nimpacte pas directement |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Achat nourriture spéciale | stock + | transaction ok |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| - | 0 | 0 | UI |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Skins/thèmes achetés | + | valeur perçue | cosmétique |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat upgrade nurserie | level ↑ | transaction ok |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat accueil | capacité ↑ | transaction ok |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat recherche | vitesse ↑ | transaction ok |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat labo | capacité ↑ | transaction ok |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Achat décor | attractivité ↑ | transaction ok |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Recrutement | variable | coins | item employé |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Upgrade | variable | coins | achat |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Consommables | variable | coins | achat |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat capacité | variable | coins | achat |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat upgrade | variable | coins | achat |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_SHOP_HUB` | clic | - | ouvre |
| `SHOP_CATALOG_LOADED` | open | version | liste |
| `SHOP_PURCHASED` | achat | item_id, qty | attribue |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `SHOP_CATEGORY_SELECTED` | onglet | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Hub 1 | 0 | catégories base | - |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `canPurchase` | balance, price | bool | fonds + gating |
| `purchaseItem` | item_id, qty | receipt | atomique |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `NOT_ENOUGH_COINS` | Warning | "Fonds insuffisants." | achat |
| `SHOP_PURCHASED` | Info | "Achat effectué." | succès |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Acheter employé | renforcer zoo | navigation | hub + onglet + CTA |
| Acheter consommable | soigner/booster | quantité | x1/x10 direct |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Onglets | catégories | actif/inactif |
| Carte item | icône, prix, CTA | disabled si fonds |
| Modal confirm | item + prix | ok/cancel |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | bouton | accès direct |
| Modal | centre | hub |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `boutique.md` | boutique interne | cohérence |
| `inventaire_skins.md` | cosmétiques | attribution |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | HUD → menu | hub |
| Acheter | item → CTA | attribution |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SHOP_HUB` | clic | modal |
| `CLICK_BUY_ITEM` | CTA | achat |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `shop_hub_loop.mp3` | menu achats | loop | neutre |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_purchase_success.mp3` | succès | moyen |
| `ui_purchase_fail.mp3` | échec | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `shop_item_card.png` | carte item | scalable |
| `shop_coin_fly_fx.png` | feedback achat | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `shop_banner.png` | header |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `coin_fly.webm` | feedback | 0.8s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièces qui volent | achat | 0.8s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `shop_green` | #2E7D32 | CTA |
| `shop_gold` | #D4AF37 | prix |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `shop.title` | Achats | Shop |
| `shop.buy` | Acheter | Buy |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cartes | rectangles arrondis | lisible |

View File

@@ -7,7 +7,7 @@ Le milieu représente l'environnement écologique d'une case, défini par sa cou
- **Prairie** (Tiers Gauche)
- **Océan** (Tiers Milieu)
- **Montagne** (Tiers Droite)
- *Note : D'autres milieux (Forêt, Désert...) peuvent être définis par des couleurs intermédiaires.*
- *Note : D'autres milieux (Forêt, Désert, Savane, Jungle, Marécage, Toundra, Volcanique) peuvent être définis par des couleurs intermédiaires.*
## Impact
- **Survie** : Chaque animal a un milieu de prédilection. Un écart trop important entre la couleur de la case et la couleur idéale de l'animal entraîne stress, maladie et mort.
@@ -24,7 +24,10 @@ Le milieu représente l'environnement écologique d'une case, défini par sa cou
"name": "string",
"color_hex": "string (#RRGGBB)",
"default_temperature": "float",
"fertility_bonus": "float"
"fertility_bonus": "float",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -36,17 +39,17 @@ Le milieu représente l'environnement écologique d'une case, défini par sa cou
| 9 | Montagne Basse | #A9A9A9 | 5°C |
### Scores Initiaux
N/A
**Dominance Biome** : % de la surface du zoo (ex: 30% Prairie).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération carte (fixe).
### Conditions de Disparition
N/A
**Terraformation** : Remplacement par un autre biome via upgrade.
### Hérédité
N/A
**Maîtrise** : Bonus de fertilité (+5%) sur les biomes maîtrisés dans une partie précédente.
## 3. Impacts Environnementaux
### Impact Température
@@ -63,37 +66,37 @@ Référence pour la compatibilité animale.
| Prairie | Moyenne |
### Impact Heure / Jour-Nuit
N/A
**Bioluminescence** : Certains biomes (Océan profond, Forêt magique) brillent la nuit.
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Bonus** : +10% fertilité si animal sur son biome exact.
### Impact Mort
N/A
**Décomposition** : Rapide en Jungle (Chaud/Humide), Lente en Toundra (Froid).
### Impact Nourriture
N/A
**Ressources** : La Jungle produit des fruits (1/jour), la Savane de l'herbe (1/jour). Le Désert ne produit rien.
### Impact Attractivité (Visiteurs/Animaux)
**Esthétique** : Un zoo avec des biomes variés est plus attractif (+5% par biome différent utilisé).
### Impact Valeur
N/A
**Coût Terrain** : Le Désert est moins cher à l'achat que la Prairie (Terres arides).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Terrain difficile** : Sable et Neige ralentissent les visiteurs (-30%).
### Dépenses (Boutiques/Visiteurs)
N/A
**Arrosage** : Coût élevé en Désert pour maintenir des plantes.
### Trajet Visiteurs
N/A
**Vue** : Les visiteurs aiment les panoramas (Montagne = Point de vue).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Floraison** : Le biome Prairie devient fleuri au printemps (+Attractivité).
## 7. Progression
### Tableau des Upgrades
@@ -105,13 +108,32 @@ N/A
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function checkBiomeCompatibility(animal, tile):
if animal.idealBiome == tile.biome:
return "PERFECT"
elif isAdjacent(animal.idealBiome, tile.biome):
return "OK"
else:
return "BAD"
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `BIOME_CHANGE` | Succès | "Le biome de la case a été modifié." |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Identification Visuelle (Passif)
**Description UX** : Le joueur identifie le biome à la couleur du sol.
@@ -119,15 +141,15 @@ N/A
**Textures** : Motifs discrets (brins d'herbe, cailloux, craquelures) superposés à la couleur pour l'accessibilité (daltonisme).
**Emplacement** : Fond de Case.
**Intégration** : Layer 0 (Background).
**Navigation** : N/A
**Navigation** : Survol Souris / Toucher Long.
**Événements** : `MAP_RENDER`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Ambiance sonore changeante selon biome survolé (Vent, Vagues, Forêt).
- **Sons** : Bruit de pas spécifique (Craquement, Sable, Herbe).
- **Graphiques** : Tilesets (15 variations de couleur/texture).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Vignettes de biomes pour l'éditeur.
- **Vidéos** : Fond animé de l'eau (shader).
- **Animations** : Eau qui ondule (Océan), Herbe qui bouge (Prairie).
- **Couleurs** : Palette 15 couleurs (Cercle chromatique).
- **Textes** : Tooltip "Biome : Prairie".
@@ -138,16 +160,16 @@ N/A
**Description UI** : L'herbe sous l'animal jaunit ou devient boueuse. L'animal a une bulle "Beurk".
**Emplacement** : Case Zoo.
**Intégration** : Overlay Case.
**Navigation** : N/A
**Navigation** : Auto (Détection).
**Événements** : `BIOME_MISMATCH`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Son "Malaise" (basse fréquence).
- **Sons** : Bruit de dégoût "Yuck".
- **Graphiques** : Overlay "Sol Mort".
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône "Sol incompatible" (Sens interdit).
- **Vidéos** : Effet de flétrissement (shader).
- **Animations** : Transition lente vers le jaune/marron.
- **Couleurs** : Jaune paille, Marron.
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : "Sol Inadapté !".
- **Formes** : Croix rouge sur le sol.

View File

@@ -17,71 +17,83 @@
Événement loggé.
### Caractéristiques Initiales
N/A
**Compteur Morts** : 0.
### Scores Initiaux
N/A
**Taux Mortalité Infantile** : 0%.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Voir Causes.
### Conditions de Disparition
N/A
**Oubli** : Le souvenir (et le malus) s'estompe après 7 jours in-game.
### Hérédité
N/A
**Traumatisme** : Les parents ont -50% fertilité pendant 1 semaine (Choc émotionnel).
## 3. Impacts Environnementaux
### Impact Température
Voir `bebe_animal.md`.
### Impact Milieu (Biome)
N/A
**Tombe** : Une petite stèle apparaît temporairement sur la case (décoratif, disparaît au clic).
### Impact Saisons
N/A
**Hiver rigoureux** : Cause fréquente de mortalité infantile (Froid).
### Impact Heure / Jour-Nuit
N/A
**Nuit glaciale** : Moment critique (baisse T°).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Deuil** : Pas de reproduction possible pour les parents pendant 24h.
### Impact Mort
N/A
**Effet domino** : Tristesse contagieuse aux animaux proches (Stress +10).
### Impact Nourriture
N/A
**Gaspillage** : La nourriture allouée au bébé est perdue (pourrit).
### Impact Attractivité (Visiteurs/Animaux)
**Malus** : -50 points de Réputation (temporaire 24h).
**Malus** : -50 points de Réputation (temporaire 24h). Les visiteurs pleurent.
### Impact Valeur
N/A
**Perte sèche** : Valeur potentielle (élevée) perdue définitivement.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Décomposition** : Le corps reste 1h avant de disparaître (Urgence sanitaire).
### Dépenses (Boutiques/Visiteurs)
N/A
**Frais d'équarrissage** : 10 pièces pour enlever le corps.
### Trajet Visiteurs
N/A
**Évitement** : Les visiteurs contournent la zone de mort (Rayon 2 cases).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Mort Bébé** : Notification critique.
* **Enterrement** : Animation de disparition.
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Prévention via Infirmerie.*
| Niveau Infirmerie | Réduction Risque Mort |
| :--- | :--- |
| 1 | -10% |
| 2 | -20% |
| 3 | -50% |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function handleBabyDeath(baby):
zoo.reputation -= 50
baby.parents.forEach(p => p.fertilityMod = 0.5)
spawnGrave(baby.position)
notifyPlayer("BABY_DIED")
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
@@ -90,25 +102,34 @@ N/A
# 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)
### Drame (Événement)
**Description UX** : Le bébé meurt.
**Description UI** : Le sprite devient gris/fantôme puis disparaît (montée au ciel). Musique triste.
**Emplacement** : Case Zoo/Nurserie.
**Intégration** : Immédiat.
**Navigation** : N/A
**Navigation** : Auto (Cinématique).
**Événements** : `DEATH_ANIMATION`.
#### Assets
- **Musiques** : Jingle Triste (Violon).
- **Sons** : `gong.mp3` ou vent lugubre.
- **Graphiques** : Fantôme.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Pierre tombale (Sprite).
- **Vidéos** : Effet de pluie (Overlay).
- **Animations** : Opacité 100% -> 0%. Translation Y vers le haut.
- **Couleurs** : Gris, Noir.
- **Textes** : "RIP".
- **Formes** : N/A
- **Formes** : Halo sombre.
### Notification (Alerte)
**Description UX** : Le joueur est informé de la perte.
@@ -119,12 +140,483 @@ N/A
**Événements** : `DEATH_ACKNOWLEDGE`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Silence (Coupure son).
- **Sons** : Bruit de tonnerre lointain.
- **Graphiques** : Crâne (icône).
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : Portrait du bébé avec ruban noir.
- **Vidéos** : `death_alert_glitch.webm` (0.7s loop, optionnel), `black_ribbon_fade.webm` (1.2s non loop).
- **Animations** : Tremblement de la fenêtre.
- **Couleurs** : Noir #000000.
- **Textes** : Cause du décès.
- **Formes** : N/A
- **Formes** : Bordure noire épaisse.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Événement de décès dun animal au stade bébé, avec cause, conséquences (réputation, stress), et traces visuelles temporaires. |
| Rôle | Sanctionner les erreurs de gestion (nurserie pleine, conditions extrêmes), informer clairement le joueur, et déclencher des impacts sociaux/logistiques sans silence. |
| Portée | Un `animal_id` (bébé) + un contexte (zoo, emplacement iso) + une cause normalisée. |
| Contrainte | Pas de fallback silencieux : cause inconnue => log + erreur ; calculs à la volée, sans cache/mémorisation. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Détecter décès bébé | tick logique / action | `animal_id`, états | event décès | Mort si `health<=0` ou condition spéciale | Event `BABY_DIED` |
| Normaliser cause | au décès | signaux (nurserie pleine, temp, vente) | `cause_code` | Cause dans enum, sinon `UNKNOWN` + erreur | Log structuré `baby_death_unknown_cause` |
| Appliquer malus réputation | au décès | `cause_code` | réputation ↓ | Malus fort ; pondéré par visibilité visiteurs | Event `REPUTATION_CHANGED` |
| Appliquer stress proche | au décès | position iso | stress ↑ | Rayon 2 cases iso autour | Event `ANIMAL_STRESS_APPLIED` |
| Créer trace visuelle | au décès | position | stèle/fantôme | Trace TTL (ex. 1h) ; supprimable par clic | Event `GRAVE_SPAWNED` |
| Facturer enlèvement | au décès | - | coût | Coût fixe “équarrissage” si option active | Event `SANITATION_FEE_CHARGED` |
| Alerter joueur | au décès | cause + animal | notification | Modal dack obligatoire si critique | Event `UI_DEATH_ALERT_SHOWN` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Icône crâne + ruban noir, variante “bébé” (petit crâne) |
| Couleur dominante | Noir / gris |
| Variantes | `icon_baby_death.png`, `icon_grave.png` |
| États | `critique` (rouge), `info` (gris), `acknowledged` (ruban) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Voir détail décès | Consultation | événement présent | clic notif | panneau cause + impacts | - |
| Acknowledge modal | Action | modal affichée | clic OK | fermeture + trace possible | - |
| Retirer stèle | Action | trace visible | clic stèle | suppression trace | `GRAVE_NOT_FOUND` |
| Aller à lemplacement | Navigation | position connue | clic “Voir sur la carte” | caméra centre | `LOCATION_UNAVAILABLE` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `death_id` | uuid_v4 | `uuid_v4` | DB | identifiant event |
| `animal_id` | uuid_v4 | `uuid_v4` | DB | cible |
| `is_baby` | boolean | true | DB | invariant |
| `cause_code` | string | `NURSERY_FULL` | calcul | enum |
| `scope.zoo_id` | uuid_v4 | `uuid_v4` | DB | - |
| `location.iso_x` | int \| null | 120 | DB | null si nurserie (slot) |
| `location.iso_y` | int \| null | 88 | DB | null si nurserie (slot) |
| `location.nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | null si sur grille |
| `location.slot_id` | int \| null | 3 | DB | requis si nurserie |
| `effects.reputation_delta` | int | -50 | calcul | signé |
| `effects.stress_radius_tiles` | int | 2 | config | iso |
| `effects.cleanup_fee` | int | 10 | config | coins |
| `ttl.grave_seconds` | int | 3600 | config | suppression auto |
| `timestamps.created_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Compteur morts bébés | 0 | count | par zoo |
| Frais enlèvement | 10 | coins | configurable |
| Durée trace | 3600 | s | stèle/fantôme |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Taux mortalité infantile | 0% | 0..100% | affichage suivi, pas danalytics |
| Malus réputation moyen | 0 | points | calcul à la volée sur fenêtre |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Détection | tick | états bébé | décès | cause déterminée |
| Notification | décès | cause | modal | ack requis |
| Trace | décès | position | stèle | TTL |
| Oubli | temps | 7 jours in-game | malus amorti | fenêtre glissante |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Bébé meurt | true | est | event `BABY_DIED` |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Trace TTL | 3600 | atteint | suppression auto |
| Clic stèle | true | est | suppression manuelle |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Deuil parents | Oui | fertilité \(-50%\) pendant 1 semaine in-game |
| Historique décès | Oui | visible journal zoo |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Temp extrême | risque décès ↑ | cf. `bebe_animal.md` |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| - | stèle décorative | apparaît sur case (si décès sur grille) |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver | cause fréquente (froid) | surveillance accrue |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | risque froid ↑ | baisse T° |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Deuil | \(-50%\) | parents du bébé |
| Blocage court | 0 | 24h in-game après décès |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Domino | stress +10 | animaux à ≤2 cases iso |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Ration allouée | perdue | décès avant consommation |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Décès visible | - | 2 cases | visiteurs évitent |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Décès proche | stress ↑ | zone impact |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Perte potentielle | -100% | bébé disparu |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Décès en camion | blocage slot | vente échouée, non rapatriée |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Saturation | risque décès | nurserie pleine + éclosion |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Zone de décès | ralentit flux | évitement visiteurs |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Intervention sanitaire | 10 | coins | option équarrissage |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Upgrade prévention | variable | coins | infirmerie/nurserie |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Rapatriement | 5 | coins | vente échouée |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | baisse fréquentation si répétée |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allées | Zone décès | proximité | évitement |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zone décès | Boutique | fuite | déplacement rapide |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zone décès | Sortie | choc | sortie anticipée |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `BABY_DIED` | décès | `animal_id`, `cause_code` | impacts |
| `GRAVE_SPAWNED` | trace | `iso_x`, `iso_y` | stèle |
| `SANITATION_FEE_CHARGED` | option | `amount` | coins - |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `DEATH_MARKER_SHOW` | map open | marker zone |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `UI_DEATH_ALERT_SHOWN` | notif | modal |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_AVOID_DEATH_ZONE` | proximité | reroute |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_CRIES` | mort visible | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_ACK_DEATH` | clic OK | clôture |
| `PLAYER_REMOVE_GRAVE` | clic stèle | suppression |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Infirmerie 1 | 100 | risque -10% | soins |
| Infirmerie 2 | 250 | risque -20% | urgence |
| Infirmerie 3 | 800 | risque -50% | protocole |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `handleBabyDeath` | baby, cause | event | applique malus |
| `computeDeathVisibility` | location, visitors | bool | pondère impacts |
| `spawnGrave` | location | grave | TTL |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `BABY_DIED` | Critique | "Un bébé est mort." | décès |
| `NURSERY_FULL_DEATH` | Critique | "Nurserie pleine : décès." | cause `NURSERY_FULL` |
| `SALE_TRUCK_DEATH` | Warning | "Décès en camion : vente échouée." | cause `SALE_TRUCK_TIMEOUT` |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Recevoir lalerte | comprendre la cause | choc | modal + bouton “voir sur carte” |
| Retirer trace | nettoyer zone | navigation | clic direct sur stèle |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Modal décès | cause + impacts | critique/ack |
| Stèle | sprite décoratif | clickable/ttl |
| Marker carte | icône | visible/masqué |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | notifications | priorité haute |
| Carte zoo | sur case | stèle |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `bebe_animal.md` | fragilité temp | causes |
| `score_reputation.md` | malus réputation | impacts |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir détail | notif → modal | cause affichée |
| Aller sur carte | bouton modal | caméra centre |
| Retirer stèle | clic stèle | suppression |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_DEATH_MODAL` | event | modal |
| `CLICK_VIEW_ON_MAP` | bouton | caméra |
| `CLICK_REMOVE_GRAVE` | stèle | suppression |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `baby_death_sting.mp3` | décès | 2.0s | triste |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_death_gong.mp3` | alerte | moyen |
| `ui_modal_close.mp3` | ack | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `grave_stone_iso.png` | stèle | iso 4 dirs |
| `baby_ghost_fx.png` | fantôme | overlay |
| `death_skull_icon.png` | icône | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `black_ribbon.png` | modal |
| `death_bg_noise.png` | overlay |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `death_alert_glitch.webm` | modal | 0.7s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fade fantôme | décès | 1.0s |
| tremblement modal | alerte | 0.5s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `death_black` | #000000 | fond |
| `death_gray` | #616161 | texte |
| `death_red` | #D32F2F | critique |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `death.baby.title` | Décès dun bébé | Baby death |
| `death.baby.cause` | Cause | Cause |
| `death.ack` | OK | OK |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Modal | rectangle arrondi | accessible |
| Icône | rond | constant |

539
docs/specs/nourisseur.md Normal file
View File

@@ -0,0 +1,539 @@
# Nourisseur
## 1. Définition
Employé chargé de l'approvisionnement en nourriture des enclos. Il remplit les mangeoires vides et s'assure que les animaux n'ont pas faim. Achetable avec des pièces.
## 2. Fonctions
* **Remplissage :** Détecte les mangeoires vides et va les remplir.
* **Qualité :** Peut (avec amélioration) fournir une nourriture de meilleure qualité (+santé).
* **Automatisation :** Évite au joueur de devoir cliquer manuellement pour nourrir (si mécanique manuelle existe).
## 3. Icone
* **Représentation :** Seau ou Sac de graines.
* **Couleur dominante :** Marron et Orange.
## 4. Interactions
* **Recrutement :** Menu "Employés", coût en pièces.
* **Gestion :** Définir des priorités (ex: nourrir les bébés en premier).
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "feeder_02",
"type": "nourisseur",
"name": "Bob",
"salary": 30,
"hire_cost": 300,
"stats": {
"capacity": 50, // Quantité de nourriture transportable
"speed": 1.2
},
"current_task": "moving_to_enclosure_12",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Les animaux affamés perdent de la santé et du bonheur.
* Le nourisseur doit retourner au stock (bâtiment de service) pour se ravitailler.
## 6. Annexes UX/UI
* **Visuel Carte :** Personnage avec une brouette ou un sac sur le dos.
* **Animation :** Verse de la nourriture dans l'auge.
* **Alerte :** Icône "Faim" rouge clignotante si le nourisseur est débordé.
## Affichage contextuel (modules)
Le nourisseur sert de personnage contextuel lorsque des événements de nourriture surviennent sur la carte du zoo.
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `FEED_LOW` | auge < seuil | bulle “Mangeoire vide” + CTA “Voir enclos” |
| `FOOD_STOCK_EMPTY` | stock global = 0 | bulle “Stock vide” + deep-link `menu_achats.md` |
| `FEEDER_OVERLOADED` | trop de tâches | bulle “Débordé” + CTA recruter/ajuster priorités |
# 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.
## Définition
| Champ | Valeur |
|---|---|
| Entité | Employé “Nourisseur” |
| Rôle | Approvisionner les mangeoires, éviter la faim, appliquer (si présent) la nourriture spéciale ciblée. |
| Logistique | Transport capacité `stats.capacity`, ravitaillement depuis stock. |
| Vue | Isométrique 2.5D, sprite 4 directions, sélection base-sprite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Détection auge vide | Tick nourisseur | enclos, jauges auge | liste tâches | Priorité bébés > adultes | Event `FEEDER_SCAN` |
| Remplissage | Arrivée en enclos | stock, capacity | auge + | Consomme stock global, clamp max auge | Event `FEEDER_FILL_START/END` |
| Ravitaillement stock | capacity=0 | stock bâtiment | capacity reset | Retour “service stock” obligatoire | Event `FEEDER_RESTOCK` |
| Qualité nourriture | upgrade | niveau/skill | santé + | Bonus si nourriture premium active | Event `FEEDER_PREMIUM_APPLIED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Seau / sac de graines |
| Couleur dominante | Marron / orange |
| Variantes | `icon_feeder_bucket.png`, `icon_feeder_bag.png` |
| États | Badge “en route” (flèche), “débordé” (rouge), “capacity vide” (0) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Recruter | Action | coins ≥ `hire_cost` | Menu Employés → Nourisseur → Confirmer | entité créée | `INSUFFICIENT_FUNDS`, `EMPLOYEE_CAP_REACHED` |
| Définir priorités | Action | - | panel nourisseur → priorités | ordre tâches | - |
| Assigner zone/enclos | Action | cible valide | “Assigner” → clic | couverture | `INVALID_TARGET` |
| Forcer nourrir | Action | enclos sélectionné | bouton “Nourrir maintenant” | tâche top priorité | `NO_FEEDER_AVAILABLE`, `OUT_OF_FOOD_STOCK` |
| Inspecter stock | Consultation | - | panel stock | quantités | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `employee_id` | string | `feeder_02` | DB | unique |
| `type` | enum | `nourisseur` | DB | constante |
| `salary` | int | 30 | config | coins/jour |
| `hire_cost` | int | 300 | config | one-shot |
| `stats.capacity` | int | 50 | DB | [10..200] |
| `stats.speed` | float | 1.2 | DB | déplacement |
| `current_task` | string | `moving_to_enclosure_12` | runtime | debug |
| `state` | enum | `IDLE|MOVING|FILLING|RESTOCK|BREAK` | runtime | FSM |
| `carried_food` | int | 0..capacity | runtime | décrémente |
| `assigned_zone` | uuid/null | null | runtime | null=global |
| `grid` | object | `{x,y}` | runtime | position |
| `iso_x/iso_y` | int | - | rendu | projection |
| `z_index` | int | - | rendu | profondeur |
| `hitbox` | enum | `base_sprite` | rendu | click base |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Capacité | 50 | unités | transport |
| Vitesse | 1.2 | coef | marche |
| Temps remplissage | 1 | min in-game | par auge |
| Temps restock | 2 | min in-game | au stock |
| Seuil faim critique | 80 | % | déclenche urgence |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Auges remplies/jour | 0 | 0..∞ | faim - |
| Ruptures évitées | 0 | 0..∞ | survie + |
| Coût nourrissage/jour | 30 | 0..∞ | dépenses employés |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | embauche | coins | entité | `IDLE` |
| Action | auge vide | stock | auge + | pas si stock=0 |
| Restock | capacity=0 | stock bâtiment | capacity reset | chemin valide |
| Disparition | licenciement (si prévu) | - | suppression | stop tâches |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat | coins ≥ `hire_cost` | vrai | création |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Licenciement | action joueur | vrai | suppression |
| Zoo supprimé | - | vrai | suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Stats | Oui | persistées |
| Carried food | Non | remis à 0 au reset |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Température | Effet | Condition |
|---|---|---|
| Extrême | consommation + | animaux mangent plus selon règles |
| Tempérée | neutre | - |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Chemins | déplacement + | visiteurs attirés aux chemins |
| Sable/neige | déplacement - | ralentissement |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Modificateur |
|---|---|---|
| Hiver | ration + | +10% conso |
| Été | eau/boisson + | incidents soif visiteurs + |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Règle |
|---|---|---|
| Matin | repas 1 | tâche batch |
| Soir | repas 2 | tâche batch |
| Nuit | urgence | uniquement si faim critique |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Faim basse | + | si animaux bien nourris |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Stock 0 | risque mort + | faim extrême prolongée |
#### Impact Nourriture (tableau détaillé)
| Type | Effet | Condition |
|---|---|---|
| Standard | neutre | base |
| Spéciale | buff | selon `nourriture_speciale.md` |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| État | Effet | Condition |
|---|---|---|
| Animaux actifs (pas affamés) | satisfaction + | enclos proches |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action | Effet animaux | Condition |
|---|---|---|
| Nourrir | stress - | faim résolue |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Animal bien nourri | +5% | vente animal |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Livraison nourriture | +stock | via camion/achat |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Priorité bébés | + | si règle activée |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tech nutrition | + | réduit conso ou augmente qualité |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps séjour | + | animaux visibles actifs |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Vente nourriture visiteurs | revenu + | coins | canicule |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Plainte faim | remboursement | coins | si incidents |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaire | 30 | coins/jour | actif |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Lait/bébés | +conso | stock | si bébés présents |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat nourriture | variable | coins | menu achats |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Ration arrivée | 5 | coins | accueil |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Transport nourriture | 10 | coins | livraison |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | nourisseur indirect |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Nourisseur | Enclos | auge vide | déplacement sur chemins |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur | Boutique | faim/soif | achat |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur mécontent | sortie | incidents | départ |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `FEED_LOW` | auge < seuil | enclosure_id | warning |
| `FEED_FILLED` | fin remplissage | enclosure_id | info |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FEEDER_MOVING` | tâche | rendu déplacement |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOOD_STOCK_EMPTY` | stock=0 | alerte |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_BUY_FOOD` | faim/soif | revenu |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `VISITOR_COMPLAINT_HUNGER` | faim | satisfaction - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_FORCE_FEED` | bouton | tâche urgente |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | remplissage base | - |
| 2 | 1000 | capacity +20 | moins restocks |
| 3 | 2500 | speed +0.1 | réactivité |
| 4 | 5000 | qualité + | premium |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `scan_empty_troughs` | enclos | list | priorités |
| `fill_trough` | stock, carried | trough | clamp |
| `restock` | stock building | carried reset | - |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `OUT_OF_FOOD_STOCK` | Alerte | "Stock de nourriture vide." | stock=0 |
| `FEEDER_OVERLOADED` | Warning | "Nourisseur débordé." | trop tâches |
| `FEED_FILLED` | Info | "Mangeoire remplie." | fin |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Automatiser nourrissage | éviter morts | manque stock | deep-link menu achats |
| Prioriser bébés | survie | réglages | preset “bébés dabord” |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panel nourisseur | capacity, tâches | moving/filling |
| Badge faim | icône rouge | clignote |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | menu employés | - |
| Enclos | jauge auge | overlay |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Stock nourriture | global | pas de cache |
| Nourriture spéciale | ciblée | cf. spec |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir panel | clic nourisseur | panel |
| Forcer nourrir | clic enclos | tâche |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_FEEDER_PANEL` | clic | panel |
| `CLICK_FORCE_FEED` | bouton | urgence |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `feeder_loop.mp3` | ambiance | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `pour_food.mp3` | verse | faible |
| `ui_food_empty.mp3` | stock 0 | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `feeder_sprite_[dir].png` | sprite | 4 dirs |
| `fx_grains.png` | FX | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `icon_feeder_bag.png` | icône |
| `portrait_feeder.png` | panel |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `feed_success.webm` | popup | 0.8s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| grains qui tombent | filling | loop |
| jauge auge + | fin | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `feeder_primary` | #E67E22 | UI |
| `feeder_alert` | #E74C3C | faim |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `feeder.force` | Nourrir maintenant | Feed now |
| `food.empty` | Stock vide | Empty stock |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Jauge auge | barre | lisible |
| Badge faim | rond | clignote |

View File

@@ -0,0 +1,56 @@
# Nourriture Spéciale
## 1. Définition
Consommable premium achetable avec des pièces, offrant un boost temporaire aux statistiques d'un animal ou d'un groupe d'animaux. Contrairement à la nourriture de base (foin, viande standard), celle-ci est une friandise ou un complément alimentaire de haute qualité. Chaque animal a une nourriture préférée.
## 2. Fonctions
* **Boost :** Augmente temporairement la santé, le bonheur ou la fertilité (reproduction).
* **Soin rapide :** Peut aider à rétablir un animal affaibli plus vite.
* **Affinité :** Renforce le lien avec le joueur (si mécanique de "tamagotchi" existe).
## 3. Icone
* **Représentation :** Steak doré, Pomme brillante ou Poisson argenté.
* **Couleur dominante :** Or et Rouge.
## 4. Interactions
* **Achat :** Menu contextuel de l'animal ou boutique.
* **Utilisation :** Drag & drop sur l'animal ou sélection dans le menu de nourriture.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"food_id": "special_meat_premium",
"name": "Steak de Kobe",
"target_animal": "lion", // ou catégorie "carnivore"
"cost": 50, // Pièces
"duration_seconds": 3600, // 1 heure
"effects": {
"happiness_boost": 50,
"health_regen": 5,
"reproduction_chance": 1.5 // x1.5
}
}
```
### Règles Métier
* **Préférence :** Donner la "mauvaise" nourriture spéciale (ex: salade à un lion) est impossible ou sans effet (gaspillage).
* **Durée Limitée :** L'effet est un buff temporaire visible par une icône de statut.
* **Cooldown :** Impossible de gaver l'animal (temps d'attente entre deux friandises).
## 6. Annexes UX/UI
* **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.
* **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.

75
docs/specs/nurse.md Normal file
View File

@@ -0,0 +1,75 @@
# Nurse (Nurserie)
## 1. Définition
Employée spécialisée dans la gestion de la nurserie : incubation, soins de base aux bébés, assistance au joueur lors des événements déclosion et durgence. Achetable avec des pièces (même logique que les autres employés).
## 2. Fonctions
* **Triage nurserie :** Priorise les slots (œuf prêt, bébé critique, croissance).
* **Soins pédiatriques :** Applique des soins de stabilisation (réduit la vitesse de dégradation quand un bébé est en danger), en complément du `soigneur` (qui gère la santé globale).
* **Régulation :** Contribue à la régulation de température de la nurserie (effet borné, dépend du niveau de nurserie).
* **Assistance UI :** Sert de personnage contextuel quand la nurserie est actionnée ou quun événement nurserie survient.
## 3. Icone
* **Représentation :** Biberon + petit badge croix (pédiatrie).
* **Couleur dominante :** Pastel + blanc.
## 4. Interactions
* **Recrutement :** Menu “Employés” (ou Menu Achats → Personnel).
* **Assignation :** Assignable à une `nurserie` spécifique ou à une zone (si plusieurs nurseries existent).
* **Priorités :** “Œufs prêts” > “Bébés critiques” > “Croissance” > “Maintenance”.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "nurse_01",
"type": "nurse",
"name": "Aline",
"created_at": "timestamp",
"salary": 45,
"hire_cost": 450,
"assigned_building": "nurserie_uuid | null",
"stats": {
"speed": 1.0,
"stabilization": 0.7,
"temp_help": 1
},
"state": "enum (IDLE, MOVING, STABILIZING, CHECKING_SLOTS, BREAK)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* La nurse ne remplace pas le `soigneur` : elle **nagit** que sur les bébés et la nurserie (périmètre borné).
* Si aucun chemin nexiste vers la nurserie, laction est refusée avec message explicite (pas de fallback silencieux).
# 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.
## Affichage contextuel (modules)
Le personnage “Nurse” saffiche dans les modules suivants :
- **Nurserie** (`nurserie.md`) : ouverture, éclosion prête, nurserie pleine, urgence bébé.
- **Inventaire bébés** (`inventaire_bebe_animaux.md`) : filtre “en danger”, deep-link, actions “voir”.
- **Fiche bébé** (`bebe_animal.md`) : état critique, sortie prématurée (confirmation), soins.
### Déclencheurs (exemples)
| Module | Event / Action | Effet UI |
|---|---|---|
| Nurserie | `OPEN_NURSERIE` | La nurse apparaît en vignette/portrait dans le panneau. |
| Nurserie | `EGG_HATCHED` / slot prêt | Bulle : “Éclosion prête” + CTA deep-link slot. |
| Nurserie | `NURSERIE_FULL` | Bulle : cause (slots pleins) + CTA “Voir slots”. |
| Bébé | `BABY_CRITICAL` | Bulle : raison (froid/faim/santé) + CTA “Voir bébé”. |
## Skins & thèmes
* Uniforme et palette dérivent du thème (`theme.md`).
* Accessoires (stéthoscope, badge, serre-tête) via skins (`skin.md`, `inventaire_skins.md`).

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)",
"slots": [
{ "slot_id": 1, "content": "egg_uuid | baby_uuid | null", "timer_end": "timestamp" }
]
],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -36,7 +39,7 @@ Bâtiment dédié à l'éclosion des œufs et à la croissance des bébés anima
| Protection T° | +/- 2°C tolérance |
### Scores Initiaux
N/A
**Taux Survie** : 100% (si conditions respectées).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -57,29 +60,31 @@ La nurserie régule la température interne.
| 7 | +/- 10°C (Climatisation parfaite) |
### Impact Milieu (Biome)
N/A
**Adaptation** : Bonus croissance +10% si le biome de la case Nurserie correspond au biome de l'œuf (ex: Œuf Pingouin sur case Neige).
### Impact Saisons
Protège des effets négatifs des saisons (Hiver/Été).
**Printemps** : Bonus Vitesse +10% (Nature en éveil).
### Impact Heure / Jour-Nuit
Fonctionne 24h/24.
Fonctionne 24h/24. Veilleuse de nuit (pas de malus obscurité).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A (Lieu de résultat de la reproduction).
**Incubateur** : +10% vitesse si les parents sont présents dans le zoo (Lien affectif simulé).
### Impact Mort
Réduit drastiquement la mortalité infantile (Santé ne baisse pas sauf si Faim extrême).
**Urgence** : Peut accueillir un bébé malade pour le soigner (Niv 4+).
### Impact Nourriture
Les bébés sont nourris automatiquement si stock nourriture global > 0.
Les bébés sont nourris automatiquement si stock nourriture global > 0. Consommation réduite de 50% par rapport à un adulte.
### Impact Attractivité (Visiteurs/Animaux)
N/A (Les visiteurs ne voient pas l'intérieur).
**Webcam** : +5 Attractivité (Les gens aiment voir les bébés en ligne sur le site du zoo).
### Impact Valeur
N/A
**Valorisation** : Un bébé né en nurserie et bien traité vaut +10% à la revente (Certificat de bonne santé).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
@@ -95,15 +100,16 @@ N/A
| 7 | x10.0 |
### Dépenses (Boutiques/Visiteurs)
N/A
**Électricité** : 5 pièces/heure (Chauffage lampes).
### Trajet Visiteurs
N/A
**Vitrine** : Les visiteurs s'agglutinent devant la vitre (si module Vitrine installé au Niv 3).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Éclosion** : Œuf -> Bébé.
* **Maturité** : Bébé -> Adulte (prêt à sortir).
* **Jumeaux** : 1% chance d'avoir 2 bébés pour 1 œuf.
## 7. Progression
### Tableau des Upgrades
@@ -133,9 +139,19 @@ function updateNurserie(nurserie):
| :--- | :--- | :--- |
| `EGG_HATCHED` | Info | "Un œuf a éclos en Nurserie !" |
| `NURSERIE_FULL` | Warning | "Nurserie pleine, impossible d'acheter/reproduire." |
| `TWINS` | Info | "Incroyable ! Des jumeaux sont nés !" |
# 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)
### Gestion des Slots (Consultation)
**Description UX** : Le joueur clique sur la nurserie pour voir l'état de ses œufs et bébés.
@@ -146,11 +162,11 @@ function updateNurserie(nurserie):
**Événements** : `OPEN_NURSERIE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Berceuse douce (boîte à musique).
- **Sons** : `ui_open.mp3`
- **Graphiques** : Style "Couveuse" ou "Nid douillet".
- **Images** : `egg_[rarity].png`, `baby_[species].png`.
- **Vidéos** : N/A
- **Vidéos** : Fond animé avec des nuages qui passent.
- **Animations** : Œuf qui tremble légèrement quand proche éclosion.
- **Couleurs** : Tons pastels (rose, bleu clair, jaune paille).
- **Textes** : "Slot X", "Temps restant : MM:SS".
@@ -161,19 +177,19 @@ function updateNurserie(nurserie):
**Description UI** : Animation de l'œuf "volant" vers la nurserie (si visible) ou simple apparition dans le slot.
**Emplacement** : HUD -> Nurserie.
**Intégration** : Automatique.
**Navigation** : N/A
**Navigation** : Clic sur notif “Œuf ajouté” → ouvre la nurserie sur le slot concerné (deep-link) ; sinon aucun parcours requis.
**Événements** : `EGG_ADDED`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Pop" doux.
- **Sons** : `pop_soft.mp3`
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Ombre portée de l'œuf.
- **Images** : Icône Œuf.
- **Vidéos** : Effet de téléportation (particules).
- **Animations** : Fade in + Scale up de l'œuf dans le slot.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Couleurs** : Blanc coquille.
- **Textes** : "Placé".
- **Formes** : Cercle.
### Éclosion (Action)
**Description UX** : Quand le timer est fini, l'œuf se fissure. Le joueur clique pour "ouvrir" l'œuf et découvrir le bébé.
@@ -188,7 +204,7 @@ function updateNurserie(nurserie):
- **Sons** : `crack_egg.mp3`, `baby_cry.mp3`.
- **Graphiques** : Coquilles brisées.
- **Images** : Sprite bébé.
- **Vidéos** : N/A
- **Vidéos** : Rayons de lumière émanant de l'œuf.
- **Animations** : Séquence d'éclosion (3 frames).
- **Couleurs** : Rayons dorés/blancs.
- **Textes** : "C'est un [Espèce] [Rareté] !".
@@ -204,12 +220,523 @@ function updateNurserie(nurserie):
**Événements** : `DRAG_START`, `DRAG_DROP`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Son "Sélection".
- **Sons** : `pickup.mp3`, `place_ok.mp3` / `place_error.mp3`.
- **Graphiques** : Grille de placement overlay.
- **Images** : Sprite fantôme (translucide) sous le curseur.
- **Vidéos** : N/A
- **Animations** : N/A
- **Vidéos** : Pulsation de la case cible.
- **Animations** : Rebondissement du sprite au drop.
- **Couleurs** : Vert #00FF00 (OK), Rouge #FF0000 (KO).
- **Textes** : Tooltip "Placer ici".
- **Formes** : N/A
- **Formes** : Carré de sélection.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “nurserie” : incubation des œufs, croissance sécurisée des bébés, et tampon avant placement sur la grille. |
| Rôle | Réduire la mortalité infantile via régulation température/soins, gérer les slots, et fournir un parcours UI simple (clic nurserie → slots). |
| Portée | Une instance de bâtiment sur la grille isométrique, avec `level` et `slots[]`. |
| Contrainte | Pas de cache/mémorisation : timers et progressions recalculés à la volée (lazy update) ; pas de fallback silencieux (slot invalide => erreur + message). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir nurserie | clic bâtiment | `nurserie_id` | UI slots | affiche slots + timers | Event `OPEN_NURSERIE` |
| Affecter œuf à slot | achat/repro | `egg_id` | slot rempli | auto si slot vide ; sinon erreur | Event `EGG_ADDED` / `NURSERIE_FULL` |
| Éclosion | fin timer + clic | `egg_id` | `baby_id` | reveal au clic ; slot passe bébé | Event `EGG_HATCHED` |
| Croissance | tick lazy | temps, level | `growth_progress` ↑ | multiplicateur par level ; clamp | Event `BABY_GROWTH_UPDATED` |
| Réguler température | calcul impact | env temp | dégâts temp ↓ | tolérance selon level | Event `NURSERIE_TEMP_REGULATED` |
| Nourrir auto | tick | stock nourriture | faim ↓ | si stock > 0, conso | Event `BABY_AUTO_FED` |
| Sortir bébé | drag/tap place | `baby_id`, case | bébé placé | validation case ; transfert iso coords | Event `PLACE_BABY` |
| Upgrade nurserie | action joueur | coins, niveau | level ↑ | max 7 ; effets cumulés | Event `NURSERIE_UPGRADED` |
| Urgence soins | action | `baby_id` | santé ↑ | dispo level ≥ 4 | Event `NURSERIE_EMERGENCY_CARE` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Bâtiment couveuse/vitrine, fumée douce, lumières chaudes |
| Couleur dominante | Pastel (jaune paille, bleu clair) |
| Variantes | `nursery_lvl_{1..7}_dir_{N,E,S,W}.png` |
| États | `idle`, `egg_ready` (brille), `baby_ready` (jauge 100), `full` (badge) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir slots | Consultation | - | clic nurserie | bottom sheet slots | - |
| Placer œuf | Action | slot vide | achat/repro → auto place | slot occupé | `NURSERIE_FULL` |
| Cliquer œuf éclos | Action | timer fini | clic slot | popup bébé | - |
| Sortir bébé | Action | bébé en slot | drag vers grille + confirm | bébé placé | `PLACEMENT_INVALID`, `BABY_TOO_FRAGILE` |
| Upgrade | Action | coins ok | clic “Améliorer” | level ↑ | `NOT_ENOUGH_COINS` |
| Soins durgence | Action | level ≥ 4 | bouton “Urgence” | santé ↑ | `LEVEL_TOO_LOW` |
## Personnage contextuel (événements & interaction)
Voir `nurse.md`.
### Affichage
La nurse saffiche lorsque :
- la nurserie est **actionnée** (ouverture, clic slot, éclosion, placement, urgence) ;
- un **événement** de nurserie survient (slot prêt, nurserie pleine, bébé critique).
### Déclencheurs (événements)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `OPEN_NURSERIE` | clic bâtiment | portrait + état slots + CTA |
| `EGG_ADDED` | œuf affecté | bulle “Œuf placé” + deep-link slot |
| `EGG_HATCHED` | clic éclosion | bulle “Bébé né” + CTA “Voir bébé” |
| `NURSERIE_FULL` | slots pleins | bulle “Nurserie pleine” + CTA “Voir slots” |
| `BABY_CRITICAL` | bébé en danger | bulle “Urgence” + CTA “Voir bébé” |
### Skins & thèmes
Uniforme et accessoires de la nurse suivent `theme.md` et `inventaire_skins.md`.
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `nurserie` | DB | constant |
| `level` | int | 1 | DB | 1..7 |
| `slots[].slot_id` | int | 1 | DB | 1..level |
| `slots[].content_type` | string \| null | `egg` | DB | `egg`/`baby`/null |
| `slots[].content_id` | uuid_v4 \| null | `uuid_v4` | DB | egg_id/baby_id |
| `slots[].timer_end` | timestamp \| null | - | DB | UTC |
| `slots[].growth_progress` | float \| null | 42.0 | DB | 0..100 si bébé |
| `iso_x` | int | 120 | DB | grille |
| `iso_y` | int | 88 | DB | grille |
| `z_index` | int | 12088 | calcul | profondeur iso |
| `modules.has_vitrine` | boolean | false | DB | unlock level ≥ 3 |
| `modules.has_emergency_care` | boolean | false | DB | unlock level ≥ 4 |
| `timestamps.created_at` | timestamp | - | DB | UTC |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Slots | 1 | count | level 1 |
| Vitesse éclosion | 1.0 | coef | base |
| Vitesse croissance | 1.0 | coef | base |
| Tolérance T° | 2 | °C | ± |
| Auto-nourrissage | actif | bool | si stock > 0 |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Taux survie (si conditions) | 100% | 0..100% | objectif gestion |
| Jumeaux | 1% | 0..5% | événement rare |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Construction | joueur | coins | nurserie | position iso fixe |
| Utilisation | achat/repro | œufs | slots | capacité limitée |
| Éclosion | timer fini + clic | egg_id | baby_id | reveal explicite |
| Croissance | temps | baby_id | progress | clamp |
| Sortie | placement | baby_id | sur grille | slot libéré |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Construction | true | est | nurserie créée |
| Début partie | true | est | nurserie initiale (si scénario) |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Destruction | true | est | supprimée si vide |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Niveau nurserie | Oui | persiste |
| Bonus génétique | Oui | chance rareté (level ≥ 5) |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet nurserie | Notes |
|---|---|---|
| \(|\Delta T|\le 2\) (lvl1) | pas de dégâts | tolérance |
| \(|\Delta T|\le 10\) (lvl7) | pas de dégâts | climatisation |
| hors tolérance | dégâts réduits | protège mais pas invincible |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Compatible avec œuf | croissance +10% | règle existante |
| Incompatible | aucun bonus | pas de malus direct |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Hiver/Été | atténue extrêmes | via régulation |
| Printemps | vitesse +10% | règle existante |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | veilleuse | pas de malus obscurité |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Incubateur | vitesse +10% | parents présents (règle existante) |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Bébé en nurserie | mortalité ↓ | santé stable sauf faim extrême |
| Urgence | soins | level ≥ 4 |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stock global > 0 | nourrir auto | conso réduite 50% vs adulte |
| Stock = 0 | faim ↑ | alertes |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Vitrine active | + | 1 case | attroupement devant vitre |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | - | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Certificat bonne santé | +10% | bébé né + bien traité |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Level 1..7 | x{1.0,1.2,1.5,2.0,3.0,5.0,10.0} | progression existante |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Bonus rareté | +5% | level ≥ 5 |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | - | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Vitrine | attroupement | module vitrine |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Électricité | 5 | coins / h | règle existante |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soins urgence | 10 | coins | level ≥ 4 |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Upgrade | variable | coins | level up |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Conso bébé | 0.5 | ration | vs adulte |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Contrôle santé | 0 | - | inclus (spécif) |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allées | Vitrine nurserie | curiosité | attroupement |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Vitrine | Boutique | souvenir | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Entrée | Nurserie | signal UI | route directe |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_NURSERIE` | clic | `nurserie_id` | UI |
| `EGG_ADDED` | auto | `egg_id` | slot rempli |
| `EGG_HATCHED` | clic | `egg_id`, `baby_id` | spawn bébé |
| `NURSERIE_FULL` | erreur | `nurserie_id` | message |
| `NURSERIE_UPGRADED` | action | `level` | effets |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `NURSERY_MARKER_SHOW` | map open | marker |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `HATCH_CLICK` | clic | animation |
| `PLACE_BABY` | placement | transfert |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_GATHERS_AT_NURSERY` | vitrine | attroupement |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_STOPS_AT_WINDOW` | proximité | temps visite + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_NURSERY` | clic | level ↑ |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 100 | 1 slot, tolérance ±2°C | base |
| 2 | 200 | 2 slots, vitesse x1.2 | - |
| 3 | 400 | 3 slots, vitrine | visiteurs |
| 4 | 800 | 4 slots, urgence soins | soins |
| 5 | 1600 | 5 slots, rareté +5% | génétique |
| 6 | 3200 | 6 slots, vitesse x5 | - |
| 7 | 6400 | 7 slots, tolérance ±10°C | clim |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `assignEggToSlot` | egg, slots | slot_id | pas de slot => erreur |
| `hatchEgg` | egg | baby | reveal au clic |
| `computeNurseryMultiplier` | level | float | table |
| `applyTempRegulation` | envTemp, level | delta | tolérance |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `EGG_HATCHED` | Info | "Un œuf a éclos en nurserie." | éclosion |
| `NURSERIE_FULL` | Warning | "Nurserie pleine." | slots pleins |
| `TWINS` | Info | "Des jumeaux sont nés." | chance 1% |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Gérer slots | suivre œufs/bébés | navigation | clic direct bâtiment |
| Éclosion | révéler bébé | attente | badge “prêt” + clic unique |
| Sortir bébé | placement | erreurs | overlay vert/rouge |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Bottom sheet | grille slots | open/closed |
| Slot | icône + barre | egg/baby/empty |
| Popup récompense | espèce/rareté | confirm |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | sur case | clic |
| Modal | centre/bottom | slots |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `bebe_animal.md` | croissance | jauge |
| `inventaire_bebe_animaux.md` | deep-link | navigation |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | clic nurserie | slots |
| Aller slot | clic notif | focus slot |
| Placer | drag → drop | bébé sur grille |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_NURSERIE` | clic | modal |
| `HATCH_CLICK` | clic slot | reveal |
| `DRAG_START` | drag | placement mode |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `nursery_lullaby_loop.mp3` | nurserie | loop | doux |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_open.mp3` | ouvrir | bas |
| `crack_egg.mp3` | éclosion | moyen |
| `baby_cry.mp3` | reveal | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `nursery_slot_frame.png` | slot | scalable |
| `placement_grid_overlay.png` | placement | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `egg_rarity_badge.png` | rareté |
| `baby_card_bg.png` | popup |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `nursery_clouds_bg.webm` | fond | loop |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| tremblement œuf | proche éclosion | 0.8s loop |
| glow slot | prêt | 0.6s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `nursery_pastel_yellow` | #F7E7A6 | fond |
| `nursery_ok_green` | #00FF00 | placement |
| `nursery_ko_red` | #FF0000 | placement |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `nursery.title` | Nurserie | Nursery |
| `nursery.slot` | Slot | Slot |
| `nursery.full` | Nurserie pleine. | Nursery full. |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Slot | rectangle arrondi | lisible |
| Badge prêt | rond | contraste |

View File

@@ -0,0 +1,80 @@
# Objet Enclos
## 1. Définition
Élément d'enrichissement spécifique à chaque espèce animale, placé à l'intérieur de l'enclos pour améliorer le bien-être et stimuler les comportements naturels. Chaque animal possède son objet unique (ex: Arbre à singe, Grattoir à ours, Rocher chauffant pour lézards).
## 2. Fonctions
* **Bien-être :** Augmente significativement le bonheur des animaux.
* **Animation :** Déclenche des animations uniques (le singe grimpe, l'ours se frotte, etc.).
* **Attractivité :** Les visiteurs adorent voir les animaux interagir avec ces objets.
## 3. Icone
* **Représentation :** Ballon de jeu ou Tronc d'arbre.
* **Couleur dominante :** Variable selon l'objet.
## 4. Interactions
* **Achat/Placement :** Via le menu de l'enclos ou la boutique (onglet "Enrichissement").
* **Interaction Animal :** L'animal s'y rend périodiquement pour jouer ou se reposer.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"object_id": "enrichment_monkey_tree",
"name": "Arbre à Singe",
"compatible_animals": ["chimpanzee", "lemur"],
"cost": 150,
"created_at": "timestamp",
"updated_at": "timestamp",
"durability": 100,
"repair_cost": 30,
"bonus_happiness": 20,
"bonus_attractiveness": 10,
"cooldowns": {
"use_interval_seconds": 120,
"next_usable_at": "timestamp"
},
"placement": {
"enclosure_id": "uuid",
"grid": { "x": "integer", "y": "integer" },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer",
"hitbox": "enum('tile','base_sprite','custom_polygon')"
},
"render": {
"sprite_id": "string",
"variant_seed": "integer"
}
}
```
### Règles Métier
* **Exclusivité :** Un objet conçu pour les lions ne fonctionnera pas (ou mal) pour les pingouins.
* **Espace :** Occupe de la place dans l'enclos (réduit la surface "libre" mais augmente la qualité).
* **Limite :** 1 objet spécial par X cases d'enclos pour éviter la surcharge.
* **Effet “mauvaise compatibilité”** : si un animal non compatible interagit, bonus réduit à 10% et risque de casse +5%.
* **Usure** : `durability` baisse à chaque utilisation (ex. -1) et par jour (ex. -2/jour). En dessous de 20 : animation “abîmé” + malus (bonus_happiness / 2).
* **Réparation** : action joueur ou employé (soigneur/agent selon design) ramène `durability` à 100 contre `repair_cost`.
* **Pathfinding** : lobjet est un obstacle interne à lenclos (visiteurs ne le traversent pas si lenclos est visitable ; animaux lutilisent comme target).
## 6. Annexes UX/UI
* **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.
### États visuels
* **Neuf** : couleurs vives + petite animation idle.
* **Usé** (`durability < 50`) : texture éraflée, bruit plus sec.
* **Cassé** (`durability <= 0`) : sprite “cassé”, interaction désactivée jusquà réparation.
# 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

@@ -0,0 +1,522 @@
# Passe Saisonnier
## 1. Définition
Système de progression temporaire (durée typique : 1 mois) offrant des récompenses exclusives (skins, thèmes, monnaie) aux joueurs qui accomplissent des tâches ou jouent régulièrement. Chaque passe est centré sur une thématique spécifique (Jungle, Tigre, Ours, Lapin, Lion, Chat, Dinosaure, Panthère, Jaguar, Crocodile 3D, etc.).
## 2. Fonctions
* **Engagement :** Incite à jouer quotidiennement pour progresser dans le passe.
* **Monétisation :** Peut comporter une voie gratuite et une voie payante (Premium) offrant plus de récompenses.
* **Distribution de Contenu :** Moyen principal d'obtenir les nouveaux thèmes et skins.
## 3. Icone
* **Représentation :** Ticket doré ou Calendrier avec une étoile.
* **Couleur dominante :** Or et Rouge.
## 4. Interactions
* **Consultation :** Bouton dédié sur l'écran principal affichant la barre de progression du passe.
* **Réclamation :** Clic sur les paliers débloqués pour récupérer les récompenses.
* **Achat :** Bouton pour acheter la version Premium du passe.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"pass_id": "pass_season_05",
"theme_name": "Tigre",
"duration_days": 30,
"start_date": "2026-05-01",
"end_date": "2026-05-31",
"levels": [
{
"level": 1,
"xp_required": 100,
"reward_free": "coins_100",
"reward_premium": "skin_tiger_hat"
},
{
"level": 30,
"xp_required": 3000,
"reward_free": "skin_tiger_statue",
"reward_premium": "theme_tiger_full"
}
]
}
```
### Règles Métier
* Les récompenses cosmétiques (thèmes) sont temporaires pour les joueurs non-VIP (liées à la durée du passe).
* Les joueurs VIP débloquent la conservation permanente des thèmes acquis via le passe.
* La progression se fait via l'XP gagnée en jeu ou des quêtes spécifiques au passe.
## 6. Annexes UX/UI
* **Barre de Progression :** Visuel clair de l'avancement (jauge remplie).
* **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.
# 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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Passe de progression **temporaire** (ex. 30 jours) avec paliers + récompenses. |
| Thématique | Une saison = une thématique (Jungle/Tigre/Ours/Lapin/Lion/Chat/Dinosaure/Panthère/Jaguar/Crocodile 3D…). |
| Accès | Voie gratuite + voie premium (achat). |
| Conservation | Non-VIP : accès thèmes/packs du passe **pendant la durée du passe**. VIP : accès conservé **tant que VIP actif** (cf. `vip.md`). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Accumuler XP passe | actions/quetes | événements jeu | `pass_xp +` | Sources XP listées, caps journaliers | Event `PASS_XP_GAINED` |
| Déverrouiller palier | XP atteint | xp total | niveau débloqué | Déverrouillage monotone | Event `PASS_LEVEL_UNLOCKED` |
| Réclamer récompense | clic palier | type voie | item ajouté | Doit être idempotent | Event `PASS_REWARD_CLAIMED` |
| Acheter premium | achat | paiement | premium actif | Upgrade voie ; rétroactif sur paliers | Event `PASS_PREMIUM_PURCHASED` |
| Fin de saison | date fin | now | close | Non-VIP : gating thèmes ; VIP : gating par VIP | Event `PASS_ENDED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Ticket / calendrier étoilé |
| Couleur dominante | Or / rouge |
| Variantes | `icon_pass_ticket.png`, `icon_pass_calendar.png` |
| États | Badge “nouveau”, “récompenses à réclamer”, “premium” |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir passe | Consultation | passe actif | bouton HUD | écran passe | - |
| Voir palier | Consultation | - | scroll paliers | détail reward | - |
| Réclamer | Action | palier débloqué | clic reward | item ajouté | `REWARD_LOCKED`, `ALREADY_CLAIMED` |
| Acheter premium | Action | non premium | clic CTA | premium actif | `PAYMENT_FAILED` |
| Aller quêtes passe | Navigation | - | bouton “Quêtes” | liste quêtes | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `pass_id` | string | `pass_season_05` | DB | unique |
| `theme_name` | string | `Tigre` | config | - |
| `duration_days` | int | 30 | config | - |
| `start_date/end_date` | date | - | config | UTC |
| `levels[]` | array | - | config | 1..N |
| `levels.level` | int | 1 | config | monotone |
| `levels.xp_required` | int | 100 | config | monotone |
| `reward_free/reward_premium` | string | `skin_tiger_hat` | config | item ids |
| `player_state.pass_xp` | int | 0..∞ | DB | cumul |
| `player_state.premium_active` | bool | false | DB | - |
| `player_state.claimed_rewards` | set | - | DB | idempotence |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| XP passe | 0 | xp | départ |
| Premium actif | false | bool | départ |
| Niveaux | 30 | levels | exemple |
| Cap XP/jour | 1000 | xp | anti farm |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Niveaux débloqués | 0 | 0..N | progression |
| Récompenses non réclamées | 0 | 0..∞ | badge UI |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | début saison | config | passe actif | dates |
| Progression | actions | xp | unlocks | monotone |
| Fin | date | now | passe clos | gating |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Date >= start | true | est | passe visible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Date > end | true | est | passe inactif |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| XP gagné | Oui | persiste pour historique |
| Récompenses | Oui | items acquis restent possédés ; accès thèmes dépend VIP |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Canicule | quêtes spécifiques | “vendre glaces” |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Jungle | quêtes liées | thème |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Saison du passe | contenu | paliers |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Reset quotidien | quêtes | distribution |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet | Condition |
|---|---|---|
| Quêtes “naissance” | XP passe + | si complétée |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Mort bébé | quête/objectif | XP passe + si “résoudre incident” |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Quêtes nourriture | XP + | acheter/consommer |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Effet | Condition |
|---|---|---|
| Thèmes saisonniers | attractivité + | si actif |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Skins animaux | visuel | pas de stats |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Items rares | valeur cosmétique + | collection |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Quête livraison | XP + | délai |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Quête naissance | XP + | baby |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Quête réception | XP + | nouveau animal |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Quête RP | XP + | collecter |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Quête labo monde | XP + | achat rare |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Quête visiteurs | XP + | satisfaction |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Quête revenus | - | - | objectif |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat premium | variable | monnaie | passe |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Quête staff | - | - | embauche |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Upgrade nurserie | variable | coins | objectif |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat nourriture | variable | coins | objectif |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat animaux | variable | coins | objectif |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Livraison | variable | coins | objectif |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | quêtes flux |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur | Enclos | curiosité | objectifs |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur | Boutique | soif/envie | objectifs |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur | Sortie | fin journée | objectifs |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `PASS_STARTED` | start | pass_id | visible |
| `PASS_ENDED` | end | pass_id | close |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PASS_POPUP_LOGIN` | login | CTA |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PASS_XP_GAINED` | action zoo | xp + |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PASS_VISITOR_GOAL` | satisfaction | xp + |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `PASS_PHOTO_BONUS` | photo | xp + |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `PASS_PREMIUM_PURCHASED` | achat | premium |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau passe | XP requis | Free reward | Premium reward | Notes |
|---|---:|---|---|---|
| 1 | 100 | coins_100 | skin_tiger_hat | exemple |
| 30 | 3000 | skin_tiger_statue | theme_tiger_full | exemple |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `addPassXp` | action xp | pass_xp | cap/jour |
| `unlockLevels` | pass_xp | unlocked | monotone |
| `claimReward` | level, track | item | idempotent |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `REWARD_LOCKED` | Warning | "Palier verrouillé." | xp insuffisant |
| `ALREADY_CLAIMED` | Info | "Déjà réclamé." | idempotence |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Suivre progression | motivation | scroll long | raccourci “prochain reward” |
| Réclamer | récupérer items | oubli | badge non réclamés |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Écran passe | rail paliers | free/premium |
| CTA premium | prix | purchased |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| HUD | bouton passe | badge |
| Modal | plein écran | scroll |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Inventaire skins | ajout items | idempotent |
| VIP | conservation | gating |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir passe | HUD | écran |
| Aller boutique | CTA | achat |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_PASS` | clic | écran |
| `CLICK_CLAIM_REWARD` | clic | claim |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `pass_screen_loop.mp3` | écran | loop | thème saison |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `reward_claim.mp3` | claim | moyen |
| `level_unlock.mp3` | unlock | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `pass_track_free.png` | UI | - |
| `pass_track_premium.png` | UI | - |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `pass_badge.png` | HUD |
| `pass_reward_icons.png` | paliers |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `pass_intro.webm` | popup | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| jauge fill | xp gain | smooth |
| sparkles | claim | burst |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `pass_gold` | #D4AF37 | premium |
| `pass_red` | #C0392B | accent |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `pass.claim` | Réclamer | Claim |
| `pass.buy_premium` | Acheter Premium | Buy Premium |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cartes reward | rectangles arrondis | - |
| Jauge | barre | - |

View File

@@ -8,6 +8,52 @@ Entité active dans le jeu, qu'elle soit contrôlée par un humain, une IA ou un
- **Bot** : IA gérant un zoo concurrent.
- **Visiteur** : PNJ se promenant dans le zoo.
- **Animal** : Entité biologique gérée par le joueur.
- **Staff (Employé / PNJ de service)** : Personnage de service (accueil, guichet, boutique, recherche, soin, sécurité, nurserie, laboratoire).
## Skins, thèmes et personnalisation
Les personnages (joueur, visiteurs, bots, staff) sont rendus avec une combinaison :
- **Thème global** : voir `theme.md` (palette, ambiance UI, décor, uniformes).
- **Skins** : voir `skin.md` et léquipement/possession via `inventaire_skins.md`.
### Règles de rendu (contrat)
- Un personnage peut avoir des **variantes visuelles** (uniforme, accessoires, palette) déterminées par le thème et les skins équipés.
- Les personnages affichés dans une UI (portrait, badge, “paper doll”, bulle) doivent rester **cohérents** avec lavatar/skin courant.
- Un même rôle (ex. “vendeur”) peut avoir plusieurs skins, mais **un skin actif** doit être explicite (pas dauto-déduction silencieuse).
## Personnage contextuel de module (UI)
Certains modules affichent un **personnage contextuel** quand le module est actionné ou lorsquun événement lié au module survient.
### Objectifs
- **Ancrage** : associer un module à un rôle (ex. Nurserie → Nurse).
- **Interaction** : proposer des actions directes (1 clic) et des explications factuelles (état, cause, prochaine action).
- **Cohérence cosmétique** : appliquer thème + skins sur le personnage.
### Déclencheurs (génériques)
- **Ouverture / activation** : ouverture dun panneau, sélection dun bâtiment, entrée dans un mode (build, gestion).
- **Événement module** : arrivée, incident, succès dune action, blocage explicite (fonds insuffisants, capacité pleine, gating réputation).
- **État critique** : un statut “critique” du module est actif (ex. nurserie pleine, alerte quarantaine, alerte sécurité).
### Interactions (génériques)
- **Clic** : ouvre lécran/action la plus pertinente du module (deep-link).
- **Survol / tap** : affiche une fiche courte (rôle + état + action possible).
- **Dialogue/bulle** : messages informatifs liés à un événement (sans “best effort”, sans masquage derreur).
### Index des rôles (spécifications associées)
- **Visiteurs homme/femme** : `visiteur.md`
- **Joueur actif (avatar + pseudo + skins + profil)** : `joueur.md`, `avatar_joueur.md`, `inventaire_skins.md`
- **Autres joueurs** : `joueur.md` (représentation externe) + `avatar_joueur.md` (portrait partagé)
- **Bots** : `bot.md`
- **Chercheur** : `chercheur.md`
- **Nourisseur** : `nourisseur.md`
- **Soigneur** : `soigneur.md`
- **Agent de sécurité** : `agent_securite.md`
- **Nurse (nurserie)** : `nurse.md`
- **Personnel daccueil (nouveaux animaux)** : `personnel_accueil.md`
- **Guichetière (billetterie)** : `guichetiere.md`
- **Vendeur (boutique)** : `vendeur.md`
- **Vendeur “achat en pièces” (menu achats / conversion monnaies)** : `vendeur_pieces.md`
- **Laborantin (site laboratoire carte monde)** : `laborantin.md`
- **Maire (ville / carte monde)** : `maire.md`
# Annexes Techniques
@@ -17,84 +63,160 @@ Classe abstraite ou interface commune.
```json
{
"id": "uuid",
"type": "string",
"type": "enum('player','bot','visitor','animal','staff')",
"created_at": "timestamp",
"updated_at": "timestamp",
"position": { "x": "int", "y": "int" },
"active": "boolean"
"active": "boolean",
"status_flags": ["enum('selected','moving','interacting','hidden','dead','sleeping','busy')"],
"hitbox": "enum('tile','base_sprite','custom_polygon')",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A (Spécifique aux sous-types)
| Caractéristique | Valeur Initiale | Type | Description |
|---|---|---|---|
| active | true | bool | Lentité est simulée/rendue si active. |
| hitbox | base_sprite | enum | Sélection via base sprite (isométrique). |
| status_flags | [] | enum[] | Liste vide au spawn, enrichie par le comportement. |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| visibilité | 100 | 0-100 | Probabilité dêtre rendu/affiché (ex. foule dense). |
| priorité interaction | 50 | 0-100 | Arbitre quel élément capte le clic en cas de chevauchement. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Spawn système | true | Est | Création de lentité (par règle métier). |
| Ressources dispo | selon type | >= | Autorise création (ex. staff payé). |
### Conditions de Disparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| active | false | Est | Retrait du rendu/simulation. |
| status_flags contient dead | true | Est | Retrait ou état “cadavre” selon design. |
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Classe dérivée | Champs spécifiques | 100% | Non |
| Skins | Palette/cosmétiques | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Plage Température | Effet sur lentité | Bonus/Malus |
|---|---|---|
| < 0°C | Animations “froid” (si entité sensible) | vitesse -10% (visiteurs) |
| > 30°C | Animations “chaud” | soif +20% (visiteurs) |
### Impact Milieu (Biome)
N/A
| Biome | Compatibilité | Bonus/Malus |
|---|---:|---|
| Chemin | 100% | coût de mouvement 1.0 |
| Herbe | 100% | coût de mouvement 1.2 |
| Boue | 60% | coût de mouvement 1.5 |
### Impact Saisons
N/A
| Saison | Effet | Modificateur |
|---|---|---|
| Été | foule + | visiteurs + |
| Hiver | foule - | visiteurs - |
### Impact Heure / Jour-Nuit
N/A
| Période | Activité | Visibilité |
|---|---|---|
| Jour | simulation normale | haute |
| Nuit | entités “dorment” selon type | moyenne/basse |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Proximité | augmente | si entité = animal |
### Impact Mort
N/A
| Cause | Conséquence | Durée |
|---|---|---|
| État critique | passage dead | selon règles type |
### Impact Nourriture
N/A
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| selon type | variable | variable | 15 |
### Impact Attractivité (Visiteurs/Animaux)
N/A
| Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| entité rare visible | + | 8 cases |
### Impact Valeur
N/A
| Facteur | Variation Prix | Condition |
|---|---:|---|
| rareté cosmétique | + | si skin rare |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Domaine | Paramètre | Valeur | Unité |
|---|---|---:|---|
| Déplacement | coût de mouvement | >= 1.0 | multiplicateur |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| maintenance entité | variable | /jour | si staff/bâtiment associé |
### Trajet Visiteurs
N/A
| Trajet | Règle | Priorité | Notes |
|---|---|---:|---|
| vers POI | A* pondéré | 50 | chemins préférés |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `ENTITY_SPAWN` | création | rendu + simulation | instant |
| `ENTITY_DESPAWN` | suppression | retrait | instant |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | comportement de base |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```text
computeZIndex(x, y):
return y * 1000 + x
hitTest(click):
candidates = entities.sortedBy(z_index desc)
return first(entity where click inside entity.hitbox)
```
### Messages d'Infos / Alerte
N/A
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "Entité sélectionnée." | clic valide | 2 |
| Warn | "Interaction impossible." | état busy/dead | 4 |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Identification (Passif)
**Description UX** : Reconnaître le type de personnage au premier coup d'œil.
@@ -105,12 +227,12 @@ N/A
**Événements** : `HOVER_CHARACTER`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : `ui_hover_soft.mp3` (jingle court, optionnel).
- **Sons** : `ui_hover.mp3`, `ui_select.mp3`.
- **Graphiques** : Silhouettes archétypales.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : `badge_player.png`, `badge_bot.png`, `badge_visitor.png`, `badge_animal.png`.
- **Vidéos** : `hover_glow.webm` (0.6s loop, optionnel).
- **Animations** : Glow pulse (hover), pop (select).
- **Couleurs** : Joueur (Bleu), Bot (Rouge/Gris), Visiteur (Multicolore), Animal (Naturel).
- **Textes** : Nom, Rôle.
- **Formes** : N/A
- **Formes** : Badge rond + tooltip rect arrondi.

View File

@@ -0,0 +1,68 @@
# Personnel daccueil (nouveaux animaux)
## 1. Définition
Personnel de service associé à lAccueil des animaux. Il gère le check-in (quarantaine/acclimatation), la traçabilité (documents, historique) et sert de personnage contextuel lors des arrivées et incidents daccueil.
## 2. Fonctions
* **Check-in** : Associe lanimal livré/acheté à un slot daccueil (contrôle capacité, timers).
* **Traçabilité** : Rend visibles des informations (traits révélés, historique) selon le score “Traçabilité” de laccueil.
* **Quarantaine** : Surveille et signale les incidents `QUARANTINE_ALERT` avec action de consultation.
* **Assistance UI** : Personnage contextuel de lAccueil et des livraisons camion.
## 3. Icone
* **Représentation :** Tampon “OK” + caisse (logistique).
* **Couleur dominante :** Ambre + bleu (service).
## 4. Interactions
* **Consultation :** Clic sur lAccueil → bottom sheet slots (personnel visible dans le panneau).
* **Incident :** Clic sur badge quarantaine → panneau cause/coût/durée.
* **Placement :** CTA “Placer” (deep-link) vers le mode placement.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "reception_staff_01",
"type": "personnel_accueil_animaux",
"name": "Sam",
"salary": 35,
"hire_cost": 0,
"assigned_building": "reception_uuid",
"state": "enum (IDLE, CHECKIN, PAPERWORK, QUARANTINE, BREAK)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Par défaut, le personnel daccueil est **lié** au bâtiment `accueil_animaux.md` (pas un employé libre).
* En cas daccueil saturé, lerreur est explicite (`RECEPTION_FULL`) et le personnage affiche létat (pas de dégradation silencieuse).
# 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.
## Affichage contextuel (modules)
- **Accueil des animaux** (`accueil_animaux.md`) : arrivée, prêt, saturation, incident quarantaine.
- **Camion** (`camion.md`) : arrivée au zoo, déchargement vers accueil (adulte).
### Déclencheurs (exemples)
| Module | Event / Action | Effet UI |
|---|---|---|
| Accueil | `OPEN_RECEPTION` | Portrait + état “slots” (libres/occupés/prêts). |
| Accueil | `ANIMAL_ARRIVAL` | Bulle “Arrivée enregistrée” + CTA inspecter. |
| Accueil | `ANIMAL_READY` | Bulle “Prêt à placer” + CTA “Placer”. |
| Accueil | `RECEPTION_FULL` | Bulle “Accueil saturé” + CTA “Voir slots”. |
| Accueil | `QUARANTINE_ALERT` | Bulle “Alerte quarantaine” + CTA “Voir détails”. |
## Skins & thèmes
* Uniforme dépend du thème (`theme.md`) : veste, badge, clipboard.
* Variantes cosmétiques via `inventaire_skins.md` si le thème autorise des uniformes alternatifs.

78
docs/specs/pont.md Normal file
View File

@@ -0,0 +1,78 @@
# Pont
## 1. Définition
Structure permettant aux visiteurs (et au personnel) de traverser les étendues d'eau. Il fonctionne techniquement comme un chemin mais peut être construit sur les cases de type "Eau".
## 2. Fonctions
* **Traversée :** Rend accessible des zones isolées par des rivières ou des lacs.
* **Esthétique :** Ajoute du relief et de la variété au paysage du zoo.
* **Observation :** Peut servir de point de vue pour observer des animaux aquatiques (si enclos aquatique en dessous).
## 3. Icone
* **Représentation :** Pont en arc ou Planches sur l'eau.
* **Couleur dominante :** Bois et Bleu.
## 4. Interactions
* **Construction :** Outil "Pont" (ou outil "Chemin" détectant l'eau automatiquement).
* **Coût :** Plus cher qu'un chemin standard de même niveau.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"bridge_id": "uuid",
"owner_zoo_id": "uuid",
"type": "enum('wood_planks','stone_bridge','rope_bridge')",
"created_at": "timestamp",
"updated_at": "timestamp",
"coordinates": {"x": 15, "y": 15},
"water_underneath": true,
"connected_neighbors": ["enum('N','S','E','W')"],
"durability": "integer (0-100)",
"stats": {
"speed_modifier": 1.0,
"attractiveness_bonus": 5
},
"cost_per_tile": 50,
"repair_cost": 20,
"render": {
"auto_tile_key": "string",
"height_offset_px": "integer (>= 0)",
"occluder": "boolean"
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* **Support :** Doit commencer et finir sur la terre ferme (ou se connecter à un autre pont).
* **Hauteur :** En vue isométrique, le pont peut être légèrement surélevé par rapport à l'eau.
* **Auto-tiling** : se connecte aux ponts adjacents et (optionnellement) aux chemins si le bord touche la terre.
* **Usure** : `durability` baisse de 1/jour + 1 par X passages (ex. 50 passages). En dessous de 20, bruit de craquement + risque incident (arrêt temporaire) si non réparé.
* **Erreur construction** : interdite si la tuile deau est “profonde” et non pontable (flag terrain), ou si collision avec un bâtiment.
## 6. Annexes UX/UI
* **Visuel :** Planches de bois avec rambardes, piliers plongeant dans l'eau.
* **Son :** Bruit de pas sur le bois (creux).
* **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.
## 1. Interactions UI (construction / réparation)
* **Construction** : mode “peinture” possible (drag) pour poser plusieurs tuiles de pont daffilée, avec preview auto-tiling.
* **Réparation** : clic sur pont (durabilité < 100) → bouton “Réparer” (coût affiché) → animation marteau + retour à 100.
* **Messages** :
* `BRIDGE_BUILD_BLOCKED` : "Impossible de construire un pont ici."
* `BRIDGE_NEEDS_REPAIR` : "Pont endommagé : réparation recommandée."

View File

@@ -22,17 +22,18 @@
Logique serveur.
### Caractéristiques Initiales
N/A
**Fertilité de base** : 50%.
**Cooldown** : 24h (in-game) après une naissance.
### Scores Initiaux
N/A
**Taux de natalité du zoo** : 0 naissances/jour.
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
**Saison des amours** : Événement aléatoire ou Printemps.
### Conditions de Disparition
N/A
**Ménopause/Vieillesse** : Fin de fertilité à 80% de l'espérance de vie.
### Hérédité
| Parent A | Parent B | Enfant (Probabilités) |
@@ -42,87 +43,109 @@ N/A
## 3. Impacts Environnementaux
### Impact Température
**Condition** : T° doit être dans la plage "Idéale" (+/- 2°C).
**Condition** : T° doit être dans la plage "Idéale" (+/- 2°C). Si écart > 5°C, libido = 0.
### Impact Milieu (Biome)
**Condition** : Biome doit être "Parfait".
**Condition** : Biome doit être "Parfait". Sol confortable requis.
### Impact Saisons
**Printemps** : +20% chance réussite.
**Hiver** : -50% chance réussite (sauf animaux froids).
**Hiver** : -50% chance réussite (sauf animaux polaires).
### Impact Heure / Jour-Nuit
N/A
**Nuit** : +20% chance (Intimité, calme).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Consanguinité** : Risque de malus génétique (Santé max -10%) si parents trop proches (Frère/Sœur).
### Impact Mort
N/A
**Mort en couche** : Risque très faible (1%) pour la mère si Santé < 50% au moment de la naissance.
### Impact Nourriture
**Condition** : Faim < 20%.
**Condition** : Faim < 20%. Si Faim > 50%, avortement spontané.
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Buzz** : Une naissance rare attire la presse (+Attractivité temporaire "Baby Boom").
### Impact Valeur
N/A
**Lignée** : Un bébé issu de champions (Parents Rareté 5) vaut 2x plus cher.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Durée Gestation** : Variable selon espèce (ex: Lapin 1h, Éléphant 24h).
### Dépenses (Boutiques/Visiteurs)
N/A
**Suivi Vétérinaire** : 50 pièces prélevées à la conception (Échographie).
### Trajet Visiteurs
N/A
**Zone calme requise** : Si > 10 visiteurs autour de l'enclos, Stress monte -> Échec reproduction.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Accouplement** : Tentative.
* **Grossesse** : Délai avant naissance.
* **Fausse couche** : Si stress trop élevé.
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Recherches au Centre de Recherche.*
| Niveau Recherche | Nom | Bonus Fertilité |
| :--- | :--- | :--- |
| 1 | Observation | +5% |
| 2 | Compléments | +10% |
| 3 | Insémination | +15% |
| 4 | Clonage (Interdit) | Débloqué au niveau max (Secret) |
| 5 | Génétique Avancée | +25% |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
```javascript
if checkConditions(parentA, parentB):
chance = baseChance + seasonBonus + zooReproScoreBonus
if isNight(): chance *= 1.2
if random() < chance:
createBaby(parentA, parentB)
else:
emitEvent("REPRO_FAIL", "Tentative échouée")
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `REPRO_SUCCESS` | Succès | "Un couple attend un heureux événement !" |
| `REPRO_FAIL` | Info | "La tentative de reproduction a échoué." |
# 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)
### Amour (Passif)
**Description UX** : Deux animaux compatibles se rencontrent. Des cœurs apparaissent.
**Description UI** : Particules Cœurs au-dessus des animaux. Ils se rapprochent.
**Emplacement** : Case Zoo.
**Intégration** : Animation comportementale.
**Navigation** : N/A
**Navigation** : Auto (Animation).
**Événements** : `MATING_START`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Musique Romantique (Saxophone soft).
- **Sons** : `kiss.mp3` ou bruit doux.
- **Graphiques** : Cœurs roses.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône "Love" au-dessus des têtes.
- **Vidéos** : Effet de flou artistique (Bloom).
- **Animations** : Cœurs qui montent.
- **Couleurs** : Rose.
- **Textes** : N/A
- **Textes** : "Accouplement en cours".
- **Formes** : Cœur.
### Naissance (Événement)
@@ -137,9 +160,9 @@ if checkConditions(parentA, parentB):
- **Musiques** : Jingle Naissance.
- **Sons** : `tada.mp3`.
- **Graphiques** : Cigogne (icône).
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Photo du bébé.
- **Vidéos** : Feu d'artifice miniature.
- **Animations** : Confettis.
- **Couleurs** : Rose/Bleu.
- **Textes** : "Bienvenue au nouveau [Espèce] !".
- **Formes** : N/A
- **Formes** : Étoile explosive.

View File

@@ -26,30 +26,50 @@ Propriété de `Zoo`.
| Réputation | 0 |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Prestige | 0 | 0-10000 | Sert de base au flux visiteurs (via attractivité ville → zoo). |
| Malus décès récent | 0 | 0-5000 | Décroît sur 24h ; pénalise flux visiteurs. |
| Bonus diversité | 0 | 0-2000 | Bonus si plusieurs espèces présentes. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Premier animal placé | 1 | >= | La réputation devient calculable (sinon 0). |
### Conditions de Disparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo supprimé | true | Est | Score supprimé avec le zoo. |
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Soft reset / prestige | Bonus de départ | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Condition | Effet |
|---|---|
| Trop chaud / trop froid (global) | Réputation -10% temporaire si > X animaux en état critique |
### Impact Milieu (Biome)
N/A
| Biome | Effet |
|---|---|
| Enclos adaptés | + réputation via survie + satisfaction visiteurs |
### Impact Saisons
N/A
| Saison | Effet |
|---|---|
| Été | Réputation “visible” +5% (affluence) si incidents faibles |
| Hiver | Réputation “visible” -5% si gestion température mauvaise |
### Impact Heure / Jour-Nuit
N/A
| Période | Effet |
|---|---|
| Jour | Variation normale |
| Nuit | Pas de hausse via visiteurs (zoo fermé), seulement décroissance des malus |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
@@ -59,23 +79,33 @@ N/A
**Malus** : -50 pts par mort (décroissance sur 24h).
### Impact Nourriture
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Stock nourriture stable | +1% / jour | Aucun animal en faim critique |
### Impact Attractivité (Visiteurs/Animaux)
C'est la métrique de base de l'attractivité.
### Impact Valeur
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Réputation élevée | Prix de vente animaux +5% | si marché utilise réputation vendeur |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Domaine | Paramètre | Valeur | Unité | Effet |
|---|---|---:|---|---|
| Mise à jour score | Période | 60 | s | Recalcul périodique ou lazy update. |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Campagnes image | 10005000 | coins | Augmente temporairement la réputation visible |
### Trajet Visiteurs
N/A
| Mécanisme | Impact | Détail |
|---|---|---|
| Flux ville→zoo | Direct | Réputation est un facteur principal de flux |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -83,7 +113,10 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Réputation visible + tooltips |
| 2 | 1000 | Boutique niv 2 | Affichage détaillé des composantes |
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -92,10 +125,22 @@ score = sum(animal.rarity * 10) + (uniqueSpecies * 50) + buildingsValue - deathP
```
### Messages d'Infos / Alerte
N/A
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "Réputation +{delta}" | hausse significative | 2 |
| Warn | "Réputation en baisse : trop de morts/incidents" | seuil franchi | 4 |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Affichage Score (Permanent)
**Description UX** : Le joueur connaît son niveau de prestige.
@@ -106,11 +151,11 @@ N/A
**Événements** : `SCORE_UPDATE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `level_up_jingle.mp3` (court), `ui_score_tick.mp3` (optionnel).
- **Sons** : `level_up_jingle.mp3`.
- **Graphiques** : Icône Couronne.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `icon_crown.png`, `reputation_star.png`.
- **Vidéos** : `crown_glint.webm` (0.8s non loop, optionnel).
- **Animations** : Brillance quand augmente.
- **Couleurs** : Or.
- **Textes** : "Niveau 5 (4500 pts)".

View File

@@ -25,17 +25,27 @@ Propriété de `Zoo`.
| Survie | 100% |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Survie globale | 100 | 0-100 | Conditionne reproduction, maladies, perception valeur animaux. |
| Risque maladie | 0% | 0-100% | Monte si survie < 60. |
| Malus mortalité | 0 | 0-100 | Monte si survie < 30, augmente probas décès. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Premier animal vivant | 1 | >= | Score calculable (sinon 100 par convention de vide). |
### Conditions de Disparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo supprimé | true | Est | Score supprimé avec le zoo. |
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Soft reset | Bonus de départ (+10) | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
@@ -45,10 +55,15 @@ Moyenne des adéquations T°.
Moyenne des adéquations Biome.
### Impact Saisons
N/A
| Saison | Effet | Modificateur |
|---|---|---|
| Hiver | Températures plus dures | survie -5 si pas de régulation |
| Été | Canicule | survie -5 si pas dombre/eau |
### Impact Heure / Jour-Nuit
N/A
| Période | Effet | Modificateur |
|---|---|---|
| Nuit | Récupération | +1 survie/h si conditions OK |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
@@ -61,28 +76,47 @@ Seuil critique : < 20% (Risque épidémie).
Moyenne des Faims.
### Impact Attractivité (Visiteurs/Animaux)
N/A
| État | Effet | Condition |
|---|---|---|
| Survie > 90 | Visiteurs satisfaits | bonus attractivité local |
| Survie < 50 | Visiteurs inquiets | malus attractivité |
### Impact Valeur
N/A
| Facteur | Variation Prix | Condition |
|---|---:|---|
| Survie > 90 | +10% | animal en vente |
| Survie < 50 | -20% | animal en vente |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Domaine | Paramètre | Valeur | Unité | Effet |
|---|---|---:|---|---|
| Recalcul score | Période | 60 | s | Recalcul périodique ou lazy update. |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soins vétérinaires | 50 | coins / animal | si état critique |
| Régulation T° | variable | coins / jour | selon `temperature.md` |
### Trajet Visiteurs
N/A
| Mécanisme | Effet | Détail |
|---|---|---|
| Évitement zones malades | détour | réduit densité autour animaux malades |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `SURVIVAL_DROP` | passage sous seuil | alerte | tant que < seuil |
| `DISEASE_OUTBREAK` | survie < 20 + RNG | maladie | 24h in-game |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Monitoring basique |
| 2 | 2000 | centre recherche niv 2 | Détection précoce maladies |
## 8. Logique et Interfaces
### Pseudo-code Impacts
@@ -97,6 +131,15 @@ survivalScore = average(allAnimals.health)
# 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)
### Monitoring Santé (Permanent)
**Description UX** : Le joueur surveille la santé globale de son zoo.
@@ -107,11 +150,11 @@ survivalScore = average(allAnimals.health)
**Événements** : `HEALTH_UPDATE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_health_soft.mp3` (jingle discret), `ui_critical_pulse.mp3` (optionnel).
- **Sons** : `heartbeat.mp3` (si critique).
- **Graphiques** : Icône Cœur.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `icon_heart.png`, `icon_cross.png`.
- **Vidéos** : `heart_pulse.webm` (0.8s loop, optionnel).
- **Animations** : Battement (Pulsation).
- **Couleurs** : Vert -> Jaune -> Rouge.
- **Textes** : "98%".

View File

@@ -22,82 +22,142 @@ Un site est un lieu d'intérêt positionné sur la Carte du Monde.
"id": "uuid",
"type": "enum",
"name": "string",
"position": { "x": "int", "y": "int" }
"position": { "x": "int", "y": "int" },
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A
| Caractéristique | Valeur Initiale | Type | Description |
|---|---:|---|---|
| Visibilité | 100 | 0-100 | Probabilité dêtre visible/affichable selon fog-of-war et zoom. |
| Interactions activées | true | bool | Désactivable pour sites “décoratifs”. |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Popularité | 0 | 0-100 | Pour ville : influence flux ; pour zoo : reflète attractivité. |
| Danger | 0 | 0-100 | Pour labos/événements : risque dincident. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération procédurale ou création joueur.
### Conditions de Disparition
N/A
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Type “événement” | fin timer | >= | Site supprimé (si événement temporaire). |
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Monde | Découverte | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Condition | Effet |
|---|---|
| Tempête régionale | modifie les flux/visites | impact de contexte |
### Impact Milieu (Biome)
N/A
| Biome | Effet |
|---|---|
| Biome ville | type de visiteurs | modifie budget moyen |
### Impact Saisons
N/A
| Saison | Effet |
|---|---|
| Hiver | routes plus lentes | dist effective + |
### Impact Heure / Jour-Nuit
N/A
| Période | Effet |
|---|---|
| Nuit | lumières sites | rendu + |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Labo événement | boost génétique | si lab actif |
### Impact Mort
N/A
| Cause | Conséquence | Durée |
|---|---|---|
| Catastrophe sur site | fermeture | 24h |
### Impact Nourriture
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Ville agricole | stock nourriture + | économie |
### Impact Attractivité (Visiteurs/Animaux)
N/A
| Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Zoo halo | + | visibilité monde |
### Impact Valeur
N/A
| Facteur | Variation | Condition |
|---|---|---|
| Emplacement premium | + | proche villes |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Domaine | Paramètre | Valeur | Unité | Notes |
|---|---|---:|---|---|
| Survol/tooltip | délai | 200 | ms | évite popups instantanés |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Taxe régionale | 1% | transaction | route commerciale |
### Trajet Visiteurs
N/A
| Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Ville→Zoo | attraction | flux | cf. attractivité |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `SITE_HOVER` | survol | tooltip | tant que hover |
| `SITE_SELECTED` | clic | panneau détail | jusquà fermeture |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Tooltips |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```text
onHoverSite(site):
showTooltip(site.name, site.type, site.keyMetric)
onClickSite(site):
openDetailPanel(site)
```
### Messages d'Infos / Alerte
N/A
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "Site sélectionné." | clic | 2 |
| Warn | "Site indisponible." | fermé/lock | 4 |
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Vue** : Isométrique (2.5D).
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
* **Sprites** : 4 directions.
* **Interactions** :
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
## 1. Expérience Utilisateur (UX)
### Info-bulle (Consultation)
**Description UX** : Survoler un site donne ses détails.
@@ -108,11 +168,11 @@ N/A
**Événements** : `HOVER_SITE`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_tooltip_soft.mp3` (jingle discret).
- **Sons** : `pop.mp3` léger.
- **Graphiques** : Fond noir semi-transparent.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `site_icon_zoo.png`, `site_icon_city.png`, `site_icon_lab.png`.
- **Vidéos** : `tooltip_fade.webm` (0.6s loop, optionnel).
- **Animations** : Fade in rapide.
- **Couleurs** : Blanc sur Noir.
- **Textes** : "Paris (1M hab.)".

502
docs/specs/skin.md Normal file
View File

@@ -0,0 +1,502 @@
# Skin
## 1. Définition
Élément cosmétique permettant de modifier l'apparence de l'avatar du joueur ou de certains éléments du zoo (bâtiments, animaux). Les skins sont purement esthétiques et n'influencent pas les statistiques de gameplay (sauf mention contraire rare). Ils s'obtiennent via la boutique, les passes saisonniers ou des événements spéciaux.
## 2. Fonctions
* **Personnalisation :** Permet au joueur de se différencier.
* **Collection :** Incite à la progression et à l'achat (monétisation).
* **Thématisation :** Renforce l'immersion lors des saisons (ex: skin Noël, Halloween).
## 3. Icone
* **Représentation :** T-shirt plié ou Masque de carnaval.
* **Couleur dominante :** Violet (souvent associé à la cosmétique/rare).
## 4. Interactions
* **Achat :** Via le menu boutique ou menu skins.
* **Équipement :** Via l'inventaire de skins (drag & drop ou clic).
* **Visualisation :** Prévisualisation sur l'avatar ou l'objet avant validation.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"skin_id": "skin_hat_pirate",
"name": "Chapeau de Pirate",
"type": "avatar_head", // "avatar_body", "zoo_building", "animal_texture"
"rarity": "rare",
"source": "shop", // "pass", "event", "achievement"
"price": {
"amount": 500,
"currency": "coins"
},
"asset_path": "assets/skins/avatar/head/pirate_hat.png",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Un skin acheté est acquis définitivement (sauf skins liés à un passe temporaire expiré pour les non-VIP).
* Certains skins sont exclusifs à un genre d'avatar ou un type de bâtiment.
## 6. Annexes UX/UI
* **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).
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Skin = item cosmétique (avatar/zoo/animal/building/path). |
| Rôle | Modifier lapparence sans modifier les stats (sauf si explicitement listé et validé). |
| Acquisition | Boutique, passe, événement, achievement. |
| Gating | Skins pass/thèmes : selon règles `passe_saisonnier.md` + `vip.md`. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Afficher catalogue | UI open | filtres | liste skins | Tri par rareté/type, sans cache applicatif | Event `SKIN_CATALOG_OPEN` |
| Acheter | clic achat | coins, prix | item acquis | Transaction atomique ; idempotence sur retry | Event `SKIN_PURCHASED` |
| Équiper | clic equip | inventaire | `equipped` | Un seul par slot ; compatibilité type | Event `SKIN_EQUIPPED` |
| Prévisualiser | hover/clic | skin_id | preview render | Ne modifie pas létat tant que non validé | Event `SKIN_PREVIEW` |
| Appliquer au zoo | apply | theme/skin | rendu map | Mise à jour rendu sans fallback silencieux | Event `ZOO_SKIN_APPLIED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | T-shirt / masque |
| Couleur dominante | Violet (cosmétique) |
| Variantes | `icon_skin_shirt.png`, `icon_skin_mask.png` |
| États | Bordure rareté, lock, “new” |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir inventaire | Consultation | - | Profil → Skins | grille | - |
| Filtrer | Action | - | catégories/rareté | liste filtrée | - |
| Prévisualiser | Consultation | item visible | clic item | preview | - |
| Équiper | Action | possédé | “Équiper” | slot update | `SKIN_LOCKED`, `INCOMPATIBLE_SKIN` |
| Acheter | Action | coins suffisants | “Acheter” | possédé | `INSUFFICIENT_FUNDS` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `skin_id` | string | `skin_hat_pirate` | config | unique |
| `name` | string | `Chapeau de Pirate` | i18n | affichage |
| `type` | enum | `avatar_head|avatar_body|zoo_building|animal_texture|path_texture|banner_material` | config | whitelist |
| `rarity` | enum | `common|uncommon|rare|epic|legendary` | config | bordures |
| `source` | enum | `shop|pass|event|achievement` | config | gating |
| `price.amount` | int | 500 | config | coins |
| `asset_path` | string | - | build | pas de remote |
| `compatibility` | object | - | config | slot/gender/type |
| `lifecycle.available_from/to` | date|null | - | config | gating saison |
| `timestamps.created_at/updated_at` | timestamp | - | DB | audit |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Slots avatar | 3 | slots | head/body/accessory |
| Skins zoo | 0 | count | départ |
| Prix base rare | 500 | coins | exemple |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Skins possédés | 0 | 0..∞ | collection |
| Rareté max | common | enum | gating UI |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | config | pass/event/shop | item visible | depends dates |
| Acquisition | achat/gain | coins/xp | possédé | idempotent |
| Équipement | action | skin_id | slot update | 1 per slot |
| Gating | VIP/pass | vip/pass state | allow/deny | suspension vs perte |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Disponible | date in window | vrai | visible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Retrait shop | date > to | vrai | non achetable (reste possédé si acquis) |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Skin acheté | Oui | persiste |
| Skin pass | Oui | persiste mais accès peut être gated si non VIP |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| - | visuel uniquement | - |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Jungle | skins adaptés | thématique |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Noël | skins saison | dates |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | skins néon visibles | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet | Condition |
|---|---|---|
| - | aucun | cosmétiques |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Effet | Condition |
|---|---|---|
| Skins zoo | attractivité + | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Texture animal | visuel | pas de stats |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Collection rare | + | prestige |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Déblocage skins | visible | via RP/achievements |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps visite | + | attractivité via skins |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat skin | prix | coins | shop |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | esthétique | skins indirect |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur | Boutique | envie souvenir | achat |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `SKIN_PURCHASED` | achat | skin_id | possédé |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `SKIN_PREVIEW` | preview | render |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `ZOO_SKIN_APPLIED` | apply | update visuel |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `SKIN_EQUIPPED` | equip | slot update |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | inventaire skins | equip |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `equipSkin` | skin_id, slot | ok/err | compat |
| `applyRarityBorder` | rarity | css/token | UI |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `SKIN_LOCKED` | Warning | "Skin verrouillé." | non possédé |
| `INCOMPATIBLE_SKIN` | Warning | "Skin incompatible." | slot/type |
| `INSUFFICIENT_FUNDS` | Warning | "Pièces insuffisantes." | achat |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Equiper | custom avatar | navigation | accès direct depuis avatar HUD |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Grille skins | items | owned/locked |
| Preview | paper doll | slots |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Profil | onglet skins | - |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Inventaire | items possédés | pas de cache |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | profil | grille |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_SKIN_INVENTORY` | clic | modal |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `skins_loop.mp3` | screen | loop | - |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `equip_click.mp3` | equip | faible |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `rarity_border.png` | UI | 5 couleurs |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `skin_thumb.png` | item |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `skin_unlock.webm` | unlock | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| glow | unlock | 0.8s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `rarity_common` | #B0B0B0 | border |
| `rarity_legendary` | #D4AF37 | border |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `skin.equip` | Équiper | Equip |
| `skin.buy` | Acheter | Buy |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Carte skin | carré arrondi | grid |

545
docs/specs/soigneur.md Normal file
View File

@@ -0,0 +1,545 @@
# Soigneur
## 1. Définition
Employé spécialisé dans la santé des animaux. Il intervient pour prévenir les maladies, soigner les animaux malades et s'assurer de leur bien-être général. Il est achetable avec des pièces du zoo.
## 2. Fonctions
* **Prévention :** Réduit la probabilité d'apparition de maladies dans les enclos assignés ou proches.
* **Soin :** Intervient automatiquement sur les animaux malades pour les guérir (durée d'action).
* **Bien-être :** Augmente légèrement le score de bien-être des animaux.
## 3. Icone
* **Représentation :** Croix verte ou Trousse de secours.
* **Couleur dominante :** Blanc et Vert.
## 4. Interactions
* **Recrutement :** Via le menu "Employés" contre des pièces.
* **Assignation :** Peut être assigné à une zone ou un enclos spécifique (drag & drop ou menu contextuel).
* **Amélioration :** (Optionnel) Formation pour augmenter l'efficacité.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "healer_01",
"type": "soigneur",
"name": "Dr. Doolittle",
"salary": 50, // Coût par cycle (jour/mois)
"hire_cost": 500, // Coût d'achat en pièces
"stats": {
"speed": 1.0,
"efficiency": 0.8,
"range": 5 // Rayon d'action en cases
},
"assigned_zone": null // null = tout le zoo, ou ID de zone,
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Un animal malade non soigné peut mourir ou contaminer les autres.
* Le soigneur doit se déplacer physiquement (ou virtuellement avec délai) jusqu'à l'enclos.
* Le coût de recrutement augmente avec le nombre de soigneurs déjà possédés.
## 6. Annexes UX/UI
* **Visuel Carte :** Personnage en blouse blanche avec une mallette.
* **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]".
## Affichage contextuel (modules)
Le soigneur sert de personnage contextuel lors des événements de santé animale.
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `ANIMAL_SICK` | animal passe `SICK` | bulle “Maladie détectée” + CTA “Voir animal” |
| `NO_HEALER_AVAILABLE` | file saturée / absent | bulle “Aucun soigneur dispo” + CTA recruter |
| `HEALTH_SYSTEM_OVERLOADED` | trop malades | bulle “Système santé saturé” + CTA prioriser zones |
# 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.
## Définition
| Champ | Valeur |
|---|---|
| Entité | Employé “Soigneur” |
| Rôle | Prévenir/traiter maladies, stabiliser les états critiques, améliorer bien-être. |
| Portée | Zone ou enclos assigné + rayon `stats.range`. |
| Contraintes | Se déplace (coût temps), file de tâches, disponibilité. |
| Vue | Isométrique 2.5D, sprite 4 directions, hitbox base-sprite. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Prévention maladies | Tick soigneur / tick zoo | `efficiency`, enclos, densité | probas maladies - | Effet plafonné ; dépend propreté enclos | Event `HEALER_PREVENTION_TICK`, métrique “maladies évitées” |
| Soin automatique | Animal `SICK` | animal, soigneur dispo | état animal amélioré | Priorité: critique > contagieux > léger | Event `HEALER_TREAT_START/END` |
| Quarantaine (si prévue) | Animal contagieux | enclos, iso | propagation - | nécessite zone dédiée | Event `HEALER_QUARANTINE` |
| Boost bien-être | Tick | `efficiency` | `wellbeing +` | Bonus léger, cumul limité/jour | Event `HEALER_WELLBEING_TICK` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Croix verte / trousse de soin |
| Couleur dominante | Blanc / vert |
| Variantes | `icon_healer_cross.png`, `icon_healer_bag.png` |
| États | Badge “occupé” (sablier), “urgence” (rouge), “en pause” (Zzz) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Recruter | Action | coins ≥ `hire_cost` | Menu Employés → Soigneur → Confirmer | entité créée | `INSUFFICIENT_FUNDS`, `EMPLOYEE_CAP_REACHED` |
| Assigner zone/enclos | Action | zone existe, path possible | Sélection soigneur → “Assigner” → clic zone/enclos | priorité locale | `NO_PATH`, `INVALID_TARGET` |
| Forcer intervention | Action | animal malade visible | clic animal → “Appeler soigneur” | tâche ajoutée | `NO_HEALER_AVAILABLE` |
| Former | Action (option) | ressources/temps | panel → “Former” | `efficiency +` | `INSUFFICIENT_FUNDS` |
| Inspecter file | Consultation | - | panel soigneur | liste tâches + ETA | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `employee_id` | string | `healer_01` | DB | unique |
| `type` | enum | `soigneur` | DB | constante |
| `salary` | int | 50 | config | coins/jour |
| `hire_cost` | int | 500 | config | one-shot |
| `stats.speed` | float | 1.0 | DB | modifie déplacement |
| `stats.efficiency` | float | 0.8 | DB | [0..1.5] |
| `stats.range` | int | 5 | DB | [1..10] |
| `assigned_zone` | uuid/null | null | runtime | null = global |
| `task_queue` | array | - | runtime | FIFO + priorités |
| `state` | enum | `IDLE|MOVING|TREATING|BREAK` | runtime | transitions contrôlées |
| `grid` | object | `{x,y}` | runtime | position |
| `iso_x/iso_y` | int | - | rendu | projection |
| `z_index` | int | - | rendu | profondeur |
| `hitbox` | enum | `base_sprite` | rendu | click base |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon action | 5 | cases | `range` |
| Efficacité | 0.8 | coef | prévention/soin |
| Temps soin léger | 2 | min in-game | tâche |
| Temps soin moyen | 5 | min in-game | tâche |
| Temps soin critique | 10 | min in-game | tâche |
| Pause | 15 | min in-game | toutes 4h in-game |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Animaux soignés/jour | 0 | 0..∞ | santé globale |
| Maladies évitées/jour | 0 | 0..∞ | survie |
| Coût santé/jour | 50 | 0..∞ | dépenses employés |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | embauche | coins | entité | état `IDLE` |
| Action | détection maladie | animal | tâche | priorité |
| Pause | fatigue | temps | état `BREAK` | pas de soin |
| Disparition | licenciement (si prévu) | - | suppression | stop tâches |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat | coins ≥ `hire_cost` | vrai | création |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Licenciement | action joueur | vrai | suppression |
| Zoo supprimé | - | vrai | suppression |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| `stats` | Oui | persistées |
| `task_queue` | Non | vidée au reset jour |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Température | Effet | Condition |
|---|---|---|
| Extrême | charge + | plus danimaux critiques |
| Tempérée | neutre | - |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Chemins | déplacement + | visiteurs attirés aux chemins |
| Boue | déplacement - | pénalité path |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Modificateur |
|---|---|---|
| Hiver | maladies froid + | tâches + |
| Été | stress chaleur + | tâches + |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Règle |
|---|---|---|
| Jour | soins actifs | - |
| Nuit | interventions urgentes uniquement | sinon pause |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Soins réguliers | + | animaux non malades |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Animal critique sans soigneur | risque mort + | file saturée |
| Animal contagieux traité | mortalité - | quarantaine/soin |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Nourriture spéciale | soins + efficaces | si buff actif |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| État | Effet | Condition |
|---|---|---|
| Animaux visibles en bonne santé | satisfaction + | enclos propres |
| Animaux malades visibles | satisfaction - | incidents |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action | Effet animaux | Condition |
|---|---|---|
| Soins | stress - | traitement réussi |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Certificat santé | +10% | vente animal si soigné récemment |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Transport animaux malades | interdit | vente/transport bloqué |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Urgence bébé | soin possible | nurserie niv 4+ |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Réception | - | pas deffet direct |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Tech médecine | soins + rapides | si débloquée |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps visite | + | zoo sain |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Vente soins | revenu + | coins | boutique pharmacie (si ajoutée) |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Remboursement | -coins | coins | visiteur choqué |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Salaire | 50 | coins/jour | actif |
| Formation | 300 | coins | upgrade |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Soins bébé | 10 | coins | action “urgence” |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Médicaments | 5 | coins/soin | si consommable |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Diagnostic arrivée | 10 | coins | si check santé |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Transport vers clinique | 100 | coins | si feature externe |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | soigneur indirect (via santé zoo) |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Soigneur | Enclos | tâche | déplacement sur chemins |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteurs | Boutique | santé/incident | achats + |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Visiteur mécontent | sortie | incident non résolu | départ + |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `ANIMAL_SICK` | état maladie | animal_id | alerte |
| `ANIMAL_HEALED` | fin soin | animal_id | info |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `HEALER_MOVING` | tâche | rendu déplacement |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `HEALTH_SYSTEM_OVERLOADED` | trop malades | alerte |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_WORRIED` | animal malade vu | satisfaction - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_REFUND_REQUEST` | très mécontent | remboursement |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_CALL_HEALER` | bouton | tâche prioritaire |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | prévention base | - |
| 2 | 1500 | `range` +1 | couverture |
| 3 | 3000 | `efficiency` +0.1 | soins plus rapides |
| 4 | 6000 | soins contagieux + | quarantaine (option) |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `scan_sick_animals` | zoo state | list | priorités |
| `enqueue_heal_task` | animal | task | file |
| `apply_treatment` | animal, efficiency | state | clamp |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `NO_HEALER_AVAILABLE` | Alerte | "Aucun soigneur disponible." | file saturée |
| `ANIMAL_HEALED` | Info | "Animal soigné." | fin soin |
| `DISEASE_SPREAD` | Warning | "Risque de contagion." | cluster |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Recruter | diminuer morts | coût | bouton recruter direct |
| Traiter urgence | sauver animal | localisation | deep-link depuis notif |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panel soigneur | file tâches, range | IDLE/MOVING/TREATING |
| Badge maladie | icône croix/virus | levels |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte | sprite soigneur | sélection base |
| Panel animal | bouton “Appeler” | urgence |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| États animaux | `SICK/CRITICAL` | pas de fallback |
| Notifications | push HUD | - |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir panel | clic soigneur | panel |
| Appeler | clic animal → bouton | tâche |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_HEALER_PANEL` | clic | panel |
| `CLICK_CALL_HEALER` | bouton | tâche |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `clinic_soft_loop.mp3` | ambiance soin | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_alert_med.mp3` | alerte maladie | moyen |
| `heal_success.mp3` | fin soin | faible |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `healer_sprite_[dir].png` | sprite | 4 dirs |
| `fx_green_cross.png` | FX | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `icon_healer_cross.png` | HUD |
| `portrait_healer.png` | panel |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `heal_popup.webm` | popup | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pulsation croix | animal malade | loop |
| sparkles verts | soin | burst |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `healer_primary` | #2ECC71 | UI |
| `healer_alert` | #E74C3C | urgence |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `healer.call` | Appeler le soigneur | Call healer |
| `healer.busy` | Soigneur occupé | Healer busy |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Badge maladie | rond | lisible |
| Barre santé | rectangulaire | standard |

View File

@@ -12,11 +12,16 @@
### Frontend
- **Framework** : React ou Vue.js.
- **État** : Zustand ou Pinia (léger et performant).
- **Rendu Grille** : Canvas API (via PixiJS ou Konva) si > 100 éléments animés, sinon DOM optimisé (CSS Grid + Transforms).
- **Rendu Grille** : Canvas API (via PixiJS ou Konva) pour la **Vue Isométrique**.
- Gestion de la profondeur (z-index) pour les bâtiments et animaux.
- Système de tuiles (Tilemap) isométriques.
- **Optimisation** : Culling (ne pas rendre ce qui est hors écran).
### Infrastructure
- **Cache** : Redis (pour les sessions, les compteurs temps réel et les files d'attente de jobs).
- **Message Broker** : BullMQ (Redis) ou RabbitMQ pour les tâches asynchrones (morts, naissances, enchères).
- **Cache** : Interdit (aucun cache applicatif, aucune mémorisation). Les lectures doivent refléter létat courant calculé/stocké, sans couche de cache.
- **Queue / Jobs** : File de tâches sans cache.
- Option A : RabbitMQ (messages durables) pour les tâches asynchrones (morts, naissances, enchères).
- Option B : Jobs en base PostgreSQL (table `jobs` + workers) avec verrous transactionnels (SKIP LOCKED) pour éviter les doubles traitements.
---
@@ -41,9 +46,9 @@ CREATE TABLE animals (
zoo_id UUID REFERENCES zoos(id),
type VARCHAR(50),
birth_date TIMESTAMPTZ,
state JSONB, -- { health, hunger, stress, ... }
genetics JSONB, -- { color, rarity, parents... }
position JSONB -- { x, y }
state JSONB, -- { health, hunger, stress, happiness, lastFedAt, lastVisitedAt }
genetics JSONB, -- { color, rarity, parents, mutations, lineageId }
position JSONB -- { x, y, iso_x, iso_y, z_index }
);
```
@@ -70,7 +75,9 @@ Calculer l'état d'un zoo **uniquement quand c'est nécessaire** (lecture par le
### Exceptions (Workers)
Certains événements doivent arriver même si le joueur est hors ligne (ex: Enchères, Morts impactant le marché).
* Utiliser des **Cron Jobs** ou des **Delayed Jobs** (Redis) pour traiter ces événements spécifiques à leur heure d'échéance prévue.
* Utiliser des **Cron Jobs** ou des **Delayed Jobs** sans cache pour traiter ces événements à lheure déchéance prévue.
* Option A : messages planifiés via RabbitMQ (plugin de scheduling si utilisé).
* Option B : table PostgreSQL `jobs` (colonnes `run_at`, `locked_at`, `attempts`, `last_error`) + worker(s) avec `SELECT FOR UPDATE SKIP LOCKED`.
---
@@ -90,29 +97,38 @@ Certains événements doivent arriver même si le joueur est hors ligne (ex: Enc
### Système
- `POST /api/auth/login` : Authentification par clé.
- `GET /api/config` : Récupère les tables statiques (Animaux, Coûts, Saisons) pour le cache client.
- `GET /api/config` : Récupère les tables statiques (Animaux, Coûts, Saisons) pour initialiser le client, sans mécanisme de cache applicatif.
# 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)
### Chargement (Feedback)
**Description UX** : Le joueur attend le calcul du Lazy Update à la connexion.
**Description UI** : Écran de chargement avec barre de progression ou animation (Animal qui marche).
**Emplacement** : Plein écran (Démarrage).
**Intégration** : Bloquant.
**Navigation** : N/A
**Navigation** : Aucune (écran dattente avant accès au jeu).
**Événements** : `APP_LOAD`.
#### Assets
- **Musiques** : Thème Principal.
- **Sons** : N/A
- **Sons** : `ui_loader_tick.mp3` (boucle courte et discrète), `ui_loaded_pop.mp3` (fin de chargement).
- **Graphiques** : Logo Jeu.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `loading_mascot.png` (mascotte), `loading_background.png` (fond).
- **Vidéos** : `loading_anim.webm` (animation courte, loop).
- **Animations** : Loader.
- **Couleurs** : Thème Jeu.
- **Textes** : "Calcul de la simulation...", "Rattrapage du temps...".
- **Formes** : N/A
- **Textes** : "Calcul de la simulation", "Rattrapage du temps".
- **Formes** : Cercle (spinner), barre (progress).
### Erreur Connexion (Feedback)
**Description UX** : Perte de connexion ou erreur API.
@@ -123,12 +139,12 @@ Certains événements doivent arriver même si le joueur est hors ligne (ex: Enc
**Événements** : `NETWORK_ERROR`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Ducking du thème principal (-6 dB) pendant laffichage de lerreur.
- **Sons** : `error.mp3`.
- **Graphiques** : Icône Wifi barré.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `icon_wifi_off.png`, `modal_error_bg.png`.
- **Vidéos** : `network_error_glitch.webm` (optionnel, 0.8s loop).
- **Animations** : Secousse.
- **Couleurs** : Rouge.
- **Textes** : "Connexion perdue".
- **Formes** : N/A
- **Formes** : Rectangle arrondi (modal), toast (pill).

View File

@@ -24,24 +24,28 @@ Propriété de `Case`.
Définie par le biome (voir `milieu.md`).
### Scores Initiaux
N/A
**T° Moyenne** : 20°C (Référence).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
Système Météo Global.
### Conditions de Disparition
N/A
**Permanence** : La température est une constante physique, elle ne disparaît jamais (sauf bug univers).
### Hérédité
N/A
**Climat** : Le joueur choisit son climat de départ au reset (Tropical, Tempéré, Polaire).
## 3. Impacts Environnementaux
### Impact Température
N/A (C'est la définition même).
| Paramètre | Valeur | Unité | Règle |
|---|---:|---|---|
| Inertie eau | 0.5 | facteur | Un changement global (saison/météo) affecte leau à 50% de lamplitude. |
| Inertie sol | 1.0 | facteur | Le sol suit lamplitude complète. |
| Lissage | 15 | min in-game | La variation sapplique progressivement sur la durée (évite “saut” visuel brutal). |
### Impact Milieu (Biome)
N/A
**Inertie** : L'eau change de T° moins vite que la terre (Tampon thermique).
### Impact Saisons
| Saison | Modificateur Global |
@@ -68,20 +72,20 @@ N/A
**Froid** : Augmente la consommation de nourriture (+20% par tranche de 5°C sous l'idéal).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Confort Visiteur** : T° idéale (22°C) = Bonus satisfaction. Si > 30°C ou < 5°C, satisfaction baisse plus vite.
### Impact Valeur
N/A
**Coût Énergie** : Chauffage/Clim coûte cher (10 pièces/degré corrigé).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Gel** : Si T° < 0°C, vitesse déplacement -20% (Verglas).
### Dépenses (Boutiques/Visiteurs)
N/A
**Facture Énergétique** : Coût mensuel lié aux régulateurs thermiques.
### Trajet Visiteurs
N/A
**Ombre** : Les visiteurs cherchent l'ombre en été (Pathfinding modifié).
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -94,6 +98,8 @@ N/A
| Niveau | Coût | Plage Réglage | Temps |
| :--- | :--- | :--- | :--- |
| 1 | 200 | +/- 5°C | 0s |
| 2 | 500 | +/- 10°C | 0s |
| 3 | 1000 | +/- 20°C | 0s |
| 7 | 2000 | +/- 50°C | 0s |
## 8. Logique et Interfaces
@@ -109,6 +115,15 @@ currentTemp = baseBiomeTemp + seasonMod + dayNightMod + caseRegulatorOffset
# 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)
### Visualisation Thermique (Passif)
**Description UX** : Le joueur voit la température de chaque case.
@@ -119,31 +134,31 @@ currentTemp = baseBiomeTemp + seasonMod + dayNightMod + caseRegulatorOffset
**Événements** : `TOGGLE_THERMAL_VIEW`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Sonar "Ping" lors de l'activation.
- **Sons** : `switch.mp3`.
- **Graphiques** : Overlay dégradé Bleu/Rouge semi-transparent.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Légende thermique (Barre de couleur).
- **Vidéos** : Effet de chaleur (ondulation de l'air).
- **Animations** : Fade In/Out de l'overlay.
- **Couleurs** : Bleu (#0000FF) -> Rouge (#FF0000).
- **Textes** : "25°C" (sur chaque case).
- **Formes** : N/A
- **Formes** : Grille colorée.
### Feedback Critique (Alerte)
**Description UX** : Une case est mortelle pour son occupant.
**Description UI** : La case clignote ou a un bord rouge. L'animal tremble (froid) ou transpire (chaud).
**Emplacement** : Case.
**Intégration** : Immédiat.
**Navigation** : N/A
**Navigation** : Auto (Alerte).
**Événements** : `TEMP_ALERT`.
#### Assets
- **Musiques** : N/A
- **Musiques** : Sirène "Alerte Météo" (lointaine).
- **Sons** : `shiver.mp3` (dents qui claquent) ou `pant.mp3`.
- **Graphiques** : Particules Givre ou Vapeur.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : Icône Flocon ou Flamme.
- **Vidéos** : Effet de gel (bords écran blancs).
- **Animations** : Tremblement sprite.
- **Couleurs** : Bleu Glace / Rouge Feu.
- **Textes** : N/A
- **Formes** : N/A
- **Textes** : "Danger T° !".
- **Formes** : Pulsation rouge autour de la case.

499
docs/specs/theme.md Normal file
View File

@@ -0,0 +1,499 @@
# Thème
## 1. Définition
Ensemble cohérent de skins et d'éléments visuels transformant l'ambiance générale du zoo ou de l'interface. Un thème peut inclure des skins pour l'avatar, des textures pour les chemins, des apparences pour les bâtiments et une musique de fond spécifique. Les thèmes sont souvent liés aux passes saisonniers (ex: Jungle, Tigre, Ours, Dinosaures).
## 2. Fonctions
* **Immersion :** Change l'atmosphère du jeu.
* **Récompense :** Objectif principal des passes saisonniers.
* **Fidélisation :** Renouvellement visuel régulier pour éviter la lassitude.
## 3. Icone
* **Représentation :** Pinceau et palette ou Paysage stylisé.
* **Couleur dominante :** Arc-en-ciel ou Variable selon le thème.
## 4. Interactions
* **Activation :** Via le menu des paramètres ou le menu de personnalisation du zoo.
* **Aperçu :** Possibilité de voir le rendu du thème avant de l'appliquer.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"theme_id": "theme_jungle_2026",
"name": "Saison de la Jungle",
"associated_pass_id": "pass_jungle",
"assets": {
"background_music": "music_jungle_loop.mp3",
"ui_style": "jungle_skin",
"default_path_texture": "texture_path_mossy",
"zoo_entrance_skin": "entrance_temple"
},
"active_period": {
"start": "2026-06-01",
"end": "2026-06-30"
}
}
```
### Règles Métier
* L'accès à un thème est temporaire (durée du passe, ex: 1 mois) pour les joueurs standards.
* **Exception VIP :** Les joueurs VIP conservent l'accès aux thèmes débloqués de manière permanente tant qu'ils conservent leur statut VIP.
* Un thème s'applique globalement mais peut être désactivé par le joueur.
## 6. Annexes UX/UI
* **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.
# 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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Thème = pack cohérent de skins + style UI + ambiance audio/FX. |
| Portée | Global zoo + UI (selon `assets.ui_style`). |
| Source | Passe saisonnier, boutique, VIP gating. |
| Contrainte | Application immédiate et réversible ; pas de cache applicatif (état courant). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Lister thèmes | open UI | filtres | liste | gating par possession/VIP | Event `THEME_LIST_OPEN` |
| Prévisualiser | hover/clic | theme_id | preview | sandbox visuel (sans commit) | Event `THEME_PREVIEW` |
| Activer | clic apply | possession, gating | theme actif | Un thème actif à la fois ; idempotent | Event `THEME_APPLIED` |
| Désactiver | clic | - | retour default | revert complet | Event `THEME_REMOVED` |
| Appliquer assets | apply | `assets` | rendu | map textures, UI tokens, musique | Event `THEME_ASSETS_BOUND` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Palette/pinceau / paysage |
| Couleur dominante | variable selon thème |
| Variantes | `icon_theme_palette.png`, `icon_theme_landscape.png` |
| États | lock, “actif”, “expire bientôt” |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir sélecteur | Consultation | - | Paramètres → Thèmes | liste | - |
| Prévisualiser | Consultation | thème visible | clic item | preview | - |
| Appliquer | Action | possédé + gating ok | bouton “Appliquer” | thème actif | `THEME_LOCKED`, `VIP_REQUIRED` |
| Désactiver | Action | thème actif | “Désactiver” | default | - |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `theme_id` | string | `theme_jungle_2026` | config | unique |
| `name` | string | `Saison de la Jungle` | i18n | affichage |
| `associated_pass_id` | string | `pass_jungle` | config | gating |
| `assets.background_music` | string | `music_jungle_loop.mp3` | build | loop |
| `assets.ui_style` | string | `jungle_skin` | build | tokens |
| `assets.default_path_texture` | string | `texture_path_mossy` | build | iso tiles |
| `assets.zoo_entrance_skin` | string | `entrance_temple` | build | banderole/entrée |
| `active_period.start/end` | date | - | config | window |
| `player_state.active_theme_id` | string|null | - | DB | 1 actif |
| `timestamps.created_at/updated_at` | timestamp | - | DB | audit |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Thème actif | none | id | default |
| Nombre thèmes dispo | 0..n | count | selon possession |
| Musique | default | asset | fallback interdit, donc default est un thème “base” explicitement défini |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Thèmes possédés | 0 | 0..∞ | collection |
| Thèmes actifs/jour | 0 | 0..∞ | debug |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | passe/shop | theme_id | visible | gating dates |
| Activation | apply | id | actif | unique |
| Fin période | end_date | now | gating | VIP rule |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Possédé | true | est | visible |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Non-VIP + fin période | true | est | non activable (reste listé “verrouillé”) |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Possession thème | Oui | persiste |
| Activation | Oui | persiste |
| Accès après saison | conditionnel | VIP gating |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| Hiver | textures neige | visuel |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Jungle | palette verte | cohérence |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Saison du passe | thème recommandé | UI |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Nuit | néon/torches | rendu |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet | Condition |
|---|---|---|
| - | aucun | cosmétique |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Effet | Condition |
|---|---|---|
| Thème cohérent | attractivité + | esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Skins enclos/objets | visuel | pas de stats |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Thèmes rares | + | prestige |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps visite | + | attractivité via thème |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Achat thème | variable | coins | pass/shop |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | esthétique | thème indirect |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `THEME_APPLIED` | apply | theme_id | actif |
| `THEME_REMOVED` | remove | - | default |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `THEME_ASSETS_BOUND` | apply | bind |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `THEME_PREVIEW` | preview | render |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|---|
| `OPEN_THEME_SELECTOR` | open | UI |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 0 | sélecteur thèmes | apply |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `applyTheme` | theme_id | ok/err | gating |
| `bindAssets` | assets | renderer | - |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `THEME_LOCKED` | Warning | "Thème verrouillé." | non possédé |
| `VIP_REQUIRED` | Warning | "VIP requis." | gating |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Changer thème | ambiance | preview | bouton “Prévisualiser” + “Appliquer” |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Sélecteur | liste/carrousel | locked/active |
| Transition | rideau/fondu | - |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Options | menu | - |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| UI tokens | css/theme | cohérence |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | options | liste |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_THEME_SELECTOR` | clic | modal |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `music_jungle_loop.mp3` | fond | loop | thème |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_theme_apply.mp3` | apply | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `theme_cards.png` | UI | - |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `theme_preview.png` | preview |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `theme_transition.webm` | transition | 1.2s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| rideau | apply | 1.0s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `theme_primary` | variable | UI |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `theme.apply` | Appliquer | Apply |
| `theme.preview` | Prévisualiser | Preview |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cartes | rectangles arrondis | - |

57
docs/specs/vendeur.md Normal file
View File

@@ -0,0 +1,57 @@
# Vendeur (Boutique)
## 1. Définition
Personnage de service associé aux boutiques du zoo. Il matérialise la vente (service, file), les promotions et sert de personnage contextuel lors des événements de boutique.
## 2. Fonctions
* **Service clients** : Représente la cadence de service de la boutique (entrée/sortie visiteurs).
* **Animation vente** : Déclenche les FX de caisse (“pièces qui volent”) et les popups.
* **Gestion file/plein** : Signale `SHOP_FULL` avec cause (capacité) et action (upgrade / poser une autre boutique).
## 3. Icone
* **Représentation :** Sac cadeau / caisse.
* **Couleur dominante :** Vert (vente) + or (pièces).
## 4. Interactions
* **Clic boutique** : ouvre stats et options (upgrade, skin boutique).
* **Clic sur promo** : ouvre un panneau de détails (durée, effet) si la mécanique existe.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"employee_id": "vendor_01",
"type": "vendeur",
"name": "Léo",
"salary": 0,
"hire_cost": 0,
"assigned_building": "shop_uuid",
"state": "enum (IDLE, SERVING, RESTOCKING, OVERLOADED)",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* Le vendeur est lié à une `boutique.md` (pas un employé libre).
* En surcharge (file), létat est visible (badge / bulle) et déclenche un message explicite.
# 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.
## Affichage contextuel (modules)
- **Boutique** (`boutique.md`) : vente, surcharge, rupture de stock (si activée), consultation stats.
- **Menu Achats** (`menu_achats.md`) : pour les items “boutique”/cosmétiques, le vendeur peut être le personnage contextuel lors de la prévisualisation et de la confirmation dachat (UI).
## Skins & thèmes
* Uniforme et comptoir dépendent du thème (`theme.md`).
* Variantes (type de boutique : food/souvenir/boisson) via skins (`inventaire_skins.md`) côté bâtiment + accessoires du vendeur.

View File

@@ -0,0 +1,55 @@
# Vendeur (achat en pièces pour le zoo)
## 1. Définition
Personnage contextuel du module de conversion/achat de monnaie “pièces” pour le zoo. Il intervient dans le `menu_achats.md` pour présenter les packs, confirmer les transactions et afficher les erreurs de paiement/fonds.
## 2. Fonctions
* **Présentation packs** : Affiche les packs de pièces (et, si présent, la monnaie source : gems, coupons).
* **Transaction** : Déclenche une transaction atomique (débit monnaie source + crédit pièces).
* **Transparence** : Affiche le détail (taux, bonus éventuel, limites) sans masquage.
## 3. Icone
* **Représentation :** Pile de pièces + symbole échange.
* **Couleur dominante :** Or.
## 4. Interactions
* **Ouverture** : Menu Achats → section “Pièces”.
* **Achat** : Sélection pack → confirmer (si requis) → crédit.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"npc_id": "coin_merchant_01",
"type": "vendeur_pieces",
"name": "Maya",
"offers": [
{
"offer_id": "coins_pack_s",
"coins_amount": 1000,
"price": { "gems": 10 }
}
],
"limits": {
"daily_purchases_max": 10
}
}
```
### Règles Métier
* Aucune alternative silencieuse : si paiement impossible, afficher la cause (`NOT_ENOUGH_GEMS`, `LIMIT_REACHED`, `PAYMENT_FAILED`).
* Les offres doivent rester cohérentes avec le thème (bannière, palette) et les règles “pas danalytics”.
# Annexes UX/UI
## 0. Direction Artistique & Vue
* **Style** : Cohérent UI shop (réutilise `menu_achats.md`).
* **Personnage** : Portrait/mascotte dans le panneau “Pièces”.
## Affichage contextuel (modules)
- **Menu Achats** (`menu_achats.md`) : ouverture section pièces, confirmation, achat réussi/échoué.
## Skins & thèmes
* Tenue et décor dérivent du thème (`theme.md`).
* Accessoires (bourse, caisse, badge) via `inventaire_skins.md` si des skins “UI shop staff” existent.

View File

@@ -2,7 +2,7 @@
## Types de Ventes
- **Aux Enchères** : Vers d'autres joueurs (prix potentiellement élevé).
- **Libération (Vente rapide)** : Vente au "système" (prix bas fixe) pour faire de la place rapidement (si implémenté pour éviter la mort). *Note : Le cahier des charges privilégie le marché joueurs, la libération est une option de secours.*
- **Libération (Vente rapide)** : Vente au "système" (prix plancher fixe) pour libérer de la place rapidement (optionnelle selon design retenu). *Note : Le cahier des charges privilégie le marché joueurs ; la libération est un mode de vente alternatif.*
## Contraintes
- Un animal malade ou mourant ne peut pas être mis en vente.
@@ -12,80 +12,151 @@
## 1. Données et États
### Modèle de Données (JSON)
N/A
```json
{
"sale_id": "uuid",
"seller_zoo_id": "uuid",
"seller_player_id": "uuid | null (null si bot)",
"animal_id": "uuid",
"sale_type": "enum('auction_adult','auction_baby','release_system')",
"status": "enum('draft','in_transit','listed','pending_validation','completed','expired','cancelled')",
"created_at": "timestamp",
"updated_at": "timestamp",
"listing": {
"start_price": "integer",
"buy_now_price": "integer | null",
"currency": "enum('coins')",
"duration_seconds": "integer (3600|14400|86400)",
"end_at": "timestamp"
},
"bids": [
{
"bid_id": "uuid",
"bidder_zoo_id": "uuid",
"amount": "integer",
"created_at": "timestamp"
}
],
"validation": {
"accepted_bid_id": "uuid | null",
"pending_until": "timestamp | null (sablier 10 min)",
"finalized_at": "timestamp | null"
},
"transport": {
"truck_id": "uuid",
"from_site_id": "uuid",
"to_site_id": "uuid | null",
"climate_control": "boolean",
"insurance": "boolean",
"transport_started_at": "timestamp",
"transport_eta_at": "timestamp"
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
N/A
**Total Vendu** : 0 animaux.
### Scores Initiaux
N/A
**Réputation Vendeur** : Neutre (0).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
N/A
**Marché** : Offre publiée par le joueur.
### Conditions de Disparition
N/A
**Vente conclue** (Achat par tiers) ou **Annulation** (Retour au zoo).
### Hérédité
N/A
**Certificat** : L'acheteur voit les parents et l'arbre généalogique.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Transport** : Camion climatisé requis si T° extrême (Coût +10%).
### Impact Milieu (Biome)
N/A
**Export** : Le biome d'origine est indiqué (Bonus adaptation si même biome cible).
### Impact Saisons
N/A
**Demande** : Varie selon saison (ex: Rennes très demandés en Hiver, Lapins au Printemps).
### Impact Heure / Jour-Nuit
N/A
**Enchères** : Souvent le soir (18h-22h) pour maximiser les vues (Prime Time).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Vente Reproducteur** : Un animal fertile vaut 2x plus cher.
### Impact Mort
N/A
**Assurance** : Remboursement 50% si mort pendant transport (si assurance payée).
### Impact Nourriture
N/A
**Panier repas** : Coût inclus dans frais vente (L'animal ne doit pas arriver affamé).
### Impact Attractivité (Visiteurs/Animaux)
N/A
**Perte Star** : Vendre son meilleur animal (Légendaire) baisse l'attractivité du zoo (-10%).
### Impact Valeur
**Prix Libération** : 10% de la valeur théorique de l'animal.
**Prix Libération** : 10% de la valeur théorique de l'animal (Prix plancher).
**Prix Enchère** : Potentiellement infini (Offre/Demande).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Durée Enchère** : 1h, 4h, 24h (au choix).
### Dépenses (Boutiques/Visiteurs)
N/A
**Taxe Salle Vente** : 10% du prix final prélevé par le jeu.
### Trajet Visiteurs
N/A
**Départ** : Les visiteurs font signe "au revoir" quand le camion part.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Offre** : Mise en ligne.
* **Bid** : Nouvelle enchère reçue.
* **Sold** : Vente terminée.
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Compétences Marchand.*
| Niveau | Nom | Avantage |
| :--- | :--- | :--- |
| 1 | Vendeur Rue | Taxe 10% |
| 2 | Négociant | Taxe 8% |
| 3 | Exportateur | Taxe 5%, Visibilité Mondiale |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function sellAnimal(animal, price, mode):
if mode == "RELEASE":
player.coins += animal.value * 0.10
removeAnimal(animal)
else:
createOffer(animal, price)
animal.status = "TRANSIT"
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ANIMAL_SOLD` | Succès | "Animal vendu pour {amount} pièces !" |
| `ANIMAL_RELEASED` | Info | "Animal relâché dans la nature." |
# 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)
### Libération (Action)
**Description UX** : Le joueur relâche un animal (vente système).
@@ -96,12 +167,12 @@ N/A
**Événements** : `RELEASE_ANIMAL`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_warning_soft.mp3` (jingle court à louverture de confirmation).
- **Sons** : `bird_fly_away.mp3` (bruit de nature positif).
- **Graphiques** : Icône Cage ouverte.
- **Images** : N/A
- **Vidéos** : N/A
- **Images** : `icon_release.png`, `modal_confirm.png`.
- **Vidéos** : `release_fade.webm` (1.2s non loop, optionnel).
- **Animations** : Animal s'estompe ou court hors de l'écran.
- **Couleurs** : Vert (Nature).
- **Textes** : "Libéré !".
- **Formes** : N/A
- **Formes** : Bouton danger (rouge) + modal arrondie.

View File

@@ -17,10 +17,17 @@ Identique à la vente de bébés, mais avec des tolérances plus grandes sur les
Identique à `vente_enchere_bebe.md`.
### Caractéristiques Initiales
N/A
| Caractéristique | Valeur | Notes |
|---|---|---|
| Durée Enchère | 4h - 24h | Les adultes tolèrent des durées plus longues que les bébés. |
| Délai Validation | 10 min | Identique au générique enchères (sablier). |
| Dégradation âge | Oui | Prix perçu diminue avec lâge (cf. `animal_generique.md`). |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Valeur perçue (âge) | 100 | 0-150 | Modifie la propension des bots à enchérir. |
| Résistance transport | 80 | 0-100 | Réduit les risques dincident pendant vente/transport. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -30,64 +37,126 @@ Action joueur.
Vente ou Expiration.
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Parents (si connus) | Arbre généalogique | 100% | Non |
| Vendeur | “Certificat dentretien” | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Plage Température | Effet sur l'entité | Bonus/Malus |
|---|---|---|
| < 0°C | Fatigue + | Risque incident +5% si pas de camion climatisé |
| 1525°C | Stable | 0 |
| > 35°C | Fatigue + | Risque incident +5% si pas de camion climatisé |
### Impact Milieu (Biome)
N/A
| Biome | Compatibilité | Bonus/Malus |
|---|---:|---|
| Marché (UI) | 100% | Aucun |
| Transport long | 90% | Légère fatigue (adultes résistent) |
### Impact Saisons
N/A
| Saison | Effet | Modificateur |
|---|---|---|
| Hiver | Demande espèces froides + | Bids +10% (espèces adaptées) |
| Été | Demande espèces chaudes + | Bids +10% (espèces adaptées) |
### Impact Heure / Jour-Nuit
N/A
| Période | Activité marché | Impact |
|---|---|---|
| 18h22h | Prime time | +10% bids |
| Nuit | Faible | -15% bids |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Adulte fertile vendu | Prix x2 | Si fertilité > seuil et pas en cooldown |
### Impact Mort
**Risque** : Si `status == expired` et non récupéré sous 24h -> Mort.
### Impact Nourriture
N/A
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Rations transport | stable | inclus | 3 |
### Impact Attractivité (Visiteurs/Animaux)
N/A
| Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Vente star (rare) | -10% attractivité zoo | Global (zoo vendeur) |
### Impact Valeur
N/A
| Facteur | Variation Prix | Condition |
|---|---:|---|
| Âge élevé | -20% | au-delà du seuil “senior” |
| Santé parfaite | +10% | survival élevé |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Paramètre | Valeur | Unité | Règle |
|---|---:|---|---|
| Fenêtre récupération invendu | 24 | h | sinon risque mort adulte (cf. spec) |
| Délai validation | 10 | min | après acceptation |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Taxe marché | 10% | du prix final | prélevée à finalisation |
| Assurance transport | 3% | du prix final | optionnel |
### Trajet Visiteurs
N/A
| Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Consultation marché | ouverture UI | tri | pas de visiteurs physiques |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `AUCTION_CREATED_ADULT` | création enchère | listing visible | jusquà fin |
| `AUCTION_EXPIRED_ADULT` | end_time atteint | statut expired | jusquà récupération |
| `AUCTION_FINALIZED_ADULT` | validation finie | transfert | instant |
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Accès enchères adultes |
| 2 | 2000 | Réputation 300 | Taxe -1% |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```text
createAuctionAdult(animal, startPrice, duration):
assert animal.isAdult && animal.health > 50
moveToTransit(animal)
publishListing()
onExpire():
markExpired()
startReclaimTimer(24h)
```
### Messages d'Infos / Alerte
N/A
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "Enchère créée." | listing publié | 2 |
| Warn | "Enchère expirée : récupérez lanimal." | status expired | 4 |
| Error | "Impossible de vendre : animal indisponible." | malade/mort proche | 5 |
# 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)
### Mise en Vente (Action)
**Description UX** : Le joueur sélectionne un animal adulte sur la grille et choisit "Vendre".
@@ -98,15 +167,15 @@ N/A
**Événements** : `CREATE_AUCTION_ADULT`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_market_open.mp3` (jingle court).
- **Sons** : `cash_register_open.mp3`.
- **Graphiques** : N/A
- **Graphiques** : Icône bourse + badge “adulte”.
- **Images** : Portrait Animal.
- **Vidéos** : N/A
- **Vidéos** : `auction_sheet_intro.webm` (0.8s non loop, optionnel).
- **Animations** : Animal disparaît de la grille (part en zone de vente).
- **Couleurs** : N/A
- **Couleurs** : Or/Gris (adulte), Ambre (pending validation).
- **Textes** : "Mise à prix".
- **Formes** : N/A
- **Formes** : Bottom sheet + cartes.
### Retour Invendu (Action)
**Description UX** : L'enchère est finie sans acheteur. Le joueur doit récupérer l'animal.
@@ -117,12 +186,12 @@ N/A
**Événements** : `RECLAIM_ANIMAL`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_fail_soft.mp3` (jingle court).
- **Sons** : `sad_trombone.mp3` (échec).
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Graphiques** : Icône retour (flèche).
- **Images** : `icon_reclaim.png`.
- **Vidéos** : `reclaim_return.webm` (1.2s non loop, optionnel).
- **Animations** : Retour visuel de l'animal.
- **Couleurs** : Gris (Désactivé).
- **Textes** : "Invendu".
- **Formes** : N/A
- **Formes** : Bouton primary “Récupérer”.

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",
"highest_bidder": "uuid | null",
"end_time": "timestamp",
"status": "active | sold | expired"
"status": "active | sold | expired",
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
@@ -40,7 +43,11 @@ Processus de vente spécifique pour les bébés animaux nés dans le zoo.
| Délai Validation | 10 min (fixe) |
### Scores Initiaux
N/A
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Visibilité Listing | 50 | 0-100 | Poids de tri côté marché. |
| Stress (vente) | 10 | 0-100 | Monte avec le temps ; au-delà de 70, accélère le risque de mort. |
| Confiance vendeur | 0 | -100 à +100 | Influence la participation des bots (anti-spam). |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -50,46 +57,79 @@ Action joueur.
Vente ou Expiration.
### Hérédité
N/A
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Parents (réels) | Rareté/Couleur | cf. `reproduction.md` | Oui |
| Vendeur | “Certificat de soin” | 100% | Non |
## 3. Impacts Environnementaux
### Impact Température
N/A
| Plage Température | Effet sur l'entité | Bonus/Malus |
|---|---|---|
| < 5°C | Stress +2/min | Risque mort + (si durée > 10 min) |
| 20°C (Idéal) | Stress -1/min | Stabilise |
| > 30°C | Stress +2/min | Risque mort + (si durée > 10 min) |
### Impact Milieu (Biome)
N/A
| Biome / Contexte | Compatibilité | Bonus/Malus |
|---|---:|---|
| Marché (UI) | 100% | Aucun |
| Transport long | 80% | Fatigue + |
### Impact Saisons
N/A
| Saison | Effet | Modificateur |
|---|---|---|
| Printemps | Demande bébés + | Bids +10% |
| Été | Chaleur | Stress +10% |
| Automne | Neutre | 0% |
| Hiver | Froid | Stress +10% |
### Impact Heure / Jour-Nuit
N/A
| Période | Activité marché | Impact |
|---|---|---|
| 18h22h | Prime time | +15% bids |
| Nuit | Faible | -20% bids |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Bébé rare vendu | +10 réputation | Si `status` devient `sold` puis finalisé |
### Impact Mort
**Risque** : Si `status == expired` et non récupéré sous 1h -> Mort du bébé.
### Impact Nourriture
N/A
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Lait / soin | Stabilise | inclus | 5 |
### Impact Attractivité (Visiteurs/Animaux)
N/A
| Action/État | Gain Attractivité | Rayon d'action |
|---|---:|---:|
| Vente bébé rare conclue | +25 | Global |
| Bébé mort (invendu) | -50 | Global |
### Impact Valeur
**Dépréciation** : Aucune (c'est une enchère).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
| Paramètre | Valeur | Unité | Règle |
|---|---:|---|---|
| Délai validation | 10 | min | après acceptation |
| Fenêtre récupération invendu | 1 | h | sinon mort bébé |
### Dépenses (Boutiques/Visiteurs)
N/A
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Taxe marché | 10% | du prix final | prélevée à finalisation |
| Assurance transport | 5% | du prix final | optionnel |
### Trajet Visiteurs
N/A
| Trajet | Condition | Effet | Notes |
|---|---|---|---|
| Consultation acheteurs | ouverture marché | tri par visibilité | pas de visiteurs physiques |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
@@ -99,11 +139,28 @@ N/A
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | Accès enchères bébés |
| 2 | 1000 | Réputation 200 | Taxe -1% |
| 3 | 5000 | Réputation 1000 | Visibilité +10 |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```text
onAcceptBid(auction, bid):
auction.status = 'pending_validation'
auction.pending_until = now + 10min
onTick():
if auction.status == 'pending_validation' and now >= pending_until:
finalize(auction)
finalize(auction):
transferCoins(bidder, seller, amount - tax)
scheduleDelivery(truck, bidderZoo)
auction.status = 'sold'
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
@@ -113,6 +170,15 @@ N/A
# 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)
### Mise en Vente (Action)
**Description UX** : Le joueur glisse un bébé depuis la nurserie vers le camion.
@@ -123,12 +189,12 @@ N/A
**Événements** : `CREATE_AUCTION`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_market_open.mp3` (jingle court).
- **Sons** : `cash_register_open.mp3`.
- **Graphiques** : Icône Bourse/Pièce.
- **Images** : Portrait Bébé.
- **Vidéos** : N/A
- **Animations** : N/A
- **Vidéos** : `auction_sheet_intro.webm` (0.8s non loop, optionnel).
- **Animations** : Compteur “mise à prix” qui sincrémente, pulsation du bouton “Valider”.
- **Couleurs** : Or.
- **Textes** : "Prix de départ", "Durée".
- **Formes** : Champs de saisie.
@@ -142,12 +208,12 @@ N/A
**Événements** : `OPEN_MY_SALES`.
#### Assets
- **Musiques** : N/A
- **Musiques** : `ui_market_list.mp3` (jingle discret optionnel).
- **Sons** : `notification.mp3` (si offre reçue).
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Couleurs** : N/A
- **Graphiques** : Icône cloche + badge compteur.
- **Images** : `icon_hourglass.png`, `icon_bid.png`.
- **Vidéos** : `bid_badge_pulse.webm` (0.6s loop, optionnel).
- **Animations** : Badge qui pulse sur nouvelle offre.
- **Couleurs** : Ambre (#F39C12) en attente validation, Vert (#2ECC71) vendu.
- **Textes** : "Meilleure offre : X".
- **Formes** : N/A
- **Formes** : Pills (badges), cartes liste.

View File

@@ -13,6 +13,23 @@ Une ville est une entité sur la Carte du Monde qui génère le flux de visiteur
- **Facteur de Distance** : Plus un zoo est proche d'une ville, plus il attire de visiteurs.
- **Facteur d'Attractivité** : La valeur et la diversité du zoo influencent le choix des visiteurs.
## Personnage contextuel (événements & interaction)
Voir `maire.md`.
### Affichage
Le maire saffiche lorsque :
- la ville est **actionnée** (sélection/clic ville, ouverture panneau ville) ;
- un **événement** de ville survient (festival, grève, bonus économique, `CITY_EVENT`).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| sélection ville | clic icône ville | portrait + synthèse (population, richesse, flux) |
| `CITY_EVENT` | événement actif | bulle “Événement en cours” + impacts chiffrés |
### Skins & thèmes
Portrait et accessoires suivent `theme.md` ; variantes “ville” possibles via `inventaire_skins.md`.
# Annexes Techniques
## 1. Données et États
@@ -23,7 +40,10 @@ Une ville est une entité sur la Carte du Monde qui génère le flux de visiteur
"type": "city",
"name": "string",
"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"
}
```
@@ -34,90 +54,558 @@ Une ville est une entité sur la Carte du Monde qui génère le flux de visiteur
| Richesse | 1.0 |
### Scores Initiaux
N/A
**Niveau de Bonheur** : 50% (Influence la fréquence des visites).
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération carte.
### Conditions de Disparition
N/A
**Désastre** : Ville détruite (Event rare "Météorite" ou "Crise Éco").
### Hérédité
N/A
**Jumelage** : Bonus permanent de flux (+5%) si relation max atteinte avec une ville.
## 3. Impacts Environnementaux
### Impact Température
N/A
**Ilot de chaleur** : La ville est toujours +2°C par rapport à la campagne environnante.
### Impact Milieu (Biome)
N/A
**Architecture** : Adaptée au biome (Igloos en Toundra, Tentes en Désert, Gratte-ciels en Plaine).
### Impact Saisons
N/A
**Festivals** : Event saisonnier en ville (+Visiteurs pendant 24h).
- Été : Carnaval.
- Hiver : Marché de Noël.
### Impact Heure / Jour-Nuit
N/A
**Lumières** : La ville brille la nuit (Pollution lumineuse visible).
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
**Baby Boom** : Augmente la population de la ville (+Flux) pendant 1 semaine.
### Impact Mort
N/A
**Épidémie** : Baisse population temporaire (-Flux).
### Impact Nourriture
N/A
**Marché** : La ville vend de la nourriture au joueur (Source d'approvisionnement).
### Impact Attractivité (Visiteurs/Animaux)
Source du flux. `Flux = Pop * (AttractivitéZoo / Distance²)`.
### Impact Valeur
N/A
**PIB** : Influence le budget des visiteurs (Richesse). Une ville riche envoie des VIP.
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
**Trafic** : Ralentit les camions traversant la ville aux heures de pointe (8h-9h, 17h-18h).
### Dépenses (Boutiques/Visiteurs)
**Facteur Richesse** : Multiplie le budget des visiteurs issus de cette ville.
### Trajet Visiteurs
Point de départ.
Point de départ. Les visiteurs arrivent en bus/voiture depuis la ville.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
N/A
* **Fête Nationale** : Flux x2.
* **Grève** : Flux / 2.
## 7. Progression
### Tableau des Upgrades
N/A
*Note : Campagnes Marketing ciblées.*
| Niveau Campagne | Coût | Effet |
| :--- | :--- | :--- |
| 1 (Panneaux) | 500 | +5% Flux |
| 2 (Radio) | 1500 | +10% Flux |
| 3 (TV) | 5000 | +20% Flux |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function calculateVisitorFlow(city, zoo):
distance = getDistance(city, zoo)
baseFlow = city.population * (zoo.attractiveness / (distance * distance))
if isPeakHour(): baseFlow *= 1.5
if city.hasEvent(): baseFlow *= 2.0
return baseFlow
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `CITY_EVENT` | Info | "C'est la fête à [NomVille] ! Attendez-vous à du monde." |
# 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)
### Visualisation Taille (Passif)
**Description UX** : Distinguer les grandes villes des petites.
**Description UI** : Taille de l'icône proportionnelle à la population. Gratte-ciels vs Maisons.
**Emplacement** : Carte Monde.
**Intégration** : Sprite.
**Navigation** : N/A
**Événements** : N/A
**Navigation** : Zoom sur la carte.
**Événements** : `MAP_ZOOM`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Musiques** : Ambiance urbaine (klaxons lointains, vent).
- **Sons** : Bruit de trafic faible.
- **Graphiques** : Sprites Ville (Petit, Moyen, Grand).
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Images** : Silhouette Skyline.
- **Vidéos** : Lumières des fenêtres qui s'allument la nuit (Pixel Art animé).
- **Animations** : Fumée des cheminées.
- **Couleurs** : Gris/Bleu.
- **Textes** : Nom Ville.
- **Formes** : N/A
- **Formes** : Cercle d'influence (zone de chalandise).
## Définition
| Champ | Valeur |
|---|---|
| Concept | Site “Ville” : nœud de la carte monde générant un potentiel de visiteurs et un budget moyen (wealth_factor). |
| Rôle | Alimenter le flux ville→zoo (choix par attractivité/distance) et porter des événements (festivals, grèves) modifiant la demande. |
| Portée | Une entité fixe sur carte monde, référencée par les calculs dattractivité. |
| Contrainte | Flux calculé à la volée (pas de cache/mémorisation) ; aucun mécanisme danalytics ; événements doivent être explicités via events/messages. |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Calculer flux vers un zoo | tick / ouverture carte | `population`, `wealth_factor`, distance, attractivité zoo | `baseFlow` | formule \(Pop \cdot A / d^2\) + mods heure/event | Event `CITY_FLOW_DISPATCHED` |
| Déclencher événement ville | calendrier/saison | type event | mod flux/budget | durée bornée | Event `CITY_EVENT` |
| Vendre nourriture (marché) | interaction (feature) | stock, price | items | pricing selon wealth | Event `CITY_MARKET_OPENED` |
| Marquer jumelage | relation max | city_id | bonus permanent | +5% flux vers zoo jumelé | Event `CITY_TWINNED` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Skyline (petite/moyenne/grande) |
| Couleur dominante | Gris/bleu + lumières jaunes |
| Variantes | `city_small.png`, `city_medium.png`, `city_large.png` |
| États | jour (clair), nuit (lumières), event (feux dartifice) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Ouvrir ville | Consultation | ville visible | clic marker | panneau | `ZONE_NOT_EXPLORED` |
| Voir flux | Consultation | zoo sélectionné | onglet flux | valeurs | - |
| Lancer campagne (feature) | Action | coins ok | bouton campagne | flux + | `NOT_ENOUGH_COINS` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `city` | DB | constant |
| `name` | string | `Rivemont` | DB | - |
| `population` | int | 250000 | DB | >0 |
| `wealth_factor` | float | 1.2 | DB | 0.5..2.0 |
| `events.active_event` | enum \| null | `NATIONAL_HOLIDAY` | DB | null si none |
| `events.ends_at` | timestamp \| null | - | DB | UTC |
| `iso_x` | int | 120 | calcul | rendu |
| `iso_y` | int | 88 | calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Bonheur ville | 50 | % | influe fréquence |
| Îlot chaleur | +2 | °C | vs campagne |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Relation | 0 | 0..100 | jumelage |
| Flux envoyé | 0 | 0..∞ | suivi in-game |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Génération | seed monde | biome | ville | fixe |
| Événement | calendrier | type | mods | durée |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération carte | true | est | ville créée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Désastre rare | true | est | ville détruite (event) |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Jumelage | Oui | bonus permanent |
| Événements | Non | expirent |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet | Notes |
|---|---|---|
| îlot chaleur | +2°C | constant |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| toundra | architecture igloos | visuel |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| hiver | marché Noël | flux + |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| nuit | lumières | pollution lumineuse |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| baby boom | pop + | 1 semaine in-game |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| épidémie | pop - | temporaire |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| marché | stock joueur + | achats |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| richesse | budget ↑ | monde | VIP |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| PIB | dépense moyenne ± | wealth_factor |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| trafic pointe | vitesse - | 8-9h, 17-18h |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| campagne marketing | flux + | achat |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| conférence science | affluence + | event |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| distance | flux \(\downarrow\) | d^2 |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| campagne 1 | 500 | coins | panneaux |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| budget visiteurs | wealth_factor × | $ | ville |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 1 | coins | lore |
#### 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 |
|---|---:|---|---|
| marchés | variable | coins | achats |
#### 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 |
|---|---:|---|---|
| parking (lore) | 5 | $ | voiture |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | flux | entrée billeterie |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Enclos | visite | satisfaction |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Boutiques | besoins | dépenses |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Ville | sortie | despawn |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `CITY_EVENT` | calendrier | type | flux mod |
| `CITY_TWINNED` | relation 100 | city_id | bonus + |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `MAP_ZOOM` | zoom | taille icône |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | spawn potentiels |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `NATIONAL_HOLIDAY` | event | flux x2 |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SPAWNS_FROM_CITY` | flux | origine |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_STARTS_CITY_CAMPAIGN` | action | flux + |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 2 | 1500 | flux +10% | radio |
| 3 | 5000 | flux +20% | TV |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `calculateVisitorFlow` | city, zoo | float | distance |
| `isPeakHour` | now | bool | trafic |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CITY_EVENT` | Info | "C'est la fête à {city}." | event |
| `CITY_STRIKE` | Warning | "Grève : flux réduit." | event |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Identifier ville | choisir cible | densité | taille icône + tooltip |
| Comprendre flux | arbitrer | maths | panneau simple “flux” |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Marker ville | sprite skyline | petit/moyen/grand |
| Cercle influence | rayon | visible |
| Tooltip | nom + pop | hover |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte monde | sites | iso |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `carte_monde.md` | usage | map |
| `billeterie.md` | entrées | spawn |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir ville | clic marker | panneau |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `MAP_ZOOM` | zoom | scale |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `city_ambience_loop.mp3` | proximité ville | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `traffic_far.mp3` | ville | bas |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `city_skyline_set.png` | sprites | 4 dirs |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `city_influence_ring.png` | cercle |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `city_lights_night.webm` | nuit | 2.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| fumée | idle | loop |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `city_gray` | #546E7A | bâtiments |
| `city_light_yellow` | #FFEE58 | fenêtres |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `city.population` | Population | Population |
| `city.wealth` | Richesse | Wealth |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cercle influence | cercle | zone |

506
docs/specs/vip.md Normal file
View File

@@ -0,0 +1,506 @@
# VIP
## 1. Définition
Statut premium pour les joueurs, généralement obtenu par abonnement ou achat in-app. Le statut VIP confère des avantages de confort et de cosmétique, sans déséquilibrer le gameplay compétitif (Pay-to-Fast ou Pay-to-Cool, pas Pay-to-Win).
## 2. Fonctions
* **Conservation des Thèmes :** Avantage majeur permettant de garder définitivement les thèmes et skins des passes saisonniers, même après la fin de la saison.
* **Bonus Passifs :** Peut inclure des bonus légers d'XP ou de pièces.
* **Prestige :** Badge ou couleur de pseudo distinctif.
## 3. Icone
* **Représentation :** Couronne ou Diamant.
* **Couleur dominante :** Or scintillant ou Violet royal.
## 4. Interactions
* **Achat/Abonnement :** Via la boutique ou le menu profil.
* **Affichage :** Badge visible à côté de l'avatar et du pseudo.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"status_id": "vip_subscription",
"is_active": true,
"expiry_date": "2026-12-31T23:59:59",
"benefits": {
"keep_seasonal_themes": true,
"xp_multiplier": 1.1,
"daily_coin_bonus": 50
}
}
```
### Règles Métier
* Si le statut VIP expire, le joueur perd l'accès aux thèmes saisonniers passés qu'il avait "sauvegardés", sauf s'il se réabonne (règle à définir : perte définitive ou suspension ? -> Suspension par défaut pour encourager le réabonnement).
* Le statut VIP s'applique à tout le compte joueur.
## 6. Annexes UX/UI
* **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).
* **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.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Statut premium (VIP) lié au compte joueur. |
| Rôle | Déverrouiller des avantages de confort + cosmétiques, notamment la conservation des thèmes/passes tant que VIP actif. |
| Portée | Compte (tous zoos / toutes sessions). |
| Contrainte | Pas de mécanisme de cache/mémorisation côté app : létat VIP est lu comme un état courant (source de vérité). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Activer VIP | achat/abonnement | moyen de paiement, plan | `is_active=true`, `expiry_date` | Activation atomique, idempotente sur transaction | Event `VIP_ACTIVATED` |
| Expirer VIP | temps | `expiry_date` | `is_active=false` | Expiration automatique au tick serveur / lazy update au login | Event `VIP_EXPIRED` |
| Conserver thèmes passés | check daccès contenu | `keep_seasonal_themes` | autorisation | Règle retenue : **suspension** des accès si VIP inactif (pas de perte définitive). | Event `VIP_CONTENT_ACCESS_CHECKED` |
| Bonus passifs | tick journalier | plan | coins/xp | Bonus plafonnés (anti P2W), visibles dans UI | Event `VIP_DAILY_BONUS_GRANTED` |
| Badge prestige | render UI | `is_active` | badge | Affiché partout pseudo/avatar | Event `VIP_BADGE_RENDER` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Couronne / diamant |
| Couleur dominante | Or / violet |
| Variantes | `icon_vip_crown.png`, `icon_vip_diamond.png` |
| États | Badge “actif” (or), “expiré” (gris), “renouvellement” (horloge) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Voir offre VIP | Consultation | - | Boutique/Profil → VIP | page détail | - |
| Acheter VIP | Action | paiement ok | Clic “Devenir VIP” → confirmer | VIP actif | `PAYMENT_FAILED`, `NETWORK_ERROR` |
| Renouveler | Action | VIP actif ou expiré | “Renouveler” | `expiry_date` prolongée | `PAYMENT_FAILED` |
| Voir contenu conservé | Consultation | VIP actif | Profil → “Mes thèmes” | liste | `VIP_REQUIRED` |
| Réactiver après expiration | Action | VIP expiré | “Réactiver” | accès restauré (suspension levée) | `PAYMENT_FAILED` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `status_id` | string | `vip_subscription` | DB | constant |
| `is_active` | boolean | true | DB | dérivé de `expiry_date` |
| `expiry_date` | timestamp | `2026-12-31T23:59:59Z` | DB | UTC |
| `plan_id` | string | `vip_monthly` | DB | enum plans |
| `benefits.keep_seasonal_themes` | boolean | true | config | gating contenu |
| `benefits.xp_multiplier` | float | 1.1 | config | cap 1.2 |
| `benefits.daily_coin_bonus` | int | 50 | config | cap 200 |
| `timestamps.created_at` | timestamp | - | DB | audit |
| `timestamps.updated_at` | timestamp | - | DB | audit |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| VIP actif | false | bool | par défaut |
| Multiplicateur XP | 1.0 | coef | sans VIP |
| Bonus coins/jour | 0 | coins | sans VIP |
| Conservation thèmes | false | bool | gating |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Jours VIP cumulés | 0 | 0..∞ | UI historique (pas danalytics) |
| Bonus total distribués | 0 | 0..∞ | transparence UI |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | création compte | - | VIP inactif | - |
| Activation | achat | plan | VIP actif | atomicité |
| Renouvellement | achat | plan | expiry prolongée | monotone |
| Expiration | temps | date | VIP inactif | suspension contenu |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte créé | true | est | entrée VIP créée (inactive) |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Compte supprimé | true | est | VIP supprimé |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Historique VIP | Oui | persiste |
| Contenu “conservé” | Oui | reste possédé mais **gated** si VIP off |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet VIP | Notes |
|---|---|---|
| - | aucun | statut méta |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet VIP | Notes |
|---|---|---|
| - | aucun | - |
#### Impact Saisons (tableau détaillé)
| Saison | Effet VIP | Notes |
|---|---|---|
| Saison active | contenu pass dispo | lié au passe |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet VIP | Notes |
|---|---|---|
| Jour | bonus journalier | horaire fixe serveur |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | VIP naffecte pas reproduction |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Thèmes conservés | + (cosmétique) | zoo | impact via esthétique |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| - | aucun direct | - |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Prestige VIP | + | classement/présentation |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| XP multiplier | xp × 1.1 | VIP actif |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| - | aucun | - |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Temps visite | + léger | confort (option) |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Abonnement VIP | variable | coins/€ | boutique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |
#### Dépenses (Nurseries) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | réputation | VIP indirect (via thèmes/esthétique) |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| - | - | - | - |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `VIP_ACTIVATED` | paiement ok | plan_id | active |
| `VIP_EXPIRED` | date | - | suspend |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VIP_BADGE_RENDER` | UI | badge |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VIP_CONTENT_ACCESS_CHECKED` | apply theme | allow/deny |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VIP_DAILY_BONUS_GRANTED` | reset journalier | coins/xp |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | variable | VIP actif | badge + conservation gating |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `isVipActive` | now, expiry_date | bool | source de vérité |
| `canUseTheme` | vip, theme | allow | suspension si VIP off |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `VIP_REQUIRED` | Warning | "VIP requis." | accès contenu gated |
| `VIP_EXPIRED` | Info | "VIP expiré." | expiration |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Devenir VIP | conserver thèmes | paiement | bouton direct profil + boutique |
| Réactiver | restaurer accès | paiement | deep-link depuis contenu locké |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Page VIP | bénéfices, prix, CTA | active/expired |
| Badge VIP | couronne | visible partout |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Profil | en-tête | badge |
| Boutique | section VIP | CTA |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| Skins/thèmes | gating | suspension |
| Passe saisonnier | conservation | VIP |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir VIP | profil/boutique | page |
| Acheter | CTA | paiement |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_VIP_PAGE` | clic | page |
| `CLICK_BUY_VIP` | CTA | paiement |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `vip_page_loop.mp3` | page VIP | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `ui_purchase_success.mp3` | achat ok | moyen |
| `ui_purchase_fail.mp3` | achat fail | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `vip_badge_crown.png` | badge | scalable |
| `vip_gold_glow.png` | FX | overlay |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `vip_banner.png` | hero |
| `vip_benefit_cards.png` | cartes |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `vip_glow.webm` | succès | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| glow doré | activation | 0.8s |
| badge pulse | reward | 0.6s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `vip_gold` | #D4AF37 | UI |
| `vip_purple` | #6A1B9A | accent |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `vip.become` | Devenir VIP | Become VIP |
| `vip.renew` | Renouveler | Renew |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Cartes bénéfices | rectangles arrondis | lisibles |
| Badge | rond | constant |

View File

@@ -1,228 +1,421 @@
# Spécifications : Visiteur
## Définition
Personnage non-joueur (PNJ) qui visite le zoo.
Personnage non-joueur (PNJ) qui visite le zoo. Il est la source principale de revenus (tickets, boutiques) et un indicateur vivant de la qualité du parc (satisfaction).
## Comportement
- **Apparition** : Arrive par la Billeterie (venant d'une Ville).
- **Déplacement** : Se promène sur la grille, attiré par les animaux et boutiques.
- **Durée** : Reste jusqu'à 1 journée (variable selon attractivité).
- **Dépense** : Paie l'entrée + achats en boutique.
## Fonctions
| Fonction | Description | Entrées | Sorties |
|---|---|---|---|
| Visite | Parcours le zoo pour observer les animaux. | Attractivité, Chemin | Satisfaction, Temps |
| Consommation | Achète des biens et services dans le zoo. | Argent, Besoins | Revenus (Joueur), Satisfaction |
| Jugement | Évalue la qualité du zoo et influence la réputation. | État Zoo, Prix | Score Réputation |
## Incidents et Exigences
- **Besoins** : Soif, Repos (banc), Propreté (poubelle), Envie de photo.
- **Feedback** : Bulle d'icône au-dessus du visiteur.
- **Résolution** : Clic du joueur sur la bulle.
- **Conséquence** :
- Résolu : Gain de pièces + Attractivité.
- Ignoré : Perte d'attractivité, départ anticipé.
- **Contexte** : Apparaissent plus souvent pendant les temps d'attente (camion/enchère).
## Icone de base
Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, Enfant) et la variante (Homme/Femme).
## Types
- **Standard**
- **Luxe** (8%) : Paie plus cher, plus exigeant.
## Variantes (homme/femme) et skins
- **Variantes** : homme/femme (et autres variantes si le catalogue le prévoit), sélectionnées par le générateur de visiteurs.
- **Thèmes** : la tenue/couleurs suivent `theme.md` (saisons, météo, ambiance).
- **Skins** : si activé, certaines variantes de visiteurs sont des skins (voir `inventaire_skins.md`) appliqués au rendu (sans impact gameplay).
# Annexes Techniques
## Interactions
| Acteur A | Action | Acteur B | Résultat |
|---|---|---|---|
| Visiteur | Regarder | Animal | Gain Satisfaction, Baisse Besoin Divertissement |
| Visiteur | Acheter | Boutique | Perte Argent, Gain Satisfaction, Baisse Besoin (Faim/Soif) |
| Joueur | Cliquer | Visiteur | Affiche la fenêtre d'état du visiteur (Pensées, Besoins) |
| Visiteur | Jeter | Poubelle | Propreté maintenue (si poubelle proche) |
## 1. Données et États
### Modèle de Données (JSON)
```json
{
"id": "uuid_v4",
"type": "enum ('standard', 'vip')",
"entry_time": "timestamp",
"max_duration": "integer (seconds)",
"budget": "integer",
"satisfaction": "float (0-100)",
"needs": {
"thirst": "float (0-100)",
"rest": "float (0-100)",
"toilet": "float (0-100)"
},
"current_target": { "x": "int", "y": "int" },
"position": { "x": "int", "y": "int" }
}
```
## Annexes Techniques
### Caractéristiques Initiales
| Caractéristique | Standard | Luxe (VIP) |
| :--- | :--- | :--- |
| Budget | 50 | 200 |
| Durée Max | 300s (5 min) | 600s (10 min) |
| Satisfaction | 50 | 50 |
### 1. Données et États
### Scores Initiaux
N/A
#### Caractéristiques Initiales
| Caractéristique | Valeur Initiale | Type | Description |
|---|---|---|---|
| Budget | 50 - 200 | Entier | Argent total disponible pour la visite. |
| Endurance | 100 | Entier | Capacité à marcher avant de devoir se reposer. |
| Vitesse Marche | 1.0 | Float | Vitesse de déplacement de base (cases/sec). |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
| Facteur | Taux |
| :--- | :--- |
| Attractivité Zoo | `log(Attractivité) * FacteurVille` |
| Heure | Pic à 14h, Nul à 22h |
#### Scores Initiaux
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---|---|---|
| Satisfaction | 50 | 0-100 | Détermine la durée de visite et la note finale. |
| Faim | 0 | 0-100 | Augmente avec le temps, déclenche la recherche de nourriture. |
| Soif | 0 | 0-100 | Augmente avec le temps, déclenche la recherche de boisson. |
| Vessie | 0 | 0-100 | Augmente avec le temps, déclenche la recherche de toilettes. |
### Conditions de Disparition
| Cause | Seuil |
| :--- | :--- |
| Temps écoulé | Durée > Max Duration |
| Insatisfaction | Satisfaction <= 0 |
| Budget épuisé | Budget <= 0 (Départ normal) |
### 2. Cycles de Vie et Apparition
### Hérédité
N/A
#### Conditions d'Apparition
| Condition | Seuil | Opérateur | Résultat |
|---|---|---|---|
| Zoo Ouvert | Vrai | Est | Le générateur de visiteurs est actif. |
| Attractivité | > 0 | Est | Probabilité d'apparition > 0. |
| Capacité Zoo | < Max | Est | Un nouveau visiteur peut entrer. |
## 3. Impacts Environnementaux
### Impact Température
| Météo | Effet |
| :--- | :--- |
| Canicule | Soif augmente 2x plus vite |
| Pluie | Satisfaction baisse plus vite (sauf si abri) |
#### Conditions de Disparition
| Condition | Seuil | Opérateur | Résultat |
|---|---|---|---|
| Satisfaction | 0 | <= | Départ anticipé (Mécontent). |
| Budget | 0 | <= | Départ normal (Plus d'argent). |
| Heure | Fermeture | >= | Départ forcé (Expulsion). |
| Temps Visite | Max | >= | Départ normal (Fatigue). |
### Impact Milieu (Biome)
N/A
#### Hérédité
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---|---|
| Groupe (Famille) | Type (VIP/Standard) | 100% | Non (Le groupe est homogène) |
| Groupe (Famille) | Vitesse | Moyenne du groupe | Non |
### Impact Saisons
| Saison | Affluence (Multiplicateur) |
| :--- | :--- |
| Printemps | x1.0 |
| Été | x1.5 (Vacances) |
| Automne | x0.8 |
| Hiver | x0.6 |
### 3. Impacts Environnementaux
### Impact Heure / Jour-Nuit
| Heure | Flux Entrant |
| :--- | :--- |
| 08h-10h | Faible |
| 10h-16h | Fort |
| 16h-18h | Décroissant |
| > 18h | Nul |
#### Impact Température
| Plage Température | Effet sur l'entité | Bonus/Malus |
|---|---|---|
| > 30°C (Chaud) | Soif augmente plus vite | +50% Vitesse Soif |
| < 5°C (Froid) | Endurance baisse plus vite | +20% Fatigue |
| 20°C (Idéal) | Satisfaction stable | Bonus passif +1/min |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
N/A
#### Impact Milieu (Biome)
| Biome | Compatibilité | Bonus/Malus |
|---|---|---|
| Asphalte (Allée) | 100% | Vitesse normale |
| Sable | 50% | Vitesse -30% (Marche difficile) |
| Herbe | 80% | Satisfaction +5% (Cadre agréable) |
| Boue | 20% | Satisfaction -10% (Salissant) |
### Impact Mort
| Événement | Effet Satisfaction |
| :--- | :--- |
| Voir animal mort | -50 (Départ quasi immédiat) |
#### Impact Saisons
| Saison | Effet | Modificateur |
|---|---|---|
| Été | Affluence maximale, Vente Glaces | Flux x1.5, Vente Glaces +50% |
| Hiver | Affluence réduite, Vente Boissons Chaudes | Flux x0.6, Vente Café +50% |
| Printemps | Affluence moyenne | Flux x1.0 |
| Automne | Affluence moyenne, Vente Parapluies | Flux x0.9, Vente Parapluies +30% |
### Impact Nourriture
N/A (Concerne les animaux, ici c'est "Soif/Faim visiteur" -> Boutiques)
#### Impact Heure / Jour-Nuit
| Période | Activité | Visibilité |
|---|---|---|
| Matin (9h-12h) | Arrivée massive | Haute |
| Midi (12h-14h) | Pause déjeuner (Surcharge Restauration) | Haute |
| Après-midi (14h-17h) | Visite et Achats | Haute |
| Soir (17h-19h) | Départs massifs | Moyenne |
| Nuit | Zoo fermé (sauf événement nocturne) | Nulle |
### Impact Attractivité (Visiteurs/Animaux)
| Cible | Poids Attraction |
| :--- | :--- |
| Animal Légendaire | 100 |
| Animal Commun | 10 |
| Boutique | 50 (si besoin > 50) |
### 4. Impacts Biologiques et Sociaux
### Impact Valeur
N/A
#### Impact Reproduction
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Saison des Amours (Animaux) | +10% Satisfaction | Si des bébés sont visibles |
| Présence Enfants | +20% Vente Ballons | Si le visiteur est accompagné d'enfants |
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
| Paramètre | Valeur |
| :--- | :--- |
| Vitesse Marche | 1 case / 2 sec |
#### Impact Mort
| Cause | Conséquence | Durée |
|---|---|---|
| Vue Animal Mort | Choc (-50 Satisfaction), Départ immédiat | Permanent pour cette visite |
| Accident (Chute) | Appel Secours, Zone bloquée | 30 min |
### Dépenses (Boutiques/Visiteurs)
| Action | Dépense |
| :--- | :--- |
| Ticket Entrée | 10 (Standard) / 50 (VIP) |
| Boutique Souvenir | 15-30 |
| Boisson | 5 |
#### Impact Nourriture
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---|---|---|
| Burger | Faim -50 | 12$ | 4/5 (Populaire) |
| Salade | Faim -30 | 10$ | 2/5 (Niche) |
| Glace | Soif -10, Satisfaction +5 | 5$ | 5/5 (Été) |
### Trajet Visiteurs
**Algorithme** : `Weighted Random Walk` vers les points d'intérêt (POI) avec decay sur la distance.
#### Impact Attractivité Visiteurs
| Action/État | Gain Attractivité | Rayon d'action |
|---|---|---|
| Foule heureuse | +5 (Ambiance) | 10m |
| Foule en colère | -10 (Mauvaise ambiance) | 15m |
| Vomissement | -20 (Dégoût) | 5m |
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Incident (Bulle)** : Apparition aléatoire (probabilité augmentée si attente joueur).
* **Achat** : Interaction avec boutique.
#### Impact Attractivité Animaux
| Espèce | Interaction | Effet Stress |
|---|---|---|
| Lion | Rugissement | +10 Satisfaction (Frisson) |
| Singe | Grimace | +5 Satisfaction (Rire) |
| Animal Timide | Bruit Visiteurs | +20 Stress Animal |
## 7. Progression
### Tableau des Upgrades
N/A
#### Impact Valeur
| Facteur | Variation Prix | Condition |
|---|---|---|
| Visiteur VIP | Dépense x2 | Si satisfait |
| Visiteur Radin | Dépense x0.5 | Toujours |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```
function updateVisitor(visitor):
visitor.satisfaction -= decayRate
visitor.needs.thirst += 1
### 5. Impacts Logistiques et Économiques
if visitor.needs.thirst > 80:
target = findNearestShop()
if not target:
visitor.satisfaction -= 5 (Frustration)
spawnIncident("Soif")
#### Vitesse (Camion)
| Type Route | Vitesse Max | Consommation |
|---|---|---|
| Navette Visiteurs | 40 km/h | 15 L/100 |
if visitor.satisfaction <= 0:
leaveZoo(visitor)
```
#### Vitesse (Nurserie)
| Action | Durée de base | Réduction par Upgrade |
|---|---|---|
| Soin Visiteur (Infirmerie) | 15 min | -20% (Médecin expert) |
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `VISITOR_ANGRY` | Info | "Un visiteur est parti mécontent." |
| `VISITOR_HAPPY` | Info | "Un visiteur a adoré le zoo !" |
#### Vitesse (Accueil)
| Flux | Visiteurs/Minute | Capacité Max |
|---|---|---|
| Guichet Manuel | 2 | 10 (File d'attente) |
| Portique Auto | 10 | 50 (File d'attente) |
# Annexes UX/UI
#### Vitesse (Recherche)
| Projet | Durée (Jours) | Coût Accélération |
|---|---|---|
| Étude Comportementale | 5 jours | 2000$ |
## 1. Expérience Utilisateur (UX)
### Visite (Passif)
**Description UX** : Le visiteur entre, marche, regarde les animaux, achète, repart.
**Description UI** : Petit sprite humain. Vêtements colorés.
**Emplacement** : Grille Zoo.
**Intégration** : Foule.
**Navigation** : N/A
**Événements** : `VISITOR_WALK`.
#### Vitesse (Labo)
| Analyse | Durée | Fiabilité |
|---|---|---|
| Sondage Satisfaction | 24h | +/- 5% Marge erreur |
#### Assets
- **Musiques** : N/A
- **Sons** : Pas sur l'herbe/béton.
- **Graphiques** : Sprites variés (H/F/Enfant).
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Marche, Regarde (tourne la tête), Prend photo (flash).
- **Couleurs** : Aléatoires.
- **Textes** : N/A
- **Formes** : N/A
#### Vitesse (Visite)
| Zone | Temps Moyen | Facteur Ralentissement |
|---|---|---|
| Enclos Grand | 10 min | Si animal visible |
| Enclos Petit | 2 min | Si animal caché |
| Boutique | 5 min | Si file d'attente |
### Incident / Besoin (Action)
**Description UX** : Une bulle apparaît au-dessus d'un visiteur (ex: Soif, Perdu, Envie pipi). Le joueur clique pour résoudre (ex: Indiquer toilettes, Donner eau).
**Description UI** : Bulle blanche avec icône noire. Clignote si urgent.
**Emplacement** : Au-dessus du sprite visiteur.
**Intégration** : Overlay World Space.
**Navigation** : Clic Bulle -> Résolution (Animation + Gain).
**Événements** : `INCIDENT_SPAWN`, `INCIDENT_SOLVE`.
#### Dépenses (Billeterie)
| Poste | Coût Hebdo | Maintenance |
|---|---|---|
| Impression Tickets | 100$ | 10$ |
#### Assets
- **Musiques** : N/A
- **Sons** : `bubble_pop.mp3` (apparition), `coin_collect.mp3` (résolution). **Design ASMR** : Son satisfaisant et tactile ("Pop" organique).
- **Graphiques** : Icônes (Goutte d'eau, Point interrogation, Appareil photo).
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Bulle qui pop. Visiteur qui sourit après résolution.
- **Couleurs** : Bulle Blanche/Rouge (Urgent).
- **Textes** : "Merci !" (flottant).
- **Formes** : Bulle BD.
#### Dépenses (Boutiques)
| Article | Coût Achat | Marge |
|---|---|---|
| Souvenirs | 5$ | 300% (Vendu 20$) |
| Nourriture | 2$ | 400% (Vendu 10$) |
### Départ (Passif)
**Description UX** : Le visiteur quitte le zoo.
**Description UI** : Marche vers la sortie et disparaît (Fade out).
**Emplacement** : Billeterie.
**Intégration** : Fin cycle.
**Navigation** : N/A
**Événements** : `VISITOR_EXIT`.
#### Dépenses (Visiteurs)
| Type Dépense | Montant Moyen | Fréquence |
|---|---|---|
| Entrée | 20$ | 1 fois |
| Restauration | 15$ | 1 fois |
| Cadeaux | 30$ | 0.5 fois (1 sur 2) |
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Graphiques** : N/A
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : Fade out.
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
#### Dépenses (Employés)
| Rôle | Salaire | Prime |
|---|---|---|
| Agent Accueil | 1500$ | Aucune |
| Animateur | 1800$ | +50$ par show réussi |
#### Dépenses (Nurseries)
| Soin | Coût Matériel | Coût Personnel |
|---|---|---|
| Pansement (Bobo) | 2$ | 10$ (Temps infirmier) |
#### Dépenses (Nourriture)
| Type | Prix/Kg | Fournisseur |
|---|---|---|
| Stock Restaurant | 500$ / palette | MetroZoo |
#### Dépenses (Acceuil des animaux)
| Installation | Coût Construction | Entretien |
|---|---|---|
| Banc | 100$ | 0$ |
| Toilettes | 2000$ | 100$ / semaine |
#### Dépenses (Camion)
| Trajet | Coût Essence | Usure |
|---|---|---|
| Bus Navette | 20$ / jour | 1% / jour |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville
| Moyen Transport | Temps | Coût | Fréquence |
|---|---|---|---|
| Voiture | 20 min | 5$ (Parking) | 60% des visiteurs |
| Bus | 45 min | 2$ | 30% des visiteurs |
| Pied | 60 min | 0$ | 10% des visiteurs |
##### Trajet Visiteurs vers/depuis les animaux
| Chemin | Distance | Attrait |
|---|---|---|
| Allée Principale | 0m (Départ) | 10/10 |
| Sentier Boueux | +50% temps | 2/10 |
##### Trajet Visiteurs vers/depuis les boutiques
| Emplacement | Détour Moyen | Taux de Conversion |
|---|---|---|
| Sortie Enclos | 10m | 40% (Impulsion) |
| Zone Isolée | 100m | 5% (Besoin spécifique) |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo)
| Flux | Temps Attente | Saturation |
|---|---|---|
| Entrée Matin | 15 min | 90% |
| Sortie Soir | 5 min | 40% |
### 6. Événements
#### Événements du Jeu
| Event | Déclencheur | Effet Global | Durée |
|---|---|---|---|
| Vacances Scolaires | Date Calendrier | Affluence Enfants +50% | 2 semaines |
| Pluie Torrentielle | Météo | Affluence -40%, Vente Parapluies ++ | 1 jour |
#### Événements du Carte
| Event | Lieu | Impact Zone |
|---|---|---|
| Embouteillage | Route accès | Arrivées retardées | 2h |
#### Événements du Zoo
| Event | Cible | Conséquence |
|---|---|---|
| Évasion Animal | Zone Proche | Panique, Fuite des visiteurs | Immédiat |
#### Événements du Ville / Visiteur
| Event | Impact Affluence | Impact Budget |
|---|---|---|
| Festival Ville | -20% (Concurrence) | Dépense Moyenne -10% (les achats se déplacent en ville) |
| Bonus Économique | +10% | Dépense Moyenne +20% |
#### Événements du Visiteur
| Action | Satisfaction | Besoin |
|---|---|---|
| Vol à la tire | -80 | Sécurité |
| Trouve Objet Perdu | +20 | Aucun |
#### Événements du Joueur
| Action | Coût Action | Gain XP |
|---|---|---|
| Campagne Pub | 5000$ | +1000 Visiteurs |
### 7. Progression
#### Tableau des Upgrades
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---|---|---|
| Carte Membre | 10,000$ | Réputation 200 | Fidélisation +10% |
| Bus Gratuit | 25,000$ | Parking Niv 2 | Affluence Pauvre +30% |
### 8. Logique et Interfaces
#### Pseudo-code Impacts
| Algorithme | Entrées | Logique Simplifiée | Sortie |
|---|---|---|---|
| Calcul Satisfaction | État Zoo, Besoins | `Sat = (AnimauxVu * 10) - (Faim + Soif + Fatigue)/3` | Score 0-100 |
| Décision Achat | Budget, Besoin, Prix | `Si Besoin > 50 ET Budget > Prix Alors Acheter` | Booléen |
#### Messages d'Infos / Alerte
| Type | Message | Condition | Priorité |
|---|---|---|---|
| Info | "Un visiteur VIP est arrivé." | Spawn VIP | 2 |
| Warn | "Les visiteurs se plaignent de la saleté." | Propreté < 30% | 4 |
| Error | "Un visiteur est blessé !" | Accident | 5 |
## 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)
#### Description UX
| Étape Utilisateur | Action Attendue | Feedback Système |
|---|---|---|
| Observation | Zoom sur visiteur | Affichage info-bulle nom/état |
| 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
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 |
|---|---|---|---|
| Bulle Pensée | Icône Flottante | Image (Burger, WC, Eau, Appareil photo, Cadeau, Banc) | Caché |
| Jauge Satisfaction | Barre Progression | Vert -> Rouge | Visible (si sélectionné) |
#### Emplacement
| Élément | Position | Ancrage | Z-Index |
|---|---|---|---|
| Bulle | Au-dessus tête | World Space | 50 |
| Panel Info | Bas Gauche | Bottom-Left | 100 |
#### Intégration
| Composant Parent | Contraintes | Responsive |
|---|---|---|
| World Canvas | Suis la caméra | Oui |
#### Navigation
| De l'écran | Vers l'écran | Transition | Trigger |
|---|---|---|---|
| Jeu Principal | Vue Visiteur | Focus Caméra | Double Clic |
#### Événements
| Input Utilisateur | Action Système | Son | Animation |
|---|---|---|---|
| Clic Visiteur | Sélectionne | `select_pop.mp3` | Highlight |
#### Assets Skinables
##### Musiques
| Piste | Contexte | Loop | Volume |
|---|---|---|---|
| `crowd_mumble.mp3` | Zoom éloigné | Oui | 30% |
| `park_ambience.mp3` | Zoom proche | Oui | 50% |
##### Sons
| SFX | Trigger | Priorité |
|---|---|---|
| `footsteps_gravel.mp3` | Marche | Basse |
| `cash_register.mp3` | Achat | Moyenne |
##### Graphiques
| Asset | Format | Résolution |
|---|---|---|
| `visitor_sheet.png` | Spritesheet | 1024x1024 |
| `bubble_icons.png` | Atlas | 512x512 |
##### Images
| Image | Usage | Alt Text |
|---|---|---|
| `face_happy.png` | UI Satisfaction | "Visage Souriant" |
| `face_angry.png` | UI Satisfaction | "Visage Colérique" |
##### Vidéos
| Clip | Usage | Durée |
|---|---|---|
| `visitor_card_preview.webm` | Aperçu animé dans le panneau de détails dun visiteur sélectionné (HUD) | 1.5s (loop) |
##### Animations
| Nom | Cible | Durée | Type (CSS/JS) |
|---|---|---|---|
| `walk_cycle` | Sprite Visiteur | 1s (boucle) | Sprite Anim |
| `eat_anim` | Sprite Visiteur | 2s | Sprite Anim |
##### Couleurs
| Code Hex | Usage | Sémantique |
|---|---|---|
| #00FF00 | Jauge Sat | Bon |
| #FF0000 | Jauge Sat | Mauvais |
##### Textes
| Clé i18n | Valeur FR | Valeur EN |
|---|---|---|
| `VISITOR_NAME_1` | Jean Dupont | John Doe |
| `STATE_HUNGRY` | A faim | Hungry |
##### Formes
| Forme | Usage | Style Bordure |
|---|---|---|
| Rond | Avatar | Solid White 2px |

View File

@@ -4,7 +4,10 @@
Représentation d'un zoo (joueur ou bot) sur la Carte du Monde.
## Affichage
- **Nom du zoo**
- **Nom du zoo** : Sur une banderole d'accueil personnalisable (poteaux bois).
- **Avatar Joueur** : Visible en coin de l'écran.
- **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).
- **Icône** : 🏠
- **Slot d'offre** :
- Pour les autres zoos : Affiche l'œuf/bébé/animal en vente (Type + Prix).
@@ -32,7 +35,12 @@ Représentation d'un zoo (joueur ou bot) sur la Carte du Monde.
"attractiveness": "int",
"reproduction": "int"
},
"current_offer": { "animal_id": "uuid", "price": "int" }
"current_offer": { "animal_id": "uuid", "price": "int" },
"customization": {
"banner_text": "Mon Zoo",
"active_skin_id": "skin_default",
"avatar_visible": true
}
}
```
@@ -43,7 +51,12 @@ Représentation d'un zoo (joueur ou bot) sur la Carte du Monde.
| Reproduction | 0 |
### Scores Initiaux
Voir ci-dessus.
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Attractivité | 0 | 0-100000 | Détermine le flux de visiteurs (via billeterie + attractivité ville→zoo). |
| Reproduction | 0 | 0-10000 | Modifie la chance de naissances et la qualité des bébés. |
| Réputation | 0 | 0-10000 | Modifie le rayonnement sur carte monde (ville→zoo). |
| Survie | 100 | 0-100 | Influence maladies, mortalité, et valeur des animaux. |
## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
@@ -53,84 +66,144 @@ Création compte.
Suppression compte.
### Hérédité
N/A
**Bonus Héritage** : +5% Attractivité initiale si l'ancien zoo du joueur avait atteint > 1000 visiteurs (Réputation persistante).
## 3. Impacts Environnementaux
### Impact Température
N/A
| Condition | Effet |
| :--- | :--- |
| **Canicule (>30°C)** | -10% Visiteurs (sauf si Glaces en vente). |
| **Grand Froid (<0°C)** | -20% Visiteurs (sauf si Chocolat Chaud/Café en vente). |
| **Tempéré (15-25°C)** | Bonus +5% Satisfaction Visiteurs. |
### Impact Milieu (Biome)
N/A
| Biome | Effet Construction |
| :--- | :--- |
| **Plaine** | Coût standard. |
| **Désert** | Coût Eau x2 (Arrosage/Entretien). |
| **Montagne** | Coût Construction Bâtiments +50% (Fondations). |
| **Marais** | Risque Maladie +10%. |
### Impact Saisons
N/A
| Saison | Effet Global |
| :--- | :--- |
| **Printemps** | Naissances +10% (Saison des amours). |
| **Été** | Pic Visiteurs (+30%), Coût Eau +20%. |
| **Automne** | Déchets (Feuilles) +50% (Besoin nettoyage). |
| **Hiver** | Visiteurs -30%, Ventes Boutique Cadeaux +10% (Noël). |
### Impact Heure / Jour-Nuit
N/A
| Période | État |
| :--- | :--- |
| **Jour (08h-20h)** | Ouvert. Revenus actifs. |
| **Nuit (20h-08h)** | Fermé. Maintenance (Coûts réduits, pas de revenus). Animaux dorment (Santé récupère). |
## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
Score visible publiquement.
### Impact Mort
N/A
**Négligence** : Un animal mort non ramassé dans un enclos visible cause -50 Attractivité/heure et fait fuir les visiteurs à proximité.
### Impact Nourriture
N/A
**Pénurie** : Si Stock Nourriture = 0 pendant > 24h, Santé Animaux baisse -> Mort -> Baisse Attractivité massive (-100/mort).
### Impact Attractivité (Visiteurs/Animaux)
Score visible publiquement.
Score visible publiquement. Détermine le flux d'entrée (voir Billeterie) et le classement mondial.
### Impact Valeur
N/A
**Valorisation** : La valeur de revente du zoo (si faillite/reset) est estimée à 50% des investissements totaux (Bâtiments + Animaux).
## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
N/A
- **Vitesse Visiteurs** : 1 case / 2 sec (Chemin), 1 case / 4 sec (Herbe).
- **Vitesse Staff** : 1 case / 1 sec (Optimisé).
### Dépenses (Boutiques/Visiteurs)
N/A
**Maintenance** : 10 pièces / jour par bâtiment construit (Coûts fixes).
### Trajet Visiteurs
Destination possible.
Destination possible. Algorithme de *Pathfinding* (A*) depuis l'entrée vers les Enclos et Boutiques.
## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
* **Nouvelle Offre** : Mise en vente.
* **Vente** : Offre achetée.
* **Inspection** : Contrôle sanitaire aléatoire (Bonus/Malus selon propreté).
* **Fête du Zoo** : Event annuel (Revenus x2 pendant 24h).
## 7. Progression
### Tableau des Upgrades
N/A
| Niveau | Nom | Effet | Coût |
| :--- | :--- | :--- | :--- |
| 1 | **Petit Parc** | Capacité 50 visiteurs. | 0 |
| 2 | **Zoo Local** | Capacité 100, Débloque Marketing Local. | 1000 |
| 3 | **Zoo Régional** | Capacité 250, Débloque Bus Touristique. | 5000 |
| 4 | **Zoo National** | Capacité 500, Débloque Hôtel (Séjour long). | 15000 |
| 5 | **Réserve** | Capacité 1000, Débloque Safari. | 50000 |
| 6 | **Monde Animal** | Capacité 2500, Débloque Aéroport. | 150000 |
| 7 | **Sanctuaire** | Capacité Illimitée, Prestige Max. | 500000 |
## 8. Logique et Interfaces
### Pseudo-code Impacts
N/A
```javascript
function updateZooState(zoo) {
// Cycle Jour/Nuit
if (isNight(zoo.time)) {
closeGates(zoo);
zoo.maintenanceCost += calculateUpkeep(zoo.buildings);
} else {
openGates(zoo);
zoo.revenue += processTicketSales(zoo);
}
// Impact Météo
if (zoo.weather == "HEATWAVE") {
zoo.visitorFlow *= 0.9;
zoo.shopSales["ice_cream"] *= 2.0;
}
}
```
### Messages d'Infos / Alerte
N/A
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ZOO_OPEN` | Info | "Le zoo ouvre ses portes ! Bonne journée." |
| `ZOO_CLOSE` | Info | "Fermeture du zoo. Les visiteurs sortent." |
| `MAINTENANCE_PAID` | Info | "Frais de maintenance journaliers payés : -{amount}." |
| `NO_FUNDS` | Alerte | "Fonds insuffisants pour la maintenance ! Risque de grève." |
# 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)
### Visualisation Offre (Passif)
**Description UX** : Voir ce que vend un autre joueur.
**Description UI** : Une "bulle" ou un "panneau" accroché sous l'icône du zoo. Affiche l'animal (sprite) et le prix.
**Emplacement** : Carte Monde.
**Intégration** : World Space UI.
**Navigation** : N/A
**Navigation** : Clic sur Bulle -> Détails Offre.
**Événements** : `OFFER_UPDATE`.
#### Assets
- **Musiques** : N/A
- **Sons** : N/A
- **Graphiques** : Cadre Offre.
- **Musiques** : `ambience_zoo_busy.mp3` (bruit de fond léger).
- **Sons** : `ui_hover.mp3`.
- **Graphiques** : Cadre Offre (Bois/Or).
- **Images** : Sprite Animal.
- **Vidéos** : N/A
- **Vidéos** : Animal qui bouge (GIF/WebM).
- **Animations** : Prix qui clignote si bas.
- **Couleurs** : Or (Prix).
- **Couleurs** : Or (Prix), Vert (Rareté).
- **Textes** : "500".
- **Formes** : Bulle.
- **Formes** : Bulle BD.
### Interaction Achat (Action)
**Description UX** : Acheter l'animal.
@@ -142,12 +215,12 @@ N/A
**Événements** : `DRAG_OFFER`.
#### Assets
- **Musiques** : N/A
- **Sons** : `pickup.mp3`.
- **Musiques** : Jingle `purchase_success.mp3`.
- **Sons** : `pickup.mp3`, `coin_register.mp3`.
- **Graphiques** : Fantôme offre sous curseur.
- **Images** : N/A
- **Vidéos** : N/A
- **Animations** : N/A
- **Couleurs** : N/A
- **Textes** : N/A
- **Formes** : N/A
- **Images** : Icône Pièce animée.
- **Vidéos** : Effet de transaction (flux de données).
- **Animations** : Traînée d'étincelles lors du drag.
- **Couleurs** : Jaune brillant.
- **Textes** : "-500".
- **Formes** : Curseur Main fermée.

2
package-lock.json generated
View File

@@ -260,7 +260,6 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -469,7 +468,6 @@
"integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",

View File

@@ -6,7 +6,8 @@
"scripts": {
"lint": "eslint web/js server --ignore-pattern '**/node_modules/**'",
"lint:web": "eslint web/js",
"lint:server": "eslint server --ignore-pattern 'server/node_modules/**'"
"lint:server": "eslint server --ignore-pattern 'server/node_modules/**'",
"type-check": "npm run lint"
},
"devDependencies": {
"eslint": "^9.15.0",

227
server/db-core.js Normal file
View File

@@ -0,0 +1,227 @@
import pg from "pg";
import parse from "pg-connection-string";
import { createInitialBotState } from "./bot-state.js";
const { Pool } = pg;
const connectionString = process.env.DATABASE_URL || "postgres://localhost/builazoo";
const parsed = parse(connectionString);
const poolConfig = {
host: parsed.host || "localhost",
port: Number(parsed.port) || 5432,
database: parsed.database || "builazoo",
user: parsed.user,
password: typeof parsed.password === "string" ? parsed.password : "",
};
if (process.env.PGPASSWORD !== undefined && process.env.PGPASSWORD !== null) poolConfig.password = String(process.env.PGPASSWORD);
const pool = new Pool(poolConfig);
/**
* @returns {Promise<{ mapWidth: number, mapHeight: number, minZoos: number }>}
*/
export async function getMapParams() {
const res = await pool.query(
"SELECT value FROM map_config WHERE key = 'params'"
);
const row = res.rows[0];
if (!row) {
return { mapWidth: 100, mapHeight: 100, minZoos: 5 };
}
const v = row.value;
return {
mapWidth: Number(v?.mapWidth) || 100,
mapHeight: Number(v?.mapHeight) || 100,
minZoos: Number(v?.minZoos) || 5,
};
}
/**
* @param {string} publicKey
* @returns {Promise<{ id: string, pseudo: string } | null>}
*/
export async function getAccountByPublicKey(publicKey) {
const res = await pool.query(
"SELECT id, pseudo FROM accounts WHERE public_key = $1",
[publicKey]
);
const row = res.rows[0];
if (!row) return null;
return { id: row.id, pseudo: row.pseudo };
}
/**
* @param {string} publicKey
* @param {string} pseudo
* @returns {Promise<{ id: string, pseudo: string }>}
*/
export async function createAccount(publicKey, pseudo) {
const res = await pool.query(
"INSERT INTO accounts (public_key, pseudo) VALUES ($1, $2) RETURNING id, pseudo",
[publicKey, pseudo]
);
const row = res.rows[0];
return { id: row.id, pseudo: row.pseudo };
}
/**
* @param {string} accountId
* @returns {Promise<void>}
*/
export async function updateLastSeen(accountId) {
await pool.query(
"UPDATE accounts SET last_seen_at = now() WHERE id = $1",
[accountId]
);
}
/**
* @param {string} accountId
* @returns {Promise<{ id: string, name: string, x: number, y: number, is_bot: boolean, animal_weights: object, game_state: object | null } | null>}
*/
export async function getZooByAccountId(accountId) {
const res = await pool.query(
"SELECT id, name, x, y, is_bot, animal_weights, game_state FROM zoos WHERE account_id = $1",
[accountId]
);
const row = res.rows[0];
if (!row) return null;
return {
id: row.id,
name: row.name,
x: Number(row.x),
y: Number(row.y),
is_bot: row.is_bot,
animal_weights: row.animal_weights || {},
game_state: row.game_state,
};
}
/**
* Common zoo row fields: id, name, x, y with numeric coords.
* @param {Record<string, unknown>} row
* @returns {{ id: string, name: string, x: number, y: number }}
*/
function mapZooRowBase(row) {
return {
id: row.id,
name: row.name,
x: Number(row.x),
y: Number(row.y),
};
}
/**
* @returns {Promise<Array<{ id: string, name: string, x: number, y: number, animal_weights: object, game_state: object | null }>>}
*/
export async function getAllZoos() {
const res = await pool.query(
"SELECT id, name, x, y, animal_weights, game_state FROM zoos ORDER BY is_bot, name"
);
return res.rows.map((row) => ({
...mapZooRowBase(row),
animal_weights: row.animal_weights || {},
game_state: row.game_state ?? null,
}));
}
/**
* @param {{ accountId: string, name: string, x: number, y: number, gameState: object }} opts
* @returns {Promise<{ id: string }>}
*/
export async function createZoo(opts) {
const { accountId, name, x, y, gameState } = opts;
const res = await pool.query(
"INSERT INTO zoos (account_id, name, x, y, is_bot, animal_weights, game_state) VALUES ($1, $2, $3, $4, false, $5, $6) RETURNING id",
[accountId, name, x, y, "{}", gameState]
);
return { id: res.rows[0].id };
}
/**
* @param {string} zooId
* @returns {Promise<{ id: string, name: string, x: number, y: number, is_bot: boolean, account_id: string | null, animal_weights: object, game_state: object | null } | null>}
*/
export async function getZooById(zooId) {
const res = await pool.query(
"SELECT id, name, x, y, is_bot, account_id, animal_weights, game_state FROM zoos WHERE id = $1",
[zooId]
);
const row = res.rows[0];
if (!row) return null;
return {
...mapZooRowBase(row),
is_bot: row.is_bot,
account_id: row.account_id,
animal_weights: row.animal_weights || {},
game_state: row.game_state,
};
}
/**
* @param {string} zooId
* @param {object} gameState
* @returns {Promise<void>}
*/
export async function updateZooGameState(zooId, gameState) {
await pool.query(
"UPDATE zoos SET game_state = $1, updated_at = now() WHERE id = $2",
[JSON.stringify(gameState), zooId]
);
}
/**
* @returns {Promise<number>}
*/
export async function countPlayerZoos() {
const res = await pool.query(
"SELECT COUNT(*) AS n FROM zoos WHERE is_bot = false"
);
return Number(res.rows[0]?.n) || 0;
}
/**
* @param {number} x
* @param {number} y
* @param {object} animalWeights
* @returns {Promise<string>} zoo id
*/
export async function createBotZoo(x, y, animalWeights) {
const gameState = createInitialBotState();
const res = await pool.query(
"INSERT INTO zoos (account_id, name, x, y, is_bot, animal_weights, game_state) VALUES (NULL, $1, $2, $3, true, $4, $5) RETURNING id",
[`Zoo bot ${x.toFixed(0)}-${y.toFixed(0)}`, x, y, JSON.stringify(animalWeights), JSON.stringify(gameState)]
);
return res.rows[0].id;
}
/**
* Load bot zoos for server-side tick (id, name, x, y, animal_weights, game_state).
* @returns {Promise<Array<{ id: string, name: string, x: number, y: number, animalWeights: object, botState: object }>>}
*/
export async function getBotZoosForTick() {
const res = await pool.query(
"SELECT id, name, x, y, animal_weights, game_state FROM zoos WHERE is_bot = true"
);
return res.rows.map((row) => ({
...mapZooRowBase(row),
animalWeights: row.animal_weights || {},
botState: row.game_state || createInitialBotState(),
}));
}
/**
* Persist bot zoo state after tick.
* @param {string} zooId
* @param {object} animalWeights
* @param {object} gameState
* @returns {Promise<void>}
*/
export async function updateBotZooState(zooId, animalWeights, gameState) {
await pool.query(
"UPDATE zoos SET animal_weights = $1, game_state = $2, updated_at = now() WHERE id = $3 AND is_bot = true",
[JSON.stringify(animalWeights), JSON.stringify(gameState), zooId]
);
}
export { pool };

Some files were not shown because too many files have changed in this diff Show More