Implementation status
Moongate is under active development: the classic game loop is playable, and much of it is recent and not yet tried with a real client. This page says what the server does today and what it does not. It describes the current source tree; the changelog records what each release added, and the feature checklist goes system by system through what UO emulators usually offer. The roadmap gives the order in which the missing systems are built.
At a glance
Section titled “At a glance”| Area | State | In short |
|---|---|---|
| Login, realms and accounts | ✅ Works | Login server, game realms, handoff between them |
| Characters | ✅ Works | Create, delete and restore, enter the world, walk and run |
| Other players | ✅ Works | See each other, talk |
| Items | 🟡 Partial | Backpack, paperdoll, ground, tooltips; containers on the ground open, and items go in and out of them |
| NPCs | 🟡 Partial | Spawn regions, Lua scripts, wandering, walking a path, monsters that chase, flee, fight and cast, guards, vendors, trainers, healers, the six champion spawns; they do not block movement |
| World | 🟡 Partial | Decoration, doors and keys, teleporters and public moongates (also across maps), day and night, weather, seasons, dungeon treasure chests that respawn and town containers that fill up; no houses |
| Combat, death, skills | 🟡 Partial | Melee, archery and the shield’s parry, death and corpses, skill use and gain, every classic trade, mounts, taming, aggressor lists; no bounties |
| Magic | 🟡 Partial | All 64 Magery spells, sixteen of the seventeen of Necromancy, four of Chivalry, potions; no runebooks, no wands, no buff bar |
| Crafting | ✅ Works | Fishing, mining, lumberjacking and the nine crafts, with repair |
| Lua scripting | ✅ Works | NPC and item scripts, sandboxed |
| Persistence | ✅ Works | PostgreSQL, world saves, migrations, rotating SQL backups |
| Administration | 🟡 Partial | Console and in-game commands, gRPC API; no web panel |
What a player can do
Section titled “What a player can do”- Log in, pick a realm, create a character (with its starting items) and enter the world.
- Walk and run, with the server checking the terrain, the statics, the items in the way (a closed door, a crate, a wall) and the speed.
- See the other players within 18 tiles, and talk to them.
- Open the backpack, move items in it, split and merge stacks, drop items on the ground and pick them up; items left on the ground decay.
- Open the paperdoll, dress and undress (two-handed weapons included).
- Read tooltips and names of what is in view.
- Read personalized scrolls and native books from text templates: their text stays fixed when traded. Write titles, authors and pages in writable books carried in the backpack or an open bank box. Starting items can deliver them transactionally; the shipped common set includes a welcome letter and a blank writable book.
- Open doors, and locked doors when carrying their key; light and douse lights.
- See day and night pass, dark dungeons, and the weather, the season and the music of each region (rain, snow, storms).
- Step on a teleporter, or say the word of one that answers a word, and arrive elsewhere, also on another map; step into a moongate.
- Read the game time and the moon phases where they stand:
.time. - Meet NPCs that wander around their home, greet and answer, and, when their script says so, walk to a place or follow someone around what stands in the way.
- Open the bank box at a banker by saying bank, in any client language; ask the balance, withdraw and deposit gold by speech, have a bank check written and cash it with a double click, or drop gold and checks on the banker to deposit them. The box holds a limited number of items: Bank.
- Buy from the vendors and sell to them: pick Buy or Sell in their context menu or say vendor buy or vendor sell, choose in the window and pay with the gold of the backpack, or of the bank from 2000: Vendors.
- Learn skills from the vendors and healers: pick Train in their menu or say train, then drop the gold they quote on them: Trainers.
- Fight with melee weapons and bows, block with a shield, die and leave a corpse, become a ghost and be brought back: Combat, Death and resurrection.
- Use skills, which rise with use, and learn them from trainers: Skills. Every classic trade has its script, from hiding and stealing to the bard skills and tracking; join the NPC guilds of the guildmasters.
- Cast all 64 Magery spells from a spellbook or a scroll, sixteen of the seventeen of Necromancy and the first four of Chivalry: Magery. Drink potions: Potions.
- Tame animals, have them follow and obey, leave them in a stable, and ride mounts, ethereal statuettes included: Animal taming, Mounts. Rename a pet, share it with up to five friends, hire a hireling for gold, and have your followers arrive with you through a moongate or a teleporter.
- Trade with another player in a window with a box each: Secure trade.
- Fish, mine and cut wood: Fishing, Mining, Lumberjacking. Craft with a tool, and repair: Carpentry, Blacksmithing, Tailoring, Tinkering, Fletching, Cooking, Cartography, Alchemy, Inscription.
- Found a player guild on a guildstone, with fealty, war and alliance: Guilds.
- Ask for help from the help menu, and see the Halloween and Christmas events: Help, Holidays.
- Get hit points, mana and stamina back with time, get hungry and thirsty, eat and drink; tire by running or by carrying too much.
- Open the treasure chests of the dungeons and the shop crates that fill up; read a clock; switch war mode.
- Dye clothes: dyes give a dye tub the hue picked in the client’s hue picker, and the tub gives it to the clothing.
What a game master can do
Section titled “What a game master can do”- Spawn and remove single NPCs:
.spawn,.remove; kill one, which leaves its corpse with what it carried:.kill, see Death and resurrection. - See the spawn regions where they stand:
.spawns; get a message when regions spawn. - Go to any spot of any map, or to one of the 558 named places, by name or from a gump that
lists them by map and category:
.go; walk through doors. - Lock and unlock doors and make their keys:
.lock,.unlock,.key. - Force the light, the weather or the season, try a music track:
.globallight,.weather,.season,.music. - Try any gump on themselves:
.gump. - Send a player or an NPC to a jail cell for some days, or release it, from a gump that lists the
cells:
.jail. The sentence ends by itself, with a fine and a release note..jail <name>jails a player who is offline: the cell is kept and the days start at its login; see Jail. - Read, post, reply and remove on the bulletin boards of the towns, each with its own messages; threads expire and a full board lets its oldest thread go: Bulletin boards.
- Set fame and karma, inspect what a target cursor picks:
.fame,.karma,.where. - Create personalized scrolls and books in your backpack:
.book. - Make gold and bank checks out of nothing:
.add_gold,.create_check. - Set a skill of a target, fill a spellbook and a backpack with reagents, mark a rune:
.skill,.add_spell,.add_reagents,.mark_rune. - Look item and mobile templates up and give, place or spawn them from a gump:
.items,.npcs; the sidebar of staff tools:.gmtools. - Restore a character waiting to be deleted:
.character.
An administrator also places the decoration, fills the spawn regions again (.initial_spawn),
saves, takes a SQL backup (.sql_backup), broadcasts, shuts down and manages accounts.
See all of them in Commands.
Not built yet
Section titled “Not built yet”- Bounties; fame and karma shares; the town guards do not punish players.
- A built-in AI: NPCs only run their Lua script (
on_think,on_speech,on_spawn,on_mobile_in_range), which can walk them along a path withnpc.walk_to; chasing, fleeing, fighting and casting come from the shippedcreature.luaandmonster.lua, not from the engine. NPCs do not block movement. - Runebooks and wands (Recall, Mark and Gate Travel work with runes, and so do the public moongates); the buff bar.
- The Enhanced Client’s pins for the party, the chat window and the character profile; quests, treasure maps, player vendors.
- The modern ruleset: item properties, resistances, special moves.
- Houses and boats (placement, and multis in movement and line of sight).
- Dressing other characters and strength requirements. Weight limits of containers are enforced.
- Region rules for housing. Regions drive the weather, the dungeon light, the music, the season and the guards’ protection.
- Spawner items (the spawn regions do the respawning).
- Per-player language, a restore command for the SQL backups, a web administration panel.
- Old Kingdom Reborn AES/E3 encryption. The Enhanced Client logs in, creates a character, enters the world and walks; the rest is partial: see Enhanced Client.
By area
Section titled “By area”Network and login
Section titled “Network and login”- Framed TCP with per-connection pipelines, session registries and graceful shutdown.
- POL-compatible client encryption with
Disabled,OptionalandRequiredpolicies (configuration). moderuns separate login and game servers or one standalone process. Game realms advertise themselves through Redis leases; the login filters them by account level and hands the player over with a one-use ticket.- The packets the server handles and sends are listed in the packet reference.
- Movement and sight: walkability and landing height from the terrain and the statics (as ModernUO), line of sight (as POL and ModernUO). Ground items block movement (a closed door, a crate); mobiles and multis are not part of these checks yet, and line of sight ignores items. See World queries.
- Map sectors: players, NPCs and ground items are seen within the view range; NPCs away from every player sleep.
- Light: a game clock with day and night by map and longitude, and the phases of the two moons; dark dungeons and dim jails.
- Regions, weather, music and seasons: the region of every player is followed; each region has UOX3’s weather, rolled every game hour (dry indoors), its music track and, if set, its season; the maps’ seasons can rotate with the game days.
- Decoration: ModernUO’s world decoration (and ServUO’s New Haven) placed by
.decorate: doors (those of the towns read from the map’s door frames), locks and keys, shop signs, lights, and teleporters, both the ones a player steps on and the ones that answer a word; the town lamp posts light up at night. - Effects: graphic effects at a spot, on a mobile or a ground item, flying from one to another,
and lightning, from scripts with the
effectmodule; particles for the Enhanced Client. - NPC spawns: spawn regions on every map, from UOX3’s data and ModernUO’s for New Haven, Malas, Tokuno and TerMur. Each region fills to its maximum at its first spawn after the start, then respawns NPCs gradually, on land and on water. See NPC spawns.
Scripting
Section titled “Scripting”- Sandboxed Lua 5.2 with an instruction budget,
wait, timers, events, hot reload and editor definitions. See Writing Lua scripts. - Modules:
engine,log,timer,events, and in the Ultima plugindice,localization,npc,item,world,mobile,target,prompt,gump,bank,effect,moongates,locations,jail,board,book,commands,arrow,bleed,carve,champions,cliloc,combat,craft,guild,harvest,help,hue_picker,map,mount,npcguild,pet,schedule,skill,spell,stable,trainerandvendor: 42 modules in all. Every function they give scripts is listed in the Lua API reference, generated from the server’s code. - Gumps: XML layouts checked by
gump.xsd, a Lua script per gump for the answers, slots and whole gumps built in Lua, and gumps chained withbindandopen; see Gumps and Your first gump. - Mobile and item scripts are bound from their templates by
script_id. The root ships 237 Lua files inscripts/: 56 item scripts (doors, lights, teleporters and moongates, clocks, books and scrolls, bulletin boards, food and drink, dyes, tools such as axe, pickaxe and fishing pole, ore and forge, ethereal mounts, treasure chests, training dummies, the campfire and its kindling, the guildstone and its deed, the shepherd’s crook), 13 mobile scripts (wander.lua,monster.lua,guard.lua,guard_outsider.lua,banker.lua,shopkeeper.lua,healer.lua,stablemaster.lua,revenant.lua, animals and the cats Orione and Vega), 22 skill scripts, 84 spell scripts (the 64 of Magery, 16 of Necromancy, 4 of Chivalry), 21 gump scripts, 39 shared helpers incommon/, the Halloween and Christmas events.definitions.luais generated at startup and not shipped.potion.luadrinks heal, refresh, strength, agility, night sight, poison and cure potions. - Hooks scripts can implement include
on_use,on_speech,on_think,on_spawn,on_death,on_mobile_killed,on_mobile_in_range,on_drop,on_equip,on_login,on_timer, and for a fighton_attack,on_hit,on_miss,on_damage,on_heal,can_dieandon_resurrect; the whole list is in Script hooks. - Not yet: timers on mobiles, and a hook on the skill check (
check_skill).
Data and templates
Section titled “Data and templates”- Shard data in
data/(maps, starting cities, skills, professions, races, names, containers, bodies, regions, weather, messages, spells, crafts, harvest areas, champion spawns, the schedule), validated at startup. See Data files. - Templates in
templates/: items, loot, mobiles, NPC lists, shops, carve tables, spawn regions and decoration, withbase_idinheritance, and the XML gumps oftemplates/gumps. See Loading TOML templates and Gumps. - Plain document sources in
templates/books, with named variables resolved and saved on individual scrolls and books at creation. Letter attachments are frozen per letter and delivered once to its backpack bearer, with deferred weight and atomic capacity checks. The converter ships 62 lore books in eight languages from ModernUO. Native books have covers and turnable pages; writable books let their carrier edit the title, author and pages, with changes saved on the item. See Readable text templates. - Client files read from
ultima.ultima_path: tile data, maps (MUL or UOP) and multis. - Messages in 8 languages, ported from UOX3; a language can be split into several toml files. See Localization.
Persistence
Section titled “Persistence”- Two PostgreSQL databases (accounts and world) with transactions and versioned SQL migrations,
applied by
mgctl migrate, or at startup whenpersistence.auto_apply_migrationsis on. - Characters, their items, ground items and NPCs are kept in memory and written by the periodic world save; characters are also saved when they leave.
- Not yet: a restore command; restoring a SQL backup is a manual
psqlstep.
Administration and tools
Section titled “Administration and tools”- Console and in-game commands, translated in every shipped language.
- A logged exception is one line on the console and a Markdown report under
logs/errors, ready for an issue; see When something fails. - Optional gRPC administration API with TLS: accounts and their bans, characters (rename, fame, karma, teleport, resurrect), online players and kicks, item and mobile templates, the jail, the help queue, IP bans, logs, metrics, the schedule, broadcast, save and SQL backup. No web panel yet.
- Plugins under
plugins/register services, commands, Lua modules, metrics, entities, SQL and their own config section. See Writing a plugin. - Tools:
mgctlprepares the server root, applies the database migrations; the Pythonmoongate-convertconverts UOX3 and ModernUO content. A Docker example runs one login and two game servers, and a Helm chart does the same on Kubernetes.
Settings with no effect yet
Section titled “Settings with no effect yet”The --log-level and --log-packets command-line options are parsed and validated but nothing
uses them yet; see the
configuration reference.
Made with ❤️ by Tom
