From c4da1e66d997ab5d8aa41c6d0bd94e6546b09d6a Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 8 Jan 2015 19:44:56 +0100 Subject: [PATCH] Fix wall smoothing --- code/game/objects/items/blueprints.dm | 2 - code/game/objects/structures/false_walls.dm | 306 ++++++++------------ code/game/objects/structures/girders.dm | 2 +- code/game/smoothwall.dm | 184 +++++++----- code/game/turfs/simulated/walls.dm | 5 - 5 files changed, 236 insertions(+), 263 deletions(-) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index c995a91c55e..21330412b22 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -208,8 +208,6 @@ move an amendment to the drawing.

return BORDER_2NDTILE if (locate(/obj/structure/falsewall) in T2) return BORDER_2NDTILE - if (locate(/obj/structure/falserwall) in T2) - return BORDER_2NDTILE return BORDER_NONE diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 6406f46c462..31cede5e65b 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -74,248 +74,185 @@ anchored = 1 icon = 'icons/turf/walls.dmi' var/mineral = "metal" + var/walltype = "metal" var/opening = 0 - - canSmoothWith = list( - /turf/simulated/wall, - /obj/structure/falsewall, - /obj/structure/falserwall // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS. - ) + density = 1 + opacity = 1 /obj/structure/falsewall/New() - ..() - relativewall() relativewall_neighbours() + ..() /obj/structure/falsewall/Destroy() - var/temploc = src.loc + var/temploc = loc + loc = null - spawn(10) - for(var/turf/simulated/wall/W in range(temploc,1)) - W.relativewall() + for(var/turf/simulated/wall/W in range(temploc,1)) + W.relativewall() - for(var/obj/structure/falsewall/W in range(temploc,1)) - W.relativewall() - - for(var/obj/structure/falserwall/W in range(temploc,1)) - W.relativewall() + for(var/obj/structure/falsewall/W in range(temploc,1)) + W.relativewall() ..() - - + /obj/structure/falsewall/relativewall() if(!density) - icon_state = "[mineral]fwall_open" + icon_state = "[walltype]fwall_open" return - var/junction=findSmoothingNeighbors() - icon_state = "[mineral][junction]" + var/junction = 0 //will be used to determine from which side the wall is connected to other walls + + for(var/turf/simulated/wall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + if(walltype == W.walltype)//Only 'like' walls connect -Sieve + junction |= get_dir(src,W) + for(var/obj/structure/falsewall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + if(walltype == W.walltype) + junction |= get_dir(src,W) + icon_state = "[walltype][junction]" + return -/obj/structure/falsewall/attack_hand(mob/user as mob) +/obj/structure/falsewall/attack_hand(mob/user) if(opening) return + opening = 1 if(density) - opening = 1 - icon_state = "[mineral]fwall_open" - flick("[mineral]fwall_opening", src) - sleep(15) - src.density = 0 + do_the_flick() + sleep(4) + density = 0 SetOpacity(0) - opening = 0 + update_icon(0) else - opening = 1 - flick("[mineral]fwall_closing", src) - icon_state = "[mineral]0" + var/srcturf = get_turf(src) + for(var/mob/living/obstacle in srcturf) //Stop people from using this as a shield + opening = 0 + return + do_the_flick() density = 1 - sleep(15) + sleep(4) SetOpacity(1) - src.relativewall() - opening = 0 - -/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open - ..() + update_icon() + opening = 0 + +/obj/structure/falsewall/proc/do_the_flick() if(density) - icon_state = "[mineral]0" - src.relativewall() + flick("[walltype]fwall_opening", src) else - icon_state = "[mineral]fwall_open" + flick("[walltype]fwall_closing", src) -/obj/structure/falsewall/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/structure/falsewall/update_icon(relativewall = 1)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open + if(density) + icon_state = "[walltype]0" + if(relativewall) + relativewall() + else + icon_state = "[walltype]fwall_open" + +/obj/structure/falsewall/proc/ChangeToWall(delete = 1) + var/turf/T = get_turf(src) + if(!walltype || walltype == "metal") + T.ChangeTurf(/turf/simulated/wall) + else + T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[walltype]")) + if(delete) + qdel(src) + return T + +/obj/structure/falsewall/attackby(obj/item/weapon/W, mob/user) if(opening) - user << "\red You must wait until the door has stopped moving." + user << "You must wait until the door has stopped moving." return if(density) var/turf/T = get_turf(src) if(T.density) - user << "\red The wall is blocked!" + user << "[src] is blocked!" return if(istype(W, /obj/item/weapon/screwdriver)) - user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") - if(!mineral || mineral == "metal") - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - del(src) - - if( istype(W, /obj/item/weapon/weldingtool) ) + if (!istype(T, /turf/simulated/floor)) + user << "[src] bolts must be tightened on the floor!" + return + user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") + ChangeToWall() + if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W - if( WT:welding ) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - if(mineral != "plasma")//Stupid shit keeps me from pushing the attackby() to plasma walls -Sieve - T = get_turf(src) - T.attackby(W,user) - del(src) + if(WT.remove_fuel(0,user)) + dismantle(user) else - user << "\blue You can't reach, close it first!" + user << "You can't reach, close it first!" - if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - var/turf/T = get_turf(src) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) + if(istype(W, /obj/item/weapon/pickaxe/plasmacutter) || istype(W, /obj/item/weapon/pickaxe/diamonddrill) || istype(W, /obj/item/weapon/melee/energy/blade)) + dismantle(user) + +/obj/structure/falsewall/proc/dismantle(mob/user) + user.visible_message("[user] dismantles the false wall.", "You dismantle the false wall.") + new /obj/structure/girder/displaced(loc) + if(mineral == "metal") + if(istype(src, /obj/structure/falsewall/reinforced)) + new /obj/item/stack/sheet/plasteel(loc) + new /obj/item/stack/sheet/plasteel(loc) else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - if(mineral != "plasma") - T = get_turf(src) - T.attackby(W,user) - del(src) - - //DRILLING - else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - var/turf/T = get_turf(src) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - T = get_turf(src) - T.attackby(W,user) - del(src) - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/turf/T = get_turf(src) - if(!mineral) - T.ChangeTurf(/turf/simulated/wall) - else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) - if(mineral != "plasma") - T = get_turf(src) - T.attackby(W,user) - del(src) - -/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open - ..() - if(density) - icon_state = "[mineral]0" - src.relativewall() + new /obj/item/stack/sheet/metal(loc) + new /obj/item/stack/sheet/metal(loc) else - icon_state = "[mineral]fwall_open" + var/P = text2path("/obj/item/stack/sheet/mineral/[mineral]") + new P(loc) + new P(loc) + playsound(src, 'sound/items/Welder.ogg', 100, 1) + qdel(src) /* * False R-Walls */ -/obj/structure/falserwall +/obj/structure/falsewall/reinforced name = "reinforced wall" desc = "A huge chunk of reinforced metal used to seperate rooms." - icon = 'icons/turf/walls.dmi' icon_state = "r_wall" - density = 1 - opacity = 1 - anchored = 1 - var/mineral = "metal" - var/opening = 0 - canSmoothWith = list( - /turf/simulated/wall, - /obj/structure/falsewall, - /obj/structure/falserwall // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS. - ) -/obj/structure/falserwall/New() - relativewall_neighbours() - ..() - - - -/obj/structure/falserwall/attack_hand(mob/user as mob) - if(opening) - return +/obj/structure/falsewall/reinforced/ChangeToWall(delete = 1) + var/turf/T = get_turf(src) + T.ChangeTurf(/turf/simulated/wall/r_wall) + if(delete) + qdel(src) + return T +/obj/structure/falsewall/reinforced/do_the_flick() if(density) - opening = 1 - // Open wall - icon_state = "frwall_open" flick("frwall_opening", src) - sleep(15) - density = 0 - SetOpacity(0) - opening = 0 else - opening = 1 - icon_state = "r_wall" flick("frwall_closing", src) - density = 1 - sleep(15) - SetOpacity(1) - relativewall() - opening = 0 -/obj/structure/falserwall/relativewall() +/obj/structure/falsewall/reinforced/update_icon(relativewall = 1) + if(density) + icon_state = "rwall0" + src.relativewall() + else + icon_state = "frwall_open" + +/obj/structure/falsewall/reinforced/relativewall() if(!density) icon_state = "frwall_open" return - var/junction=findSmoothingNeighbors() + + var/junction = 0 //will be used to determine from which side the wall is connected to other walls + + for(var/turf/simulated/wall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + if(src.walltype == W.walltype)//Only 'like' walls connect -Sieve + junction |= get_dir(src,W) + for(var/obj/structure/falsewall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + if(src.walltype == W.walltype) + junction |= get_dir(src,W) icon_state = "rwall[junction]" - -/obj/structure/falserwall/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(opening) - user << "\red You must wait until the door has stopped moving." - return - - if(istype(W, /obj/item/weapon/screwdriver)) - var/turf/T = get_turf(src) - user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the wall.") - T.ChangeTurf(/turf/simulated/wall/r_wall) //Why not make rwall? - del(src) - - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - del(src) - - else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - del(src) - - //DRILLING - else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - del(src) - - else if( istype(W, /obj/item/weapon/melee/energy/blade) ) - var/turf/T = get_turf(src) - T.ChangeTurf(/turf/simulated/wall) - T = get_turf(src) - T.attackby(W,user) - del(src) - - + return + /* * Uranium Falsewalls */ @@ -325,6 +262,7 @@ desc = "A wall with uranium plating. This is probably a bad idea." icon_state = "" mineral = "uranium" + walltype = "uranium" var/active = null var/last_event = 0 @@ -357,24 +295,28 @@ desc = "A wall with gold plating. Swag!" icon_state = "" mineral = "gold" + walltype = "gold" /obj/structure/falsewall/silver name = "silver wall" desc = "A wall with silver plating. Shiny." icon_state = "" mineral = "silver" + walltype = "silver" /obj/structure/falsewall/diamond name = "diamond wall" desc = "A wall with diamond plating. You monster." icon_state = "" mineral = "diamond" + walltype = "diamond" /obj/structure/falsewall/plasma name = "plasma wall" desc = "A wall with plasma plating. This is definately a bad idea." icon_state = "" mineral = "plasma" + walltype = "plasma" //-----------wtf?-----------start /obj/structure/falsewall/clown @@ -382,10 +324,12 @@ desc = "A wall with bananium plating. Honk!" icon_state = "" mineral = "clown" + walltype = "clown" /obj/structure/falsewall/sandstone name = "sandstone wall" desc = "A wall with sandstone plating." icon_state = "" mineral = "sandstone" + walltype = "sandstone" //------------wtf?------------end \ No newline at end of file diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 07445c88737..d8e22940639 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -102,7 +102,7 @@ if(!pdiff) S.use(2) user << "\blue You create a false wall! Push on it to open or close the passage." - new /obj/structure/falserwall (src.loc) + new /obj/structure/falsewall/reinforced (src.loc) del(src) else user << "\red There is too much air moving through the gap! The door wouldn't stay closed if you built it." diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm index bcd9fa88a24..e98c839150a 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -1,88 +1,112 @@ -// OKAY I DON'T KNOW WHO THE FUCK ORIGINALLY CODED THIS BUT THEY ARE OFFICIALLY FIRED FOR BEING DRUNK AND STUPID -// FUCK YOU MYSTERY CODERS -// FOR THIS SHIT I'M GOING TO MAKE ALL MY COMMENTS IN CAPS +//Separate dm because it relates to two types of atoms + ease of removal in case it's needed. +//Also assemblies.dm for falsewall checking for this when used. +//I should really make the shuttle wall check run every time it's moved, but centcom uses unsimulated floors so !effort -/atom - var/list/canSmoothWith=list() // TYPE PATHS I CAN SMOOTH WITH~~~~~ +/atom/proc/relativewall() //atom because it should be useable both for walls and false walls + if(istype(src,/turf/simulated/floor/vault)||istype(src,/turf/simulated/wall/vault)) //HACK!!! + return -// MOVED INTO UTILITY FUNCTION FOR LESS DUPLICATED CODE. -/atom/proc/findSmoothingNeighbors() - // THIS IS A BITMAP BECAUSE NORTH/SOUTH/ETC ARE ALL BITFLAGS BECAUSE BYOND IS DUMB AND - // DOESN'T FUCKING MAKE SENSE, BUT IT WORKS TO OUR ADVANTAGE - var/junction = 0 - for(var/cdir in cardinal) - var/turf/T = get_step(src,cdir) - if(isSmoothableNeighbor(T)) - junction |= cdir - continue // NO NEED FOR FURTHER SEARCHING IN THIS TILE - for(var/atom/A in T) - if(isSmoothableNeighbor(A)) - junction |= cdir - break // NO NEED FOR FURTHER SEARCHING IN THIS TILE + var/junction = 0 //will be used to determine from which side the wall is connected to other walls - return junction + if(!istype(src,/turf/simulated/shuttle/wall)) //or else we'd have wacky shuttle merging with walls action + for(var/turf/simulated/wall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + junction |= get_dir(src,W) + for(var/obj/structure/falsewall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + junction |= get_dir(src,W) -/atom/proc/isSmoothableNeighbor(var/atom/A) - return is_type_in_list(A,canSmoothWith) +/* Commenting this out for now until we figure out what to do with shuttle smooth walls, if anything. + As they are now, they sort of work screwy and may need further coding. Or just be scrapped.*/ + /*else + for(var/turf/simulated/shuttle/wall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + junction |= get_dir(src,W) + for(var/obj/machinery/shuttle/W in orange(src,1)) //stuff like engine and propulsion should merge with walls + if(abs(src.x-W.x)-abs(src.y-W.y)) + junction |= get_dir(src,W) + for(var/obj/machinery/door/W in orange(src,1)) //doors should not result in diagonal walls, it just looks ugly. checking if area is shuttle so it won't merge with the station + if((abs(src.x-W.x)-abs(src.y-W.y)) && (istype(W.loc.loc,/area/shuttle) || istype(W.loc.loc,/area/supply))) + junction |= get_dir(src,W) + for(var/obj/structure/grille/W in orange(src,1)) //same for grilles. checking if area is shuttle so it won't merge with the station + if((abs(src.x-W.x)-abs(src.y-W.y)) && (istype(W.loc.loc,/area/shuttle) || istype(W.loc.loc,/area/supply))) + junction |= get_dir(src,W)*/ -/turf/simulated/wall/isSmoothableNeighbor(var/atom/A) - if(is_type_in_list(A,canSmoothWith)) - // COLON OPERATORS ARE TERRIBLE BUT I HAVE NO CHOICE - if(src.mineral == A:mineral) - return 1 - return 0 + if(istype(src,/turf/simulated/wall)) + var/turf/simulated/wall/wall = src + wall.icon_state = "[wall.walltype][junction]" + else if (istype(src,/obj/structure/falsewall)) + if(istype(src,/obj/structure/falsewall/reinforced)) + icon_state = "rwall[junction]" + else + var/obj/structure/falsewall/fwall = src + fwall.icon_state = "[fwall.mineral][junction]" +/* else if(istype(src,/turf/simulated/shuttle/wall)) + var/newicon = icon; + var/newiconstate = icon_state; + if(junction!=5 && junction!=6 && junction!=9 && junction!=10) //if it's not diagonal, all is well, no additional calculations needed + src.icon_state = "swall[junction]" + else //if it's diagonal, we need to figure out if we're using the floor diagonal or the space diagonal sprite + var/is_floor = 0 + for(var/turf/unsimulated/floor/F in orange(src,1)) + if(abs(src.x-F.x)-abs(src.y-F.y)) + if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1 + is_floor = 1 + newicon = F.icon + newiconstate = F.icon_state //we'll save these for later + for(var/turf/simulated/floor/F in orange(src,1)) + if(abs(src.x-F.x)-abs(src.y-F.y)) + if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1 + is_floor = 1 + newicon = F.icon + newiconstate = F.icon_state //we'll save these for later + for(var/turf/simulated/shuttle/floor/F in orange(src,1)) + if(abs(src.x-F.x)-abs(src.y-F.y)) + if((15-junction) & get_dir(src,F)) //if there's a floor in at least one of the empty space directions, return 1 + is_floor = 1 + newicon = F.icon + newiconstate = F.icon_state //we'll save these for later + if(is_floor) //if is_floor = 1, we use the floor diagonal sprite + src.icon = newicon; //we'll set the floor's icon to the floor next to it and overlay the wall segment. shuttle floor sprites have priority + src.icon_state = newiconstate; // + src.overlays += icon('icons/turf/shuttle.dmi',"swall_f[junction]") + else //otherwise, the space one + src.icon_state = "swall_s[junction]"*/ -/** - * WALL SMOOTHING SHIT - * - * IN /ATOM BECAUSE /TURFS ARE /ATOMS AND SO ARE /OBJ/STRUCTURE/FALSEWALLS - * THIS IS STUPID BUT IS FAIRLY ELEGANT FOR BYOND - * - * HOWEVER, INSTEAD OF MAKING ONE BIG GODDAMN MONOLITHIC PROC LIKE A FUCKING - * SHITTY FUNCTIONAL PROGRAMMER, WE WILL BE COOL AND MODERN AND USE INHERITANCE. - */ -/atom/proc/relativewall() - return // DOES JACK SHIT BY DEFAULT. OLD BEHAVIOR WAS TO SPAM LOOPS ANYWAY. + return -/* - * SEE? NOW WE ONLY HAVE TO PROGRAM THIS SHIT INTO WHAT WE WANT TO SMOOTH - * INSTEAD OF BEING DUMB AND HAVING A BIG FUCKING IFTREE WITH TYPECHECKS - * MY GOD, WE COULD EVEN MOVE THE CODE TO BE WITH THE REST OF THE WALL'S CODE! - * HOW FUCKING INNOVATIVE. ISN'T INHERITANCE NICE? - * - * WE COULD STANDARDIZE THIS BUT EVERYONE'S A FUCKING SNOWFLAKE - */ -/turf/simulated/wall/relativewall() - var/junction=findSmoothingNeighbors() - icon_state = "[walltype][junction]" // WHY ISN'T THIS IN UPDATE_ICON OR SIMILAR - -// AND NOW WE HAVE TO YELL AT THE NEIGHBORS FOR BEING LOUD AND NOT PAINTING WITH HOA-APPROVED COLORS -/atom/proc/relativewall_neighbours(var/at=null) - if(!at) - at = get_turf(src) - // OPTIMIZE BY NOT CHECKING FOR NEIGHBORS IF WE DON'T FUCKING SMOOTH - if(canSmoothWith.len>0) - for(var/cdir in cardinal) - var/turf/T = get_step(src,cdir) - if(isSmoothableNeighbor(T)) - T.relativewall() - for(var/atom/A in T) - if(isSmoothableNeighbor(A)) - A.relativewall() +/atom/proc/relativewall_neighbours() + for(var/turf/simulated/wall/W in range(src,1)) + W.relativewall() + for(var/obj/structure/falsewall/W in range(src,1)) + W.relativewall() + W.update_icon()//Refreshes the wall to make sure the icons don't desync + for(var/obj/structure/alien/resin/W in range(src,1)) + W.relativewall() + W.update_icon() + return /turf/simulated/wall/New() relativewall_neighbours() ..() -/turf/simulated/wall/Destroy() +/*/turf/simulated/shuttle/wall/New() - var/temploc = src.loc + spawn(20) //testing if this will make /obj/machinery/shuttle and /door count - It does, it stays. + if(src.icon_state in list("wall1", "wall", "diagonalWall", "wall_floor", "wall_space")) //so wizard den, syndie shuttle etc will remain black + for(var/turf/simulated/shuttle/wall/W in range(src,1)) + W.relativewall() - if(!del_suppress_resmoothing) - spawn(10) - relativewall_neighbours(at=temploc) + ..()*/ + +/turf/simulated/wall/Del() + spawn(10) + for(var/turf/simulated/wall/W in range(src,1)) + W.relativewall() + + for(var/obj/structure/falsewall/W in range(src,1)) + W.relativewall() - // JESUS WHY for(var/direction in cardinal) for(var/obj/effect/glowshroom/shroom in get_step(src,direction)) if(!shroom.floor) //shrooms drop to the floor @@ -90,15 +114,27 @@ shroom.icon_state = "glowshroomf" shroom.pixel_x = 0 shroom.pixel_y = 0 - ..() -// DE-HACK -/turf/simulated/wall/vault/relativewall() +/turf/simulated/wall/relativewall() + if(istype(src,/turf/simulated/wall/vault)) //HACK!!! + return + + var/junction = 0 //will be used to determine from which side the wall is connected to other walls + + for(var/turf/simulated/wall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve + junction |= get_dir(src,W) + for(var/obj/structure/falsewall/W in orange(src,1)) + if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls + if(src.mineral == W.mineral) + junction |= get_dir(src,W) + var/turf/simulated/wall/wall = src + wall.icon_state = "[wall.walltype][junction]" return -//Xeno wall smoothing /obj/structure/alien/resin/relativewall() var/junction = 0 //will be used to determine from which side the wall is connected to other walls diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index e7006c1d3fe..7913d60c52e 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -24,11 +24,6 @@ var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through. var/engraving, engraving_quality //engraving on the wall var/del_suppress_resmoothing = 0 // Do not resmooth neighbors on Destroy. (smoothwall.dm) - canSmoothWith = list( - /turf/simulated/wall, - /obj/structure/falsewall, - /obj/structure/falserwall // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS. - ) /turf/simulated/wall/Del() for(var/obj/effect/E in src) if(E.name == "Wallrot") del E