- EYE_PLANE
This is the crux of this feature. This can be applied to mobs to make them a separate eye. Now just add this "mob" to the screen list of the desired client and the next thing you know everything that that mob sees is displayed over the client's viewport on top of what it would normally see.
Now before I get to the rest of the appearance flags, I'll explain how the client should render this. First it should create a new one of those fancy layers the thing renders to (sort of like a KEEP_TOGETHER or PLANE_MASTER). Then this thing renders all the fancy stuff in there. In fact, it renders to it like it's the whole scene, including things such as /image object,s PLANE_MASTERs, and all the fancy shit you normally expect when you render. Then, this final composite is drawn as an object with this mob object's screen coordinates and shit as if it is a screen-sized normal icon, with the same layer and plane and all the other fancy stuff as that mob object. (also it would be really bae if we could override the view of this seperate eye.)
Now I can get to the rest of the appearance flags!
- MAINEYE_MASTERS_ONLY
Use this on a PLANE_MASTER and now it will only be applied to planes in the main eye!
- EYEPLANE_MASTERS_ONLY
Same as above but it will only be applied to planes in the sub-eyes.
Here's some example code:
/mob/eyeplane
appearance_flags = EYE_PLANE
plane = -10
/mob/player
var/mob/eyeplane/lowerlayer
/mob/player/New()
..()
lowerlayer = new(locate(x,y,z+1))
/mob/player/Login()
. = ..()
client.screen |= lowerlayer
/mob/player/Move()
. = ..()
lowerlayer.loc = locate(x,y,z+1)