mentioned I was working on quite a while back. If you missed those
posts, Mercury was conceived as a replacement for the Adv3 library
that's closer to the TADS 2 level of complexity. It's not a port of
the TADS 2 library by any means, but it's meant to be comparable to
TADS 2 in terms of learning curve and programming workload. This
would let people who are happier with the TADS 2 way of doing things
migrate to the TADS 3 language and VM, which have a lot of benefits
separate from the the Adv3 library.
The work I did on Mercury back at the time of those posts motivated a
lot of the enhancements I've been adding to the language in the
meantime. Unfortunately, the language work has taken all my time, so
Mercury has been pretty much in cold storage. I've finally wrapped up
most of the language work I had in mind (although the list keeps
growing the more I work on it), so I'm at a point where I could turn
to Mercury again.
Rather than resuming the Mercury work in my secret underground
laboratory, though, I'm going to try something different and publish
what I have so far, incomplete and half-baked as it is. I have two
things in mind publishing it. The first is collaboration: a couple of
people have expressed interest in actively joining in on the project.
There are enough independent pieces in this project that I think a
collaborative approach could work well to elaborate it from its
current state into a full library.
The second is to provide a starting point for independent library
projects. Adv3 is a big scary monolith. Mercury has at its core a
fairly modular parser. If, for example, someone wanted to more or
less literally port the TADS 2 adv.t library to TADS 3, I think the
Mercury parser would make a great starting point by standing in for
the built-in TADS 2 parser. I think you could combine the Mercury
parser with the TADS 2 world model and command execution model and
have something going in fairly short order.
I want to emphasize that the library in its current state is
completely unusable for writing games. It's not done or even nearly
done. Some parts (notably the parser) are mostly there, but many
components that are absolutely necessary for writing IF are either
missing or are just placeholders. I've built it and done a little
playing around to make sure it's mostly working with the latest 3.1.1
build, but be aware that this isn't production quality code, or even
beta, or really even alpha - I don't think they have a Greek letter
for this level of roughness.
Here are the downloads:
I'll post shortly with some more details on (a) what's in the
current library, and (b) my ideas for completing it.