La programmation, certainement une chose qui peut faire tourner de l’œil plus d'un avec plus ou moins de grâce. Je créé ce fil pour vous partagez le développement d'un jeu, pas de Construct 2, pas de Game Maker, pourquoi donc?
Simplement parce qu'il s'agit d'une préparation pour un entretien pour une école de Game Programming lors duquel je présenterais les sources de mon jeu qui seront "évaluées".
Le jeu sera programmé sur une bonne vieille console PlayStation2 avec le kit de développement de la team PS2DEV qui est OpenSource.
Pourquoi une console?
Pour les contraintes que ça impose. Aujourd'hui nous avons trop tendance à nous reposer sur la surenchère de mémoire RAM que contiennent nos ordi. Pour ainsi dire, "J'ai de la place donc j'en prend autant que je peux". Le but ici avec un développement sur console est un peu un retour aux sources et un défi pour moi.
Mon choix pour le langage se portera sur le C, un bon vieux langage qui tiens la route (puis aussi que j'en ai pas forcément d'autre sous la main de dispo)
Pas la peine de partir sur un truc de compliqué, je compte pas refaire un Resogun ou autre schmup.
Vu mon manque de créativité artistique, les éléments du jeu ne seront que des primitives de la librairie graphique (c'est à dire des éléments de base: triangle, carré etc...). Peut être que par la suite je verrais pour ajouter des sprites si une âme charitable accepte de m'en créer.
Donc nous incarnons un triangle ayant une pointe pouvant alterner entre trois couleurs: Rouge, Vert et Bleu (tiens c'est original ça).
Viendront alors à votre encontre une série d'ennemie (cercle rempli de couleur) qu'il faudra éliminer.
Le bestiaire (si on peut appeler ça comme ça) sera composé:
- Ennemie rouge, vert ou bleu simple. On peut détruire avec n'importe quelle arme (l'arme étant visualisée par la couleur de la pointe du triangle).
- Ennemie rouge, vert ou bleu ++. On ne doit les tuer qu'avec la bonne arme, sinon Game Over (oui je sais, c'est cruel).
- Les bosses.
Le score sera compté de la sorte:
- 10 points pour chaque ennemie tué
- Un bonus *2 si on utile la bonne couleur sur l'ennemie (le rouge sur le rouge etc...)
- Un combo multiplicateur pour chaque ennemie tué avec la bonne couleur. Il sera perdu si il n'y a pas de kill au bout de 10sec.
Le jeu se déroulera dans une arène.
Il serait un peu bête de partir de vraiment rien. J'utiliserais donc deux choses faisant partie des programmes de démonstration du kit de développement:
- L'initialisation de la manette (qui est plutôt fastidieuse)
- L'initialisation de la librairie graphique (qui est méga chiante)
Voici une petite liste des choses à faire et des choses faites:
- Initialisation de la manette
- Initialisation de l'affichage
- Faire apparaitre un triangle (la base quoi)
- Faire translater le triangle
- Faire pivoter le triangle
- Créer tir
- Afficher les ennemies
- Gérer la physique
[tab] - projectile/ennemie
[tab] - ennemie/joueur
- Compter le score + combo
- Créer les différentes phases du jeu (vagues d'ennemies etc)
- Créer les feedbacks
- Gérer la musique et le son
Vous vous en doutez à l'heure actuelle ce n'est pas bien folichon. Voici un humble exemple de ce que j'ai:
L'executable est un .elf que vous pouvez faire tourner avec un émulateur PS2.
Je ne cacherais pas qu'il m'a fallut du temps pour arriver à ça. Mais pourquoi?
ouai un gros titre pour dire qu'on rentre un peu dans le vif du sujet.
Déjà il faut imaginer un écran comme une grille (de pixel en l’occurrence).
Ensuite le point 0 , 0 ne se trouve pas au milieu de l'écran mais en haut à gauche. Encore plus fourbe, l'axe des Y (verticale donc) augmente lorsqu'on descend. En somme ça donne:
Ensuite, pour effectuer une translation des points du triangle, rien de très difficile, on augmente ou diminue les valeurs en X et Y de chaque point composant le triangle.
Viens ensuite la roation du triangle, rotation qui se fait selon l'angle du joystick droit de la manette, là je rigole un peu moins, moi qui ai toujours trouvé que les maths ne servaient pas à grand chose, aujourd'hui je me prend un retour de flamme in my face.
On commence par un petit coup d'oeil sur une manette de PS2:
Déjà vous pouvez voir que l'orientation de l'axe Y va vers le bas, de plus la manette nous envoie deux données par stick: la position sur l'axe X et Y sur une échelle qui va de 0 à 255.
Je ne sais pas pour vous, mais j'avais le pré-sentiment que pour choper mon angle j'allais galérer et je ne me suis pas trompé.
Pour les plus curieux un morceau de code où je récupère mon angle et l'applique à mon triangle.
On continu ce WIP avec une première avancée au niveau du tir.
Rien de bien extraordinaire vu que je ne peux en tirer que un.
Ce n'est pas un bug, c'est volontaire, chaque projectiles a des données qui lui sont propres, ne pouvant prédire le nombre qu'il y en aura, il faut prévoir un système pour gérer l'allocation mémoire dynamique. (uh punaise!)
Ainsi vous pouvez admirez un magnifique screenshot de mon triangle qui tire... un carré.
Oui là aussi, la librairie graphique n'est pas très gentille (en plus de ne pas être documenté) donc je suis contraint en attendant l'intégration des fonctions permettant de gérer la mémoire que de faire avec un vulvaire carré.
La trajectoire du projectile est une simple fonction affine:
Pour télécharger le programme: ici
Voilà pour aujourd'hui, bien entendu je suis entièrement à l'écoute de remarque, d'idée ou tout autres commentaires.
Pour moi qui ne suis pas dans l'imagerie (les mathématiques m'ont poussé à fuir comme un lâche vers le génie logiciel), les différentes équiations et bouts de codes sont plutôt intéressants. Même si j'avoue que faute de bien manier les espaces 2D, je ne comprends certains bouts qu'à demi-mot.^^
Mais voir l'avancement du projet et les différentes étapes est intéressant. Je trouve que tu expliques plutôt bien, du moins de mon point de vue.
Au passage, je trouve en effet le choix de support très pertinent. Déjà parce que j'ai de l'affection pour les contraintes (Oulipo, tout ça), mais aussi parce que les développeurs ont souvent tendance à prendre autant de mémoires qu'ils peuvent, et à faire des sacrifices sur le framerate en cas de besoin. Au moins, sur une PS2, pas de choix : faut être économe !
Mes jeux sur itch.io
Mes vidéos sur Youtube
Mes reins sur ebay (pas encore disponible)
Merci pour le soutient
Et je confirme, ils ont même été très économe sur la documentation
Bonjour, je viens de lire ton post et je trouve la démarche très intéressante donc je continuerai à suivre tout ca régulièrement. Je ne suis pas un grand développeur de jeu vidéo mais j'ai déjà développé des petits jeux chez moi. Pour en revenir sur ton jeu je pense que le calcul des nouvelles coordonnées de ton vaisseau doit prendre en compte le dt (delta time) qui est le temps entre deux appels au calcul. Je m'explique en gros dans le code actuel si une personne à 40 de fps et une autre 80 de fps le personnage de celui avec 80 se déplacera plus vite. J'espère avoir pu t'aider un minimum
Merci de mettre en avant ce point, j'y avais pensé mais je ne cache pas qu'à l'heure actuelle je ne sais pas comment faire (une petite recherche devrait résoudre ça), après vu qu'il s'agit d'une console je ne pense pas qu'il y aura beaucoup de changement d'une console à l'autre.
Je mettrais bientôt en ligne un nouveau post concernant la détection de collision cercle/cercle et cercle/triangle.
Bonne journée
Pour travailler avec le dt il faut utiliser l'horloge de l'ordinateur en stockant la valeur d'horloge dans une variable et quand on revient dans la fonction on prend la nouvelle valeur moins l'ancienne diviser par la frequence. C'est pas bien bien expliqué mais tu trouveras beaucoup d'information de ça sur google. Sinon pour les collisions je te propose un très joli tuto qui est bien expliqué. http://fr.openclassrooms.com/informatique/cours/theorie-des-collisions
Pour l'instant je suis plutôt sur des formes simples, j'ai juste le codage à faire,
la partie algo + calcul étant déjà posée sur papier.
Je jetterais un coup d'oeil à ton lien, moi je me suis plutôt inspiré de celui-ci:
http://www.phatcode.net/articles.php?id=459
Toutes mes excuses pour la pause, je dois faire face à pas mal de taff au boulot plus le côté IRL qui s'en mêle, j'essaie de faire un nouvel article au plus vite (pour ceux que ça intéresse bien sur )
Yeah, un autre shmupper \o/
Cool comme projet de bosser sur ps2, ça doit pas être simple par contre de faire avec les limitations de la machine.
J'vais bien suivre l'avancement de tout ça
<a href="http://www.indiedb.com/games/minimalshmup" title="View MinimalShmup on Indie DB" target="_blank"><img src="http://button.indiedb.com/popularity/medium/games/26505.png" alt="MinimalShmup" /></a>