The original Ultima Online server emulator (Est. 1997)
UOX3 v0.99.5a Released!
This update to 0.99.5 is on the smaller side, but contains some important fixes and performance improvements, in addition to several gameplay and JS engine improvements!
Additional Performance Improvements
- NPC Pathfinding performance improvements (up to 60% more efficient)
- Optimized system for activating NPCs in map regions around online players; instead of all 9 map regions surrounding a player being active, now only 3 to 6 will be active, based on the player's position within these regions - leading to fewer overall NPC pathfinding request
- UOX3 now adapts the time between each time it checks Spawn Regions based on how "full" the Spawn Regions are on average - the nearer they are to max capacity, the longer time between each time Spawn Regions are checked
- Reloading spawn regions will now "unload" already spawned NPCs and items as part of the reload process
- Fixed an issue where information on newly spawned characters would get sent twice to each nearby player
- Adjusted default values for some INI speed/timers settings for improved server performance
JS Engine Updates
- Extended the amount of JS events supported by UOX3's JS engine from 96 to 192
- Added new JS Events:
- onHelpGump() - override default gump menu when pressing Help button in paperdoll
- onWarModeToggle() - return false to prevent war mode toggling
- onAICombatTarget() - return true to select current target, or false to skip and look for another
- Updated JS Events and Methods:
- onDamage() - can now return false to override and prevent damage dealt to a character. Must return true to allow damage
- onSwing() - also works for characters with no weapons equipped
- .KillTimers() - now also works for Characters (previously Items only)
- NPCs can now engage other NPCs in combat if setup as racial enemies. Ophidians vs Terathans have been setup as an example of this.
- Fixed an issue with initialization of wander areas for NPCs spawned via object spawners, which caused NPCs to not stick to their assigned areas, but wander according to their own free will. Can't have that!
- Fixed some issues with itemlists pointing to non-existing items (a turnip and 10 of each magical reagent)
- Updated Provocation skill to disallow directing provoked creatures at targets with the custom tag provImmune present
- Added script that allows Tinkerers to craft golem followers via Clockwork Assembly items
- Misc fixes to DFN entries for Bascinet, Helmet, Sai weapon, Wands
- Reduced the default amount of town folk, poor folk and rich folk NPCs spawning in Britain
- Misc fixes to JS scripts (NPC speech, moongates)
- Players can no longer gain Anatomy skill from targeting themselves
Misc Other Stuff
- Added reusable scripts that renders characters immune to either physical or magical damage
- Added pre-defined book: A Welcome, by Blackthorn
- Added definitions (and scripted special abilities) for additional NPCs:
- Orc Brute - throws orc lords at nearby targets
- Orc Chopper - basic attacks deal AoE damage
- Betrayer - Colossal blow, AoE poison
- Golem - Colossal blow
- Golem Controller
- Crafted Golem - Tinker-crafted version of golem
- Exodus Overseer - magical shield that makes NPC immune to physical damage
- Exodus Minion Lord - magical shield that makes NPC immune to physical damage
- Exodus Minion - magical shield (like above), periodic AoE burst
- Skill titles no longer show in paperdolls of characters turned into Counselors and GMs
- Default titles of Counselors, GMs and Admins can now be customized via commands.dfn
- Fixed a client crash on first login caused by issues with the admin welcome gump
- Minor console cleanup
Grab your copy of UOX3 0.99.5a for your preferred platform - Windows, Linux or macOS - while it's still hot!
UOX3 v0.99.5 Released!
This update has been a year in the making, and contains many new features, some serious performance improvements under the hood and bugfixes galore. Check out the highlights below, or dive deep into the full changelog for all the juicy details!
Massive Performance Improvements
- Substantial reduction in server startup time for large worlds due to updated handling of multi initialization
- Worldfiles now load ~73% faster than before on startup!
- Previously: ~206 seconds to load 1 million items. Now: ~56 seconds. Tested on Windows, results may vary.
- Worldfiles now save ~11% to ~99% faster than before!
- Actual time depends on amount of changes since previous world save. If no changes have taken place, world saves will be instant. Note that first save after startup is a full save.
- Performance improvements for seeking in map, statics and multis
- Several improvements to NPC pathfinding to address functionality and performance
- Regional spawning system improved and optimized, with much higher success-rate for finding valid spawn locations on both land and water (also self-improves over repeated spawn cycles)
Improved Server Stability
- Several server crashes fixed, including some deep-rooted, hard-to-debug issues with JS timers, temp effects, object handling in regions, etc.
- Hardened server against worldfile corruption by adding some measures to prevent UOX3 from being shut down/closed in the middle of a world save
Object Refresh/Update Improvements
- Fixed long-standing (20+ years old) issues with objects not updating/refreshing properly, where those objects would vanish from view and appear to have "gone missing"
- Fixed issues with objects moving between different worlds/instances not updating properly
JS Scripting Engine Improvements
- JS engine is now more robust, after a ton of fixes, improvements and additions
- Support added for attaching multiple scripts to individual objects, which makes it much easier to do modular (and third party/custom) scripts
- Lots of new JS events, functions and object properties have been added to increase the flexibility of the JS engine
- Many existing JS events updated to support return values from script
- Revamped JS Docs with updated syntax, examples, search function
- TriggerEvent JS function updated to support returning a value (int, string, bool, array) or object from the called upon script
- Exposed crafting system to JS engine to give scripters access to entries in create DFN files and associated properties
- Added support for specifying custom target cursors as neutral, harmful or helpful
- Temporary custom tags can now be set on objects via JS; these tags are not saved along with other object properties, and only last until server is restarted (for NPCs/items) or until a player logs out (for Player characters)
- Revamped, searchable JS Documentation with up-to-date details and examples for each Event, Function, Method and Property in UOX3
Modernization and Cleanup of Code Base
- Many parts of the source code modernized to make use of c++11/17 features, especially with regards to string handling, conversion between strings and numbers, usage of standard filesystem, null pointer handling and more
- Cleanup of several areas of code to reduce complexity, fix logic errors and improve readability
- Addressed numerous compiler warnings on all supported platforms
- Fixes to long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux
Easier Shard Setup Process
- The setup process for new UOX3 shard has been simplified; the serverlist in ini file has been done away with, and UOX3 now automatically accepts and responds to connections on both local and LAN IPs, with a new optional setting to specify a shard's external IP
- A new welcome gump now displays for fresh shard admins, allowing them to choose between starting with a blank slate or to load world templates and/or enable spawn regions for specific (or all) facets, for a smoother first-time-user-experience
- A new command ('decorate) allows saving/loading of world templates, text files that contain the bare minimum amount of details needed to decorate an entire game world, facet or specific area of a facet.
- These world templates can be saved and loaded on the fly without impacting existing data on a shard.
- A default set of such world templates with decorations (doors, signs, basic decorations) for Felucca, Trammel and Ilshenar - with associated dungeons - are bundled with UOX3
- An additional feature of this command is the ability to save, load and unload event-specific decorations - for instance for Christmas, Halloween or shard-specific events - based on a new item property (.event) that can be used to associate items with such events
Doubling down on Dictionaries
- UOX3 has doubled down on its custom dictionary system, and every system message in the game has now been converted from raw strings to dictionary entries which can be displayed in different languages
- A new ini setting has been added allowing shard admins to specify a default language for their server, which will determine the language of dictionary messages sent to connected clients, instead of the default option, which is to use the client's specified language
- Due to improvements for UTF8 character handling in the dictionary system, UOX3 now comes bundled with language support and dictionary files for the following languages: English (default), Czech, French, German, Italian, Polish, Portuguese and Spanish
Customizable Network Budgets
- Shard admins can now assign a "network budget" to connected clients via UOX.INI, specifying the max amount of traffic each client is allowed to send/request from the server, with temporary account bans for players who exceed these limits repeatedly in the same session.
Revamp of Boats
- Greatly improved handling of boats, with all known bugs fixed and some previously missing features implemented (like collision with other boats and dynamic items). Note that the boat implementation is based on the ~Publish 15 era of UO
- All classic boat commands implemented (including aliases, as it's based on triggerwords from client)
Fish as Server-Tracked Resource
- Fish has been setup as an additional server-tracked resource, in addition to the existing ore and logs, with new ini settings to allow specifying the amount of fish resources per resource-region, and how often this resource "respawns"
Revamp of Fishing Skill
- Fishing skill has been moved out of code and into JS, and updated to support all functionality present in ~Publish 15 (LBR/pre-AoS era), including things like shallow vs deep water fishing, magic fish, big fish, sea serpents, special fishing nets, messages in a bottle/SOS and shipwreck treasures - with valid shipwreck locations being definable in a new, special regions.dfn section
Revamp of Taming skill and Pets
- Animal Taming skill updated to match functionality and ruleset of ~Publish 15 era of UO, with some additional options that go beyond that era
- Pet ownership now works as players expect it to, with fully functional pet commands, ownership restrictions, controlslots, friend-lists, secure pet trading, pet loyalty and "orneriness" and a ton of bugfixes
- Taming restrictions have been put in place for certain creatures like Unicorns, Ki-Rins and Cu Sidhe
Revamp of Cooking Skill
- Cooking skill has received an overhaul to ensure players can cook all food-items available in ~Publish 15 era of UO
- Flour mills are now animated, and take a few seconds to grind wheat into flour
Revamp of Crafting Skills
- Crafting menus have been revamped and "modernized" via JS for skills like Alchemy, Blacksmithing, Carpentry, Cooking, Fletching, Tailoring and Tinkering - with new features such as resource-requirements, crafting chances, and more
- Create DFNs updated with additional craftable items, including house-addons
- Crafting tools now come with limited amount of uses per tool (optional feature, enabled by default)
Other Improvements to Skills
- Skill delay can now be specified per skill, which overrides the global skill delay from uox.ini, and the delay for all skills have been updated to match ~Publish 15 (LBR/pre-AoS) era of UO
- Enhancements/fixes to several skills, with implementation now being closer to pre-AoS era: Animal Lore, Animal Taming, Cooking, Healing, Tailoring, Tracking
- Item Identification skill has been ported from code to JS, and received some updates
- Remove Trap skill has been implemented in JS, and allows players with appropriate skills to remove traps from containers, depending on skill vs difficulty of trap
- Herding skill has been implemented in JS, and allows players with a Shepherd's Crook and appropriate skills to herd non-tamed animals
- Players can now heal various humanoid monsters with bandages using the Healing skill
- UOX3 has a system that allows a player's stats to affect the chance of success when performing a skill check. This system is no longer in effect by default, but has turned into an uox.ini setting for those who wish to use it
Enhanced Context Menu Support
- Support for context menus has been greatly improved, with ~publish 15-era (pre-AoS) context menu functionality fully implemented for players, NPC bankers, pets, hirelings, stablemasters, escort NPCs, NPC trainers
- New ini setting added for enabling/disabling context menus
Improvements to Magic Systems
- Delay between casting a spell and damage/effects being applied can now be specified per spell in spells.dfn, replacing a similar global setting from uox.ini, and all relevant spells have been updated with appropriate delay timings based on ~Publish 15 (LBR/pre-AoS) era of UO
- Recovery time from casting a spell until being able to cast another can now be defined per spell in spells.dfn
- New ini setting toggles whether player spellcasting gets interrupted upon equipping/picking up items. Defaults to enabled
- Overhauled rules for spellcasting, so reagent checks and skill-checks take place at appropriate times
- Overhauled casting times, SFX and VFX for all spells
- Fixes for several spells (Magic Trap/Untrap, Magic Lock/Unlock, Telekinesis, Summon Creature, Dispel, Mass Dispel, Reveal, Earthquake, Field spells)
- NPC spellcasters now make more informed decisions on what type of spells to cast in combat, based on the situation
Updated Combat Mechanics
- Various combat mechanics (parrying, damage calculations) have been updated to be in line with ~Publish 15 (LBR/pre-AoS) era of UO
- A new optional combat system has been added allowing shard admins to define armor classes and have specific weapons be more effective against some armor classes than others
- Damage tracker that keeps track of damage being dealt to a given creature/player now also tracks the type of damage being applied, and this information has been exposed to the JS engine. Damage() method and onDamage() event have also been updated to provided an optional parameter to specify the type of damage being done.
- Special JS-based AI behaviour (like fire breath, damage auras, spell reflection, basic pack behaviour) have been added to numerous monsters
- Based on research from UO patch notes, an accuracy bonus has been implemented for the Archery skill, which can be defined (or disabled) via a new ini setting
- Archers now have to stop and stand still for a minimum amount of time before they can fire their ranged weapon. This delay has been added as a new ini setting
Pre-AoS Magic Items
- A new JS script has been created which can generate magic items (weapons, armor, wands/staffs, rings) of the pre-AoS variety as loot for NPCs with the script attached, or created on demand with GM commands
- The quality of the magic items generated depend on the fame of the NPC, with higher fame resulting in improved chances of magic loot, as well as higher quality of said loot
- The type of magic properties that can be generated for a given magic item match up with those that could be found in the pre-AoS era of UO. Examples:
- supremely accurate katana of vanquishing
- substantial silver spear
- durable ringmail tunic of guarding
- Magic items can also receive spell enchantments, which come with a limited number of charges that activate on successful hits in combat for weapons, on equip for armors and on use for jewlery/wands/staffs. Examples:
- surpassingly accurate dagger of power and Wounding
- substantial axe of force and daemon's breath
- platemail arms of protection
- wand of identification
- ring of teleportation
- A new ini setting allows controlling whether item stats for unidentified magic items are hidden (default) or always shown
- The GM add-menu has received some updates to increase usability and flexibility while adding items. GMs can now choose from various settings such as adding items at a location instead of in backpack, automatically reopen the last menu that was open, enabling "repeat add" to add same item over and over, and adjust the default decay/movable state of items added, overriding whatever values they might have in the DFNs
- Improvements have been made to how house-addons are added, to prevent scenarios like multi-item addons extending beyond the allowed space in a multi
- Additional house-addons have been implemented and are available from the GM add-menu, or crafted by players:
- Loom (south)
- Small Forge
- Large Forge (north/south/east/west)
- Anvil (south/east)
- Spinning Wheel (north/south/east/west
- Small Bed variant 1 (south/east)
- Small Bed variant 2 (south/east)
- Large Bed variant 1 (south/east)
- Large Bed variant 2 (south/east)
- Training Dummy (south/east)
- Pickpocket Dip (south/east)
- Flour Mill (south/east)
- Sandstone Oven (south/east)
- Brick Oven (south/east)
Misc Updates to DFNs
- All NPCs (including townsfolk, shopkeepers, monsters and animals) in UOX3 have had their stats, skills, loot and other settings updated to match the state of these according to the official LBR guide (~Publish 15/pre-AoS) in combination with data from the stratics network from around the same time
- New itemlists and lootlists have been added, and existing ones have been updated with more variety and more randomness
- Item and NPC DFN sections can now inherit a random parent, if more than one parent is defined when using the GET tag
- Named aliases have been added for all definitions of weapons, armors and clothes, to allow adding items with GM commands using the names of these items
- Definitions for weapons and armors added from AoS to ToL UO expansion added, with stats balanced for Pub15
- Races can now be setup with functional combat damage modifications based on weapon skills, so different races can have bonuses/penalties with different weapon types
- Races can now be setup with equipment restrictions, either as whitelists or blacklists, that can allow/prevent certain races from equipping certain gear
Spawn Containers and Dungeon Chests
- Spawn containers can now spawn more than one item per container - in fact, by default they now spawn every item in a specified itemlist in a given container
- Default spawn files provided with UOX3 spawns locked and trapped chests and containers in dungeons on a regular basis. The contents of these chests varies (4 levels), as does the skill required to unlock and/or remove the traps associated with the chests.
Various Hard-Coded Functionality Ported to Scripts
- Tweak command has been ported to JS, and has been overhauled with a new UI, improved usability, support for additional properties for Characters, Accounts, Skills, Items, Multis and Regions
- The ability to split in combat now exists as a stand-alone JS script that can be attached to any NPC, and is thus no longer the exclusive domain of slimes
- Implementation of sextants moved from code to JS, and updated to return proper longitude and latitude coordinates
- Various skills ported to JS: Fishing, Item ID
Many Additional Improvements
- Hireling AI! A variety of NPCs can now be hired with gold and commanded like pets via commands or context menu options
- Thirst system added to complement the existing hunger system
- Blood splatter effects now spawn in combat!
- Improvements to spawn containers and traps on containers in general
- Accounts now have a firstLogin timestamp property that is set the first time a player logs in to their account. This property is accessible via JS.
- Player characters now have a createdOn timestamp property that is set when a character is created. This property is accessible via JS.
- Added interior decorator tool for houses, hairstyle deeds
- Tents can be demolished and converted back to deeds by chopping the tent chest with an axe
- Dictionary files can now be reloaded with a new command ('reloaddictionaries)
- Fixes for Line-of-Sight code to address issues with LoS checks between different floors of buildings, through terrain, etc
- Improvements to skill training from NPCs (now triggerword based)
- Improvements to interactions with banker NPCs (now triggerword based)
- Fully functional Runebook script has now been integrated into UOX3
- Several human NPCs added to DFNs, npclists and spawners for more variety in the type of NPCs that spawn in towns when using something like the community-based spawn files
- Fixes for feature negotiation system to ensure the options work as intended, and to avoid players being disconnected without delay before assistant tool had a chance to respond to negotiation request
- Items are now layered in containers by the order in which they are added, with latest added items shown on top of older items
- Support added for responding to server polls from UO shard portals
- Custom tag support added for multis, which can be set with in-game commands or via DFNs
- Support added for New Character Animation packet, for improved character animations in client v7.0.x and beyond
- Better client compatibility with both regular UO client and open-source clients
- Improvements to teleport.scp, both with regards to content and organization; entries no longer required to be sorted in file!
- All known issues with in-game bulletin boards resolved, and players can now view, post and reply to messages properly. Bulletin board maintenance has been re-enabled to clear out deleted player messages and/or NPC escort quest entries.
- Quick-access to any object property using 'get [propertyName] command
- Playable chess and checkers-boards (with enforced rules and turn-handling!)
- Numerous fixes to healthbar updates and character flagging
- Improved object tooltip support, with UOX3 responding to new client requests for object information, support for custom object tooltips via JS, and more
- Exposed additional Region/Townregion properties to JS
- Exposed account system and account properties to JS engine, allowing server admins to view and/or modify account properties of players from in-game
- Improved accounts system to support time-limited or permanent account bans
- Improved handling of NPC AIs in combat; NPCs will now look for new targets nearby if they are unable to reach their current target
- Support for "sub-regions" that can be used to override which music is playing in a given area (useful for locations like taverns)
- Pets will now teleport along with the player when moongates, recall spells, object-based or hard-defined teleporters are used.
Grab your copy of UOX3 0.99.5 for your preferred platform - Windows, Linux or macOS - while it's still hot!
About UOX3 - Frequently Asked Questions
UOX3 stands for Ultima Offline eXperiment 3, and can basically be described as an Ultima Online server-emulator.
It allows anyone and everyone to run their own private Ultima Online shard (either offline or online) which they may then connect to using either the official UO Client or a custom one.
One of UOX3's goals is to emulate the functionality of official Ultima Online servers and allow anyone to run a UO server of their own.
At the same time, we aim to enable shard creators to tweak all aspects of their shard, and to create new functionality altogether - whether through UOX3's scripting engine or through UOX3's open-source code.
Each UO server emulator have their own pros and cons; some are easier to setup out of the box, some are better at emulating current day UO, some are better at giving shard admins the tools to create their own unique shards. Some of UOX3's strengths:
- Quick to get up and running with only a few easy to follow steps - see the UOX3 Quick Start Guide
- High-quality documentation that improves with every update
- Open Source (C/C++)
- 64-bit cross-platform support across Windows, Linux and macOS
- DFN Files - easily editable textfiles that act as blueprints for items, NPCs, regions, skills and more
- Dynamic reloading of scripts and DFNs at any time in seconds for faster iteration
- Custom object tags that can persist across server restarts
- UO client support from 4.x to the latest 7.0.x series
- Custom language dictionary system that supports English, Czech, French, German, Italian, Polish, Portuguese and Spanish
- Extensive Log System - UOX3 comes with an extensive log system that tracks server errors, warnings, network packets sent and received for each client, commands used, spells cast, combat events, player speech and more.
For a more complete feature list that includes customization options and gameplay features, check out the Feature Highlights in the UOX3 Docs.
Nothing! UOX3 is free to download and/or modify, and anyone who wants to can run their own UOX3 shard.
Some shards accept donations to help keep the lights on and server costs under control, but there's always a risk that the involvement of real-world money might bring very real lawyers into play, and what the individual shard owner does after downloading UOX3 is not under our control.
Yes. UOX3 is Open-Source. Anyone can download, modify & re-distribute it at will, as long as they follow the terms of the GNU General Public License AND the specific addition for UOX3 saying:
"In addition to that license, if you are running this program or modified versions of it on a public system you HAVE TO make the complete source of the version used by you available or provide people with a location to download it."
Technically, yes. According to the UOX3-specific portion of the GPL license we use, if you're operating a UOX3 shard on a public system, you are obligated to make the source (and scripts required to run your version of it) available for the public to download. If you run a private shard that is not available to the public, this does not apply.
The reason for UOX3's amendment to GPL license is to encourage shard owners to share their specific enhancements, fixes and innovations with the wider UOX3 community, so we can all grow together. Of course, this being an open-source project ran by volunteers, we cannot force anyone to abide by the license. In the end, it comes down to each shard owner's own morals and ethics.
UOX was the first ever UO server emulator, and was created by Jaegermeister (Denny Zuko). However, it was short-lived, and Cironian aka Marcus Rating rewrote it from scratch and released it as UOX2.
Later on he rewrote UOX2 completely and released UOX3 - which he eventually also open-sourced. That is essentially still the same version we're using now, though quite a lot has changed, and a lot of people have contributed to the project in the decades that have passed since then!
If you need any help with UOX3, you have several options:
- You can peruse the UOX3 Documentation and help files (also available in your local UOX3/docs folder).
- You can post your problem on the UOX3 forums, or look up the solutions to similar problems experienced by other users.
- You can come visit us in our Discord server and talk with users and developers of UOX3 directly.
- You can check out Xuri's UOX3 Guide, which contains information on how to use many of the features available in UOX3.
UOX3 History and News Archive
The original background story for the UOX3 project - tells the story about why you wake up in a new world with a clean slate when installing and/or playing on an UOX3 shard for the first time! A MUST read :)
The History of UOX3 section of the UOX3 documentation contains a breakdown of virtually all UOX3 versions that have been released since the first public release of UOX3.
An unofficial list of people who have contributed to UOX3 codewise over the years. If you have done any coding for UOX3 that has ever been in the "official" UOX3 releases and your name is not on this list, let me know!
A general timeline of all known (to me) UO Emulators/Servers, including who started each one, and when. (Text-only version here)
Contains all source-changes made from version 0.37 to 0.70.02
Contains all source-changes made from v0.95.00 to v0.97.00
Contains all source-changes made from February 2003 to present day. UOX3 version number uncertain, but estimated version at start of this file is around 0.97.06.1j.
Archived news from July 2005 to May 2006
Archived news from February 2005 to July 2005
Archived news from September 2003 to January 2005
Archived news from May to August 2003
Archived news from January to April 2003
Archived news from September to December 2002