#14: Devlog updates and launch stats
This post was originally written in October 2022
I said I’ll write at least one more devlog about why the game took so long to make. I still want to do that, but first I thought it would be fun to look back through all the previous devlogs, and to talk about how the launch went.
#01: History and Motivations (January 2018)
The plan is to release as a $0.99/£0.99/€0.99 premium game on Android and iOS when it’s ready, which I would really like to be in 2018.
That price point is certainly too low even for mobile platforms. And of course I didn’t end up releasing natively on mobile, or anything close to 2018.
#02: Gameplay and progression (January 2018)
Everything here is still accurate! The only differences are that some of the visuals and player movement are different to what is visible in the GIFs. For example ink is more purple than black for improved visibility, and the hook automatically stops reeling in after dropping a creature.
#03: Tutorial Design (February 2018)
I still don’t use text to explain any mechanics, I’m proud of that. The only addition I made is that in Level 1 there is now a dashed line surrounding the fish and the count showing how many you have to catch, because a lot of players didn’t notice the count, which is a key puzzle hint in many levels.
#04: Bootstrapping, menu transitions and level loading (April 2018)
There are 6 main screens in Hook: the title screen, level select, gameplay, aquarium, settings and about. Each of these is a separate
.collectionfile in Defold with an additional
main.collectionacting as the bootstrapper that loads and enables/disables all the others.
For localization purposes there are different settings screen and title screen collections for each language (
Incorrect! I changed it to a single collection per screen, with the text elements changed and moved around for each language. This is explained in detail in devlog 12.
The state controller, collection proxy loading, level previews and level loading all still work exactly the same as detailed. The only other difference is in the possible transitions.
It’s now possible to open the settings screen from the pause menu of the game without losing your progress in the current level. This is the only case where multiple of the core collections are loaded at once. The game music continues playing when opening the settings menu this way, to indicate that the game is still there and no progress has been lost, and you will be returning there upon leaving the settings menu. There is one awkward edge case however, which is that it’s possible to reset your progress from the settings screen. If you’re in a level, go to the settings screen via the pause menu, then reset your save file, exiting the settings screen will go back to the title menu.
Completing the final level shows a game completion animation and then automatically transitions to the credits, so that is another transition. The updated transition diagram (with updated screenshots) is:
#05: Case anatomy and pixel-perfect rendering (August 2018)
This is all still accurate. The only change to the case is that there are no longer individual arrow buttons in portrait mode, it’s always a d-pad.
Fun fact: I can fit every single texture in the project, including every bit of baked localization text in all 12 languages, into a single 2048x1024 texture with about a fifth still empty.
I actually have no idea what images I included here back then, but that’s actually a much larger atlas. I can fit every single texture in the project into a single 1024x512 atlas with a quarter still empty! If I add margins, internal padding and border extrusion it still easily fits in 1024x1024 :)
#06: Undo (December 2018)
consists of around 5500 lines of Lua spread across 31
.scriptfiles and 1
That file count is still accurate, but the line count in the final build is 9785 lines of code!
|Line count||File name||Responsibilities|
|1626||hook||Grid movement and creature interaction logic, pause menu|
|1212||gameplay_events||Applying and undoing the outcomes of the movement and interaction logic|
|968||case||Pixel-perfect scaling of virtual handheld game console|
|728||level||Tilemap parsing and creature instantiation|
|671||settings||Settings menu layout and functionality|
|540||palettes||Data tables for the 16 case palettes|
|476||level_complete||Data tables and implementation of localized animated messages|
|462||localization||Utility functions for supporting multiple languages|
|450||level_select||Level select menu layout and navigation, level preview rendering|
|405||title||Title screen layout and animation|
|363||game||Creature counts and animation, level restart animation, pause menu localization|
|289||state_controller||Changing scenes, on-screen button state|
|266||reel||Fishing reel animation, crab claw snip animation|
|203||about||Layout and animation of the about screen|
|200||aquarium||Revealing and animating creatures in the aquarium|
|136||audio||Music crossfading, SFX playback|
|99||arrow||Animation for menu selection indicator|
|99||camera||Camera panning and shake|
|89||render_script||Configuring render targets and draw order|
|86||save_data||Creation/reading/writing of save file|
|86||thanks_for_playing||Game completion animation|
|60||bobbing_anim||Synchronized small vertical movement animation|
|58||pico8_text||Sprite rendering for arbitrary text in the PICO-8 font|
|52||number||Sprite rendering for 3-digit positive integers (0-999)|
|51||level_complete_letter||Color cycling animation for an individual glyph in the level_complete animation|
|35||boss_label||Localization and tinting of "boss" text|
|23||about_text||Localization and tinting of credits text|
|14||chest_glint||Simple sprite animation|
|12||seaweed_sway||Synchronized small horizontal movement animation|
|9||explosion||Simple sprite animation|
|8||line_snip||Simple sprite animation|
currently 18 types of event
gameplay_events.script now handles 23 different kinds of event, but most of the additions were for the ‘flow’ mechanic which wasn’t used in the final game.
#07: Design iteration: player movement (February 2019)
Judging by this track record I’m due to change something about the movement around October 2019, then January 2020
This was a joke, but I did actually make one minor tweak and a couple of bug fixes to player movement in 2022. The minor tweak was that when you press a directional input to stop yourself reeling in with nothing hooked (‘version 3’ in the devlog), it no longer actually moves in that direction, the input just causes the reel-in to stop. This was because I noticed that almost every time I used this mechanic, the random directional input was meant as a brake, and it was rarely possible to time an intended direction. The bug fixes were to fix rapid movement when holding multiple directional inputs, and to allow backstepping when the line is fully extended.
(No, I don’t plan to still be working on this game in 2020!)
#08: (Work)flow: art (March 2019)
The entire flow mechanic was cut! Still happy with the sprite though. I also returned from Aseprite to the simpler and more familiar PaintDotNet.
#09: Interview with sound designer Andrew Dodds (May 2020)
Andrew now works as a Sound Designer at Jagex, working on Runescape and other projects! Very happy for him :)
#10: Audio tech (May 2020)
there are 18 sound effects in the game
We now have a massive 19 sound effects :)
One thing I really like is that there’s now two versions of the menu music, one for the surface with wave crashing sounds in the background, and a more muted underwater version. Whenever the menu music is playing, both tracks are played together in sync and the relative volumes are blended between 0 and 1 based on the camera position. It’s subtle but really adds to the feeling of dipping underwater.
the content of my project amounts to ~3.8MB of the build, with audio being ~3.3MB of that
For the final HTML5 build the project content is ~4.87MB, with audio being ~4.57MB of that (~94%). The increased size is mainly due to the additional version of the menu music.
#11: Organization (August 2020)
Notion remained an invaluable organizational tool for this project for both task tracking and long-form writing. Labelling task tickets by one or more disciplines (code, art, design, audio and admin) also continued to be useful.
The original column structure (Shelved, Bugs, Long term, Short term, In Progress, Done) worked well for the long-duration period of development but during the final launch push I found it useful to reconfigure slightly (Done, Long-running / long-term, In Progress, Features, Bugs, Tweaks, Shelved). I also did another massive cull. The Features, Bugs and Tweaks columns are all now empty, with just a handful of things like this devlog remaining in the In Progress or Long-running columns.
There are 108 tickets in the Done column and 55 in Shelved, although this is a little misleading because:
- Plenty of development happened before I moved to a kanban system;
- Many of the Done tickets actually represent dozens of separate but related tasks combined into topical checklists; and
- I fully deleted many tickets instead of moving them to Shelved if I no longer thought they were good ideas or had any possibility of ever happening.
Setting up access to Notion for Andrew ended up being not worthwhile, because it was so rare for him to have a meaningful amount of work to do. Instead I stopped pestering him, then in an email thread detailed all the audio work as part of the final launch push. He would send me the audio, and I’d implement it and send him a build.
#12: Localizing a low resolution pixel art game (July 2022)
I thought this would be recent enough to still be fully accurate, but there is one very minor change:
The clouds and creatures are usually randomised, but I used a fixed seed here so it was the same in each language
I replaced the randomized title screen creatures with consistent seaweed. The actual localization work didn’t change though!
#13: Release! (September 2022)
I released Curious Fishing 30 days ago. How did it do? (Technically today is day 30 so there will be a few more hits in the remainder of the day, but you get the idea).
I’m still very happy with the game and stand by my decision to release it as a free HTML5 game and not deal with the stresses of forming a company and filing taxes. I also stand by the idea of launching the game as a premium download on some platforms in the future, once I have other wares to sell too and the enterprise is worthwhile overall. I’m proud of the design and the quality, and I’ve not had to release an update to fix any issues.
So, some numbers:
- 9837 page views with 7474 browser plays. I think the 33 downloads are people installing the game for offline play via the itch desktop app, so if we count those too the game has been played over 7500 times! Wow!!
- 28 ratings. There are three ★★★★☆ ratings and twenty-five ★★★★★ ratings on itch! If we equate that to Metacritic user scores, that’s a 98/100 (or 97 if they always round down).
- It’s been added to 104 user collections. I think most people use collections on itch to group games they played and liked or games they want to play (like a wishlist or backlog)
- 3 people chose to financially support the game, for a total of $13.98. I appreciate the tips :)
- There’s been some really lovely comments and feedback posted in a variety of places. Friends and colleagues have also been very supportive, it’s been very fun hearing what people think of the game. I’ll come back to this at the end.
This is one or two orders of magnitude more plays than any of my previous personal projects, way more than I expected. I’m very very happy with the reception to the game, that this many people have played and enjoyed it. Just wow!
Where did this traffic come from? itch offers two views of incoming traffic. ‘By domain’ groups all hits from a particular website together, I think this is a bit clearer for seeing overall site popularity. ‘By URL’ shows you where specifically they’re coming from on those websites, for example the different subdomains of Reddit, or the particular page on a blog (so you don’t have to go digging yourself).
The vast majority of the page views came from a handful of websites which curate web games specifically, including one in Japanese! That was particularly heartwarming to see, reading Google-translated page comments of people enjoying the game and helping each other get past tricky levels, it really made the localization work feel worth it, this was the exact thing I was hoping to enable. In fact people were giving each other hints in the comments of various websites and it was always fantastic to see.
- I tweeted about the game. I think I had about ~630 followers at the time, mostly game developers, with a few more follows as a result. That tweet currently has 105 likes, 52 retweets (of which 7 are quote tweets) and 8 replies, with the link to the game in the next tweet in the thread having 49 likes and 19 retweets, for a total of 154 likes and 71 retweets. That might sound like a lot or a little to you, it’s a lot to me, I’m happy with that, I very rarely tweet anything
- I emailed a handful of journalists who cover games that are free or web or puzzly but didn’t get any coverage
- I posted on the itch Release Announcements forum and the PICO-8 forum and of course the release devlog on the Defold forums and itch
- itch has surfaced the game to many people looking for games to play on the platform, I think it reached top 20 ‘new and popular’ web games for a while but I forgot to take a screenshot
- Game designer and web game curator Bart Bonte posted about the game. They must have a huge following; over the launch weekend we had about 2000 views total and ~40% of these came from here, so thank you very much Mr. Bonte
- Someone posted about the game on the web games subreddit. I’m not on Reddit so wasn’t going to post here myself, but it’s now the highest total source of traffic by domain and still consistently generating 20-40 page views per day, so thanks for posting about it, err, “BustyBossLady”
- Another web game curator JayIsGames included Curious Fishing in their weekly roundup
- Some sort of newsletter called b3ta linked to the game
- A Japanese web game curation website also posted about the game, and again they must have a large following as it generated many page views for me
- My friend and colleague Emily Short kindly included the game on her blog
- Game curation site WarpDoor linked to the game
- Russian game development forum GCup linked to the game
- There were two let’s plays on YouTube (that I could find, there are many many fishing videos on YouTube so it’s hard to search for)
I wanted to end by including some of my favourite comments. It makes me very happy to know that people are really enjoying the game ❤
This addendum was originally written two weeks after the main post
A small addendum to the previous devlog:
Shortly after posting the devlog discussing how the launch went, Wholesome Games tweeted about Curious Fishing out of the blue, including their own GIF of gameplay! Even more incredibly, this led to a feature on PC Gamer! Woah!!!
Wholesome Games tweet:
PC Gamer article:
As you might imagine, this created a slight spike in the analytics. See if you can spot it:
It was very fun refreshing the page and seeing that spike get bigger and bigger. During the launch weekend we peaked at 892 views and 678 browser plays in a day, numbers I was extremely happy with. After the PC Gamer article, we peaked at 2462 views and 1815 browser plays in a single day, around 2.7 times as many. Just amazing. Christopher Livingston, thank you so much for writing about my game!
We’ve now had over 15 thousand page views and are approaching 12 thousand plays. That’s a very silly number if you try to actually imagine a crowd of people that size, knowing that that many people have played my video game. Wow.
Britzl has also very kindly added the game to the Defold showcase page, which is lovely.
Leave a comment
Log in with itch.io to leave a comment.