December 2025 updates

Last day of the year! There are now custom name colors, new gadget behaviors, map pages, and improvements when using a touch screen.

Client changes:

  • Users can now set a custom name color to be used in chat messages.
  • Client now properly handles touch screen movement events to drag across the map or hotbar, so building on phones should be much easier now.
  • Improved some issues where touch screen client could scroll the screen away from the UI.
  • /tailshift command can now take a second offset value to be used with diagonal directions.
  • Messages about the user's own status changing are now client-side, instead of the previous situation where clients would have to assume that they should show a message about a status change only when the status change is for someone else.
  • Client will rerender the map when undoing a draw stroke on the map, even when offline.
  • Fix an issue where "random tell" and "random say" gadgets would incorrectly display the list of random messages when editing the gadget.
  • Client no longer prompts to make sure the user is sure when clicking on a command button, if the command is "map".
  • Client now stops the user from dragging the draggable windows outside of the visible area of the screen.
  • Client now sees a ping timeout from the server as a reason to attempt to reconnect (and server-side ping timeout has been increased to a minute on the official server.)
  • Experimental /bigpic command to make it easier to have a non-animated 64x64 avatar; see commands.txt.
  • Your direction is now preserved when moving across maps, fixing some issues where you could be left with an unintended offset when using /tailshift.
  • Options are now organized into categories.

Server changes:

  • Map pages! A URL like https://tilemap.town/map/61 can be sent to anyone to share your map with someone outside the platform.
  • WebSocket-level ping timeout is now configurable.
  • /e ID locate now shows coordinates.

New gadgets:

  • Doodle board; 32x32 canvas that you can drag over to draw on. Uses this mini tileset to display itself, so there's a limit of 2 colors per 4x2 cell. Doodle boards supporting more colors could come later if there's demand?
  • Projectile shooter; can give the projectile a custom graphic and have it display a user particle animation when it collides with something.
  • Gadget that displays text or one tile using a mini tilemap.
  • Gadget that cycles through multiple animation frames, one frame per click. Can delete itself when the animation finishes, if desired, for items like food.
  • Gadget that displays a user particle over itself when clicked.
  • Gadget that can be dragged and dropped to reposition it.

Protocol related changes:

  • Protocol documentation has been revised to be clearer hopefully, and just out what's valid and expected instead of relying so heavily on examples.
  • "usable" and "verbs" can now be freely set on entities, and are now persistent when changed on generic entities - "verbs" are a list of suggested messages you can send the entity to do commands.
  • You can now retrieve information about persistent properties on generic entities that are not persistent for other entity types.
  • MAP and MAI client-to-server messages now echo back the remote_map parameter that was given as input so you can tell what map the response was for.
  • BAG messages can now be used to move an entity within its container.
  • Typing status messages now support the string "pause" in addition to true and false.
  • You no longer need to opt into an extension to receive messages about other users building.
  • There's now a way to notify an entity that you've clicked on it and then dragged the mouse somewhere else, and a way for an entity to request that it wants that.

I'm working on a client that's a desktop app, using Qt, though I'm mostly just aiming to have it be a simple proof-of-concept program instead of looking to do feature parity with the web client at the moment. It's not really ready to show off yet, but can connect and send/receive messages. Part of the purpose of it was to try out pieces of the 3DS client in an environment where I can debug it better, since the 3DS client is crashy. But at this point after the testing I've been doing, I think I'm convinced that the reason it was crashy was because I may have been misusing the official 3DS text input applet, which I probably shouldn't be using anyway because it halts everything else while it's open. Unsure, it's hard to tell if you are using a reverse engineered thing correctly, and eventually when I revisit the 3DS client I'd like to put in a custom keyboard.

I think having a client that doesn't require a web browser feels nice, even if it's not really the best way to visit the world. I don't think I completely agree with people who want the web to just be non-interactive documents and not an application platform, but I do like having a platform not intrinsically tied to a very complicated program as the only way to use it. Of course Qt itself is pretty complicated in itself (for instance, it can understand some of HTML), but it's much simpler than Firefox or Chrome.

I think eventually I would like to have Tilemap Town in a spot where the web client supports all features and works well on both PCs and phones, the Qt desktop client tries to support all the important features, and the 3DS client at least lets you explore the world and chat without crashes. That feels reasonable to me? There are other platforms I want to play with someday (DSi, maybe something Windows 98 or MS DOS compatible, maybe even J2ME) but sometimes the amount of fun I would get out of doing something like that is outweighed by how much effort it is. But I won't rule anything out!

Previous Post