Projets 8 Bits Cireza

Bon. Une fois de plus je rentre du taf, j’écris une ligne de code et je débloque un problème…

Ma gestion de collision fonctionne désormais parfaitement.

Le problème était autour des bank de données. Je n’avais pas chargé la bank au bon moment. Il faut que je réfléchisse pour me prémunir de ces problèmes à l’avenir. Je vais voir comment faire…

Et je vais redessiner la ville. Je veux que tout soit plus petit.

Edit : j’ai fignolé mon scrolling. Il me restait un bug sur les défilements verticaux, quelque chose d’assez subtil. Et j’avais un décallage d’1 pixel sur tous mes scrollings. Je m’en suis rendu compte et désormais c’est impeccable.

@Shenron : si je veux partager une rom juste aux membres du site (pour les curieux), tu me suggères quelle méthode ?

Sur le site-site ou sur le forum ?
Dans les deux cas on peut l’héberger sur notre FTP, et faire de la com sur les RS.

En complément tu peux mettre le lien vers ce topic et vers la rom dans ta bio sur le site.

Et quand tu auras fini, on pourra intégrer ton jeu à la BDD Game Gear :amy:

Je parlais simplement d’un partage sur le forum, pas de com ni rien ce ne sont que des bricolages pour l’instant. C’était pour les curieux !

Je peux utiliser un site de partage de fichier au hasard sinon.

C’est comme tu veux, tu peux utiliser google drive ou n’importe quoi d’autre !

1 « J'aime »

En tout cas je suis preneur, j’ai eu l’adaptateur peritel pour raspberry de recalbox, pas encore testé mais ce serait une bonne occasion :mrgreen:

Et puis on trouvera peut-être des bugs :stuck_out_tongue:

Alors voici un essai pour les curieux.

https://drive.google.com/file/d/1oWptpJfANbAU4Gyh2IyxIREycD83RErW/view?usp=sharing

La rom ne fonctionnera pas sur Everdrive car elle ne fait pas un multiple de 128 Ko par contre. Il faut que je « bourre » avec des banks inutiles pour que ça marche.

Vous pourrez vous balader dans la ville avec Rolf. La gestion de collision est en place et l’animation de marche aussi. Il n’y a rien d’autre à faire.

Je vais redessiner en partie la ville car ça ne me convient pas là.

Sinon j’ai compris pourquoi les lettres étaient chargées au fil de l’eau selon les texte à afficher : car au Japon il y a trop de caractères pour tout charger sans saturer la mémoire. Donc logiquement les développeurs vont piocher au fil de l’eau. Je pense que pour le confort de lecture, je vais ajouter des lettres minuscules et faire la même chose. Par contre je commence à douter que ça tienne bien dans mes scènes de combats…

J’ai aussi progressé côté C et je comprends mieux la visibilité des variables externes. J’ai encore des choses à apprendre mais je vais améliorer mon code et en particulier le passage de variables en paramètre, que je vais pouvoir fortement diminuer.

Enfin voici la dernière version de mes personnages :
Capture

Oui on s’éloigne un peu de l’original mais on se rapproche de ce que j’ai envie de faire… Tous sur une palette de 16. Et j’ai gratté des couleurs en faisant des intermédiaires. Ainsi pour le bleu et le vert, j’ai un vert clair, un bleu clair et la couleur foncée est intermédiaire : bleu+vert foncé.
Pour le violet le rouge j’ai fait pareil mais avec le foncé. La violet est foncé, le rouge est foncé et la couleur intermédiaire et le rose.
Ça me permet de conserver les thèmes d’origine et gagner des couleurs. Du coup j’ai 3 dégradés de beige et de gris, ce qui est très utile. J’ai aussi le noir, deux jaunes et le transparent.

J’aimerai faire les visages avec cette même palette si possible. En résumé : avoir une unique palette bonhommes + visages pour tout le jeu.

1 « J'aime »

Après quelques heures de travail, voici les villes redessinées par mes soins. J’ai quasiment tout refait à ce stade. Il fallait absolument baisser l’échelle pour gagner en confort de mon point de vue. Le joueur pourra voir plus loin et ça sera bien mieux adapté à la petite résolution de la machine.

Il me reste à tout intégrer dans le code par contre…

Capture

Je trouve les nouveaux murs bien plus jolis aussi.

2 « J'aime »

Super boulot, bravo. Je trouve ça très classe. Bon il manque peut être un peu de Ray Tracing, mais sinon ça le fait :yum:

J’aime bien la casquette.

1 « J'aime »

J’ai acheté la casquette.

Ces temps-ci j’ai passé du temps sur du refactor de code essentiellement. J’avais fait des « proof of concept » sur les cartes et les combats, mais rien n’était vraiment exploitable dans un jeu.

