diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index b5993e8c8ba..dce0d06c113 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1539,6 +1539,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait that signals to objects on this turf that its open (has UNDERFLOOR_INTERACTIBLE) but still covers them #define TRAIT_UNCOVERED_TURF "uncovered_turf" +/// A trait that blocks the metabolism of formaldehyde +#define TRAIT_BLOCK_FORMALDEHYDE_METABOLISM "block_formaldehyde_metabolism" + ///Attached to objects currently on tables and such, allowing them to walk on other objects without the climbing delay #define TRAIT_ON_CLIMBABLE "on_climbable" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 16f28002588..75d60c41e21 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -194,6 +194,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BIRTHDAY_BOY" = TRAIT_BIRTHDAY_BOY, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, "TRAIT_BLOCKING_PROJECTILES" = TRAIT_BLOCKING_PROJECTILES, + "TRAIT_BLOCK_FORMALDEHYDE_METABOLISM" = TRAIT_BLOCK_FORMALDEHYDE_METABOLISM, "TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT, "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, "TRAIT_BLOODY_MESS" = TRAIT_BLOODY_MESS, diff --git a/code/datums/components/ghostrole_on_revive.dm b/code/datums/components/ghostrole_on_revive.dm index af8892d3e40..8eb118d335c 100644 --- a/code/datums/components/ghostrole_on_revive.dm +++ b/code/datums/components/ghostrole_on_revive.dm @@ -81,6 +81,10 @@ soul_eyes = new /datum/bodypart_overlay/simple/soul_pending_eyes() head.add_bodypart_overlay(soul_eyes) + // So during the potentially short period of time we're revived, we don't metabolize formaldehyde + // Really just a QOL for coroners, so we dont suddenly start decaying + ADD_TRAIT(aliver, TRAIT_BLOCK_FORMALDEHYDE_METABOLISM, type) + var/mob/dead/observer/chosen_one = SSpolling.poll_ghosts_for_target( question = "Would you like to play as a recovered crewmember?", role = null, @@ -91,6 +95,9 @@ alert_pic = aliver, role_name_text = "recovered crew", ) + + REMOVE_TRAIT(aliver, TRAIT_BLOCK_FORMALDEHYDE_METABOLISM, type) + if(head) head.remove_bodypart_overlay(soul_eyes) diff --git a/code/modules/lost_crew/character/_assignment.dm b/code/modules/lost_crew/character/_assignment.dm index 8471d9d0aa4..456ddfc3be8 100644 --- a/code/modules/lost_crew/character/_assignment.dm +++ b/code/modules/lost_crew/character/_assignment.dm @@ -3,19 +3,23 @@ /// Message we send to the player upon revival concerning their job var/job_lore /// Gear to give to the crewie in a special locked box - var/list/job_stuffs + var/list/protected_job_stuffs + /// Gear that arrives with the crewie in the crate + var/list/recovered_job_stuffs /// Trim on the ID we give to the revived person (no trim = no id) var/datum/id_trim/trim /// Job datum to apply to the human var/datum/job/job_datum -/datum/corpse_assignment/proc/apply_assignment(mob/living/carbon/human/working_dead, list/job_gear, list/datum/callback/on_revive_and_player_occupancy) - if(!job_gear) +/datum/corpse_assignment/proc/apply_assignment(mob/living/carbon/human/working_dead, list/protected_job_gear, list/recovered_job_gear, list/datum/callback/on_revive_and_player_occupancy) + if(!protected_job_gear && !recovered_job_gear && !trim) return - for(var/item in job_stuffs) - job_gear += new item () - job_gear += job_stuffs + for(var/item in protected_job_stuffs) + protected_job_gear += new item () + + for(var/item in recovered_job_stuffs) + recovered_job_gear += new item () if(job_datum) on_revive_and_player_occupancy += CALLBACK(src, PROC_REF(assign_job), working_dead) //this needs to happen once the body has been successfully occupied and revived @@ -25,14 +29,15 @@ card.registered_name = working_dead.name card.registered_age = working_dead.age SSid_access.apply_trim_to_card(card, trim) - job_gear += card + protected_job_gear += card /datum/corpse_assignment/proc/assign_job(mob/living/carbon/human/working_undead) working_undead.mind.set_assigned_role_with_greeting(new job_datum (), working_undead.client) /datum/corpse_assignment/engineer job_lore = "I was employed as an engineer" - job_stuffs = list(/obj/item/clothing/under/rank/engineering/engineer) + protected_job_stuffs = list(/obj/item/radio/headset/headset_eng) + recovered_job_stuffs = list(/obj/item/clothing/under/rank/engineering/engineer) trim = /datum/id_trim/job/visiting_engineer job_datum = /datum/job/recovered_crew/engineer @@ -50,7 +55,8 @@ /datum/corpse_assignment/medical job_lore = "I was employed as a doctor" - job_stuffs = list(/obj/item/clothing/under/rank/medical/doctor) + protected_job_stuffs = list(/obj/item/radio/headset/headset_med) + recovered_job_stuffs = list(/obj/item/clothing/under/rank/medical/doctor) trim = /datum/id_trim/job/visiting_doctor job_datum = /datum/job/recovered_crew/doctor @@ -67,7 +73,8 @@ /datum/corpse_assignment/security job_lore = "I was employed as security" - job_stuffs = list(/obj/item/clothing/under/rank/security/officer) + protected_job_stuffs = list(/obj/item/radio/headset/headset_sec) + recovered_job_stuffs = list(/obj/item/clothing/under/rank/security/officer) trim = /datum/id_trim/job/visiting_security job_datum = /datum/job/recovered_crew/security @@ -90,7 +97,8 @@ /datum/corpse_assignment/science job_lore = "I was employed as a scientist" - job_stuffs = list(/obj/item/clothing/under/rank/rnd/scientist) + protected_job_stuffs = list(/obj/item/radio/headset/headset_sci) + recovered_job_stuffs = list(/obj/item/clothing/under/rank/rnd/scientist) trim = /datum/id_trim/job/visiting_scientist job_datum = /datum/job/recovered_crew/scientist @@ -107,7 +115,8 @@ /datum/corpse_assignment/cargo job_lore = "I was employed as a technician" - job_stuffs = list(/obj/item/clothing/under/rank/cargo/tech) + protected_job_stuffs = list(/obj/item/radio/headset/headset_cargo) + recovered_job_stuffs = list(/obj/item/clothing/under/rank/cargo/tech) trim = /datum/id_trim/job/visiting_technician job_datum = /datum/job/recovered_crew/cargo @@ -124,7 +133,8 @@ /datum/corpse_assignment/civillian job_lore = "I was employed as a civllian" - job_stuffs = list(/obj/item/clothing/under/color/grey) + protected_job_stuffs = list(/obj/item/radio/headset) + recovered_job_stuffs = list(/obj/item/clothing/under/color/grey) trim = /datum/id_trim/job/visiting_civillian job_datum = /datum/job/recovered_crew/civillian diff --git a/code/modules/lost_crew/damages/_damages.dm b/code/modules/lost_crew/damages/_damages.dm index 6bf0088265f..8478e51ec71 100644 --- a/code/modules/lost_crew/damages/_damages.dm +++ b/code/modules/lost_crew/damages/_damages.dm @@ -37,7 +37,7 @@ var/datum/corpse_assignment/assignment = pick_weight(possible_character_assignments) if(ispath(assignment)) assignment = new assignment() - assignment.apply_assignment(fashion_corpse, protected_objects, on_revive_and_player_occupancy) + assignment.apply_assignment(fashion_corpse, protected_objects, recovered_items, on_revive_and_player_occupancy) body_data += assignment.type var/datum/corpse_flavor/flavor = pick_weight(possible_flavor_types) diff --git a/code/modules/lost_crew/lost_crew_manager.dm b/code/modules/lost_crew/lost_crew_manager.dm index 79efd7a62d2..22dc887393a 100644 --- a/code/modules/lost_crew/lost_crew_manager.dm +++ b/code/modules/lost_crew/lost_crew_manager.dm @@ -8,7 +8,7 @@ GLOBAL_DATUM_INIT(lost_crew_manager, /datum/lost_crew_manager, new) /// How long after successful revival we check to see if theyre still alive, and give rewards var/succes_check_time = 3 MINUTES /// How much the revived crew start with on their cards - var/starting_funds = 100 + var/starting_funds = 200 /** * Creates a body with random background and injuries diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index d5c06ee07af..94dcfe27877 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -713,11 +713,17 @@ if(affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) //it counteracts its own toxin damage. return UPDATE_MOB_HEALTH return - else if(SPT_PROB(2.5, seconds_per_tick)) + else if(SPT_PROB(2.5, seconds_per_tick) && !HAS_TRAIT(affected_mob, TRAIT_BLOCK_FORMALDEHYDE_METABOLISM)) holder.add_reagent(/datum/reagent/toxin/histamine, pick(5,15)) holder.remove_reagent(/datum/reagent/toxin/formaldehyde, 1.2) return ..() +/datum/reagent/toxin/formaldehyde/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(HAS_TRAIT(affected_mob, TRAIT_BLOCK_FORMALDEHYDE_METABOLISM)) + return + + return ..() + /datum/reagent/toxin/venom name = "Venom" description = "An exotic poison extracted from highly toxic fauna. Causes scaling amounts of toxin damage and bruising depending and dosage. Often decays into Histamine."