openthebox/proposals.md
Samuel Bouchet 82aba2b3eb Fix layout, portrait cosmetics, add TUI renderer, snapshots, and playthrough analysis
- Fix compact tmux-like layout (120×30 ref) with side-by-side panels
- Fix cosmetic portrait: PlayerAppearance now mutable with ApplyCosmetic()
- Add per-style intrinsic colors for all cosmetic types on portrait
- Add compact inventory mode (6 rows) for layout views
- Add Terminal.Gui renderer (--tui flag)
- Add save snapshot generation and --snapshot N CLI loading
- Add PlaythroughCapture test for automated output analysis
- Add destiny adventure French translation (intro.fr.lor)
- Remove FontStyle enum (fonts are collectibles only)
- Add proposals.md with 11 rendering improvement suggestions
- Update bugs.md (3 FIXMEs resolved)
2026-03-13 21:37:09 +01:00

7.3 KiB
Raw Blame History

Propositions d'améliorations du rendu

Analyse basée sur la capture de 2 playthroughs (seeds 42 et 777, 15 étapes chacun) et le rapport de pacing complet.


1. Le vide initial : 30 boîtes sans aucun panel visuel

Constat : Les 2 scénarios montrent "(no panels unlocked yet)" pour les 15 premières étapes (30 boîtes). Les premiers déverrouillages meta sont AutoSave et BoxAnimation — invisibles pour le joueur. Le premier panel visuel (ResourcePanel ou InventoryPanel) n'arrive qu'entre la boîte #32 et #36.

Impact : Le joueur voit uniquement du texte brut pendant 5-10 minutes. L'absence de feedback visuel donne l'impression que le jeu est cassé ou pauvre.

Propositions :

  • A) Déverrouiller TextColors dès la 1ère boîte ou la rendre gratuite. La couleur est le premier signal que "quelque chose se passe".
  • B) Offrir un "mini portrait" par défaut (juste la boîte nue +------+) dès le départ, sans nécessiter le déverrouillage meta_portrait. Le portrait changerait quand des cosmétiques sont équipés.
  • C) Réordonner les méta-déverrouillages : les panels visuels (StatsPanel, PortraitPanel) devraient arriver avant les features invisibles (AutoSave, BoxAnimation). Suggestion d'ordre : TextColors → StatsPanel → InventoryPanel → ResourcePanel → ArrowKeySelection → PortraitPanel → ... → AutoSave/BoxAnimation (fin de progression).
  • D) Ajouter un "panneau de bienvenue" statique visible dès le départ avec un ASCII art de boîte et un compteur de boîtes ouvertes. Remplacé par le vrai layout au fur et à mesure.

2. Les noms de boîtes apparaissent comme IDs bruts

Constat : Dans le loot, les boîtes reçues affichent "box_of_boxes", "box_ok_tier", etc. au lieu de leurs noms traduits. Seuls les items (non-boîtes) ont leurs noms localisés.

Impact : Rupture d'immersion. Le joueur voit du jargon technique au milieu de noms français.

Proposition : Le flux ItemReceivedEvent devrait résoudre le nom via registry.GetBox() en fallback quand registry.GetItem() retourne null. Le helper GetLocalizedName() existe déjà dans Program.cs — il faudrait l'utiliser systématiquement dans le rendu des événements.


3. Cosmétiques reçus sans portrait pour les voir

Constat : Dès la boîte #3, le joueur reçoit des cosmétiques (Yeux bleus, Cheveux en feu, Lunettes d'aviateur). Mais le PortraitPanel ne se déverrouille qu'à la boîte #131 (seed 42).

Impact : Le joueur accumule 20+ cosmétiques sans jamais voir leur effet. Quand le portrait arrive enfin, il ne sait même plus ce qu'il a.

Propositions :

  • A) Déverrouiller le portrait bien plus tôt (boîte #10-15), ou le rendre visible par défaut (voir point 1B).
  • B) Afficher un mini-aperçu ASCII du cosmétique au moment du loot : "Yeux bleus : | O O |".
  • C) Quand un cosmétique est reçu, l'équiper automatiquement si le slot est vide (actuellement il faut aller dans "Changer d'apparence" manuellement).

4. Ressources reçues mais invisibles

