Myrne 6312

Un shooter en vue du haut et en coop, développé en 72h dans le cadre du 26e Ludum Dare

Song of the Myrne: What Lies Beneath

Un action-RPG en pixel-art

Affichage des articles dont le libellé est Game Design. Afficher tous les articles
Affichage des articles dont le libellé est Game Design. Afficher tous les articles

vendredi 31 mars 2017

Game design: Donner du punch à vos attaques


Salut les lecteurs (et les autres aussi) !

Aujourd'hui on va parler un peu de game design et si vous savez lire un titre, vous devez déjà savoir qu'on parlera plus précisément d'attaques. Pour une fois, je ne vais pas parler spécifiquement d'Unity, j'estime que ces conseils peuvent s'adapter partout (peut-être même en animation également, pas seulement en game design).

Concrètement, je vais essayer de vous expliquer comment donner de l'impact, du punch, de la juiciness... appelez ça comme vous voulez, aux attaques de corps à corps de vos personnages.

En gros, je vais tenter de vous expliquer ce qui fait la différence entre Dark Souls et Minecraft quand il s'agit des combats. Je suis en train de pas mal bosser sur toutes ces petites choses qui font que le personnage soit "ancré" dans l'univers, qu'il ait un poids quand il marche (au lieu de donner l'impression de flotter au ras du sol) et que lorsqu'il donne un gros coup de hache, qu'on sente le poids et l'inertie de l'arme.

Etape 0: L'observation



Ça c'est un bon conseil pour tout le processus de création de jeux en général: regarder comment les autres font.

Oui, super, merci Sherlock, et continue bien de nous faire croire que tu bosses quand tu est en train de jouer, aussi !

Tss tss tss... L'idée c'est, quand on joue à un bon jeu, d'observer comment les mecs ont fait et pourquoi (précisément) le jeu est si bien. Pas juste en se disant "ah bah leur combat est bien fluide et y'a de l'impact" mais en regardant vraiment pourquoi c'est fluide et impact...ant... En gros, passer d'une attitude passive ("je constate que c'est bien fait") à une attitude active ("quels éléments précis font que c'est bien fait ?").

Bon, voyons comment marche une attaque concrètement.

Etape 1: Diviser pour mieux régner



Une attaque ?! Facile ! Je fais un clic souris, le perso fait un mouvement avec l'arme puis l’ennemi prend le coup !

Faux.

Cette manière de voir l'attaque va vous mener directement à la méthode Minecraft (je précise que j'adore ce jeu bourré de qualités, hein, n'allez pas tirer des conclusions parce que je le prend pour exemple sur un truc qu'il fait moins bien que Dark Souls :D), ou à la méthode que j'utilisais jusqu'ici dans Myrne: The Quest (que je suis donc occupé à améliorer).

A savoir, la méthode du : Une attaque = une animation

Si on veut un truc qui ait un peu de la gueule, on va séparer notre action en plusieurs sous-actions (et au passage on devra sans doute la diviser en plusieurs animations, désolé :D).

Concrètement, une attaque c'est quoi ? Je la vois en 3 ou 4 parties (après ça peut se discuter, ça dépend de la précision et de la complexité que vous souhaitez avoir pour votre attaque). On va leur donner des noms qui claquent ;)

  • La préparation
  • L'exécution
  • La résolution
  • Le retour

Chacune de ses parties va avoir un rôle bien différent dans l'action, et le fait de bien séparer chacune de ces parties dans notre code va nous donner un contrôle énorme sur tout ce qui va se passer avant, pendant et après l'attaque, ce qui serait plus difficile, voir impossible avec une attaque faites en une seule animation/état.

On va passer chacune de ces actions en revue.

La préparation



Peu importe avec quoi on décide de frapper un truc, on va, dans un premier temps, préparer notre coup pour maximiser la force qu'on met dedans. Si on souhaite donner un coup de hache, on va lever cette hache bien haut, pour une attaque à la lance, on va d'abord la reculer, pareil pour un coup de poing, on va tirer notre poing en arrière.



Heu, oui, on s'en fout, non ?

Nope. L'avantage d'avoir séparé ça du reste de l'attaque (et donc éventuellement d'en avoir fait une animation à part) va nous permettre 2-3 trucs sympas.

La première chose c'est d'éventuellement accélérer ou ralentir cette phase en fonction de l'arme. Ça donne du poids à l'objet (c'est super important). Imaginons une attaque à l'arme contondante genre marteau ou massue. Personnellement, pour Myrne: The Quest j'utilise une animation par type d'armes (contondante, lames, perforantes,...) et en principe il n'y a aucun soucis à ça. Mais est-ce que vous ne pensez pas qu'il y a une différence entre manier ça

Petit marteau de guerre



et ça ?

Très gros marteau de guerre

Ah zut, donc il faut deux animations différentes rien que pour la préparation ?

Non. Ce qu'on peut faire c'est utiliser la même animation, mais en variant sa vitesse, donc en rendant la deuxième plus lente à lever au-dessus de notre tête. L'arme aura tout de suite plus de poids, ce sera plus réaliste et en plus ça ralentira la vitesse d'attaque avec cette arme, ce qui a du sens.

Le deuxième truc qu'on peut faire à cette phase, c'est s'arrêter à cette étape, attendre pour charger une attaque plus puissante par exemple. Je m'attarde pas trop sur ce point car on est un peu en dehors de l'ajout de punch/juiciness. Mais voilà, si vous voulez un gameplay où on peut charger les coups pour faire plus de dégâts, le découpage de votre attaque sera nécessaire.

Idem pour la troisième possibilité, c'est qu'on peut par exemple, comme dans Chivalry, annuler l'attaque durant cette phase (après c'est un peu tard vu que l'arme sera emportée par la force du coup et difficilement arrêtable).

L'exécution et la résolution



Voilà, le coup part pour de vrai !

Pas grand chose à dire sur l'exécution, concrètement c'est le moment où l'arme passe d'une vitesse nulle à sa vitesse maximale (le marteau tombe, la lance est propulsée vers l'avant,...). Générallement on va ajouter quelques effets ici pour donner de la présence à l'arme. Je m'étend pas dessus car c'est ce que vous faites rpobablement avec vos attaques en une seule animation: un son "woosh", un petit effet visuel de déformation de l'air,...

Là où les choses deviennent très intéressantes c'est lors de la résolution. C'est ici que le coup prend effet. On a touché quelque chose ? Si oui, quoi ? Et il se passe quoi ?

C'est ici qu'on va vraiment pouvoir ajouter autant de complexité qu'on veut. Si vous visez la qualité Dark Souls, Vermintide ou Chivalry, vous allez vous amusez. Il y a un million de trucs à faire, à voir ce qu'on a le temps (et l'énergie) de faire ou non.

La bonne nouvelle c'est qu'en divisant notre action en différentes parties, on s'est donné la possibilité d'implémenter des trucs petits à petits. Chaque détail que vous ajouterez améliorera la qualité de votre attaque, mais si vous ne faites pas un truc, ce sera facile de revenir l'implémenter par la suite, là où avec une animation unique d'attaque, venir ajouter de la complexité nous forcerait à refaire toute l'animation.

Oui bon, on a compris. On peut faire quoi alors ici ?

On peut déjà commencer par regarder si on a touché ou non un truc avec notre attaque :


  • J'ai raté mon attaque !
Pas de chance... Mais c'est intéressant parce que notre arme ne va pas se comporter de la même manière que si on avait touché un truc. Elle va en fait probablement se comporter comme elle l'aurait fait si on l'avait créée en une seule animation. Elle continue son mouvement jusqu'à la fin de l'animation.
  • Ah non, c'est bon, j'avais touché un truc en fait !
Ah bah super ! Si c'est un ennemi, il émet un cri de douleur (si c'est un rat il couine, un paysan poussera un grognement,...), l'arme fait aussi un bruit (*pof* pour un marteau, bruit de coupure pour une épée,...), du sang gicle,...

Ce qu'on a touché n'était pas vivant ? C'est l'occasion d'ajouter du réalisme, et surtout de montrer que l'arme existe vraiment dans le jeu ! Elle va faire *toc* contre une surface de bois, et à la place de la giclée de sang, on peut utiliser un système de particules pour qu'il y ait des éclats de bois. On peut même ajouter un décal (une texture) sur l'objet pour montrer que notre arme l'a abîmé (trace de coupure, de coups,...).

A noter qu'on peut aussi s'adapter au point touché sur l'ennemi, ok, on l'a touché, mais où ? Dans la tête (Vermintide rend très bien l'effet *sprotch* d'un coup de marteau de guerre sur une tête d'homme-rat) ? Sur l'épaulière en cuir (*pof*) ? Sur son casque métallique (*cling*). Les possibilités sont quasiment infinies.

Et en ce qui concerne le fait d'avoir heurté un truc avec notre arme, c'est important de noter qu'on a... ben... heurté un truc avec notre arme !

Alors je sais pas chez vous, mais perso moi quand je frappe un outil contre une surface, l'outil s'arrête ;)

Et ça c'est super important ! Si votre système d'animations vous le permet (ce qui n'est malheureusement pas le cas du mien, je suis pas super doué en anim^^'), ça peut être super d'arrêter l'animation (enfin, la partie "résolution" de votre anim) ici. Ça va ajouter de l'impact au coup.

Puisque je ne fais pas ça, à la place je vais attendre la fin de mon anim et laisser l'arme figée en position de fin (hache vers le bas, lance vers l'avant,...) quelques instants avant de passer à la phase suivante. Ça marche aussi. L'idée c'est de vraiment montrer que vous avez donné un coup avec une hache, le corps prend un moment pour se ré-équilibrer, la hache reste plantée un moment dans l'objet,...

Je ne sais pas encore si je vais laisser l'arrêt quand on ne touche rien, probablement pas

Et voilà. Je pense que c'est tout pour cette partie.

Le retour


Comme son nom l'indique, cette dernière étape est le retour à l'état initial de l'arme. On a donné notre coup de hache, qui est maintenant tournée vers le sol. On va simplement la remonter pour pouvoir recommencer le cycle lors d'une prochaine attaque ;)

