diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index c91f3417d0d..e890d290c7c 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1079,6 +1079,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/storage/box/syndie_kit/safecracking cost = 1 +/datum/uplink_item/stealthy_tools/fakedeathpills + name = "Fake Death Pill Bottle" + desc = "A regular pill bottle containing three fake death pills. Swallow, then rest on the floor to appear dead to people, medical huds, and health analysers. \ + Stand up to wake up. Each pill lets you lay dead for four to five minutes, can be cumulated. Side effects include : Silencing, loss of limbs and/or head once security declares you a changeling." + reference = "FDP" + item = /obj/item/storage/pill_bottle/fakedeath + cost = 1 + /datum/uplink_item/stealthy_tools/clownkit name = "Honk Brand Infiltration Kit" desc = "All the tools you need to play the best prank Nanotrasen has ever seen. Includes a voice changer clown mask, magnetic clown shoes, and standard clown outfit, tools, and backpack." diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index d3b08100319..a4c25350e5f 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -243,6 +243,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" var/changeling_speak = 0 var/datum/dna/chosen_dna var/obj/effect/proc_holder/changeling/sting/chosen_sting + var/regenerating = FALSE /datum/changeling/New(gender=FEMALE) ..() diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index a07670647c3..19cbbbdc3bd 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -20,7 +20,8 @@ user.med_hud_set_health() user.handle_hud_icons_health() user.med_hud_set_status() - + user.mind.changeling.regenerating = TRUE + addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME) feedback_add_details("changeling_powers","FD") return 1 diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 147fdd2d327..83f221a95d3 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -55,6 +55,7 @@ user.updatehealth("revive sting") user.update_blind_effects() user.update_blurry_effects() + user.mind.changeling.regenerating = FALSE to_chat(user, "We have regenerated.") diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 048396e4eed..3d535e89eb0 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -152,7 +152,8 @@ /obj/item/toy/cards/deck/syndicate = 2, /obj/item/storage/secure/briefcase/syndie = 2, /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 2, - "" = 70 + /obj/item/storage/pill_bottle/fakedeath = 2, + "" = 68 ) /obj/effect/spawner/lootdrop/crate_spawner // for ruins diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 8f72b7c9e04..da2d1ed3f34 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -284,3 +284,9 @@ To apply, hold the injector a short distance away from the outer thigh before ap new /obj/item/clothing/mask/balaclava(src) new /obj/item/clothing/accessory/stethoscope(src) new /obj/item/book/manual/engineering_hacking(src) + +/obj/item/storage/pill_bottle/fakedeath/New() + ..() + new /obj/item/reagent_containers/food/pill/fakedeath(src) + new /obj/item/reagent_containers/food/pill/fakedeath(src) + new /obj/item/reagent_containers/food/pill/fakedeath(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index fd376b8022c..bc276b05b00 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -315,7 +315,7 @@ /datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(attacker_style && attacker_style.help_act(user, target))//adminfu only... return TRUE - if(target.health >= config.health_threshold_crit) + if(target.health >= config.health_threshold_crit && !(target.status_flags & FAKEDEATH)) target.help_shake_act(user) return TRUE else diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 2ae74f4a91f..7e76217fe15 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -155,3 +155,32 @@ if(prob(5)) to_chat(M, "You would DIE for some [name] right now!") return update_flags + +/datum/reagent/proc/fakedeath(mob/living/M) + if(M.status_flags & FAKEDEATH) + return + if(!(M.status_flags & CANPARALYSE)) + return + if(M.mind && M.mind.changeling && M.mind.changeling.regenerating) //no messing with changeling's fake death + return + M.visible_message("[M] seizes up and falls limp, [M.p_their()] eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary. + M.status_flags |= FAKEDEATH + M.update_stat("fakedeath reagent") + M.med_hud_set_health() + M.med_hud_set_status() + +/datum/reagent/proc/fakerevive(mob/living/M) + if(!(M.status_flags & FAKEDEATH)) + return + if(M.mind && M.mind.changeling && M.mind.changeling.regenerating) + return + if(M.resting) + M.StopResting() + M.status_flags &= ~(FAKEDEATH) + M.update_stat("fakedeath reagent end") + M.med_hud_set_status() + M.med_hud_set_health() + if(M.healthdoll) + M.healthdoll.cached_healthdoll_overlays.Cut() + if(M.dna.species) + M.dna.species.handle_hud_icons(M) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 4bc534c6d8b..d4de3d368a2 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -1037,7 +1037,7 @@ /datum/reagent/capulettium name = "Capulettium" id = "capulettium" - description = "A rare drug that causes the user to appear dead for some time." + description = "A rare drug that causes the user to fall unconscious and appear dead as long as it's in the body." reagent_state = LIQUID color = "#60A584" heart_rate_stop = 1 @@ -1046,23 +1046,21 @@ /datum/reagent/capulettium/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE switch(current_cycle) - if(1 to 5) + if(1 to 10) update_flags |= M.AdjustEyeBlurry(10, FALSE) - if(6 to 10) - M.Drowsy(10) if(11) - update_flags |= M.Paralyse(10, FALSE) - M.visible_message("[M] seizes up and falls limp, [M.p_their()] eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary. - if(12 to 60) - update_flags |= M.Paralyse(10, FALSE) - if(61 to INFINITY) - update_flags |= M.AdjustEyeBlurry(10, FALSE) + fakedeath(M) return ..() | update_flags +/datum/reagent/capulettium/on_mob_delete(mob/living/M) + if(M.status_flags & FAKEDEATH) + fakerevive(M) + ..() + /datum/reagent/capulettium_plus name = "Capulettium Plus" id = "capulettium_plus" - description = "A rare and expensive drug that causes the user to appear dead for some time while they retain consciousness and vision." + description = "A rare and expensive drug that will silence the user and let him appear dead as long as it's in the body. Rest to play dead, stand up to wake up." reagent_state = LIQUID color = "#60A584" heart_rate_stop = 1 @@ -1070,8 +1068,17 @@ /datum/reagent/capulettium_plus/on_mob_life(mob/living/M) M.Silence(2) + if((M.status_flags & FAKEDEATH) && !M.resting) + fakerevive(M) + else if(!(M.status_flags & FAKEDEATH) && M.resting) + fakedeath(M) return ..() +/datum/reagent/capulettium_plus/on_mob_delete(mob/living/M) + if(M.status_flags & FAKEDEATH) + fakerevive(M) + ..() + /datum/reagent/toxic_slurry name = "Toxic Slurry" id = "toxic_slurry" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 432dad36e6b..71b0532650b 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -63,6 +63,12 @@ icon_state = "pill21" list_reagents = list("initropidril" = 50) +/obj/item/reagent_containers/food/pill/fakedeath + name = "fake death pill" + desc = "Swallow then rest to appear dead, stand up to wake up. Also mutes the user's voice." + icon_state = "pill4" + list_reagents = list("capulettium_plus" = 50) + /obj/item/reagent_containers/food/pill/adminordrazine name = "Adminordrazine pill" desc = "It's magic. We don't have to explain it."