1 ! ==============================================================================
2 ! ENGLISH: Language Definition File
4 ! Supplied for use with Inform 6 -- Release 6.12.2 -- Serial number 180520
6 ! Copyright Graham Nelson 1993-2004 and David Griffith 2012-2018
8 ! This file is free software: you can redistribute it and/or modify
9 ! it under the terms of the GNU Affero General Public License as
10 ! published by the Free Software Foundation, either version 3 of the
11 ! License, or (at your option) any later version.
13 ! This file is distributed in the hope that it will be useful, but
14 ! WITHOUT ANY WARRANTY; without even the implied warranty of
15 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 ! Affero General Public License for more details.
18 ! You should have received a copy of the GNU Affero General Public
19 ! License along with this program. If not, see
20 ! https://gnu.org/licenses/
22 ! This file is automatically Included in your game file by "parserm".
23 ! Strictly, "parserm" includes the file named in the "language__" variable,
24 ! whose contents can be defined by+language_name=XXX compiler setting (with a
25 ! default of "english").
27 ! Define the constant DIALECT_US before including "parser" to obtain American
29 ! ==============================================================================
33 #Ifndef LIBRARY_ENGLISH; ! if this file is already included,
34 ! don't try to include it again.
36 ! ------------------------------------------------------------------------------
37 ! Part I. Preliminaries
38 ! ------------------------------------------------------------------------------
40 Constant EnglishNaturalLanguage; ! Needed to keep old pronouns mechanism
42 Class CompassDirection
43 with number 0, article "the",
45 if (location provides compass_look && location.compass_look(self)) rtrue;
46 if (self.compass_look()) rtrue;
47 L__M(##Look, 7, self);
50 parse_name [; return -1; ]
53 Object Compass "compass" has concealed;
55 #Ifndef WITHOUT_DIRECTIONS;
56 CompassDirection -> n_obj with short_name "north", door_dir n_to,
58 CompassDirection -> s_obj with short_name "south", door_dir s_to,
60 CompassDirection -> e_obj with short_name "east", door_dir e_to,
62 CompassDirection -> w_obj with short_name "west", door_dir w_to,
64 CompassDirection -> ne_obj with short_name "northeast", door_dir ne_to,
65 name 'ne' 'northeast';
66 CompassDirection -> nw_obj with short_name "northwest", door_dir nw_to,
67 name 'nw' 'northwest';
68 CompassDirection -> se_obj with short_name "southeast", door_dir se_to,
69 name 'se' 'southeast';
70 CompassDirection -> sw_obj with short_name "southwest", door_dir sw_to,
71 name 'sw' 'southwest';
72 CompassDirection -> u_obj with short_name "up above", door_dir u_to,
73 name 'u//' 'up' 'ceiling' 'above' 'sky';
74 CompassDirection -> d_obj with short_name "ground", door_dir d_to,
75 name 'd//' 'down' 'floor' 'below' 'ground';
76 #endif; ! WITHOUT_DIRECTIONS
78 CompassDirection -> in_obj with short_name "inside", door_dir in_to;
79 CompassDirection -> out_obj with short_name "outside", door_dir out_to;
81 ! ------------------------------------------------------------------------------
83 ! ------------------------------------------------------------------------------
85 Constant AGAIN1__WD = 'again';
86 Constant AGAIN2__WD = 'g//';
87 Constant AGAIN3__WD = 'again';
88 Constant OOPS1__WD = 'oops';
89 Constant OOPS2__WD = 'o//';
90 Constant OOPS3__WD = 'oops';
91 Constant UNDO1__WD = 'undo';
92 Constant UNDO2__WD = 'undo';
93 Constant UNDO3__WD = 'undo';
95 Constant ALL1__WD = 'all';
96 Constant ALL2__WD = 'each';
97 Constant ALL3__WD = 'every';
98 Constant ALL4__WD = 'everything';
99 Constant ALL5__WD = 'both';
100 Constant AND1__WD = 'and';
101 Constant AND2__WD = 'and';
102 Constant AND3__WD = 'and';
103 Constant BUT1__WD = 'but';
104 Constant BUT2__WD = 'except';
105 Constant BUT3__WD = 'but';
106 Constant ME1__WD = 'me';
107 Constant ME2__WD = 'myself';
108 Constant ME3__WD = 'self';
109 Constant OF1__WD = 'of';
110 Constant OF2__WD = 'of';
111 Constant OF3__WD = 'of';
112 Constant OF4__WD = 'of';
113 Constant OTHER1__WD = 'another';
114 Constant OTHER2__WD = 'other';
115 Constant OTHER3__WD = 'other';
116 Constant THEN1__WD = 'then';
117 Constant THEN2__WD = 'then';
118 Constant THEN3__WD = 'then';
120 Constant NO1__WD = 'n//';
121 Constant NO2__WD = 'no';
122 Constant NO3__WD = 'no';
123 Constant YES1__WD = 'y//';
124 Constant YES2__WD = 'yes';
125 Constant YES3__WD = 'yes';
127 Constant AMUSING__WD = 'amusing';
128 Constant FULLSCORE1__WD = 'fullscore';
129 Constant FULLSCORE2__WD = 'full';
130 Constant QUIT1__WD = 'q//';
131 Constant QUIT2__WD = 'quit';
132 Constant RESTART__WD = 'restart';
133 Constant RESTORE__WD = 'restore';
135 Array LanguagePronouns table
137 ! word possible GNAs connected
143 'it' $$001000111000 NULL
144 'him' $$100000100000 NULL
145 'her' $$010000010000 NULL
146 'them' $$000111000111 NULL;
148 Array LanguageDescriptors table
150 ! word possible GNAs descriptor connected
151 ! to follow: type: to:
156 'my' $$111111111111 POSSESS_PK 0
157 'this' $$111111111111 POSSESS_PK 0
158 'these' $$000111000111 POSSESS_PK 0
159 'that' $$111111111111 POSSESS_PK 1
160 'those' $$000111000111 POSSESS_PK 1
161 'his' $$111111111111 POSSESS_PK 'him'
162 'her' $$111111111111 POSSESS_PK 'her'
163 'their' $$111111111111 POSSESS_PK 'them'
164 'its' $$111111111111 POSSESS_PK 'it'
165 'the' $$111111111111 DEFART_PK NULL
166 'a//' $$111000111000 INDEFART_PK NULL
167 'an' $$111000111000 INDEFART_PK NULL
168 'some' $$000111000111 INDEFART_PK NULL
169 'lit' $$111111111111 light NULL
170 'lighted' $$111111111111 light NULL
171 'unlit' $$111111111111 (-light) NULL;
173 Array LanguageNumbers table
174 'one' 1 'two' 2 'three' 3 'four' 4 'five' 5
175 'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10
176 'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15
177 'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20;
179 ! ------------------------------------------------------------------------------
180 ! Part III. Translation
181 ! ------------------------------------------------------------------------------
183 [ LanguageToInformese;
186 ! ------------------------------------------------------------------------------
188 ! ------------------------------------------------------------------------------
190 Constant LanguageAnimateGender = male;
191 Constant LanguageInanimateGender = neuter;
193 Constant LanguageContractionForms = 2; ! English has two:
194 ! 0 = starting with a consonant
195 ! 1 = starting with a vowel
197 [ LanguageContraction text;
198 if (text->0 == 'a' or 'e' or 'i' or 'o' or 'u'
199 or 'A' or 'E' or 'I' or 'O' or 'U') return 1;
203 Array LanguageArticles -->
205 ! Contraction form 0: Contraction form 1:
206 ! Cdef Def Indef Cdef Def Indef
208 "The " "the " "a " "The " "the " "an " ! Articles 0
209 "The " "the " "some " "The " "the " "some "; ! Articles 1
213 ! m f n m f n m f n m f n
215 Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1;
217 [ LanguageDirection d;
223 ne_to: print "northeast";
224 nw_to: print "northwest";
225 se_to: print "southeast";
226 sw_to: print "southwest";
231 default: return RunTimeError(9,d);
235 [ LanguageNumber n f;
236 if (n == 0) { print "zero"; rfalse; }
237 if (n < 0) { print "minus "; n = -n; }
238 if (n >= 1000) { print (LanguageNumber) n/1000, " thousand"; n = n%1000; f = 1; }
240 if (f == 1) print ", ";
241 print (LanguageNumber) n/100, " hundred"; n = n%100; f = 1;
245 if (f == 1) print " ";
247 if (f == 1) print " and ";
262 13: print "thirteen";
263 14: print "fourteen";
266 17: print "seventeen";
267 18: print "eighteen";
268 19: print "nineteen";
269 20 to 99: switch (n/10) {
279 if (n%10 ~= 0) print "-", (LanguageNumber) n%10;
283 [ LanguageTimeOfDay hours mins i;
286 if (i < 10) print " ";
287 print i, ":", mins/10, mins%10;
288 if ((hours/12) > 0) print " pm"; else print " am";
293 'i//','inv','inventory':
294 print "take inventory";
296 'x//': print "examine";
303 ! ----------------------------------------------------------------------------
304 ! LanguageVerbIsDebugging is called by SearchScope. It should return true
305 ! if word w is a debugging verb which needs all objects to be in scope.
306 ! ----------------------------------------------------------------------------
309 [ LanguageVerbIsDebugging w;
310 if (w == 'purloin' or 'tree' or 'abstract'
311 or 'gonear' or 'scope' or 'showobj')
317 ! ----------------------------------------------------------------------------
318 ! LanguageVerbLikesAdverb is called by PrintCommand when printing an UPTO_PE
319 ! error or an inference message. Words which are intransitive verbs, i.e.,
320 ! which require a direction name as an adverb ('walk west'), not a noun
321 ! ('I only understood you as far as wanting to touch /the/ ground'), should
322 ! cause the routine to return true.
323 ! ----------------------------------------------------------------------------
325 [ LanguageVerbLikesAdverb w;
326 if (w == 'look' or 'go' or 'push' or 'walk')
331 ! ----------------------------------------------------------------------------
332 ! LanguageVerbMayBeName is called by NounDomain when dealing with the
333 ! player's reply to a "Which do you mean, the short stick or the long
334 ! stick?" prompt from the parser. If the reply is another verb (for example,
335 ! LOOK) then then previous ambiguous command is discarded /unless/
336 ! it is one of these words which could be both a verb /and/ an
337 ! adjective in a 'name' property.
338 ! ----------------------------------------------------------------------------
340 [ LanguageVerbMayBeName w;
341 if (w == 'long' or 'short' or 'normal'
342 or 'brief' or 'full' or 'verbose')
347 Constant NKEY__TX = "N = next subject";
348 Constant PKEY__TX = "P = previous";
349 Constant QKEY1__TX = " Q = resume game";
350 Constant QKEY2__TX = "Q = previous menu";
351 Constant RKEY__TX = "RETURN = read subject";
353 Constant NKEY1__KY = 'N';
354 Constant NKEY2__KY = 'n';
355 Constant PKEY1__KY = 'P';
356 Constant PKEY2__KY = 'p';
357 Constant QKEY1__KY = 'Q';
358 Constant QKEY2__KY = 'q';
360 Constant SCORE__TX = "Score: ";
361 Constant MOVES__TX = "Moves: ";
362 Constant TIME__TX = "Time: ";
363 Constant CANTGO__TX = "You can't go that way.";
364 Constant FORMER__TX = "your former self";
365 Constant MYFORMER__TX = "my former self";
366 Constant YOURSELF__TX = "yourself";
367 Constant MYSELF__TX = "myself";
368 Constant YOU__TX = "You";
369 Constant DARKNESS__TX = "Darkness";
371 Constant THOSET__TX = "those things";
372 Constant THAT__TX = "that";
373 Constant OR__TX = " or ";
374 Constant NOTHING__TX = "nothing";
375 Constant IS__TX = " is";
376 Constant ARE__TX = " are";
377 Constant IS2__TX = "is ";
378 Constant ARE2__TX = "are ";
379 Constant WAS__TX = " was";
380 Constant WERE__TX = " were";
381 Constant WAS2__TX = "was ";
382 Constant WERE2__TX = "were ";
383 Constant AND__TX = " and ";
384 Constant WHOM__TX = "whom ";
385 Constant WHICH__TX = "which ";
386 Constant COMMA__TX = ", ";
387 Constant COLON__TX = ": ";
389 ! ----------------------------------------------------------------------------
390 ! FYI on nominative pronouns versus accusative pronouns...
391 ! Consider the sentence "She hit him.".
392 ! "She" is in the nominative case. It appears at the beginning of a sentence.
393 ! "him" is in the accusative case. It won't appear at the beginning.
394 ! ----------------------------------------------------------------------------
399 if (player provides narrative_voice) {
400 if (player.narrative_voice == 1) { print "me"; return; }
401 if (player.narrative_voice == 3) { CDefart(player); return; }
406 if (obj has pluralname) { print "those"; return; }
407 if (obj has female) { print "her"; return; }
408 if (obj has male or animate)
409 if (obj hasnt neuter) { print "him"; return; }
416 if (player provides narrative_voice) {
417 if (player.narrative_voice == 1) { print "myself"; return; }
418 if (player.narrative_voice == 3) { CDefart(player); return; }
423 if (obj has pluralname) { print "them"; return; }
424 if (obj has female) { print "her"; return; }
425 if (obj has male or animate)
426 if (obj hasnt neuter) { print "him"; return; }
433 if (player provides narrative_voice) {
434 if (player.narrative_voice == 1) { print "I"; return; }
435 if (player.narrative_voice == 3) { CDefart(player); return; }
440 if (obj has pluralname) { print "Those"; return; }
441 if (obj has female) { print "She"; return; }
442 if (obj has male or animate) {
443 if (obj hasnt neuter) { print "He"; return; }
449 [ CTheyreorThats obj;
451 if (player provides narrative_voice) {
452 if (player.narrative_voice == 1) { Tense("I'm", "I was"); return; }
453 if (player.narrative_voice == 3) { CDefart(player); Tense("'s", " was"); return; }
455 Tense("You're", "You were");
458 if (obj has pluralname) { Tense("They're", "They were"); return; }
459 if (obj has female) { Tense("She's", "She was"); return; }
460 if (obj has male or animate) {
461 if (obj hasnt neuter) { Tense("He's", "He was"); return; }
463 Tense("That's", "That was");
467 if (player provides narrative_tense && player.narrative_tense == PAST_TENSE) {
468 if (obj has pluralname || obj == player) print "were"; else print "was";
471 if (obj has pluralname || obj == player) print "are"; else print "is";
475 [ nop x; x = x; ]; ! print rule to absorb unwanted return value
477 [ SubjectNotPlayer obj reportage v2 v3 past;
478 if (past && player provides narrative_tense && player.narrative_tense == PAST_TENSE) {
482 if (reportage && actor ~= player) {
483 L__M(##Miscellany, 60, actor);
485 print (theActor) obj, " ", (string) v3;
489 if (obj has pluralname) {
490 print (the) obj, " ", (string) v2;
493 else {print (the) obj, " ", (string) v3; return;}
496 if (obj has pluralname) { print (The) obj, " ", (string) v2; return;}
497 else { print (The) obj, " ", (string) v3; return;}
500 [ CSubjectVoice obj v1 v2 v3 past;
501 if (past && player provides narrative_tense && player.narrative_tense == PAST_TENSE) {
506 if (v2 == 0) v2 = v1;
507 if (v3 == 0) v3 = v1;
509 if (obj ~= player) { print (string) v3; return; }
511 if (player provides narrative_voice) switch (player.narrative_voice) {
512 1: print (string) v1; return;
514 3: print (string) v3; return;
515 default: RunTimeError(16, player.narrative_voice);
518 print (string) v2; return;
521 [ CSubjectVerb obj reportage nocaps v1 v2 v3 past;
522 if (past && player provides narrative_tense && player.narrative_tense == PAST_TENSE) {
527 if (v2 == 0) v2 = v1;
528 if (v3 == 0) v3 = v1;
531 if (player provides narrative_voice) switch (player.narrative_voice) {
532 1: print "I ", (string) v1; return;
535 print " ", (string) v3; return;
536 default: RunTimeError(16, player.narrative_voice);
538 if (nocaps) { print "you ", (string) v2; return; }
539 print "You ", (string) v2; return;
541 SubjectNotPlayer(obj, reportage, v2, v3);
544 [ CSubjectIs obj reportage nocaps;
546 if (player provides narrative_voice) switch (player.narrative_voice) {
547 1: Tense("I'm", "I was"); return;
550 Tense(" is", " was"); return;
551 default: RunTimeError(16, player.narrative_voice);
553 if (nocaps) Tense("you're", "you were");
554 else Tense("You're", "You were");
557 SubjectNotPlayer(obj, reportage, "are", "is", "was");
560 [ CSubjectIsnt obj reportage nocaps;
562 if (player provides narrative_voice) switch (player.narrative_voice) {
563 1: Tense("I'm not", "I wasn't"); return;
566 Tense(" isn't", " wasn't"); return;
567 default: RunTimeError(16, player.narrative_voice);
569 if (nocaps) Tense("you aren't", "you weren't");
570 else Tense("You aren't", "You weren't");
573 SubjectNotPlayer(obj, reportage, "aren't", "isn't", "wasn't");
576 [ CSubjectHas obj reportage nocaps;
578 if (player provides narrative_voice) switch (player.narrative_voice) {
579 1: Tense("I've", "I had"); return;
582 Tense(" has", " had"); return;
583 default: RunTimeError(16, player.narrative_voice);
585 if (nocaps) Tense("you've", "you'd");
586 else Tense("You've", "You'd");
589 SubjectNotPlayer(obj, reportage, "have", "has", "had");
592 [ CSubjectWill obj reportage nocaps;
594 if (player provides narrative_voice) switch (player.narrative_voice) {
595 1: Tense("I'll", "I would've"); return;
598 Tense(" will", " would've"); return;
599 default: RunTimeError(16, player.narrative_voice);
601 if (nocaps) Tense("you'll", "you'd");
602 else Tense("You'll", "You'd");
605 SubjectNotPlayer(obj, reportage, "will", "will", "would");
608 [ CSubjectCan obj reportage nocaps;
609 CSubjectVerb(obj, reportage, nocaps, "can", 0, "can", "could");
612 [ CSubjectCant obj reportage nocaps;
613 CSubjectVerb(obj, reportage, nocaps, "can't", 0, "can't", "couldn't");
616 [ CSubjectDont obj reportage nocaps;
617 CSubjectVerb(obj, reportage, nocaps, "don't", 0, "doesn't", "didn't");
623 if (player provides narrative_voice) switch(player.narrative_voice) {
624 1: print (string) MYSELF__TX; return;
626 3: if (obj has female) {print "herself"; return;}
627 print "himself"; return;
628 default: RunTimeError(16, player.narrative_voice);
630 print "yourself"; return;
632 if (obj has male) { print "himself"; return; }
633 if (obj has female) {print "herself"; return; }
634 print "itself"; return;
638 [ Possessive obj caps;
640 if (player provides narrative_voice) switch(player.narrative_voice) {
641 1: if (caps) print "M"; else print "m"; print "y"; return;
645 default: RunTimeError(16, player.narrative_voice);
647 if (caps) print "Y"; else print "y";
650 if (caps) print "H"; else print "h";
651 if (obj has male) { print "is"; return; }
652 if (obj has female) { print "er"; return; }
653 if (caps) print "I"; else { print "i"; print "ts"; return; }
656 [ PossessiveCaps obj;
657 Possessive(obj, true);
662 if (obj provides narrative_voice) {
663 switch (obj.narrative_voice) {
664 1: print "I"; return;
666 3: if (obj has neuter) { print "it"; return; }
667 if (obj has female) { print "she"; return; }
669 default: RunTimeError(16, player.narrative_voice);
674 if (obj has pluralname) { print "they"; return; }
675 if (obj has female) { print "she"; return; }
676 if (obj has male or animate)
677 if (obj hasnt neuter) { print "he"; return; }
681 [ SupportObj obj s1 s2;
682 if (obj has supporter) print (string) s1;
683 else print (string) s2;
686 [ PluralObj obj s1 s2 past;
687 if (player provides narrative_tense && player.narrative_tense == PAST_TENSE) {
691 if (obj has pluralname) print (string) s1;
692 else print (string) s2;
695 ! ----------------------------------------------------------------------------
696 ! Tense is a little helper function to present the correct tense of a
697 ! verb. The first parameter is the verb in present tense. The second
698 ! parameter is the verb in past tense. If the second parameter is
699 ! omitted, then nothing will be printed if the appropriate tense is past.
700 ! ----------------------------------------------------------------------------
701 [ Tense present past;
702 if (player provides narrative_tense && player.narrative_tense == PAST_TENSE) {
703 if (past == false) return;
707 print (string) present;
711 CSubjectVerb(actor, false, false, "decide",0,"decides","decided");
713 Tense("'s not", " wasn't");
714 " such a good idea.";
719 [ LowerCase c; ! for ZSCII matching ISO 8859-1
721 'A' to 'Z': c = c + 32;
722 202, 204, 212, 214, 221: c--;
724 158 to 160, 167, 168, 208 to 210: c = c - 3;
725 186 to 190, 196 to 200: c = c - 5 ;
726 175 to 180: c = c - 6;
731 [ UpperCase c; ! for ZSCII matching ISO 8859-1
733 'a' to 'z': c = c - 32;
734 201, 203, 211, 213, 220: c++;
736 155 to 157, 164, 165, 205 to 207: c = c + 3;
737 181 to 185, 191 to 195: c = c + 5 ;
738 169 to 174: c = c + 6;
743 #Ifnot; ! TARGET_GLULX
745 [ LowerCase c; return glk_char_to_lower(c); ];
746 [ UpperCase c; return glk_char_to_upper(c); ];
752 [ LanguageLM n x1 x2;
758 Attack: print "Violence ";
759 Tense("isn't", "wasn't");
760 " the answer to this one.";
761 Blow: CSubjectCant(actor,true);
762 " usefully blow ", (thatorthose) x1, ".";
764 1: print "This dangerous act would ";
765 Tense("achieve", "have achieved");
769 Buy: print "Nothing ";
773 1: print "Climbing ", (ThatOrThose) x1, " would ";
774 Tense("achieve", "have achieved");
779 1: CSubjectIs(x1,true);
780 print " not something ", (theActor) actor;
781 Tense(" can close", " could have closed");
783 2: CSubjectIs(x1,true); " already closed.";
784 3: CSubjectVerb(actor,false,false,"close",0,"closes","closed");
786 4: "(first closing ", (the) x1, ")";
788 CommandsOff: switch (n) {
789 1: "[Command recording off.]";
791 2: "[Command recording already off.]";
794 CommandsOn: switch (n) {
795 1: "[Command recording on.]";
797 2: "[Commands are currently replaying.]";
798 3: "[Command recording already on.]";
799 4: "[Command recording failed.]";
802 CommandsRead: switch (n) {
803 1: "[Replaying commands.]";
805 2: "[Commands are already replaying.]";
806 3: "[Command replay failed. Command recording is on.]";
807 4: "[Command replay failed.]";
808 5: "[Command replay complete.]";
811 Consult: CSubjectVerb(actor,true,false,"discover",0,"discovers","discovered");
812 print " nothing of interest in ";
813 if (x1 == player) { OnesSelf(x1); ".";}
814 else print_ret (the) x1, ".";
816 1: print "Cutting ", (ThatOrThose) x1, " up would ";
817 Tense("achieve", "have achieved");
821 Dig: print "Digging would ";
822 Tense("achieve", "have achieved");
824 Disrobe: switch (n) {
825 1: CSubjectIsnt(actor,true); " wearing ", (ThatOrThose) x1, ".";
826 2: CSubjectVerb(actor,false,false,"take off",0,"takes off", "took off");
829 Drink: print "There";
831 " nothing suitable to drink here.";
833 1: CSubjectIs(x1,true); " already here.";
834 2: CSubjectVerb(actor, false, false, "haven't got", 0, "hasn't got",
837 3: "(first taking ", (the) x1, " off)";
841 1: CSubjectIs(x1,true); " plainly inedible.";
842 2: CSubjectVerb(actor,false,false,"eat",0,"eats", "ate"); print " ", (the) x1;
843 if (actor == player) ". Not bad."; else ".";
846 1: CSubjectCant(x1,true); " contain things.";
847 2: CSubjectIs(x1,true); " closed.";
848 3: CSubjectIs(x1,true); " empty already.";
849 4: print "That wouldn't ";
850 Tense("empty", "have emptied");
854 1: print "But "; CSubjectIs(actor,true,true);
855 " already ", (nop) SupportObj(x1,"on ","in "), (the) x1, ".";
856 2: CSubjectIs(x1,true);
857 print " not something ", (theActor) actor;
858 Tense(" can ", " could ");
860 'stand': "stand on.";
861 'sit': "sit down on.";
862 'lie': "lie down on.";
865 3: CSubjectCant(actor,true);
866 " get into the closed ", (name) x1, ".";
867 4: CSubjectCan(actor,true);
868 " only get into something free-standing.";
869 5: CSubjectVerb(actor,false,false,"get",0,"gets","got");
870 SupportObj(x1," onto"," into"); " ", (the) x1, ".";
871 6: "(getting ", (nop) SupportObj(x1,"off","out of"), " ", (the) x1, ")";
872 7: if (x1 has supporter) "(getting onto ", (the) x1, ")";
873 if (x1 has container) "(getting into ", (the) x1, ")";
874 "(entering ", (the) x1, ")";
876 Examine: switch (n) {
877 1: "Darkness, noun. An absence of light to see by.";
878 2: CSubjectVerb(actor,true,false,"see",0,"sees","saw");
879 " nothing special about ", (the) x1, ".";
880 3: CSubjectIs(x1,true);
883 if (x1 has on) "on."; else "off.";
887 CSubjectIsnt(actor,true,true);
888 " in anything at the moment.";
889 2: CSubjectCant(actor,false);
890 " get out of the closed ", (name) x1, ".";
891 3: CSubjectVerb(actor,false,false,"get",0,"gets", "got");
893 SupportObj(x1,"off","out of"); " ", (the) x1, ".";
894 4: CSubjectIsnt(actor,true);
896 SupportObj(x1,"on","in"); " ", (the) x1, ".";
897 5: "(first getting ", (nop) SupportObj(x1,"off","out of"),
899 6: CSubjectVerb(actor,false,false,"stand",0,"stands","stood"); " up.";
903 Tense("isn't", "wasn't");
904 " anything obvious with which to fill ", (the) x1, ".";
905 2: print "Filling ", (the) x1, " from ", (the) x2;
906 Tense(" doesn't", " didn't");
909 FullScore: switch (n) {
910 1: if (deadflag) print "The score was "; else print "The score is ";
911 "made up as follows:^";
912 2: "finding sundry items";
913 3: "visiting various places";
914 4: print "total (out of ", MAX_SCORE; ")";
916 GetOff: print "But ";
917 CSubjectIsnt(actor,true,true); " on ", (the) x1, " at the moment.";
919 1: CSubjectIsnt(actor,true); " holding ", (the) x1, ".";
920 2: CSubjectVerb(actor,false,false,"juggle",0,"juggles","juggled");
921 print " ", (the) x1, " for a while, but ";
922 CSubjectVoice(actor,"don't","don't","doesn't","didn't");
924 3: CSubjectDont(x1,true); " seem interested.";
925 4: CSubjectVerb(actor,false,false,"hand over",0,"hands over","handed over");
929 1: CSubjectWill(actor,true);
930 Tense(" have", " had");
931 " to get ", (nop) SupportObj(x1,"off","out of"), " ", (the) x1, " first.";
932 2: CSubjectCant(actor,true); " go that way.";
933 3: CSubjectIs (actor,true); " unable to climb ", (the) x1, ".";
934 4: CSubjectIs (actor,true); " unable to descend by ", (the) x1, ".";
935 5: CSubjectCant(actor,true); " since ", (the) x1, " ", (IsOrAre) x1, " in the way.";
936 6: CSubjectCant(actor,true); " since ", (the) x1, " ", (nop) PluralObj(x1,"lead","leads","led"), " nowhere.";
937 7: CSubjectVerb(actor,false,false,"depart",0,"departs","departed"); ".";
940 1: CSubjectVerb(actor,true,false,"need",0,"needs","needed");
941 print " to be holding ", (the) x1, " before ", (theActor) actor;
942 Tense(" can", " could");
943 " put ", (ItOrThem) x1, " into something else.";
944 2: CSubjectCant(x1,true); " contain things.";
945 3: CSubjectIs (x1,true); " closed.";
946 4: CSubjectWill(actor,true);
947 Tense(" need", " needed");
948 " to take ", (ItOrThem) x1, " off first.";
949 5: CSubjectCant(actor,true); " put something inside itself.";
950 6: "(first taking ", (ItOrThem) x1, " off)";
952 Tense(" is", " was");
953 " no more room in ", (the) x1, ".";
955 9: CSubjectVerb(actor,false,false,"put",0,"puts","put"); " ", (the) x1, " into ", (the) x2, ".";
958 1: CSubjectIs (actor,false); " carrying nothing.";
959 2: CSubjectIs (actor,false); print " carrying";
963 Jump: CSubjectVerb(actor,false,false,"jump",0,"jumps","jumped"); " on the spot, fruitlessly.";
965 print "Jumping in ", (the) x1, " ";
966 Tense("would achieve", "would have achieved");
969 print "Jumping upon ", (the) x1, " ";
970 Tense("would achieve", "would have achieved");
972 JumpOver: switch (n) {
973 1: CSubjectVerb(actor,true,false,"achieve",0,"achieve","achieved"); " nothing by this.";
976 Kiss: "Keep your mind on the game.";
977 Listen: CSubjectVerb(actor,true,false,"hear",0,"hears","heard"); " nothing unexpected.";
978 ListMiscellany: switch (n) {
979 1: print " (providing light)";
980 2: print " (which ", (IsOrAre) x1, " closed)";
981 3: print " (closed and providing light)";
982 4: print " (which ", (IsOrAre) x1, " empty)";
983 5: print " (empty and providing light)";
984 6: print " (which ", (IsOrAre) x1, " closed and empty)";
985 7: print " (closed, empty and providing light)";
986 8: print " (providing light and being worn";
987 9: print " (providing light";
988 10: print " (being worn";
989 11: print " (which ", (IsOrAre) x1, " ";
991 13: print "open but empty";
993 15: print "closed and locked";
994 16: print " and empty";
995 17: print " (which ", (IsOrAre) x1, " empty)";
996 18: print " containing ";
998 20: print ", on top of ";
1000 22: print ", inside ";
1002 LMode1: print (string) Story, " is now in its ";
1003 if (initial_lookmode == 1) print "normal ";
1004 "~brief~ printing mode, which gives long descriptions
1005 of places never before visited and short descriptions otherwise.";
1006 LMode2: print (string) Story, " is now in its ";
1007 if (initial_lookmode ~= 1 or 3) print "normal ";
1008 "~verbose~ mode, which always gives long descriptions
1009 of locations (even if you've been there before).";
1010 LMode3: print (string) Story, " is now in its ";
1011 if (initial_lookmode == 3) print "normal ";
1012 "~superbrief~ mode, which always gives short descriptions
1013 of locations (even if you haven't been there before).";
1015 1: CSubjectDont(x1,true);
1016 print " seem to be something ", (theActor) actor;
1017 Tense(" can", " could");
1019 2: CSubjectIs (x1,true); " locked at the moment.";
1020 3: CSubjectWill(actor,true); " first have to close ", (the) x1, ".";
1021 4: CSubjectDont(x1,true); " seem to fit the lock.";
1022 5: CSubjectVerb(actor,false,false,"lock",0,"locks","locked"); " ", (the) x1, ".";
1025 1: print " (on ", (the) x1, ")";
1026 2: print " (in ", (the) x1, ")";
1027 3: print " (as ", (object) x1, ")";
1028 4: print "^On ", (the) x1;
1029 WriteListFrom(child(x1),
1030 ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
1033 if (x1 ~= location) {
1034 if (x1 has supporter) print "^On "; else print "^In ";
1035 print (the) x1, " ", (theActor) actor, " ";
1036 Tense("can", "could");
1038 else { new_line; CSubjectCan(actor,false); }
1039 if (n == 5) print " also";
1041 WriteListFrom(child(x1),
1042 ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+WORKFLAG_BIT);
1043 if (x1 ~= location) "."; else " here.";
1044 7: CSubjectVerb(actor,true,false,"see",0,"sees", "saw"); " nothing unexpected in that direction.";
1046 LookUnder: switch (n) {
1048 Tense("'s", " was");
1050 2: CSubjectVerb(actor,true,false,"find",0,"finds", "found"); " nothing of interest.";
1053 Miscellany: switch (n) {
1054 1: "(considering the first sixteen objects only)^";
1055 2: "Nothing to do!";
1056 3: print " "; CSubjectVerb(player, false, false, "died", "have died", "has died");
1058 4: print " "; CSubjectVerb(player, false, false, "won", "have won", "has won");
1060 5: print "^Would you like to RESTART, RESTORE a saved game";
1061 #Ifdef DEATH_MENTION_UNDO;
1062 print ", UNDO your last move";
1064 if (TASKS_PROVIDED == 0) print ", give the FULL score for that game";
1065 if (deadflag == 2 && AMUSING_PROVIDED == 0)
1066 print ", see some suggestions for AMUSING things to do";
1067 SerialComma(3); print " or QUIT?";
1068 6: "[Your interpreter does not provide ~undo~. Sorry!]";
1069 #Ifdef TARGET_ZCODE;
1070 7: "~Undo~ failed. [Not all interpreters provide it.]";
1071 #Ifnot; ! TARGET_GLULX
1072 7: "[You cannot ~undo~ any further.]";
1074 8: "Please give one of the answers above.";
1076 Tense("is now", "was");
1077 print " pitch dark in ";
1078 Tense("here", "there");
1080 10: "I beg your pardon?";
1081 11: "[You can't ~undo~ what hasn't been done!]";
1082 12: "[Can't ~undo~ twice in succession. Sorry!]";
1083 13: "[Previous turn undone.]";
1084 14: "Sorry, that can't be corrected.";
1085 15: "Think nothing of it.";
1086 16: "~Oops~ can only correct a single word.";
1089 print " pitch dark, and ", (theActor) actor;
1090 Tense(" can't", " couldn't");
1092 18: print "yourself";
1093 19: "As good-looking as ever.";
1094 20: "To repeat a command like ~frog, jump~, just say ~again~, not ~frog, again~.";
1095 21: CSubjectCan(actor,true); " hardly repeat that.";
1096 22: CSubjectCant(actor, true); " begin with a comma.";
1097 23: CSubjectVerb(actor, true, false, "seem", "seem", "seems", "seemed");
1098 print " to want to talk to someone, but I ";
1099 Tense("can't", "couldn't"); " see whom.";
1100 24: CSubjectCant(actor, true); " talk to ", (the) x1, ".";
1101 25: "To talk to someone, try ~someone, hello~ or some such.";
1102 26: "(first taking ", (the) x1, ")";
1103 27: "I didn't understand that sentence.";
1104 28: print "I only understood you as far as wanting to ";
1105 29: "I didn't understand that number.";
1106 30: CSubjectCant(actor,true); " see any such thing.";
1107 31: CSubjectVerb(actor, true, false, "seem", "seem", "seems", "seemed");
1108 " to have said too little!";
1109 32: CSubjectIsnt(actor); " holding that!";
1110 33: "You can't use multiple objects with that verb.";
1111 34: "You can only use multiple objects once on a line.";
1112 35: "I'm not sure what ~", (address) x1, "~ refers to.";
1113 36: "You excepted something not included anyway!";
1114 37: CSubjectCan(actor,true); " only do that to something animate.";
1116 38: "That's not a verb I recognize.";
1118 38: "That's not a verb I recognise.";
1120 39: "That's not something you need to refer to in the course of this game.";
1121 40: CSubjectCant(actor,true); " see ~", (address) x1, "~ (", (the) x2, ") at the moment.";
1122 41: "I didn't understand the way that finished.";
1123 42: if (x1 == 0) print "None"; else print "Only ", (number) x1;
1125 if (x1 == 1) print "is"; else print "are";
1127 43: "Nothing to do!";
1130 " nothing to ", (address) x1, ".";
1131 45: print "Who do you mean, ";
1132 46: print "Which do you mean, ";
1133 47: "Sorry, you can only have one item here. Which exactly?";
1135 CSubjectVoice(player, "do", "do", "does", "did");
1137 CSubjectVerb(player, false, true, "want", "want", "want", "want");
1138 if (x1 ~= player && x1 ~= nothing) print " ", (the) x1;
1139 print " to "; PrintCommand(); "?";
1141 CSubjectVoice(player, "do", "do", "does", "did");
1143 CSubjectVerb(player, false, true, "want", "want", "want", "want");
1144 if (x1 ~= player && x1 ~= nothing) print " ", (the) x1;
1145 print " to "; PrintCommand(); "?";
1146 50: print "The score has just gone ";
1147 if (x1 > 0) print "up"; else { x1 = -x1; print "down"; }
1148 print " by ", (number) x1, " point";
1149 if (x1 > 1) print "s";
1150 51: "(Since something dramatic has happened, your list of commands has been cut short.)";
1151 52: "^Type a number from 1 to ", x1, ", 0 to redisplay or press ENTER.";
1152 53: "^[Please press SPACE.]";
1153 54: "[Comment recorded.]";
1154 55: "[Comment NOT recorded.]";
1157 58: "(first taking ", (the) x1, " ", (nop) SupportObj(x2,"off","out of"), " ", (the) x2, ")";
1158 59: "You'll have to be more specific.";
1159 60: print (The) x1, " observes that ";
1161 No,Yes: "That was a rhetorical question.";
1163 "Score notification off.";
1164 NotifyOn: "Score notification on.";
1165 Objects: switch (n) {
1166 1: "Objects ", (nop) CSubjectVerb(actor, false, true, "have", "have", "has"), " handled:^";
1170 5: print " (given away)";
1171 6: print " (in ", (name) x1, ")";
1172 7: print " (in ", (the) x1, ")";
1173 8: print " (inside ", (the) x1, ")";
1174 9: print " (on ", (the) x1, ")";
1175 10: print " (lost)";
1178 1: CSubjectIs (x1,true);
1179 print " not something ", (theActor) actor;
1180 Tense(" can open", " could have opened");
1182 2: CSubjectVerb(x1,true,false,"seem",0,"seems","seemed"); " to be locked.";
1183 3: CSubjectIs (x1,true); " already open.";
1184 4: CSubjectVerb(actor,false,false,"open",0,"opens","opened"); print " ", (the) x1;
1185 Tense(", revealing ", " and revealed ");
1186 if (WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT) == 0) "nothing.";
1188 5: CSubjectVerb(actor,false,false,"open",0,"opens","opened"); " ", (the) x1, ".";
1189 6: "(first opening ", (the) x1, ")";
1191 Order: CSubjectHas(x1,false); " better things to do.";
1192 Places: switch (n) {
1193 1: print "You have visited: ";
1196 Pray: print "Nothing practical ";
1197 Tense("results", "resulted");
1198 " from ", (Possessive) actor, " prayer.";
1200 Pronouns: switch (n) {
1201 1: print "At the moment, ";
1203 3: print "is unset";
1204 4: "no pronouns are known to the game.";
1207 Pull,Push,Turn: switch (n) {
1208 1: if (player provides narrative_voice && player.narrative_voice == 3) {
1209 print_ret (The) player, " ", (nop) Tense("isn't", "wasn't"),
1210 " likely to help matters by punishing ",
1211 (OnesSelf) player, " that way.";
1213 "Punishing ", (OnesSelf) player, " that way ",
1214 (nop) Tense("isn't", "wasn't"), " likely to help matters.";
1216 2: CSubjectIs (x1,true); " fixed in place.";
1217 3: CSubjectIs (actor,true); " unable to.";
1218 4: print "Nothing obvious ";
1219 Tense("happens", "happened");
1221 5: print "That would ";
1222 Tense("be", "have been");
1223 " less than courteous.";
1227 PushDir: switch (n) {
1228 1: print "That really ";
1229 Tense("wouldn't", "didn't");
1230 " serve any purpose.";
1232 Tense("not", "wasn't");
1234 3: print "Not that way ", (theActor) actor;
1235 Tense(" can't", "couldn't");
1239 1: CSubjectVerb(actor,true,false,"need",0,"needs","needed");
1240 print " to be holding ", (the) x1, " before ", (theActor) actor;
1241 Tense(" can", " could");
1242 " put ", (ItOrThem) x1, " on top of something else.";
1243 2: CSubjectCant(actor,true,true); " put something on top of itself.";
1244 3: print "Putting things on ", (the) x1, " would";
1245 Tense(" achieve", "'ve achieved");
1247 4: CSubjectVerb(actor,true,false,"lack",0,"lacks","lacked"); " the dexterity.";
1248 5: "(first taking ", (ItOrThem) x1, " off)";
1251 " no more room on ", (the) x1, ".";
1253 8: CSubjectVerb(actor,false,false,"put",0,"puts","put"); " ", (the) x1, " on ", (the) x2, ".";
1256 1: print "Please answer yes or no.";
1257 2: print "Are you sure you want to quit? ";
1259 Remove: switch (n) {
1260 1: CSubjectIs (x1,true); " unfortunately closed.";
1262 CSubjectIsnt(x1,true); " there now.";
1265 Restart: switch (n) {
1266 1: print "Are you sure you want to restart? ";
1269 Restore: switch (n) {
1270 1: "Restore failed.";
1274 1: CSubjectVerb(actor,true,false,"achieve",0,"achieves","achieved");
1275 " nothing by this.";
1283 1: if (deadflag) print "In that game you scored "; else print "You have so far scored ";
1284 print score, " out of a possible ", MAX_SCORE, ", in ", turns, " turn";
1285 if (turns ~= 1) print "s";
1287 2: "There is no score in this story.";
1289 ScriptOff: switch (n) {
1290 1: "Transcripting is already off.";
1291 2: "^End of transcript.";
1292 3: "Attempt to end transcript failed.";
1294 ScriptOn: switch (n) {
1295 1: "Transcripting is already on.";
1296 2: print "Start of a transcript of"; VersionSub();
1297 3: "Attempt to begin transcript failed.";
1299 Search: switch (n) {
1301 Tense("'s", " was");
1305 " nothing on ", (the) x1, ".";
1306 3: print "On ", (the) x1;
1307 WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
1309 4: CSubjectVerb(actor,true,false,"find",0,"finds","found"); " nothing of interest.";
1310 5: CSubjectCant(actor,true); " see inside, since ", (the) x1, " ", (IsOrAre) x1, " closed.";
1311 6: "", (The) x1, " ", (IsOrAre) x1, " empty.";
1313 7: print "In ", (the) x1;
1314 WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
1317 ! Preceding "No," unable to be used for Set and SetTo
1318 Set: CSubjectCant(actor,true); " set ", (ThatOrThose) x1, ".";
1319 SetTo: CSubjectCant(actor,true); " set ", (ThatOrThose) x1, " to anything.";
1321 1: CSubjectIsnt(actor,true); " holding ", (the) x1, ".";
1322 2: CSubjectIs (x1,true); " unimpressed.";
1324 Sing: print (PossessiveCaps) actor, " singing ";
1327 Sleep: CSubjectIsnt(actor,true); " feeling especially drowsy.";
1329 1: CSubjectVerb(actor,true,false,"smell",0,"smells","smelled"); " nothing unexpected.";
1333 Sorry: "Oh, don't apologize.";
1335 Sorry: "Oh, don't apologise.";
1337 Squeeze: switch (n) {
1339 2: CSubjectVerb(actor,true,false,"achieve",0,"achieves","achieved"); " nothing by this.";
1341 Strong: print "Real adventurers ";
1342 Tense ("do", "did");
1343 " not use such language.";
1344 Swim: print "There";
1345 Tense("'s not", " wasn't");
1346 " enough water to swim in.";
1347 Swing: print "There";
1348 Tense("'s", " was");
1349 " nothing sensible to swing here.";
1350 SwitchOff: switch (n) {
1351 1: CSubjectIs (x1,true);
1352 print " not something ", (theActor) actor, " ";
1353 Tense("can", "could");
1355 2: CSubjectIs (x1,true); " already off.";
1356 3: CSubjectVerb(actor,false,false,"switch",0,"switches","switched"); " ", (the) x1, " off.";
1358 SwitchOn: switch (n) {
1359 1: CSubjectIs (x1,true);
1360 print " not something ", (theActor) actor, " ";
1361 Tense("can", "could");
1363 2: CSubjectIs (x1,true); " already on.";
1364 3: CSubjectVerb(actor,false,false,"switch",0,"switches","switched"); " ", (the) x1, " on.";
1369 2: CSubjectIs (actor,false); " always self-possessed.";
1370 3: print "I don't suppose ", (the) x1, " would ";
1371 Tense("care", "have cared");
1373 4: CSubjectWill(actor,true);
1376 "to get ", (nop) SupportObj(x1,"off","out of"), " ", (the) x1, " first.";
1377 5: CSubjectVerb(actor,true,false,"already have",0,"already has","already had"); " ", (ThatOrThose) x1, ".";
1378 6: CSubjectVerb(x2,true,false,"seem",0,"seems","seemed"); " to belong to ", (the) x1, ".";
1379 7: CSubjectVerb(x2,true,false,"seem",0,"seems","seemed"); " to be a part of ", (the) x1, ".";
1380 8: CSubjectIs (x1,true); " not available.";
1381 9: CSubjectIs (x1,true); " not open.";
1382 10: CSubjectIs (x1,true); " hardly portable.";
1383 11: CSubjectIs (x1,true); " fixed in place.";
1384 12: CSubjectIs (actor,true); " carrying too many things already.";
1385 13: "(putting ", (the) x1, " into ", (the) x2, " to make room)";
1388 1: CSubjectVerb(actor,true,false,"taste",0,"tastes","tasted"); " nothing unexpected.";
1392 1: CSubjectVerb(actor,false,false,"talk",0,"talks","talked");
1393 " to ", (OnesSelf) actor, " for a while.";
1394 2: print "This provoke";
1398 Think: "What a good idea.";
1399 ThrowAt: switch (n) {
1401 2: CSubjectVerb(actor,true,false,"lack",0,"lacks","lacked");
1402 print " the nerve when it ";
1403 Tense("comes", "came");
1404 " to the crucial moment.";
1407 1: CSubjectVerb(actor,true,false,"would",0,0);
1408 Tense(" achieve", " have achieved");
1409 " nothing by this.";
1414 2: CSubjectVerb(actor,true,false,"feel",0,"feels","felt"); " nothing unexpected.";
1415 3: print "That really ";
1416 Tense("wouldn't", "didn't");
1417 " serve any purpose.";
1420 Unlock: switch (n) {
1421 1: CSubjectDont(x1,true);
1422 print " seem to be something ", (theActor) actor;
1423 Tense(" can unlock", " could have unlocked");
1425 2: CSubjectIs (x1,true); " unlocked at the moment.";
1426 3: CSubjectDont(x1,true); " seem to fit the lock.";
1427 4: CSubjectVerb(actor,false,false,"unlock",0,"unlocks","unlocked"); " ", (the) x1, ".";
1428 5: "(first unlocking ", (the) x1, ")";
1430 VagueGo: CSubjectWill(actor);
1433 "to say which compass direction to go in.";
1434 Verify: switch (n) {
1435 1: "The game file has verified as intact.";
1436 2: "The game file did not verify as intact, and may be corrupt.";
1438 Wait: print "Time passe";
1441 Wake: print "The dreadful truth is, this ";
1444 WakeOther:print "That seem";
1449 CSubjectIsnt(actor,true,true); " holding ", (ThatOrThose) x1, ".";
1450 2: CSubjectVerb(actor,false,false,"look",0,"looks","looked");
1451 print " ridiculous waving ", (the) x1;
1453 " at ", (the) x2, ".";
1458 CSubjectVerb(actor,false,false,"wave",0,"waves","waved");
1461 2: print " at ", (the) x1;
1463 ", feeling foolish.";
1465 1: CSubjectCant(actor,true); " wear ", (ThatOrThose) x1, "!";
1466 2: CSubjectIs (actor,true); " not holding ", (ThatOrThose) x1, "!";
1467 3: CSubjectIs (actor,true); " already wearing ", (ThatOrThose) x1, "!";
1468 4: CSubjectVerb(actor,false,false,"put on",0,"puts on","put on"); " ", (the) x1, ".";
1473 ! ==============================================================================
1475 Constant LIBRARY_ENGLISH; ! for dependency checking.
1478 ! ==============================================================================