Je me suis créé tout un contexte. Où se trouve le joueur actuellement ? Quels sont les éléments actifs (décors, map, monstres etc…). Et j’ai transformé toutes mes fonctions pour qu’au lieu de prendre des paramètres, elles soient autonomes et piochent dans le contexte courant du joueur.

Ainsi ce qu’il faudra dans le flux du jeu, c’est sans arrêt maintenir à jour ce contexte. Par exemple je sors de la ville pour aller sur la carte du monde : au moment de la transition je mets à jour le contexte.
Désormais la carte c’est le monde extérieur, et plus le village.
Désormais les combats aléatoires sont actifs.
Etc…

Et pour vérifier que je pouvais faire ces transitions de la carte vers un combat, j’ai implémenté ce qu’il faut ce soir et j’y arrive sans souci, en terme d’affichage en tout cas.

J’ai pas mal réorganisé mes données. J’ai eu peur à un moment que d’avoir des banques séparées pour mes monstres et mes décors ne posent problème pour les fusionner. Mais le changement de banque est, assez logiquement, instantané. Donc ça ne m’a pas bloqué.

L’autre inquiétude c’est devoir avoir recours à des banques de code. J’aimerai vraiment éviter ça car ça m’a l’air galère. Cela dit, je sens que je vais finir par dépasser les 32 Ko de code même en dégageant tout ce qui doit l’être. Un RPG c’est une montagne de code basique mais nécessaire. Et je n’ai pas implémenté les combats, les menus, les magasins etc… Bref, ça va aller vite.

1 « J'aime »

Je ne code pas ces derniers temps. Je suis confronté à des problèmes d’organisation des données dans la rom qui me bloquent. Si ce que j’ai fait fonctionne, ça ne passera pas à l’échelle.

Pour chaque région, j’initialise toutes les variables de contexte à partir des bonnes variables. Par exemple :
carte_courante = carte_de_mota
décor_courant = décor_de_mota_exterieur
etc… (il y en a plein)

Pour alimenter ce contexte, je dois écrire des lignes de codes. Si j’ai 100 cartes différentes, je vous laisse imaginer la quantité de code que cela représente. Le souci, c’est que je ne veux pas tomber dans l’usine à gaz. De plus la quantité de code est limitée et après je vais tomber dans des problèmes de taille de mon code (32 Ko max, avant de devoir banker du code ce que je ne souhaite pas).

Du coup il faudra que tout ce bazar soit « dynamique ». En gros, je dis que je suis dans la zone 1, et ça va chercher les variables de la zone 1.

carte_courante = carte_1
décor_courant = décor_1

Mais cela veut dire que je dois trouver les noms des variables dynamiquement, et là, on sort de ce que le langage C permet de faire. Les noms des variables existent quand je code, mais une fois le bazar compilé, ils n’existent plus.

Il faudra donc plutôt que j’ai un énorme tableau où je mets à la queue-leu-leu les cartes, et je vais lire le tableau au bon endroit. Mais c’est très compliqué. Ça oblige pas mal de gymnastique, surtout que les cartes ne font pas toutes la même taille. Et ça oblige presque à avoir préparé à l’avance tout le contenu graphique. L’enfer comme on dit !

En bref, ça me fait pas mal réfléchir. J’entrevois des solutions, mais ça représente beaucoup de taf. Et cette logique doit s’appliquer à absolument tout…

Bon après expérimentation j’ai l’impression que ça ne génère pas tant de code que ça d’initialiser des variables de contexte (même si j’ai une énorme méthode à la fin). Donc je vais continuer sans me soucier de passer du code dans des banks…

Je suis en train de revoir l’organisation de ma VRAM pour afficher des messages, afin d’adopter une approche plus en ligne avec ce que j’ai vu dans d’autres jeux. Plutôt que de charger tout l’alphabet en mémoire, je vais plutôt charger uniquement les lettres qu’il faut et réserver la place non pas pour l’alphabet, mais pour les zones où je dois afficher des lettres.

Du coup visuellement, ça change l’organisation de la VRAM.

Capture

En dessous du décor et des monstres, je réserve les emplacements de l’écran qui doivent afficher des choses, et j’irai y poser les bonnes infos. Comme vous pouvez le voir je gratte autant que possible et les cases qui sont noires feront toutes références à la tuile noire en place 320. Normalement ça devrait passer.

Je dois faire même exercice pour les cartes (dans les villages) en réservant une zone pour afficher les textes.

Edit : voici pour les cartes, avec des fenêtres de texte et un portrait. Assez facile à faire tenir en mémoire.

Capture

Du coup avoir une belle fenêtre pour le texte ça me parait indispensable, sinon ça sera désagréable. Donc je vais essayer d’en mettre une pour les combats, j’ai fait une première maquette.

Capture
Je perds une ligne de décor en bas, et je n’affiche plus les HP Max. La VRAM est ras la gueule mais ça parait jouable et ça sera plus lisible normalement.

