M R ☆ Q Q N

Le blog de quelqu'un

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 17 juillet 2014

Simulator Simulator - Infinity update

LA mise à jour que tout le monde attendait : le zoom dans l'écran ! Il est maintenant possible de jouer indéfiniment au jeu !

Bitmap-75.png

Rappel des commandes : ZQSD pour la main gauche, OKLM pour la main droite, 1 à 0 pour les doigts et maintenant molette souris et flèches haut/bas pour zoomer dézoomer.

Cliquez sur l'image pour lancer le jeu. La version QWERTY/Mac OS est dispo ici.

Valve-s-CEO-Finds-Windows-8-Unusable-2_1_.jpg With thousands hours of playtime, Simulator Simulator is tackling every other video game. You won't be needing your steam account anymore.
-Gabe Newell

Vous pouvez toujours supporter le jeu en envoyant des bitcoins à l'adresse 16yUgQFhiQUMF74kppRXzxemSbinDwu3o3, ou via PayPal.

lundi 14 juillet 2014

Simulator Simulator

/!\ Nouvelle version : Simulator Simulator 1.1 - Infinity update

Farming simulator, Train simulator, Surgeon simulator, Goat simulator, Rock simulator et autres [insérez truc ici] simulator n'ont qu'à bien se tenir car voici...
Simulator simulator : le premier simulateur de simulateur !

Un jeu réalisé en une petite semaine pour le challenge du Drancyfest 2K14.

Bitmap_75.png

Les commandes sont ZQSD pour la main gauche, OKLM pour la main droite et les touches de 1 à 0 pour le contrôle des doigts.

Cliquez sur l'image pour lancer le jeu. (Pour les utilisateurs de Mac OS, si la version AZERTY ne fonctionne pas, essayez la version QWERTY qui est disponible ici)

Template_picture_-_Xzibit_1_.jpg I heard you like playing simulators, so we put a simulator in your simulator, so you can simulate while you simulate
-Xzibit

Vous pouvez aussi supporter le jeu en envoyant des bitcoins à l'adresse 16yUgQFhiQUMF74kppRXzxemSbinDwu3o3, ou via PayPal.

samedi 4 janvier 2014

Papercraft Guacamelee

Ca faisait longtemps que je n'en avait pas fait, mais voilà un nouveau papercraft. Cette fois-ci c'est Juan l'héros de l'excellent jeu vidéo Guacamelee.

compil-juan.png

Modèle : PDF - PDO

mardi 21 mai 2013

Outil de décryptage

La semaine dernière j'ai acheté le comic d'Adventure Time et à l'intérieur il y avait 2 messages codés dans un alphabet étrange.

Je fait la liste des caractères, il y en a 26 différents : ça a tout l'air d'être une simple transposition d'alphabet. J'assigne donc à chaque caractère une lettre au pif afin de pouvoir écrire le texte sur ordinateur. Le challenge maintenant est de transposer cet alphabet vers un autre pour donner un sens au message.

  1. Technique 1 : faire du brute-force par dictionnaire, mais ça va foirer s'il y a des noms propres et je n'ai aucune idée si message a été traduit ou pas, ce qui voudrait dire brute-force soit anglais soit français. Bref, ça aurait pris une plombe.
  2. Technique 2 : chercher des mots spécifiques manuellement et affiner le résultat au fur et à mesure.

J'ai donc fait un outil qui trouve les différentes transpositions possibles de l'alphabet afin de trouver des mots spécifiques dans le message codé. L'algorithme utilisé est tout simplement un genre d'adaptation du parcours d'arbre.

Le plus dur est d'abord de trouver le premier mot ou la première séquence de mots (heureusement qu'il y avait un indice). Et une fois trouvé le reste est tout simplement de la déduction et une bonne dose d'essais. :)

L'outil est ici : http://mrqqn.net/decypher/

Pour ceux qui veulent essayer, le message codé était :

amobwozegirkezmepexxzarpwgkrimtmquezzwm-kfijmxetm
eu'ztejmuraflmfdiemtcorwstrpez
fxpfozcrpturifgpeuaorw-kfijmxetm

samedi 20 avril 2013

Papercraft butter lettuce party

Boum ! Voilà un autre papercraft de Bravest Warriors, il est inspiré de la scène finale de l'épisode Butter Lettuce.

J'ai mis environ 2 semaines à modéliser le truc, à raison de quelques heures par jour et 2 jours complets à le coller. Je commence enfin à comprendre les petites astuces pour mieux placer les languettes et faire des collages plus propres. Par contre j'ai dû charcuter l'homme-licorne dans le dos parce qu'avec pleins de petits décalages à la fin je me suis retrouvé avec un décalage de ~3 mm et impossible de placer directement la pièce finale, mais au moins ca ne se voit pas ^^. Autre imprévu : il est tellement gros (plus de 30x30x20 cm) qu'il se tordait tout le temps, du coup obligé de le renforcer avec une plaque de polystyrène... et TADAAAAA !