Comme pour "la préparation", on pourrait ralentir ou accélérer l'animation selon le poids de l'arme et le résultat (résolution) de l'attaque. Relever une petite hache à une main qui a raté son coup ira vite, déplanter une lance du corps d'un ennemi beaucoup moins.

Ah mais c'est fini, alors ! Cool !

En fait ça dépend du niveau de complexité voulue et de comment s'est terminé votre phase de résolution. C'est tout à fait possible de juste remonter notre hache et pas trop s'embêter avec des détails.

Mais laissez-moi vous parler de l'équilibre du personnage, juste au cas où vous voulez le top du top niveau qualité.

Ici les choses deviennent un peu plus compliquées/complexes parce qu'on va toucher au gameplay et qu'on va ajouter des animations en plus, je ne vous en voudrai pas si vous évitez de toucher à ça dans un premier temps (n'oubliez pas, on peut toujours repasser dans un an pour mettre le jeu à jour, quand on a un peu plus de temps pour les détails^^).

Il y a certaines actions dans une attaque qui vont déséquilibrer le mec qui porte le coup. Je pense à deux cas en particulier :
  • Frapper un mur (ou un mec en armure de plates avec un bâton en bois, par exemple)
L'arme va rebondir et probablement déséquilibrer le personnage vers l'arrière. C'est ce qu'il se passe dans Dark Souls par exemple et bien adapter son arme à l'endroit où on combat fait partie intégrante du gameplay (agitez une épée dans un couloir étroit c'est pas le top). Concrètement on part sur une animation de déséquilibre et sur un petit temps pendant lequel notre perso ne pourra rien faire le temps de retrouver l'équilibre...
  • Frapper dans le vide
