The fundamental definitions needed by the parser and the verb library in order to specify the language of play -- that is, the language used for communications between the story file and the player.
- §1. Initialisation
- §2. Identification
- §3. Vocabulary
- §4. Pronouns
- §5. Descriptors
- §6. Numbers
- §7. Time
- §8. Directions
- §9. Translation
- §10. Articles
- §11. Commands
- §12. Stubs
§1. Initialisation. It used to be optional whether or not to include a function of this name in a language kit: it's now compulsory, even when (as now) it does nothing.
[ LanguageInitialise; ];
Constant ENGLISHLANGUAGEKIT = 1;
Constant AGAIN1__WD = 'again'; Constant AGAIN2__WD = 'g//'; Constant AGAIN3__WD = 'again'; Constant OOPS1__WD = 'oops'; Constant OOPS2__WD = 'o//'; Constant OOPS3__WD = 'oops'; Constant UNDO1__WD = 'undo'; Constant UNDO2__WD = 'undo'; Constant UNDO3__WD = 'undo'; Constant ALL1__WD = 'all'; Constant ALL2__WD = 'each'; Constant ALL3__WD = 'every'; Constant ALL4__WD = 'everything'; Constant ALL5__WD = 'both'; Constant AND1__WD = 'and'; Constant AND2__WD = 'and'; Constant AND3__WD = 'and'; Constant BUT1__WD = 'but'; Constant BUT2__WD = 'except'; Constant BUT3__WD = 'but'; Constant BY__WD = 'by'; Constant ME1__WD = 'me'; Constant ME2__WD = 'myself'; Constant ME3__WD = 'self'; Constant OF1__WD = 'of'; Constant OF2__WD = 'of'; Constant OF3__WD = 'of'; Constant OF4__WD = 'of'; Constant OTHER1__WD = 'another'; Constant OTHER2__WD = 'other'; Constant OTHER3__WD = 'other'; Constant THEN1__WD = 'then'; Constant THEN2__WD = 'then'; Constant THEN3__WD = 'then'; Constant NO1__WD = 'n//'; Constant NO2__WD = 'no'; Constant NO3__WD = 'no'; Constant YES1__WD = 'y//'; Constant YES2__WD = 'yes'; Constant YES3__WD = 'yes'; Constant AMUSING__WD = 'amusing'; Constant FULLSCORE1__WD = 'fullscore'; Constant FULLSCORE2__WD = 'full'; Constant QUIT1__WD = 'q//'; Constant QUIT2__WD = 'quit'; Constant RESTART__WD = 'restart'; Constant RESTORE__WD = 'restore';
Array LanguagePronouns table word possible GNAs connected to follow: to: a i s p s p mfnmfnmfnmfn 'it' $$001000111000 NULL 'him' $$100000000000 NULL 'her' $$010000000000 NULL 'them' $$000111000111 NULL;
Array LanguageDescriptors table word possible GNAs descriptor connected to follow: type: to: a i s p s p mfnmfnmfnmfn 'my' $$111111111111 POSSESS_PK 0 'this' $$111111111111 POSSESS_PK 0 'these' $$000111000111 POSSESS_PK 0 'that' $$111111111111 POSSESS_PK 1 'those' $$000111000111 POSSESS_PK 1 'his' $$111111111111 POSSESS_PK 'him' 'her' $$111111111111 POSSESS_PK 'her' 'their' $$111111111111 POSSESS_PK 'them' 'its' $$111111111111 POSSESS_PK 'it' 'the' $$111111111111 DEFART_PK NULL 'a//' $$111000111000 INDEFART_PK NULL 'an' $$111000111000 INDEFART_PK NULL 'some' $$000111000111 INDEFART_PK NULL 'lit' $$111111111111 LIGHTED_PK NULL 'lighted' $$111111111111 LIGHTED_PK NULL 'unlit' $$111111111111 UNLIGHTED_PK NULL;
Array LanguageNumbers table 'one' 1 'two' 2 'three' 3 'four' 4 'five' 5 'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10 'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15 'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20 'twenty-one' 21 'twenty-two' 22 'twenty-three' 23 'twenty-four' 24 'twenty-five' 25 'twenty-six' 26 'twenty-seven' 27 'twenty-eight' 28 'twenty-nine' 29 'thirty' 30 ;
[ LanguageTimeOfDay hours mins i; i = hours%12; if (i == 0) i = 12; if (i < 10) print " "; print i, ":", mins/10, mins%10; if ((hours/12) > 0) print " pm"; else print " am"; ];
[ LanguageDirection d; print (name) d; ];
§9. Translation. These are all opportunities to meddle with the normal (Anglo-centric) running of things, which we will decline.
Until April 2023, it was optional for a kit to provide LanguageRefers and LanguagePrintShortName, but this is now compulsory.
[ LanguageToInformese; ]; [ LanguageRefers x y; return -1; ]; [ LanguagePrintShortName obj; rfalse; ];
Constant LanguageAnimateGender = male; Constant LanguageInanimateGender = neuter; Constant LanguageContractionForms = 2; English has two: 0 = starting with a consonant 1 = starting with a vowel [ LanguageContraction text ch; #Iftrue CHARSIZE == 1; ch = text->0; #Ifnot; ch = text-->0; #Endif; CHARSIZE if (ch == 'a' or 'e' or 'i' or 'o' or 'u' or 'A' or 'E' or 'I' or 'O' or 'U') return 1; return 0; ]; Array LanguageArticles --> Contraction form 0: Contraction form 1: Cdef Def Indef Cdef Def Indef "The " "the " "a " "The " "the " "an " Articles 0 "The " "the " "some " "The " "the " "some "; Articles 1 a i s p s p m f n m f n m f n m f n Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1;
§11. Commands. LanguageVerbLikesAdverb is called by PrintCommand when printing an UPTO_PE error or an inference message. Words which are intransitive verbs, i.e., which require a direction name as an adverb ("walk west"), not a noun ("I only understood you as far as wanting to touch the ground"), should cause the routine to return true.
LanguageVerbMayBeName is called by NounDomain when dealing with the player's reply to a "Which do you mean, the short stick or the long stick?" prompt from the parser. If the reply is another verb (for example, LOOK) then then previous ambiguous command is discarded unless it is one of these words which could be both a verb and an adjective in a name property.
[ LanguageVerb i; switch (i) { 'i//','inv','inventory': print "take inventory"; 'l//': print "look"; 'x//': print "examine"; 'z//': print "wait"; default: rfalse; } rtrue; ]; [ LanguageVerbLikesAdverb w; if (w == 'look' or 'go' or 'push' or 'walk') rtrue; rfalse; ]; [ LanguageVerbMayBeName w; if (w == 'long' or 'short' or 'normal' or 'brief' or 'full' or 'verbose') rtrue; rfalse; ];
§12. Stubs. To reduce the need for conditional compilation, we provide these stub routines:
[ LanguageIsVerb buffer parse verb_wordnum; rfalse; ];