blp-compil.png

Pour les plus courageux, il y a 16 pages à imprimer + un correctif (j'avais des polygones dans le mauvais sens et impossible de corriger ça sans devoir tout remettre en page dans pepakura designer...). Par contre, pas d'instructions : il faudra vous aider du modèle 3D du fichier PDO (mais rien de bien compliqué). Modèle : PDF - PDO Correctif : PDF - fix.pdoPDO

Si quelqu'un le réalise, je serais très curieux de voir le résultat :) !

dimanche 24 mars 2013

Papercraft Impossibear

En encore un autre papercraft ! Cette fois-ci c'est Impossibear et son gas powered stick, un autre personnage de Bravest Warriors au même titre que Catbug. Je voulais essayer de le mettre en scène d'un manière un peu fun, du coup il se retrouve en train de forcer pour retirer son stick d'un piedestal, un peu comme dans la légende du roi Arthur.

compilation.png

Comme pour Catbug, vous pouvez télécharger le modèle au format PDF et les instruction en PNG (en anglais), ainsi que le fichier PDO.

Lire la suite

vendredi 22 mars 2013

Papercraft Dustforce

Après le papercraft Catbug, en voici un du personnage bleu de Dustforce, un de mes jeux vidéo préféré et qui a en plus une BO extraordinaire !

P1020506.jpg P1020505.jpg P1020508.jpg

Je me suis plutôt amusé à modéliser le personnage en 3D, et jamais j'avais fait quelque chose d'aussi complexe donc j'en suis plutôt fier. Par contre, j'aurai dû réduire le nombre de polygones ou augmenter la taille de la figurine, parce que c'était vraiment chiant à coller. (Et il faudrait aussi que j'ai du meilleur matériel)

Pour les courageux qui veulent essayer de le faire, y'a 3 pages à imprimer dans ce zip. Et comme je n'ai pas fais d'instructions de montage, vous pouvez toujours télécharger le fichier PDO pour voir comment le monter.

Juste un petit correctif : pour le manche à balais, j'ai utilisé un pic à brochette à la place du papier. Dans un moment de folie j'ai du croire qu'on pouvait plier du papier canson comme ça sur un diamètre de 5mm...

samedi 16 mars 2013

Papercraft Catbug

