Our great sponsors
-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
-
node-bestzip
Provides a `bestzip` command that uses the system `zip` if avaliable, and a Node.js implimentation otherwise.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
View on GitHub
For rendering the texts in canvas, though, I haven't used the built-in text support from Kontra. Instead, I've used TinyFont, as it renders perfectly pixelated independently of the game scale.
On the other hand, for the background, I spent a whole week in research. It all started after xem released a tool called midi2array. It led me to rethink something I wanted since I first participated in js13k: using WolframTones to generate music for the game. Wolfram can export in MIDI format, so I needed some tiny lib to play this .mid file. In the end, I didn't use xem's tool, but instead, the tool he used to extract notes from MIDI: Jasmid. So after generating a lot of songs, Wolfram finally output a melody that, when played in Jasmid's piano synthesizer, matched the game pace! One of the best moments of this jam!
Code written in Typescript, compiled by Vite, compressed by Roadroller + BestZip + ECT.
And compressed final code even more with Roadroller (reduced 1.3 KB in the zip). And used ECT to recompress the zip (reduced 300 KB).
View on GitHub
It's worth mentioning that the bundle was generated with Vite, and the code was written entirely in Typescript.
It's worth mentioning that the bundle was generated with Vite, and the code was written entirely in Typescript.
I was still in doubt about using Kontra or Replay as the game engine. Still, in the end, I decided to use Kontra for having more built-in features I needed, and also because I had used it in a previous js13k game.
So I started reducing their sizes. I've used Piskel to extract only the frames I needed from the sprite sheets. Then sent them through Squoosh to convert to WEBP with the smallest possible size (it's equivalent to the reduction from TinyPNG, with the difference that WEBP is smaller than PNG).
And compressed final code even more with Roadroller (reduced 1.3 KB in the zip). And used ECT to recompress the zip (reduced 300 KB).