Quickbuild is an offline MUSH building tool.
Full list of features and download here: https://github.com/Sketch/quickbuild
(Direct .zip download: https://github.com/Sketch/quickbuild/zipball/master)
Quickbuild is a Ruby script that lets you quickly lay out a MUSH area (a set of rooms connected by exits, optionally zoned and/or parented) in an easy-to-use format in a text file. It's smart about cardinal directions (aliases and reverse exits), <b>racket style exit-naming, and a few other things.
I'm as skeptical as you are! "What does this thing do for me," you ask. Here is an example:
Quickbuild takes this input, describing the connections between seven (7) rooms:
"sw" : "Grasslands" <-> "The Charcoal Grasslands" <-> "Fire Kingdom" "s" : "Ice Kingdom" <-> "The Frosted Grasslands" <-> "Grasslands"
...And produces this MUSHcode to build them all, and all their exits:
think Digging Rooms @dig/teleport Grasslands @set me=ROOM.Grasslands:%l @dig/teleport The Charcoal Grasslands @set me=ROOM.The_Charcoal_Grasslands:%l @dig/teleport Fire Kingdom @set me=ROOM.Fire_Kingdom:%l @dig/teleport Ice Kingdom @set me=ROOM.Ice_Kingdom:%l @dig/teleport The Frosted Grasslands @set me=ROOM.The_Frosted_Grasslands:%l think Linking Rooms @teleport [v(ROOM.Grasslands)] @open Southwest <SW>;southwest;sw=[v(ROOM.The_Charcoal_Grasslands)] @open North <N>;north;nort;nor;no;n=[v(ROOM.The_Frosted_Grasslands)] @teleport [v(ROOM.The_Charcoal_Grasslands)] @open Northeast <NE>;northeast;ne=[v(ROOM.Grasslands)] @open Southwest <SW>;southwest;sw=[v(ROOM.Fire_Kingdom)] @teleport [v(ROOM.Fire_Kingdom)] @open Northeast <NE>;northeast;ne=[v(ROOM.The_Charcoal_Grasslands)] @teleport [v(ROOM.Ice_Kingdom)] @open South <S>;south;sout;sou;so;s=[v(ROOM.The_Frosted_Grasslands)] @teleport [v(ROOM.The_Frosted_Grasslands)] @open North <N>;north;nort;nor;no;n=[v(ROOM.Ice_Kingdom)] @open South <S>;south;sout;sou;so;s=[v(ROOM.Grasslands)]
Saved you a bit of typing, didn't it? As a more extreme example, I used a 35-line file to build a whole walk-through Scrabble board for the 2012 M*U*S*H April Fools. The complete area has 250 Rooms and 840 Exits!
Not sold yet? Read on!
Quickbuild v2 is recoded from scratch, and features a handful of improvements:
- The DESCRIBE command - A shorthand for @descibe-ing rooms as they're built. Just DESCRIBE "Your Room Name" = The description you want, in the Quickbuild file itself, and the room will have its @describe set when it's built.
- Name tagging - If you're building a puzzle or maze (and don't mind rooms having different DBref#s), you can tag rooms with the same name and Quickbuild will treat them as different rooms: "n" : "Puzzle"1 <-> "Puzzle"2 gives you north/south exits from two rooms named "Puzzle". Name tagging is even good for grabbing sections of a MUSH--Just tag each room name with its own DBRef#. I tested this by writing a script that grabbed the main grid off of M*U*S*H, and rebuilding the grid in another MUSH!
- Easier setup - Quickbuild requires no gems or other downloads. Just install Ruby, and it will run.
- Better error handling - Quickbuild v2 catches a bunch of new errors, and produces plenty of warnings about odd input or potential badness like rooms with no exits. All errors and warnings also have filenames and line numbers!
- Better hackability - The code itself is completely new, and separated into discrete sections that do specific things: Parse input files into opcodes, opcodes into graphs, and graphs into MUSHcode. This makes the code much more readable, comprehensible, and most importantly hackable.
History of Quickbuild:
The original Quickbuild was a perl script coded up by Javelin@M*U*S*H in 1999. I started hacking on it in 2011, and asked about becoming and then quickly became the maintainer in September 2011.
I recoded Quickbuild from scratch for a number of reasons. First of all, I had trouble using the original; the code was a little messy, but what really caught me off-guard was having to install Perl modules. I wanted Quickbuild v2 to be easy to set up, easy to use, and easy to read and alter. I also wanted to add a few features, the most prominent of which are listed above. Lastly, it's a nice piece of self-written code to offer as a Ruby code sample, for my own purposes. :)