Reflex cover
Reflex screenshot
Genre: Strategy

Reflex

Reflex - Developer Diary 76

Another very busy week of development. This time focused on polishing the game and getting things ready for the full release.

The objectives panel displayed in the game has been given a new lick of paint. The expanding box has been replaced with a much sleeker-looking design, and the level complete and fail displays have been given some nice new icons. The fail display tells the player what happened and has a new music track. There are now level-specific tips rather than just displaying a random notice – which often meant telling the player about laser fences in world 1 (which is obviously wrong). The completion page has a much nicer animated star rating display.





The screen wipe effect is now timed based on the resolution you’re playing the game; this means it’s not really slow on 4K monitors.

There has also been a number of bug fixes this week:


  • World select button was causing a strange hang up if it was clicked between transitions.
  • Duplicators were animating in when they were part of the map.
  • Level 2.20 duplicator was misbehaving.
  • Holder achievement ‘Make Way’ wasn’t achievable. Opps.
  • To prepare for the release I’ve updated all the game screenshots and created a new gameplay trailer for Steam.


Just a few more weeks of testing, and testing, and more testing, and then I believe the game is ready to go.

Reflex – Dev Diary 75

It has been a very busy few days of development for Reflex. I have finished polishing the outro sequence and added in a short post-credits scene (it doesn’t hint at a sequel), and I’m entering the final stages of the game.

Firstly, following on from last weekend all the tutorials have been recreated as animated sequences replacing all the videos and stills used. This means that the Android version will also benefit from having animated tutorials!

The code for playing the sequences in place was a little tricky. GameMaker doesn’t give any control over the drawing process of sequences when using sprites (as opposed to objects), instead, they are just drawn during the usual layers draw event. The problem here is that the location of the tutorials is supposed to be on the GUI layer. Without it being on the GUI layer the tutorial is drawn behind the information panel and behind the full-screen blur – not useful. So, I had to use some clever scripting to tell the sequence to start drawing on a separate surface, and once that is done I could then draw the surface onto the GUI layer.

With the tutorials all done I turned my attention to adding the final level to the game and begin the testing process to try and work out the timings for the star ratings. It certainly took some doing. After about 30 attempts at completing the level I got it done in 460 seconds which is about as efficient as I think it could be done. My process is different to other players because I know how things should go. With this knowledge, I can hone the level progression so I can complete it in the shortest time possible. I usually then add a few seconds on top just to be fair. The last levels of World 5 however, I have kept the timings very tight. These levels are supposed to be tough.

Next up I wanted to make a few visual improvements. First up was the game title. Although I was reasonably happy with it I didn’t think it was visual enough. And so I played around with some fonts and the titles in Affinity Designer and came up with the new and improved titles:



I then had to go through every Steam asset to update them to the new style. These have already been pushed to Steam.

And finally, there was a shield pulse change for a later level objective (spoilers).

Phew!

So, what’s next. Well, my playtester still has a number of World 5 levels to test; but for me, I will be spending the next few weeks just going through as much as the game as possible and seeing if anything needs a bit more polish. All being well the final release should happen on time at the end of March.

Reflex – Dev Diary 74 – Tutorials Mk2

This week saw the release of a new version of GameMaker Studio 2 that changed a few things that affect Reflex.

Firstly, the Steamworks integration has been removed from the core and replaced with an extension. In many ways, this is actually a good idea because it means that the compiled games that don’t need Steam no longer have those commands compiled making for a smaller executable. However, it did mean a fair amount of setting up and re-coding here and there to get the update working with Reflex.

The other change is GMS now defaults to x64 compiling on Windows. Reflex up to this point has been compiled as x86 (32Bit) because the video player needed to show the tutorials only has a 32bit dll. It has been on my mind for a while that this isn’t an ideal situation. However, the only way to get around this limitation would be to remove the video player extension and change the way the tutorials are created.

There would be 3 options for replacing the tutorials:


  1. Do the same as the Android version; show a static image along with the description text.
  2. Record animated gif versions of the tutorials and use those – this would also allow animations on the Android version but the size of the texture pages would go up a lot due to the required number of frames for each tutorial.
  3. Rebuild all of the tutorials using GMS sequences. This would allow the Android version to show animations as well as the Windows version.


Obviously, I opted for choice 3, but it is going to be a fair amount of work. For the sequences I have to hand animated every element and some of the components that need tutorials require quite a bit of animating. For example the duplicators have 3 draw stages (base, secondary base, top – above missiles), then they also have the lights on the top and each step would need to be switched out and sequenced.

So, that’s what I’ve been doing this week. So far I’ve reproduced 12 of the 21 tutorials and they are looking pretty darn good. Once I’ve completed all the sequences I will need to go through the tutorial player code, remove the video commands and extension, and then add in the sequence controller. Hopefully, this will all be done in the next week or 2.

Then it’s back to finishing off the World 5 levels.

Developer Diary 73

World 5 level testing continues, albeit slowly. The levels are really quite complicated and that means it takes quite a few attempts at getting everything right. A lot of the time I sketch a level plan and on paper, it all looks absolutely fine. However, when you get to actually play it you realise that the level is in fact completely impossible. I then spend some time refining it to make sure it can actually be done.

The initial testing on levels up to 5.21 has now been done and is awaiting playtester approval. Just 3 more levels to finalise!

A few bug fixes were needed this week (they only apply to world 5 environments, fortunately). The launchpads when triggered create an invisible collision box behind where they were. This is to ensure that if the player guides the missile back out of the base it is eventually destroyed. Unfortuantely, one map on world 5 (so far) had the launch pad kind of between walls and this created a collision box inside the map – opps. Took me a few hours to realise why the missile was just exploding for no reason.

