Refresh Development Log

November 30th- December 4th

I currently have the player design finished and have had it finished for about two weeks, I just finished Voidkeeper 3 and the Heavy Rifle sketches today, hopefully, I can finish all the sketches or this week at the very least, which would complete the GDD and get it ready to pitch if  I ever get the opportunity and decide to take it, although for now, Refresh is a solo project. MONDAY: Today I have finished everyone, and have decided to completely rewrite The Warden and make him a floating eyeball rather than the cyclops guardian of the void. I have also finished most of the weapon sketches and refined the existing sketches. I currently am right on schedule for a June 2021 release if all goes according to plan, fingers crossed! TUESDAY: Today I have rewritten The Warden and finished designing the weapons for the game. I’ve also removed Pandora’s Expanse in favor of the Chamber of Calamity, to stay more true to my inspirations, Adventure, and Rouge. I have also designed the Chamber of Calamity. WEDNESDAY: Today, I have finished the rough design of The Vacant Cells, thus completing my GDD. I have moved on to my project board and am filling in tasks in the backlog. Since I left off on the task of coding AI before writing in this log, I think I’ll set aside about thirty minutes to an hour playing Void Bastards to see just what the A* Pathfinding Plug-In can do for AI THURSDAY: Today I have moved on to my project board and started adding tasks ranging from production all the way to the end of post-production in hopefully early summer so that I can publish mid to late summer 2021. Yesterday, I said that I would play Void Bastards for about half-an-hour to get a feel for the A* Pathfinding Project. It seems like a great,  simple, AI package for Unity, but with a heavy emphasis on simplicity. The AI just felt like basic stealth AI, which gets the job done for a game like Void Bastards, although for Refresh, I’m thinking I’ll use Refresh to supplement coding AI from scratch rather than using A* alone. I’ve actually used A* myself on my recently canceled project, A Safe Place, and I was able to get basic AI that would move toward the player and attack them when their attack trigger collided within two clicks and about four lines of code, but I plan for the AI in Refresh to be slightly more fleshed out than that. FRIDAY: On Friday, I prioritized tasks with the Fibonacci sequence, opened Sprint 1, and inserted tasks into sprint 1.

December 7th- December 11th

MONDAY: Today I began working towards the MVP, which I hope is finished by the 18th. I added the player sprite, a movement script, a health script, as well as a death function. I also created a game over screen with a restart button and a button to take the player back to the main menu. I have the due date for sprint 1 set for Friday, meaning the end product won’t be pretty, but if another sprint is necessary, I have one more week until winter break. I have also tied the player dying to a loss, I have also made an AI that tracks the target, has a limited amount of health, and dies. I have also figured out how to detect multiple game objects with a single collision parameter. I completed all my planned sprint 1 tasks today, so I don’t know how much I’ll be doing tomorrow. TUESDAY: Like I said, I didn’t do nearly as much as yesterday, but I’ve still done plenty. Today I created the main and coded the main menu, created the options menu, as well as a minimalist heads-up display, although I’m still in the MVP phase, I believe this HUD looks somewhat like what will be in the final product. I have also made the player’s bullets deal damage to the enemy. At the rate I’m working at, I expect MVP will be finished later today or Wednesday, and that we might be able to expect the final product as early as mid-May, although I would still expect a mid-June release in case anything comes up. I’ve decided I don’t need this boss to shoot a projectile, the AI’s attack is a charge that does 50% of the player’s health, which the player can narrowly dodge, and get off one-fifth of their health with a bullet every time they do. Other than implementing that, I also added a health bar for the boss (it just displays the number, but possibly a bar in the future), and a pause menu has been added. Now I can say MVP is 100% complete, which is where I wanted to be for winter break, which is coming up in about a week now. Thus the rest of this week, as well as next week, will be note-taking days, meaning you won’t see anything in the devlog, because other than commenting on code to prepare me for the two-week holiday break, I won’t be working in Unity for that time. There will be a lot of blog posts though, on game theory and the concepts in game development I should keep fresh in my mind at all times. Happy holidays! WEDNESDAY: Like I said, I didn’t make any changes to the game after Tuesday. On Wednesday I took notes on two methods of making a simple 2D AI that follows a given target, this also works in 3D and is the backbone for enemies in single-player games, regardless of the genre. I also found time to take notes on 2D AI Shooting, which is a bit more genre-specific, and thus tutorials are a bit harder to find on the subject, so I did spend a bit more time on this because of that.  I have decided that at least most of what I will be doing tomorrow for this project is playing other single-player games and studying how they are replayable past the main campaign. Refresh, the game I am currently developing, will be very short, 5-10 hours for the hardcore to the semi-hardcore audience and maybe 15 hours for the casual player. Thus, to prevent people from just buying, playing through the game once, and returning the game, I should have some kind of replayability present. THURSDAY: I lied, I am updating this log still, although I have paused development on Refresh until after winter break because Refresh reached the state I wanted it to be in on December 18th, the day before winter break, on December 8th, the second day of the prior week. And thus, yesterday and today have been note-taking days, Refresh is an ambitious project, maybe not as ambitious as most games but pretty ambitious for a solo developer. Because of that, I am taking this extended week to take notes on concepts I’ll need to properly grasp come the new year as well as for future projects. Now progress on my notes, I have currently just finished taking notes on a 2D Patrol AI, useful for 2D platformers and simple stealth games. As the day progresses, I wish to take notes on AI programming in C#. And once I’m done with that, I’ll play a couple different games and take notes on what makes them replayable to get ideas of what the replayability factor should look like in Refresh. FRIDAY: On Friday, I took notes on stealth AI, more specifically, a line of sight via a ray. It doesn’t have much (or anything) to do with my current project, although I’ll most likely need it in the future for other games I create.

December 14th- December 18th

MONDAY: Today, I finished taking notes on tower defense AI and have started to take notes on making more advanced AI with state machine behaviors. TUESDAY: Today, I finished taking notes on state machines in Unity and I also started and finished taking notes on making a boss with the state machine now that I know how it works. That finishes up the AI portion of my note-taking, from here, I’ll mostly keep working on the GDD for Refresh and then starting to take notes on level design for different styles of games, but given I only have three days I’ll probably keep everything related to Refresh. WEDNESDAY: Today, I watched some videos on random dungeon generation to see what videos I could best take notes on. I settled on a 3 part miniseries by Blackthornprod and began to take notes. THURSDAY: Most of my note-taking on the three videos took place today where I ended up finishing all three. Since I can’t do as much work on Tuesdays and Fridays compared to Mondays and Thursdays due to schoolwork, I’ll finish up this week with what’ll most likely be 30 minutes to one hour of SoloLearn because I need to 1) Brush up on C# and 2) Get certified in C# because if I wish to turn this into a career a C# certificate would look really nice on my resume. Happy holidays! FRIDAY: Today, I did an hour of SoloLearn, I got to the Classes lesson. I have been learning a few things I haven’t learned from Unity, but overall the C# course is a lot of review for me, but it’s all stuff I want to keep in my mind and I would like that certificate for my resume. I also came up with ideas for three side bosses:

Happy holidays!

January 4th- January 8th

Happy New Year!

MONDAY: Today, I finished an aiming system, the player can aim their weapon along the Z-axis. Now, this is a 2D game which although doesn’t use the Z for movement, does use it for rotation, despite common thinking. I used this method because since it rotates all around the player, they can be very creative with how they approach fights as well as movement. This system took me the better half of the day, leaving me room to work on two mechanics as well as make tweaks to Voidkeeper 1 to make the fight a test of reflexes and reaction time rather than perform the eleven tasks I was able to do on December 7th. Currently, the fight with Voidkeeper 1 seems fairly challenging to me, almost too much so, but my hope is to get my friends to play the game in its current state to get a clear sense of whether the game is actually challenging, impossible, or not that challenging and I’m just bad at video games, even the ones I make from scratch. TUESDAY: Today, I didn’t make as big of a mark as I did yesterday, the big thing about today is that I added walls that kill anyone on contact. I also made more tweaks to the boss and looked at what an entry room, where you could access all the levels, would look like, and I think I’ll go that direction. I’ve still been thinking about what I want to do for the levels whether they should be randomly generated or hand-built as I’m approaching the point where I’ll begin adding levels into my game very quickly. I also got my brother to playtest the game and tell me if the game is a proper challenge thus far, shortly, I hope to get more people to playtest, but we all only have so much time in the day. WEDNESDAY: Today, I started the room where the player will fight the tutorial boss to initially grasp the mechanics. I also started on an evasion mechanic, it’s essentially an extra jump after you’ve already jumped twice to help with the small amount of parkour in Refresh, I didn’t want to make it too complex because 1) Programming something super complex would take me well beyond June 16t, thus I would have to delay the game for weeks or even months. 2) My target audience doesn’t want a complex mechanic, so a simplified evasion mechanic will do just fine. THURSDAY: Today, I started on a new mechanic; the player can now press E after they have jumped twice for an upward burst of speed to assist them with the slight parkour mechanics. I also have worked more on the second boss enemy, which is in an almost finished state now by next week, they should be ready to prefab so I can move on to the third boss, begin work on the three trial areas where the player will fight these bosses, as well as the Chamber Of Calamity, where the player will end the game by fighting the warden of The Void Prison. FRIDAY: Today, I finished Voidkeeper 2, which took some time to get right, mostly due to me being unable to keep him in the air once he was flying, so halfway through the development of Voidkeeper 2 I decided that V2 will act like a predator missile instead, it’ll help the player master the dash mechanic. Speaking of, I finally got that mechanic up and running. I could very well keep it as is, and might if things start going horribly wrong, although I wish to add a cooldown to make the dash more of the last resort if players get themselves in a sticky situation, otherwise, I’d ship the mechanic in this state. I also got to work on Voidkeeper 3 today, because I’m using a universal health script for the enemies I didn’t need to code his health, it’s been plug and play since I finished Voidkeeper 1. He also his player tracking and movement now because, after Voidkeeper 1, I’ve been able to copy and paste the code to get it working to save time. I think I’ll work on making the AI more advanced on the backend once I’m done with Voidkeeper 3, I also would like to add a range limit to the player’s bullets so that they won’t go into the abyss when you miss your shots.

January 11th- January 15th

MONDAY: Today, I created three levels, and a script for transitioning between them, as well as a trigger the player, must collide with to transition to a given level. TUESDAY: Today, I added the three boss enemies to these levels and tested out the transitioning. Transitioning between levels was a bit weird I found out, but that was due to me using Cinemachine, which is a package built-in to Unity that lets you create virtual cameras. This is pretty great for having a camera that follows the player without having to write a whole bunch of code, but even better for multiple scenes, because the virtual camera can be following the player, and every Main Camera has a Cinemachine Brain, which makes it so the virtual camera will become the main camera once the player enters that scene. Once I figured that out I got started on Voidkeeper 1’s trial, I decided to keep Voidkeeper 1 a fast AI, but not have a lot of health, and he can only move on the X-axis, and thus only track your X-axis movement, thus promoting the vertical abilities where the game shines in my opinion. I also would like the player to fight five clones of Voidkeeper 1. The script to spawn him in a spawner was the easy part, but getting him to spawn five times, and only spawn one, and then another, once the one on-screen dies until five have been spawned, was probably one of the hardest mechanics in this game to code. But by about 5:00 PM, which is when I usually stop working, it worked exactly as planned. I then tested and realized it was just as hard on the player as the development was on me, and I don’t know if I want to fix that or embrace it. WEDNESDAY: Today, I thus far haven’t been able to get anything done due to a power outage. I am still awaiting a playtester or two to help me decide if I should change the fight’s difficulty. The good news is that I get my brother today, he loves this game and is within the target age range for this game, 9-14 years old. Although I think I’ll send a restricted build to a few friends. At about 5 tonight I’ll update this blog with the details of what I manage to get done today. As predicted, I didn’t do as much as I’d like to today. I made a victory screen for each trial, coded it into the Game Controller, added the UI to each trial and that’s about it as far as work is concerned. I also had my brother playtest Voidkeeeper 2 and 3 because I’ve had those test builds sitting there forever. He also playtested the game in its current state, saying that it was hard to grasp because I’d made so my changes between the test builds that he played and the game now, which says to me I should’ve given him a third build to play to get acquainted with these changes that are more reminiscent of how the game will be shipped. THURSDAY: Today, I got the first trial done and began work on the second trial. I would’ve done more on those but there were so many UI-related bugs that popped up out of seemingly nowhere that I had to fix and fixing all of them costed me about an hour, which wouldn’t be too bad if they hadn’t popped up around 3:00 PM, leaving me one hour to develop before I wrote how today went in this devlog and call it a day. Despite not having a lot of time, I still was able to get the UI to become modular for a multi-scene game.

January 18th- January 22nd

Monday was a holiday, and thus a day off, and Tuesday I ran out of time due to homework. WEDNESDAY: Today, I mostly just threw around ideas, the three trials were already done, but I didn’t know where the game was going. Then my baby brother, who’s playtested this game as he is in my target age range, gave me an idea, dimensions, which would work quite a bit like Dead Cells’ boss cells. In lamen’s terms, after the final boss of the first dimension, you would play all those levels once again with a few gameplay tweaks to make things more difficult; more enemies, faster move speed, smarter AI, ext. Although I’m not going to implement it exactly like Dead Cells because I’d rather not be forced to permanently halt development due to being sued for copyright infringement. Because I’m already leaving a few things out from the Dead Cells version, I think I’m in the clear, but, to make sure, and to make the game more fun, I’ll add a different end boss to each dimension, the fourth and most difficult hosting the final boss, the warden of the void prison. And to make Refresh more like what I first intended, which was a rouge-lite, I’ll add perma-death as a feature, meaning getting to the end of the fourth dimension will be much easier said than done. Besides this brainstorm, I also tweaked trial 1 slightly, or tried to, I tweaked it back after and got started on the final boss for dimension 1. THURSDAY: Today, I got to work on something I’ve been trying to figure out for a while, how to make trials 2 and 3 longer, while I still don’t have 3 completely figured out, I got to work on making trial two longer with more enemies for the player to fight, as well as a boss I plan to work on tomorrow. The enemy variety isn’t huge, but this isn’t meant to be any big game, just something to put on my portfolio that I went from start to finish designing it. I also plan to distribute as a game best suited for an ages 9-14 audience.

January 25th – January 29th

Monday, nothing productive was done because I was studying for my PSAT, Tuesday was the day of my PSAT, so logging into Unity was impossible. WEDNESDAY: Today, I solved my raycast issue with the help of the Unity Forums. Turns out all I needed to do for the object was to stop it from detecting its own collider, I found this solution by creating a test scene and creating an empty game object and attaching the script to that object. The draw line function worked. I then added a collider to test if the ray was detecting those, and it did. With the ray fully functional I brought the object in question into the test scene and turned the collider off, the raycast worked. I then went back to trial 2 and stopped the raycast from detecting its own collider. Then, it worked as I wanted it to. I also worked on a camera offset the last few minutes I worked and found -0.6 was good for Refresh.

Thursday and Friday were just me working on getting the raycast in the proper angle to spot the player, on Friday, I finally got it working.

Febuary 1st – Febuary 5th

MONDAY: Today, I made the far wall cave in on trial 2 when the player begins the boss fight. I also worked on getting the correct angle for the raycast some more and found it quickly. Although the bulk of my day development-wise was making the walls cave in on trial 2 when the boss fight starts, as well as creating a short tutorial that is ultimately a run-down of the basic mechanics because I had quite a few assignments to do for finals.  TUESDAY: Today, While wrapping up the third trial, I mostly focused on responding to the feedback I recently received. they enjoyed the game, but they said the clones on trial 1 were too fast, and the boss didn’t give the player enough time to react, so those were my focus for the day. It only took me about an hour to find the perfect numbers, although it was late when I read this feedback, all day I was working on a finals assignment. So when I was done responding to the feedback, I created the shield generators for trial 3 that make Voidkeeper 3 invulnerable. WEDNESDAY: Today was quite a productive day, I worked on and finished the shield generator ads, there’s only one at the moment because of the amount of trial and error, adding more is also going to be one of the ways I increase difficulty. Later in the day, I also got the final boss of the first dimension up and running, with his first phase up and running. Since I’m using a universal follow script, I decided to refine the follow a little, as before they’d get stuck on a wall, now they crash into a wall, which would make a damage timer to prevent camping the bosses until they die a nice addition to the game. Because of the immense trial and error of both tasks, that’s all I got done. Tomorrow I plan to add a health bar so that the boss text can fit the names of the final bosses because right now I have to do a bit of scaling to fit the name, which I’d rather not be the case. Health bars are also standard in all games in one form or another. THURSDAY: Today was quite the day, I tried to delete a sprite of a character who was cut from the game but ended up deleting my entire sprites folder, although, after about ten minutes, I recovered everything. Then, after I finished and implemented the health bar, the hit registration on the trial 1 and trial 2 ads, as well as the trial 3 bosses all stopped working.  I looked for a solution to this problem for hours, and then after I reboot my computer for the second time, the bug fixed itself, the same thing popped up in my last project, A Safe Place. Once that bug fixed itself, then the die function wouldn’t work on the enemies, although it worked just fine on the player. I tried taking the function out of the take damage function, and I tried adding a maximum health integer because I was thinking the health bar was to blame.  After several reboots of Unity, and several reboots of my computer, and several hours of internal screaming, I was about ready to cancel The Warden’s Gauntlet and move on with my life. But then, as a last-ditch effort, I went back to yesterday’s last revision, and everything was back to normal, the hit registration was working, health was going down, the enemies died when they were supposed to, and then 5:00 PM hit. So by and large, the development of my game didn’t progress at all today, so if this continues, expect this game to be delayed by a couple days to a week. Although I plan to work into about an hour or two of crunch time tomorrow, so if I’m productive during the day as well, which that’s usually a yes, I might have to retract my previous statement. FRIDAY: Today was quite a productive day. I mostly just got some work done on improving the AI, which I still need to work on, as well as tweaking little things that will make the game a more enjoyable experience for the player.

 

February 8th – 12th

MONDAY: Today I worked on a dodge mechanic (which is really just a forward dash) to help the player outmaneuver the AI. It took me quite a while to particularly get the player to pass through the enemy colliders so they can come out of the dodge on the other side of them, but I eventually found out setting all the colliders to discrete would help, because discrete colliders can’t detect other colliders moving at remarkable speeds, so pushing the player about -2050 units on the x-axis with the rigidbody did the trick. Although when I tested it, the UI could catch up fast enough after the dodge that the player couldn’t react.

TUESDAY: Today, I wasn’t able to do anything, although I don’t think crunch will be needed, because plenty has gotten done in the past couple of days and there isn’t too much left to do until post-production. Instead, I worked on my math quiz and history test. WEDNESDAY: Today, not a lot got done, but the quality of what got done is what matters here. This morning, I fixed the AI for Voidkeeper 1 specifically, as the standard follow AI is perfectly acceptable for Voidkeeper 2 and 3, as well as the ads on trials 1 and 2. What I did to the AI was made it track the player’s position on the previous frame, this way there is some time between the player avoiding the enemy and the enemy reaching and killing the player. There are probably better ways to program AI for the style of game Refresh is, but I found this to work quite alright with all other mechanics in play. Speaking of other mechanics, I also worked a bit on the dodge mechanic. I gave it a cooldown so the player can’t spam, although, at the current value of half a second, it shouldn’t be too noticeable. I also attempted to add multiple directions to the dodge, although because of the limited camera angles I have to work with these are just forward and backward (don’t ask me why you’d need a backward dodge). There were also a few bugs I needed to fix in the dodge, and I yet to know if I got to all of them, but if I didn’t, I always have tomorrow. THURSDAY: Today I got a dodge mechanic up and running, which is really just a forward dash since I’m working in 2D space rather than 3D. There are quite a few ways I could’ve gone about it, but what I decided on was added a force to the rigidbody that was insanely fast. FRIDAY: Today, I worked on improving the dodge mechanic, specifically, making the player pass through colliders while it’s active, after spending all day on the Unity Forums, I found that because the dodge was so quick if I set all collision detections, including that of the player, to discrete, the player would pass through the enemy colliders due to the speed of the force that’s pushing the rigidbody.

