{"id":1102,"date":"2024-11-28T18:09:16","date_gmt":"2024-11-28T17:09:16","guid":{"rendered":"https:\/\/palocatelli.com\/?p=1102"},"modified":"2025-01-02T17:30:12","modified_gmt":"2025-01-02T16:30:12","slug":"zombie-market","status":"publish","type":"post","link":"https:\/\/palocatelli.com\/index.php\/2024\/11\/28\/zombie-market\/","title":{"rendered":"Zombie Market"},"content":{"rendered":"\n<p>Zombie Market est un prototype d&#8217;un jeu de tir vu de haut, en 2D, vous proposant de faire vos courses dans un supermarch\u00e9 pendant une apocalypse zombie.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-outline is-style-outline--1\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/LukiolPA\/Zombie_Market\" target=\"_blank\" rel=\"noreferrer noopener\">Testez le projet Zombie Market<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Contexte du projet<\/h2>\n\n\n\n<p>Cod\u00e9 en Lua sur le framework Love2D, j&#8217;y ai travaill\u00e9 seul pendant un mois en automne 2024, lors du premier module de ma <a href=\"https:\/\/gamingcampus.fr\/pro\/developpement-jeux-video.html\">formation professionnelle de Game Developpement<\/a> aupr\u00e8s de l&#8217;\u00e9cole Gaming Campus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cahier des charges impos\u00e9<\/h2>\n\n\n\n<p>Cr\u00e9er en un mois un jeu vid\u00e9o avec le framework LoveD. Ce devait \u00eatre un jeu de tir en 2D vu de haut, avec une condition de d\u00e9faite et une condition de victoire. L&#8217;exemple donn\u00e9 \u00e9tait un jeu de tank tout simple.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Game Design<\/h2>\n\n\n\n<p>D\u00e9j\u00e0 comp\u00e9tent en programmation et en game design, j&#8217;en ai profit\u00e9 pour \u00eatre plus ambitieux que ce qui \u00e9tait requis par le cahier des charges.<br>J&#8217;ai pu notamment exp\u00e9rimenter une id\u00e9e que j&#8217;avais eu auparavant : la simulation de la physique d&#8217;un caddie de supermarch\u00e9, doit la dynamique varie r\u00e9alistiquement \u00e0 mesure qu&#8217;on remplit le caddie. Je calcule donc une vitesse, une acc\u00e9l\u00e9ration, 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\u00fbr g\u00e9r\u00e9e.<br>Pour r\u00e9pondre \u00e0 la contrainte du jeu de tir, j&#8217;ai d\u00e9cid\u00e9 d&#8217;ajouter des zombies et des objets de courses \u00e0 leur lancer \u00e0 la figure. L&#8217;histoire sugg\u00e9r\u00e9e d&#8217;une apocalypse zombie fait un lien parfait entre le jeu de tir et la simulation de caddie. L&#8217;esth\u00e9tique qui en d\u00e9coule est naturellement celle d&#8217;un jeu d&#8217;horreur.<\/p>\n\n\n\n<p><strong>Cam\u00e9ra : <\/strong>en plong\u00e9e verticale, ou vue de dessus. Elle suit le protagoniste, sa position est limit\u00e9e par les murs ext\u00e9rieurs du magasin<br><strong>Personnages <\/strong>: un individu tenant un caddie de course, cherchant \u00e0 trouver de quoi se nourrir malgr\u00e9 une apocalypse zombie. Des zombies pas tr\u00e8s malins, errant dans le magasin \u00e0 la recherche d&#8217;humains \u00e0 d\u00e9vorer.<br><strong>Contr\u00f4les : <\/strong>Au clavier, Z pour acc\u00e9l\u00e9rer, 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.<\/p>\n\n\n\n<p><strong>Boucle de jeu<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Objectifs <\/strong>: ramasser des objets de courses dans le magasin. Ceux-ci r\u00e9apparaissent r\u00e9guli\u00e8rement, et viennent remplir le caddie de course. Le joueur ayant nombre de points de vie limit\u00e9s, sa survie est \u00e9galement un objectif en soit.<\/li>\n\n\n\n<li><strong>Obstacles <\/strong>: A mesure que caddie de course se remplit, sa maniabilit\u00e9 devient plus compliqu\u00e9e : le joueur doit g\u00e9rer plus d&#8217;inertie, et aura plus de mal \u00e0 naviguer dans le magasin.<br>Des zombies apparaissent r\u00e9guli\u00e8rement, et se dirigeront automatiquement vers le joueur s&#8217;il s&#8217;approche d&#8217;eux. Ils peuvent l&#8217;oublier s&#8217;il s&#8217;\u00e9loigne suffisamment. Lorsqu&#8217;il entre en contact avec un zombie, le joueur perd un point de vie, obtient quelques frames d&#8217;invincibilit\u00e9 pour fuir, et quelques fournitures de courses tombent du caddie. Lorsqu&#8217;il n&#8217;a plus de point de vie, il perd.<\/li>\n\n\n\n<li><strong>R\u00e9compenses <\/strong>: Le joueur peut lancer les objets de course sur les zombies, jusqu&#8217;\u00e0 une port\u00e9e maximale, pour les terrasser. En accumulant suffisamment d&#8217;\u00e9nergie cin\u00e9tique, il peut \u00e9galement \u00e9craser les zombies avec son caddie. Cette action fera toutefois tomber du caddie un peu de son contenu.<br>Avec suffisamment d&#8217;\u00e9nergie cin\u00e9tique accumul\u00e9e, il peut \u00e9galement d\u00e9foncer la porte d&#8217;entr\u00e9e du magasin, ce qui provoquera la victoire et la fin du jeu. Son score final d\u00e9pend de sa survie et du nombre d&#8217;objets collect\u00e9s.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Notions informatiques acquises<\/h2>\n\n\n\n<p>Love2D \u00e9tant un framework assez bas niveau, j&#8217;ai d\u00fb programmer moi-m\u00eame les \u00e9l\u00e9ments suivants.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Calcul de trajectoires de d\u00e9placement en coordonn\u00e9es polaires.<\/li>\n\n\n\n<li>Physique du caddie de course avec des vecteurs (masse, vitesse, acc\u00e9l\u00e9ration, forces, inertie, frottements, \u00e9nergie cin\u00e9tique), autant pour la rotation que pour la translation.<\/li>\n\n\n\n<li>Comparaison des trajectoires des objets, avec produit scalaire.<\/li>\n\n\n\n<li>Hi\u00e9rarchie et coh\u00e9rence des d\u00e9placements entre objets parents et enfants<\/li>\n\n\n\n<li>Collision entre cercles et rectangles.<\/li>\n\n\n\n<li>Impl\u00e9mentation d&#8217;un niveau de jeu<\/li>\n\n\n\n<li>Cam\u00e9ra suivant le joueur<\/li>\n\n\n\n<li>Spawners automatisant l&#8217;apparition des items et des zombies.<\/li>\n\n\n\n<li>Machines \u00e0 \u00e9tats dictant le fonctionnement des spawners et le comportement des zombies.<\/li>\n\n\n\n<li>\u00c9l\u00e9ments d&#8217;interface de base : boutons, images, textes&#8230;<\/li>\n\n\n\n<li>Gestionnaire de sc\u00e8nes<\/li>\n\n\n\n<li>Animations : fade-out et clignotement, ind\u00e9pendantes du framerate.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Pour aller plus loin dans l&#8217;horreur<\/h2>\n\n\n\n<p>J&#8217;ai consid\u00e9r\u00e9 les id\u00e9es suivantes pendant la conception du projet, mais le jeu n&#8217;\u00e9tant qu&#8217;au stade de prototype, je n&#8217;ai pas eu le temps de les impl\u00e9menter. En voici quelques-unes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un tutoriel, pour expliquer progressivement le fonctionnement du jeu.<\/li>\n\n\n\n<li>Un plus grande diversit\u00e9 d&#8217;objets \u00e0 ramasser, ayant des masses vari\u00e9es, infligeant des d\u00e9g\u00e2ts diff\u00e9rents et prenant d&#8217;autres trajectoires de tir. Pour l&#8217;instant, on ne trouve que des fraises en acier qui p\u00e8sent 2 kg chacune.<\/li>\n\n\n\n<li>Une interface pour s\u00e9lectionner l&#8217;objet du caddie \u00e0 lancer parmi ceux poss\u00e9d\u00e9s.<\/li>\n\n\n\n<li>Des boites \u00e0 collecter comprenant plusieurs objets d&#8217;un coup. Par exemple une barquette contenant 10 fraises.<\/li>\n\n\n\n<li>Une interface pour organiser la position des objets \u00e0 l&#8217;int\u00e9rieur du caddie. Le centre de gravit\u00e9 du caddie peut \u00e9voluer selon la r\u00e9partition des objets \u00e0 l&#8217;int\u00e9rieur. Toujours plus de r\u00e9alisme !!!<\/li>\n\n\n\n<li>Une plus grande diversit\u00e9 d&#8217;ennemis, avec des comportements, des points de vie et des d\u00e9g\u00e2ts inflig\u00e9s diff\u00e9rents.<\/li>\n\n\n\n<li>Des niveaux plus vari\u00e9s, demandant au joueur de se faufiler parmi des assemblages resserr\u00e9s de rayons.<\/li>\n\n\n\n<li>Une interface plus graphique, moins textuelle, plus claire et plus dynamique. L&#8217;UI n&#8217;\u00e9tait clairement pas au c\u0153ur de ce projet.<\/li>\n\n\n\n<li>Des graphismes, sprites et logos mieux faits, je suis un pi\u00e8tre dessinateur.<\/li>\n\n\n\n<li>Plus de feedbacks, notamment des sons, des animations et des FX !<\/li>\n\n\n\n<li>Des musiques, pour l&#8217;ambiance et l&#8217;immersion du joueur.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Zombie Market est un prototype d&#8217;un jeu de tir vu de haut, en 2D, vous proposant de faire vos courses dans un supermarch\u00e9 pendant une apocalypse zombie. Contexte du projet Cod\u00e9 en Lua sur le framework Love2D, j&#8217;y ai travaill\u00e9 seul pendant un mois en automne 2024, lors du premier module de ma formation professionnelle &hellip; <\/p>\n","protected":false},"author":1,"featured_media":1113,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,23,24,21],"tags":[14,17,20],"class_list":["post-1102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-game-design","category-game-dev","category-informatique","category-jeu-video","tag-game-design","tag-gamedev","tag-jeu-video"],"_links":{"self":[{"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/posts\/1102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/comments?post=1102"}],"version-history":[{"count":10,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/posts\/1102\/revisions"}],"predecessor-version":[{"id":1195,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/posts\/1102\/revisions\/1195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/media\/1113"}],"wp:attachment":[{"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/media?parent=1102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/categories?post=1102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/palocatelli.com\/index.php\/wp-json\/wp\/v2\/tags?post=1102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}