SkillAgentSearch skills...

Textadv

An interactive fiction engine written in Python

Install / Use

/learn @kmill/Textadv
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

======= textadv

by Kyle Miller, 2011

The textadv package is a system written in python for creating interactive fiction (also known as text adventures) in Python. Where most interactive fiction engines seem to have their own programming language in which to write the games, the approach taken here was to create a domain-specific language for Python which makes writing these games easy. And, an added benefit is that we get to program in Python, so all of the standard libraries are included.

Unlike many interactive fiction engines, this one is purely rule-based (much like Inform 7).


Requirements

This system requires the tornado library for Python, and I implemented the system on Python 2.7. Beyond it working also in Python 2.6, I don't know if it works in other versions of Python.


Running the games

Run, with respect to the root of the repository,

$ ./startserver

Then, point your browser to the URL http://localhost:8888/


Generating documentation

Much of the engine is self-documenting. Run ./make_documentation from the root of the repository. To document a specific game, such as Cloak of Darkness, then run ./make_documentation cloak.py

The output is in ./doc (you may need to create this directory first).


Directory layout

The games directory contains three test games, testgame2.py (which has some enterable objects and a ball that's lit), isleadv.py (which is silly, but a very large test of the system), and cloak.py (which is the standard Cloak of Darkness). I would recommend trying isleadv.py and cloak.py and seeing its source code to get an idea of what this DSL is like.

Inside this folder is also the main textadv package (I'll label things as python packages now):

  • textadv.basicsetup

This imports everything you probably need. See isleadv.py for an example.

  • textadv.core

This package contains everything the main game system uses, which includes a pattern-matching system (patterns), a rule system (rulesystem).

  • textadv.gamesystem

This package contains the parser, the world model, the idea of a "game context," the relation model, and the action system. This package uses textadv.core heavily.

The module actionsystem is the definition of how a player action is checked and executed. See run_action in that module for more details.

The idea with contexts is that modal changes may occur in the game, and the hope is that these will help with these switches (for instance, it'll probably be possible to play a game inside the game without much difficulty. I haven't tried it yet).

The utilities module contains many useful utilities, including eval_str, which evaluates 'if' statements within strings, among other things.

The relations module contains models for one-to-many, many-to-many, etc. relations.

  • textadv.gameworld

This package contains the definitions of basic game objects like rooms, doors, and actors, and it contains the definitions of many of the basic actions a player may attempt on these objects.

  • textadv.tornado

This contains the web interface for playing the games. One runs 'python textadv/tornado/server.py' in the main repository, and then points a web browser to the URL 'http://localhost:8888/' to play.


Acknowledgements

Many ideas have been taken from reading about Inform 7 and TADS. I thank Zarf for codifying on his website ideas similar to the ones I was thinking about. Also, thanks to Will Doenlen, Steven Valdez, and Colleen Josephson for testing the engine.


History

Jul 2011 - Removed object system and made it purely rule-based

Jun 2011 - Implemented a new engine and got a small game working

Oct 2008 - Made an engine in Python, there were problems which made game definition much too complicated

View on GitHub
GitHub Stars14
CategoryDevelopment
Updated3y ago
Forks2

Languages

Python

Security Score

75/100

Audited on May 7, 2022

No findings