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