1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 04:00:43 +03:00

Implementation of IE-0039

This commit is contained in:
Graham Nelson 2024-05-21 16:58:19 +01:00
parent 0ccfbce7e2
commit b6ace637db
51 changed files with 1625 additions and 1365 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6X63 'Krypton' (19 May 2024)
[Version](notes/versioning.md): 10.2.0-beta+6X64 'Krypton' (21 May 2024)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 19 May 2024
Build Number: 6X63
Build Date: 21 May 2024
Build Number: 6X64

View file

@ -415,12 +415,20 @@ them back that way too:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_use_option</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_use_option</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</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">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">use_option</span><span class="plain-syntax"> *</span><span class="function-syntax">NewUseOptions::find_uo</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::find_uo</span></span>:<br/>Use Options - <a href="3-uor.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">notable_code</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">use_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">uo</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">uo</span><span class="plain-syntax">, </span><span class="reserved-syntax">use_option</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">uo</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">notable_option_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">notable_code</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">uo</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">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>The following sets an option.
</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">NewUseOptions::set</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::set</span></span>:<br/>Use Options - <a href="3-uor.html#SP2_1_4">&#167;2.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewUseOptions::set</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::set</span></span>:<br/>Use Options - <a href="3-uor.html#SP2_1_4">&#167;2.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">use_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">uo</span><span class="plain-syntax"> = </span><span class="identifier-syntax">puos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">resolved_option</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">uo</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to set null UO"</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">uo</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">is_explicitly_numerical</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">puos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at_least</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">)) {</span>
@ -469,7 +477,7 @@ set, if multiple sentences set <span class="extract"><span class="extract-syntax
</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">NewUseOptions::pragma_setting</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::pragma_setting</span></span>:<br/>Use Options - <a href="3-uor.html#SP2_1_3">&#167;2.1.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">NewUseOptions::pragma_setting</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::pragma_setting</span></span>:<br/>Use Options - <a href="3-uor.html#SP2_1_3">&#167;2.1.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">puos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">language_for_pragma</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">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
@ -524,7 +532,7 @@ they mostly are.)
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b></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">NewUseOptions::memory_setting</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::memory_setting</span></span>:<br/><a href="3-nuor.html#SP7">&#167;7</a><br/>Use Options - <a href="3-uor.html#SP2_1_3">&#167;2.1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</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">NewUseOptions::memory_setting</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">NewUseOptions::memory_setting</span></span>:<br/><a href="3-nuor.html#SP7">&#167;7</a><br/>Use Options - <a href="3-uor.html#SP2_1_3">&#167;2.1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::put</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">Characters::toupper</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">63</span><span class="plain-syntax">) {</span>

View file

@ -128,6 +128,14 @@ articled lists:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">puos</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="function-syntax">UseOptions::force_setting</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">notable_code</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">use_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">uo</span><span class="plain-syntax"> = </span><a href="3-nuor.html#SP4" class="function-link"><span class="function-syntax">NewUseOptions::find_uo</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">notable_code</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">uo</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax"> = </span><a href="3-uor.html#SP3" class="function-link"><span class="function-syntax">UseOptions::new_puos</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">puos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">resolved_option</span><span class="plain-syntax"> = </span><span class="identifier-syntax">uo</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">puos</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="function-syntax">UseOptions::parse_setting</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">UseOptions::parse_setting</span></span>:<br/><a href="3-uor.html#SP2_1_4">&#167;2.1.4</a><br/>New Use Option Requests - <a href="3-nuor.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;use-setting&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>

View file

