Projets 8 Bits Cireza

Super sympa ce boss :+1:t2:

Quatrième boss (le dernier des quatre leaders) :

Résumé

Capture

Il me reste encore pas mal de visuels à produire… La partie graphique est interminable.

2 « J'aime »

@Cireza j’ai rattrapé ce sujet en diagonale.

Quel boulot incroyable !!!
Je te tire mon chapeau pour le travail déjà accompli !

Hum… Petit souci d’organisation de ROM et de gestion de bank ce soir… Je vais corriger ça.

Capture

1 « J'aime »

Pas mal ce demake de Pokemon Violet, on s’y croirait :nic:

J’ai réglé mon souci est fait une intro spéciale pour les boss.

Sinon deux autres personnages dessinés ce jour…

Encore un peu de travail mais j’avance…

(note : je n’arrive plus à uploader d’image directement sur le site)

3 « J'aime »

Toujours en train de dessiner des trucs…

Le dernier NPC :

Le décor des portes que l’on pourra déverrouiller avec le bon personnage :

(très difficile d’écrire un message avec si peu de pixels)

Je dois décliner ce décor avec toutes les palettes possibles (il y en a 5 je pense). Selon la couleur des châteaux…

4 « J'aime »

Travaux du soir, je suis content du résultat :

Ce week-end je repasse sur les décors…

3 « J'aime »

Décor : porte à l’intérieur d’un château.

Par contre j’ai remarqué que mon code avait beaucoup augmenté en peu de temps. Je crois que je vais devoir essayer de factoriser quelques trucs :confused:

Les gros switch ont l’air de générer beaucoup de code.

Edit : grosse séance de refactor de code cet aprem. Déjà j’ai essayé de banker du code mais ça n’a pas marché. Il doit y avoir des subtilités qui m’échappent, et vraiment, je préfèrerai ne pas avoir recours à cela. J’ai un peu de mal à concevoir comment cela peu fonctionner, ce qui me laisse supposer que certains cas ne fonctionneront pas et ça ne m’arrangera pas.

Je préfère rester sous la barre des 32 Ko de code absolument. J’ai identifié deux éléments qui prennent beaucoup de place :
les boucles imbriquées et les switchs

J’ai notamment factorisé des choses sur les gestions des palettes : pour faire de belles transitions vers des écrans noirs etc… il faut beaucoup de boucles et d’itérations, c’est en réalité assez pénible pour quelque chose qui paraît super basique. J’ai fait un énorme gain à ce niveau.

Sur les switch ensuite (qui gèrent des tonnes de cas) j’ai pu gagner pas mal.

En dehors de ces 2 cas là, je constate que factoriser du code n’apporte pas spécialement de gain, au contraire même. Il peut être un peu plus « court » de dupliquer certaines lignes plutôt que de faire une méthode dédiée que l’on appelle.

Quoiqu’il en soit, je suis repassé en dessous des 16 Ko, donc ça me laisse pas mal de marge pour terminer mon jeu. Je vais aller à l’essentiel d’abord, et selon la place, je tenterai des bricoles supplémentaires.

Il va falloir que je reste vigilant quand je vais coder tous mes évènements car j’ai peur que ça prenne beaucoup de place pour simplement gérer toutes les cinématiques visage/texte etc…

2 « J'aime »

J’ai codé tous les events des combats normaux du jeu. J’ai également implémenté ma carte du monde. Elle ne se dévoile que lorsque l’on visite les lieux.

(j’ai fait ça rapidement, j’optimiserai le code demain)

Le but sera bien sûr de tout découvrir au fil des différents scénarios…

3 « J'aime »

excellente la carte qui se dévoile au fil de sa progression… T’en est à combien d’heures passées sur le jeu ???

Je crois qu’il vaut mieux qu’il ne le calcule pas…

Aucune idée ^^

Gros refactor de code aujourd’hui. Au fur et à mesure que j’avançais dans la rédaction des messages et la mise en place des évènements, je réalisais que ça ne tiendrait pas sur la longueur. Trop contraignant et trop de code spécifique.

J’ai donc déporté une partie de l’intelligence côté code dans de la data brute. J’ai enfin réussi à régler le truc et ça fonctionne. J’ai économisé beaucoup d’espace côté code, je suis repassé dans la première page (en dessous des 16 Ko) ce qui me rassure pour la suite.


Ici on peut voir que j’avais déjà commencé à attaquer la seconde page de code généré.

Voici comment mes messages étaient gérés jusqu’à présent :

Un bon compromis entre lisible et utilisable.

Niveau gestion des évènements, ce qui me dérangeait le plus c’était ce genre de situation :

Comme vous pouvez le voir, je dois gérer à chaque fois le bon visage à afficher, et passer explicitement la taille des messages. Ça fait beaucoup de lignes de code.

J’ai finalement restructuré mes données afin qu’un tableau soit auto-suffisant : il indique le portrait à afficher et signale lui-même qu’il se termine.