Par contre maintenant je dois trouver les couleurs pour faire cette fenêtre… Je pense essayer de tout faire avec la palette des sprites. En gros conserver cette palette tout le temps (pour tous les bonhommes dans les cartes, pour les visages, et pour les sorts). En partant de ce principe-là, ça voudrait dire que les couleurs sont toutes dispos tout le temps, et je peux donc prévoir une fenêtre. A tester…

2 « J'aime »

C’est à la fois fascinant et extrêmement compliqué tout ça, pour une quiche qui n’a strictement aucune connaissance en programmation.

3 « J'aime »

Capture

Maintenant que je sais un peu mieux comment je vais organiser mes palettes, j’ai décidé de reprendre entièrement toute la partie affichage du texte.

J’ai dessiné mon nouvel alphabet. Je vais tenter des choses. Vu qu’il sera affiché avec la palette des sprites, et cette dernière étant plus ou moins verrouillée, j’ai accès à toutes ses couleurs pour faire les fenêtres et les lettres.

Je pense que le fond restera noir même si j’ai une ou deux autres options (couleurs sombres). J’ai décidé de mettre un léger relief sur les lettres, je dois voir si ça ne charge pas trop le rendu, mais en tout cas ça a fortement arrangé de nombreuses lettres qui étaient moins reconnaissables autrement.

Edit : j’ai bien bossé aujourd’hui je suis content de moi. J’ai implémenté le nouveau code, désormais je réserve la place qu’il faut pour les noms des monstres, et je charge les bonnes lettre à l’endroit en question.

Capture
Comme vous pouvez le voir, il y a juste la place pour leur nom à un endroit précis.

Avoir ajouté les lettres minuscules rend la lecture vraiment beaucoup plus agréable. Je suis plutôt content du rendu. Je verrai pour faire l’interface en bas de l’écran prochainement…

4 « J'aime »

Mise à jour conséquente depuis la dernière fois… Car j’ai finalement changé mon fusil d’épaule. Un choix logique en réalité : je n’allais pas faire un remake d’un jeu dont je ne possède pas les droits. De plus, la tâche était quand même ardue avec encore de nombreux aspects complexes à gérer.

Depuis plusieurs années, j’ai un projet personnel de jeu narratif, sans action, sans statistiques, mais purement basé sur le fait d’explorer un monde, de discuter avec des gens et de faire des choix. Le but étant de découvrir l’histoire, et il y a de nombreux embranchements pour découvrir toute la vérité…

J’avais posté à plusieurs reprises mes travaux en terme de pixel-art sur ce jeu, que je faisais selon les contraintes de la MegaDrive.

J’avais notamment un panel de visages sur lesquels j’avais énormément bossé, et chacun utilisait sa propre palette de 16 couleurs.

J’ai décidé de passer l’intégralité des visages sur une palette commune de 15 couleurs pour la Game Gear, car oui, je vais essayer de réaliser ce projet-là en lieu et place de Phantasy Star II. Il faut voir ce dernier comme une opportunité pour moi de m’être fait la main sur Game Gear, et là je vais basculer sur quelque chose de plus abordable je pense…

En attendant, voici la comparaison entre la version MegaDrive et la version Game Gear :

Capture
A gauche : la MegaDrive avec 100+ couleurs
A droite : la Game Gear avec 15 couleurs

Je suis satisfait du résultat, et ça m’a pris beaucoup de temps car évidemment on ne passe à si peu de couleurs en ne faisant que des changements de palette. Il faut retoucher les visuels, et changer quelles couleurs utiliser à quels endroits.

Cette palette de 15 sera a priori utilisée pour tous les sprites de mon jeu. Elle servira à faire aussi les visuels des boites de textes, et les personnages/monstres/gardes.
L’autre palette de 16 servira à faire les décors, et là je pourrai vraiment exploiter les beaux dégradés de la machine sans contrainte. Il y aura des images fixes et des maps qui seront faites avec cette seconde palette, a priori…

2 « J'aime »

bravo pour ton utilisation de palette

Palette Master System, pour le fun :

Capture

En vrai je préfère la version MS/GG à la version MD. L’habitude du style 8 bit peut-être…

Travaux du jour… Je vais faire des écrans simples, sans scrolling pour mon jeu. Le rendu sera donc, dans l’esprit, à ce qui s’est fait dans les jeux Zelda sur GB.

J’ai bossé à réaliser le décor à partir de ce que j’avais conçu à l’époque pour la MegaDrive. J’ai fait deux écrans, afin de voir si ce que je fais rend suffisamment bien.

Capture

Capture

Le tout sur une palette de 16 couleurs, évidemment. Pour l’instant je suis content du résultat. Il y a des nuances que je ne peux pas faire apparaître car je suis à l’étroit sur une petite résolution. Il y a principalement les ombres qui ont disparu.

Je vais réfléchir à comment gommer ces angles droits.

4 « J'aime »