Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Celeste Classic sur Graph 90+E
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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//^, 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


1, 2 Suivante
Gladosse Hors ligne Membre Points: 229 Défis: 2 Message

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?
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

Citer : Posté le 26/01/2022 21:41 | # | Fichier joint


Une petite question, est-ce que toute la palette pico-8 (et si possible la palette “secrete”) est disponible sur graph 90?

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).


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 26/01/2022 21:50 | #


Vendre mon âme valait le coup Bon courage !

Gladosse a écrit :
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
ouais ouais
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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.


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor Hors ligne Administrateur Points: 2683 Défis: 18 Message

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 ?
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2403 Défis: 17 Message

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
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2403 Défis: 17 Message

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
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

Citer : Posté le 26/01/2022 23:06 | # | Fichier joint


Nouveau build : celeste.g3a

  • F4 cycle maintenant entre 1:1 et trois positions de caméra pour 2:2 (haut, centré, bas)
  • Optimisations, parce que faut pas déconner, quand pour chaque pixel de chaque blit je lis l'image bopti à la main d'une façon bourrine en C, ensuite je fais dpixel(), et en plus entre-temps j'accède à la palette, durant quoi je fais une conversion RGB888 -> RGB565, faut pas s'étonner que ça lagge. Il reste des perfs à gagner mais c'est déjà un peu mieux.

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

Citer : Posté le 26/01/2022 23:22 | # | Fichier joint


Dernier build pour ce soir : celeste.g3a

  • Ajout d'autres jeux de contrôles pour ceux qui aiment bien taper les diagonales (décrits dans le post principal). Le #3 m'a rendu heureux perso, c'est tellement mieux que les flèches directionnelles.

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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

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)
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2403 Défis: 17 Message

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 ;-)
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 27/01/2022 16:31 | # | Fichier joint


Première run, j'ai mal aux doigts et aux bras. Uurf.

Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

Citer : Posté le 27/01/2022 17:41 | #


Bien joué ! Je suis con j'aurais dû penser à la photo !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24632 Défis: 170 Message

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


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 55 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd