Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [WIP] New project - Il est temps d'en parler - Un Shmup pour fx-CG50/Graph 90+E et fx-CG20/Prizm
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

[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


Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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.
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Massena Hors ligne Rédacteur Points: 2191 Défis: 11 Message

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 )
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

Citer : Posté le 20/01/2023 12:29 | #


Voilà qui est mieux :

------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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 ...
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Lephenixnoir En ligne Administrateur Points: 22878 Défis: 149 Message

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 !
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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() ?
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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 ...
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Mb88 Hors ligne Labélisateur Points: 537 Défis: 0 Message

Citer : Posté le 21/01/2023 23:06 | #


Woa c'est trop stylé. J'ai testé et c'est trop stylé ça tourne à 80fps
Dj_omnimaga Hors ligne Membre Points: 167 Défis: 0 Message

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.
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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_7))    {screenshot = true;};
if(keydown(KEY_8))    {record = true; };
if(keydown(KEY_9))    {record = false; };
if(keydown(KEY_DEL))    {textoutput = true;};


Après :
if(keydown(KEY_7) && usb_is_open() )    {screenshot = true;};
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...
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Lephenixnoir En ligne Administrateur Points: 22878 Défis: 149 Message

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

Dj_omnimaga a écrit :
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
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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.
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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.
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Lephenixnoir En ligne Administrateur Points: 22878 Défis: 149 Message

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
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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) ...
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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 ?
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Lephenixnoir En ligne Administrateur Points: 22878 Défis: 149 Message

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.
Mb88 Hors ligne Labélisateur Points: 537 Défis: 0 Message

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 .
Slyvtt En ligne Community Manager Points: 984 Défis: 0 Message

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 ...
------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Mb88 Hors ligne Labélisateur Points: 537 Défis: 0 Message

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 v42 © créé par Neuronix et Muelsaco 2004 - 2023 | Il y a 63 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