I’m folding this since it’s my personal opinion and there’s better advice later in the thread from people who know what they’re actually doing. Feel free to skip forward.
Hanon's inane and incorrect ramblings
[Cue Hanon Sermon #93 - not to @Falsoon2 but to new Inform authors who may be reading]
This is exactly why you’ll frequently hear us crotchety old-timers heavily advising against using INSTEAD rules if you can use another type of rule. It’s not that you shouldn’t use INSTEAD when it’s warranted, but it’s easy-to-understand simplicity lures new authors into using it as a catchall monkey-wrench without understanding it’s deceptive power.
Falsoon got stuck because of an “instead of taking something” rule intended for one specific use-case, but he inadvertently didn’t limit it to that scenario, thus causing a mystery situation where the parser was disabled from letting the player take an item elsewhere and it wasn’t at all obvious why.
One thing about INSTEAD rules, you cannot stack them. (Can you even continue the action after an instead? Not sure.) You cannot write.
Instead of taking something:
say "Foo!".
Instead of taking something:
say "Bar!"
Those won’t both fire because INSTEAD temporarily shuts off the parser, fails the action, and follows the instructions the author writes directly.
In the aforementioned case, since the compiler stacks the rules in code-order you’ll probably only get the “Bar!” message.
INSTEAD is a manager override that allows the author to do anything even if it’s not logical based on game-world model or game state that the parser would normally not allow:
The Gothic Mansion is scenery in Graveyard.
Instead of taking Gothic Mansion:
say "All right, Hercules..."
now the player carries Gothic Mansion;
say "(Taken.)";
But the regular action-handling rules can stack and you can have multiples:
Check taking:
if the player does not have hands:
say "YOU MAY NAHT." instead.
Check taking:
if the noun is lava:
say "YOU MAY NAHT." instead.
Note that “instead” is very useful appended to rules to stop the action if a situation applies. If I write
Instead of taking:
if the player does not have hands:
say "YOU MAY NAHT.";
if the noun is lava:
say "YOU MAY NAHT.";
That might seem like the same exact thing, but the preceding “instead” (without a condition like “when the location is The Barn”) has already marked the action as failed and is only going to run the commands in THAT rule. I’ve effectively disabled taking for the entire game by telling the parser “Instead of processing any rules for taking, do only this…”
Usually the best use for instead is when you intend to blanket-disallow or redirect a general or specific action for the entire game.
Instead of attacking:
end the story saying "I won't support your violent tendencies."
Instead of jumping when can-fly is true:
try flying up.
In most circumstances, almost any INSTEAD can be written as a check rule.
The block attacking rule does nothing.
Check attacking something:
if the noun is the adorable puppy:
say "YOU SHALL NAHT." instead;
Many new authors will use instead because they want a special circumstance but otherwise want things to work normally. That’s what the phases are for.
Instead of attacking the burly orc:
if the player wears the Amulet of Orcbane:
say "HUUAARRGGGHHH!";
increase atk-power by 3;
otherwise:
[I've got to duplicate the remainder of the attack action here]
Since the parser been told to go on break, it can’t take up the rest of the “attack” rules and functions I may have written.
Whereas if I’ve set up my attacking rules correctly, adding a side effect is merely:
Carry out attacking the burly orc:
if the player wears the Amulet of Orcbane:
say "HUUAARRGGGHHH!";
increase atk-power by 3.
And that doesn’t stop the action and continues with all the other rules that might apply.