I’m not an expert, but here are the things that look problematic to me:
-
It says “let further place be the room second noun of the location” but I’m pretty sure you want “the room second noun FROM the location”.
-
Stopping the action is equivalent to failing the rule, which for an instead rule means the action as a whole fails, but the rest of the logic implies a successful action. That might matter if you later want to check on successful past actions.
-
There is a big difference between instead rules and check rules. Check rules are bound to a specific action, while instead rules are not. This is why it is legal to have a rule start with “Check throwing it to”, which functionally means, “apply this rule to every single throwing it to action no matter what the noun and second noun are”. A rule preamble of “Instead of throwing it to” is not functioning because a complete action needs to be specified for the instead rule – in this case something of the form “throwing X to Y” (where X and Y don’t necessarily have to be specific things but can’t be “it” or absent) so that the action-processing rules can know when to apply the rule.
-
A direction is a kind of object, and a thing is a kind of object, but a direction is not a kind of thing. This will matter when writing rule preambles like “Instead of throwing a smoke grenade to something…”, which can be written as a rule but will never be triggered because no such action can actually be generated from player input. This is because your defined syntax allows only a direction as the second noun, and “something” means a thing.
-
You really don’t want to cram all of your action processing logic into instead rules like that. The other action-processing rulebooks exist for a reason and you’ll save yourself a lot of hassle if you work with them instead of against them.
You might try something like:
[code]A room can be smoky.
A smoke grenade is a kind of thing. The player carries a smoke grenade and a spyscope.
Place is a room.
Other-Place is east of Place.
Throwing it to is an action applying to one thing and one visible thing. Understand “throw [something] to [a direction]” or “throw [something] [a direction]” as throwing it to.
Definition: A direction is throwable rather than unthrowable if the room it from the location is a room that is not the location.
Check throwing something that is not a smoke grenade to a direction (this is the can’t throw things that aren’t smoke grenades rule):
say “Doing that couldn’t possibly be good for [the noun].” instead.
Check throwing a smoke grenade to an unthrowable direction (this is the can’t throw that way if you can’t go that way rule):
say “But then it would bounce off the [second noun] wall!” instead.
To smoke-blast (targeted room - a room):
now the targeted room is dark;
now the targeted room is smoky.
Carry out throwing a smoke grenade to a throwable direction (this is the smoke grenades are smoky rule):
let further place be the room second noun from the location;
smoke-blast further place.
Report throwing a smoke grenade to a throwable direction (this is the report successful smoke grenade throw rule):
say “You chuck [a noun] [second noun], filling the further chamber with smoke.”;
test me with “e / w / throw spyscope west / throw grenade west / throw spyscope east / throw grenade east / e / w”[/code]
The check rule could be an instead rule with similar function. The differences in the long-term are:
-
Your instead rulebook is not littered with a ton of different rules, even those only applicable to certain actions like this one is.
-
You don’t have to worry about rule ordering to keep a check rule from interfering with things like:
Instead of throwing something to south in Villain's Hideout when in the presence of Joey the Sidekick (this is the Joey prefers the indirect approach rule):
say "Joey stays your hand. 'I have a better idea,' he says, reaching for his Hack-o-Matic 5000.";
try Joey hacking the master computer with the Hack-o-Matic 5000.