/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 /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) . = ..() 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 render_relay_plane = null /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) . = ..() 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