House 1 Inform Tutorial
From IFWiki
In 1998, David Cornelson put together a set of Inform 6 source files that would help beginners with their interactive fiction education. They are recreated here.
Jump to any of the source code examples: Tutorial 1 | Tutorial 2 | Tutorial 3 | Tutorial 4 | Tutorial 5 | Tutorial 6 | Tutorial 7 | Tutorial 8
Return to main article: House Tutorial (Inform)
! ------------------------------------------------------------------------------ ! Inform for New Writers ! ! The House - Version 1 ! ! Last Modified: David Cornelson - 03-Jan-1998 ! ! This work is freely offered to the Public Domain. - DAC 12-12-2015 ! ! ------------------------------------------------------------------------------ ! ! Q: What are these lines that begin with exclamation points? ! ! A: In an Inform program, you may want to place comments or notes before ! portions of code so that when you make changes, you will remember what ! you were thinking when you originally wrote the code. It's a great way ! to "document" your program so that others can understand it as well. ! ! Any characters following an exclamation point is considered a comment. ! The comment ends when you move to a new line. ! ! ! The constant "Story" contains the name of your story, in this case, ! "The House". The word "Constant" is an Inform statement that signifies that ! a token (variable) will have a single, unchangable value within the program. ! "Story" is the token name and "The House" is the value. Anytime you reference ! "Story" in your program, it will have the value "The House". ! ! The double-quote is used to represent a "string". A string is a type of data that ! contains letters and words. (As opposed to numbers). A string must begin with ! a double-quote and end with a double-quote. ! ! The semi-colon tells Inform that this statement is complete. You need a ! semi-colon to end all Inform statements. ! Constant Story "The House"; ! ! The constant "Headline" contains the initial banner at the beginning of your ! game. In this Headline, there are three separate lines. ! ! The first line is "Inform for New Writers" ! The second line is "The House - Version 1" ! The third line is "By New Writer (1998) - Last Compiled: 03-Jan-1998" ! ! The carat "^" character is used to tell Inform that you want to move to a new ! line. This is called the newline character. Each time the newline character is ! placed into a string, the game will move to a new line. ! ! Here is another example: ! ! print "Once upon a time^there was a little bear^^that was all alone.^"; ! ! This example will be printed on your screen as... ! ! Once upon a time ! there was a little bear ! ! that was all alone. ! ! Each newline character caused a break in the text and started at the beginning ! of a new line. ! Constant Headline "^Inform for New Writers^ The House - Version 1^ By New Writer (1998) - Last Compiled: 03-Jan-1998^"; ! ! This constant tells Inform what the maximum score of your game will be. ! Currently, we have it set to 100. ! Constant MAX_SCORE 100; ! ! This constant is the last compile date and can be set by the Inform compiler. ! Serial "980103"; ! ! This constant is set by you and tells which release of your game you are ! working on. It's a good idea to make backups of your program on a regular ! basis. When you have completed your game, start incrementing the Release value ! every time you fix bugs or make changes so that players know which release ! works and which one doesn't. ! Release 1; ! ! The Include statement allows Inform to open other files that are important to ! your program. The following files, "Parser" and "VerbLib" are the foundation ! of the Inform parser. DON'T REMOVE THESE LINES!!! ! Include "Parser"; Include "VerbLib"; !------------------------------------------------------------------------------- ! Initialise ! ! The following "function" is the first portion of code executed by Inform when ! your game is played. You want to place a statement in this function that will ! set the first location of the player. We will add more to this section in later ! versions of "The House". !------------------------------------------------------------------------------- ! FUNCTIONS: Portions of your code will will be in what are called "functions". ! The syntax of a function is as follows: ! ! [ function_name argument argument; ! ...your code... ! ...your code... ! ...your code... ! ]; ! ! Arguments are values passed when calling the function. More ! information on functions is available in later versions of ! "The House". ! [ Initialise; ! ! Our first location is the Sidewalk. Inform has a variable that we can set that ! just happens to be named "location". ! ! Sidewalk is a location, but in Inform it is an "Object". When we define the ! object Sidewalk it will have a unique value associated with it. So, when we ! set location equal to Sidewalk, the location variable now contains the object ! value of Sidewalk. ! location = Sidewalk; ]; ! ! The following function is called by Inform when the player types SCORE or when ! the player ends the game. As you can see, each range of points has a different ! string printed. You can modify this function to suit your own story. Remember, ! the constant MAX_SCORE contains the value that is used by Inform to represent ! "You have scored <score> out of <MAX_SCORE>", so you want both the Constant ! and this function to be synchronized. ! [ PrintRank; print ", earning you the rank of "; if (score >= 100) "the greatest."; if (score >= 80) "above average."; if (score >= 60) "average."; if (score >= 40) "below average."; if (score >= 20) "the barely living."; "the living dead."; ]; ! ---------------------------------------------------------------------------- ! Locations ! ! In this section we will define our locations. These are "Objects" to Inform ! and contain the following elements. ! ! - object name ! The object name represents the variable or handle of the object. ! - short description ! The short description is the description printed in bold before the ! normal description. ! - initial description ! The initial description is printed only once when the location is first ! entered by the player. ! - normal description ! The normal description is printed everytime the player enters the location. ! - directional properties (tells which direction player can move) (optional) ! These include n_to, ne_to, e_to, up_to, in_to, etc. and are followed by ! another location object name. ! - properties ! Properties are functions that you can add to an object that help determine ! events and actions. ! - attributes ! Attributes are True/False values that help you remember certain states of ! an object or event, such as whether the lights are on or not. The positive ! value is represented as "light" and the negative would be "~light". There ! are standard attributes used by Inform and you can add your own as well. ! ! Actually, there's more than this, but we'll add the complicated stuff later! ! ! ---------------------------------------------------------------------------- ! ! Define the object "Sidewalk" ! ! Object Name: Sidewalk ! Short Description: "Sidewalk" ! Initial Description: none ! Normal Description: "You are standing on the sidewalk in front of a house." ! Attributes: light ! ! The Sidewalk is the first location of our game and includes a description ! and when we enter it, it will have light. ! Object Sidewalk "Sidewalk" with description "You are standing on the sidewalk in front of a house.", has light; ! ---------------------------------------------------------------------------- ! Grammar ! ! The grammar section includes the file "Grammar" and will later include ! extensions to the standard grammar library. ! ! ---------------------------------------------------------------------------- Include "Grammar"; ! ---------------------------------------------------------------------------- ! Compilation Results ! ---------------------------------------------------------------------------- ! Command: INFRMW32 -J HOUSE01.INF ! ! PC/Win32 Inform 6.14 (8th September 1997) ! 6 "compass" ! 7 "north wall" ! 8 "south wall" ! 9 "east wall" ! 10 "west wall" ! 11 "northeast wall" ! 12 "northwest wall" ! 13 "southeast wall" ! 14 "southwest wall" ! 15 "ceiling" ! 16 "floor" ! 17 "outside" ! 18 "inside" ! 19 "(darkness object)" ! 20 "(self object)" ! 21 "(Inform Parser)" ! 22 "(Inform Library)" ! 23 "(with no short name)" ! 24 "Sidewalk"