Check Out “xu4 for Scratch”, a Scratch-Based Remake of “Ultima 4”

Scratch, if you aren’t familiar with it, is a kid-friendly visual coding language developed at MIT. Available on a variety of platforms, it presents would-be coders with visual abstractions for all of the various logical components of a programming language, making it easier to grasp how programs flow without getting too bogged down in the specifics of syntax.

In mid-2023, Jude Greer — having gained some familiarity with Scratch after working on it with his son — happened upon xu4, and decided to re-implement it using Scratch. After eight months of work, he finally had something he felt comfortable showing off, which he did by way of the xu4 forums at Sourceforge. You can read there about some of the technical limitations he had to overcome in order to re-implement every aspect of the game, but here’s a sample:

…the biggest challenge was definitely the 300 clone limit. In scratch, there can be a maximum of 300 “clones” of a sprite. And that limit is global – if I have sprite A with 100 clones, then sprite B can only have 200 clones. With an 11×11 map view (121 total), and the possibility of having many tiles that are meant to blend with the underlying tile (examining all the maps showed this maximum to be 61), I had only (300 – (121 + 61)) = 118 clones remaining to be used for everything else – party status strings, console messages, moon phases, wind, etc.

And if you’re curious about how the port plays, Jude has helpfully prepared a video, which can be viewed above.

The port also exceeds the maximum allowable size of a project that can be shared online via the Scratch community, which Jude laments will limit its reach and his ability to share it:

With such a massive amount of data packed into my project.json file (map data, conversation data, over 5000 costume names & filenames, etc.), mine clocked in at over 15MB when uncompressed. This of course resulted in a failure to save the project online, and the super-disappointing realization that this port would never receive much attention. 

Hopefully, making the port available at this newly-minted project entry here at the Codex will help add to the reach of Jude’s efforts!

4 Responses

  1. Jude Greer says:

    Wow, thank you so much for doing such a nice write-up on my Ultima IV port! Hopefully it drives a few views and some other folks will take a look. It’s weird because I stumbled onto this story due to my son as well – he was playing a bit of the U4 port on Scratch and I was telling him about Lord British / Richard Garriott, and what an interesting and adventurous life he’s led. Next day I came to my PC and found he had googled LB and clicked through to his twitter. From there I saw some retweets of ultimacodex links and lo and behold, there was a story about my little port! I’m not at all experienced with social media, so I never thought to post on X/twitter, but maybe I will (and try tagging LB/RG himself!)

    Thanks again!

    • WtF Dragon says:

      Happy to give your project a bit of added reach; it’s a heck of an undertaking, and the result is impressive (especially given the short timeline; many fan projects take way longer than 8 months to realize).

      Richard Garriott does engage quite a bit on X, especially about Ultima 4; you should definitely try and get on his radar about it.

      • Jude Greer says:

        I must give a massive shout out to the xu4 team. I consulted the source code for that project a lot, as well as their documentation of all of the binary assets from the original ultima. Since I had to basically convert all of the binary data into lists of text data, their documentation was invaluable when writing all of the python scripts I used to convert everything. Not to mention basically lifting all of their graphical and music assets. My scratch remake would not have been possible without that as a reference.

        Thanks for the note about Richard Garriott. Maybe he’ll notice it and re-tweet or something, that would be very flattering.

      • WtF Dragon says:

        I think you’ll find he’s taken notice.