Reflections on Uru's 20th anniversary

Posted on

Today marks the 20th anniversary of the release of Uru: Ages Beyond Myst. That game had (and continues to have) a major impact on my life, and I wanted to write a bit about what it has meant to me.

Celebrating 20 years of Uru
Celebrating 20 years of Uru — banner by Patrick "Maurus" Mauro

Discovering Myst

I first discovered Myst around the year 2000, at the age of 9 or 10. My family had a Windows 98 computer which had shipped with a binder full of CD-ROMs ranging from Reader Rabbit and CorelDRAW to The Journeyman Project 3. Myst was one of the games in that binder, and my uncle had said good things about it.

I was hooked. There was something about those eerie, solitary, surreal worlds that captivated me.

I also got stuck, particularly on the Selenetic maze-runner, which eventually led me to searching on the Internet and finding a fansite with hints. That site led me to learn about Riven, Myst 3, and Mudpie.

After completing Myst, I begged my parents for Riven, and eventually Exile (although our Windows 98 computer didn't have a graphics card that could run it). I read all three Myst novels, and played through fan projects like D'ni Legacy. There were lots of fan websites with "explorable" Ages built with HTML imagemaps and 3D renders from tools like Bryce. I would dream about the kinds of worlds that I would write a Linking Book to if given the chance.

Uru, too late

I got the boxed disc for Uru: Ages Beyond Myst for my birthday in April 2004, and after playing a bit discovered that the online Uru Live portion had been cancelled. However I learned online about the To D'ni expansion, and the upcoming Path of the Shell. I also found a news item on the Guild of Greeters website about a flymode hack, which intrigued me enough to go looking for it. That led me to a website called COBBS, and a group of people calling themselves H'uru (for "Hacking Uru").

The H'uru folks had reverse engineered some of the game's data files, allowing for things like custom Python scripting and turning on/off SDL variables. Initially the goal was to explore the content that had been intended for the cancelled online story, but as tools became more advanced it took the form of texture swapping and digging deeper into the data structure for things like mesh data and colliders.

I was, at the time, someone who had learned some HTML and bought a single book on C/C++ programming that left me very confused. But the work the H'uru team was doing was interesting, and I slowly worked my way up from looking at data in a hex editor to reading C# code and eventually to writing a plugin for the PRPExplorer application. The H'uru developers were friendly and helpful, and I started hanging out in their IRC channel and learning more about both Uru's Plasma engine and about programming. I owe a lot to those folks who were very supportive of a kid just learning programming and trying to jump in the deep end.

Although I'd been interested in computer programming for a while, it's because of Uru that I actually picked up C# and started coding. I also learned some Python from both the game scripting and the ongoing pyprp Blender plugin for creating Uru content. Finally the dream of building and exploring my own Ages was becoming possible (to a certain extent).

CyanChat & community

After a year or so of hanging out in the H'uru IRC channels, and when the GameTap Uru-revival beta was starting in 2006, I started also hanging out in the CyanChat room. This was a Cyan's official chat room, built with Java Applets and using a custom ASCII protocol, but there were a few 3rd party chat clients available.

In addition to introducing me to a great group of people, CyanChat also gave me another opportunity to explore programming and software development. Writing my own CyanChat client was my first introduction to the idea of sockets, and I wrote or contributed to chat clients written in C#, Python, Perl, Ruby, C/C++, and JavaScript over the years. I wrote a CyanChat plugin for the open-source Pidgin messenger at one point, and started following the open-source development on that project. I can't say there's a definite correlation, but I will say that I haven't picked up any new programming languages since CyanChat shut down. Coincidence?

I've written a little bit previously about the personal impact of CyanChat and that group of people on my life. I'm incredibly thankful to have been in the right place at the right time to meet such supportive friends while going through high school and university. It was great to finally attend the Mysterium convention this year and meet some of them in person.

Developing as a developer

Nearing the end of high school in 2009, I knew that software development was something I wanted to explore further as a career. I was heavily involved in managing my school website at the time, and learning Linux and system administration skills, while also working on Uru tools with libHSPlasma. I had an advantage in university because I already understood a lot of the concepts in programming, and I had a long list of projects and open-source contributions on my résumé when applying for co-op internship positions.

It's because of that experience that I was hired at Ayogo, where I've worked for over a decade, and where jumping between languages and diving into unfamiliar code to troubleshoot has been an extremely useful skill.

Almost all the development work on Uru tools has been open-source with a distributed team, relying on IRC (and more recently also Discord) for coordination. That style of collaborative development and comfort with open-source communities has led me to contribute to numerous other projects, including Apache Cordova, and opened up countless opportunities for me.

Giving thanks

I wouldn't be the person I am today, or have the skills and experience or career that I do today, without Uru. So many of the things in my life can be directly traced back to this game.

I owe thanks to the H'uru folks (many of whom are no longer active) for the encouragement and mentorship when starting on my coding journey, to the Uru community for keeping the game going all these years. A special shout-out to Cyan's Mark DeForest as well: Back around early 2008 I sent him an email asking a technical question about how something in Uru worked, with the goal of implementing that feature in the pyprp Blender plugin. He replied with a full explanation of the feature and some recommendations for exposing it to artists, and it meant so much to me that he took the time to respond and offer encouragement to me as a 16-year-old emailing out of the blue.

I'm not one to predict the future, but there is some exciting work happening in the open-source Uru codebase that I hope people will get to experience soon. I continue to work (at the speed of molasses) on the Linux and OpenGL port, and that project is yet another example of how this game pushes me to pick up new skills and experience.