Un peu pareil sauf qu'on va plutôt trébucher vers l'avant. L'animation sera différente et si vous décidez de mettre un temps de "ré-équilibre" pendant lequel le perso ne peut plus faire d'action, c'est une bonne idée de prendre en compte le poids de l'arme (frapper dans le vide avec une claymore ou avec une dague, ça n'a pas le même effet).

Ce genre d'animation est assez complexe à la troisième personne je pense (surtout pour ne pas traverser le mur^^). En vue première personne il s'agit simplement de "pousser" l'arme en arrière/avant et éventuellement relever/baisser la caméra.


Et je pense que c'est à peu près tout pour "le retour". Notez qu'en arrivant à ce stade et en ayant tout fait, on a plus besoin de coder de cooldown (temps d'attente avant de pouvoir attaquer de nouveau) arbitraire à nos attaques, on a eu des temps d'attentes un peu partout en fonction du résultat de l'attaque et au final le cooldown correspondra vraiment à la physique de l'objet et de l'attaque.

On conclusionne ?

Conclusion


Comme je vous ai dis, je pense qu'il n'y a pas vraiment de limites à ce qu'on peut faire, si ce n'est le temps et la complexité voulue.

Mais ce qu'il est important de noter c'est que rien de tout ça n'est compliqué en soi !

On peut vite se laisser impressionné par des jeux comme Dark Souls, Vermintide ou Chivalry (à juste titre, ces jeux ont vraiment un système de melee remarquable) mais ce qu'il ne faut pas faire c'est se heurter au mur du "pfouu, c'est trop dur et les mecs sont 50 pour faire ces jeux, moi je suis juste un petit indé".

Quand on prend le temps de vraiment regarder dans le détail ce qui constitue ces jeux et leur système de combat, on se rend compte que c'est tout un ensemble de petits trucs qu'il est très simple d'implémenter dans nos petits projets indés.

Alors oui, vos animations ne seront peut-être pas aussi fluides que celles de Dark Souls, vos coups de marteau aussi satisfaisants que ceux de Vermintide, mais rappelez-vous qu'entre ces jeux et Minecraft, il y a tout un monde et qu'on est pas soit d'un côté soit de l'autre, il y a tout un milieu. Je ne veux plus voir d'animation d'attaque consistant en un bras qui fait une rotation de 90 degrés :)





jeudi 2 mars 2017

Blender: Trucs et astuces divers


Salut les lecteurs !

Ça faisait longtemps que je n'avais plus posté de tutos sur ce blog... et ça ne va pas changer vu que ce que je vous propose aujourd'hui n'est pas vraiment un tutorial mais plutôt deux trois trucs que j'utilise souvent et qu'on ne retrouve pas vraiment dans les tutos pour débutant (je crois?^^).

Quand je met quelque chose comme ça Ctrl-Tabulation/Faces, ça signifie qu'il faut appuyer sur une combinaison de touche ou une touche puis sélectionner une option dans le menu déroulant qui devrait apparaître.

Allez, c'est part~

Hey, attends ! Ça demande quoi comme connaissances de Blender ?!

Ben, je vais pas vous apprendre la base, je part du principe que vous savez faire un modèle basique, "extruder" des faces, connaitre la différence entre le mode édition et le mode objet, savoir faire un Loop Subdivide (le truc avec ctrl-r), savoir ce qu'est un mesh, un material,... la base.

Cela dit les pros ou les habitués ou les gens qui n'ont pas appris à l'arrache comme moi rouleront sans doute des yeux devant ces conseils qui leur sembleront probablement évidents^^

Cette fois on se lance !

Dupliquer un objet... mais lier son mesh et son material


On commence par un truc tout simple. J'utilise Blender sérieusement depuis environ 2 ans, et j'ai appris ça aujourd'hui, la vie est dure :'(

Lorsqu'on duplique quelque chose en mode objet, plutôt que d'utiliser Shift-D pour une simple copie, on peut utiliser Alt-D et faire une copie liée.

L’intérêt est que lorsque vous modifier le mesh (en mode édition) de l'objet (ou les objets) copié ou bien le mesh de l'objet de base, les deux (3, 4, 5...) objets sont modifiés de la même manière. Un peu comme le font les Prefabs sous Unity3D.

Cela permet par exemple d'éditer les 22 murs constituants votre muraille en un seul coup ;)

Supprimer les faces inutiles


Si vous n'êtes pas au courant, je développe des jeux-vidéos. Une des grosses différences entre la 3D pour jeu-vidéo et la 3D cinéma/image, c'est qu'on est très attentif à ne pas laisser de polygones inutiles dans nos modèles qui utiliseraient des capacités de la carte graphique pour rien.

Un truc qui arrive souvent, c'est que j'ai des faces inutiles qui se retrouvent à l'intérieur d'un modèle. Par exemple la face tout en bas d'un mât que j'aurais planté dans mon bateau pirate, puisque la face est sous le pont, elle ne sert à rien. C'est facile de la sélectionner et la supprimer, mais parfois quand j'ai travaillé comme un porc (genre pour tout ce qui est bâtiment :D), il y en a plein, et je risque de supprimer une face utile (qu'on voit à l'extérieur du modèle) par accident.

Cette face est dans un cube, elle ne sera jamais visible en jeu

Bref, il y a une technique toute bête pour sélectionnez toutes ces faces inutiles assez facilement.

Mettez vous en mode édition et veillez à ce que rien ne soit déjà sélectionné. Passez en mode d'édition de faces (avec Ctrl-Tabulation) puis appuyez sur C pour sélectionner l'outil de sélection. C'est un cercle dont la taille est réglable avec la molette de la souris. Réglez-le pour qu'il soit assez très grand.

Commencez à tout sélectionner (en mode solide, pas en wireframe) sur votre modèle grâce à cet outil. Pas de panique si vous devez (et vous devrez) changer de vue, vous pouvez terminer la sélection en ré-appuyant sur C, bouger la vue puis remettre le mode de sélection sans perdre votre sélection. Passez bien partout, on a vite fait d'oublier une petite face par-ci par-là à cause d'un mauvais angle de vue.

Une fois terminé, désactivez l'outil de sélection C puis faites Ctrl-i pour inverser la sélection. Normalement, vous vous retrouvez avec toutes vos faces internes sélectionnées. Vérifiez bien qu'aucune face sélectionnée n'est visible de l'extérieur (aucun soucis si un des edge l'est) puis faites Delete/Faces.

Quand vous avez fini (ou avant même), c'est souvent une bonne idée quand on "nettoie" un modèle de faire un petit "Ctrl-V/Remove doubles" pour fusionner les vertex qui se chevaucheraient.

Insert face, pour créer une face dans une face


Déjà eu envie de faire quelque chose comme ça ?


Découper un carré dans une face carrée, un triangle dans une face triangle, etc...
C'est un peu de la base aussi mais j'ai utilisé Blender pas mal de temps sans le savoir. Il suffit de sélectionner la face dans laquelle on veut insérer notre nouvelle face et appuyer sur la touche 'i'. Bougez la souris pour régler la taille puis validez par un clic.

Appuyez une seconde fois sur "i" pendant le choix de la taille si vous voulez faire ça sur plusieurs faces à la fois (après avoir sélectionné les faces bien entendu).



Créer des groupes de vertex


En général, dans le jeu-vidéo, on souhaite n'avoir idéalement qu'un seul mesh, un seul objet, par fichier blender. Autrement dit, si je crée un chat, je préfère n'avoir qu'un objet chat plutôt qu'avoir un objet tête, un objet oreille_droite, etc...

Je fusionne donc mes objets mais que se passe-t-il ensuite si en travaillant sur ce chat, je souhaite ne sélectionner que la tête... Je vais m'amuser à chaque fois à sélectionner toutes les faces de la tête, en faisant gaffe de ne pas sélectionner de faces du corps ? Non.

A la place je peux créer des groupes de vertex. Ce qui se passe ici :


L'idée c'est que je vais créer un nouveau groupe, avec l'icone "+". Je peux double-cliquer sur le groupe qui vient d'être créé afin de lui donner un nom explicite, comme "tête".

Ensuite (ou avant, on est pas sectaire), je sélectionne toutes les faces de la tête de mon chat, puis dans Vertex Groups, je fais "Assign". Verrouiller le groupe avec le cadenas est une bonne idée pour éviter de modifier le groupe par accident.

A partir de maintenant je peux grâce au bouton "Select" ajouter la tête de mon chat à ma sélection à tout moment, sans galère^^

Conclusion


Et voilà, c'est tout pour aujourd'hui. C'est pas grand chose mais ça m'aurait fait gagner beaucoup de temps si j'avais su ça dès le début.

J'espère que ces astuces vous aideront et que vous ne venez pas de perdre 10 minutes de votre vie à me lire :)





samedi 4 juillet 2015

Créer un bon tutorial dans votre jeu-vidéo


Salut les gens, il fait chaud et c'est pas facile de travailler. Du coup je vais plutôt vous partager un truc auquel je pensais hier.

Qu'est-ce qui fait un bon tutorial dans un jeu-vidéo ?

Quelques précisions avant de commencer


Je vais principalement me concentrer sur les jeux "d'aventures" (que ce soit des FPS, des RPG, point'n'click,...). Si vous prévoyez de faire un puzzle game ou un clone de Tetris, il y a de forte chance que mes conseils ne vous servent à rien (mais quand-même un peu).

Par tutorial j'entends non seulement l'explication au joueur des concepts du jeu mais aussi la présentation de l'univers, donc on en parlera un peu.

Je vais vous présenter "mes" idées à partir d'un exemple que je vais décortiquer, pour que tout soit bien clair.

Vous êtes prêts ? Alors on y va.

Un bon tuto



Je sais, je vous en parle souvent... Une fois encore je vais vous saouler à propos de... Morrowind ! C'est un RPG open-world dans lequel vous êtes totalement libre.

Ce jeu propose un des meilleurs tutos auxquels il m'ait été donné d'être confronté et j'ai en fait mis pas mal d'années pour me rendre compte que le début était un tutorial.

Et ça, c'est la base d'un bon tuto: le joueur ne dois pas sentir qu'il est dans un tutorial.

Allez, on va suivre ça étape par étape et voir pourquoi il est si bon.

Ne brusquons pas le joueur



Quand le joueur débarque dans votre jeu, il ne connait rien. Et c'est dans la nature humaine de ne pas aimer être en position de faiblesse. Il est donc extrêmement important de ménager le joueur et de ne pas l'écraser sous des informations inutiles dont il n'aura besoin que bien plus tard.

Si vous ne faites pas ça, il risque de se sentir stupide et être frustré ("je ne comprend rien à ce jeu") et quittera simplement le jeu en se disant "bon bah j'y rejouerai plus tard"... Ce qu'il ne fera jamais^^.

Voyons comment les devs de Morrowind on choisi d'introduire leur jeu (ce n'est pas sale).

Vous commencez dans la cale d'un bateau, en face d'un PNJ (Jiub) qui vous parle: "Nous sommes arrivés en Morrowind". Vous ne pouvez pas encore bouger mais vous pouvez regardez autour de vous.

Parfait ! *clap clap, 10/10.



C'est un avis personnel et je ne suis pas certain que tous les game designers le partageront mais je pense qu'il est extrêmement important de placer le joueur directement dans son personnage plutôt que de lancer 40 cinématiques en début du jeu (bon, techniquement, il y a une cinématique de début dans Morrowind mais on nous parle en "tu" et puisque c'est un rêve que notre personnage fait, je considère qu'on est déjà dans la peau du perso même sans être aux commandes).

Je trouve ça important car ça permet aussi de régler les options du jeu (vidéo, sensibilité de la souris, etc...) dès le début et de voir directement s'il y a un soucis technique (bug d'affichage ou quoi).

Cette courte phase est aussi l'occasion de nous donner un peu d'infos sur l'univers dans lequel on va évoluer: "Nous sommes arrivés en Morrowind". C'est toujours mieux de donner l'info au joueur par le biais de personnages plutôt que par une cinématique ou pire, du texte. Le joueur a plus de chance de prêter attention à ce que vous lui dites puisqu'il est dans le perso et c'est plus immersif.

Jiub vous fait rapidement la causette avant de s'interrompre. "Silence, voilà le garde".

Une fois encore on nous donne de manière subtile des infos sur notre personnage et l'univers. On est donc un prisonnier. Je ne vous le dirai plus mais vous remarquerez dans la suite que c'est typique de cet excellent tuto, on vous donne les infos sur le monde petit à petit, pour bien vous laisser le temps de digérer.

Le garde vous demande de le suivre. Tadaaa ! Vous pouvez maintenant marcher ! Un peu plus loin il s'arrête devant une échelle surplombée d'une trappe. "Montez sur le pont et blablabla".

Encore une bonne leçon pour votre tuto. Cette courte phase n'a l'air de rien mais le jeu vient de vous apprendre de manière totalement immersive à vous déplacer et à interagir avec les objets (ici la trappe). Je parle d’immersion car on a choisi de ne pas vous donner l'info directement. Dans un jeu moderne (où les tutos ont tendance à nous prendre pour un con et à nous noyer sous le texte), il y a de fortes chances pour que le jeu se soit mis en pause et qu'une fenêtre soit apparue pour vous dire "Utilisez les touches Z, S, Q et D pour vous déplacer", "Appuyez sur 'E' pour ouvrir la trappe"...

Mais ici non. On vous dit simplement aller, suis mois, puis ouvre cette trappe. Ça peut paraître moins bien que de dire au joueur sur quelle touche appuyer mais ce qu'on y gagne c'est qu'on ne sort pas du personnage. On ne te sors pas de la fiction pour te dire "tu est dans un jeu-vidéo, utilise ton clavier".

Bien contrôler le joueur avant de le livrer à lui-même



L'astuce c'est que tout ça se passe dans un espace confiné avec aucune autre interaction possible. En principe le joueur n'aura aucun mal a effectuer ces actions simples. On s'assure aussi qu'il maîtrisera les concepts de base (marcher, utiliser) dans la prochaine section puisqu'il est impossible d'y accéder sans maîtriser ses concepts (là où un tuto uniquement sous forme de texte échouera lamentablement).

Une fois sur le pont du bateau, vous n'avez pas 36 endroits où aller, un garde sur le quai vous attends (et bloque le passage). Des murs invisibles vous empêchent de sauter du bateau et de partir n'importe où. Je ne suis pas fan du concept de mur invisible mais c'est le seul endroit du jeu où il y en aura, on pardonnera donc ça^^. Vous parlez au garde (apprentissage: la touche action permet de parler) et créez votre personnage.

Rien de spécial à dire ici, c'est juste la création du perso. Ça peut se faire de plusieurs manières pour s'adapter au niveau du joueur (si vous découvrez le jeu, vous pouvez prendre une classe pré-faite).

On vous demande ensuite de vous rendre au bureau de recensement. Pas difficile c'est le seule endroit où vous pouvez vous rendre. Vous entrez dans le bâtiment et...

Vous êtes libre, pour la première fois. Un tout petit peu libre... Ce qui m'amène à un aspect du tuto Morrowind vraiment génial.

Ça vous aura peut-être frappé en me lisant mais je vous ait dit plus haut que Morrowind était un jeu à monde ouvert dans lequel on est très libre. Hors depuis le début du tuto vous êtes sur rails... C'est pourri, non ?

Ben en fait pas vraiment. Déjà si c'est long à lire ici, tout ça se passe en 5 min grand max en jeu (sauf la création de perso si vous êtes perfectionniste comme moi^^). Mais surtout c'est un truc important lorsque l'on traite du monde ouvert. Si vous lâchez votre joueur au milieu du monde vous allez vraiment galérer pour lui apprendre quoi que ce soit. En fait vous seriez probablement obligé de recourir à des fenêtres de texte et vous auriez du malà vérifier que le joueur a bien compris un truc avant de passer au suivant.

Même si Arcanum est un jeu génial, la première fois que j'y ait joué je n'ai pas été capable de jouer plus de 5 minutes parce que le jeu nous lâche littéralement au milieu des bois sans aucune piste (ou presque) d'où aller. C'est bien plus tard (en années) que je l'ai relancé et ait réussi à franchir le cap du "pas de tutorial".



Donc même si ça peut paraître un peu nul, c'est important de confiner le joueur dans des espaces clos et de le forcer à faire ce que vous attendez de lui avant de passer à la zone suivante. Rappelez-vous juste comme je l'ai dit au début de ménager le joueur, n'exigez pas de lui de faire des actions complexes qu'il ne devra maitriser qu'à la fin du jeu... Vous aurez tout le jeu pour lui apprendre ça, concentrez-vous sur la base.

Le but est de lâcher le joueur aussi vite que possible (tout en s'assurant qu'il maîtrise ce que vous lui avez appris). Gardez toujours en tête qu'un tuto, aussi bon soit-il est ennuyant. Un bon tuto doit être court. Quitte à refaire une voir plusieurs petites phases de tutos avancés plus tard dans le jeu.

Dans le bureau de recensement. On vous apprend encore des trucs sur votre situation: vous avez été libéré sur demande de l'empereur. Et là vous commencez à comprendre que Morrowind est en fait inspirée de l'empire romain. Le PNJ à qui vous devez parler achève la création de perso (elle est coupée en deux pour permettre au joueur de souffler, encore un bon point pour le jeu) puis vous apprend à ramasser un objet (un papier reprenant vos infos de perso).

Comme j'ai dit, vous êtes libre dans cette pièce. Et en principe tout joueur de RPG va donc commencer à looter tout ce qu'il voit... et se faire engueuler et confisquer la marchandise par le garde de la pièce.

Le jeu vient encore de vous apprendre un truc, subtilement et sans casser l'immersion. Le vol dans le jeu est puni. Les devs du jeu ont choisi de mettre cette pièce avec ce garde spécial (il ne vous arrête pas, pas d'amende, pas de bain de sang^^) plutôt que de vous laisser apprendre ça à la dure dans "le monde réel du jeu". Je le redis, c'est une très bonne idée d'utiliser des espaces confinés et contrôlés (par vous, le développeur du jeu) pour apprendre des trucs au joueurs.

