Chessistics/PLAN_leveldesign.md
Samuel Bouchet 2d1aea0a7a Snapshot campaign system progress before automation harness
Bundles in-flight work on the campaign/missions system (CampaignDef,
MissionDef, TerrainPatch, TransformerDef, MissionChecker, CampaignLoader,
FlavorBanner, transformer rules), plan files, and matching tests. Baseline
commit so the upcoming automation testing harness lands on a clean tree.
2026-04-16 21:22:49 +02:00

5.5 KiB

Plan : Level Design - Batiments de Transformation

Concept

Les batiments de transformation consomment une ressource en entree et produisent une ressource differente en sortie. Le joueur doit construire des chaines logistiques multi-etapes : extraction → transformation → livraison.

Exemple : Scierie (produit bois) → Forge (consomme bois, produit outils) → Caserne (demande outils).

Modele Engine

Nouveau type de cellule : Transformer

CellType.Transformer

Un TransformerDef combine une demande (input) et une production (output) :

public record TransformerDef(
    Coords Position,
    string Name,
    CargoType InputCargo,    // ce qu'il consomme
    int InputRequired,       // nb d'unites avant conversion
    CargoType OutputCargo,   // ce qu'il produit
    int OutputAmount         // nb d'unites produites par cycle
);

Logique de production

Chaque tour, le TransferResolver livre du cargo au transformateur comme a une demande normale. Quand le buffer d'entree atteint InputRequired, le transformateur :

  1. Vide son buffer d'entree
  2. Remplit son buffer de sortie avec OutputAmount unites de OutputCargo
  3. Le buffer de sortie est distribue aux pieces adjacentes (comme une production classique)

Cela cree un rythme : accumulation → conversion → distribution.

Changements au TerrainPatch

Ajouter le type "transformer" dans le JSON :

{
  "col": 3, "row": 2,
  "type": "transformer",
  "transformer": {
    "name": "Forge",
    "inputCargo": "wood",
    "inputRequired": 2,
    "outputCargo": "tools",
    "outputAmount": 1
  }
}

Nouveaux types de cargo

Ajouter au CargoType enum :

  • Tools (outils) — bois transforme
  • Arms (armes) — pierre transformee
  • Gold (or) — ressource rare de fin de campagne

Evolution de la campagne (10 missions)

Mission 1 : Premier Convoi (4x4)

  • Deverrouille : Pion
  • Batiments : Scierie → Depot Royal
  • Objectif : livrer 3 bois — apprendre le placement de base

Mission 2 : Forger les Tours (6x6)

  • Deverrouille : Tour
  • Batiments : +Carriere, +Caserne (bois), +Forge (pierre)
  • Objectif : livrer bois a la caserne ET pierre a la forge
  • Defi : gerer deux routes independantes

Mission 3 : Le Col (6x6)

  • Deverrouille : Cavalier
  • Batiments : mur bloquant + Depot (bois)
  • Objectif : traverser les murs avec des cavaliers
  • Les demands precedentes restent actives

Mission 4 : Le Carrefour (8x8)

  • Deverrouille : Fou
  • Batiments : +Chateau (bois), +Forge Royale (pierre), murs
  • Objectif : routes diagonales avec les fous

Mission 5 : La Forge (8x8) -- TRANSFORMATION

  • Deverrouille : aucun (nouveau type de cargo : Outils)
  • Batiments : Forge transformee en transformateur (bois → outils)
  • Objectif : livrer des outils a un nouveau batiment (Armurerie)
  • Defi : la route bois existante doit continuer, PLUS une branche vers la forge qui produit des outils

Mission 6 : La Dame Blanche (10x10)

  • Deverrouille : Dame
  • Batiments : +Scierie Nord, +Grand Chantier (bois), +Arsenal (pierre)
  • Objectif : routes longue distance avec la dame

Mission 7 : L'Armurerie (10x10) -- TRANSFORMATION

  • Nouveau cargo : Armes
  • Batiments : Armurerie (transforme pierre → armes)
  • Objectif : livrer des armes a une Garnison

Mission 8 : Le Comptoir (12x12)

  • Batiments : Comptoir (transforme outils → or)
  • Objectif : livrer de l'or au Tresor Royal
  • Defi : chaine a 3 etapes : bois → outils → or

Mission 9 : L'Expansion Finale (14x14)

  • Batiments : multiples transformateurs, murs complexes
  • Objectif : maintenir toutes les chaines tout en s'etendant
  • Defi : gestion de la congestion (risque de collisions)

Mission 10 : Le Couronnement (14x14)

  • Batiments : Cathedrale (demande or + armes + outils)
  • Objectif : livrer les 3 types de cargo transforme
  • Defi : orchestrer l'ensemble des chaines logistiques simultanement

Demands recurrentes (futur)

Pour que le joueur doive "preserver ses automatisations", les demands pourraient devenir recurrentes :

  • Un batiment de demande consomme N unites par tour
  • S'il n'est plus approvisionne, il passe en etat "en penurie"
  • Condition de mission : aucun batiment en penurie pendant X tours consecutifs

Cela force le joueur a maintenir ses routes existantes quand le terrain s'agrandit, au lieu de tout reconstruire.

Implementation par phases

Phase 1 : Modele Transformer

  • Ajouter CellType.Transformer et TransformerDef
  • Ajouter TransformerState avec buffers input/output
  • Integrer dans BoardState

Phase 2 : Logique de conversion

  • Modifier TurnExecutor : sous-phase "transformation" entre production et transferts
  • Le transformateur agit comme une demande (recoit) ET une production (emet)

Phase 3 : Nouveaux cargos

  • Ajouter Tools, Arms, Gold a CargoType
  • Couleurs visuelles pour chaque cargo
  • Mise a jour du CampaignLoader pour parser les transformateurs

Phase 4 : Visuels

  • Couleur de cellule pour les transformateurs (ex: orange cuivre)
  • Animation de conversion (flash input → flash output)
  • Icones de cargo dans les pieces

Phase 5 : Missions 5-10

  • Ecrire les donnees JSON des missions 5 a 10
  • Tester la solvabilite de chaque mission
  • Equilibrer les quantites (input/output ratios)

Phase 6 (optionnel) : Demands recurrentes

  • Modifier DemandState pour tracker la consommation par tour
  • Ajouter un flag "en penurie"
  • Condition de victoire : pas de penurie pendant N tours