Welcome to the official website for the ehMOO and miniMOO 3-D virtual world servers and associated graphics clients (Linux and Windows) and building tools.
If you just want to get started, jump directly to the quick start section. If you're looking for screenshots, try looking at the connecting to ehMOO section, or the world/object editing page.
ehMOO is a 3-D graphics extension to the text-based LambdaMOO 1.8.1 world server, modified to understand a lightweight graphics protocol called gprot, short for 'eh graphics protocol'.
The protocol is implemented on the server as a combination of 'C' code changes and additions to the LambdaMOO server and MOO code changes and additions to a stock LambdaCore. The server code is available as a patch to LambdaMOO 1.8.1 (also tested with 1.8.0 r5). The MOO code is available either as raw MOO code that can be injected into an existing MOO, or pre-injected into a virgin LambdaCore.
As an alternative to the full-blown ehMOO server, which requires a Linux development system, we've also implemented a small-footprint server in Java called miniMOO. It's meant to be run by anyone who doesn't want to or who doesn't have the resources to run a dedicated server but who still wants to be able to host a graphical world, even on a sporadically connected computer. miniMOO supports only a very small subset of the capabilities that ehMOO or LamdbaMOO does. It's restricted to a single room and objects in the world aren't programmable, but it is a network-capable multi-user server and supports any number of graphical/text objects and users. It implements the same level of eh graphics protocol that ehMOO does and supports a useful subset of the most commonly used MOO verbs.
For our reference gprot client implementation, we chose an open-source DOOM engine called wt, which initially ran only on Linux. We heavily modified it to understand gprot, and also ported it to Win32. Our extended version of wt is called ehwt.
One of the driving forces behind our design was to preserve the text-based experience for text-only players, while allowing 3D players to experience the same world graphically, with no advantage to either. Thus, the fact that a particular player is playing graphically is in theory completely transparent to text-only players, and vice versa.
Another goal was to respect the LambdaMOO 'philosophy' that players should be able to easily build things. We decided to use a world description format that could be easily generated from a small subset of VRML, allowing players to build up worlds by creating them using standard VRML editors, then translate them into our world description format. To make it easy to build worlds, we've written several world editing tools in Java. 'ehed' is a 2-D world layout tool that accepts VRML or eh world format as input, and updates the corresponding objects on the eh world server. 'objed' makes it easy to edit and update the 3-D representations of objects on the world server. 'vrml2eh' is a simple command-line utility that translates from VRML to eh world formats.
All source code for the ehMOO/miniMOO servers, ehwt client and editing tools is publicly available under the GPL.
Some possible future development goals include, in no particular order:
Please contact Tom Zanussi or Steve Albrecht for more information, or visit our SourceForge project at:
The next quickest would be to build an ehwt/ehwtwin client on either a Linux or Windows machine and run a miniMOO server on the same (or different) Windows/Linux machine:
If you want to run a full-fledged ehMOO server on a Linux machine, and use the ehwt/ehwtwin client to connect from another (or the same) Windows/Linux machine. This is the configuration you'd use if you planned on running a dedicated, persistent, fully LambdaMOO-compatible ehMOO server:
Once you've got the graphical client and the MOO server set up and have successfully made a graphical connection, you can go on to edit the world structure and in-MOO graphical objects:
The following advanced topics will help you create your own graphical MOO core from scratch, or add graphical capabilities to an existing core, or build the world/object editing tools. Note that you don't normally need to do any of these to get a graphical MOO running or use the world/object editing tools.
Here's the complete list of topics:
Many thanks to for hosting the ehMOO project.