I have seen the scattering of countless, myriad souls.

19 May 20171 June 2017

Development Log #4 – Upgrading to GameMaker: Studio

Introduction

This week’s development log primarily concerns recent efforts in porting the game from GameMaker 8.1 to GameMaker: Studio, a process which has occupied most of the attention for the past several weeks.

This effort was spearheaded by an associate of mine several weeks ago, who was able to successfully create a working proof of concept of how the game would function and run in the more stable and powerful Studio. After considerable discussions concerning options moving forward in this regards, it was decided that the benefits in performance, flexibility and customisation we would see as a result of the conversion was well worth the time and effort needed to rebuild the game in the new environment. In order to both meet the demands of the increased workload to come, and in recognition of my own limitations as a programmer, I’ve since formally appointed another programmer to assist in implementing new designs while also refining and sometimes even entirely redesigning old ones. This has already resulted in a demonstrable increase in workflow and productivity, and I have great confidence that it will continue to moving forward.

So what benefits exactly have been gained from this conversion?

Optimisation

First, the most immediately noticeable result of the conversion is that the game now runs at a very stable and consistent 60 fps, and handles far better than the build based in GM81. Without going into too much detail about the raw technicalities of it, this involved a process of extensive optimisations in everything from the way in-game graphics are drawn to texture pages, to the way collision detection checks are handled, to the replacement of surface-based visual effects with the newly-afforded ability to implement OpenGL shaders, and even to the eventual complete redesign and restructuring of the enemy AI. Many of these optimisations would have been extremely difficult, if not outright impossible to implement in GM81; either because legacy versions of GameMaker simply did not support the functions desired, or we lacked the necessary profiling and logging tools to track performance which we have now, both in thanks to several extremely useful built-in tools, and stronger support for custom internal tools written specifically for our game. All in all, with the switch to Studio came all the affordances of a much more powerful and robust engine, which have given us significantly greater control over the processes behind the game’s functions.

Integration with Steam

The other important back-end business involved setting up integration with the Steamworks API. This was (well, still in some ways continues to be) an extraordinarily convoluted process with the previous legacy build, that involved a whole lot of very precise directory fidgeting, .dll updating and typo-checking all for a rather disappointing and anticlimactic purpose. Studio however comes with built-in Steam API integration; hooking it into Steam’s registry was as simple as going into the game settings, directing the file path to the location of the Steamworks SDK, and pressing OK! We were even more pleasantly surprised to learn that implementing things like stats and achievements were literally one-line affairs (which, I can assure you, was definitely not the case with the legacy versions of GameMaker). Integration was so successful that I put in a request that builds immediately be pushed to my advisors via Steam; in less than half an hour, I was able to see the game go from having no Steam integration whatsoever, to watching my playtesters be able to pull and play builds directly from Steam itself.

Other things to note

Studio comes with a fairly expansive support network in terms of export modules, and very easy-to-implement controller support. What this means is that there definitely will be controller support; and there is a very real possibility of eventual Mac & Linux ports; although I neither have experience working with either in my life, nor do I even have access to the operating systems required to test them (no, I’m not downloading and installing Linux just to build versions of my game). I’ll most likely have to seek outside help in this regards. All this is, of course, predicated on the assumption that there will even be a sufficient enough desire for ports.

In regards to the controller scheme, it is almost entirely functional at this point, and supports, so far as I know, all generic gamepads, as well as the Steam controller. The following diagram uses the Xbox 360 controller as a basis, since that’s what I personally have access to, but the same base layout applies across all other similar configurations.

Customisable controls will eventually be implemented. However, I have no specific plans to implement them anytime in the future; they will most likely be added towards the very end of development, once it comes down to polishing the product for public release.

Visual effects

As I touched upon earlier, Studio introduced the ability to implement shaders written in OpenGL; a feature completely new to GameMaker at the time, which vastly expanded the possibilities of creating highly efficient and visually compelling designs without sacrificing much in way of resource consumption. On top of that, an improved and easier-to-use particle system combined with a vast library of extensions via the YoYoGames Marketplace open up a wide variety of possibilities in terms of the kinds of visual effects we produce. This allows us the ability to implement a great number of features we were interested in, but unable to do before. Some new things we have implemented since the conversion include:

So what are you working on now?

At the moment, I am currently working on creating new environments for the game, as well as redesigning the general artstyle and interfaces to suit a more unified and aesthetically coherent direction. I am also trying to finish conceptualising the designs for the various abilities available to the player, which then must be implemented and adapted for gameplay.

The programmer is currently working on redesigning the enemy AI to be more intelligent, responsive, organic, and in general, just more interesting. Currently the biggest issue that detracts from the gameplay experience is the shoddy and unreactive AI; inherited from previous versions and cannibalisations of the Hotline Miami AI – which is already notoriously controversial for its intelligence, or lack thereof – the AI simply does not feel good in context of the actions the player is taking, and they always feel either inappropriately slow to react and clueless, or unfairly and frustratingly difficult. The plan is to completely replace all of this defunct code and behaviour, and start anew with an entirely different system that we have a much greater and finer control and understanding of. This is a lengthy process that involves not just a great deal of logic-heavy programming, but also a long period of intensive playtesting in order to iron out the intricate and precise details of the behaviour in order to make the game feel sufficiently challenging from the enemy perspective, but also not frustrating.

Why don’t you respond to threads or messages anymore?

Well, to be very blunt, I’m sick of dealing with people’s drivel at this point, and while I recognise that not all of it is malicious or ill-intended, I’ve reached a point where I’ve lost the ability to really honestly even care enough about the distinction for it to make a difference to me. My interactions with the community as a whole have taken a devastating toll on both my personal health, but more importantly, the development of the game itself. People are free to say whatever they want, but I no longer have the patience to just sit there and listen. Things need to get done, and the longer I spend trying to sort through and deal with and hell, even make sense of the kinds of absolutely stupid shit that gets said to me and about me on a daily basis – well, they’re not getting done. So now it’s time to do something about it.

Now, here’s what’s actually going on.

I have, after discussing with my team the behaviour of the community in general and the kind of toll it was taking on our morale and the state of development, decided to appoint a specialist to handle public relations in regards to the community as a whole. He is someone who has a great deal of experience dealing with the kinds of communities that crop up around games in particular; and on top of that, he is a close friend of mine, whose discretion I trust fully and completely. He is to serve neither as a mouthpiece, nor an apologist for me; but an objective intermediary whose goal it is to clarify misunderstandings, offer perspectives, set discussions and statements in context, and lastly, if it needs to be, deal with transgressors and others who willingly and intentionally violate community decorum or respect.

This decision was not made on my own, and does not stand in isolation; it reflects not just my solitary feelings towards the situation as a whole, but those of the people I have entrusted my work and passion to as well. What this means is that I will no longer be publicly addressing or handling issues that arise out of the community; engaging with it has proven repeatedly that the overwhelming effects of it has are decidedly negative, and inhibitive towards the process of development. From here on out, I will only be posting and discussing content solely related to matters directly tied to the development of the game. All else is anathema.

Conclusion

Thanks for reading. The next development log will discuss things more related to the game’s design. Have a nice day.