Cave Girl - SUPER AQUA GOTH is a procedurally generated ARPG where the player and the enemies use the same powerups! It went... okay. I think it's certainly my most interesting and most feature-complete entry yet, though that doesn't mean it's at all perfect. In fact, the first few reviews I got showed me some of the fairly obvious issues the game has. We're going to go through the development, and then get to a few regrets I have, and where Cave Girl will go from here.

Starting out
I started the jam with the theme, Deeper and Deeper, reminding me of an entry I made a few years ago, Dungeon Boy, about delving deeper and deeper in a dungeon. It was pretty bad, so I thought I'd use this opportunity to make something better in the same sort of ARPG vein. I started with some silly messy notes on what I wanted to make, which I'll show here, in the form they were left in.

Yeah... not much. I had more an idea in my head, though I think writing more down at this point would have been beneficial. The basic idea in my head was
- Procedurally Generated world
- Maybe procedurally generated enemies, at least procedurally generated behaviours
- Powerups that can affect both the player and the enemy, that interact with eachother
- Projectile-based effects that propagate down with the projectile
- Pixel art tiles
- A sword and bow player (initially the bow was going to be a powerup)
- Floor hazards (this is kinda not coherent with the rest of the design I think)
And I think you can see most of this in the final game, though the way it got there was kind of bumpy. I started with the proc gen world actually, having a lot of experience with proc gen. It's a fairly simple system, I start with three different "terrain" types, defined by each
- Regular Perlin, 4 octaves
- Ridged Perlin, 4 octaves
- An average of a ridged and billowed generator
(For a bit of background. Perlin is a coherent noise generation algorithm, it makes pretty uniform high and low values. Ridged noise is perlin squared, and looks like wavey ridges, and billowed noise the absolute value of perlin, and looks - well - poofy)
I blended these together and it looked pretty good. I added a kind of circular filter to make the caves not go to the edge, which, again, is something I've got a good bit of experience with. I want to stress in this section that the kind of proc gen I did was really simple, look in my code! You just need to know your tools. That, and getting the player moving was most of the first night.
Day Two (Saturday)
Starting saturday, I wanted to get the player totally set up and enemies basically in. At this point the game still had no art, but that was fine. Getting the bow and sword working were fairly simple, and I added a circle to treat as an enemy. The enemy design was much like the eventual powerup design, where the enemy was really a dumb holder, and it had a bunch of behaviours that could be asked how they wanted to move, and were states in themselves, with transitions between behaviours defined in them. It was simple, but effective. There's only a few basic behaviours in the game which work fairly well, but don't quite work design-wise. The behaviours basically are: random walk, chase, circle, attack, and shoot projectiles. At the beginning, the projectile behaviour wasn't implemented.
While this produces kind of fun looking behaviour, it doesn't quite produce fun gameplay. Enemies never stay still, and the basic 4-way attack I implemented means it's really hard to hit circling enemies. I should've changed the attack style (which I'll get into later), and I really should've considered more the interaction between the player's abilities and the enemies behaviours. Anyway - the enemy worked, so I went on to the next step, art!

