Thanks, i am going through Inform7 so that i don’t “drive from memory” assuming that it’s just a programming language, but progress is slow. That’s to do with me…and a little tiny pico bit with the way the documentation and error messages are formatted. They are written for humans, they take time. I am used to (sometimes cryptic) one line error messages, like “syntax error line 2” not “I did not expect this. You see, you are defining a room attached to a pink whale. This is not making sense, probably due to an action you have not yet defined. You could try expressing this as…”.
Although i am trying to keep an open mind, i can’t avoid mappings such as (Thing, door, room, etc) are classes, (Before, after, etc) are standard methods (like onBeginOfTurn, onEnterRoom, etc), “Instead of” is a bit like overriding default behaviour, “In 5 minutes the fireworks explode / At the time when fireworks explode…” is about producing / consuming events, etc.
This is why, i wanted a map of the already defined stuff…For example, my first attempt at a room with a switch connected to a bulb took the long way around: Switch and bulb is a Thing…Right, now i have to write about the concepts of “switchability” and connectedness…What if i want the bulb to be warming up and cooling down? Property…Probably nominal…How do i define this? Then i turned the page and read about devices (DOH!).
The point about rigid / flexible is extremely interesting.
If IF is “special”, then it should require its own DSL which is supposed to encompass all of its special points. But if IF wants to be too general, then the constraints of the DSL might become so general that we are back to a general purpose programming language.
That was my idea initially. That TADS and Inform are providing access (very fancy access in the case of Inform7) to a set of standard related objects that can be reordered and customised to express a game. It turns out that they can do much more because they enable the definition of both the form and behaviour of new things and the redefinition of existing.
At the very least, i imagine a world composed of related objects and actions that accept the whole world as a parameter, change it and return it. Actions can be made to fire with specific pre or post conditions. An Interactive Fiction Reality CPU. But that’s already a general programming language.
Which brings me to my next question: What is the objective of IF? (and the languages of course)
Are we trying to TELL a story?
(In this case, the interaction is guided, it’s there to give prompts that will unfold the story, there are no dead-ends, if you start the story you will finish it, the game will make sure that you will finish it. It’s like reading a story in small chunks and you pass over some checkpoints).
Are we trying to let the reader DISCOVER the/a story?
(In this case, interaction is everything. I don’t want to “You find yourself in a featureless white room. The black rectangle next to the door is attracting your gaze. You wonder if it opens the door or turns on a light.”, instead i want to “He found himself in a featureless white room.”…OK, look around… “There is a black rectangle next to the door”…OK, push black rectangle…“The door opens with a metallic sound that fades to the hum of a coil”. In this case, dead-ends are allowed. The world doesn’t give you prompts. You have to think about your interactions for the story to move on.
The first mode is a bit like a guided presentation…you don’t need much programming capabilities. It could be seen as mindless traversing on a story tree if it wasn’t for the nice reading. It’s probably also easier for the reader to remember the narrative and retransmit it to friends like it’s done with classic stories.
The second mode is about world simulation and interaction with that world. In this case, everything is possible depending on context. In some earth-bound game you “Go north”, in some other world you “Fly up, land, dive, swim left” so there is a clear need for a general programming language. In this mode, there is still a story tree but now, if the simulation is just right, the tree of choices is so dense that the story might unfold differently over two play sessions. It’s probably harder for the reader to remember the narrative though…This becomes an experience. You tell your friends about the experience not the myth.
In this case, perhaps it is possible to compile Inform7 to an interpreted language such as Python. It could be possible to write some code in Python by overriding some standard classes or writing some new and then use Inform’s paradigm to express the game (the defined entities, their relationships and interactions) in a more natural form. I can’t try this at the moment, my knowledge of Inform’s language form is almost inexistent