Escape From Darkness - Devlog #1 - École de jeux vidéo en ligne Gamecodeur

Escape From Darkness – Devlog #1

Escape From Darkness - Devlog #1
Lysenti Il y a 1 semaine Premium PRO10

Bonjour à toutes et tous et bienvenue dans ce premier devlog consacré à mon prototype “Escape From Darkness“, que je compte présenter pour la GameJam #25.

Vous incarnez Samantha, une jeune adolescente qui se retrouve piégée dans un cauchemar sans fin. Pour vous échapper, il vous faudra vous frayer un chemin à travers un dédale peuplé de créatures cauchemardesques, avec pour seule arme la lampe torche de votre téléphone.

Au cours de votre périple, vous devrez gérer votre santé mentale ainsi que la batterie du téléphone. Vous aurez donc le contrôle sur l’intensité de la lampe.

Plus votre santé mentale sera basse, plus les monstres qui résident dans le cauchemar seront agressifs… peut-être même différents, qui sait ? Si elle tombe à zéro, ou si vous restez trop longtemps, le cauchemar recommence, ce qui vous sera peut-être nécessaire, afin d’en apprendre d’avantage sur les lieux… et sur les raisons de votre présence.

J’espère avoir le temps d’ajouter plusieurs moyens de s’échapper, histoire d’ajouter un peu de rejouabilité !

Comme vous l’avez compris j’ai décidé de ne pas partir sur le thème de la prison dont on doit s’évader, et ce n’est pas tant par recherche d’originalité que parce que mon précédent proto était justement sur ce thème bien qu’axé infiltration. Du coup j’ai préféré faire un truc bien différent.

Au niveau fonctionnalités, j’ai listé pas mal de choses même si j’ai bien conscience que je n’aurais probablement pas le temps de tout implémenter. Il y aura donc un personnage jouable, avec un déplacement au pixel près, la possibilité de contrôler une lampe-torche (direction et intensité), une jauge de santé mentale (qui remplace une barre de vie traditionnelle) et une jauge de batterie du téléphone; bien sûr des monstres qui pourront vous prendre en chasse dès qu’ils vous verront, ainsi que des clés à trouver pour déverrouiller certains passages et peut-être des objets déplaçables.

Plusieurs éléments impacteront la jauge de santé mentale, comme le fait de rester trop longtemps dans l’obscurité, de se faire courser/toucher par des monstres, de tomber dans des pièges, etc.

Je souhaite apporter un soin particulier au level design pour ne pas avoir une progression linéaire comme dans mon prototype précédent StarGrid, mais plutôt quelque chose qui se rapproche du jeu “the Count Lucanor” pour ceux qui connaissent.

D’ailleurs c’est ce jeu qui m’a inspiré pour ce que je voulais pour les lumières :

Bon, maintenant que les présentations sont faites, et avant que Lost in Code ne nous fasse une syncope, passons à ce que j’ai pu déjà réaliser.

Il y a deux concepts qu’il m’intéressait d’apprendre à maîtriser, ou au moins de les aborder : la gestion des lumières et le pathfinding (ou de manière plus générale, l’IA des monstres). Cette fois-ci pas d’intro, je me suis concentré sur la façon dont je pouvais gérer les lumières. Etant donné qu’il s’agit du coeur du gameplay, il fallait que je sois certain d’avoir quelque chose de fonctionnel dès le départ. J’ai quand même utilisé mon squelette de code pour un menu sans grande prétention, mais qui permet de me mettre dans l’ambiance (ça compte beaucoup pour ma motivation) :

Alors autant vous dire que pour les lumières, j’ai bien galéré ! Au départ j’ai pensé à un “simple” brouillard de guerre comme dans l’atelier Tilemap, mais j’avais besoin de quelque chose de plus dynamique et qui s’applique pixel par pixel. En farfouillant sur le net je suis tombé sur l’utilisation des shaders. Je n’avais pas encore appliqué de shaders dans mes protos, alors c’était l’occasion.

Mais alors les shaders… quelle purge ! A moins de maîtriser le langage GLSL (qui ressemble beaucoup au C), impossible d’en créer soi-même, il faut faire le singe et recopier le code des autres. J’ai quand même essayé, mais j’ai fini par mettre cette idée de côté. Après il y a des librairies qui font le boulot, avec la gestion des ombres en plus, mais je ne voyais pas l’intérêt si je n’arrivais pas à comprendre la façon dont ces librairies fonctionnent vraiment.

