mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-04 13:45:25 +01:00
873d80335a
* Fixes overlay lighting not having any color. (#62087) The overlay lighting plane was never actually being drawn, only used as an alpha filter over the main lighting plane. That's fine to do, but it only cuts away darkness, doesn't actually lay down any color. So let's properly draw it too, so things look right Fixes #61899 * Fixes overlay lighting not having any color Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
238 lines
8.5 KiB
Plaintext
238 lines
8.5 KiB
Plaintext
/atom/movable/screen/plane_master
|
|
screen_loc = "CENTER"
|
|
icon_state = "blank"
|
|
appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR
|
|
blend_mode = BLEND_OVERLAY
|
|
var/show_alpha = 255
|
|
var/hide_alpha = 0
|
|
|
|
//--rendering relay vars--
|
|
///integer: what plane we will relay this planes render to
|
|
var/render_relay_plane = RENDER_PLANE_MASTER
|
|
///bool: Whether this plane should get a render target automatically generated
|
|
var/generate_render_target = TRUE
|
|
///integer: blend mode to apply to the render relay in case you dont want to use the plane_masters blend_mode
|
|
var/blend_mode_override
|
|
///reference: current relay this plane is utilizing to render
|
|
var/atom/movable/render_plane_relay/relay
|
|
|
|
/atom/movable/screen/plane_master/proc/Show(override)
|
|
alpha = override || show_alpha
|
|
|
|
/atom/movable/screen/plane_master/proc/Hide(override)
|
|
alpha = override || hide_alpha
|
|
|
|
//Why do plane masters need a backdrop sometimes? Read https://secure.byond.com/forum/?post=2141928
|
|
//Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong.
|
|
/atom/movable/screen/plane_master/proc/backdrop(mob/mymob)
|
|
SHOULD_CALL_PARENT(TRUE)
|
|
if(!isnull(render_relay_plane))
|
|
relay_render_to_plane(mymob, render_relay_plane)
|
|
|
|
///Things rendered on "openspace"; holes in multi-z
|
|
/atom/movable/screen/plane_master/openspace
|
|
name = "open space backdrop plane master"
|
|
plane = OPENSPACE_BACKDROP_PLANE
|
|
appearance_flags = PLANE_MASTER
|
|
blend_mode = BLEND_MULTIPLY
|
|
alpha = 255
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/openspace/Initialize(mapload)
|
|
. = ..()
|
|
add_filter("first_stage_openspace", 1, drop_shadow_filter(color = "#04080FAA", size = -10))
|
|
add_filter("second_stage_openspace", 2, drop_shadow_filter(color = "#04080FAA", size = -15))
|
|
add_filter("third_stage_openspace", 3, drop_shadow_filter(color = "#04080FAA", size = -20))
|
|
|
|
/atom/movable/screen/plane_master/openspace
|
|
name = "open space plane master"
|
|
plane = OPENSPACE_PLANE
|
|
appearance_flags = PLANE_MASTER
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
///Contains just the floor
|
|
/atom/movable/screen/plane_master/floor
|
|
name = "floor plane master"
|
|
plane = FLOOR_PLANE
|
|
appearance_flags = PLANE_MASTER
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
///Contains most things in the game world
|
|
/atom/movable/screen/plane_master/game_world
|
|
name = "game world plane master"
|
|
plane = GAME_PLANE
|
|
appearance_flags = PLANE_MASTER //should use client color
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/game_world/backdrop(mob/mymob)
|
|
. = ..()
|
|
remove_filter("AO")
|
|
if(istype(mymob) && mymob.client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion))
|
|
add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA"))
|
|
|
|
|
|
/atom/movable/screen/plane_master/massive_obj
|
|
name = "massive object plane master"
|
|
plane = MASSIVE_OBJ_PLANE
|
|
appearance_flags = PLANE_MASTER //should use client color
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/ghost
|
|
name = "ghost plane master"
|
|
plane = GHOST_PLANE
|
|
appearance_flags = PLANE_MASTER //should use client color
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_NON_GAME
|
|
|
|
/atom/movable/screen/plane_master/point
|
|
name = "point plane master"
|
|
plane = POINT_PLANE
|
|
appearance_flags = PLANE_MASTER //should use client color
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/**
|
|
* Plane master handling byond internal blackness
|
|
* vars are set as to replicate behavior when rendering to other planes
|
|
* do not touch this unless you know what you are doing
|
|
*/
|
|
/atom/movable/screen/plane_master/blackness
|
|
name = "darkness plane master"
|
|
plane = BLACKNESS_PLANE
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
color = list(null, null, null, "#0000", "#000f")
|
|
blend_mode = BLEND_MULTIPLY
|
|
appearance_flags = PLANE_MASTER | NO_CLIENT_COLOR | PIXEL_SCALE
|
|
//byond internal end
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
///Contains all lighting objects
|
|
/atom/movable/screen/plane_master/lighting
|
|
name = "lighting plane master"
|
|
plane = LIGHTING_PLANE
|
|
blend_mode_override = BLEND_MULTIPLY
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/lighting/backdrop(mob/mymob)
|
|
. = ..()
|
|
mymob.overlay_fullscreen("lighting_backdrop_lit", /atom/movable/screen/fullscreen/lighting_backdrop/lit)
|
|
mymob.overlay_fullscreen("lighting_backdrop_unlit", /atom/movable/screen/fullscreen/lighting_backdrop/unlit)
|
|
|
|
/*!
|
|
* This system works by exploiting BYONDs color matrix filter to use layers to handle emissive blockers.
|
|
*
|
|
* Emissive overlays are pasted with an atom color that converts them to be entirely some specific color.
|
|
* Emissive blockers are pasted with an atom color that converts them to be entirely some different color.
|
|
* Emissive overlays and emissive blockers are put onto the same plane.
|
|
* The layers for the emissive overlays and emissive blockers cause them to mask eachother similar to normal BYOND objects.
|
|
* A color matrix filter is applied to the emissive plane to mask out anything that isn't whatever the emissive color is.
|
|
* This is then used to alpha mask the lighting plane.
|
|
*/
|
|
/atom/movable/screen/plane_master/lighting/Initialize(mapload)
|
|
. = ..()
|
|
add_filter("emissives", 1, alpha_mask_filter(render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE))
|
|
add_filter("object_lighting", 2, alpha_mask_filter(render_source = O_LIGHTING_VISUAL_RENDER_TARGET, flags = MASK_INVERSE))
|
|
|
|
|
|
/**
|
|
* Handles emissive overlays and emissive blockers.
|
|
*/
|
|
/atom/movable/screen/plane_master/emissive
|
|
name = "emissive plane master"
|
|
plane = EMISSIVE_PLANE
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
render_target = EMISSIVE_RENDER_TARGET
|
|
render_relay_plane = null
|
|
|
|
/atom/movable/screen/plane_master/emissive/Initialize(mapload)
|
|
. = ..()
|
|
add_filter("em_block_masking", 1, color_matrix_filter(GLOB.em_mask_matrix))
|
|
|
|
/atom/movable/screen/plane_master/above_lighting
|
|
name = "above lighting plane master"
|
|
plane = ABOVE_LIGHTING_PLANE
|
|
appearance_flags = PLANE_MASTER //should use client color
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
///Contains space parallax
|
|
/atom/movable/screen/plane_master/parallax
|
|
name = "parallax plane master"
|
|
plane = PLANE_SPACE_PARALLAX
|
|
blend_mode = BLEND_MULTIPLY
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/parallax_white
|
|
name = "parallax whitifier plane master"
|
|
plane = PLANE_SPACE
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/camera_static
|
|
name = "camera static plane master"
|
|
plane = CAMERA_STATIC_PLANE
|
|
appearance_flags = PLANE_MASTER
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/excited_turfs
|
|
name = "atmos excited turfs"
|
|
plane = ATMOS_GROUP_PLANE
|
|
appearance_flags = PLANE_MASTER
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
alpha = 0
|
|
|
|
/atom/movable/screen/plane_master/o_light_visual
|
|
name = "overlight light visual plane master"
|
|
plane = O_LIGHTING_VISUAL_PLANE
|
|
render_target = O_LIGHTING_VISUAL_RENDER_TARGET
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
blend_mode = BLEND_MULTIPLY
|
|
blend_mode_override = BLEND_MULTIPLY
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/runechat
|
|
name = "runechat plane master"
|
|
plane = RUNECHAT_PLANE
|
|
appearance_flags = PLANE_MASTER
|
|
blend_mode = BLEND_OVERLAY
|
|
render_relay_plane = RENDER_PLANE_NON_GAME
|
|
|
|
/atom/movable/screen/plane_master/runechat/backdrop(mob/mymob)
|
|
. = ..()
|
|
remove_filter("AO")
|
|
if(istype(mymob) && mymob.client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion))
|
|
add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA"))
|
|
|
|
/atom/movable/screen/plane_master/gravpulse
|
|
name = "gravpulse plane"
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
plane = GRAVITY_PULSE_PLANE
|
|
render_target = GRAVITY_PULSE_RENDER_TARGET
|
|
render_relay_plane = null
|
|
|
|
/atom/movable/screen/plane_master/area
|
|
name = "area plane"
|
|
plane = AREA_PLANE
|
|
render_relay_plane = RENDER_PLANE_GAME
|
|
|
|
/atom/movable/screen/plane_master/radtext
|
|
name = "radtext plane"
|
|
plane = RAD_TEXT_PLANE
|
|
render_relay_plane = RENDER_PLANE_NON_GAME
|
|
|
|
/atom/movable/screen/plane_master/balloon_chat
|
|
name = "balloon alert plane"
|
|
plane = BALLOON_CHAT_PLANE
|
|
render_relay_plane = RENDER_PLANE_NON_GAME
|
|
|
|
/atom/movable/screen/plane_master/fullscreen
|
|
name = "fullscreen alert plane"
|
|
plane = FULLSCREEN_PLANE
|
|
render_relay_plane = RENDER_PLANE_NON_GAME
|