{"id":895,"date":"2014-06-30T18:24:17","date_gmt":"2014-06-30T17:24:17","guid":{"rendered":"http:\/\/www.zylannprods.fr\/fr\/?p=895"},"modified":"2014-07-01T00:35:41","modified_gmt":"2014-06-30T23:35:41","slug":"la-lowrez-game-jam-wallrider","status":"publish","type":"post","link":"https:\/\/www.zylannprods.fr\/fr\/la-lowrez-game-jam-wallrider\/","title":{"rendered":"La #LowRez game jam &#8211; WallRider"},"content":{"rendered":"<p>Il \u00e9tait temps que je sorte cet article&#8230; en effet, il y a un mois de cela a eu lieu une game jam un peu sp\u00e9ciale, la Low-Rez jam !<\/p>\n<h2>Le concept<\/h2>\n<p>R\u00e9aliser un jeu complet tenant sur 32&#215;32 pixels.<br \/>\nPas d&rsquo;effets, pas de flous, pas de rotation ni de d\u00e9placement d&rsquo;un demi-pixel. Tout faire avec une grille de 32 par 32 pixels !<br \/>\nJ&rsquo;ai donc d\u00e9cid\u00e9 d&rsquo;y participer, afin d&rsquo;exploiter un concept que j&rsquo;avais en t\u00eate depuis un bon bout de temps. Au d\u00e9part pr\u00e9vue pendant une semaine, la jam a \u00e9t\u00e9 \u00e9tendue \u00e0 un mois entier, ce qui m&rsquo;a permis d&rsquo;aller plus loin dans mon d\u00e9veloppement, au lieu de tout rusher comme dans tout speed-dev.<\/p>\n<h2>WallRider<\/h2>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-898\" alt=\"banner\" src=\"https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/banner.png\" width=\"950\" height=\"200\" srcset=\"https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/banner.png 950w, https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/banner-300x63.png 300w\" sizes=\"(max-width: 950px) 100vw, 950px\" \/><br \/>\nLe jeu que j&rsquo;ai r\u00e9alis\u00e9 est un one-button game. Vous contr\u00f4lez un petit slime (repr\u00e9sent\u00e9 par un pixel vert). Ce slime avance ind\u00e9finiment, en suivant le contour des murs. Vous pouvez donc vous retrouver \u00e0 l&rsquo;envers tr\u00e8s rapidement, tourner dans les coins, c&rsquo;est simple, vous collez aux murs! Votre seul contr\u00f4le est de pouvoir sauter, et ainsi atteindre la paroi perpendiculaire \u00e0 votre slime.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-904\" alt=\"wallrider_screens_x3\" src=\"https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/wallrider_screens_x3.png\" width=\"796\" height=\"268\" srcset=\"https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/wallrider_screens_x3.png 796w, https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/wallrider_screens_x3-300x101.png 300w\" sizes=\"(max-width: 796px) 100vw, 796px\" \/><\/p>\n<p>&#8211; Vous pouvez surfer sur les pixels gris et bleus marine<br \/>\n&#8211; Les pixels rouges vont font cramer<br \/>\n&#8211; Les pixels bleus clair vous font rebondir<br \/>\n&#8211; Les pixels jaunes sont des pickups \u00e0 ramasser<br \/>\n&#8211; Les pixels marron s&rsquo;effacent \u00e0 votre passage<br \/>\n&#8211; Certains murs n&rsquo;apparaissent que si vous les traversez<br \/>\n&#8211; Les pixels orange clair vous font acc\u00e9l\u00e9rer<\/p>\n<p style=\"text-align: center;\">La #LowRez jam \u00e9tant organis\u00e9e principalement sur le site <a title=\"GameJolt\" href=\"http:\/\/gamejolt.com\/\" target=\"_blank\">GameJolt<\/a>, c&rsquo;est ici que j&rsquo;y ai publi\u00e9 mon jeu \ud83d\ude42<br \/>\n<a style=\"font-size: 3em;\" href=\"http:\/\/gamejolt.com\/games\/platformer\/wallrider\/26500\/\">Jouer<\/a><\/p>\n<h2>Making of<\/h2>\n<p>J&rsquo;ai programm\u00e9 le jeu enti\u00e8rement en Javascript, en n&rsquo;utilisant que le canvas de base HTML5, et une biblioth\u00e8que audio pour le son, <a href=\"http:\/\/createjs.com\/#!\/SoundJS\" target=\"_blank\">SoundJS<\/a>. Comme afficher pixel par pixel \u00e0 une taille pareille n&rsquo;est pas facile avec le canvas, j&rsquo;ai d\u00e9cid\u00e9 de reconstruire un syst\u00e8me graphique \u00e0 la main. Chaque pixel est en r\u00e9alit\u00e9 un rectangle (<code>gfx.drawRect()<\/code>), et l&rsquo;\u00e9cran est un tableau de nombres entiers de 32 par 32.<br \/>\nEnfin, d\u00e8s qu&rsquo;il faut afficher quelque chose, je modifie ce tableau, tout simplement. 30 fois par seconde, je parcours le tableau enti\u00e8rement et je met \u00e0 jour le canvas si une partie a chang\u00e9. Et pour optimiser le tout, les pixels de m\u00eame couleur sont fusionn\u00e9s en un seul <code>drawRect()<\/code>.<\/p>\n<p>Avant de finir de parler de cette partie pompeuse qu&rsquo;est le code, j&rsquo;aimerais juste prendre une minute de silence pour l&rsquo;algorithme m\u00eame du jeu, ce <span style=\"text-decoration: underline;\">satan\u00e9 morceau de logique<\/span> qui fait bouger le slime vert. Tout le jeu en d\u00e9pendait. Ce fut dur.<br \/>\n&#8230;<br \/>\n&#8230;<br \/>\nVoil\u00e0.<\/p>\n<p>SINON \ud83d\ude00 un truc marrant, c&rsquo;est que tous les niveaux ont \u00e9t\u00e9 r\u00e9alis\u00e9s sur <a title=\"ASEPRITE\" href=\"http:\/\/www.aseprite.org\/\" target=\"_blank\">ASEPRITE<\/a>, une sorte de Paint d\u00e9di\u00e9 au pixel-art. Ici, chaque couleur est index\u00e9e. Ensuite, gr\u00e2ce \u00e0 un petit script Python, j&rsquo;ai compil\u00e9 mes niveaux en JSON, un format de donn\u00e9es facile \u00e0 utiliser en Javascript sur le web. Pour ceux qui cherchent un bon \u00e9diteur pixel-art, je recommande donc <a href=\"http:\/\/www.aseprite.org\/\" target=\"_blank\">ASEPRITE<\/a>, m\u00eame Paint.NET \u00e9tait moins adapt\u00e9 pour ce job \ud83d\ude42<\/p>\n<figure id=\"attachment_900\" aria-describedby=\"caption-attachment-900\" style=\"width: 840px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\" wp-image-900\" alt=\"editor_pp\" src=\"https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/editor_pp.png\" width=\"840\" height=\"500\" srcset=\"https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/editor_pp.png 840w, https:\/\/www.zylannprods.fr\/fr\/wp-content\/uploads\/2014\/06\/editor_pp-300x178.png 300w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><figcaption id=\"caption-attachment-900\" class=\"wp-caption-text\">Work-in-progress du niveau 5<\/figcaption><\/figure>\n<p>La musique et les bruitages sont \u00e9galement de moi. Je les ai mont\u00e9s et mix\u00e9s avec le logiciel <a href=\"http:\/\/www.reaper.fm\/\">REAPER<\/a>. Vous pouvez \u00e9couter la musique du jeu ici, je viens de la publier sur SoundCloud \ud83d\ude42<\/p>\n<p><iframe loading=\"lazy\" width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https:\/\/w.soundcloud.com\/player\/?url=https%3A\/\/api.soundcloud.com\/tracks\/156702557&amp;color=ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false\"><\/iframe><\/p>\n<p>Le jeu contient une douzaine de niveaux ainsi que de nombreuses m\u00e9caniques d\u00e9riv\u00e9es du concept de \u00ab\u00a0surfer sur les murs\u00a0\u00bb. Le seul point noir est qu&rsquo;il me reste encore des choses \u00e0 ajouter&#8230; Il y a d\u00e9j\u00e0 pas mal de contenu, mais il manque une finition dont je m&rsquo;occuperai un jour&#8230; sans parler d&rsquo;un portage pour mobiles, qui s&rsquo;av\u00e8re indispensable pour ce type de jeu.<\/p>\n<p>D&rsquo;ailleurs en parlant de mobile gaming, ce jeu m&rsquo;a fait d\u00e9fricher un concept que j&rsquo;avais en t\u00eate depuis longtemps, et j&rsquo;ai dans l&rsquo;id\u00e9e de r\u00e9aliser une version \u00ab\u00a0HD\u00a0\u00bb de ce jeu. J&rsquo;ai beaucoup de projets en cours, donc \u00e7a va prendre perpette&#8230; ou pas?<br \/>\nBref, j&rsquo;esp\u00e8re que vous jouerez, ragerez (si,si) et gagnerez tous les niveaux de <a href=\"http:\/\/gamejolt.com\/games\/platformer\/wallrider\/26500\/\">WallRider<\/a>, en attendant la prochaine update de la mort \ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il \u00e9tait temps que je sorte cet article&#8230; en effet, il y a un mois de cela a eu lieu<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[53,3],"tags":[84,57,48,78,82,80,79,83,81],"_links":{"self":[{"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/posts\/895"}],"collection":[{"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/comments?post=895"}],"version-history":[{"count":23,"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/posts\/895\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/posts\/895\/revisions\/1057"}],"wp:attachment":[{"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/media?parent=895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/categories?post=895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zylannprods.fr\/fr\/wp-json\/wp\/v2\/tags?post=895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}