PixelWorld: A Post-Mortem
So this is my first game dev post mortem. It's also my first Ludum Dare, first solo jam and first time I've been properly happy with what I've released. I've done two jams previously - one 4 hour one at a friend's party with no internet access, and another 24 hour one to raise money for www.specialeffect.org.uk (a great charity that aims to help people with disabilities to access games). Both were free mobile games - Emma's Escapades on the Android Store, and Coffin Dodgers on both Android and iOS.
The game is here - please give it a go and leave feedback, criticism is completely welcome as I'm aiming for a proper PS4 release. My twitter is https://twitter.com/theChief - I appreciate follows and retweets, and I'll do the same for you ;)
So why am I pleased with it? I think I've ended up with a fun game. I achieved what I set out to achieve, didn't get bogged down with feature creep and it doesn't look like trash (I have literally no artistic skill). Obviously I want to win, but failing that I've got something I'm more than willing to polish and sell on an actual console - my university has really good links with Sony and they've got a game studio with the licences needed. I've actually started work on the PS4 port now - it runs on the PS4, I just need to make it an actual game :D
What Went Right
I actually planned this one! It seems planning goes a long way. Before I even started the jam, I had this picture of something I thought might be fun. It was certainly achievable, especially with the lack of any artistic skill, and the theme ended up fitting! This meant I could start planning features and timelines as soon as the jam started, which worked really well - especially since it was 2a.m. UK time so the likelihood of producing any usable code was very slim. I don't work well with no sleep! After a suitable plan was produced, I had a couple of hours sleep before beginning development. The plan was split into 2 sections: the MVP and the list of incremental changes that would be nice - something I found very effective during my year of industry placement. For the MVP it was decided that the game should generate a destructible map, have a countdown timer as the lose condition to create an arcade-style pick up and play game, and generate gems that increase score and add time to the timer. Optional features included a leaderboard, levelling bonuses, map regeneration, and enemies/bosses.
Planning also allowed sleep, exercise and proper meals. I slept 6 hours both nights, which vastly decreased the amount of stupid mistakes I made. I'm not saying I didn't make ANY stupid mistakes, though... I'm opposed to the industry's obsession with crunch for that reason - if you've not had any sleep for 48 hours and are being powered by energy drinks, coffee and/or pizza, there is no way your brain is working at its best. Sleep properly, drink lots of water, and eat well. Your body will thank you, and you'll get more done and it will be better quality. The "Game Outcomes Project" in 2014 found that crunch time does not increase the quality of the game or the speed at which it is completed.
Anyway. Keeping the scope of the game down was key, I'm a sucker for feature creep - I've been well known to add extra enemies, attack types and patterns, etc. just because it looks cool. That may be why I rarely finish a project... Not this time, though! When my housemate tried it and said "you should add multiplayer", my immediate answer was "well, my skeleton program does have multiple controller support...", but I resisted! If it wasn't on the plan, it wasn't going in. Well, except that really cool bug that makes everything explode, but that just needed fixing and attaching to a new type of gem!
The generation was also much easier to set up than I expected, and haven't really had many issues with it. It was really nice to get the core component down quickly, with a relatively small amount of tweaking needed later. I'm glad I researched it beforehand - the Youtube series I followed is linked at the bottom. Going through that in the days leading up to the jam really gave me insight into how the generation worked and how to fill the generated caves. It also served to give me a couple of ideas - I wasn't really expecting it to be feasible to add gems and things placed in the caves, I thought I'd be making the score based on destruction alone.
And finally, I think I'm allowed to say the game was fun ;) I tested it with friends and family for the duration of the compo and all my feedback indicated that it was pretty satisfying to destroy the whole place, only to have it regenerate so they could do it all again. There's loads I want to add and was suggested to me, but at it's core I think it's a pretty fun game.
What Went Wrong
It wasn't all perfect though, obviously. I was originally going to spawn a boss every time the level regenerated - I still stand by that and think it would make the game much better, but due to time constraints it was completely left out. I couldn't even start to implement it, which was really annoying. As I said earlier, I have a tendency to want to add all of the features - but I resisted this time.
I also had a lot of trouble with the lava. The physics just didn't play nicely - to increase performance, colliders were turned off if they weren't in view, and that caused all sorts of strange things to happen. I make the executive decision to not waste any time fiddling with it and just got back to the important stuff. It was a real shame, because it looked really nice and would have added a different type of danger to the game. Dropping a feature is always quite disheartening, and made me feel like I'd never get any of it to work.
Performance was a real issue when I increased the size of the world. Every single destructable block has its own collider, which meant there could be up to 40,000 collision checks per frame. Obviously that is a massive issue, and I attempted to fix it by only rendering the blocks that were visible. That ended up causing way more strain than the actual collision checks, so I opted to just disable the colliders. That ended up being much more efficient, but also meant enemies sometimes flew through walls! To fix that the simulations on their rigidbodies were paused. I really need to make it more efficient before the PS4 release, and I think to achieve that the loops that turn off the colliders that aren't needed will be multithreaded...
Another issue is with player movement. It's not particularly obvious that there's gravity, and jumping by pressing the left thumbstick up didn't seem particularly intuitive - but it did make jumping and shooting at the same time more accessible. Keyboard input was also obviously not the intended input method and really isn't as satisfying as input with a controller. Controller input is also disabled for the WebGL version, which is the most accessible - and needs remapping on Windows, which is the second most common platform... sigh
Conclusion
In conclusion, it was a great experience and I'll be doing every single LD possible, for the rest of my life. I look forward to playing all your games, making more games and reading your reviews of mine! Please play and review it. Pretty please.
Dom