Defendy Rocket: Development Update #5

This week's been a bit of a mixed bag. We had an extremely positive Monday/Tuesday in regards to getting our initial BETA release ready, but then Wednesday through Friday have almost been an almost complete loss as we've tried to get the Unreal Engine source code built and deployed. And after posting last week's blog post, we found a significant issue in one of our blueprints which took most of last weekend to iron out.

We almost weren't going to write an update this week, but we wanted to keep this trend going. We've also got our usual weekly video ready to go too, but we're going to release that mid-next week (because the contents in the video reveal a gameplay twist we're hoping our BETA testers will discover for themselves without prompting - otherwise we'll need to tutorialise it for release).

Friday evening / Saturday 

After writing last week's update, we immediately fixed a bug with the time dilation actor class: Actors that were spawned weren't being told what the game's current time dilation was, so they would animate at full speed until the dilation changed again. You can see this in last week's video, as a single rocket sneaks through when Dave's drawing a line with the dilation applied. Unfortunately this fix would come back to haunt us later.

We continued work on the upgrades system on Friday night, intending to implement the remaining two upgrades we wanted in the game for BETA. Unfortunately I noticed a problem where the enumeration that defined the upgrades list wouldn't save. Nor would the struct using that enumeration. Eventually I realised there was an entire chain of problems stemming from the upgrades system. In the end I simply trashed a bunch of references and rebuilt the enum and the struct from scratch, but this broke half the game, forcing several hours of work to fix everything up and get the game compiling properly again... and even then the game wasn't running correctly.


Turns out that there was also a really weird bug with the engine regarding that time dilation fix from Friday evening. When that fix was implemented, it broke the game in a really unexpected way. Originally, I thought the problems were coming from the upgrade system overhaul, but they weren't. Once I realised that this was the case, it took me mere minutes to re-work that fix (something I should never have had to do though, but these things happen occasionally in game dev) and the game was running perfect again.

But we'd made no progress from where we were on Friday evening. To compound things the message log also decided to do something weird for me, adding another 20 minutes of faffing to the weekend's already long list of problems.


We had planned to roll out the first BETA test on Monday, but the weekend's shenanigans meant that there was no way that was going to happen. But now that everything was working again we moved on we've getting ready for BETA. We implemented the following changes:

  • Finished up the upgrades system.
  • Added support for the 'rocket path length' so be an upgrade.
  • Hooked up the 'path creation time' upgrade.
  • Reworked the path creation logic to allow support for a variable number of maximum rockets (it previously only had support for infinite rockets). This was to be another upgrade.
  • We added a blueprint for our stars. Stars are spawnable actors in the game that the player can collect for scoring purposes. We're not going to talk too much about this right now, because we're in the middle of getting people's feedback from the BETA and we need that feedback to be completely unbiased. We'll be talking about the star scoring / upgrade system in detail in a week or two.
  • We added a new material for the star when it's spawning (they can't be collected initially, or the rocket that spawns them would immediately collect them).
  • Completely re-wrote the game's combo/scoring system to support the stars.
  • Bug fixed: Stopped the player being able to draw new routes when the game is paused.
  • Added a star icon texture for the HUD/frontend.
  • We finally got around to adding some proper sound effects to the game. The combo sound placeholders from months ago have been replaced with new ones.
  • Added a new sound effect for destroying the small rocket.
  • Bug fixed: The HUD no longer displays in the frontend.
  • We tidied up the game over screen a little.
  • We added support to the save system for easy/medium/hard player high scores.
  • Reworked the scoring system to pull the current high score from the correct, current difficulty level that the player is playing at.
  • Bug fixed: Stopped the music timer from running during menus, causing the music to drop out of sync during the first actual gameplay transition.
  • Changed the combo system to spawn a star every time they get a combo of three with a single rocket.
  • Reduced the upgrade costs to 10/50/250/1000.
  • Overhauled the mega rocket completely, adding new weak-point meshes, materials and updating its logic to match. It's a lot more readable now. The mega rocket weak-points are now referred to internally as 'A' and 'B' rather than 'square' and 'circle'.
  • Bug fix: The large rocket was being destroyed when its shield was destroyed, which has been fixed
  • Bug fix: The player's rocket wasn't being destroyed when it hit the large rocket's shield, which has also been fixed.
  • Splitters updated to explode with their new destruction particle system.
  • Bug fix: Splitters child rockets now correctly face downwards when falling.
  • We added support to the frontend menu and game over screen to show the number of stars collected by the player.
  • We tweaked the game over screen some more and added the star icon to the high score and current score fields. 
  • Bug fixed: Particle systems generated by the explosion system now correctly have the game's current time dilation applied to them.
  • Updated the mega rockets to use the correct, new destruction explosion.
  • Finally solved why we keep having trouble getting builds on Android phones (if you've got data from a release build you downloaded from the store and you upload a different build to the phone from elsewhere, things don't work correctly).
  • Added the icons from the Android build directly to our SVN project.
  • Added functionality for disabling the medium/hard and debug buttons from release builds.
  • Added a 'Toggle FPS' button that only shows up in release builds (for now). This is so BETA testers can give us feedback about the performance.
  • Bug fix: Turns out that if the player rocket had to travel a REALLY short distance (i.e. < 0.0001 units) down a route in a single frame it would get stuck at the end of the route forever. When we added the upgrade for path length, it exposed this bug frequently. We've since isolated and fixed it.
  • Reworked the mega rocket functionality to spawn additional stars for destroying them efficiently. We also had to rework it so that the mega rockets increase the player's current combo when destroyed, but the player rocket doesn't spawn an extra star (as the mega rocket spawns its own ones).
  • Added player rocket explosion effect, so that it visual breaks apart when hitting a large rocket's shield.
  • Added a placeholder explosion effect to the star when they are collected.
  • Re-worked the splitter components (the spinning parts) so that they are deleted when the splitter is destroyed. Added validation checks to the logic to make sure they weren't being accessed after destruction.
  • We completely overhauled easy mode, fine tuning the waves and adding mega rockets towards the end.
  • Added a victory screen in case any player made it to the end of easy mode during the BETA.
  • Added victory sequence where the player is awarded bonus stars.
  • Added functionality to stop star spawning during the victory sequence.
  • Reworked the rocket wave spawning system to trigger the end sequence when there are no valid rocket waves left.
  • Added functionality to award the player any stars earned when they quit to the main menu.