Étendre le champs d'action



Vous l'aurez peut-être remarqué, mais le tuto de Morrowind, bien que très linéaire, ouvre progressivement la zone de jeu. Il n'y a pas si longtemps, vous ne pouviez pas bouger, puis vous avez pu marcher dans la cale sans interactions possibles... Puis vous êtes montés sur le pont où on vous a montré le monde mais sans vous laissez y gambader... Pour enfin vous vous retrouvez dans une pièce où vous pouvez interagir avec divers objets mais sous le contrôle de PNJs.

Muni de votre ordre de libération, vous passez dans la pièce suivante. La zone de jeu s'élargit encore. Cette zone est constituée de deux pièces, la folie furieuse^^. Ici pas de PNJ, vous êtes libre de prendre tout ce que vous voulez, notamment votre première arme, et le jeu vous apprend quelques nouveaux trucs comme crocheter un coffre verrouillé. Ces actions deviennent plus complexe donc il y a tout de même une pause avec fenêtre de texte mais c'est très concis et simple, on ne vous noie pas sous l'info.

Dans la pièce suivante (après une petite sortie dans une cour extérieure pour varier les environnements) vous donnez l'ordre de libération à un mec, qui vous donne un paquet pour Caius Cossades (et plein d'infos sur le monde), un PNJ important du jeu. Vous sortez et CA Y EST ! Cette fois vous êtes vraiment libre d'aller où vous le souhaitez et de faire ce que vous voulez !

Ah ouf, ce tuto est enfin fini alors !

Heu... Pas vraiment^^

Le tuto après le tuto



C'est ici que le génie du jeu commence. Je vous disais au début que j'ai mis du temps à comprendre que le tuto de Morrowind en était un... Et vous avez du vous dire que j'étais stupide, tout ce qu'on a fait jusqu’ici, bien qu’immersif et non insultant envers l'intelligence du joueur (important^^) sentait quand-même le tuto.

Mais maintenant qu'on est totalement libre, c'est là qu'on ne se rend plus compte de l'aspect tutorial de la suite des événements. C'est reparti^^.

Vous êtes dans le petit village de Seyda Nihyn et il vous reste plein de trucs à apprendre. Le contrôle et l'espace confiné c'est bien pour vous, développeur. Mais pas top pour le joueur. Les mecs qui ont fait Morrowind l'ont bien compris et ils ont décidé de vous lâcher dans la nature.

Mais ça ne veut pas dire qu'ils vous ont abandonné à votre sort. Ce premier village n'en a pas l'air mais il fait toujours partie du tutorial.

Premièrement on doit se poser une question cruciale: est-on vraiment libre ?

Oui... et non !


En fait ce petit village a une situation particulière sur la carte. D'un côté on est sur la côte, ce qui retire pas mal de directions possibles où aller. On est aussi au milieu de marais, ce qui décourage un peu l'exploration sauvage. Il n'y a qu'une route et on se retrouvera rapidement devant un panneau nous parlant de Balmora... Ça tombe bien, c'est là qu'on nous a dit de livrer le paquet.

Mais le village lui-même a encore des trucs à nous apprendre. On y fera notre première quête qui va nous apprendre entre autre à attendre x temps, on y visitera notre premier magasin, on aura des choix de dialogues, des PNJ nous proposent déjà de l'entrainement contre quelques pièces,... Tout ça dans un tout petit village donc le joueur n'est pas perdu.

On part ensuite pour Balmora. On peut considérer que le tuto prend fin lorsque l'on quitte Seyda Nihyn mais je considère qu'il continue jusqu'à Balmora. Arrivé là-bas vous remettez le paquet (ce qui vous demande un peu de recherche pour trouver Caius) et Caius vous parle des guildes (on peut rejoidre plusieurs guildes dans le jeu: guilde des mages, des guerriers...) qui sont un excellent moyen de se lancer dans le jeu.

Caius vous donne aussi votre première vraie quête... Mais on vous a conseillé d'aller rejoindre une guilde, c'est important ! Car lorsque vous faites sa quête. Vous allez rapidement vous faire DE-MO-LIRE par un ennemi qui surveille l'entrée des ruines où il faut aller.

J'estime que le tuto prend fin à ce moment là. Les développeurs vous poussent du nid, assez brutalement pour bien vous faire comprendre que le "je te tiens par la main" c'est fini. On vous a donné quelques pistes mais vous êtes à présent réellement libre et vous avez toutes les clés en main pour vous amuser sans prise de tête.

On conclut ?



C'était long, hein ?^^

Ce qu'il faut retenir d'un bon tuto :


  • L'immersion est importante. Un joueur ne sera pas trop dérangé par un tutorial du moment que vous ne rendez pas évident le fait que c'est un tuto. Placez le aux commandes le plus rapidement possible, évitez les cinématiques ou textes d'intro trop longs.
  • Soyez bref, allez droit au but. Un tutorial trop long va décourager le joueur. Certaines personnes n'ont le temps de jouer qu'une heure ou deux de temps en temps, ne leur volez pas ce temps libre en faisant un tuto d'une heure. Je vous parle de Morrowind et pas d'Oblivion et Skyrim pour une bonne raison. Leurs tutos sont longs et ennuyants...
  • Gardez le joueur sous contrôle. Veillez à ce qu'il maîtrise ce que vous lui avez appris avant de passer au truc suivant. Je vous conseille pour ça d'utiliser des petits espaces où les possibilités d’interactions sont limitées à ce que vous apprenez au joueur.
  • Ménagez le joueur. Faites des pauses au milieu de votre tuto pour le laisser digérer l'info.
  • Donnez-lui de plus en plus de liberté. Être enfermé dans un tuto n'est pas très agréable mais c'est nécessaire, ouvrez l'environnement et les possibilités d'action petit à petit.
  • N'apprenez pas d'actions trop complexes et présentement inutiles au joueur. Surcharger votre tutorial est une très mauvaise idée. Au pire, aménagez une seconde phase de tuto plus loin dans le jeu pour apprendre les actions complexes. Si le joueur se sent écrasé par tout ce qu'il doit apprendre, il ne va pas s'amuser.
Et voilà ! J'espère que ça vous aidera et que plus jamais... PLUS JAMAIS, je n'aurai à subir un tuto comme celui de The Witcher 2 ! J'écrirai peut-être un billet bonus pour vous parler des mauvais tutos et voir ce qu'il faut éviter.

Beaucoup de développeurs ont tendance à laisser le tutorial de côté et à l'ajouter à l'arrache lorsqu’ils ont fini leur jeu. C'est une très mauvaise décision. C'est certain que ce n'est pas la partie du jeu la plus passionnante à créer, mais c'est la première chose que verront les joueurs lorsqu'ils lanceront une partie. Comme pour tout, la première impression est extrêmement importante et ça serait une erreur de ne pas soigner son tutorial.

