Tempus Fugit
A downloadable game
Tempus Fugit est un jeu de rythme conçu pour la gamejam #27 de Gamecodeur.fr, avec une contrainte graphique inspirée du fonctionnement de l'Amstrad CPC (mémoire non-linéaire).
------------------------- FORMULAIRE -------------------------
- Elève Premium de Gamecodeu depuis : 01/2019
- Langage et Framework utilisé : Lua/Love2d
- Code et graphismes réalisés par moi-même, sauf pour le modèle de la lune que j'ai reproduit dans Pyxel Edit avec un modèle.
- Pour les musiques, dans l'ordre pour le menu, la victoire et le gameover : Concerto pour 2 violons en Ré mineur (BWV1043) de Bach, en version 8 bits. Etude 10-5 de Chopin, en version 8 bits. Marche funèbre de Chopin, en version 8 bits.
Pour les trois musiques jouables en jeu, j'ai produit l'arrangement d'Au clair de la lune et de la 1ere Gymnopédie de Satie sur FL studio et j'ai refait Korobeiniki (thème 1 de Tetris) sur le même logiciel.
- Utilisation de librairies et codes externes : Rien à signaler à part la lib json.lua pour l'enregistrement des scores.
- Temps passé : ~50h, peut-être plus...
------------------------- POST MORTEM -------------------------
Au départ, je ne souhaitais pas participer afin d'avancer dans mon projet de demake de Lolo Adventures, mais j'étais trop intrigué par le challenge... et puis on s'est engrainé l'un l'autre avec Lost in Code pour participer... je le tanne à chaque jam alors je ne pouvais pas rater ça !
Premier point positif, les contraintes de la jam m'ont permis ENFIN de me lancer dans un jeu axé gameplay, pas de storytelling, pas d'univers à développer... je me suis donc lancé dans un jeu de rythme avec du score ! Il y avait sûrement plus simple à faire, mais c'est un gameplay qui m'a toujours intrigué et je voulais voir comment je pouvais m'en sortir. :)
Avant toute chose, j'ai tâché de surmonter la difficulté pour l'affichage, j'ai donc constitué tout un module de fonctions dédiées à cela. Afficher un pixel à un endroit avec des coordonnées simples à manipuler, afficher une "image", qui n'est autre qu'une simple matrice de 0, et de 1 (et de 2 pour la transparence), afficher un texte, tracer des lignes, etc... une fois fait, afficher quelque chose à l'écran devient relativement trivial, pour peu qu'on pense bien à gérer l'effacement des pixels qu'on ne veut plus.
Comme je me doutais, gérer l'apparition de cibles servant d'indication rythmique au joueur n'a pas été une mince affaire. Le problème se pose ainsi : la musique d'accompagnement se joue, et il faut s'assurer que les cibles arrivent bien au bon moment pour que ce soit rythmiquement juste, sous-entendu que les cibles doivent apparaître avant ce moment pour leur laisser le temps de descendre (et donc au joueur de les voir). Pour moi il me semblait évident que ça ne pouvait pas se gérer correctement avec quelque chose d'aussi peu stable que le deltatime, j'ai donc utilisé la musique d'accompagnement comme étalon. En effet, grâce à la fonction source:tell(), Löve renvoie la durée déjà écoulée de la source en secondes. Avec un petit calcul faisant intervenir cette durée et le tempo de la musique, j'arrive à obtenir la pulsation du morceau (le beat). J'avais donc mon référentiel pour faire apparaitre mes cibles et vérifier si le joueur appuie au bon moment. Ouf !
En résumé, j'ai encore une fois beaucoup appris en faisant la jam, notamment en sortant de ma zone de confort. Enorme merci à Lost in Code d'avoir pris le temps de bêta-tester le prototype truffé de bugs, et bien sûr merci à David sans qui tout cela me serait encore impossible aujourd'hui...
J'espère que vous prendrez plaisir à tapoter sur votre clavier en jouant à Tempus Fugit !
Lysenti
Download
Install instructions
1 - Download file
2 - Execute it
3 - Enjoy
Comments
Log in with itch.io to leave a comment.
Hyper trop dur :D mais je trouve que c'est un beau travail et une très bonne idée :)
Super cool !!! J'adore !!! J'ai hâte de lire/voir le Post mortem. ça donne envie de comprendre comment ça fonctionne un jeu de rythme.
Salut Noghost ! Oui c'est prévu, je me doutais que ça pourrait intéresser. :)
Là je bosse sur une musique de niveau intermédiaire à intercaller entre moonlight et korobeiniki, le gap est un peu ... tendu !
Merci beaucoup pour ton message.