Table of Contents

Creation Law — Zones

You know classic Diku zedit / zone files. Neo has no zedit. Zones are workspace prototypes edited with @zone …, saved with @save zone, then exercised live with the immortal zone reset / zone clear commands.

Hub: Creation Law. Rooms/mobs/items you place must already exist (Rooms, Mobiles, Objects). Zones have no SpecProc table of their own — see Script Law — Zones.

What a zone owns

From server docs (ZONES.md) and the workspace editor: a zone owns lifespan (seconds between automatic resets), a reset command list (Diku-style loads: mobiles, items, doors, equip, …), weather affiliation, and related flags/attrs. Setting lifespan schedules a repeating ZoneCmdEvent; when it fires, zone.reset() runs the command list (unless global/zone noreset debug flags are on).

Why you care as a new creator: building rooms and mobiles is not enough — without zone reset lines (and a reset), the world stays empty.

Step-by-step: first zone

1. Open a zone draft (VID is the zone top you are allowed to use in-range):

> @new zone 1299
Okay.
>

If a zone draft is already open, @examine zone then @save or @clear.

2. Name and text (writers — why: immortals and indexes need a human label):

> @zone name
The Quiet Alcove
> @zone author
> @zone description
>

3. Lifespan (why: how often the area repops). Value is seconds; the event period is that many milliseconds under the hood.

> @zone lifespan 900
Okay.
>

4. Optional attrs/flags:

> @zone attrs zonetype …
> @zone flags zoneflags …
>

5. Reset lines — place content (rooms 1200 and mobile/item prototypes must already be saved):

> @zone npc 1210 1200
Okay.
> @zone item 3100 1200
Okay.
> @zone list
> @examine zone
> @save zone
Okay.
>

6. Make it live:

> zone reset
Okay.
>

Omit the VID to reset the zone of your current room, or pass a top: zone reset 1299. @save zone alone does not repop the rooms — you must zone reset (or wait for lifespan) to see mobiles/items appear. That is the #1 zone gotcha.

''@zone'' subcommands

Include: attrs, author, clear, description, delete, door, equip, flags, follow, give, item, levels, list, lifespan, map, max, name, npc, place, put, rndmob, rndobj, ride.

Teaching notes on the ones you will use first:

Equip / give ordering walkthrough

> @load zone 4599
Okay.
> @zone npc 4503 4500
Okay.
> @zone equip 4502 wield
Okay.
> @zone give 3101
Okay.
> @zone list
> @examine zone
> @save zone
Okay.
> zone reset
Okay.
>

If the mob loads without the weapon: check list order, confirm item 4502 exists and is wieldable (Items), then reset again.

Live zone control (not the workspace editor)

> zone reset
Okay.
> zone clear 1299
Okay.
>

zone [clear|reset] (<zone-top>) — immortal utilities. reset runs the stored command list; clear clears the live zone contents (per immortal handler). Do not confuse zone clear with @zone clear inside the workspace draft.

''@rezone'' and ''approve''

@rezone <old-top> <new-top> remaps a zone top within your range (implementor/creator tooling) when you need to slide an area to a new top VID.

approve zone <vid> prompts an immortal confirmation to mark a zone approved — use when your build is ready for wider play.

> approve zone 1299
>

Persistence reminder

Zone definitions and reset lists live in the world H2 database. Workspace drafts are memory-only until @save zone. Automatic world saves run on a long real-time cadence (SaveEvent); shutdown also saves. There is no classic “asave” — @save zone is the commit.

Zones and scripting

A zone does not carry a SpecProc name. Scripted behavior lives on the rooms, items, and mobiles the zone places. Create those procs, attach them on the prototypes, then let zone resets load the prototypes — Script zones, Script rooms, Script mobiles, Script objects.

Common mistakes