a text adventure framework