From UODemo Wiki
Jump to: navigation, search

UO:98 is an extension to the UO Demo released by Origin Systems in 1998 on the Ultima Online:Second Age CD. The UO Demo (demo) is an offline tutorial for Ultima Online. The Demo featured only the town of Ocllo, and a quest that a player could complete while learning about the Game and Client. UO:98 unlocks many of the features that exist in the UO Demo such as the ability for others to connect with a regular UO Client, the ability to use the built in staff tools, and the expansion of the playing world to the entire map, and world saving. UO:98 also adds new features such as an accounting system, full world decoration, and support for later UO Client versions.

Starting UO:98
In Game
God Client support

Please see also the UO:98 forums at JoinUO


Download from UO98: HTTP (9.20 MB)

Installation prerequisites

In addition to requiring the Ultima Online:The Second Age CD, the UO:98 distribution also requires (at a minimum), the following software installed or available on the target platform.

  • Microsoft Windows XP, Vista or 7
  • Microsoft .Net 4.0 Client Profile.
  • Ultima Online Client version 1.25.35 through 5.x
    • (6.x packet protocols not yet implemented)

Installing UO:98

You must have the UO Client installed to your PC first. Note that under Windows 7 and Vista it is not recommended to install the UO Client in "Program Files" or on the root of the C drive (C:\) due to security issues with these folders. The installer will offer to direct you to the Download page for the Microsoft .Net 4.0 framework. If it is not installed at the time of installation you will need to re-run the installer after the completion of the Framework install. It's best practice to place the Ultima Online : The Second Age CD in your CD Rom drive before beginning the installation so that the installer can find your copy of the required UoDemoInstall.exe file on that disk. Installation should be relatively straightforward. If you have trouble, please visit the UO:98 forums for help

Using UO:98

As of the intial public release, UO:98 is started from the UO98 folder by running StartUO98.cmd. You may be prompted the first time the program is run to allow UODemo+.exe through your firewall. If you intend to allow connections to UO:98 from outside your local network, you should check the "public" in addition to "private" box in that dialog.

UO:98 supports the client version on the UO:T2A (1.25.35) through 5.x Unencrypted. You may use Razor to connect to UO:98, or modify the login.cfg file in your UO Client folder and use a decrypted version of the client. See UORice for more info on decrypting the client.

  • Server: <YOUR LAN ADDRESS> (not localhost or
  • Port: 2593

The server will not accept connections using localhost or Use your lan address. In windows you can determine your LAN address by typing ipconfig at the command prompt.

The default port for UO:98 is 2593'. This may be modified within the file UO98\rundir\UO98\server.txt.q It's not recommended at this time to modify fields other than <port XXX> in the server.txt.q file.

The server as distributed has one administrator account:

  • Username: Admin
  • Password: password

Additional accounts can be auto created by simply attempting login on a non-existent account.

The server auto saves hourly, writing to UO98/rundir/UO98. There is a copy of the distribution world files at http://svn.uo98.org/svn/public/UO98/Data/distro/ should you need to restore them. Typically only accounts.xml, dynamic0.mul.q, and dynidx.mul.q will need to be restored. These three files should be treated as a unit, and always be backed up and restored together.

Administrating UO:98

More administration tools are planned.

Currently the world is most easily modified with the "God Client" which you may be able to find out there somewhere on the web.


User accounts are stored in UO98/rundir/UO98/accounts.xml

To modify a user account level, you can modify the accessflags element of their account. You should do this when the server is shut down, as this file is overwritten on saves.

Standard values for accessflags are:

  • Player - No special Access
  • Editor - God Client Features (i.e., GM). See also: IsEditing
  • Admin - Editor, plus access to ]save and ]shutdown commands

In Game Commands

GM"cheat" Commands

These commands are implemented in the gmcheat.uosl script.

