MegaMOO 0.8.0-beta
Pre-releaseEleven staff commands, a LambdaMOO database importer, and a guide chapter for
people arriving from a MOO.
Bring an old world across
@import reads a classic LambdaMOO database — format versions 1 through 4, so
LambdaMOO up to 1.8 — and creates objects from it, carrying the hierarchy and
properties and remapping object references as it goes. @import/dry reports
what it would do without creating anything; do that first.
Verb code comes across too, but inert. It is MOO source and this engine runs
Python, so nothing imported can execute. Rather than discard it, each verb keeps
its original source verbatim beneath a docstring recording where it came from —
source object, owner, permissions, argument spec — and a substitution table for
porting it. The verb is stored hidden, without the execute permission, at gm3.
Your old code ends up sitting on the right objects under the right names,
waiting to be rewritten, instead of in a tarball you never open.
@grep UNPORTED MOO SOURCE
lists what is left to do.
Tested against JHCore-DEV-2: 237 objects and 2729 verb programs parse in 0.04s
with no warnings and import with no failures.
New commands
| Command | Level | Does |
|---|---|---|
@find |
gm2 | Find objects anywhere by name; in <room>, isa <parent>, /exact, /count |
@audit |
gm2 | What a player owns, grouped by location; /rooms, /nowhere, /count |
@kids |
gm2 | What inherits from an object; /all draws the descendant tree |
@quota |
gm2 | How much of the database someone has built |
@copy |
gm3 | Duplicate an object's own properties |
@grep |
gm3 | Search verb code across the database |
@ps / @kill |
gm3 | List running tasks, and stop one |
@dump / @load |
gm3 | Move a single object between databases as text |
@import |
gm3 | Import a LambdaMOO database |
Fixes
getattr defaults never worked on MOO objects. A missing property returns a
sentinel rather than raising, so getattr(exit, 'lockfail', 'You cannot pass.')
returned the sentinel — which prints as an empty string. A locked exit with no
custom message printed a blank line. The same held for climb and jump failure
text, open/close messages, stand-up messages, sit prepositions, seat counts and
effect chances. 97 call sites corrected.
Room broadcasts bypassed per-object msg overrides. msg_room called
notify() on each occupant directly rather than going through the overridable
msg verb, so a deafened character still heard everything.
@unset crashed before the first @set of a session instead of reporting
"Nothing to undo."
API eval ran as an exit. It defaulted to #7, described in a comment as the
admin player; #7 is the chargen arch. It now finds a wizard.
A stale duplicate verb file would have silently reverted a fix on the next
full reload.
Also
- MOO compatibility:
pass_(*args),tell(), theE_*error values as
first-class values, and the LambdaMOO string utilities onsu call_verbtakes positional arguments- A new guide chapter, Coming from LambdaMOO
- The Command Reference now lists all 74 commands; it was missing eleven
- 29 new tests for the importer
Requires Python 3.10+. No pip install needed for the core server.
unzip megamoo-0.8.0-beta.zip
cd megamoo
python3 megamoo.py mm.db # default port 7777
telnet localhost 7777
mm.db is the starter world: the base object hierarchy, character generation,
and the full building suite. Point the server at any other filename to
initialize a fresh schema instead.