July 2026 updates

It's not the end of the month like when I usually do these, but I figured I might as well go for it now since I just did a major change and it's been months since the last update post.

tilemap%20town%20new%20doodle%20board%20ui

Client changes:

  • New UI that makes it much more friendly to draw on doodle boards, with an interface that's a lot more like a regular paint program. You can turn on a grid, custom palettes work a bit better, and you can save a PNG of the picture you drew. You can pick from selection of palettes right in the UI.
  • More friendly item creation UI with icons, categories, and descriptions of what each thing does. When doodle boards are created, they will have settings most people will want.
  • Tweaks to make the gadget editing UI more friendly and guide people towards the built-in behavior options
  • Added a dropdown near the chat input where you can choose to prefix all messages with /ooc or /me or /spoof until you change it again
  • Wallpaper will get drawn underneath all floor tiles, not just the ones that match the default floor type for that map, so you can put partially transparent tiles on top (such as on this cloud map)
  • Placing tiles with the build menu set to "Select" will now work with the undo feature
  • Sign messages now show when you step on a sign or bump into a tile that has a sign on it, no matter how many other things are on that tile

Server changes:

  • New database format, and the server will automatically upgrade version 2 databases to the new version 3 one
  • Scripting commands to move the entity to a specific pixel position, or get an entity's pixel position; automatically adjusts the offset to make it work
  • Scripts can now get callbacks for mouse drag events, and can mark mini tilemaps as draggable
  • When configuration file exists, and is formatted incorrectly, the server will refuse to start up instead of starting with default settings
  • Admins will get notified if the config file is bad when they try to /rehash
  • Fixed /cleartopic command
  • Added some range checks for when you place or delete tiles outside the map
  • User statuses (but not status messages) now available in the API; this is used to show status icons next to users on the Tilemap Town homepage
  • When you change a map's default floor, the whole map now gets sent to users until I make it work in a nicer way

Sky map
tilemap%20town%20clouds
Come build with us in the new sky area! You can get here from the "base of the infinitely tall tower" on the main map.

Database changes: (technical)
The database format changes are things I've been wanting to do for awhile, but since it's a breaking change and I want to reduce the amount of formats I have if I can, I wanted to collect changes together to eventually go do all at once. It's been two years! And I realized that migrating to the new version would be pretty easy since the changes I wanted are mostly new columns (so I can do stuff like ALTER TABLE User ADD COLUMN name text and there's your migration right there).

  • Secondary entity table Entity_Ext for extra information that most entities don't need
  • Tags moved to Entity_Ext and the tag column is now just for tags, whereas before the tags column was both for tags and for miscellaneous other things I wanted to cram in before making a new database format with new columns
  • New column in Entity_Ext specifically for miscellaneous things that may not justify a whole column
  • Entity message forwarding info, statuses, and offsets are now persistent for all entities (except statuses are not persistent for users)
  • Tags and mail can now be compressed; mail is always compressed currently
  • Got rid of the map log table since it never got used; if I do set that kind of thing up I think that belongs in a separate database

Database changes to prepare for potential new features:

  • When files are uploaded, they are hashed and the hash is stored (may be useful for a feature where the client picks a file, and the server can find an already-uploaded copy of it or upload a new copy if not present)
  • New user column for a display name that's specific to the user, not their entity (so that you have a name to use that isn't just your username when you're only partially logged in and don't have an entity, such as in instant messaging mode)
  • New map column that can be used in the future to mark maps with flags indicating the map's purpose, for an eventual search feature; stuff like "roleplay area" or "test sandbox"
  • New Entity_Ext column that can store a secondary URL related to the entity, so that in the future I can make it so that reuploading a custom palette used for a doodle board will update all doodle boards using that palette to point to the new URL (currently this has to be done manually)
  • Bans can have a private note attached to them

Example script with pixel movement:
This is a color changing gem that moves around a player in a circle

local me = entity.me()
local timer = 0
local DIVIDE = 20
local RADIUS = 32

while true do
  local player_x, player_y = Entity.xy_pixel(2) -- Edit to your own ID
  me:move_pixel(math.round(player_x + math.cos(timer/DIVIDE)*RADIUS), math.round(player_y + math.sin(timer/DIVIDE)*RADIUS))
  timer += 1
  if timer % 25 == 0 then
    me:command("userpic 0 " .. (timer / 25 % 4 + 12) .. " 77")
  end
  tt.sleep_next(100)
end

Previous Post