Celeste Classic sur Graph 90+E
Posté le 26/01/2022 21:08
Long story short, j'ai troqué des tests pour le label de qualité contre un port Graph 90+E de Celeste Classic avec KikooDX. Quelques heures plus tard (à ma plus grande surprise), le port est là. (@RDP)
Version actuelle : celeste.g3a
Dépôt Git : Lephenixnoir/ccleste
Rendu
L'écran de Celeste Classic est en 128x128. Sur la calculatrice, un upscale 2:2 ne passe pas en hauteur (396x224), mais on peut le faire quitte à rogner un peu l'écran. Par défaut le jeu est en 1:1, on peut passer en 2:2 avec F4.
Contrôles
- Pavé directionnel : déplacement (diagonales autorisées)
- SHIFT : Sauter
- OPTN : Dash (pas ALPHA, à cause du ghosting)
- VARS : Pause
- F1 : Save state
- F2 : Load state
- F3 : Activer/désactiver le screenshake
- F4 : Alterner entre zoom x1 et différentes positions du zoom x2
- F5 : Contrôles alternatifs
- F6 pendant au moins 1 seconde : Reset à l'écran titre
Les contrôles alternatifs sont utiles pour les joueurs qui aiment bien avoir les diagonales (qui sont dures à taper sur le pavé directionnel de la Graph 90+E).
- Contrôles 2/3 : pavé directionnel OPTN/ALPHA/x²/^, saut cos et dash tan ; pause sur sin pour pas gêner le pavé.
- Contrôles 3/3 : pavé directionnel cos/)/,/→, saut F<>D et dash sur la touche de fraction. (Je recommande celui-là).
Détails techniques
Celeste Classic est écrit en PICO-8, qui est une plateforme assez riche à base de code Lua et avec pas mal de fonctionnalités. Heureusement, des gens ont déjà réécrit les sources en C, il n'y a presque qu'à se servir.
Je suis parti de
lemon32767/ccleste (
license complexe parce qu'il n'y en a pas sur Celeste Classic), qui fait de la SDL 1.2.
Entre l'interface limitée de la SDL 1.2 et l'interface limitée de PICO-8 il n'y a vraiment rien d'extravagant :
- Le son : out.
- Les fichiers pour la config des contrôleurs et les replays de TAS : out.
- Les textures : Deux bopti_image_t et l'écran (implicite)
- Le dessin : Tout est à l'écran, on colle drect() + adaptation d'une fonction de blit manuelle.
Leaderboard des meilleurs temps
À prouver par une photo de l'écran de fin.
- KikooDX : 2:37 (8 morts)
- Exode : 2:43 (3 morts)
- Lephe' : 3:02 (3 morts)
- Potter360 : 3:11 (aucune mort)
- Bost (invité) : 5:08 (5 morts)
- Massena : 5:51 (40 morts)
État lors du premier post
Cliquez pour recouvrir
So far ça compile et j'ai le menu principal, modulo la palette qui a souffert un peu :
Stay tuned, le but étant de finir d'un seul coup (projet éclair).
Fichier joint
Citer : Posté le 26/01/2022 21:20 | #
Porter un port
Une petite question, est-ce que toute la palette pico-8 (et si possible la palette “secrete”) est disponible sur graph 90?
Citer : Posté le 26/01/2022 21:41 | # | Fichier joint
La partie que je modifie ne fait que l'I/O ; j'implémente des fonctions qui touchent à une palette mais je ne sais pas quand elles sont utilisées. Faudrait tester mais si je code bien mon truc, je suppose que tout est disponible, après tout c'est une reproduction du code original.
-
La palette est un peu casse-pieds parce que fxconv de base indexe comme ça lui plaît ; j'ai écrit un convertisseur custom qui convertit le BMP vers le format bopti P4 en gardant la numération de base pour les couleurs (guère que 30 lignes). Les graphismes ont l'air bien maintenant (à part la neige qui sort de l'écran parce que j'ai limité le dessin à 396x224 et pas 256x256).
Citer : Posté le 26/01/2022 21:50 | #
Vendre mon âme valait le coup Bon courage !
Une petite question, est-ce que toute la palette pico-8 (et si possible la palette “secrete”) est disponible sur graph 90?
La palette secrète n'est pas utilisée par CELESTE, l'implémenter n'aurait que peu d'intérêt
Citer : Posté le 26/01/2022 21:55 | #
Après avoir réglé les entrées clavier (mal recopié le code), on peut jouer ! Ça lagge un peu, je ne sais pas encore ce qui prend les perfs. Sur la vidéo ci-dessous (qui démontre que je n'arrive pas à jouer de la main gauche tout en tenant mon téléphone de la main droite) le jeu va raisonnablement vite donc au pire un coup d'overclock devrait le faire.
Citer : Posté le 26/01/2022 21:56 | #
Superbe. Massena mourrait d'envie de faire le portage depuis qu'il a vu celui sur TI-83 Premium CE, ben comme ça ça lui épargnera cette peine.
On a accès à de quoi tester quelque part ?
Citer : Posté le 26/01/2022 22:12 | # | Fichier joint
C'est vrai que Masséna voulait le faire, mais j'avais oublié, ça fait longtemps que je n'avais pas vu l'idée discutée... du coup ce sera fait
C'est encore très rude, je vous passe un G3A dès que c'est décent. Je pense finir ce soir dans tous les cas donc ça ne tardera pas.
Citer : Posté le 26/01/2022 22:31 | # | Fichier joint
Ok, donc le rendu est clairement au coeur des perfs, si je mets en x1 ça passe crème (on a 30 FPS mais sans réguler ça monte à genre 45 FPS un truc comme ça).
Je joins une démo qui se joue en x1 ; on peut passer en x2 avec F4. Les contrôles sont dans le post principal.
Ajouté le 26/01/2022 à 22:36 :
J'ai mis à jour le post principal pour que toutes les informations importantes y soient.
Citer : Posté le 26/01/2022 22:37 | #
Super beau !!! Nickel !!!
Bon si développer ça te prend une seule demie journée, on va te faire une liste de portages
Citer : Posté le 26/01/2022 22:40 | #
Merci ! Entre nous ccleste a déjà fait tout le boulot, je veux dire c'est du C pur (C++ pour tricher sur les flottants) sur de la SDL. J'ai juste changé les entrées clavier, le dessin et le chargement des deux images en gros...
C'est pas pour dire que je suis pas fier du résultat, mais plutôt que tous les ports ne sont pas aussi simples
Citer : Posté le 26/01/2022 22:43 | #
Oui, sur Magic Light j'ai fait l'inverse, de gint vers SDL 1.2 et c'est assez facile en effet. L'architecture des libs est pensée de manière très proche donc c'est relativement facile.
Bon cela n'enlève rien à ton mérite, bravo
Citer : Posté le 26/01/2022 23:06 | # | Fichier joint
Nouveau build : celeste.g3a
Citer : Posté le 26/01/2022 23:22 | # | Fichier joint
Dernier build pour ce soir : celeste.g3a
Je ne compte pas y retoucher dans le futur, sauf à optimiser le dessin en 2:2 pour qu'il fasse le plus proche possible des 30 FPS sans overclock. Vu le bourrinage actuel ça doit être possible...
Citer : Posté le 27/01/2022 07:20 | #
Incroyable. Merci infiniment. Depuis le temps qu'on voulait ce jeu
Maintenant c'est à nous de bosser je suppose...
On fait un leaderboard des meilleurs temps ?
(Celeste sans accent hein)
Citer : Posté le 27/01/2022 09:27 | #
J'ai ajouté le leaderboard (pour l'instant sans preuve) avec mon score médiocre dessus, n'hésitez pas à envoyer vos temps.
Citer : Posté le 27/01/2022 10:16 | # | Fichier joint
Nouveau (pour l'instant dernier) build : celeste.g3a
En affinant le clipping j'ai finalement éliminé le dpixel() dans le dessin des sprites. Ça reste très loin de bopti en termes d'efficacité mais du coup ça permet d'atteindre les 30 FPS en upscaling 2:2 (testé sur une partie de 5:51 mesurée heuristiquement comme 5:57 sur le PC, et confirmé que sans le limiteur de FPS le jeu va plus vite que la normale).
Citer : Posté le 27/01/2022 11:22 | #
Tu fais toujours ton recalcul de palette pixel par pixel ?
Si ta palette RGB888 est fixe, tu peux la précalculer en RGB565 au début et la réinjecter dans ton image bopti non ?
Comme ca tu gagnes ce temps de traitement, ou alors j'ai pas compris ce que tu faisais lors de la conversion de palette ;-)
Citer : Posté le 27/01/2022 11:59 | #
C'était le cas initialement parce que le code original faisait ça. Mais je l'ai changé dans ce build. Ce qui me fait dire que je devrais pousser les sources d'ailleurs
Ajouté le 27/01/2022 à 12:23 :
J'ai poussé les sources. Attention c'est bourrin : Lephenixnoir/ccleste.
Citer : Posté le 27/01/2022 16:31 | # | Fichier joint
Première run, j'ai mal aux doigts et aux bras. Uurf.
Citer : Posté le 27/01/2022 17:41 | #
Bien joué ! Je suis con j'aurais dû penser à la photo !
Citer : Posté le 27/01/2022 17:49 | # | Fichier joint
Ok j'avais un peu honte de mon vieux 9 minutes, voilà un truc décent pour moi