En attendant, amusez-vous bien et développez de bons jeux :)


mercredi 3 juin 2015

Myrne: Beyond - Les news "un peu nulles mais en fait non" du jour


Salut les lecteurs !

Aujourd'hui j'ai fait une grosse, grosse, avancée dans le développement du jeu...

J'aimerais vous montrer plein d'images, de vidéos et de trucs cool, vous faire comprendre à quel point c'est génial et à quel point c'est un vrai soulagement d'enfin avoir trouvé une solution facile à ce problème qui me stresse depuis quasiment le tout début du projet mais...

...Mais cette avancée est un peu nulle en fait vue du côté utilisateur... Bref, c'est une news technique aujourd'hui donc si vous n'êtes pas intéressés par ce genre de billets, retenez juste que j'ai travaillé sur la sauvegarde et partez donc regarder Kung Fury pendant que je raconte ma vie ;)

Voilà quand-même de quoi étancher votre soif d'images inédites (kinda) ^^

Pour ceux qui restent, la sauvegarde !

C'est un soucis assez épineux sur lequel je réfléchis depuis un moment. Comment gérer le chargement d'une sauvegarde quand le joueur a amené des objets d'un niveau dans un autre ? Comment rendre son équipement au joueur lors du chargement d'une partie ?

Ben quoi, tu l'as pas déjà fait pour What Lies Beneath ?

Oui et non. Dans What Lies Beneath, je pense vous en avoir déjà parlé mais les objets sont simplement représentés par des chaines de caractères, ou des mots si vous préférez ("epeeFer", "bouclierBois",...). Ce qui les rend assez simples à gérer puisque du coup sauvegarder et charger l'inventaire du joueur consiste simplement à écrire ces mots dans un fichier, puis lorsqu'on charge une partie, lire le fichier et écrire les mots dans l'inventaire du joueur.

Mais dans Beyond, un objet est beaucoup plus complexe que ça puisque~

Bah c'est débile, t'aurais du utiliser le même système que dans WLB !

Hé non^^. Ce qu'on gagne en simplicité dans WLB, on le perd en complexité et en flexibilité. Dans WLB, une épée en fer ne sera jamais différente d'une autre. Comme je l'ai dit, le jeu ne retiens que "epeeFer". Lorsqu'on la ramasse sur le corps encore chaud froid d'un squelette et qu'on jette un oeil à ses stats, le jeu va regarder dans un script tout ce qui concerne "epeeFer": son image, sa puissance, son nom, le jeu de mot vaseux lui servant de description, etc...

Bref, dans What Lies Beneath, les objets sont figés, ils n'ont pas vraiment d'existence physique en dehors de l'interface et des effets qu'ils ont sur les stats de notre perso. C'est donc extrêmement simple de les "transporter" d'une scène à une autre (un coffre ne contient par exemple qu'une liste de mots, qu'on va effacer si on le loot).

Mais dans Beyond, on a besoin que certains objets soient uniques, sans s'amuser à ré-écrire une liste de caractéristiques pour chacune de ses formes. Courage, je vais m'expliquer^^. Pour reprendre l'exemple de notre épée en fer, dans Beyond, le stuff a une durabilité. Notre épée va s’abîmer en combat, puis on va la réparer, ce qui va baisser sa durabilité totale mais l'empêcher de se casser tout de suite, etc... Les objets n'ont plus des valeurs figées qu'on peut aller lire dans une liste, ils sont dynamiques.

Imaginez que je veuille créer une épée en fer un peu spéciale. C'est celle de notre père. Elle est en tous points identique à une épée en fer normale, sauf qu'au lieu de s’appeler "Epée en fer", elle s'appelle "Epée de papa".

Dans WLB, je devrais éditer ma liste d'objets, copier/coller tout ce qui concerne "epeeFer" dans un nouveau truc "epeeFerPapa" juste pour changer le nom (bon en vrai je m'y prendrais un peu différemment mais vous voyez l'idée: pour chaque épée un tout petit peu différente, je devrais aller éditer un script, recompiler le projet, etc...). Imaginez le bordel absolu si je commence à ajouter la possibilité d'enchanter son équipement, sa durabilité comme dans Beyond, etc...

Bref, dans Beyond, il n'y a pas de listes décrivant un objet, les infos sont directement écrites dans l'objet.

Cliquez pour voir en grand


Ça permet de faire pleiiiin de chouettes choses, et ça rend l'ajout d'objets en jeu beaucoup plus rapide et agréable :)

...et ça rend la sauvegarde difficile, apparemment...

Oui. On ne peut donc plus se contenter d'écrire des mots dans un fichier... On va écrire toutes les stats des objets du joueur dans un fichier. Ce n'est pas très difficile à faire, c'est exactement la même chose pour la sauvegarde des stats, skills, etc dans WLB.

Avec juste un soucis... Comment va-t-on faire pour que l'objet apparaisse en jeu ? C'est ça la vraie "difficulté" (bon en vrai c'était facile mais il a fallu apprendre comment faire^^). En gros, comment savoir au moment où on recharge la partie, quel préfab (modèle d'objet, une épée en fer, par exemple^^) on doit spawner pour ensuite lui appliquer les caractéristiques enregistrées (genre le fait que l'objet soit à moitié pété contrairement au modèle par défaut ou qu'il ait une description différente) avant de la mettre dans l'inventaire du joueur ?

Il y a deux solutions :

La première, la plus classique dans la manière dont on travaille avec Unity, serait de garder une liste de tous les objets pouvant être manipulés par le joueur... Et ensuite lier cet objet (ce préfab) à quelque chose qu'on écrirait dans notre fichier de sauvegarde... Comme... un mot !

Ça voudrait dire donner un nom unique à chacun de mes objets, comme "epeeFerPapa" puis établir dans un script que l'objet "epeeFerPapa" est lié au prefab de l'épée en fer... Hé mais ! Mais c'est pas ce qu'on voulait éviter ?!

Si si^^. Ça fonctionnerait mais ça serait (presque) aussi contraignant que tenir à jour la liste des objets de What Lies Beneath ! Heureusement il y a une deuxième solution, sinon je n'écrirais pas ce billet ;)

On va apprendre à l'objet quel est le préfab (qui est en fait un fichier) qui lui est lié. Et lorsqu'on sauvegardera toutes les infos sur l'objet, on va sauvegarder ce nom de fichier avec les autres infos (puissance, nom, description,...).

Problème réglé !

Au moment où on charge la partie, on lit les infos de l'inventaire du player. Pour chaque objet on trouve le nom de son prefab (de fichier) on charge ce prefab dans le monde puis on a plus qu'à lui appliquer toutes ses caractéristiques et à le mettre dans l'inventaire. Yay!

La seule contrainte c'est d'écrire le nom du fichier dans l'objet, ce qui se résume à un copier/coller vite fait. C'est mieux que de tenir une liste de tous les objets existants à jour, pas vrai ?^^

Mais euh, au final c'est si terrible d'utiliser une liste comme dans WLB ?

OUI ! WLB est devenu un gros projet avec le temps, le temps de compilation (temps pour que je puisse lancer le jeu dans l'éditeur après avoir modifié un script) est assez conséquent et c'est vraiment pénible de devoir patienter plusieurs dizaines de secondes sans pouvoir rien faire simplement parce que j'ai corrigé une faute d’orthographe dans la description d'un objet.

A force d'ajouter des objets, la fameuse liste est aussi devenue très très grosse, ce qui pose des soucis lorsque je veux compiler le jeu en version navigateur web (pour The Sorcerer donc).

Enfin, du fait que tout soit hardcodé dans un script, ça ne laisse aucune place au modding. Je ne pense pas que Beyond sera moddable, mais cette manière de gérer les objets est un premier pas dans cette direction, un jour mes jeux seront moddables, c'est promis^^

Conclusion



Et voilà. Il reste encore pas mal de travail pour que la sauvegarde soit opérationnelle mais l'étape la plus difficile est passée et c'est un vrai soulagement pour moi :)

Désolé pour ce billet très technique, je pense qu'il y en aura encore pas mal vu qu'il reste pas mal à faire au niveau du core du jeu.

