02/02/15 | Herobrine | 2 commentaires |

En un weekend, j’ai réussi à finir tous mes objectifs ! Champagne \o/ ! (Et on remercie les vieux bugs d’inattention qui m’ont fait perdre plusieurs heures de débogage…)

Du coup, je vais vous expliquer rapidement le principe du jeu (même si je le détaillerai un peu plus dans un autre article) avant de vous montrer, non sans une certaine fierté, mes avancées.

Résumé du gameplay

En ce qui concerne le début du jeu, c’est un jeu exclusivement multijoueur dont les parties dureront entre 30min et 4h. La vue sera comme celle d’un RPG, c’est à dire vu du dessus (comme par exemple Zelda)

Vous commencez avec vos amis dans une station Metropian (cad les humains pour ceux qui arriveraient sur le blog), prêt à embarquer dans un vaisseau spatial pour trouver le Starxium (un matériau extrêmement rare aux étranges propriétés caché aux confins de l’univers).

Mais voilà, votre périple commence bien mal ! On vous annonce qu’un ou plusieurs espions se seraient infiltrés dans votre équipage… Ce peut être n’importe lequel de vos amis. Leur seul but sera de faire capoter votre mission. Ils devront se montrer discret pour ne pas éveillé de soupçons.

Le jeu sera plutôt orienté psychologie (je veux que tout le monde devienne parano 😀 !), un peu comme le jeu des Loups-garous de Thiercelieux.

Objectif de la semaine

Aaaaah, on y est 😀 ! Bon voyons voir…

Objectif 1 : Gestion des tileset

Checked ! J’ai créé un module qui match la carte et le tileset pour afficher le résultat plus rapidement qui si je découpais d’abord les tileset en tiles.

J’ai aussi commencé l’écriture d’une classe qui sera chargée de générer la map de manière aléatoire pour avoir quelque chose à afficher. (Pour l’instant, elle se contente de placer des tiles n’importe comment)

Objectif 2 : Gestion de la map et des calques

Checked ! La map est un vector<vector >, pour faire simple c’est un tableau à deux dimensions dans lequel je place des nombres qui correspondent à des tiles.

Exemple de map générée

Exemple de map générée

Voici un petit rappel du tileset de développement utilisé (rappel : un tileset est un ensemble de tiles, un tile est un carré de texture) :

Tileset de test pour le moteur graphique

Tileset de test pour le moteur graphique

Bien entendu, le 0 correspond au « floor », le 1 au « wall », etc…

Objectif 3 : Affichage de la map et des calques

Checked, c’était pas très compliqué avec la SFML… (rappel : la SFML est la librairie que j’utilise pour gérer pas mal de trucs dont l’affichage de la fenêtre à l’écran)

Affichage de la map

Affichage de la map

Le petit carré noir en haut à gauche représente le joueur (j’ai créé ça rapidement pour les tests).

Pour un peu plus de challenge, j’ai fait en sorte qu’on puisse le faire bouger avec les flèches et qu’on centre la vue dessus.

Vue centrée + déplacement

Vue centrée + déplacement

Objectif 4 : Lumière dynamique

Checked ! Là, c’était plutôt corsé… Ça avait l’air plutôt simple à faire, la vérité, c’est que c’est pas du tout le cas !

Après pas mal d’essais infructueux sur des méthodes optimisées, j’ai utilisé une méthode un peu débile qui n’a pas les meilleurs résultats possibles. Mais bon, vu le jeu, ça ne gène pas vraiment, et au pire j’optimiserai tout ça plus tard, l’intérêt c’est que ça marche.

La méthode que j’ai utilisé consiste à envoyer des « rayons » tout autour du personnage, et dès que celui-ci touche un mur, il s’arrête et créer un point au niveau de l' »impact ». Ensuite, on n’a plus qu’à relier les points avec un TriangleFan !

Lumière dynamique

Lumière dynamique

Le problème, c’est que je veux pas éclairer ce que le joueur peut voir, je veux assombrir ce qu’il ne peut pas voir. Et c’est complètement différent !

En effet, le polygone blanc semi-transparent que j’ai construit est un polygone convexe. La partie que je veux assombrir, elle, est un polygone concave. Et il est trèèèès difficile de dessiner des polygones concaves… Pour cela, il faut dessiner plusieurs polygones convexes. Alors, comment je découpe mon polygone concave moi ?

Glitch

Joli glitch n°1

Joli glitch n°2

Joli glitch n°2

Après plusieurs essais infructueux, j’ai compris comment faire : utiliser un TriangleStrip tout autour de la map. Et voici ce que ça donne (en le coloriant en noir transparent) :

Ombre dynamique

Ombre dynamique

C’est-y pas magnifique :’) ? Ça fonctionne en temps réel et l’effet est vraiment sympa ! Il faudrait que je regarde comment faire une vidéo en .gif, je pense que ça peut être intéressant de vous montrer l’avancée du jeu en vidéo sans que vous ayez à aller tout le temps sur youtube…

M’enfin, je verrai ça plus tard !

La prochaine étape sera de travailler un peu mieux la vue et les graphismes, je vais essayer de faire ça en semaine car je ne suis pas là le week end prochain…

En attendant, bon lundi à tous 😀 !

2 commentaires pour le moment
  • Teralion dit :

    Le rendu de l’éclairage dynamique est vraiment sympa. Ca apporte un petit truc.Cependant, avec une génération aléatoire de la map, on risque de se retrouver coincé, non ? Même si les chances sont faibles, elles existent, du moins c’est ce qui semble logique

  • Herobrine dit :

    Oui, bien sûr, j’ai fais cette génération juste pour tester le rendu. La génération « finale » sera procédurale, ce qui permettra d’avoir un décors réaliste et jouable 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *