I don’t have the time to be picky.
I came to the above realization when I sat at my computer for multiple weekends in a row while staring at my code wondering how I can fix the smallest of bugs in my game. We’re talking real small, like, the collision is literally one pixel off, or a certain sound doesn’t play when X or Y happens (I added sound, by the way). None of this makes the game unplayable, and considering that 1) this is my first time ever coding anything with substance, 2) it is my first game and nobody expects it to be perfect, 3) if in the unlikely event that the game does look like it might be a hit, I can go back and fix minor bugs later, 4) I have a full time job and can’t spend my very limited free time worrying about the small stuff when #’s 1-3 are factors. I just need to take what is “good enough” and move on.
The game is sort of shaping up, in that it kind of looks and sounds (again, sound!) like a video game. A crappy one, but someone would look at it and be like, “Oh, okay, a video game.” Whereas before it was a borderline-stick figure looking character silently and awkwardly walking and jumping around the screen. The climbing controls, which I said I wanted to finish in the last installment, are more-or-less complete. The collision on them isn’t perfect, and one out of every 20 or so attempts to climb along a ceiling just doesn’t work, but it’s manageable for now and it’s a proof of concept that someone could look at and say, “Oh, okay, [describes game concept].”
Here are some challenges I ran into this time and also how I resolved them.
- The jumping felt off. For whatever reason, the jump button would not work every once in a while. The timing on when the character lands and when he can jump again is extremely tight. In fact, it is pixel-perfect. The character would not register a jump command until he was 100% touching the ground. I don’t recall ever having this problem in most video games, so I attempted to add a timing window where the character would read a jump press if he was 10ish pixels above the ground. My coding knowledge is not good enough to implement that right now, so I failed and decided to try something new. What I did instead is add a “landing” sound effect. Now, whenever you hear the little “pfft” noise as you hit the ground, you know you can jump. I haven’t had any issues now that I’ve added that cue. That might be enough, but I might look into adding that bigger window again at a future date.
- Sound effects wouldn’t play. I mentioned this above, but there were times when sounds wouldn’t play. If you were to jump in the middle of the attack animation, for example, the jump sound effect wouldn’t play. This was an easy fix. I basically said, “Hey, if you’re in the attack animation, still play the jump sound if they hit the jump button, stupid.” That fixed it. No issues there.
- Collision. I feel like this is going to be a running theme. Collision all-the-way sucks balls. I had overlooked the fact that the climbing controls would also require collision. For example, if you’re climbing up a wall and your head hits the ceiling, you should STOP. But since the CLIMBING collision is different from the WALKING/JUMPING collision, the stupid character decides the correct move is to keep on climbing to the point where he gets stuck in the ceiling. I fixed this in a lazy way. Essentially, I said, “If your speed comes into contact with a ceiling/wall, go back to where you were before you would hit it.” What that means is, if the character is travelling at five pixels per frame, and the wall/ceiling is three pixels away, his next frame will instead push him back to where he came from, which would be three pixels back. What that means is that the character won’t always line up with the wall — in the above example, there will be a three pixel gap between the wall/ceiling and the character no matter how much you climb into it instead of going until he makes contact with it — but it prevents the character from passing through solid objects and doesn’t break the game. It just looks crappy, and since everything else looks really crappy, it’s fine for now.
- Climb animation. The set of character sprites I got did not include climb animations of any kind. I remedies the side climb by using the “crawl” animation and rotating it by 90 degrees. That worked well enough, but there’s no equivalent for hanging from monkey bars or something in that back, so I had to draw my own… sort of. What I did was take the “walk” animation that was in the pack and just draw his arms up instead of down. It’s a bit wonky because he feet go a little crazy (because I had to add extra frames), but it no longer looks like he’s sliding across the ceiling via his hair follicles like it did originally. It feels much better now.
There were probably other things, but I don’t remember. There is constantly something going wrong. I always find some kind of workaround, but it’s getting harder and harder. The game is playable, however, and while it’s not very fun yet, you can see the skeleton of a unique game mechanic in here. Once there’s actual obstacles and objectives, it might approach the precipice of “fun.”
So with the sound effects (created with this sound effects generator) added, the controls are as satisfying as they’re going to feel with this placeholder garbage. Time to move on. Next up on the list of things to do:
- Add enemies. Right now, you can swing a “sword,” but there’s no point. I need to add some kind of basic enemies for the player to hit and kill.
- Add “death.” With enemies, there needs to be some kind of consequence for getting hit. I need to add some kind of simple restart mechanic for when that happens, and I should also add a sound effect or something to make it feel more painful.
- Add more obstacles that could cause the aforementioned “death.” Pits, basically. The climb mechanic is almost fun, but if there’s no tension and no reward/penalty for doing it right/wrong, then there’s very little point.
That’s all I got today. Things are happening. It’s not a complicated or big game, or even a small game… it’s not really a game right now. But it’s almost a game! I will check back in once a decent chunk of progress has been made. At some point, I will let people try it for themselves. Thanks for reading, and God speed (?).