I'm pretty happy with how the art turned out on a basic level, but it hides a few issues. As I've said in comments on my game, I made the palette first. This was a mistake. I didn't sufficiently consider the range of colors I'd need to make a game that's clearly readable. The things that hurt you, and places you could walk, and the collision, wasn't sufficiently distinguished. When I get to a post-jam version I'm going to make the hurty things a very different color. Stylistically though, I'm happy.
The player art was really impromptu. I went in with no idea what the player nor the theming would be, but I started sketch a blue creature, that turned into a girl, and super aqua girl was born! An hour later, and super aqua girl was animated and ready to use, along with the bow and sword.
I implemented the tile art with unity's rule tiles, which I actually hadn't used before despite making a tile-based game at the moment, they're really pretty great, full marks. I had some problems with just not having created some edge case tiles, so there's a sneaky thing I did in generation to get rid of the artifacts - tiles only generate in 2x2 chunks! If it works and it's silly, it's not silly! I also got the player art in and she looked really good, though the sword felt kind of short. That was about all I got done on day two, and I was feeling good.
Day Three (Sunday)
At the start of day three I was realizing I'd made something game-adjacent, but not quite a game. At this point I frantically wired up the progression down. That was more of a game, so I went on to the powerups. As I said before, the powerup system was thought of early and a bit of groundwork was already laid, so putting it together really wasn't too bad. In making the enemy I made "touch damage" a powerup - shown in game now as thorns. I followed that with fire, that made me iron out some issues with the system, then moved onto reflect, and split, and various projectile spawners, explosion spawners, range up, etc. Development of these was kind of push and pull, though once I got into a rhythm it worked well. The biggest regret here is actually how ad-hoc I applied fixes. For example, I noticed some issues early on where certain powerups would propagate too far down a projectile chain, so I added band-aids to fix that... which had to get applied to other projectile spawners... and so on. I wish I centralized that system so it was easier to fix. As an example of what kind of trouble this got me into, late in development I realized I was a bit too harsh with having your own projectiles hit you, so I tried to fix it. Certain things got by, like fire, because it was so ad-hoc. Probably the biggest issue with the powerup system overall.
At this point though, I still only had one enemy, so I hurriedly made five more! These were rather simple graphically, only a few had animations, but I liked the art. With the behaviour system I made before, putting them in game was quite simple. I just added a couple of projectile-based behaviours and assigned them to the enemies and it worked great - so win for that system.
I also added health and bomb pickups at this point, which I think were a good decision. Anyway, one more day and I just had UI and Music I HAD to do, not too bad.
The Last Day (Monday)
I started the day with the music, which again, went pretty well. I find for me it's a lot easier to write music when I'm under pressure, so the song took about an hour and a half. It's terribly mixed, but I think it's interesting and fun so for a jam game, good enough. I decided to use sfxr for the sounds, which I'd come to regret a bit with a few comments on my game. I didn't really give the sounds much care, and I didn't give a way to turn them off, so the sound design gets a bit grating sometimes. I wish I gave them a bit more time. Anyway, I got those all in and still had quite a bit of time.
For the UI, I made a start screen and a "falling" screen, which turned out kind of okay. The falling screen was fun. I also chose a font that looked a bit more fitting and threw those in. Really simple, missing sound sliders, but it worked. I then added a bit of variation in world-generation and you went deeper, which was pretty simple with my generation system. Just animation curves tied to certain perlin parameters. I also made weighted randoms for the enemy and powerup and enemy powerup spawning, which was also pretty quick. Finally, I added the moisture system. Probably the least well-tuned system, the water jugs being super rare, though I thought it added a nice urgency to the game that didn't exist before.
With about 2 hours left, I added the lighting system. It's pretty fun, everything with a light draws to a separate render texture before the screen is rendered, with a colored light circle. There's a post processor that then uses that texture to shade the screen. Less than an hour! At this point I started the bugfixing and the final builds. It did not go well.
There were a few simple bugs that were no big deal, but there was also a unity web player bug. I pushed a development build to Itch.IO to get the game submitted, but getting to the bottom of this went beyond the end of the jam. Unity fails to set a flag in its web asm compiler that makes sure weird float rounding doesn't cause divide by zero issues, but it doesn't tell you it does this. About half an hour after the submission hour, I finally got the bug fixed and uploaded an absolutely final version, phew!
Biggest Regrets
The biggest biggest biggest thing is the player's aiming mechanics. I went with 4-directional aiming to make it simple to use controller or keyboard or mouse originally, but I didn't realize how much better the gameplay would be with mouse aim. Every commenter has pointed this out and they're absolutely right. It's really important to get multiple sets of eyes on your game pre-release.
Another thing I'd want to add are tooltips for the powerups. Me and my girlfriend, the sole tester, both knew all about the powerups, but the player didn't. I think tooltips would have helped a lot.
The palette was kinda weird.
I started with the idea that a bit of a grungy game where things were kind of obscure would be fun, but I think making the things that hurt you stand our a bit more would also have been good.
Next, I think a bit better handling of projectiles would have been good. More consistent mechanics on what damages you, and probably some distinguishing factor between your own and the enemy's projectiles.
Finally, I think intentionally setting up the first level or two as "tutorial" levels would have massively helped in getting people into the game. I see a lot of people who only got down three or four levels in my game and I think with a bit of help at the beginning it'd be better.
While many of these are rather small and could have been implemented given the planning, without having another person or two telling me these are issues they were hard to see.
Where it's going
I'm going to fix the "regret" issues and polish a few of the mechanics in the game, and add a few more enemies. Beyond there, I don't know. I'm interested in turning it into a more full game, but I don't know what the additional content would be. I want to make more world generators definitely, and perhaps go into the more proc-gen enemies like I wanted, but beyond that, maybe shop levels? Give me your thoughts! Again, play the game here at Cave Girl - SUPER AQUA GOTH