ID:2080437
 
So I'm trying to make a weather effect (in this case snowing) and I ran into a problem. I made the snow effect on plane -2, the snow turf on plane -1 and all the other atoms remain on plane 0. The snowing effect only renders on snow turfs, as planned, but it also renders on the void (or whatever it's called).

Here's an image: https://i.imgur.com/qStIzd2.png

First I had the image in the user's screen and then I tried client.images and there doesnt seem to be a difference. I also tried the TILE_BOUND appearance flag but I guess it doesn't do what I thought it would do.

Is there any way to have the effect not render on the void (the blackness)?
Having it appear on the users interface will layer it above anything not on the interface. I don't know if this is the optimal way of fixing your issue, but you could set all the empty areas(the void stuff) equal to a turf you define ex. world/turf=/turf/void. Then giving the /turf/void a higher layer or plane than the snow effect. That will basically hide the snoweffect. just make sure all other hud/interface objects have a higher layer than what you set the /turf/void to.
That's not what that variable does though

world
turf=/turf/void//Changes all void spaces to ingame to turf
turf
void
icon='black.dmi'//A black icon
layer=5//A layer thats higher than snow effects but lower than onscreen objects
That variable is already defined, it just places that turf on tiles that dont have any turfs on them
okay, I see youre talking about darkness from opacity. I thought those were just empty turfs my apologizes.
Yeah I see how that can be misinterpreted.
The easiest way would be to make the area inside the ship different from outside it and sending an image.
area
var/image/snoweffect
var/list/SnowWatchers=new
Outside
New()
..()
snoweffect=image('snoweffects.dmi',src,"snowstate",6)
Inside
New()
..()
SnowingCycle()
proc
SnowingCycle()
var/area/Inside=locate(/area/Inside)
var/area/Outside=locate(/area/Outside)
while(src)
sleep(rand(30,300))
Snowing(Inside,Outside)
world<<"Snow on"
sleep(rand(30,300))
world<<"Snow off"
StopSnowing(Inside)
mob/var/tmp/list/effects=new
proc/Snowing(var/area/Inside,var/area/Outside)
set waitfor=FALSE;
for(var/mob/Player in Inside)
if(Player.client)
Inside.SnowWatchers+=Player
Player.effects["Snowing"]=Outside.snoweffect
Player.client.images+=Player.effects["Snowing"]
proc/StopSnowing(var/area/Inside)
for(var/mob/Player in Inside.SnowWatchers)
Player.client.images-=Player.effects["Snowing"]
Player.effects["Snowing"]=null
Inside.SnowWatchers-=Player

There no effective way to solve this problem with the snoweffects onscreen.
Yeah I know that, but it ignores what I'm trying to accomplish, namely just overlaying an image and having that image be visible over some turfs only without having to worry about areas at all. But alas BYOND doesn't support this for some reason. Lummox pls
yeah if you don't want to worry about areas you can use objs it will only take alittle bit of extra coding from the above, you'll just have to highlight all the snowing areas as objects. If snowing is just everywhere, than you're much better off using area. Though if the ship is the only thing having this opacity problem then just use objs for it.
If the snow was opaque, you could multiply it onto a white texture'd plane, but alas, the trasparency means the white would bleed through and look terrible.
SEE_PIXELS would do what you want. It's not currently supported in the webclient but what it does is overlay blackness over the other opaque turfs. The blackness is on plane 0.
In response to Lummox JR
The snowing effect is on plane -1 though and it still shines through
In response to Lummox JR
Lummox JR wrote:
SEE_PIXELS would do what you want. It's not currently supported in the webclient but what it does is overlay blackness over the other opaque turfs. The blackness is on plane 0.

Are you sure its on plane 0? Because a white image still draws above it even if the image is on plane -1.