Aller au contenu principal

Session 73 — HUD 2D initial (architecture native 320×256 + scaling)

Ajout : architecture HUD avec respect des coordonnees natives Amiga

Premiere version fonctionnelle du HUD d’AB3D2 au-dessus de la vue 3D, construite
sur 4 composants decouples permettant de supporter n’importe quelle resolution
cible sans deformer le HUD.

Composants :

  • HudLayout : source de verite pour toutes les positions/dimensions du HUD,
    en coordonnees natives Amiga 320×256. Toutes les valeurs viennent directement
    de screen.h et draw.h du code C original (HUD_BORDER_WIDTH=16,
    SMALL_WIDTH=192, SMALL_HEIGHT=160, HUD_AMMO_COUNT_X=160, etc.).

  • HudScaling : conversion coord natives -> coord ecran JME. Supporte 3 modes :
    FIT (letterbox proportionnel, defaut), STRETCH (remplit tout), PIXEL_PERFECT
    (scale entier). Gere l’inversion d’axe Y (natif top-left vs JME bottom-left).

  • HudMode : enum SMALL_SCREEN (HUD complet visible, 3D 192×160) ou FULL_SCREEN
    (3D plein ecran, panneau bas en overlay).

  • HudState : modele des valeurs dynamiques (AMMO, ENERGY, arme selectionnee,
    messages avec ring buffer deduplique). Decouple du rendu JME.

  • HudAppState : couche JME. Charge newborder.png comme fond (deja extrait via
    IffExtractor), positionne AMMO/ENERGY/slots/messages en BitmapText aux
    coordonnees natives converties via HudScaling.

Integration :
– Attache automatiquement le HudAppState depuis GameAppState.initialize().
– Message d’accueil « Level X loaded » pushe a l’init.
– Detach propre dans cleanup().

Ce qui reste a faire :
– Relier AMMO/ENERGY/selectedWeapon aux vraies donnees joueur (actuellement
valeurs fixes).
– Ajouter la zone 3D transparente (actuellement le border masque une partie
de la vue). Options : (a) appliquer alpha=0 a la zone centrale noire du PNG,
(b) configurer un viewport 3D a la taille de HudLayout.getSmall3DViewport().
– Extraire les vraies fonts pixel (stenfontraw) pour un look 100% fidele.
– Implementer le mode FULL_SCREEN (panneau bas seul).
– Fenetre redimensionnable : appeler HudAppState.onResize() sur resize event.

Palette Amiga copper-list decodee

Format de panelcols identifie comme dump de copper list Amiga AGA :
– Byte 0-1 = adresse registre hardware ($0180 = COLOR00, …)
– Byte 2-3 = vraie couleur $0RGB 12-bit

Fix applique dans RawExtractor.parseAmiga12BitPalette() pour lire les bytes
2-3 au lieu des bytes 0-1. Les couleurs HUD confirmees : noir ($0000), oranges
($0DA0, $0A80), rouge ($0E00), jaune vif ($0FF2), blanc ($0FFF).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *