Hello everyone - I’ve been spending the last six months of evenings and weekends on an open source C# Ultima Online client, and I'd like to share the progress that has been made.

ai.imgur.com_bSjPtFV.jpg
Click here to see a few more pics of UO rendered in FullHD @ 60fps!

UltimaXNA is an Ultima Online client which I hope will eventually match the Legacy Client’s feature set as of Mondain’s Legacy, but running in FullHD resolution at 60fps. I started this project back in 2009, and have worked on it intermittently since. In March of 2015 I decided it was almost complete and that it needed a serious push to finish it for good. Six months later, with the help of many other contributors, we have completed about 90% of the features that are necessary for daily play. We are now working on finishing the remaining features, fixing bugs, and handling edge cases that are inevitable in trying to recreate a program that is almost 20 years old.

Features:
* Login/authentication
* character creation
* map/static/item/mobile/spell rendering
* animations
* combat
* gumps
* chat
* movement
* localization
* the minimap
* audio
* cursors/targeting
* inventory
* notoriety
* spells (magery only at the moment)
* housing (custom housing not yet implemented)
* light level
* paperdolls
* a good start on the options menu
* the journal
* vendor buy/sell menus,
* ...a host of other features that I’m sure I’ve forgotten about.

And it can display the world in resolutions up to 1920x1200 at a silky smooth 60fps. What an upgrade!

The codebase is open source and licensed under GPL3+. In total, the codebase is 66k sloc, using the XNA framework for graphics and audio and Win32 for input and networking. I would not have been able to do this by myself: this has been a shared endeavor with many people contributing code over the years, and if you are interested in contributing, we would love to work with you.

You can help finish the client by joining us on GitHub. Submit pull requests, bug reports, or just chime in: https://github.com/ZaneDubya/UltimaXNA

We are currently working on Milestone 0.7, which is a bugfix/minor feature push. You can take a look at the issues we are actively working on and see a list of previous Milestones here: https://github.com/ZaneDubya/UltimaXNA/milestones

As for future development… once the client matches ML, we will consider what else could be added. We currently have one person who is exploring the possibility of adding *.UOP support, which would add support for features added in Stygian Abyss. Others have dipped their toes into the effort necessary to port the client to MonoGame or Paradox3D, but as far as I know, no real progress has been done on porting at this time. I personally won’t look into it until the client matches ML.

Thank you for taking the time to read this - I’m heading out to a BBQ in an hour but will return to answer any questions you have.
 
Awsome Gratz!! Great work for all those coders involved with this UltimaXNA :) I can only imagine your excitement, with finally being able to share your hard work for all those years, looking forward to watching this involve to a community release :)
 
I am rather speechless. I thought that the xna client would fade away like many other uo related projects. Brings me joy to see you're immense progress in pulling it together and wrapping some things up. Still has a long ways to go yet this brings hope. I remember 'playing' with it after it was left untouched for a while, rather rough.

Silky Smooth 60fps eh? I suppose someone will need to upgrade the 15 frame animations to 60 frames. ;)
I'm guessing we'll need a better way to store things then the mul files to accommodate for some things. A more up to date structure.

Keep up the great work zane and thank you for sharing your progress with us!
also special thanks to the people who started the xna client!
 
Last edited:
Hello everyone - I’ve been spending the last six months of evenings and weekends on an open source C# Ultima Online client, and I'd like to share the progress that has been made.

View attachment 3677
Click here to see a few more pics of UO rendered in FullHD @ 60fps!

UltimaXNA is an Ultima Online client which I hope will eventually match the Legacy Client’s feature set as of Mondain’s Legacy, but running in FullHD resolution at 60fps. I started this project back in 2009, and have worked on it intermittently since. In March of 2015 I decided it was almost complete and that it needed a serious push to finish it for good. Six months later, with the help of many other contributors, we have completed about 90% of the features that are necessary for daily play. We are now working on finishing the remaining features, fixing bugs, and handling edge cases that are inevitable in trying to recreate a program that is almost 20 years old.

Features:
* Login/authentication
* character creation
* map/static/item/mobile/spell rendering
* animations
* combat
* gumps
* chat
* movement
* localization
* the minimap
* audio
* cursors/targeting
* inventory
* notoriety
* spells (magery only at the moment)
* housing (custom housing not yet implemented)
* light level
* paperdolls
* a good start on the options menu
* the journal
* vendor buy/sell menus,
* ...a host of other features that I’m sure I’ve forgotten about.