February 15th-19th

Monday and Tuesday were President’s Day and Mid-Winter break, thus nothing was done. WEDNESDAY: Today, while I was able to at least set up a script to manage the boss phases, my whole day ended up being dedicated to an immortality bug. Only about an hour or two after I discovered the bug, I found out how I went about spawning the boss object was what was causing the problem, so from there I knew the solution was related to that. Although the solution took me an embarrassingly long time to figure out, simply disable the sprite renderer and AI scripts before runtime, so the play can’t see the boss and the boss doesn’t move towards the player, and then enable them when the spawn boss boolean equals true.

February 26nd- 26th

MONDAY: Today, I worked on and almost finished the coroutine for phase 3 this morning as well as the script making the floor kill the player on collision, but the rest of the day, my assignments got all my time. TUESDAY: Today, I finished the coroutine, as well as spawning the generators one by one for an infinite period of time, destroying it if it touches the ground or the boss, and getting its health to go down and go inactive when the player shoots it, it also stops the generators from spawning. All I need to do to complete the programming of the generators is to make the boss vulnerable to damage when the player shoots one, which should be quite simple. WEDNESDAY: Today, I got to work on the final part of the generators; the player being able to shoot them and make the boss able to take damage. I previously thought after spawning the generators, it would be pretty simple, but then instantiate crashed Unity, and then I found it wasn’t as easy as I thought. Although to fix the crash, I had to ensure they only spawned one by one by using a boolean. Although I was searching all day after that for a way to only have the boss be vulnerable in phase 3 when a generator is shot. I tried all kinds of things, like disabling the is invulnerable boolean from the shield generator’s health script to check if the prefab was active in the hierarchy. It wasn’t until about four-ish that I found out how to store instantiated clones in a variable, but then I did, and it was awesome. It worked exactly as I wanted it to, disabling the boss’ invulnerable boolean and letting him take damage when one of the generators is shot. THURSDAY: Today, I made a portal spawn near the boss’ body when the boss dies. Other than that, I just commented on all my code.

FRIDAY: Today I commented on the rest of my code and made every variable that was public for the sake of added field control private serialized variable. Although with the number of scripts I had, it was a bit difficult to find what variables were being assigned where, although after about an hour of warnings and compiler errors being thrown in my face, I found what needed and what didn’t need to be public. After that, I found that instantiating the generators wasn’t working the way I wanted it to, but that was due to a simple mistake I made when typing a line of code in the script that makes the floor unsafe for the player. I then built out the game and played the standalone only to discover some changes that needed to be made. I made those changes and then built that version out. That was the version I uploaded to itch.io and recorded the gameplay demo with. Although even with that build, I see some small changes that could be made, but not even the size of the small quality-of-life improvements I made before uploading to itch.io.

March 1st-5th

MONDAY: Today I didn’t do that much with my game because I had quite a bit of schoolwork to do. Although I finished the first gameplay demo and uploaded it to itch.io. TUESDAY: Today, I got quite a bit achieved. I resized the map for the final boss so that the player could find a wall by phase 3, made Voidkeeper 1 a little more difficult by increasing his speed, decreased the speed of Mali Matus, as well as decreasing Mali’s health to 1000 instead of 12000, and I made a separate AI script for the guard on trial 2. WEDNESDAY: Today, I have come to the consensus that I will pause the development of Refresh for the time being to figure out what I should do for post-production. THURSDAY: I have some news before I say what I’ve done today, the development hold has ended, I know surprising, I’m being indecisive, again. So with that out of the way, I created the art for the levels today, which was the one thing in pre-production where I knew exactly what I wanted, surprising, I know. All the level art I was able to get done fairly quickly as I decided on having only one or two colors in each background to help with paying tribute to the legendary Atari game Adventure, plus my art skills are essentially non-existent. Although next up on the list is defining the mood of the game to help in developing the soundtrack, that might’ve helped in the trial backgrounds as well now that I think about it but that’s something for another time. Tomorrow most likely.

Leave a Reply

Your email address will not be published. Required fields are marked *