House 2 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 2
   !
   ! Last Modified: David Cornelson - 04-Jan-1998
   !
   ! This work is freely offered to the Public Domain. - DAC 12-12-2015
   !
   ! ------------------------------------------------------------------------------
   
   Constant Story "The House";
   
   Constant Headline
              "^Inform for New Writers^
                The House - Version 2^
                By New Writer (1998) - Last Compiled: 04-Jan-1998^";
   
   Constant MAX_SCORE 100;
   Serial "980104";
   
   Release 1;
   
   Include "Parser";
   Include "VerbLib";
   
   !-------------------------------------------------------------------------------
   ! Initialise
   !
   !-------------------------------------------------------------------------------
   
   [ Initialise;
   
     location = Sidewalk;
   
   ];
   
   [ 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!
   !
   ! ----------------------------------------------------------------------------
   
   Object Sidewalk "Sidewalk"
       with  description
             "You are standing on the sidewalk in front of a house to the west.",
       w_to  Front_Porch,
       has   light;
   
   !
   ! VERSION 2 - Adding more locations to your Inform program
   !
   ! We're going to take one small step in this version. Let's add a bunch of
   ! locations so that the player can move around a little bit.
   !
   ! Notice that in the Sidewalk Object definition we added a direction in the
   ! description "to the west" and we added the directional property "w_to"
   ! that leads to the "Front_Porch" location that we defined below.
   !
   ! If you follow these examples you will see how locations are "connected"
   ! or "mapped" together with the directional properties. Feel free to change
   ! then around so that they connect in different ways.
   !
   ! Q: In the "Front_Porch" definition, the description continues over two
   !    lines. Is this okay?
   !
   ! A: Inform allows you to extend statements over multiple lines as you
   !    need. You may need to write code that extends over multiple lines
   !    but mostly it will be descriptions as in "Front_Porch". You don't
   !    need to add any extra characters to tell Inform that you've jumped
   !    to the next line either...Inform will figure that out when it compiles.
   !
   
   Object Front_Porch "Front Porch"
       with  description
             "This is the front porch of the house. There is an open door
              leading inside to the west.",
       e_to  Sidewalk,
       w_to  Foyer,
       in_to Foyer,
       has   light;
   
   Object Foyer "Foyer"
       with  description
             "You are standing in the foyer of the house. It seems as though
              you can go up a staircase, northwest, or back out the front
              door to the east.",
       out_to Front_Porch,
       e_to   Front_Porch,
       nw_to  Hallway,
       u_to   Upper_Hallway,
       has    light;
   
   Object Hallway "Hallway"
       with   description
              "You are in the hallway on the first floor of the house. The
               foyer is southeast and the kitchen is west of here.",
       se_to  Foyer,
       w_to   Kitchen,
       has    light;
   
   Object Kitchen "Kitchen"
       with   description
              "This is the kitchen of the house. A hallway can be seen to the
               east.",
       e_to   Hallway,
       has    light;
   
   Object Upper_Hallway "Upper Hallway"
       with   description
              "This is the second floor hallway. Rooms can be seen north and
               south and a staircase leads down.",
       n_to   North_Bedroom,
       s_to   South_Bedroom,
       d_to   Foyer,
       has    light;
   
   Object North_Bedroom "North Bedroom"
       with   description
              "This is a bedroom on the north side of the house.",
       s_to   Upper_Hallway,
       has    light;
   
   Object South_Bedroom "South Bedroom"
       with   description
              "This is a bedroom on the south side of the house.",
       n_to   Upper_Hallway,
       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 HOUSE02.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"
   !  25 "Front Porch"
   !  26 "Foyer"
   !  27 "Hallway"
   !  28 "Kitchen"
   !  29 "Upper Hallway"
   !  30 "North Bedroom"
   !  31 "South Bedroom"