Introducing REFDoor

By | June 22, 2020

I had several sources of inspiration when working on Darkness 2.0’s simple “DRS” scripting language, from some specific dialects of BASIC to good old MS-DOS Batch. In the end, it most closely resembles a combination of the Exitilus Quest Scripting language (EQS) and RTSoft‘s “REF” scripting language. Syntax aside, REF was definitely the bigger influence in even coming up with a scripting language in the first place, as it might have been my first real exposure to the concept.

I first stumbled upon REF back in 1995 when I randomly nabbed a copy of RTReader version .02, likely from Seth Robinson’s BBS itself. RTReader was a standalone interpreter door for REF, Seth’s own proprietary scripting language. The archive included a single script called “The Bloody Claw Newsletter” which included some updates from Seth on the state of RTSoft and some other random stuff. Most appealing of all, it was filled with Seth’s infamous brand of humor. As a huge Legend of the Red Dragon fan, I was captivated and eagerly awaited the release of the next issue. I also ended up taking a look at the included documentation and, while I remember being impressed, I was mostly puzzled about why someone would put so much effort into such a complicated engine for a relatively simple program. Of course, when Legend of the Red Dragon II: New World was finally publicly released a couple of years later I learned that the game was almost entirely scripted using REF, with RTReader itself likely morphing into LORD 2’s engine at some point. Very cool.

The What's New section of RTNEWS02.REF running in REFDoor

Despite the immense popularity of Seth’s other BBS doors, it seems that relatively few people are familiar with RTReader. While I’ve worked with quite a few similar scripting languages since then, I never forgot about it myself, and when trying to decide what DRS would look like, I dusted off the original RTREAD02.ZIP archive and reacquainted myself with the documentation. With Darkness 2.0 finally released and the nascent version of DRS out in the wild, I found myself thinking back to REF, and wondered if I could implement a scripting language like REF in the same way I had coded DRS’s interpreter.

You see, when coming up with DRS, a core concept was to keep it as simple as possible, both for creating new events with, but also in respect to how I’d implement it – I didn’t want to spend forever on what I knew would be a seldom used side feature, for one. What I ended up doing was interpreting DRS script files in “real time” parsing the file as I read it, line at a time. Most similar interpreters would instead load the entire script into memory, allowing for much faster and more dynamic access to the code. Of course, I ended up having to include some interesting little tricks to get things like hopping to labels that were defined earlier in the script file working, for instance, but in the end it all worked quite well.

So, with REF on my mind, I tossed around the idea of expanding DRS to be more REF like, or replacing it with REF entirely. I even pestered Seth to see if he had the rights to release RTReader’s source code (if he even still had it) so that I could peruse it, curious about how he had handled memory management since this would be the biggest single difference in our interpreters. Still, my original question lingered, could I do something like REF the same way as DRS?

Yes. Yes, I could!

REFDoor's built-in REF Picker Menu

Starting in September 2019 I worked sporadically on writing my own REF interpreter based on my Darkness 2.0 DRS code. Of course, I had to reverse engineer the entire thing – relying on a combination of referencing Seth’s original RTReader and LORD 2 REF documentation, numerous publicly released script files, and good old fashioned observation of how RTReader actually behaved which, quite often, wasn’t exactly 1:1 with what was documented. I did end up occasionally looking at the (incomplete) source code that Seth graciously released, as well as Rick Parrish’s LORD 2 clone‘s source code, but given the constraints of my goal for this new interpreter, I couldn’t exactly rely on either for much more than solving the occasional mystery. It ended up being a fairly large project by my standards (I did end up taking a solid 4 months off from the project right in the middle of it, in my defense) but getting RTWALL.REF and soon after RTNEWS02.REF (the aforementioned Bloody Claw Newsletter) to interpret 100% accurately in March were huge milestones that kept my momentum going decently from then on.

I ended up adding quite a few of LORD 2’s enhancements to the language, and even some of my own, while maintaining 100% backwards compatibility with RTReader. After emailing Seth for permission to include his original archives and him mentioning his LORD 2 REF based mini-game The Brady Bunch Adventure, I also added some additional LORD 2 compatibility to get it (mostly) working properly as well. In the end, I hope this release comes across as fairly polished – I put a lot of care into the features, the accuracy of their functionality, and the documentation.

Download v1.0.0 of REFDoor!

REFDoor is based on the usual XDoor 3.x door kit I use, meaning it’s available in a 16-bit MS-DOS FOSSIL friendly version, as well as a 32-bit Window DOOR32.SYS version. Both builds, as well as all of the aforementioned RTSoft REF scripts, are included in the archive. A big thank you to Seth for allowing me to include them!

The intro screen from BRADY.REF running in REFDoor

Keep in mind that if it’s not obvious by now, this was mostly a project I did for my own selfish purposes, so it’s practical uses are somewhat questionable. That being said, I do think some SysOps and/or developers might be able to make some good use of it – it would be a fairly effective way to make quick, custom doors for BBS software with limited built-in modification capabilities, for instance. Hey, if nothing else, you can easily setup The Brady Bunch Adventure on your 64-bit Windows BBS using it!

So, beyond that? Well, I’m still toying with the idea of adding REF functionality into Darkness 2.x for event and/or IGM creation. I’ve also started doing some prototyping on a new door game that would use REFDoor as a foundation, similar to what Seth did with LORD 2. Who knows for sure, but I had a lot of fun working on it.

You can read a little more on everything else mentioned here in the REFDoor documentation included in the archive if you somehow haven’t read enough already. Enjoy!

As a side note, the only version of RTReader I’ve ever seen is version .02, and it includes The Bloody Claw Newsletter Issue #2. Does anyone have or even know of the existence of an earlier (or later) version of RTReader and/or other issues of The Bloody Claw Newsletter?! If so, contact me!

1. The “What’s New At Robinson Technologies” section from The Bloody Claw Newsletter Issue 2
2. REFDoor’s built-in REF picker menu, which apes the look and functionality of RTReader
3. The introduction screen/menu from The Brady Bunch Adventure

2 thoughts on “Introducing REFDoor

  1. Tom Swartz

    I am happy that you have taken the time and efforts to complete your project. I will give it a whirl and see what comes up. Thanks!


Leave a Reply

Your email address will not be published. Required fields are marked *