Начало - компилируется, но не работает
This commit is contained in:
commit
e2dff232f6
16
.editorconfig
Normal file
16
.editorconfig
Normal file
|
@ -0,0 +1,16 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.inf]
|
||||
charset = cp1251
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
out.z5
|
||||
out.ulx
|
||||
interpreter/main.css
|
||||
interpreter/main.css.map
|
5
Makefile
Normal file
5
Makefile
Normal file
|
@ -0,0 +1,5 @@
|
|||
all: glulx
|
||||
glulx:
|
||||
inform -D -DG -Cu +library-glulx +language_name=Russian '$$MAX_UNICODE_CHARS=1024' '$$MAX_STATIC_DATA=20000' '$$DICT_CHAR_SIZE=4' source.inf out.ulx
|
||||
release:
|
||||
inform -DG -Cu +library-glulx +language_name=Russian '$$MAX_UNICODE_CHARS=1024' '$$MAX_STATIC_DATA=20000' '$$DICT_CHAR_SIZE=4' source.inf out.ulx
|
941
library-glulx/English.h
Normal file
941
library-glulx/English.h
Normal file
|
@ -0,0 +1,941 @@
|
|||
! ==============================================================================
|
||||
! ENGLISH: Language Definition File
|
||||
!
|
||||
! Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
|
||||
!
|
||||
! Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
|
||||
!
|
||||
! This file is automatically Included in your game file by "parserm".
|
||||
! Strictly, "parserm" includes the file named in the "language__" variable,
|
||||
! whose contents can be defined by+language_name=XXX compiler setting (with a
|
||||
! default of "english").
|
||||
!
|
||||
! Define the constant DIALECT_US before including "Parser" to obtain American
|
||||
! English.
|
||||
! ==============================================================================
|
||||
|
||||
System_file;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Part I. Preliminaries
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Constant EnglishNaturalLanguage; ! Needed to keep old pronouns mechanism
|
||||
|
||||
Class CompassDirection
|
||||
with number 0, article "the",
|
||||
description [;
|
||||
if (location provides compass_look && location.compass_look(self)) rtrue;
|
||||
if (self.compass_look()) rtrue;
|
||||
L__M(##Look, 7, self);
|
||||
],
|
||||
compass_look false,
|
||||
has scenery;
|
||||
|
||||
Object Compass "compass" has concealed;
|
||||
|
||||
#Ifndef WITHOUT_DIRECTIONS;
|
||||
CompassDirection -> n_obj "north"
|
||||
with door_dir n_to, name 'n//' 'north';
|
||||
CompassDirection -> s_obj "south"
|
||||
with door_dir s_to, name 's//' 'south';
|
||||
CompassDirection -> e_obj "east"
|
||||
with door_dir e_to, name 'e//' 'east';
|
||||
CompassDirection -> w_obj "west"
|
||||
with door_dir w_to, name 'w//' 'west';
|
||||
CompassDirection -> ne_obj "northeast"
|
||||
with door_dir ne_to, name 'ne' 'northeast';
|
||||
CompassDirection -> nw_obj "northwest"
|
||||
with door_dir nw_to, name 'nw' 'northwest';
|
||||
CompassDirection -> se_obj "southeast"
|
||||
with door_dir se_to, name 'se' 'southeast';
|
||||
CompassDirection -> sw_obj "southwest"
|
||||
with door_dir sw_to, name 'sw' 'southwest';
|
||||
CompassDirection -> u_obj "up above"
|
||||
with door_dir u_to, name 'u//' 'up' 'ceiling' 'above' 'sky';
|
||||
CompassDirection -> d_obj "ground"
|
||||
with door_dir d_to, name 'd//' 'down' 'floor' 'below' 'ground';
|
||||
#endif; ! WITHOUT_DIRECTIONS
|
||||
|
||||
CompassDirection -> in_obj "inside"
|
||||
with door_dir in_to, name 'in' 'inside';
|
||||
CompassDirection -> out_obj "outside"
|
||||
with door_dir out_to, name 'out' 'outside';
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Part II. Vocabulary
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
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 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 light NULL
|
||||
'lighted' $$111111111111 light NULL
|
||||
'unlit' $$111111111111 (-light) 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;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Part III. Translation
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
[ LanguageToInformese;
|
||||
];
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Part IV. Printing
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Constant LanguageAnimateGender = male;
|
||||
Constant LanguageInanimateGender = neuter;
|
||||
|
||||
Constant LanguageContractionForms = 2; ! English has two:
|
||||
! 0 = starting with a consonant
|
||||
! 1 = starting with a vowel
|
||||
|
||||
[ LanguageContraction text;
|
||||
if (text->0 == '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;
|
||||
|
||||
[ LanguageDirection d;
|
||||
switch (d) {
|
||||
n_to: print "north";
|
||||
s_to: print "south";
|
||||
e_to: print "east";
|
||||
w_to: print "west";
|
||||
ne_to: print "northeast";
|
||||
nw_to: print "northwest";
|
||||
se_to: print "southeast";
|
||||
sw_to: print "southwest";
|
||||
u_to: print "up";
|
||||
d_to: print "down";
|
||||
in_to: print "in";
|
||||
out_to: print "out";
|
||||
default: return RunTimeError(9,d);
|
||||
}
|
||||
];
|
||||
|
||||
[ LanguageNumber n f;
|
||||
if (n == 0) { print "zero"; rfalse; }
|
||||
if (n < 0) { print "minus "; n = -n; }
|
||||
if (n >= 1000) { print (LanguageNumber) n/1000, " thousand"; n = n%1000; f = 1; }
|
||||
if (n >= 100) {
|
||||
if (f == 1) print ", ";
|
||||
print (LanguageNumber) n/100, " hundred"; n = n%100; f = 1;
|
||||
}
|
||||
if (n == 0) rfalse;
|
||||
#Ifdef DIALECT_US;
|
||||
if (f == 1) print " ";
|
||||
#Ifnot;
|
||||
if (f == 1) print " and ";
|
||||
#Endif;
|
||||
switch (n) {
|
||||
1: print "one";
|
||||
2: print "two";
|
||||
3: print "three";
|
||||
4: print "four";
|
||||
5: print "five";
|
||||
6: print "six";
|
||||
7: print "seven";
|
||||
8: print "eight";
|
||||
9: print "nine";
|
||||
10: print "ten";
|
||||
11: print "eleven";
|
||||
12: print "twelve";
|
||||
13: print "thirteen";
|
||||
14: print "fourteen";
|
||||
15: print "fifteen";
|
||||
16: print "sixteen";
|
||||
17: print "seventeen";
|
||||
18: print "eighteen";
|
||||
19: print "nineteen";
|
||||
20 to 99: switch (n/10) {
|
||||
2: print "twenty";
|
||||
3: print "thirty";
|
||||
4: print "forty";
|
||||
5: print "fifty";
|
||||
6: print "sixty";
|
||||
7: print "seventy";
|
||||
8: print "eighty";
|
||||
9: print "ninety";
|
||||
}
|
||||
if (n%10 ~= 0) print "-", (LanguageNumber) n%10;
|
||||
}
|
||||
];
|
||||
|
||||
[ 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";
|
||||
];
|
||||
|
||||
[ LanguageVerb i;
|
||||
switch (i) {
|
||||
'i//','inv','inventory':
|
||||
print "take inventory";
|
||||
'l//': print "look";
|
||||
'x//': print "examine";
|
||||
'z//': print "wait";
|
||||
default: rfalse;
|
||||
}
|
||||
rtrue;
|
||||
];
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! LanguageVerbIsDebugging is called by SearchScope. It should return true
|
||||
! if word w is a debugging verb which needs all objects to be in scope.
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
#Ifdef DEBUG;
|
||||
[ LanguageVerbIsDebugging w;
|
||||
if (w == 'purloin' or 'tree' or 'abstract'
|
||||
or 'gonear' or 'scope' or 'showobj')
|
||||
rtrue;
|
||||
rfalse;
|
||||
];
|
||||
#Endif;
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! 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.
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
[ LanguageVerbLikesAdverb w;
|
||||
if (w == 'look' or 'go' or 'push' or 'walk')
|
||||
rtrue;
|
||||
rfalse;
|
||||
];
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! 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.
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
[ LanguageVerbMayBeName w;
|
||||
if (w == 'long' or 'short' or 'normal'
|
||||
or 'brief' or 'full' or 'verbose')
|
||||
rtrue;
|
||||
rfalse;
|
||||
];
|
||||
|
||||
Constant NKEY__TX = "N = next subject";
|
||||
Constant PKEY__TX = "P = previous";
|
||||
Constant QKEY1__TX = " Q = resume game";
|
||||
Constant QKEY2__TX = "Q = previous menu";
|
||||
Constant RKEY__TX = "RETURN = read subject";
|
||||
|
||||
Constant NKEY1__KY = 'N';
|
||||
Constant NKEY2__KY = 'n';
|
||||
Constant PKEY1__KY = 'P';
|
||||
Constant PKEY2__KY = 'p';
|
||||
Constant QKEY1__KY = 'Q';
|
||||
Constant QKEY2__KY = 'q';
|
||||
|
||||
Constant SCORE__TX = "Score: ";
|
||||
Constant MOVES__TX = "Moves: ";
|
||||
Constant TIME__TX = "Time: ";
|
||||
Constant CANTGO__TX = "You can't go that way.";
|
||||
Constant FORMER__TX = "your former self";
|
||||
Constant YOURSELF__TX = "yourself";
|
||||
Constant YOU__TX = "You";
|
||||
Constant DARKNESS__TX = "Darkness";
|
||||
|
||||
Constant THOSET__TX = "those things";
|
||||
Constant THAT__TX = "that";
|
||||
Constant OR__TX = " or ";
|
||||
Constant NOTHING__TX = "nothing";
|
||||
Constant IS__TX = " is";
|
||||
Constant ARE__TX = " are";
|
||||
Constant IS2__TX = "is ";
|
||||
Constant ARE2__TX = "are ";
|
||||
Constant AND__TX = " and ";
|
||||
Constant WHOM__TX = "whom ";
|
||||
Constant WHICH__TX = "which ";
|
||||
Constant COMMA__TX = ", ";
|
||||
|
||||
|
||||
[ ThatorThose obj; ! Used in the accusative
|
||||
if (obj == player) { print "you"; return; }
|
||||
if (obj has pluralname) { print "those"; return; }
|
||||
if (obj has animate) {
|
||||
if (obj has female) { print "her"; return; }
|
||||
else
|
||||
if (obj hasnt neuter) { print "him"; return; }
|
||||
}
|
||||
print "that";
|
||||
];
|
||||
|
||||
[ ItorThem obj;
|
||||
if (obj == player) { print "yourself"; return; }
|
||||
if (obj has pluralname) { print "them"; return; }
|
||||
if (obj has animate) {
|
||||
if (obj has female) { print "her"; return; }
|
||||
else
|
||||
if (obj hasnt neuter) { print "him"; return; }
|
||||
}
|
||||
print "it";
|
||||
];
|
||||
|
||||
[ IsorAre obj;
|
||||
if (obj has pluralname || obj == player) print "are"; else print "is";
|
||||
];
|
||||
|
||||
[ CThatorThose obj; ! Used in the nominative
|
||||
if (obj == player) { print "You"; return; }
|
||||
if (obj has pluralname) { print "Those"; return; }
|
||||
if (obj has animate) {
|
||||
if (obj has female) { print "She"; return; }
|
||||
else
|
||||
if (obj hasnt neuter) { print "He"; return; }
|
||||
}
|
||||
print "That";
|
||||
];
|
||||
|
||||
[ CTheyreorThats obj;
|
||||
if (obj == player) { print "You're"; return; }
|
||||
if (obj has pluralname) { print "They're"; return; }
|
||||
if (obj has animate) {
|
||||
if (obj has female) { print "She's"; return; }
|
||||
else if (obj hasnt neuter) { print "He's"; return; }
|
||||
}
|
||||
print "That's";
|
||||
];
|
||||
|
||||
[ LanguageLM n x1;
|
||||
Answer,Ask:
|
||||
"There is no reply.";
|
||||
! Ask: see Answer
|
||||
Attack: "Violence isn't the answer to this one.";
|
||||
Blow: "You can't usefully blow ", (thatorthose) x1, ".";
|
||||
Burn: "This dangerous act would achieve little.";
|
||||
Buy: "Nothing is on sale.";
|
||||
Climb: "I don't think much is to be achieved by that.";
|
||||
Close: switch (n) {
|
||||
1: print_ret (ctheyreorthats) x1, " not something you can close.";
|
||||
2: print_ret (ctheyreorthats) x1, " already closed.";
|
||||
3: "You close ", (the) x1, ".";
|
||||
}
|
||||
CommandsOff: switch (n) {
|
||||
1: "[Command recording off.]";
|
||||
#Ifdef TARGET_GLULX;
|
||||
2: "[Command recording already off.]";
|
||||
#Endif; ! TARGET_
|
||||
}
|
||||
CommandsOn: switch (n) {
|
||||
1: "[Command recording on.]";
|
||||
#Ifdef TARGET_GLULX;
|
||||
2: "[Commands are currently replaying.]";
|
||||
3: "[Command recording already on.]";
|
||||
4: "[Command recording failed.]";
|
||||
#Endif; ! TARGET_
|
||||
}
|
||||
CommandsRead: switch (n) {
|
||||
1: "[Replaying commands.]";
|
||||
#Ifdef TARGET_GLULX;
|
||||
2: "[Commands are already replaying.]";
|
||||
3: "[Command replay failed. Command recording is on.]";
|
||||
4: "[Command replay failed.]";
|
||||
5: "[Command replay complete.]";
|
||||
#Endif; ! TARGET_
|
||||
}
|
||||
Consult: "You discover nothing of interest in ", (the) x1, ".";
|
||||
Cut: "Cutting ", (thatorthose) x1, " up would achieve little.";
|
||||
Dig: "Digging would achieve nothing here.";
|
||||
Disrobe: switch (n) {
|
||||
1: "You're not wearing ", (thatorthose) x1, ".";
|
||||
2: "You take off ", (the) x1, ".";
|
||||
}
|
||||
Drink: "There's nothing suitable to drink here.";
|
||||
Drop: switch (n) {
|
||||
1: if (x1 has pluralname) print (The) x1, " are "; else print (The) x1, " is ";
|
||||
"already here.";
|
||||
2: "You haven't got ", (thatorthose) x1, ".";
|
||||
3: "(first taking ", (the) x1, " off)";
|
||||
4: "Dropped.";
|
||||
}
|
||||
Eat: switch (n) {
|
||||
1: print_ret (ctheyreorthats) x1, " plainly inedible.";
|
||||
2: "You eat ", (the) x1, ". Not bad.";
|
||||
}
|
||||
EmptyT: switch (n) {
|
||||
1: print_ret (The) x1, " can't contain things.";
|
||||
2: print_ret (The) x1, " ", (isorare) x1, " closed.";
|
||||
3: print_ret (The) x1, " ", (isorare) x1, " empty already.";
|
||||
4: "That would scarcely empty anything.";
|
||||
}
|
||||
Enter: switch (n) {
|
||||
1: print "But you're already ";
|
||||
if (x1 has supporter) print "on "; else print "in ";
|
||||
print_ret (the) x1, ".";
|
||||
2: if (x1 has pluralname) print "They're"; else print "That's";
|
||||
print " not something you can ";
|
||||
switch (verb_word) {
|
||||
'stand': "stand on.";
|
||||
'sit': "sit down on.";
|
||||
'lie': "lie down on.";
|
||||
default: "enter.";
|
||||
}
|
||||
3: "You can't get into the closed ", (name) x1, ".";
|
||||
4: "You can only get into something free-standing.";
|
||||
5: print "You get ";
|
||||
if (x1 has supporter) print "onto "; else print "into ";
|
||||
print_ret (the) x1, ".";
|
||||
6: print "(getting ";
|
||||
if (x1 has supporter) print "off "; else print "out of ";
|
||||
print (the) x1; ")";
|
||||
7: if (x1 has supporter) "(getting onto ", (the) x1, ")^";
|
||||
if (x1 has container) "(getting into ", (the) x1, ")^";
|
||||
"(entering ", (the) x1, ")^";
|
||||
}
|
||||
Examine: switch (n) {
|
||||
1: "Darkness, noun. An absence of light to see by.";
|
||||
2: "You see nothing special about ", (the) x1, ".";
|
||||
3: print (The) x1, " ", (isorare) x1, " currently switched ";
|
||||
if (x1 has on) "on."; else "off.";
|
||||
}
|
||||
Exit: switch (n) {
|
||||
1: "But you aren't in anything at the moment.";
|
||||
2: "You can't get out of the closed ", (name) x1, ".";
|
||||
3: print "You get ";
|
||||
if (x1 has supporter) print "off "; else print "out of ";
|
||||
print_ret (the) x1, ".";
|
||||
4: print "But you aren't ";
|
||||
if (x1 has supporter) print "on "; else print "in ";
|
||||
print_ret (the) x1, ".";
|
||||
}
|
||||
Fill: "But there's no water here to carry.";
|
||||
FullScore: switch (n) {
|
||||
1: if (deadflag) print "The score was "; else print "The score is ";
|
||||
"made up as follows:^";
|
||||
2: "finding sundry items";
|
||||
3: "visiting various places";
|
||||
4: print "total (out of ", MAX_SCORE; ")";
|
||||
}
|
||||
GetOff: "But you aren't on ", (the) x1, " at the moment.";
|
||||
Give: switch (n) {
|
||||
1: "You aren't holding ", (the) x1, ".";
|
||||
2: "You juggle ", (the) x1, " for a while, but don't achieve much.";
|
||||
3: print (The) x1;
|
||||
if (x1 has pluralname) print " don't"; else print " doesn't";
|
||||
" seem interested.";
|
||||
}
|
||||
Go: switch (n) {
|
||||
1: print "You'll have to get ";
|
||||
if (x1 has supporter) print "off "; else print "out of ";
|
||||
print_ret (the) x1, " first.";
|
||||
2: print_ret (string) CANTGO__TX; ! "You can't go that way."
|
||||
3: "You are unable to climb ", (the) x1, ".";
|
||||
4: "You are unable to descend by ", (the) x1, ".";
|
||||
5: "You can't, since ", (the) x1, " ", (isorare) x1, " in the way.";
|
||||
6: print "You can't, since ", (the) x1;
|
||||
if (x1 has pluralname) " lead nowhere."; else " leads nowhere.";
|
||||
}
|
||||
Insert: switch (n) {
|
||||
1: "You need to be holding ", (the) x1, " before you can put ", (itorthem) x1,
|
||||
" into something else.";
|
||||
2: print_ret (Cthatorthose) x1, " can't contain things.";
|
||||
3: print_ret (The) x1, " ", (isorare) x1, " closed.";
|
||||
4: "You'll need to take ", (itorthem) x1, " off first.";
|
||||
5: "You can't put something inside itself.";
|
||||
6: "(first taking ", (itorthem) x1, " off)^";
|
||||
7: "There is no more room in ", (the) x1, ".";
|
||||
8: "Done.";
|
||||
9: "You put ", (the) x1, " into ", (the) second, ".";
|
||||
}
|
||||
Inv: switch (n) {
|
||||
1: "You are carrying nothing.";
|
||||
2: print "You are carrying";
|
||||
3: print ":^";
|
||||
4: print ".^";
|
||||
}
|
||||
Jump: "You jump on the spot, fruitlessly.";
|
||||
JumpOver,Tie:
|
||||
"You would achieve nothing by this.";
|
||||
Kiss: "Keep your mind on the game.";
|
||||
Listen: "You hear nothing unexpected.";
|
||||
ListMiscellany: switch (n) {
|
||||
1: print " (providing light)";
|
||||
2: print " (which ", (isorare) x1, " closed)";
|
||||
3: print " (closed and providing light)";
|
||||
4: print " (which ", (isorare) x1, " empty)";
|
||||
5: print " (empty and providing light)";
|
||||
6: print " (which ", (isorare) x1, " closed and empty)";
|
||||
7: print " (closed, empty and providing light)";
|
||||
8: print " (providing light and being worn";
|
||||
9: print " (providing light";
|
||||
10: print " (being worn";
|
||||
11: print " (which ", (isorare) x1, " ";
|
||||
12: print "open";
|
||||
13: print "open but empty";
|
||||
14: print "closed";
|
||||
15: print "closed and locked";
|
||||
16: print " and empty";
|
||||
17: print " (which ", (isorare) x1, " empty)";
|
||||
18: print " containing ";
|
||||
19: print " (on ";
|
||||
20: print ", on top of ";
|
||||
21: print " (in ";
|
||||
22: print ", inside ";
|
||||
}
|
||||
LMode1: " is now in its normal ~brief~ printing mode, which gives long descriptions
|
||||
of places never before visited and short descriptions otherwise.";
|
||||
LMode2: " is now in its ~verbose~ mode, which always gives long descriptions
|
||||
of locations (even if you've been there before).";
|
||||
LMode3: " is now in its ~superbrief~ mode, which always gives short descriptions
|
||||
of locations (even if you haven't been there before).";
|
||||
Lock: switch (n) {
|
||||
1: if (x1 has pluralname) print "They don't "; else print "That doesn't ";
|
||||
"seem to be something you can lock.";
|
||||
2: print_ret (ctheyreorthats) x1, " locked at the moment.";
|
||||
3: "First you'll have to close ", (the) x1, ".";
|
||||
4: if (x1 has pluralname) print "Those don't "; else print "That doesn't ";
|
||||
"seem to fit the lock.";
|
||||
5: "You lock ", (the) x1, ".";
|
||||
}
|
||||
Look: switch (n) {
|
||||
1: print " (on ", (the) x1, ")";
|
||||
2: print " (in ", (the) x1, ")";
|
||||
3: print " (as ", (object) x1, ")";
|
||||
4: print "^On ", (the) x1;
|
||||
WriteListFrom(child(x1),
|
||||
ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
|
||||
".";
|
||||
5,6:
|
||||
if (x1 ~= location) {
|
||||
if (x1 has supporter) print "^On "; else print "^In ";
|
||||
print (the) x1, " you";
|
||||
}
|
||||
else print "^You";
|
||||
print " can ";
|
||||
if (n == 5) print "also ";
|
||||
print "see ";
|
||||
WriteListFrom(child(x1),
|
||||
ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+WORKFLAG_BIT);
|
||||
if (x1 ~= location) "."; else " here.";
|
||||
7: "You see nothing unexpected in that direction.";
|
||||
}
|
||||
LookUnder: switch (n) {
|
||||
1: "But it's dark.";
|
||||
2: "You find nothing of interest.";
|
||||
}
|
||||
Mild: "Quite.";
|
||||
Miscellany: switch (n) {
|
||||
1: "(considering the first sixteen objects only)^";
|
||||
2: "Nothing to do!";
|
||||
3: print " You have died ";
|
||||
4: print " You have won ";
|
||||
5: print "^Would you like to RESTART, RESTORE a saved game";
|
||||
#Ifdef DEATH_MENTION_UNDO;
|
||||
print ", UNDO your last move";
|
||||
#Endif;
|
||||
if (TASKS_PROVIDED == 0) print ", give the FULL score for that game";
|
||||
if (deadflag == 2 && AMUSING_PROVIDED == 0)
|
||||
print ", see some suggestions for AMUSING things to do";
|
||||
" or QUIT?";
|
||||
6: "[Your interpreter does not provide ~undo~. Sorry!]";
|
||||
#Ifdef TARGET_ZCODE;
|
||||
7: "~Undo~ failed. [Not all interpreters provide it.]";
|
||||
#Ifnot; ! TARGET_GLULX
|
||||
7: "[You cannot ~undo~ any further.]";
|
||||
#Endif; ! TARGET_
|
||||
8: "Please give one of the answers above.";
|
||||
9: "^It is now pitch dark in here!";
|
||||
10: "I beg your pardon?";
|
||||
11: "[You can't ~undo~ what hasn't been done!]";
|
||||
12: "[Can't ~undo~ twice in succession. Sorry!]";
|
||||
13: "[Previous turn undone.]";
|
||||
14: "Sorry, that can't be corrected.";
|
||||
15: "Think nothing of it.";
|
||||
16: "~Oops~ can only correct a single word.";
|
||||
17: "It is pitch dark, and you can't see a thing.";
|
||||
18: print "yourself";
|
||||
19: "As good-looking as ever.";
|
||||
20: "To repeat a command like ~frog, jump~, just say ~again~, not ~frog, again~.";
|
||||
21: "You can hardly repeat that.";
|
||||
22: "You can't begin with a comma.";
|
||||
23: "You seem to want to talk to someone, but I can't see whom.";
|
||||
24: "You can't talk to ", (the) x1, ".";
|
||||
25: "To talk to someone, try ~someone, hello~ or some such.";
|
||||
26: "(first taking ", (the) not_holding, ")";
|
||||
27: "I didn't understand that sentence.";
|
||||
28: print "I only understood you as far as wanting to ";
|
||||
29: "I didn't understand that number.";
|
||||
30: "You can't see any such thing.";
|
||||
31: "You seem to have said too little!";
|
||||
32: "You aren't holding that!";
|
||||
33: "You can't use multiple objects with that verb.";
|
||||
34: "You can only use multiple objects once on a line.";
|
||||
35: "I'm not sure what ~", (address) pronoun_word, "~ refers to.";
|
||||
36: "You excepted something not included anyway!";
|
||||
37: "You can only do that to something animate.";
|
||||
#Ifdef DIALECT_US;
|
||||
38: "That's not a verb I recognize.";
|
||||
#Ifnot;
|
||||
38: "That's not a verb I recognise.";
|
||||
#Endif;
|
||||
39: "That's not something you need to refer to in the course of this game.";
|
||||
40: "You can't see ~", (address) pronoun_word, "~ (", (the) pronoun_obj,
|
||||
") at the moment.";
|
||||
41: "I didn't understand the way that finished.";
|
||||
42: if (x1 == 0) print "None"; else print "Only ", (number) x1;
|
||||
print " of those ";
|
||||
if (x1 == 1) print "is"; else print "are";
|
||||
" available.";
|
||||
43: "Nothing to do!";
|
||||
44: "There are none at all available!";
|
||||
45: print "Who do you mean, ";
|
||||
46: print "Which do you mean, ";
|
||||
47: "Sorry, you can only have one item here. Which exactly?";
|
||||
48: print "Whom do you want";
|
||||
if (actor ~= player) print " ", (the) actor;
|
||||
print " to "; PrintCommand(); print "?^";
|
||||
49: print "What do you want";
|
||||
if (actor ~= player) print " ", (the) actor;
|
||||
print " to "; PrintCommand(); print "?^";
|
||||
50: print "Your score has just gone ";
|
||||
if (x1 > 0) print "up"; else { x1 = -x1; print "down"; }
|
||||
print " by ", (number) x1, " point";
|
||||
if (x1 > 1) print "s";
|
||||
51: "(Since something dramatic has happened, your list of commands has been cut short.)";
|
||||
52: "^Type a number from 1 to ", x1, ", 0 to redisplay or press ENTER.";
|
||||
53: "^[Please press SPACE.]";
|
||||
54: "[Comment recorded.]";
|
||||
55: "[Comment NOT recorded.]";
|
||||
56: print ".^";
|
||||
57: print "?^";
|
||||
}
|
||||
No,Yes: "That was a rhetorical question.";
|
||||
NotifyOff:
|
||||
"Score notification off.";
|
||||
NotifyOn: "Score notification on.";
|
||||
Objects: switch (n) {
|
||||
1: "Objects you have handled:^";
|
||||
2: "None.";
|
||||
3: print " (worn)";
|
||||
4: print " (held)";
|
||||
5: print " (given away)";
|
||||
6: print " (in ", (name) x1, ")";
|
||||
7: print " (in ", (the) x1, ")";
|
||||
8: print " (inside ", (the) x1, ")";
|
||||
9: print " (on ", (the) x1, ")";
|
||||
10: print " (lost)";
|
||||
}
|
||||
Open: switch (n) {
|
||||
1: print_ret (ctheyreorthats) x1, " not something you can open.";
|
||||
2: if (x1 has pluralname) print "They seem "; else print "It seems ";
|
||||
"to be locked.";
|
||||
3: print_ret (ctheyreorthats) x1, " already open.";
|
||||
4: print "You open ", (the) x1, ", revealing ";
|
||||
if (WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT) == 0) "nothing.";
|
||||
".";
|
||||
5: "You open ", (the) x1, ".";
|
||||
}
|
||||
Order: print (The) x1;
|
||||
if (x1 has pluralname) print " have"; else print " has";
|
||||
" better things to do.";
|
||||
Places: switch (n) {
|
||||
1: print "You have visited: ";
|
||||
2: print ".^";
|
||||
}
|
||||
Pray: "Nothing practical results from your prayer.";
|
||||
Prompt: print "^>";
|
||||
Pronouns: switch (n) {
|
||||
1: print "At the moment, ";
|
||||
2: print "means ";
|
||||
3: print "is unset";
|
||||
4: "no pronouns are known to the game.";
|
||||
5: ".";
|
||||
}
|
||||
Pull,Push,Turn: switch (n) {
|
||||
1: if (x1 has pluralname) print "Those are "; else print "It is ";
|
||||
"fixed in place.";
|
||||
2: "You are unable to.";
|
||||
3: "Nothing obvious happens.";
|
||||
4: "That would be less than courteous.";
|
||||
}
|
||||
! Push: see Pull
|
||||
PushDir: switch (n) {
|
||||
1: "Is that the best you can think of?";
|
||||
2: "That's not a direction.";
|
||||
3: "Not that way you can't.";
|
||||
}
|
||||
PutOn: switch (n) {
|
||||
1: "You need to be holding ", (the) x1, " before you can put ",
|
||||
(itorthem) x1, " on top of something else.";
|
||||
2: "You can't put something on top of itself.";
|
||||
3: "Putting things on ", (the) x1, " would achieve nothing.";
|
||||
4: "You lack the dexterity.";
|
||||
5: "(first taking ", (itorthem) x1, " off)^";
|
||||
6: "There is no more room on ", (the) x1, ".";
|
||||
7: "Done.";
|
||||
8: "You put ", (the) x1, " on ", (the) second, ".";
|
||||
}
|
||||
Quit: switch (n) {
|
||||
1: print "Please answer yes or no.";
|
||||
2: print "Are you sure you want to quit? ";
|
||||
}
|
||||
Remove: switch (n) {
|
||||
1: if (x1 has pluralname) print "They are"; else print "It is";
|
||||
" unfortunately closed.";
|
||||
2: if (x1 has pluralname) print "But they aren't"; else print "But it isn't";
|
||||
" there now.";
|
||||
3: "Removed.";
|
||||
}
|
||||
Restart: switch (n) {
|
||||
1: print "Are you sure you want to restart? ";
|
||||
2: "Failed.";
|
||||
}
|
||||
Restore: switch (n) {
|
||||
1: "Restore failed.";
|
||||
2: "Ok.";
|
||||
}
|
||||
Rub: "You achieve nothing by this.";
|
||||
Save: switch (n) {
|
||||
1: "Save failed.";
|
||||
2: "Ok.";
|
||||
}
|
||||
Score: switch (n) {
|
||||
1: if (deadflag) print "In that game you scored "; else print "You have so far scored ";
|
||||
print score, " out of a possible ", MAX_SCORE, ", in ", turns, " turn";
|
||||
if (turns ~= 1) print "s";
|
||||
return;
|
||||
2: "There is no score in this story.";
|
||||
}
|
||||
ScriptOff: switch (n) {
|
||||
1: "Transcripting is already off.";
|
||||
2: "^End of transcript.";
|
||||
3: "Attempt to end transcript failed.";
|
||||
}
|
||||
ScriptOn: switch (n) {
|
||||
1: "Transcripting is already on.";
|
||||
2: "Start of a transcript of";
|
||||
3: "Attempt to begin transcript failed.";
|
||||
}
|
||||
Search: switch (n) {
|
||||
1: "But it's dark.";
|
||||
2: "There is nothing on ", (the) x1, ".";
|
||||
3: print "On ", (the) x1;
|
||||
WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
|
||||
".";
|
||||
4: "You find nothing of interest.";
|
||||
5: "You can't see inside, since ", (the) x1, " ", (isorare) x1, " closed.";
|
||||
6: print_ret (The) x1, " ", (isorare) x1, " empty.";
|
||||
7: print "In ", (the) x1;
|
||||
WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
|
||||
".";
|
||||
}
|
||||
Set: "No, you can't set ", (thatorthose) x1, ".";
|
||||
SetTo: "No, you can't set ", (thatorthose) x1, " to anything.";
|
||||
Show: switch (n) {
|
||||
1: "You aren't holding ", (the) x1, ".";
|
||||
2: print_ret (The) x1, " ", (isorare) x1, " unimpressed.";
|
||||
}
|
||||
Sing: "Your singing is abominable.";
|
||||
Sleep: "You aren't feeling especially drowsy.";
|
||||
Smell: "You smell nothing unexpected.";
|
||||
#Ifdef DIALECT_US;
|
||||
Sorry: "Oh, don't apologize.";
|
||||
#Ifnot;
|
||||
Sorry: "Oh, don't apologise.";
|
||||
#Endif;
|
||||
Squeeze: switch (n) {
|
||||
1: "Keep your hands to yourself.";
|
||||
2: "You achieve nothing by this.";
|
||||
}
|
||||
Strong: "Real adventurers do not use such language.";
|
||||
Swim: "There's not enough water to swim in.";
|
||||
Swing: "There's nothing sensible to swing here.";
|
||||
SwitchOff: switch (n) {
|
||||
1: print_ret (ctheyreorthats) x1, " not something you can switch.";
|
||||
2: print_ret (ctheyreorthats) x1, " already off.";
|
||||
3: "You switch ", (the) x1, " off.";
|
||||
}
|
||||
SwitchOn: switch (n) {
|
||||
1: print_ret (ctheyreorthats) x1, " not something you can switch.";
|
||||
2: print_ret (ctheyreorthats) x1, " already on.";
|
||||
3: "You switch ", (the) x1, " on.";
|
||||
}
|
||||
Take: switch (n) {
|
||||
1: "Taken.";
|
||||
2: "You are always self-possessed.";
|
||||
3: "I don't suppose ", (the) x1, " would care for that.";
|
||||
4: print "You'd have to get ";
|
||||
if (x1 has supporter) print "off "; else print "out of ";
|
||||
print_ret (the) x1, " first.";
|
||||
5: "You already have ", (thatorthose) x1, ".";
|
||||
6: if (noun has pluralname) print "Those seem "; else print "That seems ";
|
||||
"to belong to ", (the) x1, ".";
|
||||
7: if (noun has pluralname) print "Those seem "; else print "That seems ";
|
||||
"to be a part of ", (the) x1, ".";
|
||||
8: print_ret (Cthatorthose) x1, " ", (isorare) x1,
|
||||
"n't available.";
|
||||
9: print_ret (The) x1, " ", (isorare) x1, "n't open.";
|
||||
10: if (x1 has pluralname) print "They're "; else print "That's ";
|
||||
"hardly portable.";
|
||||
11: if (x1 has pluralname) print "They're "; else print "That's ";
|
||||
"fixed in place.";
|
||||
12: "You're carrying too many things already.";
|
||||
13: "(putting ", (the) x1, " into ", (the) SACK_OBJECT, " to make room)";
|
||||
}
|
||||
Taste: "You taste nothing unexpected.";
|
||||
Tell: switch (n) {
|
||||
1: "You talk to yourself a while.";
|
||||
2: "This provokes no reaction.";
|
||||
}
|
||||
Think: "What a good idea.";
|
||||
ThrowAt: switch (n) {
|
||||
1: "Futile.";
|
||||
2: "You lack the nerve when it comes to the crucial moment.";
|
||||
}
|
||||
! Tie: see JumpOver.
|
||||
Touch: switch (n) {
|
||||
1: "Keep your hands to yourself!";
|
||||
2: "You feel nothing unexpected.";
|
||||
3: "If you think that'll help.";
|
||||
}
|
||||
! Turn: see Pull.
|
||||
Unlock: switch (n) {
|
||||
1: if (x1 has pluralname) print "They don't "; else print "That doesn't ";
|
||||
"seem to be something you can unlock.";
|
||||
2: print_ret (ctheyreorthats) x1, " unlocked at the moment.";
|
||||
3: if (x1 has pluralname) print "Those don't "; else print "That doesn't ";
|
||||
"seem to fit the lock.";
|
||||
4: "You unlock ", (the) x1, ".";
|
||||
}
|
||||
VagueGo: "You'll have to say which compass direction to go in.";
|
||||
Verify: switch (n) {
|
||||
1: "The game file has verified as intact.";
|
||||
2: "The game file did not verify as intact, and may be corrupt.";
|
||||
}
|
||||
Wait: "Time passes.";
|
||||
Wake: "The dreadful truth is, this is not a dream.";
|
||||
WakeOther:"That seems unnecessary.";
|
||||
Wave: switch (n) {
|
||||
1: "But you aren't holding ", (thatorthose) x1, ".";
|
||||
2: "You look ridiculous waving ", (the) x1, ".";
|
||||
}
|
||||
WaveHands:"You wave, feeling foolish.";
|
||||
Wear: switch (n) {
|
||||
1: "You can't wear ", (thatorthose) x1, "!";
|
||||
2: "You're not holding ", (thatorthose) x1, "!";
|
||||
3: "You're already wearing ", (thatorthose) x1, "!";
|
||||
4: "You put on ", (the) x1, ".";
|
||||
}
|
||||
! Yes: see No.
|
||||
];
|
||||
|
||||
! ==============================================================================
|
||||
|
||||
Constant LIBRARY_ENGLISH; ! for dependency checking.
|
||||
|
||||
! ==============================================================================
|
438
library-glulx/Grammar.h
Normal file
438
library-glulx/Grammar.h
Normal file
|
@ -0,0 +1,438 @@
|
|||
! ==============================================================================
|
||||
! GRAMMAR: Grammar table entries for the standard verbs library.
|
||||
!
|
||||
! Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
|
||||
!
|
||||
! Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
|
||||
!
|
||||
! In your game file, Include three library files in this order:
|
||||
! Include "Parser";
|
||||
! Include "VerbLib";
|
||||
! Include "Grammar";
|
||||
! ==============================================================================
|
||||
|
||||
System_file;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! The "meta-verbs", commands to the game rather than in the game, come first:
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Verb meta 'brief' 'normal'
|
||||
* -> LMode1;
|
||||
Verb meta 'verbose' 'long'
|
||||
* -> LMode2;
|
||||
Verb meta 'superbrief' 'short'
|
||||
* -> LMode3;
|
||||
Verb meta 'notify'
|
||||
* -> NotifyOn
|
||||
* 'on' -> NotifyOn
|
||||
* 'off' -> NotifyOff;
|
||||
Verb meta 'pronouns' 'nouns'
|
||||
* -> Pronouns;
|
||||
Verb meta 'quit' 'q//' 'die'
|
||||
* -> Quit;
|
||||
Verb meta 'recording'
|
||||
* -> CommandsOn
|
||||
* 'on' -> CommandsOn
|
||||
* 'off' -> CommandsOff;
|
||||
Verb meta 'replay'
|
||||
* -> CommandsRead;
|
||||
Verb meta 'restart'
|
||||
* -> Restart;
|
||||
Verb meta 'restore'
|
||||
* -> Restore;
|
||||
Verb meta 'save'
|
||||
* -> Save;
|
||||
Verb meta 'score'
|
||||
* -> Score;
|
||||
Verb meta 'fullscore' 'full'
|
||||
* -> FullScore
|
||||
* 'score' -> FullScore;
|
||||
Verb meta 'script' 'transcript'
|
||||
* -> ScriptOn
|
||||
* 'on' -> ScriptOn
|
||||
* 'off' -> ScriptOff;
|
||||
Verb meta 'noscript' 'unscript'
|
||||
* -> ScriptOff;
|
||||
Verb meta 'verify'
|
||||
* -> Verify;
|
||||
Verb meta 'version'
|
||||
* -> Version;
|
||||
|
||||
#Ifndef NO_PLACES;
|
||||
Verb meta 'objects'
|
||||
* -> Objects;
|
||||
Verb meta 'places'
|
||||
* -> Places;
|
||||
#Endif; ! NO_PLACES
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Debugging grammar
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
#Ifdef DEBUG;
|
||||
Verb meta 'actions'
|
||||
* -> ActionsOn
|
||||
* 'on' -> ActionsOn
|
||||
* 'off' -> ActionsOff;
|
||||
Verb meta 'changes'
|
||||
* -> ChangesOn
|
||||
* 'on' -> ChangesOn
|
||||
* 'off' -> ChangesOff;
|
||||
Verb meta 'gonear'
|
||||
* noun -> Gonear;
|
||||
Verb meta 'goto'
|
||||
* number -> Goto;
|
||||
Verb meta 'random'
|
||||
* -> Predictable;
|
||||
Verb meta 'routines' 'messages'
|
||||
* -> RoutinesOn
|
||||
* 'on' -> RoutinesOn
|
||||
* 'off' -> RoutinesOff;
|
||||
Verb meta 'scope'
|
||||
* -> Scope
|
||||
* noun -> Scope;
|
||||
Verb meta 'showobj'
|
||||
* -> Showobj
|
||||
* number -> Showobj
|
||||
* multi -> Showobj;
|
||||
Verb meta 'showverb'
|
||||
* special -> Showverb;
|
||||
Verb meta 'timers' 'daemons'
|
||||
* -> TimersOn
|
||||
* 'on' -> TimersOn
|
||||
* 'off' -> TimersOff;
|
||||
Verb meta 'trace'
|
||||
* -> TraceOn
|
||||
* number -> TraceLevel
|
||||
* 'on' -> TraceOn
|
||||
* 'off' -> TraceOff;
|
||||
Verb meta 'abstract'
|
||||
* noun 'to' noun -> XAbstract;
|
||||
Verb meta 'purloin'
|
||||
* multi -> XPurloin;
|
||||
Verb meta 'tree'
|
||||
* -> XTree
|
||||
* noun -> XTree;
|
||||
|
||||
#Ifdef TARGET_GLULX;
|
||||
Verb meta 'glklist'
|
||||
* -> Glklist;
|
||||
#Endif; ! TARGET_
|
||||
|
||||
#Endif; ! DEBUG
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! And now the game verbs.
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
[ ADirection; if (noun in compass) rtrue; rfalse; ];
|
||||
|
||||
Verb 'answer' 'say' 'shout' 'speak'
|
||||
* topic 'to' creature -> Answer;
|
||||
Verb 'ask'
|
||||
* creature 'about' topic -> Ask
|
||||
* creature 'for' noun -> AskFor
|
||||
* creature 'to' topic -> AskTo
|
||||
* 'that' creature topic -> AskTo;
|
||||
Verb 'attack' 'break' 'crack' 'destroy'
|
||||
'fight' 'hit' 'kill' 'murder' 'punch'
|
||||
'smash' 'thump' 'torture' 'wreck'
|
||||
* noun -> Attack;
|
||||
Verb 'blow'
|
||||
* held -> Blow;
|
||||
Verb 'bother' 'curses' 'darn' 'drat'
|
||||
* -> Mild
|
||||
* topic -> Mild;
|
||||
Verb 'burn' 'light'
|
||||
* noun -> Burn
|
||||
* noun 'with' held -> Burn;
|
||||
Verb 'buy' 'purchase'
|
||||
* noun -> Buy;
|
||||
Verb 'climb' 'scale'
|
||||
* noun -> Climb
|
||||
* 'up'/'over' noun -> Climb;
|
||||
Verb 'close' 'cover' 'shut'
|
||||
* noun -> Close
|
||||
* 'up' noun -> Close
|
||||
* 'off' noun -> SwitchOff;
|
||||
Verb 'consult'
|
||||
* noun 'about' topic -> Consult
|
||||
* noun 'on' topic -> Consult;
|
||||
Verb 'cut' 'chop' 'prune' 'slice'
|
||||
* noun -> Cut;
|
||||
Verb 'dig'
|
||||
* noun -> Dig
|
||||
* noun 'with' held -> Dig;
|
||||
Verb 'drink' 'sip' 'swallow'
|
||||
* noun -> Drink;
|
||||
Verb 'drop' 'discard' 'throw'
|
||||
* multiheld -> Drop
|
||||
* multiexcept 'in'/'into'/'down' noun -> Insert
|
||||
* multiexcept 'on'/'onto' noun -> PutOn
|
||||
* held 'at'/'against'/'on'/'onto' noun -> ThrowAt;
|
||||
Verb 'eat'
|
||||
* held -> Eat;
|
||||
Verb 'empty'
|
||||
* noun -> Empty
|
||||
* 'out' noun -> Empty
|
||||
* noun 'out' -> Empty
|
||||
* noun 'to'/'into'/'on'/'onto' noun -> EmptyT;
|
||||
Verb 'enter' 'cross'
|
||||
* -> GoIn
|
||||
* noun -> Enter;
|
||||
Verb 'examine' 'x//' 'check' 'describe' 'watch'
|
||||
* noun -> Examine;
|
||||
Verb 'exit' 'out' 'outside'
|
||||
* -> Exit
|
||||
* noun -> Exit;
|
||||
Verb 'fill'
|
||||
* noun -> Fill;
|
||||
Verb 'get'
|
||||
* 'out'/'off'/'up' -> Exit
|
||||
* multi -> Take
|
||||
* 'in'/'into'/'on'/'onto' noun -> Enter
|
||||
* 'off' noun -> GetOff
|
||||
* multiinside 'from' noun -> Remove;
|
||||
Verb 'give' 'feed' 'offer' 'pay'
|
||||
* held 'to' creature -> Give
|
||||
* creature held -> Give reverse
|
||||
* 'over' held 'to' creature -> Give;
|
||||
Verb 'go' 'run' 'walk'
|
||||
* -> VagueGo
|
||||
* noun=ADirection -> Go
|
||||
* noun -> Enter
|
||||
* 'into'/'in'/'inside'/'through' noun -> Enter;
|
||||
Verb 'in' 'inside'
|
||||
* -> GoIn;
|
||||
Verb 'insert'
|
||||
* multiexcept 'in'/'into' noun -> Insert;
|
||||
Verb 'inventory' 'inv' 'i//'
|
||||
* -> Inv
|
||||
* 'tall' -> InvTall
|
||||
* 'wide' -> InvWide;
|
||||
Verb 'jump' 'hop' 'skip'
|
||||
* -> Jump
|
||||
* 'over' noun -> JumpOver;
|
||||
Verb 'kiss' 'embrace' 'hug'
|
||||
* creature -> Kiss;
|
||||
Verb 'leave'
|
||||
* -> VagueGo
|
||||
* noun=ADirection -> Go
|
||||
* noun -> Exit
|
||||
* 'into'/'in'/'inside'/'through' noun -> Enter;
|
||||
Verb 'listen' 'hear'
|
||||
* -> Listen
|
||||
* noun -> Listen
|
||||
* 'to' noun -> Listen;
|
||||
Verb 'lock'
|
||||
* noun 'with' held -> Lock;
|
||||
Verb 'look' 'l//'
|
||||
* -> Look
|
||||
* 'at' noun -> Examine
|
||||
* 'inside'/'in'/'into'/'through'/'on' noun -> Search
|
||||
* 'under' noun -> LookUnder
|
||||
* 'up' topic 'in' noun -> Consult
|
||||
* noun=ADirection -> Examine
|
||||
* 'to' noun=ADirection -> Examine;
|
||||
Verb 'no'
|
||||
* -> No;
|
||||
Verb 'open' 'uncover' 'undo' 'unwrap'
|
||||
* noun -> Open
|
||||
* noun 'with' held -> Unlock;
|
||||
Verb 'peel'
|
||||
* noun -> Take
|
||||
* 'off' noun -> Take;
|
||||
Verb 'pick'
|
||||
* 'up' multi -> Take
|
||||
* multi 'up' -> Take;
|
||||
Verb 'pray'
|
||||
* -> Pray;
|
||||
Verb 'pry' 'prise' 'prize' 'lever' 'jemmy' 'force'
|
||||
* noun 'with' held -> Unlock
|
||||
* 'apart'/'open' noun 'with' held -> Unlock
|
||||
* noun 'apart'/'open' 'with' held -> Unlock;
|
||||
Verb 'pull' 'drag'
|
||||
* noun -> Pull;
|
||||
Verb 'push' 'clear' 'move' 'press' 'shift'
|
||||
* noun -> Push
|
||||
* noun noun -> PushDir
|
||||
* noun 'to' noun -> Transfer;
|
||||
Verb 'put'
|
||||
* multiexcept 'in'/'inside'/'into' noun -> Insert
|
||||
* multiexcept 'on'/'onto' noun -> PutOn
|
||||
* 'on' held -> Wear
|
||||
* 'down' multiheld -> Drop
|
||||
* multiheld 'down' -> Drop;
|
||||
Verb 'read'
|
||||
* noun -> Examine
|
||||
* 'about' topic 'in' noun -> Consult
|
||||
* topic 'in' noun -> Consult;
|
||||
Verb 'remove'
|
||||
* held -> Disrobe
|
||||
* multi -> Take
|
||||
* multiinside 'from' noun -> Remove;
|
||||
Verb 'rub' 'clean' 'dust' 'polish' 'scrub'
|
||||
'shine' 'sweep' 'wipe'
|
||||
* noun -> Rub;
|
||||
Verb 'search'
|
||||
* noun -> Search;
|
||||
Verb 'set' 'adjust'
|
||||
* noun -> Set
|
||||
* noun 'to' special -> SetTo;
|
||||
Verb 'shed' 'disrobe' 'doff'
|
||||
* held -> Disrobe;
|
||||
Verb 'show' 'display' 'present'
|
||||
* creature held -> Show reverse
|
||||
* held 'to' creature -> Show;
|
||||
Verb 'shit' 'damn' 'fuck' 'sod'
|
||||
* -> Strong
|
||||
* topic -> Strong;
|
||||
Verb 'sing'
|
||||
* -> Sing;
|
||||
Verb 'sit' 'lie'
|
||||
* 'on' 'top' 'of' noun -> Enter
|
||||
* 'on'/'in'/'inside' noun -> Enter;
|
||||
Verb 'sleep' 'nap'
|
||||
* -> Sleep;
|
||||
Verb 'smell' 'sniff'
|
||||
* -> Smell
|
||||
* noun -> Smell;
|
||||
Verb 'sorry'
|
||||
* -> Sorry;
|
||||
Verb 'squeeze' 'squash'
|
||||
* noun -> Squeeze;
|
||||
Verb 'stand'
|
||||
* -> Exit
|
||||
* 'up' -> Exit
|
||||
* 'on' noun -> Enter;
|
||||
Verb 'swim' 'dive'
|
||||
* -> Swim;
|
||||
Verb 'swing'
|
||||
* noun -> Swing
|
||||
* 'on' noun -> Swing;
|
||||
Verb 'switch'
|
||||
* noun -> Switchon
|
||||
* noun 'on' -> Switchon
|
||||
* noun 'off' -> Switchoff
|
||||
* 'on' noun -> Switchon
|
||||
* 'off' noun -> Switchoff;
|
||||
Verb 'take' 'carry' 'hold'
|
||||
* multi -> Take
|
||||
* 'off' worn -> Disrobe
|
||||
* multiinside 'from' noun -> Remove
|
||||
* multiinside 'off' noun -> Remove
|
||||
* 'inventory' -> Inv;
|
||||
Verb 'taste'
|
||||
* noun -> Taste;
|
||||
Verb 'tell'
|
||||
* creature 'about' topic -> Tell
|
||||
* creature 'to' topic -> AskTo;
|
||||
Verb 'think'
|
||||
* -> Think;
|
||||
Verb 'tie' 'attach' 'fasten' 'fix'
|
||||
* noun -> Tie
|
||||
* noun 'to' noun -> Tie;
|
||||
Verb 'touch' 'feel' 'fondle' 'grope'
|
||||
* noun -> Touch;
|
||||
Verb 'transfer'
|
||||
* noun 'to' noun -> Transfer;
|
||||
Verb 'turn' 'rotate' 'screw' 'twist' 'unscrew'
|
||||
* noun -> Turn
|
||||
* noun 'on' -> Switchon
|
||||
* noun 'off' -> Switchoff
|
||||
* 'on' noun -> Switchon
|
||||
* 'off' noun -> Switchoff;
|
||||
Verb 'wave'
|
||||
* -> WaveHands
|
||||
* noun -> Wave;
|
||||
Verb 'wear' 'don'
|
||||
* held -> Wear;
|
||||
Verb 'yes' 'y//'
|
||||
* -> Yes;
|
||||
Verb 'unlock'
|
||||
* noun 'with' held -> Unlock;
|
||||
Verb 'wait' 'z//'
|
||||
* -> Wait;
|
||||
Verb 'wake' 'awake' 'awaken'
|
||||
* -> Wake
|
||||
* 'up' -> Wake
|
||||
* creature -> WakeOther
|
||||
* creature 'up' -> WakeOther
|
||||
* 'up' creature -> WakeOther;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! This routine is no longer used here, but provided to help existing games
|
||||
! which use it as a general parsing routine:
|
||||
|
||||
[ ConTopic w;
|
||||
consult_from = wn;
|
||||
do w = NextWordStopped();
|
||||
until (w == -1 || (w == 'to' && action_to_be == ##Answer));
|
||||
wn--;
|
||||
consult_words = wn - consult_from;
|
||||
if (consult_words == 0) return -1;
|
||||
if (action_to_be == ##Answer or ##Ask or ##Tell) {
|
||||
w = wn; wn = consult_from; parsed_number = NextWord();
|
||||
if (parsed_number == 'the' && consult_words > 1) parsed_number = NextWord();
|
||||
wn = w;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
];
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Final task: provide trivial routines if the user hasn't already:
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
#Stub AfterLife 0;
|
||||
#Stub AfterPrompt 0;
|
||||
#Stub Amusing 0;
|
||||
#Stub BeforeParsing 0;
|
||||
#Stub ChooseObjects 2;
|
||||
#Stub DarkToDark 0;
|
||||
#Stub DeathMessage 0;
|
||||
#Stub GamePostRoutine 0;
|
||||
#Stub GamePreRoutine 0;
|
||||
#Stub InScope 1;
|
||||
#Stub LookRoutine 0;
|
||||
#Stub NewRoom 0;
|
||||
#Stub ParseNumber 2;
|
||||
#Stub ParserError 1;
|
||||
#Stub PrintTaskName 1;
|
||||
#Stub PrintVerb 1;
|
||||
#Stub TimePasses 0;
|
||||
#Stub UnknownVerb 1;
|
||||
|
||||
#Ifdef TARGET_GLULX;
|
||||
#Stub HandleGlkEvent 2;
|
||||
#Stub IdentifyGlkObject 4;
|
||||
#Stub InitGlkWindow 1;
|
||||
#Endif; ! TARGET_GLULX
|
||||
|
||||
#Ifndef PrintRank;
|
||||
! Constant Make__PR;
|
||||
! #Endif;
|
||||
! #Ifdef Make__PR;
|
||||
[ PrintRank; "."; ];
|
||||
#Endif;
|
||||
|
||||
#Ifndef ParseNoun;
|
||||
! Constant Make__PN;
|
||||
! #Endif;
|
||||
! #Ifdef Make__PN;
|
||||
[ ParseNoun obj; obj = obj; return -1; ];
|
||||
#Endif;
|
||||
|
||||
#Default Story 0;
|
||||
#Default Headline 0;
|
||||
|
||||
#Ifdef INFIX;
|
||||
#Include "infix";
|
||||
#Endif;
|
||||
|
||||
! ==============================================================================
|
||||
|
||||
Constant LIBRARY_GRAMMAR; ! for dependency checking
|
||||
|
||||
! ==============================================================================
|
128
library-glulx/Parser.h
Normal file
128
library-glulx/Parser.h
Normal file
|
@ -0,0 +1,128 @@
|
|||
! ==============================================================================
|
||||
! PARSER: Front end to parser.
|
||||
!
|
||||
! Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
|
||||
!
|
||||
! Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
|
||||
!
|
||||
! In your game file, Include three library files in this order:
|
||||
! Include "Parser";
|
||||
! Include "VerbLib";
|
||||
! Include "Grammar";
|
||||
! ==============================================================================
|
||||
|
||||
System_file;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Constant LibSerial "040227";
|
||||
Constant LibRelease "6/11";
|
||||
Constant LIBRARY_VERSION 611;
|
||||
Constant Grammar__Version 2;
|
||||
|
||||
Default COMMENT_CHARACTER '*';
|
||||
|
||||
#Ifdef INFIX;
|
||||
Default DEBUG 0;
|
||||
#Endif; ! INFIX
|
||||
|
||||
#Ifndef WORDSIZE; ! compiling with Z-code only compiler
|
||||
Constant TARGET_ZCODE;
|
||||
Constant WORDSIZE 2;
|
||||
#Endif; ! WORDSIZE
|
||||
|
||||
#Ifdef TARGET_ZCODE; ! offsets into Z-machine header
|
||||
|
||||
Constant HDR_ZCODEVERSION $00; ! byte
|
||||
Constant HDR_TERPFLAGS $01; ! byte
|
||||
Constant HDR_GAMERELEASE $02; ! word
|
||||
Constant HDR_HIGHMEMORY $04; ! word
|
||||
Constant HDR_INITIALPC $06; ! word
|
||||
Constant HDR_DICTIONARY $08; ! word
|
||||
Constant HDR_OBJECTS $0A; ! word
|
||||
Constant HDR_GLOBALS $0C; ! word
|
||||
Constant HDR_STATICMEMORY $0E; ! word
|
||||
Constant HDR_GAMEFLAGS $10; ! word
|
||||
Constant HDR_GAMESERIAL $12; ! six ASCII characters
|
||||
Constant HDR_ABBREVIATIONS $18; ! word
|
||||
Constant HDR_FILELENGTH $1A; ! word
|
||||
Constant HDR_CHECKSUM $1C; ! word
|
||||
Constant HDR_TERPNUMBER $1E; ! byte
|
||||
Constant HDR_TERPVERSION $1F; ! byte
|
||||
Constant HDR_SCREENHLINES $20; ! byte
|
||||
Constant HDR_SCREENWCHARS $21; ! byte
|
||||
Constant HDR_SCREENWUNITS $22; ! word
|
||||
Constant HDR_SCREENHUNITS $24; ! word
|
||||
Constant HDR_FONTWUNITS $26; ! byte
|
||||
Constant HDR_FONTHUNITS $27; ! byte
|
||||
Constant HDR_ROUTINEOFFSET $28; ! word
|
||||
Constant HDR_STRINGOFFSET $2A; ! word
|
||||
Constant HDR_BGCOLOUR $2C; ! byte
|
||||
Constant HDR_FGCOLOUR $2D; ! byte
|
||||
Constant HDR_TERMCHARS $2E; ! word
|
||||
Constant HDR_PIXELSTO3 $30; ! word
|
||||
Constant HDR_TERPSTANDARD $32; ! two bytes
|
||||
Constant HDR_ALPHABET $34; ! word
|
||||
Constant HDR_EXTENSION $36; ! word
|
||||
Constant HDR_UNUSED $38; ! two words
|
||||
Constant HDR_INFORMVERSION $3C; ! four ASCII characters
|
||||
|
||||
#Ifnot; ! TARGET_GLULX ! offsets into Glulx header and start of ROM
|
||||
|
||||
Constant HDR_MAGICNUMBER $00; ! long word
|
||||
Constant HDR_GLULXVERSION $04; ! long word
|
||||
Constant HDR_RAMSTART $08; ! long word
|
||||
Constant HDR_EXTSTART $0C; ! long word
|
||||
Constant HDR_ENDMEM $10; ! long word
|
||||
Constant HDR_STACKSIZE $14; ! long word
|
||||
Constant HDR_STARTFUNC $18; ! long word
|
||||
Constant HDR_DECODINGTBL $1C; ! long word
|
||||
Constant HDR_CHECKSUM $20; ! long word
|
||||
Constant ROM_INFO $24; ! four ASCII characters
|
||||
Constant ROM_MEMORYLAYOUT $28; ! long word
|
||||
Constant ROM_INFORMVERSION $2C; ! four ASCII characters
|
||||
Constant ROM_COMPVERSION $30; ! four ASCII characters
|
||||
Constant ROM_GAMERELEASE $34; ! short word
|
||||
Constant ROM_GAMESERIAL $36; ! six ASCII characters
|
||||
|
||||
#Endif; ! TARGET_
|
||||
|
||||
#Ifndef VN_1610;
|
||||
Message fatalerror "*** Library 6/11 needs Inform v6.10 or later to work ***";
|
||||
#Endif; ! VN_
|
||||
|
||||
Include "linklpa";
|
||||
|
||||
Fake_Action LetGo;
|
||||
Fake_Action Receive;
|
||||
Fake_Action ThrownAt;
|
||||
Fake_Action Order;
|
||||
Fake_Action TheSame;
|
||||
Fake_Action PluralFound;
|
||||
Fake_Action ListMiscellany;
|
||||
Fake_Action Miscellany;
|
||||
Fake_Action Prompt;
|
||||
Fake_Action NotUnderstood;
|
||||
|
||||
#Ifdef NO_PLACES;
|
||||
Fake_Action Places;
|
||||
Fake_Action Objects;
|
||||
#Endif; ! NO_PLACES
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
[ Main; InformLibrary.play(); ];
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
#Ifdef USE_MODULES;
|
||||
Link "parserm";
|
||||
#Ifnot;
|
||||
Include "parserm";
|
||||
#Endif; ! USE_MODULES
|
||||
|
||||
! ==============================================================================
|
||||
|
||||
Constant LIBRARY_PARSER; ! for dependency checking
|
||||
|
||||
! ==============================================================================
|
994
library-glulx/RusMCE.h
Normal file
994
library-glulx/RusMCE.h
Normal file
|
@ -0,0 +1,994 @@
|
|||
! ===========================================================================
|
||||
!
|
||||
! RusMCE.h:
|
||||
! Системный модуль для русской грамматики
|
||||
! (генератор падежей, проверка глаголов, пр.)
|
||||
! Source encoding: CP1251
|
||||
!
|
||||
! (c) Gayev D.G. 2003
|
||||
!
|
||||
! ---------------------------------------------------------------------------
|
||||
|
||||
System_file;
|
||||
|
||||
Constant Tlimit = 31; ! (не больше)
|
||||
Array Tbuffer --> 3+TLimit;
|
||||
Array Tparse --> Tlimit;
|
||||
|
||||
! DL: слегка модифицированная версия для DictionaryLookup
|
||||
! (из "ParserM.h")
|
||||
|
||||
[ DL buf len
|
||||
i;
|
||||
|
||||
if (len == 0 || len > Tlimit) return 0;
|
||||
|
||||
Tbuffer-->0 = len;
|
||||
for (i = 0: i ~= len: i ++) Tbuffer-->(1+i) = buf-->i;
|
||||
Tbuffer-->(1+len) = 0;
|
||||
|
||||
VM_Tokenise(Tbuffer, Tparse);
|
||||
return Tparse-->1;
|
||||
];
|
||||
|
||||
! DLx:
|
||||
! как DL, но для поиска элементов словаря на 'term'
|
||||
|
||||
[ DLx buf len term
|
||||
i;
|
||||
if (len == 0 || len >= Tlimit) return 0;
|
||||
|
||||
Tbuffer-->0 = len+1;
|
||||
for (i = 0: i ~= len: i ++) Tbuffer-->(1+i) = buf-->i;
|
||||
Tbuffer-->(1+len) = term;
|
||||
Tbuffer-->(2+len) = 0;
|
||||
|
||||
VM_Tokenise(Tbuffer, Tparse);
|
||||
return Tparse-->1;
|
||||
];
|
||||
|
||||
[ CyrCharToUpperUni ch;
|
||||
if (ch >= $0430 && ch <=$044F) {
|
||||
return ch - 32;
|
||||
}
|
||||
if (ch == $0451) {
|
||||
return $0401; ! Ё
|
||||
}
|
||||
return ch;
|
||||
];
|
||||
|
||||
Attribute fem_grammar; ! (тип склонения женского рода)
|
||||
|
||||
Property casegen; ! (необязательный собственный генератор падежей объекта)
|
||||
|
||||
! # падежей (нужно парсеру)
|
||||
Constant LanguageCases = 6;
|
||||
|
||||
! Идентификаторы падежей
|
||||
Constant csOff = 0; ! Нет (отключить генератор падежей)
|
||||
|
||||
Constant csNom = 1; ! Именительный падеж (= номинатив)
|
||||
Constant csGen = 2; ! Родительный падеж (= генитив)
|
||||
Constant csDat = 3; ! Дательный падеж (= датив)
|
||||
Constant csAcc = 4; ! Винительный падеж (= аккузатив)
|
||||
Constant csIns = 5; ! Творительный падеж (= инструментал)
|
||||
Constant csPre = 6; ! Предложный падеж (= препозитив)
|
||||
|
||||
! Падеж по умолчанию для вывода ShortName
|
||||
Global csDflt = csNom;
|
||||
|
||||
! Категории объекта
|
||||
Constant ocSM = 1; ! Единственное число / Мужской род
|
||||
Constant ocSF = 2; ! Единственное число / Женский род
|
||||
Constant ocSN = 3; ! Единственное число / Средний род
|
||||
Constant ocPL = 4; ! Множественное число
|
||||
|
||||
! Категория объекта
|
||||
! определить категорию
|
||||
[ objID obj;
|
||||
|
||||
if (obj has pluralname) return ocPL;
|
||||
else if (obj has neuter) return ocSN;
|
||||
else if (obj has female) return ocSF;
|
||||
else if (obj has fem_grammar) return ocSF;
|
||||
else return ocSM;
|
||||
];
|
||||
|
||||
! (Режим отладки генератора падежей)
|
||||
Constant DEBUG_CASES = false;
|
||||
|
||||
! Основная таблица падежных суффиксов
|
||||
|
||||
Constant ADJ_TOP = 64;
|
||||
|
||||
! SM_Req: запрос к таблице падежей (#nreq)
|
||||
! (ед. число, мужской род)
|
||||
[ SM_Req csID nreq;
|
||||
|
||||
switch (nreq) {
|
||||
|
||||
! II склонение, на согласный:
|
||||
! (дом, снег, баран, кнут, мир, парад):
|
||||
! -, -а, -у, -, -ом, -е
|
||||
0: switch (csID) {
|
||||
csNom: return 0;
|
||||
csGen: return 'а//';
|
||||
csDat: return 'у//';
|
||||
csAcc: return 0;
|
||||
csIns: return 'ом';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! II склонение, на -ь:
|
||||
! (снегирь, апрель, пароль, кремень, фонарь, окунь, медведь):
|
||||
! -ь, -я, -ю, -ь, -ем, -е
|
||||
1: switch (csID) {
|
||||
csNom: return 'ь//';
|
||||
csGen: return 'я//';
|
||||
csDat: return 'ю//';
|
||||
csAcc: return 'ь//';
|
||||
csIns: return 'ем';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! II склонение, на -й:
|
||||
! (иней, лакей, зной, май):
|
||||
! -й, -я, -ю, -й, -ем, -е
|
||||
2: switch (csID) {
|
||||
csNom: return 'й//';
|
||||
csGen: return 'я//';
|
||||
csDat: return 'ю//';
|
||||
csAcc: return 'й//';
|
||||
csIns: return 'ем';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! II склонение, на -ий:
|
||||
! (литий, планетарий, крематорий, Евгений, Василий):
|
||||
! -ий, -ия, -ию, -ий, -ием, -ии
|
||||
3: switch (csID) {
|
||||
csNom: return 'ий';
|
||||
csGen: return 'ия';
|
||||
csDat: return 'ию';
|
||||
csAcc: return 'ий';
|
||||
csIns: return 'ием';
|
||||
csPre: return 'ии';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ый:
|
||||
! (красный, белый, сильный, здоровый):
|
||||
! -ый, -ого, -ому, -ый, -ым, -ом
|
||||
64: switch (csID) {
|
||||
csNom: return 'ый';
|
||||
csGen: return 'ого';
|
||||
csDat: return 'ому';
|
||||
csAcc: return 'ый';
|
||||
csIns: return 'ым';
|
||||
csPre: return 'ом';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ой:
|
||||
! (большой, злой, плохой, лихой, нагой):
|
||||
! -ой, -ого, -ому, -ой, -ым, -ом
|
||||
65: switch (csID) {
|
||||
csNom: return 'ой';
|
||||
csGen: return 'ого';
|
||||
csDat: return 'ому';
|
||||
csAcc: return 'ой';
|
||||
csIns: return 'ым';
|
||||
csPre: return 'ом';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ий:
|
||||
! (синий, средний, хороший):
|
||||
! -ий, -его, -ему, -ий, -им, -ем
|
||||
66: switch (csID) {
|
||||
csNom: return 'ий';
|
||||
csGen: return 'его';
|
||||
csDat: return 'ему';
|
||||
csAcc: return 'ий';
|
||||
csIns: return 'им';
|
||||
csPre: return 'ем';
|
||||
}
|
||||
|
||||
} ! switch (nreq)
|
||||
|
||||
return -1;
|
||||
]; ! SM_Req
|
||||
|
||||
! SF_Req: запрос к таблице падежей (#nreq)
|
||||
! (ед. число, женский род)
|
||||
[ SF_Req csID nreq;
|
||||
|
||||
switch (nreq) {
|
||||
|
||||
! I склонение, на -а:
|
||||
! (вода, стрела, зола, комната):
|
||||
! -а, -ы, -е, -у, -ой, -е
|
||||
0: switch (csID) {
|
||||
csNom: return 'а//';
|
||||
csGen: return 'ы//';
|
||||
csDat: return 'е//';
|
||||
csAcc: return 'у//';
|
||||
csIns: return 'ой';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! I склонение, на -я:
|
||||
! (земля, башня):
|
||||
! -я, -и, -е, -ю, -ей, -е
|
||||
1: switch (csID) {
|
||||
csNom: return 'я//';
|
||||
csGen: return 'и//';
|
||||
csDat: return 'е//';
|
||||
csAcc: return 'ю//';
|
||||
csIns: return 'ей';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! III склонение, на -ь:
|
||||
! (метель, ночь, медь, осень):
|
||||
! -ь, -и, -и, -ь, -ью, -и
|
||||
2: switch (csID) {
|
||||
csNom: return 'ь//';
|
||||
csGen: return 'и//';
|
||||
csDat: return 'и//';
|
||||
csAcc: return 'ь//';
|
||||
csIns: return 'ью';
|
||||
csPre: return 'и//';
|
||||
}
|
||||
|
||||
! I склонение, на -ия:
|
||||
! (сессия, лекция, пародия, агония):
|
||||
! -ия, -ии, -ии, -ию, -ией, -ии
|
||||
3: switch (csID) {
|
||||
csNom: return 'ия';
|
||||
csGen: return 'ии';
|
||||
csDat: return 'ии';
|
||||
csAcc: return 'ию';
|
||||
csIns: return 'ией';
|
||||
csPre: return 'ии';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ая:
|
||||
! (красная, большая, приятная):
|
||||
! -ая, -ой, -ой, -ую, -ой, -ой
|
||||
64: switch (csID) {
|
||||
csNom: return 'ая';
|
||||
csGen: return 'ой';
|
||||
csDat: return 'ой';
|
||||
csAcc: return 'ую';
|
||||
csIns: return 'ой';
|
||||
csPre: return 'ой';
|
||||
}
|
||||
|
||||
! Прилагательные, на -яя:
|
||||
! (синяя, средняя):
|
||||
! -яя, -ей, -ей, -юю, -ей, -ей
|
||||
65: switch (csID) {
|
||||
csNom: return 'яя';
|
||||
csGen: return 'ей';
|
||||
csDat: return 'ей';
|
||||
csAcc: return 'юю';
|
||||
csIns: return 'ей';
|
||||
csPre: return 'ей';
|
||||
}
|
||||
|
||||
} ! switch (nreq)
|
||||
|
||||
return -1;
|
||||
]; ! SF_Req
|
||||
|
||||
! SN_Req: запрос к таблице падежей (#nreq)
|
||||
! (ед. число, средний род)
|
||||
[ SN_Req csID nreq;
|
||||
|
||||
switch (nreq) {
|
||||
|
||||
! II склонение, на -о:
|
||||
! (облако, озеро, утро, ведро, зеркало):
|
||||
! -о, -а, -у, -о, -ом, -е
|
||||
0: switch (csID) {
|
||||
csNom: return 'о//';
|
||||
csGen: return 'а//';
|
||||
csDat: return 'у//';
|
||||
csAcc: return 'о//';
|
||||
csIns: return 'ом';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! II склонение, на -е:
|
||||
! (поле, ложе):
|
||||
! -е, -я, -ю, -е, -ем, -е
|
||||
1: switch (csID) {
|
||||
csNom: return 'е//';
|
||||
csGen: return 'я//';
|
||||
csDat: return 'ю//';
|
||||
csAcc: return 'е//';
|
||||
csIns: return 'ем';
|
||||
csPre: return 'е//';
|
||||
}
|
||||
|
||||
! II склонение, на -ие:
|
||||
! (известие, занятие, приветствие, мышление):
|
||||
! -ие, -ия, -ию, -ие, -ием, -ии
|
||||
2: switch (csID) {
|
||||
csNom: return 'ие';
|
||||
csGen: return 'ия';
|
||||
csDat: return 'ию';
|
||||
csAcc: return 'ие';
|
||||
csIns: return 'ием';
|
||||
csPre: return 'ии';
|
||||
}
|
||||
|
||||
! Разносклоняемое, на -я:
|
||||
! (время, племя, имя, знамя):
|
||||
! -я, -ени, -ени, -я, -енем, -ени
|
||||
3: switch (csID) {
|
||||
csNom: return 'я//';
|
||||
csGen: return 'ени';
|
||||
csDat: return 'ени';
|
||||
csAcc: return 'я//';
|
||||
csIns: return 'енем';
|
||||
csPre: return 'ени';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ое:
|
||||
! (красное, малое, мертвое):
|
||||
! -ое, -ого, -ому, -ое, -ым, -ом
|
||||
64: switch (csID) {
|
||||
csNom: return 'ое';
|
||||
csGen: return 'ого';
|
||||
csDat: return 'ому';
|
||||
csAcc: return 'ое';
|
||||
csIns: return 'ым';
|
||||
csPre: return 'ом';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ее:
|
||||
! (синее, среднее):
|
||||
! -ее, -его, -ему, -ее, -им, -ем
|
||||
65: switch (csID) {
|
||||
csNom: return 'ее';
|
||||
csGen: return 'его';
|
||||
csDat: return 'ему';
|
||||
csAcc: return 'ее';
|
||||
csIns: return 'им';
|
||||
csPre: return 'ем';
|
||||
}
|
||||
|
||||
} ! switch (nreq)
|
||||
|
||||
return -1;
|
||||
]; ! SN_Req
|
||||
|
||||
! PL_Req: запрос к таблице падежей (#nreq)
|
||||
! (мн. число)
|
||||
[ PL_Req csID nreq;
|
||||
|
||||
switch (nreq) {
|
||||
|
||||
! TMP: нерегулярность Gen Pl
|
||||
|
||||
! Множественное, на -и:
|
||||
! (овраги, цели, недели):
|
||||
! -и, -ов/-ей/-, -ам/-ям, -и, -ами/-ями, -ах/-ях
|
||||
0: switch (csID) {
|
||||
csNom: return 'и//';
|
||||
csGen: return 'ев'; ! TMP: не всегда! - ей,
|
||||
csDat: return 'ям';
|
||||
csAcc: return 'и//';
|
||||
csIns: return 'ями';
|
||||
csPre: return 'ях';
|
||||
}
|
||||
|
||||
! Множественное, на -ы:
|
||||
! (работы, солдаты, заботы, закаты):
|
||||
! -ы, -ов/-ей/-, -ам/-ям, -и, -ами/-ями, -ах/-ях
|
||||
1: switch (csID) {
|
||||
csNom: return 'ы//';
|
||||
csGen: return 'ов'; ! TMP: не всегда!
|
||||
csDat: return 'ам';
|
||||
csAcc: return 'ы//';
|
||||
csIns: return 'ами';
|
||||
csPre: return 'ах';
|
||||
}
|
||||
|
||||
! Множественное, на -а:
|
||||
! (облака, дома, номера):
|
||||
! -а, -ов, -ам, -а, -ами, -ах
|
||||
2: switch (csID) {
|
||||
csNom: return 'а//';
|
||||
csGen: return 'ов';
|
||||
csDat: return 'ам';
|
||||
csAcc: return 'а//';
|
||||
csIns: return 'ами';
|
||||
csPre: return 'ах';
|
||||
}
|
||||
|
||||
! Множественное, на -я:
|
||||
! (поля, моря, якоря):
|
||||
! -я, -ей, -ям, -я, -ями, -ях
|
||||
3: switch (csID) {
|
||||
csNom: return 'я//';
|
||||
csGen: return 'ей';
|
||||
csDat: return 'ям';
|
||||
csAcc: return 'я//';
|
||||
csIns: return 'ями';
|
||||
csPre: return 'ях';
|
||||
}
|
||||
|
||||
! Множественное, на -ья:
|
||||
! (листья, деревья, коренья, стулья, перья):
|
||||
! -ья, -ьев, -ьям, -ья, -ьями, -ьях
|
||||
4: switch (csID) {
|
||||
csNom: return 'ья';
|
||||
csGen: return 'ьев';
|
||||
csDat: return 'ьям';
|
||||
csAcc: return 'ья';
|
||||
csIns: return 'ьями';
|
||||
csPre: return 'ьях';
|
||||
}
|
||||
|
||||
! Множественное, на -ия:
|
||||
! (изделия, решения, стремления, понятия):
|
||||
! -ия, -ий, -иям, -ия, -иями, -иях
|
||||
5: switch (csID) {
|
||||
csNom: return 'ия';
|
||||
csGen: return 'ий';
|
||||
csDat: return 'иям';
|
||||
csAcc: return 'ия';
|
||||
csIns: return 'иями';
|
||||
csPre: return 'иях';
|
||||
}
|
||||
|
||||
! Множественное, на -ии:
|
||||
! (станции, реляции, апатии):
|
||||
! -ия, -ий, -иям, -ия, -иями, -иях
|
||||
6: switch (csID) {
|
||||
csNom: return 'ии';
|
||||
csGen: return 'ий';
|
||||
csDat: return 'иям';
|
||||
csAcc: return 'ии';
|
||||
csIns: return 'иями';
|
||||
csPre: return 'иях';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ые:
|
||||
! (красные, опасные, тяжелые):
|
||||
! -ые, -ых, -ым, -ые, -ыми, -ых
|
||||
64: switch (csID) {
|
||||
csNom: return 'ые';
|
||||
csGen: return 'ых';
|
||||
csDat: return 'ым';
|
||||
csAcc: return 'ые';
|
||||
csIns: return 'ыми';
|
||||
csPre: return 'ых';
|
||||
}
|
||||
|
||||
! Прилагательные, на -ие:
|
||||
! (синие, легкие, пологие):
|
||||
! -ие, -их, -им, -ие, -ими, -их
|
||||
65: switch (csID) {
|
||||
csNom: return 'ие';
|
||||
csGen: return 'их';
|
||||
csDat: return 'им';
|
||||
csAcc: return 'ие';
|
||||
csIns: return 'ими';
|
||||
csPre: return 'их';
|
||||
}
|
||||
|
||||
} ! switch (nreq)
|
||||
|
||||
return -1;
|
||||
]; ! PL_Req
|
||||
|
||||
! Ending PostProcess (as after 'prch')
|
||||
[ EndingPost u prch;
|
||||
if (u) {
|
||||
! Модификация после 'г'/'к'/'х'/'ж'/'ш'/'ч'/'щ':
|
||||
! сапог -> сапоги, клубок -> клубки, сполох -> сполохи
|
||||
if (prch == 'г' or 'к' or 'х' or 'ж' or 'ш' or 'ч' or 'щ')
|
||||
switch (u) {
|
||||
'ы//': return 'и//';
|
||||
'ый': return 'ий';
|
||||
'ые': return 'ие';
|
||||
'ым': return 'им';
|
||||
'ыми': return 'ими';
|
||||
'ых': return 'их';
|
||||
}
|
||||
|
||||
! TMP: больше вариантов!
|
||||
|
||||
! после ц: ов, ом -> ев, ем (если окончание безударное)
|
||||
! после ж, ш: я -> а, ю -> у
|
||||
}
|
||||
|
||||
return u;
|
||||
];
|
||||
|
||||
! Ending PreProcess (as after 'prch')
|
||||
[ EndingPre u prch;
|
||||
if (u) {
|
||||
if (prch == 'г' or 'к' or 'х' or 'ж' or 'ш' or 'ч' or 'щ')
|
||||
switch (u) {
|
||||
'и//': return 'ы//';
|
||||
'ий': return 'ый';
|
||||
'ие': return 'ые';
|
||||
'им': return 'ым';
|
||||
'ими': return 'ыми';
|
||||
'их': return 'ых';
|
||||
}
|
||||
}
|
||||
|
||||
return u;
|
||||
];
|
||||
|
||||
! CCaseEnd:
|
||||
! перевести падежное окончание (start..end) в соответствующий падеж (csID)
|
||||
! ocFN - генератор окончаний; disc - дискриминатор; prch - символ перед окончанием
|
||||
[ CCaseEnd start end csID ocFN disc prch
|
||||
i u v;
|
||||
|
||||
v = EndingPre (DL (start, (end-start)/4), prch);
|
||||
|
||||
! Выполнить поиск по таблицам...
|
||||
for (i = 0: : ++ i) {
|
||||
u = indirect (ocFN, csNom, i);
|
||||
|
||||
if (u == -1) {
|
||||
if (i >= ADJ_TOP) ! (больше нет вариантов)
|
||||
{ print "?"; return; }
|
||||
else ! (прилагательные)
|
||||
{ i = ADJ_TOP - 1; }
|
||||
} else if (u == v) {
|
||||
|
||||
if (disc) { -- disc; continue; }
|
||||
|
||||
if (csID ~= csNom) u = EndingPost (indirect (ocFN, csID, i), prch);
|
||||
else u = EndingPost (u, prch);
|
||||
|
||||
if (u) print (address) u;
|
||||
return;
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
! Специфичная версия для 'LanguageRefers'
|
||||
|
||||
[ EndingLookup addr len csID
|
||||
v u ocFN i;
|
||||
|
||||
if (csID == 0) rtrue; !! (любой падеж допустим)
|
||||
|
||||
if (len ~= 0) {
|
||||
v = DL (addr, len);
|
||||
if (v == 0) rfalse;
|
||||
}
|
||||
else v = 0;
|
||||
|
||||
ocFN = SM_Req;
|
||||
|
||||
for (::) {
|
||||
for (i = 0: : ++ i) {
|
||||
u = indirect (ocFN, csID, i);
|
||||
|
||||
if (u == -1) {
|
||||
if (i >= ADJ_TOP) break; ! (больше нет вариантов)
|
||||
else i = ADJ_TOP - 1; ! (прилагательные)
|
||||
}
|
||||
else if (u == v) rtrue;
|
||||
}
|
||||
|
||||
switch (ocFN) {
|
||||
SM_Req: ocFN = SF_Req;
|
||||
SF_Req: ocFN = SN_Req;
|
||||
SN_Req: ocFN = PL_Req;
|
||||
PL_Req: rfalse; ! (больше нет вариантов)
|
||||
}
|
||||
}
|
||||
|
||||
rfalse;
|
||||
];
|
||||
|
||||
!
|
||||
! Проверить корректность глагольного суффикса
|
||||
!
|
||||
[ IsVerbSuffix start len;
|
||||
|
||||
! ("-ся|-сь": убрать)
|
||||
if (len >= 2 && start-->(len-2) == 'с' && start-->(len-1) == 'я' or 'ь')
|
||||
len = len - 2;
|
||||
|
||||
if (len == 1 && start-->0 == 'и' or 'ь') rtrue;
|
||||
|
||||
! "[аеиоуыюя]([ийь]|ть)"
|
||||
if (start-->0 == 'а' or 'е' or 'и' or 'о' or 'у' or 'ы' or 'ю' or 'я') {
|
||||
start = start + 4;
|
||||
len--;
|
||||
|
||||
if (len == 1 && start-->0 == 'й') rtrue;
|
||||
}
|
||||
|
||||
! "ти|ть"
|
||||
if (len == 2 && start-->0 == 'т' && start-->1 == 'ь' or 'и') rtrue;
|
||||
|
||||
! "нь|ни|нуть"
|
||||
if (start-->0 == 'н' &&
|
||||
((len == 2 && start-->1 == 'и' or 'ь') ||
|
||||
(len == 4 && start-->1 == 'у' && start-->2 == 'т' && start-->3 == 'ь')))
|
||||
rtrue;
|
||||
|
||||
rfalse;
|
||||
];
|
||||
|
||||
!
|
||||
! Проверить корректность глагольного префикса
|
||||
!
|
||||
[ IsVerbPrefix start len
|
||||
w;
|
||||
|
||||
w = DL (start, len);
|
||||
if (w == 0) return false;
|
||||
|
||||
return w ==
|
||||
'в//' or 'вз' or 'во' or 'вы' or
|
||||
'до' or
|
||||
'за' or
|
||||
'из' or 'ис' or
|
||||
'на' or
|
||||
'о//' or 'об' or 'обо' or 'от' or 'ото' or
|
||||
'по' or 'под' or 'подо' or 'пре' or 'при' or 'про' or 'пере' or
|
||||
'раз' or 'рас' or
|
||||
'с//' or 'со' or 'съ' or 'у//';
|
||||
];
|
||||
|
||||
!
|
||||
! Проверить корректность глагола (#wnum)
|
||||
!
|
||||
[ LanguageIsVerb buffer parse wnum
|
||||
adr beg len end w;
|
||||
|
||||
adr = buffer + (parse-->(wnum*3))*4;
|
||||
len = parse-->(wnum*3-1);
|
||||
|
||||
w = DLx (adr, len, '!');
|
||||
if (w) return w;
|
||||
|
||||
for (end = len: end > 0: -- end) {
|
||||
if (end == len || IsVerbSuffix (adr + end * 4, len - end))
|
||||
for (beg = 0: beg < end: ++ beg)
|
||||
if (beg == 0 || IsVerbPrefix (adr, beg)) {
|
||||
w = DL (adr + beg * 4, end - beg);
|
||||
if (w ~= 0 && (w->#dict_par1 & 1) ~= 0)
|
||||
return w; ! (verb entry found)
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
];
|
||||
|
||||
! Расшифровка глаголов (LanguageVerb):
|
||||
! просмотреть объекты в VerbDepot
|
||||
|
||||
[ LanguageVerb word
|
||||
obj;
|
||||
|
||||
objectloop (obj in VerbDepot) {
|
||||
if (WordInProperty (word, obj, name))
|
||||
{ print (object) obj; rtrue; }
|
||||
}
|
||||
|
||||
rfalse;
|
||||
];
|
||||
|
||||
! Падеж по умолчанию для вывода LanguageRefers
|
||||
Global csLR = 0;
|
||||
Global csLRU = 0;
|
||||
|
||||
! Обработчик соответствующего символа парсера
|
||||
[ c_token idtok csID
|
||||
retval;
|
||||
|
||||
csLR = csID;
|
||||
csLRU = csID; ! последний падеж, который вызывался
|
||||
|
||||
retval = ParseToken (ELEMENTARY_TT, idtok);
|
||||
|
||||
csLR = 0;
|
||||
|
||||
return retval;
|
||||
];
|
||||
|
||||
! LanguageRefers
|
||||
! Запрос от парсера:
|
||||
! может ли слово #wnum в данном контексте обращаться к объекту obj?
|
||||
|
||||
[ LanguageRefers obj wnum
|
||||
adr len end w csID;
|
||||
|
||||
adr = WordAddress(wnum); len = WordLength(wnum);
|
||||
|
||||
! Для компасных направлений -- упрощенная обработка
|
||||
if (parent (obj) == Compass) {
|
||||
w = DL (adr, len);
|
||||
if (w ~= 0 && WordInProperty (w, obj, name)) rtrue;
|
||||
rfalse;
|
||||
}
|
||||
|
||||
! Для мужских одушевленных предметов Acc -> Gen
|
||||
csID = csLR;
|
||||
if (csID == csAcc && obj has animate && obj has male && obj hasnt fem_grammar)
|
||||
csID = csGen;
|
||||
|
||||
for (end = len: end ~= 0: -- end) {
|
||||
w = DL (adr, end);
|
||||
if (w ~= 0 && WordInProperty (w, obj, name) && EndingLookup (adr + end * 4, len - end, csID))
|
||||
rtrue;
|
||||
}
|
||||
|
||||
rfalse;
|
||||
];
|
||||
|
||||
Constant ScrLen = 200;
|
||||
Array Scratch --> ScrLen;
|
||||
|
||||
! CCase:
|
||||
! перевести имя объекта (obj) в соответствующий падеж (csID)
|
||||
|
||||
[ CCase obj csID ucase as_obj
|
||||
i dlm limit ocFN;
|
||||
|
||||
#iftrue DEBUG_CASES;
|
||||
|
||||
! (отладочный вывод)
|
||||
csLabel (csID);
|
||||
print " (", (object) obj, ")";
|
||||
|
||||
#ifnot;
|
||||
|
||||
if (as_obj == false && obj == player) {
|
||||
if (ucase) {
|
||||
switch (csID) {
|
||||
csNom: print "Ты";
|
||||
csGen: print "Себя";
|
||||
csDat: print "Себе";
|
||||
csAcc: print "Себя";
|
||||
csIns: print "Собой";
|
||||
csPre: print "Себе";
|
||||
}
|
||||
} else {
|
||||
switch (csID) {
|
||||
csNom: print "ты";
|
||||
csGen: print "себя";
|
||||
csDat: print "себе";
|
||||
csAcc: print "себя";
|
||||
csIns: print "собой";
|
||||
csPre: print "себе";
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
switch (objID (obj)) {
|
||||
ocSM: ocFN = SM_Req;
|
||||
ocSF: ocFN = SF_Req;
|
||||
ocSN: ocFN = SN_Req;
|
||||
ocPL: ocFN = PL_Req;
|
||||
default: return;
|
||||
}
|
||||
|
||||
! Для мужских одушевленных предметов Acc -> Gen
|
||||
if (csID == csAcc && obj has animate &&
|
||||
obj has male && obj hasnt fem_grammar)
|
||||
csID = csGen;
|
||||
|
||||
if (csID ~= 0) {
|
||||
Scratch-->0 = VM_PrintToBuffer(Scratch, ScrLen, obj);
|
||||
|
||||
if (ucase) {
|
||||
Scratch-->1 = CyrCharToUpperUni(Scratch-->1);
|
||||
}
|
||||
|
||||
dlm = 0;
|
||||
limit = Scratch-->0;
|
||||
for (i = 1: i <= limit: ++ i) {
|
||||
if (Scratch-->i == '/') {
|
||||
if (dlm == 0) {
|
||||
dlm = Scratch + i * 4;
|
||||
} else {
|
||||
CCaseF (obj, ocFN, csID, dlm + 4, Scratch + i * 4);
|
||||
dlm = 0;
|
||||
}
|
||||
} else {
|
||||
if (dlm ~= 0 && Scratch-->i == ' ') {
|
||||
CCaseF (obj, ocFN, csID, dlm + 4, Scratch + i * 4);
|
||||
dlm = 0;
|
||||
}
|
||||
|
||||
if (dlm == 0) print (char) (Scratch-->i);
|
||||
}
|
||||
}
|
||||
!
|
||||
if (dlm ~= 0) {
|
||||
CCaseF (obj, ocFN, csID, dlm + 4, Scratch + i * 4);
|
||||
}
|
||||
} else {
|
||||
print (object) obj;
|
||||
}
|
||||
|
||||
#endif;
|
||||
];
|
||||
|
||||
[ CCaseF obj ocFN csID beg end disc;
|
||||
|
||||
! (discriminator present?)
|
||||
while (end-->(-1) == '!') { -- end; ++ disc; }
|
||||
|
||||
if (obj provides casegen && obj.casegen (beg, end, csID));
|
||||
else CCaseEnd (beg, end, csID, ocFN, disc, beg-->(-2));
|
||||
|
||||
];
|
||||
|
||||
! Вывод краткого имени объекта (через CCase)
|
||||
[ LanguagePrintShortName obj
|
||||
sn;
|
||||
|
||||
sn = short_name;
|
||||
|
||||
if (obj provides sn && PrintOrRun(obj, sn, 1) ~= 0) rtrue;
|
||||
|
||||
CCase (obj, csDflt, false);
|
||||
|
||||
rtrue;
|
||||
];
|
||||
|
||||
! Вывод списка в падеже csID
|
||||
[ WriteListFromCase obj flag csID
|
||||
rval csSV;
|
||||
|
||||
csSV = csDflt; csDflt = csID;
|
||||
|
||||
rval = WriteListFrom (obj, flag);
|
||||
|
||||
csDflt = csSV;
|
||||
return rval;
|
||||
];
|
||||
|
||||
! Подходящее местоимение для 'obj'
|
||||
[ Pronoun obj;
|
||||
print (string) (
|
||||
IIF (obj == player, "Ты", IIF (obj has pluralname, "Они",
|
||||
IIF (obj has female, "Она", IIF (obj has neuter, "Оно", "Он")))));
|
||||
];
|
||||
|
||||
[ PronounS obj;
|
||||
print (string) (
|
||||
IIF (obj == player, "ты", IIF (obj has pluralname, "они",
|
||||
IIF (obj has female, "она", IIF (obj has neuter, "оно", "он")))));
|
||||
];
|
||||
|
||||
! Окончание краткой формы прилагательных/причастий, согласованных с 'obj'
|
||||
! ("открыт[а|о|ы]", "пуст[а|о|ы]")
|
||||
[ SAEnd obj;
|
||||
|
||||
switch (objID (obj)) {
|
||||
ocSM: ;
|
||||
ocSF: print (address) 'а//';
|
||||
ocSN: print (address) 'о//';
|
||||
ocPL: print (address) 'ы//';
|
||||
}
|
||||
];
|
||||
|
||||
! Окончание глаголов, согласованных с 'obj':
|
||||
! (f1 ? 1-ое : 2-ое) спряжение;
|
||||
! f2 ? 'ют'/'ят' : 'ут'/'ат'
|
||||
[ VEnd obj f1 f2;
|
||||
|
||||
print (address) IIF (obj has pluralname,
|
||||
IIF (f1,
|
||||
IIF (f2, 'ют', 'ут'),
|
||||
IIF (f2, 'ят', 'ат')),
|
||||
IIF (f1, 'ет', 'ит'));
|
||||
];
|
||||
|
||||
! Окончание глаголов: '-ет'/'-ут'
|
||||
[ V1aEnd x; VEnd (x, true, false); ];
|
||||
|
||||
! Окончание глаголов: '-ет'/'-ют'
|
||||
[ V1bEnd x; VEnd (x, true, true); ];
|
||||
|
||||
! Окончание глаголов: '-ит'/'-ат'
|
||||
[ V2aEnd x; VEnd (x, false, false); ];
|
||||
|
||||
! Окончание глаголов: '-ит'/'-ят'
|
||||
[ V2bEnd x; VEnd (x, false, true); ];
|
||||
|
||||
! Окончание глаголов в прошедшем времени
|
||||
[ VPEnd noun;
|
||||
if (noun has pluralname) {print "и"; rtrue;}
|
||||
else if (noun has neuter) {print "о"; rtrue;}
|
||||
else if (noun has female) {print "а"; rtrue;}
|
||||
else {print ""; rtrue;}
|
||||
];
|
||||
|
||||
!
|
||||
! Обработчик беглых гласных
|
||||
! (возвращает true если обработана)
|
||||
!
|
||||
[ ICVowel csID beg end ch0 ch1;
|
||||
|
||||
if ((beg == end && ch0 == 0) || (beg + 4 == end && beg-->0 == ch0)) {
|
||||
if (csID == csNom || csID == csAcc) {
|
||||
if (ch0) print (char) ch0;
|
||||
}
|
||||
else {
|
||||
if (ch1) print (char) ch1;
|
||||
}
|
||||
rtrue;
|
||||
}
|
||||
|
||||
rfalse;
|
||||
];
|
||||
|
||||
[ AEnd noun;
|
||||
if (noun has pluralname) {print "ые"; rtrue;}
|
||||
else if (noun has neuter) {print "ое"; rtrue;}
|
||||
else if (noun has female) {print "ая"; rtrue;}
|
||||
else {print "ый"; rtrue;}
|
||||
];
|
||||
[ AEnd2 noun;
|
||||
if (noun has pluralname) {print "ие"; rtrue;}
|
||||
else if (noun has neuter) {print "ое"; rtrue;}
|
||||
else if (noun has female) {print "ая"; rtrue;}
|
||||
else {print "ий"; rtrue;}
|
||||
];
|
||||
[ AEnd3 noun;
|
||||
if (noun has pluralname) {print "ие"; rtrue;}
|
||||
else if (noun has neuter) {print "ое"; rtrue;}
|
||||
else if (noun has female) {print "ая"; rtrue;}
|
||||
else {print "ой"; rtrue;}
|
||||
];
|
||||
[ PEnding1 n;
|
||||
if (n has pluralname) {print "ими"; rtrue;}
|
||||
if (n has female) {print "ой"; rtrue;}
|
||||
print "им"; rtrue;
|
||||
];
|
||||
[ PEnding2 n;
|
||||
if (n has pluralname) {print "ыми"; rtrue;}
|
||||
if (n has female) {print "ой"; rtrue;}
|
||||
print "ым"; rtrue;
|
||||
];
|
||||
[ GenIt n;
|
||||
if (n has female) {print "её"; rtrue;}
|
||||
if (n has pluralname) {print "их"; rtrue;}
|
||||
print "его"; rtrue;
|
||||
];
|
||||
[ GenIt2 n;
|
||||
print "н";
|
||||
if (n has female) {print "её"; rtrue;}
|
||||
if (n has pluralname) {print "их"; rtrue;}
|
||||
print "его"; rtrue;
|
||||
];
|
||||
[ DatIt n;
|
||||
if (n has female) {print "ей"; rtrue;}
|
||||
if (n has pluralname) {print "им"; rtrue;}
|
||||
print "ему"; rtrue;
|
||||
];
|
||||
[ DatIt2 n;
|
||||
print "н";
|
||||
if (n has female) {print "ей"; rtrue;}
|
||||
if (n has pluralname) {print "им"; rtrue;}
|
||||
print "ему"; rtrue;
|
||||
];
|
||||
[ InsIt n;
|
||||
if (n has female) {print "ей"; rtrue;}
|
||||
if (n has pluralname) {print "ими"; rtrue;}
|
||||
print "им"; rtrue;
|
||||
];
|
||||
[ InsIt2 n;
|
||||
print "н";
|
||||
if (n has female) {print "ей"; rtrue;}
|
||||
if (n has pluralname) {print "ими"; rtrue;}
|
||||
print "им"; rtrue;
|
||||
];
|
970
library-glulx/RussiaG.h
Normal file
970
library-glulx/RussiaG.h
Normal file
|
@ -0,0 +1,970 @@
|
|||
! ----------------------------------------------------------------------------
|
||||
!
|
||||
! RussiaG: Grammar table entries for the standard verbs library.
|
||||
! Russian version
|
||||
! Encoding: CP1251
|
||||
!
|
||||
! Supplied for use with Inform 6 Release 6/11
|
||||
!
|
||||
! (C) Grankin Andrey 2002
|
||||
! (C) Gayev Denis 2003-2004
|
||||
!
|
||||
! Based on: English grammar Release 6/11 Serial number 040227
|
||||
!
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
System_file;
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! "Мета-глаголы" (системные глаголы игры)
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
Verb meta 'счет!'
|
||||
* -> Score
|
||||
* 'полн' -> FullScore;
|
||||
|
||||
Verb meta 'счетполн!'
|
||||
* -> FullScore;
|
||||
|
||||
Verb meta 'q!' 'конец!' 'конец'
|
||||
'конч'
|
||||
* -> Quit;
|
||||
|
||||
Verb meta 'восст!' 'вос' 'восстан' 'восстанов'
|
||||
'загр!' 'загр' 'загрузить' 'загруж'
|
||||
'restore'
|
||||
* -> Restore;
|
||||
|
||||
Verb meta 'провер' 'проверка!'
|
||||
* -> Verify;
|
||||
|
||||
Verb meta 'сохр!' 'сохран'
|
||||
'save'
|
||||
* -> Save;
|
||||
|
||||
Verb meta 'нач' 'заново'
|
||||
'начало!'
|
||||
'перезапуск!'
|
||||
'перезапуст' 'рестарт'
|
||||
* -> Restart;
|
||||
|
||||
Verb meta 'скрипт!' 'транскрипт!' 'отчет!'
|
||||
* -> ScriptOn
|
||||
* 'вкл' -> ScriptOn
|
||||
* 'выкл' -> ScriptOff;
|
||||
|
||||
Verb meta 'остотчет!' * -> ScriptOff;
|
||||
|
||||
! Запись команд
|
||||
|
||||
Verb meta 'запись!'
|
||||
* -> CommandsOn
|
||||
* 'вкл' -> CommandsOn
|
||||
* 'выкл' -> CommandsOff;
|
||||
|
||||
Verb meta 'воспр!'
|
||||
* -> CommandsRead;
|
||||
|
||||
Verb meta 'опис!'
|
||||
* 'норм'/'нормал' -> LMode1
|
||||
* 'дл'/'длин' -> LMode2
|
||||
* 'кр'/'крат' -> LMode3;
|
||||
|
||||
Verb meta 'извещ!'
|
||||
* 'вкл' -> NotifyOn
|
||||
* 'выкл' -> NotifyOff;
|
||||
|
||||
Verb meta 'имена!' 'местоимения!'
|
||||
* -> Pronouns;
|
||||
|
||||
Verb meta 'версия!'
|
||||
* -> Version;
|
||||
|
||||
#IFNDEF NO_PLACES;
|
||||
|
||||
Verb meta 'места!'
|
||||
* -> Places;
|
||||
|
||||
Verb meta 'предметы!'
|
||||
* -> Objects;
|
||||
|
||||
#ENDIF;
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! Отладочные глаголы и действия
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
#ifdef DEBUG;
|
||||
|
||||
Verb meta 'мета!'
|
||||
|
||||
! трассировка парсера
|
||||
* 'трасс' number -> TraceLevel
|
||||
* 'трасс' 'вкл' -> TraceOn
|
||||
* 'трасс' 'выкл' -> TraceOff
|
||||
|
||||
! активация действий
|
||||
* 'акт' 'вкл' -> ActionsOn
|
||||
* 'акт' 'выкл' -> ActionsOff
|
||||
|
||||
! вызовы подпрограмм
|
||||
* 'вызов' 'вкл' -> RoutinesOn
|
||||
* 'вызов' 'выкл' -> RoutinesOff
|
||||
|
||||
! выполнение таймеров/демонов
|
||||
* 'таймер'/'демон' 'вкл' -> TimersOn
|
||||
* 'таймер'/'демон' 'выкл' -> TimersOff
|
||||
|
||||
! изменения
|
||||
* 'измен' 'вкл' -> ChangesOn
|
||||
* 'измен' 'выкл' -> ChangesOff
|
||||
|
||||
! выключение случайностей
|
||||
* 'неслуч' -> Predictable
|
||||
|
||||
! телекинез объектов multi
|
||||
* 'тк' multi -> XPurloin
|
||||
|
||||
! абстрагирование noun в noun
|
||||
* 'абс' noun 'в' noun -> XAbstract
|
||||
|
||||
! вывод иерархии объектов
|
||||
* 'иерарх' -> XTree
|
||||
* 'иерарх' noun -> XTree
|
||||
|
||||
! телепортация
|
||||
* 'тп' 'в' number -> Goto
|
||||
* 'тп' 'к' noun -> Gonear
|
||||
|
||||
! вывод области
|
||||
* 'обл' -> Scope
|
||||
* 'обл' noun -> Scope
|
||||
|
||||
! распечатка глагола
|
||||
* 'глагол' special -> Showverb
|
||||
|
||||
! распечатка объекта
|
||||
* 'объект' -> Showobj
|
||||
* 'объект' multi -> Showobj
|
||||
|
||||
! падежные формы
|
||||
* 'форм' noun -> Decline
|
||||
;
|
||||
|
||||
#Ifdef TARGET_GLULX;
|
||||
Verb meta 'глкспис'
|
||||
* -> Glklist;
|
||||
#Endif; ! TARGET_
|
||||
|
||||
#ifnot;
|
||||
|
||||
[ NoMetaSub;
|
||||
"Мета-глаголы доступны только в отладочной версии!";
|
||||
];
|
||||
|
||||
Verb meta 'мета'
|
||||
* -> NoMeta;
|
||||
|
||||
#endif;
|
||||
|
||||
! -----------------------------------------
|
||||
! Объект-декодировщик глаголов
|
||||
! -----------------------------------------
|
||||
|
||||
Object VerbDepot;
|
||||
|
||||
! -----------------------------------------
|
||||
! Специфичные символы парсера
|
||||
! -----------------------------------------
|
||||
|
||||
!! "noun" in nominative
|
||||
[ cNom_noun; return c_token (NOUN_TOKEN, csNom); ];
|
||||
|
||||
!! "noun" in accusative
|
||||
[ cAcc_noun; return c_token (NOUN_TOKEN, csAcc); ];
|
||||
|
||||
!! "noun" in genitive
|
||||
[ cGen_noun; return c_token (NOUN_TOKEN, csGen); ];
|
||||
|
||||
!! "noun" in dative
|
||||
[ cDat_noun; return c_token (NOUN_TOKEN, csDat); ];
|
||||
|
||||
!! "noun" in instrumental
|
||||
[ cIns_noun; return c_token (NOUN_TOKEN, csIns); ];
|
||||
|
||||
!! "noun" in prepositive
|
||||
[ cPre_noun; return c_token (NOUN_TOKEN, csPre); ];
|
||||
|
||||
!! "held" in instrumental
|
||||
[ cIns_held; return c_token (HELD_TOKEN, csIns); ];
|
||||
|
||||
!! "held" in accusative
|
||||
[ cAcc_held; return c_token (HELD_TOKEN, csAcc); ];
|
||||
|
||||
!! "held" in genitive
|
||||
[ cGen_held; return c_token (HELD_TOKEN, csGen); ];
|
||||
|
||||
!! "worn" in accusative
|
||||
!! (note: there's no 'worn' token)
|
||||
[ cAcc_worn; return c_token (HELD_TOKEN, csAcc); ];
|
||||
|
||||
!! "creature" in accusative
|
||||
[ cAcc_creat; return c_token (CREATURE_TOKEN, csAcc); ];
|
||||
|
||||
!! "creature" in genitive
|
||||
[ cGen_creat; return c_token (CREATURE_TOKEN, csGen); ];
|
||||
|
||||
!! "creature" in dative
|
||||
[ cDat_creat; return c_token (CREATURE_TOKEN, csDat); ];
|
||||
|
||||
!! "multi" in accusative
|
||||
[ cAcc_multi; return c_token (MULTI_TOKEN, csAcc); ];
|
||||
|
||||
!! "multiheld" in accusative
|
||||
[ cAcc_multiheld; return c_token (MULTIHELD_TOKEN, csAcc); ];
|
||||
|
||||
!! "multiexcept" in accusative
|
||||
[ cAcc_multiexcept; return c_token (MULTIEXCEPT_TOKEN, csAcc); ];
|
||||
|
||||
!! "multiinside" in accusative
|
||||
[ cAcc_multiinside; return c_token (MULTIINSIDE_TOKEN, csAcc); ];
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! И собственно рабочие глаголы
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
Verb 'да!' 'да'
|
||||
* -> Yes;
|
||||
|
||||
Verb 'нет!' 'нет'
|
||||
* -> No;
|
||||
|
||||
Verb 'бля' 'хуй' 'дерьмо' 'сука' 'говно' 'трахн' 'трах'
|
||||
* -> Strong
|
||||
* topic -> Strong;
|
||||
Verb 'черт' 'блин'
|
||||
* -> Mild
|
||||
* topic -> Mild;
|
||||
|
||||
!
|
||||
! Инвентарь
|
||||
!
|
||||
|
||||
Verb 'и//' 'i!'
|
||||
'инв!' 'инвент!' 'инвентарь!'
|
||||
* -> Inv
|
||||
* 'высок'/'выс' -> InvTall
|
||||
* 'широк'/'шир' -> InvWide;
|
||||
|
||||
Object "инвентарь" VerbDepot
|
||||
with name 'и//' 'i!' 'инв!' 'инвент!';
|
||||
|
||||
!
|
||||
! Осмотр и поиск
|
||||
!
|
||||
|
||||
! "смотреть"/"глядеть"
|
||||
Verb 'l!' 'x!'
|
||||
'смотр' 'см' 'о//'
|
||||
'гл' 'гля' 'гляд'
|
||||
* -> Look
|
||||
* 'на' cAcc_noun -> Examine
|
||||
* 'в'/'во' cAcc_noun -> Search
|
||||
* 'внутри' cGen_noun -> Search
|
||||
* 'под' cIns_noun -> LookUnder
|
||||
* 'под' cAcc_noun -> LookUnder
|
||||
* 'о'/'об'/'обо'/'про' topic 'в'/'во' cPre_noun -> Consult
|
||||
* 'в'/'во' cPre_noun 'о'/'об'/'обо'/'про' topic -> Consult
|
||||
* cNom_noun -> Examine
|
||||
* cAcc_noun -> Examine;
|
||||
|
||||
Object "смотреть" VerbDepot
|
||||
with name 'l!' 'x!' 'смотр' 'см' 'о//' 'гл' 'гля' 'гляд';
|
||||
|
||||
Verb 'изуч' 'исследов'
|
||||
* cNom_noun -> Search
|
||||
* cAcc_noun -> Search;
|
||||
|
||||
Object "изучить" VerbDepot
|
||||
with name 'изуч' 'исследов';
|
||||
|
||||
! "читать"
|
||||
Verb 'чит' 'прочесть'
|
||||
* 'в'/'во' cPre_noun 'о'/'об'/'обо'/'про' topic -> Consult
|
||||
* 'о'/'об'/'обо'/'про' topic 'в'/'во' cPre_noun -> Consult
|
||||
* cAcc_noun -> Examine;
|
||||
|
||||
Object "читать" VerbDepot
|
||||
with name 'чит' 'прочесть';
|
||||
|
||||
! "искать"
|
||||
Verb 'иск' 'ищ'
|
||||
'ыск' 'ыщ'
|
||||
* 'в'/'во' cPre_noun -> Search
|
||||
* 'в'/'во' cPre_noun 'о'/'об'/'обо'/'про' topic -> Consult
|
||||
* 'о'/'об'/'обо'/'про' topic 'в'/'во' cPre_noun -> Consult
|
||||
* topic 'в'/'во' cPre_noun -> Consult
|
||||
* 'в'/'во' cPre_noun topic -> Consult
|
||||
* cAcc_noun -> Search;
|
||||
|
||||
Object "искать" VerbDepot
|
||||
with name 'иск' 'ищ' 'ыск' 'ыщ';
|
||||
|
||||
!
|
||||
! Передвижение (идти; войти в/выйти из)
|
||||
!
|
||||
|
||||
! Предикат, тестирующий направления
|
||||
[ ADirection; if (noun in compass) rtrue; rfalse; ];
|
||||
|
||||
! "идти"/"бежать"/"ехать"
|
||||
Verb 'ид'
|
||||
'беж' 'бег'
|
||||
'ех' 'езж' 'пойти'
|
||||
* -> VagueGo
|
||||
* noun=ADirection -> Go
|
||||
* 'в'/'во'/'на' noun=ADirection -> Go
|
||||
* cAcc_noun -> Enter
|
||||
* 'в'/'во'/'на' cAcc_noun -> Enter
|
||||
* 'к' cDat_noun -> Enter;
|
||||
|
||||
Object "идти" VerbDepot
|
||||
with name 'ид' 'беж' 'бег' 'ех' 'езж' 'пойти';
|
||||
|
||||
! "войти", "зайти"
|
||||
Verb 'вой' 'войд' 'зай' 'зайд'
|
||||
* -> GoIn
|
||||
* 'в'/'во'/'на' cAcc_noun -> Enter;
|
||||
|
||||
Object "войти" VerbDepot
|
||||
with name 'вой' 'войд' 'зай' 'зайд';
|
||||
|
||||
! "выйти"
|
||||
Verb 'вый' 'выйд'
|
||||
'уй' 'уйд'
|
||||
* -> Exit
|
||||
* 'наружу' -> Exit
|
||||
* 'из'/'с'/'со' cGen_noun -> Exit;
|
||||
|
||||
Object "выйти" VerbDepot
|
||||
with name 'вый' 'выйд' 'уй' 'уйд';
|
||||
|
||||
! "встать"
|
||||
Verb 'вст' 'вста'
|
||||
* -> Exit
|
||||
* 'из'/'с'/'со' cGen_noun -> Exit
|
||||
* 'на'/'в'/'во' cAcc_noun -> Enter;
|
||||
|
||||
Object "встать" VerbDepot
|
||||
with name 'вст' 'вста';
|
||||
|
||||
! "сесть"/"лечь"
|
||||
Verb 'сесть' 'усесться' 'сяд' 'сад'
|
||||
'леч' 'ляг'
|
||||
* 'на'/'в'/'во' cAcc_noun -> Enter;
|
||||
|
||||
Object "сесть" VerbDepot
|
||||
with name 'сесть' 'усесться' 'сяд' 'сад';
|
||||
|
||||
Object "лечь" VerbDepot
|
||||
with name 'леч' 'ляг';
|
||||
|
||||
!
|
||||
! (взять/положить; вынуть/вставить; бросить)
|
||||
!
|
||||
|
||||
! "взять"/"брать"/"вынуть"/"извлечь"/"достать"
|
||||
Verb 'вз' 'возьм'
|
||||
'бра' 'бер'
|
||||
'вын'
|
||||
'извлеч' 'извлек'
|
||||
'дост' 'доста' 'достав'
|
||||
* multi -> Take
|
||||
* cAcc_multi -> Take
|
||||
* cAcc_multiinside 'из'/'с'/'со' cGen_noun -> Remove
|
||||
* multiinside 'из'/'с'/'со' noun -> Remove
|
||||
* 'из'/'с'/'со' cGen_noun cAcc_multiinside -> Remove reverse;
|
||||
|
||||
Object "взять" VerbDepot
|
||||
with name 'вз' 'возьм' 'бра' 'бер' 'вын'
|
||||
'извлеч' 'извлек' 'дост' 'доста' 'достав';
|
||||
|
||||
! "положи"/"клади"/"вставь"/"поместить"/"сунуть"
|
||||
Verb 'лож'
|
||||
'класт' 'клад'
|
||||
'став'
|
||||
'мест' 'мещ'
|
||||
'сов' 'су'
|
||||
* cAcc_multiheld -> Drop
|
||||
* cAcc_multiexcept 'в'/'во' cAcc_noun -> Insert
|
||||
* 'в'/'во' cAcc_noun cAcc_multiexcept -> Insert reverse
|
||||
* cAcc_multiexcept 'внутрь' cGen_noun -> Insert
|
||||
* 'внутрь' cGen_noun cAcc_multiexcept -> Insert reverse
|
||||
* cAcc_multiexcept 'на' cAcc_noun -> PutOn
|
||||
* 'на' cAcc_noun cAcc_multiexcept -> PutOn reverse;
|
||||
|
||||
Object "положить" VerbDepot
|
||||
with name 'лож' 'класт' 'клад' 'став' 'мест' 'мещ' 'сов' 'су';
|
||||
|
||||
! "бросить"/"швырнуть"/"метнуть"/"кинуть"
|
||||
Verb 'брос'
|
||||
'швыр'
|
||||
'мет'
|
||||
'ки' 'кид'
|
||||
* cAcc_multiheld -> Drop
|
||||
* held 'в'/'во'/'на' cAcc_noun -> ThrowAt
|
||||
* 'в'/'во'/'на' cAcc_noun held -> ThrowAt reverse
|
||||
* held cDat_creat -> ThrowAt
|
||||
* cDat_creat held -> ThrowAt reverse;
|
||||
|
||||
Object "бросить" VerbDepot
|
||||
with name 'брос' 'швыр' 'мет' 'ки' 'кид';
|
||||
|
||||
! "[о]порожнить"/"вылить"/"высыпать"
|
||||
Verb 'порожн'
|
||||
'выл'
|
||||
'высып'
|
||||
* cAcc_noun -> Empty
|
||||
* cAcc_noun 'в'/'во'/'на' cAcc_noun -> EmptyT
|
||||
* 'в'/'во'/'на' cAcc_noun cAcc_noun -> EmptyT reverse;
|
||||
|
||||
Object "опорожнить" VerbDepot
|
||||
with name 'порожн' 'выл' 'высып';
|
||||
|
||||
!
|
||||
! (надеть/снять)
|
||||
!
|
||||
|
||||
! "надеть"/"одеть"
|
||||
Verb 'над' 'наде' 'оде'
|
||||
* cAcc_held -> Wear;
|
||||
|
||||
Object "надеть" VerbDepot
|
||||
with name 'над' 'наде' 'оде';
|
||||
|
||||
! "снять"
|
||||
Verb 'снять' 'сним'
|
||||
* cAcc_worn -> Disrobe;
|
||||
|
||||
Object "снять" VerbDepot
|
||||
with name 'снять' 'сним';
|
||||
|
||||
!
|
||||
! (открыть/закрыть; отпереть/запереть; включить/выключить)
|
||||
!
|
||||
|
||||
! "открыть"
|
||||
Verb 'откр'
|
||||
* cAcc_noun -> Open
|
||||
* cAcc_noun cIns_held -> Unlock
|
||||
* cIns_held cAcc_noun -> Unlock reverse;
|
||||
|
||||
! "закрыть"
|
||||
Verb 'закр'
|
||||
* cAcc_noun -> Close
|
||||
* cAcc_noun cIns_held -> Lock
|
||||
* cIns_held cAcc_noun -> Lock reverse;
|
||||
|
||||
Object "открыть" VerbDepot
|
||||
with name 'откр';
|
||||
|
||||
Object "закрыть" VerbDepot
|
||||
with name 'закр';
|
||||
|
||||
! "отпереть"
|
||||
Verb 'отпер' 'отпир' 'отопр'
|
||||
* cAcc_noun cIns_held -> Unlock
|
||||
* cIns_held cAcc_noun -> Unlock reverse;
|
||||
|
||||
! "запереть"
|
||||
Verb 'запер' 'запир' 'запр'
|
||||
* cAcc_noun cIns_held -> Lock
|
||||
* cIns_held cAcc_noun -> Lock reverse;
|
||||
|
||||
Object "отпереть" VerbDepot
|
||||
with name 'отпер' 'отпир' 'отопр';
|
||||
|
||||
Object "запереть" VerbDepot
|
||||
with name 'запер' 'запир' 'запр';
|
||||
|
||||
! "включить"
|
||||
Verb 'включ' 'вкл'
|
||||
* cAcc_noun -> SwitchOn;
|
||||
|
||||
! "выключить"
|
||||
Verb 'выключ' 'выкл'
|
||||
* cAcc_noun -> SwitchOff;
|
||||
|
||||
Object "включить" VerbDepot
|
||||
with name 'включ' 'вкл';
|
||||
|
||||
Object "выключить" VerbDepot
|
||||
with name 'выключ' 'выкл';
|
||||
|
||||
!
|
||||
! Общение с NPC
|
||||
! (дать; показать; сказать; спросить; ответить)
|
||||
!
|
||||
|
||||
! "дать"/"предложить"
|
||||
Verb 'дат'
|
||||
'предлаг' 'предлож'
|
||||
* cAcc_held cDat_creat -> Give
|
||||
* cDat_creat cAcc_held -> Give reverse;
|
||||
|
||||
Object "предложить" VerbDepot
|
||||
with name 'дат' 'предлаг' 'предлож';
|
||||
|
||||
! "показать"
|
||||
Verb 'показ' 'покаж'
|
||||
* cAcc_held cDat_creat -> Show
|
||||
* cDat_creat cAcc_held -> Show reverse;
|
||||
|
||||
Object "показать" VerbDepot
|
||||
with name 'показ' 'покаж';
|
||||
|
||||
! "ответить"
|
||||
Verb 'ответ' 'отвеч'
|
||||
* cDat_creat topic -> Answer reverse
|
||||
* topic 'для' cGen_creat -> Answer;
|
||||
|
||||
Object "ответить" VerbDepot
|
||||
with name 'ответ' 'отвеч';
|
||||
|
||||
! "[рас]сказать"/"сообщить"
|
||||
Verb 'сказ' 'скаж'
|
||||
'сообщ'
|
||||
* cDat_creat 'о'/'об'/'обо'/'про' topic -> Tell
|
||||
* cDat_creat topic -> AskTo;
|
||||
|
||||
Object "сказать" VerbDepot
|
||||
with name 'сказ' 'скаж' 'сообщ';
|
||||
|
||||
! "[рас]спросить"
|
||||
Verb 'спрос'
|
||||
* cAcc_creat 'о'/'об'/'обо'/'про' topic -> Ask
|
||||
* 'у' cAcc_creat 'о'/'об'/'обо'/'про' topic -> Ask
|
||||
* 'о'/'об'/'обо'/'про' topic 'у' cAcc_creat -> Ask reverse;
|
||||
|
||||
Object "спросить" VerbDepot
|
||||
with name 'спрос';
|
||||
|
||||
! "[по/вы]просить"
|
||||
Verb 'прос'
|
||||
* topic 'у' cAcc_creat -> AskFor
|
||||
* 'у' cAcc_creat topic -> AskFor reverse
|
||||
* cAcc_creat topic -> AskTo;
|
||||
|
||||
Object "просить" VerbDepot
|
||||
with name 'прос';
|
||||
|
||||
!
|
||||
! Прочие действия
|
||||
!
|
||||
|
||||
! "извиниться"/"простить"
|
||||
Verb 'извин'
|
||||
'прост' 'прощ'
|
||||
* -> Sorry;
|
||||
|
||||
Object "извинить" VerbDepot
|
||||
with name 'извин' 'прост' 'прощ';
|
||||
|
||||
! "[по]махать"
|
||||
Verb 'мах' 'маш'
|
||||
* -> WaveHands
|
||||
* 'рукой'/'руками' -> WaveHands
|
||||
* cIns_noun -> Wave;
|
||||
|
||||
Object "махать" VerbDepot
|
||||
with name 'мах' 'маш';
|
||||
|
||||
! "установить"/"настроить"
|
||||
Verb 'установ'
|
||||
'настро'
|
||||
* cAcc_noun -> Set
|
||||
* cAcc_noun 'на' special -> SetTo
|
||||
* 'на' special cAcc_noun -> SetTo reverse;
|
||||
|
||||
Object "настроить" VerbDepot
|
||||
with name 'установ' 'настр';
|
||||
|
||||
! "[пере]двигать"
|
||||
Verb 'дви' 'двиг'
|
||||
* cAcc_noun -> Push
|
||||
* cAcc_noun 'на'/'в'/'во' cAcc_noun -> Transfer
|
||||
* 'на'/'в'/'во' cAcc_noun cAcc_noun -> Transfer reverse;
|
||||
|
||||
Object "двигать" VerbDepot
|
||||
with name 'дви' 'двиг';
|
||||
|
||||
! "тянуть"/"тащить"/"волочь"
|
||||
Verb 'тя' 'тяг'
|
||||
'тащ'
|
||||
'волоч' 'волок'
|
||||
'дерн' 'дерг'
|
||||
* cAcc_noun -> Pull
|
||||
* 'за' cAcc_noun -> Pull
|
||||
* cAcc_noun 'на'/'в'/'во' cAcc_noun -> Transfer
|
||||
* 'на'/'в'/'во' cAcc_noun cAcc_noun -> Transfer reverse;
|
||||
|
||||
Object "тянуть" VerbDepot
|
||||
with name 'тя' 'тяг' 'тащ' 'волоч' 'волок' 'дерн' 'дерг';
|
||||
|
||||
! "толкать"/"пихать"/"нажать"
|
||||
Verb 'толк'
|
||||
'пих'
|
||||
'наж' 'нажм' 'нажим'
|
||||
* cAcc_noun -> Push
|
||||
* 'на' cAcc_noun -> Push
|
||||
* cAcc_noun 'на'/'в'/'во' cAcc_noun -> Transfer
|
||||
* 'на'/'в'/'во' cAcc_noun cAcc_noun -> Transfer reverse;
|
||||
|
||||
Object "толкать" VerbDepot
|
||||
with name 'толк' 'пих' 'наж' 'нажм' 'нажим';
|
||||
|
||||
! "вертеть"/"[по]вернуть"/"вращать"
|
||||
Verb 'вер' 'верт'
|
||||
'вращ'
|
||||
* cAcc_noun -> Turn;
|
||||
|
||||
Object "вертеть" VerbDepot
|
||||
with name 'вер' 'верт' 'вращ';
|
||||
|
||||
! "ударить"/"[у]бить"/"атаковать"/"[с]ломать"/"[раз]рушить"
|
||||
Verb 'би' 'бе'
|
||||
'лом'
|
||||
'удар'
|
||||
'руш'
|
||||
'атак' 'атаков'
|
||||
* cAcc_noun -> Attack;
|
||||
|
||||
Object "атаковать" VerbDepot
|
||||
with name 'би' 'бе' 'лом' 'удар' 'руш' 'атак' 'атаков';
|
||||
|
||||
! "напасть"
|
||||
Verb 'напас' 'напад'
|
||||
* 'на' cAcc_noun -> Attack;
|
||||
|
||||
Object "напасть" VerbDepot
|
||||
with name 'напас' 'напад';
|
||||
|
||||
! "[о]ж[и]дать"
|
||||
Verb 'z!'
|
||||
'ж!'
|
||||
'жд' 'жид'
|
||||
* -> Wait;
|
||||
|
||||
Object "ждать" VerbDepot
|
||||
with name 'z!' 'ж!' 'жд' 'жид';
|
||||
|
||||
! "[съ]есть"/"[со]жрать"/"[с]кушать"
|
||||
Verb 'есть' 'еш'
|
||||
'жр'
|
||||
'куш'
|
||||
* cAcc_held -> Eat;
|
||||
|
||||
Object "есть" VerbDepot
|
||||
with name 'есть' 'еш' 'жр';
|
||||
|
||||
! "[вы]пить"
|
||||
Verb 'пи'
|
||||
* cAcc_noun -> Drink;
|
||||
|
||||
Object "пить" VerbDepot
|
||||
with name 'пи';
|
||||
|
||||
! "спать"/"дремать"
|
||||
Verb 'спа' 'уснуть' 'усни' 'дрем' 'засн'
|
||||
* -> Sleep;
|
||||
|
||||
Object "спать" VerbDepot
|
||||
with name 'спа' 'уснуть' 'усни' 'дрем' 'засн';
|
||||
|
||||
! "[раз]будить"
|
||||
Verb 'буд'
|
||||
* -> Wake
|
||||
* cAcc_creat -> WakeOther;
|
||||
|
||||
Object "будить" VerbDepot
|
||||
with name 'буд';
|
||||
|
||||
Verb 'просн'
|
||||
* -> Wake;
|
||||
|
||||
Object "проснуться" VerbDepot
|
||||
with name 'просн';
|
||||
|
||||
! "петь"
|
||||
Verb 'пе' 'по'
|
||||
* -> Sing;
|
||||
|
||||
Object "петь" VerbDepot
|
||||
with name 'пе' 'по';
|
||||
|
||||
! "[за]лезть"
|
||||
Verb 'лез' 'лаз'
|
||||
* -> Exit
|
||||
* 'на' cAcc_noun -> Climb
|
||||
* 'по' cDat_noun -> Climb
|
||||
* 'в'/'во' cAcc_noun -> Enter
|
||||
* 'с'/'со' cGen_noun -> Exit;
|
||||
|
||||
|
||||
Object "лезть" VerbDepot
|
||||
with name 'лез' 'лаз';
|
||||
|
||||
! "[по]куп(и/а)ть"
|
||||
Verb 'куп'
|
||||
* cAcc_noun -> Buy;
|
||||
|
||||
Object "купить" VerbDepot
|
||||
with name 'куп';
|
||||
|
||||
! "сжать"/"[с/раз]давить"
|
||||
Verb 'сжа' 'жм' 'жим'
|
||||
'дав'
|
||||
* cAcc_noun -> Squeeze;
|
||||
|
||||
Object "сжать" VerbDepot
|
||||
with name 'сжа' 'жм' 'жим' 'дав';
|
||||
|
||||
! "плавать"/"нырять"
|
||||
Verb 'плав' 'плыв' 'пл'
|
||||
'ныр'
|
||||
* -> Swim;
|
||||
|
||||
Object "плавать" VerbDepot
|
||||
with name 'плав' 'плыв' 'ныр' 'пл';
|
||||
|
||||
! "качать[ся]"
|
||||
Verb 'кач'
|
||||
* cAcc_noun -> Swing
|
||||
* 'на' cPre_noun -> Swing; ! "качаться"
|
||||
|
||||
Object "качать" VerbDepot
|
||||
with name 'кач';
|
||||
|
||||
! "дуть"
|
||||
Verb 'ду'
|
||||
* 'в'/'во' cAcc_held -> Blow
|
||||
* cAcc_held -> Blow; ! "задуть"
|
||||
|
||||
Object "дуть" VerbDepot
|
||||
with name 'ду';
|
||||
|
||||
! "молить[ся]"
|
||||
Verb 'мол'
|
||||
* -> Pray;
|
||||
|
||||
Object "молить" VerbDepot
|
||||
with name 'мол';
|
||||
|
||||
! "целовать"/"обнимать"
|
||||
Verb 'целов' 'целуй' 'обнять' 'обним'
|
||||
* cAcc_creat -> Kiss;
|
||||
|
||||
Object "целовать" VerbDepot
|
||||
with name 'целов' 'целуй' 'обнять' 'обним';
|
||||
|
||||
! "[за]думать[ся]"/"мыслить"
|
||||
Verb 'дум'
|
||||
'мысл' 'мышл'
|
||||
* -> Think;
|
||||
|
||||
Object "думать" VerbDepot
|
||||
with name 'дум' 'мысл' 'мышл';
|
||||
|
||||
! "нюхать"/"нюхнуть"
|
||||
Verb 'нюх'
|
||||
* -> Smell
|
||||
* cAcc_noun -> Smell
|
||||
* 'к' cDat_noun -> Smell; ! "принюхаться"
|
||||
|
||||
Object "нюхать" VerbDepot
|
||||
with name 'нюх';
|
||||
|
||||
! "слушать"
|
||||
Verb 'слух' 'слуш' 'слыш'
|
||||
* -> Listen
|
||||
* cAcc_noun -> Listen
|
||||
* 'к' cDat_noun -> Listen; ! "прислушаться"
|
||||
|
||||
Object "слушать" VerbDepot
|
||||
with name 'слух' 'слуш' 'слыш';
|
||||
|
||||
! "вку[сить/шать]"/"лизать"/"сосать"
|
||||
Verb 'вкус' 'вкуш'
|
||||
'лиз'
|
||||
'сос'
|
||||
* cAcc_noun -> Taste;
|
||||
|
||||
Object "вкусить" VerbDepot
|
||||
with name 'вкус' 'вкуш' 'лиз';
|
||||
|
||||
! "трогать"/"тронуть"
|
||||
Verb 'тро' 'трог'
|
||||
'щуп'
|
||||
* cAcc_noun -> Touch
|
||||
* 'до' cGen_noun -> Touch; ! "дотронуться"
|
||||
|
||||
Object "трогать" VerbDepot
|
||||
with name 'тро' 'трог' 'щуп';
|
||||
|
||||
! "коснуть[ся]"/"касать[ся]"
|
||||
Verb 'кас' 'кос'
|
||||
* cGen_noun -> Touch
|
||||
* 'к' cDat_noun -> Touch; ! "прикоснуться"
|
||||
|
||||
Object "коснуться" VerbDepot
|
||||
with name 'кас' 'кос';
|
||||
|
||||
! "тереть"
|
||||
Verb 'тер' 'тир' 'тр'
|
||||
* cAcc_noun -> Rub;
|
||||
|
||||
Object "тереть" VerbDepot
|
||||
with name 'тер' 'тир' 'тр';
|
||||
|
||||
! "вязать"
|
||||
Verb 'вяз' 'вяж'
|
||||
* cAcc_noun -> Tie
|
||||
* cAcc_noun 'к' cDat_noun -> Tie ! "привязать"
|
||||
* 'к' cDat_noun cAcc_noun -> Tie reverse
|
||||
* cAcc_noun 'с'/'со' cIns_noun -> Tie ! "связать"
|
||||
* 'с'/'со' cIns_noun cAcc_noun -> Tie reverse;
|
||||
|
||||
Object "вязать" VerbDepot
|
||||
with name 'вяз' 'вяж';
|
||||
|
||||
! "жечь"/"жги"
|
||||
Verb 'жеч' 'жг'
|
||||
* cAcc_noun -> Burn
|
||||
* cAcc_noun cIns_held -> Burn
|
||||
* cIns_held cAcc_noun -> Burn reverse;
|
||||
|
||||
Object "жечь" VerbDepot
|
||||
with name 'жеч' 'жг';
|
||||
|
||||
! "наполнить"
|
||||
Verb 'полн'
|
||||
* cAcc_noun -> Fill;
|
||||
|
||||
Object "наполнить" VerbDepot
|
||||
with name 'полн';
|
||||
|
||||
! "резать"
|
||||
Verb 'рез' 'реж'
|
||||
* cAcc_noun -> Cut;
|
||||
|
||||
Object "резать" VerbDepot
|
||||
with name 'рез' 'реж';
|
||||
|
||||
! "прыгать"/"скакать"
|
||||
Verb 'прыг'
|
||||
'скак' 'скач' 'скок'
|
||||
* -> Jump
|
||||
* 'через' cAcc_noun -> JumpOver;
|
||||
|
||||
Object "прыгать" VerbDepot
|
||||
with name 'прыг' 'скак' 'скач' 'скок';
|
||||
|
||||
! "копать"/"рыть"
|
||||
Verb 'коп'
|
||||
'ры' 'ро'
|
||||
* cAcc_noun -> Dig
|
||||
* cAcc_noun cIns_held -> Dig
|
||||
* cIns_held cAcc_noun -> Dig reverse;
|
||||
|
||||
Object "копать" VerbDepot
|
||||
with name 'коп' 'ры' 'ро';
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
Global w_sense;
|
||||
|
||||
[ c_sense;
|
||||
|
||||
w_sense = NextWord ();
|
||||
|
||||
if (w_sense == 'вкус' or 'слух' or 'нюх' or 'запах' or 'ощупь')
|
||||
return GPR_PREPOSITION;
|
||||
|
||||
return GPR_FAIL;
|
||||
];
|
||||
|
||||
[ SenseSub;
|
||||
|
||||
switch (w_sense) {
|
||||
'слух': <<Listen noun>>;
|
||||
'вкус': <<Taste noun>>;
|
||||
'нюх', 'запах': <<Smell noun>>;
|
||||
'ощупь': <<Touch noun>>;
|
||||
}
|
||||
|
||||
"Непонятно, как ты хочешь попробовать ", (cAcc) noun, ".";
|
||||
];
|
||||
|
||||
! "пробовать"
|
||||
Verb 'проб' 'пробов'
|
||||
* cAcc_noun 'на' c_sense -> Sense
|
||||
* 'на' c_sense cAcc_noun -> Sense;
|
||||
|
||||
Object "пробовать" VerbDepot
|
||||
with name 'проб' 'пробов';
|
||||
|
||||
! ----------------------------------------------------------------------------
|
||||
! В завершение тривиальные рутины (если они не заданы пользователем)
|
||||
! ----------------------------------------------------------------------------
|
||||
|
||||
#Stub AfterLife 0;
|
||||
#Stub AfterPrompt 0;
|
||||
#Stub Amusing 0;
|
||||
#Stub BeforeParsing 0;
|
||||
#Stub ChooseObjects 2;
|
||||
#Stub DarkToDark 0;
|
||||
#Stub DeathMessage 0;
|
||||
#Stub GamePostRoutine 0;
|
||||
#Stub GamePreRoutine 0;
|
||||
#Stub InScope 1;
|
||||
#Stub LookRoutine 0;
|
||||
#Stub NewRoom 0;
|
||||
#Stub ParseNumber 2;
|
||||
#Stub ParserError 1;
|
||||
#Stub PrintTaskName 1;
|
||||
#Stub PrintVerb 1;
|
||||
#Stub TimePasses 0;
|
||||
#Stub UnknownVerb 1;
|
||||
|
||||
#Ifdef TARGET_GLULX;
|
||||
#Stub HandleGlkEvent 2;
|
||||
#Stub IdentifyGlkObject 4;
|
||||
#Stub InitGlkWindow 1;
|
||||
#Endif; ! TARGET_GLULX
|
||||
|
||||
#Ifndef PrintRank;
|
||||
! Constant Make__PR;
|
||||
! #Endif;
|
||||
! #Ifdef Make__PR;
|
||||
[ PrintRank; "."; ];
|
||||
#Endif;
|
||||
|
||||
#Ifndef ParseNoun;
|
||||
! Constant Make__PN;
|
||||
! #Endif;
|
||||
! #Ifdef Make__PN;
|
||||
[ ParseNoun obj; obj = obj; return -1; ];
|
||||
#Endif;
|
||||
|
||||
#Default Story 0;
|
||||
#Default Headline 0;
|
||||
|
||||
#Ifdef INFIX;
|
||||
#Include "infix";
|
||||
#Endif;
|
||||
|
||||
! ==============================================================================
|
||||
|
||||
Constant LIBRARY_RUSSIAG;
|
||||
|
||||
! ==============================================================================
|
1158
library-glulx/Russian.h
Normal file
1158
library-glulx/Russian.h
Normal file
File diff suppressed because it is too large
Load diff
55
library-glulx/VerbLib.h
Normal file
55
library-glulx/VerbLib.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
! ==============================================================================
|
||||
! VERBLIB: Front end to standard verbs library.
|
||||
!
|
||||
! Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
|
||||
!
|
||||
! Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
|
||||
!
|
||||
! In your game file, Include three library files in this order:
|
||||
! Include "Parser";
|
||||
! Include "VerbLib";
|
||||
! Include "Grammar";
|
||||
! ==============================================================================
|
||||
|
||||
System_file;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Default AMUSING_PROVIDED 1;
|
||||
Default MAX_CARRIED 100;
|
||||
Default MAX_SCORE 0;
|
||||
Default NUMBER_TASKS 1;
|
||||
Default OBJECT_SCORE 4;
|
||||
Default ROOM_SCORE 5;
|
||||
Default SACK_OBJECT 0;
|
||||
Default TASKS_PROVIDED 1;
|
||||
|
||||
#Ifndef task_scores;
|
||||
! Constant MAKE__TS;
|
||||
! #Endif;
|
||||
! #Ifdef MAKE__TS;
|
||||
Array task_scores -> 0 0 0 0;
|
||||
#Endif;
|
||||
|
||||
Array task_done -> NUMBER_TASKS;
|
||||
|
||||
#Ifndef LibraryMessages;
|
||||
Object LibraryMessages;
|
||||
#Endif;
|
||||
|
||||
#Ifndef NO_PLACES;
|
||||
[ ObjectsSub; Objects1Sub(); ];
|
||||
[ PlacesSub; Places1Sub(); ];
|
||||
#Endif; ! NO_PLACES
|
||||
|
||||
#Ifdef USE_MODULES;
|
||||
Link "verblibm";
|
||||
#Ifnot;
|
||||
Include "verblibm";
|
||||
#Endif; ! USE_MODULES
|
||||
|
||||
! ==============================================================================
|
||||
|
||||
Constant LIBRARY_VERBLIB; ! for dependency checking
|
||||
|
||||
! ==============================================================================
|
874
library-glulx/infglk.h
Normal file
874
library-glulx/infglk.h
Normal file
|
@ -0,0 +1,874 @@
|
|||
! infglk.h -- auto-generated by parse_dispatch.py.
|
||||
! Generated for Glk API version 0.7.5
|
||||
|
||||
! Declare as a system header unless we are in the I7 environment.
|
||||
! (I7 does not use the System_file directive.)
|
||||
#ifndef NI_BUILD_COUNT;
|
||||
System_file;
|
||||
#endif; ! NI_BUILD_COUNT
|
||||
|
||||
#ifndef INFGLK_H;
|
||||
Constant INFGLK_H = 1;
|
||||
#ifdef TARGET_GLULX;
|
||||
|
||||
Constant evtype_Arrange = 5;
|
||||
Constant evtype_CharInput = 2;
|
||||
Constant evtype_Hyperlink = 8;
|
||||
Constant evtype_LineInput = 3;
|
||||
Constant evtype_MouseInput = 4;
|
||||
Constant evtype_None = 0;
|
||||
Constant evtype_Redraw = 6;
|
||||
Constant evtype_SoundNotify = 7;
|
||||
Constant evtype_Timer = 1;
|
||||
Constant evtype_VolumeNotify = 9;
|
||||
Constant filemode_Read = 2;
|
||||
Constant filemode_ReadWrite = 3;
|
||||
Constant filemode_Write = 1;
|
||||
Constant filemode_WriteAppend = 5;
|
||||
Constant fileusage_BinaryMode = 0;
|
||||
Constant fileusage_Data = 0;
|
||||
Constant fileusage_InputRecord = 3;
|
||||
Constant fileusage_SavedGame = 1;
|
||||
Constant fileusage_TextMode = 256;
|
||||
Constant fileusage_Transcript = 2;
|
||||
Constant fileusage_TypeMask = 15;
|
||||
Constant gestalt_CharInput = 1;
|
||||
Constant gestalt_CharOutput = 3;
|
||||
Constant gestalt_CharOutput_ApproxPrint = 1;
|
||||
Constant gestalt_CharOutput_CannotPrint = 0;
|
||||
Constant gestalt_CharOutput_ExactPrint = 2;
|
||||
Constant gestalt_DateTime = 20;
|
||||
Constant gestalt_DrawImage = 7;
|
||||
Constant gestalt_Graphics = 6;
|
||||
Constant gestalt_GraphicsCharInput = 23;
|
||||
Constant gestalt_GraphicsTransparency = 14;
|
||||
Constant gestalt_HyperlinkInput = 12;
|
||||
Constant gestalt_Hyperlinks = 11;
|
||||
Constant gestalt_LineInput = 2;
|
||||
Constant gestalt_LineInputEcho = 17;
|
||||
Constant gestalt_LineTerminatorKey = 19;
|
||||
Constant gestalt_LineTerminators = 18;
|
||||
Constant gestalt_MouseInput = 4;
|
||||
Constant gestalt_ResourceStream = 22;
|
||||
Constant gestalt_Sound = 8;
|
||||
Constant gestalt_Sound2 = 21;
|
||||
Constant gestalt_SoundMusic = 13;
|
||||
Constant gestalt_SoundNotify = 10;
|
||||
Constant gestalt_SoundVolume = 9;
|
||||
Constant gestalt_Timer = 5;
|
||||
Constant gestalt_Unicode = 15;
|
||||
Constant gestalt_UnicodeNorm = 16;
|
||||
Constant gestalt_Version = 0;
|
||||
Constant imagealign_InlineCenter = 3;
|
||||
Constant imagealign_InlineDown = 2;
|
||||
Constant imagealign_MarginLeft = 4;
|
||||
Constant imagealign_MarginRight = 5;
|
||||
Constant imagealign_InlineUp = 1;
|
||||
Constant keycode_Delete = 4294967289;
|
||||
Constant keycode_Down = 4294967291;
|
||||
Constant keycode_End = 4294967283;
|
||||
Constant keycode_Escape = 4294967288;
|
||||
Constant keycode_Func1 = 4294967279;
|
||||
Constant keycode_Func10 = 4294967270;
|
||||
Constant keycode_Func11 = 4294967269;
|
||||
Constant keycode_Func12 = 4294967268;
|
||||
Constant keycode_Func2 = 4294967278;
|
||||
Constant keycode_Func3 = 4294967277;
|
||||
Constant keycode_Func4 = 4294967276;
|
||||
Constant keycode_Func5 = 4294967275;
|
||||
Constant keycode_Func6 = 4294967274;
|
||||
Constant keycode_Func7 = 4294967273;
|
||||
Constant keycode_Func8 = 4294967272;
|
||||
Constant keycode_Func9 = 4294967271;
|
||||
Constant keycode_Home = 4294967284;
|
||||
Constant keycode_Left = 4294967294;
|
||||
Constant keycode_MAXVAL = 28;
|
||||
Constant keycode_PageDown = 4294967285;
|
||||
Constant keycode_PageUp = 4294967286;
|
||||
Constant keycode_Return = 4294967290;
|
||||
Constant keycode_Right = 4294967293;
|
||||
Constant keycode_Tab = 4294967287;
|
||||
Constant keycode_Unknown = 4294967295;
|
||||
Constant keycode_Up = 4294967292;
|
||||
Constant seekmode_Current = 1;
|
||||
Constant seekmode_End = 2;
|
||||
Constant seekmode_Start = 0;
|
||||
Constant style_Alert = 5;
|
||||
Constant style_BlockQuote = 7;
|
||||
Constant style_Emphasized = 1;
|
||||
Constant style_Header = 3;
|
||||
Constant style_Input = 8;
|
||||
Constant style_NUMSTYLES = 11;
|
||||
Constant style_Normal = 0;
|
||||
Constant style_Note = 6;
|
||||
Constant style_Preformatted = 2;
|
||||
Constant style_Subheader = 4;
|
||||
Constant style_User1 = 9;
|
||||
Constant style_User2 = 10;
|
||||
Constant stylehint_BackColor = 8;
|
||||
Constant stylehint_Indentation = 0;
|
||||
Constant stylehint_Justification = 2;
|
||||
Constant stylehint_NUMHINTS = 10;
|
||||
Constant stylehint_Oblique = 5;
|
||||
Constant stylehint_ParaIndentation = 1;
|
||||
Constant stylehint_Proportional = 6;
|
||||
Constant stylehint_ReverseColor = 9;
|
||||
Constant stylehint_Size = 3;
|
||||
Constant stylehint_TextColor = 7;
|
||||
Constant stylehint_Weight = 4;
|
||||
Constant stylehint_just_Centered = 2;
|
||||
Constant stylehint_just_LeftFlush = 0;
|
||||
Constant stylehint_just_LeftRight = 1;
|
||||
Constant stylehint_just_RightFlush = 3;
|
||||
Constant winmethod_Above = 2;
|
||||
Constant winmethod_Below = 3;
|
||||
Constant winmethod_Border = 0;
|
||||
Constant winmethod_BorderMask = 256;
|
||||
Constant winmethod_DirMask = 15;
|
||||
Constant winmethod_DivisionMask = 240;
|
||||
Constant winmethod_Fixed = 16;
|
||||
Constant winmethod_Left = 0;
|
||||
Constant winmethod_NoBorder = 256;
|
||||
Constant winmethod_Proportional = 32;
|
||||
Constant winmethod_Right = 1;
|
||||
Constant wintype_AllTypes = 0;
|
||||
Constant wintype_Blank = 2;
|
||||
Constant wintype_Graphics = 5;
|
||||
Constant wintype_Pair = 1;
|
||||
Constant wintype_TextBuffer = 3;
|
||||
Constant wintype_TextGrid = 4;
|
||||
|
||||
[ glk_exit _vararg_count;
|
||||
! glk_exit()
|
||||
@glk 1 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_tick _vararg_count;
|
||||
! glk_tick()
|
||||
@glk 3 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_gestalt _vararg_count ret;
|
||||
! glk_gestalt(uint, uint) => uint
|
||||
@glk 4 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_gestalt_ext _vararg_count ret;
|
||||
! glk_gestalt_ext(uint, uint, uintarray, arraylen) => uint
|
||||
@glk 5 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_iterate _vararg_count ret;
|
||||
! glk_window_iterate(window, &uint) => window
|
||||
@glk 32 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_get_rock _vararg_count ret;
|
||||
! glk_window_get_rock(window) => uint
|
||||
@glk 33 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_get_root _vararg_count ret;
|
||||
! glk_window_get_root() => window
|
||||
@glk 34 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_open _vararg_count ret;
|
||||
! glk_window_open(window, uint, uint, uint, uint) => window
|
||||
@glk 35 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_close _vararg_count;
|
||||
! glk_window_close(window, &{uint, uint})
|
||||
@glk 36 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_get_size _vararg_count;
|
||||
! glk_window_get_size(window, &uint, &uint)
|
||||
@glk 37 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_set_arrangement _vararg_count;
|
||||
! glk_window_set_arrangement(window, uint, uint, window)
|
||||
@glk 38 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_get_arrangement _vararg_count;
|
||||
! glk_window_get_arrangement(window, &uint, &uint, &window)
|
||||
@glk 39 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_get_type _vararg_count ret;
|
||||
! glk_window_get_type(window) => uint
|
||||
@glk 40 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_get_parent _vararg_count ret;
|
||||
! glk_window_get_parent(window) => window
|
||||
@glk 41 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_clear _vararg_count;
|
||||
! glk_window_clear(window)
|
||||
@glk 42 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_move_cursor _vararg_count;
|
||||
! glk_window_move_cursor(window, uint, uint)
|
||||
@glk 43 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_get_stream _vararg_count ret;
|
||||
! glk_window_get_stream(window) => stream
|
||||
@glk 44 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_set_echo_stream _vararg_count;
|
||||
! glk_window_set_echo_stream(window, stream)
|
||||
@glk 45 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_get_echo_stream _vararg_count ret;
|
||||
! glk_window_get_echo_stream(window) => stream
|
||||
@glk 46 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_set_window _vararg_count;
|
||||
! glk_set_window(window)
|
||||
@glk 47 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_get_sibling _vararg_count ret;
|
||||
! glk_window_get_sibling(window) => window
|
||||
@glk 48 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_iterate _vararg_count ret;
|
||||
! glk_stream_iterate(stream, &uint) => stream
|
||||
@glk 64 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_get_rock _vararg_count ret;
|
||||
! glk_stream_get_rock(stream) => uint
|
||||
@glk 65 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_open_file _vararg_count ret;
|
||||
! glk_stream_open_file(fileref, uint, uint) => stream
|
||||
@glk 66 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_open_memory _vararg_count ret;
|
||||
! glk_stream_open_memory(nativechararray, arraylen, uint, uint) => stream
|
||||
@glk 67 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_close _vararg_count;
|
||||
! glk_stream_close(stream, &{uint, uint})
|
||||
@glk 68 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_stream_set_position _vararg_count;
|
||||
! glk_stream_set_position(stream, int, uint)
|
||||
@glk 69 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_stream_get_position _vararg_count ret;
|
||||
! glk_stream_get_position(stream) => uint
|
||||
@glk 70 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_set_current _vararg_count;
|
||||
! glk_stream_set_current(stream)
|
||||
@glk 71 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_stream_get_current _vararg_count ret;
|
||||
! glk_stream_get_current() => stream
|
||||
@glk 72 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_open_resource _vararg_count ret;
|
||||
! glk_stream_open_resource(uint, uint) => stream
|
||||
@glk 73 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_create_temp _vararg_count ret;
|
||||
! glk_fileref_create_temp(uint, uint) => fileref
|
||||
@glk 96 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_create_by_name _vararg_count ret;
|
||||
! glk_fileref_create_by_name(uint, string, uint) => fileref
|
||||
@glk 97 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_create_by_prompt _vararg_count ret;
|
||||
! glk_fileref_create_by_prompt(uint, uint, uint) => fileref
|
||||
@glk 98 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_destroy _vararg_count;
|
||||
! glk_fileref_destroy(fileref)
|
||||
@glk 99 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_fileref_iterate _vararg_count ret;
|
||||
! glk_fileref_iterate(fileref, &uint) => fileref
|
||||
@glk 100 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_get_rock _vararg_count ret;
|
||||
! glk_fileref_get_rock(fileref) => uint
|
||||
@glk 101 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_delete_file _vararg_count;
|
||||
! glk_fileref_delete_file(fileref)
|
||||
@glk 102 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_fileref_does_file_exist _vararg_count ret;
|
||||
! glk_fileref_does_file_exist(fileref) => uint
|
||||
@glk 103 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_fileref_create_from_fileref _vararg_count ret;
|
||||
! glk_fileref_create_from_fileref(uint, fileref, uint) => fileref
|
||||
@glk 104 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_put_char _vararg_count;
|
||||
! glk_put_char(uchar)
|
||||
@glk 128 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_char_stream _vararg_count;
|
||||
! glk_put_char_stream(stream, uchar)
|
||||
@glk 129 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_string _vararg_count;
|
||||
! glk_put_string(string)
|
||||
@glk 130 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_string_stream _vararg_count;
|
||||
! glk_put_string_stream(stream, string)
|
||||
@glk 131 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_buffer _vararg_count;
|
||||
! glk_put_buffer(nativechararray, arraylen)
|
||||
@glk 132 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_buffer_stream _vararg_count;
|
||||
! glk_put_buffer_stream(stream, nativechararray, arraylen)
|
||||
@glk 133 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_set_style _vararg_count;
|
||||
! glk_set_style(uint)
|
||||
@glk 134 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_set_style_stream _vararg_count;
|
||||
! glk_set_style_stream(stream, uint)
|
||||
@glk 135 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_get_char_stream _vararg_count ret;
|
||||
! glk_get_char_stream(stream) => int
|
||||
@glk 144 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_get_line_stream _vararg_count ret;
|
||||
! glk_get_line_stream(stream, nativechararray, arraylen) => uint
|
||||
@glk 145 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_get_buffer_stream _vararg_count ret;
|
||||
! glk_get_buffer_stream(stream, nativechararray, arraylen) => uint
|
||||
@glk 146 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_char_to_lower _vararg_count ret;
|
||||
! glk_char_to_lower(uchar) => uchar
|
||||
@glk 160 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_char_to_upper _vararg_count ret;
|
||||
! glk_char_to_upper(uchar) => uchar
|
||||
@glk 161 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stylehint_set _vararg_count;
|
||||
! glk_stylehint_set(uint, uint, uint, int)
|
||||
@glk 176 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_stylehint_clear _vararg_count;
|
||||
! glk_stylehint_clear(uint, uint, uint)
|
||||
@glk 177 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_style_distinguish _vararg_count ret;
|
||||
! glk_style_distinguish(window, uint, uint) => uint
|
||||
@glk 178 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_style_measure _vararg_count ret;
|
||||
! glk_style_measure(window, uint, uint, &uint) => uint
|
||||
@glk 179 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_select _vararg_count;
|
||||
! glk_select(&{uint, window, uint, uint})
|
||||
@glk 192 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_select_poll _vararg_count;
|
||||
! glk_select_poll(&{uint, window, uint, uint})
|
||||
@glk 193 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_request_line_event _vararg_count;
|
||||
! glk_request_line_event(window, nativechararray, arraylen, uint)
|
||||
@glk 208 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_cancel_line_event _vararg_count;
|
||||
! glk_cancel_line_event(window, &{uint, window, uint, uint})
|
||||
@glk 209 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_request_char_event _vararg_count;
|
||||
! glk_request_char_event(window)
|
||||
@glk 210 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_cancel_char_event _vararg_count;
|
||||
! glk_cancel_char_event(window)
|
||||
@glk 211 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_request_mouse_event _vararg_count;
|
||||
! glk_request_mouse_event(window)
|
||||
@glk 212 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_cancel_mouse_event _vararg_count;
|
||||
! glk_cancel_mouse_event(window)
|
||||
@glk 213 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_request_timer_events _vararg_count;
|
||||
! glk_request_timer_events(uint)
|
||||
@glk 214 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_image_get_info _vararg_count ret;
|
||||
! glk_image_get_info(uint, &uint, &uint) => uint
|
||||
@glk 224 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_image_draw _vararg_count ret;
|
||||
! glk_image_draw(window, uint, int, int) => uint
|
||||
@glk 225 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_image_draw_scaled _vararg_count ret;
|
||||
! glk_image_draw_scaled(window, uint, int, int, uint, uint) => uint
|
||||
@glk 226 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_window_flow_break _vararg_count;
|
||||
! glk_window_flow_break(window)
|
||||
@glk 232 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_erase_rect _vararg_count;
|
||||
! glk_window_erase_rect(window, int, int, uint, uint)
|
||||
@glk 233 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_fill_rect _vararg_count;
|
||||
! glk_window_fill_rect(window, uint, int, int, uint, uint)
|
||||
@glk 234 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_window_set_background_color _vararg_count;
|
||||
! glk_window_set_background_color(window, uint)
|
||||
@glk 235 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_schannel_iterate _vararg_count ret;
|
||||
! glk_schannel_iterate(schannel, &uint) => schannel
|
||||
@glk 240 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_get_rock _vararg_count ret;
|
||||
! glk_schannel_get_rock(schannel) => uint
|
||||
@glk 241 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_create _vararg_count ret;
|
||||
! glk_schannel_create(uint) => schannel
|
||||
@glk 242 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_destroy _vararg_count;
|
||||
! glk_schannel_destroy(schannel)
|
||||
@glk 243 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_schannel_create_ext _vararg_count ret;
|
||||
! glk_schannel_create_ext(uint, uint) => schannel
|
||||
@glk 244 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_play_multi _vararg_count ret;
|
||||
! glk_schannel_play_multi(schannelarray, arraylen, uintarray, arraylen, uint) => uint
|
||||
@glk 247 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_play _vararg_count ret;
|
||||
! glk_schannel_play(schannel, uint) => uint
|
||||
@glk 248 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_play_ext _vararg_count ret;
|
||||
! glk_schannel_play_ext(schannel, uint, uint, uint) => uint
|
||||
@glk 249 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_schannel_stop _vararg_count;
|
||||
! glk_schannel_stop(schannel)
|
||||
@glk 250 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_schannel_set_volume _vararg_count;
|
||||
! glk_schannel_set_volume(schannel, uint)
|
||||
@glk 251 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_sound_load_hint _vararg_count;
|
||||
! glk_sound_load_hint(uint, uint)
|
||||
@glk 252 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_schannel_set_volume_ext _vararg_count;
|
||||
! glk_schannel_set_volume_ext(schannel, uint, uint, uint)
|
||||
@glk 253 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_schannel_pause _vararg_count;
|
||||
! glk_schannel_pause(schannel)
|
||||
@glk 254 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_schannel_unpause _vararg_count;
|
||||
! glk_schannel_unpause(schannel)
|
||||
@glk 255 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_set_hyperlink _vararg_count;
|
||||
! glk_set_hyperlink(uint)
|
||||
@glk 256 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_set_hyperlink_stream _vararg_count;
|
||||
! glk_set_hyperlink_stream(stream, uint)
|
||||
@glk 257 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_request_hyperlink_event _vararg_count;
|
||||
! glk_request_hyperlink_event(window)
|
||||
@glk 258 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_cancel_hyperlink_event _vararg_count;
|
||||
! glk_cancel_hyperlink_event(window)
|
||||
@glk 259 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_buffer_to_lower_case_uni _vararg_count ret;
|
||||
! glk_buffer_to_lower_case_uni(uintarray, arraylen, uint) => uint
|
||||
@glk 288 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_buffer_to_upper_case_uni _vararg_count ret;
|
||||
! glk_buffer_to_upper_case_uni(uintarray, arraylen, uint) => uint
|
||||
@glk 289 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_buffer_to_title_case_uni _vararg_count ret;
|
||||
! glk_buffer_to_title_case_uni(uintarray, arraylen, uint, uint) => uint
|
||||
@glk 290 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_buffer_canon_decompose_uni _vararg_count ret;
|
||||
! glk_buffer_canon_decompose_uni(uintarray, arraylen, uint) => uint
|
||||
@glk 291 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_buffer_canon_normalize_uni _vararg_count ret;
|
||||
! glk_buffer_canon_normalize_uni(uintarray, arraylen, uint) => uint
|
||||
@glk 292 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_put_char_uni _vararg_count;
|
||||
! glk_put_char_uni(uint)
|
||||
@glk 296 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_string_uni _vararg_count;
|
||||
! glk_put_string_uni(unicode)
|
||||
@glk 297 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_buffer_uni _vararg_count;
|
||||
! glk_put_buffer_uni(uintarray, arraylen)
|
||||
@glk 298 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_char_stream_uni _vararg_count;
|
||||
! glk_put_char_stream_uni(stream, uint)
|
||||
@glk 299 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_string_stream_uni _vararg_count;
|
||||
! glk_put_string_stream_uni(stream, unicode)
|
||||
@glk 300 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_put_buffer_stream_uni _vararg_count;
|
||||
! glk_put_buffer_stream_uni(stream, uintarray, arraylen)
|
||||
@glk 301 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_get_char_stream_uni _vararg_count ret;
|
||||
! glk_get_char_stream_uni(stream) => int
|
||||
@glk 304 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_get_buffer_stream_uni _vararg_count ret;
|
||||
! glk_get_buffer_stream_uni(stream, uintarray, arraylen) => uint
|
||||
@glk 305 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_get_line_stream_uni _vararg_count ret;
|
||||
! glk_get_line_stream_uni(stream, uintarray, arraylen) => uint
|
||||
@glk 306 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_open_file_uni _vararg_count ret;
|
||||
! glk_stream_open_file_uni(fileref, uint, uint) => stream
|
||||
@glk 312 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_open_memory_uni _vararg_count ret;
|
||||
! glk_stream_open_memory_uni(uintarray, arraylen, uint, uint) => stream
|
||||
@glk 313 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_stream_open_resource_uni _vararg_count ret;
|
||||
! glk_stream_open_resource_uni(uint, uint) => stream
|
||||
@glk 314 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_request_char_event_uni _vararg_count;
|
||||
! glk_request_char_event_uni(window)
|
||||
@glk 320 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_request_line_event_uni _vararg_count;
|
||||
! glk_request_line_event_uni(window, uintarray, arraylen, uint)
|
||||
@glk 321 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_set_echo_line_event _vararg_count;
|
||||
! glk_set_echo_line_event(window, uint)
|
||||
@glk 336 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_set_terminators_line_event _vararg_count;
|
||||
! glk_set_terminators_line_event(window, uintarray, arraylen)
|
||||
@glk 337 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_current_time _vararg_count;
|
||||
! glk_current_time(&{int, uint, int})
|
||||
@glk 352 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_current_simple_time _vararg_count ret;
|
||||
! glk_current_simple_time(uint) => int
|
||||
@glk 353 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_time_to_date_utc _vararg_count;
|
||||
! glk_time_to_date_utc(&{int, uint, int}, &{int, int, int, int, int, int, int, int})
|
||||
@glk 360 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_time_to_date_local _vararg_count;
|
||||
! glk_time_to_date_local(&{int, uint, int}, &{int, int, int, int, int, int, int, int})
|
||||
@glk 361 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_simple_time_to_date_utc _vararg_count;
|
||||
! glk_simple_time_to_date_utc(int, uint, &{int, int, int, int, int, int, int, int})
|
||||
@glk 362 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_simple_time_to_date_local _vararg_count;
|
||||
! glk_simple_time_to_date_local(int, uint, &{int, int, int, int, int, int, int, int})
|
||||
@glk 363 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_date_to_time_utc _vararg_count;
|
||||
! glk_date_to_time_utc(&{int, int, int, int, int, int, int, int}, &{int, uint, int})
|
||||
@glk 364 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_date_to_time_local _vararg_count;
|
||||
! glk_date_to_time_local(&{int, int, int, int, int, int, int, int}, &{int, uint, int})
|
||||
@glk 365 _vararg_count 0;
|
||||
return 0;
|
||||
];
|
||||
|
||||
[ glk_date_to_simple_time_utc _vararg_count ret;
|
||||
! glk_date_to_simple_time_utc(&{int, int, int, int, int, int, int, int}, uint) => int
|
||||
@glk 366 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
[ glk_date_to_simple_time_local _vararg_count ret;
|
||||
! glk_date_to_simple_time_local(&{int, int, int, int, int, int, int, int}, uint) => int
|
||||
@glk 367 _vararg_count ret;
|
||||
return ret;
|
||||
];
|
||||
|
||||
#endif; ! TARGET_GLULX
|
||||
#endif; ! INFGLK_H
|
1085
library-glulx/infix.h
Normal file
1085
library-glulx/infix.h
Normal file
File diff suppressed because it is too large
Load diff
136
library-glulx/linklpa.h
Normal file
136
library-glulx/linklpa.h
Normal file
|
@ -0,0 +1,136 @@
|
|||
! ==============================================================================
|
||||
! LINKLPA: Link declarations of common properties and attributes.
|
||||
!
|
||||
! Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
|
||||
!
|
||||
! Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
|
||||
!
|
||||
! This file is automatically Included in your game file by "Parser".
|
||||
! ==============================================================================
|
||||
|
||||
System_file;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! Some VM-specific constants.
|
||||
! (WORDSIZE and TARGET_XXX are defined by the compiler.)
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
#Ifdef TARGET_ZCODE;
|
||||
Constant NULL = $ffff;
|
||||
Constant WORD_HIGHBIT = $8000;
|
||||
#Ifnot; ! TARGET_GLULX
|
||||
Constant NULL = $ffffffff;
|
||||
Constant WORD_HIGHBIT = $80000000;
|
||||
#Endif; ! TARGET_
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
! The common attributes and properties.
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Attribute animate;
|
||||
#Ifdef USE_MODULES;
|
||||
#Iffalse (animate == 0);
|
||||
Message error "Please move your Attribute declarations after the Include ~Parser~ line:
|
||||
otherwise it will be impossible to USE_MODULES";
|
||||
#Endif;
|
||||
#Endif;
|
||||
|
||||
Attribute absent;
|
||||
Attribute clothing;
|
||||
Attribute concealed;
|
||||
Attribute container;
|
||||
Attribute door;
|
||||
Attribute edible;
|
||||
Attribute enterable;
|
||||
Attribute general;
|
||||
Attribute light;
|
||||
Attribute lockable;
|
||||
Attribute locked;
|
||||
Attribute moved;
|
||||
Attribute on;
|
||||
Attribute open;
|
||||
Attribute openable;
|
||||
Attribute proper;
|
||||
Attribute scenery;
|
||||
Attribute scored;
|
||||
Attribute static;
|
||||
Attribute supporter;
|
||||
Attribute switchable;
|
||||
Attribute talkable;
|
||||
Attribute transparent;
|
||||
Attribute visited;
|
||||
Attribute workflag;
|
||||
Attribute worn;
|
||||
|
||||
Attribute male;
|
||||
Attribute female;
|
||||
Attribute neuter;
|
||||
Attribute pluralname;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Property additive before NULL;
|
||||
Property additive after NULL;
|
||||
Property additive life NULL;
|
||||
|
||||
Property n_to;
|
||||
Property s_to;
|
||||
Property e_to;
|
||||
Property w_to;
|
||||
Property ne_to;
|
||||
Property nw_to;
|
||||
Property se_to;
|
||||
Property sw_to;
|
||||
Property u_to;
|
||||
Property d_to;
|
||||
Property in_to;
|
||||
Property out_to;
|
||||
|
||||
#Ifdef USE_MODULES;
|
||||
#Iffalse (7 >= n_to);
|
||||
Message error "Please move your Property declarations after the Include ~Parser~ line:
|
||||
otherwise it will be impossible to USE_MODULES";
|
||||
#Endif;
|
||||
#Endif;
|
||||
|
||||
Property door_to;
|
||||
Property with_key;
|
||||
Property door_dir;
|
||||
Property invent;
|
||||
Property plural;
|
||||
Property add_to_scope;
|
||||
Property list_together;
|
||||
Property react_before;
|
||||
Property react_after;
|
||||
Property grammar;
|
||||
Property additive orders;
|
||||
|
||||
Property initial;
|
||||
Property when_open;
|
||||
Property when_closed;
|
||||
Property when_on;
|
||||
Property when_off;
|
||||
Property description;
|
||||
Property additive describe NULL;
|
||||
Property article "a";
|
||||
|
||||
Property cant_go;
|
||||
|
||||
Property found_in; ! For fiddly reasons this can't alias
|
||||
|
||||
Property time_left;
|
||||
Property number;
|
||||
Property additive time_out NULL;
|
||||
Property daemon;
|
||||
Property additive each_turn NULL;
|
||||
|
||||
Property capacity 100;
|
||||
|
||||
Property short_name 0;
|
||||
Property short_name_indef 0;
|
||||
Property parse_name 0;
|
||||
|
||||
Property articles;
|
||||
Property inside_description;
|
||||
|
||||
! ==============================================================================
|
165
library-glulx/linklv.h
Normal file
165
library-glulx/linklv.h
Normal file
|
@ -0,0 +1,165 @@
|
|||
! ==============================================================================
|
||||
! LINKLV: Link declarations of library variables.
|
||||
!
|
||||
! Supplied for use with Inform 6 -- Release 6/11 -- Serial number 040227
|
||||
!
|
||||
! Copyright Graham Nelson 1993-2004 but freely usable (see manuals)
|
||||
!
|
||||
! This file is automatically Included in your game file by "verblibm" only if
|
||||
! you supply the -U compiler switch to use pre-compiled Modules.
|
||||
! ==============================================================================
|
||||
|
||||
System_file;
|
||||
|
||||
! ------------------------------------------------------------------------------
|
||||
|
||||
Import global location;
|
||||
Import global sline1;
|
||||
Import global sline2;
|
||||
|
||||
Import global top_object;
|
||||
Import global standard_interpreter;
|
||||
Import global undo_flag;
|
||||
Import global transcript_mode;
|
||||
|
||||
Import global xcommsdir;
|
||||
|
||||
Import global turns;
|
||||
Import global the_time;
|
||||
Import global time_rate;
|
||||
Import global time_step;
|
||||
Import global active_timers;
|
||||
|
||||
Import global score;
|
||||
Import global last_score;
|
||||
Import global notify_mode;
|
||||
Import global places_score;
|
||||
Import global things_score;
|
||||
|
||||
Import global player;
|
||||
Import global deadflag;
|
||||
|
||||
Import global lightflag;
|
||||
Import global real_location;
|
||||
Import global visibility_ceiling;
|
||||
Import global lookmode;
|
||||
Import global print_player_flag;
|
||||
Import global lastdesc;
|
||||
|
||||
Import global c_style;
|
||||
Import global lt_value;
|
||||
Import global listing_together;
|
||||
Import global listing_size;
|
||||
Import global wlf_indent;
|
||||
Import global inventory_stage;
|
||||
Import global inventory_style;
|
||||
Import global pretty_flag;
|
||||
Import global menu_nesting;
|
||||
Import global menu_item;
|
||||
Import global item_width;
|
||||
Import global item_name;
|
||||
Import global lm_n;
|
||||
Import global lm_o;
|
||||
|
||||
#Ifdef DEBUG;
|
||||
Import global debug_flag;
|
||||
Import global x_scope_count;
|
||||
#Endif; ! DEBUG
|
||||
|
||||
Import global action;
|
||||
Import global inp1;
|
||||
Import global inp2;
|
||||
Import global noun;
|
||||
Import global second;
|
||||
Import global keep_silent;
|
||||
Import global reason_code;
|
||||
Import global receive_action;
|
||||
|
||||
Import global parser_trace;
|
||||
Import global parser_action;
|
||||
Import global parser_one;
|
||||
Import global parser_two;
|
||||
Import global parser_inflection;
|
||||
Import global actor;
|
||||
Import global actors_location;
|
||||
Import global meta;
|
||||
Import global multiflag;
|
||||
Import global toomany_flag;
|
||||
|
||||
Import global special_word;
|
||||
Import global special_number;
|
||||
Import global parsed_number;
|
||||
Import global consult_from;
|
||||
Import global consult_words;
|
||||
Import global notheld_mode;
|
||||
Import global onotheld_mode;
|
||||
Import global not_holding;
|
||||
Import global etype;
|
||||
Import global best_etype;
|
||||
Import global nextbest_etype;
|
||||
Import global pcount;
|
||||
Import global pcount2;
|
||||
Import global parameters;
|
||||
Import global nsns;
|
||||
Import global special_number1;
|
||||
Import global special_number2;
|
||||
Import global params_wanted;
|
||||
Import global inferfrom;
|
||||
Import global inferword;
|
||||
Import global dont_infer;
|
||||
Import global action_to_be;
|
||||
Import global action_reversed;
|
||||
Import global advance_warning;
|
||||
Import global found_ttype;
|
||||
Import global found_tdata;
|
||||
Import global token_filter;
|
||||
Import global lookahead;
|
||||
Import global multi_mode;
|
||||
Import global multi_wanted;
|
||||
Import global multi_had;
|
||||
Import global multi_context;
|
||||
Import global indef_mode;
|
||||
Import global indef_type;
|
||||
Import global indef_wanted;
|
||||
Import global indef_guess_p;
|
||||
Import global indef_owner;
|
||||
Import global indef_cases;
|
||||
Import global indef_possambig;
|
||||
Import global indef_nspec_at;
|
||||
Import global allow_plurals;
|
||||
Import global take_all_rule;
|
||||
Import global pronoun_word;
|
||||
Import global pronoun_obj;
|
||||
Import global scope_reason;
|
||||
Import global scope_token;
|
||||
Import global scope_error;
|
||||
Import global scope_stage;
|
||||
Import global ats_flag;
|
||||
Import global ats_hls;
|
||||
Import global placed_in_flag;
|
||||
Import global number_matched;
|
||||
Import global number_of_classes;
|
||||
Import global match_length;
|
||||
Import global match_from;
|
||||
Import global bestguess_score;
|
||||
Import global wn;
|
||||
Import global num_words;
|
||||
Import global verb_word;
|
||||
Import global verb_wordnum;
|
||||
Import global usual_grammar_after;
|
||||
Import global oops_from;
|
||||
Import global saved_oops;
|
||||
Import global held_back_mode;
|
||||
Import global hb_wn;
|
||||
Import global short_name_case;
|
||||
|
||||
#Ifdef EnglishNaturalLanguage;
|
||||
Import global itobj;
|
||||
Import global himobj;
|
||||
Import global herobj;
|
||||
Import global old_itobj;
|
||||
Import global old_himobj;
|
||||
Import global old_herobj;
|
||||
#Endif; ! EnglishNaturalLanguage
|
||||
|
||||
! ==============================================================================
|
6680
library-glulx/parserm.h
Normal file
6680
library-glulx/parserm.h
Normal file
File diff suppressed because it is too large
Load diff
2610
library-glulx/verblibm.h
Normal file
2610
library-glulx/verblibm.h
Normal file
File diff suppressed because it is too large
Load diff
30
objects.h
Normal file
30
objects.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
Object gallery "Выставочный зал"
|
||||
with description
|
||||
"Вы стоите в маленьком зале.",
|
||||
has light;
|
||||
|
||||
Object photo "маленьк/ое фото/" gallery
|
||||
with name 'маленьк' 'фото',
|
||||
|
||||
describe [;
|
||||
"Перед вами стоит маленькое фото.";
|
||||
],
|
||||
|
||||
description [;
|
||||
print "На маленькой фотографии изображён мужчина с клавиатурой.
|
||||
Он сосредоточенно что-то печатает.";
|
||||
],
|
||||
has static neuter;
|
||||
|
||||
Object teapot "глинян/ый чайник/" gallery
|
||||
with name 'глин' 'чай',
|
||||
|
||||
describe [;
|
||||
"Слева от фото выставлен невысокий глиняный чайник.";
|
||||
],
|
||||
|
||||
description [;
|
||||
print "По легендам, древние писатели пили много чая.
|
||||
Они верили, что это поможет им понять Информ.";
|
||||
],
|
||||
has static male;
|
36
source.inf
Normal file
36
source.inf
Normal file
|
@ -0,0 +1,36 @@
|
|||
Constant MANUAL_PRONOUNS;
|
||||
|
||||
Constant Story "Галерея";
|
||||
Constant Headline "^Тест Информа.^";
|
||||
|
||||
Include "Parser";
|
||||
Include "VerbLib";
|
||||
Include "./objects";
|
||||
|
||||
Global the_word_was = "";
|
||||
|
||||
[ Initialise;
|
||||
location = gallery;
|
||||
"^^Ни один уважающий себя фотограф не может пройти мимо выставки
|
||||
«Парсер 2019». По крайней мере, в этом убеждал вас организатор.";
|
||||
];
|
||||
|
||||
[ UnknownVerb word i;
|
||||
objectloop (i in location) {
|
||||
if (
|
||||
!word == (i.&name) --> 0 &&
|
||||
i has scenery
|
||||
) {
|
||||
the_word_was = i;
|
||||
return 'осм';
|
||||
}
|
||||
rfalse;
|
||||
}
|
||||
rfalse;
|
||||
];
|
||||
|
||||
[ DeathMessage; print "Вы проиграли"; ];
|
||||
|
||||
! ============================================================================ !
|
||||
|
||||
Include "RussiaG";
|
Loading…
Reference in a new issue