And finally, the outro sequence and credits are now completed and done. I’m happy with the final result and I don’t expect to have to tweak it further.

All in all, the game is getting very close to completion 🙂

Patch EA2.1

Fixed an issue that would prevent tutorial videos from playing properly

Reflex Developer Diary 72

A new update for Game Maker Studio 2 was released this week. Usually, that’s not a problem and Reflex doesn’t have any issues. However, this time compilation of the game into native code failed. After a quick post on the YoYoGames forum I was informed that the error I was getting from the compiler was because somewhere in my game I was using ++ or — in a function call. This is not something I personally would have done but there is code from a few extensions I’m using that might.

To be on the safe side I changed all instances of ‘variable++’ and ‘variable–‘ to ‘variable+=1’ instead. This corrected the problem and I was able to recompile the game.

Next up was to try out a new build for the forthcoming Android version. Again, with the new version the compilation failed. This time it was complaining that it needed Java 11 and I was using 1.8?!

I ended up having to uninstall Android Studio (and the SDK and NDK), and install a newer version. Then I could follow the updated setup instructions from YoYoGames. This took quite a while but it had to be done. Finally, 2 hours later I was able to compile the game and get it running again on my tablet.

So, that’s the annoying technical stuff out of the way; but what about the game itself?

This week I released the Early Access version 2 of the game to Steam. World 4 testing has been completed and it was ready for launch.

During last weeks playtesting session that involved a difficult level with multiple laser turrets I got suspicious that there might have been an issue with them. It turns out I was right.

Laser turrets rotate in an arc formation looking for missiles. If they see one they destroy the missile and then switch off for a certain amount of time. The idea is that the player can use this downtime to sneak a missile passed. However, during the test, it looked as if the downtime of the turret wasn’t working. The playtester was also frustrated because he didn’t know how long the turret would be down.

Checking the code and running some tests myself I discovered that although the turret would stop rotating during the downtime it wasn’t preventing it from destroying any missile within its vision cone. That was a problem. So I took this time to rewrite the turret downtime code and to make an important sprite change.



The improved turret now has a light on the back of the head. Once the turret has fired and is out of power the light on the back slowly builds up from red back to green. Once at green it is ready to fire again and continues its rotations.

Also during the playtesting session last week I discovered that if the player run out of time and a duplicator was still in the process of launching missiles the end of the level would fail and the player could continue forever. This has now been fixed so that all missiles, including those in duplicators, are destroyed when the time runs out.

And finally. The outro animation sequence has now been completed.

Early Access v2 released

The next big update for Reflex is now available. This version adds a ton of new features and fixes:


  • World 4 is now available to play (up to level 4.23)
  • New music plays when the timer gets below 30 seconds to add tension
  • Fixed an issue where the level wouldn't fail if a duplicator still had charges and the timer had run out
  • Laser turrets now have a visual display to see when they will be powered up again between firing
  • Add GameMaker Studio 2 logo to logo animation intro
  • Added sub-level doors to ensure each floors objectives are completed before proceeding to the next floor and also to ensure the missile cannot be sent back up (not that that was an option)
  • A holographic display has been added to the world server (level 24 on each world) to show the route to the next world (story helper)


There's a load of other changes and updates that you can read about via the Reflex blog or more recently via the Developer Diaries posted on Steam.

Reflex - Dev Diary 71

Early Access version 2 will be released next week. This update brings in the World 4 levels to the game. This world adds in new features such as phasing laser fences, gun turrets, the holder component, and smoke vents. My playtester has just a few more levels to complete and then we’re good to go.

World 5 development continues and the testing is going well. Looking ahead I’m not sure that I’ll be able to meet the March deadline, but it shouldn’t be much longer than that. My guess would be late April for the full release.

Over the last 2 weeks, I’ve been putting together the outro sequence which I think is coming along nicely. Obviously, I can’t reveal any details as that would spoil the ending of the game. This weekend I’ve been going through some blender 3D tutorials for creating a big explosion that I can convert to a sprite sheet to use for the outro. However, I have hit a bit of a wall as the tutorial was designed for v2.8 and I’m using 3.0.1 and as usual with Blender, they seem to have renamed and moved a load of settings – grr.

Reflex – Dev Diary 70

Smaller update this week than I would have liked. I received my booster covid-19 shot last week and it took a lot out of me. Still better than getting the virus though.

Anyway. This week I have finally finished sketching up the last level of the game. It’s going to be one heck of a level. It spans 4 floors and involves just about everything the game has to offer. It’s certainly going to be very interesting playtesting it in a few weeks time.

As well as that playtesting of the World 4 maps continues and I believe we’re just over halfway through. I myself have tested all the levels in world 4 but I use my results to work out the 3-star timings rather than as proof that the average player can complete them. For that, my friend steps in and plays. He has a very different way of looking at the puzzles and that helps me to make sure that things don’t go wrong and that the puzzles do actually make sense. After all, as I designed the puzzles I know the perfect way that they’re supposed to be done but it’s not necessarily the right way.

While my friend works through world 4 levels I’m still going through the world 5 maps. I’m currently halfway through. My process includes making sure that the shadow maps and lighting are positioned correctly; if something is off I have to adjust the level and try again. Once the shadow map is correct I can then bake it into the game so that the engine doesn’t have to regenerate it each time. It’s time-consuming but it meant that I could get the same visual fidelity on the Android version as I can on the desktop version.

For those not in the know, the game was designed specifically for PC but with the plan of releasing on Android a month or so after the final release. The game works really well on Android despite being touch-based. I don’t have access to Apple devices so I have no plans to release on the Apple App Store.