r/ultimaonline • u/wheredoifocus • 3h ago
Private • Showcase UO Custom Shard Minds
I have been a long time enjoyed of UO. I started in 1998 and played for a couple years. I came back a couple times to see how the game was fairing, and played a few private shards. But it has never felt like it back when you had to wait queued up because the servers were full. Seeing every place on the server packed with houses. Camping a spot waiting for a house to lapse its refresh timer and disappear so you could drop your own house and scoop everything else left behind. It was the people that you knew and played with every day. The guilds you joined. The castles you saved up to purchase. Thats all part of the experience that I have craved.
A couple years ago I decided to spin up a VM at home and run my own private shard. It was kinda fun to run around and fight on the old stomping grounds. But still missing the element that really makes the game fun.. the players. So I spun down the VM, but never deleted it. a month ago I turned it back on started down this path to make it into the thing I would enjoy again.
I have seen other people simulate the characters in the game with bot engines, and LLM's that run a character in the game. For me the bots wouldn't chat with you, and the LLM constantly breaks character and is so over engineered for the task at hand. So I decide that I need to find an alternative.
That alternative is a small language model trained specifically for the UO world. The first hurdle was getting enough material to train a model. And a strict rule for myself of only using the content from the game specifically, lore, manuals, in game NPC lines, in game books and manuscripts. The total text came to only 70K words. The model I wanted to build around was 100M parameters. That requires around 65 million words to train from. So the task of figuring out the best way to generate my own stories from that 70K primer began.
Using claude code I took the 70K primer we created a bible for making the rest of the stories. This set ridged parameters for what was accepted in the world. What the rules were. How people talked. All of the facts of the game. With that started my first run getting llm's to write the stories for me. The structures were loose at the start. And the further I got in it, the more I have come to realize how much I have to baby sit the stories being created.
I have 3 pcs running in my office dedicated to being teachers, trainers, and designers for the content. Constantly tweaking the settings and giving feedback on the text it is making. At 18.7 million words generated so far Its looking better and better. The last week along has been almost entirely spent rejecting stories so it can go through and rewrite a lot of what was already done.
By the sixth model I trained I realized that in order for these characters to be in the world, that I need them experience the world. To see, hear, smell, feel, and be emotionally invested in the world. They needed back stories and linage. That eventually every character in the game would need a family tree going back generations. That the stories I use to train them on are stories of those that came before them. To accomplish this, I also had to make a few in world changes.
First world change: I created a feedback for the environment that tells the Mind (model) when something changes around them. Scales the input based on how focused the Mind is on a task or a person. a dull moment in the shop they feel when the rain starts and stops, they hear the person come through the shop door behind them before they turn and see who it is. They think, they act, respond, and eventually they will adventure.
Second world change: The Minds are a single person, and unlike players they only get one person. So they need to be able to get wears. I added in so that they can take items to a smith be smelted down to the ore at a price. The smelter also offers to make items from your own ore. And in cities like minoc you can purchase different Ore or bars to store up to have grandmaster level armor or weapons made from it.
Third world change: I needed a way to bring goods between cities. So that you could at times find more rare and magical items from vendors. Some times for sale, and some times for helping them restock low raw items. This led to also creating a system for hunters to bring pelts, miners to bring ore, woodsman to bring lumber. So every city has a couple of these that go out and work each day to keep stock and to go abroad when the vendor in their city has to much.
Fourth world change: The last one led to this fun piece. The labors at the end of their day in most cases find their way to the local tavern after selling their materials. They chat about what they saw in the woods or the mines. Telling stories of monsters they encountered. In some cases they become the story that is told when they don't come back from the woods. This leads to the town cryer paying for someone to take down the monsters that killed the hunter/gather. The rewards are magical items. And you get to hear the gossip around town. And I have a wondering story teller that takes these stories from one region to the next over time. So you can hear about stories in other places as well.
Fifth world change: I recreated the original ecology environment that was in Ultima Online for the first 3 weeks of the game before players ruined it lol.
The Minds in the game are getting better and better as I tweak the base model. The base model contains all the facts of the game. And stories that reinforce them. Then I use a set of stories from the characters lived experiences to train the base model so you don't have to tell it in every prompt who it is and its motivations. With a 13.7 Million parameter model it uses only a 100 to 200 MB of system ram with a response time of .1 second. It has a context window of 1,024 tokens (words). It has 94% Genre recognition, recalls facts correctly 60% of the time. With zero out of world leaks. For replies you would expect in game I'm at 99%, with zero run on replies.
I also test the moods and emotions of the characters to gauge their persona that comes from their trained stories. My three main tested characters have a 35% spread in personality from the specific training. That means the context going in is completely about the moment they are living in. You don't load up the context with their backstory every time. They already know it and its part of them.
I have one mind running in Yew at the moment. This evenings run on generated stories is creating the back stories for the characters Mother, and Aunt that will be placed in game. The Aunt will come to visit from time to time, and the mother will work in the same shop. They will have been trained on about 65 to 45% shared experiences from their own perspective. This will be the test to see how well that holds up.
I know this was long, and I thank you if you got this far. I feel like I'm building out Westworld as I do this. And want to make sure that I'm doing it responsibly and with the best intentions. Its a daily adjustment as I improve on my own skills in guiding this creation and labor of love. The end game is to have dozens of these minds running around, adventuring together, making their own stories and lives. That I can jump in the game and find a group to adventure with. Who knows maybe some day someone with a lot more compute power can make a whole world filled to the max with these minds that live and experience the world as their own.



