[WIP] New project - Il est temps d'en parler - Un Shmup pour fx-CG50/Graph 90+E et fx-CG20/Prizm
Posté le 15/01/2023 21:55
Bon, il n'a dû échapper à personne (enfin ceux traînant du côté de la shout "projets") que je suis en cours de tripatouillage dans Azur afin de créer un Particle Engine. En effet Lephé, comme toujours, est très présent pour aider dans le lancement des projets et la résolution des problèmes techniques.
Donc en effet, je me suis donné comme objectif de créer un jeu d'un type très peu représenté sur nos chères machines : un Shmup (ou Shoot Them Up), en gros un bon gros jeux de space shooter où le but est de dégommer tout le monde.
J'en suis aux prémisses car je voulais voir ce que cela pouvait donner sur la CG50, un des problèmes attendus étant la limitation du framerate lorsque l'on doit manipuler de nombreux sprites. Et dans un shmup, des sprites, il y en a à profusion, c'est le moins que l'on puisse dire. Et très clairement, c'est le genre de jeux qui ne supporte pas trop le lag.
Je me suis donc mis en tête de comprendre comment fonctionne (du moins en surface), le moteur de rendu Azur développé par Lephé et que nous avons vu à l'oeuvre dans Afterburner.
Pour le moment nous avons un simple fond étoilé généré aléatoirement et rendu par un Shader ainsi que la possibilité de générer des explosions.
Je vous mets en PJ le g3a pour tester un peu si vous voulez regarder ce que donnent les shaders de Azur :
Au niveau des touches :
F1 à F4 permettent de montrer/cacher les infos
F6 : pour randomiser les particules de fond (étoiles défilantes)
SHIFT pour lancer un petit effet sympa d'explosion (calcul en temps réel avec le Particle Engine)
Ça tourne a quasi 100FPS sans overclock !!! Autant dire que c'est vraiment de la balle.
En Overclock F5, ça tourne à 200FPS, on frôle l'excès de vitesse, c'est une tuerie.
Je n'en dis pas plus pour le moment, c'est juste histoire de teaser un peu. Je pense que le développement se fera sur une période assez longue, n'ayant plus le même "temps libre" qu'au moment du développement de Outrun.
Donc soyez patients.
Désolé, pas de screen capture, c'est pas opérationnel avec Azur
Edit : ça correspond à ma version interne v0.1.5, donc vous voyez l'avancée du truc
Fichier joint
Citer : Posté le 19/01/2023 22:15 | #
Et une petite capture animée en GIF, c'est en slow motion pour bien voir les particules et pour moi pour caler les frames de vie de celles-ci.
ne tenez pas compte des FPS, ça tourne à 75-90fps IRL.
Citer : Posté le 19/01/2023 23:34 | #
J'aime cette explosion en couleur. Si tu veux rajouter un peu de punch tu peux mettre un flash lumineux rond pile avant l'explosion, et un léger screenshake (mais pour un shmup c'est pas une si bonne idée )
Citer : Posté le 20/01/2023 07:51 | #
Merci Massena,
en fait il y a plein de petits détails que je n'avait pas remarqué car à 90FPS c'est trop rapide. La capture d'écran permet donc de bien voir les détails pour peaufiner (merci encore pour l'aide technique Lephe') :
le flash lumineux rond de début était prévu, et le "sprite" est déjà près, c'est un cercle blanc qui apparaîtra sur 1 ou 2 frame(s) je pense, pas plus et qui sera centré sur l'explosion point d'initiation au début.
la dispersion des particules au global est, je trouve, un peu trop carrée, je pense que ça vient de ma formule d'aléa, je vais regarder cela.
le changement de couleur des particules, censé reproduire la perte de chaleur, est trop homogène à mon goût. En effet sauf au tout début où on peut voir des particules blanches et jaunes mélangées sur quelques frames, par la suite, le changement de couleur est globalement sur l'ensemble des particules. Un peu d'aléatoire serait plus intéressant visuellement.
Je vais essayer de faire ces quelques modifications, qui relèvent plus du "tuning" que de réelles modifications, pour voir ce que cela donne.
Merci beaucoup en tout cas pour tes suggestions toujours très avisées
Citer : Posté le 20/01/2023 12:29 | #
Voilà qui est mieux :
Citer : Posté le 21/01/2023 19:09 | # | Fichier joint
Voici quelques vaisseaux ennemis qui pointent leur nez :
C'est vraiment du WIP.
Je vous joins le g3a de la version en cours : pour vous amuser un peu, et surtout pour voir la vitesse du jeu IRL, car les captures ne rendent pas justice au formidable Azur de Lephe'. Ca envoie du gros gros bois de chez bois ...
Les touches :
- F1 et F2 pour les deux tirs
- SHIFT + F1 à F4 pour afficher/effacer les infos (attention ça consomme des FPS)
- Croix directionnelle pour vous déplacer
- EXIT pour sortir
et @RDP, on se reprend l'habitude ...
Citer : Posté le 21/01/2023 19:17 | #
Yo, juste une mention que si t'as beaucoup de fois le même modèle (ici de balle) on doit pouvoir économiser de la mémoire sur les commandes s'il le faut et/ou gagner des perfs avec un shader spécialisé. Ici on descend de 93 à 63 FPS si on appuie simultanément sur F1 et F2, soit 5 ms alors que la quantité de pixels est vraiment faible. La logique relativement compliquée du dessin d'images se fait payer doublement avec d'une part les petites images, d'autre part la quantité. Azur est surtout fort quand tu as de grandes surfaces à traiter !
Citer : Posté le 21/01/2023 20:08 | #
Oui je pense que ce serait utile en effet, mais j'avoue ne pas savoir comment faire
Il faudrait faire comme pour le shader de fond avec les étoiles, un stockage de tous les tracés et ensuite lancer un shader ad-hoc.
Ce qui va être pénible, ce sont les overlaps de fragment. Pour les étoiles c'est gérable, mais pour les sprites, ça va faire un paquet de trucs à mettre dans la structure de commande pour basculer d'un fragment à l'autre ... Tu vois les choses comment toi ?
Est-ce que ce serait aussi faisable dans le cas de l'explosion, pour laquelle on a une planche de sprites blancs (ronds de diamètre 1 à 8 pixels) sur laquelle j'applique un effet IMAGE_DYE pour teinter de la bonne couleur en faisant un azrp_subimage_p8_effect() ?
Citer : Posté le 21/01/2023 22:43 | # | Fichier joint
Et des Satellites paramétrables dans la classe Player (nombre, distance du vaisseau mère, vitesse, ... )
A terme ils auront aussi la possibilité de faire des shoots ... mais chaque chose en son temps ...
Citer : Posté le 21/01/2023 23:06 | #
Woa c'est trop stylé. J'ai testé et c'est trop stylé ça tourne à 80fps
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 22/01/2023 05:04 | #
J'adore, surtout l'attention au détail. Je viens d'essayer et c'est très fluide malgré ma fx-CG10 plus lente. Par contre, lorsque j'appuie sur la touche 7 ou 8, le jeu fige et je doit retirer une pile ou appuyer sur le bouton reset afin de redémarrer la calculatrice.
Citer : Posté le 22/01/2023 08:58 | # | Fichier joint
Merci pour le retour DJ_Omnimaga, c'est vrai que j'ai pas testé sur ma CG20, mais je pense que ça doit effectivement bien tourner aussi.
Ah oui c'est pas grave, j'ai juste dû oublier une condition (test si le port USB est ouvert). En fait le jeu attends de trouver une connexion avec fxlink pour envoyer un screenshot touche [7] ou une sortie vidéo touche [8]. Désolé pour le contretemps.
Avant :
if(keydown(KEY_8)) {record = true; };
if(keydown(KEY_9)) {record = false; };
if(keydown(KEY_DEL)) {textoutput = true;};
Après :
if(keydown(KEY_8) && usb_is_open()) {record = true; };
if(keydown(KEY_9) && usb_is_open()) {record = false; };
if(keydown(KEY_DEL) && usb_is_open()) {textoutput = true;};
La version corrigée est attachée.
Encore désolé pour le bug...
Citer : Posté le 22/01/2023 09:16 | #
Ça ne marchera pas SlyVTT parce que usb_is_open() renvoie true dès que Linux reconnaît le périphérique, ce qui est immédiat. Pour l'instant avec le protocole limité qu'on a avec fxlink, ce n'est pas possible... :x
J'adore, surtout l'attention au détail. Je viens d'essayer et c'est très fluide malgré ma fx-CG10 plus lente.
Let's goooo le moteur marche aussi sur Prizm
Citer : Posté le 22/01/2023 10:07 | #
Oui je savais que ca fonctionnait sur Prizm, je pensais t’avoir dit, j’avais testé Afterburner et les fractales en début de semaine.
Ok, je savais pas pour usb_is_open(), du coup je ferai des versions spécifiques (non DEBUG) sans les sorties USB.
Merci pour les infos.
Citer : Posté le 22/01/2023 14:29 | #
Quelques petits trucs en plus : les impacts des balles sur les ennemis, les lasers (la vidéo tue vraiment le truc, faut voir en live) et surtout un gros ménage dans les sources ...
Ça descend jamais en dessous de 60FPS avec tout cela, sans overclock bien sûr ... une petite vidéo pour montrer tout cela.
Le dev' va se poursuivre gentiment dans les semaines qui viennent, ça progresse bien.
Citer : Posté le 22/01/2023 15:12 | #
Hésite pas à accélérer la vidéo si tu veux un rendu plus fidèle. Un petit coup de ffmpeg fait ça assez vite
Citer : Posté le 22/01/2023 15:22 | #
En fait accélérer la vidéo sera pas beaucoup plus fidèle, en fait le mouvement des vaisseaux est "réaliste" car leur position est calculée avec le ElapsedTime qui intègre l'overhead de transfert USB. Ça se voit par contre sur les rendus des lasers qui sont pas très beaux.
Si j’accélère la vidéo, ça va faire tout aussi bizarre, les ennemis seront trop rapides, un peu comme (pour les vieux comme moi) si on regardait la fin d'un Benny Hill (la course traditionnelle de fin d'épisode) ...
Citer : Posté le 23/01/2023 18:26 | #
Suite à demande de Massena, voici une version Horizontale de mon Shmup ...
J'avoue qu'au début j'avais du mal, mais in fine, je commence à m'y faire.
Le moteur est suffisamment robuste pour s'adapter.
Voici ce que cela donne ...
On peut aussi penser à un truc variable selon les niveaux, c'est possible aussi. Voire une combinaison des deux (je pense que c'est jouable.
Donc vous en pensez quoi ? Quel est votre préféré ? Comme avant avec scrolling vertical ou comme dans cette vidéo avec scrolling horizontal ?
Citer : Posté le 23/01/2023 19:04 | #
Let's go c'est sensiblement mieux comme ça à mon avis ! Pour le coup ça me rappelle vraiment DoDonPachi (plus qu'en vertical !). La visibilité est vraiment meilleure.
Citer : Posté le 23/01/2023 19:12 | #
Je trouve aussi que ça va mieux avec le style du jeu. Comme ça ça sera (presque) comme les shoot 'em up sur arcade .
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 23/01/2023 19:16 | #
bon donc 2/2 pour le moment pour la version horizontale
Mb88, j'espère qu'à la fin ce sera mieux que les shoot 'em up sur arcade
Une NéoGéo Max portable ...
Citer : Posté le 23/01/2023 19:22 | #
Un Amiga avec un écran retourné c'est mieux !
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html