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