mirror of
https://github.com/ganelson/inform.git
synced 2024-07-18 06:54:26 +03:00
614 lines
74 KiB
HTML
614 lines
74 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Temporal Map</title>
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body>
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-src/Figures/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Compiler Webs</h2><ul>
|
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
<li><a href="../inform7/index.html">inform7</a></li>
|
|
<li><a href="../inter/index.html">inter</a></li>
|
|
</ul><h2>Inbuild Modules</h2><ul>
|
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
</ul><h2>Inform7 Modules</h2><ul>
|
|
<li><a href="../core-module/index.html">core</a></li>
|
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
|
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
<li><a href="../problems-module/index.html">problems</a></li>
|
|
<li><a href="../index-module/index.html">index</a></li>
|
|
</ul><h2>Inter Modules</h2><ul>
|
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
<li><a href="../building-module/index.html">building</a></li>
|
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
</ul><h2>Shared Modules</h2><ul>
|
|
<li><a href="../arch-module/index.html">arch</a></li>
|
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
<li><a href="../words-module/index.html">words</a></li>
|
|
<li><a href="../html-module/index.html">html</a></li>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
|
|
<!--Weave of 'Temporal Map' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>Temporal Map</b></li></ul><p class="purpose">Parallel to the World index of space is the Scenes index of time, and in this section we render it as HTML.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP2">§2. Table of Scenes</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>The mapping of time is on the one hand simpler than the mapping of space
|
|
since there is only one dimension, but on the other hand more complex since
|
|
scenes can be multiply present at the same instant of time (whereas rooms
|
|
cannot be multiply present at the same point in space). We resolve this
|
|
with a notation which takes a little bit of on-screen explanation, but
|
|
seems natural enough to learn in practice.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::index<button class="popup" onclick="togglePopup('usagePopup356')">...<span class="popuptext" id="usagePopup356">Usage of <b>PL::Scenes::Index::index</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">nr</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">scene</span><span class="plain">);</span>
|
|
<span class="reserved">scene</span><span class="plain"> **</span><span class="identifier">sorted</span><span class="plain"> = </span><span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="identifier">nr</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">scene</span><span class="plain"> *), </span><span class="identifier">INDEX_SORTING_MREASON</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Sort the scenes</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
|
|
|
<<span class="cwebmacro">Tabulate the scenes</span> <span class="cwebmacronumber">1.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Show the legend for the scene table icons</span> <span class="cwebmacronumber">1.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Give details of each scene in turn</span> <span class="cwebmacronumber">1.5</span>><span class="plain">;</span>
|
|
|
|
<span class="identifier">Memory::I7_array_free</span><span class="plain">(</span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">INDEX_SORTING_MREASON</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">scene</span><span class="plain"> *));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::index_rules<button class="popup" onclick="togglePopup('usagePopup357')">...<span class="popuptext" id="usagePopup357">Usage of <b>PL::Scenes::Index::index_rules</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="identifier">Rulebooks::index_scene</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">); </span><span class="comment"> rules in generic scene-ending rulebooks</span>
|
|
<<span class="cwebmacro">Show the generic scene-change rules</span> <span class="cwebmacronumber">1.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>As usual, we sort with the C library's <code class="display"><span class="extract">qsort</span></code>.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Sort the scenes</span> <span class="cwebmacronumber">1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain">) </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">++] = </span><span class="identifier">sc</span><span class="plain">;</span>
|
|
<span class="identifier">qsort</span><span class="plain">(</span><span class="identifier">sorted</span><span class="plain">, (</span><span class="identifier">size_t</span><span class="plain">) </span><span class="identifier">nr</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">scene</span><span class="plain"> *), </span><span class="functiontext"><a href="#SP4">PL::Scenes::Index::compare_scenes</a></span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_2"></a><b>§1.2. </b>The sorted ordering is used as-is later on, when we get to the details, but
|
|
for the tabulation it's refined further. First we have the start-of-play
|
|
scenes, in sorted order; then scenes with a condition for their beginning
|
|
(end 0), in sorted order; then scenes that don't, and which haven't been
|
|
covered as a result of one of the earlier ones, also in sorted order. (This
|
|
third category is usually empty except for scenes the author has forgotten
|
|
about and created but never made use of.)
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Tabulate the scenes</span> <span class="cwebmacronumber">1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">start_of_play</span><span class="plain">) || (</span><span class="identifier">sc</span><span class="plain"> == </span><span class="identifier">SC_entire_game</span><span class="plain">))</span>
|
|
<span class="functiontext"><a href="#SP2">PL::Scenes::Index::index_from_scene</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">START_OF_PLAY_END</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition</span><span class="plain">[0]) && (</span><span class="identifier">sc</span><span class="plain"> != </span><span class="identifier">SC_entire_game</span><span class="plain">))</span>
|
|
<span class="functiontext"><a href="#SP2">PL::Scenes::Index::index_from_scene</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">START_OF_PLAY_END</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="functiontext"><a href="#SP2">PL::Scenes::Index::index_from_scene</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">NEVER_HAPPENS_END</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_3"></a><b>§1.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Show the legend for the scene table icons</span> <span class="cwebmacronumber">1.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Legend: "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WPB"</span><span class="plain">, </span><span class="string">"Begins when play begins"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WhenC"</span><span class="plain">, </span><span class="string">"can begin whenever some condition holds"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Segue"</span><span class="plain">, </span><span class="string">"follows when a previous scene ends"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Simul"</span><span class="plain">, </span><span class="string">"begins simultaneously"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WNever"</span><span class="plain">, </span><span class="string">"never begins"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"ENever"</span><span class="plain">, </span><span class="string">"never ends"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"; "</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_legend</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Recurring"</span><span class="plain">, </span><span class="string">"recurring (can happen more than once)"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">". <i>Scene names are italicised when and if they appear for a second "</span>
|
|
<span class="string">"or subsequent time because the scene can begin in more than one way</i>."</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_4"></a><b>§1.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Show the generic scene-change rules</span> <span class="cwebmacronumber">1.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::anchor</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"SRULES"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>General rules applying to scene changes</b>"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="identifier">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"When a scene begins"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="identifier">WHEN_SCENE_BEGINS_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">Rulebooks::index_rules_box</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"When a scene ends"</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="identifier">built_in_rulebooks</span><span class="plain">[</span><span class="identifier">WHEN_SCENE_ENDS_RB</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5"></a><b>§1.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Give details of each scene in turn</span> <span class="cwebmacronumber">1.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Index::anchor</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"SDETAILS"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"hr"</span><span class="plain">);</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<<span class="cwebmacro">Give details of a specific scene</span> <span class="cwebmacronumber">1.5.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1"></a><b>§1.5.1. </b>The curious condition about end 1 here is to avoid printing "Ends: Never"
|
|
in cases where fancier ends for the scene exist, so that the scene can, in
|
|
fact, end.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Give details of a specific scene</span> <span class="cwebmacronumber">1.5.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<<span class="cwebmacro">Index the name and recurrence status of the scene</span> <span class="cwebmacronumber">1.5.1.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain"> == </span><span class="identifier">SC_entire_game</span><span class="plain">) </span><<span class="cwebmacro">Explain the Entire Game scene</span> <span class="cwebmacronumber">1.5.1.2</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">end</span><span class="plain">=0; </span><span class="identifier">end</span><span class="plain"><</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">no_ends</span><span class="plain">; </span><span class="identifier">end</span><span class="plain">++) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">end</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) && (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">no_ends</span><span class="plain"> > </span><span class="constant">2</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition</span><span class="plain">[1]==</span><span class="identifier">NULL</span><span class="plain">) && (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_scene</span><span class="plain">[1]==</span><span class="identifier">NULL</span><span class="plain">))</span>
|
|
<span class="reserved">continue</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the conditions for this scene end to occur</span> <span class="cwebmacronumber">1.5.1.4</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the rules which apply when this scene end occurs</span> <span class="cwebmacronumber">1.5.1.5</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">end</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><<span class="cwebmacro">Index the rules which apply during this scene</span> <span class="cwebmacronumber">1.5.1.3</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5">§1.5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_1"></a><b>§1.5.1.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the name and recurrence status of the scene</span> <span class="cwebmacronumber">1.5.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"hanging"</span><span class="plain">);</span>
|
|
<span class="identifier">Index::anchor_numbered</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>The <i>%+W</i> scene</b>"</span><span class="plain">, </span><span class="functiontext"><a href="3-scn.html#SP13">PL::Scenes::get_name</a></span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">));</span>
|
|
<span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">scene_declared_at</span><span class="plain">)));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">World::Inferences::get_EO_state</span><span class="plain">(</span>
|
|
<span class="identifier">Instances::as_subject</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">as_instance</span><span class="plain">), </span><span class="identifier">P_recurring</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">)</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;&nbsp;<i>recurring</i>"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1">§1.5.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_2"></a><b>§1.5.1.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Explain the Entire Game scene</span> <span class="cwebmacronumber">1.5.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"The Entire Game scene is built-in. It is going on whenever play is "</span>
|
|
<span class="string">"going on. (It is recurring so that if the story ends, but then resumes, "</span>
|
|
<span class="string">"it too will end but then begin again.)"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1">§1.5.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_3"></a><b>§1.5.1.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the rules which apply during this scene</span> <span class="cwebmacronumber">1.5.1.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rbc</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">rulebook</span><span class="plain"> *</span><span class="identifier">rb</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">rulebook</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Rulebooks::is_empty</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">, </span><span class="identifier">Rulebooks::scene_context</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">)) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rbc</span><span class="plain">++ == </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"hanging"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>During this scene:</i>"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="string">"hanging"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>%+W</i>"</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-></span><span class="identifier">primary_name</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ignore_me</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">Rulebooks::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">, </span><span class="string">""</span><span class="plain">, </span><span class="identifier">Rulebooks::scene_context</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">), &</span><span class="identifier">ignore_me</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1">§1.5.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_4"></a><b>§1.5.1.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the conditions for this scene end to occur</span> <span class="cwebmacronumber">1.5.1.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"hanging"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>%s "</span><span class="plain">, (</span><span class="identifier">end</span><span class="plain">==0)?</span><span class="string">"Begins"</span><span class="plain">:</span><span class="string">"Ends"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">end</span><span class="plain"> >= </span><span class="constant">2</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W "</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">-></span><span class="element">end_names</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">]);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"when:</i> "</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the play-begins condition</span> <span class="cwebmacronumber">1.5.1.4.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index the I7 condition for a scene to end</span> <span class="cwebmacronumber">1.5.1.4.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Index connections to other scene ends</span> <span class="cwebmacronumber">1.5.1.4.3</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>never</b>"</span><span class="plain">);</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1">§1.5.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_4_1"></a><b>§1.5.1.4.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the play-begins condition</span> <span class="cwebmacronumber">1.5.1.4.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">end</span><span class="plain">==0) && (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">start_of_play</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>or when:</i> "</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>play begins</b>"</span><span class="plain">);</span>
|
|
<span class="identifier">count</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1_4">§1.5.1.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_4_2"></a><b>§1.5.1.4.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the I7 condition for a scene to end</span> <span class="cwebmacronumber">1.5.1.4.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">]) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>or when:</i> "</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">]));</span>
|
|
<span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition_set</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">])));</span>
|
|
<span class="identifier">count</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1_4">§1.5.1.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_4_3"></a><b>§1.5.1.4.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index connections to other scene ends</span> <span class="cwebmacronumber">1.5.1.4.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">scene_connector</span><span class="plain"> *</span><span class="identifier">scon</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">scon</span><span class="plain"> = </span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_scene</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">]; </span><span class="identifier">scon</span><span class="plain">; </span><span class="identifier">scon</span><span class="plain">=</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">next</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> > </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_TAG</span><span class="plain">(</span><span class="string">"br"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>or when:</i> "</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">NW</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">connect_to</span><span class="plain">-></span><span class="element">as_instance</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<b>%+W</b> <i>%s</i>"</span><span class="plain">, </span><span class="identifier">NW</span><span class="plain">, (</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">end</span><span class="plain">==0)?</span><span class="string">"begins"</span><span class="plain">:</span><span class="string">"ends"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scon</span><span class="plain">-></span><span class="identifier">end</span><span class="plain"> >= </span><span class="constant">2</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %+W"</span><span class="plain">, </span><span class="identifier">scon</span><span class="plain">-></span><span class="element">connect_to</span><span class="plain">-></span><span class="element">end_names</span><span class="plain">[</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">end</span><span class="plain">]);</span>
|
|
<span class="identifier">Index::link</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">where_said</span><span class="plain">)));</span>
|
|
<span class="identifier">count</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1_4">§1.5.1.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_5_1_5"></a><b>§1.5.1.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Index the rules which apply when this scene end occurs</span> <span class="cwebmacronumber">1.5.1.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Rulebooks::is_empty</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">end_rulebook</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">], </span><span class="identifier">Rulebooks::no_rule_context</span><span class="plain">()) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="string">"hanging"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>What happens:</i>"</span><span class="plain">); </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ignore_me</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="identifier">Rulebooks::index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">-></span><span class="element">end_rulebook</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">], </span><span class="string">""</span><span class="plain">, </span><span class="identifier">Rulebooks::no_rule_context</span><span class="plain">(), &</span><span class="identifier">ignore_me</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1_5_1">§1.5.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Table of Scenes. </b>We finally return to the table of scenes. The following is recursive, and
|
|
is called at the top level for each scene in turn which starts at the start
|
|
of play (see above).
|
|
</p>
|
|
|
|
<p class="inwebparagraph">A scene entry can be arrived at in three ways: through one of its ends, in
|
|
which case <code class="display"><span class="extract">end</span></code> is the number (0 for begins, 1 for standard ends, and so on),
|
|
or through being already active at the start of play, or through being covered
|
|
in the index even though it never happens in play. This means we need two
|
|
additional <code class="display"><span class="extract">end</span></code> numbers. They are only ever used at the top level, that is,
|
|
on the initial call when <code class="display"><span class="extract">depth</span></code> is 0.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">START_OF_PLAY_END</span><span class="plain"> -1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">NEVER_HAPPENS_END</span><span class="plain"> -2</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::index_from_scene<button class="popup" onclick="togglePopup('usagePopup358')">...<span class="popuptext" id="usagePopup358">Usage of <b>PL::Scenes::Index::index_from_scene</b>:<br><a href="#SP1_2">§1.2</a>, <a href="#SP2_5">§2.5</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc_from</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain"> **</span><span class="identifier">sorted</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">nr</span><span class="plain">) {</span>
|
|
<span class="identifier">HTMLFiles::open_para</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">+1, </span><span class="string">"tight"</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Indicate the route by which this scene was reached</span> <span class="cwebmacronumber">2.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Name the scene in the table, italicised if we've seen it already</span> <span class="cwebmacronumber">2.2</span>><span class="character">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Show the never-ends icon if appropriate</span> <span class="cwebmacronumber">2.3</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Show the recurring icon if appropriate</span> <span class="cwebmacronumber">2.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"p"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Indent to tabulate other scenes connected to the ends of this one</span> <span class="cwebmacronumber">2.5</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Indicate the route by which this scene was reached</span> <span class="cwebmacronumber">2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">end</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">0</span><span class="plain">: </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Simul"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Segue"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">START_OF_PLAY_END:</span><span class="plain"> </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NEVER_HAPPENS_END:</span><span class="plain"> </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WNever"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="identifier">default:</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Segue"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[ends %+W]&nbsp;"</span><span class="plain">, </span><span class="identifier">sc_from</span><span class="plain">-></span><span class="element">end_names</span><span class="plain">[</span><span class="identifier">end</span><span class="plain">]); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) || (</span><span class="identifier">depth</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain"> == </span><span class="identifier">SC_entire_game</span><span class="plain">) </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WPB"</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition</span><span class="plain">[0]) </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WhenC"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">start_of_play</span><span class="plain">) </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"WPB"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Name the scene in the table, italicised if we've seen it already</span> <span class="cwebmacronumber">2.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<i>"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">as_instance</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">indexed</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</i>"</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Index::below_link_numbered</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_3"></a><b>§2.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Show the never-ends icon if appropriate</span> <span class="cwebmacronumber">2.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ways_to_end</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">e</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">e</span><span class="plain">=1; </span><span class="identifier">e</span><span class="plain"><</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">no_ends</span><span class="plain">; </span><span class="identifier">e</span><span class="plain">++) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_scene</span><span class="plain">[</span><span class="identifier">e</span><span class="plain">]) </span><span class="identifier">ways_to_end</span><span class="plain">++;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">anchor_condition</span><span class="plain">[</span><span class="identifier">e</span><span class="plain">]) </span><span class="identifier">ways_to_end</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ways_to_end</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_append</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"ENever"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_4"></a><b>§2.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Show the recurring icon if appropriate</span> <span class="cwebmacronumber">2.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">inference_subject</span><span class="plain"> *</span><span class="identifier">subj</span><span class="plain"> = </span><span class="identifier">Instances::as_subject</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">-></span><span class="element">as_instance</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">World::Inferences::get_EO_state</span><span class="plain">(</span><span class="identifier">subj</span><span class="plain">, </span><span class="identifier">P_recurring</span><span class="plain">) > </span><span class="identifier">UNKNOWN_CE</span><span class="plain">)</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_append</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="string">"Recurring"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2_5"></a><b>§2.5. </b>And this is where the routine recurses, so that consequent scenes are
|
|
tabulated underneath the present one, indented one step further in (since
|
|
indentation is coupled to <code class="display"><span class="extract">depth</span></code>). First we recurse to scenes which end when
|
|
this one does; then to scenes which begin when this one ends.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Indent to tabulate other scenes connected to the ends of this one</span> <span class="cwebmacronumber">2.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc2</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="reserved">scene_connector</span><span class="plain"> *</span><span class="identifier">scon</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">scon</span><span class="plain"> = </span><span class="identifier">sc2</span><span class="plain">-></span><span class="element">anchor_scene</span><span class="plain">[0]; </span><span class="identifier">scon</span><span class="plain">; </span><span class="identifier">scon</span><span class="plain">=</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">next</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">scon</span><span class="plain">-></span><span class="identifier">connect_to</span><span class="plain"> == </span><span class="identifier">sc</span><span class="plain">) && (</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">end</span><span class="plain"> >= </span><span class="constant">1</span><span class="plain">))</span>
|
|
<span class="functiontext"><a href="#SP2">PL::Scenes::Index::index_from_scene</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc2</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">scon</span><span class="plain">-></span><span class="element">end</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">nr</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc2</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="reserved">scene_connector</span><span class="plain"> *</span><span class="identifier">scon</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">scon</span><span class="plain"> = </span><span class="identifier">sc2</span><span class="plain">-></span><span class="element">anchor_scene</span><span class="plain">[0]; </span><span class="identifier">scon</span><span class="plain">; </span><span class="identifier">scon</span><span class="plain">=</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">next</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">scon</span><span class="plain">-></span><span class="identifier">connect_to</span><span class="plain"> == </span><span class="identifier">sc</span><span class="plain">) && (</span><span class="identifier">scon</span><span class="plain">-></span><span class="element">end</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">))</span>
|
|
<span class="functiontext"><a href="#SP2">PL::Scenes::Index::index_from_scene</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">sc2</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">, </span><span class="identifier">scon</span><span class="plain">-></span><span class="element">end</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">, </span><span class="identifier">sorted</span><span class="plain">, </span><span class="identifier">nr</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>We have been using:
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::scene_icon<button class="popup" onclick="togglePopup('usagePopup359')">...<span class="popuptext" id="usagePopup359">Usage of <b>PL::Scenes::Index::scene_icon</b>:<br><a href="#SP2_1">§2.1</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">si</span><span class="plain">) {</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_unspaced</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">si</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;&nbsp;"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::scene_icon_append<button class="popup" onclick="togglePopup('usagePopup360')">...<span class="popuptext" id="usagePopup360">Usage of <b>PL::Scenes::Index::scene_icon_append</b>:<br><a href="#SP2_3">§2.3</a>, <a href="#SP2_4">§2.4</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">si</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;&nbsp;"</span><span class="plain">); </span><span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_unspaced</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">si</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::scene_icon_legend<button class="popup" onclick="togglePopup('usagePopup361')">...<span class="popuptext" id="usagePopup361">Usage of <b>PL::Scenes::Index::scene_icon_legend</b>:<br><a href="#SP1_3">§1.3</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">si</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">gloss</span><span class="plain">) {</span>
|
|
<span class="functiontext"><a href="#SP3">PL::Scenes::Index::scene_icon_unspaced</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">si</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&nbsp;<i>%s</i>"</span><span class="plain">, </span><span class="identifier">gloss</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::scene_icon_unspaced<button class="popup" onclick="togglePopup('usagePopup362')">...<span class="popuptext" id="usagePopup362">Usage of <b>PL::Scenes::Index::scene_icon_unspaced</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">si</span><span class="plain">) {</span>
|
|
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"img"</span><span class="plain">, </span><span class="string">"border=0 src=inform:/scene_icons/%s.png"</span><span class="plain">, </span><span class="identifier">si</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>Lastly: the following is the criterion used for sorting the scenes into
|
|
their indexing order. The Entire Game always comes first, and then come the
|
|
rest in ascending alphabetical order.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Scenes::Index::compare_scenes<button class="popup" onclick="togglePopup('usagePopup363')">...<span class="popuptext" id="usagePopup363">Usage of <b>PL::Scenes::Index::compare_scenes</b>:<br><a href="#SP1_1">§1.1</a></span></button></span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent2</span><span class="plain">) {</span>
|
|
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc1</span><span class="plain"> = *((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">scene</span><span class="plain"> **) </span><span class="identifier">ent1</span><span class="plain">);</span>
|
|
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc2</span><span class="plain"> = *((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">scene</span><span class="plain"> **) </span><span class="identifier">ent2</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sc1</span><span class="plain"> == </span><span class="identifier">SC_entire_game</span><span class="plain">) && (</span><span class="identifier">sc2</span><span class="plain"> != </span><span class="identifier">SC_entire_game</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> -1;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">sc1</span><span class="plain"> != </span><span class="identifier">SC_entire_game</span><span class="plain">) && (</span><span class="identifier">sc2</span><span class="plain"> == </span><span class="identifier">SC_entire_game</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">SW1</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">sc1</span><span class="plain">-></span><span class="element">as_instance</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">SW2</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">sc2</span><span class="plain">-></span><span class="element">as_instance</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Wordings::strcmp</span><span class="plain">(</span><span class="identifier">SW1</span><span class="plain">, </span><span class="identifier">SW2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="3-scn.html">Back to 'Scenes'</a></li><li><a href="3-ts.html">Continue with 'The Score'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
<script>
|
|
function togglePopup(material_id) {
|
|
var popup = document.getElementById(material_id);
|
|
popup.classList.toggle("show");
|
|
}
|
|
</script>
|
|
|
|
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|