Kukuen

Le blog de quelqu'un

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

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.

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 ^^. 

samedi 19 février 2011

Avancement Koto #2

Pendant cette première semaine de vacances j'ai pas trop mal avancé sur le jeu. J'ai quasiment terminé le moteur 2D, il manque juste une classe d'écriture de chaines de caractères et il me reste à corriger quelques bugs que rencontrent certaines cartes graphiques.

ingame.png

Au tout début le moteur reposait sur une classe de matrice codée dans le style fonctionnel de scala, cependant, c'était très gourmand en ressources puisque la classe peut être appelée plusieurs centaine voir milliers de fois par image. Je l'ai donc remplacée par une classe codée "classiquement" et ça a doublé les performances. Dans le même genre, en regroupant les appels à openGL qui s'effectuent avec la même texture, on augmente aussi considérablement les performances lorsqu'un grand nombre de sprites est dessiné. Avec 1600 sprites, le jeu tourne à environ 200 fps sur ma machine :D.

Le jeu va créer un dossier "koto" dans votre répertoire utilisateur contenant un fichier d'options.

height=600 
width=800
fullscreen=true
game-height=500

Juste une petite explication sur l'option game-height : ça sert à compenser l'étirement du jeu sur un écran large en plein écran. En fait le jeu a toujours une taille de 800 x game-height. Bref les valeurs de game-height en fullscreen sur un écran :

  • 4/3 : 600
  • 16/10 : 500
  • 16/9 : 450

Bref, pour ceux qui veulent tester le "jeu", vous avez besoin d'avoir Java installé. Je suis preneur de tout les retours que vous pourriez avoir dessus (même si pour l'instant à part des retour de bugs y'a pas grand chose à rajouter).

Lancer le jeu

Cette semaine, je vais essayer de faire un "débogueur" de chart, un outil pour simplifier la création de charts.

Autrement, je fais part de mon avancement un peu plus régulièrement sur ce forum.

vendredi 4 février 2011

Avancement Koto #1

J'avais une idée de jeu de rythme en tête depuis un moment, mais jamais la motivation de m'y mettre sérieusement jusqu'à il y a 2 semaines. J'ai enfin commencé la programmation du jeu et fait un premier jet pour le design du jeu. L'interface va certainement changer au fur et à mesure du développement, mais l'idée globale est là :

Design #1

J'avoue, l'interface est totalement inspirée de Beatmania IIDX, par contre le gameplay est bien différent. Les joueurs de jeux de rythme auront reconnu le classique j'appuie lorsque la note atteint la barre rouge en défilement horizontal de droite à gauche.
Mais là où ce jeu est différent, c'est qu'il n'y a pas une touche par ligne mais 10 ! Regardez, les carrés dans les lignes coïncident parfaitement avec la position des touches d'un clavier ! Lorsqu'une note apparait à l'écran, une touche sur la ligne va s'allumer de la même couleur que la note, c'est donc sur cette touche qu'il faudra appuyer un fois que la note aura atteins la barre rouge. Bien évidemment la position des couleurs reste fixe, par exemple, les notes jaunes de la ligne 1 seront toujours sur la touche Y. Au final, ca donne un total de 40 touches et avec 4 touches simultanées au maximum (les 4 lignes).

Ca peut paraître bien difficile présenté comme ça, mais en vrai ça risque d'être encore pire ! :D C'est surtout destiné aux joueurs de jeux de rythme expérimentés cherchant un challenge supplémentaire.

La grosse difficulté dans la création du jeu va être la création de charts (niveaux) jouables. C'est à dire, positionner les notes en fonction de la position naturelle des mains sur le clavier afin d'avoir des charts amusantes mais aussi proposant un certain challenge, et pour ça il faudra beaucoup expérimenter...

Autrement, niveau technique c'est programmé en Scala avec LWJGL (opengl + openal). A part le design, à ce ce jour j'ai un parser de fichier de musique fonctionnel (j'expliquerais le format et comment créer une musique quand ce sera plus avancé) et un début de moteur graphique 2D.

Cette fois je vais vraiment essayer de ne pas lâcher le projet !