diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index ad3dd5d720..3a90707bbe 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -16,6 +16,9 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/machinery/button/Initialize(mapload, ndir = 0, built = 0) + if(istext(id) && mapload) + if(copytext(id, 1, 2) == "!") + id = SSmapping.get_obfuscated_id(id) . = ..() if(built) setDir(ndir) @@ -260,6 +263,11 @@ req_access = list() id = 1 +/obj/machinery/button/electrochromatic + name = "window dim control" + desc = "Controls linked electrochromatic windows" + device_type = /obj/item/assembly/control/electrochromatic + /obj/item/wallframe/button name = "button frame" desc = "Used for building buttons." diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a8c6dfb898..e4d93ea8de 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -299,6 +299,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) animate(src, color = newcolor, time = 2) /obj/structure/window/proc/remove_electrochromatic() + electrochromatic_off() electrochromatic_status = NOT_ELECTROCHROMATIC if(!electrochromatic_id) return @@ -308,14 +309,17 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) electrochromatic_id = null /obj/structure/window/vv_edit_var(var_name, var_value) - var/old_id var/check_status if(var_name == NAMEOF(src, electrochromatic_id)) - if((electrochromatic_status != NOT_ELECTROCHROMATIC) && electrochromatic_id) - old_id = electrochromatic_id + if(electrochromatic_id && GLOB.electrochromatic_window_lookup["[electrochromatic_id]"]) + GLOB.electrochromatic_window_lookup[electrochromatic_id] -= src if(var_name == NAMEOF(src, electrochromatic_status)) check_status = TRUE . = ..() //do this first incase it runtimes. + if(var_name == NAMEOF(src, electrochromatic_id)) + if((electrochromatic_status != NOT_ELECTROCHROMATIC) && electrochromatic_id) + LAZYINITLIST(GLOB.electrochromatic_window_lookup[electrochromatic_id]) + GLOB.electrochromatic_window_lookup[electrochromatic_id] += src if(check_status) if(electrochromatic_status == NOT_ELECTROCHROMATIC) remove_electrochromatic() @@ -336,10 +340,6 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) return else remove_electrochromatic() - if(old_id) - GLOB.electrochromatic_window_lookup[old_id] -= src - if(electrochromatic_id) - GLOB.electrochromatic_window_lookup[electrochromatic_id] += src /obj/structure/window/proc/make_electrochromatic(new_id = electrochromatic_id) remove_electrochromatic()