Papercraft de Catbug (un personnage de l'excellente web-série de Pendleton Ward, Bravest Warriors) modélisé et assemblé ce samedi :)

P1020470.jpg

P1020483.jpg

Télécharger le modèle : PDF ou PNG

Télécharger les instructions (en anglais) : PNG

Télécharger le fichier pepakura : PDO (s'ouvre avec pepakura viewer)

Lire la suite

jeudi 28 février 2013

Revolbeat : Les sets

Qui dit jeu de rythme, dit forcément musiques et chansons. Voici un petit post sans réel rapport avec l'avancée du projet où je vais juste présenter comment j'imagine la progression du joueur parmi les musique du jeu.

Dans l'idéal, j'aimerai faire un peu plus qu'une simple liste de musiques jouables (si j'arrive déjà à ce stade, je serai déjà très content du résultat). Je pense baser la progression du joueur sur un système de sets à la manière d'un Guitar Hero ou d'un DJ Hero, chacun orienté autour d'un thème et composé de :

  1. 5-6 songs d'environ 2'-2'30. A titre de comparaison, sur IIDX les musiques font entre 1'30 et 2' mais sont vraiment très intenses. Sur Guitar Hero, il me semble qu'on est à peu prêt sur du 4-5 minutes, mais là soit ça devient vite chiant, soit ça joue sur l'endurance du poignet, et ce n'est pas ce que je veux mettre en avant dans ce jeu. Bref, je pense qu'une durée entre les 2 devrait être adaptée, mais ça reste aussi à confirmer.
  2. 1 boss-song d'une difficulté supérieure et débloquée après avoir réussi les musiques précédentes (rien de plus classique).
  3. 1 Mashup final qui est la petite idée que j'ai eu l'autre jour. Son principe est simple : c'est un bonus qui s'enchaine directement après la boss-song dans le cas où le joueur fait un score proche du perfect. Sa musique est tout simplement un remix des musiques précédentes. Et ce mashup est la pour 2 raisons : comme on ne peut le déclencher qu'à la fin de la boss-song et uniquement dans le cas où l'on fait un super score, il devrait considérablement augmenter le stress du joueur et par conséquent démultiplier le sentiment de réussite ou de frustration (en fonction de si l'on réussit ou pas). En plus, le fait d'utiliser un mashup plutôt qu'une musique inédite devrait provoquer un sentiment d'accomplissement et de clôture, comme si l'on passait en revue tout ce que l'on a réussi juste avant. J'y pense juste au moment où j'écris ce post, et ça a dû être inconscient quand j'en ai eu l'idée, mais j'ai dû la repiquer de Rhythm Tengoku : le jeu est lui aussi réparti en plusieurs sets dont chacun comporte à la fin un remix de tout ses mini-jeux. Je n'étais pas totalement sûr de ce concept, mais maintenant que j'en connais l'origine, je suis persuadé qu'il faut le mettre en place.

Par contre, je ne pense pas mettre de progression entre les sets, tout simplement parce qu'un jeu de rythme ne se joue pas comme un plateformer. Il est très frustrant (dans le mauvais sens) de devoir faire et refaire une musique que l'on n'aime pas pour débloquer la suite du jeu, même si l'on joue la meilleur chart du monde. Je me rappelle très bien quand je jouais à pop'n music avoir été forcé de passer par quelques musiques plutôt insoutenables... Je pense que contrairement aux autres types de jeux où la musique vient soutenir l'action, quand elle est au coeur du gameplay, elle est bien plus soumise au goûts du joueur, ce qui fait que la qualité d'un niveau est bien plus subjective. Bref, comme on me l'a si bien appris ne fais pas aux autres ce que tu ne voudrais pas qu'on te fasse, je ne force donc pas à jouer sur tous les niveaux. Ca et puis le fait que tant que ça reste un projet maison, je ne pourrais pas faire des dizaines de sets (ni même une dizaine) et une progression sur 2 ou 3 sets ça ne vaut pas grand chose...

Bref, même si je joue du saxophone et ai fait quelques années de piano, je suis incapable de composer quelque chose de correct. Forcément, je vais avoir besoin de récupérer des musiques ailleurs. Donc soit j'utilise de la musique libre de droit, soit j'arrive à collaborer avec quelques musiciens. J'adorerai vraiment réussir à motiver plusieurs artistes pour travailler (au moins temporairement) sur la musique du jeu. Rien que pour la contrainte du temps, c'est pas spécialement évident de dénicher des musiques qui font pile la bonne durée. Je peux toujours en découper à la hache avec audacity mais je ne garanti pas un super résultat. Et je ne parle même pas du mashup, il faut quand même un certain talent pour en réaliser un... (mais je m'y essayerai quand même pour le fun) Si j'ai la chance de trouver quelques personnes motivées, on pourra faire en sorte de construire quelque chose de cohérent, autrement le jeu évoluera vers quelque chose de communautaire comme Osu! (ou partira à la poubelle, s'il est tout pourri).

Revolbeat : Avancement #1

2 semaines... Avec les recherches d'emploi et une bonne petite grippe, je n'ai pas avancé aussi vite que prévu, mais au moins, la partie "éditeur" de l'éditeur est enfin terminée ! Voilà ce que j'ai rajouté depuis la dernière fois :

Le magnétisme Screenshot_2013-02-27-15-53-03.png

Les notes sont calées sur une division de cercle, fixé à 16 et sur une division de pulsation. On peut diviser chaque pulsation en 1, 2, 3, 4, 6, 8, 12 ou 16 divisions avec la réglette sur la droite.

Les ancres

Les ancres permettent de gérer les variations de tempo et de signature (nombre de temps par mesure). Il n'y a que 3 types de signature différents : 3/4, 4/4 et 5/4, tout simplement pour alléger l'interface et parce que en jouant sur la taille de la division, on peut reproduire toutes les autres. Par exemple :

  1. 6/4, 6/8, etc... => 3/4
  2. 2/2, 2/4, 4/8, etc... => 4/4
  3. 10/4, 5/8, etc... => 5/4 (très peu utilisé dans la musique moderne, mais il n'empêche qu'on peut un jour ou l'autre tomber dessus donc autant le prévoir à l'avance)

J'ai été confronté à 2 problèmes quand j'ai implémenté l'édition des ancres :

La dépendance des événements

Dans mon modèle de données, chaque événement (note et ancre) est dépendant de l'ancre précédente, contient une référence vers celle-ci et vice-versa. Et dans le cas où l'on change l'ordre des ancres, l'ancre enfant devient le parent de son parent et inversement et pendant un court instant une ancre pouvait avoir 2 ancres enfant, ce qui déclenchait une boucle infinie. J'ai d'abord renforcé le modèle pour être sûr de n'avoir toujours qu'une seule ancre enfant en lançant une exception dès qu'une seconde ancre est ajoutée. Sauf que ça rendait le modèle "hyper-statique" (ça doit se dire, non ?) : chaque événement devant obligatoirement avoir une ancre parente (qui est indispensable pour calculer sa position exacte), il n'était plus possible d'inverser les 2 ancres du tout. Bref, j'ai transformé cette contrainte en assertion à la fin de l'algorithme d'inversion et j'ai pu tout simplement débugger l'algorithme grâce à ça.

Morale: ne pas mettre trop de contraintes sur les données.

Le format de position

Pour des raisons évidentes d'espace, les positions sont stockées uniquement avec un Int grâce à une value class (que j'expliquerai dans un prochain article) et étaient encodées de la sorte :

| mesure  | division |
| 16 bits | 16 bits  |

mesure représente l'index de la mesure et division la position de la note dans la mesure. Par exemple, pour une division de 16384 : 16384/65536 = 1/4, la note se trouve à 1/4 du début de la mesure. Le problème est que si l'on commence l'édition d'une musique et qu'à un moment on se rend compte qu'on n'est pas en 4/4 mais en 3/4 par exemple, le fait de changer de signature va décaler toutes les notes en les "compressant". J'ai dû recoder les positions en fonction de la pulsation et non plus en fonction de la mesure, de cette manière on peut changer de signature sans problème.

| pulsation | division |
| 16 bits   | 16 bits  |

Mais là, autre problème : avec 2^16 pulsations, la durée maximale qui peut être représenté est relativement courte : à 200 BPM la durée maximale est de 5.46 minutes. J'ai donc augmenté le nombre de bits représentant la pulsation, mais en diminuant le nombre de bits de division on en réduit la précision. Par exemple, à 200 BPM, avec 8 bits pour la division, une division a une durée de 1.17 ms, ce qui est plus qu'acceptable, mais à 10 BPM on arrive à 23.44 ms, ce qui n'est plus franchement précis. J'ai donc essayé de trouver une répartition de telle sorte que la durée soit suffisamment longue à pulsation élevée et qu'une division soit précise à pulsation basse. Finalement, j'en suis arrivé à ça :

| pulsation | division |
| 20 bits   | 12 bits  |

Ca donne une durée de 87.38 minutes à 200 BPM et une précision de 1.46 ms à 10 BPM, un bon compromis !

Fenêtres d'édition

3 fenêtres d'éditions qui sont accessibles en touchant un élément (qui se met alors en surbrillance):

  1. song.png Song : pour modifier l'ancre principale et l'offset de la musique
  2. note.png Note : pour modifier la position et l'angle d'une note
  3. anchor.png Anchor : pour modifier le BPM, la signature et la position d'une ancre

Ce qui m'a pris le plus de temps a été de créer tout les composants d'éditions et surtout d'améliorer la gestion de événements touch du moteur.

Par contre, ces fenêtres ont mis en avant les premières limites du moteur : comme je mélange formes et texte, je doit changer assez souvent de shader OpenGL, ce qui du coup provoque une baisse du FPS... Pour le moment, les performances restent acceptables donc je vais prioriser les fonctionnalités par rapport aux performances et continuer le dev du jeu. Je reviendrai sur le coeur du moteur une fois que j'aurai quelque chose de jouable.

Autre petits trucs

  1. Double-tap sur les boutons d'édition : les 3 boutons d'éditions sur le côté (ajouter, bouger, supprimer) ont 2 modes : note et ancre. On tape une fois pour le mode note et deux fois pour le mode ancre. Et pour éviter les erreurs de manipulations : le mode n'est actif que tant le bouton est pressé, ça évite de modifier une note ou une ancre alors que l'on voulait simplement se déplacer.
  2. Limitation du zoom
  3. Limitation de la position
  4. Suppression de événements superposés

Rien de bien compliqué en somme

Next

La prochaine étape est maintenant d'ajouter un mode lecture à l'éditeur, puis un mode de jeu. Une fois que ce sera terminé, je commencerai à vous faire tester tout ça ! :)

mardi 12 février 2013

Ouverture des sources

J'avais ouverts les dépôts il y a moment, mais je n'avais jamais diffusé les liens. Donc tant que j'y pense, voici les sources de 2 de mes anciens projets :

  1. Koto : https://bitbucket.org/mr_qqn/koto (Scala)
  2. Yokai's Song : https://bitbucket.org/mr_qqn/yokai-... (Haxe)

Et en bonus, une implémentation de parseur de fichiers SDL pour Haxe : https://bitbucket.org/mr_qqn/hxsdl. C'était un test pour faire du parsing en mode "fonctionnel", mais les performances sont catastrophiques.

J'ouvrirai les sources du moteur que je suis en train de développer une fois qu'il sera un peu plus avancé et stable, et qu'il sera bien détaché du jeu, même si je doute de son utilité à côté de libGDX.

Nouveau projet de jeu

Je pensais commencer le devblog un peu plus tard, mais suite à la demande d'un ami, je vais le débuter aujourd'hui.

J'ai donc commencé il y a quelques semaines le développement d'un jeu pour android (téléphones et tablettes), mais à raison d'une heure ou deux par soir ça n'avançait pas vraiment... Malheureusement, j'ai perdu mon emploi à Mandala la semaine dernière pour cause de liquidation judiciaire :(. J'en profite au passage pour remercier toute l'équipe de Mandala pour cette belle aventure : Nadya, Renaud, Christophe, Guillaume et Axel, ainsi que les stagiaires de passage : Simon, Marine, Alexis, Edouard, Faustine, Elsa, Jeremy et Bastien. Maintenant que je suis au chômage et avant de me lancer à fond dans les recherches d'emploi, j'ai décidé d'utiliser cette première semaine pour bien lancer le développement de ce jeu.

Comme c'est mon premier jeu tactile, je n'ai pas voulu me lancer dans un truc totalement inconnu : ce sera... *roulement de tambours* un jeu de rythme ! Quelle révélation x). J'ai eu l'idée de ce jeu suite à la frustration que j'ai eu sur Cytus (le seul jeu de rythme correct que j'ai trouvé pour tablettes android) qui a un gros problème sur tablette : 50% du temps les mains cachent une partie l'action. Je suis aussi très fan du visuel de Super Hexagon. Et quand je mélange les deux, ça donne un jeu de rythme classique où les notes se déplacent du centre vers l'extérieur du cercle. Le principal intérêt du cercle est de pouvoir justement garder le zone d'action tout le temps lisible : que l'on utilise ses pouces sur un téléphone ou ses mains sur une tablette, il sera toujours possible de garder la zone d'action totalement claire. Ce sera à confirmer dans la pratique, mais je suis plutôt confiant sur ce point.