Late on Tuesday we packaged up and shipped the BETA to our small group of testers. We spent the latter half of Tuesday playing the game ourselves and... we really, really enjoyed it. This was an extremely rewarding moment for us and we actually think we've got quite a special little game here. Initial BETA feedback was generally good too, we just need to iron out a few small niggles and make a couple of things clearer for the next release.

Wednesday to Friday

On Wednesday we made the decision to grab the UE4 source code and build the engine ourselves, for two reasons:

  1. There's a bug where Android saves don't work at the moment in UE4.8.1. We don't want to be at the mercy of Epic to release an updated engine when we need it (not to mention other bugs could slip in), so we're going to implement the fix in our own version (someone had already posted the fix online).
  2. Defendy Rocket struggles with performance (sharp drops in framerate) when it's creating a lot of new actors and updating others at the same time. We're going to create a pool of rockets (in the same way we have a pool of path meshes already), but we're also going to move the core rocket functionality and path creation to native code in order to get a bit more performance out of it.

Unfortunately, what I was hoping was going to be a few hours of downloading/building/exploration, has turned into a three day nightmare trying to solve two problems:

  1. Firstly, we can't deploy to IOS any more, because we now need to build our own code on a Mac. To do so we need a recent version of Xcode and to get that we need an up-to-date Mac OS version... which we can't install because our Mac Mini is too ancient. We've solved that by investing in a newer Mac.
  2. We haven't been able to build a version of the Android code, which means we can't deploy to Android either. After three days of installing, compiling (compiling takes HOURS!) and testing we're no closer to a solution here. We have Epic's support trying to help us out.

Dave's PC also decided to start acting up significantly on Wednesday, prompting him to buy some new hardware (he's still waiting on RAM to arrive, but he's likely to lose a day or two of dev time next week while he switches everything over and re-installs everything).

In the mean time, while I've been messing with getting a version of Unreal up and running, Dave managed to:

  • Add even more sound effects to the game.
  • Create some music for the title screen (not implemented yet though).


Next week we're going to implement those optimisations that were hoping to do over the last couple of days and continue to tweak and refine the game for our second BETA. We've got some ideas about how to make the game even better and we're going to implement them before we bring more people into the BETA. We were aiming to release it at the end of next week, but it's looking more likely to happen at the start of the following one now.


Posted on July 3, 2015 .