[spawn <templateid>
Creates a templated entity. Templates are defined in UO98/rundir/bank/templatestable.dat.q
[spawnitem <itemid>
Creates an item of itemid at the targeted location. Scripts are only added if the numeric item script exists (like 244.uosl.m.q)
[tele <X> <Y> [Z]
Teleports your to the specified map location. Z is optional.
[setskill <#> <val>
Sets your skill of # to the specified value (integer 0-100)
[setskill all <val>
Sets all your skills to the specified value (integer 0-100)
Lists all the numeric skill id's (for use in the setskill command)
[addscript <name>
Adds a names script to the targeted object. Scripts are not specified with file extensions. Example: [addscript heavy
Prints our your location.
[setname <new name>
Sets the name (RealName) of the target
Reports the global serial of the targeted object. See also: Objtoint
Reports the hue of the targeted object
Reports the height of the targeted object
Reports the Z location of the targeted object


These commands are built into UODemoDLL and are not scripted (note the ])

Saves the world to dynamic0.mul
]coun [me|<serial> [type]]
Makes the target (or yourself if "me") a counselor.
]ucoun [me|<serial>]
Unmakes the target a counselor
Shuts down the server, without save.
This simply verifies that the "SCommands" are working.

Handy Templates

Loaded spellbook
Reagent bag
100 gold
House deeds
Boat deeds

For more templates, look in UO98/rundir/bank/templatestable.dat.q

Handy Scripts

These are implementors for the god client Utility window commands, but may be used in the regular client by using [addscript ...

Give the targeted player access to GM Commands
Delete targeted item
Delete Targeted NPC (Don't Zap players!)
Makes the targeted Mobile invulnerable. Inverse is commandVulnerable
Kills the targeted mobile
Ressurrects the targeted mobile (player)
Freezes the targeted Mobile. Inverse is commandUnFreeze
Squelches the targeted Mobile. Inverse is commandUnSquelch
Sets the weight of an item to 255, making it immovable.

The commands that are prefixed with command are custom and the equivalent of the Utility window commands in the God Client. A complete list is in the Wombat Scripts project, filtered under Staff Tools/Custom Admin/CommandImplementors

How does it work

UO:98 is an attempt to bring the UO Demo mainstream by patching the Demo into a fully functional and administrable server.

The majority of the necessary basework via UoDemo+ has been available for some time. The UoDemoDLL project took UoDemo+ well beyond the chains imposed by having to make direct hacks to the UODemo.EXE, patches can now be applied or even un-applied during run-time; and new code can be added outside the executable and hooked to existing functions.

A new project called Sidekick was developed in Visual-C++ to be loaded by UoDemo using the UODEMODLL env variable. This Dll loads both Batlin's UoDemoDLL (In addition to some great patches, the Wombat API for in-memory patching), and also loads a C# managed DLL called Sharpkick. Sidekick acts as a Marshall between the unmanaged Borland C UoDemoDLL, and Sharpkick a Managed C#.Net DLL

Currently all packets can be intercepted and replaced or handled directly within C#. This gives the ability to handle the login sequence very elegantly within C#, and with access to all of the .Net framework for XML handling and file IO for account name translation to account numbers, which are accepted for login by UoDemo+.


Checkout UO:98 to the same folder that you installed the application to.
Confirm that you really want to checkout to an existing folder.
UO98 folder should look like this.

UO:98 development requires at a minimum Visual Studio 2010 with C# and C++, and the .Net 4.0 Framework. See the UODemoDLL section for additional optional requirements.

The UO:98 project is Copyright © 2011 JoinUO, and is Licensed under the Open Software License version 3.0

Getting the Source

The UO:98 source code is available on our public SVN.

You can checkout the public source directly to the folder which you installed UO:98 to. The SVN is not comprehensive, you need to install UO:98 using the Installer first.

The UO:98 SVN URL is: http://svn.uo98.org/svn/public/UO98

If not familiar with Subversion (SVN), in windows TortoiseSVN (as in the example on the right) is a easy to use tool for working with svn repositories. You can get the latest version here: http://tortoisesvn.net/downloads.html

To use TortoiseSVN to check out the solution:

  • Install Tortoise SVN, and reboot your PC.
  • Open Windows Explorer to the parent folder to which you installed UO98 (C:\ if you installed in c:\UO98)
  • Right click in an empty area of the folder choose "SVN Checkout..."
  • URL of repository: http://svn.uo98.org/svn/public/UO98
  • Checkout Directory: C:\UO98 (if that's where UO 98 is installed)
  • Click OK.
  • You will get a warning about checking out to an existing directory, click OK.
    • If you're not comfortable with SVN checkouts, you might want to make a backup copy of your UO98 folder before checking out. (this is probably good advice even if you are comfortable with SubVersion)
  • The files will be fetched to the UO98 folder. You will see a new folder in UO98 called DEV, and some of the existing folders and files will now have green checkmarks on them. This indicates their contents match the SVN versions.

If you make changes to files they will appear with a red X on them. This lets you know they were modified from the originals.

Any files and folders with a blue ? on them are items that are not present in the repository. The rundir has this mark, as it is not included in the distribution.

The Solution File


The UO:98 solution file, located un UO98\Dev\UO98.sln is made up of 5 projects. Only three of these projects are actually .Net projects, Scripts and UODemoDLL are in this solution for editing only.

Sharpkick is the primary project in the UO:98 solution. The Sidekick and UODemoDLL projects are used to transition from managed to unmanaged code, and interface with the running UODemo+.exe.

Sharpkick_Offline_Tests is a standard Unit Test project that uses the built in Microsoft Testing Framework. It's intended to test Everything within the Sharpkick project by using a mock of the Server Core. Coverage is currently substancially less than "everything".

There is an additional test framework that is built into Sidekick and UODemoDLL for running tests against the running UODemo. These tests can be executed by running UO98_TestMode.cmd. This will compile UODemoDLL, launch UODemo+, and execute the tests in UO98\Dev\UODemoDLL\src\Tests.c . Please see the UODemoDLL section of this guide regarding the requirements for compiling UODemoDLL.


To develop or compile the UODemoDLL you will need Borland C++ Compiler 5.5 and Turbo Assembler 5.0 (TASM). The build commands are configured so that these applications are expected to be installed in c:\borland\BCC55 and c:\borland\TASM

If your borland install folders differ from this, you may need to modify BCCPATH and TASMPATH in UO98/Dev/BUILDDLL.dll

There is a UODemoDLL project in the VS10 solution, this is for editing only. This is not VC++ code, and VS2010 cannot compile it.

To start UO98 with a recompile of the UoDemoDLL, run UO98.cmd in the UO98 folder. Running StartUO98.cmd will start UO:98 without compiling the UODemoDLL.


In addition to this UODemo wiki, The UO Demo forum on JoinUO has a lot of information on the UODemo internals.

We are anxious to meet other developers interested in the project. If you are excited about this project, please drop into the UO:98 forum and UODemo forum and say hello.


UO:98 is an joint effort of the JoinUO team. It was primarily developed by Batlin and Derrick and is based on the UODemoDLL project. Thanks much as well to Garrett, Rougan, and Kaivan for their efforts on the UODemo, God Client, and this project.