by Jonathan Port
Continued from previous blog…
During the original Kickstarter, John Ogden was making a start on building Hyper Sentinel using the Unity engine. Very early on this was a straight port of existing iOS code, I’d written some C# code several months earlier that would import the plist data structures from iOS over to Unity, but not much more than that had been done. John took that code and built a level import utility so we could get all the decks and level objects laid out, before starting work on player ship controls and enemy movement. It quickly became apparent that, instead of attempting to port code, it would be best to make the game completely from scratch. The iOS game was built entirely in the Swift language without any level designers. Unity is a very different environment and we decided together that the game would not benefit unless we broke that link and re-made it from the ground up. It was 100% the best decision to make.
After the Kickstarter finished the game went into a short period of limbo. I think we left a few weeks to consider our options. Eventually over a Skype call we all decided that the game should continue to be made, as we had a lot of fans from the Kickstarter who encouraged us to continue the project. I agreed to take over the game code in Unity and make the game for a second time. I think I was a little anxious, I had already spent the better part of a year making the game once, and the prospect of doing it all over again didn’t fill me with great delight right away. I had no experience using the Unity engine other than a little poking around some months earlier. Imagine if you would, having finished writing a book only for the entire manuscript to be destroyed. For the book to come to life you were going to have to write the story again entirely from memory and in a foreign language that you would be learning on the go at the same time. This was my situation. There was a little silver lining, and that was that John had made some very good progress in just a few short weeks, also Huey weren’t putting any pressure on me. It was very much a case of taking the code we had, understanding it and seeing how it went. I spent the next two weeks feeling around and learning the code that John had made; I was feeling much more comfortable by now and was able to make various tweaks and additions. I knew early on that I could do it. We were off again, but the challenge I had was to put together a commercial quality playable game demo by Christmas, and that was only four months away.
During this whole project I had been making the game in my evenings and weekends. I did my professional day job as a business programmer and would then come home to spend some time with my family and grab the hours I could with the game. This is not uncommon for an indie game developer, but nonetheless it was tough going. And it was about to get tougher. My daughter had been having a lot of stomach troubles for most of the previous nine months and was struggling to find any food that she could hold down. It had been getting worse and she had lost a lot of weight. We’d been seeing some specialists, but the tests were all coming back okay. Unfortunately, it ended in us having to rush her to hospital where we finally got a diagnosis that she had Crohn’s disease. She ended up in hospital for a week or so with various drips to stabilise her weight before being allowed home along with a long prescription for a cocktail of drugs. It was a tough time for us all, and not much game development happened. Once things had started to settle a little (as best they can when dealing with Crohn’s) I was ready to pick up and carry on with the game. Only a few weeks later, and another roadblock presented itself. It turns out that the company I worked for had decided to outsource our department overseas. There were several weeks of uncertainty over what would happen, followed by a lot of time spent discussing the future with various IT recruiters. I started a new job at the end of October 2016, but by this time I had lost nearly an entire month of game development.
It had been a real rollercoaster of a year, but things were about to get better.
PRESS PLAY ON TAPE #2
As Christmas approached the game was starting to come together again. I had become more proficient with Unity and was back in full production mode. John had laid some solid foundations, and I was able to use my knowledge of how the game had previously worked to get things feeling just right. There’s a certain “weight” to the controls that we needed to get spot on and all sorts of tiny details that aren’t obvious unless you know the game well. It all had to be done again from scratch and it all took time. At this point there was still only the first level. I decided rather than quickly plug all the level designs in, it would be better time spent to get the details, the animations, the tiny pieces of polish in place for just one single level. We wanted a three-level demo and I kind of knew what those levels would be. There wouldn’t be too much extra work I would need to do if I nailed everything just right for Level 1. I think I finished Level 1 just before Christmas and started implementing Level 2 during the holiday break. Thankfully, using the level import utility that John built, along with all the prefabricated game objects I had already made, Level 2 almost happened over night.
I quickly packaged it together for Huey Games to look at. We had some discussions over Skype and decided that another Kickstarter would be worth a go. I had roughly three weeks to build the third demo level while Huey Games would work on building up for the Kickstarter. It was an exciting time again and we were all very happy with how the game was playing. Looking back, I think we did a terrific job to get so close a feel to the original game, even though we were using an entirely different programming language, game engine and code base.
We were now at the start of February 2017 and the demo build was still not ready. I had not yet written any code for the Powerdroids in the game and Level 3 still wasn’t complete. It was about ten days until the Kickstarter launch and there was much to do, not the least of which was; we needed to do some filming. Rob came along with cameras and lighting and we spent most of a morning and afternoon videoing in my front room. It felt a bit easier than the last time around, but never fun to do, I was hoping that some clever cutting would do the trick! We also chatted about the upcoming Nintendo Switch console and a little about Zelda (of which we are both big fans). I lamented that I didn’t think Nintendo had got their launch timing right; didn’t they know I was trying to make a game of my own and wouldn’t have time to play Zelda, as well!
I worked some very late nights over the next ten days writing a lot of code. We needed the demo to be as good as the first Kickstarter, so I was going to have no choice but to build it with very fresh and untested code for many of the features. Over those ten days I wrote the code to bring the Powerdroids in with the enemy formations and wrote several of the power ups themselves, such as the Astro Mace and Buddy Drone, which I did using various techniques that I hadn’t done before in Unity. There were now only four days left until the start of the Kickstarter, and I suddenly realised something… Hewson we have a problem! I didn’t have a hi-score table in the game and it was an essential feature because we wanted to put the top-ten players into the final game credits. In what probably ended up as the fastest piece of code I would write for the game, I researched and coded the online leaderboard in a single evening, and miraculously it worked the first time. It was only temporary placeholder code for the demo and wouldn’t be re-usable in any way for consoles, but it got us out of a hole.
The night before the Kickstarter I sat down with the demo build – just three levels coded – and it still felt as exciting to play as it did when I first made it on iOS. I told myself, if I can enjoy my own game having spent 18 months in development, then it has to be a winner!
It was the 14th of February and like any well-oiled machine everything had been meticulously planned and we were all just sitting back and having a beer ready for the Kickstarter launch in the morning (ahem, well not quite). I woke for 6am, went for a morning run, and then came back to check the start of the campaign. Kickstarter campaigns are stressful and at no point does a Kickstarter campaign make you feel comfortable. There is worry over getting off to a good start, there is worry that new backers will dry up, there is worry that people won’t enjoy the demo you put together, there is worry that your demo will crash, and there is worry that cunning gamers will find exploits in your game that pull it apart. Breathe Jon! We got off to a fantastic start; half of the campaign was funded in the first day and we were already trending on Twitter. Really, I’m not sure we could have received better backing from everyone. It was a great day, we had gotten so much more right in this campaign compared to the first one, but that’s how life teaches you after all.
In the 1980s when I was a young boy playing games on the ZX Spectrum and C64, one of my favourites was Cybernoid, a game I remember getting for a birthday present. Those graphics, those effects, that music! So, when I saw that the game’s developer Raff Cecco, had downloaded and played my game, well shall we just say that was my personal highlight of the first day. I was so thrilled he liked it enough to back us. As a young boy that would have been a dream come true, and so I savoured the moment.
As a Kickstarter backer, Raff Cecco, also has his name in the game credits, which always makes me smile when I see it roll by.
The campaign carried on and I enjoyed some of the limelight that we were getting. There were several online publications and video reviews of the demo coming through and everything felt positive. There was so much generosity from the gaming community I could almost just sit at home watching it go by. But I needed to crack on with the code if we were to get this game done in time. Some things that should be quick to do took ages and some things that should take ages ended up being quick. I was adding in the ability for the player to skip through the bonuses on the level completion screen. It sounds simple, just put a key-press in. I wanted it to work so that the bonus scores would roll through if you left them, but if you pressed a button, it would skip to the next. It turns out that I didn’t implement this screen in a way that was conducive to this working. I had just coded each section as a coroutine with delays, and that’s no good for user input! So, I spent an evening annoyingly having to do it properly. That meant adding a proper state machine with key-presses that could easily move the state along while keeping the automatic timings right. Small things that work well tend to go unnoticed, but if they don’t work well the player will pick it out straight away. Sometimes the satisfaction in making a game is all the stuff that makes the game work (and took ages to do) but nobody talks about. That’s when you know you got the design right.
It is also one of the reasons game development can be so difficult to predict. Some things are quicker than expected, others take much longer, but overall no matter how much contingency time you give yourself, the project always seems to eat through it and then some!
It was the 26th of February and we were £200 short of the £15,000 goal we set for the Kickstarter. I went for a 15K run that morning to urge it on! The game had started out as an iOS-only game written using Swift and Xcode. That code has been played by lots of gamers, but alas, it would never be the code that goes into production. That iOS code was damned stable and ran non-stop without issue at many game events around the country; it had been a terrific little workhorse for us. So it was with a heavy heart that I had to let it go on that day. The King is dead, long live the King! We had hit our goal and were officially funded. Hyper Sentinel was going to be released. Thanks to the amazing gaming and retro-gamming community, we had done it while still less than halfway through the campaign. That’s was a pretty proud moment.
When I was 12 and 13, I clearly remember playing the Hewson games; my favourite game of all-time, Steve Turner’s Dragontorc and its predecessor Avalon.– those two games were way ahead of their time. I played a lot of Exolon on both the Speccy and later the Atari ST. Uridium, of course, was superlative. Cybernoid was an extravaganza of effects. Just lots of great games that are as clear in my mind today as they were when I first loaded them up over 30 years ago. I wonder what childhood me would have made of it all had I known that my own game would be released by the same company (now known as Huey Games) years later?
During the last week of the Kickstarter I did my first live stream, which was quite fun (much more so than filming for the campaign) and I enjoyed the questions coming in live and just having a good chat with people about the game. I think I also did my first live podcast with Rob at this time too. To top it off, we had a grand finale to the campaign. With just a few hours to go I was wondering if 20K was possible, then almost within the blink of an eye more and more people started to come on board and back the game. Suddenly 21K was a real possibility. Rather than spend the next couple of hours clicking refresh, I decided to go to bed and see what the morning would bring. And bring it did! We somehow managed to get a flurry of backers that took the total over the 21K stretch goal to include a C64 graphics mode! It had been a tremendous campaign. The first day was the most exciting and gave us huge momentum to carry forward and trending on Twitter, was quite cool. We really do seem to have a hugely supportive set of backers, a great mix of knowledgeable retro gamers and people who we’ve met and who played the game at various shows over those previous six months. It was a dream come true, but now it was time to work and get on with making the best game I could. Time stops for nobody.