Files
The Sharkening 4a5104e4a0 Turns janitor borgs into walking crew operated vacuum cleaners. (#96724)
## About The Pull Request
Allows people to detach a cleaner and vacuum (uses the trash bag) from
janitor borgs. This option uses zero water management and doesn't create
slip tiles.

The module can be locked with alt click.

<img width="342" height="681" alt="image"
src="https://github.com/user-attachments/assets/0fe53f8b-d850-4354-aa70-382ca40dcd37"
/>

<img width="590" height="581" alt="image"
src="https://github.com/user-attachments/assets/70fea653-ad20-479a-8986-fed0e15af4b1"
/>


https://github.com/user-attachments/assets/ff81a214-1bfb-4a33-a660-ccb563e310af

Sounds are from soundsnap and properly licenced.
https://soundsnap.zendesk.com/hc/en-us/articles/115003916431-Legal


## Why It's Good For The Game

I think co-op mechanics are fun. If you manage to get a friend, this is
an option with zero water management. I feel like janitor borgs don't
really have much the way to cooperate with their base mechanics. You can
walk into a department and clean it wordlessly. This gives the option
where you can clean with your friend (or the crime scene you're trying
to scrub)

## Changelog
🆑 StrangeWeirdKitten, Toriate (sprites)
add: Janitor borgs now have a crew operated end that allows their
squishy overlords to do some cleaning themselves.
/🆑
2026-07-12 10:50:41 -06:00

64 lines
2.6 KiB
Plaintext

///Status effect applied when casting a fishing rod at someone, provided the attached fishing hook allows it.
/datum/status_effect/grouped/hooked
id = "hooked"
duration = STATUS_EFFECT_PERMANENT
tick_interval = STATUS_EFFECT_NO_TICK
status_type = STATUS_EFFECT_MULTIPLE
alert_type = /atom/movable/screen/alert/status_effect/hooked
/datum/status_effect/grouped/hooked/proc/try_unhook()
return do_after(owner, 2 SECONDS, timed_action_flags = IGNORE_USER_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(still_exists)), interaction_key = DOAFTER_SOURCE_REMOVING_HOOK)
/datum/status_effect/grouped/hooked/proc/still_exists()
return !QDELETED(src)
/datum/status_effect/grouped/hooked/source_added(datum/beam/held/source)
RegisterSignal(source, COMSIG_QDELETING, PROC_REF(on_fishing_line_deleted))
/datum/status_effect/grouped/hooked/proc/on_fishing_line_deleted(datum/source)
SIGNAL_HANDLER
owner.remove_status_effect(type, source)
/atom/movable/screen/alert/status_effect/hooked
name = "Snagged By Hook"
desc = "You're being caught like a fish by some asshat! Click to safely remove the hook or move away far enough to snap it off."
use_user_hud_icon = USER_HUD_STYLE_INHERIT
overlay_state = "hooked"
clickable_glow = TRUE
/atom/movable/screen/alert/status_effect/hooked/Click()
. = ..()
if(!.)
return
if(!owner.can_resist())
return
owner.balloon_alert(owner, "removing hook...")
var/datum/status_effect/grouped/hooked/effect = owner.has_status_effect(attached_effect.type)
if(!effect.try_unhook())
return
owner.balloon_alert(owner, "hook removed")
var/datum/beam/held/rand_source = pick(effect.sources)
qdel(rand_source)
///Version used by the jawed fishing hook, which also applies slowdown
/datum/status_effect/grouped/hooked/jaws
id = "hooked_jaws"
alert_type = /atom/movable/screen/alert/status_effect/hooked/jaws
/datum/status_effect/grouped/hooked/jaws/on_apply()
. = ..()
owner.add_movespeed_modifier(/datum/movespeed_modifier/hook_jawed)
/datum/status_effect/grouped/hooked/jaws/on_remove()
. = ..()
owner.remove_movespeed_modifier(/datum/movespeed_modifier/hook_jawed)
/datum/status_effect/grouped/hooked/jaws/try_unhook()
return do_after(owner, 10 SECONDS, extra_checks = CALLBACK(src, PROC_REF(still_exists)), interaction_key = DOAFTER_SOURCE_REMOVING_HOOK)
/atom/movable/screen/alert/status_effect/hooked/jaws
name = "Snagged By Jaws"
desc = "You've been snagged by some sort of beartrap-slash-fishing-hook-gizmo! Click to safely remove the hook or move away far enough to snap it off."
use_user_hud_icon = USER_HUD_STYLE_INHERIT
overlay_state = "hooked_jaws"