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 » [WIP] New project - Il est temps d'en parler - Un Shmup pour fx-CG50/Graph 90+E et fx-CG20/Prizm
Slyvtt Hors ligne Maître du Puzzle Points: 2359 Défis: 17 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


1, 2, 3, 4 Suivante
Mb88 Hors ligne Rédacteur Points: 1173 Défis: 3 Message
Potter360 En ligne Rédacteur Points: 1252 Défis: 2 Message

Citer : Posté le 15/01/2023 22:01 | #


Oh la vache, je viens de tester c'est incroyable ! Ca tourne vraiment bien ! Je sens que ça va être carrément utile pour pas mal de jeux *o*
Globalement, coder. Mal, mais coder.
Hackcell Hors ligne Maître du Puzzle Points: 1529 Défis: 11 Message

Citer : Posté le 15/01/2023 22:06 | #


un shoot'em up ? bon bah pas le choix, va falloir faire un danmaku
Mb88 Hors ligne Rédacteur Points: 1173 Défis: 3 Message
Slyvtt Hors ligne Maître du Puzzle Points: 2359 Défis: 17 Message

Citer : Posté le 15/01/2023 22:15 | #


Hackcell a écrit :
un shoot'em up ? bon bah pas le choix, va falloir faire un danmaku

Peut-être pas tout le jeu mais je pense que certains passages devraient s’en rapprocher. C’est pour ça que je voulais savoir ce qu'il était envisageable d’avoir au niveau des performances.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 24502 Défis: 170 Message

Citer : Posté le 15/01/2023 22:16 | #


Première réaction : hey y'a pas de screenshot !
Deuxième réaction : wait c'est moi qui suis supposé le coder

Hackcell a écrit :
un shoot'em up ? bon bah pas le choix, va falloir faire un danmaku

Ça fait longtemps que j'avais pas entendu ce nom-là tiens xD
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1173 Défis: 3 Message
Dark storm En ligne Labélisateur Points: 11640 Défis: 176 Message

Citer : Posté le 15/01/2023 23:13 | #


$ stat -c %w Programmation/Casio/Touhou/
2020-05-28 21:25:44.396688940 +0200

On va dire que c’est de bonne guerre >_>
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Massena Hors ligne Ancien rédacteur Points: 2221 Défis: 11 Message

Citer : Posté le 16/01/2023 00:02 | #


Des waifus ! Des waifus !
Mb88 Hors ligne Rédacteur Points: 1173 Défis: 3 Message
Slyvtt Hors ligne Maître du Puzzle Points: 2359 Défis: 17 Message

Citer : Posté le 16/01/2023 08:46 | #


Dark storm a écrit :
$ stat -c %w Programmation/Casio/Touhou/
2020-05-28 21:25:44.396688940 +0200

On va dire que c’est de bonne guerre >_>

Kézako ?!?
Il y a eu une tentative de Shmup dans le style Touhou ? C'est ça ?
J'ai regardé ce que je trouvais en shmups, mais je n'ai rien trouvé, je ne savais pas qu'il y avait qqchose.
Juste un iKaruga like sur nSpire et Ti84/83.

Massena a écrit :
Des waifus ! Des waifus !