Je crée un peu de contenu aussi pendant ce temps là mais je suis arrivé à un point où il et difficile de progresser sans implémenter des changements de scène corrects (si je passe d'une carte à une autre, je dois éviter que les objets ramassés par le joueurs réapparaissent, que les PNJ reprennent leur dialogue à zéro comme si on ne leur avait jamais parlé, etc...).


samedi 6 septembre 2014

La partie 3/3 de Let's Create est arrivée !


Allez courage, on est arrivé à la fin^^



Si vous avez manqué la partie 1, c'est ici que tout commence !

Fini ?


J'espère que ce petit passage dans l'arrière-salle vous aura plût !

Comme dit dans la vidéo, si vous avez des questions ou que vous aimeriez voir un truc en particulier (bien que je pense avoir fait le tour de tout), n'hésitez pas à demander ;)

mardi 2 septembre 2014

La partie 2/3 de Let's Create est là


Tout est dans le titre^^



Si vous avez manqué la partie 1, c'est par-ici que tout se passe !

samedi 30 août 2014

Let's Create : un petit tour dans les coulisses


Hello tout le monde !

Un truc totalement inhabituel aujourd'hui^^

Premièrement c'est une vidéo, apparemment je suis en mode vidéo pour le moment, n'hésitez pas à me dire en commentaire si ça vous plait ou bien si ma voix et ma manière de mettre 4 heures pour formuler une phrase (c'est du fait de parler seul à mon PC, j'ai pas ça "dans la vraie vie"^^) vous donne envie de vous arracher les tympans.

Donc bref, Let's Create, c'est quoi ?

C'est une petite série de vidéos dans laquelle je vais créer une démo à What Lies Beneath en vous montrant un peu comment tout se déroule au niveau de la création.

Y'a pas déjà une démo à What Lies Beneath ?

Ben si mais j'aimerais bien avoir une démo ne nécessitant pas de télécharger ni d'installer quoi que ce soit. J'explique un peu ça en début de vidéo.

Bref, ça sera une mini, mini aventure pour vraiment montrer la base du jeu et ce qu'on peut faire dedans.

Le but est clairement d'attirer du monde sur la page Greenlight qui stagne un peu (76% du chemin vers le top 100).

Voilà voilà, y'aura probablement trois parties :

Partie 1


Présentation de la démo, level-design, character-design (un peu)


Et on dit merci à Skies ! Grâce à lui j'ai enfin pu mettre une vidéo 720p en ligne :)

J'ai un peu tout retouché après avoir fait la vidéo :


Il neige et on incarnera un sorcier. Contrairement aux mages, les sorciers préfèrent errer en solitaires. Vu que leur magie leur vient de la nature plutôt que des Fontaines de Jouvence, ils ne sont pas cinglés et sont généralement bons.

Si la plupart préfèrent vivre à l’écart de la civilisation, d'autres, comme celui qu'on incarne ici se mêlent un peu du monde et interviennent parfois pour empêcher les mages de faire n'importe quoi... Bien entendu pour les gens du peuple, mages et sorciers c'est la même chose.

La neige quand à elle n'en a rien à faire de tout ça ;)

Partie 2


On y écrit le dialogue du donneur de quête ainsi que la quête qui s'affichera dans le journal de quête.

Partie 3


On peuple le donjon de créatures, de pièges et d'énigmes... Je ne sais pas pourquoi je met ça au pluriel vu la taille du donjon :D



Conclusion



Et voilà !

J'espère que ce petit passage dans l'arrière-salle vous aura plût !

Comme dit dans la dernière vidéo, si vous avez des questions ou que vous aimeriez voir un truc en particulier (bien que je pense avoir fait le tour de tout), n'hésitez pas à demander ;)



vendredi 6 juin 2014

Song of the Myrne... et Unity en général en fait: texture leaking


Hello les lecteurs !

C'est la fête aujourd'hui !

Je viens de coder une correction à un soucis qui me hante depuis looooooongtemps (depuis que j'utilise des atlas de textures en fait). Et ce dans tous mes jeux.

Comme certains devs me suivent, je me suis dit que ça pouvait en intéresser quelques uns de définir le problème et la solution.

Accrochez vous à vos slips ! On descend dans les profondeurs obscures d'Unity et des trucs techniques.

Le soucis



Vous l'avez très probablement déjà vu dans What Lies Beneath, parfois, quand vous vous tenez à un endroit précis, de petites barres moches viennent se mettre dans les textures.


Ça arrive aussi parfois sur certains casques quand vous jouez en une certaine résolution.

Ça peux paraître un détail (pour vous mais pour moi ça veux dire beaucoup) mais c'est vraiment un soucis qui me dérange énormément, ça donne un aspect amateur et mal maîtrisé aux jeux.

Le pourquoi du comment



Alors ces lignes, c'est quoi ?

En fait ce sont les pixels adjacents à la texture dans l'atlas qui "fuitent" dans la texture appliquée au quad (ces petits bâtiments sont constitués de plusieurs petites plaques, qu'on appelle des "quads").

Vous n'avez rien compris ? C'est normal !


Comme vous le voyez ici, on retrouve ce soucis dans le tapis. Il y a deux points jaunes qui viennent se mettre au milieu du tapis bleu.

A droite, vous avez le morceau concerné de l'atlas de textures du tapis. On peux voir la case qui déconne en jeu, le coin renversé (j'ai mis le carré en évidence sur l'image). Et sur la case au dessus dans l'atlas, on peux voir que c'est de là que viennent nos deux points jaunes (les deux parties entourées).

Ils ont dépassé de leur case sur notre case de coin.

Pourquoi ?

C'est à cause de la transformation des pixels de l'image en pixels du jeu. Un pixel sous Photoshop n'égale pas un pixel dans le jeu (heureusement sinon vous auriez besoin d'une grosse loupe pour jouer^^).

Unity va donc essayer de retranscrire au mieux les pixels de l'image en pixels de votre écran (selon votre résolution donc). Ce qui mène parfois à de petites imperfections (probablement dues à des arrondis de calculs).

Je ne vais pas plus loin dans l'explication, je ne sais pas trop comment ça fonctionne vraiment ><

Mais vous avez saisi l'idée je pense, parfois Unity (et ça le fait aussi sous d'autres engines hein) se rate et affiche des pixels qu'il ne devrait pas.

Petite précision: si le reste du tapis n'affiche pas de lignes jaunes, c'est simplement parce que les textures à côtés dans l'atlas ont la même couleur. Par exemple la case de notre exemple n'a pas de leak jaune sur le côté gauche, tout simplement parce que la case de gauche est totalement bleue, tout comme la partie gauche de notre case. Il y a aussi une fuite de pixels mais on ne la voit pas puisque des pixels bleus dépassent sur des pixels bleus.

La solution



Elle est simple et compliquée à la fois.

La solution c'est qu'il n'y a pas de solution à proprement parler. Il suffit d'espacer ses textures dans l'atlas, comme ça :


Comme vous le voyez je peux alors doubler les côtés des textures pour qu'en cas de leak, la couleur qui "coule" soit la même que celle du pixels dans lequel elle arrive.

Conclusion



Ah bah c'est super ! On ne verra plus ces vilains bugs alors ?!

Hmmm... Ce soucis n'arrivera plus dans mes futurs jeux.

Malheureusement, pour ce qui est de SotM et WLB ça arrivera encore. Changer mes atlas de textures vers ce nouveau modèle prend énormément de temps, donc ne pensez pas que ces petits leaks auront disparus dès la prochaine update.

Je vais progressivement changer mes atlas, en commençant par les trucs où ça gêne le plus (les tapis par exemple) et en procédant par scripts (tous les murs, sols et façades utilisent le même script, mais pas les casques par exemple).

Au fur et à mesure des updates donc, vous devriez voir ces petits glitchs graphiques de moins en moins jusqu'au jour lointain où ils ne seront plus qu'un mauvais souvenir.

Voilà voilà !

Encore une bonne chose de faite^^.


vendredi 3 janvier 2014

Le Guide du Petit Rapporteur de Bugs

Hello tout le monde !

La beta de What Lies Beneath approche à grands pas, tellement grands qu'elle sera probablement là aujourd'hui.

