Très expérimental de bien des façons : c'est mon premier jeu complet à la fois avec Azur et avec ma bibliothèque C++ de calcul en point fixe, il y a des shaders improvisés en assembleur, des rotations de sprites en temps réel... je suis content de la portée technique
Le principe du jeu est assez simple : vous devez bombarder toutes les bases ennemies.
Flèches directionnelles : diriger l'avion
SHIFT/ALPHA : accélérer/ralentir
F1 : lâcher une bombe
Le point rouge indique la position où les bombes vont tomber. La minimap en haut à droite indique votre position et la direction dans laquelle vous volez (en vert), ainsi que la position de toutes les bases ennemies restantes (en rouge) ou détruites (en bleu).
Le but implicite est d'aller le plus vite possible, mais comme il faut pointer vers le bas pour bien viser, il faut faire attention à ne pas s'écraser non plus !
Les images attendront, je supporte pas encore la capture vidéo avec Azur. Une description plus élaborée aussi, sans doute...
Enjoy! o/
Crédits graphiques :
L'avion vient de After Burner 2 (version japonaise), extrait par Firejoker54
Merci ! Je suis content du résultat aussi. Avec l'upscaling d'Azur le passage en 198×112 est vraiment rentable et sauve les perfs.
Le sprite d'explosion est aussi upscale en temps réel oui, tu peux le voir au fait qu'il est plus gros si tu crashes. Cela dit, comme il n'a pas de rotation, contrairement aux autres il est mis en cache pour toute l'exécution (au lieu de juste le frame courant).
Niveau FPS, le jeu est cadencé à 30 FPS, et la plupart des frames prennent entre 25 et 30 ms, ce qui veut dire que ça tourne juste. La rotation et le scaling ne sont même pas le principal problème, comme tu peux le voir sur cette ligne d'information :
Tu peux voir notamment que le rendu prend 2.874 ms, et si on compte un peu de logique + l'envoi à l'écran ça fait un total de 10.854 ms (moins que dupdate() tout seul !). Le redimensionnement des sprites a pris 6.946 ms, mais le plus long c'est la physique avec 9.586 ms.
La raison de ça c'est qu'en fait il y a 2000 points sur la map et c'est pas facile de les filtrer pour trouver ceux qui sont visibles à l'écran. La map est actuellement découpée en 16 chunks de 64×64 (sachant que la profondeur de vision c'est 50), et je charge les 9 chunks autour de l'avion, ce qui ici me donne 1146 points. Je suis obligé de faire la projection 3D de tous ces points, ce qui perd beaucoup de temps vu qu'après ça il n'en reste plus que 60 dans le champ et 42 qui sont dans l'écran ou pas loin.
Enfin bref, actuellement c'est 30 FPS et y'a pas vraiment de marge, mais y'a un million d'avenues pour optimiser et pousser plus loin.
Je suis impressionné par le rendu en effet.
Tu mets quoi dans le terme "Shaders", tu as un traitement de l'image ?
Pour la physique, effectivement il y a certainement à gagner. Peut être implémenter un quadtree ou un algo pété pour ne pas se colter les calculs sur l'ensemble des points de la map.
Les "shaders" c'est les fonctions de rendu par fragments d'Azur. Le système d'Azur est inspiré d'OpenGL, qui a pas mal étendu le terme, lequel recoupe maintenant à la fois du calcul et du rendu (vertex shader, fragment shader, etc) et est absolument nécessaire pour avoir le moindre pixel à l'écran.
J'aime bien le nom et je pense qu'on pourrait faire des vrais effets de lumière avec, mais ça c'est pas encore tout à fait prêt.
Note par exemple qu'ici j'ai un shader custom en assembleur qui dessine le sol et les dégradé de bleus dans le ciel. Et il le fait sur tout l'écran en 1.5 ms, ce qui te donne une idée de la force du système !
Il faudrait que je détache Azur et la libnum (lib point fixe) du dossier de TLT, actuellement c'est mélangé et je pourrais même pas vous fournir une version compilable aisément. Je fais ça au plus vite.
C'est vrai.
Je suis vraiment impressionné de ce qu'on peut sortir de la CG50.
Franchement c'est fou ce qu'on peut tirer de cette machine quand on la maitrise.
Pour info, dans la partie FlyBobs de ma démo, il y a jusqu'à 512 sprites d'oeil affichés en plus du fond. et ca tourne hyper bien !!! Avec Azur, je pense qu'on pourrait encore booster pour le coup.
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