Constat : Le joueur reçoit Fer, Bronze, Bois, Or dès les premières boîtes, mais le ResourcePanel ne se déverrouille que vers la boîte #36. Les changements de ressources s'affichent en texte fugace ("Santé: 0 -> 10") puis disparaissent au Clear suivant.

Proposition : Afficher un résumé compact des ressources dans le texte de loot quand le ResourcePanel n'est pas encore débloqué :

  Vous avez reçu : Fer x1
  [Ressources : Santé 10/100 | Or 5]

5. Le layout "Full" arrive trop tard

Constat : FullLayout se déverrouille à la boîte #199 (seed 42). Avant ça, les panels s'empilent verticalement en mode séquentiel, même quand 10+ panels sont déverrouillés.

Proposition : Faire de FullLayout un des premiers déverrouillages dès lors qu'on a 3 panels.


6. Le panneau Chat est toujours vide

Constat : Le ChatPanel affiche "No dialogue yet." en permanence dans le hub. Il ne se remplit que pendant les aventures, mais les aventures ont leur propre flux de rendu (ShowAdventureDialogue).

7. Feedback d'événements trop éphémère

Constat : Les événements (loot, déverrouillage, craft) s'affichent une fois puis disparaissent au prochain Clear(). Le joueur doit lire vite avant d'appuyer sur une touche.

Propositions :

  • A) Garder un historique des N derniers événements affiché dans un panel "Log" (remplace le ChatPanel).
  • B) En mode texte simple (avant FullLayout), ne pas faire de Clear entre chaque action — laisser le texte défiler comme un terminal classique.

8. L'annonce FigletText de déverrouillage UI prend trop de place

Constat : ShowUIFeatureUnlocked affiche un FigletText (ASCII art géant du nom de la feature). Sur un terminal 120×30, ça prend 8-10 lignes + 2 règles = ~12 lignes pour un seul mot.

Proposition : Remplacer par une annonce compacte sur 3 lignes max :

╔═══════════════════════════════════════╗
║  ★ Panneau d'inventaire débloqué ! ★ ║
╚═══════════════════════════════════════╝

9. Progression des cosmétiques : équipement auto

Constat : Le joueur reçoit un cosmétique et doit manuellement aller dans "Changer d'apparence" pour l'équiper. Rien ne lui indique visuellement qu'il a un nouveau cosmétique à essayer.

Propositions :

  • A) Auto-équiper le premier cosmétique de chaque slot (le joueur voit immédiatement un changement).
  • B) Afficher un indicateur [NEW] à côté de "Changer d'apparence" quand un cosmétique non équipé est disponible.

10. Lore fragments : noms trop longs

Constat : Les fragments de lore ont des noms qui sont en fait des phrases complètes :

"L'Ancien Ordre des Ouvreurs de Boîtes n'a qu'un seul commandement : Tu ouvriras tes boîtes."

Ces noms débordent de la colonne Name (24 chars) de l'inventaire et sont tronqués à l'incompréhensible.

Proposition : Donner aux fragments de lore des noms courts ("Fragment #1", "Décret des Ouvreurs") et afficher le texte complet dans une description séparée ou un panel Lore dédié.


11. Consommables non consommables.

Constat : Les consommables n'ont pas d'action pour être utilisés.

Propositions :

  • A) rendre les objets du menu d'inventaire sélectionnables (en surbrillance).
  • B) Lorsqu'ils sont mise en surbrillance un cadre description permet d'afficher le contenu du fragment de lore ou indique qu'appuyer sur la touche "entrée" permet d'activer l'effet.

Résumé des priorités

# Proposition Impact Effort
1C Réordonner les méta-déverrouillages Très fort Faible (JSON)
1B Portrait visible par défaut Fort Moyen
2 Noms de boîtes localisés dans le loot Fort Faible
3C Auto-équiper le 1er cosmétique Moyen Faible
6A Chat comme log d'événements Fort Moyen
8 Annonce compacte des déverrouillages Moyen Faible
5 FullLayout plus tôt Moyen Faible (JSON)
10 Noms courts pour lore fragments Moyen Faible (JSON)
4 Résumé ressources inline Faible Moyen
7B Pas de Clear avant FullLayout Moyen Faible