diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index c3e3097fb6f..124463c9d8d 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -136,6 +136,7 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') randmutb(src) to_chat(src, span_danger("High levels of toxins cause you to spontaneously mutate!")) domutcheck(src,null) + UpdateAppearance() /mob/living/carbon/human/proc/burn_eyes() var/obj/item/organ/internal/eyes/E = internal_organs_by_name[O_EYES] diff --git a/code/datums/diseases/advance/symptoms/telepathy.dm b/code/datums/diseases/advance/symptoms/telepathy.dm index 952b94a6b8a..c87e3178be7 100644 --- a/code/datums/diseases/advance/symptoms/telepathy.dm +++ b/code/datums/diseases/advance/symptoms/telepathy.dm @@ -31,6 +31,7 @@ Bonus var/datum/gene/trait/G = get_gene_from_trait(/datum/trait/positive/superpower_remotetalk) H.dna.SetSEState(G.block, 1) domutcheck(H, null, TRUE) + H.UpdateAppearance() to_chat(H, span_notice("Your mind expands...")) /datum/symptom/telepathy/End(datum/disease/advance/A) @@ -40,4 +41,5 @@ Bonus var/datum/gene/trait/G = get_gene_from_trait(/datum/trait/positive/superpower_remotetalk) H.dna.SetSEState(G.block, 0) domutcheck(H, null, TRUE) + H.UpdateAppearance() to_chat(H, span_notice("Everything feels... Normal.")) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index e312e48b3d4..4a4239ad8c6 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -23,8 +23,10 @@ GLOBAL_LIST_EMPTY_TYPED(dna_genes_bad, /datum/gene/trait) /proc/get_gene_from_trait(var/trait_path) // ALWAYS USE THIS RETURN_TYPE(/datum/gene/trait) var/G = GLOB.trait_to_dna_genes[trait_path] + #ifndef UNIT_TEST if(!G) // This SHOULD NOT HAPPEN, be sure any viruses or injectors that give trait paths are actually traitgenes. stack_trace("[trait_path] was used as a traitgene, without being flagged as one.") + #endif return G /datum/dna diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 730ee294ed0..b7a22e8fedd 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -67,6 +67,7 @@ M.dna.SetSEValue(i,rand(1,4095),1) M.dna.UpdateSE() domutcheck(M, null) + M.UpdateAppearance() return // I haven't yet figured out what the fuck this is supposed to do. diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 37353e0a4d1..99b8d854ce5 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -115,7 +115,7 @@ return /obj/machinery/dna_scannernew/proc/eject_occupant() - var/mob/living/carbon/WC = occupant.resolve() + var/mob/living/carbon/WC = occupant?.resolve() go_out() for(var/obj/O in src) if((!istype(O,/obj/item/reagent_containers)) && (!istype(O,/obj/item/circuitboard/clonescanner)) && (!istype(O,/obj/item/stock_parts)) && (!istype(O,/obj/item/stack/cable_coil))) @@ -836,6 +836,8 @@ if (prob(80-radiation_duration)) //testing("Random bad mut!") randmutb(WC) + domutcheck(WC,null,MUTCHK_FORCED) + WC.UpdateAppearance() // Traitgenes Do gene updates here, and more comprehensively if(ishuman(WC)) var/mob/living/carbon/human/H = WC @@ -858,6 +860,8 @@ else if(prob(95)) randmutg(WC) + domutcheck(WC,null,MUTCHK_FORCED) + WC.UpdateAppearance() // Traitgenes Do gene updates here, and more comprehensively if(ishuman(WC)) var/mob/living/carbon/human/H = WC @@ -883,6 +887,7 @@ WC.dna.SE = buf.mydna.dna.SE.Copy() WC.dna.UpdateSE() domutcheck(WC,connected, MUTCHK_FORCED | MUTCHK_HIDEMSG) // TOO MANY MUTATIONS FOR MESSAGES + WC.UpdateAppearance() to_chat(WC, span_warning("Your body stings as it wildly changes!")) // apply genes diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index ea0fb2c1bc2..ee60199480d 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -47,6 +47,7 @@ src.real_name = chosen_dna.name src.UpdateAppearance() domutcheck(src, null) + UpdateAppearance() changeling_update_languages(changeling.absorbed_languages) if(chosen_dna.genMods) var/mob/living/carbon/human/self = src diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 2bf8f17592b..e24ed458677 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -159,6 +159,7 @@ var/hadevent = 0 else randmutg(H) domutcheck(H,null,MUTCHK_FORCED) + H.UpdateAppearance() sleep(100) command_announcement.Announce("High levels of radiation detected near \the [station_name()]. Please report to the Med-bay if you feel strange.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index e4bad12715e..f2698dbd31c 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -136,6 +136,7 @@ H.UpdateAppearance() H.sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed H.sync_organ_dna() + H.initialize_vessel() H.set_cloned_appearance() update_icon() @@ -336,6 +337,7 @@ var/mob/living/carbon/human/patient = occupant if(!(patient.species.flags & NO_SCAN)) //If, for some reason, someone makes a genetically-unalterable clone, let's not make them permanently disabled. domutcheck(occupant) //Waiting until they're out before possible transforming. + occupant.UpdateAppearance() occupant = null update_icon() diff --git a/code/game/machinery/protean_reconstitutor.dm b/code/game/machinery/protean_reconstitutor.dm index abd69e30bdc..30aeec0325a 100644 --- a/code/game/machinery/protean_reconstitutor.dm +++ b/code/game/machinery/protean_reconstitutor.dm @@ -244,6 +244,7 @@ P.dna.ResetUIFrom(P) P.sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed P.sync_organ_dna() + P.initialize_vessel() if(P.mind) P.mind.loaded_from_ckey = picked_ckey diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index a0e6dee33b0..58b1d9c25cd 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -140,6 +140,7 @@ M.radiation += 50 randmutb(M) domutcheck(M,null) + M.UpdateAppearance() visible_message("\The [src.name] flashes violently before disintegrating!") spawn(0) qdel(s) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index b013c2620dc..f612191ec91 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -341,6 +341,7 @@ But for now, for what it's been used for, it works. // Turn off gene H.dna.SetSEState(gene.block,0) domutcheck(H,null,MUTCHK_FORCED) + H.UpdateAppearance() H.update_mutations() if(H.species.name == SPECIES_VOX || SPECIES_ZADDAT) //Species that 'actually' require survival gear to live. The rest don't. H.species.equip_survival_gear(H) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 9ec77026089..c1af720f3e6 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -150,11 +150,14 @@ // Traitgenes Injectors are randomized now due to no hardcoded genes. Split into good or bad, and then versions that specify what they do on the label. // Otherwise scroll down further for how to make unique injectors -/obj/item/dnainjector/proc/pick_block(var/datum/gene/trait/G, var/labeled, var/allow_disable) +/obj/item/dnainjector/proc/pick_block(var/datum/gene/trait/G, var/labeled, var/allow_disable, var/force_disable = FALSE) if(G) block = G.block datatype = DNA2_BUF_SE - value = 0xFFF + if(!force_disable) + value = 0xFFF + else + value = 0x000 if(allow_disable) value = pick(0x000,0xFFF) if(labeled) @@ -219,51 +222,131 @@ // If you want a unique injector, use a subtype of these /obj/item/dnainjector/set_trait var/trait_path + var/disabling = FALSE /obj/item/dnainjector/set_trait/Initialize() var/G = get_gene_from_trait(trait_path) if(trait_path && G) - pick_block( G, TRUE, FALSE) + pick_block( G, TRUE, FALSE, disabling) else qdel(src) return . = ..() -// Only has the superpowers for loot tables and other rewards -/obj/item/dnainjector/set_trait/hulk - trait_path = /datum/trait/positive/superpower_hulk + disabling = TRUE -/obj/item/dnainjector/set_trait/xray - trait_path = /datum/trait/positive/superpower_xray +// Injectors for all original genes and some new ones +/obj/item/dnainjector/set_trait/anxiety // stutter + trait_path = /datum/trait/negative/disability_anxiety +/obj/item/dnainjector/set_trait/anxiety/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/tk - trait_path = /datum/trait/positive/superpower_tk +/obj/item/dnainjector/set_trait/noprints // noprints + trait_path = /datum/trait/positive/superpower_noprints +/obj/item/dnainjector/set_trait/noprints/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/remotetalk - trait_path = /datum/trait/positive/superpower_remotetalk +/obj/item/dnainjector/set_trait/tourettes // tour + trait_path = /datum/trait/negative/disability_tourettes +/obj/item/dnainjector/set_trait/tourettes/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/coldadapt - trait_path = /datum/trait/neutral/coldadapt +/obj/item/dnainjector/set_trait/cough // cough + trait_path = /datum/trait/negative/disability_cough +/obj/item/dnainjector/set_trait/cough/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/hotadapt +/obj/item/dnainjector/set_trait/nearsighted // glasses + trait_path = /datum/trait/negative/disability_nearsighted +/obj/item/dnainjector/set_trait/nearsighted/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/heatadapt // fire trait_path = /datum/trait/neutral/hotadapt +/obj/item/dnainjector/set_trait/heatadapt/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/nobreathe - trait_path = /datum/trait/positive/superpower_nobreathe +/obj/item/dnainjector/set_trait/epilepsy // epi + trait_path = /datum/trait/negative/disability_epilepsy +/obj/item/dnainjector/set_trait/epilepsy/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/regenerate +/obj/item/dnainjector/set_trait/morph // morph + trait_path = /datum/trait/positive/superpower_morph +/obj/item/dnainjector/set_trait/morph/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/regenerate // regenerate trait_path = /datum/trait/positive/superpower_regenerate +/obj/item/dnainjector/set_trait/regenerate/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/haste +/obj/item/dnainjector/set_trait/clumsy // clumsy + trait_path = /datum/trait/negative/disability_clumsy +/obj/item/dnainjector/set_trait/clumsy/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/coldadapt // insulated + trait_path = /datum/trait/neutral/coldadapt +/obj/item/dnainjector/set_trait/coldadapt/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/xray // xraymut + trait_path = /datum/trait/positive/superpower_xray +/obj/item/dnainjector/set_trait/xray/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/deaf // deafmut + trait_path = /datum/trait/negative/disability_deaf +/obj/item/dnainjector/set_trait/deaf/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/tk // telemut + trait_path = /datum/trait/positive/superpower_tk +/obj/item/dnainjector/set_trait/tk/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/haste // runfast trait_path = /datum/trait/positive/speed_fast +/obj/item/dnainjector/set_trait/haste/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/flashproof +/obj/item/dnainjector/set_trait/blind // blindmut + trait_path = /datum/trait/negative/blindness +/obj/item/dnainjector/set_trait/blind/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/nobreathe // nobreath + trait_path = /datum/trait/positive/superpower_nobreathe +/obj/item/dnainjector/set_trait/nobreathe/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/remoteview // remoteview + trait_path = /datum/trait/positive/superpower_remoteview +/obj/item/dnainjector/set_trait/remoteview/disable + disabling = TRUE +/obj/item/dnainjector/set_trait/flashproof // flashproof trait_path = /datum/trait/positive/superpower_flashproof +/obj/item/dnainjector/set_trait/flashproof/disable + disabling = TRUE -/* Not a gene on virgo -/obj/item/dnainjector/set_trait/nonconduct - trait_path = /datum/trait/positive/nonconductive_plus -*/ +/obj/item/dnainjector/set_trait/hulk // hulk + trait_path = /datum/trait/positive/superpower_hulk +/obj/item/dnainjector/set_trait/hulk/disable + disabling = TRUE -/obj/item/dnainjector/set_trait/table_passer +/obj/item/dnainjector/set_trait/table_passer // midgit trait_path = /datum/trait/positive/table_passer +/obj/item/dnainjector/set_trait/table_passer/disable + disabling = TRUE + +/obj/item/dnainjector/set_trait/remotetalk // remotetalk + trait_path = /datum/trait/positive/superpower_remotetalk +/obj/item/dnainjector/set_trait/remotetalk/disable + disabling = TRUE +/* +/obj/item/dnainjector/set_trait/nonconduct // shock + trait_path = /datum/trait/positive/nonconductive_plus +/obj/item/dnainjector/set_trait/nonconduct/disable + disabling = TRUE +*/ diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 2a94edde18d..77b933d70d1 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -617,7 +617,7 @@ if(istype(M, /mob/living/carbon)) M.dna.SetSEState(block,!M.dna.GetSEState(block)) domutcheck(M,null,MUTCHK_FORCED) - M.update_mutations() + M.UpdateAppearance() var/state="[M.dna.GetSEState(block)?"on":"off"]" var/blockname=assigned_blocks[block] message_admins("[key_name_admin(src)] has toggled [M.key]'s [blockname] block [state]!") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 2f1c1371c56..1ed4f1766f6 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -517,6 +517,7 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character.dna.ResetUIFrom(new_character) new_character.sync_dna_traits(TRUE) // Traitgenes Sync traits to genetics if needed new_character.sync_organ_dna() + new_character.initialize_vessel() if(inhabit) new_character.key = player_key //Were they any particular special role? If so, copy. diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index ca0ab71ab2d..65c9642b8a1 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -52,6 +52,7 @@ else randmutg(H) // Applies good mutation domutcheck(H,null,MUTCHK_FORCED) + H.UpdateAppearance() /datum/event/radiation_storm/end() revoke_maint_all_access() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 45568f48fa2..eb09d32b3da 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -66,6 +66,7 @@ dna.real_name = real_name sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed sync_organ_dna() + initialize_vessel() AddComponent(/datum/component/personal_crafting) @@ -1068,6 +1069,7 @@ dna.ResetUIFrom(src) sync_dna_traits(TRUE) // Traitgenes Sync traits to genetics if needed sync_organ_dna() + initialize_vessel() losebreath = 0 @@ -1312,7 +1314,9 @@ var/datum/mob_descriptor/descriptor = species.descriptors[desctype] descriptors[desctype] = descriptor.default_value - addtimer(CALLBACK(src, PROC_REF(initialize_vessel)), 0, TIMER_DELETE_ME) //Doing ASYNC fails here. This used to be a spawn(0) + //This was the old location of initialize_vessel. A race condiiton happened here because of species code being JANK. This resulted in runtimes during unit test, but worked perfectly fine in game. + //Now, initialize_vessel has been moved to human/Initialize() + // addtimer(CALLBACK(src, PROC_REF(initialize_vessel)), 0, TIMER_DELETE_ME) //Doing ASYNC fails here. This used to be a spawn(0) // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. update_hud() @@ -1326,7 +1330,6 @@ return 0 /mob/living/carbon/human/proc/initialize_vessel() //This needs fixing. For some reason mob species is not immediately set in set_species. - PRIVATE_PROC(TRUE) SHOULD_NOT_OVERRIDE(TRUE) regenerate_icons() make_blood() diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index eeee03b2f5a..1b8251985a0 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -188,6 +188,7 @@ // Traitgenes Init genes based on the traits currently active /mob/living/carbon/human/proc/sync_dna_traits(var/refresh_traits, var/hide_message = TRUE) + SHOULD_NOT_OVERRIDE(TRUE) //Don't. Even. /Think/. About. It. if(!dna || !species) return // Traitgenes NO_SCAN and Synthetics cannot be mutated diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_genes.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_genes.dm index b2fb2984477..f3f916d1276 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_genes.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_genes.dm @@ -11,7 +11,7 @@ activity_bounds = DNA_HARD_BOUNDS activation_message="You feel no need to breathe." -/* + /datum/trait/positive/superpower_remoteview name = "Remote Viewing" desc = "Remotely view other locations." @@ -33,7 +33,6 @@ . = ..() if(/mob/living/carbon/human/proc/remoteobserve in S.inherent_verbs) remove_verb(H, /mob/living/carbon/human/proc/remoteobserve) -*/ /datum/trait/positive/superpower_regenerate name = "Regenerate" @@ -161,6 +160,7 @@ if(H.dna) H.dna.SetSEState(linked_gene.block, FALSE, FALSE) // Turn this thing off or so help me-- domutcheck(H,null,MUTCHK_FORCED) + H.UpdateAppearance() H.mutations.Remove(HULK) H.Weaken(3) H.emote("collapse") diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 932b0d9fbb3..d22b9e2e16f 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -553,6 +553,7 @@ new_character.dna.b_type = client.prefs.b_type new_character.sync_dna_traits(TRUE) // Traitgenes Sync traits to genetics if needed new_character.sync_organ_dna() + new_character.initialize_vessel() for(var/lang in client.prefs.alternate_languages) var/datum/language/chosen_language = GLOB.all_languages[lang] diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index da656f040ec..2283521372a 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -260,6 +260,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) H.UpdateAppearance() H.sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed H.sync_organ_dna() + H.initialize_vessel() if(!R.dna.real_name) //to prevent null names R.dna.real_name = "promethean ([rand(0,999)])" H.real_name = R.dna.real_name diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 27ab791ec2a..f8b99f111f2 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -173,6 +173,7 @@ else randmutg(M) domutcheck(M,null) + M.UpdateAppearance() else M.adjustFireLoss(rand(5,15)) M.show_message(span_red("The radiation beam singes you!")) diff --git a/code/modules/resleeving/autoresleever.dm b/code/modules/resleeving/autoresleever.dm index 188306d8681..2d016715e5f 100644 --- a/code/modules/resleeving/autoresleever.dm +++ b/code/modules/resleeving/autoresleever.dm @@ -156,6 +156,7 @@ new_character.dna.ResetUIFrom(new_character) new_character.sync_dna_traits(TRUE) // Traitgenes Sync traits to genetics if needed new_character.sync_organ_dna() + new_character.initialize_vessel() if(ghost.mind) ghost.mind.transfer_to(new_character) diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index 6fc44877ef1..49c160179cb 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -8,6 +8,7 @@ icon_keyboard = "med_key" icon_screen = "dna" light_color = "#315ab4" + bubble_icon = "medical" circuit = /obj/item/circuitboard/resleeving_control req_access = list(access_heads) //Only used for record deletion right now. var/list/pods = null //Linked grower pods. @@ -461,7 +462,8 @@ I.desc = "Resequences structural enzymes to match the body record this was created from." I.buf = active_br.mydna.copy() I.buf.types = DNA2_BUF_SE - addtimer(CALLBACK(src, PROC_REF(dispense_injector), I), 20 SECONDS, TIMER_DELETE_ME) + atom_say("Beginning injector synthesis.") + addtimer(CALLBACK(src, PROC_REF(dispense_injector), I), 10 SECONDS, TIMER_DELETE_ME) . = TRUE if("cleartemp") temp = null diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 6e130b399f7..96c9f2e9e7b 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -103,6 +103,7 @@ H.sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed H.sync_organ_dna() H.regenerate_icons() + H.initialize_vessel() // Traitgenes Moved breathing equipment to AFTER the genes set it //Give breathing equipment if needed @@ -358,6 +359,7 @@ H.sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed H.sync_organ_dna() H.regenerate_icons() + H.initialize_vessel() //Basically all the VORE stuff H.ooc_notes = current_project.body_oocnotes diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 84bffab6eb2..d9e4fdfed25 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -1092,6 +1092,7 @@ owner.UpdateAppearance() owner.sync_dna_traits(FALSE) owner.sync_organ_dna() + owner.initialize_vessel() owner.dna.blood_reagents = R.dna.blood_reagents owner.dna.blood_color = R.dna.blood_color owner.regenerate_icons() diff --git a/code/modules/vore/eating/inbelly_spawn.dm b/code/modules/vore/eating/inbelly_spawn.dm index c2934328d32..74d3f75f6e8 100644 --- a/code/modules/vore/eating/inbelly_spawn.dm +++ b/code/modules/vore/eating/inbelly_spawn.dm @@ -146,6 +146,7 @@ Please do not abuse this ability. new_character.dna.ResetUIFrom(new_character) new_character.sync_dna_traits(TRUE) // Traitgenes Sync traits to genetics if needed new_character.sync_organ_dna() + new_character.initialize_vessel() new_character.key = player_key if(new_character.mind) var/datum/antagonist/antag_data = get_antag_data(new_character.mind.special_role)