And it can display the world in resolutions up to 1920x1200 at a silky smooth 60fps. What an upgrade!

The codebase is open source and licensed under GPL3+. In total, the codebase is 66k sloc, using the XNA framework for graphics and audio and Win32 for input and networking. I would not have been able to do this by myself: this has been a shared endeavor with many people contributing code over the years, and if you are interested in contributing, we would love to work with you.

You can help finish the client by joining us on GitHub. Submit pull requests, bug reports, or just chime in: https://github.com/ZaneDubya/UltimaXNA

We are currently working on Milestone 0.7, which is a bugfix/minor feature push. You can take a look at the issues we are actively working on and see a list of previous Milestones here: https://github.com/ZaneDubya/UltimaXNA/milestones

As for future development… once the client matches ML, we will consider what else could be added. We currently have one person who is exploring the possibility of adding *.UOP support, which would add support for features added in Stygian Abyss. Others have dipped their toes into the effort necessary to port the client to MonoGame or Paradox3D, but as far as I know, no real progress has been done on porting at this time. I personally won’t look into it until the client matches ML.

Thank you for taking the time to read this - I’m heading out to a BBQ in an hour but will return to answer any questions you have.

looks awesome! would love to try it out.
i know it doesn't have uop support but might be able to convert uop to mul and use that to run it
 
Thanks for the kind words everyone. You have a positive community here and that's a credit to the members and admins.
Question, one thing I have always wondered about in the context of a new client would be the possibility of an action bar in the same vein as the one that exists for the enhanced client. So in this regard you can drag and drop items, skills, and macros on to the bar and then bind them to your various keybindings at your discretion.
That would certainly be achievable. The only problem I can think of with creating something like this would be aesthetic: given the different sizing of item graphics (and the different placement/orientation of the items within their graphic frame), it would be hard to create an action bar that looked great. This problem also vexed me when I was building the vendor buy/sell menu. WoW has lovely item icons, but there's no similar graphic resource for UO. How could we get around this issue?
 
looks awesome! would love to try it out.
i know it doesn't have uop support but might be able to convert uop to mul and use that to run it
Hopefully, someday, the client will have built in UOP support so this won't be necessary. We'll see. :)
 
Thanks for the kind words everyone. You have a positive community here and that's a credit to the members and admins.
That would certainly be achievable. The only problem I can think of with creating something like this would be aesthetic: given the different sizing of item graphics (and the different placement/orientation of the items within their graphic frame), it would be hard to create an action bar that looked great. This problem also vexed me when I was building the vendor buy/sell menu. WoW has lovely item icons, but there's no similar graphic resource for UO. How could we get around this issue?

don't know if it's possible but what about custom gump art that's loaded from the client files?
 
don't know if it's possible but what about custom gump art that's loaded from the client files?
You mean custom made icons? I like that idea! But that would require someone to actually create the icons. Given the huge, huge number of items, that would be a monumental task ;)
 
indeed it would be. there are some pretty talented artists on here and throughout the community that might be willing to help.

while we're this subject, i know a lot of people would love to have some kind of plugin function to load custom artwork for items, mobiles, etc.
i know you already have a lot on your plate, just putting it out there for future ideas.
 
while we're this subject, i know a lot of people would love to have some kind of plugin function to load custom artwork for items, mobiles, etc.
i know you already have a lot on your plate, just putting it out there for future ideas.
You're in luck! @The_Real_Jeff has already written a plugin system, and while plugins cannot override all functionality in the client, they can already do a ton. For example, the seasonal item translator is written as a plugin. What kind of functionality did you have in mind?
 
that's awesome!

well, i'm not big on custom files, but it would be nice to have custom gump art and static items (decorations, walls, etc).

i guess something easy for players to download, target the plugin file, and load the client.
that way they (players and developers) don't have to mess with custom files in their distro UO game files.
 
Hmm, from a coding standpoint I'm really ignorant about client development so I'll just post ideas but admittedly I'm just not really sure if these would be usable or not, but in no particular order perhaps...
1. Text would be 100% doable, and super easy to implement.
2. Existing icons would also work, and would likewise be extremely easy to implement.
3. Your staff member is way too generous with her time. I don't doubt there could be 100s of items that would need icons. ;)

