1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-29 05:24:57 +03:00

Miscellaneous minor dialogue bugs fixed

This commit is contained in:
Graham Nelson 2022-09-26 23:05:37 +01:00
parent c970317683
commit 77c69c60b7
28 changed files with 441 additions and 57 deletions

View file

@ -812,30 +812,45 @@
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorIntervenes</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">tab</span><span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorIntervenes</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">tab</span><span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">obj</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">db</span><span class="plain-syntax">=1: </span><span class="identifier-syntax">db</span><span class="plain-syntax">&lt;=</span><span class="identifier-syntax">NO_DIALOGUE_BEATS</span><span class="plain-syntax">: </span><span class="identifier-syntax">db</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAvailableToPlayer</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tab</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TableOfDialogueBeats</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">db</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tab</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) || ((</span><span class="identifier-syntax">fn</span><span class="plain-syntax">)(</span><span class="identifier-syntax">latest_performed_beat</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tab</span><span class="plain-syntax">--&gt;1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">fn</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">fn</span><span class="plain-syntax">(</span><span class="identifier-syntax">DialogueTopicPool</span><span class="plain-syntax">))) { </span><span class="identifier-syntax">DirectorPerform</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">); </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">fn</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">fn</span><span class="plain-syntax">(</span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">; </span><span class="identifier-syntax">DirectorPerform</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">); </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorTestLineContainment</span><span class="plain-syntax"> </span><span class="identifier-syntax">dl</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax"> </span><span class="identifier-syntax">tab</span><span class="plain-syntax"> </span><span class="identifier-syntax">structure</span><span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">;</span>
<span class="comment-syntax">print "I.e. whether ", (PrintDialogueLineName) dl, " is in ", (PrintDialogueBeatName) db, "^";</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorTestLineContainment</span><span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax"> </span><span class="identifier-syntax">tX</span><span class="plain-syntax"> </span><span class="identifier-syntax">tb</span><span class="plain-syntax"> </span><span class="identifier-syntax">tab</span><span class="plain-syntax"> </span><span class="identifier-syntax">structure</span><span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> </span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> </span><span class="identifier-syntax">wanted</span><span class="plain-syntax">;</span>
<span class="comment-syntax">print "I.e. whether ", (PrintDialogueLineName) X, " is in ", (PrintDialogueBeatName) db, "^";</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tb</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">DIALOGUE_BEAT_TY</span><span class="plain-syntax">) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"*** Not a db ***"</span><span class="plain-syntax">; </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tX</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">DIALOGUE_LINE_TY</span><span class="plain-syntax"> </span><span class="reserved-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">DIALOGUE_CHOICE_TY</span><span class="plain-syntax">) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"*** Not a dl/dc ***"</span><span class="plain-syntax">; </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">db</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">db</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">NO_DIALOGUE_BEATS</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">dl</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">dl</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">NO_DIALOGUE_LINES</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tX</span><span class="plain-syntax"> == </span><span class="identifier-syntax">DIALOGUE_LINE_TY</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">X</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">X</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">NO_DIALOGUE_LINES</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wanted</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">X</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">X</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">NO_DIALOGUE_CHOICES</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wanted</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tab</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TableOfDialogueBeats</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">db</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">structure</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tab</span><span class="plain-syntax">--&gt;2;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">structure</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">pc</span><span class="plain-syntax">)/100;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">instruction</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">structure</span><span class="plain-syntax">--&gt;(</span><span class="identifier-syntax">pc</span><span class="plain-syntax">+1) == </span><span class="identifier-syntax">dl</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> == </span><span class="identifier-syntax">wanted</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">structure</span><span class="plain-syntax">--&gt;(</span><span class="identifier-syntax">pc</span><span class="plain-syntax">+1) == </span><span class="identifier-syntax">X</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">structure</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">pc</span><span class="plain-syntax">)/100;</span>
<span class="plain-syntax"> }</span>

View file

@ -847,9 +847,12 @@ light to see by.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">TestAudibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">TestAudibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">suppress_scope_loops</span><span class="plain-syntax">) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TestScope</span><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">location</span><span class="plain-syntax">; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">location</span><span class="plain-syntax"> == </span><span class="identifier-syntax">thedark</span><span class="plain-syntax">) </span><span class="identifier-syntax">location</span><span class="plain-syntax"> = </span><span class="identifier-syntax">real_location</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TestScope</span><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax"> = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">res</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. Touchability Relation. </b>We use <span class="extract"><span class="extract-syntax">ObjectIsUntouchable</span></span> to decide whether there is physical access from

View file

@ -84,7 +84,7 @@ module is used outside of Inform, of course, no <span class="extract"><span clas
<p class="commentary">A simple example of an <span class="extract"><span class="extract-syntax">i6_schema</span></span> might use the notation <span class="extract"><span class="extract-syntax">*1 == *2</span></span>; this
will ultimately compile to a test that two quantities are numerically equal.
As this example shows, <span class="extract"><span class="extract-syntax">*</span></span> is an escape character. See <a href="../building-module/2-is.html" class="internal">Inter Schemas (in building)</a>;
As this example shows, <span class="extract"><span class="extract-syntax">*</span></span> is an escape character. See <a href="../building-module/2-pis.html" class="internal">Parsing Inter Schemas (in building)</a>;
<span class="extract"><span class="extract-syntax">*1</span></span> is an example of what is called an "abbreviated command" there.
</p>

