{"id":431,"date":"2019-04-05T14:48:23","date_gmt":"2019-04-05T21:48:23","guid":{"rendered":"http:\/\/karenmcmullan.com\/?p=431"},"modified":"2024-05-14T10:35:31","modified_gmt":"2024-05-14T17:35:31","slug":"swiftheart-a-level-design-challenge","status":"publish","type":"post","link":"https:\/\/karenmcmullan.com\/?p=431","title":{"rendered":"SWIFTHEART: A Level Design Challenge"},"content":{"rendered":"<p><strong>The Challenge: <\/strong>Swift Movement + Platforming + Light Narrative<\/p>\n<p>Create a brisk Sonic-like level with double jump, leaning heavily on horizontal platforming, but including vertical elements, loops, branches, vistas, and a touch of narrative.<\/p>\n<p>In a week. Play it <a href=\"https:\/\/heysparky.itch.io\/swiftheart\">here<\/a>.<\/p>\n<p><a href=\"http:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/Overview.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-433 aligncenter\" src=\"http:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/Overview.png\" alt=\"A screenshot of the video game level Swiftheart; a minimalist rocky and snowy landscape with a graceful bridge.\" width=\"400\" height=\"300\" srcset=\"https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/Overview.png 400w, https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/Overview-300x225.png 300w\" sizes=\"auto, (max-width: 400px) 85vw, 400px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Even though there\u2019s no falling damage, crossing that arch still makes me sweat.<\/em><\/p>\n<p><!--more--><\/p>\n<p><strong>Development:<\/strong> I started with an entirely empty scene and the song <a href=\"https:\/\/open.spotify.com\/track\/3JJ4BoL9WVHk4Yye2EGJC7?si=6367841ec56f403e\">Flim<\/a>, by Aphex Twin. I\u2019ve thought for a long time that it would make a great level soundtrack and it fit my vision of a minimal, abstract world that is mostly serene but underscored with a driving energy.<\/p>\n<p>The first thing to get right was controls. The running speed and magnitude of jumps would determine the size of the level and influence everything in subtle and non-subtle ways. I had questions to answer. How fast can the character run? How high can it jump and double jump? How far? Does it feel solid and agile?<\/p>\n<p>It took three of my seven days to get this right, time well spent, because if the controls felt solid, that was a good base to build on. I used the Invector 3rd Person controller and modified it a lot \u2013 even consulting the creator for how to make it work well at higher speeds than it was designed for. This squared away, the first thing I wanted to understand was just how big the terrain would need to be. I dropped in the song and hit the ground running \u2013 literally. If linear, the terrain would be HUGE. So, circling back through areas (loops and branches) was not only going to be important as core element of the design challenge, but necessary to keep the level to a manageable size.<\/p>\n<p><strong>Map Layout:<\/strong> I bounced back and forth between very loose sketches and translations of those sketches onto the flat terrain, settling on a central area with four exits as the heart of the level. Some of the iterations had a more natural setting, canyons and waterfalls, but a central temple area within a mountain cavern and multiple exits really supported the loops and points of interest that I wanted to create.<\/p>\n<p><strong>Narrative:<\/strong> I wanted just enough \u2018why\u2019 to hang the narrative on and in from brainstorming on the four exits, the idea of seasons presented itself. A world where magic crystals guard and guide the seasons sprang to life. They\u2019re not at all okay, the crystals.<\/p>\n<p><strong>Level Objective:<\/strong> Find the Spring Crystal and return it to the Temple of Seasons.<\/p>\n<p>The seasons are broken, the Spring Crystal is missing from the Temple of Seasons and Winter cannot end.<a href=\"http:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/SpringWave.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-434 aligncenter\" src=\"http:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/SpringWave.png\" alt=\"A screenshot of the video game level Swiftheart; in the foreground the Spring pedestal at the moment the crystal is restored; in the background, the corrupted Summer gate.\" width=\"400\" height=\"300\" srcset=\"https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/SpringWave.png 400w, https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/SpringWave-300x225.png 300w\" sizes=\"auto, (max-width: 400px) 85vw, 400px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>The moment the Spring crystal is returned (corrupt Summer gate in the background)<\/em><\/p>\n<p>Only the Winter Crystal is intact and in place. The Summer Crystal has been corrupted and its Door so messed up I didn\u2019t even need to build that section of the world! Bonus. The Spring Crystal is just missing, its Door inoperable. And the Fall Crystal is shattered and missing, but one tiny shard of the Fall Crystal remains in place, rendering the Fall Door operable. With the other seasons out of balance, Winter rules the land and ice and snow cover everything.<\/p>\n<p><strong>More Development:<\/strong> It took another two to three days to get the world built and the gameplay implemented. I wrote or repurposed all the scripts for all the doors, elevators, hazards, collection, and crystal behaviors.<\/p>\n<p>The player could go and collect the Spring Crystal which would follow at a distance. Additionally, hidden around the map are 6 Fall Crystals which the player can collect. If the Fall Crystal shards are all collected and brought back to the Fall area of the temple, the tumbled columns and broken ledge get fixed. Returning the Spring Crystal to its place sets of a shockwave effect of Spring that opens the Spring temple doors and spreads Spring through the land.<\/p>\n<p>I am particularly proud of the \u2018terrain system\u2019 that I devised (screenshot below) that allowed me to quickly build and carve out semi-organic block-based areas linked by bridges and platforms.<\/p>\n<p><a href=\"http:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/TerrainSystem.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-436 aligncenter\" src=\"http:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/TerrainSystem.png\" alt=\"A screenshot of the video game level Swiftheart's terrain system; the screenshot shows a 10x10 monolith with a 9x9 monolith nested inside it; there is a picture of what sorts of series of nested grids and then a shot of the \" width=\"1000\" height=\"300\" srcset=\"https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/TerrainSystem.png 1000w, https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/TerrainSystem-300x90.png 300w, https:\/\/karenmcmullan.com\/wp-content\/uploads\/2019\/04\/TerrainSystem-768x230.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><\/p>\n<p>The modularity made it easy to ensure that anything I carved out would be navigable. It did have a not fun side effect of confusing the collision system which resulted in falling through the terrain sometimes. Not a final implementation of the terrain to be sure.<\/p>\n<p><strong>Assets:<\/strong> I downloaded a pack of trees, a skybox, and a character controller from the Unity Store. The controller is very sophisticated and not at all meant to go this fast \u2013 I would like it to be faster to really get that Sonic vibe, but any faster and Terrible Things begin to happen.<\/p>\n<p>The Invector controller also came with some other assets, moving platforms, and particles that were handy. The creator of the Invector controller also helped me hone in on good settings for high speed.<\/p>\n<p>Last, and certainly not least, my sweetie, Kevin, very kindly created temp sound effects and VO for which I am very grateful.<\/p>\n<p><strong>Trivia:<\/strong> The final size of the world including length and shape of the track was determined by running at full sprint for the duration of the song \u2018Flim\u2019 by Aphex Twin from start to finish \u2013 knowing that a player would be unlikely to every get through the level at that speed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Challenge: Swift Movement + Platforming + Light Narrative Create a brisk Sonic-like level with double jump, leaning heavily on horizontal platforming, but including vertical elements, loops, branches, vistas, and a touch of narrative. In a week. Play it here. Even though there\u2019s no falling damage, crossing that arch still makes me sweat.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-431","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=\/wp\/v2\/posts\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=431"}],"version-history":[{"count":9,"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions"}],"predecessor-version":[{"id":486,"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions\/486"}],"wp:attachment":[{"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/karenmcmullan.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}