Skip to content

MegaMOO 0.8.0-beta

Pre-release
Pre-release

Choose a tag to compare

@MalifaxLax MalifaxLax released this 04 Aug 18:35
· 156 commits to main since this release

Eleven 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(), the E_* error values as
    first-class values, and the LambdaMOO string utilities on su
  • call_verb takes 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.