ID:2268631
 
Applies to:DM Language
Status: Open

Issue hasn't been assigned a status value.
One of the hottest new features that can be added to SS13 codebases right now is the ability to have stations with height to them. Right now, adding multiple layers is an absolute pain in the ass involving detecting updates, and it adds a shitton of performance problems that no one really wants to deal with. So what is my proposal? Add a few new appearance flags.

- 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)
the proposed (and already being worked on) visible contents might make some of this less painful, but ya, the ability to overlay multiple parts of the world on to the viewport would be super helpful.
Oi lummox.
it's been 1 month, at the time of me writing this entry into my diary, Lummox had still not responded, food and morale was running low as we tried to look to the lower decks, but ofcourse failed, due to the lack of multiple eyes. If only Lummox replied and gave us hope for a brighter future.

I think we won't survive much longer, if you find this please find Lummox and tell him to add multiple eyes.
silence means noooooo
Your example of using the Z below would require the client's bubble to cover other Z levels, which I assume it doesn't already.

Would require the client to maintain as many bubbles as it has eyes, which probably wouldn't be too bad if each eye had a configurable view range.
Is it being worked on?
vis_contents can effectively do what you want.
This is not currently in the works. The main thing is, it's extremely difficult. Internally the server expects only one eye per client, and the client has all the view-related stuff broken down into a bunch of global vars. So this is a very very tricky thing to change. Probably doable, but very hard.

Nadrew is correct though that vis_contents covers a lot of this. One SS13 server has put the new feature to work in a rather glorious way.