TenderGotchi – js13k22

Js13kGames is a JavaScript coding competition for JavaScript Game Developers. The fun part of the compo is the file size limit set to 13 kilobytes. The competition started on 13th August and ended on 13th September 2022. The theme for 2022 was DEATH.

I managed to participate in the competition for the sixth time in a row, this year I went mostly on my own, as my fellow game-jammers friends were busier than me.

However mapedorr participated in spirit as his graphics ended up being used, and Ryan Malm contributed with awesome music and SFXs.

We ended up creating a cute dying virtual pet arcade game. You can play online here. Source code is here. There’s a gameplay video here.

Remembrance of the first day, August 13

The theme for this year’s js13k is DEATH. I talked briefly with my pal QuietGecko, but we didn’t have an idea of what to do. Throughout the day I was thinking about possible ideas, trying to avoid the endless loop of “Must think of a cool idea that is not too pretentious” -> “somebody surely thought of this already”. In the end, I thought I had something that clicked with the theme and also tied back to my original ideas.

Remember how the original Tamagotchi could DIE if you didn’t take good care of them? My idea was to take the format of the classic virtual pets, but transform it into a fast-paced arcade game where you must prevent its death; imagine time is running at 30x, and you have to respond to the needs of the pet quickly or risk him getting sick and dying.

The main interaction I planned to include was to pick what to feed the pet with, based on four available and shifting options where some of these may increase its happiness but reduce health, and some others may stuff the pet a lot so you should only use them when the pet’s hunger is empty or it will lose health. The food, happiness, and health bars would decrease steadily, and faster as the pet aged.

I also thought I would add some minigames you had to play with your pet when it reached certain life thresholds.

Following up with last year’s Distant Friends, the idea was to keep the visual style: cute characters using vector graphics. However, I would add a bit more in the shape of some nice-looking animations (with a super low, jumpy frame rate).

2021’s Distant Friends

Day 2 – August 22

Many days passed since that first day, I was super busy getting stuff done to travel to Cologne to Gamescom. So no work was done all along.

But then I decided to revive the yearly tradition of working in my js13k while flying, so there we go! this time it was a longer flight so that meant more dev time.

In this first coding session, I managed to create a complete game with a simple gameplay cycle. I reused my entry from last year, chopping everything I didn’t need, and created a simple game where you had to keep your pet alive by feeding it when it was hungry, with the caveat that they were doomed to die since it was impossible to hit the precise millisecond of time to prevent its health to degrade slightly due to hunger.

Also, the pet would poop, and if you don’t clean quick enough? DEATH. Death was to be so common that I added a ranking keeping track of your best effort to avoid it, but it’s inevitable.

However, you would also get to see LIFE, as the pets evolved from an egg to a full-grown creatures. It’s the balance of life and death.

When I went hands-on to remove stuff from my 2021 entry, I figured out that, in the end, I only reused some rendering code because the game was extremely different.

The plan was to focus on polishing from day 3, adding animations and cute art.

Days 3-4 – Around September 1

Gamescom was super busy and of course, I had to make the best of my time there, so I only managed to go back to developing the game during my flights back home. Due to timezones stuff and general trip craziness let’s count this as two “days” of dev.

At this point, I decided to regroup my ideas and draft them again in paper now that I had done a first dive into the code. I discarded the initial ideas of having multiple types of food and playing minigames with the pet, and instead focused on the frantic rhythm mechanic. I planned to add some additional distractions in the shape of items you had to pick, which would also give some variety to the gameplay.

I also considered changing the representation of the pet from vectorial to LCD-like, but ditched that in the end since it would have been a LOT of work and in general I think it was not needed, as the idea behind the Tamagotchi was that the virtual pet was inside the screen; the LCD matrix was just a charming byproduct of the technical limitations. (Actually, I was just lazy to remake that part and I wanted to reuse the art I already had from Mateo Robayo).

The paper drafts were also useful to get an idea of how I wanted the game to look like; since I wanted to make this for Gaby (well, at least a variant of it with much less DEATH), I searched the Internet for Pink Fong toys and found this one.

I toyed around with GIMP a little bit and came up with a mockup of how I wanted the game to look like. I wanted it to _feel_ like a plastic toy, with some feeling for physical buttons you would virtually press on the toy. Sadly, since I did this all on my own it ended up completely flat, so that one part was missed.

I went ahead into hardcore coding mode with these two things in mind, and managed to advance a lot into what looked very close to a finished entry now.

Day 5 – September 8

Ryan Malm, a fellow js13k comrade, popped up in slack offering to contribute to some entries with music, how could I refuse such an offer? he’s already created awesome stuff for 2 of my entries in the past! (ArcherFire Duet of Aces and Backpack Monsters).

