From 504f5e036313106c6c05d4eaac25e1502515d8b4 Mon Sep 17 00:00:00 2001
From: GDN <96800819+GDNgit@users.noreply.github.com>
Date: Sun, 10 Mar 2024 15:11:25 -0500
Subject: [PATCH] fixes some weird stuff with rejuv pods (#24374)
---
.../stool_bed_chair_nest/alien_nests.dm | 30 ++++++++++++++-----
1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
index 0c3dd3edabc..c66fd4871a4 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
@@ -47,9 +47,12 @@
add_fingerprint(user)
/obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/living/user)
- if(!istype(M) || (get_dist(src, user) > 1) || (M.loc != loc) || user.incapacitated() || M.buckled)
+ if(!istype(M) || user.incapacitated() || M.buckled)
return
+ if(M != user && !HAS_TRAIT(M, TRAIT_HANDS_BLOCKED) && (!in_range(M, src) || !do_after(user, 1 SECONDS, target = M)))
+ return FALSE
+
if(M.get_int_organ(/obj/item/organ/internal/alien/hivenode))
to_chat(user, "[M]'s linkage with the hive prevents you from securing them into [src]")
return
@@ -121,7 +124,11 @@
comfort = 0
flags = NODECONSTRUCT
var/processing_ticks = 0
- var/revive_or_decay_timer
+ var/revive_timer
+
+/obj/structure/bed/revival_nest/Initialize(mapload)
+ . = ..()
+ nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer = MOB_LAYER - 0.2)
/obj/structure/bed/revival_nest/user_unbuckle_mob(mob/living/buckled_mob, mob/user)
for(var/mob/living/M in buckled_mobs) //breaking a nest releases all the buckled mobs, because the nest isn't holding them down anymore
@@ -129,9 +136,16 @@
unbuckle_mob(M)
add_fingerprint(user)
+/obj/structure/bed/revival_nest/post_buckle_mob(mob/living/M)
+ M.layer = BELOW_MOB_LAYER
+ add_overlay(nest_overlay)
+
/obj/structure/bed/revival_nest/post_unbuckle_mob(mob/living/M)
+ M.layer = initial(M.layer)
+ cut_overlay(nest_overlay)
STOP_PROCESSING(SSobj, src)
- deltimer(revive_or_decay_timer)
+ deltimer(revive_timer)
+ revive_timer = null
/obj/structure/bed/revival_nest/process()
for(var/mob/living/buckled_mob in buckled_mobs)
@@ -150,9 +164,8 @@
if(virus.stage > 1 && processing_ticks >= 4)
virus.stage--
processing_ticks = 0
- if(buckled_mob.stat == DEAD && !revive_or_decay_timer && isalien(buckled_mob))
- revive_or_decay_timer = addtimer(CALLBACK(src, PROC_REF(revive_dead_alien), buckled_mob), 40 SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE)
-
+ if(buckled_mob.stat == DEAD && !revive_timer && isalien(buckled_mob))
+ revive_timer = addtimer(CALLBACK(src, PROC_REF(revive_dead_alien), buckled_mob), 40 SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE)
/obj/structure/bed/revival_nest/proc/revive_dead_alien(mob/living/carbon/alien/dead_alien)
dead_alien.revive()
@@ -180,9 +193,12 @@
SEND_SOUND(dead_alien, sound('sound/voice/hiss5.ogg'))
/obj/structure/bed/revival_nest/user_buckle_mob(mob/living/M, mob/living/user)
- if(!istype(M) || (get_dist(src, user) > 1) || (M.loc != loc) || user.incapacitated() || M.buckled)
+ if(!istype(M) || user.incapacitated() || M.buckled)
return
+ if(M != user && !HAS_TRAIT(M, TRAIT_HANDS_BLOCKED) && (!in_range(M, src) || !do_after(user, 1 SECONDS, target = M)))
+ return FALSE
+
if(!user.get_int_organ(/obj/item/organ/internal/alien/hivenode))
to_chat(user, "Your lack of linkage to the hive prevents you from buckling [M] into [src].")
return