ID:2378817
 
(See the best response by Lummox JR.)
Code:
obj/spotlight
plane = 2
blend_mode = BLEND_ADD
icon = 'images/spotlight.dmi'
color = list(1,1,1,1,1,1,1,1,1,1,1,1)
pixel_x = 0
pixel_y = 0
var/timer1 = 0
var/timer2 = 0
ex_act()
return
Move()
return
New()
..()
special_processing += src
special_process()
timer1 = timer1 + 1
timer2 = timer2 + 2
pixel_x = (304-sin(timer2)*304)-32
pixel_y = (240-cos(timer1)*240)-32

obj
proc/special_process() //special_processing
return
nice
icon = 'images/nice.png' //A fully black image
plane = 2
color = list(null,null,null,null,"#0030")
blend_mode = BLEND_MULTIPLY
ex_act()
return
Move()
return


Problem description:
The spotlight should make a hole in obj/nice. It doesn't though, how do I do it?

Without a plane master you're not going to get the type of interaction between things sharing a plane as you want. There's no real reason not to use one.
I kinda have a backdrop in the background and making the plane master do color_multiply makes everything the background.
You could have the background on a different plane than the lighting stuff, they won't be effected by a plane master if it's not on the same plane.
How exactly, do you mean having various plane masters?

Because the background is on plane -98, and the plane master is set to plane = 0. And it still happens.
I believe you'd need a master on both plane 0 and -98 to prevent them from conflicting. However I'm a bit rusty on using planes so there's probably someone better who can help you with the specifics here.
Best response
Is the goal here that you want total blackness except where the spotlight appears? Because your color values appear to be all wrong for that.

What you would want to do would be for the nice object (the darkness that's covering up your map) to have no blend mode, and a dark color that is fully opaque. Your spotlight really shouldn't need a color if the icon is white; the BLEND_ADD mode is good enough. Finally you would need a plane master on that same plane, with the BLEND_MULTIPLY mode. There's no way to do this without a plane master.

The way plane masters work is that everything on that plane is drawn to a temporary surface, and then that is given the color alterations, transforms, filters, etc. of the plane master. It's likely you do not need a plane master at all on plane 0, but you would need one for this lighting effect on plane 2.
I have 2 objs with plane_master on appearance_flags. The one on plane 0 is normal, and the one with plane 2 has blend_multiply, but it doesn't work still. What am I doing wrong here? I have both on screen.

/obj/screen23/plane_master_turf2
plane = 0
screen_loc = "1,1"
appearance_flags = PLANE_MASTER | PIXEL_SCALE

/obj/screen23/plane_master_turf1
plane = 2
screen_loc = "1,1"
color = list(null,null,null,null,"#111D") //I tried this as a alternate method, since the nice object wouldn't work. It doesn't even darken the screen. Both planes are on screen.
blend_mode = BLEND_MULTIPLY
appearance_flags = PLANE_MASTER | PIXEL_SCALE
Well first off you should totally ditch the color on your lighting plane master; that's never going to work the way you want.

The objects that should appear on plane 2 (drawn on that plane master) are the black/dark backdrop, which is generally best if you use a black icon with screen_loc "CENTER" and transform it to cover the map, and whatever lights you have that will be drawn over it with BLEND_ADD. The darkness should be a fairly low layer like 1.

Login to reply.