1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/standard_rules/S-lt.html

338 lines
17 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>S/gt</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of 'S/lt' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">standard_rules Template Library</a></li><li><b>Language Template</b></li></ul><p class="purpose">The fundamental definitions needed by the parser and the verb library in order to specify the language of play -- that is, the language used for communications between the story file and the player.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Vocabulary</a></li><li><a href="#SP2">&#167;2. Pronouns</a></li><li><a href="#SP3">&#167;3. Descriptors</a></li><li><a href="#SP4">&#167;4. Numbers</a></li><li><a href="#SP5">&#167;5. Time</a></li><li><a href="#SP6">&#167;6. Directions</a></li><li><a href="#SP7">&#167;7. Translation</a></li><li><a href="#SP8">&#167;8. Articles</a></li><li><a href="#SP9">&#167;9. Commands</a></li><li><a href="#SP10">&#167;10. Stubs</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Vocabulary. </b></p>
<pre class="display">
<span class="plain">Constant AGAIN1__WD = 'again';</span>
<span class="plain">Constant AGAIN2__WD = 'g//';</span>
<span class="plain">Constant AGAIN3__WD = 'again';</span>
<span class="plain">Constant OOPS1__WD = 'oops';</span>
<span class="plain">Constant OOPS2__WD = 'o//';</span>
<span class="plain">Constant OOPS3__WD = 'oops';</span>
<span class="plain">Constant UNDO1__WD = 'undo';</span>
<span class="plain">Constant UNDO2__WD = 'undo';</span>
<span class="plain">Constant UNDO3__WD = 'undo';</span>
<span class="plain">Constant ALL1__WD = 'all';</span>
<span class="plain">Constant ALL2__WD = 'each';</span>
<span class="plain">Constant ALL3__WD = 'every';</span>
<span class="plain">Constant ALL4__WD = 'everything';</span>
<span class="plain">Constant ALL5__WD = 'both';</span>
<span class="plain">Constant AND1__WD = 'and';</span>
<span class="plain">Constant AND2__WD = 'and';</span>
<span class="plain">Constant AND3__WD = 'and';</span>
<span class="plain">Constant BUT1__WD = 'but';</span>
<span class="plain">Constant BUT2__WD = 'except';</span>
<span class="plain">Constant BUT3__WD = 'but';</span>
<span class="plain">Constant ME1__WD = 'me';</span>
<span class="plain">Constant ME2__WD = 'myself';</span>
<span class="plain">Constant ME3__WD = 'self';</span>
<span class="plain">Constant OF1__WD = 'of';</span>
<span class="plain">Constant OF2__WD = 'of';</span>
<span class="plain">Constant OF3__WD = 'of';</span>
<span class="plain">Constant OF4__WD = 'of';</span>
<span class="plain">Constant OTHER1__WD = 'another';</span>
<span class="plain">Constant OTHER2__WD = 'other';</span>
<span class="plain">Constant OTHER3__WD = 'other';</span>
<span class="plain">Constant THEN1__WD = 'then';</span>
<span class="plain">Constant THEN2__WD = 'then';</span>
<span class="plain">Constant THEN3__WD = 'then';</span>
<span class="plain">Constant NO1__WD = 'n//';</span>
<span class="plain">Constant NO2__WD = 'no';</span>
<span class="plain">Constant NO3__WD = 'no';</span>
<span class="plain">Constant YES1__WD = 'y//';</span>
<span class="plain">Constant YES2__WD = 'yes';</span>
<span class="plain">Constant YES3__WD = 'yes';</span>
<span class="plain">Constant AMUSING__WD = 'amusing';</span>
<span class="plain">Constant FULLSCORE1__WD = 'fullscore';</span>
<span class="plain">Constant FULLSCORE2__WD = 'full';</span>
<span class="plain">Constant QUIT1__WD = 'q//';</span>
<span class="plain">Constant QUIT2__WD = 'quit';</span>
<span class="plain">Constant RESTART__WD = 'restart';</span>
<span class="plain">Constant RESTORE__WD = 'restore';</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Pronouns. </b></p>
<pre class="display">
<span class="plain">Array LanguagePronouns table</span>
<span class="plain">! word possible GNAs connected</span>
<span class="plain">! to follow: to:</span>
<span class="plain">! a i</span>
<span class="plain">! s p s p</span>
<span class="plain">! mfnmfnmfnmfn</span>
<span class="plain">'it' $$001000111000 NULL</span>
<span class="plain">'him' $$100000000000 NULL</span>
<span class="plain">'her' $$010000000000 NULL</span>
<span class="plain">'them' $$000111000111 NULL;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Descriptors. </b></p>
<pre class="display">
<span class="plain">Array LanguageDescriptors table</span>
<span class="plain">! word possible GNAs descriptor connected</span>
<span class="plain">! to follow: type: to:</span>
<span class="plain">! a i</span>
<span class="plain">! s p s p</span>
<span class="plain">! mfnmfnmfnmfn</span>
<span class="plain">'my' $$111111111111 POSSESS_PK 0</span>
<span class="plain">'this' $$111111111111 POSSESS_PK 0</span>
<span class="plain">'these' $$000111000111 POSSESS_PK 0</span>
<span class="plain">'that' $$111111111111 POSSESS_PK 1</span>
<span class="plain">'those' $$000111000111 POSSESS_PK 1</span>
<span class="plain">'his' $$111111111111 POSSESS_PK 'him'</span>
<span class="plain">'her' $$111111111111 POSSESS_PK 'her'</span>
<span class="plain">'their' $$111111111111 POSSESS_PK 'them'</span>
<span class="plain">'its' $$111111111111 POSSESS_PK 'it'</span>
<span class="plain">'the' $$111111111111 DEFART_PK NULL</span>
<span class="plain">'a//' $$111000111000 INDEFART_PK NULL</span>
<span class="plain">'an' $$111000111000 INDEFART_PK NULL</span>
<span class="plain">'some' $$000111000111 INDEFART_PK NULL</span>
<span class="plain">'lit' $$111111111111 light NULL</span>
<span class="plain">'lighted' $$111111111111 light NULL</span>
<span class="plain">'unlit' $$111111111111 (-light) NULL;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Numbers. </b></p>
<pre class="display">
<span class="plain">Array LanguageNumbers table</span>
<span class="plain">'one' 1 'two' 2 'three' 3 'four' 4 'five' 5</span>
<span class="plain">'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10</span>
<span class="plain">'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15</span>
<span class="plain">'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20</span>
<span class="plain">'twenty-one' 21 'twenty-two' 22 'twenty-three' 23 'twenty-four' 24</span>
<span class="plain">'twenty-five' 25 'twenty-six' 26 'twenty-seven' 27 'twenty-eight' 28</span>
<span class="plain">'twenty-nine' 29 'thirty' 30</span>
<span class="plain">;</span>
<span class="plain">[ LanguageNumber n f;</span>
<span class="plain">if (n == 0) { print "zero"; rfalse; }</span>
<span class="plain">if (n &lt; 0) { print "minus "; n = -n; }</span>
<span class="plain">#Iftrue (WORDSIZE == 4);</span>
<span class="plain">if (n &gt;= 1000000000) {</span>
<span class="plain">if (f == 1) print ", ";</span>
<span class="plain">print (LanguageNumber) n/1000000000, " billion"; n = n%1000000000; f = 1;</span>
<span class="plain">}</span>
<span class="plain">if (n &gt;= 1000000) {</span>
<span class="plain">if (f == 1) print ", ";</span>
<span class="plain">print (LanguageNumber) n/1000000, " million"; n = n%1000000; f = 1;</span>
<span class="plain">}</span>
<span class="plain">#Endif;</span>
<span class="plain">if (n &gt;= 1000) {</span>
<span class="plain">if (f == 1) print ", ";</span>
<span class="plain">print (LanguageNumber) n/1000, " thousand"; n = n%1000; f = 1;</span>
<span class="plain">}</span>
<span class="plain">if (n &gt;= 100) {</span>
<span class="plain">if (f == 1) print ", ";</span>
<span class="plain">print (LanguageNumber) n/100, " hundred"; n = n%100; f = 1;</span>
<span class="plain">}</span>
<span class="plain">if (n == 0) rfalse;</span>
<span class="plain">if (TEMPLATE_CONFIGURATION_BITMAP &amp; DIALECT_US_TCBIT) {</span>
<span class="plain">if (f == 1) print " ";</span>
<span class="plain">} else {</span>
<span class="plain">if (f == 1) print " and ";</span>
<span class="plain">}</span>
<span class="plain">if ((n &gt;= 20) &amp;&amp; (n&lt;100)) {</span>
<span class="plain">switch (n/10) {</span>
<span class="plain">2: print "twenty";</span>
<span class="plain">3: print "thirty";</span>
<span class="plain">4: print "forty";</span>
<span class="plain">5: print "fifty";</span>
<span class="plain">6: print "sixty";</span>
<span class="plain">7: print "seventy";</span>
<span class="plain">8: print "eighty";</span>
<span class="plain">9: print "ninety";</span>
<span class="plain">}</span>
<span class="plain">if (n%10 ~= 0) print "-", (LanguageNumber) n%10;</span>
<span class="plain">} else {</span>
<span class="plain">switch (n) {</span>
<span class="plain">1: print "one";</span>
<span class="plain">2: print "two";</span>
<span class="plain">3: print "three";</span>
<span class="plain">4: print "four";</span>
<span class="plain">5: print "five";</span>
<span class="plain">6: print "six";</span>
<span class="plain">7: print "seven";</span>
<span class="plain">8: print "eight";</span>
<span class="plain">9: print "nine";</span>
<span class="plain">10: print "ten";</span>
<span class="plain">11: print "eleven";</span>
<span class="plain">12: print "twelve";</span>
<span class="plain">13: print "thirteen";</span>
<span class="plain">14: print "fourteen";</span>
<span class="plain">15: print "fifteen";</span>
<span class="plain">16: print "sixteen";</span>
<span class="plain">17: print "seventeen";</span>
<span class="plain">18: print "eighteen";</span>
<span class="plain">19: print "nineteen";</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Time. </b></p>
<pre class="display">
<span class="plain">[ LanguageTimeOfDay hours mins i;</span>
<span class="plain">i = hours%12;</span>
<span class="plain">if (i == 0) i = 12;</span>
<span class="plain">if (i &lt; 10) print " ";</span>
<span class="plain">print i, ":", mins/10, mins%10;</span>
<span class="plain">if ((hours/12) &gt; 0) print " pm"; else print " am";</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Directions. </b></p>
<pre class="display">
<span class="plain">[ LanguageDirection d;</span>
<span class="plain">print (name) d;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Translation. </b></p>
<pre class="display">
<span class="plain">[ LanguageToInformese; ];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Articles. </b></p>
<pre class="display">
<span class="plain">Constant LanguageAnimateGender = male;</span>
<span class="plain">Constant LanguageInanimateGender = neuter;</span>
<span class="plain">Constant LanguageContractionForms = 2; ! English has two:</span>
<span class="plain">! 0 = starting with a consonant</span>
<span class="plain">! 1 = starting with a vowel</span>
<span class="plain">[ LanguageContraction text;</span>
<span class="plain">if (text-&gt;0 == 'a' or 'e' or 'i' or 'o' or 'u'</span>
<span class="plain">or 'A' or 'E' or 'I' or 'O' or 'U') return 1;</span>
<span class="plain">return 0;</span>
<span class="plain">];</span>
<span class="plain">Array LanguageArticles --&gt;</span>
<span class="plain">! Contraction form 0: Contraction form 1:</span>
<span class="plain">! Cdef Def Indef Cdef Def Indef</span>
<span class="plain">"The " "the " "a " "The " "the " "an " ! Articles 0</span>
<span class="plain">"The " "the " "some " "The " "the " "some "; ! Articles 1</span>
<span class="plain">! a i</span>
<span class="plain">! s p s p</span>
<span class="plain">! m f n m f n m f n m f n</span>
<span class="plain">Array LanguageGNAsToArticles --&gt; 0 0 0 1 1 1 0 0 0 1 1 1;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. Commands. </b><code class="display"><span class="extract">LanguageVerbLikesAdverb</span></code> is called by <code class="display"><span class="extract">PrintCommand</span></code> when printing an <code class="display"><span class="extract">UPTO_PE</span></code>
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 <code class="display"><span class="extract">true</span></code>.
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">LanguageVerbMayBeName</span></code> is called by <code class="display"><span class="extract">NounDomain</span></code> 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 <code class="display"><span class="extract">name</span></code> property.
</p>
<pre class="display">
<span class="plain">[ LanguageVerb i;</span>
<span class="plain">switch (i) {</span>
<span class="plain">'i//','inv','inventory':</span>
<span class="plain">print "take inventory";</span>
<span class="plain">'l//': print "look";</span>
<span class="plain">'x//': print "examine";</span>
<span class="plain">'z//': print "wait";</span>
<span class="plain">default: rfalse;</span>
<span class="plain">}</span>
<span class="plain">rtrue;</span>
<span class="plain">];</span>
<span class="plain">[ LanguageVerbLikesAdverb w;</span>
<span class="plain">if (w == 'look' or 'go' or 'push' or 'walk')</span>
<span class="plain">rtrue;</span>
<span class="plain">rfalse;</span>
<span class="plain">];</span>
<span class="plain">[ LanguageVerbMayBeName w;</span>
<span class="plain">if (w == 'long' or 'short' or 'normal' or 'brief' or 'full' or 'verbose')</span>
<span class="plain">rtrue;</span>
<span class="plain">rfalse;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. Stubs. </b>To reduce the need for conditional compilation, we provide these stub
routines:
</p>
<pre class="display">
<span class="plain">[ LanguageIsVerb buffer parse verb_wordnum;</span>
<span class="plain">rfalse;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="S-gt.html">Back to 'Glulx Template'</a></li><li><a href="S-lt2.html">Continue with 'Light Template'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>