@ -85,6 +85,7 @@ meaningful only for works of IF and are inert for Basic Inform projects.
<span class="definition-keyword">enum</span> <span class="constant-syntax">SLOW_ROUTE_FINDING_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">DICTIONARY_RESOLUTION_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NO_AUTO_PLURAL_NAMES_UO</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NAMELESS_ROOM_DESCRIPTIONS_UO</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Note that Inform recognises these by their English names, so there would be no
need to translate this to other languages.
@ -105,7 +106,8 @@ need to translate this to other languages.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">index</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">figure</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">thumbnails</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"> { INDEX_FIGURE_THUMBNAILS_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">fast</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">route-finding</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"> { FAST_ROUTE_FINDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">slow</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">route-finding</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"> { SLOW_ROUTE_FINDING_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">dictionary</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">resolution</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { DICTIONARY_RESOLUTION_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">dictionary</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">resolution</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"> { DICTIONARY_RESOLUTION_UO, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nameless</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">room</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">descriptions</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { NAMELESS_ROOM_DESCRIPTIONS_UO, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Some of the pragma-like settings are stored here:

View file

@ -186,7 +186,7 @@ of vehicle, and so on, but this would cause mayhem in the model world. So:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::object_is_a_room</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Spatial::object_is_a_room</span></span>:<br/><a href="3-sm.html#SP30_3_2">&#167;30.3.2</a>, <a href="3-sm.html#SP30_3_3">&#167;30.3.3</a>, <a href="3-sm.html#SP31">&#167;31</a>, <a href="3-sm.html#SP39">&#167;39</a><br/>The Player - <a href="3-tp.html#SP10_1">&#167;10.1</a>, <a href="3-tp.html#SP10_3">&#167;10.3</a><br/>Regions - <a href="3-rgn.html#SP7">&#167;7</a><br/>The Map - <a href="3-tm.html#SP33_1">&#167;33.1</a>, <a href="3-tm.html#SP33_2">&#167;33.2</a>, <a href="3-tm.html#SP33_4">&#167;33.4</a><br/>Mapping Hint Requests - <a href="3-mhr.html#SP10_2">&#167;10.2</a>, <a href="3-mhr.html#SP10_4_1">&#167;10.4.1</a>, <a href="3-mhr.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::object_is_a_room</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Spatial::object_is_a_room</span></span>:<br/><a href="3-sm.html#SP27">&#167;27</a>, <a href="3-sm.html#SP30_3_2">&#167;30.3.2</a>, <a href="3-sm.html#SP30_3_3">&#167;30.3.3</a>, <a href="3-sm.html#SP31">&#167;31</a>, <a href="3-sm.html#SP39">&#167;39</a><br/>The Player - <a href="3-tp.html#SP10_1">&#167;10.1</a>, <a href="3-tp.html#SP10_3">&#167;10.3</a><br/>Regions - <a href="3-rgn.html#SP7">&#167;7</a><br/>The Map - <a href="3-tm.html#SP33_1">&#167;33.1</a>, <a href="3-tm.html#SP33_2">&#167;33.2</a>, <a href="3-tm.html#SP33_4">&#167;33.4</a><br/>Mapping Hint Requests - <a href="3-mhr.html#SP10_2">&#167;10.2</a>, <a href="3-mhr.html#SP10_4_1">&#167;10.4.1</a>, <a href="3-mhr.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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_room</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">I</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Instances::of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -568,14 +568,64 @@ that Y is the destination of a map connection &mdash; to see which.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">implied_Stage_room</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::spatial_stage_I</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Spatial::spatial_stage_I</span></span>:<br/><a href="3-sm.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, *</span><span class="identifier-syntax">potential_stage_room</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">potential_stage_room_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_thing</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">potential_stage_room_kind_at</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">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1" class="named-paragraph-link"><span class="named-paragraph">Perform kind determination for this object</span><span class="named-paragraph-number">27.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3" class="named-paragraph-link"><span class="named-paragraph">Perform kind determination for this object</span><span class="named-paragraph-number">27.3</span></a></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">count</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">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-sm.html#SP7" class="function-link"><span class="function-syntax">Spatial::object_is_a_room</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">count</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">count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_2" class="named-paragraph-link"><span class="named-paragraph">Create an implied room</span><span class="named-paragraph-number">27.2</span></a></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">potential_stage_room</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CHANGES</span><span class="plain-syntax">, </span><span class="string-syntax">"Setting kind of potential implied room $O as %u\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">potential_stage_room</span><span class="plain-syntax">, </span><span class="identifier-syntax">potential_stage_room_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Propositions::Abstract::assert_kind_of_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">potential_stage_room</span><span class="plain-syntax">, </span><span class="identifier-syntax">potential_stage_room_kind</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27_1" class="paragraph-anchor"></a><b>&#167;27.1. </b>Our main problem in what follows is caused by "in" being so ambiguous,
<p class="commentary firstcommentary"><a id="SP27_1" class="paragraph-anchor"></a><b>&#167;27.1. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;implied-room-name&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stage</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_2" class="paragraph-anchor"></a><b>&#167;27.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create an implied room</span><span class="named-paragraph-number">27.2</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">potential_stage_room</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">potential_stage_room_kind</span><span class="plain-syntax"> != </span><span class="identifier-syntax">K_container</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">potential_stage_room_kind</span><span class="plain-syntax"> != </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">potential_stage_room_kind_at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::object_problem_at_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_StageNotRoomable</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">potential_stage_room</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"is called 'Stage' and is in a story with no declared rooms, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"so I think it ought to be the room in which everything happens. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"However, that seems to be contradicted by this sentence"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which implies that 'Stage' definitely isn't a room."</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">potential_stage_room_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">implied_Stage_room</span><span class="plain-syntax"> = </span><span class="identifier-syntax">potential_stage_room</span><span class="plain-syntax">;</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Stage"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Propositions::Abstract::to_create_something</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_room</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">implied_Stage_room</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::latest</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parsed_use_option_setting</span><span class="plain-syntax"> *</span><span class="identifier-syntax">puos</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">UseOptions::force_setting</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAMELESS_ROOM_DESCRIPTIONS_UO</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">puos</span><span class="plain-syntax">) </span><span class="identifier-syntax">NewUseOptions::set</span><span class="plain-syntax">(</span><span class="identifier-syntax">puos</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3" class="paragraph-anchor"></a><b>&#167;27.3. </b>Our main problem in what follows is caused by "in" being so ambiguous,
or perhaps it might be said that the real problem is that we choose to
distinguish between rooms and containers on a world-modelling level &mdash; when it
could well be argued that they are linguistically the same thing.
@ -609,35 +659,44 @@ like "in", and from the spatial context in which the object appears. This
is the "geography choice" for its kind.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform kind determination for this object</span><span class="named-paragraph-number">27.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform kind determination for this object</span><span class="named-paragraph-number">27.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::get_creating_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">designers_choice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_1" class="named-paragraph-link"><span class="named-paragraph">Determine the designer choice</span><span class="named-paragraph-number">27.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_1" class="named-paragraph-link"><span class="named-paragraph">Determine the designer choice</span><span class="named-paragraph-number">27.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="function-syntax">&lt;implied-room-name&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Instances::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">potential_stage_room</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">potential_stage_room</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</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">designers_choice</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">potential_stage_room_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">designers_choice</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">potential_stage_room_kind_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::get_kind_set_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">potential_stage_room</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">geography_choice</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">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">geography_inference</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</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">geography_certainty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">UNKNOWN_CE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_2" class="named-paragraph-link"><span class="named-paragraph">Determine the geography choice</span><span class="named-paragraph-number">27.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_2" class="named-paragraph-link"><span class="named-paragraph">Determine the geography choice</span><span class="named-paragraph-number">27.3.2</span></a></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">geography_choice</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">designers_choice</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_3" class="named-paragraph-link"><span class="named-paragraph">Attempt to reconcile the two choices</span><span class="named-paragraph-number">27.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_3" class="named-paragraph-link"><span class="named-paragraph">Attempt to reconcile the two choices</span><span class="named-paragraph-number">27.3.3</span></a></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">Instances::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_object</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">I</span><span class="plain-syntax"> != </span><span class="identifier-syntax">potential_stage_room</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Instances::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Propositions::Abstract::assert_kind_of_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_thing</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_1" class="paragraph-anchor"></a><b>&#167;27.1.1. </b>By this point, any explicit information is reflected in the hierarchy of
<p class="commentary firstcommentary"><a id="SP27_3_1" class="paragraph-anchor"></a><b>&#167;27.3.1. </b>By this point, any explicit information is reflected in the hierarchy of
kinds. We look out for four specialised kinds of thing, but failing that,
we simply take its broadest kind &mdash; usually "thing", "room", "direction"
or "region".
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine the designer choice</span><span class="named-paragraph-number">27.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine the designer choice</span><span class="named-paragraph-number">27.3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -657,13 +716,13 @@ or "region".
<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">designers_choice</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">designers_choice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">f</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1">&#167;27.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_2" class="paragraph-anchor"></a><b>&#167;27.1.2. </b>If there is any positive information that this is a room, that's the
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3">&#167;27.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_2" class="paragraph-anchor"></a><b>&#167;27.3.2. </b>If there is any positive information that this is a room, that's the
geography choice; otherwise it's whichever of room or container is more
probably suggested by inferences.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine the geography choice</span><span class="named-paragraph-number">27.1.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine the geography choice</span><span class="named-paragraph-number">27.3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -682,8 +741,8 @@ probably suggested by inferences.
<span class="plain-syntax"> </span><span class="identifier-syntax">geography_inference</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inf</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1">&#167;27.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_3" class="paragraph-anchor"></a><b>&#167;27.1.3. </b>Since the designer choice is the one currently in force, we have basically
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3">&#167;27.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_3" class="paragraph-anchor"></a><b>&#167;27.3.3. </b>Since the designer choice is the one currently in force, we have basically
three choices here: impose the geography choice instead; do nothing; or issue
a problem message. The case where we do nothing is if geography suggests
something is a room, when it's actually a door: this is because sentences
@ -691,7 +750,7 @@ like "East is the Marble Portal" can suggest the "Marble Portal" is a room
when it's legitimately a door.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to reconcile the two choices</span><span class="named-paragraph-number">27.1.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to reconcile the two choices</span><span class="named-paragraph-number">27.3.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -699,23 +758,30 @@ when it's legitimately a door.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">designers_choice</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">geography_certainty</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">designers_choice</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Accept the geography choice, since it only refines what we already know</span><span class="named-paragraph-number">27.1.3.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_3_1" class="named-paragraph-link"><span class="named-paragraph">Accept the geography choice, since it only refines what we already know</span><span class="named-paragraph-number">27.3.3.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">geography_certainty</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (!((</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">designers_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_door</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">)))))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message, since the choices are irreconcilable</span><span class="named-paragraph-number">27.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_3_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message, since the choices are irreconcilable</span><span class="named-paragraph-number">27.3.3.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1">&#167;27.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_3_1" class="paragraph-anchor"></a><b>&#167;27.1.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Accept the geography choice, since it only refines what we already know</span><span class="named-paragraph-number">27.1.3.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3">&#167;27.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_3_1" class="paragraph-anchor"></a><b>&#167;27.3.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Accept the geography choice, since it only refines what we already know</span><span class="named-paragraph-number">27.3.3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CHANGES</span><span class="plain-syntax">, </span><span class="string-syntax">"Accepting geography choice of kind of $O as %u\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Propositions::Abstract::assert_kind_of_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">geography_choice</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">potential_stage_room</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CHANGES</span><span class="plain-syntax">, </span><span class="string-syntax">"Noting potential geography choice of kind of $O as %u\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">potential_stage_room_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">potential_stage_room_kind_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inferences::where_inferred</span><span class="plain-syntax">(</span><span class="identifier-syntax">geography_inference</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">KIND_CHANGES</span><span class="plain-syntax">, </span><span class="string-syntax">"Accepting geography choice of kind of $O as %u\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Propositions::Abstract::assert_kind_of_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1_3">&#167;27.1.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_3_2" class="paragraph-anchor"></a><b>&#167;27.1.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message, since the choices are irreconcilable</span><span class="named-paragraph-number">27.1.3.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3_3">&#167;27.3.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_3_2" class="paragraph-anchor"></a><b>&#167;27.3.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message, since the choices are irreconcilable</span><span class="named-paragraph-number">27.3.3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -723,15 +789,15 @@ when it's legitimately a door.
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">decider</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::get_creating_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">sentence_setting_kind</span><span class="plain-syntax">) </span><span class="identifier-syntax">decider</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sentence_setting_kind</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">designers_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_person</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_3_2_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for implied containment by a person</span><span class="named-paragraph-number">27.1.3.2.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_3_2_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for implied containment by a person</span><span class="named-paragraph-number">27.3.3.2.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</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">designers_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_supporter</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">geography_choice</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_container</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_3_2_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for simultaneous containment and support</span><span class="named-paragraph-number">27.1.3.2.2</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_3_2_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for simultaneous containment and support</span><span class="named-paragraph-number">27.3.3.2.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_1_3_2_3" class="named-paragraph-link"><span class="named-paragraph">Issue a more generic problem message for irreconcilable kinds</span><span class="named-paragraph-number">27.1.3.2.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP27_3_3_2_3" class="named-paragraph-link"><span class="named-paragraph">Issue a more generic problem message for irreconcilable kinds</span><span class="named-paragraph-number">27.3.3.2.3</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1_3">&#167;27.1.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_3_2_1" class="paragraph-anchor"></a><b>&#167;27.1.3.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for implied containment by a person</span><span class="named-paragraph-number">27.1.3.2.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3_3">&#167;27.3.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_3_2_1" class="paragraph-anchor"></a><b>&#167;27.3.3.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for implied containment by a person</span><span class="named-paragraph-number">27.3.3.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -743,12 +809,12 @@ when it's legitimately a door.
<span class="plain-syntax"> </span><span class="string-syntax">"so 'The briefcase is in Daphne.' is disallowed, but 'The briefcase is "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"carried by Daphne.' is fine, or indeed 'Daphne carries the briefcase.'"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1_3_2">&#167;27.1.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_3_2_2" class="paragraph-anchor"></a><b>&#167;27.1.3.2.2. </b>A notorious problem message for a notorious limitation of the traditional
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3_3_2">&#167;27.3.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_3_2_2" class="paragraph-anchor"></a><b>&#167;27.3.3.2.2. </b>A notorious problem message for a notorious limitation of the traditional
Inform spatial model:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for simultaneous containment and support</span><span class="named-paragraph-number">27.1.3.2.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for simultaneous containment and support</span><span class="named-paragraph-number">27.3.3.2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -761,8 +827,8 @@ Inform spatial model:
<span class="plain-syntax"> </span><span class="string-syntax">"container called the drawer is part of the desk. In the drawer is a "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"stapler.'"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1_3_2">&#167;27.1.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_1_3_2_3" class="paragraph-anchor"></a><b>&#167;27.1.3.2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a more generic problem message for irreconcilable kinds</span><span class="named-paragraph-number">27.1.3.2.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3_3_2">&#167;27.3.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_3_3_2_3" class="paragraph-anchor"></a><b>&#167;27.3.3.2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a more generic problem message for irreconcilable kinds</span><span class="named-paragraph-number">27.3.3.2.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -773,7 +839,7 @@ Inform spatial model:
<span class="plain-syntax"> </span><span class="string-syntax">"sentences true"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and this is a contradiction."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_1_3_2">&#167;27.1.3.2</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="3-sm.html#SP27_3_3_2">&#167;27.3.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>Stage II at last. Now the kinds are all known, and it's time to work out
the spatial arrangements. Inform's spatial model assigns every instance object
a unique "progenitor", which may be <span class="extract"><span class="extract-syntax">NULL</span></span>, representing the object which
@ -934,11 +1000,13 @@ object under investigation.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-sm.html#SP7" class="function-link"><span class="function-syntax">Spatial::object_is_a_room</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whereabouts</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">whereabouts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</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">whereabouts</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">whereabouts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">implied_Stage_room</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">whereabouts</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">here_sentence</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inferences::where_inferred</span><span class="plain-syntax">(</span><span class="identifier-syntax">parent_setting_inference</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-sm.html#SP30_3_2_1" class="named-paragraph-link"><span class="named-paragraph">Set the whereabouts to the last discussed room prior to this inference being drawn</span><span class="named-paragraph-number">30.3.2.1</span></a></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">whereabouts</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">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">here_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::object_problem_at_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NoHere</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">,</span>
@ -1310,9 +1378,7 @@ extensive maps.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">P_mark_as_room</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::new_nameless</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"mark_as_room"</span><span class="plain-syntax">);</span>
<span class="comment-syntax"> RTProperties::recommend_storing_as_attribute(P_mark_as_room, TRUE);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P_mark_as_thing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::new_nameless</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"mark_as_thing"</span><span class="plain-syntax">);</span>
<span class="comment-syntax"> RTProperties::recommend_storing_as_attribute(P_mark_as_thing, TRUE);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</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">Instances::of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">))</span>
@ -1329,9 +1395,7 @@ extensive maps.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">P_container</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::new_nameless</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"container"</span><span class="plain-syntax">);</span>
<span class="comment-syntax"> RTProperties::recommend_storing_as_attribute(P_container, TRUE);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P_supporter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::new_nameless</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"supporter"</span><span class="plain-syntax">);</span>
<span class="comment-syntax"> RTProperties::recommend_storing_as_attribute(P_supporter, TRUE);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</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">Instances::of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_container</span><span class="plain-syntax">))</span>
@ -1433,6 +1497,7 @@ empty.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Spatial::spatial_stage_IV</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Spatial::spatial_stage_IV</span></span>:<br/><a href="3-sm.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">Task::wraps_existing_storyfile</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">implied_Stage_room</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-sm.html#SP7" class="function-link"><span class="function-syntax">Spatial::object_is_a_room</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)) {</span>

View file

@ -80,14 +80,20 @@ is so marked).
<span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dialogue_section_being_scanned</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">dialogue_beat</span><span class="plain-syntax"> *</span><span class="identifier-syntax">previous_dialogue_beat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">dialogue_beat</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_dialogue_beat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue_sections_are_present</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">DialogueBeats::note_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</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">h</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">holds_dialogue</span><span class="plain-syntax">) </span><span class="identifier-syntax">dialogue_section_being_scanned</span><span class="plain-syntax"> = </span><span class="identifier-syntax">h</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue_section_being_scanned</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">previous_dialogue_beat</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">current_dialogue_beat</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">dialogue_sections_are_present</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-dn.html#SP1" class="function-link"><span class="function-syntax">DialogueNodes::clear_precursors</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">DialogueBeats::dialogue_exists</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">dialogue_sections_are_present</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Beats. </b>The following is called each time the cue paragraph for a new beat is found:
a whole paragraph, which might, for example, read:

