1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/WorldModelKit/S-zt.html
2020-03-19 00:11:25 +00:00

332 lines
35 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>S/gt</title>
<meta 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="../webs.html">Sources</a></h1>
<ul>
<li><a href="../compiler.html">compiler</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html"><b>extensions and kits</b></a></li>
<li><a href="../units.html">unit test tools</a></li>
/ul>
<h2>Extensions</h2>
<ul>
<li><a href="../basic_inform/index.html">Basic Inform</a></li>
<li><a href="../standard_rules/index.html">Standard Rules</a></li>
</ul>
<h2>Kits</h2>
<ul>
<li><a href="../BasicInformKit/index.html">BasicInformKit</a></li>
<li><a href="../BasicInformExtrasKit/index.html">BasicInformExtrasKit</a></li>
<li><a href="../CommandParserKit/index.html">CommandParserKit</a></li>
<li><a href="../EnglishLanguageKit/index.html">EnglishLanguageKit</a></li>
<li><a href="../WorldModelKit/index.html">WorldModelKit</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'S/zt' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>ZMachine Template</b></li></ul><p class="purpose">To provide Z-specific actions.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Begin Z-only matter</a></li><li><a href="#SP2">&#167;2. Veneer</a></li><li><a href="#SP3">&#167;3. Quit The Game Rule</a></li><li><a href="#SP4">&#167;4. Restart The Game Rule</a></li><li><a href="#SP5">&#167;5. Restore The Game Rule</a></li><li><a href="#SP6">&#167;6. Save The Game Rule</a></li><li><a href="#SP7">&#167;7. Verify The Story File Rule</a></li><li><a href="#SP8">&#167;8. Switch Transcript On Rule</a></li><li><a href="#SP9">&#167;9. Switch Transcript Off Rule</a></li><li><a href="#SP10">&#167;10. Announce Story File Version Rule</a></li><li><a href="#SP11">&#167;11. Descend To Specific Action Rule</a></li><li><a href="#SP12">&#167;12. End Z-only matter</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Begin Z-only matter. </b></p>
<pre class="display">
<span class="plain">#</span><span class="identifier">Ifdef</span><span class="plain"> </span><span class="identifier">TARGET_ZCODE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Veneer. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">VM_Initialise</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">standard_interpreter</span><span class="plain"> = </span><span class="identifier">HDR_TERPSTANDARD</span><span class="plain">--&gt;0;</span>
<span class="identifier">transcript_mode</span><span class="plain"> = ((</span><span class="identifier">HDR_GAMEFLAGS</span><span class="plain">--&gt;0) &amp; </span><span class="constant">1</span><span class="plain">);</span>
<span class="identifier">dict_start</span><span class="plain"> = </span><span class="identifier">HDR_DICTIONARY</span><span class="plain">--&gt;0;</span>
<span class="identifier">dict_entry_size</span><span class="plain"> = </span><span class="identifier">dict_start</span><span class="plain">-&gt;(</span><span class="identifier">dict_start</span><span class="plain">-&gt;0 + </span><span class="constant">1</span><span class="plain">);</span>
<span class="identifier">dict_start</span><span class="plain"> = </span><span class="identifier">dict_start</span><span class="plain"> + </span><span class="identifier">dict_start</span><span class="plain">-&gt;0 + </span><span class="constant">4</span><span class="plain">;</span>
<span class="identifier">dict_end</span><span class="plain"> = </span><span class="identifier">dict_start</span><span class="plain"> + ((</span><span class="identifier">dict_start</span><span class="plain"> </span><span class="constant">-</span><span class="plain"> </span><span class="constant">2</span><span class="plain">)--&gt;0) * </span><span class="identifier">dict_entry_size</span><span class="plain">;</span>
<span class="identifier">buffer</span><span class="plain">-&gt;0 = </span><span class="identifier">INPUT_BUFFER_LEN</span><span class="plain">;</span>
<span class="identifier">buffer2</span><span class="plain">-&gt;0 = </span><span class="identifier">INPUT_BUFFER_LEN</span><span class="plain">;</span>
<span class="identifier">buffer3</span><span class="plain">-&gt;0 = </span><span class="identifier">INPUT_BUFFER_LEN</span><span class="plain">;</span>
<span class="identifier">parse</span><span class="plain">-&gt;0 = </span><span class="constant">15</span><span class="plain">;</span>
<span class="identifier">parse2</span><span class="plain">-&gt;0 = </span><span class="constant">15</span><span class="plain">;</span>
<span class="identifier">top_object</span><span class="plain"> = #</span><span class="identifier">largest_object</span><span class="plain">-255;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TEMPLATE_CONFIGURATION_BITMAP</span><span class="plain"> &amp; </span><span class="identifier">FIX_RNG_TCBIT</span><span class="plain">) {</span>
<span class="plain">@</span><span class="reserved">random</span><span class="plain"> </span><span class="constant">10000</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="constant">-</span><span class="identifier">i</span><span class="plain">-2000;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"[Random number generator seed is "</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="string">"]^"</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">random</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
<span class="plain">[ </span><span class="identifier">OC__Cl</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jl</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> ?</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jg</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">max_z_object</span><span class="plain"> ?</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">inc</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">K1_room</span><span class="plain"> ?~</span><span class="identifier">NotRoom</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">test_attr</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">mark_as_room</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">NotRoom</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">K2_thing</span><span class="plain"> ?~</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">test_attr</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">mark_as_thing</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">NotObj</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> </span><span class="identifier">Class</span><span class="plain"> ?</span><span class="identifier">ObjOrClass</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">Routine</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> ?</span><span class="identifier">RoutOrStr</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jin</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> ?~</span><span class="identifier">Mistake</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">get_prop_addr</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="constant">2</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">a</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">get_prop_len</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">div</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> </span><span class="constant">2</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">Loop</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">loadw</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">sp</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">inc</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jl</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> ?</span><span class="identifier">Loop</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">ObjOrClass</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> </span><span class="identifier">Object</span><span class="plain"> ?</span><span class="identifier">JustObj</span><span class="plain">;</span>
<span class="comment">! So now cla is Class</span>
<span class="plain">@</span><span class="identifier">jg</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> ?~</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jin</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">Class</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">JustObj</span><span class="plain">;</span>
<span class="comment">! So now cla is Object</span>
<span class="plain">@</span><span class="identifier">jg</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">String</span><span class="plain"> ?~</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jin</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="identifier">Class</span><span class="plain"> ?</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">RoutOrStr</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">jz</span><span class="plain"> </span><span class="identifier">objflag</span><span class="plain"> ?~</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">call_2s</span><span class="plain"> </span><span class="identifier">Z__Region</span><span class="plain"> </span><span class="identifier">obj</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">sp</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">inc</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">je</span><span class="plain"> </span><span class="identifier">sp</span><span class="plain"> </span><span class="identifier">cla</span><span class="plain"> ?</span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">Mistake</span><span class="plain">;</span>
<span class="identifier">RT__Err</span><span class="plain">(</span><span class="string">"apply 'ofclass' for"</span><span class="plain">, </span><span class="identifier">cla</span><span class="plain">, </span><span class="constant">-1</span><span class="plain">);</span>
<span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Quit The Game Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">QUIT_THE_GAME_R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="identifier">QUIT_THE_GAME_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">YesOrNo</span><span class="plain">()~=0) </span><span class="reserved">quit</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Restart The Game Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">RESTART_THE_GAME_R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="identifier">RESTART_THE_GAME_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">YesOrNo</span><span class="plain">()~=0) {</span>
<span class="plain">@</span><span class="identifier">restart</span><span class="plain">;</span>
<span class="identifier">RESTART_THE_GAME_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Restore The Game Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">RESTORE_THE_GAME_R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="reserved">restore</span><span class="plain"> </span><span class="identifier">RMaybe</span><span class="plain">;</span>
<span class="identifier">RESTORE_THE_GAME_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">RMaybe</span><span class="plain">; </span><span class="identifier">RESTORE_THE_GAME_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Save The Game Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">SAVE_THE_GAME_R</span><span class="plain"> </span><span class="identifier">flag</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="reserved">save</span><span class="plain"> </span><span class="constant">-</span><span class="plain">&gt; </span><span class="identifier">flag</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">flag</span><span class="plain">) {</span>
<span class="constant">0</span><span class="plain">: </span><span class="identifier">SAVE_THE_GAME_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="constant">1</span><span class="plain">: </span><span class="identifier">SAVE_THE_GAME_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="constant">2</span><span class="plain">: </span><span class="identifier">RESTORE_THE_GAME_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Verify The Story File Rule. </b>This is a fossil now, really, but in the days of Infocom, the 110K story
file occupying an entire disc was a huge data set: floppy discs were by no
means a reliable medium, and cheap hardware often used hit-and-miss
components, as on the notorious Commodore 64 disc controller. If somebody
experienced an apparent bug in play, it could easily be that he had a
corrupt disc or was unable to read data of that density. So the VERIFY
command, which took up to ten minutes on some early computers, would chug
through the entire story file and compute a checksum, compare it against a
known result in the header, and determine that the story file could or
could not properly be read. The Z-machine provided this service as an
opcode, and so Glulx followed suit.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">VERIFY_THE_STORY_FILE_R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">verify</span><span class="plain"> ?</span><span class="identifier">Vmaybe</span><span class="plain">;</span>
<span class="reserved">jump</span><span class="plain"> </span><span class="identifier">Vwrong</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">Vmaybe</span><span class="plain">; </span><span class="identifier">VERIFY_THE_STORY_FILE_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">.</span><span class="identifier">Vwrong</span><span class="plain">;</span>
<span class="identifier">VERIFY_THE_STORY_FILE_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Switch Transcript On Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">SWITCH_TRANSCRIPT_ON_R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="identifier">transcript_mode</span><span class="plain"> = ((0--&gt;8) &amp; </span><span class="constant">1</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">transcript_mode</span><span class="plain">) { </span><span class="identifier">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="plain">@</span><span class="identifier">output_stream</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (((0--&gt;8) &amp; </span><span class="constant">1</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain">(</span><span class="character">'C'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="identifier">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">; </span><span class="identifier">VersionSub</span><span class="plain">();</span>
<span class="identifier">transcript_mode</span><span class="plain"> = </span><span class="reserved">true</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. Switch Transcript Off Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">SWITCH_TRANSCRIPT_OFF_R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="identifier">transcript_mode</span><span class="plain"> = ((0--&gt;8) &amp; </span><span class="constant">1</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">transcript_mode</span><span class="plain"> == </span><span class="reserved">false</span><span class="plain">) { </span><span class="identifier">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain">(</span><span class="character">'A'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="identifier">SWITCH_TRANSCRIPT_OFF_RM</span><span class="plain">(</span><span class="character">'B'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">;</span>
<span class="plain">@</span><span class="identifier">output_stream</span><span class="plain"> </span><span class="constant">-2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((0--&gt;8) &amp; </span><span class="constant">1</span><span class="plain">) { </span><span class="identifier">SWITCH_TRANSCRIPT_ON_RM</span><span class="plain">(</span><span class="character">'C'</span><span class="plain">); </span><span class="reserved">new_line</span><span class="plain">; </span><span class="reserved">rtrue</span><span class="plain">; }</span>
<span class="identifier">transcript_mode</span><span class="plain"> = </span><span class="reserved">false</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. Announce Story File Version Rule. </b></p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">ANNOUNCE_STORY_FILE_VERSION_R</span><span class="plain"> </span><span class="identifier">ix</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actor</span><span class="plain"> ~= </span><span class="identifier">player</span><span class="plain">) </span><span class="reserved">rfalse</span><span class="plain">;</span>
<span class="identifier">Banner</span><span class="plain">();</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Identification number: "</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">ix</span><span class="plain">=6: </span><span class="identifier">ix</span><span class="plain"> &lt;= </span><span class="identifier">UUID_ARRAY</span><span class="plain">-&gt;0: </span><span class="identifier">ix</span><span class="plain">++) </span><span class="reserved">print</span><span class="plain"> (</span><span class="identifier">char</span><span class="plain">) </span><span class="identifier">UUID_ARRAY</span><span class="plain">-&gt;</span><span class="identifier">ix</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
<span class="identifier">ix</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="comment">! shut up compiler warning</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">standard_interpreter</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Standard interpreter "</span><span class="plain">,</span>
<span class="identifier">standard_interpreter</span><span class="plain">/256, </span><span class="string">"."</span><span class="plain">, </span><span class="identifier">standard_interpreter</span><span class="plain">%256,</span>
<span class="string">" ("</span><span class="plain">, </span><span class="identifier">HDR_TERPNUMBER</span><span class="plain">-&gt;0;</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">char</span><span class="plain">) </span><span class="identifier">HDR_TERPVERSION</span><span class="plain">-&gt;0;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">")^"</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"Interpreter "</span><span class="plain">, </span><span class="identifier">HDR_TERPNUMBER</span><span class="plain">-&gt;0, </span><span class="string">" Version "</span><span class="plain">;</span>
<span class="reserved">print</span><span class="plain"> (</span><span class="identifier">char</span><span class="plain">) </span><span class="identifier">HDR_TERPVERSION</span><span class="plain">-&gt;0;</span>
<span class="reserved">print</span><span class="plain"> </span><span class="string">"^"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">ShowExtensionVersions</span><span class="plain">();</span>
<span class="identifier">say__p</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. Descend To Specific Action Rule. </b>There are 100 or so actions, typically, and this rule is for efficiency's
sake: rather than perform 100 or so comparisons to see which routine to
call, we indirect through a jump table. The routines called are the <code class="display"><span class="extract">-Sub</span></code>
routines: thus, for instance, if <code class="display"><span class="extract">action</span></code> is <code class="display"><span class="extract">##Wait</span></code> then <code class="display"><span class="extract">WaitSub</span></code> is
called. It is essential that this routine not be called for fake actions:
in I7 use this is guaranteed, since fake actions are not allowed into the
action machinery at all.
</p>
<p class="inwebparagraph">Strangely, Glulx's action routines table is numbered in an off-by-one way
compared to the Z-machine's: hence the <code class="display"><span class="extract">+1</span></code>.
</p>
<pre class="display">
<span class="plain">[ </span><span class="identifier">DESCEND_TO_SPECIFIC_ACTION_R</span><span class="plain">;</span>
<span class="reserved">indirect</span><span class="plain">(#</span><span class="identifier">actions_table</span><span class="plain">--&gt;</span><span class="identifier">action</span><span class="plain">);</span>
<span class="reserved">rtrue</span><span class="plain">;</span>
<span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. End Z-only matter. </b></p>
<pre class="display">
<span class="plain">#</span><span class="identifier">Endif</span><span class="plain">; </span><span class="comment">! TARGET_ZCODE</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><a href="S-gt.html">Back to 'Glulx Template'</a></li><li><a href="S-lt.html">Continue with 'Light Template'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>