Soulwielder made it to the deadline, despite some of my serious doubts during the hectic week of developing it.
If you want to download it, the zip is attached to this post
This is the first time I've ever written a postmortem, and I'm not really sure how they're supposed to go, but I'm going to approach this by talking about the game first - how it ended up, how I think it could've been better, etc. - and then, in a second post later, about the development process and the hurdles that took up most of my time or caused me the most heartache.
Ultimately, these posts are probably just going to be what I should've been writing during the competition, but didn't really have the time to.
This first part is primarily about design, and the second part will be about the making of the art and programming the game.
The state of the game
A lot of features either didn't make it in or got changed to make them easier to develop.
Summary of Gameplay
If you don't know, the game is a 2D platformer with A and D or left and right moving you, W and S or up and down aiming your gun (down aiming only possible midair, otherwise you'd be able to shoot the ground beneath you uselessly), Z or J to jump, X or K to fire, and C or L to pay 3 souls to fire a piercing, double-damage soul blast.
You can also dash with space, which was a big tool when it came to getting around quickly.
Each level has some houses that spawn humans, who are helpless and run around with their arms out and their open mouth probably catching a lot of bugs, and demons running around killing humans on touch.
When touched by a demon, you take some damage and temporarily become invulnerable.
Every Human leaves behind a soul when it dies; you can pick these up to spend them on soul blasts. They also heal you by 1 health out of your 100 maximum health every 2 seconds, per soul.
If you don't pick up a soul within 18 seconds (I believe that's what it ended up being), it spits out 2 or 3 demons and disappears.
Souls are white initially, and they get redder and redder until they turn into demons. This gives the player some indication of when demons will pop out of a soul, so they know if it's a risk to charge in to try and pick it up before it turns.
The souls turning to demons and the usefulness of souls for the player is how 'death is useful' in this game.
The goal is to kill all the demons, which advances you to the next level.
There were supposed to be 4 demons: a fast wolf, a slow ogre, a warlock that fired projectiles, and a flying bat.
I adapted the wolf into a goblin of some sort after struggling to make a good-looking wolf sprite. I made a bat sprite that flapped its wings, but didn't have time to script the flying units. The ogre and warlock got cut entirely (although technically the bat did, too, it just has a sprite laying around unused...so really, that little scrub just made the build bigger, I reckon).
To sum it up, we ended up with 1 enemy instead of 4.
Souls and Corpses
Rather than the corpses of humans being left behind when they die, I made them die like everything else: with a 'splat' generated by feeding their sprite's pixels into a particle system and pushing them away from the center.
You could probably guess, this was because I failed artistically at making a corpse sprite that read well instead of looking odd or confusing. I also avoided making a death animation out of this, although I suppose it wouldn't look too far out of place to have them just instantly turn into corpses upon death in a game where everything has a 2-frame walk animation...
The souls of humans turn into demons eventually, not the corpses (since there aren't corpses). Since there's only one demon, the goblin, that's the only thing a soul spits out; it was supposed to choose a type of demon to generate, and generate a number of them that's balanced based on how strong the enemy is. Instead, it randomly generates 2 or 3 goblins, then spits one out every .15 seconds, giving them some Y velocity to push them up a bit.
Rather than pressing a key to heal by expending some souls, I made them regenerate your life over time; 1 health per 2 seconds per soul, with a maximum of 12 souls in your bar at any time.
Thinking back on it, this was probably a mistake; this makes the health you get from souls unlimited if you choose to camp out for a while and wait for healing, and as I touch on below, the game is too easy once you've learned the ropes.
Movement, Navigation, and Dashing
The movement is still quite capable of making you go very quickly, as was intended. Your dash refreshes whenever you hit the ground, and the dash cooldown is very low if you do it while grounded. This means you can dash, jump, dash again before hitting the ground, and then your dash will be refreshed, so you can do it again.
On top of this, you carry over about half of your sideways momentum when you hit the ground, and you can jump again immediately after hitting the ground. While midair, your sideways momentum doesn't decrease like it does when grounded. This means you can just dash, jump quickly, dash before landing, dash quickly after landing, and jump again before your much of your momentum slides out.
This is a rather extravagant amount of speed, but it's not necessarily useful to do more than a few jumps like this, as the levels aren't particularly long and are broken by the need to make controlled, high jumps onto platforms.
There's a jump each level that's designed to force you to properly use the dash to get the highest upward momentum, which is done by jumping, then dashing up immediately after the jump begins. This is instructed as the way to get the highest height possible during the tutorial, so hopefully people aren't thwarted long by the tallest platforms.
I considered reworking the dash system in some way that made this not the case: it seems kind of not right that jumping and quickly dashing up takes you literally 200 pixels higher (about 160% higher than dashing at the last second, right before you start falling). This is how it ended up, though; getting that extra velocity on top of your jumping velocity makes the gravity take longer to reduce it to 0 and make you start falling, so you move up faster for a longer period of time.
I didn't really have time to work on this more. I needed to design levels, and I couldn't design them for the existing system, then change the system and have to redo the levels because you can't jump X high or far anymore, etc.
The combat ended up disappointingly easy and somewhat drab.
Avoiding enemies is as easy as lightly jumping, dashing over them and to their other side, then turning and shooting them, and repeating when they get near again.
I would've liked more challenging combat, because now it just seems like letting too many enemies come to be by neglecting to steal the souls before they turn to demons is simply a hassle, not an added challenge.
It just means dashing above their heads and shooting them for a longer period of time than you would've if you'd played it a bit better.
The only real threat of losing isn't actually dying and being told you've lost, it's of losing extra time clearing out the clump of 30 goblins that spawned while you were away because you accidentally left a soul in a field of humans.
Once you learn how to control your character properly and realize that you can't really die if you just dash around stealing souls and letting the regeneration mend the blows you take, the game becomes quite easy, and the main reason to keep playing, I found, is to enjoy the particle effects rendered from dying demons and humans, from absorbing souls, and from firing soul blasts through a hunk of demons (or humans if you have an excess of souls...whatever floats your boat).
I can clear the game in a little under 2 minutes just by quickly scooting around and wiping out the demons; you don't even really have to concern yourself with your hitpoints.
But anyway, enough bashing my own game: here's what I think could have been done to make the combat better.
I could have made enemies jump periodically, so they'd sometimes get you if you jumped over them.
The addition of warlocks, bats, and ogres would've made things better, I think.
The warlocks' projectiles would have to be avoided if you tried jumping and dashing over goblins, and the bats would pose a similar issue for you here as well.
Also, getting rid of the warlocks with goblins running around them would require some more strategy, as the goblins would constantly be getting in the way of your projectiles.
Had the ogres been implemented, they would've been too tall to jump over with a light jump and a dash, so it'd at least make it take longer to scale them and get to the other side of a group of enemies.
Ultimately, I think the game ended up pretty glitch-free, which I'm happy to say, especially considering the state it was in near the last few days.
The only glitches I'm aware of right now are:
- Starting over after seeing the victory screen doesn't get rid of your souls like it's supposed to. This doesn't affect much, since the first level is so easy and there's a spawn of humans not far off anyway, and any souls you stockpile in that first level will still disappear when the next level loads in.
- The "screen fading out and back in" effect sometimes looks messy, letting you see the previous level for a moment before the new one loads in (the whole point was to mask the current level disappearing and the new one appearing, so this feature sort of utterly fails sometimes).
I went into this a bit too cocky, I think. I thought I could do too much in a small time frame.
I enjoyed myself, but the going was rough; I pretty much barely scraped by despite putting in 5-8 hours a day on it (above 9 hours on the last day).
I think this was a good and helpful experience, despite the fact that my game might not be scored highly.
I do like the idea of the game and the notion of charging around stealing souls before they turn to demons, and I feel the combat would be fun and have its own sort of flair if I got extra units in to add more variation. I just didn't have the time or foresight to execute it properly within a week.