Planes & Layers part 2: Plane Masters (#18749)

Part 2 of the PR series to bring /tg/'s and bay's plane masters to
Aurora, the lack of which is blocking several features we want.

This ports over the easier to understand Bay version of plane masters,
which is detailed in the relevant readme file in the code. Example
effect code for a warp effect is also in, which has been implemented for
gravity catapults.

Relies on #18741

---------

Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Cody Brittain <cbrittain10@live.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
This commit is contained in:
Cody Brittain
2024-04-13 18:07:51 +00:00
committed by GitHub
co-authored by Cody Brittain Matt Atlas
parent bb03336315
commit c1d241594b
94 changed files with 927 additions and 182 deletions
@@ -90,8 +90,8 @@
/obj/machinery/atmospherics/unary/vent_pump/Initialize(mapload)
if(mapload)
var/turf/T = loc
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.color = color
I.alpha = 125
LAZYADD(T.blueprints, I)
@@ -40,8 +40,8 @@
/obj/machinery/atmospherics/unary/vent_scrubber/Initialize(mapload)
if(mapload)
var/turf/T = loc
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.color = color
I.alpha = 125
LAZYADD(T.blueprints, I)
+6 -6
View File
@@ -177,8 +177,8 @@
/obj/machinery/atmospherics/pipe/simple/Initialize(mapload)
if(mapload)
var/turf/T = loc
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.color = color
I.alpha = 125
LAZYADD(T.blueprints, I)
@@ -493,8 +493,8 @@
/obj/machinery/atmospherics/pipe/manifold/Initialize(mapload)
if(mapload)
var/turf/T = loc
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.color = color
I.alpha = 125
LAZYADD(T.blueprints, I)
@@ -813,8 +813,8 @@
/obj/machinery/atmospherics/pipe/manifold4w/Initialize(mapload)
if(mapload)
var/turf/T = loc
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.color = color
I.alpha = 125
LAZYADD(T.blueprints, I)
+1
View File
@@ -298,6 +298,7 @@ var/list/preferences_datums = list()
client.screen |= O
O.appearance = MA
O.dir = D
O.plane = HUD_PLANE
var/list/screen_locs = preview_screen_locs["[D]"]
var/screen_x = screen_locs[1]
var/screen_x_minor = screen_locs[2]
@@ -1303,7 +1303,7 @@
icon = 'icons/clothing/accessories/led_collar.dmi'
icon_state = "led_collar"
item_state = "led_collar"
layer = EFFECTS_ABOVE_LIGHTING_LAYER
plane = EFFECTS_ABOVE_LIGHTING_PLANE
contained_sprite = TRUE
slot = ACCESSORY_SLOT_UTILITY_MINOR
@@ -1321,6 +1321,6 @@
/obj/item/clothing/accessory/led_collar/get_accessory_mob_overlay(var/mob/living/carbon/human/H, var/force = FALSE)
var/image/I = ..()
I.layer = EFFECTS_ABOVE_LIGHTING_LAYER
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.appearance_flags |= KEEP_APART
return I
+2
View File
@@ -31,6 +31,7 @@
compass_heading_marker.maptext = "<center><font color = '#00ffffff' size = 2><b>△</b></font></center>"
compass_heading_marker.filters = filter(type="drop_shadow", color = "#00ffffaa", size = 2, offset = 1,x = 0, y = 0)
compass_heading_marker.layer = UNDER_HUD_LAYER
compass_heading_marker.plane = HUD_PLANE
for(var/i in 0 to (360/(COMPASS_PERIOD))-1)
var/image/I = new /image/compass_marker
@@ -54,6 +55,7 @@
I.transform = M
I.filters = filter(type="drop_shadow", color = "#77777777", size = 2, offset = 1,x = 0, y = 0)
I.layer = UNDER_HUD_LAYER
I.plane = HUD_PLANE
LAZYADD(compass_static_labels, I)
rebuild_overlay_lists(TRUE)
@@ -56,7 +56,8 @@
icon_state = "ovenopen"
cut_overlays()
if (!stat)
var/glow = image('icons/obj/machinery/cooking_machines.dmi', "oven_on", EFFECTS_ABOVE_LIGHTING_LAYER)
var/image/glow = image('icons/obj/machinery/cooking_machines.dmi', "oven_on")
glow.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(glow)
..()
+2 -2
View File
@@ -41,12 +41,12 @@
set_light(FALSE)
return
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "atm-active", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "atm-active", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(screen_overlay)
set_light(1.4, 1, COLOR_CYAN)
if(held_card)
var/mutable_appearance/card_overlay = mutable_appearance(icon, "atm-cardin", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/card_overlay = mutable_appearance(icon, "atm-cardin", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(card_overlay)
/obj/machinery/atm/process()
+1 -1
View File
@@ -39,7 +39,7 @@
set_light(FALSE)
return
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "kitchenterminal-active", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "kitchenterminal-active", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(screen_overlay)
set_light(1.4, 1, COLOR_CYAN)
@@ -6,3 +6,4 @@
simulated = FALSE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
layer = UNDER_HUD_LAYER
plane = HUD_PLANE
@@ -244,6 +244,57 @@
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 4, TECH_MAGNET = 4)
require_adjacent = FALSE
///For when targetting a single object, will create a warp beam
var/datum/beam = null
var/max_dist = 6
var/obj/effect/effect/warp/small/warpeffect = null
/obj/effect/ebeam/warp
plane = WARP_EFFECT_PLANE
appearance_flags = DEFAULT_APPEARANCE_FLAGS | TILE_BOUND | NO_CLIENT_COLOR
z_flags = ZMM_IGNORE
/obj/effect/effect/warp/small
plane = WARP_EFFECT_PLANE
appearance_flags = PIXEL_SCALE | NO_CLIENT_COLOR
icon = 'icons/effects/96x96.dmi'
icon_state = "singularity_s3"
pixel_x = -32
pixel_y = -32
z_flags = ZMM_IGNORE
/obj/item/mecha_equipment/catapult/proc/beamdestroyed()
if(beam)
GLOB.destroyed_event.unregister(beam, src, .proc/beamdestroyed)
beam = null
if(locked)
if(owner)
for(var/pilot in owner.pilots)
to_chat(pilot, SPAN_NOTICE("Lock on \the [locked] disengaged."))
endanimation()
locked = null
//It's possible beam self destroyed, match active
if(active)
deactivate()
/obj/item/mecha_equipment/catapult/proc/endanimation()
if(locked)
animate(locked,pixel_y= initial(locked.pixel_y), time = 0)
/obj/item/mecha_equipment/catapult/get_hardpoint_maptext()
var/string
if(locked)
string = locked.name + " - "
if(mode == 1)
string += "Pull"
else string += "Push"
return string
/obj/item/mecha_equipment/catapult/deactivate()
. = ..()
if(beam)
QDEL_NULL(beam)
/obj/item/mecha_equipment/catapult/attack_self(var/mob/user)
. = ..()
if(.)
@@ -264,18 +315,40 @@
to_chat(user, SPAN_NOTICE("Unable to lock on [target]."))
return
locked = AM
beam = owner.Beam(BeamTarget = target, icon_state = "r_beam", maxdistance = max_dist, beam_type = /obj/effect/ebeam/warp)
GLOB.destroyed_event.register(beam, src, .proc/beamdestroyed)
animate(target,pixel_y= initial(target.pixel_y) - 2,time=1 SECOND, easing = SINE_EASING, flags = ANIMATION_PARALLEL, loop = -1)
animate(pixel_y= initial(target.pixel_y) + 2,time=1 SECOND)
active=TRUE
to_chat(user, SPAN_NOTICE("Locked onto \the [AM]."))
return
else if(target != locked)
if(locked in view(owner))
INVOKE_ASYNC(locked, TYPE_PROC_REF(/atom/movable, throw_at), target, 14, 1.5, owner)
log_and_message_admins("used [src] to throw [locked] at [target].", user, owner.loc)
endanimation()
locked = null
deactivate()
owner.use_cell_power(active_power_use * CELLRATE)
else
locked = null
to_chat(user, SPAN_NOTICE("Lock on \the [locked] disengaged."))
deactivate()
if(CATAPULT_AREA)
if(!warpeffect)
warpeffect = new
warpeffect.forceMove(get_turf(target))
var/matrix/start = matrix()
start.Scale(0)
var/matrix/end= matrix()
end.Scale(1)
warpeffect.alpha = 255
warpeffect.transform = start
animate(warpeffect,transform = end, alpha = 0, time= 1.25 SECONDS)
addtimer(CALLBACK(warpeffect, /atom/movable/proc/forceMove, null), 1.25 SECONDS)
var/list/atoms = list()
if(isturf(target))
atoms = range(target,3)
+2 -2
View File
@@ -90,14 +90,14 @@
name = "\proper space"
icon_state = "0"
footstep_sound = null
plane = PLANE_SPACE_BACKGROUND
plane = SPACE_PLANE
dynamic_lighting = 0
/turf/simulated/floor/holofloor/space/Initialize()
. = ..()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
I.plane = PLANE_SPACE_DUST
I.plane = DUST_PLANE
I.alpha = 80
I.blend_mode = BLEND_ADD
add_overlay(I)
+2 -1
View File
@@ -6,9 +6,10 @@
color = LIGHTING_BASE_MATRIX
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
layer = LIGHTING_LAYER
plane = LIGHTING_PLANE
invisibility = INVISIBILITY_LIGHTING
simulated = 0
blend_mode = BLEND_MULTIPLY
blend_mode = BLEND_OVERLAY
appearance_flags = NO_CLIENT_COLOR
var/needs_update = FALSE
+1 -1
View File
@@ -38,7 +38,7 @@
/obj/machinery/mineral/processing_unit_console/Initialize(mapload, d, populate_components)
. = ..()
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "production_console-screen", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "production_console-screen", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(screen_overlay)
set_light(1.4, 1, COLOR_CYAN)
+1 -1
View File
@@ -19,7 +19,7 @@
/obj/machinery/mineral/stacking_unit_console/Initialize(mapload, d, populate_components)
..()
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "production_console-screen", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "production_console-screen", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(screen_overlay)
set_light(1.4, 1, COLOR_CYAN)
return INITIALIZE_HINT_LATELOAD
+1
View File
@@ -125,6 +125,7 @@
ore_ping.pixel_x = rand(-6, 6)
ore_ping.pixel_y = rand(-6, 6)
ore_ping.alpha = rand(180, 255)
ore_ping.plane = HUD_PLANE
pixel_shift_to_turf(ore_ping, our_turf, turf)
if(M.client)
M.client.images += ore_ping
@@ -1,6 +1,3 @@
/mob/abstract/new_player
var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled
/mob/abstract/new_player/LateLogin()
..()
@@ -11,7 +8,6 @@
mind.active = 1
mind.current = src
my_client = client
set_sight(BLIND)
GLOB.player_list |= src
@@ -2,10 +2,6 @@
ready = FALSE
SSticker.update_ready_list(src)
// see login.dm
if(my_client)
my_client = null
..()
if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to.
key = null//We null their key before deleting the mob, so they are properly kicked out.
@@ -3,7 +3,7 @@
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
icon = 'icons/mob/mob.dmi'
icon_state = "ghost"
layer = OBSERVER_LAYER
layer = OBSERVER_PLANE
stat = DEAD
density = 0
canmove = 0
+1 -1
View File
@@ -101,7 +101,7 @@ var/list/floating_chat_colors = list()
var/image/I = image(null, attached_holder, layer = FLY_LAYER)
I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART | PIXEL_SCALE
I.plane = FLOAT_PLANE
I.plane = HUD_PLANE
I.layer = UNDER_HUD_LAYER
I.pixel_x = (-round(I.maptext_width/2) + 16) + attached_holder.get_floating_chat_x_offset()
I.appearance_flags = RESET_COLOR|RESET_ALPHA|RESET_TRANSFORM
@@ -90,10 +90,12 @@ There are several things that need to be remembered:
#define GET_TAIL_LAYER (dir == NORTH ? TAIL_NORTH_LAYER : TAIL_SOUTH_LAYER)
#define GET_TAIL_ACC_LAYER (dir == NORTH ? TAIL_NORTH_ACC_LAYER : TAIL_SOUTH_ACC_LAYER)
/proc/overlay_image(icon, icon_state,color, flags, layer)
/proc/overlay_image(icon, icon_state,color, flags, plane, layer)
var/image/ret = image(icon,icon_state)
ret.color = color
ret.appearance_flags = PIXEL_SCALE | flags
if(plane)
ret.plane = plane
if(layer)
ret.layer = layer
return ret
@@ -31,9 +31,9 @@
var/mutable_appearance/panel_overlay = mutable_appearance(icon, "[icon_state]-panel")
add_overlay(panel_overlay)
if(length(extract_slimes))
var/mutable_appearance/interior_overlay = mutable_appearance(icon, "[icon_state]-interior", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/interior_overlay = mutable_appearance(icon, "[icon_state]-interior", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(interior_overlay)
var/mutable_appearance/spinning_overlay = mutable_appearance(icon, "[icon_state]-running", EFFECTS_ABOVE_LIGHTING_LAYER)
var/mutable_appearance/spinning_overlay = mutable_appearance(icon, "[icon_state]-running", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
add_overlay(spinning_overlay)
set_light(2.5, 1, COLOR_VIOLET)
else
@@ -31,23 +31,24 @@
/mob/living/silicon/robot/proc/setup_eye_cache()
if(!module_sprites?[icontype]?[ROBOT_EYES])
return
var/eye_layer = src.layer
var/eye_plane = src.plane
if(lights_on && layer == MOB_LAYER) // in case you're hiding. so eyes don't go through tables.
eye_layer = EFFECTS_ABOVE_LIGHTING_LAYER //make them glow in the dark if the lamp is on
eye_plane = EFFECTS_ABOVE_LIGHTING_PLANE //make them glow in the dark if the lamp is on
var/eyeprefix = module_sprites[icontype][ROBOT_EYES]
if(speed == -2) // For combat drones with the mobility module.
cached_eye_overlays = list(
I_HELP = image(icon, "[eyeprefix]-roll-eyes_help", layer = eye_layer),
I_HURT = image(icon, "[eyeprefix]-roll-eyes_harm", layer = eye_layer)
I_HELP = image(icon, "[eyeprefix]-roll-eyes_help"),
I_HURT = image(icon, "[eyeprefix]-roll-eyes_harm")
)
else
cached_eye_overlays = list(
I_HELP = image(icon, "[eyeprefix]-eyes_help", layer = eye_layer), //Changed so icontype goes in front. Helps with parsing in this godforsaken engine known as BYOND.
I_HURT = image(icon, "[eyeprefix]-eyes_harm", layer = eye_layer)
I_HELP = image(icon, "[eyeprefix]-eyes_help"), //Changed so icontype goes in front. Helps with parsing in this godforsaken engine known as BYOND.
I_HURT = image(icon, "[eyeprefix]-eyes_harm")
)
if(eye_overlay)
cut_overlay(eye_overlay)
eye_overlay = cached_eye_overlays[a_intent]
eye_overlay.plane = eye_plane
add_overlay(eye_overlay)
/mob/living/silicon/robot/proc/setup_panel_cache()
@@ -121,11 +121,12 @@
/mob/living/simple_animal/construct/proc/add_glow()
cut_overlays()
var/overlay_layer = EFFECTS_ABOVE_LIGHTING_LAYER
if(layer != MOB_LAYER)
overlay_layer = TURF_LAYER + 0.2
var/overlay_plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(image(icon, "glow-[icon_state]", overlay_layer))
var/image/glow = image(icon, "glow-[icon_state]")
glow.plane = overlay_plane
add_overlay(glow)
set_light(2, -2, l_color = COLOR_WHITE)
/mob/living/simple_animal/construct/Life()
@@ -49,7 +49,8 @@
icon_state = pick("baseline_grey", "baseline_red", "baseline_green", "baseline_yellow")
icon_dead = "[icon_state]_off"
screen = pick("screen_blue", "screen_red", "screen_orange", "screen_lumi_eyes", "screen_goggles", "screen_console", "screen_static2", "screen_static3")
screen_overlay = image('icons/mob/npc/ipc_zombie.dmi', "[screen]", EFFECTS_ABOVE_LIGHTING_LAYER)
screen_overlay = image('icons/mob/npc/ipc_zombie.dmi', "[screen]")
screen_overlay.plane = plane = EFFECTS_ABOVE_LIGHTING_PLANE
screen_overlay.appearance_flags = KEEP_APART
add_overlay(screen_overlay)
set_light(MINIMUM_USEFUL_LIGHT_RANGE, 2, LIGHT_COLOR_TUNGSTEN)
@@ -57,7 +58,8 @@
/mob/living/simple_animal/hostile/ipc_zombie/update_icon()
cut_overlays()
if(screen && stat != DEAD)
screen_overlay = image('icons/mob/npc/ipc_zombie.dmi', "[screen]", EFFECTS_ABOVE_LIGHTING_LAYER)
screen_overlay = image('icons/mob/npc/ipc_zombie.dmi', "[screen]")
screen_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE
screen_overlay.appearance_flags = KEEP_APART
add_overlay(screen_overlay)
@@ -27,7 +27,8 @@
/mob/living/simple_animal/hostile/rogue_drone/Initialize()
. = ..()
name = "[initial(name)] ([rand(100, 999)])"
eye_overlay = image(icon, "[icon_state]-eyes_emag", layer = EFFECTS_ABOVE_LIGHTING_LAYER)
eye_overlay = image(icon, "[icon_state]-eyes_emag")
eye_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE
eye_overlay.appearance_flags = KEEP_APART
add_overlay(eye_overlay)
@@ -177,7 +177,8 @@
/mob/living/simple_animal/hostile/carp/shark/reaver/eel/Initialize()
. = ..()
eye_overlay = image(icon, "eel_eyeglow", layer = EFFECTS_ABOVE_LIGHTING_LAYER)
eye_overlay = image(icon, "eel_eyeglow")
eye_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE
eye_overlay.appearance_flags = KEEP_APART
add_overlay(eye_overlay)
set_light(MINIMUM_USEFUL_LIGHT_RANGE, 2, LIGHT_COLOR_TUNGSTEN)
+6
View File
@@ -25,6 +25,9 @@
message_admins("<span class='warning'><B>Notice: </B></span><span class='notice'><A href='?src=\ref[usr];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </span>", 1)
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).",ckey=key_name(src))
/mob
var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled
/**
* Currently marked as SHOULD_NOT_OVERRIDE.
*
@@ -73,6 +76,8 @@
set_sight(sight|SEE_SELF)
disconnect_time = null
my_client = client
player_age = client.player_age
if(loc && !isturf(loc))
@@ -95,6 +100,7 @@
clear_important_client_contents(client)
enable_client_mobs_in_contents(client)
CreateRenderers()
update_client_color()
add_click_catcher()
+3
View File
@@ -7,9 +7,12 @@
disconnect_time = world.realtime
log_access("Logout: [key_name(src)]",ckey=key_name(src))
SSstatistics.update_status()
RemoveRenderers()
if(client)
clear_important_client_contents(client)
my_client = null
if(admin_datums[src.ckey])
var/datum/admins/A = admin_datums[src.ckey]
if (A.rights & (R_MOD|R_ADMIN) && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing.
+10
View File
@@ -1452,6 +1452,16 @@
return WEATHER_EXPOSED
/mob/proc/check_emissive_equipment()
var/old_zflags = z_flags
z_flags &= ~ZMM_MANGLE_PLANES
for(var/atom/movable/AM in get_equipped_items(TRUE))
if(AM.z_flags & ZMM_MANGLE_PLANES)
z_flags |= ZMM_MANGLE_PLANES
break
if(old_zflags != z_flags)
UPDATE_OO_IF_PRESENT
#undef UNBUCKLED
#undef PARTIALLY_BUCKLED
#undef FULLY_BUCKLED
-1
View File
@@ -7,7 +7,6 @@
name = "open space"
icon = 'icons/turf/space.dmi'
icon_state = "opendebug"
plane = PLANE_SPACE_BACKGROUND
density = 0
pathweight = 100000 //Seriously, don't try and path over this one numbnuts
is_hole = TRUE
+7 -10
View File
@@ -2,7 +2,7 @@
/// The mimic (if any) that's *directly* copying us.
var/tmp/atom/movable/openspace/mimic/bound_overlay
/// If TRUE, this atom is ignored by Z-Mimic.
var/no_z_overlay
var/z_flags
/atom/movable/forceMove(atom/dest)
. = ..(dest)
@@ -75,12 +75,8 @@
icon_state = "dark"
plane = OPENTURF_MAX_PLANE
layer = MIMICED_LIGHTING_LAYER
blend_mode = BLEND_MULTIPLY
color = list(
SHADOWER_DARKENING_FACTOR, 0, 0,
0, SHADOWER_DARKENING_FACTOR, 0,
0, 0, SHADOWER_DARKENING_FACTOR
)
// blend_mode = BLEND_MULTIPLY
color = "#00000033"
/atom/movable/openspace/multiplier/Destroy()
var/turf/myturf = loc
@@ -93,9 +89,9 @@
appearance = LO
layer = MIMICED_LIGHTING_LAYER
plane = OPENTURF_MAX_PLANE
set_invisibility(101)
blend_mode = BLEND_MULTIPLY
set_invisibility(0)
if (icon_state == null)
blend_mode = BLEND_MULTIPLY
// We're using a color matrix, so just darken the colors across the board.
// Bay stores lights as inverted so the lighting PM can invert it for darksight, but
// we don't have a plane master, so invert it again.
@@ -143,6 +139,7 @@
var/mimiced_type
var/original_z
var/override_depth
var/have_performed_fixup = FALSE
/atom/movable/openspace/mimic/Initialize(mapload, ...)
. = ..()
@@ -190,7 +187,7 @@
/atom/movable/openspace/turf_proxy
plane = OPENTURF_MAX_PLANE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
no_z_overlay = TRUE // Only one of these should ever be visible at a time, the mimic logic will handle that.
z_flags = ZMM_IGNORE // Only one of these should ever be visible at a time, the mimic logic will handle that.
/atom/movable/openspace/turf_proxy/attackby(obj/item/attacking_item, mob/user)
loc.attackby(attacking_item, user)
+1 -1
View File
@@ -21,7 +21,7 @@
/turf/Entered(atom/movable/thing, turf/oldLoc)
. = ..()
if (thing.bound_overlay || thing.no_z_overlay || !TURF_IS_MIMICING(above))
if (thing.bound_overlay || (thing.z_flags & ZMM_IGNORE) || !TURF_IS_MIMICING(above))
return
above.update_mimic()
+2 -1
View File
@@ -109,7 +109,8 @@
return
var/datum/vampire/vampire = H.mind.antag_datums[MODE_VAMPIRE]
if(vampire && (vampire.status & VAMP_FRENZIED))
var/image/return_image = image(H.species.eyes_icons, H, "[H.species.eyes]_frenzy", EFFECTS_ABOVE_LIGHTING_LAYER)
var/image/return_image = image(H.species.eyes_icons, H, "[H.species.eyes]_frenzy")
return_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
return_image.appearance_flags = KEEP_APART
LAZYADD(additional_images, return_image)
return list(return_image)
+2 -1
View File
@@ -44,6 +44,7 @@
limb_flags = ORGAN_CAN_AMPUTATE
/obj/item/organ/external/head/unbreakable/revenant/get_additional_images(var/mob/living/carbon/human/H)
var/image/return_image = image(H.species.eyes_icons, H, "[H.species.eyes]_glow", EFFECTS_ABOVE_LIGHTING_LAYER)
var/image/return_image = image(H.species.eyes_icons, H, "[H.species.eyes]_glow")
return_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
return_image.appearance_flags = KEEP_APART
return list(return_image)
@@ -22,7 +22,7 @@
var/image/I = image(icon,"[icon_state]decor")
I.appearance_flags = RESET_COLOR
I.color = get_random_colour(0, 150, 255)
I.layer = EFFECTS_ABOVE_LIGHTING_LAYER
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(I)
set_light(0.3, 0.1, 2, l_color = I.color)
+1 -1
View File
@@ -102,7 +102,7 @@
return INITIALIZE_HINT_QDEL
if(known)
layer = EFFECTS_ABOVE_LIGHTING_LAYER
plane = EFFECTS_ABOVE_LIGHTING_PLANE
for(var/obj/machinery/computer/ship/helm/H in SSmachinery.machinery)
H.get_known_sectors()
update_icon()
+1
View File
@@ -367,6 +367,7 @@
gfi_layer_rotation = GFI_ROTATION_DEFDIR
clicksound = /singleton/sound_category/switch_sound
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
z_flags = ZMM_MANGLE_PLANES
var/area/area
var/areastring = null
var/obj/item/cell/cell
+2 -2
View File
@@ -85,8 +85,8 @@ By design, d1 is the smallest direction and d2 is the highest
GLOB.cable_list += src
if(mapload)
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.alpha = 125
I.color = color
LAZYADD(T.blueprints, I)
+4 -4
View File
@@ -76,7 +76,7 @@
icon_state = "floortube_example"
base_state = "floortube"
desc = "A lighting fixture. This one is set into the floor."
layer = TURF_DETAIL_LAYER
layer = ABOVE_TILE_LAYER
fitting_has_empty_icon = TRUE
fitting_is_on_floor = TRUE
@@ -100,8 +100,8 @@
icon_state = "floor_example"
base_state = "floor"
desc = "A small lighting fixture. This one is set into the floor."
layer = TURF_DETAIL_LAYER
fitting_is_on_floor = TRUE
layer = ABOVE_TILE_LAYER
/obj/machinery/light/small/emergency
icon_state = "bulb_emergency_preview"
@@ -245,9 +245,9 @@
if (on)
var/image/I = LIGHT_FIXTURE_CACHE(icon, "[base_state]_on", target_color)
if (!fitting_is_on_floor)
I.layer = EFFECTS_ABOVE_LIGHTING_LAYER
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
else
I.layer = layer
I.plane = plane
add_overlay(I)
else
add_overlay(LIGHT_FIXTURE_CACHE(icon, "[base_state]_off", target_color))
+3 -1
View File
@@ -62,4 +62,6 @@
/obj/machinery/power/radial_floodlight/update_icon()
cut_overlays()
if(on)
add_overlay(image(icon, src, "[icon_state]-light", EFFECTS_ABOVE_LIGHTING_LAYER))
var/image/light = image(icon, src, "[icon_state]-light")
light.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(light)
@@ -53,7 +53,7 @@ field_generator power level display
if(state == 2)
add_overlay("+welding")
var/image/lights_image = image(icon, null, "+lights")
lights_image.layer = EFFECTS_ABOVE_LIGHTING_LAYER
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
/obj/machinery/field_generator/process()
+1 -1
View File
@@ -15,7 +15,7 @@
if(anchored)
add_overlay("[icon_state]+bolts")
var/image/lights_image = image(icon, null, "[icon_state]+lights")
lights_image.layer = EFFECTS_ABOVE_LIGHTING_LAYER
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
/obj/machinery/the_singularitygen/process()
+2 -2
View File
@@ -18,7 +18,7 @@
if(anchored)
add_overlay("[icon_state]+bolts")
var/image/lights_image = image(icon, null, "[icon_state]+lights")
lights_image.layer = EFFECTS_ABOVE_LIGHTING_LAYER
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
/obj/machinery/power/tesla_coil/RefreshParts()
@@ -79,7 +79,7 @@
if(anchored)
add_overlay("[icon_state]+bolts")
var/image/lights_image = image(icon, null, "[icon_state]+lights")
lights_image.layer = EFFECTS_ABOVE_LIGHTING_LAYER
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
/obj/machinery/power/grounding_rod/attackby(obj/item/attacking_item, mob/user)
+1 -1
View File
@@ -17,7 +17,7 @@
dissipate = 1
dissipate_delay = 10
dissipate_strength = 1
layer = EFFECTS_ABOVE_LIGHTING_LAYER
plane = EFFECTS_ABOVE_LIGHTING_PLANE
blend_mode = BLEND_ADD
var/failed_direction = 0
var/list/orbiting_balls = list()
+2 -2
View File
@@ -796,8 +796,8 @@
if(mapload)
var/turf/T = loc
var/image/I = image(icon, T, icon_state, EFFECTS_ABOVE_LIGHTING_LAYER, dir, pixel_x, pixel_y)
I.plane = 0
var/image/I = image(icon, T, icon_state, dir, pixel_x, pixel_y)
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
I.alpha = 125
LAZYADD(T.blueprints, I)
+2 -2
View File
@@ -206,8 +206,8 @@
light1.set_dir(SOUTH)
light2.set_dir(NORTH)
light1.no_z_overlay = 1
light2.no_z_overlay = 1
light1.z_flags = ZMM_IGNORE
light2.z_flags = ZMM_IGNORE
// Update area.
if(az > areas_to_use.len)
+4 -2
View File
@@ -228,12 +228,14 @@ var/global/list/can_enter_vent_with = list(
for(var/datum/pipeline/pipeline in network.line_members)
for(var/obj/machinery/atmospherics/A in (pipeline.members || pipeline.edges)) // Adds pipe and manifold images
if(!A.pipe_image)
A.pipe_image = image(A, A.loc, layer = ABOVE_LIGHTING_LAYER, dir = A.dir)
A.pipe_image = image(A, A.loc, dir = A.dir)
A.pipe_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
pipes_shown += A.pipe_image
client.images += A.pipe_image
for (var/obj/machinery/atmospherics/V in network.normal_members) // Adds vent and scrubber images
if (!V.pipe_image || istype(V, /obj/machinery/atmospherics/unary/vent_pump/))
V.pipe_image = image(V, V.loc, layer = ABOVE_LIGHTING_LAYER, dir = V.dir)
V.pipe_image = image(V, V.loc, dir = V.dir)
V.pipe_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
pipes_shown += V.pipe_image
client.images += V.pipe_image
+2 -2
View File
@@ -91,8 +91,8 @@
// Dummy object for lightning flash animation.
/obj/abstract/lightning_overlay
plane = DEFAULT_PLANE + 1 //Future EMISSIVE_PLANE
layer = ABOVE_LIGHTING_LAYER
plane = EFFECTS_ABOVE_LIGHTING_PLANE //Future EMISSIVE_PLANE
layer = LIGHTNING_LAYER
icon = 'icons/effects/weather.dmi'
icon_state = "full"
alpha = 0