diff --git a/code/game/objects/items/weapons/glass.dm b/code/game/objects/items/weapons/glass.dm index 68f877f12af..38ce5ea77c6 100644 --- a/code/game/objects/items/weapons/glass.dm +++ b/code/game/objects/items/weapons/glass.dm @@ -89,19 +89,31 @@ SHARDS return switch(alert("Sheet-Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null)) if("one direct") - var/obj/window/W = new /obj/window( usr.loc ) - W.anchored = 0 - if (src.amount < 1) - return - src.amount-- + var/go = 1 + for (var/obj/window/win in usr.loc) + if(win.ini_dir == NORTHWEST || win.ini_dir == NORTHEAST || win.ini_dir == SOUTHWEST || win.ini_dir == SOUTHEAST) + go = 0 + if(go) + var/obj/window/W = new /obj/window( usr.loc ) + W.anchored = 0 + if (src.amount < 1) + return + src.amount-- + else usr << "Can't let you do that." if("full (2 sheets)") - if (src.amount < 2) - return - src.amount -= 2 - var/obj/window/W = new /obj/window( usr.loc ) - W.dir = SOUTHWEST - W.ini_dir = SOUTHWEST - W.anchored = 0 + var/go = 1 + for (var/obj/window/win in usr.loc) + if(win) + go = 0 + if (go) + if (src.amount < 2) + return + src.amount -= 2 + var/obj/window/W = new /obj/window( usr.loc ) + W.dir = SOUTHWEST + W.ini_dir = SOUTHWEST + W.anchored = 0 + else usr << "Can't let you do that." else if (src.amount <= 0) user.u_equip(src) @@ -166,21 +178,33 @@ SHARDS return switch(alert("Sheet Reinf. Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null)) if("one direct") - var/obj/window/W = new /obj/window( usr.loc, 1 ) - W.anchored = 0 - W.state = 0 - if (src.amount < 1) - return - src.amount-- + var/go = 1 + for (var/obj/window/win in usr.loc) + if(win.ini_dir == NORTHWEST || win.ini_dir == NORTHEAST || win.ini_dir == SOUTHWEST || win.ini_dir == SOUTHEAST) + go = 0 + if(go) + var/obj/window/W = new /obj/window( usr.loc, 1 ) + W.anchored = 0 + W.state = 0 + if (src.amount < 1) + return + src.amount-- + else usr << "Can't let you do that." if("full (2 sheets)") - if (src.amount < 2) - return - src.amount -= 2 - var/obj/window/W = new /obj/window( usr.loc, 1 ) - W.dir = SOUTHWEST - W.ini_dir = SOUTHWEST - W.anchored = 0 - W.state = 0 + var/go = 1 + for (var/obj/window/win in usr.loc) + if(win) + go = 0 + if(go) + if (src.amount < 2) + return + src.amount -= 2 + var/obj/window/W = new /obj/window( usr.loc, 1 ) + W.dir = SOUTHWEST + W.ini_dir = SOUTHWEST + W.anchored = 0 + W.state = 0 + else usr << "Can't let you do that." else if (src.amount <= 0) user.u_equip(src) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 94bc7cac566..84ff7b6660e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -94,6 +94,10 @@ to clean it up, or just beat the shit out of it (which takes ages). src.now_pushing = 1 if (!AM.anchored) var/t = get_dir(src, AM) + if (istype(AM, /obj/window)) + if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(AM,t)) + return step(AM, t) src.now_pushing = null return @@ -422,6 +426,11 @@ to clean it up, or just beat the shit out of it (which takes ages). step(src.pulling, get_dir(src.pulling.loc, T)) M.pulling = t else + if (src.pulling) + if (istype(src.pulling, /obj/window)) + if(src.pulling:ini_dir == NORTHWEST || src.pulling:ini_dir == NORTHEAST || src.pulling:ini_dir == SOUTHWEST || src.pulling:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(src.pulling,get_dir(src.pulling.loc, T))) + src.pulling = null if (src.pulling) step(src.pulling, get_dir(src.pulling.loc, T)) else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index aa3b571df2f..bcf68283189 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -107,6 +107,10 @@ src.now_pushing = 1 if (!AM.anchored) var/t = get_dir(src, AM) + if (istype(AM, /obj/window)) + if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(AM,t)) + return step(AM, t) src.now_pushing = null return @@ -917,6 +921,11 @@ step(src.pulling, get_dir(src.pulling.loc, T)) M.pulling = t else + if (src.pulling) + if (istype(src.pulling, /obj/window)) + if(src.pulling:ini_dir == NORTHWEST || src.pulling:ini_dir == NORTHEAST || src.pulling:ini_dir == SOUTHWEST || src.pulling:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(src.pulling,get_dir(src.pulling.loc, T))) + src.pulling = null if (src.pulling) step(src.pulling, get_dir(src.pulling.loc, T)) else diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index c0e3f964772..1aa07746ec4 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -62,6 +62,10 @@ src.now_pushing = 1 if (!( AM.anchored )) var/t = get_dir(src, AM) + if (istype(AM, /obj/window)) + if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(AM,t)) + return step(AM, t) src.now_pushing = null return @@ -367,7 +371,13 @@ step(src.pulling, get_dir(src.pulling.loc, T)) M.pulling = t else - step(src.pulling, get_dir(src.pulling.loc, T)) + if (src.pulling) + if (istype(src.pulling, /obj/window)) + if(src.pulling:ini_dir == NORTHWEST || src.pulling:ini_dir == NORTHEAST || src.pulling:ini_dir == SOUTHWEST || src.pulling:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(src.pulling,get_dir(src.pulling.loc, T))) + src.pulling = null + if (src.pulling) + step(src.pulling, get_dir(src.pulling.loc, T)) else src.pulling = null . = ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index e81e95d4136..79da5b3d8a2 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -277,6 +277,10 @@ src.now_pushing = 1 if (!AM.anchored) var/t = get_dir(src, AM) + if (istype(AM, /obj/window)) + if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(AM,t)) + return step(AM, t) src.now_pushing = null return @@ -790,6 +794,11 @@ Frequency: step(src.pulling, get_dir(src.pulling.loc, T)) M.pulling = t else + if (src.pulling) + if (istype(src.pulling, /obj/window)) + if(src.pulling:ini_dir == NORTHWEST || src.pulling:ini_dir == NORTHEAST || src.pulling:ini_dir == SOUTHWEST || src.pulling:ini_dir == SOUTHEAST) + for(var/obj/window/win in get_step(src.pulling,get_dir(src.pulling.loc, T))) + src.pulling = null if (src.pulling) step(src.pulling, get_dir(src.pulling.loc, T)) else