Zombie Market

Zombie Market est un prototype d’un jeu de tir vu de haut, en 2D, vous proposant de faire vos courses dans un supermarché pendant une apocalypse zombie.

Contexte du projet

Codé en Lua sur le framework Love2D, j’y ai travaillé seul pendant un mois en automne 2024, lors du premier module de ma formation professionnelle de Game Developpement auprès de l’école Gaming Campus.

Cahier des charges imposé

Créer en un mois un jeu vidéo avec le framework LoveD. Ce devait être un jeu de tir en 2D vu de haut, avec une condition de défaite et une condition de victoire. L’exemple donné était un jeu de tank tout simple.

Game Design

Déjà compétent en programmation et en game design, j’en ai profité pour être plus ambitieux que ce qui était requis par le cahier des charges.
J’ai pu notamment expérimenter une idée que j’avais eu auparavant : la simulation de la physique d’un caddie de supermarché, doit la dynamique varie réalistiquement à mesure qu’on remplit le caddie. Je calcule donc une vitesse, une accélération, une inertie et des frottements, que ce soit pour la translation ou la rotation du caddie. La collision avec les zombie et les obstacles et bien sûr gérée.
Pour répondre à la contrainte du jeu de tir, j’ai décidé d’ajouter des zombies et des objets de courses à leur lancer à la figure. L’histoire suggérée d’une apocalypse zombie fait un lien parfait entre le jeu de tir et la simulation de caddie. L’esthétique qui en découle est naturellement celle d’un jeu d’horreur.

Caméra : en plongée verticale, ou vue de dessus. Elle suit le protagoniste, sa position est limitée par les murs extérieurs du magasin
Personnages : un individu tenant un caddie de course, cherchant à trouver de quoi se nourrir malgré une apocalypse zombie. Des zombies pas très malins, errant dans le magasin à la recherche d’humains à dévorer.
Contrôles : Au clavier, Z pour accélérer, S pour freiner ou reculer, Q et D pour tourner le caddie. Avec la souris, clique-gauche pour lancer un objet de courses dans la direction du curseur.

Boucle de jeu

  • Objectifs : ramasser des objets de courses dans le magasin. Ceux-ci réapparaissent régulièrement, et viennent remplir le caddie de course. Le joueur ayant nombre de points de vie limités, sa survie est également un objectif en soit.
  • Obstacles : A mesure que caddie de course se remplit, sa maniabilité devient plus compliquée : le joueur doit gérer plus d’inertie, et aura plus de mal à naviguer dans le magasin.
    Des zombies apparaissent régulièrement, et se dirigeront automatiquement vers le joueur s’il s’approche d’eux. Ils peuvent l’oublier s’il s’éloigne suffisamment. Lorsqu’il entre en contact avec un zombie, le joueur perd un point de vie, obtient quelques frames d’invincibilité pour fuir, et quelques fournitures de courses tombent du caddie. Lorsqu’il n’a plus de point de vie, il perd.
  • Récompenses : Le joueur peut lancer les objets de course sur les zombies, jusqu’à une portée maximale, pour les terrasser. En accumulant suffisamment d’énergie cinétique, il peut également écraser les zombies avec son caddie. Cette action fera toutefois tomber du caddie un peu de son contenu.
    Avec suffisamment d’énergie cinétique accumulée, il peut également défoncer la porte d’entrée du magasin, ce qui provoquera la victoire et la fin du jeu. Son score final dépend de sa survie et du nombre d’objets collectés.

Notions informatiques acquises

Love2D étant un framework assez bas niveau, j’ai dû programmer moi-même les éléments suivants.

  • Calcul de trajectoires de déplacement en coordonnées polaires.
  • Physique du caddie de course avec des vecteurs (masse, vitesse, accélération, forces, inertie, frottements, énergie cinétique), autant pour la rotation que pour la translation.
  • Comparaison des trajectoires des objets, avec produit scalaire.
  • Hiérarchie et cohérence des déplacements entre objets parents et enfants
  • Collision entre cercles et rectangles.
  • Implémentation d’un niveau de jeu
  • Caméra suivant le joueur
  • Spawners automatisant l’apparition des items et des zombies.
  • Machines à états dictant le fonctionnement des spawners et le comportement des zombies.
  • Éléments d’interface de base : boutons, images, textes…
  • Gestionnaire de scènes
  • Animations : fade-out et clignotement, indépendantes du framerate.

Pour aller plus loin dans l’horreur

J’ai considéré les idées suivantes pendant la conception du projet, mais le jeu n’étant qu’au stade de prototype, je n’ai pas eu le temps de les implémenter. En voici quelques-unes :

  • Un tutoriel, pour expliquer progressivement le fonctionnement du jeu.
  • Un plus grande diversité d’objets à ramasser, ayant des masses variées, infligeant des dégâts différents et prenant d’autres trajectoires de tir. Pour l’instant, on ne trouve que des fraises en acier qui pèsent 2 kg chacune.
  • Une interface pour sélectionner l’objet du caddie à lancer parmi ceux possédés.
  • Des boites à collecter comprenant plusieurs objets d’un coup. Par exemple une barquette contenant 10 fraises.
  • Une interface pour organiser la position des objets à l’intérieur du caddie. Le centre de gravité du caddie peut évoluer selon la répartition des objets à l’intérieur. Toujours plus de réalisme !!!
  • Une plus grande diversité d’ennemis, avec des comportements, des points de vie et des dégâts infligés différents.
  • Des niveaux plus variés, demandant au joueur de se faufiler parmi des assemblages resserrés de rayons.
  • Une interface plus graphique, moins textuelle, plus claire et plus dynamique. L’UI n’était clairement pas au cœur de ce projet.
  • Des graphismes, sprites et logos mieux faits, je suis un piètre dessinateur.
  • Plus de feedbacks, notamment des sons, des animations et des FX !
  • Des musiques, pour l’ambiance et l’immersion du joueur.

Leave a Reply

Your email address will not be published. Required fields are marked *