Pour éviter au maximum de perdre mon temps, et donc de vous faire perdre le vôtre, voici un petit guide sur ce qu'un développeur attend d'un rapport de bug (spoiler: ce n'est jamais "le jeu ne marche pas").

Je me contente de reprendre et traduire partiellement cet article de scripting.com.

L'information de base qu'un rapport de bug doit contenir est la suivante :

  • Ce que vous faisiez
  • Ce qui pour vous était censé se passer
  • Ce qui s'est passé


Ces trois parties sont extrêmement importantes. Si vous avez vraiment trouvé un bug, le programmeur (c'est moi !) doit savoir ce que vous faisiez quand c'est arrivé de manière à ce qu'il puisse reproduire le bug. S'il n'y arrive pas, le problème sera quasiment impossible à réparer.

Note: tout bug est reproductible.

La deuxième partie permet de vérifier si vous avez vraiment été confronté à un bug. Il arrive parfois que ce que vous attendiez n'est pas ce que le programme est censé faire (dans ce cas c'est plutôt un problème de design ou d'intuitivité et ça se traite différemment).

Pour la troisième partie, un screenshot peut aider. Il s'agit d'inclure toutes les infos qui pourront aider le programmeur à mieux comprendre et cerner le problème.

Voilà, j'ajoute deux trois détails :

  • Précisez toujours l'endroit où a eu lieu le problème. Si c'est durant un chargement de map, précisez entre lesquelles ("j'allais de la map x à la map y") et quelle entrée vous avez emprunté.
  • Soyez le plus précis possible. Ce qui n'est pour vous qu'un détail peut être la clé du problème

Exemple: vous empruntez une porte censée vous TP quelque part et ça n'arrive pas. Le détail qui fait tout: la porte s'est ouverte.

Exemple 2: vous avez emprunté un portail de TP mais il vous a envoyé au milieu de nulle part. Détail qui fait tout: il n'y a pas eu de chargement.

Voilà, je m'arrête là pour ne pas vous brouiller avec des informations inutiles. N'oubliez pas que tout le monde n'est pas fait pour être beta testeur, et que si ce n'est pas votre truc, c'est vous faire du tort que de jouer au jeu buggué juste pour éviter d'attendre deux jours de plus^^.


vendredi 18 octobre 2013

Song of the Myrne, l'avancement ennuyant des derniers jours


Hello les gens !

Comme promis, je me suis remis au développement de SotM (après que ce vil Windows ait décidé que j'avais besoin d'un congé forcé... et pas reposant... du tout).

Ces deux derniers jours j'ai fait des trucs assez géniaux mais qui malheureusement, sur le papier, paraissent totalement sans intérêt. Je vais quand-même vous écrire un long pavé dessus ;)

 Je me suis attelé a retravailler les stats du joueur et des mobs.

(Si le blabla vous ennuie, sautez directement à la prochaine image, c'est un peu plus concret par-là^^)

A la base j'étais parti sur l'idée fixe suivante: "Moins les chiffres sont grands, plus c'est facile". Et je regardais avec amusement mais aussi avec beaucoup d’incompréhension les autres RPG dans lesquels un joueur level 1, tapant un mob level 1, avec une épée rouillée émoussée fait directement du 2000 de dégâts.

Pourquoi faire compliqué quand on peut faire simple? Moi j'allais utiliser de toutes petites valeurs, ce serait tellement plus simple a calculer...
...Si quelqu'un possède le secret du retour dans le temps, qu'il pense a aller me mettre une paire de claques le jour où j'ai eu cette brillante idée !

Le problème des petites valeurs est le suivant:

AUCUN CONTRÔLE

Ces petites valeurs sont un véritable enfer a gérer. Vous voulez un exemple tout simple ? Allez donc tirer sur les crabes en début de jeu. Ces crabes ont une armure de 1 (la carapace). Ce qui signifies qu'à chaque fois qu'ils reçoivent des dégâts physiques, ils prennent un point de dégât en moins. Le gros problème c'est qu'à ce niveau du jeu on fait en moyenne entre 1 et 2 de dégâts. Une fois sur deux le mob ne prend aucun dégât.

Et que va-t-il se passer si je décide d'ajouter un mini boss crabe, un crabe un peu plus fort et résistant que les autres ? Je lui met deux d'armure ? Super, le voilà devenu invincible... D'ailleurs un des trucs qui m'a poussé a faire ce changement ce sont les archers, depuis qu'ils savent viser, ils sont beaucoup trop violents, et je ne sais rien y faire avec de si petites valeurs. L'équipement pareil, on ne sent pas vraiment ses effets.

Idem pour les skills. Ces petites valeurs les rendent beaucoup trop cher ! Je m'explique. Un skill coûte un point de compétence, c'est carrément pas cher. Mais les skills ont besoin de mana/énergie pour fonctionner. Certains skills étant plus avantageux que d'autres, il est normal qu'ils coûtent plus cher en mana/énergie. Le problème c'est qu'on arrive donc très vite à des skills qui coûtent trois points de mana par exemple. Ils coûtent donc 4 points de compétence au final. Ce qui est énorme !

Bref, j'ai décidé de multiplier tous les points de vie, mana et énergie par dix. De même la vie des mobs et les dégâts ont aussi étés multipliés.

Ça me donne énormément de contrôle en plus sur les skills, les mobs, etc puisque évidemment je ne me suis pas contenté de tout multiplier par 10. Par exemple 3 sorts qui coûtaient avant 1, 2 et 3 de mana en coûteront peut-être 10, 16 et 20. De cette façon les skills plus intéressants coûteront toujours plus, mais obtenir ces 3 skills et pouvoir les utiliser ne coûtera plus que 5 points (2 pour avoir la mana requise + 3 pour les trois skills) au lieu de 6.

Autre exemple, un boss qui avant vous collait du 2 de dégats car il devait être plus fort que ses minions qui eux vous font du 1 fera peut-être maintenant du 13 alors que les minions en feront 7. D'ailleurs ça permettra aussi de faire des boss qui invoquent plein de petits monstres de rien du tout qui viendront vous submerger par le nombre en vous collant des 1 de dégâts.

Ce sont d'assez gros changements, j'ai donc dû faire d'autres modifs. Genre refaire l'interface en jeu


Et la petite feature qui sert à rien mais dont je suis très fier et qui m'a en plus poussé a apprendre de nouvelles choses:

That's right bitches ! Ça s'adapte à notre équipement

J'ai aussi commencé a repenser l'alchimie. Actuellement les consommables se résument en général à:

  • Soigne
  • Rend de la mana
  • Rend de l'énergie
Et on les fabrique trop facilement (genre 3 champignons pour faire une super potion)
Mais tout ça va changer^^. 
  • Dans la place qu'il reste à droite du level du joueur, il y aura des petites icônes de buff et debuff avec leur timer.
  • Il y a maintenant une différence entre rendre vie/mana/énergie et le regen de vie/mana/énergie
Par exemple une petite potion rendra une petite quantité de vie directement puis soignera ensuite le joueur sur la durée durant un certain temps. Alors que les bandages (nouveau craft) ne font que de la regen sur la durée.
  • L'énergie fonctionnera différemment de la mana
Je n'ai pas encore pris de décision finale sur comment tout ça va se goupiller exactement mais en gros ce seront deux jauges très différentes avec des regen différents. Par exemple ne plus avoir d'énergie aura pour conséquences d'affaiblir le joueur, ou le stun plus facilement sur prise de dégâts (rien d'implémenté encore, ça a de forte chance de changer), alors que ne plus avoir de mana n'a pas de conséquence (excepté ne plus pouvoir lancer de skill. D'ailleurs la nourriture de base (pas les plats préparés) ne soigne plus, elle remet juste de l'énergie.
  • Certaines potions boosteront les stats de manières provisoires, vous feront accélérer, etc..
  • J'ai retravaillé l'alchimie, elle est un peu plus complexe et il y a plein de nouveaux composants qu'on trouve sur toutes sortes de monstres.
Une fois que tout ça aura été réglé, c'est promis je sors une nouvelle version de la démo. Désolé de ne pas l'avoir fait avant le rééquilibrage qui risque de prendre un moment. Je dois revoir l'équilibrage des sorts, attaques, mobs, etc.. Je ne vous cache pas que c'est pas ma tasse de thé et que c'est long et fastidieux.

Mais après ça les combats devraient être beaucoup plus dynamiques (il le sont déjà beaucoup mais ça manque de stratégie). D'autant plus que j'ai quelques idées en réserve pour certains skills, j'en parlerai une autre fois, là y'a encore rien de coder.

vendredi 26 juillet 2013

Song of the Myrne: avancement du jour

Salut tout le monde !

Rien de très spécial aujourd'hui, du moins rien de vraiment intéressant pour les gens qui ne sont pas moi^^... Mais je tenais à vous le faire partager quand-même vu que je bosse sur des modifications qui vont me faire gagner beaucoup de temps pour la suite du développement.

MOAR stuff



Pour commencer j'ai changé la manière dont je gère l'affichage de l'équipement en jeu. Avant, si je voulais par exemple créer un chapeau, je devais:


  • Créer 4 images du chapeau, une pour chaque direction (haut, bas, gauche et droite)
  • Implémenter le chapeau dans le jeu (stats, description, etc)
  • Assigner mes quatre images de chapeau au joueur (donc en faisant glisser les images dans les cases prévues à cet effet, en faisant gaffe a l'ordre où je les place (emplacement 0 = haut, 1 = gauche, etc)
Ça c'est pour les chapeaux, pour le reste de l'équipement, armes et robes, en général il y a une image par direction, par animation (immobile, en marchant, en attaquant), soit 12 images par objet. 12 images à faire glisser dans l'interface au bon endroit (4 = walk haut...). Si je décide de modifier un peu l'objet, c'est 12 fichiers à éditer un par un.

Bref, c'était super pénible et ça ne me motivais vraiment pas a créer du stuff.

Mais ça c'était avant :)

J'ai commencé à utiliser ce qu'on appelle des atlas de textures (plusieurs images en une seule)

Le "i" est pour idle, parce que les chapeaux ne changent pas selon qu'on marche ou qu'on attaque. Le reste du stuff aura deux autres rangées (marche et attaque).

Pour le moment seuls les chapeaux en bénéficient (et c'est déjà un gain de temps incroyable, j'ajoute des chapeaux à la pelle là^^) mais je vais rapidement implémenter ce système pour tout le stuff.

Un vrai petit éditeur


Dans les jours qui viennent je vais aussi me ré-attaquer au code de l'éditeur de dialogues.

Tout d'abord pour améliorer... bah... l'édition de dialogues -_-'
C'est un truc qui est encore trop pénible a faire, je vais le rendre plus agréable a utiliser histoire que je l'ouvre en traînant moins des pieds^^.

Mais aussi et surtout je compte lui ajouter tout un pan pour qu'il gère la database d'objets (et plus tard de quêtes !). Actuellement j'écris cette database à la main et c'est très chiant.


En l'intégrant plutôt dans une interface graphique, avec les dialogues, ça me permettra de

  • Retrouver un objet plus rapidement si je veux le modifier
  • Créer des objets beaucoup plus vite
  • Avoir accès au nom de code des objets (ex: "chapeauPlume") directement depuis l'éditeur de dialogues sans aller fouiller dans un script
Bref, c'est kewl comme ne disent pas les djeunz cools et branchés ;)

Voilà voilà, désolé pour ce billet technique qui n’intéressera certainement pas tout le monde^^. In other news, j'ai plus ou moins terminé l'ajout de sons un peu partout, j'essayerai de faire une mise à jour de la démo un de ces jours.

A la prochaine ;)



mercredi 5 juin 2013

Exercices de style: du pixel art et un jeu rétro

Salut les gens !

Deux petits trucs aujourd'hui:

Pixel Art !



D'abord un petit artwork que j'ai fait de Song of the Myrne. C'était juste un petit exercice de style, pour la science. Qu'est-ce qu'il se passerait si Song of the Myrne était développé par le type qui a fait "Sword and Sworcery" (je vous conseille l'OST du jeu, elle est superbe) ?

On dirait un peu une pochette d'album... Faut que je me mette à la musique :D

Je ne suis pas fan de ce style à la base mais vu que c'est moi qui l'ait fait je trouve ça bien, ok ?!! Alors maintenant vous dites que c'est beau et c'est tout !

J'ai tenté de faire l'archère aussi mais hum... bon... disons qu'on ne va simplement plus en parler... jamais !

Le "No Future Contest"


Deuxième truc, j'ai décidé de participer au "No Future Contest". C'est organisé par l'OUJEVIPO. Et là, si vous êtes cultivés vous vous dites "Hey, mais ça ressemble à l'OULIPO" ! Et c'est normal, parce que le concept est le même, excepté que c'est appliqué aux jeux-vidéos plutôt qu'à la littérature.

Alors à la base je n'aime pas du tout, mais alors là pas du tout le concept de l'Oulipo, à savoir écrire des livres chiants for the sake of the art !

En général j'ai horreur de tout ce qui est art moderne, trucs expérimentaux (à part en musique, parfois) et autres "j'ai jeté un pot de peinture sur une toile, ça vaut 30 000 euros"...

Sauf que là j'y participe en tant qu'artiste et pas en tant que pauvre type qui va devoir se taper de lire la description d'un cageot de tomates (true story) ou de faire "hmm hmm, oui, oui, on peux vraiment voir ce que l'artiste a voulu exprimer sur les travers de la société et sur la place de l'homme dans un univers qui le dépasse face à CE FRACKING URINOIR !!!".

Alors je m'en fous, Mouahahahaha :D

Mais sinon, plus sérieusement (sinon vous n'aurez pas envie de tester mon jeu^^) le concours est axé retrogaming et ça, ça m’intéresse !

Et bien entendu les contraintes, parce que c'est bien autour de ça que tournent l'OULIPO et l'OUJEVIPO, sont fracking awesomes.

Et puis bien-sûr les prix sont tout simplement... zut, j'ai déjà employé le mot awesome juste au-dessus, hmmm... ils sont terrificlyawesomesques !

Premièrement les 15 meilleurs jeux seront présentés sur des bornes d'arcade customisées (111!!!elevenOne!!) et ensuite il y a trois prix de 800 euros... Outch, ça fait plaisir ça Ôo

Do fucking want !!!!

Bon, évidemment je n'ai aucune chance de gagner et c'est pas pour ça que je participe mais bon, on peux toujours rêver hein :D
Dans tous les cas ça me fera un jeu de plus à ajouter à mon... heu... catalogue ?

La suite (courage c'est bientôt fini), les contraintes donc. Je ne vais pas toutes vous les dire, vous n'avez qu'à regarder sur la page du concours. Je ne sais pas encore lesquelles je vais utiliser, rien de définitif tant que le thème n'est pas annoncé en tout cas (pas "minimalisme", pitié, pas "minimalisme") mais il y en a pas mal qui me plaisent bien:

  • 2 - La disquette 3,5 est toujours le format de référence: le jeu doit se dérouler sur un écran seulement, sans scrolling
  • 8 - La dactylographie est le nouveau hardcore-gaming: le jeu doit utiliser toutes, ou du moins la majorité des touches du clavier
Vous allez comprendre tout de suite pourquoi^^

  • 11 - World Wide What ?: le jeu doit être massivement multijoueur (allez, au moins 4), mais sur une seule machine
Voilà, si vous ne l'avez pas encore compris, je compte réaliser un bon petit soft d'arcade histoire de nous ramener plus de 10 ans en arrière à l'époque où jouer avec des potes, ça voulait dire se retrouver à 4 sur un même clavier pour jouer à Asteroides ou Bomberman.


Mais sinon je ne sais pas encore quel jeu je réaliserai. Sans doute un mix entre Bomberman et d'autres jeux. Comme pour Myrne 6312 ça ne se jouera qu'en multi, ce qui me garantit que quasiment personne ne prendra la peine d'essayer mon jeu, yay !

Voilà voilà, le concours aura lieu du 15 juin au 15 juillet. Mais rassurez-vous, je ne compte pas laisser SotM à l'abandon pendant un mois, je compte réaliser mon jeu en une semaine ou deux seulement en y allant vraiment molo (en gros je vais me refaire le Ludum Dare mais sans la pression du temps^^).

Voilà voilà... A plus sous le bus !


mardi 30 avril 2013

Ludum Dare: Jour 3 et liens pour y jouer !

Hello tout le monde !

Je ne vais pas écrire deux tartines aujourd'hui, je suis mort et j'arrive à peine à aligner deux mots sans faire 400 fautes de frappes dedans.

Résumé rapide de la journée:

J'ai terminé le jeu...

Et par terminé, j'entend BIEN terminer. En gros:

  • La map est complète
  • On peux le terminer sans rencontrer de bug notoire (je pense !)
  • Pleeein de fins différentes ! Pas de texte mais des scènes que je trouve assez fortes et parlantes. De quoi avoir envie de rejouer donc (il y en a cinq différentes).
  • Ajout du support des claviers Qwerty.... Maudits américains !
  • Amélioration générales des touches, bien que ça reste assez moisi, vivement l'ajout du binding (pour la petite histoire je l'ai "cassé" par accident et tout à fait bêtement alors que je transformais SotM en un jeu coop).
Voilà, j'écrirai un billet plus tard pour conclusionner tout ça, pour vous donner un peu mes impressions (j'ai terminé un jeu !!! Je suis un développeur indépendant !) et pour vous parler de l'avenir de Myrne 6312.

En attendant, n'oubliez pas d'aller essayer le jeu ICIIIIIIIIIIII !!! Là !!! Oui là !!! Il y a une version Windows et une version web, je vous conseille la windows si vous voulez être certain de ne pas terminer votre partie avec les pires plantages du monde (en principe ça doit aller mais bon^^).

Si le jeu vous plait, pensez à lui mettre de bonnes notes, ça compte énormément pour moi :)

