From 77737581c129864291bf54371af2c36b1c096715 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 28 Aug 2021 15:11:07 +0100
Subject: [PATCH 1/7] Fancy windows? I think so good sir!
---
.../mountable_frames/buttons_switches.dm | 8 +++
.../game/objects/items/stacks/sheets/glass.dm | 5 +-
.../items/stacks/sheets/sheet_types.dm | 1 +
code/game/objects/structures/window.dm | 52 +++++++++++++++++--
4 files changed, 60 insertions(+), 6 deletions(-)
diff --git a/code/game/objects/items/mountable_frames/buttons_switches.dm b/code/game/objects/items/mountable_frames/buttons_switches.dm
index 76e4f0ecfd4..30b77ea2f33 100644
--- a/code/game/objects/items/mountable_frames/buttons_switches.dm
+++ b/code/game/objects/items/mountable_frames/buttons_switches.dm
@@ -21,3 +21,11 @@
/obj/item/mounted/frame/light_switch/do_build(turf/on_wall, mob/user)
new /obj/machinery/light_switch(get_turf(user), get_dir(user, on_wall))
qdel(src)
+
+/obj/item/mounted/frame/light_switch/windowtint
+ name = "window tint control button frame"
+ desc = "Used for repairing or building window tint control buttons"
+
+/obj/item/mounted/frame/light_switch/windowtint/do_build(turf/on_wall, mob/user)
+ new /obj/machinery/button/windowtint(get_turf(user), get_dir(user, on_wall))
+ qdel(src)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index c9901c8b0fe..1f8ae46083e 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -89,7 +89,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
new/datum/stack_recipe/window("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \
null, \
new/datum/stack_recipe/window("directional reinforced window", /obj/structure/window/reinforced, time = 0, on_floor = TRUE, window_checks = TRUE), \
- new/datum/stack_recipe/window("fulltile reinforced window", /obj/structure/window/full/reinforced, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
+ new/datum/stack_recipe/window("fulltile reinforced window", /obj/structure/window/full/reinforced, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
+ null, \
+ new/datum/stack_recipe/window("directional electrochromic window", /obj/structure/window/reinforced/polarized, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
+ new/datum/stack_recipe/window("fulltile electrochromic window", /obj/structure/window/full/reinforced/polarized, 4, time = 0, on_floor = TRUE, window_checks = TRUE) \
))
/obj/item/stack/sheet/rglass
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 92e2c4115fe..6bf4bc8051d 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -83,6 +83,7 @@ GLOBAL_LIST_INIT(metal_recipes, list(
null,
new /datum/stack_recipe("mass driver button frame", /obj/item/mounted/frame/driver_button, 1, time = 50, one_per_turf = 0, on_floor = 1),
new /datum/stack_recipe("light switch frame", /obj/item/mounted/frame/light_switch, 1, time = 50, one_per_turf = 0, on_floor = 1),
+ new /datum/stack_recipe("window tint control button frame", /obj/item/mounted/frame/light_switch/windowtint, 1, time = 50, one_per_turf = 0, on_floor = 1),
null,
new /datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade),
new /datum/stack_recipe("light fixture frame", /obj/item/mounted/frame/light_fixture, 2),
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index a2d13ad8afb..54d617ca3e4 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -514,12 +514,35 @@
var/id = 0
var/active = 0
+/obj/machinery/button/windowtint/New(turf/loc, w_dir=null)
+ ..()
+ switch(w_dir)
+ if(NORTH)
+ pixel_y = 25
+ if(SOUTH)
+ pixel_y = -25
+ if(EAST)
+ pixel_x = 25
+ if(WEST)
+ pixel_x = -25
+
/obj/machinery/button/windowtint/attack_hand(mob/user)
if(..())
- return 1
+ return TRUE
toggle_tint()
+/obj/machinery/button/windowtint/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/wrench))
+ playsound(get_turf(src), W.usesound, 50, 1)
+ if(do_after(user, 30 * W.toolspeed, target = src))
+ to_chat(user, "You detach \the [src] from the wall.")
+ new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src))
+ qdel(src)
+ return TRUE
+
+ return ..()
+
/obj/machinery/button/windowtint/proc/toggle_tint()
use_power(5)
@@ -532,6 +555,12 @@
W.toggle()
return
+ for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range))
+ if(W.id == src.id || !W.id)
+ spawn(0)
+ W.toggle()
+ return
+
/obj/machinery/button/windowtint/power_change()
..()
if(active && !powered(power_channel))
@@ -589,7 +618,7 @@
icon_state = "window"
max_integrity = 50
smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
+ canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
/obj/structure/window/full/plasmabasic
name = "plasma window"
@@ -602,7 +631,7 @@
heat_resistance = 32000
max_integrity = 300
smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
+ canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
explosion_block = 1
armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
rad_insulation = RAD_NO_INSULATION
@@ -616,7 +645,7 @@
shardtype = /obj/item/shard/plasma
glass_type = /obj/item/stack/sheet/plasmarglass
smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
+ canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
reinf = TRUE
max_integrity = 1000
explosion_block = 2
@@ -632,7 +661,7 @@
icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
icon_state = "r_window"
smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
+ canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
max_integrity = 100
reinf = TRUE
heat_resistance = 1600
@@ -641,6 +670,19 @@
explosion_block = 1
glass_type = /obj/item/stack/sheet/rglass
+/obj/structure/window/full/reinforced/polarized
+ name = "electrochromic window"
+ desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
+ var/id
+
+/obj/structure/window/full/reinforced/polarized/proc/toggle()
+ if(opacity)
+ animate(src, color="#FFFFFF", time=5)
+ set_opacity(0)
+ else
+ animate(src, color="#222222", time=5)
+ set_opacity(1)
+
/obj/structure/window/full/reinforced/tinted
name = "tinted window"
desc = "It looks rather strong and opaque. Might take a few good hits to shatter it."
From 523c7786b29e0eb9cb298e33864a11a802a83768 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 28 Aug 2021 15:17:31 +0100
Subject: [PATCH 2/7] spawner
---
code/game/objects/effects/spawners/windowspawner.dm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/code/game/objects/effects/spawners/windowspawner.dm b/code/game/objects/effects/spawners/windowspawner.dm
index 1d498888588..20f43f6eea2 100644
--- a/code/game/objects/effects/spawners/windowspawner.dm
+++ b/code/game/objects/effects/spawners/windowspawner.dm
@@ -59,6 +59,12 @@
window_to_spawn_regular = /obj/structure/window/reinforced/tinted
window_to_spawn_full = /obj/structure/window/full/reinforced/tinted
+/obj/effect/spawner/window/reinforced/polarized
+ name = "electrochromic reinforced window spawner"
+ icon_state = "pwindow_spawner"
+ window_to_spawn_regular = /obj/structure/window/reinforced/polarized
+ window_to_spawn_full = /obj/structure/window/full/reinforced/polarized
+
/obj/effect/spawner/window/shuttle
name = "shuttle window spawner"
icon_state = "swindow_spawner"
From 89b7b016a1686e8d087625dd12ed4a2fc3064524 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 28 Aug 2021 15:28:17 +0100
Subject: [PATCH 3/7] ahem, you saw nothing
---
code/game/objects/structures/window.dm | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 54d617ca3e4..535fb190c2c 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -551,15 +551,11 @@
for(var/obj/structure/window/reinforced/polarized/W in range(src,range))
if(W.id == src.id || !W.id)
- spawn(0)
- W.toggle()
- return
+ W.toggle()
for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range))
if(W.id == src.id || !W.id)
- spawn(0)
- W.toggle()
- return
+ W.toggle()
/obj/machinery/button/windowtint/power_change()
..()
From 68c90f791c9ed96ab5eea37dd13b98c34e2b5f79 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 28 Aug 2021 16:09:08 +0100
Subject: [PATCH 4/7] steel review
---
code/game/objects/structures/window.dm | 54 +++++++++++---------------
1 file changed, 23 insertions(+), 31 deletions(-)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 535fb190c2c..c9c594e3dcc 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -69,6 +69,14 @@
air_update_turf(TRUE)
+/obj/structure/window/proc/toggle_polarization()
+ if(opacity)
+ animate(src, color="#FFFFFF", time=5)
+ set_opacity(0)
+ else
+ animate(src, color="#222222", time=5)
+ set_opacity(1)
+
/obj/structure/window/narsie_act()
color = NARSIE_WINDOW_COLOUR
@@ -497,14 +505,6 @@
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
var/id
-/obj/structure/window/reinforced/polarized/proc/toggle()
- if(opacity)
- animate(src, color="#FFFFFF", time=5)
- set_opacity(0)
- else
- animate(src, color="#222222", time=5)
- set_opacity(1)
-
/obj/machinery/button/windowtint
name = "window tint control"
icon = 'icons/obj/power.dmi'
@@ -514,8 +514,8 @@
var/id = 0
var/active = 0
-/obj/machinery/button/windowtint/New(turf/loc, w_dir=null)
- ..()
+/obj/machinery/button/windowtint/Initialize(mapload, w_dir=null)
+ . = ..()
switch(w_dir)
if(NORTH)
pixel_y = 25
@@ -532,16 +532,17 @@
toggle_tint()
-/obj/machinery/button/windowtint/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- playsound(get_turf(src), W.usesound, 50, 1)
- if(do_after(user, 30 * W.toolspeed, target = src))
- to_chat(user, "You detach \the [src] from the wall.")
- new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src))
- qdel(src)
- return TRUE
-
- return ..()
+/obj/machinery/button/windowtint/wrench_act(mob/user, obj/item/I)
+ . = TRUE
+ if(!I.tool_use_check(user, 0))
+ return
+ user.visible_message("[user] starts unwrenching [src] from the wall...", "You are unwrenching [src] from the wall...", "You hear ratcheting.")
+ . = TRUE
+ if(!I.use_tool(src, user, 50, volume = I.tool_volume))
+ return
+ WRENCH_UNANCHOR_WALL_MESSAGE
+ new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src))
+ qdel(src)
/obj/machinery/button/windowtint/proc/toggle_tint()
use_power(5)
@@ -551,11 +552,11 @@
for(var/obj/structure/window/reinforced/polarized/W in range(src,range))
if(W.id == src.id || !W.id)
- W.toggle()
+ W.toggle_polarization()
for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range))
if(W.id == src.id || !W.id)
- W.toggle()
+ W.toggle_polarization()
/obj/machinery/button/windowtint/power_change()
..()
@@ -670,15 +671,6 @@
name = "electrochromic window"
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
var/id
-
-/obj/structure/window/full/reinforced/polarized/proc/toggle()
- if(opacity)
- animate(src, color="#FFFFFF", time=5)
- set_opacity(0)
- else
- animate(src, color="#222222", time=5)
- set_opacity(1)
-
/obj/structure/window/full/reinforced/tinted
name = "tinted window"
desc = "It looks rather strong and opaque. Might take a few good hits to shatter it."
From 267e3d2967d4e51e222a533332dae8d9c2e9a34e Mon Sep 17 00:00:00 2001
From: S34N <12197162+S34NW@users.noreply.github.com>
Date: Mon, 30 Aug 2021 13:20:12 +0100
Subject: [PATCH 5/7] Apply suggestions from code review
Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com>
---
code/game/objects/structures/window.dm | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index c9c594e3dcc..e8d38a64d3d 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -71,11 +71,11 @@
/obj/structure/window/proc/toggle_polarization()
if(opacity)
- animate(src, color="#FFFFFF", time=5)
- set_opacity(0)
+ animate(src, color = "#FFFFFF", time = 0.5 SECONDS)
+ set_opacity(FALSE)
else
- animate(src, color="#222222", time=5)
- set_opacity(1)
+ animate(src, color = "#222222", time = 0.5 SECONDS)
+ set_opacity(TRUE)
/obj/structure/window/narsie_act()
color = NARSIE_WINDOW_COLOUR
@@ -514,7 +514,7 @@
var/id = 0
var/active = 0
-/obj/machinery/button/windowtint/Initialize(mapload, w_dir=null)
+/obj/machinery/button/windowtint/Initialize(mapload, w_dir = null)
. = ..()
switch(w_dir)
if(NORTH)
@@ -537,7 +537,6 @@
if(!I.tool_use_check(user, 0))
return
user.visible_message("[user] starts unwrenching [src] from the wall...", "You are unwrenching [src] from the wall...", "You hear ratcheting.")
- . = TRUE
if(!I.use_tool(src, user, 50, volume = I.tool_volume))
return
WRENCH_UNANCHOR_WALL_MESSAGE
@@ -554,7 +553,7 @@
if(W.id == src.id || !W.id)
W.toggle_polarization()
- for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range))
+ for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range))
if(W.id == src.id || !W.id)
W.toggle_polarization()
From a6a79dca1e6d59ecb8854c919d9212eaa2c73b8b Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Mon, 30 Aug 2021 15:56:04 +0100
Subject: [PATCH 6/7] windows remember their old colours
---
code/game/objects/structures/window.dm | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index e8d38a64d3d..c3c23b4296e 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -27,6 +27,8 @@
var/real_explosion_block //ignore this, just use explosion_block
var/breaksound = "shatter"
var/hitsound = 'sound/effects/Glasshit.ogg'
+ /// Used to restore colours from polarised glass
+ var/old_color
/obj/structure/window/examine(mob/user)
. = ..()
@@ -71,9 +73,12 @@
/obj/structure/window/proc/toggle_polarization()
if(opacity)
- animate(src, color = "#FFFFFF", time = 0.5 SECONDS)
+ if(!old_color)
+ old_color = "#FFFFFF"
+ animate(src, color = old_color, time = 0.5 SECONDS)
set_opacity(FALSE)
else
+ old_color = color
animate(src, color = "#222222", time = 0.5 SECONDS)
set_opacity(TRUE)
From 3defd460379afabf8ba0862b2fd87fc10fac3585 Mon Sep 17 00:00:00 2001
From: S34N <12197162+S34NW@users.noreply.github.com>
Date: Wed, 1 Sep 2021 19:31:20 +0100
Subject: [PATCH 7/7] Apply suggestions from code review
Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>
---
code/game/objects/structures/window.dm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index c3c23b4296e..7872c395d1e 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -545,7 +545,7 @@
if(!I.use_tool(src, user, 50, volume = I.tool_volume))
return
WRENCH_UNANCHOR_WALL_MESSAGE
- new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src))
+ new /obj/item/mounted/frame/light_switch/windowtint(get_turf(src))
qdel(src)
/obj/machinery/button/windowtint/proc/toggle_tint()
@@ -559,7 +559,7 @@
W.toggle_polarization()
for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range))
- if(W.id == src.id || !W.id)
+ if(W.id == id || !W.id)
W.toggle_polarization()
/obj/machinery/button/windowtint/power_change()
@@ -675,6 +675,7 @@
name = "electrochromic window"
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
var/id
+
/obj/structure/window/full/reinforced/tinted
name = "tinted window"
desc = "It looks rather strong and opaque. Might take a few good hits to shatter it."