diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f287a23f75..cc7c61aa42 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -121,7 +121,7 @@ // Special handling of windows, which are dense but block only from some directions if(istype(A, /obj/structure/window)) var/obj/structure/window/W = A - if (!W.is_full_window() && !(turn(src.last_move, 180) & A.dir)) + if (!W.is_fulltile() && !(turn(src.last_move, 180) & A.dir)) continue // Same thing for (closed) windoors, which have the same problem else if(istype(A, /obj/machinery/door/window) && !(turn(src.last_move, 180) & A.dir)) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 8d82ffc8d1..53dc72faaa 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -14,9 +14,7 @@ name = "glass" singular_name = "glass sheet" icon_state = "sheet-glass" - var/created_window = /obj/structure/window/basic var/is_reinforced = 0 - var/list/construction_options = list("One Direction", "Full Window") default_type = "glass" /obj/item/stack/material/glass/attack_self(mob/user as mob) @@ -52,75 +50,7 @@ if (!G && replace) user.put_in_hands(RG) -/obj/item/stack/material/glass/proc/construct_window(mob/user as mob) - if(!user || !src) return 0 - if(!istype(user.loc,/turf)) return 0 - if(!user.IsAdvancedToolUser()) - return 0 - var/title = "Sheet-[name]" - title += " ([src.get_amount()] sheet\s left)" - switch(input(title, "What would you like to construct?") as null|anything in construction_options) - if("One Direction") - if(!src) return 1 - if(src.loc != user) return 1 - var/list/directions = new/list(cardinal) - var/i = 0 - for (var/obj/structure/window/win in user.loc) - i++ - if(i >= 4) - user << "There are too many windows in this location." - return 1 - directions-=win.dir - if(!(win.dir in cardinal)) - user << "Can't let you do that." - return 1 - - //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. - var/dir_to_set = 2 - for(var/direction in list( user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) )) - var/found = 0 - for(var/obj/structure/window/WT in user.loc) - if(WT.dir == direction) - found = 1 - if(!found) - dir_to_set = direction - break - new created_window( user.loc, dir_to_set, 1 ) - src.use(1) - if("Full Window") - if(!src) return 1 - if(src.loc != user) return 1 - if(src.get_amount() < 4) - user << "You need more glass to do that." - return 1 - if(locate(/obj/structure/window) in user.loc) - user << "There is a window in the way." - return 1 - new created_window( user.loc, SOUTHWEST, 1 ) - src.use(4) - if("Windoor") - if(!is_reinforced) return 1 - - - if(!src || src.loc != user) return 1 - - if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc)) - user << "There is already a windoor assembly in that location." - return 1 - - if(isturf(user.loc) && locate(/obj/machinery/door/window/, user.loc)) - user << "There is already a windoor in that location." - return 1 - - if(src.get_amount() < 5) - user << "You need more glass to do that." - return 1 - - new /obj/structure/windoor_assembly(user.loc, user.dir, 1) - src.use(5) - - return 0 /* @@ -131,9 +61,7 @@ singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" default_type = "reinforced glass" - created_window = /obj/structure/window/reinforced is_reinforced = 1 - construction_options = list("One Direction", "Full Window", "Windoor") /* * Phoron Glass sheets @@ -142,7 +70,6 @@ name = "phoron glass" singular_name = "phoron glass sheet" icon_state = "sheet-phoronglass" - created_window = /obj/structure/window/phoronbasic default_type = "phoron glass" /obj/item/stack/material/glass/phoronglass/attackby(obj/item/W, mob/user) @@ -170,5 +97,4 @@ singular_name = "reinforced phoron glass sheet" icon_state = "sheet-phoronrglass" default_type = "reinforced phoron glass" - created_window = /obj/structure/window/phoronreinforced is_reinforced = 1 diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 5c7adf8f0e..979732380f 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -21,6 +21,7 @@ var/shardtype = /obj/item/weapon/material/shard var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass. var/silicate = 0 // number of units of silicate + var/fulltile = FALSE // Set to true on full-tile variants. /obj/structure/window/examine(mob/user) . = ..(user) @@ -128,16 +129,10 @@ /obj/structure/window/blob_act() take_damage(50) -//TODO: Make full windows a separate type of window. -//Once a full window, it will always be a full window, so there's no point -//having the same type for both. -/obj/structure/window/proc/is_full_window() - return (dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST) - /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 - if(is_full_window()) + if(is_fulltile()) return 0 //full tile window, you can't move into it! if(get_dir(loc, target) & dir) return !density @@ -388,8 +383,6 @@ anchored = 0 state = 0 update_verbs() - if(is_fulltile()) - maxhealth *= 2 health = maxhealth @@ -416,9 +409,7 @@ //checks if this window is full-tile one /obj/structure/window/proc/is_fulltile() - if(dir & (dir - 1)) - return 1 - return 0 + return fulltile //This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc! /obj/structure/window/proc/update_nearby_icons() @@ -484,6 +475,10 @@ maxhealth = 12.0 force_threshold = 3 +/obj/structure/window/basic/full + maxhealth = 24 + fulltile = TRUE + /obj/structure/window/phoronbasic name = "phoron window" desc = "A borosilicate alloy window. It seems to be quite strong." @@ -497,8 +492,8 @@ force_threshold = 5 /obj/structure/window/phoronbasic/full - dir = SOUTHWEST maxhealth = 80 + fulltile = TRUE /obj/structure/window/phoronreinforced name = "reinforced borosilicate window" @@ -514,8 +509,8 @@ force_threshold = 10 /obj/structure/window/phoronreinforced/full - dir = SOUTHWEST maxhealth = 160 + fulltile = TRUE /obj/structure/window/reinforced name = "reinforced window" @@ -530,9 +525,9 @@ force_threshold = 6 /obj/structure/window/reinforced/full - dir = SOUTHWEST icon_state = "fwindow" maxhealth = 80 + fulltile = TRUE /obj/structure/window/reinforced/tinted name = "tinted window" @@ -567,9 +562,9 @@ var/id /obj/structure/window/reinforced/polarized/full - dir = SOUTHWEST icon_state = "fwindow" maxhealth = 80 + fulltile = TRUE /obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/device/multitool) && !anchored) // Only allow programming if unanchored! diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index f8aad253d8..6f55572ef9 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -113,6 +113,7 @@ var/list/name_to_material // Placeholder vars for the time being, todo properly integrate windows/light tiles/rods. var/created_window + var/created_fulltile_window var/rod_product var/wire_product var/list/window_options = list() @@ -485,11 +486,12 @@ var/list/name_to_material destruction_desc = "shatters" window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2) created_window = /obj/structure/window/basic + created_fulltile_window = /obj/structure/window/basic/full rod_product = /obj/item/stack/material/glass/reinforced /material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack) - if(!user || !used_stack || !created_window || !window_options.len) + if(!user || !used_stack || !created_window || !created_fulltile_window || !window_options.len) return 0 if(!user.IsAdvancedToolUser()) @@ -544,6 +546,8 @@ var/list/name_to_material if(choice == "Windoor") if(is_reinforced()) build_path = /obj/structure/windoor_assembly/secure + else if(choice == "Full Window") + build_path = created_fulltile_window else build_path = created_window @@ -575,6 +579,7 @@ var/list/name_to_material composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT) window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2) created_window = /obj/structure/window/reinforced + created_fulltile_window = /obj/structure/window/reinforced/full wire_product = null rod_product = null @@ -588,6 +593,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 4) window_options = list("One Direction" = 1, "Full Window" = 4) created_window = /obj/structure/window/phoronbasic + created_fulltile_window = /obj/structure/window/phoronbasic/full wire_product = null rod_product = /obj/item/stack/material/glass/phoronrglass @@ -599,6 +605,7 @@ var/list/name_to_material composite_material = list() //todo window_options = list("One Direction" = 1, "Full Window" = 4) created_window = /obj/structure/window/phoronreinforced + created_fulltile_window = /obj/structure/window/phoronreinforced/full hardness = 40 weight = 30 stack_origin_tech = list(TECH_MATERIAL = 2) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3bcfbe7b60..d9e074a0a5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -832,7 +832,7 @@ default behaviour is: if (pulling) if (istype(pulling, /obj/structure/window)) var/obj/structure/window/W = pulling - if(W.is_full_window()) + if(W.is_fulltile()) for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T))) stop_pulling() if (pulling)