物件 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() 可以為玩家增加一些職業上的特殊能力, 像是賊、戰士、魔法師等等的特殊能力. 這樣一來, 可以使玩家的物件不會因為各種職業而變得太複雜.