Inform - Support - Source

Back to List

Inventory
Complete

Plain
Coloured
Gaudy

Browsing English.h

This is the complete source code of the example game English.inf.

001  ! ==============================================================================
002  !   ENGLISH:  Language Definition File
003  !
004  !   Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
005  !
006  !   Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
007  !
008  !   This file is automatically Included in your game file by "parserm".
009  !   Strictly, "parserm" includes the file named in the "language__" variable,
010  !   whose contents can be defined by+language_name=XXX compiler setting (with a
011  !   default of "english").
012  !
013  !   Define the constant DIALECT_US before including "Parser" to obtain American
014  !   English.
015  ! ==============================================================================
016   
017  System_file;
018   
019  ! ------------------------------------------------------------------------------
020  !   Part I.   Preliminaries
021  ! ------------------------------------------------------------------------------
022   
023  Constant EnglishNaturalLanguage;    ! Needed to keep old pronouns mechanism
024   
025  Class   CompassDirection
026    with  number 0, article "the",
027          description [;
028              if (location provides compass_look && location.compass_look(self)) rtrue;
029              if (self.compass_look()) rtrue;
030              L__M(##Look, 7, self);
031          ],
032          compass_look false,
033    has   scenery;
034   
035  Object Compass "compass" has concealed;
036   
037  #Ifndef WITHOUT_DIRECTIONS;
038  CompassDirection -> n_obj "north"
039                      with door_dir n_to, name 'n//' 'north';
040  CompassDirection -> s_obj "south"
041                      with door_dir s_to, name 's//' 'south';
042  CompassDirection -> e_obj "east"
043                      with door_dir e_to, name 'e//' 'east';
044  CompassDirection -> w_obj "west"
045                      with door_dir w_to, name 'w//' 'west';
046  CompassDirection -> ne_obj "northeast"
047                      with door_dir ne_to, name 'ne' 'northeast';
048  CompassDirection -> nw_obj "northwest"
049                      with door_dir nw_to, name 'nw' 'northwest';
050  CompassDirection -> se_obj "southeast"
051                      with door_dir se_to, name 'se' 'southeast';
052  CompassDirection -> sw_obj "southwest"
053                      with door_dir sw_to, name 'sw' 'southwest';
054  CompassDirection -> u_obj "up above"
055                      with door_dir u_to, name 'u//' 'up' 'ceiling' 'above' 'sky';
056  CompassDirection -> d_obj "ground"
057                      with door_dir d_to, name 'd//' 'down' 'floor' 'below' 'ground';
058  #endif; ! WITHOUT_DIRECTIONS
059   
060  CompassDirection -> in_obj "inside"
061                      with door_dir in_to, name 'in' 'inside';
062  CompassDirection -> out_obj "outside"
063                      with door_dir out_to, name 'out' 'outside';
064   
065  ! ------------------------------------------------------------------------------
066  !   Part II.   Vocabulary
067  ! ------------------------------------------------------------------------------
068   
069  Constant AGAIN1__WD     = 'again';
070  Constant AGAIN2__WD     = 'g//';
071  Constant AGAIN3__WD     = 'again';
072  Constant OOPS1__WD      = 'oops';
073  Constant OOPS2__WD      = 'o//';
074  Constant OOPS3__WD      = 'oops';
075  Constant UNDO1__WD      = 'undo';
076  Constant UNDO2__WD      = 'undo';
077  Constant UNDO3__WD      = 'undo';
078   
079  Constant ALL1__WD       = 'all';
080  Constant ALL2__WD       = 'each';
081  Constant ALL3__WD       = 'every';
082  Constant ALL4__WD       = 'everything';
083  Constant ALL5__WD       = 'both';
084  Constant AND1__WD       = 'and';
085  Constant AND2__WD       = 'and';
086  Constant AND3__WD       = 'and';
087  Constant BUT1__WD       = 'but';
088  Constant BUT2__WD       = 'except';
089  Constant BUT3__WD       = 'but';
090  Constant ME1__WD        = 'me';
091  Constant ME2__WD        = 'myself';
092  Constant ME3__WD        = 'self';
093  Constant OF1__WD        = 'of';
094  Constant OF2__WD        = 'of';
095  Constant OF3__WD        = 'of';
096  Constant OF4__WD        = 'of';
097  Constant OTHER1__WD     = 'another';
098  Constant OTHER2__WD     = 'other';
099  Constant OTHER3__WD     = 'other';
100  Constant THEN1__WD      = 'then';
101  Constant THEN2__WD      = 'then';
102  Constant THEN3__WD      = 'then';
103   
104  Constant NO1__WD        = 'n//';
105  Constant NO2__WD        = 'no';
106  Constant NO3__WD        = 'no';
107  Constant YES1__WD       = 'y//';
108  Constant YES2__WD       = 'yes';
109  Constant YES3__WD       = 'yes';
110   
111  Constant AMUSING__WD    = 'amusing';
112  Constant FULLSCORE1__WD = 'fullscore';
113  Constant FULLSCORE2__WD = 'full';
114  Constant QUIT1__WD      = 'q//';
115  Constant QUIT2__WD      = 'quit';
116  Constant RESTART__WD    = 'restart';
117  Constant RESTORE__WD    = 'restore';
118   
119  Array LanguagePronouns table
120   
121    ! word        possible GNAs                   connected
122    !             to follow:                      to:
123    !             a     i
124    !             s  p  s  p
125    !             mfnmfnmfnmfn
126   
127      'it'      $$001000111000                    NULL
128      'him'     $$100000000000                    NULL
129      'her'     $$010000000000                    NULL
130      'them'    $$000111000111                    NULL;
131   
132  Array LanguageDescriptors table
133   
134    ! word        possible GNAs   descriptor      connected
135    !             to follow:      type:           to:
136    !             a     i
137    !             s  p  s  p
138    !             mfnmfnmfnmfn
139   
140      'my'      $$111111111111    POSSESS_PK      0
141      'this'    $$111111111111    POSSESS_PK      0
142      'these'   $$000111000111    POSSESS_PK      0
143      'that'    $$111111111111    POSSESS_PK      1
144      'those'   $$000111000111    POSSESS_PK      1
145      'his'     $$111111111111    POSSESS_PK      'him'
146      'her'     $$111111111111    POSSESS_PK      'her'
147      'their'   $$111111111111    POSSESS_PK      'them'
148      'its'     $$111111111111    POSSESS_PK      'it'
149      'the'     $$111111111111    DEFART_PK       NULL
150      'a//'     $$111000111000    INDEFART_PK     NULL
151      'an'      $$111000111000    INDEFART_PK     NULL
152      'some'    $$000111000111    INDEFART_PK     NULL
153      'lit'     $$111111111111    light           NULL
154      'lighted' $$111111111111    light           NULL
155      'unlit'   $$111111111111    (-light)        NULL;
156   
157  Array LanguageNumbers table
158      'one' 1 'two' 2 'three' 3 'four' 4 'five' 5
159      'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10
160      'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15
161      'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20;
162   
163  ! ------------------------------------------------------------------------------
164  !   Part III.   Translation
165  ! ------------------------------------------------------------------------------
166   
167  [ LanguageToInformese;
168  ];
169   
170  ! ------------------------------------------------------------------------------
171  !   Part IV.   Printing
172  ! ------------------------------------------------------------------------------
173   
174  Constant LanguageAnimateGender   = male;
175  Constant LanguageInanimateGender = neuter;
176   
177  Constant LanguageContractionForms = 2;     ! English has two:
178                                             ! 0 = starting with a consonant
179                                             ! 1 = starting with a vowel
180   
181  [ LanguageContraction text;
182      if (text->0 == 'a' or 'e' or 'i' or 'o' or 'u'
183                  or 'A' or 'E' or 'I' or 'O' or 'U') return 1;
184      return 0;
185  ];
186   
187  Array LanguageArticles -->
188   
189   !   Contraction form 0:     Contraction form 1:
190   !   Cdef   Def    Indef     Cdef   Def    Indef
191   
192       "The " "the " "a "      "The " "the " "an "          ! Articles 0
193       "The " "the " "some "   "The " "the " "some ";       ! Articles 1
194   
195                     !             a           i
196                     !             s     p     s     p
197                     !             m f n m f n m f n m f n
198   
199  Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1;
200   
201  [ LanguageDirection d;
202      switch (d) {
203        n_to:    print "north";
204        s_to:    print "south";
205        e_to:    print "east";
206        w_to:    print "west";
207        ne_to:   print "northeast";
208        nw_to:   print "northwest";
209        se_to:   print "southeast";
210        sw_to:   print "southwest";
211        u_to:    print "up";
212        d_to:    print "down";
213        in_to:   print "in";
214        out_to:  print "out";
215        default: return RunTimeError(9,d);
216      }
217  ];
218   
219  [ LanguageNumber n f;
220      if (n == 0)    { print "zero"; rfalse; }
221      if (n < 0)     { print "minus "; n = -n; }
222      if (n >= 1000) { print (LanguageNumber) n/1000, " thousand"; n = n%1000; f = 1; }
223      if (n >= 100)  {
224          if (f == 1) print ", ";
225          print (LanguageNumber) n/100, " hundred"; n = n%100; f = 1;
226      }
227      if (n == 0) rfalse;
228      #Ifdef DIALECT_US;
229      if (f == 1) print " ";
230      #Ifnot;
231      if (f == 1) print " and ";
232      #Endif;
233      switch (n) {
234        1:    print "one";
235        2:    print "two";
236        3:    print "three";
237        4:    print "four";
238        5:    print "five";
239        6:    print "six";
240        7:    print "seven";
241        8:    print "eight";
242        9:    print "nine";
243        10:   print "ten";
244        11:   print "eleven";
245        12:   print "twelve";
246        13:   print "thirteen";
247        14:   print "fourteen";
248        15:   print "fifteen";
249        16:   print "sixteen";
250        17:   print "seventeen";
251        18:   print "eighteen";
252        19:   print "nineteen";
253        20 to 99: switch (n/10) {
254          2:  print "twenty";
255          3:  print "thirty";
256          4:  print "forty";
257          5:  print "fifty";
258          6:  print "sixty";
259          7:  print "seventy";
260          8:  print "eighty";
261          9:  print "ninety";
262          }
263          if (n%10 ~= 0) print "-", (LanguageNumber) n%10;
264      }
265  ];
266   
267  [ LanguageTimeOfDay hours mins i;
268      i = hours%12;
269      if (i == 0) i = 12;
270      if (i < 10) print " ";
271      print i, ":", mins/10, mins%10;
272      if ((hours/12) > 0) print " pm"; else print " am";
273  ];
274   
275  [ LanguageVerb i;
276      switch (i) {
277        'i//','inv','inventory':
278                 print "take inventory";
279        'l//':   print "look";
280        'x//':   print "examine";
281        'z//':   print "wait";
282        default: rfalse;
283      }
284      rtrue;
285  ];
286   
287  ! ----------------------------------------------------------------------------
288  !  LanguageVerbIsDebugging is called by SearchScope.  It should return true 
289  !  if word w is a debugging verb which needs all objects to be in scope.
290  ! ----------------------------------------------------------------------------
291   
292  #Ifdef DEBUG;
293  [ LanguageVerbIsDebugging w;
294      if (w == 'purloin' or 'tree' or 'abstract'
295                         or 'gonear' or 'scope' or 'showobj')
296          rtrue;
297      rfalse;
298  ];
299  #Endif;
300   
301  ! ----------------------------------------------------------------------------
302  !  LanguageVerbLikesAdverb is called by PrintCommand when printing an UPTO_PE
303  !  error or an inference message.  Words which are intransitive verbs, i.e.,
304  !  which require a direction name as an adverb ('walk west'), not a noun
305  !  ('I only understood you as far as wanting to touch /the/ ground'), should
306  !  cause the routine to return true.
307  ! ----------------------------------------------------------------------------
308   
309  [ LanguageVerbLikesAdverb w;
310      if (w == 'look' or 'go' or 'push' or 'walk')
311          rtrue;
312      rfalse;
313  ];
314   
315  ! ----------------------------------------------------------------------------
316  !  LanguageVerbMayBeName is called by NounDomain when dealing with the 
317  !  player's reply to a "Which do you mean, the short stick or the long
318  !  stick?" prompt from the parser. If the reply is another verb (for example,
319  !  LOOK) then then previous ambiguous command is discarded /unless/
320  !  it is one of these words which could be both a verb /and/ an
321  !  adjective in a 'name' property.
322  ! ----------------------------------------------------------------------------
323   
324  [ LanguageVerbMayBeName w;
325      if (w == 'long' or 'short' or 'normal'
326                      or 'brief' or 'full' or 'verbose')
327          rtrue;
328      rfalse;
329  ];
330   
331  Constant NKEY__TX       = "N = next subject";
332  Constant PKEY__TX       = "P = previous";
333  Constant QKEY1__TX      = "  Q = resume game";
334  Constant QKEY2__TX      = "Q = previous menu";
335  Constant RKEY__TX       = "RETURN = read subject";
336   
337  Constant NKEY1__KY      = 'N';
338  Constant NKEY2__KY      = 'n';
339  Constant PKEY1__KY      = 'P';
340  Constant PKEY2__KY      = 'p';
341  Constant QKEY1__KY      = 'Q';
342  Constant QKEY2__KY      = 'q';
343   
344  Constant SCORE__TX      = "Score: ";
345  Constant MOVES__TX      = "Moves: ";
346  Constant TIME__TX       = "Time: ";
347  Constant CANTGO__TX     = "You can't go that way.";
348  Constant FORMER__TX     = "your former self";
349  Constant YOURSELF__TX   = "yourself";
350  Constant YOU__TX        = "You";
351  Constant DARKNESS__TX   = "Darkness";
352   
353  Constant THOSET__TX     = "those things";
354  Constant THAT__TX       = "that";
355  Constant OR__TX         = " or ";
356  Constant NOTHING__TX    = "nothing";
357  Constant IS__TX         = " is";
358  Constant ARE__TX        = " are";
359  Constant IS2__TX        = "is ";
360  Constant ARE2__TX       = "are ";
361  Constant AND__TX        = " and ";
362  Constant WHOM__TX       = "whom ";
363  Constant WHICH__TX      = "which ";
364  Constant COMMA__TX      = ", ";
365   
366   
367  [ ThatorThose obj;      ! Used in the accusative
368      if (obj == player)            { print "you"; return; }
369      if (obj has pluralname)       { print "those"; return; }
370      if (obj has animate) {
371          if (obj has female)       { print "her"; return; }
372          else
373              if (obj hasnt neuter) { print "him"; return; }
374      }
375      print "that";
376  ];
377   
378  [ ItorThem obj;
379      if (obj == player)            { print "yourself"; return; }
380      if (obj has pluralname)       { print "them"; return; }
381      if (obj has animate) {
382          if (obj has female)       { print "her"; return; }
383          else
384              if (obj hasnt neuter) { print "him"; return; }
385      }
386      print "it";
387  ];
388   
389  [ IsorAre obj;
390      if (obj has pluralname || obj == player) print "are"; else print "is";
391  ];
392   
393  [ CThatorThose obj;     ! Used in the nominative
394      if (obj == player)            { print "You"; return; }
395      if (obj has pluralname)       { print "Those"; return; }
396      if (obj has animate) {
397          if (obj has female)       { print "She"; return; }
398          else
399              if (obj hasnt neuter) { print "He"; return; }
400      }
401      print "That";
402  ];
403   
404  [ CTheyreorThats obj;
405      if (obj == player)             { print "You're"; return; }
406      if (obj has pluralname)        { print "They're"; return; }
407      if (obj has animate) {
408          if (obj has female)        { print "She's"; return; }
409          else if (obj hasnt neuter) { print "He's"; return; }
410      }
411      print "That's";
412  ];
413   
414  [ LanguageLM n x1;
415    Answer,Ask:
416              "There is no reply.";
417  ! Ask:      see Answer
418    Attack:   "Violence isn't the answer to this one.";
419    Blow:     "You can't usefully blow ", (thatorthose) x1, ".";
420    Burn:     "This dangerous act would achieve little.";
421    Buy:      "Nothing is on sale.";
422    Climb:    "I don't think much is to be achieved by that.";
423    Close: switch (n) {
424          1:  print_ret (ctheyreorthats) x1, " not something you can close.";
425          2:  print_ret (ctheyreorthats) x1, " already closed.";
426          3:  "You close ", (the) x1, ".";
427      }
428    CommandsOff: switch (n) {
429          1: "[Command recording off.]";
430          #Ifdef TARGET_GLULX;
431          2: "[Command recording already off.]";
432          #Endif; ! TARGET_
433      }
434    CommandsOn: switch (n) {
435          1: "[Command recording on.]";
436          #Ifdef TARGET_GLULX;
437          2: "[Commands are currently replaying.]";
438          3: "[Command recording already on.]";
439          4: "[Command recording failed.]";
440          #Endif; ! TARGET_
441      }
442    CommandsRead: switch (n) {
443          1: "[Replaying commands.]";
444          #Ifdef TARGET_GLULX;
445          2: "[Commands are already replaying.]";
446          3: "[Command replay failed.  Command recording is on.]";
447          4: "[Command replay failed.]";
448          5: "[Command replay complete.]";
449          #Endif; ! TARGET_
450      }
451    Consult:  "You discover nothing of interest in ", (the) x1, ".";
452    Cut:      "Cutting ", (thatorthose) x1, " up would achieve little.";
453    Dig:      "Digging would achieve nothing here.";
454    Disrobe: switch (n) {
455          1:  "You're not wearing ", (thatorthose) x1, ".";
456          2:  "You take off ", (the) x1, ".";
457      }
458    Drink:    "There's nothing suitable to drink here.";
459    Drop: switch (n) {
460          1:  if (x1 has pluralname) print (The) x1, " are "; else print (The) x1, " is ";
461              "already here.";
462          2:  "You haven't got ", (thatorthose) x1, ".";
463          3:  "(first taking ", (the) x1, " off)";
464          4:  "Dropped.";
465      }
466    Eat: switch (n) {
467          1:  print_ret (ctheyreorthats) x1, " plainly inedible.";
468          2:  "You eat ", (the) x1, ". Not bad.";
469      }
470    EmptyT: switch (n) {
471          1:  print_ret (The) x1, " can't contain things.";
472          2:  print_ret (The) x1, " ", (isorare) x1, " closed.";
473          3:  print_ret (The) x1, " ", (isorare) x1, " empty already.";
474          4:  "That would scarcely empty anything.";
475      }
476    Enter: switch (n) {
477          1:  print "But you're already ";
478              if (x1 has supporter) print "on "; else print "in ";
479              print_ret (the) x1, ".";
480          2:  if (x1 has pluralname) print "They're"; else print "That's";
481              print " not something you can ";
482              switch (verb_word) {
483                'stand':  "stand on.";
484                'sit':    "sit down on.";
485                'lie':    "lie down on.";
486                default:  "enter.";
487              }
488          3:  "You can't get into the closed ", (name) x1, ".";
489          4:  "You can only get into something free-standing.";
490          5:  print "You get ";
491              if (x1 has supporter) print "onto "; else print "into ";
492              print_ret (the) x1, ".";
493          6:  print "(getting ";
494              if (x1 has supporter) print "off "; else print "out of ";
495              print (the) x1; ")";
496          7:  if (x1 has supporter) "(getting onto ", (the) x1, ")^";
497              if (x1 has container) "(getting into ", (the) x1, ")^";
498              "(entering ", (the) x1, ")^";
499      }
500    Examine: switch (n) {
501          1:  "Darkness, noun.  An absence of light to see by.";
502          2:  "You see nothing special about ", (the) x1, ".";
503          3:  print (The) x1, " ", (isorare) x1, " currently switched ";
504              if (x1 has on) "on."; else "off.";
505      }
506    Exit: switch (n) {
507          1:  "But you aren't in anything at the moment.";
508          2:  "You can't get out of the closed ", (name) x1, ".";
509          3:  print "You get ";
510              if (x1 has supporter) print "off "; else print "out of ";
511              print_ret (the) x1, ".";
512          4:  print "But you aren't ";
513              if (x1 has supporter) print "on "; else print "in ";
514              print_ret (the) x1, ".";
515      }
516    Fill:     "But there's no water here to carry.";
517    FullScore: switch (n) {
518          1:  if (deadflag) print "The score was "; else print "The score is ";
519              "made up as follows:^";
520          2:  "finding sundry items";
521          3:  "visiting various places";
522          4:  print "total (out of ", MAX_SCORE; ")";
523      }
524    GetOff:   "But you aren't on ", (the) x1, " at the moment.";
525    Give: switch (n) {
526          1:  "You aren't holding ", (the) x1, ".";
527          2:  "You juggle ", (the) x1, " for a while, but don't achieve much.";
528          3:  print (The) x1;
529              if (x1 has pluralname) print " don't"; else print " doesn't";
530              " seem interested.";
531      }
532    Go: switch (n) {
533          1:  print "You'll have to get ";
534              if (x1 has supporter) print "off "; else print "out of ";
535              print_ret (the) x1, " first.";
536          2:  print_ret (string) CANTGO__TX;   ! "You can't go that way."
537          3:  "You are unable to climb ", (the) x1, ".";
538          4:  "You are unable to descend by ", (the) x1, ".";
539          5:  "You can't, since ", (the) x1, " ", (isorare) x1, " in the way.";
540          6:  print "You can't, since ", (the) x1;
541              if (x1 has pluralname) " lead nowhere."; else " leads nowhere.";
542      }
543    Insert: switch (n) {
544          1:  "You need to be holding ", (the) x1, " before you can put ", (itorthem) x1,
545              " into something else.";
546          2:  print_ret (Cthatorthose) x1, " can't contain things.";
547          3:  print_ret (The) x1, " ", (isorare) x1, " closed.";
548          4:  "You'll need to take ", (itorthem) x1, " off first.";
549          5:  "You can't put something inside itself.";
550          6:  "(first taking ", (itorthem) x1, " off)^";
551          7:  "There is no more room in ", (the) x1, ".";
552          8:  "Done.";
553          9:  "You put ", (the) x1, " into ", (the) second, ".";
554      }
555    Inv: switch (n) {
556          1:  "You are carrying nothing.";
557          2:  print "You are carrying";
558          3:  print ":^";
559          4:  print ".^";
560      }
561    Jump:     "You jump on the spot, fruitlessly.";
562    JumpOver,Tie:
563              "You would achieve nothing by this.";
564    Kiss:     "Keep your mind on the game.";
565    Listen:   "You hear nothing unexpected.";
566    ListMiscellany: switch (n) {
567          1:  print " (providing light)";
568          2:  print " (which ", (isorare) x1, " closed)";
569          3:  print " (closed and providing light)";
570          4:  print " (which ", (isorare) x1, " empty)";
571          5:  print " (empty and providing light)";
572          6:  print " (which ", (isorare) x1, " closed and empty)";
573          7:  print " (closed, empty and providing light)";
574          8:  print " (providing light and being worn";
575          9:  print " (providing light";
576          10: print " (being worn";
577          11: print " (which ", (isorare) x1, " ";
578          12: print "open";
579          13: print "open but empty";
580          14: print "closed";
581          15: print "closed and locked";
582          16: print " and empty";
583          17: print " (which ", (isorare) x1, " empty)";
584          18: print " containing ";
585          19: print " (on ";
586          20: print ", on top of ";
587          21: print " (in ";
588          22: print ", inside ";
589      }
590    LMode1:   " is now in its normal ~brief~ printing mode, which gives long descriptions
591               of places never before visited and short descriptions otherwise.";
592    LMode2:   " is now in its ~verbose~ mode, which always gives long descriptions
593               of locations (even if you've been there before).";
594    LMode3:   " is now in its ~superbrief~ mode, which always gives short descriptions
595               of locations (even if you haven't been there before).";
596    Lock: switch (n) {
597          1:  if (x1 has pluralname) print "They don't "; else print "That doesn't ";
598              "seem to be something you can lock.";
599          2:  print_ret (ctheyreorthats) x1, " locked at the moment.";
600          3:  "First you'll have to close ", (the) x1, ".";
601          4:  if (x1 has pluralname) print "Those don't "; else print "That doesn't ";
602              "seem to fit the lock.";
603          5:  "You lock ", (the) x1, ".";
604      }
605    Look: switch (n) {
606          1:  print " (on ", (the) x1, ")";
607          2:  print " (in ", (the) x1, ")";
608          3:  print " (as ", (object) x1, ")";
609          4:  print "^On ", (the) x1;
610              WriteListFrom(child(x1),
611                ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
612              ".";
613          5,6:
614              if (x1 ~= location) {
615                  if (x1 has supporter) print "^On "; else print "^In ";
616                  print (the) x1, " you";
617              }
618              else print "^You";
619              print " can ";
620              if (n == 5) print "also ";
621              print "see ";
622              WriteListFrom(child(x1),
623                ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+WORKFLAG_BIT);
624              if (x1 ~= location) "."; else " here.";
625          7:  "You see nothing unexpected in that direction.";
626      }
627    LookUnder: switch (n) {
628          1:  "But it's dark.";
629          2:  "You find nothing of interest.";
630      }
631    Mild:     "Quite.";
632    Miscellany: switch (n) {
633          1:  "(considering the first sixteen objects only)^";
634          2:  "Nothing to do!";
635          3:  print " You have died ";
636          4:  print " You have won ";
637          5:  print "^Would you like to RESTART, RESTORE a saved game";
638              #Ifdef DEATH_MENTION_UNDO;
639              print ", UNDO your last move";
640              #Endif;
641              if (TASKS_PROVIDED == 0) print ", give the FULL score for that game";
642              if (deadflag == 2 && AMUSING_PROVIDED == 0)
643                  print ", see some suggestions for AMUSING things to do";
644              " or QUIT?";
645          6:  "[Your interpreter does not provide ~undo~.  Sorry!]";
646              #Ifdef TARGET_ZCODE;
647          7:  "~Undo~ failed.  [Not all interpreters provide it.]";
648              #Ifnot; ! TARGET_GLULX
649          7:  "[You cannot ~undo~ any further.]";
650              #Endif; ! TARGET_
651          8:  "Please give one of the answers above.";
652          9:  "^It is now pitch dark in here!";
653          10: "I beg your pardon?";
654          11: "[You can't ~undo~ what hasn't been done!]";
655          12: "[Can't ~undo~ twice in succession. Sorry!]";
656          13: "[Previous turn undone.]";
657          14: "Sorry, that can't be corrected.";
658          15: "Think nothing of it.";
659          16: "~Oops~ can only correct a single word.";
660          17: "It is pitch dark, and you can't see a thing.";
661          18: print "yourself";
662          19: "As good-looking as ever.";
663          20: "To repeat a command like ~frog, jump~, just say ~again~, not ~frog, again~.";
664          21: "You can hardly repeat that.";
665          22: "You can't begin with a comma.";
666          23: "You seem to want to talk to someone, but I can't see whom.";
667          24: "You can't talk to ", (the) x1, ".";
668          25: "To talk to someone, try ~someone, hello~ or some such.";
669          26: "(first taking ", (the) not_holding, ")";
670          27: "I didn't understand that sentence.";
671          28: print "I only understood you as far as wanting to ";
672          29: "I didn't understand that number.";
673          30: "You can't see any such thing.";
674          31: "You seem to have said too little!";
675          32: "You aren't holding that!";
676          33: "You can't use multiple objects with that verb.";
677          34: "You can only use multiple objects once on a line.";
678          35: "I'm not sure what ~", (address) pronoun_word, "~ refers to.";
679          36: "You excepted something not included anyway!";
680          37: "You can only do that to something animate.";
681              #Ifdef DIALECT_US;
682          38: "That's not a verb I recognize.";
683              #Ifnot;
684          38: "That's not a verb I recognise.";
685              #Endif;
686          39: "That's not something you need to refer to in the course of this game.";
687          40: "You can't see ~", (address) pronoun_word, "~ (", (the) pronoun_obj,
688              ") at the moment.";
689          41: "I didn't understand the way that finished.";
690          42: if (x1 == 0) print "None"; else print "Only ", (number) x1;
691              print " of those ";
692              if (x1 == 1) print "is"; else print "are";
693              " available.";
694          43: "Nothing to do!";
695          44: "There are none at all available!";
696          45: print "Who do you mean, ";
697          46: print "Which do you mean, ";
698          47: "Sorry, you can only have one item here. Which exactly?";
699          48: print "Whom do you want";
700              if (actor ~= player) print " ", (the) actor;
701              print " to "; PrintCommand(); print "?^";
702          49: print "What do you want";
703              if (actor ~= player) print " ", (the) actor;
704              print " to "; PrintCommand(); print "?^";
705          50: print "Your score has just gone ";
706              if (x1 > 0) print "up"; else { x1 = -x1; print "down"; }
707              print " by ", (number) x1, " point";
708              if (x1 >