From eb9da97b7da54f9bdce32aa29ec972f469625ed2 Mon Sep 17 00:00:00 2001 From: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> Date: Fri, 27 Oct 2023 23:39:13 -0400 Subject: [PATCH] Adds support to the wet_floor component to avoid displaying its overlay, makes ice turfs no longer receive said wet overlay (#79275) ## About The Pull Request The title says it all, really. I always thought ice looked a bit silly, and always wondered why. Today, I found out it was because of the `wet_floor` component adding an overlay that suddenly made a turf that should look continuous, tiled, which in turn gave some very ugly visuals. Ice already looks slippery, you can tell that it's ice, and the overlay that was added to it just didn't really help telegraph that any better than the sprite itself already does. That's why I added support to make it so it would be possible to force the overlay to just not be applied to the turf that's affected by the component, to make it all look a bit better overall. I added it to the ice turfs as a proof of concept, although I guess it could also be used on other turfs that are always "wet", like the bananium floors, but I didn't really care enough to touch that yet, and I guess the bananium floors can use it a bit better than ice did. I did notice in this PR that the smoothing of ice seemed to potentially be broken, but that's something to look into at a later time. ## Why It's Good For The Game Look at this ice and how much smoother it looks like now: ![image](https://github.com/tgstation/tgstation/assets/58045821/6fc85239-e8f1-404b-bc0e-6e1fca7f7753) ## Changelog :cl: GoldenAlpharex code: Added support to the wet_floor component to make it so the wet overlay could not be applied to certain turfs if desired. fix: Ice turfs no longer look tiled, and instead look smooth when placed next to one-another. /:cl: --- code/datums/components/wet_floor.dm | 29 ++++++++++++++++++++++------- code/game/turfs/open/_open.dm | 4 ++-- code/game/turfs/open/ice.dm | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 0b3b92fd2e3..d1f5b0fb1b8 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -11,8 +11,11 @@ var/current_overlay var/permanent = FALSE var/last_process = 0 + /// Should we display an overlay for this component? Useful mainly for turfs + /// that already look wets or just don't need the visuals for any other reason. + var/should_display_overlay = TRUE -/datum/component/wet_floor/InheritComponent(datum/newcomp, orig, strength, duration_minimum, duration_add, duration_maximum, _permanent) +/datum/component/wet_floor/InheritComponent(datum/newcomp, orig, strength, duration_minimum, duration_add, duration_maximum, _permanent, _should_display_overlay) if(!newcomp) //We are getting passed the arguments of a would-be new component, but not a new component add_wet(arglist(args.Copy(3))) else //We are being passed in a full blown component @@ -22,10 +25,11 @@ for(var/i in WF.time_left_list) add_wet(text2num(i), WF.time_left_list[i]) -/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, _permanent = FALSE) +/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, _permanent = FALSE, _should_display_overlay = TRUE) if(!isopenturf(parent)) return COMPONENT_INCOMPATIBLE - add_wet(strength, duration_minimum, duration_add, duration_maximum) + should_display_overlay = _should_display_overlay + add_wet(strength, duration_minimum, duration_add, duration_maximum, _permanent, _should_display_overlay) permanent = _permanent if(!permanent) START_PROCESSING(SSwet_floors, src) @@ -50,6 +54,15 @@ return ..() /datum/component/wet_floor/proc/update_overlay() + if(!should_display_overlay) + if(!current_overlay) + return + + var/turf/parent_turf = parent + parent_turf.cut_overlay(current_overlay) + current_overlay = null + return + var/intended if(!isfloorturf(parent)) intended = generic_turf_overlay @@ -62,9 +75,9 @@ else intended = water_overlay if(current_overlay != intended) - var/turf/T = parent - T.cut_overlay(current_overlay) - T.add_overlay(intended) + var/turf/parent_turf = parent + parent_turf.cut_overlay(current_overlay) + parent_turf.add_overlay(intended) current_overlay = intended /datum/component/wet_floor/proc/AfterSlip(mob/living/slipped) @@ -163,7 +176,7 @@ //NB it's possible we get deleted after this, due to inherit -/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE) +/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE, _should_display_overlay = TRUE) var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST, TURF_WET_SUPERLUBE) if(duration_minimum <= 0 || !type) return FALSE @@ -179,6 +192,8 @@ permanent = TRUE STOP_PROCESSING(SSwet_floors, src) + should_display_overlay = _should_display_overlay + /datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum) var/time = 0 if(LAZYACCESS(time_left_list, "[type]")) diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 3e3560eafa7..6a62f7e0227 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -329,8 +329,8 @@ slipper.AddComponent(/datum/component/force_move, target, FALSE)//spinning would be bad for ice, fucks up the next dir return TRUE -/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0, max_wet_time = MAXIMUM_WET_TIME, permanent) - AddComponent(/datum/component/wet_floor, wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) +/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0, max_wet_time = MAXIMUM_WET_TIME, permanent = FALSE, should_display_overlay = TRUE) + AddComponent(/datum/component/wet_floor, wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent, should_display_overlay) /turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER, immediate = FALSE, amount = INFINITY) SEND_SIGNAL(src, COMSIG_TURF_MAKE_DRY, wet_setting, immediate, amount) diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm index 96bf1baac09..3f951684e86 100644 --- a/code/game/turfs/open/ice.dm +++ b/code/game/turfs/open/ice.dm @@ -17,7 +17,7 @@ /turf/open/misc/ice/Initialize(mapload) . = ..() - MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE) + MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE, FALSE) /turf/open/misc/ice/break_tile() return