16.9. Understanding kinds of value

| Chapter 16: Understanding |

| 16.9. Understanding kinds of value

In many cases, if K is the name of a kind of value, then Inform automatically makes an Understand token called "[K]" which matches only values of K. An example is "[number]", which matches text like 203 or SEVEN. There is a chart of the kinds of value in the Kinds index for a project, showing which ones can be understood in this way.

In particular, any newly created kind of value can always be understood. We make good use of that in the example game "Studious":

> "Studious"

> The Studio is a room. "The unreal world of the photographic studio, full of fake furniture, cantilevered stands and silver-white shades like miniature parachutes." The lumpy black camera is in the Studio. "A lumpy black camera hangs from a tripod."

> The rake-thin model is a woman in the Studio. "A rake-thin model, exquisitely bored and boringly exquisite, angles herself indolently."

> Limb is a kind of value. The limbs are left leg, left arm, right leg and right arm.

> Detailing is an action applying to one limb and one visible thing, requiring light. Check detailing: if the camera is not carried then say "You can hardly photograph without a camera, now can you?" instead. Report detailing: say "Click! You take a detail photograph of the [limb understood] of [the second noun]."

> Understand "photograph [limb] of [a person]" as detailing.

> Test me with "get camera / photograph left leg of model".

Note the way we can refer to the limb mentioned by the player as the "limb understood". Similarly, we could talk about the "number understood" if the value parsed had been a number, and so on.

One of the built-in kinds of value is worth special note: time. A time can hold either a specific time of day, such as 10:23 PM, or a duration of something, such as 21 minutes. The "[a time]" token matches times of day, such as 10:15 AM or MIDNIGHT. But 10 MINUTES wouldn't be recognised by "[a time]" since it isn't a specific moment in the day. To get around this, an alternative version called "[a time period]" is available. So:

> Understand "wait for [a time period]" as ...

would match WAIT FOR AN HOUR or WAIT FOR TWO HOURS 12 MINUTES.

292
| Example Pages A book with pages that can be read by number (as in "read page 3 in...") and which accepts relative page references as well (such as "read the last page of...", "read the next page", and so on). |
RB

> Suppose we have a book that the player must consult page-by-page, and we want to be able to accept all of the following input: > READ BOOK (to choose a random page and read it) > READ PAGE 1 IN BOOK > READ PAGE 2 > READ THE LAST PAGE OF THE BOOK > READ THE NEXT PAGE > READ PREVIOUS PAGE IN BOOK > READ THE FIRST PAGE One approach would be to write many different understand rules and actions: one action for reading randomly, one for reading a specific page, one for reading the first page, one for reading the previous page, one for reading the next page, and one for reading the last page. But this gets tedious to construct and maintain. More usefully, we could consider that all of the last four options are essentially the same action at heart: the player is asking to read a page in the book using a name rather than a number, and we will have to perform a minor calculation to discover what the number should be. Here's an implementation using named values to resolve this problem: "Pages" The Library is a room. The sinister book is carried by the player. The sinister book has a number called the last page read. The sinister book has a number called the length. The length of the sinister book is 50. Understand the command "read" as something new. Understand "read [something]" or "consult [something]" or "read in/from [something]" as reading. Reading is an action applying to one thing, requiring light. Understand "read [number] in/from/of [something]" or "read page [number] in/from/of [something]" or "look up page [number] in/from/of [something]" or "consult page [number] in/from/of [something]" as reading it in. Reading it in is an action applying to one number and one thing, requiring light. Named page is a kind of value. The named pages are first page, last page, next page, previous page. To decide what number is the effective value of (L - last page): decide on the length of the book. To decide what number is the effective value of (F - first page): decide on 1. To decide what number is the effective value of (N - next page): let X be the last page read of the book plus 1; decide on X. To decide what number is the effective value of (P - previous page): let X be the last page read of the book minus 1; decide on X. Understand "read [named page] in/from/of [something]" or "read the [named page] in/from/of [something]" as reading it relatively in. Reading it relatively in is an action applying to one named page and one thing, requiring light. Does the player mean reading something in the sinister book: it is very likely. This is the book requirement rule: if the player is not carrying the sinister book, say "You're not reading anything." instead. Check reading it relatively in: if the second noun is not the sinister book, say "There are no pages in [the second noun]." instead; abide by the book requirement rule. Carry out reading it relatively in: let N be the effective value of the named page understood; now the number understood is N; try reading N in the book. Check reading it in: if the second noun is not the sinister book, say "There are no pages in [the second noun]." instead; abide by the book requirement rule. Check reading it in: if the number understood is greater than the length of the sinister book, say "There are only [length of sinister book in words] pages in the book." instead; if the number understood is less than 1, say "The page numbering begins with 1." instead. Carry out reading it in: read page number understood. Check reading: if the noun is not the sinister book, say "There are no pages in [the noun]." instead; abide by the book requirement rule. Carry out reading: let N be a random number between 1 and the length of the sinister book; now the number understood is N; say "You flip the pages randomly and arrive at page [the number understood]:[paragraph break]"; try reading the number understood in the sinister book. Table of Book Contents
> page | content
> 2 | "dhuma jyotih salila marutam / samnipatah kva meghah / samdes arthah kva patukaranaih / pranibhih prapaniyah"
> 13 | "amathesteron pws eipe kai saphesteron"
> 50 | "Rrgshilz maplot..."
To read page (N - a number): now the last page read of the sinister book is N; if there is a content corresponding to a page of N in the Table of Book Contents: choose row with a page of N in the Table of Book Contents; say "You read: '[content entry]'[paragraph break]"; otherwise: say "Page [N] appears to be blank." To read page (N - 47): say "Your eyes burn; your ears ring. Beneath your gaze, the dreadful sigils writhe, reminding you of that which lies outside the edges of the universe..."; end the story saying "You have lost your remaining sanity". Test me with "read from the sinister book / read the book / read the next page / read page 2 / read previous page / g / read the first page / read the last page of the book / read the next page / read 47 in book".

293
| Example Down in Oodville Offering the player a choice of numbered options at certain times, without otherwise interfering with his ability to give regular commands. |
RB

294
| Example Straw Into Gold Creating a Rumpelstiltskin character who is always referred to as "dwarf", "guy", "dude", or "man" -- depending on which the player last used -- until the first time the player refers to him as "Rumpelstiltskin". |
RB

Previous | Contents | Next