I'm DDRKirby(ISQ). I do lots of cool stuff! Check out my main website here:
About DDRKirby(ISQ) (twitter: @ddrkirbyisq)
I'm DDRKirby(ISQ). I do lots of cool stuff! Check out my main website here:
Ludum Dare 26
Ludum Dare 26 Warmup
Ludum Dare 25
Ludum Dare 25 Warmup
Ludum Dare 23
Ludum Dare 23 Warmup
Ludum Dare 22
Archive for the ‘LD #23’ Category
There’s still time! Rate Gulliver today! It’s a metroidvania shmup hybrid with awesome 9bit chiptune music!
Posting these mostly for archival…
My first brainstorming document. You can see some of the other ideas I had, as well as my primary design goals (music!). I had also gotten the impression that tiled level design wouldn’t be quite too hard, so I didn’t have qualms about that. I ended up being sort of right, but sort of wrong…tiled level design isn’t all that bad, but I was totally unfamiliar with the toolset and workflow. I also tried using DAME which ended up just feeling kind of sluggish–Tiled might be a better choice (maybe? can’t say for sure as I haven’t tried).
More ideas. I likened the shrink idea to Blaster Master here, and decided I’d use a shrinking spaceship as that would be easier to do art for.
The initial design sketch. I had originally planned for level transitions to involve a cool zoom in/zoom out transition, to emphasize the recursive shrinking, but unfortunately that wasn’t really possible with Flixel, at least not without bending over backwards to get it working.
Sketching out ideas for the game.
This was my design for the first Space/Station Zero level–it’s pretty much unchanged in the actual game. After that I started just designing the levels on the fly as it was just faster that way.
If you haven’t already done so, you can view, play, and rate Gulliver here: http://www.ludumdare.com/compo/ludum-dare-23/?action=preview&uid=7285
One of my primary goals for this round of LD was to make a game that would showcase my musical abilities. I did do some nice music for my LD22 game, One of a Kind, but it didn’t really allow me to use my “9bit” style of music that much, so I wanted to remedy that this time around. That meant making a game that featured multiple different environments/settings/levels, so that I could make different music for each–something I definitely took into account when I was drafting up the game design for Gulliver (it’s a metroidvania type shmup hybrid thingamajig).
The other thing I knew I wanted to do was to rely heavily on one or two thematic motifs to tie the soundtrack together and to make the melodies more memorable. This is a pretty common technique, used to great effect in a lot of games–for some reason bit.trip runner springs to mind, but there’s plenty of other examples out there as well. To practice this technique, I tried scoring an imaginary game in my latest entry for One Hour Compo, which is a weekly compo where participants get exactly one hour to create a song based on a theme. Here’s how that went: http://compo.thasauce.net/files/DDRKirby_ISQ__-_Insanity_Quest(OHC184).mp3
So, I didn’t start composing music until I was pretty far into things…a little past the 50% mark, if I remember correctly. The first song I composed was actually Upgrade Acquired. I knew I wanted a little ditty to play when you got a new upgrade (a la Metroid), and I had this small ditty running around in my head. I actually had to go to a social event right as I conceived the musical idea, but to keep it in my mind I reminded myself that it was similar to a bit from Edgar’s theme from FFVI. Luckily it worked and when I got back from my 4-hour event I managed to recall what the idea was, and put it down in the form of the short ditty. Nothing too special about it; just the main theme, the bass, an echoing arp, and some quick drums.
After that, I wrote Gulliver, the main theme of the game which plays at the title screen. This was basically me expanding on the theme idea and fleshing it out into a complete song. There’s a lot of suspended chords here, and it actually has sort of a forlorn “quest” feeling, if that makes sense. After the initial statement of the theme, I go into UNTS UNTS mode (a fairly standard thing for me) and throw in an arp and some more percussion. This is all pretty easy stuff for me.
Next was Prologue, the short ambient track that plays during the intro narration. I used a noise-based synth called Chimera in the background (hard to hear if you’re on crappy laptop speakers), and added echoed triangle-wave blips with heavy use of reverb for ambience. Used the same Ab->Bb->C bassline progression that you’ll see pop up again and again in the rest of the OST.
Next was Station Zero, the first level theme. I wanted things to start off with a pretty “groovin” feel so I started off with a drumloop, which is samplereduced at the beginning and fades in. The main lead at 0:15 is, of course, a riff on the main Gulliver theme, but this time with a much different feel. The breakdown at 0:44 is -also- a play on the Gulliver theme, yet in a sort of minor mode. Again, Ab->Bb->C in the bass here.
When I wrote Thicket I may not have been entirely sure what the jungle/biome/grass level was going to look like yet, but I was sort of thinking along the lines of lush and jungle-like, so I picked a “soundscape” preset from a VST called Alchemy that included some animal-like squeals in the back, and added a chippy-sounding arp on top of that. The drumloop I used here is also pretty jungle-like, so that adds to the feel. Of course, the triangle whistle that comes in plays off of the Gulliver theme (should I even have to mention it anymore?), though the bassline progression here is different.
Cavernous seems to be pretty well-liked. I used a mallet-type sample along with crunched drums to set the initial atmosphere, and here we go back to the Ab->Bb->C progression. When the main chorus comes in, there’s a gated choir pad in the background with a lowpass filter sweep on it which provides most of the texture. I took a little more liberty with the Gulliver theme here, so there’s a little more solo-type expression in the melody. By now you can start to see how all of these tracks are organized–intro section, then main chorus section, then delayering of sounds so that we can get back to the intro.
Next was Destiny, probably my favorite track on the entire OST. I wrote it before “Flesh”, because well…the first boss was at the cavern/cave level, and I was sort of writing these tracks as I went along (sort of as a break from the actual code). I start off with a mortal kombat-style bassline groove, dissonant chords for tension, and a 16th-note pulse wave bass to provide motion. Then we go into the chorus, where I add a house-style drum loop, sidechained strings, and the main melody, which I’m pretty sure is just a simple square wave. The great thing about chiptune-style leads is that they tend to really cut through the mix easily, as opposed to trance-style phat megasupersaw leads which can be trickier to mix into things. Anyways, the melody and progression here is pretty much identical to that of the main Gulliver theme, except twice as long in terms of musical phrases, because of the higher tempo. The expression in the melody is augmented mainly through automatic vibrato, pitch bends, and some grace notes. I have to admit, I actually got emotional as I was writing this piece, like halfway through the chorus I started choking up because the theme had already wormed itself into my head and this was an amazing variation on it.
I wrote Flesh when I was already super-tight on time, so I spent all of 9 minutes on it. (yes, 9 minutes) I slapped down an instance of the Ugo “Motion” synth that I use a lot for evolving rhythmic textures, put in a simple whistle-type melody, and added a drum loop. That’s it. A super-lazy track that really should have been better, but it does an okay job of setting the mood, and there’s only one organic/microbe area anyways so this isn’t that big of a deal.
Gulliver (Reprise) is the ending track that plays when you finish the game. A lot of people actually don’t get to hear the second section of this song because they press space and loop back to the main menu, but it’s got a nice lush piano+string rendition of the theme that comes in after the nostalgic/minimalistic 8bit version. You could say it’s inspired by the “Atop the World” track from the Tower of Heaven OST, which does the same thing. Btw, that OST is a superb demonstration of the “thematic reuse” idea, and is highly recommended. I was pretty lazy with Gulliver (Reprise)…I actually literally took the original Gulliver theme project file, copied it over, and replaced the instrumentation and cut out the UNTS parts while changing the tempo. Like I said, I was super-crunched on time here, so that was the best I could do, but hey–it ended up working out pretty well!
I made all of my songs using FL Studio, which conveniently keeps track of how long you’ve been editing each project file. So for those of you who are curious, here’s how long I was working on each track in the OST:
Upgrade Acquired – 17 minutes
Gulliver – 39 minutes
Prologue – 4 minutes
Station Zero – 32 minutes
Thicket – 18 minutes
Cavernous – 38 minutes
Destiny – 39 minutes
Flesh – 9 minutes
Gulliver (Reprise) – 17 minutes
Total time: ~3 hours, 33 minutes
Note that some of these numbers are probably higher than my actual working time, since I was probably multitasking on the actual code at some point, but you get the idea.
That about covers it for the music creation process! Next up I’ll be writing a little bit more about the design and code issues I ran into over the course of Gulliver’s development. In the meantime, if you have any questions about production techniques that I used or anything, feel free to ask.
Oh, and if you liked the 9-bit style of the Gulliver OST, there’s plenty, plenty more where that came from: http://ddrkirbyisq.bandcamp.com/
I’d personally recommend the “All in a Day’s Work” album. ^_^
Side note: I’ve just noticed that apparently we’ve gotten rid of the “Community” category? I guess it was kind of a hard thing to rate anyways, so I don’t really mind.
Link to rate/play:
Alright, it’s been a couple of…days? (my mind is still having trouble readjusting to the day-to-day cycle) So, let’s start off with a quick recap of what went right, what went wrong, what could have been better, what I’d do differently, …
What went well
Doing a warm-up entry
Wow, I am so glad I had time to do TwinkleShooter as my warmup game the week before LD. I learned a lot, and definitely saved myself a lot of time and stress by familiarizing myself with Flixel and AS3 and all of the weird little quirks and details that you need to know about. I also got in the groove of riffing on a prominent theme/motif with my entry in One Hour Compo this past week, so that prepared me for the music too. Speaking of which…
No real surprise here, to be honest, since I’m really used to producing things quickly from all of my OHC practice. While I would have liked to be able to spend some more time on the music, being able to bang out the entire soundtrack in roughly 3.5 hours and have it be so cohesive and catchy was definitely one of the high points of LD. One of my main goals this time around was to make a game where I could show off my musical abilities, since One of a Kind wasn’t really particularly amenable to that. I’ll be writing more about thoughts I had while composing in a separate post. Btw, soundtrack download is here.
Making a Flash Game
I knew from last time that browser games are just so much easier to distribute and have others rate and play, so clearly that was the way to go here, and I didn’t regret it one bit. C# was clearly not easily portable, judging from what happened with One of a Kind (it “works” on linux and osx, but the linux one requires weird dependencies and doesn’t work on 64-bit, and the osx download is HUUUUGE), and although I could have always done C++/SDL, that would require way too much boilerplate, and still not as easy as an in-browser game. There’s also unity and html5, but Flash seems to make the most sense for what I want to do.
It wasn’t an AMAZING idea, but I liked it, and it came along pretty quickly after the theme was announced. I settled on the idea of a free-roaming space shooter game with that miniaturization mechanic, and that was good for multiple reasons, including:
-Multiple areas meant I could make 3 or 4 different level themes (remember my goal of showing off music)
-Since it’s a space shooter, I can get away with little animation
-Similarly, level design can be tile based
-The easy respawn idea didn’t come up until later, but that was a boon too because it meant that even if I made my game a little too hard, it wouldn’t be that much more frustrating.
One of the other advantages of making this kind of game was…
Not making a puzzle game
Now, I certainly don’t have anything against puzzle games or anything, but good gosh, last time around when I did One of a Kind I remember being extremely frustrated because I had no idea how to make good puzzles (or whether they were even possible) with my mechanic. This time around things were much more straightforward, and as a result I never got “stuck”, except for coding issues. Which brings us to…
What went…not so well
This definitely gave me some anxiety at points. Flixel is great and I don’t regret using it, but…both Flixel itself and Flixel Power Tools definitely have some kinks. Some of it is probably just my inexperience, but other things aren’t. For example, the weird framerate jerkiness bug that’s solved by changing one of the condition tests in the Flixel source (thankfully I found that one while making TwinkleShooter). I also wanted to do this cool zoomin transition effect, but I ended up figuring out that zooming out is basically impossible in Flixel without bending over backwards and/or killing performance, so I had to kill that. In addition collision detection gave me all sorts of woes…I definitely spent way too long trying to figure out why you could glitch the ship through walls. The unshrinking logic for checking whether you’re allowed to unshrink or not was also a pain and a mess. And I would have liked to use FlxWeapon, but I don’t like its interface. Of course, either FlxVelocity has a bug or I’m not using it properly (maybe i’m missing a radian/degree conversion somewhere), so when I tried to do shooting logic myself it still didn’t work until I rolled my own cos/sin calculations. Which, you know, wasn’t hard, but it felt frustrating when the framework didn’t pull through, you know?
This was something that was giving me all sorts of worries early on. I had never used DAME before and had decided to go with that as my map editor (I’d heard it referenced before and knew you could use it for entities as well as map tiles), but understanding how to get it all working and exporting automagically to Flixel source was kind of daunting. In addition, the editor is noticeably slow when working with large maps, -slightly- buggy, and generally just seems to be inconvenient for doing the large-scale maps that I was doing. I feel like it’d be fine for small 32×32 levels, but my maps were like 200×200, maybe even bigger than that. I half contemplated looking for another editor mid-LD, but eventually decided to stick with it. In the end I actually got pretty used to it and it wasn’t that bad (huge wave of hope washed over me at that point), but that was definitely one of the more nerve-wrecking parts of this LD.
Biting off a little too much
I wasn’t really thinking super-pragmatically when I was considering my idea, to be honest. I ended up pulling it off, and I’m definitely happy with the result, but it really, really came down to the line–I was still fixing bugs as the submission deadline loomed over me, and I had only finished programming the final boss about half an hour or an hour before that. So I was really quite crunched for time–and that’s with only sleeping like 10 or so hours through the whole thing, I think! (granted I did take a break to go social dancing and rest my brain) But yes, doing something with multiple levels, enemy types, non-procedurally-generated levels, upgrades, etc. may have been a bit too ambitious for an LD entry. If I had chosen something smaller or simpler I might have been able to make it a little more cohesive and polished. Still, it mostly worked out. It’s just…I was in the danger zone, so to speak. I also didn’t have quite enough time for playtesting. Luckily my easy respawn alleviated that issue, but I’ve already received the common complaint that the ship could be a little smaller (in terms of both graphic and hitbox), which is something I could have easily adjusted had I known that change needed to be made.
Now here’s an interesting one that I didn’t realize until pretty late in the game–maybe even after I submitted. Quite early on I was faced with the decision of game resolution and zoom factor, and I ended up choosing 800×600 with NO zooming–but upscaled sprites to make pixeling easier (most of the sprites are upscaled 4x). My logic was that upscaling the sprites but leaving the resolution unchanged would allow for smoother sprite movement, and probably a more visually pleasing effect. What I didn’t realize is that it actually looks kind of sloppy, because you lose the whole pixely feel if your movement isn’t the same as your pixel sizes. Plus, when you use rotations and smooth movement of pixely upscaled sprites, it just looks like some bad flash movie/game. so yeah, maybe it would have worked out a lot better if I had chosen my resolution and zoom differently. Maybe a 640×480 game with 2x zoom, for instance.
On the plus side, I was mostly happy with the art I managed to make, despite the fact that the resolution made everything look a little sloppy. The bird and bee animations, for example, surprised me at how well they worked, since I’ve hardly ever drawn animations before.
What I’d like to do differently
This probably isn’t my last LD, so in the next one, I’ll probably aim to:
-Take on something of smaller scope
-Not rely on the use of any tools I’m not familiar with beforehand (DAME)
-Use a more pixely art style
I might also try FlashPunk instead of Flixel or something, but who knows…I think Flixel is pretty good, but maybe FlashPunk would suit my fancy more and the only way to know is to actually try it out and see the differences.
Alright, so that’s my portmortem report. I’ll be following up with more detailed recountings and explanations of the development process soon…
The smoke is starting to clear…and yes, I managed to finish my LD game “Gulliver” in time, and yes, I am very happy with it!
Go ahead, play and vote! (it’s a free-roaming space shooter game, with a neat miniaturization mechanic) It’s a flash entry this time so it’s super-easy!
Anyhow, lots of detailed post-mortem stuff will be incoming soon. I’ve already scanned in my brainstorming documents so I’ll be posting those up, and describing a detailed overview of my thoughts on what went well and what didn’t, as well as the design process (also going in-depth into the music creation ideas). Unfortunately, I didn’t really have time to post anything during the compo itself, because…well, it was just really down to the wire and I had absolutely no time to spare. I just kept working working working and there wasn’t really much time to take a break, so that’s why the lack of dev screenshots and progress posts. But I will definitely make up for it with my post-mortem stuff!
Now, onto the more important point of this post: the Gulliver OST!
That’s right, click the link above and download the whole album, for whatever price you’d like (yes, free if you so desire!). Featuring chiptune and electronic tracks centering around the main “Gulliver” theme, which I think is quite catchy if I do say so myself.
Last but not least, good luck to everyone who’s still in the middle of the jam! You can do it!~
I think I’ve just about reached my limit, but there is hope yet! I’ve gotten a LOT of progress done in the past few hours, everything is going very smoothly and basically all I’m doing right now is content, though I still need to put in triggers to spawn bosses. Other than that, I just need to finish doing all the levels (which actually isn’t being that much of a pain!) and also think of an ending of some sort. Then it’s just polish and whatnot. I have to make 4 more songs as well…
Might come down to the line, but I can definitely do it, I think!
Going to try and sleep just a little bit so I can push through all the way until 6PM…T_T
Had a motif idea earlier tonight and now I’ve finished the main menu theme and the upgrade ditty!
Just gonna say one thing: adding music to the game just instantly makes it seem 10 times more polished…I even have the music stop and then fade back in when you get an upgrade! how about that?
Well, we’re halfway through. Am I in good shape? Really hard to tell, actually.
I have a bunch of stuff done, but I also have a bunch of stuff that’s not done.
I’m beginning to think I should have tackled something simpler and easier. But oh well. Best hope now is to make sure I don’t screw anything up…already the un”mini”izing is kind of weird and buggy due to collision detection being wonky, but I think that’s a battle I’m not really quite willing to fight, at least not right now.
I also need to sit down and just design the entire level structure at some point. ahhhhhhhhhhh >_<
I should also mention that I haven’t started on music yet, but well, being me, I can probably whip that up in like 2 hours or so and still have it sound awesome, if this past week’s One Hour Compo is any indication. Assuming I don’t run into some weird case of writer’s block, anyways *knocks on wood*…
I think that’ll have to do it for tonight.
Here’s what I have so far, anyways (debug drawing enabled):
I also have a charge shot that isn’t enabled.
Main headaches so far have been with DAME and collision detection stuff. Some major headaches there, actually. I’m not quite looking forward to doing the maps =( If only there were a good way to do it, like in RPGMaker…bah.
It all feels so hacky! Not sure how good I feel about this one yet…
I’m on my third piece of white paper already!
I think I’ve settled on an idea. I’m pretty excited to run with it! For now, here’s a small teaser:
“Undoubtedly philosophers are in the right, when they tell us that nothing is great or little otherwise than by comparison.”
Jonathan Swift, Gulliver’s Travels
I’m not going to my dance event on Friday (only the one on Saturday), so I’ll have a bit more time. We’re now about 1.5 days away from theme announcement!
I’ve finished my warmup game, TwinkleShooter, which went pretty well. I’m definitely glad I took the time to do it, as I’ve learned a LOT of little detailed things about Flixel and Flash/AS3 that are really useful to know. Here’s some of them that I noted down:
-There’s a bug in the main loop that causes frames to be dropped sometimes. I forget the thread that this was noted in, but something about changing < and <= in an if statement fixes it and makes framerate much smoother. When I pull the latest cutting edge Flixel repo I’ll have to check for this again.
-Do initialization of FlxStates in create, not the constructor of the state. One reason for this is that the camera doesn’t exist yet so any camera modifications don’t work in the constructor.
-Similarly, do initialization of FlxSprites in reset(), since the constructor isn’t called when you recycle an object.
-antialiasing issues. It seems like Flixel is build upon the assumption that you’re always going to draw to integer coordinates and that you always want to clamp to integer coords for drawing. However, when you rotate or scale sprites, that assumption breaks down because rotation and scaling (especially by not-nice numbers) looks kind of horrid unless you do some sort of interpolation. So Flixel uses two different rendering paths, and chooses the “simple” copy-pixels-and-blit-blindly path for most normal rendering, EVEN if you have non-integral coords for your sprites.
The interesting thing is that there are multiple ways to hack around this depending on what you want. For example, you can set your sprite’s rotation angle to 0.000001 and it’ll use the advanced render path, which means you’ll actually get subpixel effects instead of clamping. Another way to do this is to simply modify the source of FlxSprite and have it always take the advanced render path. I’m of the opinion that Flixel’s API should actually give you a way to do this, but for now knowing how to hack it is fine.
Also worth noting that setting antialias to true has no effect on whether or not pixel-clamping is used, but instead if pixel-clamping is NOT used, antialiasing tries to smooth things out more. So that’s another option.
-memory management and recycling via flxgroups. This is one of the cases where Flixel’s documentation isn’t totally clear because some of it isn’t quite there and some of it is incomplete. Flixel Power Tools suffers from this at some points too, so it’s good to know these things beforehand so you don’t accidentally try to do things in an old-fashioned way.
-FlxWeapon seems nicer than it actually is. It’s a great idea but is kind of cumbersome, for multiple reasons, for example it’s not trivial to pass in your user-defined bullet class. I think the intent is that you use it to spawn a bunch of generic bullets and then use the FlxWeapon’s “group” to do your logic, but that raises the question of who owns the FlxWeapon’s group and who’s in charge of doing that and how does the management work. It doesn’t seem too clear to me, so unless I need the specific features that FlxWeapon offers maybe I’m better off not using it. It also expects you to package things into FlxSounds (and it can only play one instance of the sound at a time), so that’s another inconvenience. Setting the firing rate and target are easy with FlxWeapon though…so kind of a tradeoff.
-FlxSprites are NOT centered by default, so set offset.x = width/2 and offset.y = height/2 everywhere if you want that, otherwise the upper-left corner of your graphic will be the location of your sprite.
-LabChirp is like bfxr/sfxr but with more stuff! Pretty neat.
-Flash can’t embed oggs or wavs so you run into mp3 latency/seamless loop issues. For now I’m just running all of my mp3s through mp3loop. There are other ways around this but I think this seems to be the easiest/most efficient one for now.
TODOs before Friday:
-Find a nice way to host an html page and embed an swf in it so that it’s centered nicely, instead of in the upper-left corner of the browser window. Unfortunately google sites doesn’t allow you to embed flash content into its web pages, so this’ll have to be some kind of weird workaround, probably.
-Pull the latest versions of Flixel and Flixel Power Tools from github and check the following things:
1) did they change the main loop frame drop issue?
2) did FlxWeapon change?
3) does it still work with my project?
I should also mention I’m using Actuate for tweening.
edit: looks like the latest dev versions of flixel + power tools don’t really have anything notable that I’d miss, so I’m just going to stay on master for now. So the only thing left is to find an easy way to embed nicely, which shouldn’t be too hard.
LD22 was my first time doing Ludum Dare, and I’m looking forward to participating again!
I used C# and SDL.net last time, but those proved to be really unwieldy for distribution on OSX and Linux. This time I’ve decided to use Flixel, which I’m pretty excited about, because really there’s no reason I =shouldn’t= be using something like Flixel for the kind of 2D pixel-graphics chiptune games that I like to make. Plus it’ll make distribution and everything a lot easier.
My primary task between now and next week is to make a test game with Flixel. Probably some really really quick shmup or something like that, just to get used to the syntax because I have no actionscript experience (looking at example code, though, it seems like I’ll be fine).
Last time I got 25th place overall. Although I’d like to strive for improvement this time around, I think that’s too high a bar to be setting for myself, so I’m going to just go into things with the expectation that I might not do quite -that- well. And if I do anyways, well it’ll be a pleasant surprise
One of my main goals this time is to make something that’ll showcase my musical ability more, since that’s one of my main strengths. So I’m going to probably try for a game that’ll lend itself to lots of great chiptune music. I’m also not going to do another puzzle game, because those are really hard to design levels for, as we learned from last time around. It’s not really that fun to sit around scratching your head like that, so I’m going to put less emphasis on being innovative so I can just make a game that’s =fun=. Polish will also be important, just like last time.
Now, the bad news: Just like last time, I’ve got other commitments…2 dance events during the timespan of ludum dare, so that’ll be 6 or so hours out of the 48 that I won’t have. I could just not go to one of those events, but my feeling right now is that I’ll probably end up going to both. Well, it can’t really be helped. Maybe it’ll be a good way to break and relieve stress anyways. or maybe I’ll have some sort of gameplay mechanic breakthrough while I’m dancing ;P
I’m also pretty busy from now until LD so let’s hope I really have enough time to prep myself for this…*crosses fingers*