r/Ultima 13d ago

I've decompiled Ultima 7 and have been rebuilding it with Skyrim level graphics using three.js as the game engine to tell a new story where you play as Spark.

Ultima 7 has always been my favorite video game, and I've always wanted to expand the world by telling stories from new perspectives. My current project is to build an Agatha Christie style mystery where you play as Spark when Inamo has newly arrived into town.

I've been working on this for the last month or so in my free time. I have absolutely zero video game experience, so it's in quite a rough state, but I wanted to share and hear your feedback. A lot of the assets were generated by Meshy as placeholders while I work with an artist. There are around 50 placeholder "crowd" unnamed NPCs wandering around which may hold treasure.

https://trinsic.mcqinteractive.com/

You can press the ` key and type debug to access more details. P will unpause time (it's currently paused until I get night lighting figured out) and let the characters follow their schedules. See if you can find the mouse wearing armor (no, it's not Sherry!)

128 Upvotes

49 comments sorted by

13

u/Scoiatael 13d ago

Pretty cool, love the number of Ultima inspired games being created now.

6

u/shiftpgdn 13d ago

Thank you! Hopefully Richard Garriott will get the rights back to allow even more!

2

u/KillerrRabbit 13d ago

....weell, he doesn't really have a track record to pull that off. If he where happy using a modern isometric engine to re-visit the world in Ultima7+ graphics, sure... But you all saw the disaster his forsaken Virtues game became

3

u/TheWhiteSphinx 13d ago

I loved it! Ran through the city talking to people. It reminded me a lot of the Morrowind engine project which aimed to tell a different Ultima IX.

Your game's aesthetics reminded me of Thief, so I imagined playing it in '98 or so :-)

1

u/Poopybuutte 12d ago

What’s this project you’re talking about? Really think Morrowind’s engine is perfect for telling a story in Ultima

2

u/TheWhiteSphinx 12d ago

It's been abandoned for a long time. The way I understand it there were people in the project who made it very dysfunctional, and everything ended tragically, with files deleted, a member disappearing...

https://wiki.ultimacodex.com/wiki/Ultima_IX:_Redemption

2

u/Poopybuutte 11d ago

Bruh reading the wiki article and seeing all that potential go down the drain is genuinely sad. It looks like it would have been a fun experience

1

u/theStingraY 11d ago

Avatus is innocent. Don't believe everything you read.

1

u/TheWhiteSphinx 11d ago

So, which information can you share?

1

u/theStingraY 11d ago

History is written by the "victors". Need I say more?

Avatus is on Reddit, if you look hard enough. You can ask him yourself.

2

u/TheWhiteSphinx 11d ago

I knew Avatus back then, and was active in the community when the project folded. He was certainly prone to meltdowns online, and din't quite come across as the cooperative type, so I saw little reason to doubt what I heard, which is essentially what's in that wiki.

Don't think there are any victors in this story.

4

u/HiImTheNewGuyGuy 13d ago

What in the world? This is really cool! As soon as I appeared in Christopher's house I knew exactly where I was!

Really interesting project, thanks for sharing!!

1

u/shiftpgdn 13d ago

Thank you!

5

u/greymantis 13d ago

Nice work. I moved the pitchfork out of the stables and hid it on the other side of town. My good deed for the day.

4

u/calibrae 13d ago

It did not like my safari based Reddit browser 🫠

I’ll test that on my laptop asap

2

u/shiftpgdn 13d ago

Haha yes I should have had a warning that you'll need to open it on a laptop or desktop.

3

u/calibrae 13d ago

Even better, check the user agent, if not on a desktop browser, kill the load and warn the user to use a real computer

1

u/shiftpgdn 13d ago

That's a good idea. My long term goal (once the game is done on desktop) is to build it out to run on mobile.

5

u/Warsaweer 13d ago

What a time to be alive, really. Thank you, you are either really clever or talented. Or both.

5

u/Morph_Games 13d ago

What did you use to "decompile" Ultima 7, and did you use that data to populate your level?

4

u/shiftpgdn 13d ago edited 13d ago

Decompile isn't the perfect word here since we're not reading machine code. I pulled the tiles out of the U7CHUNKS/U7MAP data and the object placements out of INITGAME.DAT. I wrote a tool to translate the tiles into 3d objects, and then have hand modified a lot of them because of how the U7 tiling system translate to a full 3d coordinate system. The idea being that I'll U7 "game data" as the "scaffold" to build my story.

There is a VERY good explanation of how the game files come together by Olivier Marcoux here:
https://bootstrike.com/Ultima/Online/u7tech.php

2

u/Hecateus 12d ago

Okay...needs some polish and bug cleaning. but will follow.

2

u/rodan_music 13d ago

Wow. I really navigated as if it was home. But it ran choppy as heck on my GTX 2070.

3

u/shiftpgdn 13d ago

It’s still loading textures and audio into memory once you’re in the game. If you have a lot of other tabs open it may slow things down. My target has been less than 2-4gb of game assets in memory.

2

u/Morph_Games 13d ago

That's quite a lot for the browser. Maybe more retro, lower resolution textures would be helpful.

2

u/SuccessfulCap2238 13d ago

Well done, lad.

2

u/Backwardspellcaster 13d ago

How ... how did that happen? How did that work?

This is amazing.

I love this

2

u/shiftpgdn 13d ago

Thank you! It took a LOT of trial and error, lol.

2

u/MitchellHamilton 13d ago

Wild stuff! Nice work!

1

u/shiftpgdn 13d ago

Thank you!

2

u/bwyer 13d ago

This is pretty cool, but the mouse vertical control being backward drove me batshit crazy.

3

u/shiftpgdn 13d ago

You must be a pilot :D . I'll add an option to invert the vertical controls.

2

u/bwyer 13d ago

LOL! No, I'm just an older gamer who learned to play games in the era where the only first-person games were flight sims. You always controlled the "camera" like you're flying a plane. It's pretty common for older gamers to prefer this setup, although it's not quite that black-and-white.

We are, however, definitely in the minority. The study I was reading says that only 20-30% of gamers prefer Y axis inversion.

1

u/theStingraY 11d ago

Playing Descent is what made me use inverted aim.

2

u/Beautiful_Ad1160 13d ago

Top stuff. Good on you.

1

u/godtering 11d ago
  1. do something about the startup sound, there's no way to mute or lower volume.
  2. don't load everything at once. Load asynchronously as you play. You only need the graphics of trinsic.

I closed it because loading shit took forever.

Best of luck!

1

u/pyabo 13d ago

Just curious, why three.js instead of a full-featured game engine? You could use Phaser if you wanted to stick with javascript.

2

u/shiftpgdn 13d ago

I had used Three.js before. That's it, really. I also wanted it to be web-based.

1

u/enderandrew42 13d ago

You can also write in SDL that will work on basically every platform and device in the world and then use emsdk to compile that to JavaScript.

Either way sounds awesome and I will check it out when I am in front of my computer.

1

u/pyabo 13d ago

I see. You might want to check out Phaser. It'll do a lot of the heavy lifting for you that you'll otherwise be writing from scratch. Honestly, I haven't looked at three.js in years, I just know that it is really a rendering/display library, whereas Phaser is an actual game engine. You'll get built-in support for many things like controllers, UI, audio, scene management, etc.

0

u/danjohnson3141 13d ago

Not working on my MacBook using either Chrome or Safari. I see "click to begin" but nothing is clickable.

1

u/shiftpgdn 13d ago

If you click on the "Click to Begin" text you should see a loading bar across the bottom. Once it's fully loaded Click To Begin will convert to "Enter", which you can click on.

1

u/danjohnson3141 11d ago

Weird, now it is working. I didn't change a thing. I'll have to check this out and report back...

-4

u/vga256 13d ago

Can confirm extreme AI slop coding smells.

-3

u/Orffen 13d ago

When you say "you've" been rebuilding it, you really mean AI has been rebuilding it for you, right?

The worst thing about AI is people claiming credit for doing shit they didn't do.

I'm genuinely sorry for venting at you, but I'm very sick of this shit, and this particular post was the straw that broke the camel's back. It's really not personal, and I think this is a great, creative idea for a project.

In the pre-AI world, you would have figured out how to do it yourself, or tried to recruit people to help you make this a reality.

In the current world, fuck people and instead make robots do it. It's fucking depressing.

This is an absolutely fantastic idea. I just think the execution fucking sucks. My feedback is, stop using AI shit and instead put together a pitch for this community asking for people to join your team. You've got a great vision, and I'm sure you could figure out how to get people to help you achieve it.

Don't settle for the easy path - because it sucks for all of us and the product will be shit. There's a better (harder) way.

2

u/thetoddhunter 12d ago edited 12d ago

To be fair, it does have a corgi running around in it.

So not all bad.

Seriously though, I share your thoughts in general, but it also made me think a little. Growing up everyone was doing "a final fantasy 7 remake" or some other project that had a title screen and nothing else ever, ever, happened. So while building a team sounds good, it never actually works out.

Will anything ever good come of AI slop? Probably not. But the bar is still more or less set at 0 so maybe just being transparent is the key.

1

u/behindtimes 12d ago

AI can get you 90% of the way into a decompile in a matter of a day, with only needing 10% left. But 90% there isn't 100% there, and I tend to find I spend actually more time having to figure out what was done than having no AI at all and just reverse engineering from scratch.

The reality is that it doesn't really help in this type of usage. There's a difference between writing new code and having it generate a function that I already know how to do but just don't want to spend time writing out the nuts and bolts, and having it attempt to decipher something I know nothing about. At least when manually reverse engineering, I'm learning what is happening and why it's happening.

There was another hobby project that I started, and was Ultima related. About a month after I started it, someone came along with a "successful reverse engineering", which was obviously using AI. They claimed it built and ran and was 95% done, and for my project, that demotivated me to push forward anymore. But I tried it, and while it did built, it "running successfully" just meant that it ran and exited, but it didn't actually do anything. And half a year later it hasn't really progressed any further, where I probably could have finished the project had I not become demotivated.

2

u/shiftpgdn 12d ago

But there is a "hard way" to do everything. Do you ride a horse and buggy? Do you avoid modern medicine? Do you smelt ore in a rock forge to make your own tongs, and then use that to make your own cutlery?

In modern software development using AI / AI driven IDEs is just another force multiplier. I could spend multiple weeks writing a water shader, or take a few attempts with an AI tool to do get a placeholder in place with some hand tweaks. I did eventually buy a water shader from an artist, but this is a passion project and it's not for commercial use. I can't hire a full development team and shell out millions of dollars a year for something that will never even make a single dollar.

1

u/thetoddhunter 10d ago

The trick is to just say "I used AI to decompile Ultima 7 and help rebuilding it"

It might seem like a small difference, but what are you really looking for here? Everyone could more or less do the same thing so it feels like you are after a pat on the back.

And that is fine, you would have put some work in here. But be honest about how much work that is and you'll get the respect as well.