Post Jam version. :)
Last week I had the unexpected pleasure of taking part in Ludum Dare 38. Up until about the Thursday before, I had been planning on skipping this LD, but I knew I’d be watching the IRC and discord channels for LD, since so much cool stuff shows up in them. Hanging out in there, as well as the realization that I didn’t have any major commitments that particular weekend convinced me to give Ludum Dare 38 a shot. I went into the weekend with 3 things: A minor head cold, a half-baked idea around a pause/teleport/repeat bullet hell game, and knowing that I would not be done in time for Compo (solo, 48 hours) due to the cold.
This meant that I had 72 hours to come up with something I could show to other jammers, which was a nice relaxed pace compared to LD 34, when I went for Compo, but still enough to keep me going.
The first minor snag in my plans was that theme I had planned a little round, “Pausing Has Consequences”, was not chosen. Instead, the theme was “Small World”. Still, I had the idea of a Bullet-Hell style game floating around in my head, I just need to figure out how to sorta fit one into the idea of a small world. I also had to face the fact that I wasn’t going to have artistic and musical help, like I had on LD 37 (my friend had school related stuff at the time).
I had other engagements that kept me from seeing the IRC chat at the theme announcement itself, (something I recommend for first time LDers) so around the time that I saw the theme at 1:30 AM and started thinking about it, I didn’t have much energy for the creative side of stuff. Thankfully, there is non-creative work that goes into a video game. Due to the artistic constraints, I decide that I’d take a shot at doing a game with Atari Vector style graphics, in the vein of BattleZone and Asteroids. I’ve played these games on an Atari CD game in the early ‘00s, and even today they have some charm. So the two less creative things I did were find a font that imitated the Atari Vector font, finding the stylish HYPERSPACE font. The other thing that I ended up doing at the time was importing basecode from my LD 37 entry, Fateful Caverns.
After some sleep, and some more time waking up a bit slowly due to the head cold, I started working out what do with this game. Previously I had done Omega Llama for LD 34, and I thought that the Llama would be a great fit for a new game based on trying to survive a bullet hell, and would be a good fit for the vector style graphics I was aiming to produce. In order to make it a loose fit for the small world theme, I decide to locate this game on a single planet, as opposed to the flotilla that hosted the first Omega Llama.
As another upgrade on the first Omega Llama, I decided to add a starfield effect, which was the first bit of game tech that I got up and running, and that’s when I started taking screen recordings of my progress:
The first recording of the game. I was still considering making a boss based bullet hell game.
After the starfield, it took me only maybe 15 minutes to add in a planet. A current little inefficiency is that the stars behind the planet are still rendered, which is something I’d change in a full release of this game, but has yet to be fixed. Sharing this planet drew on attention on IRC, due to how smooth it was compared to the usual fare of chunky pixels. A way for this game to stand out, I suppose.
And that was about as far as I got on Saturday.
This was my first shot at doing a “Boss”. I was still thinking on the level of a single enemy here. My original conception would be for a boss based on a vector art style Tiki Shaman that attacked you with Bongos. This was a very rough first pass.
Not quite the first look that the player had (it stared out as a line), but pretty close. After some feedback from the LD discord, I oped for a more menacing, angular head. The rest of the boss would never quite get the same treatment.
This is also as good a time as any to point out that none of the art was done in a program. This is all line/circle/square/ellipse commands using Love2D’s graphics system. I learned a bit about doing that sort of art from this. 1) lines are the easiest thing to freestyle when you’re playing with coordinates. 2) Rectangles are probably the wrong idea at this level. Case in point: The llama (which you’ll see below) was about 2x easier than the boss
This is the start for the Llama, just a rectangle and a few lines.
The Llama neck, head, and ears are a single unbroken line segment, which ends up looking rather cool.
Finally, add a tail, and have it swing a bit more than the rest of appendage. At this point I was also starting to try to figure out a dash/bash move, so that the llama would have a way to attack the boss.
Thanks to some help from the LD discord, I rediscovered the
atan2 function, which allowed me to get the shield direction correct. Also, it is now looking like a shield, rather than a ram.
This is as far as I went down the line of having the attack be a bash. I’m just testing out colors and how the dash feels to be a bash.
A reminder that things moving in a straight line can outline circles if they move with periodicity.
I was still thinking of this like a bullet hell, and I thought it would be kinda cool to get some health from using a dash to go through the bullets. So here you can see me playing like a dev, taking damage on purpose, and then regaining it via the dash.
A short clip of using a circle to visualize how the hit geometry looks for the shield. Why a circle? Because that math is much simpler than non AABB rectangles.
This is the first recored bullet surfing that I did. It’s not quite as smooth at it could be, but it illustrates the concept nicely. It was when I did this experiment that I decided against doing a bullet hell game, and decided to base it around collecting them on a combo instead.
At this point, it’s not a boss, it’s a crystal, and the combo mode has been prototyped.
To make it a bit easier to bounce back from a dropped combo (and as a test to see if it might make an interesting powerup), I added a slow to the bullet travel speed when a combo is dropped after you set a record.
In a final push on Sunday evening, I updated the title screen and tried to fix up a few other things. This GIF was my original post the LD website, at about 12:45-1:00AM Eastern. This upload was mostly that I had something up in the event of not being able to add anything else to the game.
That circle isn’t important, is it? This was the first stab at adding the second, counter-balancing mechanic to the bullet collecting: The Circles of Combo Ending.
It’s in this state, with basic surfing, keyboard controls, movement glitches, good sfx, poorly fitting music, and a slow server to submit to, that I finally put Omega Llama in: Bullet Surfing up onto LD with all of it’s core bits in place, even as buggy as it is.
It wouldn’t be a Ludum Dare for me, however, if I didn’t take a least a few hours to try and polish off a least a few of the remaining rough spots.
After a few days of taking a breather, I came back and poked for feedback on the LD discord channel. One thing that ieyfo and Arctodus both agreed on was that while the game was fun, it would be much better with analog controls, rather than digital ones. At first, I took a stab at doing so with a mouse, but that did not turn out very well:
The problem here is that part the balance of the game is that the player can not stop moving while in shield mode. The mouse controls here were just a quick test, but they didn’t turn out very well.
What did end up working excellently, however, was using a game pad. That made the game about 2-4x more fun to play, in part because a game pad lends itself to swervey-smooth looking movement.
So what are a few things I’ve learned from this? ShareX does a pretty decent job of recording GIFs on Windows. Love2D is still awesome. I can now easily work with GamePads, pitch-shifted sounds, and have a way to use vector art. The style of Lua programming that I used in Fateful Cavern, which involved creating separate lua files for each general system in the game, and then using
require() to have them communicate with each other seems to work decently well, as I never felt I was in a mire of inescapable spaghetti. Not that I didn’t have bugs that weren’t removed by the end of the Jam, but the code stayed comprehensible.
Next LD, I don’t know what I’ll end up doing, but I’d like play with either lovebpm from rxi, or build a game that uses a camera system so that I can learn how best to work with those, and grow beyond the single-screen experiences I’ve been throwing together the past few times.
Peace out, Fellow Jammers