Fish Styx
The Game Jam
Fish Styx was my entry for Acerola Jam 0. This jam was 2 weeks long and had the theme of Aberration.
ab·er·ra·tion
/ˌabəˈrāSH(ə)n/
noun
a departure from what is normal, usual, or expected, typically one that is unwelcome.
The idea
Before deciding to do the Acerola Jam, I was looking at doing Mini Jam 153: Fishing that took place a few days before. The theme for that jam was fishing. I started coming up with ideas for the fishing jam, mainly a game that was top-down, but would swap to a side view for the fishing part. Unfortunately I didn't have time to do that jam when it started, but when the Acerola jam started I couldn't shake the idea of still doing a fishing game.
Since this game jam was 2 weeks long I wanted to try a few things out. The previous jam that I worked on didn't have any story or dialog at all, so I wanted to incorporate that somehow. I also wanted to add a few other things like leaderboards, a rebinding system for input and better SFX and music this time around.
The theme was aberration, so I started trying to come up with ideas for that plus the fishing idea. The initial idea was a void fishing game where you fish up monsters, but I was having trouble coming up with a solid story for this. I eventually landed on the idea of the game taking place in the river of Styx using Greek mythology. Using an already established story and character would help with the theme, because I could now change the story up to add some twists and this would satisfy the theme.
At this point, I felt like I had a lot of solid ideas going on.
Starting the game
The game starts out with the player controlling a lost soul that normally in Greek mythology would hop on a boat and head to the underworld with Charon ( the ferryman ), but that is not happening today. In this game you are standing in the middle of the Styx river. You can talk to a large npc that turns out to be Charon and he gives you a few items - a fishing rod, a bell and a backpack. The fishing rod will allow the player to fish, the bell can be used to call Charon to talk and the backpack lets you hold the fish you catch. Once you get the items you can now endlessly wonder around forever. I added a simple infinite tiling system that places a tile in front of where the player is facing.
At this point in the game your options are to wander around, talk to npc's, call Charon to talk which is also how you can leave to the next level early or you can fish. There is a hidden timer of 5-minutes that will force you to leave to the next level. I added this as a safeguard to keep the player from getting lost.
Fishing
Once you have the rod you can use it and the character will throw their hook into the river. The hook will descend slowly ( probably a little too slowly ). You'll see fish as the hook descends. The amount of fish is based on where you fish at - if you fish at surface bubbles there will be 6 fish or you can fish anywhere and there will be only 2 fish. One of my favorite parts of the game was making the background for the fishing part, I think it turned out nice. If the hook collides with a fish you enter into a mini game where you need to left click when your indicator is in the correct spot on the circle 3 times. I added a penalty of 1 second on the timer if you miss when you click. The hook will be reeled back in if you don't complete the mini game in time. I added a low pass filter to the audio to muffle the sound once your hook is underwater, but I also found out that Unity uses a different audio engine for Webgl and the engine for web doesn't work with this filter. Which was a huge bummer, because the filter made the audio sound like you were actually underwater. Once you catch a fish it will reel in and then you get to see a tetris system inventory system. You can then click and drag the fish you caught and move it into your inventory while also rotating the fish if you need to make it fit in your bag. This was honestly my favorite part of the jam, even if it was a nightmare to implement. I ended up having to draw ray casts down from the image and test the tiles you're trying to put the fish on. If any of the tiles are blocked when you drop the fish I move it back to its old location. Once you are done moving the fish around in your inventory you exit that screen and go back to the game to fish more.
The fish
There are 6 different types of fish that you can catch and they all range in how many points they give. But there are two fish that alter the game. When you first start fishing you'll notice a red fish at the top of the screen. This is the laser
fish and will offer 0 points at the end of the game, but it will cause you to get a different option on the final scene. If you have the laser
fish in your inventory on the next level, you're able to pick an option to fight the goddess Styx and enter into a bullet hell boss fight. The dash
fish gives you a dash to use while fighting the boss. All other fish are for points OR if you fight the boss the extra fish will each be a heal for you to use. I was pretty happy with this idea of having all of the fish have multiple uses.
Dialog system
The Dialog system was easily the worst part of the jam for me. It actually works pretty well, but working with it is a nightmare. The main issue is how I store the data for the dialog. I'm currently using scriptable objects
in Unity which I still feel is correct, but it is horrible to look at and try to manage the dialog text in the interface for scriptable objects
. I'll need to come up with a better approach going forward to make it easier to deal with, but overall the dialog system worked and had some positives like options to choose from when questioned and then I can make the text move in patterns which is neat.
Back to the story
Back in the game, once you run out of time or call Charon and ask him to take you to the next level you'll meet the goddess Styx. You'll have one or two options. You can either hand over your fish or you can fight her. If you hand over your fish you're taken to the bad ending screen that shows a leaderboard that's set up using Playfab
. If you fight her and win you're taken to a screen that shows the good ending with a different leaderboard.
The idea behind this is that in the story for this game. Styx no longer likes souls traveling her river for free and you must pay a tribute in fish. She also gives you a reward for catching fish and the reward is a bottle of Lethe water. When I was doing lore research for the game I learned that Styx is only one of five rivers and while Styx takes you to the underworld, Lethe is the river of forgetfulness and if you drink the water you forget. So by catching fish and turning them into Styx, canonically you are putting yourself in an infinite loop of fishing for her forever and never getting to the underworld because you drink the Lethe water and forget. I also added little npc dialog moments that talk about this if you talk to them while fishing. However, if you beat her in combat you end the loop and get to go to the underworld. I also ask the player for a username to add to the good ending leader board since you finally end up remembering your name since you're not drinking the Lethe water.
Conclusion
Sorry that was a lot, but I had a lot of fun coming up with this idea and executing on it so it's easy to talk about. Unfortunately I think this wasn't the best game jam game. I basically ended up making two games and just made them work together. The bullet hell boss is conditional and most players never saw it, because they either didn't fish up the laser
fish or they didn't click the fight option. I know that of around 50 people who tried my game, only 11 saw the good ending screen be defeating the boss. So I ended up spending a lot of time working on something that most players didn't even see.
I also unfortunately didn't get a chance to work on the rebinding system, because I also want to add in controller support for this and getting that to work with the drag and drop system was not fun. SFX and music got added at the last minute again. I really need to make more time for the audio next time.
Overall, I'll count this as a personal win because I learned a lot from this project, but this was a very mid game jam entry. Going forward I'm going to stick to a simple idea and just execute that well.