Three Recovered Crew QoL's (#91983)

Three quality of life additions for recovered crew:
1. Jumpsuits are spawned in the crate, and no longer in the lockbox
2. Formaldehyde will no longer metabolize during the "soul pending" fase
so you don't have to constantly re-up them with it
3. Gives them 200cr starting money instead of 100. Also get a headset in
their lockbox now

## Why It's Good For The Game
1. This lets the reviver know what job they can expect to have, and make
more informed choices about which organs, implants and surgeries are
most beneficial to them. They can still change their mind, but it's
something I've always missed having and can help to tailor the
experience a bit
2. This is just annoying. Trying to revive them and not realizing the
formaldehyde is gone, and then realizing absolutely everything decayed,
is super fucking ass.
3. They get barely any starting gear, so some more money to help them
buy gear is really needed. The headset is just there to make it easier
to communicate with the department head or the HoP, it just gets you
going faster.
This commit is contained in:
Time-Green
2025-07-19 20:29:26 -04:00
committed by Roxy
parent a73a312e59
commit 1d980ae50d
7 changed files with 43 additions and 16 deletions
+3
View File
@@ -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"
+1
View File
@@ -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,
@@ -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)
+23 -13
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
@@ -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."