{"id":145,"date":"2023-04-06T16:34:19","date_gmt":"2023-04-06T15:34:19","guid":{"rendered":"http:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/?p=145"},"modified":"2023-04-13T08:14:59","modified_gmt":"2023-04-13T07:14:59","slug":"bsc1b-indie-dev-devlog-06-03-23-06-04-23","status":"publish","type":"post","link":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/2023\/04\/06\/bsc1b-indie-dev-devlog-06-03-23-06-04-23\/","title":{"rendered":"BSc1b &#8211; Indie Dev &#8211; Devlog 06.03.23-06.04.23"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This is all the development I have documented for the past month, rather than make a series of seperate weekly posts where development was very on-off, I&#8217;ll upload this document to cover what I&#8217;ve got so far.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To start off, I&#8217;ve listed some of the core plans I have for the MVP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First-Person game, dash, Health, mana, xp, gold<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mock UI for currency elements.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"853\" height=\"258\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-11.png\" alt=\"\" class=\"wp-image-146\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-11.png 853w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-11-300x91.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-11-768x232.png 768w\" sizes=\"auto, (max-width: 853px) 100vw, 853px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Spells \u2013 implement the similar previous system of having 4 spells to cast and spell selection:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Freeze, Fire, Corrosive, Lightning (just do basic ball and material for now,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Punching bag enemy \u2013 basic enemy to test spells on and try some basic behaviour trees.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mana costs, Spell statistics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enemy display health and spawn in a sequence, damage and kill player.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Interact function \u2013 for pressing buttons and interacting with NPCs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mockup Elevator \u2013 Press a button and increment a \u2018depth\u2019.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descent Illusion \u2013 Create Gameplay boundaries for the elevator, walls \u2018rise\u2019 on a loop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dash &#8211; https:\/\/www.youtube.com\/watch?v=4475eJZ5Vec<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">06.03.2023<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Loaded up a first person game but then decided I want to work off the third person template, project name BottomlessTowerMVP_2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">+Added first-person functionality, and switch between functionality.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">+Added the tracking bars for health and mana. Hud for gold, xp, depth and score.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">12.03.2023<\/span><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>?Need passive regen rates for health and mana. Adding var for the rates.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Health\/Regen needs to be called when the player doesn\u2019t have max health or mana, it would be unwise to check for this in a tick event as it would need to check an if statement every frame. Instead I will create a function\/event that is called when the player casts a spell \/ takes damage which starts a timer where once it ends, they regenerate a certain amount of health every tick \u2013 if they take damage \/ use a spell again, the timer is restarted. ** lower priority but good system, do later.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spells:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From a previous project, I recall being able to create a structure of information for an inventory system, I believe this is a similar appropriate use case where I can easily set up a structure of information for each spell and much more easily edit them as their variables are isolated from the rest that I may potentially use for spells.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Upon attempting this, I have been struggling to figure out a way to call these variables from the class objects. I\u2019ve assigned damage and mana cost to each spell blueprint individually to see if I have any success. Tried storing the active spell as a variable on the player that the HUD could call but it seems I have to instead use an index and a select function with all the spells in order to access spell variables like damage and mana cost \u2013 Upon further investigation, this is because the select function return value is returning a reference to the class whereas the variable is storing a reference to the spell actors.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"848\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-12.png\" alt=\"\" class=\"wp-image-147\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-12.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-12-300x271.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-12-768x693.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">+spellcasting, spells and switching inbetween them + spell UI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">+Punchbag enemy, can be stunned by hitting with spells and \u201cknocked-out\u201d when health is 0.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"548\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-13.png\" alt=\"\" class=\"wp-image-148\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-13.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-13-300x175.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-13-768x448.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Next: Mana\/health regen. Enemy Respawning sequence. Enemy behaviour tree. Dash. Gamemode controller, start button+interaction and lastly the level construction + elevator illusion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Need to focus on core features, do in this order: the level construction + elevator illusion, Gamemode controller, start button+interaction<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mana\/Health regen, a function that will increment the players health\/mana by the regen rate variable every tick but only after a delay.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descent illusion \u2013 material volumes<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make a level based on the previous illustration of the game \u2013 big transparent floor platform and walls around it. ?Can I make the walls one big layer? In event graph, make the walls increment on the y axis every tick and once they reach a set height, their y axis is reset to the bottom \u2013 could use material volumes to recreate this apparently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I need a button to \u2018start\u2019 this sequence, needs interact functionality to work between the player and button.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I need to create a gamemode controller to handle some of the mechanics, I intend for this to handle the depth and score and logic for starting the descent mechanic (moving walls up and enabling enemy spawning). This may also handle enemy spawning too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use a volume to fade the top and bottom of building out before they\u2019re looped back to the bottom.<br>This is a good effect but as it\u2019s an effect I think it\u2019d be best to leave until last on the level constrction.<br>Bottom layer needs a volume for easing in and top layer needs a layer for easing out and check for only the unit when the wall is full eased out.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Volume Dissolve in UE5 Niagara Tutorial  | Download Files\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/kKmXKf2dJLA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The walls actors consists of one layer of walls around the playable map, each tick their Z axis is increased by one. For looping them back, first idea is to check the Z axis each tick for if they are equal to or greater than a height limit but this is not optimal since each layer will be checking for this condition every tick, I may have 6 to 7 of these in a game which isn\u2019t ideal at all, fine to test how this looks but not great.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My preferred solution is to create another object which will trigger an event on the Wall_layer on a collision, the event should change the layer\u2019s Z-Axis back to the bottom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I had a go at following a \u201cvolume Dissolve\u201d tutorial, I like the idea for making the walls of the tower gradually disappear at the top and appear at the bottom and the Niagara effect for masking the missing portions of the asset would be a great effect for the level however, as this is strictly a visual effect I\u2019ll need to put it far down the priority list and treat it as a stretch goal. I\u2019ll need to find an effective way to layout the grid for the Niagara particle grid aswell. It\u2019s a simple but a little lengthy to set up.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"505\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-14.png\" alt=\"\" class=\"wp-image-149\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-14.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-14-300x161.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-14-768x413.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019m now working on GameMode where I intend to start adding logic for the gameplay loop.<br>This will need to spawn BP_Enemy overtime.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"599\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-15.png\" alt=\"\" class=\"wp-image-150\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-15.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-15-300x191.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-15-768x489.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This first gameplay logic on an event graph in BP_ThirdPersonGameMode, I have a timer that loops and will trigger an event which will spawn an enemy. I thought the player quickly got overwhelmed so I added a limit to how many enemies there can be in the level, this would be in the final game anyway so it seemed like a good setting to add for now. The enemies spawned in however did not chase the player, after a little checking over settings I quickly found that the \u2018Auto Possess AI\u2019 setting was set to \u2018Placed in World\u2019 rather than \u2018Placed in World or Spawned\u2019.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since the enemy can respawn, I can delete it when its health reaches 0 rather than disable movement\/\u2019stun\u2019 to preserve a single enemy instance while testing the player\u2019s combat abilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019ve noticed that \u2018Stuns\u2019 are a popular mechanic in a number of games where if the player does enough damage to a target in a small frame of time then the target will stagger or be stunned for a brief moment, mechanics like this are integral to survival in levels with difficult enemies (high health, high damage). This could be integral to keeping the player engaged with the gameplay loop where they have more of a fighting chance against tougher enemies, and I may be able to increase the difficulty faster so the player doesn\u2019t get bored (RESEARCH TOPIC).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now that enemy spawning is in, it\u2019s time to trigger all game events once the player presses a button. The events in question will be incrementing depth and score, spawning enemies, moving the walls and erasing the lift button.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I need to setup an interact mechanic for the player, which will work for both the button and future mechanics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Feedback from a 28 year old post NUA postgraduate who used to teach game design:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cUser interface needs absolute fool proofing for the player to actually register the information, assume the player is an idiot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mechanics are really best taught through a tutorial\u201d. From this advice from a peer, I think it would be good to create an introduction to the tower before they can access the start button.<br>Say, the player could<\/p>\n\n\n\n<p class=\"has-text-align-center has-large-font-size wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Thursday 30\/03\/23<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Today is Thursday, halfway through my first week off out of three and I\u2019ve slacked off, fortunately Rich is still doing weekly meetings, just him I and James H turned up and talked about our projects and some other miscellaneous topics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rich has notes for me from his AI presentation to help me. \u201cstafe slots\u201d, Lines being drawn from the player. Think of them as a \u201cbucket\u201d, you baddy can pick out at random that isn\u2019t full so they can come from that point. Bucket can\u2019t be available when.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"532\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-16.png\" alt=\"\" class=\"wp-image-151\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-16.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-16-300x170.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-16-768x435.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"550\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">been working on an improved method for detecting navigation obstacles, think I&#39;m onto something now!<br><br>this costs 1 raycast per frame and maintains a &#39;radar&#39; around the boat that I can use to adjust steering on the fly <a href=\"https:\/\/t.co\/Sv61n72OhP\">pic.twitter.com\/Sv61n72OhP<\/a><\/p>&mdash; David Evans (@festivevector) <a href=\"https:\/\/twitter.com\/festivevector\/status\/1623519344507654145?ref_src=twsrc%5Etfw\">February 9, 2023<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">freesound.org is good for sounds if I want to add some to the game, which is a key element to add eventually.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I ought to finish tuning the features I want in the MVP, to stay on track I have listed on Trello the main aspects I believe I need in the MVP as it\u2019s very easy to lose<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"636\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-17.png\" alt=\"\" class=\"wp-image-152\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-17.png 448w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-17-211x300.png 211w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"489\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-28.png\" alt=\"\" class=\"wp-image-163\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-28.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-28-300x156.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-28-768x400.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-extra-large-font-size wp-block-paragraph\"><br><span style=\"text-decoration: underline;\">THURSDAY 06.04.2023<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>A brief snapshot of how the game looks so far but before I implement player damage, I think the tower needs to have a lot more space though if I want to implement group spawning as well as give the player enough time to turn around and react.<br>On top of this the enemies were moving very fast, they could cross over the arena in a very short time, this wouldn\u2019t be too bad when working on certain enemy behaviour trees but for now I\u2019ll reduce the enemy walkspeed from 600 to 150.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"505\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-27.png\" alt=\"\" class=\"wp-image-162\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-27.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-27-300x161.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-27-768x413.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-large-font-size wp-block-paragraph\">[DAMAGE TO PLAYER AND DAMAGE COOLDOWN]<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next integral element is to allow the player to take damage from the enemy.<br>A very simple way to apply damage is with unreal engine\u2019s apply damage and event AnyDamage, it even automatically carries a damage type class which is perfect for the element damage stretch goal.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"95\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-26.png\" alt=\"\" class=\"wp-image-161\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-26.png 620w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-26-300x46.png 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">First issue is that the event is called every tick during collision so the player dies at a fast rate.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"594\" height=\"320\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-25.png\" alt=\"\" class=\"wp-image-160\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-25.png 594w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-25-300x162.png 300w\" sizes=\"auto, (max-width: 594px) 100vw, 594px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>My first solution in mind was to add a do-once limit that was reset after a second onto the \u2018AnyDamage\u2019 Event, though I considered it would be a better coding practice to minimise how often this event was called and added to the hit event <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"291\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-24.png\" alt=\"\" class=\"wp-image-159\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-24.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-24-300x93.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-24-768x238.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Upon playtesting, I then realised I had forgotten to consider that multiple enemies are present at a time and would be able to trigger a hit event at a given time<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"526\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-23.png\" alt=\"\" class=\"wp-image-158\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-23.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-23-300x168.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-23-768x430.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019ve contemplated this kind of scenario in games before whether the rate at which players receive damage should be based on how often the enemies themselves are allowed to trigger damage or if the player should just have \u2018immunity-frames\u2019 so that they don\u2019t die too fast.<br>This has a significant impact on the difficulty of the game as multiple attacks in quick succession can quickly kill the player if a cap is not implemented, in this instance where I intend to have a larger number of enemies the player may come into a scenario where they are suddenly killed, it would be worth both adding a tiny limit on how often the player takes damage and how often an enemy deals damage.<br>*Only after completing the interact code and look back to this did I realise I\u2019m missing a failstate, something needs to happen when the player loses all health.<\/p>\n\n\n\n<p class=\"has-text-align-center has-large-font-size wp-block-paragraph\"><strong>[INTERACT AND START BUTTON]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next I\u2019m planning on creating interact and start button, I want to get the ball rolling because I think it has a critical impact on the feel of the game, it means that the level loads in an idle state where the walls aren\u2019t moving and the enemies aren\u2019t spawning, pressing the button and seeing these two factors change should nail in the feeling for the player that they\u2019ve started the game and are now descending.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"345\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-29.png\" alt=\"\" class=\"wp-image-164\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-29.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-29-300x110.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-29-768x282.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019m implementing interactions using an interface, I think this is a great system for calling all possible interact events for the player in future, mainly the vendors I plan to use in future.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Following previous experience and examples online, I\u2019ve set up an interaction interface as well as a button which<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"556\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-30.png\" alt=\"\" class=\"wp-image-165\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-30.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-30-300x177.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-30-768x454.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>A guide I checked on to properly set up the interact element and updating a hud element implemented it all on the class that was being interacted with in the example rather than the player, in my game I\u2019ve tried to make sure I follow better coding practices after watching the guide., in this case although I attached interacting to the player, I managed the overlapping event and hud adjusting to the object being interacted with rather than the player.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"438\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-31.png\" alt=\"\" class=\"wp-image-166\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-31.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-31-300x140.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-31-768x358.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\">Code snippet from followed Example<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"350\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-32.png\" alt=\"\" class=\"wp-image-167\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-32.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-32-300x112.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-32-768x286.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\">Code from my game after following example.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I intend to have multiple objects(Namely, vendors) that the player will overlap with in order to interact with them, it would be wiser to have the player hold this code rather than the object.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-33.png\" alt=\"\" class=\"wp-image-168\" width=\"610\" height=\"337\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-33.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-33-300x166.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-33-768x425.png 768w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><figcaption class=\"wp-element-caption\">Interact prompt now tied to the player blueprint.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The game now has a lovely &#8216;start&#8217; sequence, an easy to use start-button and once the button is pressed, the walls start moving and the enemies start spawning.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"480\" style=\"aspect-ratio: 852 \/ 480;\" width=\"852\" controls src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/BT_InteractClip.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Teams meeting: [ Rich says MVP is pre-production phase element to \u201cfind the fun\u201d, depending on the studio you may or may not use the MVP as the base for the final product (final product from MVP is more-so done for mobile games which focus much more on fail-fast formula to try and find products that playtesters find fun &#8211; I&#8217;ve learned about this recently too with Rovio who made dozens of games before they created their hit success Angry Birds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In my MVP development, I\u2019ve coded mechanics in a way with future-proofing in mind, though these methods required little adaptation and I haven&#8217;t spent time making advanced systems to work with future plans, I&#8217;ve questioned good\/bad the MVP code can be in regards to being used to form a final product. Rich says don\u2019t make &#8216;toilet code&#8217; but find a good happy medium between being good and bug free and not write terrible code, it\u2019s a balancing act between work quality and time spent you have to find overtime ].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For enemy spawning, break the arena down into a grid, don\u2019t let enemies spawn in the grid near the player. BP_SpawnGrid?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rich suggests making a lot of variables private, which I have more to learn about overtime but it&#8217;s mostly so that a lot of variables aren&#8217;t accessed when they shouldn&#8217;t and causes much less errors when compiling. This could be a great note for the final rpoduct<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cRich says Rubberducking, talking to someone\/something and say your problem out loud can make the solution to your problem very clear\u201d &#8211; This was quoted after I figured out a optimisation for my game.<br>The wall layer could have better code, instead of having a ton of walls with their individual timers, I should have a wall-Manager with a single timer that increments all wall layers each time, and sets their height automatically. Gamemode would be a good spot to hold this logic as the start_Button is already casting to that object to start the game.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">*This note isn\u2019t much for game dev but it\u2019s an important note from Rich that there are some good work opportunities for graduates and post-graduates. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"538\" src=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-35.png\" alt=\"\" class=\"wp-image-170\" srcset=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-35.png 940w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-35-300x172.png 300w, https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-content\/uploads\/2023\/04\/image-35-768x440.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">SFX Are a really good effect to use in games, Daniel H has suggested using metasounds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is quite messy so far as I&#8217;ve been dumping a handful of information so far into a long word document. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From today I intend to document my process working on the game directly to my wordpress rather than a word document, I think this would work best if each posts contained the work I did in that given week.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This may help a lot with my reflection as well on a weekly basis if I do a weekly reflection post on the work I&#8217;ve done in the given week.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is all the development I have documented for the past month, rather than make a series of seperate weekly posts where development was very on-off, I&#8217;ll upload this document to cover what I&#8217;ve got so far. To start off, I&#8217;ve listed some of the core plans I have for the MVP. First-Person game, dash,&hellip; <a class=\"more-link\" href=\"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/2023\/04\/06\/bsc1b-indie-dev-devlog-06-03-23-06-04-23\/\">Continue reading <span class=\"screen-reader-text\">BSc1b &#8211; Indie Dev &#8211; Devlog 06.03.23-06.04.23<\/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":[1],"tags":[5,7],"class_list":["post-145","post","type-post","status-publish","format-standard","hentry","category-uncategorised","tag-bsc1b","tag-indie-development","entry"],"_links":{"self":[{"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts\/145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=145"}],"version-history":[{"count":3,"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts\/145\/revisions"}],"predecessor-version":[{"id":191,"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/posts\/145\/revisions\/191"}],"wp:attachment":[{"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lloydmills.nuacomputerscience.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}