From e634c802bbf6dc9f81a5a2bbbfc3d56f32156ece Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 16 Jan 2023 14:30:11 +0800 Subject: [PATCH 1/5] better dirt persistence --- .../objects/effects/decals/Cleanable/misc.dm | 6 +++--- code/modules/persistence/effects/filth.dm | 1 + code/modules/persistence/effects/filth_vr.dm | 21 +++++++++++++++++++ code/modules/persistence/effects/trash.dm | 1 + vorestation.dme | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 code/modules/persistence/effects/filth_vr.dm diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index cf26c6463d3..b1a521d45da 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -38,11 +38,11 @@ icon_state = "dirt" mouse_opacity = 0 -/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age) +/obj/effect/decal/cleanable/dirt/Initialize(var/mapload, var/_age, var/dirt) .=..() var/turf/simulated/our_turf = src.loc - if(our_turf && istype(our_turf) && our_turf.can_dirty && _age) - our_turf.dirt = 101 + if(dirt && our_turf && istype(our_turf) && our_turf.can_dirty) + our_turf.dirt = dirt /obj/effect/decal/cleanable/flour name = "flour" diff --git a/code/modules/persistence/effects/filth.dm b/code/modules/persistence/effects/filth.dm index 166c374c02c..0b2a34109b4 100644 --- a/code/modules/persistence/effects/filth.dm +++ b/code/modules/persistence/effects/filth.dm @@ -1,6 +1,7 @@ /datum/persistent/filth name = "filth" entries_expire_at = 4 // 4 rounds, 24 hours. + var/saves_dirt = TRUE //VOREStation edit /datum/persistent/filth/IsValidEntry(var/atom/entry) . = ..() && entry.invisibility == 0 diff --git a/code/modules/persistence/effects/filth_vr.dm b/code/modules/persistence/effects/filth_vr.dm new file mode 100644 index 00000000000..7c50e78889e --- /dev/null +++ b/code/modules/persistence/effects/filth_vr.dm @@ -0,0 +1,21 @@ +/datum/persistent/filth/CheckTokenSanity(var/list/token) + . = ..() + return saves_dirt ? . && isnum(token["dirt"]) : . + +/datum/persistent/filth/CreateEntryInstance(var/turf/creating, var/list/token) + var/_path = token["path"] + if (saves_dirt) + new _path(creating, token["age"]+1, token["dirt"]) + else + new _path(creating, token["age"]+1) + +/datum/persistent/filth/proc/GetEntryDirt(var/atom/entry) + var/turf/simulated/T = get_turf(entry) + if (istype(T)) + return T.dirt + return 0 + +/datum/persistent/filth/CompileEntry(var/atom/entry) + . = ..() + if (saves_dirt) + LAZYADDASSOC(., "dirt", GetEntryDirt(entry)) \ No newline at end of file diff --git a/code/modules/persistence/effects/trash.dm b/code/modules/persistence/effects/trash.dm index 3eaa121711c..628c1d421f9 100644 --- a/code/modules/persistence/effects/trash.dm +++ b/code/modules/persistence/effects/trash.dm @@ -1,5 +1,6 @@ /datum/persistent/filth/trash name = "trash" + saves_dirt = FALSE //VOREStation edit /datum/persistent/filth/trash/CheckTurfContents(var/turf/T, var/list/tokens) var/too_much_trash = 0 diff --git a/vorestation.dme b/vorestation.dme index 20c55d9cfcb..25c33c591c0 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3456,6 +3456,7 @@ #include "code\modules\persistence\serialize.dm" #include "code\modules\persistence\datum\persistence_datum.dm" #include "code\modules\persistence\effects\filth.dm" +#include "code\modules\persistence\effects\filth_vr.dm" #include "code\modules\persistence\effects\graffiti.dm" #include "code\modules\persistence\effects\paper.dm" #include "code\modules\persistence\effects\paper_sticky.dm" From eacb52abf24c67293c9ad5eb0a50948993c98d13 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 16 Jan 2023 14:52:56 +0800 Subject: [PATCH 2/5] undoes part of that last commit --- code/game/objects/effects/decals/Cleanable/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index b1a521d45da..ac854c90ab8 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -38,7 +38,7 @@ icon_state = "dirt" mouse_opacity = 0 -/obj/effect/decal/cleanable/dirt/Initialize(var/mapload, var/_age, var/dirt) +/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age, var/dirt) .=..() var/turf/simulated/our_turf = src.loc if(dirt && our_turf && istype(our_turf) && our_turf.can_dirty) From 9f039abe7e9200f35f424ec947ced4e363608500 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 16 Jan 2023 16:57:48 +0800 Subject: [PATCH 3/5] even better dirt code --- code/game/objects/effects/decals/Cleanable/misc.dm | 12 +++++++++--- code/modules/persistence/effects/filth_vr.dm | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index ac854c90ab8..cc23136aba1 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -38,11 +38,17 @@ icon_state = "dirt" mouse_opacity = 0 -/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age, var/dirt) +/obj/effect/decal/cleanable/dirt/Initialize(var/mapload, var/_age, var/dirt) .=..() var/turf/simulated/our_turf = src.loc - if(dirt && our_turf && istype(our_turf) && our_turf.can_dirty) - our_turf.dirt = dirt + if(our_turf && istype(our_turf) && our_turf.can_dirty) + our_turf.dirt = clamp(max(age ? (dirt ? dirt : 101) : our_turf.dirt, our_turf.dirt), 0, 101) + var/calcalpha = our_turf.dirt > 50 ? min((our_turf.dirt - 50) * 5, 255) : 0 + var/obj/effect/decal/cleanable/dirt/alreadythere = locate(/obj/effect/decal/cleanable/dirt, our_turf) + if (alreadythere) + alreadythere.alpha = calcalpha + return INITIALIZE_HINT_QDEL + alpha = calcalpha /obj/effect/decal/cleanable/flour name = "flour" diff --git a/code/modules/persistence/effects/filth_vr.dm b/code/modules/persistence/effects/filth_vr.dm index 7c50e78889e..deea9cb877e 100644 --- a/code/modules/persistence/effects/filth_vr.dm +++ b/code/modules/persistence/effects/filth_vr.dm @@ -18,4 +18,4 @@ /datum/persistent/filth/CompileEntry(var/atom/entry) . = ..() if (saves_dirt) - LAZYADDASSOC(., "dirt", GetEntryDirt(entry)) \ No newline at end of file + LAZYADDASSOC(., "dirt", GetEntryDirt(entry)) From 20aa3c29d6ddf1971a92a074ac4deca31570f466 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 16 Jan 2023 18:20:01 +0800 Subject: [PATCH 4/5] almost made a terrible mistake with dirt --- code/game/objects/effects/decals/Cleanable/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index cc23136aba1..cfe0f282106 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -45,7 +45,7 @@ our_turf.dirt = clamp(max(age ? (dirt ? dirt : 101) : our_turf.dirt, our_turf.dirt), 0, 101) var/calcalpha = our_turf.dirt > 50 ? min((our_turf.dirt - 50) * 5, 255) : 0 var/obj/effect/decal/cleanable/dirt/alreadythere = locate(/obj/effect/decal/cleanable/dirt, our_turf) - if (alreadythere) + if (alreadythere && alreadythere != src) alreadythere.alpha = calcalpha return INITIALIZE_HINT_QDEL alpha = calcalpha From 5df1af50094ba149ae42a2fe6c70c10bc165372e Mon Sep 17 00:00:00 2001 From: Seris02 Date: Tue, 17 Jan 2023 15:02:28 +0800 Subject: [PATCH 5/5] very nice dirt code --- code/game/objects/effects/decals/Cleanable/misc.dm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index cfe0f282106..55cdcfa4ff6 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -44,9 +44,16 @@ if(our_turf && istype(our_turf) && our_turf.can_dirty) our_turf.dirt = clamp(max(age ? (dirt ? dirt : 101) : our_turf.dirt, our_turf.dirt), 0, 101) var/calcalpha = our_turf.dirt > 50 ? min((our_turf.dirt - 50) * 5, 255) : 0 - var/obj/effect/decal/cleanable/dirt/alreadythere = locate(/obj/effect/decal/cleanable/dirt, our_turf) - if (alreadythere && alreadythere != src) - alreadythere.alpha = calcalpha + var/alreadyfound = FALSE + for (var/obj/effect/decal/cleanable/dirt/alreadythere in our_turf) //in case of multiple + if (alreadythere == src) + continue + else if (alreadyfound) + qdel(alreadythere) + continue + alreadyfound = TRUE + alreadythere.alpha = calcalpha //don't need to constantly recalc for all of them in it because it'll just max if a non-persistent dirt overlay gets added, and then the new dirt overlay will be deleted + if (alreadyfound) return INITIALIZE_HINT_QDEL alpha = calcalpha