Image en HD

Salutation !
En surfant dans les créations de la communauté, je me suis rendu compte que certains jeux affichaient leurs images en HD, c’est à dire que leurs pixels étaient moins gros. Saurez-vous comment créer de tels sprites, qui pourraient m’être utile pour un futur jeu ?
Merci d’avance :wink: !

Salut !

Pour la HD, le topic de référence est celui de aoneill : https://gamebuino.com/creations/high-resolution-without-gb-display

En substance, tu laisses tomber le pseudo-framebuffer en RAM que fournit le SDK de la Meta, et tu gères toi-même des buffers plus petits que tu envoies à l’affichage. En effet, il n’y a pas assez de RAM pour contenir un buffer HD, tu es obligé de travailler par morceaux !

Partant de là, tu organises ton code comme tu veux/peux. Pour mon jeu Project88, j’ai travaillé avec des buffers de 8 lignes. Les sprites étaient encodés en flash (256ko, à partager avec le programme, on a un peu plus de place), et à chaque ligne, je déterminais quelles lignes de sprites j’allais copier depuis la flash dans mon buffer en RAM.
Mais si tu as beaucoup de sprites, tu peux faire différemment, et créer un système de palette pour prendre moins de mémoire. Par exemple, avec 4 bits par pixel, tu peux pas mal compresser (c’est ce que j’ai fait pour les backgrounds de Project88).

Bref, voilà plein de généralités, et je ne sais pas à quel point tu es à l’aise avec ces concepts, donc n’hésite pas à poser des questions plus précises si besoin.

Hello,
tu peux regarder ce qui a été dit dans cette discussion sur le même sujet : Parachute HD (META)
Comme le précise @Steph ici : Parachute HD (META), tu peux afficher des images en HD en utilisant l’api de bas niveau gb.tft directement sans passer par gb.display. Mais cela peut-être assez complexe puisque comme l’explique @Alban juste au dessus, tu devras gérer toi même la bufferisation de tes images morceau par morceau.
Mais comme précisé par Steph également ici Parachute HD (META), si tu passes par un espace de couleur indexé sur une palette de 16 couleurs, tu pourras alors profiter de l’api gb.display en résolution HD, seulement en réglant ce paramètre
#define DISPLAY_MODE DISPLAY_MODE_INDEX

1 Like

Merci, Alban et Codnpix !
En regardant vos liens, je suis tombé sur le tutoriel de Steph qui a pour but d’expliquer le post d’Aoneill et aussi de créer un effet d’éclairage : https://m1cr0lab-gamebuino.github.io/gb-shading-effect/fr/.

1 Like

Oui, avec la première explication de Step, c’est plsu simple mais je te conseil de te baser sur le petit moteur qu’il m’a fournit pour Parachute HD. La structure qu’il y propose est plus simple, je trouve, à utiliser. (J’ai même réussi, ce n’est pas peu dire… :slight_smile: )

Sur mon temps libre, j’ai analysé tout ça. Puis je me suis dit : "C’est bien sympa tout ça, mais c’est long (Je suis extrêmement paresseux :sweat_smile: ). Pourquoi ne pas faire une librairie qui permettrais d’afficher une image HD en une seul commande ? ". Si elle n’existe pas déjà, j’essaierais de développer ce bazar.

1 Like

Pourquoi pas… certes. Néanmoins, des optimisations substantielles peuvent être implémentées et dépendent d’un choix de paramétrage à la conception (découpage astucieux des micro-buffers de rendu, dimensions des tiles ou sprites en pixels, présence de pixels transparents ou non, … ). Une bibliothèque générique ne sera pas forcément adaptée à ces optimisations… surtout si tu es paresseux :joy: Mais toutes les contributions sont les bienvenues.

1 Like

oui et je pense qu’en effet une librairie spécifique peut avoir du sens d’une part pour ne pas embarquer tout ce que l’on utilise pas (mais ça je crois que le compilateur le gère bien) et d’autre part pour faciliter l’accès aux gens qui démarrent a condition d’y ajouter un bon tuto pour bien leur expliquer comment procéder. D’ailleurs pour nous motiver un peu n’hésitez pas à vous manifester les nouveaux pour nous contribuer comme The_Weakly_SeaShell, dire ce que vous faites avec la META (juste jouer, créer vos programme, apprendre le c++ en cours, faire des exemples en Python, piloter des montages électronique, caler votre bureau, etc…) (dans un nouveau message dans la catégorie “Bienvenue” bien sûr pour ne pas polluer celui de The_Weakly_SeaShell).

1 Like

Merci à tous pour votre aide ! Ces dernières semaines, je n’ai pas eu le temps de me consacrer à ce projet. Mais j’ai réussi à analyser en détail TOUT le code de Parachute HD, et je me suis rendu compte qu’il n’y avait que deux images ( l’arrière-plan et toutes les positions des sprites ). Ensuite, le code “découpait” l’image pour n’en afficher qu’une partie. Cette astuce marche bien pour les jeux de type Game & Watch parce que les sprites ne se confondent pas. Or, cette astuce ne fonctionne pas avec les autres types de jeux. Quelqu’un pourrait donc m’éclairer sur la façon de positionner une image en HD plus petite que l’écran ?

Tu as toutes les informations que tu cherche dans le workshop de @Steph dont tu as fourni le lien le 18 janvier 2020 dans cette mĂŞme discussion, voici le post.

Je t’invite à lire le workshop si tu veux te lancer dans la HD !

Oui, là je suis en clientèle mais ce weekend j’essayerais de faire un mini tuto qui explique le squelette de Steph pour en premier afficher un background et en second afficher un sprite qui bouge en faite c’est vraiment très proche du système du G&W mais tu as 2 couples x,y: un pour la position sur l’image d’origine et un pour là ou tu veux l’afficher.
C’est très simple et le tuto de Steph l’explique mais j’essayerais d’en faire un ici dans l’académie avec étape 1: affichage du fond, étape 2 affichage d’un sprite et déplacement avec droite gauche, haut, bas et étape 3: la même avec animation du sprite.
Juste ça, car le reste est similaire. Ça pourra aider les gens qui cherchent et ça me permettra de me replonger dedans :wink:
PS: j’ai bien dit que j’essayerais de le faire ce weekend, je ne promets rien mais normalement, ça ne devrait pas être trop chargé.