View file

@ -259,7 +259,7 @@ except for <span class="extract"><span class="extract-syntax">EXTENSION_UO_ORIGI
<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">OPTIONS_FILE_UO_ORIGIN:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.In.SetAutomatically"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DocReferences::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"OPTIONSFILE"</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">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">EXTENSION_UO_ORIGIN:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Localisation::roman_t</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">LD</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Index.Elements.In.SetFrom"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Metadata::optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"^credit"</span><span class="plain-syntax">));</span>

View file

@ -180,21 +180,21 @@ than the number with correct ones
number of successes.
</li></ul>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Size of lexicon: 3223 excerpt meanings</span>
<span class="plain-syntax"> Stored among 860 words out of total vocabulary of 10708</span>
<span class="plain-syntax"> 724 words have a start list: longest belongs to report (with 296 meanings)</span>
<span class="plain-syntax">Size of lexicon: 3224 excerpt meanings</span>
<span class="plain-syntax"> Stored among 861 words out of total vocabulary of 10710</span>
<span class="plain-syntax"> 725 words have a start list: longest belongs to report (with 296 meanings)</span>
<span class="plain-syntax"> 21 words have an end list: longest belongs to digits (with 7 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to matches (with 6 meanings)</span>
<span class="plain-syntax"> 108 words have a subset list: longest belongs to street (with 4 meanings)</span>
<span class="plain-syntax">Number of attempts to retrieve: 110679</span>
<span class="plain-syntax"> of which unsuccessful: 92500</span>
<span class="plain-syntax"> of which successful: 18179</span>
<span class="plain-syntax">Number of attempts to retrieve: 110742</span>
<span class="plain-syntax"> of which unsuccessful: 92556</span>
<span class="plain-syntax"> of which successful: 18186</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 290848</span>
<span class="plain-syntax"> of which, total with incorrect hash codes: 267850</span>
<span class="plain-syntax"> of which, total with correct hash codes: 22998</span>
<span class="plain-syntax"> of which, total which matched: 19950</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 290908</span>
<span class="plain-syntax"> of which, total with incorrect hash codes: 267902</span>
<span class="plain-syntax"> of which, total with correct hash codes: 23006</span>
<span class="plain-syntax"> of which, total which matched: 19957</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progressnext"><a href="P-htitm.html">&#10095;</a></li></ul></div>

View file

@ -292,13 +292,13 @@ Within each category, items are listed in order of creation.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">adjective: 142 items</span>
<span class="plain-syntax">article: 2 items</span>
<span class="plain-syntax">noun: 2414 items</span>
<span class="plain-syntax">noun: 2415 items</span>
<span class="plain-syntax">pronoun: 8 items</span>
<span class="plain-syntax">preposition: 274 items</span>
<span class="plain-syntax">determiner: 22 items</span>
<span class="plain-syntax">verb: 109 items</span>
<span class="plain-syntax">verb_form: 388 items</span>
<span class="plain-syntax">total in all categories: 3359</span>
<span class="plain-syntax">total in all categories: 3360</span>
<span class="plain-syntax">adjective: 'even'</span>
<span class="plain-syntax">adjective: 'odd'</span>
@ -1057,6 +1057,7 @@ Within each category, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'fast route-finding'</span>
<span class="plain-syntax">noun: proper: 'slow route-finding'</span>
<span class="plain-syntax">noun: proper: 'maximum things understood at once'</span>
<span class="plain-syntax">noun: proper: 'nameless room descriptions'</span>
<span class="plain-syntax">noun: proper: 'manual pronouns'</span>
<span class="plain-syntax">noun: proper: 'undo prevention'</span>
<span class="plain-syntax">noun: proper: 'unabbreviated object names'</span>

View file

@ -1158,26 +1158,27 @@ since she died (at a grand old age and in mid-spring) in 2008.
<span class="plain-syntax"> </span><span class="identifier-syntax">now</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">mentioned</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Carry</span><span class="plain-syntax"> </span><span class="identifier-syntax">out</span><span class="plain-syntax"> </span><span class="identifier-syntax">looking</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">bold</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</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">begin</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">handling</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"Darkness"</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">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">ceiling</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[visibility ceiling]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The visibility ceiling]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">roman</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax">-</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">running</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">animal</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">" (on [the intermediate level])"</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">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">nameless</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">descriptions</span><span class="plain-syntax"> </span><span class="identifier-syntax">option</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">active</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">bold</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</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">begin</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">handling</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"Darkness"</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">end</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dark</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">activity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">ceiling</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">location</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[visibility ceiling]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">" (in [the intermediate level])"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax">-</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> </span><span class="identifier-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">run</span><span class="plain-syntax"> </span><span class="identifier-syntax">paragraph</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">special</span><span class="plain-syntax"> </span><span class="identifier-syntax">look</span><span class="plain-syntax"> </span><span class="identifier-syntax">spacing</span><span class="plain-syntax">.</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The visibility ceiling]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">roman</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax">-</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">running</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">animal</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">" (on [the intermediate level])"</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">otherwise</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">" (in [the intermediate level])"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax">-</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">intermediate</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> </span><span class="identifier-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="identifier-syntax">run</span><span class="plain-syntax"> </span><span class="identifier-syntax">paragraph</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">special</span><span class="plain-syntax"> </span><span class="identifier-syntax">look</span><span class="plain-syntax"> </span><span class="identifier-syntax">spacing</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Carry</span><span class="plain-syntax"> </span><span class="identifier-syntax">out</span><span class="plain-syntax"> </span><span class="identifier-syntax">looking</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax"> </span><span class="identifier-syntax">body</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">visibility</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">:</span>

