Can anyone think of any? (Interactive fiction or computer games in general.)
Were there any that unfolded over a period of _more_ than one day?
Were there any that could be set to correspond with _real_ time? (So, for
example, 7 AM in the game would correspond to 7 AM in real life.)
Infocom's _Border Zone_, of course. _The Mask of the Sun_ had a few real-time
events, such as the snake in the first pyramid, and the moving boulder in the
lava.
Possibly _The Serpent's Star_ has similar scenes, but I've never played it
very far.
> Were there any that unfolded over a period of _more_ than one day?
I think _The Mask of the Sun_ does. But that probably not what you're looking
for, since it's not *real* real-time.
> Were there any that could be set to correspond with _real_ time? (So, for
> example, 7 AM in the game would correspond to 7 AM in real life.)
I can't think of any.
---------------------------------------------------------------------
Miron Schmidt "Look, this isn't going to get
mi...@comports.com .oOo. any more exciting."
-- Andrew Plotkin, _So Far_
---------------------------------------------------------------------
NetHack, for one.
Just post to rec.games.roguelike.nethack asking for an e-mail response
about the effects that the time has upon your game.
No, the Z-machine is not really aware of an outside world.
In response to the several people who've asked about timed input
in Inform games, here is a short shell-game which shuffles six
dwarves about while the player is typing, and in addition maintains
a game clock (running 10 times faster than player-time; i.e.
sitting at the keyboard for 6 minutes allows an hour to pass in
the game). For a much better implementation of dwarves milling
about in real time, see Melbourne House's "The Hobbit"...
Constant DEBUG;
Constant Story "TIME AND DWARVES";
Constant Headline "^An Interactive Demo^";
Replace Keyboard;
Statusline time;
Include "Parser";
Global game_clock = 5000;
! This is just the parser's ordinary keyboard routine copied out,
! except that I've deleted the "undo" code (can you UNDO in a
! real time game? Hmm) and that there's a marked difference in
! the middle part...
[ Keyboard a_buffer a_table nw i w x1 x2;
DisplayStatus();
.FreshInput;
! Save the start of the table, in case "oops" needs to restore it
! to the previous time's table
for (i=0:i<10:i++) oops_workspace->i = a_table->i;
! In case of an array entry corruption that shouldn't happen, but would be
! disastrous if it did:
a_buffer->0 = 120;
a_table->0 = 64;
! Print the prompt, and read in the words and dictionary addresses
L__M(##Prompt);
AfterPrompt();
! ----------------------------------------------------------------------
! Here's the interesting bit: an ordinary Inform-style keyboard read
! except that TimeRunning() is called every 10 tenths-of-a-second,
! i.e., once every second.
! ----------------------------------------------------------------------
DrawStatusLine();
a_buffer->1 = 0; a_table->1 = 0;
@aread a_buffer a_table 10 TimeRunning -> i;
! (i holds true if TimeRunning() interrupted us, but we ignore this)
! ----------------------------------------------------------------------
nw=a_table->1;
! If the line was blank, get a fresh line
if (nw == 0)
{ L__M(##Miscellany,10); jump FreshInput; }
! Unless the opening word was "oops", return
w=a_table-->1;
if (w == OOPS1__WD or OOPS2__WD or OOPS3__WD) jump DoOops;
return nw;
.DoOops;
if (oops_from == 0)
{ L__M(##Miscellany,14); jump FreshInput; }
if (nw == 1)
{ L__M(##Miscellany,15); jump FreshInput; }
if (nw > 2)
{ L__M(##Miscellany,16); jump FreshInput; }
! So now we know: there was a previous mistake, and the player has
! attempted to correct a single word of it.
!
! Oops is very primitive: it gets the text buffer wrong, for instance.
!
! Take out the 4-byte table entry for the supplied correction:
! restore the 10 bytes at the front of the table, which were over-written
! by what the user just typed: and then replace the oops_from word entry
! with the correction one.
!
x1=a_table-->3; x2=a_table-->4;
for (i=0:i<10:i++) a_table->i = oops_workspace->i;
w=2*oops_from - 1;
a_table-->w = x1;
a_table-->(w+1) = x2;
return nw;
];
Include "VerbLib";
Class Dwarf
has animate proper
with name "dwarf",
move_me
[ rfrom rto;
if (random(10) == 1)
{ rfrom = parent(self);
if (rfrom == Blue_Room) rto = Red_Room; else rto = Blue_Room;
if (player in rfrom)
print "^", (name) self,
" wanders off into ", (the) rto, ".^";
if (player in rto)
print "^", (name) self,
" strolls in from ", (the) rfrom, ".^";
move self to rto;
}
];
Object Blue_Room "Blue Room"
has light
with description
"A blue-painted room, bare of furniture, with a
corridor leading east.",
e_to Red_Room;
Dwarf -> "Thorin";
Dwarf -> "Gimli";
Dwarf -> "Igneous";
Object Red_Room "Red Room"
has light
with description
"A red-painted room, bare of furniture, with a
corridor leading west.",
w_to Blue_Room;
Dwarf -> "Sleepy";
Dwarf -> "Dopey";
Dwarf -> "Doc";
[ TimeRunning o;
! Runs once per second of "real time"
! Every ten seconds, one minute of "game time" passes
game_clock = (game_clock+1) % 14400;
if (game_clock % 10 == 0)
{ SetTime(game_clock/10);
DisplayStatus();
DrawStatusLine();
}
! Every second, every dwarf has the opportunity to move
objectloop (o ofclass Dwarf) o.move_me();
rfalse;
];
[ Initialise;
location = Blue_Room; SetTime(game_clock/10); DisplayStatus();
"^^^^^Welcome to the...^";
];
Include "Grammar";
--
Graham Nelson | gra...@gnelson.demon.co.uk | Oxford, United Kingdom
OTOH, it also had unquestionably *the* single numero-uno most evil,
vile, wretched, unfair and downright despicable combination-lock puzzle
in the entire history of adventure games.
--
C.E. Forman cefo...@worldnet.att.net
Author of "Delusions", the 3rd place winner in the 1996 I-F Competition!!
Release 3 is now at: ftp://ftp.gmd.de/if-archive/games/infocom/delusns.z5
Read "XYZZYnews" @ http://www.interport.net/~eileen/design/xyzzynews.html
Ye Olde Infocomme Shoppe http://netnow.micron.net/~jgoemmer/infoshop.html