Perhaps another option would be to analyze each item graphic to determine where the image portion is, and how big it is. With that information, it would be relatively easy to center small items (like potions of bandages) and simply show the upper-left extent of the image where it would be too big to fit in the icon dimensions. This would still not work for items like the spear, which is positioned within its graphic just so as to make the upper left portion of the graphic completely transparent. But it would work for most items...

Your idea for a hotbar is definitely interesting. Once the client is complete, one of the contributors might be interested in taking it up!

[[[edit]]] Then again, perhaps I'm being silly. Why should a spear be on the hotbar? I imagine this would only be used for consumables, spells, skills, and macros.
 
This project is very cool, i tried to post something earlier, but no words went out xD
I now have some questions/opinions/suggestions for you! :D

1: Are you going to implement the enhanced client feature stuffs? If you do, would you have the option to turn it on/off ingame?
2: Will there be a zoom feature? ex: zooming in/out from the character of some sort?
3: Will there be ingame map manipulation mechanics?
4: If someone with a different client connects elsewhere, what happens?
5: How are servers handled? Is it sort of the same way as the current emulators? (Aka command box)
6: Is there any support to display more that 3 lines of text over an item/mobile?
7: Do we still have the CTRL+Q and CTRL+W to iterate thru the last speeches?
8: Is the scrollbars on the journal working better than the faily EA client (clicking on the little arrows tend to jump)?
9: Is the movement for the NPCs realistic? As in, mobile with 0.1 speed will actually run instead of quick teleporting?
10: By chat you mean player chat or the chat on the top left toolbar?
11: Was the BBQ good? c:
 
Would it not be possible to create a single generic icon background that is used for all icons, and when they are rendered, the item's natural artwork can be centred using the same offsets used to draw tile in the game window?
Treat all icons as 50x50 to allow most items enough room to fit neatly and as you [Zane] suggested, clip the item artwork if it's out of bounds of the icon.
Being able to mouse-over the icon like with the Buff Icons Bar to display extra information, or a property list, would be enough to help the user know what they are clicking.
Most of this suggestion is based on how the Enhanced Client handles the grid-based containers.

Awesome project btw :p
 
I now have some questions/opinions/suggestions for you! :D
1: Are you going to implement the enhanced client feature stuffs? If you do, would you have the option to turn it on/off ingame?
There are no plans to implement enhanced client features: The goal is feature parity with the legacy client as of ML.
2: Will there be a zoom feature? ex: zooming in/out from the character of some sort?
Funny you should mention this - just today, I added code that zooms in 2x. I haven't tested other amounts; it is possible that our 2D engine would show some graphical bugs when zooming in by non-integer amounts. I don't see us adding zoom out functionality. If you want to see more of the world, you can expand the world window to 1920p; this in my mind is far better than zooming out.
3: Will there be ingame map manipulation mechanics?
No. This strikes me as a very cool feature, but something that would be more at home in a map editor program. This is only meant to be a client. That said, because it is 100% open source, anyone could add additional functionality.
4: If someone with a different client connects elsewhere, what happens?
The UO server sees the client as a legacy client. I don't understand exactly what you're asking, but I expect that the answer will be exactly the same as if you had asked, "What if I'm using the legacy client, and someone with another legacy client connects somewhere else, what happens?"
5: How are servers handled? Is it sort of the same way as the current emulators? (Aka command box)
I don't understand this question! Could you clarify? :)
6: Is there any support to display more that 3 lines of text over an item/mobile?
Yes. But overhead speech has not been finished. You can display any number of overheads over any mobile; however, they only last 5 seconds. Do you know how long text should last?
7: Do we still have the CTRL+Q and CTRL+W to iterate thru the last speeches?
Yes.
8: Is the scrollbars on the journal working better than the faily EA client (clicking on the little arrows tend to jump)?
It was, last time I checked. I recently rewrote the html layout engine (which is used by the journal to display text) and now the spacing is a little off. Nothing a little bug fixing can't fix.
9: Is the movement for the NPCs realistic? As in, mobile with 0.1 speed will actually run instead of quick teleporting?
I expect that the movement looks less jerky. But in the interest of giving the player the most up to date information, the client will automatically forward any moving mobile to the latest received move.
10: By chat you mean player chat or the chat on the top left toolbar?
We have not implemented the global chat system. But there is guild chat/command chat/alliance chat, etc.
11: Was the BBQ good? c:
Yes, thanks for asking! I had some great beers, kept confusing ron paul and rand paul, and invited three other couples to form a trivia team!
 
