Restraining movements

This seems like it should be a lot simpler than it looks… I just want to prevent the PC from going anywhere for a little while. Like for instance, if the PC is tied to a chair, then he should not be able to alter his posture, get out of the chair, reach for things or exit the room. Is there some pre-made actor state I’m not finding in the documentation, or do I need to override each individual action (get up, go [direction], grab [thing]) one by one?

The ActorState class has a beforeAction method, which I believe is called as part of the action sequence whenever that state is active. In the tied-up ActorState, put something in the beforeAction like (untested, not sure Go is a legit action):

if (gActionIn(Stand, Take, Go))

An alternative is to use the actorAction() method on the actor (in this case the PC). It may be easier to list all the actions you want to allow and trap the rest, e.g.:

me: Actor
  ...
  actorAction()
  {
      if(isTiedUp && !gAction.ofKind(SystemAction)
         && !gActionIn(Examine, Look, ListenTo, Smell, Inventory)
         && !gAction.ofKind(SenseImplicitAction))
           failCheck('You can't do that while you\'re tied up. ');
  }

  isTiedUp = nil

This allows system commands like UNDO or QUIT, and sensory commands like LISTEN and SMELL as well as EXAMINE and INVENTORY but traps all other actions, which I suspect is something close to what you want, though you can always tweak the list of allowed actions.