Traveller’s Solas (2019)

Traveller’s Solas is an interactive narrative demo, presented in the style of a classic text adventure game. It was developed in Twine as a solo project, in order to demonstrate the features of a robust, data-driven framework for creating text adventure games, which is currently in development.

As the sole developer, I was responsible for writing, designing, and programming the game. My goal was to build a framework that would be re-usable for other games without requiring additional programming. This was achieved with a combination of CSS, JavaScript, and TwineScript, which separated the technical features from the content of the game.

The two core features that I developed were the interaction system, and the game objects. The interaction system provides players with a list of actions in the sidebar, which can be selected by either clicking the word, or typing the corresponding key. This will act on whatever the player is currently looking at, or prompt the player to select an object to act on.

The game objects form the second half of this system, allowing the entire data of the game to be loaded from generic JavaScript objects, defined in individual Twine passages. This includes rooms, items, special events, character dialogue, and more. The descriptions and interactions are shown on screen, with interactive objects becoming clickable links that the player can perform actions on.

For this system to work, I developed a handful of Twine widgets. For example, the “This” widget is used in object descriptions, to create a clickable link with the name of the object being described, and the “Describe” widget displays the description of a given object, and can be used to append the description of other objects in the world. Other widgets exist for creating textboxes and UI elements as needed.

I also created a custom “Draw” widget, which renders pixel art using colored text. The code for these widgets was generated externally with a C# console program which I developed, to convert each pixel of an image into the appropriate line of HTML.

Finally, there are also several JavaScript functions which allow for special event handling. This allows the developer to define how interactions with an object may change the state of the game, such as a key opening a locked door, or a character leaving the room. These functions can be called from any of the game objects, whether it be an interaction with an item, or a specific branch of character dialogue.


Link to

Comments are closed.