← MegaMOO Guide

Object Numbers & Zones

Keeping a zone's numbers together instead of scattered.

How numbers get assigned

Every object has a permanent number. When you make something, MegaMOO gives it the lowest free number it can find. That is fine for a lamp or a chair, but it means that a zone built over several sessions ends up scattered — the tavern is #204, its cellar is #251, and the room you added last week is #198, because other things were being made in between.

Why you would reserve a block

Reserving a block of numbers keeps a zone together. If the harbour district is #500#599, then a number in the 500s tells you at a glance which part of the world you are looking at, and a builder working on the forest at #600 cannot accidentally take one of your numbers.

This is worth doing for anything you think of as a unit — a district, a dungeon, a questline — and not worth doing for scenery.

Some numbers are already spoken for

The starter world reserves several low blocks for future core objects. Run @fon/list to see them before choosing where your zone goes; picking a high, round number is the simplest way to stay clear.

Reserving with @foff and @fon

Two commands, and the naming is the only confusing part. Think of a number as free when the engine is allowed to hand it out automatically:

CommandDoes
@fon/set 500 to 599Sets the block you are working with. Do this first.
@foffFree off — reserves every unused number in the block. The engine stops handing them out.
@fonFree on — releases the block's unused numbers back for normal use.
@fon/listShows every reserved unused number, grouped into ranges.
@fon/clearForgets the block you set. Does not release anything.

Both need gm3. Reserving only affects numbers that are still unused — objects that already exist are untouched.

Owners with gm5 can also reserve a block directly, without setting it as their working range:

> @reserve #500 to #599 > @reserve/free #500 to #599 > @reserve/list

A worked example: building a zone

You are about to build a harbour district and want it to live in the 500s.

1. Claim the block.

> @fon/set 500 to 520 Set free_obj range to #500-#520 (21 objects). > @foff Reserved 21 unused object numbers in #500-#520.

From now on nothing lands there by accident. Anything you or another builder creates gets a number from outside the block:

> @make $item = probe Created #207:a probe, added to inventory. # skipped the 500s

2. Build, then move each piece into the block. New objects still arrive with whatever number was free, so put them where you want them:

> @renumber #207 to #500 Renumbered #207 to #500:a probe.

Work through the zone this way and the harbour ends up at #500, #501, #502 and so on, in the order you built it. @renumber needs gm5.

3. Give back what you did not use. When the zone is finished, release the leftovers so they are not held out of circulation forever:

> @fon Unreserved 21 unused object numbers in #500-#520.

The numbers you actually used are objects now, so they are unaffected. Only the empty ones go back into the pool.

Check your work

@fon/list at any point shows what is currently held, grouped into ranges — the quickest way to see whether your block is reserved and how much of it you have left.