//Bay lighting engine shit, not in /code/modules/lighting because BYOND is being shit about it /// frequency, in 1/10ths of a second, of the lighting process #define LIGHTING_INTERVAL 1 #define MINIMUM_USEFUL_LIGHT_RANGE 1.4 /// Height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone. #define LIGHTING_HEIGHT 1 /// Z diff is multiplied by this and LIGHTING_HEIGHT to get the final height of a light source. Affects how much darker A Z light gets with each level transitioned. #define LIGHTING_Z_FACTOR 10 /// Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. #define LIGHTING_ROUND_VALUE (1 / 200) /// Icon used for lighting shading effects #define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' /// icon_state used for normal color-matrix based lighting overlays. #define LIGHTING_BASE_ICON_STATE "matrix" /// icon_state used for lighting overlays that are just displaying standard station lighting. #define LIGHTING_STATION_ICON_STATE "tubedefault" /// icon_state used for lighting overlays with no luminosity. #define LIGHTING_DARKNESS_ICON_STATE "black" #define LIGHTING_TRANSPARENT_ICON_STATE "blank" /// How much the range of a directional light will be reduced while facing a wall. #define LIGHTING_BLOCKED_FACTOR 0.5 /** * If defined, instant updates will be used whenever server load permits. * Otherwise queued updates are always used. */ #define USE_INTELLIGENT_LIGHTING_UPDATES /// Maximum light_range before forced to always queue instead of using sync updates. Setting this too high will cause server stutter with moving large lights. #define LIGHTING_MAXIMUM_INSTANT_RANGE 8 #define LIGHTING_HARD_MAXIMUM_RANGE 128 //! Light ranges equal to or above this are ignored, we can't render them anyway. #define LIGHTING_SOFT_MAXIMUM_RANGE 64 //! Light ranges equal to or above this emit a runtime but are still allowed. #define LIGHTING_SOFT_MAXIMUM_POWER 10 //! Light powers equal to or above this emit a runtime but are still allowed. /** * Mostly identical to below, but doesn't make sure T is valid first. * Should only be used by lighting code. */ #define TURF_IS_DYNAMICALLY_LIT_UNSAFE(T) ((T:dynamic_lighting && T:loc:dynamic_lighting)) #define TURF_IS_DYNAMICALLY_LIT(T) (isturf(T) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(T)) // Note: this does not imply the above, a turf can have ambient light without being dynamically lit. #define TURF_IS_AMBIENT_LIT_UNSAFE(T) (T:ambient_active) #define TURF_IS_AMBIENT_LIT(T) (isturf(T) && TURF_IS_AMBIENT_LIT_UNSAFE(T)) //! If I were you I'd leave this alone. #define LIGHTING_BASE_MATRIX \ list \ ( \ 1, 1, 1, 0, \ 1, 1, 1, 0, \ 1, 1, 1, 0, \ 1, 1, 1, 0, \ 0, 0, 0, 1 \ ) \ // Helpers so we can (more easily) control the colour matrices. #define CL_MATRIX_RR 1 #define CL_MATRIX_RG 2 #define CL_MATRIX_RB 3 #define CL_MATRIX_RA 4 #define CL_MATRIX_GR 5 #define CL_MATRIX_GG 6 #define CL_MATRIX_GB 7 #define CL_MATRIX_GA 8 #define CL_MATRIX_BR 9 #define CL_MATRIX_BG 10 #define CL_MATRIX_BB 11 #define CL_MATRIX_BA 12 #define CL_MATRIX_AR 13 #define CL_MATRIX_AG 14 #define CL_MATRIX_AB 15 #define CL_MATRIX_AA 16 #define CL_MATRIX_CR 17 #define CL_MATRIX_CG 18 #define CL_MATRIX_CB 19 #define CL_MATRIX_CA 20 //! Higher numbers override lower. #define LIGHTING_NO_UPDATE 0 #define LIGHTING_VIS_UPDATE 1 #define LIGHTING_CHECK_UPDATE 2 #define LIGHTING_FORCE_UPDATE 3 /** * This color of overlay is very common - most of the station is this color when lit fully. * Tube lights are a bluish-white, so we can't just assume 1-1-1 is full-illumination. * -- If you want to change these, find them *by checking in-game*, just converting tubes' RGB color into floats will not work! */ #define LIGHTING_DEFAULT_TUBE_R 0.96 #define LIGHTING_DEFAULT_TUBE_G 1 #define LIGHTING_DEFAULT_TUBE_B 1 //! Some angle presets for directional lighting. #define LIGHT_OMNI null #define LIGHT_SEMI 180 #define LIGHT_WIDE 90 #define LIGHT_NARROW 45 /// How many tiles standard fires glow. #define LIGHT_RANGE_FIRE 3 //! ## DYNAMIC LIGHTING STATE /// Dynamic lighting disabled. (area stays at full brightness) #define DYNAMIC_LIGHTING_DISABLED 0 /// Dynamic lighting enabled. #define DYNAMIC_LIGHTING_ENABLED 1 /// Dynamic lighting enabled even if the area doesn't require power. /// * Should never exist after Initialize(). #define DYNAMIC_LIGHTING_FORCED 2 /// Dynamic lighting enabled only if starlight is. /// * Should never exist after Initialize(). #define DYNAMIC_LIGHTING_IFSTARLIGHT 3 #define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting #define FLASH_LIGHT_DURATION 2 #define FLASH_LIGHT_POWER 3 #define FLASH_LIGHT_RANGE 3.8 //! Emissive blocking. /// Uses vis_overlays to leverage caching so that very few new items need to be made for the overlay. For anything that doesn't change outline or opaque area much or at all. #define EMISSIVE_BLOCK_GENERIC 0 /// Uses a dedicated render_target object to copy the entire appearance in real time to the blocking layer. For things that can change in appearance a lot from the base state, like humans. #define EMISSIVE_BLOCK_UNIQUE 1 /// Don't block any emissives. Useful for things like, pieces of paper? #define EMISSIVE_BLOCK_NONE 2 /// The color matrix applied to binary emissive overlays. Should be solely dependent on alpha and not have RGB overlap with [EM_BLOCK_COLOR]. #define EMISSIVE_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0) /// A globaly cached version of [EMISSIVE_COLOR] for quick access. GLOBAL_LIST_INIT(emissive_color, EMISSIVE_COLOR) /// The color matrix applied to all emissive blockers. Should be solely dependent on alpha and not have RGB overlap with [EMISSIVE_COLOR]. #define EM_BLOCK_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) /// A globaly cached version of [EM_BLOCK_COLOR] for quick access. GLOBAL_LIST_INIT(em_block_color, EM_BLOCK_COLOR) /// The color matrix used to mask out emissive blockers on the emissive plane. Alpha should default to zero, be solely dependent on the RGB value of [EMISSIVE_COLOR], and be independant of the RGB value of [EM_BLOCK_COLOR]. #define EM_MASK_MATRIX list(0,0,0,1/3, 0,0,0,1/3, 0,0,0,1/3, 0,0,0,0, 0,0,0,0) /// A globaly cached version of [EM_MASK_MATRIX] for quick access. GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) /// Returns the red part of a #RRGGBB hex sequence as number #define GETREDPART(hexa) hex2num(copytext(hexa, 2, 4)) /// Returns the green part of a #RRGGBB hex sequence as number #define GETGREENPART(hexa) hex2num(copytext(hexa, 4, 6)) /// Returns the blue part of a #RRGGBB hex sequence as number #define GETBLUEPART(hexa) hex2num(copytext(hexa, 6, 8)) /// Parse the hexadecimal color into lumcounts of each perspective. #define PARSE_LIGHT_COLOR(source) \ do { \ if (source.light_color) { \ var/__light_color = source.light_color; \ source.lum_r = GETREDPART(__light_color) / 255; \ source.lum_g = GETGREENPART(__light_color) / 255; \ source.lum_b = GETBLUEPART(__light_color) / 255; \ } else { \ source.lum_r = 1; \ source.lum_g = 1; \ source.lum_b = 1; \ }; \ } while (FALSE) //! ## COLOR FILTERS /// Icon filter that creates ambient occlusion #define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, color="#04080FAA") /// Icon filter that creates gaussian blur #define GAUSSIAN_BLUR(filter_size) filter(type="blur", size=filter_size)