Go to file
nate smith 84cfc0f12d one way exits 2023-05-25 23:03:58 -07:00
client/cmd handle SIGINT, some cleanup 2022-12-29 23:01:12 -05:00
proto WIP towards handling commands 2022-07-22 16:10:12 -05:00
server one way exits 2023-05-25 23:03:58 -07:00
.gitignore WIP towards handling commands 2022-07-22 16:10:12 -05:00
LICENSE Initial commit 2022-07-01 01:48:22 -05:00
README.md readme and notes 2022-12-30 00:16:20 -05:00
go.mod go.mod 2023-04-03 23:17:27 -07:00
go.sum start lua planning 2022-12-15 00:14:22 -08:00
roadmap.md one way exits 2023-05-25 23:03:58 -07:00
witch_spike.lua one way exits 2023-05-25 23:03:58 -07:00


hermeticum is the next version of tildemush: a full rewrite of the alpha release.

there are two major differences: Go instead of Python and Lua instead of a from-scratch scripting language for game objects.

Otherwise, this is a pretty faithful implementation of what tildemush was planned to be (and mostly implemented in the alpha).

but why

the alpha version of tildemush does work! you can script objects and make rooms and do all sorts of things. Unfortunately, it:

  • gets laggy with any real number of users
  • has memory leaks
  • consists of very poorly abstracted spaghetti code
  • has a half-implemented client
  • is extremely hard to add to
  • has a very brittle, very fragile, 100% hacks scripting language for game objects
  • has a very inelegant and inefficient system for handling revisions to game objects code

I feel very strongly that a total rewrite is necessary. I also feel very strongly that Go is a better choice for this kind of application than Python.

new stuff from tildemush

  • API is grpc/protobuff based
  • client uses tview which I find more pleasant to work with than urwid
  • WITCH is powered by https://github.com/yuin/gopher-lua
  • a much simpler approach to script editing
    • I'm going to take a much simpler approach to scripts than I did in tildemush: objects just get one text column for their script with no revision tracking.
    • this can totally change in the future but I don't think it's necessary for a beta
  • "cron" system: WITCH scripts will respond to a "tick" event and decide if enough time has passed for them to re-call their callback.
  • "global chat" since it is my hope that hermeticum can largely supercede IRC on https://tilde.town , I intend to have an always available global chat in a pane in the client so users can feel like a part of a "main" while still wandering around and exploring rooms.
  • "loudness" system. this is not fully designed yet, but events should be "audible" in a regressed way for objects that are contained by things contained in a room where a verb is executed.

the name though

the name "tildemush" has never quite sat right with me. I don't know why. I'm a lot more pleased with hermeticum, which describes what it is I'm really inspired by when it comes to MU* engines: the spaces a mind can create to store wisdom. I like the idea of mapping these mental spaces into a computer.


I haven't moved over any design docs or notes or anything like that. Refer to the tildemush repo for that kind of stuff.


  • to regenerate the API code: protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/hermeticum.proto
  • database connection currently hardcoded to a postgresql database called hermeticum owned by vilmibm who has pw vilmibm. if you want to hack on this locally, update the call to NewDB accordingly. Eventually this will be handled via environment variables.