Screenshot_2013-02-11-17-41-21.png

Le gameplay restera un beatmania-like assez classique. L'intérêt de ce type de jeu réside dans la difficulté d'exécution dû au nombre très élevé d'APM, cependant les appareils tactiles n'ont aucun retour sensitif qui s'apparenterait à celui d'un bouton (il est possible d'utiliser le vibreur comme le font certains claviers virtuels, mais généralement les tablettes n'en n'ont pas), et sans vrai retour sensitif, il est impossible d'avoir une précision correcte dans les parties intenses. L'idée là est, un peu à la manière de Super Hexagon, remplacer une partie de la difficulté d'exécution par de la difficulté de lecture en rajoutant des artefacts visuels de type rotations, flash, etc...

Je ne vais révolutionner ni le jeu de rythme ni le jeu mobile, mais ce n'est pas non plus le but. Mon objectif ici est plutôt de réaliser un jeu dont le feeling est impeccable : je veux que le jeu soit dur et que le joueur rage, mais seulement parce qu'il n'est pas encore assez doué, pas parce que le jeu est mal réglé (timings foirés, mouvements impossibles à réaliser, etc...).

Voilà pour l'idée principale.

Concernant la réalisation, j'ai voulu le développer en Haxe avec NME ce qui m'aurait permis de déployer directement pour Android et iOS, mais le fait de ne pas connaitre le fonctionnement exact du moteur pour un jeu demandant beaucoup de réactivité est un peu dérangeant. Finalement, c'est après avoir découvert l'existence d'Avian (un outil qui compile du code JVM en code natif dont pour iOS) que j'ai décidé de faire un petit moteur perso en Scala.

Je modifie le moteur au fur et à mesure que j'avance sur le jeu, histoire de ne pas coder de composant que je n'utiliserai jamais ou tellement générique qu'en fait il ne fait plus rien :p. Avec mon expérience à Mandala et en reprenant quelques petits bouts dans mon ancien moteur pour Koto, j'ai actuellement un moteur de scène 2D en OpenGL assez basique basé sur les entités qui affiche formes, sprites et textes, et qui dispatch les événements "touch". Ce n'est pas encore le cas à 100%, mais j'essaye d'optimiser au maximum le moteur pour qu'une fois un scène créée, il n'y ait pas d'allocation d'objet supplémentaires. Chose qui n'est pas vraiment évidente en Scala étant donné que le langage met en avant les objets immuables et a quelques overhead syntaxiques (par exemple la boucle for qui est en fait une expression lambda appelée N fois). C'est pas ultime, mais la vitesse de rendu m'a l'air tout à fait honorable (il n'est pas impossible que je risque de pleurer en testant sur d'autres appareils mais bon...). Ce qu'il manque actuellement au moteur est une fonction de cache en tant que texture (comme il existe en flash), pour les parties plus ou moins statiques nécessitant beaucoup de retraçage ainsi qu'une meilleure utilisation des VBO, mais je verrai tout ça quand j'en aurai vraiment besoin.

Sur ce jeu, je ne vais pas faire la même erreur que sur mon précédent jeu de rythme et qui a fait que je l'ai abandonné. Sur Koto, j'éditais les musiques dans un fichier texte en dehors du jeu, et même si le format était assez descriptif et humainement lisible, il fallait faire tellement d'aller retour entre l'éditeur de texte et le jeu qu'au final on perdait un temps pas possible pour faire un truc tout bête... Donc cette fois-ci je code les outils en même temps que le jeu ! A vrai dire, je le code même avant, c'est peut-être pas la meilleure idée, mais je sais que si j'ai un jeu jouable, j'aurai du mal à me justifier le temps de développement d'un éditeur alors que je pourrait à la place améliorer le jeu.

Aujourd'hui je n'ai pas encore la mécanique de jeu de validation des notes, mais j'ai quasiment tout le reste pour me permettre de créer des musiques :

  1. Un système de chart complet avec notes et tempo variable, qui permet une édition des données en temps réel (si par exemple je change le tempo, toutes les notes seront bien replacées)
  2. Un éditeur qui permet
    1. de se déplacer et de zoomer / dézoomer
    2. d'ajouter, déplacer et supprimer des notes

Avant de m'attaquer au coeur du jeu, il me reste 2-3 truc à terminer sur l'éditeur :

  1. Gestion des ancres : pour le tempo variable
  2. Réglage de l'offset pincipal
  3. Réglage du magnétisme : pour caler les notes sur les temps, demi-temps etc..
  4. Supprimer les notes superposées
  5. Limiter le zoom et le déplacement : histoire de ne pas se retrouver à -1 min ou avec 2 min de notes sur un même écran
  6. Améliorer la zone de déplacement : comme on a affaire à un cercle dont le "+" est au centre et le "-" à l'extérieur le feeling dans le déplacement n'est pas top

Une fois tout ça terminé, je vais m'attaquer au développement de la mécanique de jeu, de telle sorte à ce qu'il soit jouable à l'intérieur de l'éditeur pour que les itérations édition / test soient vraiment très courtes.

Voilà pour le moment. Je vais essayer de mettre au minimum un nouvel article par semaine en fonction de l'avancée, avec, je l'espère, pour la fin de la semaine une première version de l'éditeur jouable.

Ah, et au fait, son nom est Revolbeat ! :)

