mirror of
https://github.com/ganelson/inform.git
synced 2024-07-16 22:14:23 +03:00
357 lines
29 KiB
HTML
357 lines
29 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Chronology Template</title>
|
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<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="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<script>
|
|
MathJax = {
|
|
tex: {
|
|
inlineMath: '$', '$'], ['\\(', '\\)'
|
|
},
|
|
svg: {
|
|
fontCache: 'global'
|
|
}
|
|
};
|
|
</script>
|
|
<script type="text/javascript" id="MathJax-script" async
|
|
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
|
</script>
|
|
|
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body class="commentary-font">
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-assets/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../index.html">home</a></li>
|
|
</ul><h2>Compiler</h2><ul>
|
|
<li><a href="../structure.html">structure</a></li>
|
|
<li><a href="../inbuildn.html">inbuild</a></li>
|
|
<li><a href="../inform7n.html">inform7</a></li>
|
|
<li><a href="../intern.html">inter</a></li>
|
|
<li><a href="../services.html">services</a></li>
|
|
<li><a href="../secrets.html">secrets</a></li>
|
|
</ul><h2>Other Tools</h2><ul>
|
|
<li><a href="../inblorbn.html">inblorb</a></li>
|
|
<li><a href="../indocn.html">indoc</a></li>
|
|
<li><a href="../inform6.html">inform6</a></li>
|
|
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
|
<li><a href="../inrtpsn.html">inrtps</a></li>
|
|
</ul><h2>Resources</h2><ul>
|
|
<li><a href="../extensions.html">extensions</a></li>
|
|
<li><a href="../kits.html">kits</a></li>
|
|
</ul><h2>Repository</h2><ul>
|
|
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
|
</ul><h2>Related Projects</h2><ul>
|
|
<li><a href="../../../inweb/index.html">inweb</a></li>
|
|
<li><a href="../../../intest/index.html">intest</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
<!--Weave of 'Chronology Template' generated by Inweb-->
|
|
<div class="breadcrumbs">
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">WorldModelKit</a></li><li><b>Chronology Template</b></li></ul></div>
|
|
<p class="purpose">To record information now which will be needed later, when a condition phrased in the perfect tense is tested.</p>
|
|
|
|
<ul class="toc"><li><a href="S-chr.html#SP1">§1. Scheme I</a></li><li><a href="S-chr.html#SP2">§2. Present and Past</a></li><li><a href="S-chr.html#SP3">§3. Chronology Point</a></li><li><a href="S-chr.html#SP4">§4. Update Chronological Records Rule</a></li><li><a href="S-chr.html#SP5">§5. Test Single Past State</a></li><li><a href="S-chr.html#SP6">§6. Scheme II</a></li><li><a href="S-chr.html#SP7">§7. Past Action Routines</a></li><li><a href="S-chr.html#SP8">§8. Track Actions</a></li><li><a href="S-chr.html#SP9">§9. Storage</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Scheme I. </b>If source text contains a condition like "if the well has been dry, ...",
|
|
then we need to keep a chronological record by testing at every turn whether
|
|
or not the well is dry: we log whether this is true now, whether it has ever
|
|
been true, for how many consecutive turns it has been true (to a maximum
|
|
of 127), and how many times it has become true having just been false (again,
|
|
to a maximum of 127 times). All this information is packed into a single word,
|
|
arranged as a 15-bit bitmap: the least significant bit is the state of the
|
|
condition now (true or false), the next 7 bits are the number of false-to-true
|
|
"trips" observed over time, and the top 7 bits are the number of consecutive
|
|
turns on which the condition has been true ("consecutives"). The 16th and
|
|
most significant bit is unused, so that the state is always positive even
|
|
in a 16-bit virtual machine — a convenience since we then don't need to
|
|
worry about the effect of signed division and remainder on the bitmap.
|
|
</p>
|
|
|
|
<p class="commentary">There is no need to store a flag for "has this condition ever been true",
|
|
because this is equivalent the number of trips being greater than zero.
|
|
This might look wrong for a condition which is true at start of play —
|
|
say, if the well was always dry — because then its state has never changed
|
|
from false to true. But in fact when the VM starts up the state word is
|
|
initially always 0: it's only when the startup rulebook fires the update
|
|
chronological records rule (see below) that we first test whether the well
|
|
is dry, and that forces a trip from false to true if the well is dry at
|
|
start of play. Therefore, if \(T\) is the number of trips for the condition
|
|
then \(T=0\) if and only if the condition has been false from the very start
|
|
of play. If the condition is true now, then \(T=1\) if and only if it has
|
|
always been so.
|
|
</p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Present and Past. </b>Each individual condition has its own unique "PT number", counting upwards
|
|
from 0 in order of compilation by Inform, and a "chronological record" is a
|
|
word array with a state word as described above for each PT number.
|
|
</p>
|
|
|
|
<p class="commentary">However, we keep not one but two chronological records: one for the situation
|
|
now, called the "present chronological record", and one for the situation
|
|
as it was just before interesting things most recently happened, called the
|
|
"past chronological record". If one of those interesting things was that
|
|
the well ran dry, then in our example the state word for the condition
|
|
"if the well has been dry" would be different in the two chronological
|
|
records. We keep two records in order to be able to detect conditions in
|
|
four different tenses:
|
|
</p>
|
|
|
|
<ul class="items"><li>(1) Present tense ("if the well is dry"): none of this machinery is used,
|
|
because we can just test directly instead, so a present tense condition has
|
|
no PT-number.
|
|
</li><li>(2) Past tense ("if the well was dry"): we look at the flag bit in the
|
|
past chronological record.
|
|
</li><li>(3) Perfect tense ("if the well has been dry"): we look at whether or not
|
|
\(T > 0\) in the present chronological record.
|
|
</li><li>(4) Past perfect tense ("if the well had been dry"): we look at whether or not
|
|
\(T > 0\) in the past chronological record.
|
|
</li></ul>
|
|
<p class="commentary">It's a somewhat ambiguous matter of context in English when the reference time
|
|
is for past tenses. If somebody comes out into the sunshine and says, "But
|
|
it was raining," when does he mean? We would reasonably guess earlier that
|
|
day, and probably only an hour or two ago, but that's a contextual judgement
|
|
made on the basis of our own experience of how rapidly weather changes.
|
|
The context for Inform source text is always that of actions, so our
|
|
convention is that the reference time for past tenses is the point just
|
|
before the current action began. Such key moments — when things are just
|
|
about to happen — are called "chronology points". There is a CP just
|
|
before each action begins; there is a CP in the startup process; and there
|
|
is a CP at the end of each turn, for good measure. CPs happen when somebody
|
|
calls <span class="extract"><span class="extract-syntax">ChronologyPoint()</span></span>. The action machinery does this directly, while
|
|
the startup CP and the CP at end of turn happen in the course of the
|
|
update chronological records rule (below).
|
|
</p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Chronology Point. </b>This is when the time of reference for past tenses is now: so it is where the
|
|
past becomes the present. Soon, exciting things will happen, and the present
|
|
will go on developing, while the past will remain as it was; until things
|
|
calm down again and we come to another chronology point.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">ChronologyPoint</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">=0:</span><span class="identifier-syntax">pt</span><span class="plain-syntax"><</span><span class="identifier-syntax">NO_PAST_TENSE_CONDS</span><span class="plain-syntax">:</span><span class="identifier-syntax">pt</span><span class="plain-syntax">++)</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">past_chronological_record</span><span class="plain-syntax">--></span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">present_chronological_record</span><span class="plain-syntax">--></span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Update Chronological Records Rule. </b>It might seem odd that a routine to, supposedly, update something would only
|
|
call another routine called <span class="extract"><span class="extract-syntax">TestSinglePastState</span></span>: but in this setting, any
|
|
test updates the state, because it changes the number of times something has
|
|
been found true, and so on.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">UPDATE_CHRONOLOGICAL_RECORDS_R</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">=0: </span><span class="identifier-syntax">pt</span><span class="plain-syntax"><</span><span class="identifier-syntax">NO_PAST_TENSE_CONDS</span><span class="plain-syntax">: </span><span class="identifier-syntax">pt</span><span class="plain-syntax">++) </span><span class="identifier-syntax">TestSinglePastState</span><span class="plain-syntax">(</span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">, -1);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ChronologyPoint</span><span class="plain-syntax">();</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Test Single Past State. </b><span class="extract"><span class="extract-syntax">TestSinglePastState</span></span> is called with four arguments:
|
|
</p>
|
|
|
|
<ul class="items"><li>(a) <span class="extract"><span class="extract-syntax">past_flag</span></span> is true if we want to test a condition like "if the well was
|
|
dry" or "if the well had been dry", which concern only the state as it was
|
|
at the last chronology point — in other words, the <span class="extract"><span class="extract-syntax">past_chronological_record</span></span>,
|
|
which we must not change; whereas <span class="extract"><span class="extract-syntax">past_flag</span></span> is false if we want to test
|
|
a present tense like "if the well is dry" or "if the well has been dry",
|
|
because then we deal with the <span class="extract"><span class="extract-syntax">present_chronological_record</span></span> which must be
|
|
kept continuously updated.
|
|
</li><li>(b) <span class="extract"><span class="extract-syntax">pt</span></span> is the PT number for the condition.
|
|
</li><li>(c) <span class="extract"><span class="extract-syntax">turn_end</span></span> is true if we are making the test at the end of a turn, as
|
|
part of the update chronological records rule, and false otherwise. (For these
|
|
purposes the start of play is a turn end since the UCRR runs then, too.)
|
|
</li><li>(d) <span class="extract"><span class="extract-syntax">wanted</span></span> describes what information the function should return, as
|
|
detailed in its code below.
|
|
</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Scheme II. </b>Actions discussed in the past tense — "if we have taken the ball" or,
|
|
more subtly, "Instead of waiting for the third turn" (which also refers
|
|
to the past) — are handled in a related but simpler way. Inform counts such
|
|
references, just as with other past tense conditions above, but this time
|
|
stores a state in two simple word arrays: <span class="extract"><span class="extract-syntax">TimesActionHasHappened</span></span> and
|
|
<span class="extract"><span class="extract-syntax">TurnsActionHasBeenHappening</span></span>.
|
|
</p>
|
|
|
|
<p class="commentary">It might reasonably be asked why we don't simply use all of the clever
|
|
machinery above: why have an entirely different system here? One reason is
|
|
that actions are events and not continuous states of being. "The well is
|
|
dry" could be true for any extent of time, but "taking the ball" either
|
|
happens at a given moment or doesn't: it is not continuously true. We are
|
|
therefore in the business of counting events, not measuring durations.
|
|
Another reason is that the point of reference for past tenses is different.
|
|
It makes no sense to say "if we were looking" because that would mean at
|
|
a time just before the current action, when actions were probably not
|
|
happening at all; while "if we had looked" and "if we have looked"
|
|
would almost always be identical in meaning for the same reason. So we need
|
|
a much simpler system with just one possible past tense; we don't need to
|
|
keep two different states; and we use the extra storage to enable us to
|
|
count the number of times, and the number of turns, to at least 31767
|
|
instead of stopping at 127. (We also generate more legible code to test
|
|
past tense actions.)
|
|
</p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. Past Action Routines. </b>Actions can be quite complicated to test even in the present, and this is
|
|
much more conveniently done in a routine with its own Inform-generated stack
|
|
frame; so each past tense action has its own testing routine, with a name
|
|
like <span class="extract"><span class="extract-syntax">PAPR_41</span></span>, which returns true or false depending on whether the action
|
|
is going on now. The word array <span class="extract"><span class="extract-syntax">PastActionsI6Routines</span></span> then contains a
|
|
null-terminated list of these routines.
|
|
</p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Track Actions. </b>The routine <span class="extract"><span class="extract-syntax">TrackActions</span></span> then updates the two arrays, and is the
|
|
equivalent for past tense actions of <span class="extract"><span class="extract-syntax">ChronologyPoint</span></span>. It's called
|
|
twice for each in-world action: <span class="extract"><span class="extract-syntax">TrackActions(false)</span></span> just as a new
|
|
action is about to begin, and then <span class="extract"><span class="extract-syntax">TrackActions(true)</span></span> just after it
|
|
has finished — note in particular that if action B happens in the
|
|
middle of action A, for instance because of a try phrase, then the
|
|
<span class="extract"><span class="extract-syntax">TrackActions(true)</span></span> call for B happens when A is back as the current
|
|
action. In fact, that's the point: because it tells us that B was not
|
|
the main action for the turn, but only a phase which has now passed
|
|
again.
|
|
</p>
|
|
|
|
<p class="commentary">For each of the action patterns we track, we need to count the number of
|
|
times such an action has been tried ({\it not} the number of times it
|
|
succeeded), and also the number of consecutive turns on which it has been
|
|
"the" action. The count of the number of tries is unambiguous and easy to
|
|
keep: it is incremented at the start-of-action call only, and only if the
|
|
action matches. But the consecutive turn count is more problematic. The
|
|
user wants to think of actions and turns as synonymous, and to write
|
|
conditions like "Before going for the third turn", and we want to play
|
|
along because that's a natural phrasing: but actions and turns are not
|
|
synonymous at all. The rules are therefore:
|
|
</p>
|
|
|
|
<ul class="items"><li>(1) At the start-of-action call, provided the action is not a silent one,
|
|
the consecutive turns count is either incremented or zeroed, depending on
|
|
whether the action matches. Silent actions are ignored because they are
|
|
almost always knock-on actions tried in the course of other actions, and
|
|
are certainly not the "main" action of the turn. But the count can be
|
|
incremented only once in the course of each turn, so that "Instead of
|
|
taking something for the third turn: ..." cannot happen on the very first
|
|
turn because TAKE ALL causes three or more take actions.
|
|
</li><li>(2) At the readjustment call, provided the action is not a silent one,
|
|
the consecutive turns count is zeroed if the action does not match.
|
|
</li></ul>
|
|
<p class="commentary">Why do we zero the count in rule (2)? Well, suppose that the player types
|
|
OPEN BOX, so that the opening action takes place, and that it causes a
|
|
further (non-silent) action, say examining the lid: and suppose that the
|
|
action pattern we track the turn count for is "examining something".
|
|
Then the following calls take place:
|
|
</p>
|
|
|
|
<ul class="items"><li>(a) <span class="extract"><span class="extract-syntax">TrackActions(false)</span></span> while the action is "opening the box".
|
|
Turn count zeroed by rule (1).
|
|
</li><li>(b) <span class="extract"><span class="extract-syntax">TrackActions(false)</span></span> while the action is "examining the lid".
|
|
Turn count incremented by rule (1).
|
|
</li><li>(c) <span class="extract"><span class="extract-syntax">TrackActions(true)</span></span> while the action is "opening the box".
|
|
Turn count zeroed by rule (2).
|
|
</li><li>(d) <span class="extract"><span class="extract-syntax">TrackActions(true)</span></span> while the action is "opening the box".
|
|
Turn count zeroed by rule (2).
|
|
</li></ul>
|
|
<p class="commentary">Thus rule (2) prevents us from counting this turn as the first of a sequence
|
|
of turns in which examining something was the action, because it wasn't the
|
|
main action of the turn.
|
|
</p>
|
|
|
|
<p class="commentary">A further complication is that we need to record the qualification, or not,
|
|
even of silent actions, because testing rules like
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Instead of taking the top hat less than three times...</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">works by checking that (a) we are currently taking the top hat, and (b) have
|
|
done so fewer than three times before. (b) uses the turn count described
|
|
above; but (a) cannot simply look to see if that count is positive, since
|
|
the action might be happening silently and thus not have contributed to the
|
|
count; so we also record a flag to hold whether the action seems to be
|
|
happening in this turn, silent or not.
|
|
</p>
|
|
|
|
<p class="commentary">And a still further complication is that out-of-world actions should never
|
|
affect counts of turns for in-world actions. Thus,
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Every turn jumping for three turns: say "A demon appears!"</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">must not have the count to three broken by the player typing SAVE, which
|
|
causes an out-of-world action but doesn't use a turn. The simplest way to
|
|
deal with that would be to make <span class="extract"><span class="extract-syntax">TrackActions</span></span> do nothing when <span class="extract"><span class="extract-syntax">oow</span></span>
|
|
is set, but then we would get rules like this wrong:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Check requesting the pronoun meanings for the first time: ...</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">because it {\it does} make sense for OOW actions to have a count of how
|
|
many times they've happened, even though they don't occur in simulated
|
|
time. An OOW action can cause its own <span class="extract"><span class="extract-syntax">ActionCurrentlyHappeningFlag</span></span>
|
|
to be set, but it can't cause any other action's flag to be cleared, and nor
|
|
can it zero the turns count for another action.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">TrackActions</span><span class="plain-syntax"> </span><span class="identifier-syntax">readjust</span><span class="plain-syntax"> </span><span class="identifier-syntax">oow</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0: </span><span class="identifier-syntax">PastActionsI6Routines</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax">: </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">PastActionsI6Routines</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax">).</span><span class="identifier-syntax">call</span><span class="plain-syntax">()) {</span>
|
|
<span class="plain-syntax"> </span><span class="comment-syntax">Yes, the current action matches action pattern i:</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">readjust</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">TimesActionHasHappened</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax">)++;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LastTurnActionHappenedOn</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">turns</span><span class="plain-syntax"> + </span><span class="constant-syntax">5</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LastTurnActionHappenedOn</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">turns</span><span class="plain-syntax"> + </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ActionCurrentlyHappeningFlag</span><span class="plain-syntax">-></span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">keep_silent</span><span class="plain-syntax"> == </span><span class="reserved-syntax">false</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">TurnsActionHasBeenHappening</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax">)++;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
<span class="plain-syntax"> </span><span class="comment-syntax">No, the current action doesn't match action pattern i:</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">oow</span><span class="plain-syntax"> == </span><span class="reserved-syntax">false</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">keep_silent</span><span class="plain-syntax"> == </span><span class="reserved-syntax">false</span><span class="plain-syntax">) { </span><span class="identifier-syntax">TurnsActionHasBeenHappening</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LastTurnActionHappenedOn</span><span class="plain-syntax">--></span><span class="identifier-syntax">i</span><span class="plain-syntax"> ~= </span><span class="identifier-syntax">turns</span><span class="plain-syntax"> + </span><span class="constant-syntax">5</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ActionCurrentlyHappeningFlag</span><span class="plain-syntax">-></span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Storage. </b>The necessary array allocation.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">TimesActionHasHappened</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">NO_PAST_TENSE_ACTIONS</span><span class="plain-syntax">+1);</span>
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">TurnsActionHasBeenHappening</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">NO_PAST_TENSE_ACTIONS</span><span class="plain-syntax">+1);</span>
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">LastTurnActionHappenedOn</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">NO_PAST_TENSE_ACTIONS</span><span class="plain-syntax">+1);</span>
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">ActionCurrentlyHappeningFlag</span><span class="plain-syntax">->(</span><span class="identifier-syntax">NO_PAST_TENSE_ACTIONS</span><span class="plain-syntax">+1);</span>
|
|
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">past_chronological_record</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">NO_PAST_TENSE_CONDS</span><span class="plain-syntax">+1);</span>
|
|
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">present_chronological_record</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">NO_PAST_TENSE_CONDS</span><span class="plain-syntax">+1);</span>
|
|
</pre>
|
|
<nav role="progress"><div class="progresscontainer">
|
|
<ul class="progressbar"><li class="progressprev"><a href="S-tst.html">❮</a></li><li class="progresssection"><a href="S-msc.html">msc</a></li><li class="progresssection"><a href="S-stt.html">stt</a></li><li class="progresssection"><a href="S-lgh.html">lgh</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-ord.html">ord</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-fgr.html">fgr</a></li><li class="progresssection"><a href="S-otf.html">otf</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-wrl.html">wrl</a></li><li class="progresssection"><a href="S-mpr.html">mpr</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progresssection"><a href="S-tm.html">tm</a></li><li class="progresssection"><a href="S-tst.html">tst</a></li><li class="progresscurrent">chr</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progressnext"><a href="S-str.html">❯</a></li></ul></div>
|
|
</nav><!--End of weave-->
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|