However, there was a problem: Ryan uses soundbox, while the engine I had working used zzfxm. So I had to migrate all the sound support which was a bit fiddly.

I managed to do this, incorporate Ryan’s initial tracks, and program the “soft” buttons that would be used for the mobile version (at least that was the plan…)

Day 6 – September 9

This was kind of the last big push day; some of the things I did included:

  • Updated the “conversations” that would serve as an onboarding for the players
  • Added animations for the pet (low framerate, bopping up and down, blinking with its eyes)
  • Added unicode “hats” worn by the pet as it grows, to make it more visually appealing and make the players feel curious as to what the next evolution step would look like.
  • Also added the “animation” of the food flying toward the pet (very important for the player experience) since initially it just displayed the latest food given to the pet but it was very abstract.

I also put up and announced a public version for people to help me test. That was useful to discover a bug on Safari with the audio which was solved by not reusing audio objects (unneeded, harmful optimization), thanks to Ryan for pointing this out too! I also got some accessibility feedback leading to increasing the size of the “LEDs”, improving the mobile UI, and balancing the game to make the difficulty increase as you progress.

Since Ryan had some spare bandwidth, I asked him to produce an extended version of the main track, which he did ❤

Finally, I implemented web monetization features in the shape of a “hard” mode where you had a completely different pet (a gecko, also reusing graphics from last year).

The game was completed, and I felt happy about it.

Day 7 – September 10

Oh, one last thing before we call it a day…

Gaby caught me playtesting the game and went super sad when the pets died, what a shame! this is not what I wanted for a birthday gift for her!

So I went ahead and complemented the web monetization bonuses with a “chill” mode where the pet didn’t die. You just play for fun seeing it grow (at a slower pace to at least add some padding to get the rewards). That worked both to increase the value of the webmon bonus, and to make the client happy!

The Voting – What did the players think?

This year js13k had a brand new voting platform with a more traditional format (just pick a game from the list, play and rate it, compared to previous year’s 1 vs 1 “deathmatch” mode)

Here’s a summary of the feedback we received:

The GoodThe Bad
– The Music
– The Art
– The web monetization implementation
– Lack of keyboard commands
– The game is too hard
– The “pause” breaks the game flow.

The music and art were cool, of course 🙂 I think you’ll always need this for a successful entry. Competition is more fierce every year. It also helped that my game was SUPER SIMPLE; that allowed having good visuals without a lot of work, you got to be realistic about what you can achieve based on how much time you want to devote.

For the music make sure to partner with someone good like Ryan Malm or QuietGecko. These bytes will be extra worth it!

I was also happy to get some good comments about web monetization, since I really worked towards checking all the boxes, and it seems I succeeded in that. Keep these tips in mind!

[…] Let’s talk about the Coil bonus – the implementation in my opinion is just perfect. You’ve taken care about both – Subscribers and Non-Subscribers. You’re showing the bonuses in a visible way, you’re informing what they are, how they’re impacting the game, what to do to get them – perfect. I also like the idea of the bonuses – I can decide either I want to play easy or hard mode. Although the game wasn’t easy for me to understand right away (maybe you can think about some kind of a tutorial mode?), the Coil bonus is somethin I would call as a perfect implementation. Good job.

Ewa Mazur, expert.

Now let’s talk about the BAD.

And the biggest issue was the lack of keyboard commands, and again I think my biggest mistake: Increasing the difficulty of the game via inaccessibility. I think that’s in general a bad idea unless you are targeting a very specific group. Support for keyboard commands is actually included in the game, I just disabled it because I thought the game would be more challenging in desktop using the mouse and *I* could perfectly play it.

This issue, of course, is non-existing in mobile (the platform for which the touchable buttons were initially conceived). Keeping a different way to interact based on the available input would have been a much better choice, and finding a different way to balance difficulty in case it was needed (or just leaving it like that, with the desktop version being _easier_ than mobile, but still enjoyable!)

October 5 – The Awards Ceremony

We didn’t win, of course.

There are a lot of talented people putting a lot of passion into the js13k every year, and also putting down a lot of raw WORK.

Since the jam is 30 days long, there’s a very broad spectrum of entries with a different quantity of work invested. In my case it was 7 days; this could perfectly have been a 7DRL or similar. With many other things going on it’s impossible to devote a full month to this, but that doesn’t mean you shouldn’t participate.

There is a lot of fun to be had in the challenge, and as long as YOU are happy with the results, and you learned something or made some new dev friends or managed to extend your portfolio with a finished playable game, I believe that should be your main metric of success.

I also warn about this because the scoring system is not perfect, and you may end up disappointed that the game you put so much work on wasn’t “fairly” assessed. In the end, the main point of it is giving you feedback to improve.

This year we were placed #68 overall, #35 and mobile, and #19 in web monetization. I hope the TShirt isn’t stuck in customs this time! 🙂