lundi 20 août 2012

Yokai's Song

Petit jeu réalisé en une semaine (soirs et weekend) pour un concours sur Game Jolt. C'est jouable ICI.

screen5.png

vendredi 27 mai 2011

La latence pour les nuls

Petite explication de comment fonctionne la latence dans LR2 à l'intention du forum Bemani-France. C'est pas forcément très clair, donc si y'a besoin de précision, éclaircissement, demandez :) .



dimanche 15 mai 2011

Papercraft Nyan cat

Papercraft pour rendre hommage à cette icône qu'est nyancat ! (Réalisé en 1/2 journée :D)

P1000925.JPG

P1000927.JPG

Et pour ceux qui en veulent aussi un à la maison, vous pouvez télécharger le modèle / download model.

jeudi 5 mai 2011

Scoring Koto

Pour ceux que ça intéresse, pour l'instant le scoring fonctionne comme ça :

Score = Somme( score note )
Score note :

  Perfect posGreat posGood posBad pos
Perfect timing100603620
Great timing60503017
Good timing36302514
Bad timing20171412

Bien évidemment un miss = 0

Concernant le groove, on démarre à 20 % et on rajoute (ou on retire) à chaque note :

 Perfect posGreat posGood posBad pos
Perfect timing+ 2 %+1.5%0- 5 %
Great timing+ 1.5%+ 1 %0- 5 %
Good timing000- 5 %
Bad timing- 5 %- 5 %- 5 %- 5 %

