From 809cd63eb8dc9338064e5d93b5eb297b2a90908a Mon Sep 17 00:00:00 2001 From: Kano <89972582+kano-dot@users.noreply.github.com> Date: Sun, 7 Jun 2026 13:19:15 +0300 Subject: [PATCH] Fixes blend overlays (#22644) ## About PR Fixes a function that was used to allow some objects to smooth with directional modifiers, seemingly removed a long time ago in a large optimisation pr Currently only the windows, window frames and grilles use this ## Images
Before

Screenshot_44

After

Screenshot_43

--- code/__HELPERS/icon_smoothing.dm | 53 +++++++++++++++--- code/_globalvars/lists/mapping.dm | 12 ++++ html/changelogs/kano-dot-blend.yml | 4 ++ icons/obj/smooth/window/full_window.dmi | Bin 3665 -> 4207 bytes .../smooth/window/full_window_frame_color.dmi | Bin 1712 -> 1756 bytes icons/obj/smooth/window/grille_over.dmi | Bin 1491 -> 835 bytes 6 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 html/changelogs/kano-dot-blend.yml diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index d40e4f19849..9d001ba9f93 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -274,7 +274,7 @@ /** * Blend atoms */ -/atom/proc/handle_blending(adjacencies, var/list/dir_mods) +/atom/proc/handle_blending(adjacencies, list/dir_mods) SHOULD_NOT_SLEEP(TRUE) LAZYINITLIST(dir_mods) @@ -282,10 +282,10 @@ var/walls_found = 0 for(var/adjacency in list(N_NORTH, N_EAST, N_SOUTH, N_WEST)) if(adjacencies & adjacency) - var/turf/T = get_step(src, REVERSE_DIR(adjacency)) + var/turf/T = get_step(src, GLOB.ndir_to_dir[adjacency]) // get_step() expects byond native directions, so we convert N_* bitfields if(is_type_in_list(T, can_blend_with)) if(attach_overlay) - AddOverlays("[REVERSE_DIR(adjacency)]_[attach_overlay]") + AddOverlays("[GLOB.ndir_to_dir[adjacency]]_[attach_overlay]") walls_found |= adjacency dir_mods["[adjacency]"] = "-[blend_overlay]" for(var/adjacency in list(N_NORTH, N_SOUTH)) @@ -297,7 +297,7 @@ var/has_adjacency = walls_found & adjacency var/has_diagonal = walls_found & diagonal - if(((adjacencies & adjacency) && (adjacencies && diagonal)) && (has_adjacency || has_diagonal)) + if(((adjacencies & adjacency) && (adjacencies & diagonal)) && (has_adjacency || has_diagonal)) dir_mods["[adjacency][diagonal]"] = "-[prefix][has_adjacency ? "wall" : "win"]-[suffix][has_diagonal ? "wall" : "win"]" if(attach_overlay) AddOverlays("[prefix][suffix]_[attach_overlay]") @@ -305,10 +305,15 @@ #undef ndir_to_initial -/atom/proc/cardinal_smooth(adjacencies) +/atom/proc/cardinal_smooth(adjacencies, list/dir_mods) SHOULD_NOT_SLEEP(TRUE) + /** + * Below here we evaluate an object by their 4 corners and tell them how they're supposed to smooth depending on its adjacencies. + * The adjacencies we care about is the things that the atom can smooth with, determined in 'calculate_adjacencies()'. + * Think this as mapping an icon, every 16x16 corner counts. + */ - //NW CORNER + // NW CORNER var/nw = "1-i" if((adjacencies & N_NORTH) && (adjacencies & N_WEST)) if(adjacencies & N_NORTHWEST) @@ -321,7 +326,7 @@ else if(adjacencies & N_WEST) nw = "1-w" - //NE CORNER + // NE CORNER var/ne = "2-i" if((adjacencies & N_NORTH) && (adjacencies & N_EAST)) if(adjacencies & N_NORTHEAST) @@ -334,7 +339,7 @@ else if(adjacencies & N_EAST) ne = "2-e" - //SW CORNER + // SW CORNER var/sw = "3-i" if((adjacencies & N_SOUTH) && (adjacencies & N_WEST)) if(adjacencies & N_SOUTHWEST) @@ -347,7 +352,7 @@ else if(adjacencies & N_WEST) sw = "3-w" - //SE CORNER + // SE CORNER var/se = "4-i" if((adjacencies & N_SOUTH) && (adjacencies & N_EAST)) if(adjacencies & N_SOUTHEAST) @@ -360,6 +365,36 @@ else if(adjacencies & N_EAST) se = "4-e" + /** + * Here we handle blend overlays. This is an extra step if we want our icons to take account whatever is defined in their 'can_blend_with' list + * and apply a different smooth overlay for them. An example to this is windows, they'll smooth regularly among themselves but if there's + * a wall next to them they'll apply a junction part. See 'handle_blending()' for blending direction modifiers (dir_mods). + */ + if(length(dir_mods)) + + nw += LAZYACCESS(dir_mods, "[N_NORTH][N_WEST][N_NORTHWEST]") \ + || LAZYACCESS(dir_mods, "[N_NORTH][N_WEST]") \ + || LAZYACCESS(dir_mods, "[N_NORTH]") \ + || LAZYACCESS(dir_mods, "[N_WEST]") + + ne += LAZYACCESS(dir_mods, "[N_NORTH][N_EAST][N_NORTHEAST]") \ + || LAZYACCESS(dir_mods, "[N_NORTH][N_EAST]") \ + || LAZYACCESS(dir_mods, "[N_NORTH]") \ + || LAZYACCESS(dir_mods, "[N_EAST]") + + sw += LAZYACCESS(dir_mods, "[N_SOUTH][N_WEST][N_SOUTHWEST]") \ + || LAZYACCESS(dir_mods, "[N_SOUTH][N_WEST]") \ + || LAZYACCESS(dir_mods, "[N_SOUTH]") \ + || LAZYACCESS(dir_mods, "[N_WEST]") + + se += LAZYACCESS(dir_mods, "[N_SOUTH][N_EAST][N_SOUTHEAST]") \ + || LAZYACCESS(dir_mods, "[N_SOUTH][N_EAST]") \ + || LAZYACCESS(dir_mods, "[N_SOUTH]") \ + || LAZYACCESS(dir_mods, "[N_EAST]") + + /** + * Here we apply all the 4 corners we calculated and clean the cached corners. + */ var/list/New var/list/Old var/cut_f = smoothing_hints & SMOOTHHINT_CUT_F diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 7a406477291..a130b776b1c 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -93,6 +93,18 @@ GLOBAL_LIST_INIT(alldirs, list( SOUTHWEST, )) +/// Used in N_* directions (defined in \code\_DEFINES\icon_smoothing.dm) to Byond native conversions +GLOBAL_LIST_INIT(ndir_to_dir, alist( + N_NORTH = NORTH, + N_SOUTH = SOUTH, + N_EAST = EAST, + N_WEST = WEST, + N_NORTHEAST = NORTHEAST, + N_NORTHWEST = NORTHWEST, + N_SOUTHEAST = SOUTHEAST, + N_SOUTHWEST = SOUTHWEST +)) + /// Just a list of all the area objects in the game /// Note, areas can have duplicate types GLOBAL_LIST_EMPTY(areas) diff --git a/html/changelogs/kano-dot-blend.yml b/html/changelogs/kano-dot-blend.yml new file mode 100644 index 00000000000..eecec494897 --- /dev/null +++ b/html/changelogs/kano-dot-blend.yml @@ -0,0 +1,4 @@ +author: Kano +delete-after: True +changes: + - bugfix: "Fixed windows and grilles not applying the proper smooth overlays they're supposed to have." diff --git a/icons/obj/smooth/window/full_window.dmi b/icons/obj/smooth/window/full_window.dmi index fd18f81ac8eac9553fbcc9825b59265b7f53f8d9..1643a30f94a415285b4f5023f8f941223e1185ae 100644 GIT binary patch literal 4207 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 literal 3665 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 diff --git a/icons/obj/smooth/window/grille_over.dmi b/icons/obj/smooth/window/grille_over.dmi index 13964268633ba62b463409a516827a2a9e2b6376..c5822ce2e21fa7001433843ecde5a8060b179cf1 100644 GIT binary patch literal 835 zcmV-J1HAl+P) zQeP@BH>f(!WB>pF0d!JMQvg8b*k%9#0Qq`USad{Xb7OL8aCB*JZU6vyoRyV93WG2Z zMc3vOLDwnOWZO-t6c_alf};kkLK2$mcdSrwl`jNIU6EAcnvWe_Cg?-^e7l^0%=gcm0IlVau@{~?l0#g~g#w`o#)HrgK4Ov0{8j##}6O&X|j3&ZDx?^5|xxBgU?->Rhd< zI#+8l&p~7ibaLZ6BgW?{MPnkw_*|uEd`{HP_~wk8gl9j`EIj*pX5ksZM>iW^hmn`m z!?BWjI9BGUoe{{-9F_JKwl3|TY+c$v*}6GuXLQBLMmHOCX_$#L%xo0t=Q+pdh*7h7 zQ7QIWD#bo~Qq<1av}RlN5!oI(XD9}z7$j@0>?9r|LD*KLA z{6CI+$7+t+87sz@WaRso{Tjo}_b>akMN>*+eu&MKjG{(Ei_FJLh}9_nhav?>W!=ywCStii!*c z5%vfG0Ko7t>|T8q>Vstt*Wb~uM`QF!LfL;H6?-h@=$V95sR_v>0LUoKzZr;VMOg(8 zQV`(-40}0wpLK+tXp`~xopf)OHJgyYI;bOsI8;3ACT=NjJyD9)Ijkh?s%pKG=f&L_ zSIpqt3P~@WVKn&1;C83f-8G|tIeQuEZy36(6-HvBp(%f$l3f!e%Yu+B(fG_%e zx0#nc@pGZ8%BaG(@|elFsjEd_&Q-I6VLRZ@-86yc{bFs`-@EAZh`zT>0vrYIcbo6j zTAIFi=p|+md0YA=cMFJjtDPHSZ?7sgE}2S+f#!_ev$gC^U0LEPXfn;RTvD6I;9h|$(Jg~VvR1}5bAmw;bDI6cW$!@2NWOMXEzp)yGj(H1 z_Ga#T|8~YS`%KrVDoyfJL|cYMeCEx^PLPm}#E^hjOX3Cc7(8k_ zBm}DQH|of5;9s1AJqLkiLyHW!JOLMPtBUypszG9U8?#*?jPKAm&zp_JNMrz|10024 zoPgh!0jl_Gn?2ah;d;h~lZtOvSYT;eFV@N5@-aWH6(5kB&hR&ITBe>>n2CQ}gdmbg z4L9d5htvj0`73f@Y@pQf<2>Ov-K5Tm`UlKrLQe zOUxO$qgttHG_v(*(upQFG0O!^Bw)Z^n(%i?HTcso*C8Y&uS&@dK?~%H^&#rQ#kH4{ z%JllRMa%GBLOzvB4ZY3DMhZcC02%`PXx^(UJR=8*247j>=r3U2kz)>OLY4{s+;<%= zN%TDf@0X2LvVq8$_TJ#Wn5z9Kf|*`adXJuh2t?sXfLo5*6hYe><*Tr$YIg{ruBtmH zQmG0-mPeNHj$@S73{sbVho=5$99J{Ud4^{)72 zB@(@cQJS>0G9#LVi^V5&vx>jh7=GH4!yChPDXh3XG|sf317w*~J;fUq!N6XEhc+%p zh0G}@;2Mp7;Qg1V(W$x;$5Q3!Or><+5MWMo6y-W{s(D)SWYhcq>jspx#bwm@6}D&iK(j z=>mBi-iVp*=d|Ro(h~oDJjWedJ|Xf(BTuofw+9;)U&dr`Eg6-um