Les deux premiers caractères indiquent quel portrait afficher. Un message se termine toujours par une *.
Pour l’instant je conserve une gestion manuelle des retours à la ligne, avec des guillemets pour délimiter. C’est quelque chose que je peux aussi faire sauter, mais ça nécessite un code plus élaboré (en gros, regarder si je vais couper des mots, si oui positionner un curseur au bon endroit et commencer la page suivante à ce ce curseur). A voir, car là je perds quand même pas mal d’espace avec des blancs inutiles. Je vais y réfléchir…

C’est faisable, mas je n’ai pas prévu de le faire. A voir pour la suite.

Finalement le code est réduit à cela :

On voit un gain notable. Dans la ROM, je suis repassé sur la première page :

Je pense que c’était le dernier point « de grande ampleur » qu’il fallait solutionner pour être serein jusqu’à la fin du dev. Une bonne chose de faite donc.

1 « J'aime »

C est super intéressant. Je n y connais absolument rien en codage donc je lis tout ça avec beaucoup d intérêt.

Je me suis motivé et j’ai implémenté l’algo (que je qualifierai de complexe) pour l’affichage des textes « automatiques ». En gros, je lui passe un tableau de ce type, et il doit se débrouiller :

Comme vous pouvez le voir, plus de doubles guillemets, plus d’espacement à gérer, j’ai aussi dégagé la taille des tableaux. Bref, c’est bien plus simple. Mais l’algo en lui-même était compliqué. Surtout que je débuggue tout au papier + crayon, vu que le code écrit n’est pas celui qui est exécuté par la console.

En gros, je parcours le tableau du début, je déduis le portrait des deux premiers nombres puis j’avance et regardant si les mots vont tenir sur la ligne. Tant que ça tient, je tente le mot suivant (sans oublier l’espace en cours de route). Je saute de ligne quand ça ne tienne plus. Arrivé en bas de fenêtre (plus de ligne) je passe en mode « Attendre que l’utilisateur appuie sur le bouton ». Puis j’itère pour continuer tant que le message n’est pas terminé (nouvelle fenêtre). Si je détecte un « _ », je sais que je dois actualiser le portrait. Une « * » me dit que c’est terminé. Le tout avec des perfs acceptables pour un proc 8 bits…

Au final l’aspect le plus souvent cause d’erreur, c’est la gestion des banks. C’est vraiment l’enfer sur MS/GG et le fait de ne pas avoir à la gérer du tout sur MegaDrive (jusqu’à 4 Mo, donc largement de quoi faire un jeu) doit être bien pratique !

En bref, je suis bien content d’avoir mis ça en place. Ça va grandement simplifier l’écriture des textes et je vais pouvoir avancer plus vite.

1 « J'aime »

Petit up car je n’ai pas chômé ces vacances…

Implémentation de l’écran de fin de chapitre, qui montre ceux que l’on a terminés :

Cet écran ne dévoile pas tous les chapitres disponibles au début du jeu. Les lignes viennent se rajouter et se cocher à chaque nouvelle fin découverte.

Implémentation de l’écran de sélection du personnage également :

Il est terminé. On peut naviguer d’un personnage au suivant. Je suis quand même étonné par la vélocité de la machine pour actualiser sa VRAM. Sur cet écran, je relis depuis la ROM l’ensemble des 3 portraits (par simplicité) et ça se fait quasi instantanément.

Ce dernier écran n’a l’air de rien, mais j’ai du feinter car le portrait central ne tombe pas sur un multiple de 8 pixels. J’ai donc été contraint de le passer en sprite pour que ça soit propre, de même que le nom juste en dessous. Du coup j’en ai profité pour faire une palette sombre pour les visages sur les bords. Ça rend pas trop mal je trouve.

Sinon j’ai enfin conçu et posé sur papier mon intro et ma véritable fin. Et j’ai quasiment implémenté tout le premier Chapitre, il ne me reste vraiment que l’ending de ce chapitre.

3 « J'aime »

Bonne grosse galère aujourd’hui pour gérer mes transitions de fin de jeu (évènements automatiques puis écran des chapitres puis écran titre). J’ai fini par trouver le problème, mais c’était difficile. Le fait de ne pas avoir de debugger ça rend les choses hyper compliquées. Je n’imagine même pas de faire un jeu d’action avec un moteur physique au pixel près dans ces conditions…

Sinon j’ai retravaillé toutes mes musiques cette semaine, notamment car j’ai compris comment adoucir les sons.

Je suis lessivé ce soir, 4 heures à bloquer sur ce foutu bug et à dérouler tout l’algo dans ma tête. Je ne me sens pas reposé…

La bonne nouvelle c’est que le premier scénario est terminé et jouable du début à la fin. Un soulagement.

Il me reste encore à coder le système de sauvegarde. Je me suis documenté mais je n’ai pas encore testé. Ce ne semble pas trop complexe, par contre il va falloir être organisé car en gros, écrire ou lire dans la RAM, c’est comme accéder à un seul gros tableau ou tout est empilé. Il va falloir référence chaque variable proprement par sa position dans la tableau.

3 « J'aime »

Pfiou, rien que de te lire j’ai mal au crâne pour toi.

Premier jet du titre du jeu (pour l’écran titre) :

Ça sera sur un fond noir.

Petite amélioration avec les couleurs qui étaient encore dispo :

3 « J'aime »