#define CAN_SEE(sub, obj) \
(SELF(sub, ojb) || 
 ((GET_REAL_LEVEL(sub) >= GET_INVIS_LEV(obj)) && IMM_CAN_SEE(sub, obj)))                           
#define SELF(sub, obj) ((sub) == (obj))

#define IMM_CAN_SEE(sub, obj) \
(MORT_CAN_SEE(sub, obj) || PRF_FLAGGED(sub, PRF_HOLYLIGHT))

#define MORT_CAN_SEE(sub, obj) \
(LIGHT_OK(sub) && INVIS_OK(sub, obj))

#define LIGHT_OK(sub) \
(!IS_AFFECTED(sub, AFF_BLIND) && 
 (IS_LIGHT((sub)->in_room) || IS_AFFECTED((sub), AFF_INFRAVISION)))


#define IS_AFFECTED(ch, bit)  AFF_FLAGGED(ch, bit)
#define AFF_FLAGGED(ch, flag) AFF_FLAGS(ch).flag
#define AFF_FLAGS(ch)         ((ch)->char_specials.saved.affected_by)

ch->char_specials.saved.affected_by.flag
