From a8d4f82cfb5e1b8c5336abc01845cf836e4eedd8 Mon Sep 17 00:00:00 2001 From: Will <7099514+Willburd@users.noreply.github.com> Date: Tue, 10 Jun 2025 22:52:27 -0400 Subject: [PATCH] Adds the funny fences (#17840) --- code/game/objects/structures/fence.dm | 17 +++++ .../game/objects/structures/fence_electric.dm | 66 ++++++++++++++++++ icons/obj/fence_electric.dmi | Bin 0 -> 7609 bytes vorestation.dme | 1 + 4 files changed, 84 insertions(+) create mode 100644 code/game/objects/structures/fence_electric.dm create mode 100644 icons/obj/fence_electric.dmi diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index 5a201200402..8180e59dbd7 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -22,6 +22,7 @@ var/cuttable = TRUE var/hole_size= NO_HOLE var/invulnerable = FALSE + var/electric = FALSE /obj/structure/fence/Initialize(mapload) update_cut_status() @@ -68,8 +69,17 @@ return TRUE return ..() +/obj/structure/fence/attack_hand(mob/user) + if(electric && isliving(user) && !user.is_incorporeal()) + if(electrocute(user)) + return + . = ..() + /obj/structure/fence/attackby(obj/item/W, mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(electric && isliving(user) && !user.is_incorporeal() && !(W.flags & NOCONDUCT)) + if(electrocute(user)) + return if(W.has_tool_quality(TOOL_WIRECUTTER)) if(!cuttable) to_chat(user, span_warning("This section of the fence can't be cut.")) @@ -100,6 +110,13 @@ update_cut_status() return TRUE +/obj/structure/fence/Bumped(AM) + . = ..() + if(electric && isliving(AM)) + var/mob/living/L = AM + if(!L.is_incorporeal()) + electrocute(L) + /obj/structure/fence/proc/update_cut_status() if(!cuttable) return diff --git a/code/game/objects/structures/fence_electric.dm b/code/game/objects/structures/fence_electric.dm new file mode 100644 index 00000000000..3d27f1c0723 --- /dev/null +++ b/code/game/objects/structures/fence_electric.dm @@ -0,0 +1,66 @@ +#define NAME_ELECFENCE "electric fence" +#define DESC_ELECFENCE "A chain link fence attached to a nearby area power controller. Zap zap!" +#define ICON_ELECFENCE 'icons/obj/fence_electric.dmi' + +// Required to be in an area with a powered APC to electrocute! Intended for POIs. +/obj/structure/fence/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/electric_sign + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + icon_state = "straight_sign" + +/obj/structure/fence/door/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/end/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/corner/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/post/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/cut/medium/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/cut/large/electric + name = NAME_ELECFENCE + desc = DESC_ELECFENCE + icon = ICON_ELECFENCE + electric = TRUE + +/obj/structure/fence/proc/electrocute(mob/living/M) + if(electrocute_mob(M, get_area(src), src, 0.7)) + visible_message("\The [src] zaps [M]!") + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + return TRUE + return FALSE + +#undef NAME_ELECFENCE +#undef DESC_ELECFENCE +#undef ICON_ELECFENCE diff --git a/icons/obj/fence_electric.dmi b/icons/obj/fence_electric.dmi new file mode 100644 index 0000000000000000000000000000000000000000..369eb209ecc90afd78c4ad4a8a18487f15c741eb GIT binary patch literal 7609 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 literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index ef43d6e089a..e67a2d8ee47 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1706,6 +1706,7 @@ #include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\fence.dm" +#include "code\game\objects\structures\fence_electric.dm" #include "code\game\objects\structures\fireaxe.dm" #include "code\game\objects\structures\fitness.dm" #include "code\game\objects\structures\fitness_vr.dm"