{
  "$type": "com.whtwnd.blog.entry",
  "theme": "github-light",
  "title": "On developing Voxel Telephone",
  "content": "Do you know the \"Telephone game\"? Some know it as Drawception or Gartic Phone. I remember first seeing it as \"The Building Game\", which is a multiplayer Minecraft map. The rules of The Building Game are simple, a player makes a description and another player builds it. This process repeats until the game is complete. \n\nNow, I can't get enough friends to enjoy a building game session. But I could make a more asynchronous version of the game, much like how Drawception already works.\n\n## Where do I build?\n\nAt the time, I wasn't sure where to make this game on. I had a couple of options:\n\n- Roblox\n- SandPile\n- Minecraft\n- Web\n- ClassiCube\n\nFrom these platforms, I am looking for discoverability, ease of play and functionality.\n\nRoblox seemed perfect at first glance. It's a platform for all ages. But I wasn't sure if there'd be technical problems should the game get so many players. It didn't seem like asynchronous matchmaking was suitable for Roblox. I could make an external service to solve potential matchmaking problems. But I decided against doing that as I used to do self-hosting.\n\nSandPile is a platform that I am comfortable making games for. Its client has an interesting lineage as it was Brick Hill's client before its platform got shutdown. While the client has been getting much needed features like sounds. I felt like it might be difficult to maintain with little player base. There isn't way to play SandPile sets on mobile which isn't very accessible.\n\nMinecraft seems natural, it's the game which The Building Game was made on. Minecraft comes in two flavors: Java edition and bedrock edition. I didn't look into the development process for bedrock edition, but developing for Java edition seemed hellish enough. My goal isn't to learn something new, it's to create a game I want to play.\n\nClassiCube is a game based on Minecraft classic. It is very developer friendly, with a simple network protocol and optional extensions. The client can seemingly be played on anything. It can run on web browsers, mobile devices and even consoles like the PS Vita.\n\nIn the end, I picked ClassiCube. It's perfect for what I was looking for. Discoverability was no problem as ClassiCube has a server list. As it can be played on anything, it even makes a web-based client pointless to create. Although it has an extended protocol, support for it can be incremental. So, I only implemented the protocol extensions that I need.\n\n## Development\n\nI used Node.js for the server as usual. There are modules for the network protocol, but I decided to make my own module for it. The classic protocol is very simple, and I only needed to pick some extensions off the Classic Protocol Extension.",
  "createdAt": "2025-05-03T04:16:50.798Z",
  "visibility": "author"
}