A Premature Postmortem of Heart Blaster Jetslide


My first completed game, Heart Blaster Jetslide, is finally released. Made for the 4th Magical Girl Game Jam in a single month, it was largely an exercise in actually finishing something for once. Though the judging period has only just begun, I thought I'd write up some thoughts as they occurred, at least before I forget. 

Time management

Jetslide was made working practically every day for at least 2-3 hours for 31 days, with only about two days completely off from working on the game. That sounds like a lot, and certainly it was, but it didn't feel like that much in the moment (especially since due to lockdown, where the hell else am I going to go?). I managed to mostly avoid a heavy crunch period at the end thanks to this steady pace. One of the reasons I joined a month-long game jam was mainly to avoid being significantly pressured by time constraints, so I was quite pleased with this outcome.

Having an eventual deadline was extremely important, because it forced me to evaluate what features were actually needed and not be so perfectionist about stuff; 'Good enough, ship it' became a sort of mantra I'd mutter to myself at the end of a long night. I had already scoped fairly low, but knowing that I needed to actually submit a game that people would play meant I spent less time noodling around with future-proofing systems when there were perfectly good solutions I could implement right now even if they were extremely messy. At my current stage of development, I think this is more valuable.

Preliminary logo design. Note the working title was "Pretty Sparkling Jetslide", which was closer to Pretty Guardian Sailor Moon. The arcade game is a surprisingly decent Final Fight-esque brawler.

