! Make your own Inform Adventure!
! Designed for beginners.
! Please read Inform's Designer Manual chapters 1 and 2.
! by Harry M. Hardjono 2/12/98
! Inform is created by Graham Nelson. Thanks Graham!
!
! This program is filled with spaghetti codes elements:
! Global variables, jumps (gotos), repeating codes,
! stack overflow problems, abrupt terminations,
! and other things. :)
!
! Functions that you should modify:
! 1. [Main] - Easy
! 2. [Help] - Easy
! 3. [StoryBoard] - Hard
! You may need to use Global variables and custom routines.
! Global program variables
Array buffer -->60;
Array parse -->60;
Global n = 0; ! General purpose variable
! Global user variables
! Modify these as you see fit.
Global n3 = 0; ! n3 is variable for randomization.
Global n4 = 0; ! n4 is the number of visits on node 4.
!#########################################################
! [Main] is the first function executed by the program.
! You can modify the message here to display disclaimers.
! Alternatively, just call StoryBoard().
!---------------------------------------------------------
[Main;
print "Choose your own Inform Adventure!^";
print "Proceed?^";
if (YesOrNo()) StoryBoard();
];
!#########################################################
! [YesOrNo] returns true if the answer is "yes".
! It returns false if the answer is "no".
!---------------------------------------------------------
[YesOrNo;
for (::) {
buffer->0 = 60;
parse->0 = 1;
print "Please type ~yes~ or ~no~> ";
read buffer parse;
if ((parse-->1 == 'yes') || (parse-->1 == #n$y)) rtrue;
if ((parse-->1 == 'no') || (parse-->1 == #n$n)) rfalse;
}
];
!#########################################################
! [Action] takes a parameter. You call it like this:
! Action(range); where range is an integer 1-9.
! It returns a digit. It returns 0 when text needs "Refresh"
!
! You don't have to touch this function at all.
! It automatically takes care of program administration
! and command actions.
!---------------------------------------------------------
[Action range;
for (::) {
buffer->0 = 60;
parse->0 = 1;
n = -1;
print "> ";
read buffer parse;
switch (parse-->1) {
#n$0: n = 0;
#n$1: if (range >= 1) n=1;
else jump OutOfRange;
#n$2: if (range >= 2) n=2;
else jump OutOfRange;
#n$3: if (range >= 3) n=3;
else jump OutOfRange;
#n$4: if (range >= 4) n=4;
else jump OutOfRange;
#n$5: if (range >= 5) n=5;
else jump OutOfRange;
#n$6: if (range >= 6) n=6;
else jump OutOfRange;
#n$7: if (range >= 7) n=7;
else jump OutOfRange;
#n$8: if (range >= 8) n=8;
else jump OutOfRange;
#n$9: if (range >= 9) n=9;
else jump OutOfRange;
'help' : Help();
'restart': StoryBoard();
! Repeat too often, and the stack overflows.
'restore': restore SuccessRestore;
print "Restore failed!^";
'save' : save SuccessSave;
print "Save failed!^";
'quit' : print "Really quit?^";
! Elegant programs do not use 'quit'.
if (YesOrNo()) quit;
'xyzzy' : print "My head and tail are at my sides.
What am I?^";
'plugh' : print "Coin.^";
default: print "Type ~help~ for info.^";
}
jump EndOfAction;
.OutOfRange;
print "The choices allowed are integers from 1 to ", range, ".^";
jump EndOfAction;
.SuccessRestore;
print "Restore successful.^";
print "Wait a minute! If restore is successful, then
this segment will not be executed, right?^";
jump EndOfAction;
.EndOfAction;
if (n >= 0) return n;
}
];
!#########################################################
! [Help] is the help screen called when the user types
! "help" at the command prompt. You should customize it
! to include relevant information and credits.
!---------------------------------------------------------
[Help;
print "You can RESTART, SAVE, RESTORE, QUIT, or
choose the appropriate action with a single digit number.
Type ~0~ to repeat the text.^";
];
!#########################################################
! [StoryBoard] is the heart of the story.
! As the name implies, this is where the program spends
! most of its execution time.
!
! Make sure labels are consistent.
! You don't need the Introduction, but it's nice to have.
! Make sure all switch cases is terminated by proper jumps
! or the program will terminate abruptly.
! Don't forget to include the default case for
! the redisplaying text on the switch command.
! Action(number) is called for user input where the
! number corresponds with the number of available choices.
!---------------------------------------------------------
[StoryBoard;
Introduction;
print "Hear ye! Hear ye! You can go to a bunch of nodes!^^";
Node1Init;
Node1Display;
print "This is Node 1.^";
print "You can go to these nodes:^";
print "1. Node 1^";
print "2. Node 2^";
print "3. Node 3^";
print "4. Node 4^";
switch (Action(4)) {
1: jump Node1Init;
2: jump Node2Init;
3: jump Node3Init;
4: jump Node4Init;
default: jump Node1Display;
}
Node2Init;
Node2Display;
print "This is Node 2.^";
print "You can go to these nodes:^";
print "1. Node 2^";
print "2. Node 4^";
switch (Action(2)) {
1: jump Node2Init;
2: jump Node4Init;
default: jump Node2Display;
}
Node3Init;
n3 = random (0,1); ! See Designer Manual for other Inform commands.
Node3Display;
print "This is Node 3.^";
print "You can go to these nodes:^";
print "1. Node 1^";
if (n3) print "2. Node 2^";
else print "2. Node 3^";
switch (Action(2)) {
1: jump Node1Init;
2: if (n3) jump Node2Init;
else jump Node3Init;
default: jump Node3Display;
}
Node4Init;
n4++; ! Increment counter for each visit
Node4Display;
print "This is Node 4.^";
print "Number of visit: ", n4, ".^";
print "You can go to these nodes:^";
print "1. Node 1^";
print "2. Node 3^";
print "3. Node 4^";
switch (Action(3)) {
1: jump Node1Init;
2: jump Node3Init;
3: jump Node4Init;
default: jump Node4Display;
}