Welcome to ifoman. ifoman is another tool to manage Interactive Fiction adventures. This tool will list projects, helps to build them and run them too.
I chose Python because I wanted to learn it and because I wanted to run the application on a RaspBerry Pi.
The software it is on an early stage. I am learning Python in my free time, and I use that new knowledge to build this software.
How to start
To start a demo version with embedded data you should run:
nohup python app.py 4040 &
There are two available users (user / password ): The admin user: admin / admin A normal user: user / user
The normal user contains two adventures: Infeccion. This adventure requires the Spanish Language extension. Infection. The same adventure as Infeccion, without the requirement of the Spanish Language extension.
If you are a brave people, and you like to inspect the code and to do all the work with your own hands, you can start the application with:
IFOMAN_HOME=$HOME/ifoman nohup python app.py 4040 &
IFOMAN_HOME environment variable is used as the storage path in production environment.
For the moment this is all. I need to write code for managing users, documentation about how to manage projects and details about path structure.
- Python 2.7
- web.py 0.3
- futures 3.2.0
- Parchment, more precise, the Inform7 build, available from here.
Please, unzip it at the following paths before build the adventure:
sudo pip install futures pyyaml webpy
web.py has a bug that must be fixed before running this sofwtare, or you will find problems related with concurrency. You need to patch the session.py. To find where web.py is installed:
sudo pip list -v | grep web\.py
You must replace the setItem method with the following code (extracted from https://github.com/webpy/webpy/issues/191):
def __setitem__(self, key, value): path = self._get_path(key) pickled = self.encode(value) try: f, tname = tempfile.mkstemp(dir=os.path.dirname(path)) try: os.write(f, pickled) finally: os.close(f) os.rename(tname, path) # atomary operation # os.chmod(path, MODE) # one may want it too as mkstemp() creates it 0600... except IOError: pass