Reduce clutter on main HTML page.
[ibg.git] / chapters / 04.rst
index 1c326c487c2b1261a3f222c3f1bc8cf9e3d5d3b8..62d471b0aac7388740768d33e97b0d5daea0329a 100644 (file)
@@ -7,7 +7,16 @@
    | *G was a gamester, who had but ill-luck;*
    | *H was a hunter, and hunted a buck.*
 
-Going through the design of our first game in the previous chapter has
+.. only:: html
+
+  .. image:: /images/picG.png
+     :align: left
+
+.. raw:: latex
+
+    \dropcap{g}
+
+oing through the design of our first game in the previous chapter has
 introduced all sorts of Inform concepts, often without giving you much
 detail about what's been happening.  So let's review some of what we've
 learnt so far, in a slightly more organised fashion.  We'll talk about
@@ -58,8 +67,8 @@ you can change it at any time.  For example, we used the statement::
 
      location = before_cottage;
 
-to reset the value of the location variable to the ``before_cottage``
-object, and we wrote::
+to reset the value of the ``location`` variable to the 
+``before_cottage`` object, and we wrote::
 
      if (nest in branch) deadflag = 2;
 
@@ -77,6 +86,11 @@ room is an object, each item that the player sees and touches is an object;
 indeed the player herself is also an object (one that's automatically
 defined by the library).
 
+.. todo::
+
+  The set-off below needs to be tweaked or perhaps a custom lexer 
+  created to get italics in the right places.
+
 The general model of an **object** definition looks like this::
 
         Object      obj_id   "external_name"   parent_obj_id
@@ -275,45 +289,57 @@ This causes another change in the relationships.  The bird is now a child
 of the player (and *not* of the forest), and the player is both a parent
 (of the bird) and a child (of the forest).
 
-In this diagram, we show how the object relationships change during the
-course of the game.  The straight lines represent parent--child
-relationships, with the parent object at the top of the line, and the child
-object at the bottom.
+Here we show how the object relationships change during the course of the
+game.  The straight lines represent parent--child relationships, with the
+parent object at the top of the line, and the child object at the bottom.
+
+1. At the start of the game:
+
+   .. blockdiag:: /figures/heidiobj1.diag
+      :align: center
+      :scale: 80%
+
+2. The player types: ``GO EAST``
+
+   .. blockdiag:: /figures/heidiobj2.diag
+      :align: center
+      :scale: 80%
+
+3. The player types: ``TAKE THE BIRD``
+
+   .. blockdiag:: /figures/heidiobj3.diag
+      :align: center
+      :scale: 80%
+
+4. The player types: ``GO NORTHEAST``
 
-.. list-table::
-   :widths: 1 3 5
+   .. blockdiag:: /figures/heidiobj4.diag
+      :align: center
+      :scale: 80%
 
-   * - 1.
-     - At the start of the game:
-     - .. image:: /images/heidiobj1.*
+5. The player types: ``PUT BIRD IN NEST``
 
-   * - 2.
-     - The player types: ``GO EAST``
-     - .. image:: /images/heidiobj2.*
+   .. blockdiag:: /figures/heidiobj5.diag
+      :align: center
+      :scale: 80%
 
-   * - 3.
-     - The player types: ``TAKE THE BIRD``
-     - .. image:: /images/heidiobj3.*
+6. The player types: ``TAKE NEST``
 
-   * - 4.
-     - The player types: ``GO NORTHEAST``
-     - .. image:: /images/heidiobj4.*
+   .. blockdiag:: /figures/heidiobj6.diag
+      :align: center
+      :scale: 80%
 
-   * - 5.
-     - The player types: ``PUT BIRD IN NEST``
-     - .. image:: /images/heidiobj5.*
+7. The player types: ``UP``
 
-   * - 6.
-     - The player types: ``TAKE NEST``
-     - .. image:: /images/heidiobj6.*
+   .. blockdiag:: /figures/heidiobj7.diag
+      :align: center
+      :scale: 80%
 