Si tu veux en être pour les graphismes, aucun problème pour intégrer ce que tu veux dans le jeu (bon en ayant un semblant de scénario tout de même.
Mais sinon les waifus, elles risquent de ressembler à Tata Simone
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 24502 Défis: 170 Message

Citer : Posté le 16/01/2023 09:10 | #


Darks a tenté de faire un Touhou, mais c'était en 2020 (ou alors il y a plus touché depuis 2020)
See https://www.planet-casio.com/Fr/forums/topic16516-1-touhou.html
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: 2359 Défis: 17 Message

Citer : Posté le 16/01/2023 09:25 | #


Ah merci Lephé, je ne connaissais pas ce projet.

DS, c'est vraiment très joli, j'ai testé vite fait la démo, ça a du potentiel. Vraiment plus le temps de bosser dessus ?

J'étais plus parti sur un style starship à la sauce Gradius/R-Type/iKaruga .... en "top down",
Mais si il y a des volontaires pour un "fork" en "left right" dans le style waifus, ce serait super cool.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Dark storm En ligne Labélisateur Points: 11640 Défis: 176 Message

Citer : Posté le 16/01/2023 10:41 | #


Vraiment plus le temps de bosser dessus ?

Pour être honnête, j'ai arrêté de travailler dessus car je n'ai pas trouvé de structure algorithmique qui me convenait pour gérer des dizaines d'objets par frame. Sachant que certains suivent des comportements physiques newtoniens (trajectoires rectilignes vitesse/direction), d'autres des patterns fixes, et d'autres un mix pattern/physique/autoguidage sur le joueur.
J'avais tenté un truc à coup de pointeurs sur fonction, mais j'étais pas convaincu.

Note que si quelqu'un a une idée, je suis chaud pour reprendre un peu le projet, d'autant plus si Azur permet de ce genre de performances :o
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24502 Défis: 170 Message

Citer : Posté le 16/01/2023 10:55 | #


Pour être honnête, j'ai arrêté de travailler dessus car je n'ai pas trouvé de structure algorithmique qui me convenait pour gérer des dizaines d'objets par frame.

Un système à l'ECS ? (C'est pas codé dans Azur encore mais ça viendra.)

En gros ce que ça ferait c'est que tu aurais un tableau de projectiles rectilignes, un tableau de projectiles autoguidés, etc. Ça te permettrait ensuite d'update par batch avec des bonnes boucles bien optimisée puisque tu pourrais appliquer la formule rectiligne à tous les projectiles rectilignes d'un bloc (pas en parallèle parce qu'on n'a pas de SIMD, mais presque).

Ultimement le code s'en fout un peu de comment tu fais le dispatch ; les pointeurs sur fonction ça prend pas mal de place donc c'est pas idéal, mais tant que tu arrives à te convaincre que ton code est lisible et que les performances suivent, y'a plein de façons de faire qui sont satisfaisantes.
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: 2359 Défis: 17 Message

Citer : Posté le 16/01/2023 12:24 | #


Perso je gère ça par le moteur de particules.

En fait j'ai une classe particule avec une méthode update et une méthode render.
La classe update fait le boulot au niveau de chacune des particules pour calculer sa nouvelle position en fonction d'un certain nombre de paramètres (pattern, point de départ, delta t de la frame, ...).

Je gère au niveau du "jeu" via une collection dans un std::vector qui se charge à chaque frame d'appeler la méthode update/render de chaque élément particule.

La collection est aussi capable de gérer la disparition et la création des particules (par exemple un nouveau tir, ou un tir qui sort de l'écran/qui touche un ennemi).

En fait c'est pas hyper compliqué en soit, surtout avec le C++ et les conteneurs (de la STL, je sais c'est pas bien de dire "de la STL"), le piège est surtout au niveau de la quantité d'entités à brasser, il faut avoir des algos efficaces car ça peut vite devenir lourds en calculs. Et on a un overhead à utiliser ce genre de choses (calculs et mémoire).
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Dark storm En ligne Labélisateur Points: 11640 Défis: 176 Message

Citer : Posté le 16/01/2023 16:10 | #


Hmm, je connaissais pas la théorie derrière les ECS, mais c'est un peu ce sur quoi j'étais parti de base. Connaissant la théorie, je vais peut être trouver un design pattern qui me convient et sera suffisamment performant pour ce que je veux faire
Clairement les trucs à coup de STL je suis pas hyper chaud, même si ça a sûrement ses avantages. Un truc aussi KISS que possible en C sera très bien

Ça peut être un truc sympa à creuser en tout cas.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Slyvtt Hors ligne Maître du Puzzle Points: 2359 Défis: 17 Message

Citer : Posté le 16/01/2023 16:17 | #


Bein en fait la STL est juste une aide, en fait le système est clairement basé sur les ECS.

La STL c'est juste pour aider à maniper un grand nombre d'objets sans ce prendre le chou dans les allocations/libérations de mémoire et pour ne pas avoir à ce refaire à chaque fois toute la base pour avoir des tableaux ou des listes chaînées de tel ou tel type d'objet.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 24502 Défis: 170 Message

Citer : Posté le 16/01/2023 16:29 | #


Indépendamment des choix techniques ce serait cool si tu t'y remettais :3
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: 2359 Défis: 17 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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
1, 2, 3, 4 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 45 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