mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 23:52:12 +00:00
changes: Adds three new turf types: lava (separate from the existing lava which is bound to the flooring system), basalt (a child of asteroid turfs), and chasm open spaces. canSmoothWith lists on asteroid turfs are now in the form of a shared global list for performance reasons. 'Ash' turfs have been repathed to /turf/simulated/asteroid/ash. Base asteroid turf type should not be used directly anymore; maps have been updated to new path. Airless openspace, chasms, and airless chasms now have map-time debug icons. No player-visible changes, just prepwork for future things and performance tweaks. Sprites from TG.
162 lines
4.5 KiB
Plaintext
162 lines
4.5 KiB
Plaintext
/atom/movable/lighting_overlay
|
|
name = ""
|
|
anchored = TRUE
|
|
icon = LIGHTING_ICON
|
|
icon_state = LIGHTING_BASE_ICON_STATE
|
|
color = LIGHTING_BASE_MATRIX
|
|
mouse_opacity = 0
|
|
layer = LIGHTING_LAYER
|
|
invisibility = INVISIBILITY_LIGHTING
|
|
simulated = 0
|
|
blend_mode = BLEND_MULTIPLY
|
|
|
|
var/needs_update = FALSE
|
|
|
|
#if WORLD_ICON_SIZE != 32
|
|
transform = matrix(WORLD_ICON_SIZE / 32, 0, (WORLD_ICON_SIZE - 32) / 2, 0, WORLD_ICON_SIZE / 32, (WORLD_ICON_SIZE - 32) / 2)
|
|
#endif
|
|
|
|
/atom/movable/lighting_overlay/New()
|
|
SSlighting.total_lighting_overlays++
|
|
|
|
var/turf/T = loc // If this runtimes atleast we'll know what's creating overlays in things that aren't turfs.
|
|
T.lighting_overlay = src
|
|
T.luminosity = 0
|
|
|
|
needs_update = TRUE
|
|
SSlighting.overlay_queue += src
|
|
|
|
/atom/movable/lighting_overlay/Destroy(force = FALSE)
|
|
if (!force)
|
|
return QDEL_HINT_LETMELIVE // STOP DELETING ME
|
|
|
|
//L_PROF(loc, "overlay_destroy")
|
|
SSlighting.total_lighting_overlays--
|
|
|
|
var/turf/T = loc
|
|
if (istype(T))
|
|
T.lighting_overlay = null
|
|
T.luminosity = 1
|
|
|
|
return ..()
|
|
|
|
// This is a macro PURELY so that the if below is actually readable.
|
|
#define ALL_EQUAL ((rr == gr && gr == br && br == ar) && (rg == gg && gg == bg && bg == ag) && (rb == gb && gb == bb && bb == ab))
|
|
|
|
/atom/movable/lighting_overlay/proc/update_overlay()
|
|
var/turf/T = loc
|
|
if (!isturf(T)) // Erm...
|
|
if (loc)
|
|
warning("A lighting overlay realised its loc was NOT a turf (actual loc: [loc], [loc.type]) in update_overlay() and got deleted!")
|
|
|
|
else
|
|
warning("A lighting overlay realised it was in nullspace in update_overlay() and got deleted!")
|
|
|
|
qdel(src, TRUE)
|
|
return
|
|
|
|
// See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are.
|
|
var/list/corners = T.corners
|
|
var/datum/lighting_corner/cr = dummy_lighting_corner
|
|
var/datum/lighting_corner/cg = dummy_lighting_corner
|
|
var/datum/lighting_corner/cb = dummy_lighting_corner
|
|
var/datum/lighting_corner/ca = dummy_lighting_corner
|
|
if (corners)
|
|
cr = corners[3] || dummy_lighting_corner
|
|
cg = corners[2] || dummy_lighting_corner
|
|
cb = corners[4] || dummy_lighting_corner
|
|
ca = corners[1] || dummy_lighting_corner
|
|
|
|
var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx)
|
|
luminosity = max > LIGHTING_SOFT_THRESHOLD
|
|
|
|
var/rr = cr.cache_r
|
|
var/rg = cr.cache_g
|
|
var/rb = cr.cache_b
|
|
|
|
var/gr = cg.cache_r
|
|
var/gg = cg.cache_g
|
|
var/gb = cg.cache_b
|
|
|
|
var/br = cb.cache_r
|
|
var/bg = cb.cache_g
|
|
var/bb = cb.cache_b
|
|
|
|
var/ar = ca.cache_r
|
|
var/ag = ca.cache_g
|
|
var/ab = ca.cache_b
|
|
|
|
if ((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8))
|
|
icon_state = LIGHTING_TRANSPARENT_ICON_STATE
|
|
color = null
|
|
else if (!luminosity)
|
|
icon_state = LIGHTING_DARKNESS_ICON_STATE
|
|
color = null
|
|
else if (rr == LIGHTING_DEFAULT_TUBE_R && rg == LIGHTING_DEFAULT_TUBE_G && rb == LIGHTING_DEFAULT_TUBE_B && ALL_EQUAL)
|
|
icon_state = LIGHTING_STATION_ICON_STATE
|
|
color = null
|
|
else
|
|
icon_state = LIGHTING_BASE_ICON_STATE
|
|
if (islist(color))
|
|
var/list/c_list = color
|
|
c_list[CL_MATRIX_RR] = rr
|
|
c_list[CL_MATRIX_RG] = rg
|
|
c_list[CL_MATRIX_RB] = rb
|
|
c_list[CL_MATRIX_GR] = gr
|
|
c_list[CL_MATRIX_GG] = gg
|
|
c_list[CL_MATRIX_GB] = gb
|
|
c_list[CL_MATRIX_BR] = br
|
|
c_list[CL_MATRIX_BG] = bg
|
|
c_list[CL_MATRIX_BB] = bb
|
|
c_list[CL_MATRIX_AR] = ar
|
|
c_list[CL_MATRIX_AG] = ag
|
|
c_list[CL_MATRIX_AB] = ab
|
|
color = c_list
|
|
else
|
|
color = list(
|
|
rr, rg, rb, 0,
|
|
gr, gg, gb, 0,
|
|
br, bg, bb, 0,
|
|
ar, ag, ab, 0,
|
|
0, 0, 0, 1
|
|
)
|
|
|
|
// If we're on an openturf, update the shadower object too.
|
|
if (T.above)
|
|
var/turf/simulated/open/OT = T.above
|
|
if (OT.shadower)
|
|
OT.shadower.copy_lighting(src)
|
|
else
|
|
OT.update_icon()
|
|
|
|
#undef ALL_EQUAL
|
|
|
|
// Variety of overrides so the overlays don't get affected by weird things.
|
|
|
|
/atom/movable/lighting_overlay/ex_act(severity)
|
|
return 0
|
|
|
|
/atom/movable/lighting_overlay/singularity_act()
|
|
return
|
|
|
|
/atom/movable/lighting_overlay/singularity_pull()
|
|
return
|
|
|
|
/atom/movable/lighting_overlay/singuloCanEat()
|
|
return FALSE
|
|
|
|
/atom/movable/lighting_overlay/can_fall()
|
|
return FALSE
|
|
|
|
// Override here to prevent things accidentally moving around overlays.
|
|
/atom/movable/lighting_overlay/forceMove(atom/destination, no_tp = FALSE, harderforce = FALSE)
|
|
if(harderforce)
|
|
//L_PROF(loc, "overlay_forcemove")
|
|
. = ..()
|
|
|
|
/atom/movable/lighting_overlay/shuttle_move(turf/loc)
|
|
return
|
|
|
|
/atom/movable/lighting_overlay/conveyor_act()
|
|
return
|