[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 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
Citer : Posté le 27/01/2023 10:35 | #
Hello All,
pour info, j'ai commencé hier à travailler sur l'importation d'un décors de fond, pour importer automatiquement des TileMaps et des TileSets de l'éditeur Tiled.
C'est pas très beau et surchargé (donc pas taper Massena, idem Tituya), car pas du tout optimisé (le gros du taf était focalisé sur la possibilité d'importer effectivement les data) et ça tourne encore à 45-50FPS avec :
- le shader des étoiles en fond (Starfield)
- le décors en background importé de Tiled (avec grosso modo 30% de la surface d'écran tracée avec gestion de transparence)
- les ennemis qui bougent
- les tirs et les impacts
Ca peut éventuellement descendre à 35FPS si il y a les 3 tirs (normaux, boost et lasers en simultané, mais là je vous raconte même pas le nombre de sprites qu'il y a d'affichés à l'écran, c'est juste indécent)
Ce qui me laisse pas mal de marge je pense pour faire des choses, sachant que clairement c'est le rendu qui sera le bottleneck, les temps d'updates sont ultra-marginaux.
Bien entendu là c'est sans OC.
Avec OC paramètre F5 de PTune3, on passe à 75-80FPS et 60FPS mini avec tous les tirs, donc ultra ultra large.
Ma feuille de route à venir :
Partie décors :
- animer le décors avec le parallaxe (glissement de la droite vers la gauche pour donner l'avancement du vaisseau).
- animer des éléments du décors (clignotements, sprites animés, ...)
- interaction avec le décors (collisions possibles avec certaines tiles) qui imposent donc de suivre un "chemin" dans le niveau
Partie mouvement :
- améliorer le système de trajectoires sur base de Splines pour rendre la vitesse des ennemis plus constante.
- rendre les satellites sur une trajectoire (possibilité d'avoir des patterns plus complexes)
- possibilité de transformer les trajectoires (grossissement/rétrécissement, translation et rotation)
Partie interaction / gameplay :
- implémenter les tirs ennemis (avec une IA minimale)
- implémenter les hits des tirs ennemis sur le joueur
- implémenter les collisions avec les ennemies
- implémenter le tir des satellites
- implémenter un système de bonus (points, upgrade tir/satellites/... )
autres :
- plein de trucs dont boss "multi-morceaux et multi-hitboxes"
- selon vos vos idées, vos envies, ....
Bref, la fin, c'est pas pour demain.
on maintient un petit @RDP pour quand elle sortira.
Citer : Posté le 27/01/2023 11:35 | #
C'est super de voir ta progression dans ton projet, et le rendu !
Surtout en connaissant que le merveilleux Outrun (sur G90, faut pas abuser ) à été fait par le même artiste !
Courage Sly, et continue comme ça, tu as tout notre respect ! En tout cas le mien.
Citer : Posté le 27/01/2023 18:56 | #
Woa c'est trop beau ! Le tileset est extraordinaire !
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 27/01/2023 19:03 | #
Le Tileset vient de OpenGameArt, je suis trop nul personnellement pour faire cela : Space Merc Redux: Platform Shmup tileset
https://opengameart.org/content/space-merc-redux-platform-shmup-tileset
Citer : Posté le 28/01/2023 09:27 | #
J'ai mis en ligne rapidement hier soir une petite vidéo pour montrer la vitesse du jeu IRL :
Réalisé sans overclock sur fx-CG50/Graph 90+E, on tourne vers 45-50FPS.
Sur Prizm (fx-CG20), on est plutôt vers 20-25FPS.
Chaque frame comporte grosso modo 220 à 250 Sprites.
Lors des tirs, on peut atteindre ~600 à 700 Sprites et là on descend vers 30-35FPS sur la fx-CG50.
Je pense qu'on peut gagner en bossant plus sur le rendu du particules :
- lors des tirs (bullets patterns avec de multiples fois le même sprite)
- lors du rendu du fond par tileset (une image d'origine avec ensuite plein de calls à des azrp_subimage_p8( )
L'optimisation viendra en son temps ...
Citer : Posté le 29/01/2023 21:28 | # | Fichier joint
Un état des lieux à la fin du WE.
Donc cette fin de semaine, gros travail de fond sur deux points principaux :
- création d'un manager avancé des événements liés au clavier (key pressed/released : état de la touche durant la frame courante et key hold pressed/released : durée de maintient/relâchement de la touche), cela servira un peu plus tard dans le jeu.
- refonte du moteur de rendu du décors de fond pour prendre en compte plusieurs couches de tuiles afin d'avoir des environnements plus complexes.
J'ai fait un niveau de test avec un tileset étendu dont voici une petite vidéo. IRL cela tourne à 30FPS sans OC, les tuiles de décors sont un élément lourd graphiquement..
Voici une petite capture vidéo depuis la machine, donc un peu plus lente (2 fois plus lente en fait que IRL).
Je joins une version compilée en g3a qui correspond à ma version interne v0.3.7 afin que vous puissiez tester et faire vos retours/commentaires/critiques.
Ciao
Sly
Citer : Posté le 29/01/2023 21:33 | #
PS : j'ai oublié, pour sortir, il faut faire [SHIFT]+[EXIT]
Citer : Posté le 29/01/2023 21:39 | #
Fiouh, 684 ko c'est un mastodonte déjà ton add-in ! Même Rogue Life il fait pas autant. xD
Par rapport aux versions précédentes (en horizontal) je trouve que les contrôles sont un peu "rigides" - j'aurais envie pouvoir me déplacer à l'écran plus vite, surtout quand on voit la vitesse de certains de ces projectiles sur spline.
Citer : Posté le 29/01/2023 21:43 | #
Pas de problème, je peux changer la vitesse du joueur, c'est un paramètre qui existe (j'ai l'intention d'avoir divers vaisseaux avec leur vitesse et puissance de feu paramétrable).
J'avoue que pour le moment, j'ai pas "tuné" ce genre de paramètres pour le moment, je suis sur le moteur du jeu, mais c'est en toute logique suffisamment versatile pour être changé facilement. Mais je note
Citer : Posté le 29/01/2023 22:06 | #
Fiouh, 684 ko c'est un mastodonte déjà ton add-in ! Même Rogue Life il fait pas autant. xD
J'embarque un tileset en png de 512*1024 pixels
Une rationalisation des tiles va vite s'imposer
Citer : Posté le 30/01/2023 08:35 | #
Pas de problème, je peux changer la vitesse du joueur, c'est un paramètre qui existe (j'ai l'intention d'avoir divers vaisseaux avec leur vitesse et puissance de feu paramétrable).
J'avoue que pour le moment, j'ai pas "tuné" ce genre de paramètres pour le moment, je suis sur le moteur du jeu, mais c'est en toute logique suffisamment versatile pour être changé facilement. Mais je note
Ouah, tu vas faire plusieurs vaisseaux que l'ont pourra améliorer ? Et des vaisseaux avec chacun leurs handicap (Vitesse, vie, armes, munitions, attaques spéciales...) ? Je sais pas si c'est possible sans prendre toute la mémoire de la G90, mais ça serait vraiment super cool !
Après les voitures, on s'attaque à la conquête de l'espace ! Qui veut faire un Star Wars ? En tout cas, bravo, super boulot
Citer : Posté le 30/01/2023 08:48 | #
Le Tileset vient de OpenGameArt, je suis trop nul personnellement pour faire cela : Space Merc Redux: Platform Shmup tileset
https://opengameart.org/content/space-merc-redux-platform-shmup-tileset
Ouah, c'est méga balèze. Le truc dommage, c'est qu'on perd beaucoup de FPS sur la Prizm... Mais bon, j'en ai aucune, donc ça va
Je rigole mais c'est vraiment dommage.
Pense tu être fixé au niveau des décors ? Parce que si le jeu tourne à 20-25 fps sur Prizm, c'est pas si dommage.
Moi je me dis que cela serait bien, si on fessait un jeu de tire avec le jeu de Lephenixnoir, After Burner.
Mais bon je m'égare, bravo à toi, 40 fps, c'est magique
Citer : Posté le 30/01/2023 11:25 | #
Ouah, c'est méga balèze. Le truc dommage, c'est qu'on perd beaucoup de FPS sur la Prizm... Mais bon, j'en ai aucune, donc ça va
Je rigole mais c'est vraiment dommage.
Pense tu être fixé au niveau des décors ? Parce que si le jeu tourne à 20-25 fps sur Prizm, c'est pas si dommage.
Moi je me dis que cela serait bien, si on fessait un jeu de tire avec le jeu de Lephenixnoir, After Burner.
Mais bon je m'égare, bravo à toi, 40 fps, c'est magique
Développer un jeu, c'est toujours faire des compromis entre ce que l'on aimerait faire et ce qu'il est effectivement possible de faire compte tenu des ressources disponibles. Ensuite il faut optimiser et surtout être malin, puis en dernier recours faire les concessions nécessaires.
Actuellement, l'optimisation est proche de 0 dans la version actuelle du moteur du jeu, c'est à dire que je me contente à peu de choses près de déverser des tonnes de sprites à afficher à Azur qui se débrouille pour le rendu et avec ça, on tourne à grosso modo 30FPS. Il y a quelques piste d'améliorations à étudier et à implémenter dans le moteur. Mais tout laisse penser que raisonnablement on saura avoir un truc qui tourne bien à la fin du développement (dans Outrun il y a aussi eu cette phase où les perfs brutes étaient trop limites et où il a fallu se mettre dans l'optimisation, cela fait partie du processus normal de développement).
Je pense d'ailleurs que cette semaine sera plus ou moins dédiée à cette phase pour remonter le framerate, ainsi qu'à la création de décors "types" à intégrer dans le futur avec le tileset disponible.
Citer : Posté le 30/01/2023 12:47 | #
La superposition des décors te sert à quoi ? J'ai l'impression su'il n'y a aucune superposition entre les deux layers, mais les perfomances semblent pires.
De plus avec une telle vitesse, on s'en fiche un peu des décors... Dans l'état actuel c'est beau, mais assez illisible.
Citer : Posté le 30/01/2023 13:07 | #
Salut Massena
La superposition me sert à gérer les « croisements » dans les tuyaux et les croisillons en fond. En fait le nombre de tuiles avec effectivement 2 couches ne sont pas très importantes (sur un écran cela représente je pense environ 15-20 tuiles en moyenne).
En fait la chute de fps n’est pas liée au multi layer mais juste à la densification des éléments du decors qui est effectivement assez chargé.
Citer : Posté le 30/01/2023 13:55 | #
Je me suis amusé sur un "écran type" du jeu à regarder où il y a empilement de 2 layers:
image de base avec emplacement de la grille de positionnement des tuiles :
Et en retirant toutes les zones à un seul niveau de tuile (donc sans avoirbesoin de 2 layers) il reste 37 tuiles sur 350 maxi dans l'écran, donc environ 10% de la surface.
Pour moi la meilleure chose à faire sera d'alléger les décors. Se laisser la possibilité d'avoir 2 niveaux n'est finalement que peu impactant sur les performances.
(A noter aussi que ma gestion d'Azur dans ce cas n'est peut être pas optimale, il faut aussi que je regarde ce point plus spécifiquement, ce qui potentiellement permettra de gagner un peu sur les performances)
Citer : Posté le 30/01/2023 14:00 | #
Effectivement les performances dépendent surtout de combien de tiles tu affiches, pas fondamentalement du nombre de calques que tu te donnes.
Ici ça marche bien, pour revenir sur ce que Masséna disait c'est surtout que l'arrière-plan est très lumineux donc il attire l'oeil autant que les vaisseaux. On dirait que le tileset est plus pensé pour être un premier plan de platformer. Assombrir ou mettre une outline sur les vaisseaux aiderait par exemple à améliorer la distinction visuelle entre les différents plans.
Citer : Posté le 30/01/2023 14:40 | #
En fait tu as raison Lephé, à la base c'est un tileset de shooter / plateformer.
Le niveau ici était basé sur une maquette disponible avec le tileset, mais il faut que je fasse des vrais niveaux plus légers avec un visuel clairement distinct entre le fond (idéalement plus sombre) et les vaisseaux/éléments importants du décor (par exemple des tourelles qui tirent/des éléments à éviter, ... ). C'est juste que je suis pas très bon pour faire ce genre d'exercice
Je vais commencer par un petit test : tracer une courbe FPS = f( Nb Tiles tracées ) afin de voir quelle est la surface raisonnable à afficher pour ne pas perdre trop de millisecondes dans le rendu du décor.
Ensuite on aura une bonne base pour ne pas gâcher les performances.
Citer : Posté le 05/02/2023 17:30 | # | Fichier joint
Pour cette semaine, pas trop d'évolution, j'ai surtout mis à jour Outrun, mais tout de même voici qq MaJ :
- implémentation du scrolling du font en tuiles sur l'axe des Y, permettant d'avoir des niveaux de plus de un écran de haut.
- implémentation des tirs ennemis, pour le moment sans pattern spécifique, mais c'est prévu.
- implémentation d'un système de bonus (remise de la vie à plein et gain de satellites)
- invisible pour le joueur, écriture d'une librairie mathématique rapide en arithmétique point fixe pour les fonctions trigo (ça sert pour la rotation des satellites et sera mise à contribution plus tard).
Pour le moment je reste sur le développement du moteur, il y a plein de trucs à optimiser (taille et vitesse des bullets, nombre de hitboxes, ... ).
Voici une petite vidéo :
Je vous joins la version 0.4.0 à ce post pour tester.
N'hésitez pas à me donner votre feedback.
tirs : F1 à F3
mouvements : croix directionnelle
sortie : SHIFT + EXIT
Citer : Posté le 18/03/2023 13:03 | #
Edit : 18/03/2023 - même si pas de MaJ (mais ça va revenir) un petit @RDP ferait pas de mal car y'a eu pas mal d'avancées
avec en prime un petit screen de la version actuelle sur ma CG50 :
J'ai maintenant un scanf() / fscanf() fonctionnel, donc je vais pouvoir développer le gestionnaire de niveaux, c'était la raison de la grosse pause de ces dernières semaines.