lundi 29 avril 2013

Ludum Dare: Jour 2 - La conclusion de cette journée

Hello tout le monde !

Je n'ai pas fais de billet aujourd'hui et je n'en ferai sans doute pas des masses demain non plus, mais pas de panique, ça ne veux pas dire que Myrne 6312 n'avance pas (je le met tout le temps en gras dans l'espoir de retenir la date un jour^^).

J'ai terminé le core du jeu et ne fais plus que du contenu, aucun intérêt de vous informer de ce sur quoi je travaille du coup, je préfère vous laisser la surprise quand vous testerez le jeu.

Comme j'ai rien à vous montrer, voilà le menu principal ;)

Sinon j'ai presque terminé la seconde partie de la station et à ma grande surprise, le level est finalement déjà pas mal grand. Bon, moi je connais le niveau mais je pense qu'un joueur lambda n'ayant pas vu la map s'y sentira facilement perdu et mettra pas mal de temps à l'explorer, d'autant plus qu'il perdra quelques fois^^ (mais pas de panique, il n'y a pas spécialement d'ordre pour explorer).

Bref, à part que la nouvelle partie manque encore de détails et que je doive encore y placer les câbles d'oxygène (chiiiiiiant !), je suis dans les temps pour le planning que je me suis fait. Je vais essayer de prendre un peu d'avance cette nuit sur la partie avant de la station pour ne pas tomber trop à court de temps, vu que demain il faut tout compiler, uploader, faire du debugging de dernière minute, etc (je suis dans les temps mais c'est tendu quand-même^^).

Sinon, j'aimerais reparler de cette histoire d'oxygène. Je n'aurai pas le temps de mettre la feature en place :'( Ne soyez pas trop triste je m'y attendais ;)

Je pourrais sans doute l'ajouter à l'arrache ou sacrifier le level-design pour l'implémenter mais je préfère remettre ça pour après le Ludum Dare quand je pourrai prendre mon temps et développer ça correctement. Et puis le jeu n'en a pas besoin pour être amusant.

Et pour ne pas terminer sur une mauvaise nouvelle:

J'ai testé le jeu en coop ! Bon, c'était avec ma soeur qui ne partage pas spécialement la même passion que moi pour les bouillies de pixels mais je prend le fait qu'elle ait voulu refaire une partie (après qu'on soit mort lamentablement) pour un bon signe ;)

Personnellement j'ai trouvé l'expérience géniale. C'est nerveux, ridicule et carrément hardcore, j'adore !

Allez, j'y retourne !

A demain pour de nouvelles aventures in SPAAAA~ hé, mais, j'ai déjà dit ça !