Toutefois il y en a une qui a retenu mon attention : Luven (de Lionel Leeser). Pourquoi celle-ci ? Parce qu’en parcourant le code, j’arrivais à tout comprendre ! Comme il était hors de question pour moi d’utiliser une librairie sans en maîtriser chaque ligne de code, j’ai commencé par l’étudier, puis je me suis empressé de coder mon propre module de lumières en m’inspirant du fonctionnement de la lib (et en virant tout ce qui était superflu pour mon projet, genre la caméra intégrée).

Le principe est relativement simple en fait, il se base sur l’utilisation d’un canvas. Le canvas “recouvre” tout l’écran, on lui applique une couleur très sombre et un blendMode “alpha” pour plonger la map dans l’obscurité que l’on souhaite. Les lumières sont dessinées dans ce canvas, avec une couleur proche du jaune. Pour l’effet “dissipation” sur les bords, c’est juste l’image qui sert à dessiner les lumières qui le permet, on peut aisément créer ses propres formes pour la lumière du coup. Voilà le résultat :

Plutôt content après ces 3 jours de galère… mais j’étais bien lancé, alors je ne me suis pas arrêté là. Vu tout ce que je veux implémenter et le temps que j’ai passé pour les lumières, je me suis dit que je n’aurais pas le temps de me faire mes propres graphismes, en tout cas pas dans l’immédiat. Donc j’ai récupéré un tileset gratuit sur OpenGameArt que j’ai complété selon mes besoins avec lequel j’ai dessiné un bout de map, puis j’ai créé un sprite temporaire pour Samantha à partir d’une image trouvée sur le net, je l’améliorerai plus tard. J’ai implémenté tout ça dans mon code, avec une petite caméra qui suit le joueur. Puis j’ai réfléchi à la lampe-torche.

C’est donc un cone de lumière avec une certaine “portée” et qui doit pouvoir bouger. Au départ je pensais faire quelque chose qui se rapproche des cones de vision des gardes de mon précédent proto, c’est-à-dire une rotation en fonction de la direction du personnage… mais j’ai eu l’idée de faire un truc plus dynamique : l’orienter en fonction de la position de la souris. Ainsi on a le sentiment d’avoir vraiment une “arme” dans les mains, en plus de diriger le perso avec zqsd.

Pour finir j’ai ajouté la possibilité d’éteindre la lampe et de la rallumer à loisir. Bientôt la possibilité de modifier la portée aussi (l’intensité), peut-être via la molette, j’y réfléchis ! Petite démo :

Je trouve le rendu plutôt cool, avec une petite musique façon film d’horreur et les bons bruitages… ça devrait avoir son petit effet !

Prochaine étape :

  • Terminer les collisions (avec CCD…)
  • Pouvoir gérer l’intensité de la lampe
  • Des sprites de torches avec leur propre lumière sur la map
  • Les portes sont actuellement de bêtes tuiles, je vais en faire des sprites dotés d’une machine à état.

Merci de m’avoir lu et bon code !

 

Comments (10)

Lost In Code

“Argh!…” *saigne du nez.
“Argh!…” *infarctus.
“AAAARRRRGGGHHHH!…” *rupture d’anévrisme.

“Pourquoi… ?” *meurt la main tendue vers son avenir perdu, en serrant son clavier contre son petit coeur.

Sérieusement…
T’as un don pour la hype ! J’ai trop hâte de voir la suite, ça accroche déja !

Mais attention !
La gestion des lumières et le pathfinding sont dans ma liste des priorités… je vais examiner ton code, le disséquer, le retourner, le …
Je m’emballe…
Je vais m’en servir pour apprendre, quoi…

Bonne chance et bon code champion ! 😉

Lysenti

Arf, reste avec nous Lost !

Je me méfie de la hype… ça peut tout aussi bien faire l’effet d’un soufflet…
Mais content que ça t’ait accroché. 🙂

Pour les lumières et le pathfinding, je serai ravi d’en discuter/partager du code à l’occasion, n’hésite pas.

Merci pour ton soutien 😉

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Avatar
Salut c'est David. Est-ce que tu as une question sur la formation ?
Holler Box

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.