-   * - 7.
-     - The player types: ``UP``
-     - .. image:: /images/heidiobj7.*
+8. The player types: ``PUT NEST ON BRANCH``
 
-   * - 8.
-     - The player types: ``PUT NEST ON BRANCH``
-     - .. image:: /images/heidiobj8.*
+   .. blockdiag:: /figures/heidiobj8.diag
+      :align: center
+      :scale: 80%
 
 In this short example, we've taken a lot of time and space to spell out
 exactly how the objects relationship patterns -- generally known as the
@@ -342,16 +368,17 @@ Inform makes careful distinction between double and single quotes.
 
 .. rubric:: Double quotes
 
-Double quotes "..." surround a **string** -- a letter, a word, a paragraph,
-or almost any number of characters -- which you want the interpreter to
-display while the game is being played.  You can use the tilde ``~`` to
-represent a double quote inside the string, and the circumflex ``^`` to
-represent a newline (line break) character.  Upper-case and lower-case
-letters are treated as different.
+Double quotes ``"..."`` surround a **string** -- a letter, a word, a 
+paragraph, or almost any number of characters -- which you want the 
+interpreter to display while the game is being played.  You can use the 
+tilde ``~`` to represent a double quote inside the string, and the 
+circumflex ``^`` to represent a newline (line break) character.  
+Upper-case and lower-case letters are treated as different.
 
-A long string can be split over several lines; Inform transforms each line
-break (and any spaces around it) into a single space (extra spaces not at a
-line break are preserved, though).  These two strings are equivalent::
+A long string can be split over several lines; Inform transforms each 
+line break (and any spaces around it) into a single space (extra spaces 
+*not* at a line break are preserved, though).  These two strings are 
+equivalent::
 
     "This is a      string of characters."
 
@@ -376,7 +403,7 @@ which could equally have been defined thus::
     Constant Headline
           "^A simple Inform example^by Roger Firth and Sonja Kesserich.^";
 
-and as the value of an object description property::
+and as the value of an object ``description`` property::
 
     description "Too young to fly, the nestling tweets helplessly.",
 
@@ -384,12 +411,12 @@ Later, you'll find that they're also very common in ``print`` statements.
 
 .. rubric:: Single quotes
 
-Single quotes '...' surround a **dictionary word**.  This has to be a
-single word -- no spaces -- and generally contains only letters (and
-occasionally numbers and hyphens), though you can use ``^`` to represent an
-apostrophe inside the word.  Upper-case and lower-case letters are treated
-as identical; also, the interpreter normally looks only at the first nine
-characters of each word that the player types.
+Single quotes ``'...'`` surround a **dictionary word**.  This has to be 
+a single word -- no spaces -- and generally contains only letters (and 
+occasionally numbers and hyphens), though you can use ``^`` to represent 
+an apostrophe inside the word.  Upper-case and lower-case letters are 
+treated as identical; also, the interpreter normally looks only at the 
+first nine characters of each word that the player types.
 
 When the player types a command, the interpreter divides what was typed
 into individual words, which it then looks up in the dictionary.  If it
@@ -445,10 +472,10 @@ interpreter executes that statement: it performs an assignment::
 
     deadflag = 2;
 
-which changes the value of the library variable ``deadflag`` from its
-current value to 2.  Incidentally, if statements are often written on two
-lines, with the "controlled" statement indented.  This makes it easier to
-read, but doesn't change the way that it works::
+which changes the value of the library variable ``deadflag`` from its 
+current value to 2.  Incidentally, ``if`` statements are often written 
+on two lines, with the "controlled" statement indented.  This makes it 
+easier to read, but doesn't change the way that it works::
 
     if (nest in branch)
         deadflag = 2;
@@ -496,7 +523,8 @@ call.
 
    You may have noticed that, although we've defined a routine named
    ``Initialise``, we've never actually called it.  Don't worry -- the
-   routine is called, by the Inform library, right at the start of a game.
+   routine *is* called, by the Inform library, right at the start of a 
+   game.
 
 .. rubric:: Embedded routines