So I posed myself a few questions, or one major question rather.

What drives a text game? Well obviously text, but more specifically, user input.

So that lead to more questions. Like, how do we interpret user commands?

Well I figure the game itself decides how to respond to a command. In a text game theres only so many things you can be doing, so there must be a set of commands that correspond with whatever we're doing at the moment.

So what systems will be at work here? Well, I guess at any given time in a text adventure game, you could be fighting a monster, talking to a character, or navigating your inventory. I figure for each "state" theres only a certain few commands that will have any meaning. for fighting we will have attack, defend, spells, etc. Something like this...

Code:
class GameMode
{
public:
	// needs a list of valid commands
	// needs a virtual function that compares input
	// to the list of valid commands, when a match is made
	// act accordingly.
private:

};
So there we have our translator, it's pretty simple in theory. We could have a virtual function which is overridden for every type of game mode we have, be it fighting or talking to a non player character, or NPC. All game modes will have a list of commands that work in conjunction with that mode.

So we have our flow of data. Handled by a simple user interface that accepts commands, sends it to the game logic to be interpreted, which sends back output to the interface, which displays it on the screen for us. Which we respond to, restarting the whole process.

I guess after that we have to remember that there is more than just a text system at work here. The game modes not only have to interpret commands and send back a string to the player of the game, it has to take commands like "attack" and actually perform the logic required to do that. Maybe we can divide the chain of command up a bit more even?

Perhaps a command is sent to the interpreter, which delegates to a script engine which then provides our text. The command could also be sent from the interpreter to various systems within the game, depending on the situation. An attack command could be sent to the scripting engine to display how much damage you've done, or taken, or whatever, while also sending it to the battle system for actual computation.

Feedback?