The first update to F!shing since release, version 1.4 introduces combo-multipliers, and makes the game more varied by randomising more things. Plus, the game now has a permanent lower price! As always, you can pick the game up from the F!shing website, or the widget below!
A full change-list is available at the bottom of this post, but first, let’s get technical!
In game development, sometimes things don’t work out. Maybe a game mechanic isn’t fun, maybe an effect looks bad, or maybe you just don’t have the budget and have to cut things. In the case of F!shing, I can’t get disco mode to run smoothly enough on Android – I had hoped that it was only on devices with high-res screens, but it appears to be bad on everything. I’m not comfortable putting a game out there that runs so slowly it’s unplayable. However, I do want to release all of the other improvements and bug fixes I’ve made to the game over the past few weeks. Even without disco mode, it’s a much better game now than it was. So, version 1.4 will be releasing soon but without the ‘night’ and ‘disco’ modes enabled.
If all goes well, I’ll come back to F!shing in a month or so and get disco mode fast enough that I’m happy to release it. Hopefully taking a break from the project will enable me to find a solution when I do return to it. In the mean time, I’ll be experimenting with snõwkit for a week, and then making some improvements to Quick Quote. Busy busy busy!
So, what have I been doing the last couple of weeks? Firstly, the disco modifier!
The spotlights sway back and forth, the colours cycle, and the little dot lights spin around. (I want to show a gif of it, but the file-size is enormous. :() My current plan is to have it be pretty rare, but once you’ve seen it once,it unlocks as a secret option on the main menu, so you can enjoy it in all its glory whenever you want!
I had to learn a bunch of new shader tricks to get any of this to work. I was pretty happy, and then I tried it out on my Nexus 10 tablet and it ran at 11 frames per second, which is pants. Once I’d added an FPS counter, I discovered that even with only the subtle water ripples it was running at 55FPS, and the night shader at 33. So, a lot of time was spent trying to make these things faster. The end result is that with just the ripply water, 56FPS; the night shader at 48; and the disco shader at 20. (Disco reached 24, but then I added the player-light-circle because it was hard to see where you were, which dropped it to 20.) Optimising shaders was… interesting, as I barely know enough to make them work at all, and shader performance is almost a dark art. Simple things like using if statements to avoid doing work can be slower than just doing the unnecessary calculations. Someone explained somewhere that operations don’t really have a time cost: if a sin() takes 4 cycles, and a matrix operation takes 4 cycles, sometimes both together also take 4 cycles. So, my method was almost entirely trial and error.
You can save a bunch of time by doing calculations in the vertex rather than fragment shader, but the interpolation it does isn’t always what you want. For example, the weird blue lines on the water in the above screenshot are supposed to follow the spotlights, but the in-between values it calculates are wonky. You can see where the background is composed on two triangles from where the sharp bend is. In the end, I decided to leave it like this as, after all, it’s supposed to be a disco so goofy lighting is appropriate.
20 frames per second is not really good enough. I wouldn’t be happy unless the entire game always ran at 60. But, it seems the high-resolution on my tablet combined with mobile GPUs not being great might mean it’s impossible. I’m not trying to make excuses – I genuinely don’t know whether it can be any faster, or whether the hardware prevents that. On my desktop PC, with a graphics card that was OK in 2007, it’s fine. I’d love to be able to make it better, but ultimately I have to ship the game, and it’s not the end of the world. The 48/55 fps aren’t noticeable unless you’re looking, and 20 isn’t as awful as it sounds. I’ll have to see how it performs on other hardware.
I had one last idea for speeding the game up: using the depth buffer. To explain briefly, OpenGL can store a number for each pixel on screen, representing how near what’s drawn on that pixel is to the camera. Then, it only draws pixels that are closer than what’s already drawn. This way, you can avoid drawing on the same pixels over and over, wasting time. Now, currently the game draws back-to-front: first a fat blue rectangle is drawn, then fish, then the water’s surface, then the ground, then the player and plants, and finally the score and pause menu and such. Using the above screenshot as an example, this means that some of the pixels are drawn five times: behind the word “Score” is a tree, some grass, the water surface, and the blue background, and each of these is drawn onto those pixels. With the depth buffer, I could instead draw front-to-back, with “Score” being drawn first, and then skipping the tree, grass, etc. as they’re behind. (Not exactly, as semi-transparent things need to be drawn after what’s seen through them, but it would definitely cut out a lot of wasted work.)
So, why didn’t I do this? Because I discovered that the 2d-rendering parts of LibGDX are incompatible with the 3d rendering parts, so that I couldn’t swap things out, but would have to rewrite a significant portion of the library before I would know if this rewrite would make any difference. Unfortunately, I can’t devote that amount of time to this. Especially as this multi-week patch was supposed to be a minor fix to the Lake of the Day being stuck on a single game mode! I’m susceptible to feature creep, but not quite to that extent.
So, current plans: I have a few things left to clear-up before the next F!shing release, and then onto all the other projects I’m supposed to be doing! Some improvements to Quick Quote Professional are planned, to help with managing large numbers of quotable items, and multiple devices. Then, the business app that I barely started before F!shing distracted me. Once that’s done, I’m not sure, as I’ll probably have changed my mind multiple times before I get to it.
I’m also in the process of writing-up my month’s worth of shader experiences, things learnt and mistakes made. Not because I’m an expert, because I’m not, but because it’s such a confusing topic and I’d like to help other people be less confused. I’d been wanting to try writing shaders for ages before I finally dived in.
Depression’s still giving me a bit of a kicking, so things are slow. This is the worst part of depression, I think – being unable to do anything some days, with no tangible reason.
Game-wise, the first improvement is to the water, as above. Using more shaders (because shaders are fun) the water sways back and forth. (I called it “wibbly-wobbly” in the code, because I can!) Fish are now drawn behind the ‘water surface’ texture, so finally it doesn’t look like they’re floating on the surface. I tried redrawing the water art with a different technique, and, well, you can see below why I decided not to keep it. 😉 It was actually my second go at having it fade between two images, and it’s just way too distracting and ugly. So, wobbly circles will stay, until I try to replace them again!
In therms of actual gameplay, I’ve done a fair amount of tweaking and balancing to make things more fun, mostly to stop the lake becoming flooded with fish, or emptying entirely. You’ll still get lakes that are busier or quieter than others, but they’ll be consistent within that lake. Maybe that makes sense, maybe it doesn’t, but it’s a good thing, anyway!
The biggest feature I’ve left until last, as I’m still in the middle of implementing it: Combo Multipliers! Catch fish quickly, without catching any junk, and you’ll build-up a points multiplier that can drastically improve your score. Throughout development, I’ve wanted to add more ways to reward skilled play, and this should really help you show your friends who’s best!
I’m still hoping to get Disco Mode in for the next release, though I haven’t really decided what it will involve, except for disco music and ridiculous lighting effects. Maybe that’s enough.
Last week I had a nasty bout of depression and got almost nothing done, hooray! Back to normal now though.
A F!shing update is in the works! I noticed a couple of bugs, then thought while I was at it, I’d improve the ‘Game Mode’ system, and it’s grown a fair bit. In the current released version of the game, Game Modes are very fixed – they have some randomness to them, but they play roughly the same each time. The ‘Lake of the Day’ and ‘Random’ options would just pick one of the existing modes to play. Now, I’ve broken the gameplay up into ‘modifiers’ (Fish, Junk, Clams, and Shark) and given each of them a random element. For instance, you might only get one type of fish, or you might get only a few at a time, or there could be dozens at once! This has added more variety to the existing modes. The ‘Lake of the Day’ and ‘Random’ now use a random combination of modes. It’s less predictable, and hopefully more interesting.
I’m also adding some new modifiers to the coming update, and the first one is ‘Night’, which you can see above. Any lake you play has a chance of being set at night, and the limited visibility adds an extra bit of challenge. It’s my first go at using ‘shaders’ – basically, code that runs on the graphics card. It was a bit fiddly to get working, but now I should be able to add other graphical effects in the future.
So, it’s been a couple of weeks since the last dev log. Firstly, I spent the week after F!shing was released attempting marketing things, and relaxing a bit. I’ve also been playing around with Unity, preparing to work on Mycronation. However! There are two projects that you’ll see before I continue with that.
Firstly, it’s Ludum Dare #30 right now! LD is a regular game jam that takes place over a weekend, where the goal is to make a game from scratch that fits a given theme. The theme this time is “Connected Worlds”, and I decided to make a game about managing a haulage company IN SPAAAAAAAAACE! So far, I have some randomly-generated planets with goods they want to buy or sell. It’s giving me a proper Unity workout too!
Then after this weekend, I’ll be working on a business-focussed Android app. Someone suggested it to me a year or two ago, and twice I’ve attempted to develop it and ended-up sidetracked, but this time I will complete it! 😉
I’m thinking of weekly development livestreams for F!shing, as I’ve got a big list of things to add to the game still, and it might help get the game more publicity. They won’t begin until September, but I’m hoping to do them every Friday. If you want to get an email when I start streaming, you can follow me on Twitch.tv.
Carrying-on from last week, I’ve fully implemented clams into the game. As well as them sometimes appearing in the previously-existing game modes, there are two new modes: Firstly, a clams-only one, which plays a bit like whack-a-mole, and secondly, EVERYTHING mode, which is complete chaos! There are also various little tweaks and improvements. You can download version 1.3 from itch.io if you’ve bought it already, or it’s still available to purchase if you haven’t already.
There are still things I’d like to add – I think I’ve already mentioned crayfish and disco mode. The ‘custom mode’ also isn’t in the game yet. However, I’m happy with how the game is now, and I think it’s ready for a proper release. I just need to put together a new trailer to show-off the things I’ve added, and then it will be appearing on Desura and Google Play, and any other store that will have it. 😉
F!shing has been a fun first project, and I’ve learned a lot from it. As for what’s next, I haven’t quite decided yet. There’s a style of game I’d really like to make, but I need to make a prototype to see if I can create it in a reasonable amount of time. I’ll keep you up to date with any progress. 🙂
Back to work on F!shing this week! I’m not putting out a new release yet, but things are coming along nicely. I’m finally taking some things off the to-do list that have been lurking around for months. 🙂
Firstly, I’m removing the online requirement for the Lake of the Day. Previously, I’ve had a server running on OpenShift, which returns the seed used to generate the day’s lake. In order to prevent people from cheating, I was going to force people to be using the same seed. Eventually I’ve decided it’s not worth it – as all it does is produce a seed from the current day’s timestamp, I can just do that locally. This also avoids the problem where OpenShift was shutting the F!shing server down because it was inactive, and would then take a while to turn it back on when the seed was requested – if you’ve had a long wait sometimes before the level loads, this is why. So, it’s all very quick and done locally now.
There is still the issue that people running different versions will be playing on different lakes and in different game modes despite using the same seed. I’ve not yet decided on a solution for this yet. Probably the game will check for updates on launch, and refuse to submit scores if you’re playing an older version, but still allow you to play. This would also mean I’d have a way of letting people know when there are new things. 🙂
Secondly, I’ve gone through and attempted to optimise some of the code. I apparently didn’t understand Java very well when I began, and so the physics/collision code was creating new objects all over the place, dozens of times every frame. That’s all cleaned-up now, as well as some other places. It’s still not really playable on my old low-spec phone, so hopefully there’s more I can do, but this is a good start, and it’s giving me some practice with code profiling.
Thirdly, an actual game feature! Hooray! 😉 I’ve just today started implementing pearl-fishing. Lakes can now have a number of clams (early artwork is above), which open and close over time. If you’re quick, you can catch a valuable pearl while they’re open! They’re not balanced at all yet, and they need some audio, but I think they’ll be a fun addition. I’m already thinking of adding a game mode where there are only clams, and they all have really short timers.
Other than that, random little things.
Stopped buttons being chopped-off on the submit-score screen
Added achievement pop-ups on desktops, finally!
Made it actually possible to select a controller other than the bottom one, when navigating menus with a keyboard or gamepad.
Made the volume sliders indicate when one is selected with the keyboard or a gamepad.
Added a ‘skip’ button to the fish-tank screen, and (hopefully) prevented button-mashing from accidentally skipping through all the menus at the end of a game.
Made inactive analogue sticks on a gamepad interfere less with the one you’re using.
This week I made a game for the Monster Mash game jam, the theme being that the games had to have non-human protagonists. For whatever reason, I decided to make a football/soccer game where the players only have one leg, and can only hop about. It’s called K!cking, because apparently I name everything with exclamat!on marks in the t!tle! It’s got local multiplayer, which I would recommend as the computer AI is basically non-existent! 😉 You can download the Java version here, or play it in a browser here.
I almost gave-up early on in the week, as I felt I was making poor progress. I persevered, and it really came together yesterday (Friday), and though it’s still glitchy in places, I’m pleased with it. I played K!cking against my brother earlier, and it was hilarious. I’m putting it to one side now, except for any minor fixes I might do tomorrow. I might come back to it in the future though, which I say for pretty much every game jam project!
Last week I was in a bit of a slump. In the end, I took the week off from F!shing to just relax. Next week, I’ll be getting back to it, smoothing some rough edges and adding more game modes. Local multiplayer is something I’d like to add to that too at some point, but it’s a more long-term goal.
So, it’s been two weeks since the last F!shing update, and no news. Sorry about that! So, what have I been up to?
I started off last week with switching the build system to Gradle. It took me a couple of days of not understanding what I was doing for hours at a time, but it’s all set-up now. What this means is that I can much more easily update the libraries the game uses, so it should be more stable. It also made it much simpler to add support for…
You can now play the game with (theoretically) any gamepad or joystick. The setup is currently very simple – any analogue stick or dpad will move your boat, and any button will make you dip. At some point I’d like to let you configure which buttons do what, so that a ‘back’ button can open the pause menu, for instance. But for now, I’m happy with how the movement feels. All menus can now be navigated using the game controller or the keyboard, so you don’t have to awkwardly switch back to using the mouse.
I’ve rebuilt the score screen again, so that it’s more consistent, and added a button to play a new lake using the same game mode. Wait, did I just imply that there are multiple game modes? Yes!
The one thing that F!shing has needed more than anything is more variety, so I thought-up a few different game modes. The first of these I like to call ‘Race the Shark’ – a hungry shark dashes around the lake, gobbling up fish. A screenshot doesn’t really do it justice – you have to be very quick if you want to catch any fish for yourself! It’s more frantic than the standard game, and with no litter, you can mash buttons to your heart’s content.
There will be more game modes coming. Crayfish! Clams! Disco mode! Combinations of them! Other things I haven’t thought of yet!
In addition, I’ll be adding a ‘custom mode’ option, where you can tweak things to your liking. This is mostly for accessibility – I didn’t participate in the Accessibility Jam, but it’s made me want to make the game as accessible as possible – but it’s also a nice thing for everyone. Win-win! 🙂
Haven’t bought the game yet? It’s still only £1.99 for all platforms. 😀