物件 shadow( 物件 ob, 整数 flag );
valid_shadow() 函数由主控物件定义. 如果 valid_shadow() 返回 1,
目标物件就无法投影, shadow() 函数会返回 0 而不是 ob.
如果物件 a 作为物件 b 的投影, 则所有对 b 的 call_other(func)
将会重新导向 (redirect) 到 a. 如果物件 a 没有定义 func 函数, 则 call_other(func)
会向 b 调用 func (等于没有 a 作为投影). 只有 a 可以用 call_other()
调用 b 的函数. b 无法以 call_other() 调用自己. 所有 b 内部的函数调用仅限于
b 自己本身.
有两个方法可以取消投影. 摧毁作为投影的物件, 或是摧毁被投影的物件. 后者被摧毁之后, 作为其投影的物件也会自动销毁.
利用投影, 可以使一个物件遮盖另一个物件, 而运作时又似乎像是没有遮住. shadow() 可以在不更动原始物件源代码的情形下, 改变一个物件的行为. 举例来说, shadow() 可以为玩家增加一些职业上的特殊能力, 像是贼、战士、魔法师等等的特殊能力. 这样一来, 可以使玩家的物件不会因为各种职业而变得太复杂.