X-Git-Url: https://jxself.org/git/?p=ibg.git;a=blobdiff_plain;f=chapters%2F05.rst;h=1c0c62396f310105634978c41322d8be6ca65716;hp=05d9c6949fab1e99238e71e10a18834399b58301;hb=f9eb50b5024de49b2df4b5daab471731840195d3;hpb=00e42bd8b271a01dd1a4a7c6b90c12bf5b52ae76 diff --git a/chapters/05.rst b/chapters/05.rst index 05d9c69..1c0c623 100644 --- a/chapters/05.rst +++ b/chapters/05.rst @@ -8,6 +8,7 @@ | *J was a joiner, and built up a house.* .. only:: html + .. image:: /images/picI.png :align: left @@ -63,7 +64,7 @@ LISTEN TO NEST or LISTEN TO TREE, but fairly inappropriate here; we really need to substitute a more relevant response after LISTEN TO BIRD. Here's how we do it: -.. code-block:: inform6 +.. code-block:: inform Object bird "baby bird" forest with description "Too young to fly, the nestling tweets helplessly.", @@ -132,7 +133,7 @@ false`` then the interpreter carries on to perform the default action as though it hadn't been intercepted. Sometimes that's what you want it to do, but not here: if instead we'd written this: -.. code-block:: inform6 +.. code-block:: inform Object bird "baby bird" forest with description "Too young to fly, the nestling tweets helplessly.", @@ -179,7 +180,7 @@ might lead her to believe that she can go inside: Again, that isn't perhaps the most appropriate response, but it's easy to change: -.. code-block:: inform6 +.. code-block:: inform Object before_cottage "In front of a cottage" with description @@ -220,7 +221,7 @@ receives the obviously nonsensical reply "You can't see any such thing". That's easy to fix; we can add a new ``cottage`` object, making it a piece of ``scenery`` just like the ``tree``: -.. code-block:: inform6 +.. code-block:: inform Object cottage "tiny cottage" before_cottage with description "It's small and simple, but you're very happy here.", @@ -243,7 +244,7 @@ response: The situation here is similar to our LISTEN TO BIRD problem, and the solution we adopt is similar as well: -.. code-block:: inform6 +.. code-block:: inform Object cottage "tiny cottage" before_cottage with description "It's small and simple, but you're very happy here.", @@ -260,7 +261,7 @@ This time, however, we've done it using one statement rather than two. It turns out that the sequence "``print`` a string which ends with a newline character, and then ``return true``" is so frequently needed that there's a special statement which does it all. That is, this single statement (where -you'll note that the string doesn't need to end in ``^``):: +you'll note that the string *doesn't* need to end in ``^``):: print_ret "It's such a lovely day -- much too nice to go inside."; @@ -281,7 +282,7 @@ currently gives the completely misleading response "I don't think much is to be achieved by that"). Yet another opportunity to use a ``before`` property, but now with a difference. -.. code-block:: inform6 +.. code-block:: inform Object tree "tall sycamore tree" clearing with description @@ -299,9 +300,9 @@ This time, when we intercept the ``Climb`` action applied to the ``tree`` object, it's not in order to display a better message; it's because we want to move the player character to another room, just as if she'd typed UP. Relocating the player character is actually quite a complex business, but -fortunately all of that complexity is hidden: there's a standard **library -routine** to do the job, not one that we've written, but one that's -provided as part of the Inform system. +fortunately all of that complexity is hidden: there's a standard +:term:`library routine` to do the job, not one that we've written, but one +that's provided as part of the Inform system. You'll remember that, when we first mentioned routines (see "Standalone routines" on page 57), we used the example of ``Initialise()`` and said @@ -311,7 +312,7 @@ not quite the whole story. To move the player character, we've got to specify where we want her to go, and we do that by supplying the internal ID of the destination room within the opening and closing parentheses. That is, instead of just ``PlayerTo()`` we call ``PlayerTo(top_of_tree)``, -and we describe ``top_of_tree`` as the routine's **argument**. +and we describe ``top_of_tree`` as the routine's :term:`argument`. Although we've moved the player character to another room, we're still in the middle of the intercepted ``Climb`` action. As previously, we need to @@ -345,7 +346,7 @@ interception not on an object-by-object basis, as we have been doing so far, but instead for every ``Drop`` which takes place in our troublesome ``top_of_tree`` room. This is what we have to write: -.. code-block:: inform6 +.. code-block:: inform Object top_of_tree "At the top of the tree" with description "You cling precariously to the trunk.", @@ -426,7 +427,7 @@ Of course, you might think that the standard message "Dropped" is slightly unhelpful in these non-standard circumstances. If you prefer to hint at what's just happened, you could use this alternative solution: -.. code-block:: inform6 +.. code-block:: inform Object top_of_tree "At the top of the tree" with description "You cling precariously to the trunk.", @@ -453,7 +454,7 @@ nest, or vice versa. It would be better not to end the game until we'd checked for the bird actually being in the nest; fortunately, that's easy to do: -.. code-block:: inform6 +.. code-block:: inform Object branch "wide firm bough" top_of_tree with description "It's flat enough to support a small object.", @@ -466,7 +467,7 @@ The extended ``if`` statement:: if (bird in nest && nest in branch) deadflag = 2; should now be read as: "Test whether the ``bird`` is currently in (or on) -the ``nest``, and whether the ``nest`` is currently on (or in) the +the ``nest``, *and* whether the ``nest`` is currently on (or in) the ``branch``; if both parts are ``true``, set the value of ``deadflag`` to 2; otherwise, do nothing". @@ -528,7 +529,7 @@ parentheses, thus:: PlayerTo(clearing); -A value given in parentheses like that is called an **argument** of the +A value given in parentheses like that is called an :term:`argument` of the routine. In fact, a routine can have more than one argument; if so, they're separated by commas. For example, to move the player character to a room *without* displaying that room's description, we could have supplied