--- /dev/null
+.. raw:: latex
+
+ \newpage
+
+======================================
+ Appendix C -- "William Tell" story
+======================================
+
+
+.. only:: html
+
+ .. image:: /images/picW.png
+ :align: left
+
+.. raw:: latex
+
+ \dropcap{w}
+
+illiam Tell, our second game, is also very straightforward. See "William
+Tell: a tale is born" on page 69, "William Tell: the early years" on
+page 79, "William Tell: in his prime" on page 91 and "William Tell: the
+end is nigh" on page 103.
+
+Transcript of play
+==================
+
+.. literalinclude:: /examples/Tell.txt
+ :language: transcript
+
+Game source code
+================
+
+.. literalinclude:: /examples/Tell.inf
+ :language: inform6
+
+Compile-as-you-go
+=================
+
+Your understanding of how the "William Tell" game works will be
+considerably enhanced if you type in the code for yourself as you read
+through the guide. However, it takes us four chapters to describe the
+game, which isn't complete and playable until the end of Chapter 9. Even
+if you make no mistakes in your typing, the game won't compile without
+errors before that point, because of references in earlier chapters to
+objects which aren't presented until later chapters (for example,
+Chapter 6 mentions the ``bow`` and ``quiver`` objects, but we don't
+define them until Chapter 7). This is a bit of a nuisance, because as a
+general rule we advise you to compile frequently -- more or less after
+every change you make to a game -- in order to detect syntax and
+spelling mistakes as soon as possible.
+
+Fortunately, there's a fairly easy way round the difficulty, though it
+involves a little bit of cheating. The trick is temporarily to add
+minimal definitions -- often called "stubs" -- of the objects whose full
+definitions have yet to be provided.
+
+For example, if you try to compile the game in the state that it's
+reached by the end of Chapter 6, you’ll get this::
+
+ Tell.inf(16): Warning: Class "Room" declared but not used
+ Tell.inf(19): Warning: Class "Prop" declared but not used
+ Tell.inf(27): Warning: Class "Furniture" declared but not used
+ Tell.inf(44): Error: No such constant as "street"
+ Tell.inf(46): Error: No such constant as "bow"
+ Tell.inf(47): Error: No such constant as "quiver"
+ Compiled with 3 errors and 3 warnings
+
+However, by adding these lines to the end of your game file::
+
+ ! ===============================================================
+ ! TEMPORARY DEFINITIONS NEEDED TO COMPILE AT THE END OF CHAPTER 6
+
+ Room street;
+ Object bow;
+ Object quiver;
+
+a compilation should now give only this::
+
+ Tell.inf(19): Warning: Class "Prop" declared but not used
+ Tell.inf(27): Warning: Class "Furniture" declared but not used
+ Compiled with 2 warnings
+
+That's a lot better. It's not worth worrying about those warnings, since
+it's easy to understand where they come from; anyway, they'll go away
+shortly. More important, there are no errors, which means that you've
+probably not made any major typing mistakes. It also means that the
+compiler has created a story file, so you can try "playing" the game. If
+you do, though, you'll get this::
+
+ William Tell
+ A simple Inform example
+ by Roger Firth and Sonja Kesserich.
+ Release 3 / Serial number 040804 / Inform v6.30 Library 6/11 SD
+
+ (street)
+ ** Library error 11 (27,0) **
+ ** The room "(street)" has no "description" property **
+ >
+
+Whoops! We've fallen foul of Inform's rule saying that every room must
+have a ``description`` property, to be displayed by the interpreter when
+you enter that room. Our ``street`` stub hasn't got a ``description``,
+so although the game compiles successfully, it still causes an error to
+be reported at run-time.
+
+The best way round this is to extend the definition of our ``Room``
+class, thus::
+
+ Class Room
+ with description "UNDER CONSTRUCTION",
+ has light;
+
+By doing this, we ensure that *every* room has a description of some
+form; normally we'd override this default value with something
+meaningful -- "The narrow street runs north towards the town square..."
+and so on -- by including a ``description`` property in the object's
+definition. However, in a stub object used only for testing, a default
+description is sufficient (and less trouble)::
+
+ William Tell
+ A simple Inform example
+ by Roger Firth and Sonja Kesserich.
+ Release 3 / Serial number 040804 / Inform v6.30 Library 6/11 SD
+
+ (street)
+ UNDER CONSTRUCTION
+
+ >INVENTORY
+ You are carrying:
+ a (quiver) (being worn)
+ a (bow)
+
+ >EXAMINE QUIVER
+ You can't see any such thing.
+
+ >
+
+You'll notice a couple of interesting points. Because we didn't supply
+external names with our ``street`` , ``bow`` and ``quiver`` stubs, the
+compiler has provided some for us -- ``(street)`` , ``(bow)`` and
+``(quiver)`` -- simply by adding parentheses around the internal IDs
+which we used. And, because our ``bow`` and ``quiver`` stubs have no
+``name`` properties, we can't actually refer to those objects when
+playing the game. Neither of these points would be acceptable in a
+finished game, but for testing purposes at this early stage -- they'll
+do.
+
+So far, we've seen how the addition of three temporary object
+definitions enables us to compile the incomplete game, in its state at
+the end of Chapter 6. But once we reach the end of Chapter 7, things
+have moved on, and we now need a different set of stub objects. For a
+test compilation at this point, remove the previous set of stubs, and
+instead add these -- ``south_square`` and ``apple`` objects, and a dummy
+action handler to satisfy the ``Talk`` action in Helga’s life property::
+
+ ! ===============================================================
+ ! TEMPORARY DEFINITIONS NEEDED TO COMPILE AT THE END OF CHAPTER 7
+
+ Room south_square;
+ Object apple;
+
+ [ TalkSub; ];
+
+Similarly, at the end of Chapter 8, replace the previous stubs by these
+if you wish to check that the game compiles::
+
+ ! ===============================================================
+ ! TEMPORARY DEFINITIONS NEEDED TO COMPILE AT THE END OF CHAPTER 8
+ Room marketplace;
+ Object apple;
+ NPC son;
+
+ [ TalkSub; ];
+ [ FireAtSub; ];
+ [ SaluteSub; ];
+
+Finally, by the end of Chapter 9 the game is complete, so you can delete
+the stubs altogether.
+
+Used with care, this technique of creating a few minimal stub objects
+can be convenient -- it enables you to "sketch" a portion of your game
+in outline form, and to compile and test the game in that state, without
+needing to create complete object definitions. However, you've got very
+little interaction with your stubs, so don't create too many of them.
+And of course, never forget to flesh out the stubs into full definitions
+as soon as you can.