Add glossary references in the correct places.
[ibg.git] / chapters / 04.rst
1 ======================
2  Reviewing the basics
3 ======================
4
5 .. highlight:: inform
6
7 .. epigraph::
8
9    | *G was a gamester, who had but ill-luck;*
10    | *H was a hunter, and hunted a buck.*
11
12 .. only:: html
13
14   .. image:: /images/picG.png
15      :align: left
16
17 .. raw:: latex
18
19     \dropcap{g}
20
21 oing through the design of our first game in the previous chapter has
22 introduced all sorts of Inform concepts, often without giving you much
23 detail about what's been happening.  So let's review some of what we've
24 learnt so far, in a slightly more organised fashion.  We'll talk about
25 "Constants and variables" on page 49, "Object definitions" on page 50,
26 "Object relationships -- the object tree" on page 52, "Things in quotes" on
27 page 55, and "Routines and statements" on page 56.
28
29 Constants and variables
30 =======================
31
32 Superficially similar, constants and variables are actually very different
33 beasts.
34
35 .. rubric:: Constants
36
37 A :term:`constant` is a name to which a value is given once and once only;
38 you can't later use that name to stand for a different value.  Think of it
39 as a stone tablet on which you carve a number: a carving can't be undone,
40 so that you see the same number every time you look at the stone.
41
42 So far, we've seen a ``Constant`` being set up with its value as a string
43 of characters::
44
45     Constant Story "Heidi";
46
47 and as a number::
48
49     Constant MAX_CARRIED 1;
50
51 Those two examples represent the most common ways in which constants are
52 used in Inform.
53
54 .. rubric:: Variables
55
56 A :term:`variable` is a name to which a value is given, but that value can
57 be changed to a different one at any time.  Think of it as a blackboard on
58 which you mark a number in chalk: whenever you need to, just wipe the board
59 and write up a new number.
60
61 We haven't set up any variables of our own yet, though we've used a couple
62 which the library created like this::
63
64     Global location;
65     Global deadflag;
66
67 The value of a :term:`global variable` created in this way is initially 0,
68 but you can change it at any time.  For example, we used the statement::
69
70      location = before_cottage;
71
72 to reset the value of the ``location`` variable to the 
73 ``before_cottage`` object, and we wrote::
74
75      if (nest in branch) deadflag = 2;
76
77 to reset the value of the ``deadflag`` variable to 2.
78
79 Later, we'll talk about the :term:`local variable` (see "Routines" on
80 page 179) and about using object properties as variables (see "Objects" on
81 page 177).
82
83 Object definitions
84 ==================
85
86 The most important information you should have gleaned from the previous
87 chapter is that your entire game is defined as a series of objects.  Each
88 room is an object, each item that the player sees and touches is an object;
89 indeed the player herself is also an object (one that's automatically
90 defined by the library).
91
92 .. todo::
93
94   The set-off below needs to be tweaked or perhaps a custom lexer 
95   created to get italics in the right places.
96
97 The general model of an :term:`object` definition looks like this::
98
99         Object      obj_id   "external_name"   parent_obj_id
100            with     property    value ,
101                     property    value ,
102                     ...
103                     property    value ,
104            has      attribute    attribute   ... attribute
105            ;
106
107 The definition starts with the word ``Object`` and ends with a semicolon;
108 in between are three major blocks of information:
109
110 * immediately after the word ``Object`` is the header information;
111 * the word ``with`` introduces the object's :term:`properties`;
112 * the word ``has`` introduces the object's :term:`attributes`.
113
114 .. rubric:: Object headers
115
116 An object header comprises up to three items, all optional:
117
118 * An internal ``obj_id`` by which other objects refer to this object.  It's
119   a single word (though it can contain digits and underscores) of up to
120   thirty-two characters, and it must be unique within the game.  You can
121   omit the ``obj_id`` if this object isn't referred to by any other
122   objects.
123
124   For example: ``bird``, ``tree``, ``top_of_tree``.
125
126 * An ``external_name``, in double quotes, which is what the interpreter
127   uses when referring to the object.  It can be one or more words, and need
128   not be unique (for instance, you might have several ``"Somewhere in the
129   desert"`` rooms).  Although not mandatory, it's best to give *every*
130   object an ``external_name``.  For example: ``"baby bird"``, ``"tall
131   sycamore tree"``, ``"At the top of the tree"``.
132
133 * The internal ``obj_id`` of another object which is the initial location
134   of this object (its "parent" -- see the next section) at the start of the
135   game.  This is omitted from objects which have no initial parent; it's
136   *always* omitted from a room.
137
138   For example: the definition of the ``bird`` starts like this, specifying
139   that at the start of the game, it can be found in the ``forest`` room
140   (though later the player character will pick it up and move it around)::
141
142       Object   bird "baby bird" forest
143       ...
144
145   The ``tree`` starts like this; the only real difference is that, because
146   the player character can't move a ``scenery`` object, it's always going
147   to be in the ``clearing``::
148
149       Object   tree "tall sycamore tree" clearing
150       ...
151
152   .. note::
153
154      There's an alternative method for defining an object's initial
155      location, using "arrows" rather than the parent's internal ``obj_id``.
156      For example, the definition of the bird could have started like this::
157
158          Object   -> bird "baby bird"
159          ...
160
161      We don't use the arrows method in this guide, though we do describe
162      how it works in "Setting up the object tree" on page 185.
163
164 .. rubric:: Object properties
165
166 An object's property definitions are introduced by the ``with`` keyword.
167 An object can have any number of properties, and they can be defined in any
168 order.  Each definition has two parts: a name, and a value; there's a space
169 between the two parts, and a comma at the end.
170
171 Think of each property as a variable which is specifically associated with
172 that object.  The variable's initial setting is the supplied value; if
173 necessary, it can be reset to other values during play (though in fact most
174 property values don't change in this way).
175
176 Here are examples of the properties that we've come across so far::
177
178     description "The nest is carefully woven of twigs and moss.",
179     e_to forest,
180     name 'baby' 'bird' 'nestling',
181     each_turn [; if (nest in branch) deadflag = 2; ],
182
183 By happy coincidence, those examples also demonstrate most of the different
184 types of value which can be assigned to a property.  The value associated
185 with the ``description`` property in this particular example is a string of
186 characters in double quotes; the value associated with this ``e_to``
187 property is the internal identity of an object; the ``name`` property is a
188 bit unusual -- its value is a list of dictionary words, each in single
189 quotes; the ``each_turn`` property has a value which is an :term:`embedded
190 routine` (see "Embedded routines" on page 58).  The only other type of
191 value which is commonly found is a simple number; for example::
192
193      capacity 10,
194
195 In all, the library defines around forty-eight standard properties -- like
196 ``name`` and ``each_turn`` -- which you can associate with your objects;
197 there's a complete list in "Object properties" on page 266.  And in
198 "William Tell: in his prime" on page 91 we show you how to invent your own
199 property variables.
200
201 .. rubric:: Object attributes
202
203 An object's attribute list is introduced by the ``has`` keyword.  An object
204 can have any number of attributes, and they can be listed in any order,
205 with a space between each.
206
207 As with properties, you can think of each attribute as a variable which is
208 specifically associated with that object.  However, an attribute is a much
209 more limited form of variable, since it can have only two possible states:
210 present, and absent (also known as set/clear, on/off, or true/false;
211 incidentally, a two-state variable like this is often called a
212 :term:`flag`).  Initially, an attribute is either present (if you mention
213 its name in the list) or absent (otherwise); if necessary, its state can
214 change during play (and this is relatively common).  We often say that a
215 certain object currently *has* a certain attribute, or that conversely it
216 *hasn't* got it.
217
218 The attributes that we've come across so far are::
219
220      container light open scenery static supporter
221
222 Each of those answers a question: Is this object a container?  Does it
223 provide light?  and so on.  If the attribute is present then the answer is
224 Yes; if the attribute isn't present, the answer is No.
225
226 The library defines around thirty standard attributes, listed in "Object
227 attributes" on page 269.  Although you *can* devise additional attributes
228 -- see "Common properties and attributes" on page 185 -- in practice you
229 seldom need to.
230
231 Object relationships -- the object tree
232 =======================================
233
234 Not only is your game composed entirely of objects, but also Inform takes
235 great care to keep track of the relationships between those objects.  By
236 "relationship" we don't mean that Walter is Wilhelm's son, while Helga and
237 Wilhelm are just good friends; it's a much more comprehensive exercise in
238 recording exactly where each object is located, relative to the other
239 objects in the game.
240
241 Despite what we just said, Inform relationships *are* managed in terms of
242 :term:`parent` and :term:`child` objects, though in a much broader sense
243 than Wilhelm and Walter.  When the player character is in a particular room
244 -- for example the forest -- we can say that:
245
246 * the forest object is *the* parent of the player object, or alternatively
247 * the player object is *a* child of the forest object.
248
249 Also, if the player is carrying an object -- for example the nest -- we say
250 that:
251
252 * the player object is *the* parent of the nest object, or that
253 * the nest object is *a* child of the player object.
254
255 Note the emphasis there: an object has exactly *one* parent (or no parent
256 at all), but can have *any number* of child objects (including none).
257
258 For an example of an object having more than one child, think about the way
259 we defined the nest and tree objects::
260
261     Object   nest "bird's nest" clearing
262     ...
263
264     Object   tree "tall sycamore tree" clearing
265     ...
266
267 We used the third of the header items to say that the clearing was the
268 parent of the nest, and also that the clearing was the parent of the tree;
269 that is, both nest and tree are child objects of the clearing.
270
271 .. note::
272
273    A "room" isn't anything magical; it's just an object which *never* has a
274    parent, and which *may* from time to time have the player object as a
275    child.
276
277 When we defined the bird, we placed it in the forest, like so::
278
279     Object   bird "baby bird" forest
280     ...
281
282 We didn't place any other objects in that room, so at the start of the game
283 the forest was the parent of the bird (and the bird was the only child of
284 the forest).  But what happens when the player character, initially in the
285 ``before_cottage`` room, goes EAST to the forest?  Answer: the player's
286 parent is now the forest, and the forest has two children -- the bird *and*
287 the player.  This is a key principle of the way Inform manages its objects:
288 the parent--child relationships between objects change continuously, often
289 dramatically, as the game progresses.
290
291 Another example of this: suppose the player character picks up the bird.
292 This causes another change in the relationships.  The bird is now a child
293 of the player (and *not* of the forest), and the player is both a parent
294 (of the bird) and a child (of the forest).
295
296 Here we show how the object relationships change during the course of the
297 game.  The straight lines represent parent--child relationships, with the
298 parent object at the top of the line, and the child object at the bottom.
299
300 1. At the start of the game:
301
302    .. blockdiag:: /figures/heidiobj1.diag
303       :align: center
304       :scale: 80%
305
306 2. The player types: ``GO EAST``
307
308    .. blockdiag:: /figures/heidiobj2.diag
309       :align: center
310       :scale: 80%
311
312 3. The player types: ``TAKE THE BIRD``
313
314    .. blockdiag:: /figures/heidiobj3.diag
315       :align: center
316       :scale: 80%
317
318 4. The player types: ``GO NORTHEAST``
319
320    .. blockdiag:: /figures/heidiobj4.diag
321       :align: center
322       :scale: 80%
323
324 5. The player types: ``PUT BIRD IN NEST``
325
326    .. blockdiag:: /figures/heidiobj5.diag
327       :align: center
328       :scale: 80%
329
330 6. The player types: ``TAKE NEST``
331
332    .. blockdiag:: /figures/heidiobj6.diag
333       :align: center
334       :scale: 80%
335
336 7. The player types: ``UP``
337
338    .. blockdiag:: /figures/heidiobj7.diag
339       :align: center
340       :scale: 80%
341
342 8. The player types: ``PUT NEST ON BRANCH``
343
344    .. blockdiag:: /figures/heidiobj8.diag
345       :align: center
346       :scale: 80%
347
348 In this short example, we've taken a lot of time and space to spell out
349 exactly how the objects relationship patterns -- generally known as the
350 :term:`object tree` -- appear at each stage.  Normally you wouldn't bother
351 with this much detail (a) because the interpreter does most of the work for
352 you, and (b) because in a real game there are usually too many objects for
353 you to keep track of.  What's important is that you understand the basic
354 principles: at any moment in time an object either has no parent (which
355 probably means either that it's a room, or that it's floating in hyperspace
356 and not currently part of the game) or exactly one parent -- the object
357 that it's "in" or "on" or "a part of".  However, there's no restriction on
358 the number of children that an object can have.
359
360 There's a practical use for these relationships, covered in detail further
361 on.  As a designer, you can refer to the current parent or children of any
362 given object with the ``parent``, ``child`` and ``children`` routines, and
363 this is one feature that you will be using frequently.  There are also
364 other routines associated with the object tree, to help you keep track of
365 the objects or move them around.  We'll see them one by one in the next
366 chapters.  For a quick summary, see "Objects" on page 177.
367
368 Things in quotes
369 ================
370
371 Inform makes careful distinction between double and single quotes.
372
373 .. rubric:: Double quotes
374
375 Double quotes ``"..."`` surround a :term:`string` -- a letter, a word, a
376 paragraph, or almost any number of characters -- which you want the
377 interpreter to display while the game is being played.  You can use the
378 tilde ``~`` to represent a double quote inside the string, and the
379 circumflex ``^`` to represent a newline (line break) character.  Upper-case
380 and lower-case letters are treated as different.
381
382 A long string can be split over several lines; Inform transforms each 
383 line break (and any spaces around it) into a single space (extra spaces 
384 *not* at a line break are preserved, though).  These two strings are 
385 equivalent::
386
387     "This is a      string of characters."
388
389     "This
390       is
391             a    string
392                        of characters."
393
394 When the interpreter displays a long character string -- for example, while
395 describing a feature-packed room -- it employs automatic word-wrapping to
396 fit the text to the player's screen.  This is where you might insert ``^``
397 characters to force line breaks to appear, thus presenting the text as a
398 series of paragraphs.  So far, we've seen strings used as the value of a
399 ``Constant``::
400
401     Constant Headline
402           "^A simple Inform example
403            ^by Roger Firth and Sonja Kesserich.^";
404
405 which could equally have been defined thus::
406
407     Constant Headline
408           "^A simple Inform example^by Roger Firth and Sonja Kesserich.^";
409
410 and as the value of an object ``description`` property::
411
412     description "Too young to fly, the nestling tweets helplessly.",
413
414 Later, you'll find that they're also very common in ``print`` statements.
415
416 .. rubric:: Single quotes
417
418 Single quotes ``'...'`` surround a :term:`dictionary word`.  This has to be
419 a single word -- no spaces -- and generally contains only letters (and
420 occasionally numbers and hyphens), though you can use ``^`` to represent an
421 apostrophe inside the word.  Upper-case and lower-case letters are treated
422 as identical; also, the interpreter normally looks only at the first nine
423 characters of each word that the player types.
424
425 When the player types a command, the interpreter divides what was typed
426 into individual words, which it then looks up in the dictionary.  If it
427 finds all the words, and they seem to represent a sensible course of
428 action, that's what happens next.
429
430 So far, we've seen dictionary words used as the values of an object
431 ``name`` property::
432
433      name 'bird^s' 'nest' 'twigs' 'moss',
434
435 and indeed that's just about the only place where they commonly occur.
436 You'll save yourself a lot of confusion by remembering the distinction:
437 Double quotes for Output, Single quotes for Input (DOSI).
438
439 Routines and statements
440 =======================
441
442 A routine is a collection of statements, which are performed (or we often
443 say "are executed") at run-time by the interpreter.  There are two types of
444 routine, and about two dozen types of statement (there's a complete list in
445 "Statements" on page 174; see also "Inform language" on page 257).
446
447 .. rubric:: Statements
448
449 A :term:`statement` is an instruction telling the interpreter to perform a
450 particular task -- to "do something" -- while the game is being played.  A
451 real game usually has lots and lots of statements, but so far we've
452 encountered only a few.  We saw::
453
454      location = before_cottage;
455
456 which is an example of an :term:`assignment` statement, so-called because
457 the equals sign ``=`` assigns a new value (the internal ID of our
458 ``before_cottage`` room) to a variable (the global variable ``location``
459 which is part of the library).  Later we saw::
460
461      if (nest in branch) deadflag = 2;
462
463 which is actually *two* statements: an assignment, preceded by an ``if``
464 statement::
465
466      if (nest in branch) ...
467
468 The ``if`` statement tests a particular condition; if the condition is
469 true, the interpreter executes whatever statement comes next; if it isn't
470 true, the interpreter ignores the next statement.  In this example, the
471 interpreter is testing whether the ``nest`` object is "in" or "on" (which
472 we now know means "is a child of") the ``branch`` object.  For most of the
473 game, that condition is not true, and so the interpreter ignores the
474 following statement.  Eventually, when the condition becomes true, the
475 interpreter executes that statement: it performs an assignment::
476
477     deadflag = 2;
478
479 which changes the value of the library variable ``deadflag`` from its 
480 current value to 2.  Incidentally, ``if`` statements are often written 
481 on two lines, with the "controlled" statement indented.  This makes it 
482 easier to read, but doesn't change the way that it works::
483
484     if (nest in branch)
485         deadflag = 2;
486
487 The thing that's being controlled by the ``if`` statement doesn't have to
488 be an assignment; it can be any kind of statement.  In fact, you can have
489 lots of statements, not just one, controlled by an ``if`` statement.  We'll
490 talk about these other possibilities later.  For now, just remember that
491 the only place where you'll find statements are within standalone routines
492 and embedded routines.
493
494 .. rubric:: Standalone routines
495
496 A :term:`standalone routine` is a series of statements, collected together
497 and given a name.  When the routine is "called" -- by its given name --
498 those statements are executed.  Here's the one that we've defined::
499
500     [ Initialise; location = before_cottage; ];
501
502 Because it's such a tiny routine, we placed it all on a single line.  Let's
503 rewrite it to use several lines (as with the ``if`` statement, this improves
504 the readability, but doesn't affect how it works)::
505
506     [ Initialise;
507         location = before_cottage;
508     ];
509
510 The ``[ Initialise;`` is the start of the routine, and defines the name by
511 which it can be "called".  The ``];`` is the end of the routine.  In
512 between are the statements -- sometimes known as the body of the routine --
513 which are executed when the routine is called.  And how is that done?  By a
514 statement like this::
515
516     Initialise();
517
518 That single statement, the routine's name followed by opening and closing
519 parentheses, is all that it takes to call a routine.  When it comes across
520 a line like this, the interpreter executes the statements -- in this
521 example there's only one, but there may be ten, twenty, even a hundred of
522 them -- in the body of the routine.  Having done that, the interpreter
523 resumes what it was doing, on the line following the ``Initialise();``
524 call.
525
526 .. note::
527
528    You may have noticed that, although we've defined a routine named
529    ``Initialise``, we've never actually called it.  Don't worry -- the
530    routine *is* called, by the Inform library, right at the start of a 
531    game.
532
533 .. rubric:: Embedded routines
534
535 An :term:`embedded routine` is much like a standalone routine, though it
536 doesn't have a name and doesn't end in a semicolon.  This is the one that
537 we defined::
538
539      [; if (nest in branch) deadflag = 2; ]
540
541 except that we didn't write it in isolation like that: instead, we defined
542 it to be the value of an object property::
543
544      each_turn [; if (nest in branch) deadflag = 2; ],
545
546 which would have worked just the same if we'd written it like this::
547
548      each_turn [;
549          if (nest in branch)
550              deadflag = 2;
551      ],
552
553 All embedded routines are defined in this manner: as the value of an object
554 property.  That's where they're embedded -- inside an object.  The
555 introductory characters ``[;`` maybe look a little odd, but it's really
556 only the same syntax as for a standalone routine, only without a name
557 between the ``[`` and ``;``.
558
559 For calling an embedded routine, thus causing the statements it contains to
560 be executed, the method that we described for a standalone routine won't
561 work.  An embedded routine has no name, and needs none; it's
562 *automatically* called by the library at appropriate moments, which are
563 determined by the role of the property for which it is the value.  In our
564 example, that's at the end of every turn in which the player character is
565 in the same room as the branch.  Later, we'll see other examples of
566 embedded routines, each designed to perform a task which is appropriate for
567 the property whose value it is; we'll also see that it is possible to call
568 an embedded routine yourself, using an ``obj_id.property()`` syntax -- in
569 this example, we could call the routine by writing ``branch.each_turn()``.
570 There's more about these topics in "Routines and arguments" on page 67, "A
571 diversion: working with routines" on page 104 and in "Routines" on
572 page 179.
573
574 That ends our review of the ground covered in our first game.  We'll have
575 more to say about most of this later, but we're trying not to overload you
576 with facts at this early stage.  What we'd like you to do is to look back
577 at the source of the game, and ensure that you can recognise all the
578 elements which this chapter has described.  Then, we'll move on to fix a
579 few of the game's more important defects.