Sorry for the server-sided questions :p
I didn't understand what you meant by legacy client xD

There are no plans to implement enhanced client features: The goal is feature parity with the legacy client as of ML.
You are a king! :D
 
Did you think to add those features?

1) support to 3d models
2) supports to not-mulbased bmp (it should be pretty easy to make just using xna default library)
3) support 3d animations
4) support custom sprites
5)free editing of gumps
6) Cool documentation for editing purposes ( a wiki)
7) Support to new ultima online formats


now questions : did you try to build something with this new client?
Many items slow down the FPS ?
is it done the plugin support?
is LOS supported by the client itself instead of the server?
 
Last edited:
@Xen
The goal is parity with the legacy client as of ML. 3D is not supported. Custom sprites are supported, but they need to be included in the gumps. The gump loading routines can be overloaded by a plugin, so you could write a plugin that would load your own custom sprites fairly easily! Custom gumps can be written in C#, and you could add new ones as a plugin or by modifying the codebase. As for UOP file formats, there is no current support; one of the contributors is working on adding it, but no promises.

One of the contributors has noted that UltimaXNA can display far more items onscreen than the legacy client can without crashing. That said, with thousands of entities on screen, it does slow down. The slow down ends as soon as the entities are off screen. There is very likely room for improvement in this area.

LOS is based on what the server sends. The client does not do LOS checking.
 
  • Like
Reactions: Xen
it could be cool to add upgrades for 3d models and images via xna default system.
Did you try to build some building with new client? i'm courius about that.

However it seems to be a very good job ^^.
 
i mean did you try to build a house, a castle a dungeon etc... using your ultimaXNA client? did you see some difficulties placing items and so on?
 
@Xen No, I have not tried to build anything. I have nothing but respect for the serious map builders on this and other forums - I don't have the eye for design that would make my effort worth it. :) For what it's worth, there should not be any problems placing items, but I will make certain to pay better attention to this moving forward. Thank you for reminding me that I need to be focusing on the details. ;)
 
Zane, if it's within tolerance, would it be possible to allow the client to download, cache and display HTTP image sources?
It is currently possible with some hacky server-side code, but it would be awesome if the Html elements in gumps supported <img> tags (for example). Oh the endless possibilities :p

...If not, I'll take a crack at it when I get some free time :D
I'm actually quite excited to get stuck in and try to contribute something at least!
 
The possibilities that are opened up with client access are truly mind boggling.

Animated Gump elements? Why not? Want an ingame scrying spell that opens a second small client window at an arbitrary world location? Let's do it! Want a plugin to selectively stream differences on the static/map data? Totally possible.

So many limitations that the closed client represented that are suddenly potentially gone with an open client.
 
I'd just like to say the obvious,.. The project is open source. So all these cool ideas can be added by anyone who has the time, skill and desire to do so. Don't be shy, fork the project and make it to be your wildest dreams. :)
Everyone will benefit by more people taking interest in the code part of things.
 
Zane, if it's within tolerance, would it be possible to allow the client to download, cache and display HTTP image sources?
It is currently possible with some hacky server-side code, but it would be awesome if the Html elements in gumps supported <img> tags (for example). Oh the endless possibilities
This is not currently implemented. I like the idea though, and it would certainly be possible. I wish there was a way to collect 'cool ideas' like http image sourcing and the toolbar that was previously mentioned in this thread without cluttering up the current list of issues, which is focused on matching the legacy client.
 
Question : What should happen if i wish to use a bigger map than legacy one? Does the client crash or just work ?
 
Question : What should happen if i wish to use a bigger map than legacy one? Does the client crash or just work ?
As long as the client knew how large the map was in the y dimension (felucca and trammel are exactly 192 map chunks (each chunk being 8x8 tiles) in height), the client can figure the width of the map, and handle things from there. There is not currently a way to add a new map, but I could imagine a fairly simple interface where a plugin could call:

IResourceProvider resources = UltimaXNA.ServiceRegistry.GetService<IResourceProvider>();
resources.Maps.AddMap(mapIndex, chunkHeight, landFile.mul, staticFile.mul);
 
Back