diff --git a/code/game/objects/window.dm b/code/game/objects/window.dm index 77e66074c93..1b1fc8cc7c3 100644 --- a/code/game/objects/window.dm +++ b/code/game/objects/window.dm @@ -170,10 +170,22 @@ usr << ( state==1? "You have unfastened the window from the frame." : "You have fastened the window to the frame." ) else if(reinf && state == 0) anchored = !anchored + + for(var/obj/structure/window/w in range(src,1)) + if (w.anchored) + w.relativewindow() + src.relativewindow() + playsound(src.loc, 'Screwdriver.ogg', 75, 1) user << (src.anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.") else if(!reinf) src.anchored = !( src.anchored ) + + for(var/obj/structure/window/w in range(src,1)) + if (w.anchored) + w.relativewindow() + src.relativewindow() + playsound(src.loc, 'Screwdriver.ogg', 75, 1) user << (src.anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <=1) @@ -187,6 +199,12 @@ playsound(src.loc, 'Glasshit.ogg', 75, 1) if (src.health <= 7) src.anchored = 0 + + for(var/obj/structure/window/w in range(src,1)) + if (w.anchored) + w.relativewindow() + src.relativewindow() + step(src, get_dir(user, src)) if (src.health <= 0) if (src.dir == SOUTHWEST) @@ -282,6 +300,8 @@ density = 0 update_nearby_tiles() + for(var/obj/structure/window/w in range(src,1)) + w.relativewindow() playsound(src, "shatter", 70, 1) ..() @@ -317,4 +337,29 @@ if(istype(source)) air_master.tiles_to_update += source if(istype(target)) air_master.tiles_to_update += target - return 1 \ No newline at end of file + return 1 + + +//checks if this window is full-tile one +/obj/structure/window/proc/is_fulltile() + return (src.dir == SOUTHWEST || src.dir == SOUTHEAST || src.dir == NORTHWEST || src.dir == NORTHEAST) + +//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) +/obj/structure/window/proc/relativewindow() + //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. + //this way it will only update full-tile ones + if (!is_fulltile()) + return + var/junction = 0 //will be used to determine from which side the window is connected to other windows + if (src.anchored) + for(var/obj/structure/window/W in orange(src,1)) + if (W.anchored && W.density && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows. + if (abs(src.x-W.x)-abs(src.y-W.y) ) //doesn't count windows, placed diagonally to src + junction |= get_dir(src,W) + if (istype(src,/obj/structure/window/basic)) + src.icon_state = "window[junction]" +// else if (istype(src,/obj/structure/window/reinforced)) No sprites yet. +// src.icon_state = "rwindow[junction]" + + return + diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index e5f3a8d0d57..92f2006a35e 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