I was curious about how much I actually use procedural rule manipulation, so I looked at the main project I was working on several months ago. Searching for the word “procedural” in the source text (in a project perhaps only fifty-percent complete) turned up the following:
[code]Procedural rule for examining a backdrop: ignore the general report examining rule.
Procedural rule for an actor searching an underside: ignore the standard search containers rule.
Procedural rule for examining a bodycomponent that is embodied by a person: ignore the standard examining rule; ignore the general report examining rule.
Procedural rule for examining a gemstone: ignore the general report examining rule.
Procedural rule for examining a person: ignore the standard examining rule; ignore the general report examining rule.
Procedural rule for examining a backdrop (called cfaroff):
unless cfaroff is backdropinteractive:
ignore the general report examining rule;
otherwise:
continue the activity.
Procedural rule for someone examining when the person asked is vision-impaired or the person asked is hearing-impaired: substitute the diminished xing capability rule for the report other people examining rule.
Procedural rule for an actor taking something when the noun is enclosed by a broke person (this is the corpse-looting rule): ignore the can’t take people’s possessions rule.
Procedural rule while eating something (called AA) (this is the skip stupid eating restrictions rule):
if the player can touch AA:
if AA is not enclosed by something worn by a not broke person and AA is not enclosed by something carried by a not broke person and AA is not worn by a not broke person and AA is not carried by a not broke person:
ignore the carrying requirements rule.
Procedural rule for an actor putting something on a subpole: ignore the can’t put onto something being carried rule.
Procedural rule for an actor connecting something to a subchain: ignore the broke check for connecting second part rule.
Procedural rule for trying entering a subchain: ignore the how many angels can dance on the head of a pin rule.
Procedural rule for someone trying entering a subchain: ignore the how many npcs can dance on the head of a pin rule.
Procedural rule for examining a subchain: ignore the after xing a supporter rule.
Procedural rule for examining a bodycomponent (called thegoods) that is embodied by a person:
ignore the general report examining rule;
unless thegoods is a skinsign:
ignore the standard examining rule;
otherwise:
continue the activity.
Procedural rule for an actor drying a person with something:
ignore the report drying rule.
Procedural rule for an actor connecting a power-plug to a power-socket: ignore the generic connectblock rule.
Procedural rule for an actor disconnecting a power-plug from a power-socket: ignore the generic disconnectblock rule.
Procedural rule for an actor connecting a beltish thing to a belt: ignore the generic connectblock rule.
Procedural rule for an actor putting something on an idholder: ignore the can’t put onto something being carried rule.
Procedural rule for an actor putting something on a dtchain1:
ignore the limiting keychains rule.
Procedural rule for examining a dtchain1:
ignore the list included keys rule.
Procedural rule for an actor putting something on a belt: ignore the can’t put onto something being carried rule.
Procedural rule for an actor disconnecting a beltish thing from a belt: ignore the generic disconnectblock rule.
Procedural rule for an actor connecting a riflestrap to a firearm: ignore the generic connectblock rule.
Procedural rule for an actor disconnecting a riflestrap from a firearm: ignore the generic disconnectblock rule.
Procedural rule for an actor connecting a gpq47 to an msgrifle: ignore the generic connectblock rule.
Procedural rule for an actor disconnecting a gpq47 from an msgrifle: ignore the generic disconnectblock rule.
Procedural rule for examining a closed folding pocket knife: ignore the check that blade rule.
A procedural rule for an actor touching a biometric scanner:
ignore the report touching things rule.
Procedural rule for examining a lipstick: ignore the general report examining rule.
Procedural rule for an actor wearing a lipstick: substitute the lipstick-wearing step-1 rule for the standard wearing rule; ignore the standard report wearing rule.
Procedural rule for an actor unlocking the prddoor4-2 with something: ignore the can’t unlock without the correct key rule.
Procedural rule for an actor ringing the prfdbell: ignore the std useless ringing rule.
Procedural rule for an actor ringing the prfdkno: ignore the std useless ringing rule.
Procedural rule for an actor unlocking the prdentrance-2 with something: ignore the can’t unlock without the correct key rule.
Procedural rule for an actor searching the prfdpeep: ignore the can’t search unless container or supporter rule.
Procedural rule for examining the prstairs1: ignore the xing a door rule.
Procedural rule for examining the vjboxfiller: ignore the general report examining rule.
Procedural rule for an actor folding the pratticladder: ignore the general block useless folding rule.
Procedural rule for an actor unfolding the pratticladder: ignore the general block useless unfolding rule.
Procedural rule for examining the hubstairs: ignore the xing a door rule.[/code]
The above is intended as an example of how often I use this sort of syntax, and for what purposes; I’m not looking for any help rewriting or redesigning anything.
Although I don’t really understand the mechanics of the “enhancing performance” angle (we’re not talking about developing <insert title of latest blockbuster 3D twitch-gaming clickfest here>), I can see why the developers may want to get rid of procedural rule manipulation for aesthetic purposes. Procedural rule manipulation horribly clutters the rulebooks; if you want a rule to function differently than its default state, just rewrite the relevant rule. Simple, right?
The problems with this development change are all on the end-user’s side, and I think mainly fall into two categories.
The first is that working with rulebooks is in my view the most sophisticated sort of use of I7, and far out of reach of beginners or even those with intermediate-level skills. Procedural rule manipulation is a quick and easy tool that’s very helpful in allowing those with a non-expert understanding of I7 to affect changes to unhelpful or unattractive (from the perspective of the particular end-user) aspects of the Standard Rules. Attempting to explain to someone with only a moderate I7 skillset why and how they must comprehensively rewrite some portion of the Standard Rules for what may seem like a minor effect may result in some potential end-users writing the program off as too abstruse and not fulfilling its promise of being an easy and simple coding platform. I think it’s a mistake to understimate these sorts of concerns.
Related to but distinct from this first point is the reality that, even for advanced end-users, the prospect of extensively rewriting large sections of the Standard Rules to incorporate changed functionality or allow small exceptions of the sort Ron mentioned above is tedious at best and daunting at worst. For example, consider several lines from the example I posted above:
[code]Procedural rule for examining a backdrop: ignore the general report examining rule.
Procedural rule for examining a bodycomponent that is embodied by a person: ignore the standard examining rule; ignore the general report examining rule.
Procedural rule for examining a gemstone: ignore the general report examining rule.
Procedural rule for examining a person: ignore the standard examining rule; ignore the general report examining rule.
Procedural rule for examining a backdrop (called cfaroff):
unless cfaroff is backdropinteractive:
ignore the general report examining rule;
otherwise:
continue the activity.
Procedural rule for examining a bodycomponent (called thegoods) that is embodied by a person:
ignore the general report examining rule;
unless thegoods is a skinsign:
ignore the standard examining rule;
otherwise:
continue the activity.
Procedural rule for examining a lipstick: ignore the general report examining rule.
Procedural rule for examining the vjboxfiller: ignore the general report examining rule.[/code]
We can quickly begin to see the sort of serpentine form that my rewritten “general report examining rule” will take, with many exceptions both for broad categories of objects as well as individual items. While it’s trivially true that I was in fact already “rewriting” the rule anyway with each procedural exception, the experience will now be quite different as I will need to do the work formerly performed for me by Inform. Each time I require another changed consideration, I will have to rewrite an increasingly lengthy and complex rule rather than just add a simple “Procedural rule for…” line to the section of code I’m currently working on; just because I have the ability to do such a thing doesn’t mean I’ll look fondly upon the prospect of so doing.
Another example of this concern can be found at the link posted above by emshort, with:
Procedural rule when putting something on a keychain:
ignore the can’t put onto something being carried rule.
to now be replaced with:
[code]The keychain-aware carrying requirements rule is listed instead
of the carrying requirements rule in the action-processing rules.
This is the keychain-aware carrying requirements rule:
if locking or unlocking something with something which is on a keychain which is carried by the actor:
continue the action;
abide by the carrying requirements rule.[/code]
A requirement to now write 51 words where 17 words would formerly do certainly doesn’t seem like a very worthwhile improvement or enhancement from the average end-user’s perspective.
While eliminating procedural rule manipulation may streamline the rulebooks from the perspective of a disinterested observer, any particular end-user is much less likely to have trouble deciphering what may be considered (to an onlooker) an abstruse (i.e. filled with procedural exceptions) rulebook from their own particular project.
In general, then, I think the phase-out of procedural rule manipulation is a step away from user-friendliness (which is stipulated as a major feature of Inform 7). While I personally will be able (with extra effort) to work within these new constraints, I think this change will present yet another stumbling-block to encouraging potential new end-users to make the leap from toying around with I7 for a few days to create a small project rather than delving in and creating something truly interesting. I can appreciate that the decision has been made, though, so having now aired my opinion I’ll be quiet about the whole thing.