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