Jeu vidéo · Roguelite · Pixel art / M1 en cours

MechaRogue

Un agent gouvernemental coordonne la défense contre des attaques extraterrestres en dispatchant des binômes pilote/robot sur des missions à résolution automatique. L'interface diégétique est le gameplay -pas un HUD, une salle de commandement.

Aperçu - captures à venir

GIF dispatch complet - sélection → confirmation → résolution → tampon 384×216 · upscale ×3
APPROVED MISSION ABORTED CRITICAL

Concept

Une salle de commandement comme interface

Inspiré de Neon Genesis Evangelion, MechaRogue pose l'hypothèse que l'interface diégétique - écrans de monitoring, tampons de validation, countdowns - peut être le vecteur de tension principal sans recourir à de l'action directe.

Le joueur ne pilote rien. Il gère des ressources humaines et mécaniques sous contrainte de temps, avec une information incomplète sur l'issue des missions. La résolution est automatique - la décision, pas.

État d'avancement

  • Core loop complet - spawn procédural → dispatch → résolution → réparation → vague suivante
  • Système de combat à trois seuils : victoire propre / succès partiel / échec franc
  • Traits pilotes actifs - Courage, Résistance au stress, Anxiété
  • TIME_LIMIT par mission avec countdown visible - passage rouge sous 30s, expiration automatique
  • Réparation par timer dynamique + régénération HP passive continue
  • Panel de prévisualisation paire pilote/robot -indicateur VIABLE / PARTIAL / CRITICAL
  • Conditions de game over -QG HP / robots hors service
  • Enchaînement inter-vagues WIP
  • Écran de résultats de vague et écran game over WIP
  • Coût de dispatch visible avant confirmation WIP

Décisions d'architecture

Custom Resources typées pour les données +
PilotData, RobotData, MissionData en Custom Resource Godot. Typage fort, éditables dans l'Inspecteur, dupliqués au chargement pour isoler les états runtime des .tres sources. Évite toute mutation des assets de référence pendant une run.
Timer global vs timers distribués +
La régénération HP passive est gérée par un seul timer dans GameManager plutôt qu'un timer par robot. Décision de scalabilité consciente - N robots = N signaux en parallèle sinon. Alternative rejetée car coût non justifié pour le gain de granularité.
Layout flat Control + zones intermédiaires +
Anchors sur des Control nodes dédiés, containers internes en Full Rect. Solution à un bug Godot classique où les anchors posées directement sur des containers produisent des comportements incohérents entre l'éditeur et le runtime.
Guard boolean sur signal wave_completed +
Bug de duplication de cartes missions causé par wave_completed émis plusieurs fois en fin de vague. Résolu par un _wave_completed_emitted boolean dans GameManager - pattern défensif documenté dans Tech.md avec date, cause, et règle à appliquer à l'avenir.