From b19e1785dc352e1f7d152d569346ef0847528ea4 Mon Sep 17 00:00:00 2001 From: Matthew J <12817816+ZephyrTFA@users.noreply.github.com> Date: Tue, 27 Jul 2021 04:43:17 -0400 Subject: [PATCH] [FUCK][NO CI] Rust Component Fixes (#60252) Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- _maps/map_files/KiloStation/KiloStation.dmm | 12 +++++------ code/datums/components/rust.dm | 13 ++++++------ code/game/turfs/open/floor/iron_floor.dm | 3 ++- code/game/turfs/open/floor/misc_floor.dm | 9 +++++++-- .../eldritch_cult/knowledge/rust_lore.dm | 19 +++++++++--------- .../revenant/revenant_abilities.dm | 8 ++++---- .../living/simple_animal/eldritch_demons.dm | 2 +- icons/effects/rust_overlay.dmi | Bin 0 -> 3185 bytes icons/turf/walls/wall.dmi | Bin 9585 -> 2871 bytes 9 files changed, 35 insertions(+), 31 deletions(-) create mode 100644 icons/effects/rust_overlay.dmi diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index a07cb542e91..ad4ad4341ee 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -42015,7 +42015,7 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, -/turf/open/floor/plating/rust/plasma, +/turf/open/floor/plating/plasma/rust, /area/maintenance/space_hut/plasmaman) "dyu" = ( /obj/structure/flora/grass/jungle{ @@ -69101,7 +69101,7 @@ "pqf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/purple/filled/line, -/turf/open/floor/plating/rust/plasma, +/turf/open/floor/plating/plasma/rust, /area/maintenance/space_hut/plasmaman) "pqg" = ( /obj/effect/turf_decal/tile/neutral{ @@ -72095,7 +72095,7 @@ /obj/item/toy/plush/plasmamanplushie{ name = "Lithium II" }, -/turf/open/floor/plating/rust/plasma, +/turf/open/floor/plating/plasma/rust, /area/maintenance/space_hut/plasmaman) "qCn" = ( /obj/effect/turf_decal/tile/neutral{ @@ -83661,7 +83661,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/turf/open/floor/plating/rust/plasma, +/turf/open/floor/plating/plasma/rust, /area/maintenance/space_hut/plasmaman) "vzr" = ( /obj/effect/turf_decal/stripes/line{ @@ -85185,7 +85185,7 @@ }, /obj/effect/turf_decal/trimline/purple/filled/corner, /obj/item/flashlight/lamp, -/turf/open/floor/plating/rust/plasma, +/turf/open/floor/plating/plasma/rust, /area/maintenance/space_hut/plasmaman) "wje" = ( /obj/structure/table/glass, @@ -89394,7 +89394,7 @@ /obj/item/toy/plush/plasmamanplushie{ name = "Dianion XV" }, -/turf/open/floor/plating/rust/plasma, +/turf/open/floor/plating/plasma/rust, /area/maintenance/space_hut/plasmaman) "xUW" = ( /obj/effect/turf_decal/tile/neutral{ diff --git a/code/datums/components/rust.dm b/code/datums/components/rust.dm index 92833de3d80..54fe02ae807 100644 --- a/code/datums/components/rust.dm +++ b/code/datums/components/rust.dm @@ -1,6 +1,6 @@ /** * Adding this component to an Atom will have it automatically render an overlay. - * The overlay can be specified in new as the first and only parameter; it defaults to "rust" if not included. + * The overlay can be specified in new as the first paramter; if not set it defaults to rust_overlay's rust_default */ /datum/component/rust dupe_mode = COMPONENT_DUPE_UNIQUE @@ -19,22 +19,21 @@ var/atom/wall_new = new /turf/open/floor/plating(src) wall_new.AddComponent(/datum/component/rust) -/datum/component/rust/Initialize(rust_iconstate = "rust") +/datum/component/rust/Initialize(mutable_appearance/overlay) . = ..() if(!isatom(parent)) return COMPONENT_INCOMPATIBLE + rust_overlay = overlay || mutable_appearance('icons/effects/rust_overlay.dmi', "rust_default") + // Unfortunately registering with parent sometimes doesn't cause an overlay update + ADD_TRAIT(parent, TRAIT_RUSTY, src) var/atom/parent_atom = parent - if(!(rust_iconstate in icon_states(parent_atom.icon))) - return COMPONENT_INCOMPATIBLE - - rust_overlay = mutable_appearance(parent_atom.icon, rust_iconstate) + parent_atom.update_icon(UPDATE_OVERLAYS) /datum/component/rust/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_rust_overlay) RegisterSignal(parent, list(COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_WELDER), COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_RUSTSCRAPER)), .proc/secondary_tool_act) RegisterSignal(parent, COMSIG_PARENT_PREQDELETED, .proc/parent_del) RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/handle_examine) - ADD_TRAIT(parent, TRAIT_RUSTY, src) /datum/component/rust/UnregisterFromParent() UnregisterSignal(parent,\ diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm index 2d208217ec2..f430fe48186 100644 --- a/code/game/turfs/open/floor/iron_floor.dm +++ b/code/game/turfs/open/floor/iron_floor.dm @@ -17,7 +17,8 @@ /turf/open/floor/iron/rust_heretic_act() if(prob(70)) new /obj/effect/temp_visual/glowing_rune(src) - ChangeTurf(/turf/open/floor/plating) + var/atom/changed_turf = ChangeTurf(/turf/open/floor/plating) + changed_turf.AddComponent(/datum/component/rust) return ..() diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm index 692550c8590..eaeb50000a4 100644 --- a/code/game/turfs/open/floor/misc_floor.dm +++ b/code/game/turfs/open/floor/misc_floor.dm @@ -204,8 +204,13 @@ desc = "Corrupted steel." icon_state = "plating_rust" -/turf/open/floor/plating/rust/plasma - initial_gas_mix = "plasma=104;TEMP=293.15" +/turf/open/floor/plating/plasma + initial_gas_mix = ATMOS_TANK_PLASMA +/turf/open/floor/plating/plasma/rust/Initialize(mapload) + . = ..() + // Because this is a fluff turf explicitly for KiloStation it doesn't make sense to ChangeTurf like usual + // Especially since it looks like we don't even change the default icon/iconstate??? + AddComponent(/datum/component/rust) /turf/open/floor/stone name = "stone brick floor" diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 63ef9d195fb..b3b7dbd59c2 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -21,7 +21,6 @@ /turf/open/space, /turf/open/lava, /turf/open/chasm, - /turf/open/floor/plating/rust )) route = PATH_RUST @@ -68,7 +67,7 @@ next_knowledge = list( /datum/eldritch_knowledge/rust_mark, /datum/eldritch_knowledge/armor, - /datum/eldritch_knowledge/essence + /datum/eldritch_knowledge/essence, ) route = PATH_RUST @@ -79,16 +78,15 @@ /datum/eldritch_knowledge/rust_regen/proc/on_move(mob/mover) SIGNAL_HANDLER - if(istype(get_turf(mover),/turf/open/floor/plating/rust)) + var/atom/mover_turf = get_turf(mover) + if(HAS_TRAIT(mover_turf, TRAIT_RUSTY)) ADD_TRAIT(mover,TRAIT_STUNRESISTANCE,type) - else - REMOVE_TRAIT(mover,TRAIT_STUNRESISTANCE,type) + return + + REMOVE_TRAIT(mover,TRAIT_STUNRESISTANCE,type) /datum/eldritch_knowledge/rust_regen/on_life(mob/user) . = ..() - var/turf/user_loc_turf = get_turf(user) - if(!istype(user_loc_turf, /turf/open/floor/plating/rust) || !isliving(user)) - return var/mob/living/living_user = user living_user.adjustBruteLoss(-2, FALSE) living_user.adjustFireLoss(-2, FALSE) @@ -178,7 +176,8 @@ /datum/eldritch_knowledge/final/rust_final/proc/on_move(mob/mover) SIGNAL_HANDLER - var/mover_on_rust = istype(get_turf(mover),/turf/open/floor/plating/rust) + var/atom/mover_turf = get_turf(mover) + var/mover_on_rust = HAS_TRAIT(mover_turf, TRAIT_RUSTY) //We check if we are currently standing on a rust tile, but the immunities are not active, if so apply immunities, set immunities_active to TRUE if(mover_on_rust && !immunities_active) @@ -197,7 +196,7 @@ /datum/eldritch_knowledge/final/rust_final/on_life(mob/user) . = ..() var/turf/user_loc_turf = get_turf(user) - if(!istype(user_loc_turf, /turf/open/floor/plating/rust) || !isliving(user) || !finished) + if(!HAS_TRAIT(user_loc_turf, TRAIT_RUSTY) || !isliving(user) || !finished) return var/mob/living/carbon/human/human_user = user human_user.adjustBruteLoss(-4, FALSE) diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index 94d2e9491c0..13b77f00038 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -262,12 +262,12 @@ floor.broken = 0 floor.burnt = 0 floor.make_plating(TRUE) - if(T.type == /turf/closed/wall && prob(15)) + if(T.type == /turf/closed/wall && prob(15) && !HAS_TRAIT(T, TRAIT_RUSTY)) new /obj/effect/temp_visual/revenant(T) - T.ChangeTurf(/turf/closed/wall/rust) - if(T.type == /turf/closed/wall/r_wall && prob(10)) + T.AddComponent(/datum/component/rust) + if(T.type == /turf/closed/wall/r_wall && prob(10) && !HAS_TRAIT(T, TRAIT_RUSTY)) new /obj/effect/temp_visual/revenant(T) - T.ChangeTurf(/turf/closed/wall/r_wall/rust) + T.AddComponent(/datum/component/rust) for(var/obj/effect/decal/cleanable/food/salt/salt in T) new /obj/effect/temp_visual/revenant(T) qdel(salt) diff --git a/code/modules/mob/living/simple_animal/eldritch_demons.dm b/code/modules/mob/living/simple_animal/eldritch_demons.dm index 53ccecb9d46..b140b6d24ed 100644 --- a/code/modules/mob/living/simple_animal/eldritch_demons.dm +++ b/code/modules/mob/living/simple_animal/eldritch_demons.dm @@ -332,7 +332,7 @@ if(stat == DEAD) return ..() var/turf/T = get_turf(src) - if(istype(T,/turf/open/floor/plating/rust)) + if(HAS_TRAIT(T, TRAIT_RUSTY)) adjustBruteLoss(-1.5 * delta_time, FALSE) adjustFireLoss(-1.5 * delta_time, FALSE) return ..() diff --git a/icons/effects/rust_overlay.dmi b/icons/effects/rust_overlay.dmi new file mode 100644 index 0000000000000000000000000000000000000000..02f745d07fef2f89a71908b5e5e5606d7f03df4c GIT binary patch literal 3185 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 XxhEcN%Y%QF3SgjPto>2bDenIO)uN`x