← Tous les articles

Architecture Unity initiale et squelette MVP

Notes

  • Création des documents de cadrage de la Phase 0.
  • Sélection de l'architecture recommandée : client Unity, serveur autoritaire pur .NET, bibliothèque C# partagée, launcher Avalonia, PostgreSQL.
  • Définition des limites du MVP, de l'orientation réseau, du schéma de base de données initial, du pipeline d'assets et des règles d'originalité.
  • Ajout du `docker-compose.yml` PostgreSQL local.
  • Installation des compétences Codex externes pour l'animation de personnages et la génération de sprites/cartes.
  • Ajout du squelette serveur .NET multiplateforme, des modèles de déplacement partagés, du lanceur de tests local, d'un JSON de carte exemple, du Dockerfile et des scripts de développement Windows/Linux.
  • Ajout de l'abstraction de repository, de la persistance de développement en mémoire, de la validation de carte partagée, de la migration SQL initiale et du smoke test WebSocket automatisé.
  • Ajout du squelette client Unity de Phase 1 avec scènes boot/login/character/world, bootstrap persistant, `NetworkClient` WebSocket, flux d'authentification dev, sélection de personnage, entrée en monde et rendu de snapshot isométrique de debug.
  • Ajout de la tranche monde Unity de Phase 2 avec cases isométriques cliquables, requêtes de déplacement autoritaires côté serveur, retours de déplacement accepté/refusé, marqueurs joueur/PNJ, couleurs de debug pour cases bloquées, UI de chat local et dispatch sur le thread principal pour les mises à jour de scène pilotées par le réseau.
  • Ajout de la persistance PostgreSQL via `Npgsql`, du mapping local des sources NuGet, des scripts de migration répétables et de la documentation pour la passe de persistance backend post-Phase 2.
  • Ajout de la première passe de présence live : Unity active les broadcasts d'arrière-plan après l'entrée en monde, le rapprochement requête/réponse ne court plus contre la boucle de réception WebSocket, et le smoke test vérifie maintenant le spawn d'un second client, les broadcasts de mouvement, le chat et le despawn.
  • Réorientation de la première base artistique vers une fantasy médiévale colorée originale et rafraîchissement de la palette du monde de debug.
  • Correction du chemin de carte serveur par défaut et limitation des logs serveur à la sortie console pour les exécutions locales/sandbox.
  • Ajout de la première passe core/CLI du launcher avec validation de manifest, planification sûre des fichiers, vérification SHA-256, cache local manifest/version, téléchargements locaux/HTTP, support de lancement client et tests launcher.
  • Ajout de `IsoTactica.AssetPipeline` et génération des premiers assets placeholder originaux de fantasy médiévale colorée : spritesheet joueur, sprite PNJ, aperçu de carte, manifest et notes de source.
  • Ajout du squelette de combat tactique partagé avec état PA/PM des combattants, tours d'initiative, sorts de debug, validation portée/PA/cooldown et tests de combat partagés.
  • Ajout du flux WebSocket de combat debug côté serveur et d'un panneau de test live Unity `WorldScene` pour suivre en Play Mode les vérifications de connexion, monde, déplacement, chat, lancement/refus de combat et rafraîchissement de tour.
  • Ajout d'un premier HUD de combat Unity avec contrôles début/fin de tour, boutons de sorts, affichage PA/PM/tour, ciblage des sorts sur la carte, surbrillance des cases ciblables, retour de cible bloquée et rafraîchissement des PA après lancement réussi.
  • Mise à jour de la roadmap et des prochaines étapes autour de l'état actuel du combat debug, de la Phase 5B présentation/effets de combat et de la première tranche de playtest en attente.
  • Ajout des effets tactiques persistants et des payloads de journal de combat dans le protocole partagé, les sessions de combat debug serveur, les smoke tests et les modèles client Unity.
  • Mise à jour de la présentation Unity `WorldScene` avec marqueurs de combattants colorés par équipe, anneaux de tour actif, labels PV, marqueurs d'effets, affichage compact du journal de combat et désactivation des contrôles hors tour local.
  • Ajout de la génération de manifest launcher depuis les dossiers client packagés et du support CLI pour `--generate-manifest`.
  • Passage du ciblage de sort Unity à un flux aperçu/confirmation en deux temps et reconstruction du client de développement Windows avec un manifest de mise à jour généré.
  • Ajout de la résolution automatique côté serveur du tour ennemi debug afin que la boucle de combat jouable revienne au joueur après la fin de tour.
  • Ajout d'un premier panneau de tâche PNJ Unity pour `Garde des Routes` ; cliquer sur la case d'interaction peut maintenant ouvrir le panneau et démarrer la rencontre debug.
  • Ajout de `IsoTactica.Launcher.WinForms`, une coque launcher Windows temporaire pour les flux vérifier/mettre à jour/jouer pendant que la coque Avalonia reste en attente.
  • Ajout de la première persistance d'état de quête pour `routes_guard_stabilize`, avec support repository PostgreSQL/en mémoire, payloads de quête `world.snapshot`, affichage de statut dans le panneau de tâche Unity et couverture smoke test de `available` vers `encounter_started`.
  • Ajout d'une couverture PlayMode Unity Test Framework pour la création du HUD de combat et du panneau PNJ `Garde des Routes`.
  • Reconstruction du client de développement Windows et régénération de `build/updates/dev/manifest.json` ; le launcher `--check-only` indique que le dossier de build généré est à jour.
  • Ajout de la première boucle de complétion de tâche PNJ : vaincre l'ennemi debug marque `routes_guard_stabilize` comme `completed`, renvoie les mises à jour de quête avec texte de récompense, empêche l'ennemi vaincu d'agir, met à jour le panneau PNJ Unity et étend le smoke test jusqu'à la victoire et à la complétion persistée.
  • Ajout de `combat.encounter.start` et du contrat de rencontre `routes_guard_relay` ; le panneau PNJ l'utilise maintenant, tandis que `combat.debug.start` reste disponible pour l'outillage de développement.
  • Ajout des récompenses de monnaie persistées `route_marks` pour la première tâche PNJ, exposées via `world.snapshot`, `combat.spell.accepted`, le texte de solde du panneau PNJ Unity, les repositories PostgreSQL/en mémoire et les assertions smoke test.
  • Mise à jour de la direction artistique vers une fantasy tactique 2D isométrique rétro originale inspirée par la lisibilité de Dofus Retro tout en préservant les silhouettes, l'UI, le lore et l'iconographie propres à IsoTactica.
  • Génération de la première planche props/FX rétro-isométrique, chroma-key puis découpe en sprites Unity transparents, et branchement des FX de combat ancre/brume/prisme dans `WorldScenePresenter`.
  • Génération de la première planche d'acteurs rétro-isométriques, découpe en sprites Unity transparents joueur/PNJ/ennemi/feu follet, conservation des dimensions d'import non-power-of-two et branchement de `WorldScenePresenter` pour utiliser les nouveaux sprites d'acteurs avec fallbacks diamant au runtime.
  • Génération de la première planche de tuiles terrain rétro-isométriques, sauvegarde des métadonnées de prompt, découpe en sprites Unity transparents herbe/chemin/route/bloqué/spawn/interaction/sortie/surbrillance, et branchement de `WorldScenePresenter` plus `TileClickTarget` pour rendre les sprites terrain avec fallback de surbrillance.
  • Extension de la couverture PlayMode Unity pour vérifier que les sprites runtime rétro terrain, acteurs et FX se chargent depuis `Resources` avec leurs dimensions PNG traitées, afin de détecter les réglages d'import qui écraseraient l'art non-power-of-two.
  • Branchement de la première passe de décoration de carte rétro-isométrique : sanctuaire de route sur le spawn, panneau et lanterne sur les cases d'interaction, marqueurs de chemin sur les sorties, pierres de relais fissurées sur les cases bloquées, plus couverture PlayMode pour la sélection de sprites terrain et décoration.
  • Remplacement du champ libre de canal du launcher WinForms par un sélecteur dev/stable et ajout d'une couverture de tests launcher pour la validation des incohérences de canal.
  • Ajout de cibles cliquables de survol/sélection des combattants dans le monde Unity, d'un anneau de combattant sélectionné et d'un affichage HUD compact de détails pour les combattants ciblés.
  • Ajout d'un interrupteur explicite de repository en mémoire pour les playtests serveur locaux et extension du smoke test avec couverture obligatoire du refus de déplacement plus génération de rapport de playtest Markdown.
  • Ajout d'un panneau journal de quête Unity toujours visible qui suit le statut `Garde des Routes` et le solde `route_marks` depuis les snapshots monde et les mises à jour quête/monnaie.
  • Ajout du premier monde de développement 3x3 en `24x24` sous `assets/processed/maps/world`, avec `world_0_0` comme origine de coordonnées et des cartes voisines marais, forêt, château, rivière, village, plage/île, plaines et ville.
  • Extension du JSON de carte avec coordonnées monde, biome, placements de props à l'échelle, empreintes et interactables pour les futures portes/intérieurs.
  • Mise à jour du présentateur de carte Unity et de l'éditeur de carte dev pour rendre/éditer les props authorés et les interactables de porte depuis les données de carte.
  • Mise à jour du serveur pour charger un dossier de cartes, démarrer sur `world_0_0` et changer de snapshot de carte quand un joueur marche sur un plot de transition.
  • Mise à jour du bootstrap Unity pour accepter `world.snapshot` comme réponse de déplacement valide pour les plots de transition.
  • Filtrage des broadcasts serveur de présence, déplacement, despawn et chat local par carte courante.
  • Extension du smoke test WebSocket pour traverser une vraie transition de carte puis revenir avant de continuer le flux combat/persistance/présence.
  • Ajout d'une passe artistique plus forte pour les biomes de zone dev avec 18 sprites de props originaux réutilisables pour marais, rivière, plaines, village, ville, château, plage, ressources et décoration d'eau.
  • Mise à jour des 9 cartes dev générées pour utiliser des props de biomes distincts tout en préservant le contrat de cases isométriques `24x24`, les plots de transition, les nœuds de ressources et les données de portes/interactables.
  • Ajout d'une couverture de tests partagés qui charge les 9 cartes monde générées, les valide et vérifie la connectivité réciproque des transitions.
  • Extension de la couverture PlayMode Unity pour les nouveaux sprites de props du monde dev et le rendu des props de biome authorés.
  • Ajout d'une commande d'aperçu éditeur Unity, `IsoTactica/Preview/Render Dev World Atlas`, pour afficher toute la zone dev 3x3 en scène et vérifier la cohérence visuelle.
  • Amélioration de l'éditeur de carte dev avec menu déroulant de carte monde 3x3, raccourci atlas, chargement de palette de props depuis `dev_prop_palette_v001.json` et valeurs par défaut de palette pour échelle/empreinte des props.
  • Ajout des aperçus d'empreinte dans l'éditeur de carte dev et d'actions explicites de blocage d'empreinte afin que les grands props comme chaumières, étangs, portes, arbres et futurs bâtiments à porte restent alignés avec la grille déplacement/combat `24x24`.
  • Refonte des plots de transition du monde dev généré pour correspondre aux quatre sorties isométriques visibles : haut-gauche/ouest, haut-droite/nord, bas-droite/est et bas-gauche/sud, tout en gardant les cartes séparées par `worldX/worldY`.
  • Mise à jour de l'aperçu atlas 3x3 pour placer les cartes dans une disposition de monde isométrique connecté plutôt que dans une grille de debug rectangulaire lâche.
  • Ajout d'une couverture de tests partagés qui verrouille les positions de transition du monde dev généré et les spawns cibles selon la convention de sortie isométrique.
  • Ajout de la première boucle de récolte autoritaire serveur avec `resource.gather`, cooldown de respawn par personnage et par nœud, compteurs persistants `resource_<type>`, gestion des clics Unity sur les cases de ressources et couverture smoke test.
  • Ajout d'un `WorldMapPanel` Unity compact adossé à `Resources/Maps/dev_world_catalog_v001.json` ; il affiche la zone dev 3x3 comme carte-monde isométrique connectée, met en évidence la carte courante depuis `world.snapshot` et garde `world_0_0` comme origine de coordonnées.
  • Mise à jour de `GenerateDevWorldMaps.ps1` pour générer le catalogue de carte-monde depuis les 9 définitions de cartes authorées et le copier dans Unity `Resources`, avec couverture de tests partagés pour éviter les dérives entre JSON de cartes, catalogue traité et catalogue runtime.
  • Extension de `resource.gather` avec les premières récompenses d'XP métier : le serveur accorde et persiste les compteurs `profession_xp_<professionId>`, le payload accepté inclut `professionExperienceGranted`, le texte de statut Unity indique le gain d'XP, et la couverture smoke vérifie la persistance dans les snapshots monde rafraîchis.
  • Ajout de la présentation Unity du respawn de ressources : les nœuds récoltés ou en respawn sont teintés gris/translucide et affichent un petit label de compte à rebours depuis les payloads `NextAvailableAt`, avec couverture PlayMode pour l'état de cooldown du nœud champignon de la clairière forestière.
  • Ajout d'un `GatheringLedgerPanel` Unity compact qui lit les compteurs de monnaie `world.snapshot` et affiche les ressources récoltées courantes plus l'XP métier avec une ligne dérivée niveau/progression dans l'UI monde.
  • Ajout du premier contrat autoritaire serveur de porte/interactable avec `interactable.use`, payloads accepté/refusé, validation de portée contre les interactables authorés de carte, gestion des clics de porte Unity et support de transition qui renvoie un `world.snapshot` frais quand une carte cible de porte existe.
  • Ajout de `interior_cottage_dev_01`, la première carte intérieure de chaumière en `24x24`, avec une porte de retour vers la case de porte extérieure de la chaumière `world_0_0` et une couverture smoke pour entrer et sortir du bâtiment.
  • Ajout de `IsoTactica/Preview/Render Cottage Interior` afin que le nouvel intérieur de bâtiment puisse être rendu directement dans `WorldScene` sans démarrer le serveur.
  • Ajout d'un `InventoryPanel` Unity compact qui lit l'état quête/monnaie de `world.snapshot` et affiche les objets clés, ressources récoltées et monnaie de marques de route séparément du panneau métier rapide `Recolte`.
  • Ajout de `IsoTactica/Build/Windows Development Client` pour un packaging Windows dev répétable dans Unity, rafraîchissement de l'assembly runtime client packagé avec le dernier code interaction/intérieur/inventaire et régénération de `build/updates/dev/manifest.json`.
  • Ajout du découpage de chemin à la souris côté client pour les déplacements et interactions monde : un clic distant sur tuile/ressource/porte se résout maintenant en chemin cardinal, marchable, case par case, tandis que le serveur valide toujours chaque pas ; les actions de ressource ou porte en file se déclenchent ensuite quand le joueur arrive à portée, et la couverture PlayMode vérifie que les cases bloquées sont évitées sans déplacement diagonal.
  • Amélioration de l'éditeur de carte dev avec presets de transition cardinale en un clic pour les liens nord/est/sud/ouest et avertissements de validation pour la convention plot/spawn de transition monde plus les portes sans carte/intérieur cible.
  • Ajout de `scripts/postgres-smoke.ps1`, un runner smoke répétable adossé à PostgreSQL qui démarre la base compose, applique les migrations, lance le vrai serveur contre PostgreSQL, exécute le smoke test WebSocket et écrit un rapport de playtest.
  • Mise à jour des valeurs par défaut du serveur Docker pour charger le dossier `assets/processed/maps/world` généré avec `world_0_0` comme carte par défaut au lieu de l'ancien chemin de carte unique.
  • Localisation des derniers statuts du HUD de combat Unity, des textes de ciblage/sélection, des labels initiaux, des détails PV/PA/PM et des labels d'effets actifs autour des noms d'effets issus du catalogue ; reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers packagés.
  • Promotion de `Badge de Relais` d'un marqueur de possession d'état de quête vers un vrai item d'inventaire : le support repository lit/accorde maintenant les items depuis `inventories`, `world.snapshot` inclut les payloads d'items, `route.shop.purchase.accepted` renvoie `itemUpdates`, Unity les applique en direct et le panneau `Inventaire` affiche le badge depuis l'état d'item.
  • Ajout de la migration PostgreSQL `002_inventory_items_and_world_maps.sql` pour enregistrer l'item badge de relais, protéger l'unicité par item et personnage et seed les IDs de cartes monde/intérieur générées.
  • Rafraîchissement de la couverture smoke locale et du package Windows après la passe inventaire ; `docs/playtests/local_inventory_item_smoke_v001.md` vérifie l'achat/persistance de l'item badge, et `build/updates/dev/manifest.json` hashe maintenant l'assembly runtime client mis à jour.
  • Extension de `resource.gather` pour accorder de vraies piles de ressources d'inventaire via `itemUpdates` tout en conservant les compteurs existants `resource_*` et `profession_xp_*` pour les panneaux actuels récolte/métier.
  • Mise à jour de l'affichage d'inventaire Unity pour séparer les objets clés et les ressources récoltées par `itemType`, avec préférence pour les items ressources plutôt que les anciens compteurs de ressources quand ils sont disponibles.
  • Ajout d'une couverture smoke et d'un nouveau rapport, `docs/playtests/local_resource_inventory_stack_smoke_v001.md`, prouvant les mises à jour d'items ressources et la persistance dans un snapshot rafraîchi aux côtés du flux existant d'achat d'item badge de relais.
  • Ajout de la première persistance autoritaire des métiers avec la migration `003_character_professions.sql`, support repository, `world.snapshot.professions` et `resource.gather.accepted.professionUpdates`.
  • Mise à jour du panneau Unity `Recolte` pour préférer la progression des payloads métier aux anciens compteurs `profession_xp_*`, tout en conservant l'ancien fallback de compteur.
  • Nouveau rafraîchissement de la couverture smoke et du runtime client packagé ; `docs/playtests/local_profession_progress_smoke_v001.md` vérifie les mises à jour de progression métier et la persistance dans les snapshots rafraîchis.
  • Ajout de la première boucle de craft autoritaire serveur : `crafting.craft` consomme une pile récoltée `resource_mushroom` et accorde `crafted_forest_poultice` / `Cataplasme de Clairiere`, avec payloads accepté/refusé et suppression de l'item d'inventaire quand la pile atteint zéro.
  • Mise à jour du bootstrap Unity et du panneau live dev avec une action `Craft` pour la première recette afin que le Play Mode puisse montrer la progression ressource-vers-item-crafté sans outil externe.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_crafting_smoke_v001.md` ; le rapport vérifie récolte de champignon, craft, suppression de pile consommée, refus pour ingrédient manquant, persistance métier, achat du badge de relais, combat et présence deux clients.
  • Rafraîchissement de l'assembly runtime Windows packagé et du manifest dev ; `Assembly-CSharp.dll` hashe maintenant vers `eb258e0055f8a701cb8081bcd923d7beaa8e26ba5326dbd38b53992011ef5e71`.
  • Relance des tests Unity PlayMode via MCP après le rafraîchissement de scripting ; `IsoTactica.Client.PlayModeTests` passe 5/5 dans l'éditeur ouvert.
  • Déplacement de la première recette dans un catalogue de craft data-driven : `assets/processed/crafting/crafting_recipes_v001.json`, miroir byte-for-byte dans Unity `Resources/Crafting`, avec couverture de tests partagés pour éviter les dérives processed/runtime.
  • Mise à jour du chemin de craft serveur pour charger les recettes depuis le catalogue via `IsoTactica:CraftingRecipePath`, garder un fallback sûr, valider la structure de recette, sérialiser les requêtes de craft par personnage et consommer les exigences d'ingrédients agrégées avant d'accorder les sorties.
  • Ajout d'un panneau de craft Unity compact `Atelier` adossé au catalogue de recettes Resources ; il affiche `forest_poultice`, la disponibilité des ingrédients, la sortie et un `CraftRecipeButton` qui envoie l'ID de recette sélectionné.
  • Extension de la couverture PlayMode Unity pour le panneau de craft adossé au catalogue et relance PlayMode via MCP ; `IsoTactica.Client.PlayModeTests` passe 5/5.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_crafting_catalog_smoke_v001.md` ; le rapport vérifie le craft adossé au catalogue avec suppression de pile consommée, refus pour ingrédient manquant, persistance, transitions, combat, boutique et présence deux clients.
  • Reconstruction du client de développement Windows afin que le nouveau catalogue Resources soit packagé dans les données Unity, puis régénération de `build/updates/dev/manifest.json` avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `3db714dd613bb21fd11408b660bcb55d0f504c7fb424827b9c2914cd388f795a`.
  • Ajout de la première règle de craft conditionnée par station : `forest_poultice` requiert maintenant une station authorée `herbalist_workbench`, et `interior_cottage_dev_01` contient la première interactable `Table d'herboriste` sur la table de la chaumière.
  • Mise à jour du panneau Unity `Atelier` pour afficher la disponibilité de station et désactiver l'action de craft tant que le `world.snapshot` courant ne place pas le joueur près de la station requise.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_crafting_station_smoke_v001.md` ; le rapport vérifie le refus `station_required` loin de la station de chaumière, l'accès/utilisation de station dans la chaumière, le craft accepté à l'établi, le refus pour ingrédient manquant et le flux existant transition/combat/boutique/deux clients.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `7e78a162c179551fd9ff87bf20ca604e4a65b5122e1b8c22f8a470627b3e06df`, et `data.unity3d` hashe vers `d3e77265e03b84bca91ce7b78d9a67e1322db563e5c7014abf82b640339a8b71`.
  • Ajout de `forest_tonic`, une deuxième recette d'herboristerie adossée au catalogue verrouillée derrière `requiredLevel: 2`, et mise à jour de la validation de craft serveur pour refuser les recettes de niveau trop bas avec `profession_level_required`.
  • Mise à jour du panneau Unity `Atelier` avec contrôles recette précédente/suivante plus disponibilité de niveau métier afin que plusieurs recettes de catalogue soient visibles avant qu'une UI de craft plus complète existe.
  • Extension de la couverture smoke pour écrire `docs/playtests/local_crafting_unlock_smoke_v001.md` ; le rapport vérifie le gating de station, le refus de recette niveau 2, le craft niveau 1 accepté, la suppression de pile consommée, le refus pour ingrédient manquant et le flux existant transition/combat/boutique/deux clients.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `ca02024ef73c977e1eeced42b20c9e72a487045b67945ee6934826d9ad4da2a8`, et `data.unity3d` hashe vers `8f0239a21a0cd84063f6b25dbba3d2a252b657cac326fcb6ad31f78686e81e51`.
  • Ajout de l'XP de métier de craft aux données de recette et à `crafting.craft.accepted`, incluant les mises à jour de monnaie métier legacy et les `professionUpdates` autoritaires pour que Unity puisse avancer immédiatement la progression métier après un craft.
  • Extension de la couverture smoke pour écrire `docs/playtests/local_crafting_progression_smoke_v001.md` ; le rapport vérifie que `forest_poultice` fait progresser l'herboristerie au niveau 2 et que `forest_tonic` passe de `profession_level_required` avant le craft à `missing_ingredients` après le déverrouillage.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `4fffee1cfd7879588908acd51fefcf79699ba845bdb3d6c799ec2f82bb912abd`, et `data.unity3d` hashe vers `c536988ed3892e2c0338dbd0e670ce299f816f996fd45059e6ce12dd917f94b9`.
  • Extension du parcours smoke dans la forêt nord et les nœuds de champignons du marais afin que le chemin automatisé récolte assez de vraies ressources pour crafter `forest_poultice` et le `forest_tonic` niveau 2 déverrouillé.
  • Écriture de `docs/playtests/local_crafting_second_recipe_smoke_v001.md` ; le rapport vérifie les réserves de ressources multi-cartes, le craft accepté réussi de `forest_tonic`, la persistance des deux consommables craftés et le refus ensuite quand les réserves sont vides.
  • Ajout de `inventory.use`, `inventory.use.accepted` et `inventory.use.rejected` dans le protocole partagé, le routage WebSocket serveur, les constantes de protocole Unity et les modèles client.
  • Ajout de la première utilisation en combat de consommables craftés : `crafted_forest_poultice` et `crafted_forest_tonic` se résolvent en effets de soin autoritaires serveur, exigent un combattant joueur vivant et actif, consomment un item seulement quand le soin est utile et renvoient les mises à jour d'items plus un snapshot de combat rafraîchi.
  • Mise à jour du `InventoryPanel` Unity avec une action temporaire `Utiliser` pour les consommables craftés, et mise à jour de `GameBootstrap` pour envoyer les requêtes d'utilisation d'inventaire, appliquer les mises à jour d'items renvoyées et appliquer le snapshot de combat autoritaire.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_consumable_use_smoke_v001.md` ; le rapport vérifie que le cataplasme crafté peut être utilisé pendant le combat, soigne les PV manquants, consomme l'item, garde le tonic crafté et préserve le flux existant transition/intérieur/craft/boutique/présence.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `026934119efcb56620cf1b3116ac51edb4b43ace85ee620cf5b8e034ca58a2b6`, et `data.unity3d` hashe vers `3ae1f083017a97c5eb39b34e9c8c9b3a7d6ddeef1257c3116703bdfc2e851c46`.
  • Ajout du premier catalogue d'items data-driven, `assets/processed/items/items_v001.json`, miroir dans Unity `Resources/Items`, avec couverture de tests partagés qui garde les deux copies byte-identiques et valide les définitions d'items/effets d'utilisation de départ.
  • Mise à jour de `inventory.use` serveur pour résoudre les effets de soin en combat depuis le catalogue d'items au lieu d'IDs d'items hardcodés, avec un catalogue d'items fallback pour les exécutions locales isolées.
  • Mise à jour du `InventoryPanel` Unity pour lire les consommables utilisables depuis `Resources/Items/items_v001.json` afin que les futurs items authorés dans l'éditeur puissent activer le même bouton sans changement de code client.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_item_catalog_consumable_smoke_v001.md` ; le rapport vérifie que les deux consommables herboristes craftés soignent depuis les effets du catalogue d'items, consomment leurs piles d'inventaire et persistent comme supprimés après combat.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `f7612ed6dc8f4534acc30d81fa1c2ca44a8f787d4d5002e900138779969cf51a`, et `data.unity3d` hashe vers `7669f3e8e80baa6a1ffd80e2fdcddbb30044df3c7cfa387f780872cd02cf10f9`.
  • Ajout de `flower_balm` / `Baume Floral`, une troisième recette d'herboriste qui consomme `resource_wild_flower`, accorde de l'XP de craft, produit `crafted_flower_balm` et définit un effet de soin de combat dans le catalogue d'items.
  • Mise à jour des catalogues fallback serveur et Unity afin que les exécutions locales isolées exposent toujours les mêmes trois recettes de départ et trois consommables herboristes craftés quand les assets JSON sont absents.
  • Extension de la couverture catalogue partagée pour valider 3 recettes et 5 définitions d'items, incluant la nouvelle recette de fleur sauvage et l'effet d'utilisation de `crafted_flower_balm`.
  • Relance de la couverture smoke et écriture de `docs/playtests/local_expanded_crafting_catalog_smoke_v001.md` ; le rapport confirme que le flux jouable existant passe toujours pendant que le serveur charge 3 recettes et 5 définitions d'items.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `ec26e3f661fe40460e19b3abc5765177e4dd27411d6cc6676d8b063d0b5185e9`, et `data.unity3d` hashe vers `9614faa9f57c76fa1d9d08abebeb3a0df72c722788b1b9743bcd7ffeb5ef7860`.
  • Extension de la route smoke pour voyager de la chaumière à `world_1_0`, récolter `village_herbs_01` / `resource_wild_flower`, revenir à la table d'herboriste, crafter `flower_balm`, persister l'herboristerie niveau 3 et utiliser `crafted_flower_balm` pendant le combat.
  • Écriture de `docs/playtests/local_flower_balm_crafting_smoke_v001.md` ; le rapport vérifie 48 checkpoints incluant les trois consommables herboristes de départ craftés, consommés en combat et supprimés de l'état d'inventaire rafraîchi.
  • Ajout d'un lookup Unity partagé de catalogue d'items afin que les panneaux `Inventaire` et `Atelier` affichent les effets de soin de combat directement depuis `Resources/Items/items_v001.json`, par exemple `(Soin +20 PV)` sur les consommables craftés.
  • Extension de la couverture PlayMode Unity pour que les panneaux craft et inventaire adossés au catalogue vérifient les suffixes d'effet de soin visibles pour les items craftés.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `ff069a59b4d9b8e9f455f6a72aa549db64906a1a779fe55bf51fc160b5e55cf1`, et `data.unity3d` hashe vers `9614faa9f57c76fa1d9d08abebeb3a0df72c722788b1b9743bcd7ffeb5ef7860`.
  • Ajout de `reed_focus_brew` / `Infusion de Roseaux`, une recette d'herboriste niveau 3 qui consomme `resource_reed`, accorde de l'XP de craft, produit `crafted_reed_focus_brew` et définit le premier effet d'item de combat restaurant des PA via `restore_action_points`.
  • Extension du catalogue d'items à 8 définitions, incluant `resource_wild_flower`, `resource_reed` et le nouveau consommable crafté qui restaure des PA, avec les catalogues fallback serveur/Unity gardés en synchronisation.
  • Mise à jour de `inventory.use` serveur pour résoudre plusieurs effets d'items de combat supportés depuis le catalogue d'items : `heal` restaure les PV et `restore_action_points` restaure les PA sans dépasser les maxima du combattant.
  • Mise à jour du lookup de catalogue d'items Unity, de l'UI `Inventaire` et `Atelier` pour afficher à la fois les suffixes de soin et les suffixes de PA, par exemple `(PA +2)`.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_ap_focus_brew_smoke_v001.md` ; le rapport vérifie 53 checkpoints incluant récolte de roseaux, craft de recette PA niveau 3, restauration de PA en combat, consommation d'item, trois consommables de soin herboristes, quête/boutique/présence et contrôles de persistance rafraîchie.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `c5e3e50815acfb389e0f8526acfa7c5cc0822ca462a43080df85cfc4e3b7230a`, et `data.unity3d` hashe vers `2252b7262571d0fdc8244789cb1b0a81a9f6a9ef5f0992e9ab62f8e18605b9c1`.
  • Ajout d'une sélection compacte des consommables dans `Inventaire` avec contrôles précédent/suivant et ligne `Pret:`, afin que plusieurs items utilisables puissent être sélectionnés explicitement avant d'appuyer sur `Utiliser`.
  • Extension de la couverture PlayMode Unity pour le sélecteur de consommables, incluant la navigation du consommable de soin vers `Infusion de Roseaux (PA +2)` puis retour.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `5cc6bea465a2aa5ee21d27ed7785e0cd979581f34ec9a1d256a5008d5de11b80`, et `data.unity3d` hashe vers `eec283f04d66d79f60b59811dd5e6a8cc5502407daa548cd997c4b313a9bdb66`.
  • Enrichissement du panneau Unity `Carte Monde` avec biome de la carte courante, cibles de transition et résumés de types de ressources afin que la zone dev 3x3 connectée soit plus facile à vérifier dans l'UI live et le futur workflow éditeur.
  • Extension de la couverture PlayMode Unity pour le texte d'information de carte-monde enrichi, incluant les assertions de coordonnées, biome, sorties et résumé de ressources.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `5740efe688aefe7d67be8a76a4a5e0a846c0bad69c01edfeb67386dc2775117a`, et `data.unity3d` hashe vers `eec283f04d66d79f60b59811dd5e6a8cc5502407daa548cd997c4b313a9bdb66`.
  • Ajout du premier contrat de déplacement en combat autoritaire serveur : `combat.move` valide le tour actif du joueur, l'état de combattant vivant, le déplacement cardinal d'une case, la marchabilité de la carte, les cases de combat occupées et les PM restants avant de renvoyer `combat.move.accepted` ou `combat.move.rejected`.
  • Mise à jour du protocole partagé, du routage serveur, des constantes de protocole Unity, des modèles réseau Unity et de la couverture smoke pour le déplacement en combat sur les mêmes cases de carte authorées que l'exploration.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_combat_movement_smoke_v001.md` ; le rapport vérifie 55 checkpoints incluant déplacement en combat accepté consommant 1 PM, refus de déplacement invalide, restauration de PA, tous les consommables craftés de départ, transitions de cartes, intérieurs, récolte, craft, boutique, quête et présence deux clients.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `7a9add243691aea7afb7b2aac5f3d2be507397126b69e23d4766009b9f57af63`, et `data.unity3d` hashe vers `eec283f04d66d79f60b59811dd5e6a8cc5502407daa548cd997c4b313a9bdb66`.
  • Branchement de l'entrée de déplacement en combat Unity : quand le combat est actif et qu'aucun sort n'est sélectionné, cliquer sur une case adjacente valide envoie `combat.move`, surligne les cases atteignables en un pas, efface le feedback en attente sur acceptation/refus et met à jour le statut du HUD de combat avec les PM restants ou la raison du refus.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `6aa63e1173069638bdb69a818dd7fd17cb33beec93ef8372e453df8493794887`, et `data.unity3d` hashe vers `eec283f04d66d79f60b59811dd5e6a8cc5502407daa548cd997c4b313a9bdb66`.
  • Amélioration du déplacement en combat Unity, des clics adjacents seuls vers des clics de destination dans les PM courants : le client construit un chemin cardinal, évite les cases de combat occupées, met en file un `combat.move` par pas et s'arrête sur tout refus serveur.
  • Extension de la couverture PlayMode Unity à 6 tests avec un test de chemin souris en combat qui vérifie l'évitement des cases occupées et le refus de route limitée par les PM.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `8da4e882dc0224cfd92f6ed7916cf9b2fc24ce87e94ee00a8e5e995c8876020d`, et `data.unity3d` hashe vers `eec283f04d66d79f60b59811dd5e6a8cc5502407daa548cd997c4b313a9bdb66`.
  • Ajout de `fieldstone_guard_pebble` / `Galet de Garde`, la première recette de minage : elle consomme `resource_fieldstone`, requiert la nouvelle station `stonecutter_block` dans la chaumière, accorde de l'XP de craft minage et produit `crafted_guard_pebble` comme objet clé de départ.
  • Ajout de l'interactable/station `Billot de taille` dans la chaumière et d'un prop visible correspondant dans `interior_cottage_dev_01`, en gardant la station sur une case marchable de carte `24x24` pour une réutilisation future dans l'éditeur.
  • Extension du catalogue d'items à 18 définitions, avec ajout de vraies métadonnées d'items ressources pour tous les types de ressources actuels du monde dev : bois tendre, pierre brute, bois de saule, bois flotté, coquillages, lin, grain, minerai de fer et argile, plus l'objet clé galet de garde.
  • Mise à jour des catalogues fallback serveur et Unity de craft/items afin que les exécutions locales isolées exposent toujours les mêmes 5 recettes et 18 définitions d'items quand les assets JSON sont indisponibles.
  • Extension des tests partagés catalogue/carte pour valider 5 recettes, 18 items, toutes les définitions d'items ressources récoltées sur les cartes et la nouvelle station de taille de pierre de la chaumière.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_mining_recipe_smoke_v001.md` ; le rapport vérifie 60 checkpoints incluant récolte de pierre brute, accès au billot de taille, craft de `fieldstone_guard_pebble`, persistance du minage niveau 2, persistance du galet de garde dans l'inventaire et le flux existant transition/intérieur/craft/combat/boutique/présence.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `e0508311dc2a1af10faf74537b2da94236d85b14a0e52192aa2983297fbb0037`, et `data.unity3d` hashe vers `b4c9c2849f86a8ad0d71ca302eaaf2f6425281fd519845e24d9fb34d6d9c6680`.
  • Ajout de `softwood_training_stake` / `Piquet d'entrainement`, la première recette de bûcheronnage : elle consomme `resource_softwood`, requiert la nouvelle station `carpenter_bench` dans la chaumière, accorde de l'XP de craft bûcheronnage et produit `crafted_training_stake` comme objet clé de départ.
  • Ajout de l'interactable/station `Etabli de bois` dans la chaumière et d'un prop visible correspondant dans `interior_cottage_dev_01`, en gardant la station sur une case marchable de carte `24x24` pour une réutilisation future dans l'éditeur.
  • Extension du catalogue de recettes à 6 définitions et du catalogue d'items à 19 définitions, avec les fallbacks de craft serveur et Unity gardés en synchronisation.
  • Extension des tests partagés catalogue/carte pour valider 6 recettes, 19 items et la nouvelle station de menuiserie de la chaumière.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_woodcutting_recipe_smoke_v001.md` ; le rapport vérifie 65 checkpoints incluant récolte de bois tendre, accès à l'établi de bois, craft de `softwood_training_stake`, persistance du bûcheronnage niveau 2, persistance du piquet d'entraînement dans l'inventaire et le flux existant transition/intérieur/craft/combat/boutique/présence.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `a885f2a3535c305547ac11405531cfad78c4cc48dc8d3895c3aaf96ec610b9f7`, et `data.unity3d` hashe vers `77709026cd0b7b3ac1a1b5993e0aa31fdac894ca6c74413ec89509dce0badf59`.
  • Ajout de `iron_route_buckle` / `Boucle de Route`, une recette de minage niveau 2 qui consomme `resource_iron_ore`, requiert la nouvelle station de château `forge_anvil`, accorde de l'XP de craft minage et produit `crafted_route_buckle` comme objet clé de départ.
  • Ajout de l'interactable/station de château `Enclume de campagne` à `world_1_-1`, en gardant la station sur une case marchable de carte monde `24x24` afin que le craft ne soit plus limité à l'intérieur de la chaumière.
  • Extension du catalogue de recettes à 7 définitions et du catalogue d'items à 20 définitions, avec les fallbacks de craft serveur et Unity gardés en synchronisation.
  • Extension des tests partagés catalogue/carte pour valider 7 recettes, 20 items, toutes les définitions d'items ressources récoltées sur les cartes, les stations de chaumière et la nouvelle station de forge du château.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_forge_recipe_smoke_v001.md` ; le rapport vérifie 71 checkpoints incluant voyage au château, récolte de minerai de fer, accès à la forge, craft de `iron_route_buckle`, persistance de progression minage niveau 2, persistance de la boucle de route dans l'inventaire et le flux existant transition/intérieur/craft/combat/boutique/présence.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `a933b8ccfd1aa3d87d3c266993c2a4ec486b8dee63d2a3a722a18f949a186617`, et `data.unity3d` hashe vers `7137f6156dbd6a80d6a31340e94b963b0a851fb77a3c97f7b1150946512b59a7`.
  • Ajout du premier catalogue de rencontres data-driven, `assets/processed/encounters/encounters_v001.json`, miroir dans Unity `Resources/Encounters`, afin que les rencontres authorées puissent alimenter les workflows serveur et client/éditeur.
  • Déplacement de `routes_guard_relay` vers la rencontre `Relais de Ronce` adossée au catalogue et remplacement de l'identité d'ennemi debug hardcodée `Pantin de Route` par `Marche-ronce du Relais` authoré.
  • Mise à jour du panneau PNJ Unity `Garde des Routes` pour lire le catalogue de rencontres et afficher les noms authorés de rencontre/ennemi avant de démarrer le combat.
  • Extension des tests partagés à 27/27 avec miroir du catalogue de rencontres et couverture de validation pour la première définition de rencontre authorée.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_encounter_catalog_smoke_v001.md` ; le rapport vérifie 71 checkpoints incluant le démarrage de rencontre authoré par catalogue contre `Marche-ronce du Relais`, plus le flux existant transition/intérieur/ressource/craft/combat/boutique/présence.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `be36c9b054d3d7c455cae48887b5bc01c594abe62c5c1cca726a2f859dc614b6`, et `data.unity3d` hashe vers `95f41e3c55c851341f4e50434e69a8b4e3cacdced6958a4222edb2ed76cc3bb`.
  • Ajout du premier catalogue d'ennemis/bestiaire, `assets/processed/enemies/enemies_v001.json`, miroir dans Unity `Resources/Enemies`, définissant `enemy_marche_ronce_relais` avec stats de combat et chemin de sprite de combat authoré par catalogue.
  • Mise à jour de `routes_guard_relay` afin que la rencontre référence maintenant `enemy_marche_ronce_relais` au lieu de porter directement des stats d'ennemi dupliquées.
  • Extension des payloads de combattants avec `spriteResourcePath`, permettant au renderer de combat Unity de charger les sprites ennemis depuis les données authorées avant un remplacement bestiaire/art plus large.
  • Extension des tests partagés à 28/28 avec miroir du catalogue d'ennemis, validation de référence rencontre-vers-ennemi et premiers contrôles de métadonnées stats/sprite ennemi.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_enemy_catalog_smoke_v001.md` ; le rapport vérifie 71 checkpoints incluant la rencontre `Relais de Ronce` authorée par catalogue contre `Marche-ronce du Relais` authoré par bestiaire, avec chemin de sprite de combat.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `dea27fd8c0d17c24601b833962415a2d01a52b1499f24106301a72e3ff3e93cb`, et `data.unity3d` hashe vers `d87c269b8338db3c90d91e6ffd0f5d843d6ea215fff01bfe05011703f7ba3bf8`.
  • Ajout de `behaviorId: approach_and_strike` et `attackRange: 1` à la première définition d'ennemi afin que le comportement de l'ennemi de départ soit authoré dans le bestiaire plutôt qu'implicite dans le code serveur.
  • Mise à jour de l'auto-tour ennemi serveur pour attaquer uniquement quand le joueur est à portée ; sinon l'ennemi se déplace d'une case cardinale valide vers le joueur, en respectant la marchabilité, les cases de combat occupées et les PM restants avant de frapper si la portée est atteinte.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_enemy_behavior_smoke_v001.md` ; le rapport vérifie 71 checkpoints incluant le déplacement ennemi avant dégâts quand le joueur sort de la portée adjacente.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 235 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `73d008433c2071cf683df772ec39f7c43e3dadb7076aeb962258f3201c9ec2a9`, et `data.unity3d` hashe vers `7743110e49ed520f9897a34d7595f095c1abb2fad61a16ac591606ea05b9b8e9`.
  • Ajout du premier catalogue de quêtes data-driven, `assets/processed/quests/quests_v001.json`, miroir dans Unity `Resources/Quests`, définissant `routes_guard_stabilize` / `Garde des Routes`, sa rencontre de départ, son texte de complétion et sa récompense de `25` `route_marks`.
  • Mise à jour des snapshots de quête serveur, des récompenses de victoire de combat, de `NpcQuestPanel`, `QuestJournalPanel` Unity et de la logique fallback de démarrage de rencontre de route pour lire le catalogue de quêtes au lieu de dupliquer le premier texte/récompense de quête dans le code.
  • Extension des tests partagés à 29/29 avec miroir du catalogue de quêtes et couverture de validation, et extension de la couverture PlayMode afin que le panneau PNJ vérifie le texte de quête authoré par catalogue.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_quest_catalog_smoke_v001.md` ; le rapport vérifie 71 checkpoints incluant les payloads de quête data-authored, la persistance du démarrage de rencontre, le texte de complétion authoré par catalogue et l'attribution des marques de route.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `91234a8dae291487391f4985a37635b2272198d02a5b6a27fe8c243dd894247f`, `resources.assets` hashe vers `0a6f18a73afd29eb05f399c4c88c6714e49f0e90e977c7f5e2e5a6b3f7fe6a4d`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Ajout du premier catalogue de boutiques data-driven, `assets/processed/shops/shops_v001.json`, miroir dans Unity `Resources/Shops`, définissant `route_guard_shop` / `Boutique du Relais` et les données d'achat `route_relay_badge`.
  • Mise à jour du flux d'achat de boutique du garde de route afin que le serveur et Unity lisent l'ID d'item badge, le nom affiché, le coût de `10` `route_marks` et le verrou `routes_guard_stabilize:completed` depuis le catalogue de boutiques au lieu de constantes boutique de route hardcodées.
  • Extension des tests partagés à 30/30 avec miroir du catalogue de boutiques et validation du coût/verrou du badge de route, et extension de la couverture PlayMode Resources pour le catalogue de boutiques.
  • Extension de la couverture smoke et écriture de `docs/playtests/local_shop_catalog_smoke_v001.md` ; le rapport vérifie 71 checkpoints incluant les données d'achat de badge authorées par catalogue, la dépense de marques de route, la persistance de l'item badge, le refus d'achat doublon et le flux existant quête/rencontre/craft/combat/présence.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `c6177604311ad9fccf3d090455a5947765686cf6e107bdb1e29f55b01758ed66`, `resources.assets` hashe vers `3661987aba1385aae746b3ef193bdbb9516b2b769b5d1e8ce8237567f088bcfc`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Ajout du premier catalogue PNJ data-driven, `assets/processed/npcs/npcs_v001.json`, miroir dans Unity `Resources/Npcs`, définissant `npc_route_warden_clearing` / `Gardien de la Clairiere` et ses liens carte interactable, quête, boutique et sprite.
  • Mise à jour du serveur pour charger et valider le catalogue PNJ au démarrage, incluant les références aux cartes, interactables, quêtes et boutiques authorés.
  • Mise à jour de la présentation monde Unity afin que les PNJ se rendent depuis les liaisons catalogue + interactable de carte au lieu de placer un placeholder sur chaque case d'interaction ; le titre du panneau garde de route utilise maintenant le nom PNJ authoré par catalogue.
  • Extension des tests partagés à 31/31 avec miroir du catalogue PNJ et validation croisée carte/quête/boutique, et extension de la couverture PlayMode pour le chargement du catalogue PNJ plus la sélection de sprite PNJ rendu.
  • Ajout de `docs/playtests/local_npc_catalog_ui_smoke_v001.md` ; il consigne 18 checkpoints de validation pour la tranche UI catalogue PNJ, Unity PlayMode, builds serveur/smoke, build Windows et régénération de manifest.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `c444641592e9185ec647eed9e617ee55177e4ec8e6214c189a7ddf8925a58446`, `resources.assets` hashe vers `30c9203b26dc2c2fa4f928978088f5ddafca716d9a6abb475ff50665740486cd`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Ajout du premier catalogue de sorts data-driven, `assets/processed/spells/spells_v001.json`, miroir dans Unity `Resources/Spells`, définissant les trois sorts de combat de départ pour les voies de classe Relieur, Sculpteur et Vitrailleur.
  • Mise à jour du chemin de combat serveur pour charger et valider les définitions de sorts depuis le catalogue de sorts, puis utiliser les sorts chargés du catalogue pour la validation de lancement, la gestion PA/cooldown/portée et les payloads de snapshot de combat.
  • Ajout de `SpellCatalogLookup` Unity plus couverture Resources afin que les futurs outillages UI/éditeur puissent lire les données de sorts de départ sans dupliquer les règles serveur.
  • Extension des tests partagés à 32/32 avec miroir du catalogue de sorts et validation PA/portée/cooldown/effet des sorts de départ, et extension de la couverture PlayMode pour `Resources/Spells/spells_v001`.
  • Ajout de `docs/playtests/local_spell_catalog_ui_smoke_v001.md` ; il consigne 15 checkpoints de validation pour la tranche catalogue de sorts, Unity PlayMode, builds serveur/smoke, build Windows, vérification launcher et régénération de manifest.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `c2d197d7e2db8726498ed9de40e723db44ad51ebbe019e577ba460b1da6a8593`, `resources.assets` hashe vers `e7f8b48269d3495db897d046d4f831ee3ae79f6de3c8c7dd96dc1b6021b77c28`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Ajout du premier catalogue de classes data-driven, `assets/processed/classes/classes_v001.json`, miroir dans Unity `Resources/Classes`, définissant `Relieur d'Aegis`, `Sculpteur de Brume` et `Vitrailleur Astral` avec rôle, ressource de classe et liens de sorts de départ.
  • Mise à jour du serveur pour charger et valider le catalogue de classes après le catalogue de sorts, incluant les contrôles de références classe-vers-sort et de propriété de sort.
  • Mise à jour des snapshots de combat et du lancement de sorts afin que le kit de classe actif du personnage contrôle les sorts disponibles ; le personnage par défaut `relieur_aegis` reçoit maintenant seulement `anchor_spark`, et les sorts hors classe sont refusés avec `spell_not_found`.
  • Ajout de `ClassCatalogLookup` Unity plus couverture PlayMode Resources pour le catalogue de classes.
  • Extension des tests partagés à 33/33 avec miroir du catalogue de classes et validation de propriété des sorts de départ, et mise à jour de l'outil smoke-test avec assertions protocole pour l'exposition des sorts filtrés par classe et le refus des sorts hors classe.
  • Ajout de `docs/playtests/local_class_catalog_ui_smoke_v001.md` ; il consigne 16 checkpoints de validation pour la tranche catalogue de classes, Unity PlayMode, builds serveur/smoke, build Windows, vérification launcher et régénération de manifest.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `4ee47b4861e1c46441d5c2682c579c923923faea3cc59e61f98f08f9f85f5068`, `resources.assets` hashe vers `7af0184eb8f91577e065c9b909baf3048182d837d965c5769969ce94eb878626`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Ajout de métadonnées visuelles de sorts authorées par catalogue dans `spells_v001.json` : les sorts de départ possèdent maintenant leur chemin de sprite d'icône, leur chemin de sprite d'effet persistant et leur label court d'effet en monde.
  • Mise à jour du rendu des effets de combat Unity pour résoudre les sprites et labels d'effets persistants depuis le catalogue de sorts, avec l'ancien switch de sprite par type d'effet conservé uniquement comme fallback.
  • Extension de la validation serveur/shared afin que les sorts persistants portent des métadonnées visuelles complètes et que les chemins de sprites Unity `Resources` restent sous `Sprites/`.
  • Ajout de `docs/playtests/local_spell_visual_catalog_ui_smoke_v001.md` ; il consigne 17 checkpoints de validation pour les métadonnées visuelles de sorts, Unity PlayMode, builds serveur/smoke, build Windows, vérification launcher et régénération de manifest.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `78b76ee7822f0dc88cf54c9156edd65238ac13cfe81e00929fb712019016d10c`, `resources.assets` hashe vers `505ab109bce3d0691072fc3f5c1dc8db39e4574540e1fa7fe1e2b428e287ffeb`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Ajout de l'identité d'attaque ennemie authorée par catalogue dans `enemies_v001.json` : `enemy_marche_ronce_relais` possède maintenant `attackId: walking_root_jab` et `attackDisplayName: Coup de Racine Mobile`.
  • Mise à jour du log d'auto-tour ennemi serveur pour utiliser le nom d'attaque authoré par bestiaire au lieu d'un message de frappe générique hardcodé.
  • Extension de la validation partagée et smoke-test pour les métadonnées d'attaque ennemie et les logs de dégâts ennemis authorés par bestiaire.
  • Exécution du flux smoke WebSocket complet local en mémoire et écriture de `docs/playtests/local_enemy_attack_catalog_smoke_v001.md` ; il vérifie 72 checkpoints incluant l'identité de log d'attaque ennemie `Coup de Racine Mobile` authorée par bestiaire.
  • Ajout de `docs/playtests/local_postgres_enemy_attack_smoke_v001.md` documentant le blocage du smoke PostgreSQL : la CLI Docker est installée, mais le pipe du daemon Docker local était indisponible pendant l'exécution.
  • Durcissement de `scripts/postgres-smoke.ps1` afin que les échecs natifs Docker/smoke arrêtent le script, que le serveur tourne sans overrides d'URL de launch-profile et que le smoke attende la disponibilité HTTP au lieu d'un sommeil aveugle.
  • Capture d'un screenshot QA visuel limité de la Game View Unity Editor après le build du catalogue d'attaques ennemies et documentation dans `docs/playtests/local_visual_qa_enemy_attack_catalog_v001.md` ; la QA visuelle du client packagé en 1920x1080 reste en attente.
  • Ajout de `docs/playtests/local_enemy_attack_catalog_ui_smoke_v001.md` ; il consigne 16 checkpoints de validation pour les métadonnées d'attaque de bestiaire, Unity PlayMode, builds serveur/smoke, build Windows, vérification launcher et régénération de manifest.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `0b04a2a2157676005d767e4928a751fe5690e2c56d86ec4eb45876da251fc9c5`, `resources.assets` hashe vers `26ea790ddef26259ff7fcc8891092679d9f03d06598f0db1023feeb7db331e77`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.
  • Mise à jour de la copie d'aperçu des sorts du HUD de combat Unity pour utiliser les termes tactiques français (`PA`, `PM`, `portee`, `puissance`) et les labels d'effets de sorts issus du catalogue au lieu de noms d'effets anglais hardcodés.
  • Ajout de `docs/playtests/local_combat_hud_spell_preview_ui_smoke_v001.md` ; il consigne 12 checkpoints de validation pour la copie d'aperçu HUD, Unity PlayMode, build Windows, vérification launcher et régénération de manifest.
  • Reconstruction du client de développement Windows et régénération du manifest dev avec 249 fichiers ; `Assembly-CSharp.dll` hashe maintenant vers `c8fd56d5757f09a1b9366c02d96a67430b77e908792da45b082aca081e86b42e`, `resources.assets` hashe vers `26ea790ddef26259ff7fcc8891092679d9f03d06598f0db1023feeb7db331e77`, et `resources.assets.resS` hashe vers `bd373125a5a9092234c3f50d67026b33424df670289b78a686632b208e430d1b`.