Skip to content

Feature checklist

The systems a complete Ultima Online server emulator usually offers, and where Moongate stands on each. It complements the Implementation status, which describes what works today in more detail. The Roadmap says in which order the missing systems are built.

✅ done · 🟡 partly done · ❌ not built yet

278 systems: ✅ 110 done, 🟡 90 partly done, ❌ 78 not built yet.

Coverage: 40% of the systems done, 56% counting a partly done system as half.

The foundations (network, login, persistence, scripting, world data) are in place, and so is the classic game loop (combat, magic, skills, crafting, vendors); housing, playing together (party, chat) and the modern ruleset are what is left.

System Moongate Notes
Accounts ✅ Create, list and verify from the console and the administration API; access levels
Login and server list ✅ Separate login server and game realms, or one standalone process
Character select, create and delete ✅ Deletion is delayed and can be restored by staff
Message of the day ✅ Native Updates scroll or private journal, configurable with ultima.show_motd_gump; existing template variables and Unicode fallback
Client versions and encryption ✅ POL-compatible encryption policies; the Enhanced Client logs in, creates a character and enters the world, the rest is partial
UDP ping server ✅ Echoes pings on UDP 12000, as ModernUO does
Keepalive and idle clients ✅
IP bans and firewall 🟡 Banned ranges refused by every listener - a single address or a CIDR, IPv4 or IPv6, with reason and expiry, through the administration API; no connection limits or flood protection
Account bans and kicks ❌
Assistant (Razor) feature negotiation ❌
Shard status for public shard lists ❌
Safe logout in inns and houses ❌ A character leaves the world when its session closes
Hashed passwords ✅
Login attempt limits and connection flood protection ❌
Proxy protocol (real client address behind a proxy) ❌
Packet filtering by login phase 🟡 Unknown packets are refused; no per-phase filter
Packet hooks: override or extend any packet 🟡 Plugins add incoming packets in C#; not from scripts
Suspicious acts logging (forged replies, out-of-range drops) ❌ Out-of-range actions are refused, not logged as suspicious
Network statistics per client ❌
One or many characters in the world per account 🟡 One per account, not configurable
Login and logout scripts 🟡 Script events when a character enters or leaves the world
Obscene word filter 🟡 Banned names at character creation; nothing on speech
System Moongate Notes
Creation: races, professions, starting items, starting cities ✅ Personalized starting letters saved in the same creation transaction
Stats ✅ Rolled, stored and set by scripts; a successful skill raises them as ModernUO’s classic rule, to 100 each and 225 in all, with the locks of the status window
Skills 🟡 Stored, shown in the skill window and set by scripts; used, checked and gained, with the locks of the skill window (up, down, locked). The stat locks of the status window work too
Hit points, mana and stamina regeneration ✅ A point at a time, ModernUO’s classic rates; mana by intelligence and Meditation, halved in the Meditation trance; rates per mobile from scripts
Titles 🟡 Fame and karma titles in the paperdoll; no skill titles
Fame and karma 🟡 Set by staff (.fame, .karma) and through the administration API; karma falls with each murder count; raising a ghost (an ankh, a healer or a bandage) takes a tenth of its fame; nothing else gains or loses them
Notoriety (innocent, criminal, murderer) 🟡 Name colour from the mobile template, grey while the mobile is a criminal, red from five reported kills; an innocent is grey to the player it fought, or that fought it, while the fight lives
Crimes, criminal timer and murder counts 🟡 The criminal flag with its timer, saved with the mobile; attacking an innocent or looting the corpse of one makes a criminal, unless the looter fought the owner; so does taking from the corpse of a creature within its loot-right time without having earned the right. A victim reports its killers in a gump: kills and short-term murders, five make a red murderer, forgotten with time (8 and 40 hours). No theft or other crimes yet
Hunger and thirst ✅ Both from 0 to 20 and dropping with time: a starving player gets no hit points back, a parched one no stamina; food is eaten, drinks are drunk a sip at a time
Poison 🟡 Four levels and a lethal one, ticks, green bar, saved with the character; poison and cure potions; Poisoning rides a poison onto blades and food, and a blow passes it on; no poisoning monsters yet
Hiding and stealth 🟡 Hiding hides a player until its first step, Stealth lets it take some steps unseen; swinging or casting shows it, speaking or being hit does not yet
Death, corpses, ghosts and resurrection 🟡 An NPC or a player dies by a fight, .kill or mobile.kill: corpse with what it carried, death animation and sound, decay after 7 minutes. A player stays as a ghost (hidden from the living unless in war mode, heard as oOo, no fight, skill or lifting) and is raised at an ankh or by a healer (for a tenth of its fame), by .resurrect or mobile.resurrect. No bones
Young player protection ❌
Murder reports and bounty boards 🟡 The report gump a victim gets after its death works, with the counts it adds; no bounty and no boards
Virtues ❌
Status bar ✅ Name, stats, hit points, mana, stamina, gold, weight
Extended status (resistances, luck, caps) 🟡 With resistances on, the status bar shows the real resistances, armor included, and a client from 7.0.30 gets the version 6 bar (packet 0x11) at login and after: the five maximum resistances (70 for a player), the defense chance maximum (45) and the luck (the prop luck); the bar is sent again when a piece is worn, taken off or dropped, and when the player dies or rises. With the switch off the bar is the classic one. The bonuses (defense chance, hit chance, swing speed, damage, lower reagent and mana cost, spell damage, cast speed and recovery) show 0: nothing gives them yet. The stat locks are built, see Stats
Staff privileges (move anything, see hidden, invulnerable) 🟡 Hidden ground items and hidden mobiles are shown only to staff, and .go takes a game master anywhere; no move anything or invulnerability
Gargoyle flying ❌
Movement cost and stamina use by weight ✅ Running costs a point every 16 steps; overloaded, every step costs 5 and more, and with no stamina left the step is refused. A rider pays no stamina to run
Polymorph and incognito ✅ The Magery spells: Polymorph takes one of eighteen bodies picked from a list, Incognito a random hue and name; both are kept with the mobile and taken up again at login, and end with their time or a death
Experience and levels (optional) ❌
Factions ❌
Slayer weapons ❌
Renaming pets and characters ✅ Characters renamed through the administration API with the rules of creation; a pet renamed by its owner from its menu, with the rules of a name
Face selection ❌
System Moongate Notes
War mode, melee and swing timing 🟡 A player fights with its fists or the weapon it holds: the swing timer, the hit by skill, the damage with tactics, strength, anatomy and the armor of the target, the sounds and animations
Archery ✅ NPCs and players that hold a bow or a crossbow shoot from its range, the arrow flying to the target; a player spends an arrow or a bolt at each shot, must stand still a second, and finds 40% of the ammunition on the ground
Weapons and armour: damage, armour, durability, resistances 🟡 The weapon a player holds and the armor it wears set the swing, the hit, the damage and what a blow takes off; a player’s weapon and armor wear out; the shield’s parry is the next row; resistances are a switch of their own
Parrying 🟡 The shield blocks first, as the classic pre-AOS rule: a player that wears one rolls its Parry behind a chance of (Parry − the shield’s rating × 2) / 100, never under 1%, and a passed roll takes the rating’s half off a blow and its whole off an arrow, with the block sparkle 0x37B9; the shield templates have their classic ratings (buckler 7, heater 23…). No weapon parry (that is AOS), and an NPC does not parry
Weapon special moves 🟡 Behind special_moves (off by default): the client’s icons select the move of the held weapon (0xD7), 70 or 90 points of the weapon skill and the mana are asked, the mana is spent when the blow lands (double within 3 seconds of another move), and the data table of the thirteen moves is read from weapon_abilities.toml. Nine of the thirteen moves are done: Armor Ignore, Bleed Attack, Concussion Blow, Crushing Blow, Disarm, Dismount, Double Strike, Mortal Strike and Paralyzing Blow; see Weapon special moves
NPC combat AI 🟡 monster.lua on every creature that is evil or chaotic in UOX3 (about 200 templates): they notice a player or a townsman, walk to it, fight it and stand guard when they lose it, the casters from a distance (see monster spells), and the town guards go for them. Animals stroll and fight back when hit, scared ones run. Hurt, they run (under 20% of their hit points, never the undead or the elementals). Archers shoot from their bow’s range
Guards in guarded regions 🟡 A player that says “guards” brings a guard beside each criminal near it: it appears, says its line and leaves. The guards standing in the towns notice a criminal by themselves and go to it (guard.lua). A criminal NPC is killed with one blow and leaves its corpse; a criminal player is only stood on: the guards do not punish players yet. The guards called in Ilshenar and Malas are archers: they shoot from the range of their bow. The guards of the wilds (guard_outsider, guard_outsider_archer) are for the places outside the towns: they fight the monsters for real, hurt and killable
Monster spells ✅ A creature whose template has spell_circles (99 templates from UOX3’s SPATTACK, 113 creatures with those based on them: 90 with the monster script cast, liches, daemons, mages, dragons; mounts with no mana, mage vendors and creatures with no script do not) casts the single-target spells of Magery at what it fights from up to 12 tiles away, with its own mana and Magery: heals and cures itself first, then poison, curses, paralysis, mana drain and damage by the classic mage’s choice, with a pause between casts. No summons, fields or travel spells
Monster special abilities 🟡 The bleed, as the classic Bleed Attack: a creature whose template sets bleed_chance (the dire wolf one blow in five, the grey wolf one in ten) makes the victim of a landed blow bleed — five ticks of two seconds, the damage slowing down, blood under it each tick — and the bandage binds it. No breath, no rock throwing, no webs
Elemental damage and resistances 🟡 Behind resistances (off by default): the five resistances of a mobile (an NPC’s from its template, a player’s from the armor it wears, armor_resistances.toml) lessen the damage of their element, kept to 70 for a player and 100 for an NPC; a melee blow is physical, a poison tick poison, and fourteen spells declare their element. No resistance buffs or curses, and the status window does not show them yet
Aggressor lists and attack timeouts ✅ Two-minute lists of who acted against whom, for players and NPCs: the crime rule, the murder report, the grey names of a fight and the loot rights on a player’s corpse read them; the damage dealt decides who loots a creature’s corpse for two minutes
Blood on a hit ✅ A hit that does damage leaves blood on the ground that goes after a few seconds; a creature’s blood_hue colours it or, at -1, stops it (ultima.combat.blood_*)
Damage numbers over heads ✅ The damage of a hit shows over the one hit (ultima.combat.display_damage_numbers)
System Moongate Notes
Spell casting: mana, reagents, fizzle, resist 🟡 Magery: the words of power, a delay of the circle in which the caster stands still, the target cursor, reagents and mana, the Magery window of a book or a scroll, the fizzle that loses the reagents, the recovery, and damage that ruins a cast above the first circle; from the spell icon, a macro or a scroll. Resisting Spells weakens a harmful spell. The travel rules of the regions are read by Teleport, Recall, Mark and Gate Travel. Magic Reflection turns back the first harmful spell aimed at its wearer. Creatures cast them too, see Monster spells
The magery spells ✅ All 64 spells, each a script in scripts/spells: the eight circles, Reactive Armor, and — with the lock and the trap state of the chests — Magic Trap, Magic Untrap, Magic Lock and Unlock too; the 64 are in spells.toml. Fields of fire, stone, poison, paralysis and energy, Teleport, Telekinesis, Recall, Mark and Gate Travel with runes (.mark_rune; .add_spell and .add_reagents fill a book and a backpack), the summoned creatures that fight for the caster, Dispel, Incognito, Polymorph, Invisibility and Resurrection are in. Scribes write the scrolls with Inscription; the four scrolls of Magic Lock, Unlock, Magic Trap and Magic Untrap can be written and cast
Necromancy 🟡 The school without circles, as ModernUO’s: every spell carries its own mana and least skill in spells.toml, is cast by Necromancy and scales by Spirit Speaking. Sixteen of the seventeen are in, each a script in scripts/spells: Pain Spike (a direct wound by Spirit Speaking, part of it coming back ten seconds later), Poison Strike (a burst around the target, half a tile away and a third two, sparing the caster’s party), Curse Weapon (the held weapon drinks half of its wounds back for a while), Blood Oath (the caster’s damage against the one it is bound to is a fifth worse, and the wound comes back to the caster), Mind Rot (the cursed one’s spells cost a quarter more mana for a while), Strangle (rounds of fumes that bite the less stamina is left), the four forms of common/necromancy.lua — Horrific Beast and Lich Form (a body a week, the lich paying one hit every two and a half seconds for its), Vampiric Embrace (a body and a hue no poison takes) and Wraith Form (5 to 20 percent of each wound drunk back as mana), each ended by a second cast, another form or a death — and the three summons on the follower system: Animate Dead (an undead rises from a pointed corpse by the caster’s Necromancy and Spirit Speaking, decays hit by hit, three at most), Summon Familiar (the gump of five familiars, one at a time for a day) and Vengeful Spirit (a revenant that hunts one victim until it is dead or its time is up). The necromancer’s book (0x2253, ids 100–116) goes by the newer contents packet; its scrolls exist. The last three: Evil Omen (the next wound of the cursed one a quarter worse, its next poison one level higher, the first of the two spending it), Wither (a frost around the caster, five tiles of the valid indirect targets, the wicked taking more by their karma) and Exorcism, which asks GM Spirit Speaking and a caster inside a champion spawn (1072112, 1072111) and carries every dead player within 18 tiles of its altar to the nearest shrine. Corpse Skin is out for good, resist offsets only
Champion spawns ✅ The classic endgame of the shards, as ModernUO’s Canned Evil: six spawns of champions.toml — Vermin Horde in Despise (Barracoon), Unholy Terror in Deceit (Neira), Cold Blood in Destard (Rikktor), Abyss in Fire (Semidar), Arachnid in Covetous (Mephitis) and Forest Lord in the Yew forest (Lord Oaks). A spawn wakes when a player walks in, keeps its wave alive and counts the kills, a red skull on the altar ring for each of its levels and four white ones for the progress, the champion on the altar at the last; its death sleeps the spawn for half an hour, as long without a kill walks a level back. Not tried in game
Spellbooks, scrolls and wands 🟡 A spellbook that holds up to 64 spells, opens on a double click, takes the spell of a scroll dropped on it; a scroll is cast from the backpack, with no reagents and one used up on a success. No wands. Scribes write the scrolls with Inscription; the four scrolls of Magic Lock, Unlock, Magic Trap and Magic Untrap can be written and cast
Fields and summons ✅ The fields of the spells (stone, fire, poison, paralysis, energy) and the creatures they call: blade spirits, an energy vortex, a random animal, the four elementals and a daemon, each a follower of the caster that guards it and goes away with its time, its master or a Dispel. See Magery
Region magic rules (no recall, no gate) ✅ The recall_in, recall_out, gate_in, gate_out, teleport_in, teleport_out and mark flags of the regions are read by Recall, Gate Travel, Teleport and Mark
Chivalry 🟡 The first four of the ten spells, each a script in scripts/spells and in spells.toml: Cleanse By Fire (cures the target’s poison and burns the caster), Close Wounds (heals 7 to 39), Consecrate Weapon (marks the held weapon for a few seconds, which no rule reads yet: there are no resistances) and Sacred Journey (to a marked rune, as Recall). Cast by Chivalry from the paladin’s book, no reagents: tithing points are spent and the power comes from karma and the skill. Nothing gives tithing points yet (no shrine), and the other six spells (Remove Curse, Dispel Evil, Divine Fury, Enemy of One, Holy Light, Noble Sacrifice) are not built
Bushido ❌
Ninjitsu ❌
Spellweaving ❌
Mysticism ❌
Skill masteries ❌
Words of power ✅ Every spell of spells.toml carries its mantra, said over the caster’s head as the cast begins; a creature casts silently
System Moongate Notes
Using a skill and gaining it 🟡 A skill is used from the skill window (scripts/skills/<skill>.lua), checked by skill.check and gained with ModernUO’s formula; 22 are shipped in scripts/skills (Hiding, Stealth, Snooping, Stealing, Begging, Anatomy, Animal Lore, Animal Taming, Meditation, Tracking, the bard skills and others), and the gathering, crafting and camping skills are used from their own items — a tool, a pole, a piece of kindling; stats rise with skills
Gathering: mining, lumberjacking, fishing 🟡 Fishing with a pole: water within 4 tiles, 8 seconds, a fish, old footwear or nothing by the skill; the fish of a place run out by area and come back (harvest.toml). Lumberjacking with an axe in the hands: a tree within 2 tiles, one to three swings, 10 logs by the skill, the wood of a place running out the same way. Mining with a pickaxe or a shovel: the ore of nine metals from the rock of mountains and caves, smelted into ingots at a forge. Logs are sawn into boards with the axe, and a blade hacks kindling off a tree. A place is of one of seven kinds of wood, each asking for its skill, a master finds rare things with the logs, and an axe hits harder with Lumberjacking. Nine metals, iron to valorite, a vein for each area; no special catches
Crafting engine: menus, recipes, resources, quality ✅ The crafting gump, recipes in data/crafts, resources counted across the backpack and its bags, the chance and the kinds of wood, exceptional items and the maker’s mark, tools that wear out and make last, what a craft must stand near (an anvil and a forge), shared by every craft; see Carpentry and Blacksmithing. An exceptional weapon hits a fifth harder and an exceptional piece of armor gives 8 more; an exceptional item is uncommon, a marked one rare. Repair from the same gump, see Repairing and enhancing items
The crafts: blacksmithing, tailoring, carpentry, tinkering, alchemy, cooking, inscription, fletching, cartography ✅ Carpentry: a tool in the backpack opens the crafting gump, 42 recipes from UOX3 in data/crafts, made from plain boards or a kind of wood that colours the item; one chance in two at the least skill, sure at the most, half of the materials lost on a failure. Exceptional items with the maker’s mark at 100, tools that wear out, make last. Blacksmithing: 66 recipes at an anvil and a forge, every era, in iron or eight coloured metals that colour the item. Tailoring: 50 recipes of cloth and leather with a sewing kit. Tinkering: 59 recipes from ingots, in the metal picked. Bowcraft and fletching: 9 recipes, bows from boards, arrows and bolts from shafts and feathers. Cooking: 31 recipes, baking at an oven, barbecue at a fire. Cartography: eight maps drawn around the cartographer by skill. Alchemy: twenty potions from reagents and an empty bottle. Inscription: 64 scrolls, one for each spell, from its reagents and a blank scroll, the spell in a carried book and the mana of its circle
Repairing and enhancing items 🟡 A crafter mends the weapons and armor that wear out from the crafting gump (Repair item); no repair deeds, no NPC repairers, no enhancing
Taming and animal lore ✅ Animal Taming tames about 75 creatures with a try of three or four times; Animal Lore opens a two-page gump on a creature: stats, armor, damage, loyalty, skills, the food it eats and the taming it asks. Veterinary is its own row
Healing and veterinary 🟡 The clean bandage heals a player or a creature (Healing and Anatomy, Veterinary and Animal Lore) and raises a ghost; it cures a poisoned patient behind a gate of 60 points of both skills and binds a bleeding one, and no hit point comes back then; on the corpse of a bonded pet it raises the pet (Veterinary and Animal Lore at 80)
Lockpicking, remove trap 🟡 The lockpick picks a locked item (the dungeon treasure chests are made locked); the traps — an explosion or a poison of the chest’s level — arm the same chests and spring on the open, one burst and spent; remove trap disarms them, 50 points of Lockpicking and Detect Hidden asked, and the chest springs nothing on the next open. Doors lock and open with their key
Snooping and stealing 🟡 Snooping opens the backpack of another mobile on a double click; Stealing takes an item of a container or a creature’s backpack, as ModernUO’s classic mode (a player only by the thieves guild); no factions or sigils, no stealable artifacts, the stolen item does not go back to its victim
Tracking, detect hidden, forensics, spirit speak 🟡 Detect hidden and forensic evaluation work: detect hidden finds the hidden mobiles and names “[trapped]” over a trapped chest picked directly, within a tenth of its skill in tiles, and Remove Trap disarms it; no thieves’ guild. Tracking asks for animals, monsters, human NPCs or players and lists the 12 nearest within 10 tiles and 10 more for every 10 points of skill, nearest first; the one picked gets the quest arrow and a text with its distance and direction. The arrow is not tried with a real client and does not follow its quarry; no elf rule, no stalking bonus. Spirit Speak makes the living understand a ghost’s words for 15 seconds to 3 minutes, and for good at 100; no AOS heal, no reveal of hidden spirits
Bard skills: musicianship, peacemaking, provocation, discordance 🟡 The nine instruments are played with a double click (Musicianship) and wear by the bard skills (350 to 450 uses); Peacemaking calms a creature or everyone in range and Provocation sets two creatures against each other and Discordance lowers a creature’s strength, dexterity and intelligence while the bard plays, as ModernUO’s without resistances: on a creature only the strength weighs on its blows, and its skills are not lowered; not tried with a client
Lore skills: anatomy, arms lore, item ID, evaluate intelligence, taste ID 🟡 Anatomy and evaluating intelligence read a target’s stats; Arms Lore reads the condition and the worth of a weapon or piece of armor, the player’s own or lying within 2 tiles, as the client’s texts; Item Identification shows what a click shows of an item or a mobile and is trained on weapons and armor; it identifies the items flagged unidentified (nothing flags them yet); Taste Identification finds the poison of food that carries the prop poison.level — Poisoning sets it — and tells the kind of a potion
Meditation 🟡 Meditation puts a player in a meditative trance that halves the wait of its mana, until it steps, takes a blow, swings, casts or uses another skill; armor blocks the trance and a hand must be free; not tried with a client
Begging 🟡 Begging grovels a coin or two out of a human NPC — a tenth of its purse, 10 to 14 by the beggar’s fame — at the price of karma, as ModernUO’s before ML; an empty purse, the ill-reputed and the mounted are refused; not tried with a client
Camping 🟡 Camping lights a campfire on a double clicked piece of kindling — carried or within 2 tiles, tried from 0 to 100 — that burns a hundred seconds, lights the night and is a heat to cook on, and ends by itself; no bedroll, no instant logout; not tried with a client
Herding 🟡 Herding walks a wild tameable animal where the crook points — the roll rides on its taming difficulty — a step a think until it is there; a fight comes first and the walk resumes after; not tried with a client
Poisoning 🟡 Poisoning rides a poison potion onto a one-handed blade or a piece of food — the roll on the potion’s window, 20 karma for a pass — and the blade’s charges pass to whoever is struck until they are spent; a poor poisoner may poison itself; not tried with a client
Carving corpses 🟡 A knife, dagger or sword carves the corpse of a creature within 2 tiles, once (not a player’s, a pet’s or a summoned creature’s), from the carve tables of templates/carves/ that a mobile template names with carve; the on_carving hook and the corpse_carved event are in Script hooks. Six tables ship (the farm animals and the fire beetle) and the 100 of UOX3’s carve.dfn (moongate-convert uox-carves) for the other creatures; the human torso and limbs are not built
Resource regions (ore, wood, fish per area, regrowing) 🟡 Fish, wood and ore run out by area and come back (harvest.toml); the areas are kept in memory and start full after a restart
Resource processing: smelting, looms, spinning wheels, hides 🟡 Ore is smelted into ingots at a forge and logs are sawn into boards; no looms, spinning wheels or hides
Skill classes and caps (skill total, stat total) 🟡 The skill total stops at ultima.skills.total_cap (700.0) and the stat total at ultima.skills.stat_cap (225), both lowering what is locked down; no classes
Training objects: dummies, pickpocket dips, archery buttes 🟡 The training dummies swing back and teach a weapon’s skill up to 25, and the archery buttes take arrows and score; no pickpocket dips, no dart boards
System Moongate Notes
NPC templates, names, equipment and loot ✅ Dressed and with their loot at spawn
Scripted behaviour ✅ Lua mobile scripts: on_think, on_speech, on_spawn, on_mobile_in_range, on_death, on_drag_drop
Sleeping away from players ✅ NPCs think only near a player
Wandering 🟡 wander.lua keeps spawned NPCs in their home area
Speech keywords and answers 🟡 The client’s keywords reach on_speech in any language; the bankers answer bank, balance, withdraw and check, and the word deposit, which has no keyword; the vendors answer vendor buy and vendor sell
Water and amphibious creatures ✅ They spawn on water and swim
AI types (vendor, guard, healer, animal, monster, caster) ✅ Lua scripts for the banker, shopkeeper, guard, healer, stable master, animal and monster (scripts/mobiles); the casters are the monsters whose template has spell_circles, see Monster spells
Pathfinding, following and fleeing 🟡 A* path search; a script walks an NPC to a place or after someone with npc.walk_to, through the closed doors it opens and around locked ones and furniture. Hurt creatures run from a fight (20% of their hit points, 10% for animals) and scared animals from a blow; an NPC that wanders opens no door, and mobiles do not block a path. A script makes a player’s own client walk to a spot with mobile.pathfind_to (packet 0x38)
Pets and followers: commands, loyalty, bonding 🟡 The Animal Taming skill tames about 75 creatures of the data, with a limit of 5 followers shown in the status window. A pet follows its owner and obeys come, follow, stay, stop, guard, kill, attack and release, alone or with all, unless its low loyalty or the owner’s skill makes it refuse. Loyalty falls with time, food dropped on a pet restores it, and at 0 it goes wild. Food bonds a pet with its owner after a week, and only a bonded pet can be raised from its corpse with a bandage. No hunger beyond that. The followers within 3 tiles go with the owner through a moongate, a gate or a teleporter, and the bonded ones through Recall and Sacred Journey. The owner clicks the pet for its commands, renames it from its status bar and gives up to five players the orders follow, stay and stop
Mounts 🟡 Mounts: a game master gives a horse, llama or ostard with tame; its owner double clicks it to ride and double clicks self to get off, or dies, and rides twice as fast. A rider cannot mine, fish or use Stealth, and a teleporter can refuse it. The stable of the animal trainers keeps the pets of a player, and the ethereal statuettes give a mount with no creature, and a mount stone in the backpack rides its mount and gets off on the next double click. A rider swings with the mounted attack animations. No bola
Script events for NPCs (speech, range, damage) ✅ Speech, range, death (on_death, on_mobile_killed), low health and mana, and the fight and life of the NPC: on_damage and on_heal (the script may change the number), can_die, on_attack (it may cancel the swing), on_hit, on_miss, on_combat_start, on_combat_end, on_resurrect, on_tame, on_release, on_enter_region and on_leave_region; see Script hooks
Name pools ✅ Name lists by kind and gender
Needs: food, grazing, desires ❌
Special creature actions (breath, rock throwing, webs) ❌
Returning home when lost 🟡 Spawned NPCs walk back to their home area
Pet figurines (shrinking pets) ❌
Peerless bosses and paragons ❌
Camps (brigands, orcs, prisoners) ❌
System Moongate Notes
Vendors: buy, sell, restock ✅ The shop window, the goods and the sell tables of ModernUO’s shops, gold from the backpack then the bank, everything or nothing among the lines the vendor’s script allowed, the hourly restock and the resale of what players sold, paid more for a rarer item; a vendor’s script may refuse a line and hears it done (can_buy, can_sell, on_bought, on_sold); see Vendors
Banker and bank box ✅ The bank keyword in any client language; open while the player stands still; balance, withdraw and deposit by speech; a limit of items; see Bank
Stable master, veterinarian 🟡 The stable master (stablemaster.lua) keeps and returns the pets of a player, see Mounts; no veterinarian NPC (a bandage and the skill heal pets)
Skill trainers 🟡 Vendors and healers teach the skills they have at 60.0 or more, for gold dropped on them; see Skills
Healers that resurrect 🟡 A ghost that comes near a healer is offered to live again; the evil healers are not placed in the world yet
Player vendors ❌
Hirelings 🟡 The ten hirelings of ModernUO stand in Jhelom: their pay is told by speech or the context menu, gold dropped on one hires it for two followers, it takes the pay every 30 minutes and leaves when the gold is out; no hirelings in other towns
Escort quests ❌
Guildmasters ✅ The twelve guildmasters of ModernUO teach their trade, take members for their guild by speech and gold, and are placed by the ModernUO spawns; see Skills
Bulk order deeds ❌
System Moongate Notes
Item templates and creation ✅ TOML templates with inheritance
Moving, stacking, splitting and merging ✅
Wearing: layers and two-handed weapons ✅ No strength requirements yet
The character’s own containers ✅
Containers on the ground, weight and item limits ✅ A container on the ground opens within two tiles; items can be taken out and put in, and the players around see them come and go; 125 items at most and up to the container’s limit of stones (400 without one); piles merge inside
Tooltips and single-click names ✅ Name, weight, rarity, blessed and cursed, exceptional and maker, uses left; a weapon’s damage and speed, a piece of armor’s rating and the strength a piece asks for and its durability
Items on the ground and their decay ✅
Scripted items ✅ Lua item scripts: use, equip, unequip, pick up, drop, create, darkness, a player stepping on them, speech nearby
Loot tables ✅ Rolled into every spawned NPC’s backpack, into the treasure chests and the town containers, and from scripts with item.add_loot
Doors ✅ Open and close; linked double doors; a closed door blocks the way, staff walks through; humans and monsters walking to a place open the ones that are not locked
Locks and keys ✅ Locked doors open for a player carrying their key
Lights ✅ Lit and doused; lamp posts light up at night
Potions and food 🟡 Food is eaten: hunger, stamina, sound and gesture. Drinks are drunk by sips, and a pitcher or a glass is left empty; no refilling, no drunkenness. Potions of heal, refresh, strength, agility, night sight, poison and cure are drunk, with a free hand, and leave a bottle; explosion potions are thrown and blast an area
Books 🟡 Staff .book creation and readable scrolls from TOML text templates, frozen recipient variables and saved title/author/body and once-only letter attachments; 62 lore books in eight languages, which open the client’s own book with its cover and pages; books a player writes in, one for every new character; copying and signing a book are not built
Maps and treasure maps 🟡 Maps open on their area, with a course of up to 50 pins; the 33 preset maps; a map Lua module; cartography draws them. No treasure maps or SOS yet
Runes, recall and gates 🟡 A recall rune is marked by the Mark spell (.mark_rune for staff), and Recall, Gate Travel and Sacred Journey go to it, reading the travel rules of the regions, see Magery; no runebooks (the item exists, nothing opens it)
Moongates and teleporters 🟡 Walk-on teleporters and those that answer a word, also across maps, placed by .decorate with ModernUO’s world and dungeon ones; public moongates with a destination gump; plain moongates with one destination (.moongate); the gates of Gate Travel last 30 seconds; no moongate travel by the moon phases
Dyes and dye tubs 🟡 Dyes give a dye tub the hue picked in the client’s hue picker, the tub gives it to what is dyeable, as clothing is; no leather, furniture, black or metallic tubs
Hair stylist, hair dye and disguise kit ❌
Secure trade ✅ Drop an item on another player within 2 tiles for a trade window: a box each, two ticks, a swap into the backpacks; cancel, death and leaving give everything back; no platinum, no refuse setting
Magic items and item properties ❌
Random magic loot and artifacts ❌
Imbuing and reforging ❌
Power scrolls, stat scrolls and soulstones ❌
Games (chess, checkers, backgammon) ❌
Plants and farming ❌
Dungeon traps and puzzles ❌
Dungeon and town chests that refill 🟡 The dungeon treasure chests of ModernUO, levels 1 to 4: a spawn region makes one with gold and loot, it decays and a new one comes. The town crates, chests, barrels and bookcases fill up when opened, every 60 to 90 minutes, from the 35 tables of ModernUO. The dungeon chests are born locked and trapped, the town ones are not
Messages in a bottle and fished-up treasure ❌
Item attributes: blessed, cursed, newbie, insured 🟡 Blessed and cursed in tooltips; no rules behind them
Deeds and redeeding ❌
Bandages ✅ The clean bandage heals and raises; see Healing and veterinary
Musical instruments 🟡 The nine instruments are played with a double click (Musicianship) and wear by the bard skills (350 to 450 uses); no slayer or exceptional instruments, no crafting of instruments; not tried with a client
Navigation tools: sextant, spyglass, clocks 🟡 Clocks tell the part of the day and the time where they stand (clock.lua); no sextant or spyglass
Potion kegs and commodity deeds ❌
Trash cans ❌
Communication crystals ❌
Item stones (dispensers) ❌
Engraved stones and rings ✅ A stone the architect sells for 10000 gold: its buyer owns it, puts it on the ground and writes a title and a text with write; anyone reads it with a double click and only its owner lifts it, see Engraved stones. A jeweler engraves a ring or a wedding band with a text of 60 characters for 500 or 1000 gold, shown in its tooltip, see Engraved rings
Cannons ❌
Talismans and jewelry properties ❌
Integrity checks and orphan detection ❌
System Moongate Notes
Maps, statics and multis from the client files ✅ MUL and UOP
Movement and line of sight checks ✅ Movement: terrain, statics and ground items (a closed door, a crate); line of sight: terrain and statics. Mobiles and multis are in neither yet
Map sectors and view range ✅
Day and night ✅ By map and longitude, with the moon phases; .globallight, .time
Dungeon and jail light ✅
Weather by region ✅ Rain, snow, storms with thunder, dry indoors; no weather damage
Seasons ✅ By map and region, optional rotation with the game days; .season
Regions 🟡 Found for every player; they set the weather, the music, the season and the dungeon light, and a player reads the place it enters or leaves and whether guards protect it, and the guards of the towns act on it; no housing rules
Region music ✅ The region’s track, else the map’s; .music
Region rules: safe, no PvP, no housing, instant logout ❌
Town politics (mayors, taxes) ❌
World decoration ✅ Placed by .decorate, with the shop signs and the town doors read from the map
Spawn regions ✅ On every map: UOX3’s data, ModernUO’s for New Haven, Malas, Tokuno and TerMur; fast first fill, .initial_spawn, respawn, land and water; regions of items too, as the treasure chests; see NPC spawns
Spawner items ❌
Housing: placement, sign, owners, friends and bans ❌
House lockdowns, secure containers and decay ❌
House addons (forges, looms, multi-piece furniture) ❌
Boats ❌
Facet changes and facet rules ❌
Ambient sounds ❌
Several maps at once ✅ Every map of maps.toml
Moon phases ✅ Trammel and Felucca on the game clock, as ModernUO’s spyglass; .time, world.moon in Lua
Custom house design ❌
Sector sleep ✅ NPCs away from players cost nothing
World import and export ❌
Parallel and incremental world saves 🟡 Only the snapshots that changed are written, in one background transaction; not parallel
System Moongate Notes
Local speech ✅ Players and NPCs hear what is said nearby
Party 🟡 The party of up to ten players, made with the client’s own buttons: invite with a target, accept or decline within 30 seconds, leave and remove, the next member in line takes the lead when the leader goes, public and private party chat, the Lua party module and the party_* events. A character leaves its party at logout and a restart ends every party. The members see each other’s bars, and ClassicUO draws the members out of view on its world map (the 0xF0 query). The spells that hit a place spare the members and the creatures they own. The Enhanced Client’s pins and sharing loot are not built yet
Guilds ✅ A guildstone deed founds a guild on the placed stone; the gump of the stone shows the roster, the leader first, and gives fealty, titles, charter, website, hue, ejection and resignation; the fealty elects the leader; war and alliance are the double declaration of the two guilds, orange and green in notoriety, and attacking an enemy is no crime; see Guilds
Chat window 🟡 The guild and alliance chats work (speech types 0x0D and 0x0E, 128 characters, only the online members hear them), next to the party chat; the chat button (0xB5) is answered with the chats that work. The legacy Alt+C window, with its channels, moderators and voice, and a global or staff chat are not built
Bulletin boards ✅ Every board has its own messages, in threads with replies; the poster or a game master removes; threads expire some days after their last reply and a full board lets its oldest thread go, both from settings; scripts post, list and remove with the board module; see Bulletin boards
Duels, arenas and tournaments ❌
Character profile ✅ The text a player writes about their character, read with the paperdoll’s Profile button and edited in the same window: 511 characters kept in a prop of the character, own profile to edit, another player’s within 12 tiles to read, the title of the paperdoll and the age of the character shown; profile.get and profile.set for scripts; see Profile. The lock of the profile is left out
Tips window ❌
Quest arrow and quest button 🟡 The quest arrow (packet 0xBA) shows at a spot and clears with arrow.show and arrow.clear; Tracking uses it. The Quest button of the paperdoll (0xD7 0x32) opens the quest log. Not tried with a real client; the server does not follow a target or take the client’s click on the arrow
Quests 🟡 A quest is one Lua file run by one engine (Quests): a giver NPC (double-click or the Quests context entry), kill (optionally in a region), collect, talk, skill, delivery and escort objectives, any of them against the clock (a quest that runs out fails and waits in the log), or any one of them, with credit for the party, rewards (gold, items, skill, fame, karma, flags), chains, repeat delays, a quest log from the paperdoll Quest button (with an Abandon that asks again), texts as message numbers from 40000. Five example quests in New Haven, and 224 of ModernUO’s 257 Mondain’s Legacy quests, migrated by a converter, with their 99 NPCs (givers and destinations of deliveries) standing where ServUO puts them (Heartwood, the Sanctuary, New Haven, Malas, Ilshenar); the givers teach their skills for gold and say a line to a player who comes near and has a quest to take. Not built: the quest arrow for an objective; the other 33 ModernUO quests are still to be migrated
Speech modes: say, whisper, yell, emote ✅ A whisper is heard 1 cell away, a yell 18, speech and emotes 15; NPC and item scripts are told how it was said
System Moongate Notes
Gold ✅ Starting gold and NPC loot; spent at the vendors, the trainers and the guildmasters, kept in the bank
Banking and bank checks ✅ The bank box with its limit of items; balance, withdraw, deposit and check by speech; bank checks cashed by a double click in the box; gold and checks dropped on the banker are deposited; criminals refused; see Bank
House costs and limits ❌
Account-wide gold ❌
Vendor search and auctions ❌
Veteran rewards ❌
System Moongate Notes
Commands with access levels ✅ From the console (TAB completion of commands and arguments, Up/Down history) and in game; see Commands
World save ✅ Periodic and on shutdown, with .save
Restart command ✅ restart stops the server as shutdown does and ends the process with exit code 75, for systemd, Docker or Kubernetes to start it again; a bare mgserver stays down
Scheduled tasks, shutdown and seasonal events ✅ data/schedule.toml: tasks by hour, day or week (shutdown with warnings, message, Lua function), events by date with a staff switch and on_start/on_end hooks, in a chosen time zone; GetSchedule serves the calendar through the administration API; see Schedule
Holiday events 🟡 Holidays: Halloween (October 24 to November 15), where shopkeepers answer “trick or treat” with a candy or a trick, and Christmas (December 24 to January 1), with snowballs to throw and a gift at login once a season; both decorate the main towns while they are on
Database backup ✅ Rotating SQL exports on a schedule and with .sql_backup; restore with psql
Console ✅
Server configuration ✅ moongate.toml, validated at startup
Era ruleset (classic or modern rules) ❌ One ruleset, the classic one first; see the Roadmap
Settings for the game rules (combat, magic, regeneration, crimes) 🟡 Combat, regeneration, crimes, pets, bank and others have their sections in moongate.toml; magic arrives with its system
Account administration 🟡 Console and administration API: locks, bans with a reason and an expiry
Remote administration 🟡 gRPC API with TLS; no web panel
Metrics and diagnostics ✅ Process and plugin metrics; GetMetrics serves the latest snapshot through the administration API
Hot reload 🟡 Lua scripts; not the data or templates
GM help queue (pages) ✅ A player calls a game master from the Help menu (kind and a line, one request at a time, a pause); the staff works through the queue from the .pages gump: go to the player, take, answer, close; the answer reaches the player online or at the next login; the queue is also readable and workable through the administration API; see Help
Help menu and stuck menu ✅ The Help button opens a menu: “I am stuck” takes a character to the nearest starting city after a wait, with a pause; useful commands; server rules; see Help
Jails ✅ A gump lists the cells and who is in them; sentences in real days, a gold fine and a release note at the end, a chest of bread and water in every cell; a player who is offline is jailed by name and serves from its next login; the jail is also readable and its prisoners pardonable through the administration API; see Jail
Who list ❌
Staff tools: property gump, add menu, area commands 🟡 The gump of the named places, .go, with ModernUO’s 558 places, and .gmtools, a gump with a sidebar of tools: it forces the weather, sets the season of the map, shows the time and sets the light, and switches the seasonal events (administrators), .items, a gump that looks item templates up by name, id or graphic with a picture and gives them or puts them on the ground, and .npcs, the same for mobile templates, with the picture of the body and a button that spawns (an add menu); the templates are also searched and read through the administration API, which writes the ones it created; no property gump or area commands
Named locations and travel menu for staff ✅ .go <place> and the go gump, with ModernUO’s 558 places from data/locations.toml
Web status pages ❌
Bug reports 🟡 Exception reports ready for an issue; no in-game report
Logging ✅ Structured logs with levels; GetRecentLogs serves the latest entries through the administration API
Packet logging per client ❌ The --log-packets option is parsed but unused
Command log ❌
Remote console (telnet) ❌ The gRPC API instead
Crash dumps and watchdog ❌
Windows service ❌ Docker images instead
System Moongate Notes
Script engine ✅ Sandboxed Lua 5.2 with an instruction budget
Scripts bound to templates ✅ script_id on item and mobile templates
Several scripts on one object, scripts by item type ❌
Script events 🟡 NPC, item and character events, player_say and player_region_changed, and the death of a mobile; the NPC’s damage, heal, attack, hit, combat, tame and region events and the item’s deletion, decay, container, move off, near, tooltip and drop-on events, a vendor’s on_bought and on_sold, and the bus events item_created, item_deleted, mobile_created, mobile_deleted, mobile_died, pet_tamed, craft_succeeded and corpse_carved are in Script hooks; no skill events
Events that can refuse the default action 🟡 Items: on_use, can_pick_up, can_drop, can_equip, can_insert, can_drop_on, can_decay; NPCs: on_damage, on_heal, on_attack and can_die; vendors: can_buy and can_sell; none yet for skills (no check_skill)
Region enter and leave events ✅ player_region_changed for players; on_enter_region and on_leave_region in the script of an NPC; not for items
Script API 🟡 npc, item, world, mobile, gump, bank, effect, moongates, locations, dice, localization, timer, events, engine, log, target, prompt, skill, commands, combat, craft, harvest, help, hue_picker, mount, npcguild, guild, pet, schedule, stable, trainer, vendor, jail, board, book, carve, arrow, cliloc, map, spell, bleed and champions; a mobile’s stats and skills are read and written
World queries from scripts (objects near, in sight, by serial) ✅ world.mobiles_in_range, world.items_in_range, world.players, world.line_of_sight, world.standing_z, world.region, world.is_occupied, world.carries, world.distance
Creating and moving items from scripts ✅ Create on the ground or in a backpack, loot into a container, move, equip, find by template, consume, delete
Messages, target cursor and prompts from scripts ✅ npc.say, mobile.message, item.message, item.message_cliloc, target.pick, prompt.ask, gumps
Script timers ✅
Timers kept by an object and saved with the world 🟡 Items: item.start_timer and on_timer, kept across restarts; not on mobiles
Commands from plugins ✅ In C#; not from Lua
Data-driven content ✅ TOML templates and data files, validated at startup
Importing another emulator’s content ✅ UOX3 items, loot, NPCs, names, starting items, NPC lists and spawn regions; ModernUO spawners, decoration, signs, teleporters, named places and treasure chests
Runaway script protection ✅ Instruction budget per resume and per chunk
Persistent values on objects ✅ Props on items, NPCs and players, saved with them
Global persistent script data ✅ world.get_prop, world.set_prop: shard-wide props saved with the world
Script debugger for an IDE ❌ Editor definitions for completion only
Script profiling 🟡 Script metrics; no per-function profile
Files, HTTP, SQL and email from scripts ❌
External TCP services handled by scripts ❌
Scriptable gumps and dialogs ✅ XML layouts with Lua callbacks, slots and builder; see Your first gump
Hooks that replace core rules (skill check, combat, decay) 🟡 Combat: an NPC’s script changes the damage and the heal, cancels a swing and refuses a death; an item’s script keeps it from decaying (can_decay); a vendor’s script refuses a line of a sale (can_buy, can_sell); no skill check
Overridable system messages ✅ Every message in the data/messages files
System Moongate Notes
Target cursor ✅
Localized messages ✅ 8 languages; a language can be split into data/messages/<language>/*.toml
Races 🟡 Human, elf and gargoyle bodies and looks; no racial gameplay
Gumps ✅ XML layouts checked by an XSD, Lua scripts, gumps built in Lua, chained gumps, checked answers, item pictures on buttons and creature portraits
Menus ❌
Context menus 🟡 The menu of a mobile or an item: Open Paperdoll and Open Backpack, and the entries a Lua script adds (on_context_menu, on_context_menu_select), such as the banker’s Open Bank Box; the choice is checked against the menu sent. The Enhanced Client’s own icons choose the entry with their text. The vendors add Buy and Sell, the stablemasters Stable and Claim All, a pet its nine commands for its owner and three for its friends; no taming or party entries yet
Buff bar ❌
Walk sequence and speed checks ✅
Weight and overloading ✅ What a mobile carries and may carry (40 and 3.5 a point of strength) is counted and shown; an overloaded player tires at every step
Timed effects (buffs and debuffs) 🟡 Strength, dexterity and intelligence bonuses and curses (potions and spells) and night sight, for a time, never saved; poison, saved; the armor of Protection and Reactive Armor, kept with the mobile until their time is up; a paralysis and a disguise (Incognito, Polymorph), kept with the mobile and taken up again at login; no buff bar yet
Text prompts and input ✅ The Unicode prompt (0xC2), from scripts with the prompt module
Visual effects: moving, lightning, particles ✅ From scripts with the effect module; particles for the Enhanced Client
Sounds and music ✅ Sounds from scripts, thunder and region music
Client language ❌ One server language for everyone, out of the 8 shipped
Store and other modern client panels ❌

Systems most emulators do not have:

  • Login server and game realms as separate processes, discovered through Redis, with one-use handoff tickets.
  • PostgreSQL persistence with versioned migrations, applied by mgctl migrate while the server is stopped, or by the server itself at startup when persistence.auto_apply_migrations is on.
  • World saves that never stop the game: about 0.1 s on the game loop to copy 173,000 entities, then only the changed rows written in the background; see A save does not stop the game.
  • A gRPC administration API with TLS.
  • A jail run from a gump: the staff picks a cell and the days, and the server does the rest, from the fine and the release note at the end of the sentence to the bread and water in the cell.
  • Plugins that add services, commands, Lua modules, metrics, entities and their own settings.
  • Docker images, a multi-realm example and a Helm chart for Kubernetes.

Made with ❤️ by Tom

Buy me a coffee