From af3651172c1c4c60e1f8033e35fcd19ad8c08536 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:29:31 -0700 Subject: [PATCH 01/10] wow lotsa effort huh --- code/controllers/subsystem/mapping.dm | 24 +++ .../crafting/recipes/recipes_misc.dm | 9 ++ code/game/objects/items/crayons.dm | 9 +- .../items/devices/electrochromatic_kit.dm | 15 ++ code/game/objects/structures/window.dm | 141 +++++++++++++++++- code/modules/assembly/doorcontrol.dm | 47 +++++- .../autolathe_designs_electronics.dm | 8 + tgstation.dme | 1 + 8 files changed, 241 insertions(+), 13 deletions(-) create mode 100644 code/game/objects/items/devices/electrochromatic_kit.dm diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 89155cefb3..ffda2731b1 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -42,6 +42,13 @@ SUBSYSTEM_DEF(mapping) var/stat_map_name = "Loading..." + /// Lookup list for random generated IDs. + var/list/random_generated_ids_by_original = list() + /// next id for separating obfuscated ids. + var/obfuscation_next_id = 1 + /// "secret" key + var/obfuscation_secret + //dlete dis once #39770 is resolved /datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig() if(!config) @@ -52,6 +59,10 @@ SUBSYSTEM_DEF(mapping) #endif stat_map_name = config.map_name +/datum/controller/subsystem/mapping/PreInit() + if(!obfuscation_secret) + obfuscation_secret = md5(GUID()) //HAH! Guess this! + /datum/controller/subsystem/mapping/Initialize(timeofday) HACK_LoadMapConfig() if(initialized) @@ -568,3 +579,16 @@ GLOBAL_LIST_EMPTY(the_station_areas) LM.load() if(GLOB.stationroom_landmarks.len) seedStation() //I'm sure we can trust everyone not to insert a 1x1 rooms which loads a landmark which loads a landmark which loads a la... + +/** + * Generates an obfuscated but constant id for an original id for cases where you don't want players codediving for an id. + * WARNING: MAKE SURE PLAYERS ARE NOT ABLE TO ACCESS THIS. To save performance, it's just secret + an incrementing number. Very guessable if you know what the secret is. + */ +/datum/controller/subsystem/mapping/proc/get_obfuscated_id(original, id_type = "GENERAL") + if(!original) + return //no. + var/key = "[original]%[id_type]" + if(random_generated_ids_by_original[key]) + return random_generated_ids_by_original[key] + random_generated_ids_by_original[key] = "[obfuscation_secret]%[obfuscation_next++]" + return value diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index cf0e1bdec9..b26755d4ac 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -233,6 +233,15 @@ subcategory = CAT_TOOL category = CAT_MISC +/datum/crafting_recipe/electrochromatic_kit + name = "Electrochromatic Kit" + result = /obj/item/electronics/electrochromatic_kit + reqs = list(/obj/item/stack/metal = 1, + /obj/item/stack/cable_coil = 1) + time = 5 + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + //////////// //Vehicles// //////////// diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 3dad3877b7..f60edf2917 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -726,13 +726,12 @@ to_chat(usr, "A color that dark on an object like this? Surely not...") return FALSE - target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) if(istype(target, /obj/structure/window)) - if(color_hex2num(paint_color) < 255) - target.set_opacity(255) - else - target.set_opacity(initial(target.opacity)) + var/obj/structure/window/W = target + W.spraycan_paint(paint_color) + else + target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) . = use_charges(user, 2) var/fraction = min(1, . / reagents.maximum_volume) diff --git a/code/game/objects/items/devices/electrochromatic_kit.dm b/code/game/objects/items/devices/electrochromatic_kit.dm new file mode 100644 index 0000000000..aae886d397 --- /dev/null +++ b/code/game/objects/items/devices/electrochromatic_kit.dm @@ -0,0 +1,15 @@ +/obj/item/electronics/electrochromatic_kit + name = "electrochromatic kit" + desc = "A kit for upgrading a window into an electrochromatic one." + icon = 'icons/obj/device.dmi' + /// Electrochromatic ID + var/id + +/obj/item/electronics/electrochromatic_kit/attack_self(mob/user) + . = ..() + if(.) + return + var/new_id = input(user, "Set this kit's electrochromatic ID", "Set ID", id) as text|null + if(isnull(new_id)) + return + id = new_id diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 5dd4e7d987..07fd8142cb 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -1,3 +1,19 @@ +#define NOT_ELECTROCHROMATIC 0 +#define ELECTROCHROMATIC_OFF 1 +#define ELECTROCHROMATIC_DIMMED 2 + +GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) + +/proc/do_electrochromatic_toggle(new_status, id) + var/list/windows = GLOB.electrochromatic_window_lookup["[id]"] + if(!windows) + return + var/obj/structure/window/W = i + for(var/i in windows) + W = i + new_status? W.electrochromatic_dim() : W.electrochromatic_off() + + /obj/structure/window name = "window" desc = "A window." @@ -28,8 +44,15 @@ rad_insulation = RAD_VERY_LIGHT_INSULATION rad_flags = RAD_PROTECT_CONTENTS + /// Electrochromatic status + var/electrochromatic_status = NOT_ELECTROCHROMATIC + /// Electrochromatic ID. Set the first character to ! to replace with a SSmapping generated pseudorandom obfuscated ID for mapping purposes. + var/electrochromatic_id + /obj/structure/window/examine(mob/user) . = ..() + if(electrochromatic_status != NOT_ELECTROCHROMATIC) + . += "The window has electrochromatic circuitry on it.") if(reinf) if(anchored && state == WINDOW_SCREWED_TO_FRAME) . += "The window is screwed to the frame." @@ -52,6 +75,10 @@ if(reinf && anchored) state = WINDOW_SCREWED_TO_FRAME + if(mapload && electrochromatic_id) + if(copytext(electrochromatic_id, 1, 2) == "!") + electrochromatic_id = SSmapping.get_obfuscated_id(electrochromatic_id) + ini_dir = dir air_update_turf(1) @@ -62,6 +89,12 @@ real_explosion_block = explosion_block explosion_block = EXPLOSION_BLOCK_PROC + if(electrochromatic_status != NOT_ELECTROCHROMATIC) + var/old = electrochromatic_status + make_electrochromatic() + if(old == ELECTROCHROMATIC_DIMMED) + electrochromatic_dim() + /obj/structure/window/ComponentInitialize() . = ..() AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation)) @@ -177,6 +210,24 @@ to_chat(user, "[src] is already in good condition!") return + if(!anchored && istype(I, /obj/item/electronics/electrochromatic_kit && user.a_intent == INTENT_HELP) + var/obj/item/electronics/electrochromatic_kit/K = I + if(!user.temporarilyRemoveItemFromInventory(K)) + to_chat(user, "[K] is stuck to your hand!") + return + if(is_electrochromatic) + to_chat(user, "[src] is already electrochromatic!") + return + if(!anchored) + to_chat(user, "[src] must not be attached to the floor!") + return + if(!K.id) + to_chat(user, "[K] has no ID set!") + return + user.visible_message("[user] upgrades [src] with [I].", "You upgrade [src] with [I].") + make_electrochromatic(K.id) + qdel(K) + if(!(flags_1&NODECONSTRUCT_1)) if(istype(I, /obj/item/screwdriver)) I.play_tool_sound(src, 75) @@ -224,6 +275,85 @@ air_update_turf(TRUE) update_nearby_icons() +/obj/structure/window/proc/spraycan_paint(paint_color) + if(color_hex2num(paint_color) < 255) + set_opacity(255) + else + set_opacity(initial(opacity)) + add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + +/obj/structure/window/proc/electrochromatic_dim() + if(electrochromatic_status == ELECTROCHROMATIC_DIMMED) + return + electrochromatic_status = ELECTROCHROMATIC_DIMMED + animate(src, color = "#222222", time = 2) + set_opacity(TRUE) + +/obj/structure/window/proc/electrochromatic_off() + if(electrochromatic_status == ELECTROCHROMATIC_OFF) + return + electrochromatic_on = FALSE + var/current = color + update_atom_colour() + var/newcolor = color + color = current + animate(src, color = newcolor, time = 2) + +/obj/structure/window/proc/remove_electrochromatic() + electrochromatic_status = NOT_ELECTROCHROMATIC + if(!electrochromatic_id) + return + var/list/L = GLOB.electrochromatic_window_lookup["[electrochromatic_id]"] + if(L) + L -= src + 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(var_name == NAMEOF(src, electrochromatic_status)) + check_status = TRUE + . = ..() //do this first incase it runtimes. + if(check_status) + if(electrochromatic_status == NOT_ELECTROCHROMATIC) + remove_electrochromatic() + return + else if(electrochromatic_status == ELECTROCHROMATIC_OFF) + if(!electrochromatic_id) + return + else + make_electrochromatic() + electrochromatic_off() + return + else if(electrochromatic_status == ELECTROCHROMATIC_DIMMED) + if(!electrochromatic_id) + return + else + make_electrochromatic() + electrochromatic_dim() + 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) + remove_electrochromatic() + electrochromatic_id = new_id + electrochromatic_status = ELECTROCHROMATIC_OFF + LAZYINITLIST(GLOB.electrochromatic_window_lookup["[electrochromatic_id]") + GLOB.electrochromatic_window_lookup[electrochromatic_id] |= src + +/obj/structure/window/update_atom_colour() + if((electrochromatic_status != ELECTROCHROMATIC_OFF) && (electrochromatic_status != ELECTROCHROMATIC_DIMMED)) + return FALSE + return ..() + /obj/structure/window/proc/check_state(checked_state) if(state == checked_state) return TRUE @@ -263,7 +393,6 @@ if(BURN) playsound(src, 'sound/items/Welder.ogg', 100, 1) - /obj/structure/window/deconstruct(disassembled = TRUE) if(QDELETED(src)) return @@ -272,6 +401,9 @@ if(!(flags_1 & NODECONSTRUCT_1)) for(var/obj/item/shard/debris in spawnDebris(drop_location())) transfer_fingerprints_to(debris) // transfer fingerprints to shards only + if(electrochromatic_status != NOT_ELECTROCHROMATIC) //eh fine keep your kit. + new /obj/item/electrochromatic_kit/K(drop_location()) + // Intentionally not setting the ID so you can't decon one to know all of the IDs. qdel(src) update_nearby_icons() @@ -315,9 +447,9 @@ density = FALSE air_update_turf(1) update_nearby_icons() + remove_electrochromatic() return ..() - /obj/structure/window/Move() var/turf/T = loc . = ..() @@ -731,7 +863,6 @@ set_opacity(TRUE) queue_smooth(src) - /obj/structure/window/paperframe/attackby(obj/item/W, mob/user) if(W.get_temperature()) fire_act(W.get_temperature()) @@ -749,3 +880,7 @@ return ..() update_icon() + +#undef NOT_ELECTROCHROMATIC +#undef ELECTROCHROMATIC_OFF +#undef ELECTROCHROMATIC_DIMMED diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 1c9c1a0203..1b9e63abaa 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -3,14 +3,42 @@ desc = "A small electronic device able to control a blast door remotely." icon_state = "control" attachable = TRUE - var/id = null - var/can_change_id = 0 + /// Our ID. Make the first character ! if you want to obfuscate it as a mapper via randomization. + var/id + /// Can the ID be changed if used in hand? + var/can_change_id = FALSE + /// Show ID? + var/show_id = TRUE + /// Numerical ID or text? + var/id_is_number = FALSE var/cooldown = FALSE //Door cooldowns +/obj/item/assembly/Initialize(mapload) + if(mapload && id) + if(copytext(id, 1, 2) == "!") + id = SSmapping.get_obfuscated_id(id) + return ..() + /obj/item/assembly/control/examine(mob/user) . = ..() - if(id) + if(id && show_id) . += "Its channel ID is '[id]'." + if(can_change_id) + . += "Use in hand to change ID." + +/obj/item/assembly/control/attack_self(mob/living/user) + . = ..() + if(.) + return + if(!can_change_id) + return + var/new_id + if(id_is_number) + new_id = input(user, "Set ID (number)", "Set ID", show_id? id : null) as number|null + else + new_id = input(user, "Set ID", "Set ID", show_id? id : null) as text|null + if(!isnull(new_id)) //0/"" is considered !, so check null instead of just !. + id = new_id /obj/item/assembly/control/activate() cooldown = TRUE @@ -22,7 +50,6 @@ INVOKE_ASYNC(M, openclose ? /obj/machinery/door/poddoor.proc/open : /obj/machinery/door/poddoor.proc/close) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) - /obj/item/assembly/control/airlock name = "airlock controller" desc = "A small electronic device able to control an airlock remotely." @@ -123,7 +150,6 @@ addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) - /obj/item/assembly/control/crematorium name = "crematorium controller" desc = "An evil-looking remote controller for a crematorium." @@ -135,3 +161,14 @@ C.cremate(usr) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) + +/obj/item/assembly/control/electrochromatic + name = "electrochromatic window controller" + desc = "Toggles linked electrochromatic windows." + can_change_id = TRUE + /// Stores our status to prevent windows from desyncing. + var/on = FALSE + +/obj/item/assembly/control/electrochromatic/activate() + on = !on + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_ELECTROCHROMATIC_WINDOW_TOGGLE, on, id) diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm index 86e11010bc..5d80b91087 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm @@ -74,3 +74,11 @@ materials = list(/datum/material/glass = 20) build_path = /obj/item/stock_parts/cell/emergency_light category = list("initial", "Electronics") + +/datum/design/electrochromatic_control + name = "Electrochromatic Control Circuit" + id = "electrochromatic_control_circuit" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 100, /datum/material/glass = 100) + build_path = /obj/item/assembly/control/electrochromatic + category = list("initial", "Electronics") diff --git a/tgstation.dme b/tgstation.dme index 848d149ae0..ceed653acc 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -980,6 +980,7 @@ #include "code\game\objects\items\devices\dogborg_sleeper.dm" #include "code\game\objects\items\devices\doorCharge.dm" #include "code\game\objects\items\devices\electroadaptive_pseudocircuit.dm" +#include "code\game\objects\items\devices\electrochromatic_kit.dm" #include "code\game\objects\items\devices\flashlight.dm" #include "code\game\objects\items\devices\forcefieldprojector.dm" #include "code\game\objects\items\devices\geiger_counter.dm" From a9d0ce45b9eb6188856492798015ca85af93e005 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:29:43 -0700 Subject: [PATCH 02/10] wow lotsa effort huh --- code/game/objects/structures/window.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 07fd8142cb..6bc2ada140 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) /obj/structure/window/examine(mob/user) . = ..() if(electrochromatic_status != NOT_ELECTROCHROMATIC) - . += "The window has electrochromatic circuitry on it.") + . += "The window has electrochromatic circuitry on it." if(reinf) if(anchored && state == WINDOW_SCREWED_TO_FRAME) . += "The window is screwed to the frame." From e3b987879e3b9a2461e54b7bfcceda5eebaac8f7 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:30:18 -0700 Subject: [PATCH 03/10] wow lotsa effort huh --- code/game/objects/structures/window.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 6bc2ada140..54590134d2 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -210,7 +210,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) to_chat(user, "[src] is already in good condition!") return - if(!anchored && istype(I, /obj/item/electronics/electrochromatic_kit && user.a_intent == INTENT_HELP) + if(istype(I, /obj/item/electronics/electrochromatic_kit) && user.a_intent == INTENT_HELP) var/obj/item/electronics/electrochromatic_kit/K = I if(!user.temporarilyRemoveItemFromInventory(K)) to_chat(user, "[K] is stuck to your hand!") @@ -218,7 +218,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) if(is_electrochromatic) to_chat(user, "[src] is already electrochromatic!") return - if(!anchored) + if(anchored) to_chat(user, "[src] must not be attached to the floor!") return if(!K.id) @@ -346,7 +346,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) remove_electrochromatic() electrochromatic_id = new_id electrochromatic_status = ELECTROCHROMATIC_OFF - LAZYINITLIST(GLOB.electrochromatic_window_lookup["[electrochromatic_id]") + LAZYINITLIST(GLOB.electrochromatic_window_lookup["[electrochromatic_id]"]) GLOB.electrochromatic_window_lookup[electrochromatic_id] |= src /obj/structure/window/update_atom_colour() From aeaf6ea102cd024fa2bfd08fa9c6152f618708c9 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:33:08 -0700 Subject: [PATCH 04/10] wow lotsa effort huh --- code/game/objects/structures/window.dm | 6 +++++- code/modules/assembly/doorcontrol.dm | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 54590134d2..1a5ebf17e0 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -352,7 +352,11 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) /obj/structure/window/update_atom_colour() if((electrochromatic_status != ELECTROCHROMATIC_OFF) && (electrochromatic_status != ELECTROCHROMATIC_DIMMED)) return FALSE - return ..() + . = ..() + if(color_hex2num(color) < 255) + set_opacity(255) + else + set_opacity(FALSE) /obj/structure/window/proc/check_state(checked_state) if(state == checked_state) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 1b9e63abaa..6016fd6453 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -34,7 +34,7 @@ return var/new_id if(id_is_number) - new_id = input(user, "Set ID (number)", "Set ID", show_id? id : null) as number|null + new_id = input(user, "Set ID (number)", "Set ID", show_id? id : null) as num|null else new_id = input(user, "Set ID", "Set ID", show_id? id : null) as text|null if(!isnull(new_id)) //0/"" is considered !, so check null instead of just !. From 1b5e4b32cb8886facf8a342ad83406fa6e03719a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:33:26 -0700 Subject: [PATCH 05/10] wow lotsa effort huh --- code/modules/assembly/doorcontrol.dm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 6016fd6453..3c2d9fbce3 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -9,8 +9,6 @@ var/can_change_id = FALSE /// Show ID? var/show_id = TRUE - /// Numerical ID or text? - var/id_is_number = FALSE var/cooldown = FALSE //Door cooldowns /obj/item/assembly/Initialize(mapload) @@ -33,10 +31,7 @@ if(!can_change_id) return var/new_id - if(id_is_number) - new_id = input(user, "Set ID (number)", "Set ID", show_id? id : null) as num|null - else - new_id = input(user, "Set ID", "Set ID", show_id? id : null) as text|null + new_id = input(user, "Set ID", "Set ID", show_id? id : null) as text|null if(!isnull(new_id)) //0/"" is considered !, so check null instead of just !. id = new_id From bf7962d8f989ba0e1c5168a0b3f5c6bd2f6b7798 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:36:09 -0700 Subject: [PATCH 06/10] wow lotsa effort huh --- code/controllers/subsystem/mapping.dm | 3 +-- code/datums/components/crafting/recipes/recipes_misc.dm | 2 +- code/game/objects/structures/window.dm | 9 ++++----- code/modules/assembly/doorcontrol.dm | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index ffda2731b1..526e4b98e3 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -590,5 +590,4 @@ GLOBAL_LIST_EMPTY(the_station_areas) var/key = "[original]%[id_type]" if(random_generated_ids_by_original[key]) return random_generated_ids_by_original[key] - random_generated_ids_by_original[key] = "[obfuscation_secret]%[obfuscation_next++]" - return value + . = random_generated_ids_by_original[key] = "[obfuscation_secret]%[obfuscation_next_id++]" diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index b26755d4ac..940e6c134f 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -236,7 +236,7 @@ /datum/crafting_recipe/electrochromatic_kit name = "Electrochromatic Kit" result = /obj/item/electronics/electrochromatic_kit - reqs = list(/obj/item/stack/metal = 1, + reqs = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/cable_coil = 1) time = 5 subcategory = CAT_MISCELLANEOUS diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 1a5ebf17e0..143024bf97 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -8,12 +8,11 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) var/list/windows = GLOB.electrochromatic_window_lookup["[id]"] if(!windows) return - var/obj/structure/window/W = i + var/obj/structure/window/W //define outside for performance because obviously this matters. for(var/i in windows) W = i new_status? W.electrochromatic_dim() : W.electrochromatic_off() - /obj/structure/window name = "window" desc = "A window." @@ -215,7 +214,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) if(!user.temporarilyRemoveItemFromInventory(K)) to_chat(user, "[K] is stuck to your hand!") return - if(is_electrochromatic) + if(electrochromatic_status != NOT_ELECTROCHROMATIC) to_chat(user, "[src] is already electrochromatic!") return if(anchored) @@ -292,7 +291,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) /obj/structure/window/proc/electrochromatic_off() if(electrochromatic_status == ELECTROCHROMATIC_OFF) return - electrochromatic_on = FALSE + electrochromatic_status = ELECTROCHROMATIC_OFF var/current = color update_atom_colour() var/newcolor = color @@ -406,7 +405,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) for(var/obj/item/shard/debris in spawnDebris(drop_location())) transfer_fingerprints_to(debris) // transfer fingerprints to shards only if(electrochromatic_status != NOT_ELECTROCHROMATIC) //eh fine keep your kit. - new /obj/item/electrochromatic_kit/K(drop_location()) + new /obj/item/electronics/electrochromatic_kit/K(drop_location()) // Intentionally not setting the ID so you can't decon one to know all of the IDs. qdel(src) update_nearby_icons() diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 3c2d9fbce3..41b063f43e 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -11,7 +11,7 @@ var/show_id = TRUE var/cooldown = FALSE //Door cooldowns -/obj/item/assembly/Initialize(mapload) +/obj/item/assembly/control/Initialize(mapload) if(mapload && id) if(copytext(id, 1, 2) == "!") id = SSmapping.get_obfuscated_id(id) @@ -166,4 +166,4 @@ /obj/item/assembly/control/electrochromatic/activate() on = !on - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_ELECTROCHROMATIC_WINDOW_TOGGLE, on, id) + do_electrochromatic_toggle(on, id) From ff9f18bdbdbb0fb1bfb67a308cf2485f4447d2a4 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 03:38:41 -0700 Subject: [PATCH 07/10] wow lotsa effort huh --- code/game/objects/structures/window.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 143024bf97..796db7a9c6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -405,7 +405,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) for(var/obj/item/shard/debris in spawnDebris(drop_location())) transfer_fingerprints_to(debris) // transfer fingerprints to shards only if(electrochromatic_status != NOT_ELECTROCHROMATIC) //eh fine keep your kit. - new /obj/item/electronics/electrochromatic_kit/K(drop_location()) + new /obj/item/electronics/electrochromatic_kit(drop_location()) // Intentionally not setting the ID so you can't decon one to know all of the IDs. qdel(src) update_nearby_icons() From 2e35a42f4356cc9795fe3925a25d97ec154b196a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 04:10:38 -0700 Subject: [PATCH 08/10] wow lotsa effort huh --- .../objects/items/devices/electrochromatic_kit.dm | 1 - code/game/objects/structures/window.dm | 12 +++++++----- code/modules/assembly/doorcontrol.dm | 2 -- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/devices/electrochromatic_kit.dm b/code/game/objects/items/devices/electrochromatic_kit.dm index aae886d397..d582eab00e 100644 --- a/code/game/objects/items/devices/electrochromatic_kit.dm +++ b/code/game/objects/items/devices/electrochromatic_kit.dm @@ -1,7 +1,6 @@ /obj/item/electronics/electrochromatic_kit name = "electrochromatic kit" desc = "A kit for upgrading a window into an electrochromatic one." - icon = 'icons/obj/device.dmi' /// Electrochromatic ID var/id diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 796db7a9c6..a8c6dfb898 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -211,9 +211,6 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) if(istype(I, /obj/item/electronics/electrochromatic_kit) && user.a_intent == INTENT_HELP) var/obj/item/electronics/electrochromatic_kit/K = I - if(!user.temporarilyRemoveItemFromInventory(K)) - to_chat(user, "[K] is stuck to your hand!") - return if(electrochromatic_status != NOT_ELECTROCHROMATIC) to_chat(user, "[src] is already electrochromatic!") return @@ -223,6 +220,9 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) if(!K.id) to_chat(user, "[K] has no ID set!") return + if(!user.temporarilyRemoveItemFromInventory(K)) + to_chat(user, "[K] is stuck to your hand!") + return user.visible_message("[user] upgrades [src] with [I].", "You upgrade [src] with [I].") make_electrochromatic(K.id) qdel(K) @@ -341,8 +341,10 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) if(electrochromatic_id) GLOB.electrochromatic_window_lookup[electrochromatic_id] += src -/obj/structure/window/proc/make_electrochromatic(new_id) +/obj/structure/window/proc/make_electrochromatic(new_id = electrochromatic_id) remove_electrochromatic() + if(!new_id) + CRASH("Attempted to make electrochromatic with null ID.") electrochromatic_id = new_id electrochromatic_status = ELECTROCHROMATIC_OFF LAZYINITLIST(GLOB.electrochromatic_window_lookup["[electrochromatic_id]"]) @@ -352,7 +354,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) if((electrochromatic_status != ELECTROCHROMATIC_OFF) && (electrochromatic_status != ELECTROCHROMATIC_DIMMED)) return FALSE . = ..() - if(color_hex2num(color) < 255) + if(color && (color_hex2num(color) < 255)) set_opacity(255) else set_opacity(FALSE) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 41b063f43e..32e262ce65 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -26,8 +26,6 @@ /obj/item/assembly/control/attack_self(mob/living/user) . = ..() - if(.) - return if(!can_change_id) return var/new_id From f70490c61dce9205ae46979d0661191c3608e801 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 04:40:18 -0700 Subject: [PATCH 09/10] fixes --- code/game/machinery/buttons.dm | 8 ++++++++ code/game/objects/structures/window.dm | 14 +++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) 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() From 28da033111afe9857394579220c2f102462da8c0 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Apr 2020 17:37:27 -0700 Subject: [PATCH 10/10] fine --- code/datums/components/crafting/recipes/recipes_misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 940e6c134f..cd254943ea 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -239,7 +239,7 @@ reqs = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/cable_coil = 1) time = 5 - subcategory = CAT_MISCELLANEOUS + subcategory = CAT_TOOL category = CAT_MISC ////////////