It also fit my general attention span perfectly; I tend to get super into a thing for about a month or so then lose interest. I could definitely feel myself becoming increasingly detached from the project by the end, and finally finishing up the banner and cover image and submitting was something of a relief (though I'm sure there will be a few post-jam odds and ends to pick up).

Inspirations

I shouted out some influences in the description, but I wanted to make some notes on some specifics while I still had them in mind:

  • The number one influence is still probably far and away Bayonetta, my favourite game of all time, which inspired the dodge-timeslow mechanic, as well as its predecessor Devil May Cry, from which the general structure of a 'Bloody Palace' mode emerged (though this is largely a refinement of general beat-em-up structure in my opinion).
  • Sliding while shooting is something I adore in Vanquish, though in that game it's more closely linked to moving from cover point to cover point. In particular, I wanted to add a mana-draining high-damage melee attack from the sliding state, but there were issues with the control scheme on KB+M as well as the sprite cost that prevented this.
  • An obvious point of comparison is Hyper Light Drifter's combat which I looked at extensively. I find Hyper Light more deliberate and Soulsian in style than hyperkinetic, though it's still a great model for top-down 2D combat. Along similar lines were games like Enter the Gungeon, Wizard of Legend and Hades; though I didn't have the time or inclination to go full roguelike, their takes on exhilarating top-down combat were definitely in mind as I worked.
  • Weapons and item drops were obviously influenced by the Metal Slug series which I love (though the food in particular is almost directly from Streets of Rage 2). I had plans for more weapons like a shotgun or rocket launcher, but dropped them for time; they're not too difficult to make, I think, so I might add a few if I feel like it and if they don't throw out the balance too badly.
  • A number of other itch.io games influenced style, scope and other aspects. Many visual aspects were reconstructed from the incredibly stylish games of Melonkoi. Wwaves showed what was possible in a short timeframe in a similar field. Of course, various previous entrants for the Magical Girl Game Jam were big influences, in particular Entangled Hearts by Shibey and Mahou Shoujo Sherry! by Orc Wizard and Spookto.

Finally, these are more visual references, but most animations were referenced from free 3d model animations available at mixamo or on sketchfab and the death animation in particular was blatantly inspired by Metroid (particularly Metroid Fusion). The keyart pose is also a take on Megaman's classic sliding pose.

Organisation

Using Trello to organise tasks really helped. By the time I started losing steam, I would look at my list of priority features, reorganise it into smaller, easier tasks on a checklist, and then start completing those (mostly spriting or choosing sound assets). Not only was it a way to get progress done without having to force myself to deal with complex programming or design when I wasn't feeling like it, but when I laid these completed 'smaller' assets into the game there was an obvious, tangible feeling of progress that kept me going forward.

There was a fair amount of pre-production, though no assets from this stage were directly used in the final product. In honesty, Jetslide is built on the bones of a proto-prototype from when I first really began noodling around with Gamemaker in 2017 which already had many familiar elements, in particular dodge-triggered slow motion and sliding while shooting. However, the codebase was hopelessly tangled and I rebuilt it entirely from the ground up for this project.

More directly, the design of the magical girls and drafts for the key art was made before the jam 'officially' began, since that was easy (and fun) enough to doodle. This was a great decision since I was absolutely exhausted by the final stages and did not have the necessary creative juice to do more than ink and colour pieces for the promo images.

 Concept art  for the two leads, Akai and Dia. I had intended to showcase their sweet kicks a bit more, but it never really came up. Fun fact: Dia's namesake is pretty obvious, while Akai's came from one of my favourite Vtubers, Akai Haato/Haachama and her 'Big Red Heart'.

Technical stuff

I really like Gamemaker; it's the only engine I've ever really known, and I've gone through around 4-5 projects of varying stages of completion on it over the years. That said, between the subscription changes they've made recently (which I'm opposed to on a general basis) and the absolutely nightmarish HTML5 conversions it spits out, I'm thinking of branching out to other engines. On one hand, I want to make stuff that people will actually play, which probably means something that converts to HTML5 easily like Godot or Construct; on the other, I've got a hankering to start messing around with basic 3D stuff, if only because it will lessen the sprite workload. I didn't realise quite how painful it would be until I noticed I had spent almost 3 whole days doing just the player sprites in this game - and her moveset is incredibly limited!

This project was only really possible because of the work of other people, in particular Lars Anderson's notification system for GML which powered much of the logic underlying tutorialising and arenas, as well as various other bits and pieces scavenged from elsewhere. Shoutouts in particular to YellowAfterlifePixelatedPope, JujuAdams, StargroveFriendlyCosmonautDavid Strachan and 1UpIndie who provided either libraries or tutorials which proved extremely helpful. Finding other people's various GML projects was an invaluable resource, even when I wasn't taking code directly from them; even seeing how projects were laid out and organised was of great assistance.

Finally, some recent technical improvements to tools made certain tasks a lot easier than anticipated. GML has improved core functionality for various things by great strides, in particular the way functions work, which I found incredibly useful. Asesprite dropped a beta recently that allowed for extremely easy tileset development, and I finally looked at the instruction manual for gifCam's inbuilt (if janky) editor which made creating good-looking moving images a breeze. Finally, I got an iPad Pro recently, which made transferring sketches from the tablet to my working PC via iCloud extremely simple and allowed for quick iteration on ideas.

Issues

Timescaling and motion

One of the most annoying aspects of making a game, to me, is the math. It doesn't come intuitively and it's a real pain in the ass to implement, and unfortunately math powers almost everything to do with positioning and movement, especially when you implement time-slow mechanics (a personal fave of mine). GML doesn't have a native version of slow-motion so you either have to implement delta time (and I don't understand the math properly here yet) yourself or fake it using a global var to slow down sprites and movement calculation. 

I went a bit overboard and implemented a version of time scaling that I've been using for a beat'em up that correctly accounts for acceleration and other forms of movement that increase by a non-constant rate. It was overkill for this game and I spent too long debugging it for no appreciable gain, since acceleration and deceleration isn't significant to this game. The way I implemented controls also meant that movement was limited to 8-way directions; this isn't significantly noticeable on KB+M controls but becomes a little bit frustrating on gamepad. 

Spritework

I really love animating movement, especially at low res, but the overhead in a top-down game can be significant. A single attack of about 7 frames requires 5 variants (facing top, bottom, right, upper-right, bottom right mirrored for upper-left and lower-left) at relatively complete levels of quality; as mentioned above, that means 3x7x5 frames for a 'simple' 3-hit combo, not to mention implementing the correct hitboxes as well (which vary depending on the animation)! It doesn't necessarily mean I won't stick with spritework, since I think it looks really good, but it does mean I'll be looking for ways to avoid having to do quite as much work in future.

This was also the first time I've experimented with making my own tileart and I found that I really enjoyed it! However, making good looking tiles - as well as functional tiles - is an art all in and of itself (I discovered the checkered pattern tiles, for instance, are far too visually confusing for a game this quick) and with the time limit hanging over me I had little chance to really get in-depth with it. Definitely something I'll be messing with in the future. 


The key images were heavily based on Vanquish and how cool sliding around while firing a gun is. I had a lot of trouble with the gun design, actually; initially it was a more typical magical girl staff, but it was sort of a pain in the ass to place in idle animations, so instead Akai's gun arm just kinda magically appears when needed.

Balancing

The game only really reached a playable state around the halfway mark when I implemented two main things: armour breaking (and correctly configuring hitboxes to accumulate damage properly on a single frame) and a variety of enemies that attacked in interesting ways. From there, it still took some time to properly configure the player's proper moveset and by the time this was all done I had very little time to do balancing and, more to the point, I had played my own game so much I had no idea how easy or hard it was anymore.

I scrambled for playtesters in the last few days and managed to wrangle a handful, whose feedback was quite helpful. Aside from obsessively editing wave composition, I ended up doing a few other things like reducing enemy hitboxes significantly, increasing visibility on enemy projectiles, upping the hitstun on the player's melee attacks and changing the timing between enemies making 'decisions' to ease up on the player a bit. I actually found this probably the most enjoyable part of development since it's basically just changing a few vars here and there to great effect, but I still think the game probably came out a bit too tough. If I had more time and forethought I would have implemented a checkpoint system after each room.

As an additional minor note, I found the game a bit tricky to balance since the ability to deal a lot of damage very quickly is frankly overpowered, even though it's a core conceit of the game. The boss in particular is pretty easy to cheese if you've managed to save enough bullets from earlier (and had some lucky drops), but I figured players would probably be a bit fatigued by that point so it was probably fine. 

Closing thoughts

Actually releasing a game, however small, for people to play is an enormously gratifying experience and one I'm glad I decided to shoot for, especially after years in the wilderness of developing stuff mainly for myself or to show as gifs on twitter. Even only a day or two after launch, hearing from friends and other people who have decided to give it a shot has been really cool. I'm certainly motivated to keep mucking around with gamedev generally, though perhaps as part of a team for future jams rather than entirely solo. 

The time investment is still significant, even in a month-long jam, and I really have to thank my partner who put up with a month of seeing me basically disappear every night to re-emerge just before bedtime. I'm not sure if, for example, a single all-nighter weekend would have been a better experience for both of us, but it was an act of love and forbearance on her part and I'm extremely grateful for it. 

Finally, to anyone who's actually bothered to go through the rigamorole of downloading and playing my game: thank you! I know it was a lot less convenient than a HTML5 browser game, which this could easily have been if Gamemaker's export functionality wasn't obscenely broken, so I'm thankful you gave it a shot. 

I am probably not going to build Jetslide into something bigger, at least in its current form, but I might revisit it in future projects. No promises though!

Get Heart Blaster Jetslide

Comments

Log in with itch.io to leave a comment.

Cool to see your production process.

I loved playing it and think it's one of the best game of the jam.

Great write up and good insights here! Thank you for the concept art, any chance you have concepts for the enemies? Or did you go straight to sprite for those?