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.
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 :
- Vide son buffer d'entree
- Remplit son buffer de sortie avec
OutputAmountunites deOutputCargo - 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 transformeArms(armes) — pierre transformeeGold(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.TransformeretTransformerDef - Ajouter
TransformerStateavec 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,GoldaCargoType - Couleurs visuelles pour chaque cargo
- Mise a jour du
CampaignLoaderpour 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
DemandStatepour tracker la consommation par tour - Ajouter un flag "en penurie"
- Condition de victoire : pas de penurie pendant N tours