diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm
index fd5afe34ea..77ea2587e4 100644
--- a/code/game/dna/dna2.dm
+++ b/code/game/dna/dna2.dm
@@ -193,6 +193,12 @@ var/global/list/datum/dna/gene/dna_genes[0]
src.base_species = CS.base_species
src.blood_color = CS.blood_color
+ if(istype(character.species,/datum/species/xenochimera))
+ var/datum/species/xenochimera/CS = character.species
+ //src.species_traits = CS.traits.Copy() //No traits
+ src.base_species = CS.base_species
+ src.blood_color = CS.blood_color
+
// +1 to account for the none-of-the-above possibility
SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1)
SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, tail_styles_list.len + 1, 1)
diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm
index 35b6028c48..a7e7d2ddae 100644
--- a/code/game/dna/dna2_helpers.dm
+++ b/code/game/dna/dna2_helpers.dm
@@ -229,6 +229,10 @@
var/datum/species/custom/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src)
new_CS.blood_color = dna.blood_color
+ if(istype(H.species,/datum/species/xenochimera))
+ var/datum/species/xenochimera/CS = H.species
+ var/datum/species/xenochimera/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src)
+ new_CS.blood_color = dna.blood_color
// VOREStation Edit End
H.force_update_organs() //VOREStation Add - Gotta do this too
diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm
index 19300c75f4..c6b8f32e1e 100644
--- a/code/modules/client/preference_setup/vore/07_traits.dm
+++ b/code/modules/client/preference_setup/vore/07_traits.dm
@@ -73,7 +73,7 @@
if(!(path in negative_traits))
pref.neg_traits -= path
- if(!pref.custom_base || !(pref.custom_base in playable_species - whitelisted_species))
+ if(!pref.custom_base || (pref.custom_base != "Xenochimera" && !(pref.custom_base in playable_species - whitelisted_species)))
pref.custom_base = "Human"
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
@@ -86,8 +86,15 @@
//Any additional non-trait settings can be applied here
new_CS.blood_color = pref.blood_color
+ if(pref.species == "Xenochimera")
+ var/datum/species/xenochimera/CS = character.species
+ var/S = pref.custom_base ? pref.custom_base : "Human"
+ var/datum/species/xenochimera/new_CS = CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character)
+
+ //Any additional non-trait settings can be applied here
+ new_CS.blood_color = pref.blood_color
+
/datum/category_item/player_setup_item/vore/traits/content(var/mob/user)
- //if(pref.species == "Custom Species" || pref.custom_species) //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their custom species.
. += "Custom Species "
. += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
"
@@ -95,6 +102,12 @@
. += "Icon Base: "
. += "[pref.custom_base ? pref.custom_base : "Human"]
"
+ if(pref.species == "Xenochimera")
+ . += "Icon Base: "
+ . += "[pref.custom_base ? pref.custom_base : "Human"]
"
+
+ if(pref.species == "Custom Species")
+
var/points_left = pref.starting_trait_points
var/traits_left = pref.max_traits
for(var/T in pref.pos_traits + pref.neg_traits)
@@ -153,6 +166,12 @@
pref.custom_base = text_choice
return TOPIC_REFRESH_UPDATE_PREVIEW
+ else if(href_list["custom_base_xenochimera"])
+ var/text_choice = input("Pick an icon set for your species:","Icon Base") in playable_species - whitelisted_species - "Custom Species" - "Promethean" + "Xenochimera"
+ if(text_choice in playable_species)
+ pref.custom_base = text_choice
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
else if(href_list["blood_color"])
var/color_choice = input("Pick a blood color (does not apply to synths)","Blood Color",pref.blood_color) as color
if(color_choice)
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
index 480ca6e148..2f46b1b13f 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
@@ -15,6 +15,7 @@
brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though.
burn_mod = 1.15 //As vulnerable to burn as a Tajara.
can_fly = 1 //They have wings by default.
+ var/base_species = "Xenochimera"
num_alternate_languages = 2
secondary_langs = list("Sol Common")
@@ -194,6 +195,52 @@
H.shock_stage = min(H.shock_stage + coldshock, 160) //cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral.
return
+/datum/species/xenochimera/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
+ ASSERT(to_copy)
+ ASSERT(istype(H))
+
+ if(ispath(to_copy))
+ to_copy = "[initial(to_copy.name)]"
+ if(istext(to_copy))
+ to_copy = all_species[to_copy]
+
+ var/datum/species/xenochimera/new_copy = new()
+
+ //Initials so it works with a simple path passed, or an instance
+ new_copy.base_species = to_copy.name
+ new_copy.icobase = to_copy.icobase
+ new_copy.deform = to_copy.deform
+ new_copy.tail = to_copy.tail
+ new_copy.tail_animation = to_copy.tail_animation
+ new_copy.icobase_tail = to_copy.icobase_tail
+ new_copy.color_mult = to_copy.color_mult
+ new_copy.primitive_form = to_copy.primitive_form
+ new_copy.appearance_flags = to_copy.appearance_flags
+ new_copy.flesh_color = to_copy.flesh_color
+ new_copy.base_color = to_copy.base_color
+ new_copy.blood_mask = to_copy.blood_mask
+ new_copy.damage_mask = to_copy.damage_mask
+ new_copy.damage_overlays = to_copy.damage_overlays
+
+ //Set up a mob
+ H.species = new_copy
+ H.icon_state = lowertext(new_copy.get_bodytype())
+
+ if(new_copy.holder_type)
+ H.holder_type = new_copy.holder_type
+
+ if(H.dna)
+ H.dna.ready_dna(H)
+
+ return new_copy
+
+/datum/species/xenochimera/get_bodytype()
+ return base_species
+
+/datum/species/xenochimera/get_race_key()
+ var/datum/species/real = all_species[base_species]
+ return real.race_key
+
/////////////////////
/////SPIDER RACE/////
diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm
index e3e5cf6198..df3efeee5d 100644
--- a/code/modules/mob/new_player/sprite_accessories_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_vr.dm
@@ -387,6 +387,12 @@
var/color_blend_mode = ICON_MULTIPLY
species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Rapala") //This lets all races use the facial hair styles.
+ shaved
+ name = "Shaved"
+ icon_state = "bald"
+ gender = NEUTER
+ species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Rapala") //This needed to be manually defined, apparantly.
+
vulp_none
name = "None"
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 7e09c5c375..d6d1b72591 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -129,7 +129,7 @@ var/list/organ_cache = list()
else if(owner && owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
//** Handle antibiotics and curing infections
handle_antibiotics()
- handle_rejection()
+ //handle_rejection() //VOREStation Edit. Was causing major issues.
handle_germ_effects()
//check if we've hit max_damage