AL13YCAT - WebXR Word Puzzle for JS13K
September 16, 2025
Background
Js13kGames is a yearly game jam that tasks web developers with building a full game in less than 13 Kilobytes of code. This year's theme was "Black Cat".
The goal of my game is to place vinyl records onto the turntable to play songs for a cat rave. If the new record flows with the current record (according to the color, title or artist), the combo meter will go up. Fully completing each combo will win the game.
I wanted to build a word puzzle for players to solve. I wrote a few scripts to help find words that would work for specific categories, and made sure that they would loop so that a player could start at any point in the loop.
What Went well
- Used BlockBench to create models, and made a plugin to export and a script to load models (Note: This was a "What To Do Better" point from my LDJAM52 Post Mortem)
- Event System, Animation System, and Interactions (things I made before) were redone to handle THREE.js
- The Puzzle was complete within days, and the game was fully playable beginning to end by day 10
- InstancedMesh to make a large crowd
- Dynamic music that changes depending on the progress of the puzzle.
- During this jam, Ben created l13 which provided a massive amount of space through optimized code minification.
What Could Have Gone Better
- I did some playtesting, but could do more beforehand. What is intuitive to me doesn't always click with others as they see it for the first time.
- WebXR is tough, could have spent more time on the controller model
- I looked into using shaders, but writing and testing them didn't really take off
- The InstancedMesh requires one BufferGeometry to work properly, so my exported models didn't work. I needed to replace it with an ExtrudeGeometry to be more simple but still catlike.
What To Do Better Next Time
- Create a color palette texture and set the UVs for each model, for much less memory usage.
- Merge geometries for a model, which would allow me to turn any model into an InstancedMesh.
- Ask for and implement suggestions from playtesters.