Monday, April 30, 2007

Draft for “Making the Machine work”

If there is no rule called “The Machine”, then this proposal has no further effect.

Create a new sub-rule of “The Machine” called “The Machine in action” with text:

At any given time, the Machine is considered to be either “Running” or “Standing by”.  At the moment this paragraph is added to the Ruleset, the Machine is Standing by.

When the Machine is Standing by, it becomes Running if any of the following occur:

*The order or contents of the list of Parts on the “Machine Parts” page or of the list of Variables on the “Machine Variables” page change (including the addition or removal of a Part or Variable).
*A Worker is added to or removed from the list of Active Workers in the blog sidebar.
*A Proposal becomes Enacted.  In this case, the specified effects of said Proposal occur before the Machine becomes Running.
*A value which the Ruleset requires to be tracked in the GNDT changes.

When the Machine becomes Running, the following steps take place, in order:

*Step 1 - If any Rule other than this Rule requires changes to be made to the Gamestate, those changes are made as usual, until no such changes are required.  (If there is an infinite loop within the Ruleset itself, no out will be provided, of course.  Don’t let that happen.)
*Step 2 - If the order and contents of the list of Variables on the “Machine Variables” page are identical to what they were during any previous iteration of Step 2 that was made since the Machine was most recently Standing by, then the Machine becomes Standing by, and any remaining steps are not performed.  (This is the clause that allows us to break out of infinite loops.  Note that the break-out always occurs immediately after we’ve checked that the Ruleset itself will not throw us back into the loop)
*Step 3 - If no requirements for the Initiator of any Part are satisfied, then the Machine becomes Standing by, and any remaining steps are not performed.
*Step 4 - Changes to the “Machine Variables” page are made as described in the Effect of the first Part for which the Initiator requirements are satisfied (when the Parts are considered in the order in which they are listed on the “Machine Parts” page).  No aspect of the Gamestate other than the contents of the “Machine Variables” page may be changed in this way.
*Step 5 - Repeat Steps 1-5 in order, until a Step indicates that remaining steps are not to be performed.

Comments

Hix:

30-04-2007 19:48:20 UTC

In a nutshell:  certain events (any events of significance, basically) cause the machine to start running, which is just a way of saying that all the Parts are going to check to see if they’ve been triggered.  Assuming this does not lead to some infinite nonsense, all triggered Parts will do their thing (“Step 4”), and the machine will stop running for now.  The rest of the rule deals explains how priority is handled in the (hopefully rare) case that there is conflict among Parts, or conflict between Parts and other secions of the Ruleset, or a repeating loop of changes to the Variables. 

The list of ways the Machine can start running is not meant to be exclusive, so other Rules could potentially set off the Machine.

I am also aware that although repeating loops will be stopped before going infinite, there is still the possibility that triggers may cause an infinite number states which never repeat to occur.  Preventing such infinities would require precicely defining them, which seems non-trivial; also, I think that it will be a simple matter to catch any Parts which would enable infinite triggering before they ever get into the Machine.  As far as I’m concerned, if someone manages to slip such an abusable Part into the Machine past all our watchful eyes, and find a use for the infinite chaos, then e’s probably entitled to something for eir cleverness.

Amnistar: he/him

30-04-2007 19:54:12 UTC

I think it looks good, but then, I’m notoriously bad at catching problems, I’m an idea man damnit! :p

BobTHJ:

30-04-2007 20:01:05 UTC

What is to prevent me from re-ordering the parts on the Wiki page to trigger the parts I want? We want to make sure that part order can not be changed unless the rules specify it.

Hix:

30-04-2007 20:04:36 UTC

I already took care of that in “Proposal: Goldberg Machine (just the basics)”:

There exists a wiki page “Machine Parts” which contains a list of all current Parts of the Machine.  The order and contents of this list are considered part of the Gamestate (and thus may not be modified except as permitted by the Ruleset).