Et un miss = - 10 %

Et l'overall accuracy dans le result screen correspond à la plus mauvaise précision de chaque note :

 Perfect posGreat posGood posBad pos
Perfect timingPerfectGreatGoodBad
Great timingGreatGreatGoodBad
Good timingGoodGoodGoodBad
Bad timingBadBadBadBad

mercredi 4 mai 2011

Avancement Koto #6

Nouvelle mise à jour du jeu : alpha 2, avec comme nouveauté

  • Le système de scoring
  • Result screen (encore sans comparatif)

Et 2 songs pour jouer :

Koto alpha2-1

Donc petit récapitulatif de comment installer le jeu :

  • Avoir Java d'installé
  • Lancer le jeu
  • Au premier lancement, le répertoire du jeu est créé dans le répertoire utilisateur/koto (le répertoire utilisateur c'est le répertoire parent de "mes documents" sous windows)
  • Extraire les songs dans koto/songs
  • Relancer le jeu
  • Enjoy

Les commandes du jeu :

  • Menus : entrée, flèches et échap
  • En jeu :
    • Toutes les touches entre le 1 en haut à gauche et le ! en bas à droite
    • Hi-speed + et - avec + et - du pavé numérique
  • Result screen :
    • Droite et gauche pour le détail de la précision
    • Tab pour switcher entre les graphiques
  • Pour lancer une song en mode débug : CTRL + Entrée
  • Se déplacer dans une songs en débug :
    • Home : début de la song
    • Page down / up : marqueur suivant / précédent

Pour configurer le jeu, ca se passe dans le fichier koto/options.properties :

width=800
height=600
game-height=500
fullscreen=false
vsync=true
audio-offset=0.1

Koto alpha2-2

Pour la prochaine mise à jour je prévois :

  • sauvegarde des scores
  • clear/fail d'une song
  • ranks et les graphs qui vont avec
  • graphs du highscore
  • changement de l'api audio (openal est totalement merdique)
  • (et éventuellement je vais tenter une petite refonte du gameplay pour simplifier le jeu, ou tout du moins la lecture des notes)

Pareil qu'avant, si vous avez des bugs/suggestions, y'a toujours ce petit forum en place : http://mrqqn.net/vanilla/.

Aller, c'est reparti !

dimanche 27 mars 2011

Avancement Koto #5

Ca avance beaucoup moins vite quand on est pas en vacances, mais voici quand même une nouvelle mise à jour de Koto. Avec comme nouveautés :

  • Un écran titre

Ecran titre

  • Un écran de sélection

Ecran de sélection

(L'image de fond n'est pas de moi, je l'ai honteusement volé emprunté à cette personne, j'en changerai plus tard.)

  • Le chargement de ressources en parallèle pour pas que le jeu se bloque et plusieurs autres trucs dans le moteur de jeu qui servent vachement mais qui ne se voient pas.

Pour pouvoir tester le jeu, il est préférable d'avoir une song, en voilà une (incomplète) : http://mrqqn.net/koto/natsu-tsukuyo.zip. A dézipper dans répertoire koto/songs/.

Et pour lancer le jeu c'est toujours ici : Lancer le jeu. Et j'ai aussi mis en place un forum pour reporter les bugs : http://mrqqn.net/vanilla/

Maintenant, je m'attaque sérieusement à la création de 4-5 songs, parce qu'un jeu sans niveaux ça sert à rien ! :p

samedi 26 février 2011

Avancement Koto #4 : Créer une chart

Le jeu est maintenant suffisamment avancé pour pouvoir créer des charts à peu près convenablement (mais pas encore y jouer). Pour ceux qui voudraient essayer, je vais donc expliquer comment procéder pour créer une chart pour Koto.

Mise en place de l'environnement

  1. Si vous n'avez encore jamais lancé le jeu, lancez le une première fois pour qu'il crée le dossier de jeu et le fichier d'option
  2. Dans le dossier de jeu (répertoire utilisateur/koto, par exemple C:\Users\Julien\koto) créez un nouveau dossier. Ce sera le dossier de la chart.
  3. Copiez dans ce dossier la musique au format ogg vorbis. (Pour le moment, je ne prend que les formats ogg, c'est ça de tout recoder à la main...)
  4. Encore dans le dossier créez un fichier texte vide avec l'extension .koto
  5. Dans le fichier d'options (options.properties) ajoutez une ligne contenant debug=dossier de la chart/chart.koto.

Voilà, c'est presque prêt, il reste plus qu'à créer la chart. (Si vous lancez le jeu à ce stade là, ça va planter. Normal, le fichier .koto est vide !)

Ecrire le fichier .koto

Maintenant, la partie la plus difficile : écrire la chart. Je vais juste expliquer comment s'écrivent les chart, pas comment en faire une bien, tout simplement parce que le gameplay est encore expérimental et que je ne sais pas encore moi non plus comment faire.

L'en-tête du fichier

Tous les fichiers commencent comme ça :

(Koto Music Sheet v1)

(Informations)

Title : Natsu-Tsukuyo # ca j'explique pas
Genre : Asian Mixture
Artist : Kei Izumi
Author : Mr_Qqn

(Song Params)

File : natsutsukuyo.ogg  # nom du fichier de musique
BPM : 93  # tempo initial
Mesure Size : 4  # nombre de pulsation par mesure
Offset : 0.668  # décalage audio en secondes

(Music) # Indique la fin de l'en-tête, ce qui va suivre sera la chart

Le décalage audio correspond au temps entre l'instant 0 du fichier ogg et l'instant ou démarre réellement la musique. Ca se mesure facilement en ouvrant le fichier dans Audacity par exemple.

Les commentaires débutent avec # et s'arrêtent à la fin de la ligne. Pratique pour se repérer dans un fichier de plus de 1000 lignes.

Les notes

Ici on va positionner les notes sur le clavier et dans le temps.

On positionne les notes sur les lignes (de bas en haut) en les plaçant les unes à la suite de autres (de gauche à droite), et on les positionne à l'intérieur de chaque ligne (de gauche à droite) avec les nombre de 0 à 9. Pour indiquer un vide on utilise le caractère "_". Quelques exemples pour être plus clair :

0 _ _ _ # note 0 de la ligne 1 => W
_ 5 _ _ # note 5 de la ligne 2 => G
_ _ 2 9 # note 2 de la ligne 3 + note 9 de la ligne 4 => E + 0 (ou à)

Si la suite ne contient que des _ pas besoin de les indiquer

5 # note 5 de la ligne 1 => N
_ 6 # note 6 de la ligne 2 => J

Pour positionner dans le temps, on va grouper les notes par mesure et les notes seront réparties équitablement dans la mesure. On sépare les mesures avec une ou plusieurs lignes vides. Par exemple :

2 _ _ _  # 0/4 de la mesure 1
_ 5 _ 0  # 1/4 de la mesure 1
_ # rien
6 # 3/4 de la mesure 1

        # nouvelle mesure

3       # 0/2 de la mesure 2
_ 3     # 1/2 de la mesure 2

Pour trouver la pulsation sur laquelle tombe une note, on multiplie sa position par la taille de la mesure (qui est définie dans l'en-tête). Par exemple :

avec Mesure Size : 4
0/4 => pulsation 0 (0/4 * 4)
1/4 => pulsation 1
2/4 => pulsation 2
1/2 => pulsation 2

avec Mesure Size : 2
1/4 => pulsation 0.5 (donc pile entre les pulsations 0 et 1)
1/2 => pulsation 1

Voilà, avec tout ça vous pouvez déjà écrire des charts de base ! :) Mais voilà, il arrive qu'une musique n'ai pas tout le temps le tempo fixe ou bien il arrive qu'une mesure dure moins longtemps qu'une autre, pour ça on va utiliser des événements pour modifier ces caractéristiques.

Les événements

Les événement permettent de modifier les caractéristiques d'une chart à partir de l'endroit où ils sont indiqués. On les rajoute en fin de ligne en les séparant du caractère "|". Il est aussi possible d'en mettre plusieurs par ligne. Bref, encore un petit exemple :

5 _ _ 6 | size 2 # la taille des mesures est maintenant de 2 pulsations
_ _ _ 6 | bpm 154.2 # le tempo passe à 154.2
_ _ _ 8 | mark # place un marqueur à cet emplacement
_ | mark | bpm 125 # 2 événements ensemble

Au fait, tous les noms des sections (Informations...), des propriétés (Title...) et des événements(bpm,mark...) ne sont pas sensibles à la casse, donc on peut aussi bien écrire Title : Plop, title : Plop ou TiTlE : Plop. C'est exactement la même chose.

"Débugguer" la chart

Parcequ'on va pas relancer le jeu à chaque changement et qu'on a pas envie de réécouter 50000 fois le début de la musique, j'ai inclus quelques fonctions de "débug" pour moins s'emmerder :p.

  • Entrée ou espace : switcher entre pause et lecture
  • F5 : recharger le fichier
  • Home (ou début) : rembobiner la musique
  • Page up : aller au marqueur précédent
  • Page down : aller au marqueur suivant
  • + du pavé numérique : augmenter de hi-speed
  • - du pave numérique : réduire le hi-speed

Voilà, maintenant vous savez tout, sur comment écrire un fichier koto ! Simple n'est-ce pas ? Bon peut-être pas... Si il y a des points que vous trouvez encore obscurs, envoyez moi un message que je détaille un peu le truc.

Alors y'a quelqu'un qui tente d'en écrire une ? :p

Lancer le jeu

jeudi 24 février 2011

Avancement Koto #3

Ca y'est le lecteur de chart est terminé ! (Avant même la fin de la semaine :D) Une petite vidéo donc pour présenter un peu le jeu (musique de Kei Izumi).

La chart a totalement été fait au pif, c'est vraiment histoire de tester. Et en vrai le jeu tourne bien plus rapidement (~700 fps), c'est fraps qui pourri totalement la vitesse de jeu. Donc pas d'inquiétude concernant le timing de jeu ^^. 

- page 1 de 2