- 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)
135 lines
7.3 KiB
Markdown
135 lines
7.3 KiB
Markdown
# 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 |
|