{"id":13792,"date":"2019-05-22T11:39:41","date_gmt":"2019-05-22T09:39:41","guid":{"rendered":"https:\/\/touk.pl\/blog\/?p=13792"},"modified":"2022-08-03T09:58:58","modified_gmt":"2022-08-03T07:58:58","slug":"the-experience-of-developing-quak-during-a-hackathon","status":"publish","type":"post","link":"https:\/\/touk.pl\/blog\/2019\/05\/22\/the-experience-of-developing-quak-during-a-hackathon\/","title":{"rendered":"The experience of developing \u201cQuak\u201d during a hackathon."},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13793\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/4.png\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/4.png 934w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/4-300x169.png 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/4-768x432.png 768w\" sizes=\"(max-width: 934px) 100vw, 934px\" \/><\/p>\n<p>In March 2019 we held a 2-day <a href=\"https:\/\/touk.pl\/blog\/2019\/04\/02\/touk-hackathon-2019-1\/\">hackathon named \u201cShip IT!<\/a>\u201d in TouK. I was part of the team developing \u201cQuak\u201d &#8211; a 2D <a href=\"https:\/\/www.liero.be\/\">Liero<\/a>\/<a href=\"https:\/\/www.soldat.pl\/\">Soldat<\/a> inspired game where players can immerse themselves into being a cute blob-like character while simultaneously laying waste to their opponent.<\/p>\n<p>In this post I want to share our experience writing and designing the game, what kind of roles team members assumed and some of the technical choices we made.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13794\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/5.png\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/5.png 1143w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/5-300x169.png 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/5-768x432.png 768w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/5-1024x576.png 1024w\" sizes=\"(max-width: 1143px) 100vw, 1143px\" \/><\/p>\n<h2 id=\"development\">Development<\/h2>\n<p>Working for a company that swims in JVM technologies \u2013 naturally we chose Kotlin as our development language. Our leader <strong>Rafa\u0142 Golcz<\/strong> created a simple game engine in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS Model<\/a> using the standard java game development library \u2013 <a href=\"https:\/\/libgdx.badlogicgames.com\/\">libgdx<\/a> and <a href=\"https:\/\/box2d.org\/\">box2d<\/a> for physics.<\/p>\n<p>ECS stands for Entity Component System, and its main advantage over a standard object hierarchy (as games tend to be strongly object-oriented programs in principle) is its behavioural nature.<\/p>\n<p>Instead of drowning in large inheritance trees and having potential \u201cproblems\u201d with instantiation or making sure what kind of object goes where \u2013 we receive an elegant solution where the behaviour of every game object can be defined as a list of scripts that are attached to it. From design perspective it also allows for a more natural approach to creating specific objects (as in what properties an object has like dealing damage on impact, destruction on collision, bleeding).<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13795\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/6.png\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/6.png 1337w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/6-300x169.png 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/6-768x432.png 768w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/6-1024x576.png 1024w\" sizes=\"(max-width: 1337px) 100vw, 1337px\" \/><\/p>\n<h2 id=\"team-roles\">Team Roles<\/h2>\n<p>Large gamedev companies (<a href=\"http:\/\/blizzard.com\/\">Blizzard<\/a>, <a href=\"https:\/\/en.cdprojektred.com\/\">CD Project Red<\/a>, <a href=\"https:\/\/bethesda.net\/en\/dashboard\">Bethesda<\/a> \u2013 to name a few) usually have strict roles for people working on their projects. Game directors, designers, writers, composers, testers, programmers, marketing teams, managers \u2013 all of which (except maybe for directors\/managers) tend to be split between junior, senior and leads.<\/p>\n<p>Developers are also often split according to their main responsibility: engine\/tools development, gameplay programmers, special effect programmers. However, in smaller teams responsibilities tend to be way more relaxed. What I find really interesting is the natural emergence of similar structures during these 2 days of developing Quak.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13796\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/2.png\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/2.png 994w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/2-300x169.png 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/2-768x432.png 768w\" sizes=\"(max-width: 994px) 100vw, 994px\" \/><\/p>\n<p>We had a person responsible for art, another person for music and sound effects, 5 people who were actively developing various features for the game (controllers aka joystick and keyboard integration, weapons and missiles\/bullets, collisions, character movement\/controls, map loading, destructible terrain, blood splatter and camera shake effects).<\/p>\n<p>At some point someone took the mantle of mapper and started creating the terrain you can see in the various screenshots in this article and a few others. What did wonders, in my opinion, was when one person became some sort of a Game Director and Designer\u2019s hybrid. By making sure that everyone had a similar grasp of the direction the game was taking this person made sure that contradicting ideas and implementations didn\u2019t emerge. I was this person.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13798\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/1.png\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/1.png 898w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/1-300x169.png 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/1-768x432.png 768w\" sizes=\"(max-width: 898px) 100vw, 898px\" \/><\/p>\n<h2 id=\"experience-itself\">Experience Itself<\/h2>\n<p>New features were \u201cflowing in\u201d as our leader noticed. Everything seemed to work seamlessly, every time someone wanted to push their changes to the repository they were met with the necessity of git pulling the changes which often introduced multiple new features. All of this added up made for a great passionate atmosphere, full of fast development and motivation. At some point we had outsourced testers from other projects to playtest early versions of the game as the sound of quacking echoed through the vast open-space of TouK.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13797\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/3.png\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/3.png 927w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/3-300x169.png 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/3-768x432.png 768w\" sizes=\"(max-width: 927px) 100vw, 927px\" \/><\/p>\n<h2 id=\"conclusions\">Conclusions<\/h2>\n<p>During the project showcase Quak has been met with laughter and smirky remarks \u2013 great signs. We concluded that the game was a success \u2013 we delivered more than we thought we were capable of before the actual hackathon.<\/p>\n<p>Making sure that the game is \u201cjuicy\u201d (in gamedev slang \u2013 a game is juicy if love and care has been put into small details\/finishing touches) at a relatively early stage with camera shake, visual effects like explosions or blood, sounds of duck quacking (as our bullets are all some kind of variation of TouK\u2019s \u201cduck\u201d mascot) all made the game much more interesting to playtest and to develop \u2013 boosting the morale and work efficiency of the team.<\/p>\n<p>Having little stand-ups every few hours to quickly discuss who is responsible for what and in which direction the game is going (what features to cut, which to implement, maybe some new ones?) as well as the aforementioned game director all made sure every member of the team knew what to do and in my opinion was the reason we managed to successfully finish the game. Quak has since then appeared at our stand during <a href=\"http:\/\/scalar-conf.com\/\">Scalar conference<\/a> and was met with positive feedback.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-13799\" src=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/kaczkobronie.jpg\" alt=\"\" width=\"\" height=\"\" srcset=\"https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/kaczkobronie.jpg 1827w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/kaczkobronie-300x189.jpg 300w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/kaczkobronie-768x485.jpg 768w, https:\/\/touk.pl\/blog\/wp-content\/uploads\/2019\/05\/kaczkobronie-1024x647.jpg 1024w\" sizes=\"(max-width: 1827px) 100vw, 1827px\" \/><\/p>\n<p>It was an awesome experience but it wouldn\u2019t be possible without a great team. Kudos to the entire Quak squad: <strong>Rafa\u0142 Golcz<\/strong>, <strong>Robert Piwowarek<\/strong>, <strong>Agata K\u0142oss<\/strong>, <strong>Mateusz Mazur<\/strong>, <strong>Hubert Lipi\u0144ski<\/strong> and <strong>Filip Majewski<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"In March 2019 we held a 2-day hackathon named \u201cShip IT!\u201d in TouK. I was part of the&hellip;\n","protected":false},"author":78,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[660,657,658,573,656,659],"class_list":{"0":"post-13792","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-development-design","7":"tag-experience","8":"tag-game-development","9":"tag-gamedev","10":"tag-hackaton","11":"tag-quak","12":"tag-ship-it"},"_links":{"self":[{"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/posts\/13792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/comments?post=13792"}],"version-history":[{"count":15,"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/posts\/13792\/revisions"}],"predecessor-version":[{"id":14911,"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/posts\/13792\/revisions\/14911"}],"wp:attachment":[{"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/media?parent=13792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/categories?post=13792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/touk.pl\/blog\/wp-json\/wp\/v2\/tags?post=13792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}