There are five main ways an object's movement around the screen can be limited:
For any of these, no part of the object's baseline (the bottom row of pixels of the object) can be on a part of the screen the object is not allowed on.
On the priority screen, the first four colors (0-3) have special meaning. Color 0 (black) is an unconditional barrier. No object is ever allowed to be on parts of the screen with a pixel of this color in the priority screen.
Color 1 (dark blue) is a conditional barrier. Objects are not normally allowed to be on a conditional barrier, unless the ignore.blocks command is used to allow them to do so.
Color 2 (dark green) is a signal barrier. This can be used to test if ego is walking into a certain place. Whenever ego is touching a signal barrier, flag 3 is set.
Color 3(dark cyan) signifies water. This is explained shortly.
You can set up an invisible rectangular block on the screen using the block command. The interpreter will not allow objects to cross the borders of the block (unless they are told to ignore blocks). You can remove the block using the unblock command. Objects can be told to ignore blocks using the ignore.blocks command and be told to observe blocks by using the observe.blocks command.
Parts of the priority screen which are color 3 (dark cyan) are considered to be "water". If you look at the priority screen of rooms that have lakes or rivers in them, you will usually see this. Parts of the priority screen which are not color 3 are considered to be "land". You do not have to use color 3 to represent water - it could also represent some other surface such as ice, lava, sand, a slippery floor, or whatever you need for that particular room.
Objects can be allowed only on water, only on land or on both. This is set be the object.on.water, object.on.land and object.on.anything commands.
Whenever ego's baseline is completely on water, flag 0 is set.
The horizon is an invisible horizontal line, usually near the top of the screen. It's position is set using the set.horizon command.
Normally, objects can not go above the horizon. This can be changed using the ignore.horizon and observe.horizon commands.
Objects are normally blocked by other objects on screen - that is, the baselines of objects are not allowed to touch each other. This can be changed, however, with the ignore.objs and observe.objs commands.