Ramus is a system for authoring (and reading) self-contained non-linear documents, a.k.a. hypertext. Though not exactly a game engine, it can be used to make one, as well as learning tools and interactive literature.
Ramus is more than a little inspired by Undum, which I think is a very good concept, needlessly complicated.
In fact, I see Ramus more as a starting point than a finished product — which it isn't in any event! For a more complete solution that preserves the simplicity, see Squiffy.
On 2012-03-17, I got around to finishing my port of Starborn to Ramus.
The 2012-01-22 release includes an example of how to link to several fragments at once, and a new F.A.Q.
As of 2011-07-06, the full version features smooth scrolling. I also fixed a bug whereas the starting fragment was not being parsed for templates when initially displayed.
License? What license? All right, here we go:
If you are asking what license this software is released under, you are asking the wrong question.
Last but not least, for a real-world example see my port of Starborn, by Juhana Leinonen. Starborn is covered by the MIT License. Other works were made with Ramus; see the official website for details.
Ramus was made by Felix Pleşoianu, with the help of two excellent libraries:
Smooth scrolling code based on this ITnewb tutorial.
Textallion, an electronic literature preprocessor, supports Ramus as an output format.
While Mold is quite rich in functionality, the two template operators you're likely to use the most are
[?do ... ?] and
[?do passport_taken = true; ?] and test them like this:
[?if passport_taken?] Blah [?if.?].
Another construct of interest is
[?do clear_links(); ?] -- it calls a built-in Ramus function which makes all previous links vanish, in case you want to funnel the reader into just the current choices. Otherwise they can go back and try something else, as if they were reading a paper gamebook. I'm okay with that, but other authors may not be. There is also a
[? clear_text(); ?] call which erases all previous text, starting with a blank slate.
[?do clear_links(); ?]somewhere inside it. Or you could use
[?do clear_text(); ?]instead to clear the previous text completely.