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

Minor feature added to dialogue flow markers allowing variable beats

This commit is contained in:
Graham Nelson 2024-02-07 20:42:56 +00:00
parent 4cb22eea4e
commit 2b7d85d300
19 changed files with 134 additions and 66 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6X33 'Krypton' (26 January 2024)
[Version](notes/versioning.md): 10.2.0-beta+6X34 'Krypton' (7 February 2024)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 26 January 2024
Build Number: 6X33
Build Date: 7 February 2024
Build Number: 6X34

View file

@ -178,7 +178,7 @@ looks to see if the current action matches the given action pattern.
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorFollowFlowMarker</span><span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax"> </span><span class="identifier-syntax">chdata</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorFollowFlowMarker</span><span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax"> </span><span class="identifier-syntax">chdata</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</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">dc</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">dc</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">NO_DIALOGUE_CHOICES</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WriteGProperty</span><span class="plain-syntax">(</span><span class="identifier-syntax">DIALOGUE_CHOICE_TY</span><span class="plain-syntax">, </span><span class="identifier-syntax">dc</span><span class="plain-syntax">, </span><span class="identifier-syntax">performed</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">chdata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TableOfDialogueChoices</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">dc</span><span class="plain-syntax">;</span>
@ -198,7 +198,10 @@ looks to see if the current action matches the given action pattern.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">chdata</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">TYPE_DCMETADATA</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ENDING_FINALLY_DSEL</span><span class="plain-syntax"> </span><span class="reserved-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">ENDING_FINALLY_SAYING_DSEL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">story_complete</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PERFORM_DSEL</span><span class="plain-syntax">: </span><span class="identifier-syntax">DirectorPerformBeat</span><span class="plain-syntax">(</span><span class="identifier-syntax">chdata</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">CONTENT_DCMETADATA</span><span class="plain-syntax">); </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PERFORM_DSEL</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> = </span><span class="identifier-syntax">chdata</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">CONTENT_DCMETADATA</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">b</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Routine</span><span class="plain-syntax">) </span><span class="identifier-syntax">b</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">DirectorPerformBeat</span><span class="plain-syntax">(</span><span class="identifier-syntax">b</span><span class="plain-syntax">); </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">default</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"*** Unimplemented choice ***^"</span><span class="plain-syntax">; </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>

View file

@ -101,6 +101,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">selection</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">selection_parameter</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">dialogue_beat</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_perform</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_perform_expression</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue_choice_compilation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">compilation_data</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">selection_type</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
@ -117,6 +118,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">selection</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">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">selection_parameter</span><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">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</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">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform_expression</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">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">selection_type</span><span class="plain-syntax"> = </span><span class="constant-syntax">AGAIN_DSEL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compilation_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RTDialogueChoices::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</span><span class="plain-syntax">, </span><span class="identifier-syntax">dc</span><span class="plain-syntax">);</span>
</pre>
@ -392,16 +394,20 @@ is one.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">selection_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">db</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">beat_name</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> = </span><span class="identifier-syntax">db</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</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">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">selection_parameter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_ChoicePerformsUnknown</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The dialogue choice offered by %1 asks to perform the beat '%2', "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but I don't recognise that as the name of any beat in the story."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Dialogue beat: $O\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_instance</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;s-value&gt;(dc-&gt;</span><span class="element-syntax">selection_parameter</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">val</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dash::check_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ALWAYS_MATCH</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform_expression</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">selection_parameter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_ChoicePerformsUnknown</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The dialogue choice offered by %1 asks to perform the beat '%2', "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but I don't recognise that as the name of any beat in the story."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>

File diff suppressed because one or more lines are too long

View file