View file

@ -866,6 +866,8 @@ Note that a region cannot directly contain any object, except a backdrop.
<span class="plain-syntax"> </span><span class="identifier-syntax">backdropping</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">KB</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_dialogue_line</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lined</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_dialogue_choice</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">KB</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_dialogue_choice</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lined</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">regionality</span><span class="plain-syntax">) &amp;&amp; (!</span><span class="identifier-syntax">backdropping</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">predicate</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">R_regional_containment</span><span class="plain-syntax">);</span>

View file

@ -157,6 +157,7 @@ dialogue, so the internal error here should be impossible to hit.
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">as_scene</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">required</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">instance</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">starting_beat</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">requiring_nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">immediately_after</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">some_time_after</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">parse_node</span></span>
@ -181,6 +182,7 @@ dialogue, so the internal error here should be impossible to hit.
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_scene</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">required</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">starting_beat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">requiring_nothing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">immediately_after</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">some_time_after</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">some_time_before</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">);</span>
@ -207,6 +209,7 @@ We annotate each clause with the answer. Thus we might have:
<span class="definition-keyword">enum</span> <span class="constant-syntax">AFTER_DBC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">IMMEDIATELY_AFTER_DBC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">BEFORE_DBC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">REQUIRING_NOTHING_DBC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">REQUIRING_DBC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LATER_DBC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NEXT_DBC</span>
@ -237,6 +240,7 @@ We annotate each clause with the answer. Thus we might have:
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">after</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { AFTER_DBC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">immediately</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">after</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { IMMEDIATELY_AFTER_DBC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">before</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { BEFORE_DBC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">requiring</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nothing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { REQUIRING_NOTHING_DBC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">requiring</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { REQUIRING_DBC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">later</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { LATER_DBC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">next</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { NEXT_DBC, - }</span>
@ -261,6 +265,7 @@ We annotate each clause with the answer. Thus we might have:
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IMMEDIATELY_AFTER_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"IMMEDIATELY_AFTER"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BEFORE_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"BEFORE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">REQUIRING_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"REQUIRING"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">REQUIRING_NOTHING_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"REQUIRING_NOTHING"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LATER_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"LATER"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEXT_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"NEXT"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROPERTY_DBC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"PROPERTY"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -451,6 +456,9 @@ performed only after or before other beats.
<span class="plain-syntax"> </span><a href="6-db.html#SP7" class="function-link"><span class="function-syntax">DialogueBeats::parse_required_speaker_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">AL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">REQUIRING_NOTHING_DBC:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">requiring_nothing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iac</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
@ -614,7 +622,7 @@ in the <span class="extract"><span class="extract-syntax">UNPARSED_NOUN_NT</span
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;s-type-expression-uncached&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)) || (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">about_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>

View file

@ -84,9 +84,9 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">R_dialogue_containment</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::make_pair</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BPTerms::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BPTerms::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_dialogue_line</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BPTerms::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"dialogue-contains"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"in-dialogue"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"DirectorTestLineContainment(*2,*1)"</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"DirectorTestLineContainment(*2,*1,*#2,*#1)"</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;relation-names&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DIALOGUE_CONTAINMENT_RELATION_NAME</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::set_index_details</span><span class="plain-syntax">(</span><span class="identifier-syntax">R_dialogue_containment</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="string-syntax">"dialogue line"</span><span class="plain-syntax">);</span>
@ -99,7 +99,22 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DialogueRelations::typecheck</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">DialogueRelations::typecheck</span></span>:<br/><a href="6-dr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">kinds_required</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc_problem_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tck</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">DECLINE_TO_MATCH</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::compatible</span><span class="plain-syntax">(</span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Term 0 is %u not %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TypecheckPropositions::issue_bp_typecheck_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">tck</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">K_dialogue_line</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">K_dialogue_choice</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::compatible</span><span class="plain-syntax">(</span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">K_dialogue_line</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::compatible</span><span class="plain-syntax">(</span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">K_dialogue_choice</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Term 0 is %u not %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">kinds_required</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TypecheckPropositions::issue_bp_typecheck_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">tck</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALWAYS_MATCH</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>"In" requires delicate handling, because of the way that English uses it

View file

@ -151,7 +151,7 @@ which would be a typesafe list in I7, so they can be absolutely any data.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::numeric_entry</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::numeric_entry</span></span>:<br/>The Heap - <a href="2-th.html#SP6">&#167;6</a><br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2">&#167;2</a>, <a href="4-ll.html#SP7_1">&#167;7.1</a><br/>Box Quotations - <a href="4-bq.html#SP2">&#167;2</a><br/>Relation Literals - <a href="4-rl.html#SP1">&#167;1</a><br/>Stored Action Literals - <a href="4-sal.html#SP1">&#167;1</a><br/>Instances - <a href="5-ins.html#SP4">&#167;4</a><br/>Multimedia - <a href="5-mlt.html#SP2_1">&#167;2.1</a>, <a href="5-mlt.html#SP2_2">&#167;2.2</a><br/>Tables - <a href="5-tbl.html#SP2_1_1_1_4">&#167;2.1.1.1.4</a>, <a href="5-tbl.html#SP2_2_3">&#167;2.2.3</a><br/>Dialogue Beat Instances - <a href="5-dbi.html#SP2">&#167;2</a>, <a href="5-dbi.html#SP2_1">&#167;2.1</a>, <a href="5-dbi.html#SP2_2">&#167;2.2</a>, <a href="5-dbi.html#SP2_4">&#167;2.4</a>, <a href="5-dbi.html#SP2_5">&#167;2.5</a>, <a href="5-dbi.html#SP2_8">&#167;2.8</a>, <a href="5-dbi.html#SP3">&#167;3</a><br/>Dialogue - <a href="5-dli.html#SP3_2">&#167;3.2</a>, <a href="5-dli.html#SP3_3">&#167;3.3</a>, <a href="5-dli.html#SP3_4">&#167;3.4</a>, <a href="5-dli.html#SP3_7">&#167;3.7</a>, <a href="5-dli.html#SP3_8">&#167;3.8</a><br/>Dialogue Choice Instances - <a href="5-dci.html#SP3_2">&#167;3.2</a>, <a href="5-dci.html#SP3_3">&#167;3.3</a>, <a href="5-dci.html#SP3_4">&#167;3.4</a><br/>Relations - <a href="5-rlt.html#SP6_3">&#167;6.3</a>, <a href="5-rlt.html#SP6_3_3">&#167;6.3.3</a>, <a href="5-rlt.html#SP7">&#167;7</a>, <a href="5-rlt.html#SP9">&#167;9</a>, <a href="5-rlt.html#SP10_2">&#167;10.2</a>, <a href="5-rlt.html#SP10_3">&#167;10.3</a><br/>Kind IDs - <a href="5-ki.html#SP9_1_1_1">&#167;9.1.1.1</a>, <a href="5-ki.html#SP9_1_1_2">&#167;9.1.1.2</a><br/>Test Scripts - <a href="5-ts.html#SP4">&#167;4</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP1">&#167;1</a><br/>Action Bitmap Property - <a href="6-abp.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::numeric_entry</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::numeric_entry</span></span>:<br/>The Heap - <a href="2-th.html#SP6">&#167;6</a><br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2">&#167;2</a>, <a href="4-ll.html#SP7_1">&#167;7.1</a><br/>Box Quotations - <a href="4-bq.html#SP2">&#167;2</a><br/>Relation Literals - <a href="4-rl.html#SP1">&#167;1</a><br/>Stored Action Literals - <a href="4-sal.html#SP1">&#167;1</a><br/>Instances - <a href="5-ins.html#SP4">&#167;4</a><br/>Multimedia - <a href="5-mlt.html#SP2_1">&#167;2.1</a>, <a href="5-mlt.html#SP2_2">&#167;2.2</a><br/>Tables - <a href="5-tbl.html#SP2_1_1_1_4">&#167;2.1.1.1.4</a>, <a href="5-tbl.html#SP2_2_3">&#167;2.2.3</a><br/>Dialogue Beat Instances - <a href="5-dbi.html#SP2">&#167;2</a>, <a href="5-dbi.html#SP2_1">&#167;2.1</a>, <a href="5-dbi.html#SP2_2">&#167;2.2</a>, <a href="5-dbi.html#SP2_4">&#167;2.4</a>, <a href="5-dbi.html#SP2_5">&#167;2.5</a>, <a href="5-dbi.html#SP2_8">&#167;2.8</a>, <a href="5-dbi.html#SP3">&#167;3</a><br/>Dialogue - <a href="5-dli.html#SP3_2">&#167;3.2</a>, <a href="5-dli.html#SP3_3">&#167;3.3</a>, <a href="5-dli.html#SP3_4">&#167;3.4</a>, <a href="5-dli.html#SP3_7">&#167;3.7</a>, <a href="5-dli.html#SP3_8">&#167;3.8</a>, <a href="5-dli.html#SP3_9">&#167;3.9</a><br/>Dialogue Choice Instances - <a href="5-dci.html#SP3_2">&#167;3.2</a>, <a href="5-dci.html#SP3_3">&#167;3.3</a>, <a href="5-dci.html#SP3_4">&#167;3.4</a><br/>Relations - <a href="5-rlt.html#SP6_3">&#167;6.3</a>, <a href="5-rlt.html#SP6_3_3">&#167;6.3.3</a>, <a href="5-rlt.html#SP7">&#167;7</a>, <a href="5-rlt.html#SP9">&#167;9</a>, <a href="5-rlt.html#SP10_2">&#167;10.2</a>, <a href="5-rlt.html#SP10_3">&#167;10.3</a><br/>Kind IDs - <a href="5-ki.html#SP9_1_1_1">&#167;9.1.1.1</a>, <a href="5-ki.html#SP9_1_1_2">&#167;9.1.1.2</a><br/>Test Scripts - <a href="5-ts.html#SP4">&#167;4</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP1">&#167;1</a><br/>Action Bitmap Property - <a href="6-abp.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP9" class="function-link"><span class="function-syntax">EmitArrays::entry_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>

View file

@ -261,7 +261,7 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">required</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">requiring_nothing</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-dbi.html#SP5" class="function-link"><span class="function-syntax">RTDialogueBeats::find_speakers_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>

View file

@ -352,6 +352,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">without_speaking</span><span class="plain-syntax">) </span><span class="identifier-syntax">flags</span><span class="plain-syntax"> |= </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ending</span><span class="plain-syntax">) </span><span class="identifier-syntax">flags</span><span class="plain-syntax"> |= </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ending_finally</span><span class="plain-syntax">) </span><span class="identifier-syntax">flags</span><span class="plain-syntax"> |= </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">flags</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dli.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_10" class="paragraph-anchor"></a><b>&#167;3.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the available function</span><span class="named-paragraph-number">3.10</span></span><span class="comment-syntax"> =</span>

View file

@ -5172,7 +5172,7 @@
<np-operand> {called} <np-articled-bal>
(hits 57/393) (matched long text) constraint DS = {8} extremes [1, infinity)
<np-operand> <np-with-or-having-tail>
(hits 0/531) constraint DS = {30} extremes [2, infinity)
(hits 0/532) constraint DS = {30} extremes [2, infinity)
<np-operand> <np-and-tail>
(hits 87/490) (matched long text) constraint DS = {6} extremes [1, infinity)
<np-kind-phrase>
@ -5193,16 +5193,16 @@
<np-nonrelative>
(hits 431/431) (matched long text) constraint (none) extremes [1, infinity)
<np-with-or-having-tail> hits 0/10198 nti 30 constraint DS = {30} extremes [2, infinity)
<np-with-or-having-tail> hits 0/10204 nti 30 constraint DS = {30} extremes [2, infinity)
English:
it with action {***}
(hits 0/3883) constraint DS = {30} extremes [3, infinity)
(hits 0/3887) constraint DS = {30} extremes [3, infinity)
{with/having} (/) {***}
(hits 0/4091) constraint DS = {30} extremes [2, infinity)
(hits 0/4095) constraint DS = {30} extremes [2, infinity)
{with/having} {...} ( <response-letter> )
(hits 0/3477) constraint DS = {30} extremes [5, infinity)
(hits 0/3479) constraint DS = {30} extremes [5, infinity)
{with/having} <np-new-property-list>
(hits 0/4091) constraint DS = {30} extremes [2, infinity)
(hits 0/4095) constraint DS = {30} extremes [2, infinity)
<np-new-property-list> nti 29 constraint (none) extremes [1, infinity)
English:
@ -6303,7 +6303,7 @@
<article> activity
(hits 34/42) (matched: 'an activity') constraint DS = {30} extremes [2, 2]
activity
constraint CS = {30} extremes [1, 1]
(hits 0/1) constraint CS = {30} extremes [1, 1]
<specifies-sentence-subject> nti 8 constraint (none) extremes [1, infinity)
English:
@ -9828,6 +9828,8 @@
constraint DS = {30} extremes [3, infinity)
before {...}
constraint DS = {30} extremes [2, infinity)
requiring nothing
constraint CS = {30} extremes [2, 2]
requiring {...}
constraint DS = {30} extremes [2, infinity)
later

View file

@ -1,6 +1,6 @@
Total memory consumption was 121163K = 118 MB
Total memory consumption was 121166K = 118 MB
---- was used for 2051924 objects, in 365755 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2051934 objects, in 365765 frames in 0 x 800K = 0K = 0 MB:
33.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
21.0% text_stream_array 4630 x 100 = 463000 objects, 26076160 bytes
@ -15,7 +15,7 @@ Total memory consumption was 121163K = 118 MB
2.1% kind_array 66 x 1000 = 66000 objects, 2642112 bytes
1.7% scan_directory 528 objects, 2179584 bytes
1.6% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
1.6% inter_schema_token 14112 objects, 2032128 bytes
1.6% inter_schema_token 14116 objects, 2032704 bytes
1.5% package_request 21170 objects, 1862960 bytes
1.4% vocabulary_entry_array 162 x 100 = 16200 objects, 1819584 bytes
1.2% dict_entry_array 475 x 100 = 47500 objects, 1535200 bytes
@ -27,16 +27,16 @@ Total memory consumption was 121163K = 118 MB
0.8% id_body 945 objects, 1081080 bytes
0.8% adjective_meaning 202 objects, 1000304 bytes
0.7% excerpt_meaning 3117 objects, 972504 bytes
0.7% production 3939 objects, 913848 bytes
0.7% ptoken 8544 objects, 888576 bytes
0.7% production 3940 objects, 914080 bytes
0.7% ptoken 8546 objects, 888784 bytes
0.7% grammatical_usage 3638 objects, 873120 bytes
0.6% inter_schema_node 9045 objects, 868320 bytes
0.6% inter_schema_node 9047 objects, 868512 bytes
0.6% individual_form 2568 objects, 862848 bytes
0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
0.3% verb_usage 1148 objects, 394912 bytes
0.2% rule 470 objects, 368480 bytes
0.2% dictionary 7603 objects, 364944 bytes
0.2% dictionary 7604 objects, 364992 bytes
0.2% verb_form 388 objects, 350752 bytes
0.2% noun 2387 objects, 286440 bytes
0.2% compilation_subtask 3365 objects, 269200 bytes
@ -247,8 +247,8 @@ Total memory consumption was 121163K = 118 MB
100.0% was used for memory not allocated for objects:
56.8% text stream storage 70531652 bytes in 480174 claims
4.2% dictionary storage 5303296 bytes in 7603 claims
56.8% text stream storage 70534016 bytes in 480195 claims
4.2% dictionary storage 5303808 bytes in 7604 claims
---- sorting 1560 bytes in 159 claims
5.8% source text 7200000 bytes in 3 claims
8.7% source text details 10800000 bytes in 2 claims
@ -265,5 +265,5 @@ Total memory consumption was 121163K = 118 MB
---- code generation workspace for objects 3480 bytes in 19 claims
0.2% emitter array storage 280544 bytes in 2001 claims
-150.-2% was overhead - -186421096 bytes = -182051K = -177 MB
-150.-2% was overhead - -186422352 bytes = -182053K = -177 MB

View file

@ -1,11 +1,11 @@
100.0% in inform7 run
71.4% in compilation to Inter
51.0% in //Sequence::undertake_queued_tasks//
71.1% in compilation to Inter
50.9% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.6% in //RTPhrasebook::compile_entries//
1.4% in //RTKindConstructors::compile//
1.6% in //RTKindConstructors::compile//
1.4% in //RTPhrasebook::compile_entries//
1.0% in //Sequence::lint_inter//
0.6% in //MajorNodes::pass_2//
0.6% in //Sequence::undertake_queued_tasks//
@ -16,18 +16,18 @@
0.2% in //InferenceSubjects::emit_all//
0.2% in //RTKindConstructors::compile_permissions//
0.2% in //Task::make_built_in_kind_constructors//
3.2% not specifically accounted for
0.2% in //World::stages_II_and_III//
2.8% not specifically accounted for
25.8% in running Inter pipeline
10.0% in step 14/15: generate inform6 -> auto.inf
10.2% in step 14/15: generate inform6 -> auto.inf
5.6% in step 5/15: load-binary-kits
5.6% in step 6/15: make-synoptic-module
5.4% in step 6/15: make-synoptic-module
1.4% in step 9/15: make-identifiers-unique
0.4% in step 12/15: eliminate-redundant-operations
0.4% in step 4/15: compile-splats
0.4% in step 7/15: shorten-wiring
0.4% in step 8/15: detect-indirect-calls
0.2% in step 10/15: reconcile-verbs
0.2% in step 11/15: eliminate-redundant-labels
1.2% not specifically accounted for
0.2% in step 8/15: detect-indirect-calls
1.6% not specifically accounted for
2.6% in supervisor
0.2% not specifically accounted for
0.5% not specifically accounted for

View file

@ -761,30 +761,45 @@ Global director_is_active = false;
rfalse;
];
[ DirectorIntervenes obj tab fn db;
Array DirectorMiniPool --> 0 0;
[ DirectorIntervenes obj tab fn db saved;
saved = DirectorMiniPool-->0;
DirectorMiniPool-->0 = obj;
for (db=1: db<=NO_DIALOGUE_BEATS: db++) {
if (DirectorBeatAvailableToPlayer(db)) {
tab = TableOfDialogueBeats-->db;
fn = tab-->0;
if ((fn == 0) || ((fn)(latest_performed_beat))) {
fn = tab-->1;
if ((fn) && (fn(DialogueTopicPool))) { DirectorPerform(db); rtrue; }
if ((fn) && (fn(DirectorMiniPool))) {
DirectorMiniPool-->0 = saved; DirectorPerform(db); rtrue;
}
}
}
}
DirectorMiniPool-->0 = saved;
rfalse;
];
[ DirectorTestLineContainment dl db tab structure pc instruction;
! print "I.e. whether ", (PrintDialogueLineName) dl, " is in ", (PrintDialogueBeatName) db, "^";
[ DirectorTestLineContainment X db tX tb tab structure pc instruction wanted;
! print "I.e. whether ", (PrintDialogueLineName) X, " is in ", (PrintDialogueBeatName) db, "^";
if (tb ~= DIALOGUE_BEAT_TY) { print "*** Not a db ***"; rfalse; }
if (tX ~= DIALOGUE_LINE_TY or DIALOGUE_CHOICE_TY) { print "*** Not a dl/dc ***"; rfalse; }
if ((db < 1) || (db > NO_DIALOGUE_BEATS)) rfalse;
if ((dl < 1) || (dl > NO_DIALOGUE_LINES)) rfalse;
if (tX == DIALOGUE_LINE_TY) {
if ((X < 1) || (X > NO_DIALOGUE_LINES)) rfalse;
wanted = 1;
} else {
if ((X < 1) || (X > NO_DIALOGUE_CHOICES)) rfalse;
wanted = 2;
}
tab = TableOfDialogueBeats-->db;
structure = tab-->2;
pc = 0;
instruction = (structure-->pc)/100;
while (instruction) {
if ((instruction == 1) && (structure-->(pc+1) == dl)) rtrue;
if ((instruction == wanted) && (structure-->(pc+1) == X)) rtrue;
pc = pc + 2;
instruction = (structure-->pc)/100;
}

View file

@ -763,9 +763,12 @@ For now, this is the same test as visibility except that it does not require
light to see by.
=
[ TestAudibility A B;
[ TestAudibility A B res saved;
if (suppress_scope_loops) rtrue;
return TestScope(B, A);
saved = location; if (location == thedark) location = real_location;
res = TestScope(B, A);
location = saved;
return res;
];
@h Touchability Relation.

View file

@ -36,5 +36,6 @@ PM_ChoiceLeftArrowExpected
PM_ChoiceRightArrowExpected
PM_InstancesExplicit
PM_NotASpeaker
Dialogue
DialogueBeats
LBW

View file

@ -0,0 +1,138 @@
Laboratory is a room.
Alice, Belle and Camilla are women in the Laboratory.
East of the Laboratory is the Annexe. Diego and Eric are men in the Annexe. The Annexe is dark.
South of the Laboratory is the Garden. The stumps, bat and ball are in the Garden.
Fiona is a woman in the Garden.
When play begins:
showme audibility relation;
showme visibility relation;
showme the list of people who can see Alice;
showme the list of people who can hear Alice;
showme the list of people who can see Diego;
showme the list of people who can hear Diego;
showme the list of dialogue choices in the nested decisions beat;
showme the list of dialogue lines in the test only present speakers beat.
Instead of jumping:
if dialogue about Alice intervenes:
stop the action.
Instead of listening:
showme the list of people who can hear the player;
showme the list of people who can be heard by the player;
After going south to the Garden:
make the dialogue director active;
clear conversational subjects;
perform the going active beat.
After going north from the Garden:
make the dialog director passive;
perform the going inactive beat.
Before examining something (called the objet d'art) in the Garden:
make the objet d'art a live conversational subject.
Every turn when the player is in the Garden or the player is in the Lake:
showme the live conversational subject list.
The Lake is east of the Garden. The sea monster and the mermaid are in the Lake.
After going to the Lake:
alter the live conversational subject list to { sea monster, mermaid }.
To say report on (D - a dialogue beat):
say "Report on completion of [D].";
repeat with L running through dialogue lines in D:
say "[L] is [if L is unperformed]un[end if]performed; [if L is non-recurring]non-[end if]recurring; [if L is unnarrated]un[end if]narrated; [if L is unelaborated]un[end if]elaborated; [if L is unavailable]un[end if]available; [if L is non-verbal]non-[end if]verbal[if L is story-ending]; story-ending[end if].";
Section A (dialog)
(This is the starting beat.)
-> perform the test only present speakers beat
-> perform the test repeated speech beat
-> perform the test repeated speech beat
-> perform the nested decisions beat
(This is the test only present speakers beat.)
Diego (this is the d1 line): "I am Diego, though you'll never hear this."
Alice (this is the a1 line): "I am Alice."
Belle (this is the b1 line; recurring): "I am Belle."
Diego (this is the d2 line; if 1 is 2): "I am always 'Diego' you know."
Eric (to Alice; without speaking; this is the e1 line): "Eric points insulting at Alice."
Alice (this is the a2 line; ending the story): "Still Alice."
Narration (this is the reporting narration line): "[report on the test only present speakers beat]"
Section B (dialogue)
(This is the test repeated speech beat.)
Alice: "I tell you just once, I am Alice."
Belle (recurring): "I tell you as often as necessary, I am Alice."
(This is the nested decisions beat.)
-- (this is the gouda choice) "My favourite cheese is vintage gouda."
-- (this is the white seedless choice) "My preferred grapes are white seedless."
-- (this is the red choice) "My preferred grapes are red."
-- (this is the camembert choice) "My favourite cheese is camembert."
-- (this is the white seeded choice) "My preferred grapes are white yet seeded."
-- (this is the black choice) "My preferred grapes are black."
Narration: "You would appear to have selected: [list of performed dialogue choices in the nested decisions beat]."
(This is the going active beat.)
Narration: "Bong! The director activity chime goes off."
(This is the going inactive beat.)
Narration: "Gnob! The director activity chime sounds in reverse."
Section C (dialogue)
(About Alice; recurring; requiring nothing.)
Alice: "I am self-explanatory."
-> stop
Diego: "Alice is kind of exhausting."
(About the bat and ball.)
Fiona: "The bat is willow and the ball is cork, I think."
(About the ball.)
Fiona (mentioning the bat and the stumps):
"The idea's to use the bat to defend the stumps."
(About the stumps.)
Fiona: "There are three of them, for some reason."
(About the mermaid.)
Sea monster: "Blubbble."

View file

@ -0,0 +1,21 @@
2
1
listen
jump
e
listen
jump
w
s
examine ball
z
z
z
z
e
z
z
w
n
quit
y

View file

@ -0,0 +1,134 @@
relation of things: audibility relation
relation of things: visibility relation
"list of people who can see Alice" = list of people: {yourself, Alice, Belle, Camilla}
"list of people who can hear Alice" = list of people: {yourself, Alice, Belle, Camilla}
"list of people who can see Diego" = list of people: {}
"list of people who can hear Diego" = list of people: {Diego, Eric}
"list of dialogue choices in the nested decisions beat" = list of dialogue choices: {gouda choice, white seedless choice, red choice, camembert choice, white seeded choice, black choice}
"list of dialogue lines in the test only present speakers beat" = list of dialogue lines: {d1 line, a1 line, b1 line, d2 line, e1 line, a2 line, reporting narration line}
Welcome
An Interactive Fiction
Release 1 / Serial number 160428 / Inform 7 v10.2.0 / D
Laboratory
You can see Alice, Belle and Camilla here.
Alice: "I am Alice."
Belle: "I am Belle."
Report on completion of test only present speakers beat.
d1 line is unperformed; non-recurring; unnarrated; unelaborated; available; verbal.
a1 line is performed; non-recurring; unnarrated; unelaborated; available; verbal.
b1 line is performed; recurring; unnarrated; unelaborated; available; verbal.
d2 line is unperformed; non-recurring; unnarrated; elaborated; unavailable; verbal.
e1 line is unperformed; non-recurring; unnarrated; unelaborated; available; non-verbal.
a2 line is unperformed; non-recurring; unnarrated; unelaborated; available; verbal; story-ending.
reporting narration line is unperformed; non-recurring; narrated; unelaborated; available; verbal.
Alice: "I tell you just once, I am Alice."
Belle: "I tell you as often as necessary, I am Alice."
Belle: "I tell you as often as necessary, I am Alice."
(1) My favourite cheese is vintage gouda.
(2) My favourite cheese is camembert.
> >
My favourite cheese is camembert.
(1) My preferred grapes are white yet seeded.
(2) My preferred grapes are black.
> > Laboratory
My preferred grapes are white yet seeded.
You would appear to have selected: camembert choice and white seeded choice.
> > Laboratory
"list of people who can hear the player" = list of people: {yourself, Alice, Belle, Camilla}
"list of people who can be heard by the player" = list of people: {yourself, Alice, Belle, Camilla}
> > Laboratory
Alice: "I am self-explanatory."
> > Darkness
Darkness
It is pitch dark, and you can't see a thing.
> > Darkness
"list of people who can hear the player" = list of people: {yourself, Diego, Eric}
"list of people who can be heard by the player" = list of people: {yourself, Diego, Eric}
> > Darkness
Diego: "Alice is kind of exhausting."
> > Laboratory
Laboratory
You can see Alice, Belle and Camilla here.
> > Garden
Bong! The director activity chime goes off.
"live conversational subject list" = list of objects: {}
> > Garden
You see nothing special about ball.
"live conversational subject list" = list of objects: {ball}
Fiona: "The bat is willow and the ball is cork, I think."
> > Garden
Time passes.
"live conversational subject list" = list of objects: {bat, ball}
Fiona: "The idea's to use the bat to defend the stumps."
> > Garden
Time passes.
"live conversational subject list" = list of objects: {stumps, bat, ball}
Fiona: "There are three of them, for some reason."
> > Garden
Time passes.
"live conversational subject list" = list of objects: {stumps, bat, ball}
> > Garden
Time passes.
"live conversational subject list" = list of objects: {stumps, bat, ball}
> > Lake
"live conversational subject list" = list of objects: {sea monster, mermaid}
The sea monster: "Blubbble."
> > Lake
Time passes.
"live conversational subject list" = list of objects: {sea monster, mermaid}
> > Lake
Time passes.
"live conversational subject list" = list of objects: {sea monster, mermaid}
> > Garden
Garden
You can see a stumps, bat, ball and Fiona here.
"live conversational subject list" = list of objects: {sea monster, mermaid}
> > Laboratory
Gnob! The director activity chime sounds in reverse.
> > Laboratory
> Are you sure you want to quit?

View file

@ -86,6 +86,7 @@ typedef struct dialogue_beat {
struct scene *as_scene;
struct linked_list *required; /* of |instance| */
int starting_beat;
int requiring_nothing;
struct parse_node *immediately_after;
struct linked_list *some_time_after; /* of |parse_node| */
@ -106,6 +107,7 @@ typedef struct dialogue_beat {
db->as_scene = NULL;
db->required = NEW_LINKED_LIST(instance);
db->starting_beat = FALSE;
db->requiring_nothing = FALSE;
db->immediately_after = NULL;
db->some_time_after = NEW_LINKED_LIST(parse_node);
db->some_time_before = NEW_LINKED_LIST(parse_node);
@ -130,6 +132,7 @@ We annotate each clause with the answer. Thus we might have:
@e AFTER_DBC
@e IMMEDIATELY_AFTER_DBC
@e BEFORE_DBC
@e REQUIRING_NOTHING_DBC
@e REQUIRING_DBC
@e LATER_DBC
@e NEXT_DBC
@ -156,6 +159,7 @@ We annotate each clause with the answer. Thus we might have:
after ... | ==> { AFTER_DBC, - }
immediately after ... | ==> { IMMEDIATELY_AFTER_DBC, - }
before ... | ==> { BEFORE_DBC, - }
requiring nothing | ==> { REQUIRING_NOTHING_DBC, - }
requiring ... | ==> { REQUIRING_DBC, - }
later | ==> { LATER_DBC, - }
next | ==> { NEXT_DBC, - }
@ -178,6 +182,7 @@ void DialogueBeats::write_dbc(OUTPUT_STREAM, int c) {
case IMMEDIATELY_AFTER_DBC: WRITE("IMMEDIATELY_AFTER"); break;
case BEFORE_DBC: WRITE("BEFORE"); break;
case REQUIRING_DBC: WRITE("REQUIRING"); break;
case REQUIRING_NOTHING_DBC: WRITE("REQUIRING_NOTHING"); break;
case LATER_DBC: WRITE("LATER"); break;
case NEXT_DBC: WRITE("NEXT"); break;
case PROPERTY_DBC: WRITE("PROPERTY"); break;
@ -350,6 +355,9 @@ performed only after or before other beats.
DialogueBeats::parse_required_speaker_list(db, AL);
break;
}
case REQUIRING_NOTHING_DBC:
db->requiring_nothing = TRUE;
break;
}
}
if (iac > 1)
@ -505,7 +513,7 @@ void DialogueBeats::parse_topic(linked_list *about_list, parse_node *AL, unsigne
if (<s-type-expression-uncached>(A)) {
parse_node *desc = <<rp>>;
kind *K = Specifications::to_kind(desc);
if (Kinds::Behaviour::is_subkind_of_object(K)) {
if ((Kinds::eq(K, K_object)) || (Kinds::Behaviour::is_subkind_of_object(K))) {
ADD_TO_LINKED_LIST(desc, parse_node, about_list);
} else {
Problems::quote_source(1, current_sentence);

View file

@ -23,9 +23,9 @@ void DialogueRelations::stock(bp_family *self, int n) {
R_dialogue_containment =
BinaryPredicates::make_pair(spatial_bp_family,
BPTerms::new(KindSubjects::from_kind(K_dialogue_beat)),
BPTerms::new(KindSubjects::from_kind(K_dialogue_line)),
BPTerms::new(KindSubjects::from_kind(K_value)),
I"dialogue-contains", I"in-dialogue",
NULL, Calculus::Schemas::new("DirectorTestLineContainment(*2,*1)"),
NULL, Calculus::Schemas::new("DirectorTestLineContainment(*2,*1,*#2,*#1)"),
PreformUtilities::wording(<relation-names>,
DIALOGUE_CONTAINMENT_RELATION_NAME));
BinaryPredicates::set_index_details(R_dialogue_containment, NULL, "dialogue line");
@ -37,7 +37,22 @@ void DialogueRelations::stock(bp_family *self, int n) {
=
int DialogueRelations::typecheck(bp_family *self, binary_predicate *bp,
kind **kinds_of_terms, kind **kinds_required, tc_problem_kit *tck) {
return DECLINE_TO_MATCH;
if ((K_dialogue_beat) &&
(Kinds::compatible(kinds_of_terms[1], K_dialogue_beat) == NEVER_MATCH)) {
LOG("Term 0 is %u not %u\n", kinds_of_terms[1], K_dialogue_beat);
TypecheckPropositions::issue_bp_typecheck_error(bp,
kinds_of_terms[0], kinds_of_terms[1], tck);
return NEVER_MATCH;
}
if (((K_dialogue_line) || (K_dialogue_choice)) &&
(Kinds::compatible(kinds_of_terms[0], K_dialogue_line) == NEVER_MATCH) &&
(Kinds::compatible(kinds_of_terms[0], K_dialogue_choice) == NEVER_MATCH)) {
LOG("Term 0 is %u not %u\n", kinds_of_terms[0], kinds_required[0]);
TypecheckPropositions::issue_bp_typecheck_error(bp,
kinds_of_terms[0], kinds_of_terms[1], tck);
return NEVER_MATCH;
}
return ALWAYS_MATCH;
}
@ "In" requires delicate handling, because of the way that English uses it

View file

@ -182,7 +182,7 @@ void RTDialogueBeats::beat_compilation_agent(compilation_subtask *ct) {
@<Write the speaker list@> =
linked_list *L = db->required;
if (LinkedLists::len(L) == 0) {
if ((LinkedLists::len(L) == 0) && (db->requiring_nothing == FALSE)) {
L = NEW_LINKED_LIST(instance);
RTDialogueBeats::find_speakers_r(L, db->root);
}

View file

@ -254,6 +254,7 @@ void RTDialogueLines::line_compilation_agent(compilation_subtask *ct) {
if (dl->without_speaking) flags |= 2;
if (ending) flags |= 4;
if (ending_finally) flags |= 8;
EmitArrays::numeric_entry(flags);
@<Compile the available function@> =
packaging_state save = Functions::begin(RTDialogueLines::available_fn_iname(dl));

View file

@ -23,7 +23,7 @@ module is used outside of Inform, of course, no |inter_schema| will exist.
A simple example of an |i6_schema| might use the notation |*1 == *2|; this
will ultimately compile to a test that two quantities are numerically equal.
As this example shows, |*| is an escape character. See //building: Inter Schemas//;
As this example shows, |*| is an escape character. See //building: Parsing Inter Schemas//;
|*1| is an example of what is called an "abbreviated command" there.
@ The //i6_schema// structure is very simple, then. Schemas can be of unlimited

View file

@ -714,6 +714,8 @@ pcalc_prop *Simplifications::region_containment(pcalc_prop *prop, int *changed)
backdropping = TRUE;
if ((K_dialogue_beat) && (Kinds::eq(KB, K_dialogue_line)))
lined = TRUE;
if ((K_dialogue_choice) && (Kinds::eq(KB, K_dialogue_choice)))
lined = TRUE;
}
if ((regionality) && (!backdropping)) {
pl->predicate = STORE_POINTER_binary_predicate(R_regional_containment);