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