@ -1110,6 +1110,7 @@ and <a href="../pipeline-module/4-tsk.html" class="internal">The Standard Kits (
<span class="definition-keyword">enum</span> <span class="constant-syntax">CHOICE_ARRAY_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CHOICE_AVAILABLE_FN_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CHOICE_ACTION_MATCH_FN_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CHOICE_PERFORMANCE_FN_HL</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1_24" class="paragraph-anchor"></a><b>&#167;8.1.24. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Establish instances</span><span class="named-paragraph-number">8.1.24</span></span><span class="comment-syntax"> =</span>
</p>
@ -1230,6 +1231,7 @@ and <a href="../pipeline-module/4-tsk.html" class="internal">The Standard Kits (
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">CHOICE_ARRAY_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"choice_data"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">CHOICE_AVAILABLE_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"available_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">CHOICE_ACTION_MATCH_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"action_match_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">CHOICE_PERFORMANCE_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"performance_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">INST_SHOWME_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"showme_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_BEGIN_AP</span><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_PROPERTIES_HAP</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inline_property"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_inline_property"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_PROPERTY_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inline"</span><span class="plain-syntax">)</span>

View file

@ -69,6 +69,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">choice_array_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">available_fn_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action_match_fn_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">performance_fn_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">dialogue_choice_compilation_data</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">dialogue_choice_compilation_data</span><span class="plain-syntax"> </span><span class="function-syntax">RTDialogueChoices::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PN</span><span class="plain-syntax">, </span><span class="identifier-syntax">dialogue_choice</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dc</span><span class="plain-syntax">) {</span>
@ -77,6 +78,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">dccd</span><span class="plain-syntax">.</span><span class="element-syntax">choice_array_iname</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">dccd</span><span class="plain-syntax">.</span><span class="element-syntax">available_fn_iname</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">dccd</span><span class="plain-syntax">.</span><span class="element-syntax">action_match_fn_iname</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">dccd</span><span class="plain-syntax">.</span><span class="element-syntax">performance_fn_iname</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">dccd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -99,12 +101,19 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">available_fn_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTDialogueChoices::action_match_fn_iname</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">RTDialogueChoices::action_match_fn_iname</span></span>:<br/><a href="5-dci.html#SP3_4">&#167;3.4</a>, <a href="5-dci.html#SP3_7">&#167;3.7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">dialogue_choice</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dc</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTDialogueChoices::action_match_fn_iname</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">RTDialogueChoices::action_match_fn_iname</span></span>:<br/><a href="5-dci.html#SP3_4">&#167;3.4</a>, <a href="5-dci.html#SP3_8">&#167;3.8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">dialogue_choice</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dc</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">action_match_fn_iname</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">action_match_fn_iname</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-hrr.html#SP12" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CHOICE_ACTION_MATCH_FN_HL</span><span class="plain-syntax">, </span><a href="5-dci.html#SP1" class="function-link"><span class="function-syntax">RTDialogueChoices::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">action_match_fn_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTDialogueChoices::performance_fn_iname</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">RTDialogueChoices::performance_fn_iname</span></span>:<br/><a href="5-dci.html#SP3_4">&#167;3.4</a>, <a href="5-dci.html#SP3_7">&#167;3.7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">dialogue_choice</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dc</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">performance_fn_iname</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">performance_fn_iname</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-hrr.html#SP12" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CHOICE_PERFORMANCE_FN_HL</span><span class="plain-syntax">, </span><a href="5-dci.html#SP1" class="function-link"><span class="function-syntax">RTDialogueChoices::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">performance_fn_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure dialogue_choice_compilation_data is accessed in 3/uo, 5/mlt, 5/tbl, 5/dbi, 5/dli, 5/prp, 5/lp, 5/act2, 5/nap and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Compilation of dialogue. </b></p>
@ -123,7 +132,7 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </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">RTDialogueChoices::choice_compilation_agent</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">RTDialogueChoices::choice_compilation_agent</span></span>:<br/><a href="5-dci.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">compilation_subtask</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ct</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTDialogueChoices::choice_compilation_agent</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">RTDialogueChoices::choice_compilation_agent</span></span>:<br/><a href="5-dci.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">compilation_subtask</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ct</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dialogue_choice</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_dialogue_choice</span><span class="plain-syntax">(</span><span class="identifier-syntax">ct</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">data</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">where_created</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><a href="5-dci.html#SP1" class="function-link"><span class="function-syntax">RTDialogueChoices::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">);</span>
@ -141,7 +150,8 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><a href="2-ea.html#SP5" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</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">make_availability_function</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-dci.html#SP3_6" class="named-paragraph-link"><span class="named-paragraph">Compile the available function</span><span class="named-paragraph-number">3.6</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">APW</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-dci.html#SP3_7" class="named-paragraph-link"><span class="named-paragraph">Compile the action-matching function</span><span class="named-paragraph-number">3.7</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to_perform_expression</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-dci.html#SP3_7" class="named-paragraph-link"><span class="named-paragraph">Compile the performance function</span><span class="named-paragraph-number">3.7</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">APW</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-dci.html#SP3_8" class="named-paragraph-link"><span class="named-paragraph">Compile the action-matching function</span><span class="named-paragraph-number">3.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Scan the clauses further</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
@ -194,7 +204,10 @@ function togglePopup(material_id) {
<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">PERFORM_DSEL:</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><a href="5-ins.html#SP1" class="function-link"><span class="function-syntax">RTInstances::value_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to_perform</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_instance</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">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to_perform</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><a href="5-ins.html#SP1" class="function-link"><span class="function-syntax">RTInstances::value_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to_perform</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_instance</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><a href="5-dci.html#SP1" class="function-link"><span class="function-syntax">RTDialogueChoices::performance_fn_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</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">INSTEAD_OF_DSEL:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">AFTER_DSEL:</span>
@ -292,7 +305,19 @@ function togglePopup(material_id) {
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dci.html#SP3_6">&#167;3.6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_7" class="paragraph-anchor"></a><b>&#167;3.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the action-matching function</span><span class="named-paragraph-number">3.7</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_7" class="paragraph-anchor"></a><b>&#167;3.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the performance function</span><span class="named-paragraph-number">3.7</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">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Functions::begin</span><span class="plain-syntax">(</span><a href="5-dci.html#SP1" class="function-link"><span class="function-syntax">RTDialogueChoices::performance_fn_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RETURN_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileValues::to_code_val_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">dc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">to_perform_expression</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_dialogue_beat</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Functions::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dci.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_8" class="paragraph-anchor"></a><b>&#167;3.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the action-matching function</span><span class="named-paragraph-number">3.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -1,6 +1,6 @@
Total memory consumption was 141945K = 139 MB
Total memory consumption was 141946K = 139 MB
---- was used for 2127403 objects, in 374858 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2127404 objects, in 374859 frames in 0 x 800K = 0K = 0 MB:
29.7% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.0% text_stream_array 4926 x 100 = 492600 objects, 27743232 bytes
@ -44,7 +44,7 @@ Total memory consumption was 141945K = 139 MB
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.1% vanilla_function 3823 objects, 244672 bytes
0.1% binary_predicate 330 objects, 174240 bytes
0.1% hierarchy_location 1190 objects, 171360 bytes
0.1% hierarchy_location 1191 objects, 171504 bytes
0.1% linguistic_stock_item 3338 objects, 160224 bytes
0.1% rule_family_data 404 objects, 148672 bytes
---- nonterminal 773 objects, 142232 bytes
@ -57,7 +57,7 @@ Total memory consumption was 141945K = 139 MB
---- imperative_defn 1418 objects, 102096 bytes
---- noun_usage 2419 objects, 96760 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- inter_tree 7 objects, 95928 bytes
---- inter_tree 7 objects, 95984 bytes
---- preposition 274 objects, 87680 bytes
---- lexical_cluster 2535 objects, 81120 bytes
---- kind_variable_declaration 1659 objects, 79632 bytes
@ -262,9 +262,9 @@ Total memory consumption was 141945K = 139 MB
---- loop_over_scope 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
99.9% was used for memory not allocated for objects:
100.0% was used for memory not allocated for objects:
63.0% text stream storage 91603788 bytes in 513069 claims
63.0% text stream storage 91604284 bytes in 513073 claims
3.7% dictionary storage 5497920 bytes in 7767 claims
---- sorting 2624 bytes in 531 claims
4.9% source text 7200000 bytes in 3 claims
@ -282,5 +282,5 @@ Total memory consumption was 141945K = 139 MB
---- code generation workspace for objects 3528 bytes in 19 claims
0.1% emitter array storage 281184 bytes in 2006 claims
-134.-3% was overhead - -195282544 bytes = -190705K = -186 MB
-134.-3% was overhead - -195282744 bytes = -190705K = -186 MB

View file

@ -1,29 +1,29 @@
100.0% in inform7 run
67.2% in compilation to Inter
45.3% in //Sequence::undertake_queued_tasks//
67.5% in compilation to Inter
45.2% in //Sequence::undertake_queued_tasks//
4.3% in //MajorNodes::pre_pass//
3.5% in //MajorNodes::pass_1//
2.1% in //RTPhrasebook::compile_entries//
1.7% in //ImperativeDefinitions::assess_all//
3.6% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.8% in //RTPhrasebook::compile_entries//
1.4% in //RTKindConstructors::compile//
1.0% in //Sequence::lint_inter//
0.7% in //ImperativeDefinitions::compile_first_block//
0.7% in //Sequence::undertake_queued_tasks//
0.7% in //World::stage_V//
0.3% in //CompletionModule::compile//
0.3% in //MajorNodes::pass_2//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //World::stage_V//
4.7% not specifically accounted for
27.6% in running Inter pipeline
8.9% in step 14/15: generate inform6 -> auto.inf
7.1% in step 5/15: load-binary-kits
6.1% in step 6/15: make-synoptic-module
1.7% in step 9/15: make-identifiers-unique
4.8% not specifically accounted for
27.7% in running Inter pipeline
9.1% in step 14/15: generate inform6 -> auto.inf
6.9% in step 5/15: load-binary-kits
5.8% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
0.3% in step 11/15: eliminate-redundant-labels
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
1.8% not specifically accounted for
4.3% in supervisor
2.2% not specifically accounted for
4.0% in supervisor
0.8% not specifically accounted for

View file

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

View file

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

View file

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

View file

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

View file

@ -132,7 +132,7 @@ Constant OR_DSEL = 19; ! -- or
rtrue;
];
[ DirectorFollowFlowMarker dc chdata;
[ DirectorFollowFlowMarker dc chdata b;
if ((dc <= 0) || (dc > NO_DIALOGUE_CHOICES)) rfalse;
WriteGProperty(DIALOGUE_CHOICE_TY, dc, performed, true);
chdata = TableOfDialogueChoices-->dc;
@ -152,7 +152,10 @@ Constant OR_DSEL = 19; ! -- or
if (chdata-->TYPE_DCMETADATA == ENDING_FINALLY_DSEL or ENDING_FINALLY_SAYING_DSEL)
story_complete = true;
rtrue;
PERFORM_DSEL: DirectorPerformBeat(chdata-->CONTENT_DCMETADATA); rtrue;
PERFORM_DSEL:
b = chdata-->CONTENT_DCMETADATA;
if (b ofclass Routine) b = b();
DirectorPerformBeat(b); rtrue;
default: print "*** Unimplemented choice ***^"; rfalse;
}
rtrue;

View file

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

View file

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

View file

@ -38,6 +38,7 @@ typedef struct dialogue_choice {
struct parse_node *selection;
struct wording selection_parameter;
struct dialogue_beat *to_perform;
struct parse_node *to_perform_expression;
struct dialogue_choice_compilation_data compilation_data;
int selection_type;
CLASS_DEFINITION
@ -50,6 +51,7 @@ typedef struct dialogue_choice {
dc->selection = NULL;
dc->selection_parameter = EMPTY_WORDING;
dc->to_perform = NULL;
dc->to_perform_expression = NULL;
dc->selection_type = AGAIN_DSEL;
dc->compilation_data = RTDialogueChoices::new(PN, dc);
@ -305,16 +307,20 @@ void DialogueChoices::decide_choice_performs(void) {
if (Wordings::match(dc->selection_parameter, db->beat_name))
dc->to_perform = db;
if (dc->to_perform == NULL) {
Problems::quote_source(1, current_sentence);
Problems::quote_wording(2, dc->selection_parameter);
StandardProblems::handmade_problem(Task::syntax_tree(),
_p_(PM_ChoicePerformsUnknown));
Problems::issue_problem_segment(
"The dialogue choice offered by %1 asks to perform the beat '%2', "
"but I don't recognise that as the name of any beat in the story.");
Problems::issue_problem_end();
} else {
LOG("Dialogue beat: $O\n", dc->to_perform->as_instance);
if (<s-value>(dc->selection_parameter)) {
parse_node *val = <<rp>>;
if (Dash::check_value(val, K_dialogue_beat) == ALWAYS_MATCH)
dc->to_perform_expression = val;
} else {
Problems::quote_source(1, current_sentence);
Problems::quote_wording(2, dc->selection_parameter);
StandardProblems::handmade_problem(Task::syntax_tree(),
_p_(PM_ChoicePerformsUnknown));
Problems::issue_problem_segment(
"The dialogue choice offered by %1 asks to perform the beat '%2', "
"but I don't recognise that as the name of any beat in the story.");
Problems::issue_problem_end();
}
}
}
}

View file

@ -990,6 +990,7 @@ void Hierarchy::establish(void) {
@e CHOICE_ARRAY_HL
@e CHOICE_AVAILABLE_FN_HL
@e CHOICE_ACTION_MATCH_FN_HL
@e CHOICE_PERFORMANCE_FN_HL
@<Establish instances@> =
submodule_identity *instances = LargeScale::register_submodule_identity(I"instances");
@ -1107,6 +1108,7 @@ void Hierarchy::establish(void) {
H_C_U(CHOICE_ARRAY_HL, I"choice_data")
H_F_U(CHOICE_AVAILABLE_FN_HL, I"available_fn")
H_F_U(CHOICE_ACTION_MATCH_FN_HL, I"action_match_fn")
H_F_U(CHOICE_PERFORMANCE_FN_HL, I"performance_fn")
H_F_U(INST_SHOWME_FN_HL, I"showme_fn")
H_BEGIN_AP(INLINE_PROPERTIES_HAP, I"inline_property", I"_inline_property")
H_C_U(INLINE_PROPERTY_HL, I"inline")

View file

@ -11,6 +11,7 @@ typedef struct dialogue_choice_compilation_data {
struct inter_name *choice_array_iname;
struct inter_name *available_fn_iname;
struct inter_name *action_match_fn_iname;
struct inter_name *performance_fn_iname;
} dialogue_choice_compilation_data;
dialogue_choice_compilation_data RTDialogueChoices::new(parse_node *PN, dialogue_choice *dc) {
@ -19,6 +20,7 @@ dialogue_choice_compilation_data RTDialogueChoices::new(parse_node *PN, dialogue
dccd.choice_array_iname = NULL;
dccd.available_fn_iname = NULL;
dccd.action_match_fn_iname = NULL;
dccd.performance_fn_iname = NULL;
return dccd;
}
@ -48,6 +50,13 @@ inter_name *RTDialogueChoices::action_match_fn_iname(dialogue_choice *dc) {
return dc->compilation_data.action_match_fn_iname;
}
inter_name *RTDialogueChoices::performance_fn_iname(dialogue_choice *dc) {
if (dc->compilation_data.performance_fn_iname == NULL)
dc->compilation_data.performance_fn_iname =
Hierarchy::make_iname_in(CHOICE_PERFORMANCE_FN_HL, RTDialogueChoices::package(dc));
return dc->compilation_data.performance_fn_iname;
}
@h Compilation of dialogue.
=
@ -80,6 +89,7 @@ void RTDialogueChoices::choice_compilation_agent(compilation_subtask *ct) {
EmitArrays::end(save);
if (make_availability_function) @<Compile the available function@>;
if (dc->to_perform_expression) @<Compile the performance function@>;
if (Wordings::nonempty(APW)) @<Compile the action-matching function@>;
}
@ -118,7 +128,10 @@ void RTDialogueChoices::choice_compilation_agent(compilation_subtask *ct) {
}
break;
case PERFORM_DSEL:
EmitArrays::iname_entry(RTInstances::value_iname(dc->to_perform->as_instance));
if (dc->to_perform)
EmitArrays::iname_entry(RTInstances::value_iname(dc->to_perform->as_instance));
else
EmitArrays::iname_entry(RTDialogueChoices::performance_fn_iname(dc));
break;
case INSTEAD_OF_DSEL:
case AFTER_DSEL:
@ -203,6 +216,14 @@ void RTDialogueChoices::choice_compilation_agent(compilation_subtask *ct) {
}
}
@<Compile the performance function@> =
packaging_state save = Functions::begin(RTDialogueChoices::performance_fn_iname(dc));
EmitCode::inv(RETURN_BIP);
EmitCode::down();
CompileValues::to_code_val_of_kind(dc->to_perform_expression, K_dialogue_beat);
EmitCode::up();
Functions::end(save);
@<Compile the action-matching function@> =
packaging_state save = Functions::begin(RTDialogueChoices::action_match_fn_iname(dc));
if (<s-action-pattern-as-value>(APW)) {