View file

@ -123,7 +123,14 @@ as well as their parsing from text.
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">maximum</span><span class="plain-syntax"> </span><span class="identifier-syntax">things</span><span class="plain-syntax"> </span><span class="identifier-syntax">understood</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">once</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> </span><span class="identifier-syntax">least</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">configuration</span><span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_OBJ_LIST_SIZE</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">WorldModelKit</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>These are more straightforwardly ways to configure the command parser:
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>This is used automatically in stories where no room is declared, and
suppresses the boldface room name in room descriptions.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Use</span><span class="plain-syntax"> </span><span class="identifier-syntax">nameless</span><span class="plain-syntax"> </span><span class="identifier-syntax">room</span><span class="plain-syntax"> </span><span class="identifier-syntax">descriptions</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">configuration</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>These are more straightforwardly ways to configure the command parser:
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -1,15 +1,15 @@
Size of lexicon: 3223 excerpt meanings
Stored among 860 words out of total vocabulary of 10708
724 words have a start list: longest belongs to report (with 296 meanings)
Size of lexicon: 3224 excerpt meanings
Stored among 861 words out of total vocabulary of 10710
725 words have a start list: longest belongs to report (with 296 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to matches (with 6 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)
Number of attempts to retrieve: 110679
of which unsuccessful: 92500
of which successful: 18179
Number of attempts to retrieve: 110742
of which unsuccessful: 92556
of which successful: 18186
Total attempts to match against excerpt meanings: 290848
of which, total with incorrect hash codes: 267850
of which, total with correct hash codes: 22998
of which, total which matched: 19950
Total attempts to match against excerpt meanings: 290908
of which, total with incorrect hash codes: 267902
of which, total with correct hash codes: 23006
of which, total which matched: 19957

File diff suppressed because it is too large Load diff

View file

@ -1,14 +1,14 @@
Total memory consumption was 144475K = 141 MB
Total memory consumption was 144481K = 141 MB
---- was used for 2179833 objects, in 384350 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2180003 objects, in 384421 frames in 0 x 800K = 0K = 0 MB:
29.2% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
20.0% text_stream_array 5261 x 100 = 526100 objects, 29629952 bytes
18.1% linked_list 47999 objects, 26879440 bytes
20.0% text_stream_array 5262 x 100 = 526200 objects, 29635584 bytes
18.1% linked_list 48003 objects, 26881680 bytes
9.7% inter_symbol_array 136 x 1024 = 139264 objects, 14487808 bytes
9.4% inter_error_stash_array 107 x 1024 = 109568 objects, 14028128 bytes
7.4% scan_directory 2671 objects, 11025888 bytes
7.2% parse_node 134155 objects, 10732400 bytes
7.2% parse_node 134200 objects, 10736000 bytes
5.1% verb_conjugation 165 objects, 7657320 bytes
3.8% parse_node_annotation_array 358 x 500 = 179000 objects, 5739456 bytes
2.3% pcalc_prop_array 26 x 1000 = 26000 objects, 3536832 bytes
@ -16,38 +16,38 @@ Total memory consumption was 144475K = 141 MB
1.8% kind_array 68 x 1000 = 68000 objects, 2722176 bytes
1.4% inter_schema_token 14234 objects, 2163568 bytes
1.4% inter_name_generator_array 52 x 1000 = 52000 objects, 2081664 bytes
1.2% package_request 21512 objects, 1893056 bytes
1.2% package_request 21513 objects, 1893144 bytes
1.2% vocabulary_entry_array 165 x 100 = 16500 objects, 1853280 bytes
1.1% dict_entry_array 540 x 100 = 54000 objects, 1745280 bytes
1.0% inter_symbols_table 27140 objects, 1519840 bytes
1.0% inter_symbols_table 27141 objects, 1519896 bytes
1.0% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
0.9% i6_schema_array 24 x 100 = 2400 objects, 1440768 bytes
0.8% inter_package 27140 objects, 1302720 bytes
0.8% inter_package 27141 objects, 1302768 bytes
0.7% map_data 688 objects, 1155840 bytes
0.7% id_body 983 objects, 1124552 bytes
0.7% adjective_meaning 210 objects, 1039920 bytes
0.6% inter_schema_node 9102 objects, 1019424 bytes
0.6% excerpt_meaning 3223 objects, 1005576 bytes
0.6% production 4020 objects, 932640 bytes
0.6% ptoken 8766 objects, 911664 bytes
0.5% grammatical_usage 3669 objects, 880560 bytes
0.5% individual_form 2604 objects, 874944 bytes
0.6% excerpt_meaning 3224 objects, 1005888 bytes
0.6% production 4022 objects, 933104 bytes
0.6% ptoken 8770 objects, 912080 bytes
0.5% grammatical_usage 3670 objects, 880800 bytes
0.5% individual_form 2605 objects, 875280 bytes
0.4% unary_predicate_array 17 x 1000 = 17000 objects, 680544 bytes
0.3% local_variable_array 50 x 100 = 5000 objects, 481600 bytes
0.2% verb_usage 1148 objects, 394912 bytes
0.2% dictionary 7849 objects, 376752 bytes
0.2% dictionary 7850 objects, 376800 bytes
0.2% rule 480 objects, 376320 bytes
0.2% verb_form 388 objects, 350752 bytes
0.1% noun 2414 objects, 289680 bytes
0.1% noun 2415 objects, 289800 bytes
0.1% compilation_subtask 3402 objects, 272160 bytes
0.1% inference_subject 683 objects, 267736 bytes
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.1% vanilla_function 3857 objects, 246848 bytes
0.1% hierarchy_location 1233 objects, 177552 bytes
0.1% binary_predicate 334 objects, 176352 bytes
0.1% linguistic_stock_item 3359 objects, 161232 bytes
0.1% linguistic_stock_item 3360 objects, 161280 bytes
0.1% rule_family_data 404 objects, 148672 bytes
---- nonterminal 776 objects, 142784 bytes
---- nonterminal 777 objects, 142968 bytes
---- nascent_array 2204 objects, 141056 bytes
---- markdown_item_array 1 x 1000 objects, 136032 bytes
---- inference 1712 objects, 123264 bytes
@ -55,13 +55,13 @@ Total memory consumption was 144475K = 141 MB
---- documentation_ref 1307 objects, 115016 bytes
---- inter_schema 1552 objects, 111744 bytes
---- imperative_defn 1422 objects, 102384 bytes
---- noun_usage 2440 objects, 97600 bytes
---- noun_usage 2441 objects, 97640 bytes
---- inter_tree 7 objects, 96656 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- label_namespace 1482 objects, 94848 bytes
---- preposition 274 objects, 87680 bytes
---- kind_constructor 81 objects, 82944 bytes
---- lexical_cluster 2556 objects, 81792 bytes
---- lexical_cluster 2557 objects, 81824 bytes
---- kind_variable_declaration 1662 objects, 79776 bytes
---- rulebook 410 objects, 78720 bytes
---- filename 1740 objects, 69600 bytes
@ -89,7 +89,7 @@ Total memory consumption was 144475K = 141 MB
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- parsing_data 688 objects, 38528 bytes
---- production_list 630 objects, 35280 bytes
---- production_list 631 objects, 35336 bytes
---- counting_data 688 objects, 33024 bytes
---- regions_data 688 objects, 33024 bytes
---- property_permission 97 objects, 31816 bytes
@ -146,13 +146,13 @@ Total memory consumption was 144475K = 141 MB
---- parsing_pp_data 97 objects, 4656 bytes
---- method_set 144 objects, 4608 bytes
---- command_line_switch 56 objects, 4480 bytes
---- use_option 31 objects, 4216 bytes
---- use_option 32 objects, 4352 bytes
---- parse_node_annotation_type 126 objects, 4032 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- definition 49 objects, 3528 bytes
---- property_setting_bp_data 88 objects, 3520 bytes
---- parsed_use_option_setting 48 objects, 3456 bytes
---- submodule_request 86 objects, 3440 bytes
---- parsed_use_option_setting 47 objects, 3384 bytes
---- JSON_type 47 objects, 3384 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
---- arithmetic_schema_array 1 x 50 objects, 3232 bytes
@ -161,8 +161,8 @@ Total memory consumption was 144475K = 141 MB
---- local_parking_lot 64 objects, 2560 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_rule_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- scene 1 object, 2352 bytes
---- build_step 28 objects, 2016 bytes
@ -265,18 +265,18 @@ Total memory consumption was 144475K = 141 MB
---- kind_template_definition 1 object, 40 bytes
---- i6_memory_setting 1 object, 32 bytes
100.0% was used for memory not allocated for objects:
99.9% was used for memory not allocated for objects:
63.2% text stream storage 93520440 bytes in 546656 claims
4.0% dictionary storage 5932480 bytes in 7849 claims
63.2% text stream storage 93526312 bytes in 546697 claims
4.0% dictionary storage 5932992 bytes in 7850 claims
---- sorting 6648 bytes in 1611 claims
4.8% source text 7200000 bytes in 3 claims
7.3% source text details 10800000 bytes in 2 claims
7.2% source text details 10800000 bytes in 2 claims
0.1% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
3.2% inter symbols storage 4736736 bytes in 28513 claims
11.3% inter bytecode storage 16759588 bytes in 15 claims
3.2% inter symbols storage 4736864 bytes in 28514 claims
11.3% inter bytecode storage 16759084 bytes in 15 claims
4.2% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims
1.2% instance-of-kind counting 1790244 bytes in 1 claim
@ -285,5 +285,5 @@ Total memory consumption was 144475K = 141 MB
---- code generation workspace for objects 3560 bytes in 19 claims
0.1% emitter array storage 290944 bytes in 2081 claims
-139.-3% was overhead - -206185760 bytes = -201353K = -196 MB
-139.-3% was overhead - -206199928 bytes = -201367K = -196 MB

View file

@ -1,31 +1,31 @@
<s-literal> hits 2133/24718 nti 19 constraint (none) extremes [1, infinity)
<s-literal> hits 2133/24726 nti 19 constraint (none) extremes [1, infinity)
English:
(@1)<cardinal-number>=1
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
(@1)minus (@2)<cardinal-number>=1
(hits 0/1456) constraint DS = {19} extremes [2, 2]
(hits 0/1454) constraint DS = {19} extremes [2, 2]
(@1)hexadecimal (@2)<hexadecimal-number>=1
(hits 0/1456) constraint DS = {19} extremes [2, 2]
(hits 0/1454) constraint DS = {19} extremes [2, 2]
(@1)binary (@2)<binary-number>=1
(hits 0/1456) constraint DS = {19} extremes [2, 2]
(hits 0/1454) constraint DS = {19} extremes [2, 2]
(@1)octal (@2)<octal-number>=1
(hits 0/1456) constraint DS = {19} extremes [2, 2]
(hits 0/1454) constraint DS = {19} extremes [2, 2]
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
(hits 274/802) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {19} extremes [4, 4]
(hits 274/799) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {19} extremes [4, 4]
(@1)<quoted-text>=1
(hits 1577/5760) (matched: 'Can be used for objects which are purely
(hits 1577/5762) (matched: 'Can be used for objects which are purely
conceptual, like ideas, or are needed for internal book-keeping.') constraint (none) extremes [1, 1]
<s-literal-real-number>=1
(hits 11/10337) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(hits 11/10341) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(@1)<s-literal-truth-state>=1
(hits 100/367) (matched: 'false') constraint CS = {13} extremes [1, 1]
(hits 100/485) (matched: 'false') constraint CS = {13} extremes [1, 1]
<s-literal-list>=1
(hits 0/3225) constraint DS = {15} extremes [2, infinity)
(hits 0/3401) constraint DS = {15} extremes [2, infinity)
(@1)unicode (@2)( <s-unicode-character>=1 (@-1))
(hits 0/1576) constraint DS = {19} extremes [4, infinity)
(hits 0/1575) constraint DS = {19} extremes [4, infinity)
(@1)unicode <s-unicode-character>=1
(hits 0/3654) constraint DS = {19} extremes [2, infinity)
(hits 0/3637) constraint DS = {19} extremes [2, infinity)
<s-literal-time>=1
(hits 0/3963) constraint DW = {16, 17, 18} extremes [2, 5]
(hits 0/3960) constraint DW = {16, 17, 18} extremes [2, 5]
<s-literal-unit-notation>=1
(hits 0/10226) constraint (none) extremes [1, infinity)
(hits 0/10230) constraint (none) extremes [1, infinity)

View file

@ -1,21 +1,21 @@
100.0% in inform7 run
67.5% in compilation to Inter
45.9% in //Sequence::undertake_queued_tasks//
4.7% in //MajorNodes::pre_pass//
3.2% in //MajorNodes::pass_1//
66.5% in compilation to Inter
44.7% in //Sequence::undertake_queued_tasks//
5.0% in //MajorNodes::pre_pass//
3.6% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.4% in //RTKindConstructors::compile//
1.4% in //RTPhrasebook::compile_entries//
1.0% in //Sequence::lint_inter//
0.7% in //ImperativeDefinitions::compile_first_block//
0.3% in //CompletionModule::compile//
0.3% in //ImperativeDefinitions::compile_first_block//
0.3% in //MajorNodes::pass_2//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //World::stage_V//
5.1% not specifically accounted for
26.6% in running Inter pipeline
8.7% in step 14/15: generate inform6 -> auto.inf
26.9% in running Inter pipeline
9.0% in step 14/15: generate inform6 -> auto.inf
6.9% in step 5/15: load-binary-kits
5.4% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
@ -24,5 +24,5 @@
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
2.2% not specifically accounted for
5.1% in supervisor
5.8% in supervisor
0.8% not specifically accounted for

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"needs": [ {
"need": {

View file

@ -89,9 +89,9 @@ ph_scenetimesincebegan ph_scenetimesinceended ph_scenetimewhenbegan ph_scenetime
ph_hashappened ph_hasnothappened ph_hasended ph_hasnotended _ WI_10_4 "10.4" "10.4. During scenes"
LINKINGSCENES _ WI_10_5 "10.5" "10.5. Linking scenes together"
ph_directoractive ph_directorpassive ph_dialoguethisturn _ WI_11_5 "11.5" "11.5. When the director is active"
ph_performbeat ph_dialogueintervenes ph_dialogueintervenesled ph_listofspeakers ph_firstspeaker ph_showmebeat ph_makelive ph_makedead ph_clearsubjects ph_getlivelist ph_setlivelist _ WI_11_6 "11.6" "11.6. Managing dialogue beats"
ph_textualcontent _ WI_11_9 "11.9" "11.9. Managing dialogue lines"
ph_dialoguechoices _ WI_11_11 "11.11" "11.11. Dialogue choices"
ph_performbeat ph_dialogueintervenes ph_dialogueintervenesled ph_listofspeakers ph_firstspeaker ph_showmebeat ph_makelive ph_makedead ph_clearsubjects ph_getlivelist ph_setlivelist _ WI_11_7 "11.7" "11.7. Managing dialogue beats"
ph_textualcontent _ WI_11_10 "11.10" "11.10. Managing dialogue lines"
ph_dialoguechoices _ WI_11_12 "11.12" "11.12. Dialogue choices"
PHRASES ph_nothing _ WI_12_1 "12.1" "12.1. What are phrases?"
PM_BareTo _ WI_12_2 "12.2" "12.2. The phrasebook"
PM_SaySlashed PM_AdjacentTokens PM_PhraseTooLong PM_TokenMisunderstood PM_BadTypeIndication PM_TokenWithNestedBrackets PM_TokenWithEmptyBrackets PM_TokenWithoutCloseBracket PM_TokenWithoutOpenBracket _ WI_12_3 "12.3" "12.3. Pattern matching"

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture16Kit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"compatibility": "16-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture32Kit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"compatibility": "32-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "DialogueKit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"activates": [ "dialogue" ],
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6X63"
"version": "10.2.0-beta+6X64"
},
"needs": [ {
"need": {

File diff suppressed because one or more lines are too long

View file

@ -1,11 +1,11 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 11 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8538 words long.
I've also read version 2 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 34998 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_KindUnalterable
>--> You wrote 'A person is a kind of room' (source text, line 2), but that
seems to contradict 'A person is a kind of thing' (the Standard Rules, line 130),
seems to contradict 'A person is a kind of thing' (the Standard Rules, line 132),
as a room and a thing are incompatible. (If a room were a kind of a thing
or vice versa there'd be no problem, but they aren't.)
Inform 7 has finished.

View file

@ -1,11 +1,11 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 11 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8473 words long.
I've also read version 2 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35036 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_KindsCircular
>--> You wrote 'A person is a kind of animal' (source text, line 3), but that
seems to contradict 'An animal is a kind of person' (the Standard Rules, line 355),
seems to contradict 'An animal is a kind of person' (the Standard Rules, line 357),
as it would make a circularity with an animal and a thing each being kinds
of the other.
Inform 7 has finished.

View file

@ -1,11 +0,0 @@
Inform 7 build 6L26 has started.
I've now read your source text, which is 0 words long.
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
Problem__ PM_NoStartRoom
>--> There doesn't seem to be any location in this story, so there's nowhere
for the player to begin. This may be because I have misunderstood what was
meant to be a room and what wasn't: I only know something is a room if you
tell me explicitly ('The Observatory is a room') or if you imply it by
giving map directions ('East of the Observatory is the Planetarium').
Inform 7 has finished: 17 centiseconds used.

View file

@ -1,3 +0,0 @@
Problem: PM_NoStartRoom

View file

@ -0,0 +1,12 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 6 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_StageNotRoomable
>--> You wrote 'The player is on the Stage' (source text, line 1), but the
Stage is called 'Stage' and is in a story with no declared rooms, so I
think it ought to be the room in which everything happens. However, that
seems to be contradicted by this sentence, which implies that 'Stage'
definitely isn't a room.
Inform 7 has finished.

View file

@ -0,0 +1,3 @@
Problem: PM_StageNotRoomable
The player is on the Stage.

View file

@ -1,8 +1,8 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 12 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8473 words long.
I've also read version 2 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35036 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_TransposedNegationPair
>--> In 'A door is either opaque or transparent' (source text, line 3), you
proposed to set up the properties 'opaque' and 'transparent' as opposites
@ -10,7 +10,7 @@ Problem__ PM_TransposedNegationPair
opposites, but the other way around. (This matters because it affects
whether things not explicitly said to be either should be opaque or
transparent. Here you imply transparent is the default, but in the previous
declaration 'A container can be transparent or opaque' (the Standard Rules, line 266),
declaration 'A container can be transparent or opaque' (the Standard Rules, line 268),
opaque was.) Putting these two property names the other way around should
fix it.
Inform 7 has finished.

View file

@ -1,13 +1,13 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 10 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8473 words long.
I've also read version 2 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35036 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_TransposedNegationPair2
>--> In 'A door can be opaque' (source text, line 3), you proposed to set up
the property 'opaque' as something which is sometimes held and sometimes
not, but by default is not. However, that clashes with the existing
declaration 'A container can be transparent or opaque' (the Standard Rules, line 266),
declaration 'A container can be transparent or opaque' (the Standard Rules, line 268),
which establishes that opaque is the opposite of transparent, and is held
by default. (The simplest way to fix this is just to change 'opaque' to
'transparent' in your sentence here.)

View file

@ -1,14 +1,14 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 46 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8479 words long.
I've also read version 2 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35062 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_VarKOVClash
In Part Three - Variables and Rulebooks, Chapter 1 - Variables, Section 3 -
Used when ruling on accessibility in the extension Standard Rules by Graham
Nelson:
>--> You wrote 'The container in question is an object that varies' (the
Standard Rules, line 472): but the name supplied for this new variable is a
Standard Rules, line 474): but the name supplied for this new variable is a
piece of text which is not available because it has a rival meaning
already, as a result of definitions made elsewhere. (Sometimes these are
indirect: for instance, defining a column in a table called 'question' can
@ -19,7 +19,7 @@ In Part Three - Variables and Rulebooks, Chapter 1 - Variables, Section 3 -
defined which might cause this clash.
Problem__ PM_VarKOVClash
>--> You wrote 'The supporter in question is an object that varies' (the
Standard Rules, line 473): again, the name supplied for this new variable
Standard Rules, line 475): again, the name supplied for this new variable
is a piece of text which is not available because it has a rival meaning
already.
Inform 7 has finished.

View file

@ -1,12 +1,12 @@
Inform 7 v10.2.0 has started.
I've now read your source text, which is 15 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8479 words long.
I've also read version 2 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35062 words long.
I've also read version 2 of Basic Inform by Graham Nelson, which is 8488 words long.
I've also read version 10.2.0 of English Language by Graham Nelson, which is 2330 words long.
I've also read version 7 of Standard Rules by Graham Nelson, which is 35330 words long.
Problem__ PM_VariableContradiction
>--> You wrote 'The command prompt is "What do you want to do? >"' (source
text, line 3), but in another sentence 'The command prompt is ">"' (the
Standard Rules, line 497): but this looks like a contradiction, because the
Standard Rules, line 499): but this looks like a contradiction, because the
initial value of this variable seems to be being set in each of these
sentences, but with a different outcome.
Inform 7 has finished.

View file

@ -303,6 +303,14 @@ use_option *NewUseOptions::parse_uo(wording OW) {
return NULL;
}
use_option *NewUseOptions::find_uo(int notable_code) {
use_option *uo;
LOOP_OVER(uo, use_option)
if (uo->notable_option_code == notable_code)
return uo;
return NULL;
}
@ The following sets an option.
=

View file

@ -65,6 +65,14 @@ parsed_use_option_setting *UseOptions::new_puos(wording W) {
return puos;
}
parsed_use_option_setting *UseOptions::force_setting(int notable_code) {
use_option *uo = NewUseOptions::find_uo(notable_code);
if (uo == NULL) return NULL;
parsed_use_option_setting *puos = UseOptions::new_puos(EMPTY_WORDING);
puos->resolved_option = uo;
return puos;
}
parsed_use_option_setting *UseOptions::parse_setting(wording W) {
<use-setting>(W);
parsed_use_option_setting *puos = <<rp>>;

View file

@ -26,6 +26,7 @@ meaningful only for works of IF and are inert for Basic Inform projects.
@e SLOW_ROUTE_FINDING_UO
@e DICTIONARY_RESOLUTION_UO
@e NO_AUTO_PLURAL_NAMES_UO
@e NAMELESS_ROOM_DESCRIPTIONS_UO
@ Note that Inform recognises these by their English names, so there would be no
need to translate this to other languages.
@ -45,7 +46,8 @@ need to translate this to other languages.
index figure thumbnails | ==> { INDEX_FIGURE_THUMBNAILS_UO, - }
fast route-finding | ==> { FAST_ROUTE_FINDING_UO, - }
slow route-finding | ==> { SLOW_ROUTE_FINDING_UO, - }
dictionary resolution ==> { DICTIONARY_RESOLUTION_UO, - }
dictionary resolution | ==> { DICTIONARY_RESOLUTION_UO, - }
nameless room descriptions ==> { NAMELESS_ROOM_DESCRIPTIONS_UO, - }
@ Some of the pragma-like settings are stored here:

View file

@ -1075,26 +1075,27 @@ Carry out looking (this is the declare everything unmentioned rule):
now the item is not mentioned.
Carry out looking (this is the room description heading rule):
say bold type;
if the visibility level count is 0:
begin the printing the name of a dark room activity;
if handling the printing the name of a dark room activity:
say "Darkness" (A);
end the printing the name of a dark room activity;
otherwise if the visibility ceiling is the location:
say "[visibility ceiling]";
otherwise:
say "[The visibility ceiling]";
say roman type;
let intermediate level be the visibility-holder of the actor;
repeat with intermediate level count running from 2 to the visibility level count:
if the intermediate level is a supporter or the intermediate level is an animal:
say " (on [the intermediate level])" (B);
if nameless room descriptions option is not active:
say bold type;
if the visibility level count is 0:
begin the printing the name of a dark room activity;
if handling the printing the name of a dark room activity:
say "Darkness" (A);
end the printing the name of a dark room activity;
otherwise if the visibility ceiling is the location:
say "[visibility ceiling]";
otherwise:
say " (in [the intermediate level])" (C);
let the intermediate level be the visibility-holder of the intermediate level;
say line break;
say run paragraph on with special look spacing.
say "[The visibility ceiling]";
say roman type;
let intermediate level be the visibility-holder of the actor;
repeat with intermediate level count running from 2 to the visibility level count:
if the intermediate level is a supporter or the intermediate level is an animal:
say " (on [the intermediate level])" (B);
otherwise:
say " (in [the intermediate level])" (C);
let the intermediate level be the visibility-holder of the intermediate level;
say line break;
say run paragraph on with special look spacing.
Carry out looking (this is the room description body text rule):
if the visibility level count is 0:

View file

@ -71,6 +71,12 @@ as well as their parsing from text.
Use maximum things understood at once of at least 100 translates as the
configuration value MULTI_OBJ_LIST_SIZE in WorldModelKit.
@ This is used automatically in stories where no room is declared, and
suppresses the boldface room name in room descriptions.
=
Use nameless room descriptions translates as a configuration flag.
@ These are more straightforwardly ways to configure the command parser:
=

View file

@ -469,13 +469,58 @@ container, and we might need to look at other sentences -- say, establishing
that Y is the destination of a map connection -- to see which.
=
instance *implied_Stage_room = NULL;
int Spatial::spatial_stage_I(void) {
instance *I;
instance *I, *potential_stage_room = NULL;
kind *potential_stage_room_kind = K_thing;
parse_node *potential_stage_room_kind_at = NULL;
LOOP_OVER_INSTANCES(I, K_object)
@<Perform kind determination for this object@>;
int count = 0;
LOOP_OVER_INSTANCES(I, K_object)
if (Spatial::object_is_a_room(I))
count++;
if (count == 0) @<Create an implied room@>;
if (potential_stage_room) {
LOGIF(KIND_CHANGES, "Setting kind of potential implied room $O as %u\n",
potential_stage_room, potential_stage_room_kind);
Propositions::Abstract::assert_kind_of_instance(potential_stage_room, potential_stage_room_kind);
}
return FALSE;
}
@
=
<implied-room-name> ::=
stage
@<Create an implied room@> =
if (potential_stage_room) {
if ((potential_stage_room_kind != K_container) &&
(potential_stage_room_kind != K_room)) {
current_sentence = potential_stage_room_kind_at;
StandardProblems::object_problem_at_sentence(_p_(PM_StageNotRoomable),
potential_stage_room,
"is called 'Stage' and is in a story with no declared rooms, "
"so I think it ought to be the room in which everything happens. "
"However, that seems to be contradicted by this sentence",
"which implies that 'Stage' definitely isn't a room.");
} else {
potential_stage_room_kind = K_room;
implied_Stage_room = potential_stage_room;
}
} else {
wording W = Feeds::feed_text(I"Stage");
pcalc_prop *prop = Propositions::Abstract::to_create_something(K_room, W);
Assert::true(prop, CERTAIN_CE);
implied_Stage_room = Instances::latest();
}
parsed_use_option_setting *puos =
UseOptions::force_setting(NAMELESS_ROOM_DESCRIPTIONS_UO);
if (puos) NewUseOptions::set(puos);
@ Our main problem in what follows is caused by "in" being so ambiguous,
or perhaps it might be said that the real problem is that we choose to
distinguish between rooms and containers on a world-modelling level -- when it
@ -505,6 +550,14 @@ is the "geography choice" for its kind.
kind *designers_choice = NULL;
@<Determine the designer choice@>;
if ((<implied-room-name>(Instances::get_name(I, FALSE))) &&
(potential_stage_room == NULL)) {
potential_stage_room = I;
if (designers_choice) {
potential_stage_room_kind = designers_choice;
potential_stage_room_kind_at = Instances::get_kind_set_sentence(potential_stage_room);
}
}
kind *geography_choice = NULL;
inference *geography_inference = NULL;
@ -515,7 +568,8 @@ is the "geography choice" for its kind.
(Kinds::eq(geography_choice, designers_choice) == FALSE))
@<Attempt to reconcile the two choices@>;
if (Kinds::eq(Instances::to_kind(I), K_object))
if ((I != potential_stage_room) &&
(Kinds::eq(Instances::to_kind(I), K_object)))
Propositions::Abstract::assert_kind_of_instance(I, K_thing);
@ By this point, any explicit information is reflected in the hierarchy of
@ -579,9 +633,16 @@ when it's legitimately a door.
@<Issue a problem message, since the choices are irreconcilable@>;
@<Accept the geography choice, since it only refines what we already know@> =
LOGIF(KIND_CHANGES, "Accepting geography choice of kind of $O as %u\n",
I, geography_choice);
Propositions::Abstract::assert_kind_of_instance(I, geography_choice);
if (I == potential_stage_room) {
LOGIF(KIND_CHANGES, "Noting potential geography choice of kind of $O as %u\n",
I, geography_choice);
potential_stage_room_kind = geography_choice;
potential_stage_room_kind_at = Inferences::where_inferred(geography_inference);
} else {
LOGIF(KIND_CHANGES, "Accepting geography choice of kind of $O as %u\n",
I, geography_choice);
Propositions::Abstract::assert_kind_of_instance(I, geography_choice);
}
@<Issue a problem message, since the choices are irreconcilable@> =
LOG("Choices: designer %u, geography %u.\n", designers_choice, geography_choice);
@ -757,11 +818,13 @@ object under investigation.
@<Find the whereabouts of something here@> =
if (Spatial::object_is_a_room(whereabouts) == FALSE) whereabouts = NULL;
if (whereabouts == NULL) whereabouts = implied_Stage_room;
if (whereabouts == NULL) {
parse_node *here_sentence =
Inferences::where_inferred(parent_setting_inference);
@<Set the whereabouts to the last discussed room prior to this inference being drawn@>;
if (whereabouts == NULL) {
current_sentence = here_sentence;
StandardProblems::object_problem_at_sentence(_p_(PM_NoHere),
I,
@ -1068,9 +1131,7 @@ extensive maps.
@<Assert room and thing indicator properties@> =
P_mark_as_room = EitherOrProperties::new_nameless(I"mark_as_room");
// RTProperties::recommend_storing_as_attribute(P_mark_as_room, TRUE);
P_mark_as_thing = EitherOrProperties::new_nameless(I"mark_as_thing");
// RTProperties::recommend_storing_as_attribute(P_mark_as_thing, TRUE);
instance *I;
LOOP_OVER_INSTANCES(I, K_object) {
if (Instances::of_kind(I, K_room))
@ -1083,9 +1144,7 @@ extensive maps.
@<Assert container and supporter indicator properties@> =
P_container = EitherOrProperties::new_nameless(I"container");
// RTProperties::recommend_storing_as_attribute(P_container, TRUE);
P_supporter = EitherOrProperties::new_nameless(I"supporter");
// RTProperties::recommend_storing_as_attribute(P_supporter, TRUE);
instance *I;
LOOP_OVER_INSTANCES(I, K_object) {
if (Instances::of_kind(I, K_container))
@ -1172,6 +1231,7 @@ empty.
=
int Spatial::spatial_stage_IV(void) {
if (Task::wraps_existing_storyfile()) {
if (implied_Stage_room) return FALSE;
instance *I;
LOOP_OVER_INSTANCES(I, K_object)
if (Spatial::object_is_a_room(I)) {

View file

@ -20,15 +20,21 @@ is so marked).
heading *dialogue_section_being_scanned = NULL;
dialogue_beat *previous_dialogue_beat = NULL;
dialogue_beat *current_dialogue_beat = NULL;
int dialogue_sections_are_present = FALSE;
void DialogueBeats::note_heading(heading *h) {
if (h->holds_dialogue) dialogue_section_being_scanned = h;
else dialogue_section_being_scanned = NULL;
previous_dialogue_beat = NULL;
current_dialogue_beat = NULL;
dialogue_sections_are_present = TRUE;
DialogueNodes::clear_precursors(0);
}
int DialogueBeats::dialogue_exists(void) {
return dialogue_sections_are_present;
}
@h Beats.
The following is called each time the cue paragraph for a new beat is found:
a whole paragraph, which might, for example, read:

View file

@ -177,7 +177,7 @@ void InnardsElement::index_options_in_force_from(OUTPUT_STREAM, tree_inventory *
break;
case OPTIONS_FILE_UO_ORIGIN:
Localisation::roman(OUT, LD, I"Index.Elements.In.SetAutomatically");
DocReferences::link(OUT, I"OPTIONSFILE"); break;
break;
case EXTENSION_UO_ORIGIN:
Localisation::roman_t(OUT, LD, I"Index.Elements.In.SetFrom",
Metadata::optional_textual(E, I"^credit"));

View file

@ -190,7 +190,7 @@ has been renamed:
"Standard 'deciding whether all include' rules don't apply to an actor."
([PR#113](https://github.com/ganelson/inform/pull/113))
- Cosmetic fixes not worth linking to (I7-2480, I7-2478, I7-2473, I7-2350, I7-2348, I7-2319, I7-2316, I7-2315, I7-2311, I7-2299, I7-2293, I7-2270, I7-2268, I7-2221, I7-2214, I7-2210, I7-2120)
- Cosmetic fixes not worth linking to (I7-2481, I7-2480, I7-2478, I7-2473, I7-2350, I7-2348, I7-2319, I7-2316, I7-2315, I7-2311, I7-2299, I7-2293, I7-2270, I7-2268, I7-2221, I7-2214, I7-2210, I7-2120)
## Bugs fixed but not from tracked reports

View file

@ -8,19 +8,11 @@ It's quite possible to implement a choice-based story entirely within the dialog
And it's then almost possible to have the source text consist only of a great big dialogue section, but not quite. We still need a room for the player to be in, which we'll call `Stage Set` here. And if there were other actors who spoke in the story, they'd also need to be created as `people` and put in this same room.
In this example, though, we'll make things look even less like traditional interactive fiction by suppressing the standard room description entirely. And as nobody speaks except the narrator, we don't need any `people` either.
In this example, though, we'll make things look even less like traditional interactive fiction by suppressing the standard room description entirely. And as nobody speaks except the narrator, we don't need any `people` either. We needn't even create a room: Inform will automatically make a room for the story to take place in, but players won't ever be aware of it.
{*}"Pure Choice"
Section 1 - The set, actors and props
The Stage Set is a room.
Instead of looking: do nothing instead.
Literally everything else is dialogue:
{**}Section 2 - The play (dialogue)
Section 1 - The play (dialogue)
(This is the starting beat.)

View file

@ -14,10 +14,6 @@ Here we've handled player interaction as an explicit choice system. It would be
Section 1 - Immediate context
Stage Set is a room.
Instead of looking: do nothing instead.
When play begins:
now the left hand status line is "Ferocity: [ferocity of the player]";
now the right hand status line is "Wounds: [damage of the player]"

View file

@ -41,13 +41,7 @@ So we just need to set the list up. We want to make a test-run of "Pure Choice"
Everything else here is the same as for the "Pure Choice" example:
{**}Section 2 - The set, actors and props
The Stage Set is a room.
Instead of looking: do nothing instead.
Section 3 - The play (dialogue)
{**}Section 2 - The play (dialogue)
(This is the starting beat.)

View file

@ -70,7 +70,9 @@ The exception is the Settings panel, which contains some preference settings for
Clicking the Go button translates the text in the Source panel into a computer program which enacts the interactive fiction, and automatically sets it going (in the Story panel, which opens as needed).
If the Source is empty of text, Inform will be unable to create anything: it needs at least one name of a location where the drama can unfold. For reasons of tradition, such locations are normally called "rooms", though people have used them to represent anything from grassy fields to states of mind and other metaphorical places.
All Inform stories take place in one or more "rooms". These need not be indoor locations, and can represent anything from grassy fields to states of mind. If we click Go when there's no text at all in the Source panel, Inform will perhaps surprisingly still make a story, though a very empty one. It will create a room for the story to take place in, and put the player in it, but nothing else will exist and there will be nothing to do or look at.
So instead we'll supply a title and a name for the opening room:
{*}"Midsummer Day"
@ -476,7 +478,7 @@ Newcomers will probably not need extensions for quite some while, let alone need
## Use options {PM_UONotNumerical} {PM_UnknownUseOption} {OPTIONS}
^^{use options} ^^{use (options...)+assert+} ^^{punctuation: comma: displaying serial comma} ^^^{punctuation: comma <-- comma} ^^{|,: displaying serial comma} ^^{scoring: enabling} ^^{descriptions (displayed): full-length room descriptions / abbreviated room descriptions} ^^{rooms+kind+: descriptions <-- descriptions (displayed): room descriptions} ^^{use options: catalogue: |American dialect} ^^{American dialect+useopt+} ^^{use options: catalogue: |the serial comma} ^^{serial comma+useopt+} ^^{use options: catalogue: |scoring} ^^{scoring+useopt+} ^^{use options: catalogue: |full-length room descriptions} ^^{full-length room descriptions+useopt+} ^^{use options: catalogue: |abbreviated room descriptions} ^^{abbreviated room descriptions+useopt+} ^^{use options: catalogue: |VERBOSE room descriptions} ^^{VERBOSE room descriptions+useopt+} ^^{use options: catalogue: |BRIEF room descriptions} ^^{BRIEF room descriptions+useopt+} ^^{use options: catalogue: |SUPERBRIEF room descriptions} ^^{SUPERBRIEF room descriptions+useopt+} ^^{use options: catalogue: |undo prevention} ^^{undo prevention+useopt+} ^^{>UNDO}
^^{use options} ^^{use (options...)+assert+} ^^{punctuation: comma: displaying serial comma} ^^^{punctuation: comma <-- comma} ^^{|,: displaying serial comma} ^^{scoring: enabling} ^^{descriptions (displayed): full-length room descriptions / abbreviated room descriptions} ^^{rooms+kind+: descriptions <-- descriptions (displayed): room descriptions} ^^{use options: catalogue: |American dialect} ^^{American dialect+useopt+} ^^{use options: catalogue: |the serial comma} ^^{serial comma+useopt+} ^^{use options: catalogue: |scoring} ^^{scoring+useopt+} ^^{use options: catalogue: |full-length room descriptions} ^^{full-length room descriptions+useopt+} ^^{use options: catalogue: |abbreviated room descriptions} ^^{abbreviated room descriptions+useopt+} ^^{use options: catalogue: |VERBOSE room descriptions} ^^{VERBOSE room descriptions+useopt+} ^^{use options: catalogue: nameless room descriptions} ^^{use options: catalogue: |BRIEF room descriptions} ^^{BRIEF room descriptions+useopt+} ^^{use options: catalogue: |SUPERBRIEF room descriptions} ^^{SUPERBRIEF room descriptions+useopt+} ^^{use options: catalogue: |undo prevention} ^^{undo prevention+useopt+} ^^{>UNDO}
One more preliminary. Inform has a small number of optional settings which affect the result of translating the source. The sentence:
@ -501,7 +503,11 @@ change the normal way room descriptions are shown: normally they are given in fu
Use brief room descriptions.
Use superbrief room descriptions.
The default is now ``VERBOSE``, but until 2010 it was ``BRIEF``.
The default is ``VERBOSE``. Another option affecting room descriptions is:
Use nameless room descriptions.
This suppresses the usual boldface printed name of a room which appears at the top of a description.
Next we have:
@ -5894,11 +5900,85 @@ The list of live conversational subjects is best thought of as pretty ephemeral,
Something to bear in mind is that the director tracks this list all of the time, even though it only uses it in active mode. So if it is switched into active mode having been passive up to now, it may be starting with some subjects already live.
## Entrances and exits
It's possible to write an entire story made of nothing but dialogue, beginning with a starting beat being performed, and then more beats flowing from that until the story ends. In a story like that, there's no need even to create any rooms. For example:
"Not much to say"
Section of conversation (dialogue)
(This is the starting beat.)
Narration: "Welcome!"
-- "Hello!"
-> end the story saying "A world full of promise."
-- "Goodbye."
-> end the story saying "A missed opportunity."
This is a complete story, though not much of one, of course. It does take place in a room, because Inform automatically creates a room called `Stage` where the above takes place, but this is never visible to the player since the `Use nameless room descriptions` option is automatically selected.
Characters can be created and introduced by being moved to the `Stage` as needed. Here, `Raphael` is off-stage at the start of play, but is moved into play by the opening line of narration, thanks to the stage direction `now Raphael is on-stage`:
"Perugia 1508"
Raphael is a man.
Section of conversation (dialogue)
(This is the starting beat.)
Narration (now Raphael is on-stage): "Raffaello Sanzio da Urbino approaches from the Tiber bridge."
Raphael: "No, no, I really can't take on one more thing. The Holy Father wants another Madonna by Friday."
-- "And I want an Adoration of the Magi right now."
-> end the story saying "You somehow end up 852 ducats the poorer."
-- "Be reasonable, Raff."
Raphael: "You couldn't afford me, Primo."
-> end the story saying "You somehow end up with a chalk sketch of three indeterminate-aged women which is, nevertheless, another casual work of genius."
If `Raphael` had not been moved to the `Stage`, he could not have spoken, because he wasn't in earshot. Multiple people can enter at the same moment:
Narration (now Raphael is on-stage; now Leonardo is on-stage): "Raffaello Sanzio da Urbino approaches from the Tiber bridge, arguing intensely with Leonardo di ser Piero da Vinci."
Or indeed:
Narration (now everyone is on-stage): "Raffaello Sanzio da Urbino approaches from the Tiber bridge, flanked by a knot of his pupils and rivals."
Similarly, `now X is off-stage` is equivalent to an exit for `X`.
The timing here is a little important. This does not work as expected:
Michelangelo (now Michelangelo is on-stage): "Sorry, didn't mean to drip paint on you."
The trouble is that Michelangelo can only perform the line if he is on-stage, but he only becomes on-stage through the line being performed: catch-22. He had better arrive in some earlier narration, or after somebody else has spoken. On the other hand, this does work:
Raphael (now Raphael is off-stage): "'I'm expected in Città di Castello,' Raff says, turning on his heel and striding away."
Here the timing works in our favour, because Raphael performs the line and is then taken off-stage by the `now`.
This way of marshalling our characters is probably best suited to single-room stories, or those which (as in the examples above) don't even specify a single room. If we have a world of multiple locations, it's better to say exactly where the characters go to and come from:
Raphael (now Raphael is in Saint Nicholas): "'I'm expected in Città di Castello,' Raff says, turning on his heel and striding away."
And if we have joined multiple rooms together into a map, we can even have the actors walk around this map:
Raphael (before going northwest): "'I'm expected in Città di Castello,' Raff says, turning on his heel and striding away."
## Managing dialogue beats
So, then, there are several ways to manage dialogue. It's possible to write an entire story made of nothing but dialogue, beginning with a starting beat being performed, and then more beats flowing from that until the story ends. Or it's also possible to put the dialogue director into active mode, and let the automatics do everything, so that conversation happens whenever appropriate in the course of play.
There are many ways to manage dialogue. At one extreme we can put the dialogue director into active mode, and let the automatics do everything, so that conversation happens whenever appropriate in the course of play. Or we can keep it passive, but then run the entire story as one big script of dialogue.
If we don't want either of those, though, and want to manage all the dialogue by hand using rules, Inform provides an extensive set of phrases to help with that. For example:
If we don't want either of those, though, and want a turn-based story in which there's just occasional dialogue which we will control explicitly as the author, Inform provides an extensive set of phrases to help with that. For example:
"Just Idol Talk"

View file

@ -1,15 +1,15 @@
Size of lexicon: 3223 excerpt meanings
Stored among 860 words out of total vocabulary of 10708
724 words have a start list: longest belongs to report (with 296 meanings)
Size of lexicon: 3224 excerpt meanings
Stored among 861 words out of total vocabulary of 10710
725 words have a start list: longest belongs to report (with 296 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to matches (with 6 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)
Number of attempts to retrieve: 110679
of which unsuccessful: 92500
of which successful: 18179
Number of attempts to retrieve: 110742
of which unsuccessful: 92556
of which successful: 18186
Total attempts to match against excerpt meanings: 290848
of which, total with incorrect hash codes: 267850
of which, total with correct hash codes: 22998
of which, total which matched: 19950
Total attempts to match against excerpt meanings: 290908
of which, total with incorrect hash codes: 267902
of which, total with correct hash codes: 23006
of which, total which matched: 19957

View file

@ -1,12 +1,12 @@
adjective: 142 items
article: 2 items
noun: 2414 items
noun: 2415 items
pronoun: 8 items
preposition: 274 items
determiner: 22 items
verb: 109 items
verb_form: 388 items
total in all categories: 3359
total in all categories: 3360
adjective: 'even'
adjective: 'odd'
@ -765,6 +765,7 @@ noun: proper: 'default route-finding'
noun: proper: 'fast route-finding'
noun: proper: 'slow route-finding'
noun: proper: 'maximum things understood at once'
noun: proper: 'nameless room descriptions'
noun: proper: 'manual pronouns'
noun: proper: 'undo prevention'
noun: proper: 'unabbreviated object names'