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.
Accounts, login and network
Section titled “Accounts, login and network”| 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 |
Characters
Section titled “Characters”| 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 | ❌ |
Combat
Section titled “Combat”| 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 |
Skills
Section titled “Skills”| 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) | ❌ |
NPC services
Section titled “NPC services”| 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 |
Social
Section titled “Social”| 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 |
Economy
Section titled “Economy”| 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 | ❌ |
Administration
Section titled “Administration”| 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 |
Scripting and content
Section titled “Scripting and content”| 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 |
Interface
Section titled “Interface”| 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 | ❌ |
What Moongate adds
Section titled “What Moongate adds”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 migratewhile the server is stopped, or by the server itself at startup whenpersistence.auto_apply_migrationsis 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
