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.
! ----------------------------------------------------------------------
! 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;