Fork me on GitHub

Bug tracker?

rlvm uses github's issue system. You can see currently reported bugs and report new bugs here:

Source Code?

The source code repository is on github. You can checkout the rlvm source code by cloning it:

$ git clone git://

Contributing code

rlvm's code was written in two stages: before I tried to write in a consistent style, and after I got the Google C++ Style Guide pounded into my brain. While there are still some files I haven't converted, the majority of the code is clean according to Google's

Patches should therefore conform to the Google C++ Style guide, with three exceptions:

  • C++ streams aren't banned.
  • Exceptions aren't banned.
  • Boost isn't banned.

Sending patches. Either:

Running Tests

rlvm has two test suites:

  • A set of tests using the googletest system. This contains unit tests and larger integration tests that use actual SEEN.TXT files to test things like flow control. These are only built if Haeleth's rldev assembler and disassembler are installed.

    Assuming everything was built, you can run the test suite by running:

    $ ./build/rlvmTests
  • A lua-backed system which simulates clicks and other user input and is used as a full integration test on actual games. As of this writing, there are lua scripts to drive all of Kanon, Air, Clannad and Princess Bride. While you can run individual paths, like this:
    $ ./build/luaRlvm ./test/Air_SE/Dream_Kano.lua /path/to/AIRSE
    But you will usually want to run an entire game at a time, like this:
    $ ./test/Kanon_SE/

Source Code Overview

Here's a description of some of the high level directory structure:

  • src/ - The rlvm source code proper.
    • Effects/ - LongOperations that work on the screen, for example, cross fades.
    • Encodings/ - Code mostly taken from Haeleth's rlBabel that converts from various encodings to UTF-8.
    • libReallive/ - A heavily modified version of Haeleth's libReallive. Used to parse the SEEN.TXT file into a stream of bytecode objects.
    • LongOperations/ - Tasks that are run while interpretting the bytecode from the SEEN.TXT is paused. For example, waiting for the user to click after some text has been displayed.
    • MachineBase/ - The core part of the interpreter. You are probably interested in RLMachine.hpp, the interpreter object, and RLOperation.hpp, which defines how a piece of C++ code is bound to an opcode in a SEEN.TXT file.
    • Modules/ - C++ definitions of RealLive opcodes.
    • Platforms/ - Per platform user interface elements and platform specific code.
    • Systems/
      • Base/ - Was supposed to be just base classes that needed to be implemented by the SDL/ directory. Has turned into a dumping ground. :(
      • SDL/ - SDL sound and graphics functions. Implements a bunch of interfaces from Base/.
    • Utilities/ - Random functions that don't belong anywhere else.
  • test/ - Our test suite, consisting of googletest tests, and a lua backed system that will input clicks and selections to test real games.
  • vendor/ - A mix of convenience copies and some xclannad code.