It's ALIIIIIIIVE (Day 6)
Welp. It seems I hit my goal a day early. Technically, I should have spent another couple days on eXpat, but for reasons you'll see below, eXpat ended up being finished a day early.
Post-Mortem Time? Post-Mortem Time.
eXpat was a game prototype where I intentionally kept the design document short while defining the most important things - game mode, objectives, fail/win states, and an idea of how I wanted the game to flow. I intentionally challenged myself to keep it short, keep it sweet, and keep it simple. However, the final game as it will be uploaded later is somewhat simpler than the original design document would indicate.
The Problems
Custom edge-shader: In order to quickly start prototyping a game jam game, I chose to use a shader that I use rather often which shades edges. I had not anticipated how that would actually cause some serious problems:
- I was unable to create Scenery elements beyond a sun in the distance because my edge shader would treat them like objects that were full of geometry to shade, regardless of whether that was true or not. This is actually not normal behavior - it's due to the small resolution of the game itself.
- The edge shader also almost made it impossible to have bullets/lasers be a different color - thankfully, I accidentally discovered Particle/Emissive shaders in Unity's core library that allowed me to bypass that.
The Low Resolution: You and I both would have thought this would have been the main problem, but it almost isn't...at least for 2D games.
- For 3D games, 64x64 pixels makes it extremely difficult to have objects of any distance in the scene without them fading out before they normally would. It also made perspective more of a challenge to handle, especially for a third-person up-and-behind camera.
- The resolution was the main reason why my edge shader wasn't able to work as well as I'd have liked it to. Given that at normal resolutions (1024px or greater) a 2 pixel line is not a big deal, at this resolution a 2-pixel line can take up almost a 20th of the screen. Now consider that the substance of what you see on screen, for the most part, is either textual elements or edge-shading, and it quickly becomes a problem.
- The lack of resolution in conjunction with my font of choice made it difficult to make a UI that made sense. I figured it out, though.
The Not-Problems
Self-imposed Time Limit: I had set a limit of 7 days to finish eXpat. This might have become an issue, but by keeping my micro design document micro and pruning non-essential features that I couldn't implement or prototype quickly, I turned it into my biggest ally - given that this is only the sixth day of work on eXpat, that is.
Enemy AI: In the earliest stages of planning on Day 1, I had contemplated trying to make some complicated-as-heck AI (or complicated to me) that could maneuver on its own, pick when to shoot, and escape on its own self-informed escape vector. I said to hell with that. Instead of making some super-complicated AI, I made a very basic "AI" that determined its own path from a set of presets, has a pseudo-random chance to shoot and a pseudo-random time to shoot. I turned what was going to be my biggest enemy into my greatest ally, because as it turns out, it's actually kinda fun - and not frustrating - to dodge these enemies.
Game Design Document: Traditionally, I have a hard time deciding on what to make or do. While I had a genre in mind, my goal with this jam was to force myself to go through the full design process from start to finish. I anticipated making the design document to be difficult at best, but when I sat down and focused on it, I was able to get it done and keep it...at least somewhat reasonable.
The Features That Got Cut
Going through the whole design process from start to finish meant that I had to practice a technique that I am not fond of - pruning. The idea of cutting what could be a very nice piece off your game in order to get the game out the door is perhaps the most distasteful part of design and development to me. For that reason, I had to make sure I practiced it and got used to it.
Enemy Bullet Patterns: I tend to look up to bullet hell games as a gamer. I love trying to dodge the patterns, and I generally can stand the sheer frustration of not getting a run perfected. When I looked towards making eXpat, I anticipated trying to emulate some of those bullet patterns in 3D - even at as low a resolution as the jam restricted us to. I had hopes of doing this even as far out as day two, which is when I added the idea to my task list.
While working on enemy AI yesterday, I made the decision to prune this feature as I figured I would not finish by tomorrow. While working on adding paths for the basic AI system, however, I found that I would not have completed this feature anyways! Having two enemies spawn at a time firing relatively quick bullets at you is already difficult enough to dodge if you aren't trying to anticipate any of the seven different AI motion paths. Trying to dodge a salvo of bullet spray at the same time would have been...vexingly difficult. I do intend on exploring this post-jam, though, when I have more time to actually program bullet patterns.
Scenery: I already went over this in the Problems section, but eXpat's "Escape" mode scenery got cut almost entirely from the game. My edge shader wasn't behaving well with scenery, and in the end cutting the feature out - minus the sun - saved me up to a day's worth of modeling and editing. It also saved me some collision code, which I felt would be a nightmare to handle in terms of what a player expects versus what I would implement, as well as...well, simply implementing it.
The Final Verdict
It's a game. A space-y game. With a single game mode, it might get repetitive, but it looks good and plays okay.
eXpat will be submitted to Itch.io later on in the night or tomorrow during the day. I'm giving myself some time to mentally rest before packaging it up and being done with it. I'll leave a link here once I've done that.