PvP, the way it was in June 1998...?
PvP, the way it was in June 1998...?
I introduce to you UoDemo+ Publish 11, an Ultima Online Gold Demo Patch that enables PvP.
This has been on my hard disk for far too long and I want it out there.
As you all know by now, I've been spending a lot of (too much?) time inside this demo.
I analyzed the script parsing engine, created a decompiler for it.
I discovered lots of unused functions like writing back DYNAMIC0 and made patches to enable them.
DYNAMIC0 is what you can call the world state, it includes all player(s), shopkeepers and their inventories in one file. (The file even contains the accounts of OSI people who worked on the demo...)
I also discovered the demo contained many socket functions, that gave me the idea, does the demo supports multiple clients connecting to it? The demo is really more than just some demo guys, it's contains code from the real OSI servers from June 1998, there is no doubt about that. And yes, it supports multiple clients!
I discovered that the demo supports by default:
- bind/listen socket code (yes the demo is capable of listening to a port, the code just never gets called)
- accepting incomming connections (bind/listen is never enough, you need to accept connections too)
- a linked list to store multiple incoming sockets (connecting players that is)
- select API operations on the linked list (is data available/can data be sent/is error?)
- sending data to a socket
The demo is (read:was) missing:
- calls to the functions listed above
- WSAStartup (to initalize socket operations)
(WSAStartup is available and unused, but that's from the client side, not the server side)
- receive data from a socket
By analyzing the socket classes and by carefully modding the demo I was able to make it all work. I brought the unused pieces together and added the missing code like WSAStartup and receiving data from sockets.
There a currently a few limitations, these are:
- you can only connect to it with a patched uodemo to act as a pure client
(that is due to the many protocol changes OSI made, nothing I can do about that)
- the demo creates new accounts based on the "user's gameplay encryption key"
http://kec.cz/tartaros/steamengine/uplo ... cket00.htm
NOTE: the last two fields are not available in the demo, the packet length is 0x64 instead 0x68.
- when logging in, the demo uses your IP number as the account ID
(this is incompatible with the create account approach)
This means you have to create a new character every time you close the patched client
(I will patch the demo someday to modify this behaviour)
- Character names have to be UNIQUE! (as it was on OSI back then?)
- if you are running the demo in a Virtual Machine set the VM's priority class to Normal (for both active/inactive)
- Never connect to 127.0.0.1, the internal client of the uodemo uses that socket address, even though it's a linked list in memory, for your information, the socket handle is 0xBEEF (OSI humor?)
Now, the server starts listening on the port defined in the uogolddemo directory in the DAT file. By default this is port 10016. If you want to change that port you will need to extract all files from the DAT file and modify the server.txt file. If you set the port value to 0 the server function will be disabled. WSAStartup will always be called because that was really required to make my patch possible.
About the patched client: I named this beast UoDmClnt, you have to place the EXE somewhere . I don't care where. You have to create a file called UoDmClnt.cfg and place it in your UO game directory. The contents are "DemoServer=IP,PORT". For example "DemoServer=192.168.1.15,10016". This client is basically a patched uodemo.exe that disables the server code and connects to the IP address configured in UoDmClnt.cfg.
I hope some of you guys have the time to experiment with it, it would be interesting to have some of the UOSA timings verified or deverified. Just remember: it's June 1998, all patch notes after that are not in the demo this includes pre-casting and meditation.
Oh yeah, Razor and UOAM won't work .
The downloads are here:
UoDemo+: http://uodemo.joinuo.com/index.php?title=Uodemo%2B
UoDmClnt: http://uodemo.joinuo.com/index.php?title=UoDmClnt
EDIT: updated the links
This has been on my hard disk for far too long and I want it out there.
As you all know by now, I've been spending a lot of (too much?) time inside this demo.
I analyzed the script parsing engine, created a decompiler for it.
I discovered lots of unused functions like writing back DYNAMIC0 and made patches to enable them.
DYNAMIC0 is what you can call the world state, it includes all player(s), shopkeepers and their inventories in one file. (The file even contains the accounts of OSI people who worked on the demo...)
I also discovered the demo contained many socket functions, that gave me the idea, does the demo supports multiple clients connecting to it? The demo is really more than just some demo guys, it's contains code from the real OSI servers from June 1998, there is no doubt about that. And yes, it supports multiple clients!
I discovered that the demo supports by default:
- bind/listen socket code (yes the demo is capable of listening to a port, the code just never gets called)
- accepting incomming connections (bind/listen is never enough, you need to accept connections too)
- a linked list to store multiple incoming sockets (connecting players that is)
- select API operations on the linked list (is data available/can data be sent/is error?)
- sending data to a socket
The demo is (read:was) missing:
- calls to the functions listed above
- WSAStartup (to initalize socket operations)
(WSAStartup is available and unused, but that's from the client side, not the server side)
- receive data from a socket
By analyzing the socket classes and by carefully modding the demo I was able to make it all work. I brought the unused pieces together and added the missing code like WSAStartup and receiving data from sockets.
There a currently a few limitations, these are:
- you can only connect to it with a patched uodemo to act as a pure client
(that is due to the many protocol changes OSI made, nothing I can do about that)
- the demo creates new accounts based on the "user's gameplay encryption key"
http://kec.cz/tartaros/steamengine/uplo ... cket00.htm
NOTE: the last two fields are not available in the demo, the packet length is 0x64 instead 0x68.
- when logging in, the demo uses your IP number as the account ID
(this is incompatible with the create account approach)
This means you have to create a new character every time you close the patched client
(I will patch the demo someday to modify this behaviour)
- Character names have to be UNIQUE! (as it was on OSI back then?)
- if you are running the demo in a Virtual Machine set the VM's priority class to Normal (for both active/inactive)
- Never connect to 127.0.0.1, the internal client of the uodemo uses that socket address, even though it's a linked list in memory, for your information, the socket handle is 0xBEEF (OSI humor?)
Now, the server starts listening on the port defined in the uogolddemo directory in the DAT file. By default this is port 10016. If you want to change that port you will need to extract all files from the DAT file and modify the server.txt file. If you set the port value to 0 the server function will be disabled. WSAStartup will always be called because that was really required to make my patch possible.
About the patched client: I named this beast UoDmClnt, you have to place the EXE somewhere . I don't care where. You have to create a file called UoDmClnt.cfg and place it in your UO game directory. The contents are "DemoServer=IP,PORT". For example "DemoServer=192.168.1.15,10016". This client is basically a patched uodemo.exe that disables the server code and connects to the IP address configured in UoDmClnt.cfg.
I hope some of you guys have the time to experiment with it, it would be interesting to have some of the UOSA timings verified or deverified. Just remember: it's June 1998, all patch notes after that are not in the demo this includes pre-casting and meditation.
Oh yeah, Razor and UOAM won't work .
The downloads are here:
UoDemo+: http://uodemo.joinuo.com/index.php?title=Uodemo%2B
UoDmClnt: http://uodemo.joinuo.com/index.php?title=UoDmClnt
EDIT: updated the links
Last edited by Batlin on Sun Mar 28, 2010 5:12 pm, edited 1 time in total.
+ORC: If you give a man a crack he'll be hungry again tomorrow, but if you teach him how to crack, he'll never be hungry again.
chumbucket: I don't collect pixels.
Never trust the client. It's in the hands of the enemy : UO Demo internals @ JoinUO
chumbucket: I don't collect pixels.
Never trust the client. It's in the hands of the enemy : UO Demo internals @ JoinUO
Re: PvP, the way it was in June 1998...?
Wow. Very extensive and impressive work you've done.
There are lots of interesting things hidden in the code for the UODemo. I remember a looong time ago on a Sphere shard called Athlore that a guy by the name of Incognito used certain aspects of the demo's code to develop a God client that worked on Sphere shards. He could do everything from change his characters name/skills/appearance to being able to walk through walls and be totally invincible. I don't think he EVER shared it with anyone.
There are lots of interesting things hidden in the code for the UODemo. I remember a looong time ago on a Sphere shard called Athlore that a guy by the name of Incognito used certain aspects of the demo's code to develop a God client that worked on Sphere shards. He could do everything from change his characters name/skills/appearance to being able to walk through walls and be totally invincible. I don't think he EVER shared it with anyone.
Re: PvP, the way it was in June 1998...?
Just woke up, been hearing rumors about something like this upcoming... This is truly amazing, probably the most breakthrough work this shard will ever see on one matter. I can only imagine the time and dedication it took!
[22:26] <ian> why am i making 3750 empty kegs
[22:27] <ian> 1125000 for 3750 empty kegs
----------------------------------------
[10:44] <ian> a good cat is a dead cat
Re: PvP, the way it was in June 1998...?
"You need UO Gold to play the demo" this is the T2A install... Any ideas, other than reinstalling?
You should really hop in IRC at some point tonight or even ventrilo Baitlin, we'll all give it a go, but I'm sure we could use some direction.
You should really hop in IRC at some point tonight or even ventrilo Baitlin, we'll all give it a go, but I'm sure we could use some direction.
[22:26] <ian> why am i making 3750 empty kegs
[22:27] <ian> 1125000 for 3750 empty kegs
----------------------------------------
[10:44] <ian> a good cat is a dead cat
Re: PvP, the way it was in June 1998...?
Most definitly, I'm 99% sure the demo server supports the OSI GOD client. Many so-called GOD packets are supported and handled by the packet handler.There are lots of interesting things hidden in the code for the UODemo.
Yes. Do you have an old CD of Windows 95/98/2000/XP?Any ideas, other than reinstalling?
Then install Microsoft Virtual PC 2005 or 2007 and run a virtual windows.
or try Virtualbox http://www.virtualbox.org/
Sure, but my tonight is 4-5 hours earlier than your tonight, I think. But I'll be there as soon as I get home from work to help you out.You should really hop in IRC at some point tonight or even ventrilo >>>Batlin<<<, we'll all give it a go, but I'm sure we could use some direction.
+ORC: If you give a man a crack he'll be hungry again tomorrow, but if you teach him how to crack, he'll never be hungry again.
chumbucket: I don't collect pixels.
Never trust the client. It's in the hands of the enemy : UO Demo internals @ JoinUO
chumbucket: I don't collect pixels.
Never trust the client. It's in the hands of the enemy : UO Demo internals @ JoinUO
Re: PvP, the way it was in June 1998...?
This is truly amazing, thank you Batlin for helping me out and making sure I got it running. I'll see if I can get some port forwarding open tonight and set up a somewhat permanent server for a week or two for the demo, otherwise would be neat if someone did this... extremely cool.
[22:26] <ian> why am i making 3750 empty kegs
[22:27] <ian> 1125000 for 3750 empty kegs
----------------------------------------
[10:44] <ian> a good cat is a dead cat
Re: PvP, the way it was in June 1998...?
very interesting work here. i think this will shed some light on alot of game play mechanics that no other free shard developers have been able to replicate.
Re: PvP, the way it was in June 1998...?
This client probably works with uoextreme..In June 98 alot of the noto killas on osi Atlantic Shard were using uoextreme..This is really intense!.Good Luck..Hope to see it soon..
Re: PvP, the way it was in June 1998...?
Tried to get this to work but it just gets stuck at connecting; downloaded both files, can't help but think i'm missing something else. Any advice batlin?
"I consider most of you NPC's that inhabit the single player game that I am here to enjoy." - MatronDeWinter
Re: PvP, the way it was in June 1998...?
Did you run UoDemo+ first and then UoDmClnt? Message me in IRC and I'll help set you up.hiicha wrote:Tried to get this to work but it just gets stuck at connecting; downloaded both files, can't help but think i'm missing something else. Any advice batlin?
[22:26] <ian> why am i making 3750 empty kegs
[22:27] <ian> 1125000 for 3750 empty kegs
----------------------------------------
[10:44] <ian> a good cat is a dead cat
-
- Posts: 2
- Joined: Thu Aug 13, 2009 9:13 am
Re: PvP, the way it was in June 1998...?
This is very exciting! Is there anyway to maintain world state in between client instances?
I've had the UOdemo along with a T2A install backed up on an external harddrive for many years. At the time when I played there existed a tailoring imbalance which allowed for quick cash, so I worked for a whole day to accumulate around
10k gold and buy a boat, but just about when I broke 10k the client crashed and I lost the world state.
Is the rest of the game world populated if you manage to get out of Occlo?
I've had the UOdemo along with a T2A install backed up on an external harddrive for many years. At the time when I played there existed a tailoring imbalance which allowed for quick cash, so I worked for a whole day to accumulate around
10k gold and buy a boat, but just about when I broke 10k the client crashed and I lost the world state.
Is the rest of the game world populated if you manage to get out of Occlo?
Re: PvP, the way it was in June 1998...?
There is. Start the "uodemo+" with an environment variable "SET SAVEDYNAMIC0=YES". The world state is only "saved" when you exit the demo, it's not saved regullary but this could be implemented.This is very exciting! Is there anyway to maintain world state in between client instances?
Do you remember the method?At the time when I played there existed a tailoring imbalance which allowed for quick cash, so I worked for a whole day to accumulate around.
Boats are broken and without hacking the game state (or implementing a teleport script) and overwrite some of the server data files (inside uodemo.dat) you cannot get out of the world without making the demo crash. I managed to get out and let me tell you : there is NOTHING but the same graphics you can see with InsideUO. You can't even mine or lumberjack because the data file for the resources only include Occlo.Is the rest of the game world populated if you manage to get out of Occlo?
+ORC: If you give a man a crack he'll be hungry again tomorrow, but if you teach him how to crack, he'll never be hungry again.
chumbucket: I don't collect pixels.
Never trust the client. It's in the hands of the enemy : UO Demo internals @ JoinUO
chumbucket: I don't collect pixels.
Never trust the client. It's in the hands of the enemy : UO Demo internals @ JoinUO
-
- Posts: 2
- Joined: Thu Aug 13, 2009 9:13 am
Re: PvP, the way it was in June 1998...?
Very interesting! Thank you.
Nope, it was quite a long time ago! Sorry.Do you remember the method?
Re: PvP, the way it was in June 1998...?
I truley hope some people put some work into this. I have enjoyed playing on UOSA for quite some time but as the combat has changed it is no longer realistic and i've lost interest to the point of ready to leave this shard.
Mr.Brown wrote:peace out bro hopefully you can play again..you taught me t2a pvp!
Nevermore wrote:Besides just by playing the shard, vets will have plenty of things that most people who haven't been around as long don't.
Re: PvP, the way it was in June 1998...?
Managed to make godclient login until character creation, at this place, client trying to create character, but handles there, character not created on server.
This is becouse character creation packet have 0x68 bytes length.
In other case, when trying to login with ip different from 127.0.0.1, never see already existing characters, server don't send any.
But they exist in dynamic0.mul.
When logging with 127.0.0.1 ip, can see Avatar, and created character with other client. But cannot login with it.
p.s. If anybody need godclient, icq or pm me.
To run godclient, you need ren client patched till 2.0.6c, the godclient is version 2.0.8n.
I have 2 clients, original, and noncrypted, to able to login i used noncrypted with EditServer property in uo.cfg.
If any knowledge about godclient needed, i can help, coded runuo to support most client functions including worldeditor, and some packets included in packetguide.
This is becouse character creation packet have 0x68 bytes length.
In other case, when trying to login with ip different from 127.0.0.1, never see already existing characters, server don't send any.
But they exist in dynamic0.mul.
When logging with 127.0.0.1 ip, can see Avatar, and created character with other client. But cannot login with it.
p.s. If anybody need godclient, icq or pm me.
To run godclient, you need ren client patched till 2.0.6c, the godclient is version 2.0.8n.
I have 2 clients, original, and noncrypted, to able to login i used noncrypted with EditServer property in uo.cfg.
If any knowledge about godclient needed, i can help, coded runuo to support most client functions including worldeditor, and some packets included in packetguide.