{"id":143,"date":"2023-12-19T12:13:54","date_gmt":"2023-12-19T12:13:54","guid":{"rendered":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/?p=143"},"modified":"2024-01-02T16:57:50","modified_gmt":"2024-01-02T16:57:50","slug":"vertical-game-jam-2023-devlog_014","status":"publish","type":"post","link":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/2023\/12\/19\/vertical-game-jam-2023-devlog_014\/","title":{"rendered":"Vertical Game Jam 2023 | DevLog_014"},"content":{"rendered":"\n<p>The vertical game jam took place over the span of 5 days, where we were placed in a group of 17 people from different specialties and 2nd and 3rd year groups. It was a week full of challenges and a ton of learned experiences. I broke up the following into short, day accounts of the week as it was easier to conceptualize and reflect on what worked and did not work in this way. <\/p>\n\n\n\n<p>To start just before the first day, a few days before the briefing, we received who was going to be in our group. This was truly when the game jam started, in those crucial days before the briefing where the group could formulate a solid line of communication, get to know each other in a small way, and lay out some groundwork of expectations and roles. I felt immediately assured that there were a few key figures in our group who were eager to participate and work together to make this a successful game jam. Even going as far as to assign a few leadership roles in each specialty (myself volunteering in a Lead Dev position) as well as a project lead to facilitate communication for the group. We set up a separate Discord channel, a Trello board, as well as a Miro board right off the bat. I followed suit by setting up a GitHub repo and including the necessary contributors to the repo even before we met on Monday morning. We felt set up even before we met face to face&#8230;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Day 1<\/h4>\n\n\n\n<p>Agreed upon earlier in the week, we decided to meet 30 minutes before the briefing began in the lobby of our building and just chat and get to know each other a little bit. I was eager to work with everyone and felt this was reciprocated by how many people showed up on the first day. We then headed upstairs and watch the briefing taking place over Teams where the theme of the Jam would be revealed. As is common in Game Jam pageantry, the theme was revealed by the Games Course staff along with a small presentation to get us started. <\/p>\n\n\n\n<p>The theme: <em>Regeneration<\/em>. <\/p>\n\n\n\n<p>Immediately the team was buzzing with ideas about what kind of game would fit this theme, what kind of imagery came to mind, and from there, what would be possible in a 5 day span. This frenzy of ideation is common in game jams, but felt amplified with 15 people in the group trying to get their ideas across. Immediately I saw the first challenge arising in just how many people that is in one group for a short game jam. Typically, I was used to about 2-4 people in a group. <\/p>\n\n\n\n<p>After about an hour of discussion and an agreed upon rough direction of a type of game we wanted to make, we broke up into disciplines to discuss a rough game plan. From the Dev perspective, this meant outlining a guide of development processes to facilitate solid collaboration. We had 5 developers in our group on the first day, so setting up processes in the beginning meant the dreaded GitHub nightmares of losing hours of work on a merge error would be solved before even happening. <\/p>\n\n\n\n<p>I discussed with the Dev team what everyone was comfortable doing on their own, what they would like to tackle as a team, and what sort of features we wanted to focus on immediately. Doling out roles, I decided to tackle more of the backend game systems such as, the in-game economy, player upgrades, building base classes for all of the NPCs and UI widgets, and win\/lose state, as well as making myself available for any support for the other developers along the way. <\/p>\n\n\n\n<p>When we had these roles defined, we met up again with the rest of the group to firmly define the gameplay loop before getting into Unreal Engine and start making the game.<\/p>\n\n\n\n<p>The first day of Game Jams go extremely fast. Ideation for a project like this comes with balancing expectations\/scope on the outset, all while wanting to push yourself to make something fun to play and something that challenges you in your professional development. From my personal perspective, Game Jams are a way to get better at your craft, the finished product at the end is really just a nice treat to have if all goes well. But really the development process, collaboration, and project experience gained in the new group setting are the real goal. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Day 2<\/h4>\n\n\n\n<p>Going into the second day after the chaos of the first is where the real work begins. I spent the previous night assigning roles on the Trello, so that the other Devs could get started whenever they were available to on the second day. <\/p>\n\n\n\n<p>As stated before, managing expectations is half the battle in Game Jams. As nearly everybody showed up in person on the first day for the briefing, on the second day, we were down to about 6 people. This is expected as some people are more comfortable to work from home, do not want to pay for the travel into the city, or understandably have other things going on. Game Jams are optional torture I should state.<\/p>\n\n\n\n<p>This brings in a new set of challenges of communicating via online pipelines. For myself, I found this quite difficult as it seemed communicating online via Discord, while trying to get work done at the same time was very difficult, if not impossible. I did find this valuable to find out early though, as managing a lead position meant that I would have to make time for both and having a hand in both buckets at the same time was not feasible. So I would have to manage my time better between my own development responsibility and lead\/support roles. <\/p>\n\n\n\n<p>Most of my development on this day building those base classes in C++ for the other Devs to use, so I was able to do this on my own before moving on to other tasks. The largest being sorting out GitHub troubles. Some of the Devs had not used GitHub (source control for software projects) at this kind of scale, so there was some slight confusion about the order of operations. A small briefing\/GitHub processes solved most of the problems though, with only small fires to put out later in the project, as is typical. <\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>\/\/ Enum types for different friendly NPCs for player to buy and use\nUENUM(BlueprintType)\nenum class EFriendlyType : uint8\n{\n\tSLOW = 0 UMETA(DisplayName = \"Slow\"),\n\tTRAP = 1 UMETA(DisplayName = \"Trap\"),\n\tHEAL = 2 UMETA(DisplayName = \"Heal\")\n};\n\nUSTRUCT(BlueprintType)\nstruct FFriendlyProperties\n{\n\tGENERATED_USTRUCT_BODY()\n\npublic:\n\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite)\n\t\tEFriendlyType type;\n\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite)\n\t\tint32 Durability;\n\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite)\n\t\tfloat SlowEffect;\n\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite)\n\t\tfloat HealEffect;\n\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite)\n\t\tbool TrapEffect;\n\n\t\/\/ Initialize new Friendly\n\tvoid Initialize(uint8 t);\n\n};\n\nUCLASS()\nclass VERTICALGJ_GROUP1_API AFriendlyNPC : public AActor\n{\n\tGENERATED_BODY()\n\t\npublic:\t\n\t\/\/ Sets default values for this actor's properties\n\tAFriendlyNPC();\n\n\tUPROPERTY(EditAnywhere, BlueprintReadWrite, Category = \"Friendly Properties\")\n\t\tFFriendlyProperties FriendlyProperties;\n\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-48c2c4f0 wp-block-group-is-layout-flex\">\n<p class=\"has-text-align-center has-extra-small-font-size\">Typical structure of a base class containing a custom Struct of properties and Initializer. As well as helper functions for ease of use. <\/p>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Day 3<\/h4>\n\n\n\n<p>Midway through, the stress began to steep in, &#8220;Are we going to get this finished on time?&#8221; Challenges aside, the real horror of Game Jams is scope creep. With such a large group, ideas were plentiful. Especially from the concepting\/art side as developers make up just 5 out of the 17 people in the group. This meant that it was up to us as developers to firmly communicate with the rest of the team what was possible for us to make in that time as a lot of what gets put into the actual game is really up to the developers. The challenge is deciding what is purely essential to serve the project and what we felt like we could achieve in the short time. Midway through, what felt possible was becoming slimmer. <\/p>\n\n\n\n<p>It was not all negative though, progress really became visible as we started adding some of the artists work into the project. The level design was really taking shape. The player felt good to move around and the projectile shot from the player was working. Waves of enemies could be shot at. And from my end, the in-game economy was functional and the player could start using some of the powerups. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"816\" height=\"412\" src=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Pasted-image-20231212224517.png\" alt=\"\" class=\"wp-image-148\" srcset=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Pasted-image-20231212224517.png 816w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Pasted-image-20231212224517-300x151.png 300w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Pasted-image-20231212224517-768x388.png 768w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><figcaption class=\"wp-element-caption\">2D sprite of Player in the game. Getting the animations to work with movement.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"570\" src=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Tree-1024x570.png\" alt=\"\" class=\"wp-image-150\" srcset=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Tree-1024x570.png 1024w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Tree-300x167.png 300w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Tree-768x428.png 768w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/Tree.png 1451w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Tree asset in place as well as some initial set dressing for the level<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Day 4<\/h4>\n\n\n\n<p>By far the most stressful day. On arrival in the morning, we were one day before submission and a few hours before submitting a playable demo. On top of that, a few key features were not in the game. Namely, the friendly NPCs the player could spawn to help and the Enemy AI was not fully functional. <\/p>\n\n\n\n<p>Alas, we decided to put our heads down, letting the rest of the team know the situation. Myself and the rest of the Dev team saying that we were only available for critical decisions as we really needed to focus on getting these things done. <\/p>\n\n\n\n<p>Luckily, a couple of those key features were finished and then some. Specifically the feature of the player planting trees to regenerate the forest and subsequently trigger a win state. Also, the friendly NPCs were functional and ready to be put in the game. And lastly, the UI design for the title screen, pause screen, and upgrade screen were all finished and ready to be added to the project. A lot of that functionality I had written before as part of that backend system I spoke on earlier so that was not too difficult to get up and running quickly. <\/p>\n\n\n\n<p>Still, time flew by and before I knew it, it was just myself and 2 other team members staying until 9pm getting as much as possible finished before the final morning of practical time the next day. We finished this last night all taking turns playing the game in its current\/nearly-finished state talking about what was possible to add the morning of submission. At this point were proud of what we had accomplished regardless of the final outcome. We had an ambitious scope for the project and we felt like the team really excelled in hitting nearly all of the goals that we had set out from the beginning.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-1024x640.png\" alt=\"\" class=\"wp-image-149\" srcset=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-1024x640.png 1024w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-300x188.png 300w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-768x480.png 768w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-1536x960.png 1536w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-2048x1280.png 2048w, https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/12\/SludgeSlayerGameplay-7-1568x980.png 1568w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Upgrade UI with actions to upgrade player with in-game economy<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Day 5<\/h4>\n\n\n\n<p>The final morning leading up to submission. Really, it was a fever dream. I hardly slept the night before thinking about my plan of action when I arrived on campus at the earliest possible time. Final polishes\/bug fixes, and a lofty attempt on adding a last minute mechanic that had given the developers some headache the night before. <\/p>\n\n\n\n<p>I had made it known early in the group Discord that I would try and get this feature working, but if I didn&#8217;t have it working in an hour, we would cut it. So while everyone else went on making a trailer, polishing up the level, capturing gameplay footage, and printing out a poster, I put in my headphones and got to work. Unceremoniously, I had it working in about 30 minutes. Sometimes after banging your head on a problem for hours the night before, all that is needed is a little time away and the solution becomes obvious. <\/p>\n\n\n\n<p>Aside from some build errors (packaging the project into a playable, shippable piece of software), we had a fully functioning game that we really felt proud of. It looked tremendous and the artists really took the theme and ran with it and I was really proud of all the challenges the Dev team faced and were willing to sit with and learn through. It was a very successful Game Jam and I left the experience with a whole new set of collaborators I wish to work with in the future.<\/p>\n\n\n\n<p>Portfolio entry along with Itch.io page with playable download: <\/p>\n\n\n\n<p><a href=\"https:\/\/www.andydalaimo.com\/portfolio\">https:\/\/www.andydalaimo.com\/portfolio<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/andydalaimo.itch.io\/sludge-slayer\">https:\/\/andydalaimo.itch.io\/sludge-slayer<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The vertical game jam took place over the span of 5 days, where we were placed in a group of 17 people from different specialties and 2nd and 3rd year groups. It was a week full of challenges and a ton of learned experiences. I broke up the following into short, day accounts of the&hellip; <a class=\"more-link\" href=\"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/2023\/12\/19\/vertical-game-jam-2023-devlog_014\/\">Continue reading <span class=\"screen-reader-text\">Vertical Game Jam 2023 | DevLog_014<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-143","post","type-post","status-publish","format-standard","hentry","category-devlog","entry"],"_links":{"self":[{"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts\/143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=143"}],"version-history":[{"count":7,"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts\/143\/revisions"}],"predecessor-version":[{"id":154,"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts\/143\/revisions\/154"}],"wp:attachment":[{"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/andrewdalaimo.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}