diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index 5f40397a284..fde725234fc 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -457,6 +457,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) cost *= 3 +/datum/uplink_item/explosives/targrenade + name = "Sticky Tar Grenade" + desc = "A grenade filled with aerosols and sticky tar. \ + Will release a plume of smoke that applies tar to a wide area, severely slowing down movement. Makes for the ultimate getaway!" + reference = "TARG" + item = /obj/item/grenade/chem_grenade/tar + cost = 7 + //////////////////////////////////////// // MARK: STEALTHY TOOLS //////////////////////////////////////// @@ -639,6 +647,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/organ_extractor cost = 20 +/datum/uplink_item/device_tools/tar_spray + name = "Sticky Tar Applicator" + desc = "A spray bottle containing an extremely viscous fluid that will leave behind tar whenever it is sprayed, greatly slowing down anyone who tries to walk over it. \ + Comes with 10 uses worth of fluid and cannot be refilled." + reference = "TAR" + item = /obj/item/reagent_containers/spray/sticky_tar + cost = 10 + /datum/uplink_item/device_tools/binary name = "Binary Translator Key" desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary. To talk on the binary channel, type :+ before your radio message." diff --git a/code/game/objects/effects/decals/Cleanable/tar.dm b/code/game/objects/effects/decals/Cleanable/tar.dm new file mode 100644 index 00000000000..3b6092c7a01 --- /dev/null +++ b/code/game/objects/effects/decals/Cleanable/tar.dm @@ -0,0 +1,43 @@ +/obj/effect/decal/cleanable/tar + gender = PLURAL + name = "tar" + desc = "A sticky substance." + icon_state = "tar2" + /// The turf that the tar is sitting on + var/turf/simulated/target + +/obj/effect/decal/cleanable/tar/Initialize(mapload) + . = ..() + if(issimulatedturf(loc)) // Ensure the location is a simulated turf + target = loc + target.slowdown += 10 // Apply the slowdown effect to the turf + if(prob(50)) + icon_state = "tar3" + +/obj/effect/decal/cleanable/tar/Destroy() + if(target) + target.slowdown -= 10 + return ..() + +/obj/effect/decal/cleanable/tar/Moved(atom/OldLoc, Dir, Forced) + . = ..() + target.slowdown -= 10 + target = loc + target.slowdown += 10 + if(!issimulatedturf(target)) // We remove slowdown in Destroy(), so we run this check after adding the slowdown. + qdel(src) + +/obj/effect/decal/cleanable/tar/Crossed(atom/movable/movable_atom) + if(isliving(movable_atom)) + var/mob/living/L = movable_atom + playsound(L, 'sound/effects/attackblob.ogg', 50, TRUE) + to_chat(L, "[src] sticks to you!") + +/obj/effect/decal/cleanable/tar/attackby(obj/item/welder, mob/living/user, params) + if(!welder.get_heat() || !Adjacent(user)) + return + playsound(welder, 'sound/items/welder.ogg', 50, TRUE) + if(do_after(user, 3 SECONDS, FALSE, user)) + if(welder.get_heat() && Adjacent(user)) + user.visible_message("[user] burns away [src] with [welder]!", "You burn away [src]!") + qdel(src) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 247102435c2..c45251ed875 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -168,6 +168,7 @@ /obj/item/clothing/suit/jacket/bomber/syndicate = 5, /obj/item/clothing/suit/storage/iaa/blackjacket/armored = 2, // More armored than bomber and has pockets, so it is rarer /obj/item/melee/knuckleduster/syndie = 2, + /obj/item/reagent_containers/spray/sticky_tar = 1, "" = 61 // This should be a decently high number for chances where no loot will spawn ) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 445546f20a1..26388307a7d 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -592,6 +592,24 @@ beakers += B2 update_icon(UPDATE_ICON_STATE) +/obj/item/grenade/chem_grenade/tar + payload_name = "sticky tar" + desc = "For spreading sticky tar. Become the anti-janitor!" + stage = READY + +/obj/item/grenade/chem_grenade/tar/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/beaker_1 = new(src) + var/obj/item/reagent_containers/glass/beaker/beaker_2 = new(src) + + beaker_1.reagents.add_reagent("sticky_tar", 15) + beaker_1.reagents.add_reagent("potassium", 10) + beaker_2.reagents.add_reagent("phosphorus", 10) + beaker_2.reagents.add_reagent("sugar", 10) + beakers += beaker_1 + beakers += beaker_2 + update_icon(UPDATE_ICON_STATE) + #undef EMPTY #undef WIRED #undef READY diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index a03f07be8b0..6ca1d16e3fd 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -232,6 +232,11 @@ desc = "For when you need to do something between everything and nothing." payload = /obj/item/grenade/iedcasing +/obj/item/grenade/clusterbuster/tar + name = "\improper Sticky Tar Cluster Grenade" + desc = "Speed limit enforced by goop." + payload = /obj/item/grenade/chem_grenade/tar + ////////////Clusterbuster of Clusterbusters//////////// //As a note: be extrodinarily careful about make the payload clusterbusters as it can quickly destroy the MC/Server diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 26901273263..1988a1a8e19 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -461,3 +461,20 @@ reagent_state = LIQUID color = "#29262b" taste_description = "burnt dirt" + +/datum/reagent/tar_compound + name = "Sticky tar" + id = "sticky_tar" + description = "A sticky compound that creates tar on contact with surfaces." + reagent_state = LIQUID + color = "#4B4B4B" + harmless = FALSE + taste_description = "processed sludge" + +/datum/reagent/tar_compound/reaction_turf(turf/simulated/T, volume) + if(volume < 1 || !issimulatedturf(T)) + return + var/obj/effect/decal/cleanable/tar/C = locate() in T + if(C) // We don't want the slowdown to stack + return + new /obj/effect/decal/cleanable/tar(T) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index be196f847af..0c276897980 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -37,6 +37,10 @@ to_chat(user, "[src] is full.") return + if(!is_open_container()) + to_chat(user, "[src] cannot be refilled.") + return + var/trans = A.reagents.trans_to(src, 50) //This is a static amount, otherwise, it'll take forever to fill. to_chat(user, "You fill [src] with [trans] units of the contents of [A].") return @@ -281,3 +285,18 @@ belt_icon = null volume = 100 list_reagents = list("glyphosate" = 100) + +/// Sticky tar spray +/obj/item/reagent_containers/spray/sticky_tar + name = "sticky tar applicator" + desc = "A suspicious looking spraycan filled with an extremely viscous and sticky fluid." + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' + icon_state = "syndie_spraycan" + item_state = "syndie_spraycan" + container_type = AMOUNT_VISIBLE + spray_maxrange = 2 + spray_currentrange = 2 + amount_per_transfer_from_this = 10 + list_reagents = list("sticky_tar" = 100) + diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 1581440b4fe..3bfa99bbd58 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/inhands/equipment/custodial_lefthand.dmi b/icons/mob/inhands/equipment/custodial_lefthand.dmi index c4f2e189a21..848a3471f8c 100644 Binary files a/icons/mob/inhands/equipment/custodial_lefthand.dmi and b/icons/mob/inhands/equipment/custodial_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/custodial_righthand.dmi b/icons/mob/inhands/equipment/custodial_righthand.dmi index 4db565e94ba..3295fd2f7f3 100644 Binary files a/icons/mob/inhands/equipment/custodial_righthand.dmi and b/icons/mob/inhands/equipment/custodial_righthand.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 2c77473d2d5..45378aedb65 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/paradise.dme b/paradise.dme index f79ae27cc6f..c5aa5234cd7 100644 --- a/paradise.dme +++ b/paradise.dme @@ -970,6 +970,7 @@ #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc_cleanables.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" +#include "code\game\objects\effects\decals\Cleanable\tar.dm" #include "code\game\objects\effects\decals\Cleanable\tracks.dm" #include "code\game\objects\effects\decals\turfdecals\dirt.dm" #include "code\game\objects\effects\decals\turfdecals\markings.dm"