From 9c3fcaa53cf1f64745ffbe5a8675d0ae52a81621 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 17 Jul 2018 02:13:52 -0400 Subject: [PATCH 01/24] AGHHHHHHHHHHHHH --- code/datums/datacore.dm | 8 ++--- code/game/dna/dna2.dm | 11 +++---- code/game/dna/genes/vg_powers.dm | 4 +-- code/game/gamemodes/changeling/changeling.dm | 2 +- .../gamemodes/changeling/powers/humanform.dm | 2 +- .../gamemodes/changeling/powers/tiny_prick.dm | 3 +- .../gamemodes/changeling/powers/transform.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 4 +-- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/cloning.dm | 8 ++--- code/game/machinery/transformer.dm | 2 +- code/game/objects/items/weapons/cosmetics.dm | 4 +-- code/game/objects/items/weapons/scissors.dm | 16 +++++----- code/game/response_team.dm | 4 +-- .../mob/living/carbon/human/appearance.dm | 20 ++++++------ code/modules/mob/living/carbon/human/emote.dm | 4 +-- code/modules/mob/living/carbon/human/human.dm | 10 +++--- .../living/carbon/human/species/station.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 20 ++++++------ .../mob/new_player/preferences_setup.dm | 2 +- code/modules/nano/modules/human_appearance.dm | 6 ++-- .../reagents/chemistry/reagents/misc.dm | 12 +++---- code/modules/surgery/organs/augments_eyes.dm | 2 +- code/modules/surgery/organs/lungs.dm | 3 -- code/modules/surgery/organs/organ.dm | 8 ++--- code/modules/surgery/organs/organ_external.dm | 4 +-- code/modules/surgery/organs/organ_icon.dm | 32 +++++++++---------- .../surgery/organs/subtypes/abductor.dm | 3 +- code/modules/surgery/organs/subtypes/diona.dm | 29 +---------------- code/modules/surgery/organs/subtypes/drask.dm | 7 +--- code/modules/surgery/organs/subtypes/grey.dm | 5 +-- code/modules/surgery/organs/subtypes/kidan.dm | 1 - .../surgery/organs/subtypes/machine.dm | 13 -------- .../surgery/organs/subtypes/nucleation.dm | 7 +--- .../modules/surgery/organs/subtypes/shadow.dm | 3 +- .../modules/surgery/organs/subtypes/skrell.dm | 2 -- .../surgery/organs/subtypes/tajaran.dm | 3 -- .../modules/surgery/organs/subtypes/unathi.dm | 4 +-- code/modules/surgery/organs/subtypes/vox.dm | 1 - .../surgery/organs/subtypes/vulpkanin.dm | 6 +--- code/modules/surgery/organs/subtypes/wryn.dm | 4 +-- 41 files changed, 101 insertions(+), 184 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 1a22131d55f..0f76efb6d55 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -357,7 +357,7 @@ var/record_id_num = 1001 temp = new /icon(icobase, "groin_[g]") preview_icon.Blend(temp, ICON_OVERLAY) var/head = "head" - if(head_organ.alt_head && head_organ.species.bodyflags & HAS_ALT_HEADS) + if(head_organ.alt_head && head_organ.dna.species2.bodyflags & HAS_ALT_HEADS) var/datum/sprite_accessory/alt_heads/alternate_head = alt_heads_list[head_organ.alt_head] if(alternate_head.icon_state) head = alternate_head.icon_state @@ -410,7 +410,7 @@ var/record_id_num = 1001 var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") // I'll want to make a species-specific proc for this sooner or later // But this'll do for now - if(head_organ.species.name == "Slime People") + if(istype(head_organ.dna.species2, /datum/species/slime)) hair_s.Blend("[H.skin_colour]A0", ICON_AND) //A0 = 160 alpha. else hair_s.Blend(head_organ.hair_colour, ICON_ADD) @@ -424,7 +424,7 @@ var/record_id_num = 1001 face_s.Blend(hair_s, ICON_OVERLAY) //Head Accessory - if(head_organ.species.bodyflags & HAS_HEAD_ACCESSORY) + if(head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY) var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style] if(head_accessory_style && head_accessory_style.species_allowed) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") @@ -434,7 +434,7 @@ var/record_id_num = 1001 var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[head_organ.f_style] if(facial_hair_style && facial_hair_style.species_allowed) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(head_organ.species.name == "Slime People") + if(istype(head_organ.dna.species2, /datum/species/slime)) facial_s.Blend("[H.skin_colour]A0", ICON_ADD) //A0 = 160 alpha. else facial_s.Blend(head_organ.facial_colour, ICON_ADD) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index f21c2948b01..2d3fee8d4e9 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -99,8 +99,7 @@ var/global/list/bad_blocks[0] var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, - // New stuff - var/species = "Human" + var/datum/species/species2 = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man) // Make a copy of this strand. // USE THIS WHEN COPYING STUFF OR YOU'LL GET CORRUPTION! @@ -110,7 +109,7 @@ var/global/list/bad_blocks[0] new_dna.struc_enzymes_original=struc_enzymes_original // will make clone's SE the same as the original, do we want this? new_dna.b_type=b_type new_dna.real_name=real_name - new_dna.species=species + new_dna.species2 = new species2.type for(var/b=1;b<=DNA_SE_LENGTH;b++) new_dna.SE[b]=SE[b] if(b<=DNA_UI_LENGTH) @@ -421,7 +420,7 @@ var/global/list/bad_blocks[0] data["UE"] = unique_enzymes data["SE"] = SE.Copy() // This is probably too lazy for my own good data["UI"] = UI.Copy() - data["species"] = species // This works because `species` is a string, not a datum + data["species"] = species2.type // This works because `species` is a string, not a datum // Because old DNA coders were insane or something data["b_type"] = b_type data["real_name"] = real_name @@ -434,10 +433,10 @@ var/global/list/bad_blocks[0] UI = data["UI"] UpdateUI() UpdateSE() - species = data["species"] + species2 = new data["species"] b_type = data["b_type"] real_name = data["real_name"] // a nice hook for if/when we refactor species on dna /datum/dna/proc/get_species_name() - return species + return species2.name diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index 3e709560a45..afb918fe72b 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -50,7 +50,7 @@ M.change_eye_color(new_eyes) //Alt heads. - if(head_organ.species.bodyflags & HAS_ALT_HEADS) + if(head_organ.dna.species2.bodyflags & HAS_ALT_HEADS) var/list/valid_alt_heads = M.generate_valid_alt_heads() var/new_alt_head = input("Please select alternate head", "Character Generation", head_organ.alt_head) as null|anything in valid_alt_heads if(new_alt_head) @@ -92,7 +92,7 @@ M.change_facial_hair_color(new_facial, 1) //Head accessory. - if(head_organ.species.bodyflags & HAS_HEAD_ACCESSORY) + if(head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY) var/list/valid_head_accessories = M.generate_valid_head_accessories() var/new_head_accessory = input("Please select head accessory style", "Character Generation", head_organ.ha_style) as null|anything in valid_head_accessories if(new_head_accessory) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 329408bffce..bab5594b572 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -273,7 +273,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" /datum/changeling/proc/find_dna(datum/dna/tDNA) for(var/datum/dna/D in (absorbed_dna + protected_dna)) - if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species == D.species) + if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species2.type == D.species2.type) return D return null diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index fb3012cd274..429954ce539 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -29,7 +29,7 @@ user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name if(istype(user)) - user.set_species(chosen_dna.species) + user.set_species(chosen_dna.species2) domutcheck(user,null,MUTCHK_FORCED) user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index c344897c624..cbbac28dbcb 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -80,8 +80,7 @@ selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") if(!selected_dna) return - var/datum/species/newspecies = all_species[selected_dna.species] - if((NOTRANSSTING in newspecies.species_traits) || newspecies.is_small) + if((NOTRANSSTING in selected_dna.species2.species_traits) || selected_dna.species2.is_small) to_chat(user, "The selected DNA is incompatible with our sting.") return ..() diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index b7c8abefd1d..7e89a08c690 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -17,7 +17,7 @@ user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name if(ishuman(user)) - user.set_species(chosen_dna.species) + user.set_species(chosen_dna.species2) domutcheck(user, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index feffadcf9ab..b745e822993 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -159,8 +159,8 @@ proc/issyndicate(mob/living/M as mob) head_organ.sec_hair_colour = hair_c M.change_eye_color(eye_c) M.s_tone = skin_tone - head_organ.h_style = random_hair_style(M.gender, head_organ.species.name) - head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name) + head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species2.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species2.name) M.body_accessory = null M.regenerate_icons() M.update_body() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 881136dbd58..60d280cf32f 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -231,7 +231,7 @@ R.dna = new /datum/dna() var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.set_species(R.dna.species) + H.set_species(R.dna.species2) occupant = H if(!R.dna.real_name) //to prevent null names diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 95aee7cb9fe..64beeb17513 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -363,8 +363,7 @@ if(subject.get_int_organ(/obj/item/organ/internal/brain)) var/obj/item/organ/internal/brain/Brn = subject.get_int_organ(/obj/item/organ/internal/brain) if(istype(Brn)) - var/datum/species/S = all_species[Brn.dna.species] // stepladder code wooooo - if(NO_SCAN in S.species_traits) + if(NO_SCAN in Brn.dna.species2.species_traits) scantemp = "Error: Subject's brain is incompatible." SSnanoui.update_uis(src) return @@ -402,10 +401,9 @@ var/obj/item/organ/B = subject.get_int_organ(/obj/item/organ/internal/brain) B.dna.check_integrity() R.dna=B.dna.Clone() - var/datum/species/S = all_species[R.dna.species] - if(NO_SCAN in S.species_traits) + if(NO_SCAN in R.dna.species2.species_traits) extra_info = "Proper genetic interface not found, defaulting to genetic data of the body." - R.dna.species = subject.species.name + R.dna.species2 = new subject.dna.species2.type R.id= copytext(md5(B.dna.real_name), 2, 6) R.name=B.dna.real_name else diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 09385fa3a3e..b68076f5c35 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -336,7 +336,7 @@ to_chat(H, "No genetic template configured!") return var/prev_ue = H.dna.unique_enzymes - H.set_species(template.species) + H.set_species(template.species2) H.dna = template.Clone() H.real_name = template.real_name H.sync_organ_dna(assimilate = 0, old_ue = prev_ue) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index ec8a2a5e325..76d61f5ea44 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -99,7 +99,7 @@ if(!get_location_accessible(H, "mouth")) to_chat(user, "The mask is in the way.") return - if((C.species.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... + if((C.dna.species2.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... to_chat(user, "You find yourself disappointed at the appalling lack of facial hair.") return if(C.f_style == "Shaved") @@ -130,7 +130,7 @@ if(!get_location_accessible(H, "head")) to_chat(user, "The headgear is in the way.") return - if((C.species.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... + if((C.dna.species2.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... to_chat(user, "You find yourself disappointed at the appalling lack of hair.") return if(C.h_style == "Bald" || C.h_style == "Balding Hair" || C.h_style == "Skinhead") diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 6ff1fbe95b0..b5d616a9a51 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -34,18 +34,18 @@ var/obj/item/organ/external/head/C = H.get_organ("head") var/datum/robolimb/robohead = all_robolimbs[C.model] if(H.gender == MALE || H.get_species() == "Vulpkanin") - if(C.species) + if(C.dna.species2) for(var/i in facial_hair_styles_list) var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i] - if(C.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. - if(C.species.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(C.dna.species2.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. + if(C.dna.species2.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. if(robohead.is_monitor) to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") return continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_facial_hair += i else - if(C.species.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(C.dna.species2.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. if(!robohead.is_monitor) if("Human" in tmp_facial.species_allowed) species_facial_hair += i @@ -57,18 +57,18 @@ var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair //handle normal hair var/list/species_hair = list() - if(C.species) + if(C.dna.species2) for(var/i in hair_styles_public_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i] - if(C.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. - if(C.species.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(C.dna.species2.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. + if(C.dna.species2.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. if(robohead.is_monitor) to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") return continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_hair += i else - if(C.species.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(C.dna.species2.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. if(!robohead.is_monitor) if("Human" in tmp_hair.species_allowed) species_hair += i diff --git a/code/game/response_team.dm b/code/game/response_team.dm index c59dd7bd78f..1e866e22faf 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -158,8 +158,8 @@ var/ert_request_answered = 0 head_organ.sec_hair_colour = hair_c M.change_eye_color(eye_c) M.s_tone = skin_tone - head_organ.h_style = random_hair_style(M.gender, head_organ.species.name) - head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name) + head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species2.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species2.name) M.rename_character(null, "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]") M.age = rand(23,35) diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 152262b69ea..de8cb28eb47 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -350,16 +350,16 @@ continue if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) continue - if(H.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... + if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = all_robolimbs[H.model] - if((H.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. + if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. valid_hairstyles += hairstyle //Give them their hairstyles if they do. else if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */ valid_hairstyles += hairstyle else //If the user is not a species who can have robotic heads, use the default handling. - if(H.species.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list. + if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list. valid_hairstyles += hairstyle return valid_hairstyles @@ -378,17 +378,17 @@ continue if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) continue - if(H.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... + if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = all_robolimbs[H.model] - if(H.species.name in S.species_allowed) //If this is a facial hair style native to the user's species... - if((H.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. + if(H.dna.species2.name in S.species_allowed) //If this is a facial hair style native to the user's species... + if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do. else if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */ valid_facial_hairstyles += facialhairstyle else //If the user is not a species who can have robotic heads, use the default handling. - if(H.species.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. + if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. valid_facial_hairstyles += facialhairstyle return valid_facial_hairstyles @@ -402,7 +402,7 @@ for(var/head_accessory in head_accessory_styles_list) var/datum/sprite_accessory/S = head_accessory_styles_list[head_accessory] - if(!(H.species.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list. + if(!(H.dna.species2.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list. continue valid_head_accessories += head_accessory @@ -432,7 +432,7 @@ continue if(location == "head") var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[S.name] - if(H.species.bodyflags & ALL_RPARTS)//If the user is a species that can have a robotic head... + if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head... var/datum/robolimb/robohead = all_robolimbs[H.model] if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head. continue @@ -469,7 +469,7 @@ valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option, and there should always be a "None" option. for(var/alternate_head in alt_heads_list) var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head] - if(!(H.species.name in head.species_allowed)) + if(!(H.dna.species2.name in head.species_allowed)) continue valid_alt_heads += alternate_head diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index be46cc9fa7d..3df5a6843d1 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -56,7 +56,7 @@ found_slime_bodypart = 1 else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! - if(L.dna.species in list("Slime People")) + if(istype(L.dna.species2, /datum/species/slime)) on_CD = handle_emote_CD() found_slime_bodypart = 1 break @@ -910,7 +910,7 @@ emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! - if(L.dna.species in list("Slime People")) + if(istype(L.dna.species2, /datum/species/slime)) emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" break diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index dbc788cd0bb..88e3d854658 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1297,9 +1297,9 @@ new_species = "Human" else if(!new_species) - new_species = dna.species + new_species = dna.species2 else - dna.species = new_species + dna.species2 = new_species if(species) if(species.name && species.name == new_species) @@ -1380,7 +1380,7 @@ if(!dna) dna = new /datum/dna(null) - dna.species = species.name + dna.species2 = species.name dna.real_name = real_name species.handle_post_spawn(src) @@ -1497,7 +1497,7 @@ var/list/hair = list() for(var/i in hair_styles_public_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i] - if((head_organ.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use. + if((head_organ.dna.species2.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use. hair += i var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair @@ -1964,7 +1964,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X dna.deserialize(data["dna"]) real_name = dna.real_name name = real_name - set_species(dna.species) + set_species(dna.species2) age = data["age"] undershirt = data["ushirt"] underwear = data["uwear"] diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 6b692601226..c93d11d9a2b 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -617,7 +617,7 @@ if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller for(var/organname in H.bodyparts_by_name) var/obj/item/organ/external/E = H.bodyparts_by_name[organname] - if(istype(E) && E.dna.species == "Slime People") + if(istype(E) && E.dna && istype(E.dna.species2, /datum/species/slime)) E.sync_colour_to_human(H) H.update_hair(0) H.update_body() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3a1ac4d3a83..4f84cf1f821 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -249,7 +249,7 @@ var/global/list/damage_icon_parts = list() icon_key += "1" if(part) - icon_key += "[part.species.race_key]" + icon_key += "[part.dna.species2.race_key]" icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" if(part.s_col) @@ -379,7 +379,7 @@ var/global/list/damage_icon_parts = list() if(head_organ && m_styles["head"]) //If the head is destroyed, forget the head markings. This prevents floating optical markings on decapitated IPCs, for example. var/head_marking = m_styles["head"] var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking] - if(head_marking_style && head_marking_style.species_allowed && (head_organ.species.name in head_marking_style.species_allowed)) + if(head_marking_style && head_marking_style.species_allowed && (head_organ.dna.species2.name in head_marking_style.species_allowed)) var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s") if(head_marking_style.do_colouration) h_marking_s.Blend(m_colours["head"], ICON_ADD) @@ -407,10 +407,10 @@ var/global/list/damage_icon_parts = list() //base icons var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") - if(head_organ.ha_style && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY)) + if(head_organ.ha_style && (head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY)) var/datum/sprite_accessory/head_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style] if(head_accessory_style && head_accessory_style.species_allowed) - if(head_organ.species.name in head_accessory_style.species_allowed) + if(head_organ.dna.species2.name in head_accessory_style.species_allowed) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") if(head_accessory_style.do_colouration) head_accessory_s.Blend(head_organ.headacc_colour, ICON_ADD) @@ -451,9 +451,9 @@ var/global/list/damage_icon_parts = list() //if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN // hair_standing.Blend(debrained_s, ICON_OVERLAY) if(hair_style && hair_style.species_allowed) - if((head_organ.species.name in hair_style.species_allowed) || (head_organ.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... + if((head_organ.dna.species2.name in hair_style.species_allowed) || (head_organ.dna.species2.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(head_organ.species.name == "Slime People") // I am el worstos + if(istype(head_organ.dna.species2, /datum/species/slime)) // I am el worstos hair_s.Blend("[skin_colour]A0", ICON_AND) else if(hair_style.do_colouration) hair_s.Blend(head_organ.hair_colour, ICON_ADD) @@ -497,9 +497,9 @@ var/global/list/damage_icon_parts = list() if(head_organ.f_style) var/datum/sprite_accessory/facial_hair/facial_hair_style = facial_hair_styles_list[head_organ.f_style] if(facial_hair_style && facial_hair_style.species_allowed) - if((head_organ.species.name in facial_hair_style.species_allowed) || (head_organ.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... + if((head_organ.dna.species2.name in facial_hair_style.species_allowed) || (head_organ.dna.species2.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(head_organ.species.name == "Slime People") // I am el worstos + if(istype(head_organ.dna.species2, /datum/species/slime)) // I am el worstos facial_s.Blend("[skin_colour]A0", ICON_AND) else if(facial_hair_style.do_colouration) facial_s.Blend(head_organ.facial_colour, ICON_ADD) @@ -759,8 +759,8 @@ var/global/list/damage_icon_parts = list() if(glasses.icon_override) new_glasses = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") - else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.species.name]) - new_glasses = image("icon" = glasses.sprite_sheets[head_organ.species.name], "icon_state" = "[glasses.icon_state]") + else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.dna.species2.name]) + new_glasses = image("icon" = glasses.sprite_sheets[head_organ.dna.species2.name], "icon_state" = "[glasses.icon_state]") else new_glasses = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index d57c46e513c..86abdffd48b 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -227,7 +227,7 @@ H.s_tone = s_tone H.species.updatespeciescolor(H, 0) //The mob's species wasn't set, so it's almost certainly different than the character's species at the moment. Thus, we need to be owner-insensitive. var/obj/item/organ/external/chest/C = H.get_organ("chest") - icobase = C.icobase ? C.icobase : C.species.icobase + icobase = C.icobase ? C.icobase : C.dna.species2.icobase if(H.species.bodyflags & HAS_TAIL) coloured_tail = H.tail ? H.tail : H.species.tail diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index ad7a8f5cff6..dc41b75e733 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -292,7 +292,7 @@ if(!head_organ) log_runtime(EXCEPTION("Missing head!"), owner) return 0 - return owner && (flags & APPEARANCE_HEAD_ACCESSORY) && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY) + return owner && (flags & APPEARANCE_HEAD_ACCESSORY) && (head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY) /datum/nano_module/appearance_changer/proc/can_change_markings(var/location = "body") var/marking_flag = HAS_BODY_MARKINGS @@ -301,7 +301,7 @@ if(!head_organ) log_debug("Missing head!") return 0 - body_flags = head_organ.species.bodyflags + body_flags = head_organ.dna.species2.bodyflags marking_flag = HAS_HEAD_MARKINGS if(location == "body") marking_flag = HAS_BODY_MARKINGS @@ -317,7 +317,7 @@ if(!head_organ) log_debug("Missing head!") return 0 - return owner && (flags & APPEARANCE_ALT_HEAD) && (head_organ.species.bodyflags & HAS_ALT_HEADS) + return owner && (flags & APPEARANCE_ALT_HEAD) && (head_organ.dna.species2.bodyflags & HAS_ALT_HEADS) /datum/nano_module/appearance_changer/proc/cut_and_generate_data() // Making the assumption that the available species remain constant diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index a67fcd0f751..7e6ffaead46 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -313,8 +313,8 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/head/head_organ = H.get_organ("head") - head_organ.h_style = random_hair_style(H.gender, head_organ.species.name) - head_organ.f_style = random_facial_hair_style(H.gender, head_organ.species.name) + head_organ.h_style = random_hair_style(H.gender, head_organ.dna.species2.name) + head_organ.f_style = random_facial_hair_style(H.gender, head_organ.dna.species2.name) H.update_hair() H.update_fhair() ..() @@ -335,14 +335,14 @@ var/datum/sprite_accessory/tmp_hair_style = hair_styles_full_list["Very Long Hair"] var/datum/sprite_accessory/tmp_facial_hair_style = facial_hair_styles_list["Very Long Beard"] - if(head_organ.species.name in tmp_hair_style.species_allowed) //If 'Very Long Hair' is a style the person's species can have, give it to them. + if(head_organ.dna.species2.name in tmp_hair_style.species_allowed) //If 'Very Long Hair' is a style the person's species can have, give it to them. head_organ.h_style = "Very Long Hair" else //Otherwise, give them a random hair style. - head_organ.h_style = random_hair_style(H.gender, head_organ.species.name) - if(head_organ.species.name in tmp_facial_hair_style.species_allowed) //If 'Very Long Beard' is a style the person's species can have, give it to them. + head_organ.h_style = random_hair_style(H.gender, head_organ.dna.species2.name) + if(head_organ.dna.species2.name in tmp_facial_hair_style.species_allowed) //If 'Very Long Beard' is a style the person's species can have, give it to them. head_organ.f_style = "Very Long Beard" else //Otherwise, give them a random facial hair style. - head_organ.f_style = random_facial_hair_style(H.gender, head_organ.species.name) + head_organ.f_style = random_facial_hair_style(H.gender, head_organ.dna.species2.name) H.update_hair() H.update_fhair() if(!H.wear_mask || H.wear_mask && !istype(H.wear_mask, /obj/item/clothing/mask/fakemoustache)) diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 305bbb2c603..fb02fd83a78 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -33,7 +33,7 @@ var/mob/living/carbon/human/H = HA if(!istype(H)) H = owner - var/icon/cybereyes_icon = new /icon('icons/mob/human_face.dmi', H.species.eyes) + var/icon/cybereyes_icon = new /icon('icons/mob/human_face.dmi', H.dna.species2.eyes) cybereyes_icon.Blend(eye_colour, ICON_ADD) // Eye implants override native DNA eye color return cybereyes_icon diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 99bc996dce2..187e2cd44ca 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -315,7 +315,6 @@ name = "plasma filter" desc = "A spongy rib-shaped mass for filtering plasma from the air." icon_state = "lungs-plasma" - species = "Plasmaman" safe_oxygen_min = 0 //We don't breath this safe_toxins_min = 16 //We breathe THIS! @@ -324,7 +323,6 @@ /obj/item/organ/internal/lungs/vox name = "Vox lungs" desc = "They're filled with dust....wow." - species = "Vox" safe_oxygen_min = 0 //We don't breathe this safe_oxygen_max = 1 //This is toxic to us @@ -333,7 +331,6 @@ /obj/item/organ/internal/lungs/drask icon = 'icons/obj/surgery_drask.dmi' - species = "Drask" cold_message = "an invigorating coldness" cold_level_3_threshold = 60 diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index c2487503bfa..5f159390460 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -19,7 +19,6 @@ // links chemical IDs to number of ticks for which they'll stay in the blood germ_level = 0 var/datum/dna/dna - var/datum/species/species = "Human" // Stuff for tracking if this is on a tile with an open freezer or not var/last_freezer_update_time = 0 @@ -44,15 +43,13 @@ /obj/item/organ/proc/update_health() return -/obj/item/organ/New(var/mob/living/carbon/holder) +/obj/item/organ/New(mob/living/carbon/holder) ..(holder) if(!max_damage) max_damage = min_broken_damage * 2 if(istype(holder)) - species = all_species["Human"] if(holder.dna) dna = holder.dna.Clone() - species = all_species[dna.species] else log_runtime(EXCEPTION("[holder] spawned without a proper DNA."), holder) var/mob/living/carbon/human/H = holder @@ -62,8 +59,7 @@ blood_DNA = list() blood_DNA[dna.unique_enzymes] = dna.b_type else - if(istext(species)) - species = all_species[species] + dna = new /datum/dna(null) /obj/item/organ/proc/set_dna(var/datum/dna/new_dna) if(new_dna) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index bd064a7d062..44e1f3dedb6 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -105,8 +105,8 @@ /obj/item/organ/external/New(var/mob/living/carbon/holder) ..() var/mob/living/carbon/human/H = holder - icobase = species.icobase - deform = species.deform + icobase = dna.species2.icobase + deform = dna.species2.deform if(istype(H)) replaced(H) sync_colour_to_human(H) diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index d1c1070b19d..344c1d1f0c4 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -16,7 +16,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/change_organ_icobase(var/new_icobase, var/new_deform, var/owner_sensitive) //Change the icobase/deform of this organ. If owner_sensitive is set, that means the proc won't mess with frankenstein limbs. if(owner_sensitive) //This and the below statements mean that the icobase/deform will only get updated if the limb is the same species as and is owned by the mob it's attached to. - if(species && owner.species && species.name != owner.species.name) + if(dna.species2 && owner.dna.species2 && dna.species2.name != owner.dna.species2.name) return if(dna.unique_enzymes != owner.dna.unique_enzymes) // This isn't MY arm return @@ -25,9 +25,9 @@ var/global/list/limb_icon_cache = list() deform = new_deform ? new_deform : deform /obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/H) - if(is_robotic() && !(species && species.name == "Machine")) //machine people get skin color + if(is_robotic() && !istype(dna.species2, /datum/species/machine)) //machine people get skin color return - if(species && H.species && species.name != H.species.name) + if(dna.species2 && H.dna.species2 && dna.species2.name != H.dna.species2.name) return if(dna.unique_enzymes != H.dna.unique_enzymes) // This isn't MY arm if(!(H.species.bodyflags & HAS_ICON_SKIN_TONE)) @@ -46,10 +46,10 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/sync_colour_to_dna() if(is_robotic()) return - if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && ((species.bodyflags & HAS_SKIN_TONE) || (species.bodyflags & HAS_ICON_SKIN_TONE))) + if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && ((dna.species2.bodyflags & HAS_SKIN_TONE) || (dna.species2.bodyflags & HAS_ICON_SKIN_TONE))) s_col = null s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE) - if(species.bodyflags & HAS_SKIN_COLOR) + if(dna.species2.bodyflags & HAS_SKIN_COLOR) s_tone = null s_col = rgb(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B)) @@ -64,11 +64,9 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/get_icon(skeletal, fat) // Kasparrov, you monster - if(istext(species)) - species = all_species[species] if(force_icon) mob_icon = new /icon(force_icon, "[icon_name]") - if(species && species.name == "Machine") //snowflake for IPC's, sorry. + if(istype(dna.species2, /datum/species/machine)) //snowflake for IPC's, sorry. if(s_col) mob_icon.Blend(s_col, ICON_ADD) else @@ -101,13 +99,13 @@ var/global/list/limb_icon_cache = list() if(!owner) return - if(species.has_organ["eyes"]) + if(dna.species2.has_organ["eyes"]) var/icon/eyes_icon = owner.get_eyecon() if(eyes_icon) mob_icon.Blend(eyes_icon, ICON_OVERLAY) overlays |= eyes_icon - if(owner.lip_style && (LIPS in species.species_traits)) + if(owner.lip_style && (LIPS in dna.species2.species_traits)) var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s") overlays |= lip_icon mob_icon.Blend(lip_icon, ICON_OVERLAY) @@ -115,7 +113,7 @@ var/global/list/limb_icon_cache = list() var/head_marking = owner.m_styles["head"] if(head_marking && head_marking != "None") var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking] - if(head_marking_style && head_marking_style.species_allowed && (species.name in head_marking_style.species_allowed) && head_marking_style.marking_location == "head") + if(head_marking_style && head_marking_style.species_allowed && (dna.species2.name in head_marking_style.species_allowed) && head_marking_style.marking_location == "head") var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s") if(head_marking_style.do_colouration) h_marking_s.Blend(owner.m_colours["head"], ICON_ADD) @@ -123,7 +121,7 @@ var/global/list/limb_icon_cache = list() if(ha_style) var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[ha_style] - if(head_accessory_style && head_accessory_style.species_allowed && (species.name in head_accessory_style.species_allowed)) + if(head_accessory_style && head_accessory_style.species_allowed && (dna.species2.name in head_accessory_style.species_allowed)) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") if(head_accessory_style.do_colouration) head_accessory_s.Blend(headacc_colour, ICON_ADD) @@ -131,9 +129,9 @@ var/global/list/limb_icon_cache = list() if(f_style) var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && ((facial_hair_style.species_allowed && (species.name in facial_hair_style.species_allowed)) || (src.species.bodyflags & ALL_RPARTS))) + if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species2.name in facial_hair_style.species_allowed)) || (dna.species2.bodyflags & ALL_RPARTS))) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(species.name == "Slime People") // I am el worstos + if(istype(dna.species2, /datum/species/slime)) // I am el worstos facial_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha. else if(facial_hair_style.do_colouration) facial_s.Blend(facial_colour, ICON_ADD) @@ -141,9 +139,9 @@ var/global/list/limb_icon_cache = list() if(h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR))) var/datum/sprite_accessory/hair_style = hair_styles_full_list[h_style] - if(hair_style && ((species.name in hair_style.species_allowed) || (src.species.bodyflags & ALL_RPARTS))) + if(hair_style && ((dna.species2.name in hair_style.species_allowed) || (dna.species2.bodyflags & ALL_RPARTS))) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(species.name == "Slime People") // I am el worstos + if(istype(dna.species2, /datum/species/slime)) // I am el worstos hair_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha. else if(hair_style.do_colouration) hair_s.Blend(hair_colour, ICON_ADD) @@ -184,7 +182,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/chest/get_icon_state(skeletal) var/result = ..() - if(fat && !skeletal && !is_robotic() && (CAN_BE_FAT in species.species_traits)) + if(fat && !skeletal && !is_robotic() && (CAN_BE_FAT in dna.species2.species_traits)) result[2] += "_fat" return result diff --git a/code/modules/surgery/organs/subtypes/abductor.dm b/code/modules/surgery/organs/subtypes/abductor.dm index 6fd234bc501..58efd0094ed 100644 --- a/code/modules/surgery/organs/subtypes/abductor.dm +++ b/code/modules/surgery/organs/subtypes/abductor.dm @@ -1,4 +1,3 @@ /obj/item/organ/internal/eyes/abductor name = "abductor eyeballs" - dark_view = 3 - species = "Abductor" + dark_view = 3 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index 951ca862317..173e3fd7977 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -6,7 +6,6 @@ amputation_point = "trunk" encased = null gendered_icon = 0 - species = "Diona" /obj/item/organ/external/groin/diona name = "fork" @@ -14,7 +13,6 @@ cannot_break = 1 amputation_point = "lower trunk" gendered_icon = 0 - species = "Diona" /obj/item/organ/external/arm/diona name = "left upper tendril" @@ -22,7 +20,6 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "upper left trunk" - species = "Diona" /obj/item/organ/external/arm/right/diona name = "right upper tendril" @@ -30,7 +27,6 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "upper right trunk" - species = "Diona" /obj/item/organ/external/leg/diona name = "left lower tendril" @@ -38,7 +34,6 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "lower left fork" - species = "Diona" /obj/item/organ/external/leg/right/diona name = "right lower tendril" @@ -46,7 +41,6 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "lower right fork" - species = "Diona" /obj/item/organ/external/foot/diona name = "left foot" @@ -54,7 +48,6 @@ min_broken_damage = 10 cannot_break = 1 amputation_point = "branch" - species = "Diona" /obj/item/organ/external/foot/right/diona name = "right foot" @@ -62,19 +55,16 @@ min_broken_damage = 10 cannot_break = 1 amputation_point = "branch" - species = "Diona" /obj/item/organ/external/hand/diona name = "left grasper" cannot_break = 1 amputation_point = "branch" - species = "Diona" /obj/item/organ/external/hand/right/diona name = "right grasper" cannot_break = 1 amputation_point = "branch" - species = "Diona" /obj/item/organ/external/head/diona max_damage = 50 @@ -83,7 +73,6 @@ encased = null amputation_point = "upper trunk" gendered_icon = 0 - species = "Diona" //DIONA ORGANS. /* /obj/item/organ/external/diona/removed() @@ -101,31 +90,26 @@ name = "neural strata" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - species = "Diona" /obj/item/organ/internal/brain/diona // Turns into a nymph instantly, no transplanting possible. name = "gas bladder" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - species = "Diona" /obj/item/organ/internal/kidneys/diona // Turns into a nymph instantly, no transplanting possible. name = "polyp segment" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - species = "Diona" /obj/item/organ/internal/appendix/diona // Turns into a nymph instantly, no transplanting possible. name = "anchoring ligament" icon = 'icons/obj/objects.dmi' icon_state = "nymph" - species = "Diona" /obj/item/organ/internal/eyes/diona // Turns into a nymph instantly, no transplanting possible. name = "receptor node" icon = 'icons/mob/alien.dmi' icon_state = "claw" - species = "Diona" //TODO:Make absorb rads on insert @@ -133,15 +117,4 @@ name = "nutrient vessel" icon = 'icons/mob/alien.dmi' icon_state = "claw" - alcohol_intensity = 0.5 - species = "Diona" - -//TODO:Make absorb light on insert. - -/*/obj/item/organ/diona/removed(var/mob/living/user) - var/mob/living/carbon/human/H = owner - ..() - if(!istype(H) || !H.bodyparts || !H.bodyparts.len) - H.death() - if(prob(50) && spawn_diona_nymph_from_organ(src)) - qdel(src) */ + alcohol_intensity = 0.5 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/drask.dm b/code/modules/surgery/organs/subtypes/drask.dm index 8560d2408ec..6e11cf2993e 100644 --- a/code/modules/surgery/organs/subtypes/drask.dm +++ b/code/modules/surgery/organs/subtypes/drask.dm @@ -4,31 +4,26 @@ icon = 'icons/obj/surgery_drask.dmi' icon_state = "innards" desc = "A greenish, slightly translucent organ. It is extremely cold." - species = "Drask" /obj/item/organ/internal/heart/drask name = "drask heart" icon = 'icons/obj/surgery_drask.dmi' parent_organ = "head" - species = "Drask" /obj/item/organ/internal/liver/drask name = "metabolic strainer" icon = 'icons/obj/surgery_drask.dmi' icon_state = "kidneys" alcohol_intensity = 0.8 - species = "Drask" /obj/item/organ/internal/brain/drask icon = 'icons/obj/surgery_drask.dmi' icon_state = "brain2" mmi_icon = 'icons/obj/surgery_drask.dmi' mmi_icon_state = "mmi_full" - species = "Drask" /obj/item/organ/internal/eyes/drask name = "drask eyeballs" icon = 'icons/obj/surgery_drask.dmi' desc = "Drask eyes. They look even stranger disembodied" - dark_view = 5 - species = "Drask" + dark_view = 5 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/grey.dm b/code/modules/surgery/organs/subtypes/grey.dm index 6c06da373b7..177e4ae5be1 100644 --- a/code/modules/surgery/organs/subtypes/grey.dm +++ b/code/modules/surgery/organs/subtypes/grey.dm @@ -1,11 +1,9 @@ /obj/item/organ/internal/liver/grey alcohol_intensity = 1.6 - species = "Grey" /obj/item/organ/internal/brain/grey icon_state = "brain-x" mmi_icon_state = "mmi_alien" - species = "Grey" /obj/item/organ/internal/brain/grey/insert(var/mob/living/carbon/M, var/special = 0) ..() @@ -17,5 +15,4 @@ /obj/item/organ/internal/eyes/grey name = "grey eyeballs" - dark_view = 5 - species = "Grey" + dark_view = 5 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/kidan.dm b/code/modules/surgery/organs/subtypes/kidan.dm index 37fd74a6d2a..d8fc67cc542 100644 --- a/code/modules/surgery/organs/subtypes/kidan.dm +++ b/code/modules/surgery/organs/subtypes/kidan.dm @@ -1,6 +1,5 @@ /obj/item/organ/internal/liver/kidan alcohol_intensity = 0.5 - species = "Kidan" #define KIDAN_LANTERN_HUNGERCOST 0.5 #define KIDAN_LANTERN_MINHUNGER 150 diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 589ade0e7de..e51d443bc72 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -5,7 +5,6 @@ min_broken_damage = 30 encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/head/ipc/New() robotize("Morpheus Cyberkinetics") @@ -14,7 +13,6 @@ /obj/item/organ/external/chest/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/chest/ipc/New() robotize("Morpheus Cyberkinetics") @@ -23,7 +21,6 @@ /obj/item/organ/external/groin/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/groin/ipc/New() robotize("Morpheus Cyberkinetics") @@ -32,7 +29,6 @@ /obj/item/organ/external/arm/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/arm/ipc/New() robotize("Morpheus Cyberkinetics") @@ -41,7 +37,6 @@ /obj/item/organ/external/arm/right/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/arm/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -49,7 +44,6 @@ /obj/item/organ/external/leg/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/leg/ipc/New() robotize("Morpheus Cyberkinetics") @@ -58,7 +52,6 @@ /obj/item/organ/external/leg/right/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/leg/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -67,7 +60,6 @@ /obj/item/organ/external/foot/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/foot/ipc/New() robotize("Morpheus Cyberkinetics") @@ -76,7 +68,6 @@ /obj/item/organ/external/foot/right/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/foot/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -85,7 +76,6 @@ /obj/item/organ/external/hand/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/hand/ipc/New() robotize("Morpheus Cyberkinetics") @@ -94,7 +84,6 @@ /obj/item/organ/external/hand/right/ipc encased = null status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/external/hand/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -110,7 +99,6 @@ slot = "heart" vital = TRUE status = ORGAN_ROBOT - species = "Machine" /obj/item/organ/internal/cell/New() robotize() @@ -121,7 +109,6 @@ icon = 'icons/obj/robot_component.dmi' icon_state = "camera" status = ORGAN_ROBOT - species = "Machine" // dead_icon = "camera_broken" weld_proof = 1 diff --git a/code/modules/surgery/organs/subtypes/nucleation.dm b/code/modules/surgery/organs/subtypes/nucleation.dm index 4223834501d..3be564fc800 100644 --- a/code/modules/surgery/organs/subtypes/nucleation.dm +++ b/code/modules/surgery/organs/subtypes/nucleation.dm @@ -3,7 +3,6 @@ name = "nucleation organ" icon = 'icons/obj/surgery.dmi' desc = "A crystalized human organ. /red It has a strangely iridescent glow." - species = "Nucleation" /obj/item/organ/internal/nucleation/resonant_crystal name = "resonant crystal" @@ -11,7 +10,6 @@ organ_tag = "resonant crystal" parent_organ = "head" slot = "res_crystal" - species = "Nucleation" /obj/item/organ/internal/nucleation/strange_crystal name = "strange crystal" @@ -19,14 +17,12 @@ organ_tag = "strange crystal" parent_organ = "chest" slot = "heart" - species = "Nucleation" /obj/item/organ/internal/eyes/luminescent_crystal name = "luminescent eyes" icon_state = "crystal-eyes" organ_tag = "luminescent eyes" light_color = "#1C1C00" - species = "Nucleation" /obj/item/organ/internal/eyes/luminescent_crystal/New() set_light(2) @@ -35,5 +31,4 @@ /obj/item/organ/internal/brain/crystal name = "crystallized brain" icon_state = "crystal-brain" - organ_tag = "crystallized brain" - species = "Nucleation" + organ_tag = "crystallized brain" \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/shadow.dm b/code/modules/surgery/organs/subtypes/shadow.dm index f81fc54bfb1..26a0bc50577 100644 --- a/code/modules/surgery/organs/subtypes/shadow.dm +++ b/code/modules/surgery/organs/subtypes/shadow.dm @@ -1,4 +1,3 @@ /obj/item/organ/internal/eyes/shadow name = "dark orbs" - dark_view = 8 - species = "Shadow" + dark_view = 8 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/skrell.dm b/code/modules/surgery/organs/subtypes/skrell.dm index cb87d1c11c1..fd8a02f18d3 100644 --- a/code/modules/surgery/organs/subtypes/skrell.dm +++ b/code/modules/surgery/organs/subtypes/skrell.dm @@ -1,6 +1,5 @@ /obj/item/organ/internal/liver/skrell alcohol_intensity = 4 - species = "Skrell" /obj/item/organ/internal/headpocket name = "headpocket" @@ -10,7 +9,6 @@ w_class = WEIGHT_CLASS_TINY parent_organ = "head" slot = "headpocket" - species = "Skrell" actions_types = list(/datum/action/item_action/organ_action/toggle) var/obj/item/storage/internal/pocket diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index a1313934037..1857fc5e45a 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -1,17 +1,14 @@ /obj/item/organ/internal/liver/tajaran alcohol_intensity = 1.4 - species = "Tajaran" /obj/item/organ/internal/eyes/tajaran name = "tajaran eyeballs" - species = "Tajaran" colourblind_matrix = MATRIX_TAJ_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. replace_colours = LIST_TAJ_REPLACE dark_view = 8 /obj/item/organ/internal/eyes/tajaran/farwa //Being the lesser form of Tajara, Farwas have an utterly incurable version of their colourblindness. name = "farwa eyeballs" - species = "Farwa" colourmatrix = MATRIX_TAJ_CBLIND dark_view = 8 replace_colours = LIST_TAJ_REPLACE diff --git a/code/modules/surgery/organs/subtypes/unathi.dm b/code/modules/surgery/organs/subtypes/unathi.dm index 0fb45319ce5..219ef0447e6 100644 --- a/code/modules/surgery/organs/subtypes/unathi.dm +++ b/code/modules/surgery/organs/subtypes/unathi.dm @@ -1,8 +1,6 @@ /obj/item/organ/internal/liver/unathi alcohol_intensity = 0.8 - species = "Unathi" /obj/item/organ/internal/eyes/unathi name = "unathi eyeballs" - dark_view = 3 - species = "Unathi" + dark_view = 3 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/vox.dm b/code/modules/surgery/organs/subtypes/vox.dm index f5b4b4edc07..7028d6f1fc2 100644 --- a/code/modules/surgery/organs/subtypes/vox.dm +++ b/code/modules/surgery/organs/subtypes/vox.dm @@ -1,6 +1,5 @@ /obj/item/organ/internal/liver/vox alcohol_intensity = 1.6 - species = "Vox" /obj/item/organ/internal/stack diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index be851c43486..959fbcc926c 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -1,18 +1,14 @@ /obj/item/organ/internal/liver/vulpkanin alcohol_intensity = 1.4 - species = "Vulpkanin" - /obj/item/organ/internal/eyes/vulpkanin name = "vulpkanin eyeballs" - species = "Vulpkanin" colourblind_matrix = MATRIX_VULP_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. replace_colours = LIST_VULP_REPLACE dark_view = 8 /obj/item/organ/internal/eyes/vulpkanin/wolpin //Being the lesser form of Vulpkanin, Wolpins have an utterly incurable version of their colourblindness. name = "wolpin eyeballs" - species = "Wolpin" colourmatrix = MATRIX_VULP_CBLIND dark_view = 8 - replace_colours = LIST_VULP_REPLACE + replace_colours = LIST_VULP_REPLACE \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/wryn.dm b/code/modules/surgery/organs/subtypes/wryn.dm index ee1a12fd1ab..ab30c16f61f 100644 --- a/code/modules/surgery/organs/subtypes/wryn.dm +++ b/code/modules/surgery/organs/subtypes/wryn.dm @@ -6,8 +6,6 @@ icon_state = "antennae" parent_organ = "head" slot = "hivenode" - species = "Wryn" /obj/item/organ/internal/eyes/wryn - dark_view = 3 - species = "Wryn" + dark_view = 3 \ No newline at end of file From aae5405d03397c5aba50fea0e6f6571cd2418d8d Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 17 Jul 2018 04:58:36 -0400 Subject: [PATCH 02/24] AGHHHHHHHHHHHHHHHHHHH WHATTT --- code/controllers/communications.dm | 2 +- code/datums/datacore.dm | 28 +-- code/datums/datumvars.dm | 4 +- code/datums/diseases/_MobProcs.dm | 2 +- .../diseases/advance/symptoms/voice_change.dm | 2 +- code/datums/diseases/kingstons.dm | 4 +- code/datums/diseases/transformation.dm | 6 +- code/datums/mind.dm | 2 +- code/datums/spells/lichdom.dm | 4 +- .../weather/weather_types/radiation_storm.dm | 2 +- code/game/dna/dna2.dm | 12 +- code/game/dna/dna2_domutcheck.dm | 4 +- code/game/dna/dna2_helpers.dm | 2 +- code/game/dna/dna_modifier.dm | 2 +- code/game/dna/genes/goon_disabilities.dm | 2 +- code/game/dna/genes/monkey.dm | 12 +- code/game/dna/genes/powers.dm | 2 +- code/game/dna/genes/vg_powers.dm | 28 +-- code/game/gamemodes/changeling/changeling.dm | 6 +- .../gamemodes/changeling/powers/humanform.dm | 2 +- .../gamemodes/changeling/powers/lesserform.dm | 2 +- .../gamemodes/changeling/powers/revive.dm | 2 +- .../gamemodes/changeling/powers/swap_form.dm | 2 +- .../gamemodes/changeling/powers/tiny_prick.dm | 6 +- .../gamemodes/changeling/powers/transform.dm | 2 +- code/game/gamemodes/cult/cult_items.dm | 2 +- code/game/gamemodes/heist/heist.dm | 2 +- .../miniantags/abduction/abduction.dm | 8 +- .../miniantags/abduction/abduction_gear.dm | 2 +- .../miniantags/abduction/abduction_surgery.dm | 2 +- .../gamemodes/miniantags/abduction/gland.dm | 4 +- .../abduction/machinery/experiment.dm | 6 +- code/game/gamemodes/nuclear/nuclear.dm | 10 +- code/game/gamemodes/objective.dm | 4 +- .../shadowling/shadowling_abilities.dm | 4 +- .../special_shadowling_abilities.dm | 2 +- code/game/gamemodes/vampire/vampire_powers.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 14 +- code/game/gamemodes/wizard/wizard.dm | 2 +- code/game/jobs/job/job.dm | 6 +- code/game/machinery/Sleeper.dm | 8 +- code/game/machinery/adv_med.dm | 2 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/Operating.dm | 6 +- code/game/machinery/computer/cloning.dm | 8 +- code/game/machinery/dye_generator.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/machinery/poolcontroller.dm | 2 +- code/game/machinery/transformer.dm | 8 +- code/game/objects/effects/mines.dm | 2 +- .../objects/items/devices/laserpointer.dm | 2 +- code/game/objects/items/weapons/cosmetics.dm | 4 +- .../objects/items/weapons/dna_injector.dm | 4 +- .../objects/items/weapons/dnascrambler.dm | 4 +- code/game/objects/items/weapons/scissors.dm | 16 +- code/game/objects/items/weapons/twohanded.dm | 2 +- code/game/objects/items/weapons/whetstone.dm | 2 +- code/game/objects/structures/dresser.dm | 6 +- code/game/objects/structures/plasticflaps.dm | 2 +- code/game/response_team.dm | 6 +- code/game/verbs/suicide.dm | 4 +- code/modules/admin/topic.dm | 2 +- code/modules/admin/verbs/onlyone.dm | 6 +- code/modules/admin/verbs/onlyoneteam.dm | 6 +- code/modules/awaymissions/corpse.dm | 4 +- .../awaymissions/mission_code/wildwest.dm | 16 +- code/modules/client/preference/preferences.dm | 8 +- code/modules/clothing/clothing.dm | 8 +- .../clothing/spacesuits/miscellaneous.dm | 2 +- .../clothing/under/accessories/accessory.dm | 2 +- code/modules/customitems/item_defines.dm | 4 +- code/modules/events/disease_outbreak.dm | 2 +- code/modules/events/mass_hallucination.dm | 2 +- code/modules/food_and_drinks/food/snacks.dm | 8 +- code/modules/martial_arts/brawling.dm | 2 +- code/modules/martial_arts/martial.dm | 6 +- code/modules/martial_arts/mimejutsu.dm | 2 +- .../mining/lavaland/loot/ashdragon_loot.dm | 2 +- .../mining/lavaland/loot/colossus_loot.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 2 +- code/modules/mob/living/autohiss.dm | 2 +- code/modules/mob/living/carbon/brain/MMI.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 2 +- .../mob/living/carbon/human/appearance.dm | 44 ++-- code/modules/mob/living/carbon/human/death.dm | 6 +- code/modules/mob/living/carbon/human/emote.dm | 34 +-- .../mob/living/carbon/human/examine.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 227 ++++++++---------- .../mob/living/carbon/human/human_damage.dm | 60 ++--- .../mob/living/carbon/human/human_defense.dm | 6 +- .../mob/living/carbon/human/human_movement.dm | 10 +- .../mob/living/carbon/human/human_organs.dm | 4 +- .../carbon/human/interactive/interactive.dm | 6 +- .../mob/living/carbon/human/inventory.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 72 +++--- code/modules/mob/living/carbon/human/login.dm | 2 +- code/modules/mob/living/carbon/human/say.dm | 8 +- code/modules/mob/living/carbon/human/shock.dm | 2 +- .../mob/living/carbon/human/species/monkey.dm | 10 +- .../living/carbon/human/species/species.dm | 8 +- .../living/carbon/human/species/station.dm | 20 +- .../mob/living/carbon/human/status_procs.dm | 16 +- .../mob/living/carbon/human/update_icons.dm | 152 ++++++------ code/modules/mob/living/carbon/slime/life.dm | 2 +- code/modules/mob/living/carbon/superheroes.dm | 2 +- code/modules/mob/living/living.dm | 6 +- .../mob/living/simple_animal/bot/medbot.dm | 2 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../living/simple_animal/friendly/diona.dm | 8 +- .../living/simple_animal/hostile/hostile.dm | 2 +- .../hostile/terror_spiders/terror_spiders.dm | 2 +- code/modules/mob/login.dm | 4 +- code/modules/mob/mob_grab.dm | 2 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/mob/new_player/new_player.dm | 4 +- .../mob/new_player/preferences_setup.dm | 10 +- code/modules/nano/modules/human_appearance.dm | 32 +-- code/modules/paperwork/photocopier.dm | 2 +- code/modules/projectiles/projectile.dm | 2 +- code/modules/projectiles/projectile/magic.dm | 21 +- .../modules/projectiles/projectile/special.dm | 4 +- code/modules/reagents/chemistry/holder.dm | 18 +- .../reagents/chemistry/reagents/food.dm | 4 +- .../reagents/chemistry/reagents/medicine.dm | 2 +- .../reagents/chemistry/reagents/misc.dm | 14 +- .../reagents/chemistry/reagents/toxins.dm | 6 +- code/modules/surgery/helpers.dm | 2 +- code/modules/surgery/limb_reattach.dm | 4 +- code/modules/surgery/organs/augments_eyes.dm | 2 +- code/modules/surgery/organs/blood.dm | 22 +- code/modules/surgery/organs/eyes.dm | 2 +- code/modules/surgery/organs/heart.dm | 6 +- code/modules/surgery/organs/lungs.dm | 8 +- code/modules/surgery/organs/organ.dm | 4 +- code/modules/surgery/organs/organ_external.dm | 12 +- code/modules/surgery/organs/organ_icon.dm | 38 +-- code/modules/surgery/organs/pain.dm | 4 +- code/modules/surgery/robotics.dm | 6 +- code/modules/surgery/surgery.dm | 2 +- code/modules/vr/vr_controller.dm | 2 +- 140 files changed, 666 insertions(+), 696 deletions(-) diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 9b056472bde..177e670d6c9 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -351,7 +351,7 @@ var/global/datum/controller/radio/radio_controller /datum/signal/proc/get_race(mob/M) if(ishuman(M)) var/mob/living/carbon/human/H = M - . = H.species.name + . = H.dna.species.name else if(isbrain(M)) var/mob/living/carbon/brain/B = M . = B.get_race() diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 0f76efb6d55..ebacefbcc49 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -357,7 +357,7 @@ var/record_id_num = 1001 temp = new /icon(icobase, "groin_[g]") preview_icon.Blend(temp, ICON_OVERLAY) var/head = "head" - if(head_organ.alt_head && head_organ.dna.species2.bodyflags & HAS_ALT_HEADS) + if(head_organ.alt_head && head_organ.dna.species.bodyflags & HAS_ALT_HEADS) var/datum/sprite_accessory/alt_heads/alternate_head = alt_heads_list[head_organ.alt_head] if(alternate_head.icon_state) head = alternate_head.icon_state @@ -368,7 +368,7 @@ var/record_id_num = 1001 if(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/tail)) temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state) preview_icon.Blend(temp, ICON_OVERLAY) - else if(H.tail && H.species.bodyflags & HAS_TAIL) + else if(H.tail && H.dna.species.bodyflags & HAS_TAIL) temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) @@ -376,19 +376,19 @@ var/record_id_num = 1001 preview_icon.Blend(E.get_icon(), ICON_OVERLAY) // Skin tone - if(H.species.bodyflags & HAS_SKIN_TONE) + if(H.dna.species.bodyflags & HAS_SKIN_TONE) if(H.s_tone >= 0) preview_icon.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD) else preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) // Proper Skin color - Fix, you can't have HAS_SKIN_TONE *and* HAS_SKIN_COLOR - if(H.species.bodyflags & HAS_SKIN_COLOR) + if(H.dna.species.bodyflags & HAS_SKIN_COLOR) preview_icon.Blend(H.skin_colour, ICON_ADD) //Tail Markings var/icon/t_marking_s - if(H.species.bodyflags & HAS_TAIL_MARKINGS) + if(H.dna.species.bodyflags & HAS_TAIL_MARKINGS) var/tail_marking = H.m_styles["tail"] var/datum/sprite_accessory/tail_marking_style = marking_styles_list[tail_marking] if(tail_marking_style && tail_marking_style.species_allowed) @@ -398,8 +398,8 @@ var/record_id_num = 1001 preview_icon.Blend(t_marking_s, ICON_OVERLAY) var/icon/face_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "bald_s") - if(!(H.species.bodyflags & NO_EYES)) - var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s") + if(!(H.dna.species.bodyflags & NO_EYES)) + var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.dna.species ? H.dna.species.eyes : "eyes_s") if(!eyes_organ) return eyes_s.Blend(eyes_organ.eye_colour, ICON_ADD) @@ -410,7 +410,7 @@ var/record_id_num = 1001 var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") // I'll want to make a species-specific proc for this sooner or later // But this'll do for now - if(istype(head_organ.dna.species2, /datum/species/slime)) + if(istype(head_organ.dna.species, /datum/species/slime)) hair_s.Blend("[H.skin_colour]A0", ICON_AND) //A0 = 160 alpha. else hair_s.Blend(head_organ.hair_colour, ICON_ADD) @@ -424,7 +424,7 @@ var/record_id_num = 1001 face_s.Blend(hair_s, ICON_OVERLAY) //Head Accessory - if(head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY) + if(head_organ.dna.species.bodyflags & HAS_HEAD_ACCESSORY) var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style] if(head_accessory_style && head_accessory_style.species_allowed) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") @@ -434,7 +434,7 @@ var/record_id_num = 1001 var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[head_organ.f_style] if(facial_hair_style && facial_hair_style.species_allowed) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(istype(head_organ.dna.species2, /datum/species/slime)) + if(istype(head_organ.dna.species, /datum/species/slime)) facial_s.Blend("[H.skin_colour]A0", ICON_ADD) //A0 = 160 alpha. else facial_s.Blend(head_organ.facial_colour, ICON_ADD) @@ -448,15 +448,15 @@ var/record_id_num = 1001 face_s.Blend(facial_s, ICON_OVERLAY) //Markings - if((H.species.bodyflags & HAS_HEAD_MARKINGS) || (H.species.bodyflags & HAS_BODY_MARKINGS)) - if(H.species.bodyflags & HAS_BODY_MARKINGS) //Body markings. + if((H.dna.species.bodyflags & HAS_HEAD_MARKINGS) || (H.dna.species.bodyflags & HAS_BODY_MARKINGS)) + if(H.dna.species.bodyflags & HAS_BODY_MARKINGS) //Body markings. var/body_marking = H.m_styles["body"] var/datum/sprite_accessory/body_marking_style = marking_styles_list[body_marking] if(body_marking_style && body_marking_style.species_allowed) var/icon/b_marking_s = new/icon("icon" = body_marking_style.icon, "icon_state" = "[body_marking_style.icon_state]_s") b_marking_s.Blend(H.m_colours["body"], ICON_ADD) face_s.Blend(b_marking_s, ICON_OVERLAY) - if(H.species.bodyflags & HAS_HEAD_MARKINGS) //Head markings. + if(H.dna.species.bodyflags & HAS_HEAD_MARKINGS) //Head markings. var/head_marking = H.m_styles["head"] var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking] if(head_marking_style && head_marking_style.species_allowed) @@ -615,7 +615,7 @@ var/record_id_num = 1001 temp.Shift(EAST, H.body_accessory.pixel_x_offset) if(H.body_accessory.pixel_y_offset) temp.Shift(NORTH, H.body_accessory.pixel_y_offset) - if(H.species.bodyflags & HAS_SKIN_COLOR) + if(H.dna.species.bodyflags & HAS_SKIN_COLOR) temp.Blend(H.skin_colour, H.body_accessory.blend_mode) if(t_marking_s) temp.Blend(t_marking_s, ICON_OVERLAY) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 9526a3e671a..bbb9b1b1768 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -992,8 +992,8 @@ to_chat(usr, "Mob doesn't exist anymore") return - if(H.set_species(new_species)) - to_chat(usr, "Set species of [H] to [H.species].") + if(H.set_species(all_species[new_species])) + to_chat(usr, "Set species of [H] to [H.dna.species].") H.regenerate_icons() message_admins("[key_name_admin(usr)] has changed the species of [key_name_admin(H)] to [new_species]") log_admin("[key_name(usr)] has changed the species of [key_name(H)] to [new_species]") diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index e39a592bc3b..1bbba44f78b 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -134,7 +134,7 @@ /mob/living/carbon/human/CanContractDisease(datum/disease/D) - if((VIRUSIMMUNE in species.species_traits) && !D.bypasses_immunity) + if((VIRUSIMMUNE in dna.species.species_traits) && !D.bypasses_immunity) return 0 for(var/thing in D.required_organs) if(!((locate(thing) in bodyparts) || (locate(thing) in internal_organs))) diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index 8a90b848f22..8ba3ed64008 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -36,7 +36,7 @@ Bonus else if(ishuman(M)) var/mob/living/carbon/human/H = M - H.SetSpecialVoice(H.species.get_random_name(H.gender)) + H.SetSpecialVoice(H.dna.species.get_random_name(H.gender)) return diff --git a/code/datums/diseases/kingstons.dm b/code/datums/diseases/kingstons.dm index abad7dcf720..e65f5da3355 100644 --- a/code/datums/diseases/kingstons.dm +++ b/code/datums/diseases/kingstons.dm @@ -43,7 +43,7 @@ affected_mob.visible_message("[affected_mob]'s form contorts into something more feline!", \ "YOU TURN INTO A TAJARAN!") var/mob/living/carbon/human/catface = affected_mob - catface.set_species("Tajaran") + catface.set_species(/datum/species/tajaran) /datum/disease/kingstons/advanced @@ -57,7 +57,7 @@ permeability_mod = 0.75 desc = "If left untreated the subject will mutate to a different species." severity = BIOHAZARD - var/list/virspecies = list("Human", "Tajaran", "Unathi", "Skrell", "Vulpkanin")//no karma races sorrys. + var/list/virspecies = list(/datum/species/human, /datum/species/tajaran, /datum/species/unathi,/datum/species/skrell, /datum/species/vulpkanin) //no karma races sorrys. var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay") var/chosentype var/chosensuff diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 5546efe537e..8ffbcba22c9 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -194,13 +194,13 @@ if(1) if(ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob - if(H.species.name == "Slime People") + if(H.dna.species.name == "Slime People") stage = 5 if(3) if(ishuman(affected_mob)) var/mob/living/carbon/human/human = affected_mob - if(human.species.name != "Slime People") - human.set_species("Slime People") + if(human.dna.species.name != "Slime People") + human.set_species(/datum/species/slime) /datum/disease/transformation/corgi name = "The Barkening" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 3f62c8ffaed..667ad44e027 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1424,7 +1424,7 @@ var/mob/living/carbon/human/H = current - H.set_species("Abductor") + H.set_species(/datum/species/abductor) switch(role) if("Agent") diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm index 84c3a552c03..f1744e22550 100644 --- a/code/datums/spells/lichdom.dm +++ b/code/datums/spells/lichdom.dm @@ -68,7 +68,7 @@ lich.real_name = M.mind.name M.mind.transfer_to(lich) - lich.set_species("Skeleton") + lich.set_species(/datum/species/skeleton) to_chat(lich, "Your bones clatter and shutter as they're pulled back into this world!") charge_max += 600 var/mob/old_body = current_body @@ -122,7 +122,7 @@ current_body = M.mind.current if(ishuman(M)) var/mob/living/carbon/human/H = M - H.set_species("Skeleton") + H.set_species(/datum/species/skeleton) H.unEquip(H.wear_suit) H.unEquip(H.head) H.unEquip(H.shoes) diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index acd155e7560..a1c6a83da61 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -34,7 +34,7 @@ if(prob(40)) if(ishuman(L)) var/mob/living/carbon/human/H = L - if(!(RADIMMUNE in H.species.species_traits)) + if(!(RADIMMUNE in H.dna.species.species_traits)) if(prob(max(0, 100 - resist))) randmuti(H) // Applies bad mutation if(prob(50)) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 2d3fee8d4e9..cf335b5f7d6 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -99,7 +99,7 @@ var/global/list/bad_blocks[0] var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, - var/datum/species/species2 = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man) + var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man) // Make a copy of this strand. // USE THIS WHEN COPYING STUFF OR YOU'LL GET CORRUPTION! @@ -109,7 +109,7 @@ var/global/list/bad_blocks[0] new_dna.struc_enzymes_original=struc_enzymes_original // will make clone's SE the same as the original, do we want this? new_dna.b_type=b_type new_dna.real_name=real_name - new_dna.species2 = new species2.type + new_dna.species = new species.type for(var/b=1;b<=DNA_SE_LENGTH;b++) new_dna.SE[b]=SE[b] if(b<=DNA_UI_LENGTH) @@ -140,7 +140,7 @@ var/global/list/bad_blocks[0] // FIXME: Species-specific defaults pls var/obj/item/organ/external/head/H = character.get_organ("head") var/obj/item/organ/internal/eyes/eyes_organ = character.get_int_organ(/obj/item/organ/internal/eyes) - var/datum/species/S = character.species + var/datum/species/S = character.dna.species /*// Body Accessory if(!character.body_accessory) @@ -420,7 +420,7 @@ var/global/list/bad_blocks[0] data["UE"] = unique_enzymes data["SE"] = SE.Copy() // This is probably too lazy for my own good data["UI"] = UI.Copy() - data["species"] = species2.type // This works because `species` is a string, not a datum + data["species"] = species.type // This works because `species` is a string, not a datum // Because old DNA coders were insane or something data["b_type"] = b_type data["real_name"] = real_name @@ -433,10 +433,10 @@ var/global/list/bad_blocks[0] UI = data["UI"] UpdateUI() UpdateSE() - species2 = new data["species"] + species = new data["species"] b_type = data["b_type"] real_name = data["real_name"] // a nice hook for if/when we refactor species on dna /datum/dna/proc/get_species_name() - return species2.name + return species.name \ No newline at end of file diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm index f2ad2b2fe03..07979f40b7c 100644 --- a/code/game/dna/dna2_domutcheck.dm +++ b/code/game/dna/dna2_domutcheck.dm @@ -16,7 +16,7 @@ /proc/genemutcheck(var/mob/living/M, var/block, var/connected=null, var/flags=0) if(ishuman(M)) // Would've done this via species instead of type, but the basic mob doesn't have a species, go figure. var/mob/living/carbon/human/H = M - if(NO_DNA in H.species.species_traits) + if(NO_DNA in H.dna.species.species_traits) return if(!M) return @@ -42,7 +42,7 @@ var/defaultgenes // Do not mutate inherent species abilities if(ishuman(M)) var/mob/living/carbon/human/H = M - defaultgenes = H.species.default_genes + defaultgenes = H.dna.species.default_genes if((gene in defaultgenes) && gene_active) return diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 6c05dfd6f2b..d392ab303ca 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -133,7 +133,7 @@ var/mob/living/carbon/human/H = src var/obj/item/organ/external/head/head_organ = H.get_organ("head") var/obj/item/organ/internal/eyes/eye_organ = H.get_int_organ(/obj/item/organ/internal/eyes) - var/datum/species/S = H.species + var/datum/species/S = H.dna.species if(istype(head_organ)) dna.write_head_attributes(head_organ) if(istype(eye_organ)) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 93d9977b5e8..354536561c1 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -327,7 +327,7 @@ if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant - if(NO_DNA in H.species.species_traits) + if(NO_DNA in H.dna.species.species_traits) return 1 var/radiation_protection = occupant.run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.") diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm index e59dd3fc558..b39b31a1c5a 100644 --- a/code/game/dna/genes/goon_disabilities.dm +++ b/code/game/dna/genes/goon_disabilities.dm @@ -44,7 +44,7 @@ return 0 if(ishuman(M)) var/mob/living/carbon/human/H = M - if((RADIMMUNE in H.species.species_traits) && !(flags & MUTCHK_FORCED)) + if((RADIMMUNE in H.dna.species.species_traits) && !(flags & MUTCHK_FORCED)) return 0 return 1 diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index 666cb057635..c79e4168490 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -31,18 +31,18 @@ H.SetStunned(0) H.invisibility = initial(H.invisibility) - if(!H.species.primitive_form) //If the creature in question has no primitive set, this is going to be messy. + if(!H.dna.species.primitive_form) //If the creature in question has no primitive set, this is going to be messy. H.gib() return - H.set_species(H.species.primitive_form) + H.set_species(H.dna.species.primitive_form) QDEL_NULL(H.hud_used) if(H.client) H.hud_used = new /datum/hud/monkey(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) - to_chat(H, "You are now a [H.species.name].") + to_chat(H, "You are now a [H.dna.species.name].") return H @@ -69,11 +69,11 @@ H.SetStunned(0) H.invisibility = initial(H.invisibility) - if(!H.species.greater_form) //If the creature in question has no primitive set, this is going to be messy. + if(!H.dna.species.greater_form) //If the creature in question has no primitive set, this is going to be messy. H.gib() return - H.set_species(H.species.greater_form) + H.set_species(H.dna.species.greater_form) H.real_name = H.dna.real_name H.name = H.real_name @@ -82,6 +82,6 @@ if(H.client) H.hud_used = new /datum/hud/human(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) - to_chat(H, "You are now a [H.species.name].") + to_chat(H, "You are now a [H.dna.species.name].") return H diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index e9d69c2b904..1e5e6b66842 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -39,7 +39,7 @@ return 0 if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && H.species.slowdown && !(flags & MUTCHK_FORCED)) + if(H.dna.species && H.dna.species.slowdown && !(flags & MUTCHK_FORCED)) return 0 return 1 diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index afb918fe72b..f9e8620bef1 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -50,7 +50,7 @@ M.change_eye_color(new_eyes) //Alt heads. - if(head_organ.dna.species2.bodyflags & HAS_ALT_HEADS) + if(head_organ.dna.species.bodyflags & HAS_ALT_HEADS) var/list/valid_alt_heads = M.generate_valid_alt_heads() var/new_alt_head = input("Please select alternate head", "Character Generation", head_organ.alt_head) as null|anything in valid_alt_heads if(new_alt_head) @@ -92,7 +92,7 @@ M.change_facial_hair_color(new_facial, 1) //Head accessory. - if(head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY) + if(head_organ.dna.species.bodyflags & HAS_HEAD_ACCESSORY) var/list/valid_head_accessories = M.generate_valid_head_accessories() var/new_head_accessory = input("Please select head accessory style", "Character Generation", head_organ.ha_style) as null|anything in valid_head_accessories if(new_head_accessory) @@ -103,7 +103,7 @@ M.change_head_accessory_color(new_head_accessory_colour) //Body accessory. - if(M.species.tail && M.species.bodyflags & HAS_TAIL) + if(M.dna.species.tail && M.dna.species.bodyflags & HAS_TAIL) var/list/valid_body_accessories = M.generate_valid_body_accessories() if(valid_body_accessories.len > 1) //By default valid_body_accessories will always have at the very least a 'none' entry populating the list, even if the user's species is not present in any of the list items. var/new_body_accessory = input("Please select body accessory style", "Character Generation", M.body_accessory) as null|anything in valid_body_accessories @@ -111,7 +111,7 @@ M.change_body_accessory(new_body_accessory) //Head markings. - if(M.species.bodyflags & HAS_HEAD_MARKINGS) + if(M.dna.species.bodyflags & HAS_HEAD_MARKINGS) var/list/valid_head_markings = M.generate_valid_markings("head") var/new_marking = input("Please select head marking style", "Character Generation", M.m_styles["head"]) as null|anything in valid_head_markings if(new_marking) @@ -121,7 +121,7 @@ if(new_marking_colour) M.change_marking_color(new_marking_colour, "head") //Body markings. - if(M.species.bodyflags & HAS_BODY_MARKINGS) + if(M.dna.species.bodyflags & HAS_BODY_MARKINGS) var/list/valid_body_markings = M.generate_valid_markings("body") var/new_marking = input("Please select body marking style", "Character Generation", M.m_styles["body"]) as null|anything in valid_body_markings if(new_marking) @@ -131,7 +131,7 @@ if(new_marking_colour) M.change_marking_color(new_marking_colour, "body") //Tail markings. - if(M.species.bodyflags & HAS_TAIL_MARKINGS) + if(M.dna.species.bodyflags & HAS_TAIL_MARKINGS) var/list/valid_tail_markings = M.generate_valid_markings("tail") var/new_marking = input("Please select tail marking style", "Character Generation", M.m_styles["tail"]) as null|anything in valid_tail_markings if(new_marking) @@ -142,7 +142,7 @@ M.change_marking_color(new_marking_colour, "tail") //Skin tone. - if(M.species.bodyflags & HAS_SKIN_TONE) + if(M.dna.species.bodyflags & HAS_SKIN_TONE) var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", M.s_tone) as null|text if(!new_tone) new_tone = 35 @@ -150,11 +150,11 @@ new_tone = 35 - max(min(round(text2num(new_tone)), 220), 1) M.change_skin_tone(new_tone) - if(M.species.bodyflags & HAS_ICON_SKIN_TONE) - var/prompt = "Please select skin tone: 1-[M.species.icon_skin_tones.len] (" - for(var/i = 1 to M.species.icon_skin_tones.len) - prompt += "[i] = [M.species.icon_skin_tones[i]]" - if(i != M.species.icon_skin_tones.len) + if(M.dna.species.bodyflags & HAS_ICON_SKIN_TONE) + var/prompt = "Please select skin tone: 1-[M.dna.species.icon_skin_tones.len] (" + for(var/i = 1 to M.dna.species.icon_skin_tones.len) + prompt += "[i] = [M.dna.species.icon_skin_tones[i]]" + if(i != M.dna.species.icon_skin_tones.len) prompt += ", " prompt += ")" @@ -162,11 +162,11 @@ if(!new_tone) new_tone = 0 else - new_tone = max(min(round(text2num(new_tone)), M.species.icon_skin_tones.len), 1) + new_tone = max(min(round(text2num(new_tone)), M.dna.species.icon_skin_tones.len), 1) M.change_skin_tone(new_tone) //Skin colour. - if(M.species.bodyflags & HAS_SKIN_COLOR) + if(M.dna.species.bodyflags & HAS_SKIN_COLOR) var/new_body_colour = input("Please select body colour.", "Character Generation", M.skin_colour) as null|color if(new_body_colour) M.change_skin_color(new_body_colour) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index bab5594b572..477a0de2573 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -112,7 +112,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" if(identity_theft.target && identity_theft.target.current) identity_theft.target_real_name = kill_objective.target.current.real_name //Whoops, forgot this. var/mob/living/carbon/human/H = identity_theft.target.current - if(can_absorb_species(H.species)) // For species that can't be absorbed - should default to an escape objective + if(can_absorb_species(H.dna.species)) // For species that can't be absorbed - should default to an escape objective identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [identity_theft.target_real_name], the [identity_theft.target.assigned_role] while wearing [identity_theft.target.p_their()] identification card." changeling.objectives += identity_theft else @@ -273,7 +273,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" /datum/changeling/proc/find_dna(datum/dna/tDNA) for(var/datum/dna/D in (absorbed_dna + protected_dna)) - if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species2.type == D.species2.type) + if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species.type == D.species.type) return D return null @@ -316,7 +316,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" to_chat(user, "DNA of [target] is ruined beyond usability!") return - if(NO_DNA in T.species.species_traits) + if(NO_DNA in T.dna.species.species_traits) to_chat(user, "This creature does not have DNA!") return diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index 429954ce539..fb3012cd274 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -29,7 +29,7 @@ user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name if(istype(user)) - user.set_species(chosen_dna.species2) + user.set_species(chosen_dna.species) domutcheck(user,null,MUTCHK_FORCED) user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 3d3b7f2bc07..d6b4870c50a 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -17,7 +17,7 @@ var/mob/living/carbon/human/H = user - if(!istype(H) || !H.species.primitive_form) + if(!istype(H) || !H.dna.species.primitive_form) to_chat(H, "We cannot perform this ability in this form!") return diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index b3881ee54fb..3e03d49dc49 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -31,7 +31,7 @@ H.traumatic_shock = 0 H.shock_stage = 0 H.next_pain_time = 0 - H.species.create_organs(H) + H.dna.species.create_organs(H) // Now that recreating all organs is necessary, the rest of this organ stuff probably // isn't, but I don't want to remove it, just in case. for(var/organ_name in H.bodyparts_by_name) diff --git a/code/game/gamemodes/changeling/powers/swap_form.dm b/code/game/gamemodes/changeling/powers/swap_form.dm index 9015677c70e..c40a33284a1 100644 --- a/code/game/gamemodes/changeling/powers/swap_form.dm +++ b/code/game/gamemodes/changeling/powers/swap_form.dm @@ -17,7 +17,7 @@ if((NOCLONE || SKELETON || HUSK) in target.mutations) to_chat(user, "DNA of [target] is ruined beyond usability!") return - if(!istype(target) || issmall(target) || NO_DNA in target.species.species_traits) + if(!istype(target) || issmall(target) || NO_DNA in target.dna.species.species_traits) to_chat(user, "[target] is not compatible with this ability.") return return 1 diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index cbbac28dbcb..082ec9bbe54 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -80,7 +80,7 @@ selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") if(!selected_dna) return - if((NOTRANSSTING in selected_dna.species2.species_traits) || selected_dna.species2.is_small) + if((NOTRANSSTING in selected_dna.species.species_traits) || selected_dna.species.is_small) to_chat(user, "The selected DNA is incompatible with our sting.") return ..() @@ -93,7 +93,7 @@ return FALSE if(ishuman(target)) var/mob/living/carbon/human/H = target - if(NO_DNA in H.species.species_traits) + if(NO_DNA in H.dna.species.species_traits) to_chat(user, "This won't work on a creature without DNA.") return FALSE return TRUE @@ -115,7 +115,7 @@ target.real_name = NewDNA.real_name var/mob/living/carbon/human/H = target if(istype(H)) - H.set_species() + H.set_species(NewDNA.species) target.UpdateAppearance() domutcheck(target, null) feedback_add_details("changeling_powers","TS") diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 7e89a08c690..b7c8abefd1d 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -17,7 +17,7 @@ user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name if(ishuman(user)) - user.set_species(chosen_dna.species2) + user.set_species(chosen_dna.species) domutcheck(user, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 2edbfca609f..a223f2e5125 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -50,7 +50,7 @@ ..() if(ishuman(target)) var/mob/living/carbon/human/H = target - if((H.stat != DEAD) && !(NO_BLOOD in H.species.species_traits)) + if((H.stat != DEAD) && !(NO_BLOOD in H.dna.species.species_traits)) H.bleed(50) /obj/item/restraints/legcuffs/bola/cult diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 3b908952de7..4cbe909ef84 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -101,7 +101,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' vox.name = vox.real_name newraider.name = vox.name vox.age = rand(12,20) - vox.set_species("Vox") + vox.set_species(/datum/species/vox) vox.s_tone = rand(1, 6) vox.languages = list() // Removing language from chargen. vox.flavor_text = "" diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 1c6dc7d3022..d94ea557744 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -112,7 +112,7 @@ L = agent_landmarks[team_number] H.forceMove(get_turf(L)) H.body_accessory = null - H.set_species("Abductor") + H.set_species(/datum/species/abductor) H.mind.abductor.agent = 1 H.mind.abductor.team = team_number H.real_name = team_name + " Agent" @@ -128,7 +128,7 @@ L = scientist_landmarks[team_number] H.forceMove(get_turf(L)) H.body_accessory = null - H.set_species("Abductor") + H.set_species(/datum/species/abductor) H.mind.abductor.scientist = 1 H.mind.abductor.team = team_number H.real_name = team_name + " Scientist" @@ -165,7 +165,7 @@ L = agent_landmarks[team_number] H.forceMove(get_turf(L)) H.body_accessory = null - H.set_species("Abductor") + H.set_species(/datum/species/abductor) H.mind.abductor.agent = 1 H.mind.abductor.team = team_number H.real_name = team_name + " Agent" @@ -179,7 +179,7 @@ L = scientist_landmarks[team_number] H.forceMove(get_turf(L)) H.body_accessory = null - H.set_species("Abductor") + H.set_species(/datum/species/abductor) H.mind.abductor.scientist = 1 H.mind.abductor.team = team_number H.real_name = team_name + " Scientist" diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 9a43df56926..99e93288645 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -432,7 +432,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(ishuman(L)) var/mob/living/carbon/human/H = L - species = "[H.species.name]" + species = "[H.dna.species.name]" if(L.mind && L.mind.changeling) species = "Changeling lifeform" var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index d07381b7cce..3ecb33466c8 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -37,7 +37,7 @@ /datum/surgery_step/internal/extract_organ/end_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/mob/living/carbon/human/AB = target - if(NO_INTORGANS in AB.species.species_traits) + if(NO_INTORGANS in AB.dna.species.species_traits) user.visible_message("[user] prepares [target]'s [target_zone] for further dissection!", "You prepare [target]'s [target_zone] for further dissection.") return TRUE if(IC) diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 8e7219e401a..9b03311d88c 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -108,7 +108,7 @@ /obj/item/organ/internal/heart/gland/pop/activate() to_chat(owner, "You feel unlike yourself.") - var/species = pick("Unathi","Skrell","Diona","Tajaran","Vulpkanin","Kidan","Grey","Diona") + var/species = pick(/datum/species/unathi, /datum/species/skrell, /datum/species/diona, /datum/species/tajaran, /datum/species/vulpkanin, /datum/species/kidan, /datum/species/grey) owner.set_species(species) /obj/item/organ/internal/heart/gland/ventcrawling @@ -218,7 +218,7 @@ var/datum/dna/owner_dna = H.dna clone.rename_character(clone.name, owner_dna.real_name) clone.dna = owner_dna.Clone() - clone.set_species(H.species.name) + clone.set_species(H.dna.species) clone.body_accessory = H.body_accessory domutcheck(clone) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 8682b50fc05..3b339ad7c40 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -47,9 +47,9 @@ /obj/machinery/abductor/experiment/proc/dissection_icon(mob/living/carbon/human/H) var/icon/I = icon(H.stand_icon) - var/icon/splat = icon(H.species.damage_overlays, "30") - splat.Blend(icon(H.species.damage_mask, "torso"), ICON_MULTIPLY) - splat.Blend(H.species.blood_color, ICON_MULTIPLY) + var/icon/splat = icon(H.dna.species.damage_overlays, "30") + splat.Blend(icon(H.dna.species.damage_mask, "torso"), ICON_MULTIPLY) + splat.Blend(H.dna.species.blood_color, ICON_MULTIPLY) I.Blend(splat, ICON_OVERLAY) return I diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index b745e822993..57c511c65ad 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -145,7 +145,7 @@ proc/issyndicate(mob/living/M as mob) var/mob/living/carbon/human/M = synd_mind.current var/obj/item/organ/external/head/head_organ = M.get_organ("head") - M.set_species("Human",1) + M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ops. M.overeatduration = 0 @@ -159,8 +159,8 @@ proc/issyndicate(mob/living/M as mob) head_organ.sec_hair_colour = hair_c M.change_eye_color(eye_c) M.s_tone = skin_tone - head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species2.name) - head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species2.name) + head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species.name) M.body_accessory = null M.regenerate_icons() M.update_body() @@ -253,7 +253,7 @@ proc/issyndicate(mob/living/M as mob) U.hidden_uplink.uses = 20 synd_mob.equip_to_slot_or_del(U, slot_in_backpack) - if(synd_mob.species) + if(synd_mob.dna.species) /* Incase anyone ever gets the burning desire to have nukeops with randomized apperances. -- Dave @@ -262,7 +262,7 @@ proc/issyndicate(mob/living/M as mob) A.randomize_appearance_for(synd_mob) */ - var/race = synd_mob.species.name + var/race = synd_mob.dna.species.name switch(race) if("Vox" || "Vox Armalis") diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 07395aa0578..b7364970351 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -281,7 +281,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu for(var/datum/mind/possible_target in ticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && possible_target.current.client) var/mob/living/carbon/human/H = possible_target.current - if(!(NO_DNA in H.species.species_traits)) + if(!(NO_DNA in H.dna.species.species_traits)) possible_targets += possible_target if(possible_targets.len > 0) target = pick(possible_targets) @@ -445,7 +445,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu n_p++ else if(ticker.current_state == GAME_STATE_PLAYING) for(var/mob/living/carbon/human/P in player_list) - if(NO_DNA in P.species.species_traits) + if(NO_DNA in P.dna.species.species_traits) continue if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner) n_p++ diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 89aee290422..3cb08739a7c 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -371,7 +371,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(H), slot_wear_mask) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/shadowling(H), slot_glasses) - H.set_species("Shadowling") + H.set_species(/datum/species/shadow/ling) /obj/effect/proc_holder/spell/targeted/collective_mind //Lets a shadowling bring together their thralls' strength, granting new abilities and a headcount name = "Collective Hivemind" @@ -644,7 +644,7 @@ thrallToRevive.visible_message("[thrallToRevive] slowly rises, no longer recognizable as human.", \ "You feel new power flow into you. You have been gifted by your masters. You now closely resemble them. You are empowered in \ darkness but wither slowly in light. In addition, you now have glare and true shadow walk.") - thrallToRevive.set_species("Lesser Shadowling") + thrallToRevive.set_species(/datum/species/shadow/ling/lesser) thrallToRevive.mind.RemoveSpell(/obj/effect/proc_holder/spell/targeted/lesser_shadow_walk) thrallToRevive.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/glare(null)) thrallToRevive.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_walk(null)) diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 4239b5db327..03780f7a47e 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -91,7 +91,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N H.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(user), slot_gloves) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(user), slot_wear_mask) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/shadowling(user), slot_glasses) - H.set_species("Shadowling") //can't be a shadowling without being a shadowling + H.set_species(/datum/species/shadow/ling) //can't be a shadowling without being a shadowling H.mind.RemoveSpell(src) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index c9dad5c510d..6d82f6c48e1 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -239,7 +239,7 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user scramble(1, H, 100) - H.real_name = random_name(H.gender, H.species.name) //Give them a name that makes sense for their species. + H.real_name = random_name(H.gender, H.dna.species.name) //Give them a name that makes sense for their species. H.sync_organ_dna(assimilate = 1) H.update_body(0) H.reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover. diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 7c1a3526002..91c36356fd9 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -321,11 +321,11 @@ var/global/list/multiverse = list() to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help [user.p_them()] accomplish [user.p_their()] goals at all costs.") M.faction = list("[user.real_name]") if(duplicate_self) - M.set_species(user.get_species()) //duplicate the sword user's species. + M.set_species(user.dna.species) //duplicate the sword user's species. else if(prob(50)) - var/list/all_species = list("Human","Unathi","Skrell","Tajaran","Kidan","Golem","Diona","Machine","Slime People","Grey","Vulpkanin") - M.set_species(pick(all_species)) + var/list/list_all_species = list(/datum/species/human, /datum/species/unathi, /datum/species/skrell, /datum/species/tajaran, /datum/species/kidan, /datum/species/golem, /datum/species/diona, /datum/species/machine, /datum/species/slime, /datum/species/grey, /datum/species/vulpkanin) + M.set_species(pick(list_all_species)) M.real_name = user.real_name //this is clear down here in case the user happens to become a golem; that way they have the proper name. M.name = user.real_name if(duplicate_self) @@ -585,9 +585,9 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(W, slot_wear_id) if(M.get_species() == "Vox") - M.species.after_equip_job(null, M) //Voxygen(tm) + M.dna.species.after_equip_job(null, M) //Voxygen(tm) if(M.get_species() == "Plasmaman") - M.species.after_equip_job(null, M) //No fireballs from other dimensions. + M.dna.species.after_equip_job(null, M) //No fireballs from other dimensions. M.update_icons() @@ -646,7 +646,7 @@ var/global/list/multiverse = list() if(heresy) spawnheresy(M)//oh god why else - M.set_species("Skeleton") + M.set_species(/datum/species/skeleton) M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") M.revive() equip_skeleton(M) @@ -713,7 +713,7 @@ var/global/list/multiverse = list() H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back) /obj/item/necromantic_stone/proc/spawnheresy(mob/living/carbon/human/H as mob) - H.set_species("Human") + H.set_species(/datum/species/human) if(H.gender == MALE) H.change_gender(FEMALE) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index b5e798b95c7..eee87148118 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -153,7 +153,7 @@ wizard_mob.faction = list("wizard") - wizard_mob.species.after_equip_job(null, wizard_mob) + wizard_mob.dna.species.after_equip_job(null, wizard_mob) to_chat(wizard_mob, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.") to_chat(wizard_mob, "The spellbook is bound to you, and others cannot use it.") diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index ffcb288c1c5..418539b5bed 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -74,12 +74,12 @@ if(!H) return 0 - H.species.before_equip_job(src, H, visualsOnly) + H.dna.species.before_equip_job(src, H, visualsOnly) if(outfit) H.equipOutfit(outfit, visualsOnly) - H.species.after_equip_job(src, H, visualsOnly) + H.dna.species.after_equip_job(src, H, visualsOnly) if(!visualsOnly && announce) announce(H) @@ -183,7 +183,7 @@ else permitted = TRUE - if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted))) + if(G.whitelisted && (G.whitelisted != H.dna.species.name || !is_alien_whitelisted(H, G.whitelisted))) permitted = FALSE if(!permitted) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 934e925ce62..44ef4ee26da 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -92,7 +92,7 @@ if(filtering > 0) if(beaker) // To prevent runtimes from drawing blood from runtime, and to prevent getting IPC blood. - if(!istype(occupant) || !occupant.dna || (NO_BLOOD in occupant.species.species_traits)) + if(!istype(occupant) || !occupant.dna || (NO_BLOOD in occupant.dna.species.species_traits)) filtering = 0 return @@ -167,10 +167,10 @@ occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations // Because we can put simple_animals in here, we need to do something tricky to get things working nice occupantData["temperatureSuitability"] = 0 // 0 is the baseline - if(ishuman(occupant) && occupant.species) + if(ishuman(occupant) && occupant.dna.species) // I wanna do something where the bar gets bluer as the temperature gets lower // For now, I'll just use the standard format for the temperature status - var/datum/species/sp = occupant.species + var/datum/species/sp = occupant.dna.species if(occupant.bodytemperature < sp.cold_level_3) occupantData["temperatureSuitability"] = -3 else if(occupant.bodytemperature < sp.cold_level_2) @@ -197,7 +197,7 @@ crisis = (occupant.health < min_health) // I'm not sure WHY you'd want to put a simple_animal in a sleeper, but precedent is precedent // Runtime is aptly named, isn't she? - if(ishuman(occupant) && !(NO_BLOOD in occupant.species.species_traits)) + if(ishuman(occupant) && !(NO_BLOOD in occupant.dna.species.species_traits)) occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) occupantData["hasBlood"] = 1 occupantData["bloodLevel"] = round(occupant.blood_volume) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 1d70b389a94..2566cc0f410 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -387,7 +387,7 @@ var/bloodData[0] bloodData["hasBlood"] = 0 - if(ishuman(H) && !(NO_BLOOD in H.species.species_traits)) + if(ishuman(H) && !(NO_BLOOD in H.dna.species.species_traits)) bloodData["hasBlood"] = 1 bloodData["volume"] = H.blood_volume bloodData["percent"] = round(((H.blood_volume / BLOOD_VOLUME_NORMAL)*100)) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 60d280cf32f..881136dbd58 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -231,7 +231,7 @@ R.dna = new /datum/dna() var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.set_species(R.dna.species2) + H.set_species(R.dna.species) occupant = H if(!R.dna.real_name) //to prevent null names diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 42061760d92..00bd309b21e 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -123,8 +123,8 @@ occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations // Because we can put simple_animals in here, we need to do something tricky to get things working nice occupantData["temperatureSuitability"] = 0 // 0 is the baseline - if(ishuman(occupant) && occupant.species) - var/datum/species/sp = occupant.species + if(ishuman(occupant) && occupant.dna.species) + var/datum/species/sp = occupant.dna.species if(occupant.bodytemperature < sp.cold_level_3) occupantData["temperatureSuitability"] = -3 else if(occupant.bodytemperature < sp.cold_level_2) @@ -147,7 +147,7 @@ occupantData["btCelsius"] = occupant.bodytemperature - T0C occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 - if(ishuman(occupant) && !(NO_BLOOD in occupant.species.species_traits)) + if(ishuman(occupant) && !(NO_BLOOD in occupant.dna.species.species_traits)) occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) occupantData["hasBlood"] = 1 occupantData["bloodLevel"] = round(occupant.blood_volume) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 64beeb17513..c134747cd41 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -356,14 +356,14 @@ return if(scan_brain && !can_brainscan()) return - if((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna) || (NO_SCAN in subject.species.species_traits)) + if((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna) || (NO_SCAN in subject.dna.species.species_traits)) scantemp = "Error: Unable to locate valid genetic data." SSnanoui.update_uis(src) return if(subject.get_int_organ(/obj/item/organ/internal/brain)) var/obj/item/organ/internal/brain/Brn = subject.get_int_organ(/obj/item/organ/internal/brain) if(istype(Brn)) - if(NO_SCAN in Brn.dna.species2.species_traits) + if(NO_SCAN in Brn.dna.species.species_traits) scantemp = "Error: Subject's brain is incompatible." SSnanoui.update_uis(src) return @@ -401,9 +401,9 @@ var/obj/item/organ/B = subject.get_int_organ(/obj/item/organ/internal/brain) B.dna.check_integrity() R.dna=B.dna.Clone() - if(NO_SCAN in R.dna.species2.species_traits) + if(NO_SCAN in R.dna.species.species_traits) extra_info = "Proper genetic interface not found, defaulting to genetic data of the body." - R.dna.species2 = new subject.dna.species2.type + R.dna.species = new subject.dna.species.type R.id= copytext(md5(B.dna.real_name), 2, 6) R.name=B.dna.real_name else diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm index 89974f9b337..b141990fb6f 100644 --- a/code/game/machinery/dye_generator.dm +++ b/code/game/machinery/dye_generator.dm @@ -102,7 +102,7 @@ dye_list += "facial hair" dye_list += "alt. facial hair theme" - if(H && (H.species.bodyflags & HAS_SKIN_COLOR)) + if(H && (H.dna.species.bodyflags & HAS_SKIN_COLOR)) dye_list += "body" var/what_to_dye = input(user, "Choose an area to apply the dye", "Dye Application") in dye_list diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index a29dcb9e274..e846ba591e2 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -562,7 +562,7 @@ Class Procs: if(istype(perp.belt, /obj/item/gun) || istype(perp.belt, /obj/item/melee)) threatcount += 2 - if(perp.species.name != "Human") //beepsky so racist. + if(perp.dna.species.name != "Human") //beepsky so racist. threatcount += 2 if(check_records || check_arrest) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 39f67a72add..b134b53bd86 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -90,7 +90,7 @@ if(drownee && (drownee.lying || deep_water)) //Mob lying down or water is deep (determined by controller) if(drownee.internal) return //Has internals, no drowning - if((NO_BREATHE in drownee.species.species_traits) || (BREATHLESS in drownee.mutations)) + if((NO_BREATHE in drownee.dna.species.species_traits) || (BREATHLESS in drownee.mutations)) return //doesn't breathe, no drowning if(drownee.get_species() == "Skrell" || drownee.get_species() == "Neara") return //fish things don't drown diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index b68076f5c35..e5dc8f7db00 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -289,18 +289,18 @@ qdel(I) H.equipOutfit(selected_outfit) - H.species.after_equip_job(null, H) + H.dna.species.after_equip_job(null, H) /obj/machinery/transformer/transmogrifier name = "species transmogrifier" desc = "As promoted in Calvin & Hobbes!" - var/target_species = "Human" + var/datum/species/target_species = /datum/species/human /obj/machinery/transformer/transmogrifier/do_transform(mob/living/carbon/human/H) if(!istype(H)) return - if(!(target_species in all_species)) + if(!istype(target_species)) to_chat(H, "'[target_species]' is not a valid species!") return H.set_species(target_species) @@ -336,7 +336,7 @@ to_chat(H, "No genetic template configured!") return var/prev_ue = H.dna.unique_enzymes - H.set_species(template.species2) + H.set_species(template.species) H.dna = template.Clone() H.real_name = template.real_name H.sync_organ_dna(assimilate = 0, old_ue = prev_ue) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index a11236df0e5..18506a5c882 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -60,7 +60,7 @@ victim.apply_effect(radiation_amount, IRRADIATE, 0) if(ishuman(victim)) var/mob/living/carbon/human/V = victim - if(NO_DNA in V.species.species_traits) + if(NO_DNA in V.dna.species.species_traits) return randmutb(victim) domutcheck(victim ,null) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index c8ab2e1fc4f..32b548c38aa 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -81,7 +81,7 @@ return if(ishuman(user)) var/mob/living/carbon/human/H = user - if((HULK in H.mutations) || (NOGUNS in H.species.species_traits)) + if((HULK in H.mutations) || (NOGUNS in H.dna.species.species_traits)) user << "Your fingers can't press the button!" return diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 76d61f5ea44..d9c7eb5ef83 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -99,7 +99,7 @@ if(!get_location_accessible(H, "mouth")) to_chat(user, "The mask is in the way.") return - if((C.dna.species2.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... + if((C.dna.species.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... to_chat(user, "You find yourself disappointed at the appalling lack of facial hair.") return if(C.f_style == "Shaved") @@ -130,7 +130,7 @@ if(!get_location_accessible(H, "head")) to_chat(user, "The headgear is in the way.") return - if((C.dna.species2.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... + if((C.dna.species.bodyflags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... to_chat(user, "You find yourself disappointed at the appalling lack of hair.") return if(C.h_style == "Bald" || C.h_style == "Balding Hair" || C.h_style == "Skinhead") diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 3a8bf12b143..3a7e203101d 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -74,7 +74,7 @@ H = M spawn(0) //Some mutations have sleeps in them, like monkey - if(!(NOCLONE in M.mutations) && !(H && (NO_DNA in H.species.species_traits))) // prevents drained people from having their DNA changed + if(!(NOCLONE in M.mutations) && !(H && (NO_DNA in H.dna.species.species_traits))) // prevents drained people from having their DNA changed var/prev_ue = M.dna.unique_enzymes var/mutflags = 0 // UI in syringe. @@ -113,7 +113,7 @@ if(ishuman(M)) // Would've done this via species instead of type, but the basic mob doesn't have a species, go figure. var/mob/living/carbon/human/H = M - if(NO_DNA in H.species.species_traits) + if(NO_DNA in H.dna.species.species_traits) return 0 if(!user.IsAdvancedToolUser()) diff --git a/code/game/objects/items/weapons/dnascrambler.dm b/code/game/objects/items/weapons/dnascrambler.dm index 2866e8d06ec..fc13fa69f79 100644 --- a/code/game/objects/items/weapons/dnascrambler.dm +++ b/code/game/objects/items/weapons/dnascrambler.dm @@ -24,7 +24,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M - if(NO_DNA in H.species.species_traits) + if(NO_DNA in H.dna.species.species_traits) to_chat(user, "You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.") return @@ -43,7 +43,7 @@ if(istype(target)) var/mob/living/carbon/human/H = target scramble(1, H, 100) - H.real_name = random_name(H.gender, H.species.name) //Give them a name that makes sense for their species. + H.real_name = random_name(H.gender, H.dna.species.name) //Give them a name that makes sense for their species. H.sync_organ_dna(assimilate = 1) H.update_body(0) H.reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover. diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index b5d616a9a51..857e9a0af8c 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -34,18 +34,18 @@ var/obj/item/organ/external/head/C = H.get_organ("head") var/datum/robolimb/robohead = all_robolimbs[C.model] if(H.gender == MALE || H.get_species() == "Vulpkanin") - if(C.dna.species2) + if(C.dna.species) for(var/i in facial_hair_styles_list) var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i] - if(C.dna.species2.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. - if(C.dna.species2.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(C.dna.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. + if(C.dna.species.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. if(robohead.is_monitor) to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") return continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_facial_hair += i else - if(C.dna.species2.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(C.dna.species.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. if(!robohead.is_monitor) if("Human" in tmp_facial.species_allowed) species_facial_hair += i @@ -57,18 +57,18 @@ var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair //handle normal hair var/list/species_hair = list() - if(C.dna.species2) + if(C.dna.species) for(var/i in hair_styles_public_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i] - if(C.dna.species2.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. - if(C.dna.species2.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(C.dna.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. + if(C.dna.species.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. if(robohead.is_monitor) to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") return continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_hair += i else - if(C.dna.species2.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(C.dna.species.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. if(!robohead.is_monitor) if("Human" in tmp_hair.species_allowed) species_hair += i diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index abe546d25b1..3e7f3eaffe3 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -58,7 +58,7 @@ return if(ishuman(user)) var/mob/living/carbon/human/H = user - if(H.species.is_small) + if(H.dna.species.is_small) to_chat(user, "It's too heavy for you to wield fully.") return if(user.get_inactive_hand()) diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm index 6cbc2e0e972..5d17e66d976 100644 --- a/code/game/objects/items/weapons/whetstone.dm +++ b/code/game/objects/items/weapons/whetstone.dm @@ -52,7 +52,7 @@ /obj/item/whetstone/attack_self(mob/user as mob) //This is just fluff for now. Species datums are global and not newly created instances, so we can't adjust unarmed damage on a per mob basis. if(ishuman(user)) var/mob/living/carbon/human/H = user - var/datum/unarmed_attack/attack = H.species.unarmed + var/datum/unarmed_attack/attack = H.dna.species.unarmed if(istype(attack, /datum/unarmed_attack/claws)) H.visible_message("[H] sharpens [H.p_their()] claws on the [src]!", "You sharpen your claws on the [src].") playsound(get_turf(H), usesound, 50, 1) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 348c92a5335..a7233bf6a82 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -23,7 +23,7 @@ var/list/valid_underwear = list() for(var/underwear in underwear_list) var/datum/sprite_accessory/S = underwear_list[underwear] - if(!(H.species.name in S.species_allowed)) + if(!(H.dna.species.name in S.species_allowed)) continue valid_underwear[underwear] = underwear_list[underwear] var/new_underwear = input(user, "Choose your underwear:", "Changing") as null|anything in valid_underwear @@ -34,7 +34,7 @@ var/list/valid_undershirts = list() for(var/undershirt in undershirt_list) var/datum/sprite_accessory/S = undershirt_list[undershirt] - if(!(H.species.name in S.species_allowed)) + if(!(H.dna.species.name in S.species_allowed)) continue valid_undershirts[undershirt] = undershirt_list[undershirt] var/new_undershirt = input(user, "Choose your undershirt:", "Changing") as null|anything in valid_undershirts @@ -45,7 +45,7 @@ var/list/valid_sockstyles = list() for(var/sockstyle in socks_list) var/datum/sprite_accessory/S = socks_list[sockstyle] - if(!(H.species.name in S.species_allowed)) + if(!(H.dna.species.name in S.species_allowed)) continue valid_sockstyles[sockstyle] = socks_list[sockstyle] var/new_socks = input(user, "Choose your socks:", "Changing") as null|anything in valid_sockstyles diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 8d22732e5dd..3911d366ad6 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -86,7 +86,7 @@ return ..() if(istype(A, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if(H.species.is_small) + if(H.dna.species.is_small) return ..() return 0 diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 1e866e22faf..646adfa2038 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -143,7 +143,7 @@ var/ert_request_answered = 0 else M.change_gender(FEMALE) - M.set_species("Human",1) + M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ERT. M.overeatduration = 0 @@ -158,8 +158,8 @@ var/ert_request_answered = 0 head_organ.sec_hair_colour = hair_c M.change_eye_color(eye_c) M.s_tone = skin_tone - head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species2.name) - head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species2.name) + head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species.name) + head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species.name) M.rename_character(null, "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]") M.age = rand(23,35) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 32d5824c4d5..da843d8e53c 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -37,7 +37,7 @@ // Failing that... if(!(damagetype & BRUTELOSS) && !(damagetype & FIRELOSS) && !(damagetype & TOXLOSS) && !(damagetype & OXYLOSS)) - if(NO_BREATHE in species.species_traits) + if(NO_BREATHE in dna.species.species_traits) // the ultimate fallback take_overall_damage(max(dmgamt - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0), 0) else @@ -84,7 +84,7 @@ do_suicide(damagetype, held_item) return - to_chat(viewers(src), "[src] [replacetext(pick(species.suicide_messages), "their", p_their())] It looks like [p_theyre()] trying to commit suicide.") + to_chat(viewers(src), "[src] [replacetext(pick(dna.species.suicide_messages), "their", p_their())] It looks like [p_theyre()] trying to commit suicide.") do_suicide(0) updatehealth() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index abfc807f9df..798185188ff 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -337,7 +337,7 @@ if("queen") M.change_mob_type( /mob/living/carbon/alien/humanoid/queen/large , null, null, delmob, 1 ) if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob, 1 ) if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob, 1 ) - if("human") M.change_mob_type( /mob/living/carbon/human/human , null, null, delmob, 1 ) + if("human") M.change_mob_type( /mob/living/carbon/human, null, null, delmob, 1 ) if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 ) if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 ) diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 3d524e863cd..816f7d24a67 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -9,8 +9,8 @@ continue if(is_special_character(H)) continue - if(H.species.name in incompatible_species) - H.set_species("Human") + if(H.dna.species.name in incompatible_species) + H.set_species(/datum/species/human) var/datum/preferences/A = new() // Randomize appearance A.copy_to(H) @@ -49,7 +49,7 @@ W.assignment = "Highlander" W.registered_name = H.real_name H.equip_to_slot_or_del(W, slot_wear_id) - H.species.after_equip_job(null, H) + H.dna.species.after_equip_job(null, H) H.regenerate_icons() message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 12567cec70b..16c06ab0424 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -10,8 +10,8 @@ continue if(is_special_character(H)) continue - if(H.species.name in incompatible_species) - H.set_species("Human") + if(H.dna.species.name in incompatible_species) + H.set_species(/datum/species/human) var/datum/preferences/A = new() // Randomize appearance A.copy_to(H) @@ -55,7 +55,7 @@ H.equip_to_slot_or_del(W, slot_wear_id) team_toggle = !team_toggle - H.species.after_equip_job(null, H) + H.dna.species.after_equip_job(null, H) H.regenerate_icons() message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 94e0ea2acce..627cde823fa 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -37,7 +37,7 @@ createCorpse() /obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. - var/mob/living/carbon/human/human/M = new /mob/living/carbon/human/human (src.loc) + var/mob/living/carbon/human/M = new /mob/living/carbon/human(src.loc) M.real_name = src.name M.death(1) //Kills the new mob M.adjustOxyLoss(oxy_damage) @@ -293,6 +293,6 @@ /obj/effect/landmark/corpse/abductor //Connected to ruins, for some reason? name = "abductor" mobname = "???" - mob_species = "abductor" + mob_species = /datum/species/abductor corpseuniform = /obj/item/clothing/under/color/grey corpseshoes = /obj/item/clothing/shoes/combat diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index d159ed70eb2..9bfc00ca7c6 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -82,12 +82,12 @@ user.mutations.Add(XRAY) if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.species.name != "Shadow") + if(human.dna.species.name != "Shadow") to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") - human.set_species("Shadow") + human.set_species(/datum/species/shadow) user.regenerate_icons() if("Wealth") to_chat(user, "Your wish is granted, but at a terrible cost...") @@ -95,12 +95,12 @@ new /obj/structure/closet/syndicate/resources/everything(loc) if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.species.name != "Shadow") + if(human.dna.species.name != "Shadow") to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") - human.set_species("Shadow") + human.set_species(/datum/species/shadow) user.regenerate_icons() if("Immortality") to_chat(user, "Your wish is granted, but at a terrible cost...") @@ -108,12 +108,12 @@ user.verbs += /mob/living/carbon/proc/immortality if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.species.name != "Shadow") + if(human.dna.species.name != "Shadow") to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") - human.set_species("Shadow") + human.set_species(/datum/species/shadow) user.regenerate_icons() if("To Kill") to_chat(user, "Your wish is granted, but at a terrible cost...") @@ -130,12 +130,12 @@ obj_count++ if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.species.name != "Shadow") + if(human.dna.species.name != "Shadow") to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") - human.set_species("Shadow") + human.set_species(/datum/species/shadow) user.regenerate_icons() if("Peace") to_chat(user, "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.") diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 0582b92be67..497db00daf3 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2084,7 +2084,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts /datum/preferences/proc/copy_to(mob/living/carbon/human/character) var/datum/species/S = all_species[species] - character.change_species(species) // Yell at me if this causes everything to melt + character.change_species(S) // Yell at me if this causes everything to melt if(be_random_name) real_name = random_name(gender,species) @@ -2170,10 +2170,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.undershirt = undershirt character.socks = socks - if(character.species.bodyflags & HAS_HEAD_ACCESSORY) + if(character.dna.species.bodyflags & HAS_HEAD_ACCESSORY) H.headacc_colour = hacc_colour H.ha_style = ha_style - if(character.species.bodyflags & HAS_MARKINGS) + if(character.dna.species.bodyflags & HAS_MARKINGS) character.m_colours = m_colours character.m_styles = m_styles @@ -2190,7 +2190,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.change_eye_color(e_colour) - if(disabilities & DISABILITY_FLAG_FAT && (CAN_BE_FAT in character.species.species_traits)) + if(disabilities & DISABILITY_FLAG_FAT && (CAN_BE_FAT in character.dna.species.species_traits)) character.dna.SetSEState(FATBLOCK,1,1) character.overeatduration = 600 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 060e53df5b7..a5b4e614551 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -49,12 +49,12 @@ if("exclude" in species_restricted) exclusive = 1 - if(H.species) + if(H.dna.species) if(exclusive) - if(!(H.species.name in species_restricted)) + if(!(H.dna.species.name in species_restricted)) wearable = 1 else - if(H.species.name in species_restricted) + if(H.dna.species.name in species_restricted) wearable = 1 if(!wearable) @@ -504,7 +504,7 @@ BLIND // can't see anything /obj/item/clothing/suit/equipped(var/mob/living/carbon/human/user, var/slot) //Handle tail-hiding on a by-species basis. ..() if(ishuman(user) && hide_tail_by_species && slot == slot_wear_suit) - if(user.species.name in hide_tail_by_species) + if(user.dna.species.name in hide_tail_by_species) if(!(flags_inv & HIDETAIL)) //Hide the tail if the user's species is in the hide_tail_by_species list and the tail isn't already hidden. flags_inv |= HIDETAIL else diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 8ee357b1ffb..dd2861cc3a4 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -16,7 +16,7 @@ /obj/item/clothing/head/helmet/space/capspace/equipped(mob/living/carbon/human/user, slot) if(ishuman(user) && slot == slot_head) - if(user.species.name == "Vox") + if(user.dna.species.name == "Vox") if(flags & BLOCKHAIR) flags &= ~BLOCKHAIR else diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index aac34032dfb..764ee71583a 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -136,7 +136,7 @@ user.visible_message("[user] places \the [src] against [M]'s chest and listens attentively.", "You place \the [src] against [M]'s chest...") var/obj/item/organ/internal/H = M.get_int_organ(/obj/item/organ/internal/heart) var/obj/item/organ/internal/L = M.get_int_organ(/obj/item/organ/internal/lungs) - if((H && M.pulse) || (L && !(BREATHLESS in M.mutations) && !(NO_BREATHE in M.species.species_traits))) + if((H && M.pulse) || (L && !(BREATHLESS in M.mutations) && !(NO_BREATHE in M.dna.species.species_traits))) var/color = "notice" if(H) var/heart_sound diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index ce3e9df0655..ee27b827ff0 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -45,7 +45,7 @@ var/mob/living/carbon/human/target = M - if(istype(target.species, /datum/species/machine)) + if(istype(target.dna.species, /datum/species/machine)) to_chat(user, "[target] has no skin, how do you expect to tattoo [target.p_them()]?") return @@ -54,7 +54,7 @@ return var/datum/sprite_accessory/body_markings/tattoo/temp_tatt = marking_styles_list[tattoo_icon] - if(!(target.species.name in temp_tatt.species_allowed)) + if(!(target.dna.species.name in temp_tatt.species_allowed)) to_chat(user, "You can't think of a way to make the [tattoo_name] design work on [target == user ? "your" : "[target]'s"] body type.") return diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index cf2e3621498..87836f217b8 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -18,7 +18,7 @@ continue if(!H.client) continue - if(VIRUSIMMUNE in H.species.species_traits) //don't let virus immune things get diseases they're not supposed to get. + if(VIRUSIMMUNE in H.dna.species.species_traits) //don't let virus immune things get diseases they're not supposed to get. continue var/turf/T = get_turf(H) if(!T) diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index cc59ec78128..321a8135150 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -4,7 +4,7 @@ /datum/event/mass_hallucination/start() for(var/mob/living/carbon/human/H in living_mob_list) var/armor = H.getarmor(type = "rad") - if((RADIMMUNE in H.species.species_traits) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected + if((RADIMMUNE in H.dna.species.species_traits) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected continue H.AdjustHallucinate(rand(50, 100)) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 3a730c3868d..2105ae712d0 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1279,19 +1279,19 @@ /obj/item/reagent_containers/food/snacks/monkeycube/farwacube name = "farwa cube" - monkey_type = "Farwa" + monkey_type = /datum/species/monkey/tajaran /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube name = "wolpin cube" - monkey_type = "Wolpin" + monkey_type = /datum/species/monkey/vulpkanin /obj/item/reagent_containers/food/snacks/monkeycube/stokcube name = "stok cube" - monkey_type = "Stok" + monkey_type = /datum/species/monkey/unathi /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube name = "neaera cube" - monkey_type = "Neara" + monkey_type = /datum/species/monkey/skrell /obj/item/reagent_containers/food/snacks/spellburger diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm index a40a52b86be..b326e9f8b33 100644 --- a/code/modules/martial_arts/brawling.dm +++ b/code/modules/martial_arts/brawling.dm @@ -15,7 +15,7 @@ var/atk_verb = pick("left hook","right hook","straight punch") - var/damage = rand(5, 8) + A.species.punchdamagelow + var/damage = rand(5, 8) + A.dna.species.punchdamagelow if(!damage) playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) D.visible_message("[A] has attempted to hit [D] with a [atk_verb]!") diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index f42b7963104..bff0cf0d2e4 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -33,8 +33,8 @@ /datum/martial_art/proc/basic_hit(var/mob/living/carbon/human/A,var/mob/living/carbon/human/D) - var/damage = rand(A.species.punchdamagelow, A.species.punchdamagehigh) - var/datum/unarmed_attack/attack = A.species.unarmed + var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) + var/datum/unarmed_attack/attack = A.dna.species.unarmed var/atk_verb = "[pick(attack.attack_verb)]" if(D.lying) @@ -62,7 +62,7 @@ add_attack_logs(A, D, "Melee attacked with martial-art [src]", (damage > 0) ? null : ATKLOG_ALL) - if((D.stat != DEAD) && damage >= A.species.punchstunthreshold) + if((D.stat != DEAD) && damage >= A.dna.species.punchstunthreshold) D.visible_message("[A] has weakened [D]!!", \ "[A] has weakened [D]!") D.apply_effect(4, WEAKEN, armor_block) diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm index 38605c3538d..e8aa7a53d03 100644 --- a/code/modules/martial_arts/mimejutsu.dm +++ b/code/modules/martial_arts/mimejutsu.dm @@ -23,7 +23,7 @@ /datum/martial_art/mimejutsu/proc/mimeChuck(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.stunned && !D.weakened) - var/damage = rand(5, 8) + A.species.punchdamagelow + var/damage = rand(5, 8) + A.dna.species.punchdamagelow if(!damage) playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) D.visible_message("[A] swings invisible nunchcuks at [D]..and misses?") diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index ff0db975895..d88ec709dce 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -116,7 +116,7 @@ switch(random) if(1) to_chat(user, "Your flesh begins to melt! Miraculously, you seem fine otherwise.") - H.set_species("Skeleton") + H.set_species(/datum/species/skeleton) if(2) to_chat(user, "Power courses through you! You can now shift your form at will.") if(user.mind) diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index ddf1255cca0..59d3a715f32 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -289,7 +289,7 @@ if(ishuman(i)) var/mob/living/carbon/human/H = i if(H.stat == DEAD) - H.set_species("Shadow") + H.set_species(/datum/species/shadow) H.revive() H.disabilities |= NOCLONE //Free revives, but significantly limits your options for reviving except via the crystal H.grab_ghost(force = TRUE) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index e1c6c7f28a9..7ffa47586a4 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -111,7 +111,7 @@ return ..() to_chat(H, "A terrible pain travels down your back as wings burst out!") - H.set_species("Angel") + H.set_species(/datum/species/angel) playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) H.adjustBruteLoss(20) H.emote("scream") diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index da19b6a35b2..df1bde34306 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -4,7 +4,7 @@ /mob/living/carbon/human/handle_autohiss(message, datum/language/L) if(!client || client.prefs.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off return message - return species.handle_autohiss(message, L, client.prefs.autohiss_mode) + return dna.species.handle_autohiss(message, L, client.prefs.autohiss_mode) /client/verb/toggle_autohiss() set name = "Toggle Auto-Accent" diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index e3069f4d5d3..9d50d8bf2ea 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -121,10 +121,10 @@ brainmob.dna = H.dna.Clone() brainmob.container = src - if(!istype(H.species) || isnull(H.species.return_organ("brain"))) // Diona/buggy people + if(!istype(H.dna.species) || isnull(H.dna.species.return_organ("brain"))) // Diona/buggy people held_brain = new(src) else // We have a species, and it has a brain - var/brain_path = H.species.return_organ("brain") + var/brain_path = H.dna.species.return_organ("brain") if(!ispath(brain_path, /obj/item/organ/internal/brain)) brain_path = /obj/item/organ/internal/brain held_brain = new brain_path(src) // Slime people will keep their slimy brains this way diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 604dfc36f32..4b00bf832c8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -382,7 +382,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, if(!ventcrawler) if(ishuman(src)) var/mob/living/carbon/human/H = src - ventcrawlerlocal = H.species.ventcrawler + ventcrawlerlocal = H.dna.species.ventcrawler if(!ventcrawlerlocal) return diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index de8cb28eb47..07fc623952c 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -3,20 +3,20 @@ AC.flags = flags AC.ui_interact(user, state = state) -/mob/living/carbon/human/proc/change_species(var/new_species) - if(!new_species || species == new_species || !(new_species in all_species)) - return +/mob/living/carbon/human/proc/change_species(datum/species/new_species) + if(!new_species || dna.species.type == new_species || !(initial(new_species.name) in all_species)) + return FALSE - set_species(new_species, null, 1) + set_species(new_species, null, TRUE) reset_hair() - if(species.bodyflags & HAS_MARKINGS) + if(dna.species.bodyflags & HAS_MARKINGS) reset_markings() - return 1 + return TRUE /mob/living/carbon/human/proc/change_gender(var/new_gender, var/update_dna = 1) var/obj/item/organ/external/head/H = bodyparts_by_name["head"] - if(gender == new_gender || (gender == PLURAL && species.has_gender)) + if(gender == new_gender || (gender == PLURAL && dna.species.has_gender)) return gender = new_gender @@ -129,7 +129,7 @@ /mob/living/carbon/human/proc/change_alt_head(var/alternate_head) var/obj/item/organ/external/head/H = get_organ("head") - if(!H || H.alt_head == alternate_head || H.is_robotic() || (!(species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list)) + if(!H || H.alt_head == alternate_head || H.is_robotic() || (!(dna.species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list)) return H.alt_head = alternate_head @@ -296,7 +296,7 @@ /mob/living/carbon/human/proc/change_skin_color(var/colour = "#000000") - if(colour == skin_colour || !(species.bodyflags & HAS_SKIN_COLOR)) + if(colour == skin_colour || !(dna.species.bodyflags & HAS_SKIN_COLOR)) return skin_colour = colour @@ -306,7 +306,7 @@ return 1 /mob/living/carbon/human/proc/change_skin_tone(var/tone) - if(s_tone == tone || !((species.bodyflags & HAS_SKIN_TONE) || (species.bodyflags & HAS_ICON_SKIN_TONE))) + if(s_tone == tone || !((dna.species.bodyflags & HAS_SKIN_TONE) || (dna.species.bodyflags & HAS_ICON_SKIN_TONE))) return s_tone = tone @@ -350,16 +350,16 @@ continue if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) continue - if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... + if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = all_robolimbs[H.model] - if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. + if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. valid_hairstyles += hairstyle //Give them their hairstyles if they do. else if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */ valid_hairstyles += hairstyle else //If the user is not a species who can have robotic heads, use the default handling. - if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list. + if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list. valid_hairstyles += hairstyle return valid_hairstyles @@ -378,17 +378,17 @@ continue if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) continue - if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... + if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = all_robolimbs[H.model] - if(H.dna.species2.name in S.species_allowed) //If this is a facial hair style native to the user's species... - if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. + if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species... + if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do. else if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */ valid_facial_hairstyles += facialhairstyle else //If the user is not a species who can have robotic heads, use the default handling. - if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. + if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. valid_facial_hairstyles += facialhairstyle return valid_facial_hairstyles @@ -402,7 +402,7 @@ for(var/head_accessory in head_accessory_styles_list) var/datum/sprite_accessory/S = head_accessory_styles_list[head_accessory] - if(!(H.dna.species2.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list. + if(!(H.dna.species.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list. continue valid_head_accessories += head_accessory @@ -421,7 +421,7 @@ continue if(S.marking_location != location) //If the marking isn't for the location we desire, skip. continue - if(!(species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list. + if(!(dna.species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list. continue if(location == "tail") if(!body_accessory) @@ -432,7 +432,7 @@ continue if(location == "head") var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[S.name] - if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head... + if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head... var/datum/robolimb/robohead = all_robolimbs[H.model] if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head. continue @@ -456,7 +456,7 @@ if(!istype(A)) valid_body_accessories["None"] = "None" //The only null entry should be the "None" option. continue - if(species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list. + if(dna.species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list. valid_body_accessories += B return valid_body_accessories @@ -469,7 +469,7 @@ valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option, and there should always be a "None" option. for(var/alternate_head in alt_heads_list) var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head] - if(!(H.dna.species2.name in head.species_allowed)) + if(!(H.dna.species.name in head.species_allowed)) continue valid_alt_heads += alternate_head diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 37749c0dd76..bdca496d256 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -62,7 +62,7 @@ animation.master = src flick("dust-h", animation) - new species.remains_type(get_turf(src)) + new dna.species.remains_type(get_turf(src)) spawn(15) if(animation) qdel(animation) @@ -103,8 +103,8 @@ set_heartattack(FALSE) //Handle species-specific deaths. - if(species) - species.handle_death(src) + if(dna.species) + dna.species.handle_death(src) callHook("death", list(src, gibbed)) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 3df5a6843d1..9cb1a981999 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -29,7 +29,7 @@ switch(act) //Cooldown-inducing emotes if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no", "buzz2") - if(species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise. + if(dna.species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm else //Everyone else fails, skip the emote attempt return @@ -56,7 +56,7 @@ found_slime_bodypart = 1 else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! - if(istype(L.dna.species2, /datum/species/slime)) + if(istype(L.dna.species, /datum/species/slime)) on_CD = handle_emote_CD() found_slime_bodypart = 1 break @@ -225,7 +225,7 @@ message = "[src] starts wagging [p_their()] tail." start_tail_wagging(1) - else if(species.bodyflags & TAIL_WAGGING) + else if(dna.species.bodyflags & TAIL_WAGGING) if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) message = "[src] starts wagging [p_their()] tail." start_tail_wagging(1) @@ -236,7 +236,7 @@ m_type = 1 if("swag", "swags") - if(species.bodyflags & TAIL_WAGGING || body_accessory) + if(dna.species.bodyflags & TAIL_WAGGING || body_accessory) message = "[src] stops wagging [p_their()] tail." stop_tail_wagging(1) else @@ -431,11 +431,11 @@ message = "[src] coughs!" m_type = 2 if(gender == FEMALE) - if(species.female_cough_sounds) - playsound(src, pick(species.female_cough_sounds), 120) + if(dna.species.female_cough_sounds) + playsound(src, pick(dna.species.female_cough_sounds), 120) else - if(species.male_cough_sounds) - playsound(src, pick(species.male_cough_sounds), 120) + if(dna.species.male_cough_sounds) + playsound(src, pick(dna.species.male_cough_sounds), 120) else message = "[src] makes a strong noise." m_type = 2 @@ -479,7 +479,7 @@ m_type = 2 if("deathgasp", "deathgasps") - message = "[src] [replacetext(species.death_message, "their", p_their())]" + message = "[src] [replacetext(dna.species.death_message, "their", p_their())]" m_type = 1 if("giggle", "giggles") @@ -676,9 +676,9 @@ if(!muzzled) message = "[src] sneezes." if(gender == FEMALE) - playsound(src, species.female_sneeze_sound, 70) + playsound(src, dna.species.female_sneeze_sound, 70) else - playsound(src, species.male_sneeze_sound, 70) + playsound(src, dna.species.male_sneeze_sound, 70) m_type = 2 else message = "[src] makes a strange noise." @@ -784,12 +784,12 @@ m_type = 1 else if(!muzzled) - message = "[src] [species.scream_verb][M ? " at [M]" : ""]!" + message = "[src] [dna.species.scream_verb][M ? " at [M]" : ""]!" m_type = 2 if(gender == FEMALE) - playsound(loc, "[species.female_scream_sound]", 80, 1, frequency = get_age_pitch()) + playsound(loc, "[dna.species.female_scream_sound]", 80, 1, frequency = get_age_pitch()) else - playsound(loc, "[species.male_scream_sound]", 80, 1, frequency = get_age_pitch()) //default to male screams if no gender is present. + playsound(loc, "[dna.species.male_scream_sound]", 80, 1, frequency = get_age_pitch()) //default to male screams if no gender is present. else message = "[src] makes a very loud noise[M ? " at [M]" : ""]." @@ -890,7 +890,7 @@ + " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \ + " wag(s), wave(s), whimper(s), wink(s), yawn(s), quill(s)" - switch(species.name) + switch(dna.species.name) if("Machine") emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" if("Drask") @@ -906,11 +906,11 @@ if("Diona") emotelist += "\nDiona specific emotes :- creak(s)" - if (species.name == "Slime People") + if (dna.species.name == "Slime People") emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! - if(istype(L.dna.species2, /datum/species/slime)) + if(istype(L.dna.species, /datum/species/slime)) emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" break diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index e382796cd09..ce0930f229f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -199,9 +199,9 @@ var/list/wound_flavor_text = list() var/list/is_destroyed = list() - for(var/organ_tag in species.has_limbs) + for(var/organ_tag in dna.species.has_limbs) - var/list/organ_data = species.has_limbs[organ_tag] + var/list/organ_data = dna.species.has_limbs[organ_tag] var/organ_descriptor = organ_data["descriptor"] is_destroyed["[organ_data["descriptor"]]"] = 1 @@ -324,7 +324,7 @@ var/dodebug = auto.doing2string(auto.doing) var/interestdebug = auto.interest2string(auto.interest) msg += "[p_they(TRUE)] [p_are()] appears to be [interestdebug] and [dodebug].\n" - else if(species.show_ssd) + else if(dna.species.show_ssd) if(!key) msg += "[p_they(TRUE)] [p_are()] totally catatonic. The stresses of life in deep-space must have been too much for [p_them()]. Any recovery is unlikely.\n" else if(!client) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 88e3d854658..06750815abf 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -4,10 +4,6 @@ voice_name = "unknown" icon = 'icons/mob/human.dmi' icon_state = "body_m_s" - - //why are these here and not in human_defines.dm - //var/list/hud_list[10] - var/datum/species/species //Contains icon generation and language information, set during New(). var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. /mob/living/carbon/human/New(loc) @@ -15,21 +11,17 @@ log_runtime(EXCEPTION("human/New called with more than 1 argument (REPORT THIS ENTIRE RUNTIME TO A CODER)")) . = ..() -/mob/living/carbon/human/Initialize(mapload, new_species = null) +/mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human) if(!dna) dna = new /datum/dna(null) // Species name is handled by set_species() - if(!species) - if(new_species) - set_species(new_species, 1, delay_icon_update = 1) - else - set_species(delay_icon_update = 1) + set_species(new_species, 1, delay_icon_update = 1) ..() - if(species) - real_name = species.get_random_name(gender) + if(dna.species) + real_name = dna.species.get_random_name(gender) name = real_name if(mind) mind.name = real_name @@ -74,49 +66,46 @@ status_flags = GODMODE|CANPUSH /mob/living/carbon/human/skrell/Initialize(mapload) - ..(mapload, "Skrell") + ..(mapload, /datum/species/skrell) /mob/living/carbon/human/tajaran/Initialize(mapload) - ..(mapload, "Tajaran") + ..(mapload, /datum/species/tajaran) /mob/living/carbon/human/vulpkanin/Initialize(mapload) - ..(mapload, "Vulpkanin") + ..(mapload, /datum/species/vulpkanin) /mob/living/carbon/human/unathi/Initialize(mapload) - ..(mapload, "Unathi") + ..(mapload, /datum/species/unathi) /mob/living/carbon/human/vox/Initialize(mapload) - ..(mapload, "Vox") + ..(mapload, /datum/species/vox) /mob/living/carbon/human/voxarmalis/Initialize(mapload) - ..(mapload, "Vox Armalis") + ..(mapload, /datum/species/vox/armalis) /mob/living/carbon/human/skeleton/Initialize(mapload) - ..(mapload, "Skeleton") + ..(mapload, /datum/species/skeleton) /mob/living/carbon/human/kidan/Initialize(mapload) - ..(mapload, "Kidan") + ..(mapload, /datum/species/kidan) /mob/living/carbon/human/plasma/Initialize(mapload) - ..(mapload, "Plasmaman") + ..(mapload, /datum/species/plasmaman) /mob/living/carbon/human/slime/Initialize(mapload) - ..(mapload, "Slime People") + ..(mapload, /datum/species/slime) /mob/living/carbon/human/grey/Initialize(mapload) - ..(mapload, "Grey") + ..(mapload, /datum/species/grey) /mob/living/carbon/human/abductor/Initialize(mapload) - ..(mapload, "Abductor") - -/mob/living/carbon/human/human/Initialize(mapload) - ..(mapload, "Human") + ..(mapload, /datum/species/abductor) /mob/living/carbon/human/diona/Initialize(mapload) - ..(mapload, "Diona") + ..(mapload, /datum/species/diona) /mob/living/carbon/human/machine/Initialize(mapload) - ..(mapload, "Machine") + ..(mapload, /datum/species/machine) /mob/living/carbon/human/machine/created name = "Integrated Robotic Chassis" @@ -133,34 +122,34 @@ qdel(O) /mob/living/carbon/human/shadow/Initialize(mapload) - ..(mapload, "Shadow") + ..(mapload, /datum/species/shadow) /mob/living/carbon/human/golem/Initialize(mapload) - ..(mapload, "Golem") + ..(mapload, /datum/species/golem) /mob/living/carbon/human/wryn/Initialize(mapload) - ..(mapload, "Wryn") + ..(mapload, /datum/species/wryn) /mob/living/carbon/human/nucleation/Initialize(mapload) - ..(mapload, "Nucleation") + ..(mapload, /datum/species/nucleation) /mob/living/carbon/human/drask/Initialize(mapload) - ..(mapload, "Drask") + ..(mapload, /datum/species/drask) /mob/living/carbon/human/monkey/Initialize(mapload) - ..(mapload, "Monkey") + ..(mapload, /datum/species/monkey) /mob/living/carbon/human/farwa/Initialize(mapload) - ..(mapload, "Farwa") + ..(mapload, /datum/species/monkey/tajaran) /mob/living/carbon/human/wolpin/Initialize(mapload) - ..(mapload, "Wolpin") + ..(mapload, /datum/species/monkey/vulpkanin) /mob/living/carbon/human/neara/Initialize(mapload) - ..(mapload, "Neara") + ..(mapload, /datum/species/monkey/skrell) /mob/living/carbon/human/stok/Initialize(mapload) - ..(mapload, "Stok") + ..(mapload, /datum/species/monkey/unathi) /mob/living/carbon/human/Stat() ..() @@ -564,7 +553,7 @@ grant_death_vision() return - species.update_sight(src) + dna.species.update_sight(src) //Removed the horrible safety parameter. It was only being used by ninja code anyways. //Now checks siemens_coefficient of the affected area by default @@ -594,8 +583,8 @@ if(gloves) var/obj/item/clothing/gloves/G = gloves gloves_siemens_coeff = G.siemens_coefficient - if(species) - species_siemens_coeff = species.siemens_coeff + if(dna.species) + species_siemens_coeff = dna.species.siemens_coeff siemens_coeff = gloves_siemens_coeff * species_siemens_coeff if(undergoing_cardiac_arrest()) if(shock_damage * siemens_coeff >= 1 && prob(25)) @@ -1049,11 +1038,7 @@ return /mob/living/carbon/human/get_species() - - if(!species) - set_species() - - return species.name + return dna.species.name /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) @@ -1154,9 +1139,9 @@ //Replacing lost limbs with the species default. var/mob/living/carbon/human/temp_holder - for(var/limb_type in H.species.has_limbs) + for(var/limb_type in H.dna.species.has_limbs) if(!(limb_type in H.bodyparts_by_name)) - var/list/organ_data = H.species.has_limbs[limb_type] + var/list/organ_data = H.dna.species.has_limbs[limb_type] var/limb_path = organ_data["path"] var/obj/item/organ/external/O = new limb_path(temp_holder) if(H.get_limb_by_name(O.name)) //Check to see if the user already has an limb with the same name as the 'missing limb'. If they do, skip regrowth. @@ -1169,8 +1154,8 @@ //Replacing lost organs with the species default. temp_holder = new /mob/living/carbon/human() - for(var/index in H.species.has_organ) - var/organ = H.species.has_organ[index] + for(var/index in H.dna.species.has_organ) + var/organ = H.dna.species.has_organ[index] if(!(organ in types_of_int_organs)) //If the mob is missing this particular organ... var/obj/item/organ/internal/I = new organ(temp_holder) //Create the organ inside our holder so we can check it before implantation. if(H.get_organ_slot(I.slot)) //Check to see if the user already has an organ in the slot the 'missing organ' belongs to. If they do, skip implantation. @@ -1187,7 +1172,7 @@ surgeries.Cut() //End all surgeries. update_revive() - if(species.name != "Skeleton" && (SKELETON in mutations)) + if(dna.species.name != "Skeleton" && (SKELETON in mutations)) mutations.Remove(SKELETON) if(NOCLONE in mutations) mutations.Remove(NOCLONE) @@ -1250,7 +1235,7 @@ ..() /mob/living/carbon/human/generate_name() - name = species.makeName(gender,src) + name = dna.species.makeName(gender,src) real_name = name if(dna) dna.real_name = name @@ -1289,88 +1274,79 @@ else to_chat(usr, "[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].") -/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/delay_icon_update = 0) - var/datum/species/oldspecies = species - var/datum/species/NS = all_species[new_species] - if(!dna) - if(!new_species) - new_species = "Human" - else - if(!new_species) - new_species = dna.species2 - else - dna.species2 = new_species +/mob/living/carbon/human/proc/set_species(datum/species/new_species, default_colour, delay_icon_update = FALSE) + if(new_species == dna.species.type) + return - if(species) - if(species.name && species.name == new_species) - return - - if(species.language) - remove_language(species.language) - - if(species.default_language) - remove_language(species.default_language) - - if(gender == PLURAL && NS.has_gender) - change_gender(pick(MALE,FEMALE)) - species.handle_pre_change(src) - - species = all_species[new_species] + var/datum/species/oldspecies = dna.species if(oldspecies) + if(oldspecies.language) + remove_language(oldspecies.language) + + if(oldspecies.default_language) + remove_language(oldspecies.default_language) + + if(gender == PLURAL && oldspecies.has_gender) + change_gender(pick(MALE, FEMALE)) + if(oldspecies.default_genes.len) - oldspecies.handle_dna(src,1) // Remove any genes that belong to the old species + oldspecies.handle_dna(src, TRUE) // Remove any genes that belong to the old species - tail = species.tail + oldspecies.handle_pre_change(src) - maxHealth = species.total_health + dna.species = new new_species.type - if(species.language) - add_language(species.language) + tail = dna.species.tail - if(species.default_language) - add_language(species.default_language) + maxHealth = dna.species.total_health - hunger_drain = species.hunger_drain - digestion_ratio = species.digestion_ratio + if(dna.species.language) + add_language(dna.species.language) - if(species.base_color && default_colour) + if(dna.species.default_language) + add_language(dna.species.default_language) + + hunger_drain = dna.species.hunger_drain + digestion_ratio = dna.species.digestion_ratio + + if(dna.species.base_color && default_colour) //Apply colour. - skin_colour = species.base_color + skin_colour = dna.species.base_color else skin_colour = "#000000" - if(!(species.bodyflags & HAS_SKIN_TONE)) + if(!(dna.species.bodyflags & HAS_SKIN_TONE)) s_tone = 0 - species.create_organs(src) + dna.species.create_organs(src) //Handle default hair/head accessories for created mobs. var/obj/item/organ/external/head/H = get_organ("head") - if(species.default_hair) - H.h_style = species.default_hair + if(dna.species.default_hair) + H.h_style = dna.species.default_hair else H.h_style = "Bald" - if(species.default_fhair) - H.f_style = species.default_fhair + if(dna.species.default_fhair) + H.f_style = dna.species.default_fhair else H.f_style = "Shaved" - if(species.default_headacc) - H.ha_style = species.default_headacc + if(dna.species.default_headacc) + H.ha_style = dna.species.default_headacc else H.ha_style = "None" - if(species.default_hair_colour) + if(dna.species.default_hair_colour) //Apply colour. - H.hair_colour = species.default_hair_colour + H.hair_colour = dna.species.default_hair_colour else H.hair_colour = "#000000" - if(species.default_fhair_colour) - H.facial_colour = species.default_fhair_colour + if(dna.species.default_fhair_colour) + H.facial_colour = dna.species.default_fhair_colour else H.facial_colour = "#000000" - if(species.default_headacc_colour) - H.headacc_colour = species.default_headacc_colour + if(dna.species.default_headacc_colour) + H.headacc_colour = dna.species.default_headacc_colour else H.headacc_colour = "#000000" @@ -1378,20 +1354,17 @@ m_colours = DEFAULT_MARKING_COLOURS //Defaults colour to #00000 for all markings. body_accessory = null - if(!dna) - dna = new /datum/dna(null) - dna.species2 = species.name - dna.real_name = real_name + dna.real_name = real_name - species.handle_post_spawn(src) + dna.species.handle_post_spawn(src) - see_in_dark = species.get_resultant_darksight(src) + see_in_dark = dna.species.get_resultant_darksight(src) if(see_in_dark > 2) see_invisible = SEE_INVISIBLE_LEVEL_ONE else see_invisible = SEE_INVISIBLE_LIVING - species.handle_dna(src) //Give them whatever special dna business they got. + dna.species.handle_dna(src) //Give them whatever special dna business they got. update_client_colour(0) @@ -1403,18 +1376,18 @@ if(!delay_icon_update) UpdateAppearance() - if(species) - return 1 + if(dna.species) + return TRUE else - return 0 + return FALSE /mob/living/carbon/human/get_default_language() if(default_language) return default_language - if(!species) + if(!dna.species) return null - return species.default_language ? all_languages[species.default_language] : null + return dna.species.default_language ? all_languages[dna.species.default_language] : null /mob/living/carbon/human/proc/bloody_doodle() set category = "IC" @@ -1481,7 +1454,7 @@ to_chat(src, "Where's your head at? Can't change your monitor/display without one.") return - if(species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body... + if(dna.species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body... var/datum/robolimb/robohead = all_robolimbs[head_organ.model] if(!head_organ) return @@ -1497,7 +1470,7 @@ var/list/hair = list() for(var/i in hair_styles_public_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i] - if((head_organ.dna.species2.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use. + if((head_organ.dna.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use. hair += i var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair @@ -1585,8 +1558,8 @@ /mob/living/carbon/human/proc/get_eyecon() var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes) - if(istype(species) && species.eyes) - var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes) + if(istype(dna.species) && dna.species.eyes) + var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', dna.species.eyes) if(eye_implant) //Eye implants override native DNA eye colo(u)r eyes_icon = eye_implant.generate_icon() else if(eyes) @@ -1792,7 +1765,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/IsAdvancedToolUser() - if(species.has_fine_manipulation) + if(dna.species.has_fine_manipulation) return 1 return 0 @@ -1827,7 +1800,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X return 1 /mob/living/carbon/human/can_eat(flags = 255) - return species && (species.dietflags & flags) + return dna.species && (dna.species.dietflags & flags) /mob/living/carbon/human/selfFeed(var/obj/item/reagent_containers/food/toEat, fullness) if(!check_has_mouth()) @@ -1888,7 +1861,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X . |= A.GetAccess() /mob/living/carbon/human/is_mechanical() - return ..() || (species.bodyflags & ALL_RPARTS) != 0 + return ..() || (dna.species.bodyflags & ALL_RPARTS) != 0 /mob/living/carbon/human/can_use_guns(var/obj/item/gun/G) . = ..() @@ -1897,7 +1870,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(HULK in mutations) to_chat(src, "Your meaty finger is much too large for the trigger guard!") return 0 - if(NOGUNS in species.species_traits) + if(NOGUNS in dna.species.species_traits) to_chat(src, "Your fingers don't fit in the trigger guard!") return 0 @@ -1964,7 +1937,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X dna.deserialize(data["dna"]) real_name = dna.real_name name = real_name - set_species(dna.species2) + set_species(dna.species) age = data["age"] undershirt = data["ushirt"] underwear = data["uwear"] @@ -2026,8 +1999,8 @@ Eyes need to have significantly high darksight to shine unless the mob has the X . += "---" /mob/living/carbon/human/get_taste_sensitivity() - if(species) - return species.taste_sensitivity + if(dna.species) + return dna.species.taste_sensitivity else return 1 diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index c2c16382995..80c128ee07f 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -17,7 +17,7 @@ //TODO: fix husking if(((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD) ChangeToHusk() - if(species.can_revive_by_healing) + if(dna.species.can_revive_by_healing) var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain) if(B) if((health >= (config.health_threshold_dead + config.health_threshold_crit) * 0.5) && stat == DEAD && getBrainLoss()<120) @@ -32,11 +32,11 @@ if(status_flags & GODMODE) return 0 //godmode - if(species && species.has_organ["brain"]) + if(dna.species && dna.species.has_organ["brain"]) var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) - if(species) - amount = amount * species.brain_mod + if(dna.species) + amount = amount * dna.species.brain_mod sponge.receive_damage(amount, 1) brainloss = sponge.damage else @@ -48,11 +48,11 @@ if(status_flags & GODMODE) return 0 //godmode - if(species && species.has_organ["brain"]) + if(dna.species && dna.species.has_organ["brain"]) var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) - if(species) - amount = amount * species.brain_mod + if(dna.species) + amount = amount * dna.species.brain_mod sponge.damage = min(max(amount, 0), (maxHealth*2)) brainloss = sponge.damage else @@ -64,7 +64,7 @@ if(status_flags & GODMODE) return 0 //godmode - if(species && species.has_organ["brain"]) + if(dna.species && dna.species.has_organ["brain"]) var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) brainloss = min(sponge.damage,maxHealth*2) @@ -89,24 +89,24 @@ /mob/living/carbon/human/adjustBruteLoss(amount, damage_source) - if(species) - amount = amount * species.brute_mod + if(dna.species) + amount = amount * dna.species.brute_mod if(amount > 0) take_overall_damage(amount, 0, used_weapon = damage_source) else heal_overall_damage(-amount, 0) /mob/living/carbon/human/adjustFireLoss(amount, damage_source) - if(species) - amount = amount * species.burn_mod + if(dna.species) + amount = amount * dna.species.burn_mod if(amount > 0) take_overall_damage(0, amount, used_weapon = damage_source) else heal_overall_damage(0, -amount) /mob/living/carbon/human/proc/adjustBruteLossByPart(amount, organ_name, obj/damage_source = null) - if(species) - amount = amount * species.brute_mod + if(dna.species) + amount = amount * dna.species.brute_mod if(organ_name in bodyparts_by_name) var/obj/item/organ/external/O = get_organ(organ_name) @@ -119,8 +119,8 @@ /mob/living/carbon/human/proc/adjustFireLossByPart(amount, organ_name, obj/damage_source = null) - if(species) - amount = amount * species.burn_mod + if(dna.species) + amount = amount * dna.species.burn_mod if(organ_name in bodyparts_by_name) var/obj/item/organ/external/O = get_organ(organ_name) @@ -139,8 +139,8 @@ ..() /mob/living/carbon/human/adjustCloneLoss(amount) - if(species) - amount = amount * species.clone_mod + if(dna.species) + amount = amount * dna.species.clone_mod ..() var/heal_prob = max(0, 80 - getCloneLoss()) @@ -179,23 +179,23 @@ // Defined here solely to take species flags into account without having to recast at mob/living level. /mob/living/carbon/human/adjustOxyLoss(amount) - if(species) - amount = amount * species.oxy_mod + if(dna.species) + amount = amount * dna.species.oxy_mod ..() /mob/living/carbon/human/setOxyLoss(amount) - if(species) - amount = amount * species.oxy_mod + if(dna.species) + amount = amount * dna.species.oxy_mod ..() /mob/living/carbon/human/adjustToxLoss(amount) - if(species) - amount = amount * species.tox_mod + if(dna.species) + amount = amount * dna.species.tox_mod ..() /mob/living/carbon/human/setToxLoss(amount) - if(species) - amount = amount * species.tox_mod + if(dna.species) + amount = amount * dna.species.tox_mod ..() //////////////////////////////////////////// @@ -352,8 +352,8 @@ This function restores all organs. switch(damagetype) if(BRUTE) damageoverlaytemp = 20 - if(species) - damage = damage * species.brute_mod + if(dna.species) + damage = damage * dna.species.brute_mod if(organ.receive_damage(damage, 0, sharp, used_weapon)) UpdateDamageIcon() @@ -376,8 +376,8 @@ This function restores all organs. if(BURN) damageoverlaytemp = 20 - if(species) - damage = damage * species.burn_mod + if(dna.species) + damage = damage * dna.species.burn_mod if(organ.receive_damage(0, damage, sharp, used_weapon)) UpdateDamageIcon() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 2991e0a7111..6c2bb844155 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -354,7 +354,7 @@ emp_act if(check_shields(user, 15, "the [hulk_verb]ing")) return ..(user, TRUE) - playsound(loc, user.species.unarmed.attack_sound, 25, 1, -1) + playsound(loc, user.dna.species.unarmed.attack_sound, 25, 1, -1) var/message = "[user] has [hulk_verb]ed [src]!" visible_message("[message]", "[message]") adjustBruteLoss(15) @@ -365,7 +365,7 @@ emp_act return if(ishuman(user)) var/mob/living/carbon/human/H = user - species.spec_attack_hand(H, src) + dna.species.spec_attack_hand(H, src) /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L) if(..()) //successful larva bite. @@ -494,7 +494,7 @@ emp_act /mob/living/carbon/human/water_act(volume, temperature, source) ..() - species.water_act(src,volume,temperature,source) + dna.species.water_act(src,volume,temperature,source) /mob/living/carbon/human/is_eyes_covered(check_glasses = TRUE, check_head = TRUE, check_mask = TRUE) if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES)) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index a835133f4d0..71a5f0396a1 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -2,7 +2,7 @@ . = 0 . += ..() . += config.human_delay - . += species.movement_delay(src) + . += dna.species.movement_delay(src) /mob/living/carbon/human/Process_Spacemove(movement_dir = 0) @@ -39,12 +39,12 @@ if(!lying && !buckled && !throwing) for(var/obj/item/organ/external/splinted in splinted_limbs) splinted.update_splints() - + if(!has_gravity(loc)) return - + var/obj/item/clothing/shoes/S = shoes - + //Bloody footprints var/turf/T = get_turf(src) var/obj/item/organ/external/l_foot = get_organ("l_foot") @@ -119,7 +119,7 @@ if(step_count % 3) //this basically says, every three moves make a noise return 0 //1st - none, 1%3==1, 2nd - none, 2%3==2, 3rd - noise, 3%3==0 - if(species.silent_steps) + if(dna.species.silent_steps) return 0 //species is silent playsound(T, S, volume, 1, range) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 3f478e65d40..5dcae16b87a 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -62,7 +62,7 @@ // standing is poor if(stance_damage >= 8) if(!(lying || resting)) - if(!(NO_PAIN in species.species_traits)) + if(!(NO_PAIN in dna.species.species_traits)) emote("scream") custom_emote(1, "collapses!") Weaken(5) //can't emote while weakened, apparently. @@ -90,7 +90,7 @@ continue var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") - custom_emote(1, "[(NO_PAIN in species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!") + custom_emote(1, "[(NO_PAIN in dna.species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!") else if(E.is_malfunctioning()) diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index a93fd9e8635..e88def0ebad 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -128,7 +128,7 @@ //this is here because this has no client/prefs/brain whatever. age = rand(AGE_MIN, AGE_MAX) change_gender(pick("male", "female")) - rename_character(real_name, species.get_random_name(gender)) + rename_character(real_name, dna.species.get_random_name(gender)) //job handling myjob = new default_job() job = myjob.title @@ -208,9 +208,9 @@ var/datum/dna/toDoppel = chosen.dna T.real_name = toDoppel.real_name - T.set_species(chosen.species.name) - T.body_accessory = chosen.body_accessory T.dna = toDoppel.Clone() + T.set_species(chosen.dna.species) + T.body_accessory = chosen.body_accessory T.UpdateAppearance() domutcheck(T) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 882501c49f2..50848851646 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -419,7 +419,7 @@ ..(what, who, where, silent = is_silent) /mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0) - switch(species.handle_can_equip(I, slot, disable_warning, src)) + switch(dna.species.handle_can_equip(I, slot, disable_warning, src)) if(1) return 1 if(2) return 0 //if it returns 2, it wants no normal handling diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 2e9e9b88656..d577a02e2c4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -15,10 +15,10 @@ handle_heartbeat() handle_heartattack() handle_drunk() - species.handle_life(src) + dna.species.handle_life(src) if(!client) - species.handle_npc(src) + dna.species.handle_npc(src) if(stat != DEAD) //Stuff jammed in your limbs hurts @@ -178,7 +178,7 @@ if(gene_stability < GENETIC_DAMAGE_STAGE_3) gib() - if(!(RADIMMUNE in species.species_traits)) + if(!(RADIMMUNE in dna.species.species_traits)) if(radiation) radiation = Clamp(radiation, 0, 200) @@ -238,7 +238,7 @@ chest.add_autopsy_data("Radiation Poisoning", autopsy_damage) /mob/living/carbon/human/breathe() - if(!species.breathe(src)) + if(!dna.species.breathe(src)) ..() /mob/living/carbon/human/check_breath(datum/gas_mixture/breath) @@ -253,8 +253,8 @@ failed_last_breath = TRUE - if(species) - var/datum/species/S = species + if(dna.species) + var/datum/species/S = dna.species if(S.breathid == "o2") throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) @@ -332,39 +332,39 @@ bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. - if(bodytemperature > species.heat_level_1) + if(bodytemperature > dna.species.heat_level_1) //Body temperature is too hot. if(status_flags & GODMODE) return 1 //godmode - var/mult = species.heatmod + var/mult = dna.species.heatmod - if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2) + if(bodytemperature >= dna.species.heat_level_1 && bodytemperature <= dna.species.heat_level_2) throw_alert("temp", /obj/screen/alert/hot, 1) take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") - if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3) + if(bodytemperature > dna.species.heat_level_2 && bodytemperature <= dna.species.heat_level_3) throw_alert("temp", /obj/screen/alert/hot, 2) take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") - if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY) + if(bodytemperature > dna.species.heat_level_3 && bodytemperature < INFINITY) throw_alert("temp", /obj/screen/alert/hot, 3) if(on_fire) take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire") else take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") - else if(bodytemperature < species.cold_level_1) + else if(bodytemperature < dna.species.cold_level_1) if(status_flags & GODMODE) return 1 if(stat == DEAD) return 1 if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - var/mult = species.coldmod - if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1) + var/mult = dna.species.coldmod + if(bodytemperature >= dna.species.cold_level_2 && bodytemperature <= dna.species.cold_level_1) throw_alert("temp", /obj/screen/alert/cold, 1) take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature") - if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2) + if(bodytemperature >= dna.species.cold_level_3 && bodytemperature < dna.species.cold_level_2) throw_alert("temp", /obj/screen/alert/cold, 2) take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature") - if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3) + if(bodytemperature > -INFINITY && bodytemperature < dna.species.cold_level_3) throw_alert("temp", /obj/screen/alert/cold, 3) take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature") else @@ -379,18 +379,18 @@ var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. if(status_flags & GODMODE) return 1 //godmode - if(adjusted_pressure >= species.hazard_high_pressure) + if(adjusted_pressure >= dna.species.hazard_high_pressure) if(!(HEATRES in mutations)) - var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) + var/pressure_damage = min( ( (adjusted_pressure / dna.species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") throw_alert("pressure", /obj/screen/alert/highpressure, 2) else clear_alert("pressure") - else if(adjusted_pressure >= species.warning_high_pressure) + else if(adjusted_pressure >= dna.species.warning_high_pressure) throw_alert("pressure", /obj/screen/alert/highpressure, 1) - else if(adjusted_pressure >= species.warning_low_pressure) + else if(adjusted_pressure >= dna.species.warning_low_pressure) clear_alert("pressure") - else if(adjusted_pressure >= species.hazard_low_pressure) + else if(adjusted_pressure >= dna.species.hazard_low_pressure) throw_alert("pressure", /obj/screen/alert/lowpressure, 1) else if(COLDRES in mutations) @@ -430,13 +430,13 @@ //END FIRE CODE /mob/living/carbon/human/proc/stabilize_temperature_from_calories() - var/body_temperature_difference = species.body_temperature - bodytemperature + var/body_temperature_difference = dna.species.body_temperature - bodytemperature - if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. + if(bodytemperature <= dna.species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. bodytemperature += max((body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1) + if(bodytemperature >= dna.species.cold_level_1 && bodytemperature <= dna.species.heat_level_1) bodytemperature += body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR - if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. + if(bodytemperature >= dna.species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. //We totally need a sweat system cause it totally makes sense...~ bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers @@ -588,7 +588,7 @@ return 0 //godmode //The fucking FAT mutation is the greatest shit ever. It makes everyone so hot and bothered. - if(CAN_BE_FAT in species.species_traits) + if(CAN_BE_FAT in dna.species.species_traits) if(FAT in mutations) if(overeatduration < 100) becomeSlim() @@ -652,7 +652,7 @@ AdjustDizzy(-3) AdjustJitter(-3) - if(NO_INTORGANS in species.species_traits) + if(NO_INTORGANS in dna.species.species_traits) return handle_trace_chems() @@ -766,10 +766,10 @@ //Vision //god knows why this is here var/obj/item/organ/vision - if(species.vision_organ) - vision = get_int_organ(species.vision_organ) + if(dna.species.vision_organ) + vision = get_int_organ(dna.species.vision_organ) - if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. + if(!dna.species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. SetEyeBlind(0) blinded = 0 SetEyeBlurry(0) @@ -860,10 +860,10 @@ remoteview_target = null reset_perspective(null) - species.handle_vision(src) + dna.species.handle_vision(src) /mob/living/carbon/human/handle_hud_icons() - species.handle_hud_icons(src) + dna.species.handle_hud_icons(src) /mob/living/carbon/human/handle_random_events() // Puke if toxloss is too high @@ -907,7 +907,7 @@ if(times_fired % 5 == 1) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) - if(NO_BLOOD in species.species_traits) + if(NO_BLOOD in dna.species.species_traits) return PULSE_NONE //No blood, no pulse. if(stat == DEAD) @@ -977,7 +977,7 @@ var/obj/item/clothing/mask/M = H.wear_mask if(M && (M.flags_cover & MASKCOVERSMOUTH)) return - if(NO_BREATHE in H.species.species_traits) + if(NO_BREATHE in H.dna.species.species_traits) return //no puking if you can't smell! // Humans can lack a mind datum, y'know if(H.mind && (H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Coroner")) @@ -1054,9 +1054,9 @@ /mob/living/carbon/human/proc/can_heartattack() - if(NO_BLOOD in species.species_traits) + if(NO_BLOOD in dna.species.species_traits) return FALSE - if(NO_INTORGANS in species.species_traits) + if(NO_INTORGANS in dna.species.species_traits) return FALSE return TRUE diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index d4b160509ea..e16c67a56d0 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -1,7 +1,7 @@ /mob/living/carbon/human/Login() ..() - if(species && species.ventcrawler) + if(dna.species && dna.species.ventcrawler) to_chat(src, "You can ventcrawl! Use alt+click on vents to quickly travel about the station.") update_pipe_vision() return diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 7657a3be3be..7d408ce9199 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -42,7 +42,7 @@ if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak. return 1 - if(species.can_understand(other)) + if(dna.species.can_understand(other)) return 1 //These only pertain to common. Languages are handled by mob/say_understands() @@ -87,7 +87,7 @@ /mob/living/carbon/human/IsVocal() // how do species that don't breathe talk? magic, that's what. - var/breathes = (!(NO_BREATHE in species.species_traits)) + var/breathes = (!(NO_BREATHE in dna.species.species_traits)) var/obj/item/organ/internal/L = get_organ_slot("lungs") if((breathes && !L) || breathes && L && (L.status & ORGAN_DEAD)) return FALSE @@ -219,8 +219,8 @@ /mob/living/carbon/human/handle_speech_sound() var/list/returns[2] - if(species.speech_sounds && prob(species.speech_chance)) - returns[1] = sound(pick(species.speech_sounds)) + if(dna.species.speech_sounds && prob(dna.species.speech_chance)) + returns[1] = sound(pick(dna.species.speech_sounds)) returns[2] = 50 return returns diff --git a/code/modules/mob/living/carbon/human/shock.dm b/code/modules/mob/living/carbon/human/shock.dm index d8dc9356de7..e2d5dd79cec 100644 --- a/code/modules/mob/living/carbon/human/shock.dm +++ b/code/modules/mob/living/carbon/human/shock.dm @@ -23,7 +23,7 @@ /mob/living/carbon/human/proc/handle_shock() if(status_flags & GODMODE) //godmode return - if(NO_PAIN in species.species_traits) + if(NO_PAIN in dna.species.species_traits) return updateshock() diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index c5003b21330..d3ca4f68b3a 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -11,7 +11,7 @@ path = /mob/living/carbon/human/monkey language = null default_language = "Chimpanzee" - greater_form = "Human" + greater_form = /datum/species/human is_small = 1 has_fine_manipulation = 0 ventcrawler = 1 @@ -99,7 +99,7 @@ icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi' deform = 'icons/mob/human_races/monkeys/r_farwa.dmi' - greater_form = "Tajaran" + greater_form = /datum/species/tajaran default_language = "Farwa" flesh_color = "#AFA59E" base_color = "#000000" @@ -123,7 +123,7 @@ icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi' deform = 'icons/mob/human_races/monkeys/r_wolpin.dmi' - greater_form = "Vulpkanin" + greater_form = /datum/species/vulpkanin default_language = "Wolpin" flesh_color = "#966464" base_color = "#000000" @@ -147,7 +147,7 @@ icobase = 'icons/mob/human_races/monkeys/r_neara.dmi' deform = 'icons/mob/human_races/monkeys/r_neara.dmi' - greater_form = "Skrell" + greater_form = /datum/species/skrell default_language = "Neara" flesh_color = "#8CD7A3" blood_color = "#1D2CBF" @@ -162,7 +162,7 @@ deform = 'icons/mob/human_races/monkeys/r_stok.dmi' tail = "stoktail" - greater_form = "Unathi" + greater_form = /datum/species/unathi default_language = "Stok" flesh_color = "#34AF10" base_color = "#000000" diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 139f2f7c9bb..aa59b83b2c4 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -334,7 +334,7 @@ /datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) //Vampire code if(user.mind && user.mind.vampire && (user.mind in ticker.mode.vampires) && !user.mind.vampire.draining && user.zone_sel && user.zone_sel.selecting == "head" && target != user) - if((NO_BLOOD in target.species.species_traits) || target.species.exotic_blood || !target.blood_volume) + if((NO_BLOOD in target.dna.species.species_traits) || target.dna.species.exotic_blood || !target.blood_volume) to_chat(user, "They have no blood!") return if(target.mind && target.mind.vampire && (target.mind in ticker.mode.vampires)) @@ -354,7 +354,7 @@ if(attacker_style && attacker_style.harm_act(user, target)) return 1 else - var/datum/unarmed_attack/attack = user.species.unarmed + var/datum/unarmed_attack/attack = user.dna.species.unarmed user.do_attack_animation(target, attack.animation_type) add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL) @@ -364,7 +364,7 @@ else target.LAssailant = user - var/damage = rand(user.species.punchdamagelow, user.species.punchdamagehigh) + var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) damage += attack.damage if(!damage) playsound(target.loc, attack.miss_sound, 25, 1, -1) @@ -380,7 +380,7 @@ target.visible_message("[user] [pick(attack.attack_verb)]ed [target]!") target.apply_damage(damage, BRUTE, affecting, armor_block, sharp = attack.sharp) //moving this back here means Armalis are going to knock you down 70% of the time, but they're pure adminbus anyway. - if((target.stat != DEAD) && damage >= user.species.punchstunthreshold) + if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold) target.visible_message("[user] has weakened [target]!", \ "[user] has weakened [target]!") target.apply_effect(4, WEAKEN, armor_block) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index c93d11d9a2b..ae17fcb0367 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -3,8 +3,8 @@ name_plural = "Humans" icobase = 'icons/mob/human_races/r_human.dmi' deform = 'icons/mob/human_races/r_def_human.dmi' - primitive_form = "Monkey" - path = /mob/living/carbon/human/human + primitive_form = /datum/species/monkey + path = /mob/living/carbon/human language = "Sol Common" species_traits = list(LIPS, CAN_BE_FAT) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS @@ -29,7 +29,7 @@ language = "Sinta'unathi" tail = "sogtail" unarmed_type = /datum/unarmed_attack/claws - primitive_form = "Stok" + primitive_form = /datum/species/monkey/unathi blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ Uuosa-Eso system, which roughly translates to 'burning mother'.

Coming from a harsh, radioactive \ @@ -138,7 +138,7 @@ heat_level_2 = 380 heat_level_3 = 440 - primitive_form = "Farwa" + primitive_form = /datum/species/monkey/tajaran species_traits = list(LIPS, CAN_BE_FAT) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS @@ -181,7 +181,7 @@ path = /mob/living/carbon/human/vulpkanin default_language = "Galactic Common" language = "Canilunzt" - primitive_form = "Wolpin" + primitive_form = /datum/species/monkey/vulpkanin tail = "vulptail" unarmed_type = /datum/unarmed_attack/claws @@ -235,7 +235,7 @@ path = /mob/living/carbon/human/skrell default_language = "Galactic Common" language = "Skrellian" - primitive_form = "Neara" + primitive_form = /datum/species/monkey/skrell blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ the royals' or 'Light of the Crown'.

Skrell are a highly advanced and logical race who live under the rule \ @@ -393,7 +393,7 @@ ..() /datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H, var/owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race. - if(H.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis. + if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis. var/new_icobase = 'icons/mob/human_races/vox/r_vox.dmi' //Default Green Vox. var/new_deform = 'icons/mob/human_races/vox/r_def_vox.dmi' //Default Green Vox. switch(H.s_tone) @@ -617,7 +617,7 @@ if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller for(var/organname in H.bodyparts_by_name) var/obj/item/organ/external/E = H.bodyparts_by_name[organname] - if(istype(E) && E.dna && istype(E.dna.species2, /datum/species/slime)) + if(istype(E) && E.dna && istype(E.dna.species, /datum/species/slime)) E.sync_colour_to_human(H) H.update_hair(0) H.update_body() @@ -672,7 +672,7 @@ for(var/l in bodyparts_by_name) var/obj/item/organ/external/E = bodyparts_by_name[l] if(!istype(E)) - var/list/limblist = species.has_limbs[l] + var/list/limblist = dna.species.has_limbs[l] var/obj/item/organ/external/limb = limblist["path"] var/parent_organ = initial(limb.parent_organ) var/obj/item/organ/external/parentLimb = bodyparts_by_name[parent_organ] @@ -708,7 +708,7 @@ stored_burn = doomedStump.burn_dam qdel(O) - var/limb_list = species.has_limbs[chosen_limb] + var/limb_list = dna.species.has_limbs[chosen_limb] var/obj/item/organ/external/limb_path = limb_list["path"] // Parent check var/obj/item/organ/external/potential_parent = bodyparts_by_name[initial(limb_path.parent_organ)] diff --git a/code/modules/mob/living/carbon/human/status_procs.dm b/code/modules/mob/living/carbon/human/status_procs.dm index 5f74f202603..e7a65129017 100644 --- a/code/modules/mob/living/carbon/human/status_procs.dm +++ b/code/modules/mob/living/carbon/human/status_procs.dm @@ -1,19 +1,19 @@ /mob/living/carbon/human/SetStunned(amount, updating = 1, force = 0) - if(species) - amount = amount * species.stun_mod + if(dna.species) + amount = amount * dna.species.stun_mod ..() /mob/living/carbon/human/SetWeakened(amount, updating = 1, force = 0) - if(species) - amount = amount * species.stun_mod + if(dna.species) + amount = amount * dna.species.stun_mod ..() /mob/living/carbon/human/SetParalysis(amount, updating = 1, force = 0) - if(species) - amount = amount * species.stun_mod + if(dna.species) + amount = amount * dna.species.stun_mod ..() /mob/living/carbon/human/SetSleeping(amount, updating = 1, no_alert = FALSE) - if(species) - amount = amount * species.stun_mod + if(dna.species) + amount = amount * dna.species.stun_mod ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 4f84cf1f821..3729e9aa85e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -185,7 +185,7 @@ var/global/list/damage_icon_parts = list() previous_damage_appearance = damage_appearance - var/icon/standing = new /icon(species.damage_overlays, "00") + var/icon/standing = new /icon(dna.species.damage_overlays, "00") var/image/standing_image = new /image("icon" = standing) @@ -194,12 +194,12 @@ var/global/list/damage_icon_parts = list() O.update_icon() if(O.damage_state == "00") continue var/icon/DI - var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]" + var/cache_index = "[O.damage_state]/[O.icon_name]/[dna.species.blood_color]/[dna.species.name]" if(damage_icon_parts[cache_index] == null) - DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human - DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(species.blood_color, ICON_MULTIPLY) + DI = new /icon(dna.species.damage_overlays, O.damage_state) // the damage icon for whole human + DI.Blend(new /icon(dna.species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(dna.species.blood_color, ICON_MULTIPLY) damage_icon_parts[cache_index] = DI else DI = damage_icon_parts[cache_index] @@ -220,15 +220,15 @@ var/global/list/damage_icon_parts = list() var/hulk = (HULK in mutations) var/skeleton = (SKELETON in mutations) - if(species && species.bodyflags & HAS_ICON_SKIN_TONE) - species.updatespeciescolor(src) + if(dna.species && dna.species.bodyflags & HAS_ICON_SKIN_TONE) + dna.species.updatespeciescolor(src) //CACHING: Generate an index key from visible bodyparts. //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. //Create a new, blank icon for our mob to use. if(stand_icon) qdel(stand_icon) - stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") + stand_icon = new(dna.species.icon_template ? dna.species.icon_template : 'icons/mob/human.dmi',"blank") var/icon_key = "" var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) @@ -237,7 +237,7 @@ var/global/list/damage_icon_parts = list() else icon_key += "#000000" - for(var/organ_tag in species.has_limbs) + for(var/organ_tag in dna.species.has_limbs) var/obj/item/organ/external/part = bodyparts_by_name[organ_tag] if(isnull(part)) icon_key += "0" @@ -249,7 +249,7 @@ var/global/list/damage_icon_parts = list() icon_key += "1" if(part) - icon_key += "[part.dna.species2.race_key]" + icon_key += "[part.dna.species.race_key]" icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" if(part.s_col) @@ -307,7 +307,7 @@ var/global/list/damage_icon_parts = list() //END CACHED ICON GENERATION. stand_icon.Blend(base_icon,ICON_OVERLAY) - if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs... (having a non-tail body accessory like the snake body will override this) + if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs... (having a non-tail body accessory like the snake body will override this) overlays_standing[LIMBS_LAYER] = image(stand_icon) // Diverts limbs to their own layer so they can overlay things (i.e. tails). else overlays_standing[LIMBS_LAYER] = null // So we don't get the old species' sprite splatted on top of the new one's @@ -316,18 +316,18 @@ var/global/list/damage_icon_parts = list() overlays_standing[UNDERWEAR_LAYER] = null var/icon/underwear_standing = new/icon('icons/mob/underwear.dmi',"nude") - if(underwear && species.clothing_flags & HAS_UNDERWEAR) + if(underwear && dna.species.clothing_flags & HAS_UNDERWEAR) var/datum/sprite_accessory/underwear/U = underwear_list[underwear] if(U) underwear_standing.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY) - if(undershirt && species.clothing_flags & HAS_UNDERSHIRT) + if(undershirt && dna.species.clothing_flags & HAS_UNDERSHIRT) var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt] if(U2) underwear_standing.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) - if(socks && species.clothing_flags & HAS_SOCKS) + if(socks && dna.species.clothing_flags & HAS_SOCKS) var/datum/sprite_accessory/socks/U3 = socks_list[socks] if(U3) underwear_standing.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) @@ -339,7 +339,7 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() - if(lip_style && (LIPS in species.species_traits)) + if(lip_style && (LIPS in dna.species.species_traits)) var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s") lips.Blend(lip_color, ICON_ADD) @@ -369,7 +369,7 @@ var/global/list/damage_icon_parts = list() if(chest_organ && m_styles["body"]) var/body_marking = m_styles["body"] var/datum/sprite_accessory/body_marking_style = marking_styles_list[body_marking] - if(body_marking_style && body_marking_style.species_allowed && (species.name in body_marking_style.species_allowed)) + if(body_marking_style && body_marking_style.species_allowed && (dna.species.name in body_marking_style.species_allowed)) var/icon/b_marking_s = new/icon("icon" = body_marking_style.icon, "icon_state" = "[body_marking_style.icon_state]_s") if(body_marking_style.do_colouration) b_marking_s.Blend(m_colours["body"], ICON_ADD) @@ -379,7 +379,7 @@ var/global/list/damage_icon_parts = list() if(head_organ && m_styles["head"]) //If the head is destroyed, forget the head markings. This prevents floating optical markings on decapitated IPCs, for example. var/head_marking = m_styles["head"] var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking] - if(head_marking_style && head_marking_style.species_allowed && (head_organ.dna.species2.name in head_marking_style.species_allowed)) + if(head_marking_style && head_marking_style.species_allowed && (head_organ.dna.species.name in head_marking_style.species_allowed)) var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s") if(head_marking_style.do_colouration) h_marking_s.Blend(m_colours["head"], ICON_ADD) @@ -407,10 +407,10 @@ var/global/list/damage_icon_parts = list() //base icons var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") - if(head_organ.ha_style && (head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY)) + if(head_organ.ha_style && (head_organ.dna.species.bodyflags & HAS_HEAD_ACCESSORY)) var/datum/sprite_accessory/head_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style] if(head_accessory_style && head_accessory_style.species_allowed) - if(head_organ.dna.species2.name in head_accessory_style.species_allowed) + if(head_organ.dna.species.name in head_accessory_style.species_allowed) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") if(head_accessory_style.do_colouration) head_accessory_s.Blend(head_organ.headacc_colour, ICON_ADD) @@ -451,9 +451,9 @@ var/global/list/damage_icon_parts = list() //if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN // hair_standing.Blend(debrained_s, ICON_OVERLAY) if(hair_style && hair_style.species_allowed) - if((head_organ.dna.species2.name in hair_style.species_allowed) || (head_organ.dna.species2.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... + if((head_organ.dna.species.name in hair_style.species_allowed) || (head_organ.dna.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(istype(head_organ.dna.species2, /datum/species/slime)) // I am el worstos + if(istype(head_organ.dna.species, /datum/species/slime)) // I am el worstos hair_s.Blend("[skin_colour]A0", ICON_AND) else if(hair_style.do_colouration) hair_s.Blend(head_organ.hair_colour, ICON_ADD) @@ -497,9 +497,9 @@ var/global/list/damage_icon_parts = list() if(head_organ.f_style) var/datum/sprite_accessory/facial_hair/facial_hair_style = facial_hair_styles_list[head_organ.f_style] if(facial_hair_style && facial_hair_style.species_allowed) - if((head_organ.dna.species2.name in facial_hair_style.species_allowed) || (head_organ.dna.species2.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... + if((head_organ.dna.species.name in facial_hair_style.species_allowed) || (head_organ.dna.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(istype(head_organ.dna.species2, /datum/species/slime)) // I am el worstos + if(istype(head_organ.dna.species, /datum/species/slime)) // I am el worstos facial_s.Blend("[skin_colour]A0", ICON_AND) else if(facial_hair_style.do_colouration) facial_s.Blend(head_organ.facial_colour, ICON_ADD) @@ -644,11 +644,11 @@ var/global/list/damage_icon_parts = list() if(w_uniform.icon_override) standing.icon = w_uniform.icon_override - else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name]) - standing.icon = w_uniform.sprite_sheets[species.name] + else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[dna.species.name]) + standing.icon = w_uniform.sprite_sheets[dna.species.name] if(w_uniform.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "uniformblood") bloodsies.color = w_uniform.blood_color standing.overlays += bloodsies @@ -658,8 +658,8 @@ var/global/list/damage_icon_parts = list() if(!tie_color) tie_color = A.icon_state if(A.icon_override) standing.overlays += image("icon" = A.icon_override, "icon_state" = "[A.icon_state]") - else if(A.sprite_sheets && A.sprite_sheets[species.name]) - standing.overlays += image("icon" = A.sprite_sheets[species.name], "icon_state" = "[A.icon_state]") + else if(A.sprite_sheets && A.sprite_sheets[dna.species.name]) + standing.overlays += image("icon" = A.sprite_sheets[dna.species.name], "icon_state" = "[A.icon_state]") else standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") @@ -720,19 +720,19 @@ var/global/list/damage_icon_parts = list() var/image/standing if(gloves.icon_override) standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]") - else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name]) - standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]") + else if(gloves.sprite_sheets && gloves.sprite_sheets[dna.species.name]) + standing = image("icon" = gloves.sprite_sheets[dna.species.name], "icon_state" = "[t_state]") else standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") if(gloves.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "bloodyhands") bloodsies.color = gloves.blood_color standing.overlays += bloodsies overlays_standing[GLOVES_LAYER] = standing else if(blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "bloodyhands") bloodsies.color = hand_blood_color overlays_standing[GLOVES_LAYER] = bloodsies else @@ -759,8 +759,8 @@ var/global/list/damage_icon_parts = list() if(glasses.icon_override) new_glasses = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") - else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.dna.species2.name]) - new_glasses = image("icon" = glasses.sprite_sheets[head_organ.dna.species2.name], "icon_state" = "[glasses.icon_state]") + else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.dna.species.name]) + new_glasses = image("icon" = glasses.sprite_sheets[head_organ.dna.species.name], "icon_state" = "[glasses.icon_state]") else new_glasses = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") @@ -795,9 +795,9 @@ var/global/list/damage_icon_parts = list() if(l_ear.icon_override) t_type = "[t_type]_l" overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") - else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name]) + else if(l_ear.sprite_sheets && l_ear.sprite_sheets[dna.species.name]) t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") + overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[dna.species.name], "icon_state" = "[t_type]") else overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") @@ -811,9 +811,9 @@ var/global/list/damage_icon_parts = list() if(r_ear.icon_override) t_type = "[t_type]_r" overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") - else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name]) + else if(r_ear.sprite_sheets && r_ear.sprite_sheets[dna.species.name]) t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]") + overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[dna.species.name], "icon_state" = "[t_type]") else overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") @@ -837,20 +837,20 @@ var/global/list/damage_icon_parts = list() var/image/standing if(shoes.icon_override) standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]") - else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name]) - standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]") + else if(shoes.sprite_sheets && shoes.sprite_sheets[dna.species.name]) + standing = image("icon" = shoes.sprite_sheets[dna.species.name], "icon_state" = "[shoes.icon_state]") else standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") if(shoes.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "shoeblood") bloodsies.color = shoes.blood_color standing.overlays += bloodsies overlays_standing[SHOES_LAYER] = standing else if(feet_blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "shoeblood") bloodsies.color = feet_blood_color overlays_standing[SHOES_LAYER] = bloodsies else @@ -891,13 +891,13 @@ var/global/list/damage_icon_parts = list() var/image/standing if(head.icon_override) standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]") - else if(head.sprite_sheets && head.sprite_sheets[species.name]) - standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]") + else if(head.sprite_sheets && head.sprite_sheets[dna.species.name]) + standing = image("icon" = head.sprite_sheets[dna.species.name], "icon_state" = "[head.icon_state]") else standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]") if(head.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "helmetblood") bloodsies.color = head.blood_color standing.overlays += bloodsies overlays_standing[HEAD_LAYER] = standing @@ -925,8 +925,8 @@ var/global/list/damage_icon_parts = list() if(belt.icon_override) t_state = "[t_state]_be" overlays_standing[BELT_LAYER] = image("icon" = belt.icon_override, "icon_state" = "[t_state]") - else if(belt.sprite_sheets && belt.sprite_sheets[species.name]) - overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[species.name], "icon_state" = "[t_state]") + else if(belt.sprite_sheets && belt.sprite_sheets[dna.species.name]) + overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[dna.species.name], "icon_state" = "[t_state]") else overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]") else @@ -949,8 +949,8 @@ var/global/list/damage_icon_parts = list() var/image/standing if(wear_suit.icon_override) standing = image("icon" = wear_suit.icon_override, "icon_state" = "[wear_suit.icon_state]") - else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) - standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]") + else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[dna.species.name]) + standing = image("icon" = wear_suit.sprite_sheets[dna.species.name], "icon_state" = "[wear_suit.icon_state]") else if(FAT in mutations) if(wear_suit.flags_size & ONESIZEFITSALL) standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]") @@ -969,7 +969,7 @@ var/global/list/damage_icon_parts = list() if(wear_suit.blood_DNA) var/obj/item/clothing/suit/S = wear_suit - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") bloodsies.color = wear_suit.blood_color standing.overlays += bloodsies @@ -1035,14 +1035,14 @@ var/global/list/damage_icon_parts = list() if(wear_mask.icon_override) mask_icon = new(wear_mask.icon_override) standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]") - else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name]) - mask_icon = new(wear_mask.sprite_sheets[species.name]) - standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]") + else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[dna.species.name]) + mask_icon = new(wear_mask.sprite_sheets[dna.species.name]) + standing = image("icon" = wear_mask.sprite_sheets[dna.species.name], "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]") else standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]") if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood") + var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "maskblood") bloodsies.color = wear_mask.blood_color standing.overlays += bloodsies overlays_standing[FACEMASK_LAYER] = standing @@ -1062,8 +1062,8 @@ var/global/list/damage_icon_parts = list() //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. var/obj/item/rig/rig = back standing = rig.mob_icon - else if(back.sprite_sheets && back.sprite_sheets[species.name]) - standing = image("icon" = back.sprite_sheets[species.name], "icon_state" = "[back.icon_state]") + else if(back.sprite_sheets && back.sprite_sheets[dna.species.name]) + standing = image("icon" = back.sprite_sheets[dna.species.name], "icon_state" = "[back.icon_state]") else standing = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]") @@ -1163,7 +1163,7 @@ var/global/list/damage_icon_parts = list() var/icon/tail_marking_icon var/datum/sprite_accessory/body_markings/tail/tail_marking_style - if(m_styles["tail"] != "None" && (species.bodyflags & HAS_TAIL_MARKINGS)) + if(m_styles["tail"] != "None" && (dna.species.bodyflags & HAS_TAIL_MARKINGS)) var/tail_marking = m_styles["tail"] tail_marking_style = marking_styles_list[tail_marking] tail_marking_icon = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]_s") @@ -1172,11 +1172,11 @@ var/global/list/damage_icon_parts = list() if(body_accessory) if(body_accessory.try_restrictions(src)) var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state) - if(species.bodyflags & HAS_SKIN_COLOR) + if(dna.species.bodyflags & HAS_SKIN_COLOR) accessory_s.Blend(skin_colour, body_accessory.blend_mode) if(tail_marking_icon && (body_accessory.name in tail_marking_style.tails_allowed)) accessory_s.Blend(tail_marking_icon, ICON_OVERLAY) - if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) + if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) // Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway. var/icon/under = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "accessory_none_s") under.Insert(new/icon(accessory_s, dir=SOUTH), dir=SOUTH) @@ -1194,14 +1194,14 @@ var/global/list/damage_icon_parts = list() else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation. overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) - else if(tail && species.bodyflags & HAS_TAIL) //no tailless tajaran + else if(tail && dna.species.bodyflags & HAS_TAIL) //no tailless tajaran if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[tail]_s") - if(species.bodyflags & HAS_SKIN_COLOR) + if(dna.species.bodyflags & HAS_SKIN_COLOR) tail_s.Blend(skin_colour, ICON_ADD) if(tail_marking_icon && !tail_marking_style.tails_allowed) tail_s.Blend(tail_marking_icon, ICON_OVERLAY) - if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) + if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) // Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway. var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "blank") under.Insert(new/icon(tail_s, dir=SOUTH), dir=SOUTH) @@ -1230,7 +1230,7 @@ var/global/list/damage_icon_parts = list() var/icon/tail_marking_icon var/datum/sprite_accessory/body_markings/tail/tail_marking_style - if(m_styles["tail"] != "None" && (species.bodyflags & HAS_TAIL_MARKINGS)) + if(m_styles["tail"] != "None" && (dna.species.bodyflags & HAS_TAIL_MARKINGS)) var/tail_marking = m_styles["tail"] tail_marking_style = marking_styles_list[tail_marking] tail_marking_icon = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]w_s") @@ -1238,15 +1238,15 @@ var/global/list/damage_icon_parts = list() if(body_accessory) var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state()) - if(species.bodyflags & HAS_SKIN_COLOR) + if(dna.species.bodyflags & HAS_SKIN_COLOR) accessory_s.Blend(skin_colour, body_accessory.blend_mode) if(tail_marking_icon && (body_accessory.name in tail_marking_style.tails_allowed)) accessory_s.Blend(tail_marking_icon, ICON_OVERLAY) - if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) + if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) // Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway. var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "Vulpkanin_tail_delay") - if(body_accessory.allowed_species && (species.name in body_accessory.allowed_species)) - under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay") + if(body_accessory.allowed_species && (dna.species.name in body_accessory.allowed_species)) + under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay") under.Insert(new/icon(accessory_s, dir=SOUTH), dir=SOUTH) under.Insert(new/icon(accessory_s, dir=EAST), dir=EAST) under.Insert(new/icon(accessory_s, dir=WEST), dir=WEST) @@ -1255,23 +1255,23 @@ var/global/list/damage_icon_parts = list() // Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such. var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "Vulpkanin_tail_delay") - if(body_accessory.allowed_species && (species.name in body_accessory.allowed_species)) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank - over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay") + if(body_accessory.allowed_species && (dna.species.name in body_accessory.allowed_species)) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank + over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay") over.Insert(new/icon(accessory_s, dir=NORTH), dir=NORTH) overlays_standing[TAIL_LAYER] = image(over, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation. overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset) - else if(tail && species.bodyflags & HAS_TAIL) + else if(tail && dna.species.bodyflags & HAS_TAIL) var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[tail]w_s") - if(species.bodyflags & HAS_SKIN_COLOR) + if(dna.species.bodyflags & HAS_SKIN_COLOR) tailw_s.Blend(skin_colour, ICON_ADD) if(tail_marking_icon && !tail_marking_style.tails_allowed) tailw_s.Blend(tail_marking_icon, ICON_OVERLAY) - if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) + if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this) // Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway. - var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay") + var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay") under.Insert(new/icon(tailw_s, dir=SOUTH), dir=SOUTH) under.Insert(new/icon(tailw_s, dir=EAST), dir=EAST) under.Insert(new/icon(tailw_s, dir=WEST), dir=WEST) @@ -1279,7 +1279,7 @@ var/global/list/damage_icon_parts = list() overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(under) // Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such. - var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay") + var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay") over.Insert(new/icon(tailw_s, dir=NORTH), dir=NORTH) overlays_standing[TAIL_LAYER] = image(over) @@ -1314,8 +1314,8 @@ var/global/list/damage_icon_parts = list() var/icon/icon_file = new(icon_path) if(wear_suit.icon_state in icon_file.IconStates()) standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]") - else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) - var/icon_path = "[wear_suit.sprite_sheets[species.name]]" + else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[dna.species.name]) + var/icon_path = "[wear_suit.sprite_sheets[dna.species.name]]" icon_path = "[copytext(icon_path, 1, findtext(icon_path, "/suit.dmi"))]/collar.dmi" //If this file doesn't exist, the end result is that COLLAR_LAYER will be unchanged (empty). if(fexists(icon_path)) //Just ensuring the nonexistance of a file with the above path won't cause a runtime. var/icon/icon_file = new(icon_path) diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 80ed9fdbffd..2d68747a742 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -337,7 +337,7 @@ if(istype(L, /mob/living/carbon/human)) //Ignore slime(wo)men var/mob/living/carbon/human/H = L - if(H.species.name == "Slime People") + if(H.dna.species.name == "Slime People") continue if(!L.canmove) // Only one slime can latch on at a time. diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index d9c7a9f12ef..50b22a2c8ed 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -217,7 +217,7 @@ to_chat(target, "You must follow the orders of [user], and help [user.p_them()] succeed in [user.p_their()] dastardly schemes.") to_chat(target, "You may not harm other Greyshirt or [user]. However, you do not need to obey other Greyshirts.") ticker.mode.greyshirts += target.mind - target.set_species("Human") + target.set_species(/datum/species/human) head_organ.h_style = "Bald" head_organ.f_style = "Shaved" target.s_tone = 35 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bff49e7c527..ee23633f4b6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -660,14 +660,14 @@ TH.transfer_mob_blood_dna(src) if(ishuman(src)) var/mob/living/carbon/human/H = src - if(H.species.blood_color) - TH.color = H.species.blood_color + if(H.dna.species.blood_color) + TH.color = H.dna.species.blood_color else TH.color = "#A10808" /mob/living/carbon/human/makeTrail(turf/T) - if((NO_BLOOD in species.species_traits) || species.exotic_blood || !bleed_rate || bleedsuppress) + if((NO_BLOOD in dna.species.species_traits) || dna.species.exotic_blood || !bleed_rate || bleedsuppress) return ..() diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 6cdffd48f16..a60dfc344ca 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -373,7 +373,7 @@ // is secretly a silicon if(ishuman(C)) var/mob/living/carbon/human/H = C - if(H.species && H.species.reagent_tag == PROCESS_SYN) + if(H.dna.species && H.dna.species.reagent_tag == PROCESS_SYN) return 0 if(emagged == 2) //Everyone needs our medicine. (Our medicine is toxins) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 3243061273f..0efaefcce07 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -715,7 +715,7 @@ var/list/blood_dna = H.get_blood_dna_list() if(blood_dna) transfer_blood_dna(blood_dna) - currentBloodColor = H.species.blood_color + currentBloodColor = H.dna.species.blood_color return /mob/living/simple_animal/bot/mulebot/bot_control_message(command, mob/user, user_turf) diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 64fe7d05b9b..2396d08a1df 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -54,7 +54,7 @@ /mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M) //Let people pick the little buggers up. if(M.a_intent == INTENT_HELP) - if(M.species && M.species.name == "Diona") + if(M.dna.species && M.dna.species.name == "Diona") to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.") to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.") verbs += /mob/living/simple_animal/diona/proc/split @@ -82,7 +82,7 @@ if(ishuman(C)) var/mob/living/carbon/human/D = C - if(D.species && D.species.name == "Diona") + if(D.dna.species && D.dna.species.name == "Diona") choices += C var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices @@ -142,7 +142,7 @@ visible_message("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.") var/mob/living/carbon/human/diona/adult = new(get_turf(loc)) - adult.set_species("Diona") + adult.set_species(/datum/species/diona) if(istype(loc, /obj/item/holder/diona)) var/obj/item/holder/diona/L = loc @@ -178,7 +178,7 @@ if(!M || !src) return - if(NO_BLOOD in M.species.species_traits) + if(NO_BLOOD in M.dna.species.species_traits) to_chat(src, "That donor has no blood to take.") return diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 283936acb44..f3e31925228 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -178,7 +178,7 @@ if(ishuman(the_target)) var/mob/living/carbon/human/H = the_target - if(is_type_in_list(src, H.species.ignored_by)) + if(is_type_in_list(src, H.dna.species.ignored_by)) return 0 if(istype(the_target, /obj/mecha)) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 235a161c595..693ca724ac6 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -196,7 +196,7 @@ var/global/list/ts_spiderling_list = list() var/can_poison = 1 if(ishuman(G)) var/mob/living/carbon/human/H = G - if(!(H.species.reagent_tag & PROCESS_ORG) || (!H.species.tox_mod)) + if(!(H.dna.species.reagent_tag & PROCESS_ORG) || (!H.dna.species.tox_mod)) can_poison = 0 spider_specialattack(G,can_poison) else diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index fb62ad3a629..2d024ec786e 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -58,8 +58,8 @@ if(istype(src,/mob/living/carbon/human)) var/mob/living/carbon/human/H = src - if(H.species && H.species.abilities) - client.verbs |= H.species.abilities + if(H.dna.species && H.dna.species.abilities) + client.verbs |= H.dna.species.abilities client.screen += client.void diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 458138b9db0..93941d6e7d2 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -410,7 +410,7 @@ return 1 var/mob/living/carbon/human/H = attacker - if(ishuman(H) && is_type_in_list(prey, H.species.allowed_consumed_mobs)) //species eating of other mobs + if(ishuman(H) && is_type_in_list(prey, H.dna.species.allowed_consumed_mobs)) //species eating of other mobs return 1 return 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index d06028625b8..2f51ec9417b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -1,7 +1,7 @@ /proc/issmall(A) if(A && istype(A, /mob/living/carbon/human)) var/mob/living/carbon/human/H = A - if(H.species && H.species.is_small) + if(H.dna.species && H.dna.species.is_small) return 1 return 0 diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 274c1602e04..d7e8a531867 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -395,7 +395,7 @@ var/arrivalmessage = announcer.arrivalmsg arrivalmessage = replacetext(arrivalmessage,"$name",character.real_name) arrivalmessage = replacetext(arrivalmessage,"$rank",rank ? "[rank]" : "visitor") - arrivalmessage = replacetext(arrivalmessage,"$species",character.species.name) + arrivalmessage = replacetext(arrivalmessage,"$species",character.dna.species.name) arrivalmessage = replacetext(arrivalmessage,"$age",num2text(character.age)) arrivalmessage = replacetext(arrivalmessage,"$gender",character.gender == FEMALE ? "Female" : "Male") announcer.say(";[arrivalmessage]") @@ -537,7 +537,7 @@ else if(mind.assigned_role == "Mime") new_character.real_name = pick(mime_names) new_character.rename_self("mime") - else if(new_character.species == "Diona") + else if(new_character.dna.species == "Diona") new_character.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name! new_character.rename_self("diona") mind.original = new_character diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 86abdffd48b..511816124f7 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -223,13 +223,13 @@ if(current_species) if(current_species.bodyflags & HAS_ICON_SKIN_TONE) //Handling species-specific icon-based skin tones by flagged race. var/mob/living/carbon/human/H = new - H.species = current_species + H.dna.species = current_species H.s_tone = s_tone - H.species.updatespeciescolor(H, 0) //The mob's species wasn't set, so it's almost certainly different than the character's species at the moment. Thus, we need to be owner-insensitive. + H.dna.species.updatespeciescolor(H, 0) //The mob's species wasn't set, so it's almost certainly different than the character's species at the moment. Thus, we need to be owner-insensitive. var/obj/item/organ/external/chest/C = H.get_organ("chest") - icobase = C.icobase ? C.icobase : C.dna.species2.icobase - if(H.species.bodyflags & HAS_TAIL) - coloured_tail = H.tail ? H.tail : H.species.tail + icobase = C.icobase ? C.icobase : C.dna.species.icobase + if(H.dna.species.bodyflags & HAS_TAIL) + coloured_tail = H.tail ? H.tail : H.dna.species.tail qdel(H) else diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index dc41b75e733..dea188e1eb7 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -44,24 +44,24 @@ if(href_list["skin_tone"]) if(can_change_skin_tone()) var/new_s_tone = null - if(owner.species.bodyflags & HAS_SKIN_TONE) + if(owner.dna.species.bodyflags & HAS_SKIN_TONE) new_s_tone = input(usr, "Choose your character's skin tone:\n(Light 1 - 220 Dark)", "Skin Tone", owner.s_tone) as num|null if(isnum(new_s_tone) && can_still_topic(state)) new_s_tone = 35 - max(min(round(new_s_tone), 220),1) - else if(owner.species.bodyflags & HAS_ICON_SKIN_TONE) + else if(owner.dna.species.bodyflags & HAS_ICON_SKIN_TONE) var/const/MAX_LINE_ENTRIES = 4 - var/prompt = "Choose your character's skin tone: 1-[owner.species.icon_skin_tones.len]\n(" - for(var/i = 1 to owner.species.icon_skin_tones.len) + var/prompt = "Choose your character's skin tone: 1-[owner.dna.species.icon_skin_tones.len]\n(" + for(var/i = 1 to owner.dna.species.icon_skin_tones.len) if(i > MAX_LINE_ENTRIES && !((i - 1) % MAX_LINE_ENTRIES)) prompt += "\n" - prompt += "[i] = [owner.species.icon_skin_tones[i]]" - if(i != owner.species.icon_skin_tones.len) + prompt += "[i] = [owner.dna.species.icon_skin_tones[i]]" + if(i != owner.dna.species.icon_skin_tones.len) prompt += ", " prompt += ")" new_s_tone = input(usr, prompt, "Skin Tone", owner.s_tone) as num|null if(isnum(new_s_tone) && can_still_topic(state)) - new_s_tone = max(min(round(new_s_tone), owner.species.icon_skin_tones.len), 1) + new_s_tone = max(min(round(new_s_tone), owner.dna.species.icon_skin_tones.len), 1) if(new_s_tone) return owner.change_skin_tone(new_s_tone) @@ -183,9 +183,9 @@ generate_data(check_whitelist, whitelist, blacklist) var/data[0] - data["specimen"] = owner.species.name + data["specimen"] = owner.dna.species.name data["gender"] = owner.gender - data["has_gender"] = owner.species.has_gender + data["has_gender"] = owner.dna.species.has_gender data["change_race"] = can_change(APPEARANCE_RACE) if(data["change_race"]) var/species[0] @@ -283,25 +283,25 @@ return owner && (flags & flag) /datum/nano_module/appearance_changer/proc/can_change_skin_tone() - return owner && (flags & APPEARANCE_SKIN) && ((owner.species.bodyflags & HAS_SKIN_TONE) || (owner.species.bodyflags & HAS_ICON_SKIN_TONE)) + return owner && (flags & APPEARANCE_SKIN) && ((owner.dna.species.bodyflags & HAS_SKIN_TONE) || (owner.dna.species.bodyflags & HAS_ICON_SKIN_TONE)) /datum/nano_module/appearance_changer/proc/can_change_skin_color() - return owner && (flags & APPEARANCE_SKIN) && (owner.species.bodyflags & HAS_SKIN_COLOR) + return owner && (flags & APPEARANCE_SKIN) && (owner.dna.species.bodyflags & HAS_SKIN_COLOR) /datum/nano_module/appearance_changer/proc/can_change_head_accessory() if(!head_organ) log_runtime(EXCEPTION("Missing head!"), owner) return 0 - return owner && (flags & APPEARANCE_HEAD_ACCESSORY) && (head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY) + return owner && (flags & APPEARANCE_HEAD_ACCESSORY) && (head_organ.dna.species.bodyflags & HAS_HEAD_ACCESSORY) /datum/nano_module/appearance_changer/proc/can_change_markings(var/location = "body") var/marking_flag = HAS_BODY_MARKINGS - var/body_flags = owner.species.bodyflags + var/body_flags = owner.dna.species.bodyflags if(location == "head") if(!head_organ) log_debug("Missing head!") return 0 - body_flags = head_organ.dna.species2.bodyflags + body_flags = head_organ.dna.species.bodyflags marking_flag = HAS_HEAD_MARKINGS if(location == "body") marking_flag = HAS_BODY_MARKINGS @@ -311,13 +311,13 @@ return owner && (flags & APPEARANCE_MARKINGS) && (body_flags & marking_flag) /datum/nano_module/appearance_changer/proc/can_change_body_accessory() - return owner && (flags & APPEARANCE_BODY_ACCESSORY) && (owner.species.bodyflags & HAS_TAIL) + return owner && (flags & APPEARANCE_BODY_ACCESSORY) && (owner.dna.species.bodyflags & HAS_TAIL) /datum/nano_module/appearance_changer/proc/can_change_alt_head() if(!head_organ) log_debug("Missing head!") return 0 - return owner && (flags & APPEARANCE_ALT_HEAD) && (head_organ.dna.species2.bodyflags & HAS_ALT_HEADS) + return owner && (flags & APPEARANCE_ALT_HEAD) && (head_organ.dna.species.bodyflags & HAS_ALT_HEADS) /datum/nano_module/appearance_changer/proc/cut_and_generate_data() // Making the assumption that the available species remain constant diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 41799958c4f..ed5b7c1cfd4 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -260,7 +260,7 @@ emag_cooldown = world.time + EMAG_DELAY if(ishuman(ass)) //Suit checks are in check_ass var/mob/living/carbon/human/H = ass - temp_img = icon('icons/obj/butts.dmi', H.species.butt_sprite) + temp_img = icon('icons/obj/butts.dmi', H.dna.species.butt_sprite) else if(istype(ass,/mob/living/silicon/robot/drone)) temp_img = icon('icons/obj/butts.dmi', "drone") else if(istype(ass,/mob/living/simple_animal/diona)) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index e38a42ff88f..e19cd1165b5 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -83,7 +83,7 @@ var/blood_color = "#C80000" if(ishuman(target)) H = target - blood_color = H.species.blood_color + blood_color = H.dna.species.blood_color new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, blood_color) if(prob(33)) var/list/shift = list("x" = 0, "y" = 0) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 3fe2277ed3b..faf0ce94c6a 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -225,20 +225,17 @@ proc/wabbajack(mob/living/M) else new_mob = new /mob/living/simple_animal/chick(M.loc) new_mob.universal_speak = 1 if("human") - new_mob = new /mob/living/carbon/human/human(M.loc) + new_mob = new /mob/living/carbon/human(M.loc) // Include standard, whitelisted, and monkey species... - var/list/new_species = list("Human","Tajaran","Skrell","Unathi","Diona","Vulpkanin") - new_species |= whitelisted_species - for(var/SN in all_species) - var/datum/species/S = all_species[SN] - if(S.greater_form) // Monkeys - new_species |= SN - new_species -= "Vox Armalis" // ... but not Armalis. They're not really designed to be playable - new_species |= "Golem" // Also, golems, sure, why not - var/picked_species = pick(new_species) + var/list/new_species = list() + for(var/datum/species/S in subtypesof(/datum/species)) + if(istype(S, /datum/species/vox/armalis)) + continue + new_species.Add(S) var/mob/living/carbon/human/H = new_mob - H.set_species(picked_species) - randomize = picked_species + var/datum/species/S = pick(new_species) + H.set_species(S) + randomize = initial(S.name) var/datum/preferences/A = new() //Randomize appearance for the human A.copy_to(new_mob) else diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 2c774b7f3dd..2003e78b780 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -133,7 +133,7 @@ var/mob/living/M = target if(ishuman(target)) var/mob/living/carbon/human/H = M - if(IS_PLANT in H.species.species_traits) + if(IS_PLANT in H.dna.species.species_traits) if(prob(15)) M.apply_effect((rand(30,80)),IRRADIATE) M.Weaken(5) @@ -166,7 +166,7 @@ var/mob/M = target if(ishuman(target)) //These rays make plantmen fat. var/mob/living/carbon/human/H = M - if(IS_PLANT in H.species.species_traits) + if(IS_PLANT in H.dna.species.species_traits) H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL) else if(iscarbon(target)) M.show_message("The radiation beam dissipates harmlessly through your body.") diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 83a000fa693..73a591f9ddb 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -209,17 +209,17 @@ var/const/INGEST = 2 //Check if this mob's species is set and can process this type of reagent var/can_process = 0 //If we somehow avoided getting a species or reagent_tag set, we'll assume we aren't meant to process ANY reagents (CODERS: SET YOUR SPECIES AND TAG!) - if(H.species && H.species.reagent_tag) - if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN + if(H.dna.species && H.dna.species.reagent_tag) + if((R.process_flags & SYNTHETIC) && (H.dna.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN can_process = 1 - if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG + if((R.process_flags & ORGANIC) && (H.dna.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG can_process = 1 //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater - if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) + if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.dna.species.reagent_tag & PROCESS_DUO)) can_process = 1 //If handle_reagents returns 0, it's doing the reagent removal on its own - var/species_handled = !(H.species.handle_reagents(H, R)) + var/species_handled = !(H.dna.species.handle_reagents(H, R)) can_process = can_process && !species_handled //If the mob can't process it, remove the reagent at it's normal rate without doing any addictions, overdoses, or on_mob_life() for the reagent if(can_process == 0) @@ -481,13 +481,13 @@ var/const/INGEST = 2 if(ishuman(M)) var/mob/living/carbon/human/H = M //Check if this mob's species is set and can process this type of reagent - if(H.species && H.species.reagent_tag) - if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN + if(H.dna.species && H.dna.species.reagent_tag) + if((R.process_flags & SYNTHETIC) && (H.dna.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN can_process = 1 - if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG + if((R.process_flags & ORGANIC) && (H.dna.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG can_process = 1 //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater - if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) + if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.dna.species.reagent_tag & PROCESS_DUO)) can_process = 1 //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) else diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index bdabfd21956..7426844e292 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -31,7 +31,7 @@ if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients if(prob(50)) M.adjustBruteLoss(-1) - if(!(NO_BLOOD in H.species.species_traits))//do not restore blood on things with no blood by nature. + if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature. if(H.blood_volume < BLOOD_VOLUME_NORMAL) H.blood_volume += 0.4 ..() @@ -66,7 +66,7 @@ M.satiety += 30 if(ishuman(M)) var/mob/living/carbon/human/H = M - if(!(NO_BLOOD in H.species.species_traits))//do not restore blood on things with no blood by nature. + if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature. if(H.blood_volume < BLOOD_VOLUME_NORMAL) H.blood_volume += 0.5 ..() diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index c9f89743e7c..f603d5eb0d1 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -221,7 +221,7 @@ M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER) if(ishuman(M) && prob(33)) var/mob/living/carbon/human/H = M - if(!(NO_BLOOD in H.species.species_traits))//do not restore blood on things with no blood by nature. + if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature. if(H.blood_volume < BLOOD_VOLUME_NORMAL) H.blood_volume += 1 ..() diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 7e6ffaead46..fdddea44bd2 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -155,7 +155,7 @@ /datum/reagent/iron/on_mob_life(mob/living/M) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(!H.species.exotic_blood && !(NO_BLOOD in H.species.species_traits)) + if(!H.dna.species.exotic_blood && !(NO_BLOOD in H.dna.species.species_traits)) if(H.blood_volume < BLOOD_VOLUME_NORMAL) H.blood_volume += 0.8 ..() @@ -313,8 +313,8 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/head/head_organ = H.get_organ("head") - head_organ.h_style = random_hair_style(H.gender, head_organ.dna.species2.name) - head_organ.f_style = random_facial_hair_style(H.gender, head_organ.dna.species2.name) + head_organ.h_style = random_hair_style(H.gender, head_organ.dna.species.name) + head_organ.f_style = random_facial_hair_style(H.gender, head_organ.dna.species.name) H.update_hair() H.update_fhair() ..() @@ -335,14 +335,14 @@ var/datum/sprite_accessory/tmp_hair_style = hair_styles_full_list["Very Long Hair"] var/datum/sprite_accessory/tmp_facial_hair_style = facial_hair_styles_list["Very Long Beard"] - if(head_organ.dna.species2.name in tmp_hair_style.species_allowed) //If 'Very Long Hair' is a style the person's species can have, give it to them. + if(head_organ.dna.species.name in tmp_hair_style.species_allowed) //If 'Very Long Hair' is a style the person's species can have, give it to them. head_organ.h_style = "Very Long Hair" else //Otherwise, give them a random hair style. - head_organ.h_style = random_hair_style(H.gender, head_organ.dna.species2.name) - if(head_organ.dna.species2.name in tmp_facial_hair_style.species_allowed) //If 'Very Long Beard' is a style the person's species can have, give it to them. + head_organ.h_style = random_hair_style(H.gender, head_organ.dna.species.name) + if(head_organ.dna.species.name in tmp_facial_hair_style.species_allowed) //If 'Very Long Beard' is a style the person's species can have, give it to them. head_organ.f_style = "Very Long Beard" else //Otherwise, give them a random facial hair style. - head_organ.f_style = random_facial_hair_style(H.gender, head_organ.dna.species2.name) + head_organ.f_style = random_facial_hair_style(H.gender, head_organ.dna.species.name) H.update_hair() H.update_fhair() if(!H.wear_mask || H.wear_mask && !istype(H.wear_mask, /obj/item/clothing/mask/fakemoustache)) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 7bff61218c6..3da4df4d558 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -61,12 +61,12 @@ /datum/reagent/slimetoxin/on_mob_life(mob/living/M) if(ishuman(M)) var/mob/living/carbon/human/human = M - if(human.species.name != "Shadow") + if(human.dna.species.name != "Shadow") to_chat(M, "Your flesh rapidly mutates!") to_chat(M, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(M, "Your body reacts violently to light. However, it naturally heals in darkness.") to_chat(M, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") - human.set_species("Shadow") + human.set_species(/datum/species/shadow) ..() /datum/reagent/aslimetoxin @@ -961,7 +961,7 @@ C.adjustToxLoss(lethality) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(IS_PLANT in H.species.species_traits) //plantmen take a LOT of damage + if(IS_PLANT in H.dna.species.species_traits) //plantmen take a LOT of damage H.adjustToxLoss(50) ..() else if(istype(M, /mob/living/simple_animal/diona)) //plantmen monkeys (diona) take EVEN MORE damage diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 715f3e9837b..1ae29143496 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -84,7 +84,7 @@ /proc/get_pain_modifier(mob/living/carbon/human/M) //returns modfier to make surgery harder if patient is conscious and feels pain if(M.stat) //stat=0 if CONSCIOUS, 1=UNCONSCIOUS and 2=DEAD. Operating on dead people is easy, too. Just sleeping won't work, though. return 1 - if(NO_PAIN in M.species.species_traits)//if you don't feel pain, you can hold still + if(NO_PAIN in M.dna.species.species_traits)//if you don't feel pain, you can hold still return 1 if(M.reagents.has_reagent("hydrocodone"))//really good pain killer return 0.99 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 2e8a3b85300..979e80ddf29 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -76,7 +76,7 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(affected) return 0 - var/list/organ_data = target.species.has_limbs["[target_zone]"] + var/list/organ_data = target.dna.species.has_limbs["[target_zone]"] return !isnull(organ_data) /datum/surgery_step/limb/attach @@ -233,7 +233,7 @@ for(var/part_name in L.part) if(!isnull(target.get_organ(part_name))) continue - var/list/organ_data = target.species.has_limbs["[part_name]"] + var/list/organ_data = target.dna.species.has_limbs["[part_name]"] if(!organ_data) continue // This will break if there's more than one stump ever diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index fb02fd83a78..fe1adce42fb 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -33,7 +33,7 @@ var/mob/living/carbon/human/H = HA if(!istype(H)) H = owner - var/icon/cybereyes_icon = new /icon('icons/mob/human_face.dmi', H.dna.species2.eyes) + var/icon/cybereyes_icon = new /icon('icons/mob/human_face.dmi', H.dna.species.eyes) cybereyes_icon.Blend(eye_colour, ICON_ADD) // Eye implants override native DNA eye color return cybereyes_icon diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index fecbdb05287..2a7057516f9 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -18,7 +18,7 @@ /mob/living/carbon/human/handle_blood() var/list/blood_data = get_blood_data(get_blood_id())//PROCCEPTION - if(NO_BLOOD in species.species_traits) + if(NO_BLOOD in dna.species.species_traits) bleed_rate = 0 return @@ -43,14 +43,14 @@ if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) if(prob(5)) to_chat(src, "You feel [word].") - apply_damage_type(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1), species.blood_damage_type) + apply_damage_type(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1), dna.species.blood_damage_type) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - apply_damage_type(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1), species.blood_damage_type) + apply_damage_type(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1), dna.species.blood_damage_type) if(prob(5)) EyeBlurry(6) to_chat(src, "You feel very [word].") if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - apply_damage_type(5, species.blood_damage_type) + apply_damage_type(5, dna.species.blood_damage_type) if(prob(15)) Paralyse(rand(1,3)) to_chat(src, "You feel extremely [word].") @@ -99,9 +99,9 @@ add_splatter_floor(loc, 1) /mob/living/carbon/human/bleed(amt) - if(!(NO_BLOOD in species.species_traits)) + if(!(NO_BLOOD in dna.species.species_traits)) ..() - if(species.exotic_blood) + if(dna.species.exotic_blood) var/datum/reagent/R = chemical_reagents_list[get_blood_id()] if(istype(R) && isturf(loc)) R.reaction_turf(get_turf(src), amt) @@ -186,7 +186,7 @@ blood_data["blood_type"] = copytext(src.dna.b_type,1,0) blood_data["gender"] = gender blood_data["real_name"] = real_name - blood_data["blood_color"] = species.blood_color + blood_data["blood_color"] = dna.species.blood_color blood_data["factions"] = faction return blood_data @@ -199,9 +199,9 @@ return "blood" /mob/living/carbon/human/get_blood_id() - if(species.exotic_blood)//some races may bleed water..or kethcup.. - return species.exotic_blood - else if((NO_BLOOD in species.species_traits) || (NOCLONE in mutations)) + if(dna.species.exotic_blood)//some races may bleed water..or kethcup.. + return dna.species.exotic_blood + else if((NO_BLOOD in dna.species.species_traits) || (NOCLONE in mutations)) return return "blood" @@ -279,7 +279,7 @@ B.layer = BELOW_MOB_LAYER //So the blood lands ontop of things like posters, windows, etc. /mob/living/carbon/human/add_splatter_floor(turf/T, small_drip, shift_x, shift_y) - if(!(NO_BLOOD in species.species_traits)) + if(!(NO_BLOOD in dna.species.species_traits)) ..() /mob/living/carbon/alien/add_splatter_floor(turf/T, small_drip, shift_x, shift_y) diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index bce0f0f8046..51d73fc9873 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -20,7 +20,7 @@ var/mob/living/carbon/human/H = HA if(!istype(H)) H = owner - var/icon/eyes_icon = new /icon('icons/mob/human_face.dmi', H.species.eyes) + var/icon/eyes_icon = new /icon('icons/mob/human_face.dmi', H.dna.species.eyes) eyes_icon.Blend(eye_colour, ICON_ADD) return eyes_icon diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 59643723d78..bd7cca63779 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -85,7 +85,7 @@ /obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target) if(H == user && istype(H)) - if(NO_BLOOD in H.species.species_traits) + if(NO_BLOOD in H.dna.species.species_traits) to_chat(H, "\The [src] is not compatible with your form!") return playsound(user,'sound/effects/singlebeat.ogg', 40, 1) @@ -98,7 +98,7 @@ if(world.time > (last_pump + pump_delay)) if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects. var/mob/living/carbon/human/H = owner - if(!(NO_BLOOD in H.species.species_traits)) + if(!(NO_BLOOD in H.dna.species.species_traits)) H.blood_volume = max(H.blood_volume - blood_loss, 0) to_chat(H, "You have to keep pumping your blood!") if(H.client) @@ -131,7 +131,7 @@ var/mob/living/carbon/human/H = owner if(istype(H)) - if(!(NO_BLOOD in H.species.species_traits)) + if(!(NO_BLOOD in H.dna.species.species_traits)) H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_NORMAL) if(owner.client) owner.client.color = "" diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 187e2cd44ca..1d730632212 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -271,11 +271,11 @@ var/breath_temperature = breath.temperature var/species_traits = list() - if(H && H.species && H.species.species_traits) - species_traits = H.species.species_traits + if(H && H.dna.species && H.dna.species.species_traits) + species_traits = H.dna.species.species_traits if(!(COLDRES in H.mutations) && !(RESISTCOLD in species_traits)) // COLD DAMAGE - var/CM = abs(H.species.coldmod) + var/CM = abs(H.dna.species.coldmod) var/TC = 0 if(breath_temperature < cold_level_3_threshold) TC = cold_level_3_damage @@ -291,7 +291,7 @@ to_chat(H, "You feel [cold_message] in your [name]!") if(!(HEATRES in H.mutations) && !(RESISTHOT in species_traits)) // HEAT DAMAGE - var/HM = abs(H.species.heatmod) + var/HM = abs(H.dna.species.heatmod) var/TH = 0 if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) TH = heat_level_1_damage diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 5f159390460..53c0447589c 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -89,7 +89,7 @@ return //Process infections - if(is_robotic() || sterile || (owner && (IS_PLANT in owner.species.species_traits))) + if(is_robotic() || sterile || (owner && (IS_PLANT in owner.dna.species.species_traits))) germ_level = 0 return @@ -151,7 +151,7 @@ germ_level++ if(germ_level >= INFECTION_LEVEL_ONE) - var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature + var/fever_temperature = (owner.dna.species.heat_level_1 - owner.dna.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.dna.species.body_temperature owner.bodytemperature += between(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature) if(germ_level >= INFECTION_LEVEL_TWO) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 44e1f3dedb6..18a5e4ee04f 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -105,8 +105,8 @@ /obj/item/organ/external/New(var/mob/living/carbon/holder) ..() var/mob/living/carbon/human/H = holder - icobase = dna.species2.icobase - deform = dna.species2.deform + icobase = dna.species.icobase + deform = dna.species.deform if(istype(H)) replaced(H) sync_colour_to_human(H) @@ -328,7 +328,7 @@ Note that amputating the affected organ does in fact remove the infection from t */ /obj/item/organ/external/proc/update_germs() - if(is_robotic() || (IS_PLANT in owner.species.species_traits)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs. + if(is_robotic() || (IS_PLANT in owner.dna.species.species_traits)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs. germ_level = 0 return @@ -400,7 +400,7 @@ Note that amputating the affected organ does in fact remove the infection from t fracture() /obj/item/organ/external/proc/check_for_internal_bleeding(damage) - if(NO_BLOOD in owner.species.species_traits) + if(NO_BLOOD in owner.dna.species.species_traits) return var/local_damage = brute_dam + damage if(damage > 15 && local_damage > 30 && prob(damage) && !is_robotic()) @@ -503,7 +503,7 @@ Note that amputating the affected organ does in fact remove the infection from t switch(disintegrate) if(DROPLIMB_SHARP) compile_icon() - add_blood(victim.blood_DNA, victim.species.blood_color) + add_blood(victim.blood_DNA, victim.dna.species.blood_color) var/matrix/M = matrix() M.Turn(rand(180)) src.transform = M @@ -606,7 +606,7 @@ Note that amputating the affected organ does in fact remove the infection from t "You hear a loud cracking sound coming from \the [owner].",\ "Something feels like it shattered in your [name]!",\ "You hear a sickening crack.") - if(owner.species && !(NO_PAIN in owner.species.species_traits)) + if(owner.dna.species && !(NO_PAIN in owner.dna.species.species_traits)) owner.emote("scream") status |= ORGAN_BROKEN diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index 344c1d1f0c4..43d699c0408 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -16,7 +16,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/change_organ_icobase(var/new_icobase, var/new_deform, var/owner_sensitive) //Change the icobase/deform of this organ. If owner_sensitive is set, that means the proc won't mess with frankenstein limbs. if(owner_sensitive) //This and the below statements mean that the icobase/deform will only get updated if the limb is the same species as and is owned by the mob it's attached to. - if(dna.species2 && owner.dna.species2 && dna.species2.name != owner.dna.species2.name) + if(dna.species && owner.dna.species && dna.species.name != owner.dna.species.name) return if(dna.unique_enzymes != owner.dna.unique_enzymes) // This isn't MY arm return @@ -25,31 +25,31 @@ var/global/list/limb_icon_cache = list() deform = new_deform ? new_deform : deform /obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/H) - if(is_robotic() && !istype(dna.species2, /datum/species/machine)) //machine people get skin color + if(is_robotic() && !istype(dna.species, /datum/species/machine)) //machine people get skin color return - if(dna.species2 && H.dna.species2 && dna.species2.name != H.dna.species2.name) + if(dna.species && H.dna.species && dna.species.name != H.dna.species.name) return if(dna.unique_enzymes != H.dna.unique_enzymes) // This isn't MY arm - if(!(H.species.bodyflags & HAS_ICON_SKIN_TONE)) + if(!(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE)) sync_colour_to_dna() return - if(!isnull(H.s_tone) && ((H.species.bodyflags & HAS_SKIN_TONE) || (H.species.bodyflags & HAS_ICON_SKIN_TONE))) + if(!isnull(H.s_tone) && ((H.dna.species.bodyflags & HAS_SKIN_TONE) || (H.dna.species.bodyflags & HAS_ICON_SKIN_TONE))) s_col = null s_tone = H.s_tone - if(H.species.bodyflags & HAS_SKIN_COLOR) + if(H.dna.species.bodyflags & HAS_SKIN_COLOR) s_tone = null s_col = H.skin_colour - if(H.species.bodyflags & HAS_ICON_SKIN_TONE) + if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) var/obj/item/organ/external/chest/C = H.get_organ("chest") change_organ_icobase(C.icobase, C.deform) /obj/item/organ/external/proc/sync_colour_to_dna() if(is_robotic()) return - if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && ((dna.species2.bodyflags & HAS_SKIN_TONE) || (dna.species2.bodyflags & HAS_ICON_SKIN_TONE))) + if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && ((dna.species.bodyflags & HAS_SKIN_TONE) || (dna.species.bodyflags & HAS_ICON_SKIN_TONE))) s_col = null s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE) - if(dna.species2.bodyflags & HAS_SKIN_COLOR) + if(dna.species.bodyflags & HAS_SKIN_COLOR) s_tone = null s_col = rgb(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B)) @@ -66,7 +66,7 @@ var/global/list/limb_icon_cache = list() // Kasparrov, you monster if(force_icon) mob_icon = new /icon(force_icon, "[icon_name]") - if(istype(dna.species2, /datum/species/machine)) //snowflake for IPC's, sorry. + if(istype(dna.species, /datum/species/machine)) //snowflake for IPC's, sorry. if(s_col) mob_icon.Blend(s_col, ICON_ADD) else @@ -99,13 +99,13 @@ var/global/list/limb_icon_cache = list() if(!owner) return - if(dna.species2.has_organ["eyes"]) + if(dna.species.has_organ["eyes"]) var/icon/eyes_icon = owner.get_eyecon() if(eyes_icon) mob_icon.Blend(eyes_icon, ICON_OVERLAY) overlays |= eyes_icon - if(owner.lip_style && (LIPS in dna.species2.species_traits)) + if(owner.lip_style && (LIPS in dna.species.species_traits)) var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s") overlays |= lip_icon mob_icon.Blend(lip_icon, ICON_OVERLAY) @@ -113,7 +113,7 @@ var/global/list/limb_icon_cache = list() var/head_marking = owner.m_styles["head"] if(head_marking && head_marking != "None") var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking] - if(head_marking_style && head_marking_style.species_allowed && (dna.species2.name in head_marking_style.species_allowed) && head_marking_style.marking_location == "head") + if(head_marking_style && head_marking_style.species_allowed && (dna.species.name in head_marking_style.species_allowed) && head_marking_style.marking_location == "head") var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s") if(head_marking_style.do_colouration) h_marking_s.Blend(owner.m_colours["head"], ICON_ADD) @@ -121,7 +121,7 @@ var/global/list/limb_icon_cache = list() if(ha_style) var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[ha_style] - if(head_accessory_style && head_accessory_style.species_allowed && (dna.species2.name in head_accessory_style.species_allowed)) + if(head_accessory_style && head_accessory_style.species_allowed && (dna.species.name in head_accessory_style.species_allowed)) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") if(head_accessory_style.do_colouration) head_accessory_s.Blend(headacc_colour, ICON_ADD) @@ -129,9 +129,9 @@ var/global/list/limb_icon_cache = list() if(f_style) var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species2.name in facial_hair_style.species_allowed)) || (dna.species2.bodyflags & ALL_RPARTS))) + if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species.name in facial_hair_style.species_allowed)) || (dna.species.bodyflags & ALL_RPARTS))) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(istype(dna.species2, /datum/species/slime)) // I am el worstos + if(istype(dna.species, /datum/species/slime)) // I am el worstos facial_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha. else if(facial_hair_style.do_colouration) facial_s.Blend(facial_colour, ICON_ADD) @@ -139,9 +139,9 @@ var/global/list/limb_icon_cache = list() if(h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR))) var/datum/sprite_accessory/hair_style = hair_styles_full_list[h_style] - if(hair_style && ((dna.species2.name in hair_style.species_allowed) || (dna.species2.bodyflags & ALL_RPARTS))) + if(hair_style && ((dna.species.name in hair_style.species_allowed) || (dna.species.bodyflags & ALL_RPARTS))) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(istype(dna.species2, /datum/species/slime)) // I am el worstos + if(istype(dna.species, /datum/species/slime)) // I am el worstos hair_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha. else if(hair_style.do_colouration) hair_s.Blend(hair_colour, ICON_ADD) @@ -182,7 +182,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/chest/get_icon_state(skeletal) var/result = ..() - if(fat && !skeletal && !is_robotic() && (CAN_BE_FAT in dna.species2.species_traits)) + if(fat && !skeletal && !is_robotic() && (CAN_BE_FAT in dna.species.species_traits)) result[2] += "_fat" return result diff --git a/code/modules/surgery/organs/pain.dm b/code/modules/surgery/organs/pain.dm index e3386aef1b3..4863bd63901 100644 --- a/code/modules/surgery/organs/pain.dm +++ b/code/modules/surgery/organs/pain.dm @@ -34,7 +34,7 @@ mob/living/carbon/human/proc/custom_pain(message) if(stat >= UNCONSCIOUS) return - if(NO_PAIN in species.species_traits) + if(NO_PAIN in dna.species.species_traits) return if(reagents.has_reagent("morphine")) return @@ -54,7 +54,7 @@ mob/living/carbon/human/proc/handle_pain() if(stat >= UNCONSCIOUS) return - if(NO_PAIN in species.species_traits) + if(NO_PAIN in dna.species.species_traits) return if(reagents.has_reagent("morphine")) return diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 3de2d350ee0..762c4e6040b 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -347,12 +347,12 @@ to_chat(user, "You cannot install a computer brain into a meat enclosure.") return -1 - if(!target.species) + if(!target.dna.species) to_chat(user, "You have no idea what species this person is. Report this on the bug tracker.") return -1 - if(!target.species.has_organ["brain"]) - to_chat(user, "You're pretty sure [target.species.name_plural] don't normally have a brain.") + if(!target.dna.species.has_organ["brain"]) + to_chat(user, "You're pretty sure [target.dna.species.name_plural] don't normally have a brain.") return -1 if(target.get_int_organ(/obj/item/organ/internal/brain/)) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 8007c40749b..c64c53c8baa 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -206,7 +206,7 @@ for(var/mob/living/carbon/human/H in view(2, E.loc))//germs from people if(AStar(E.loc, H.loc, /turf/proc/Distance, 2, simulated_only = 0)) - if((!(BREATHLESS in H.mutations) || !(NO_BREATHE in H.species.species_traits)) && !H.wear_mask) //wearing a mask helps preventing people from breathing cooties into open incisions + if((!(BREATHLESS in H.mutations) || !(NO_BREATHE in H.dna.species.species_traits)) && !H.wear_mask) //wearing a mask helps preventing people from breathing cooties into open incisions germs += H.germ_level * 0.25 for(var/obj/effect/decal/cleanable/M in view(2, E.loc))//germs from messes diff --git a/code/modules/vr/vr_controller.dm b/code/modules/vr/vr_controller.dm index 45bf2a6cc74..c0fc61be587 100644 --- a/code/modules/vr/vr_controller.dm +++ b/code/modules/vr/vr_controller.dm @@ -31,13 +31,13 @@ proc/build_virtual_avatar(mob/living/carbon/human/H, location, datum/map_templat var/mob/living/carbon/human/virtual_reality/vr_avatar location = get_turf(location) vr_avatar = new /mob/living/carbon/human/virtual_reality(location) - vr_avatar.set_species(H.species.name) if(istype(H, /mob/living/carbon/human/virtual_reality)) var/mob/living/carbon/human/virtual_reality/V = H vr_avatar.real_me = V.real_me else vr_avatar.real_me = H vr_avatar.dna = H.dna.Clone() + vr_avatar.set_species(H.dna.species) vr_avatar.name = H.name vr_avatar.real_name = H.real_name vr_avatar.undershirt = H.undershirt From f075ef7836676efd3f83a5a1ca73fcec1eba6e8b Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 17 Jul 2018 06:05:06 -0400 Subject: [PATCH 03/24] wow, it works --- code/datums/datumvars.dm | 3 ++- code/modules/client/preference/preferences.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 5 +---- code/modules/mob/living/carbon/human/species/species.dm | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index bbb9b1b1768..546276c24e8 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -992,7 +992,8 @@ to_chat(usr, "Mob doesn't exist anymore") return - if(H.set_species(all_species[new_species])) + var/datum/species/S = all_species[new_species] + if(H.set_species(S.type)) to_chat(usr, "Set species of [H] to [H.dna.species].") H.regenerate_icons() message_admins("[key_name_admin(usr)] has changed the species of [key_name_admin(H)] to [new_species]") diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 497db00daf3..af86929a94e 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2084,7 +2084,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts /datum/preferences/proc/copy_to(mob/living/carbon/human/character) var/datum/species/S = all_species[species] - character.change_species(S) // Yell at me if this causes everything to melt + character.change_species(S.type) // Yell at me if this causes everything to melt if(be_random_name) real_name = random_name(gender,species) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 06750815abf..d5ef581f4cb 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1275,9 +1275,6 @@ to_chat(usr, "[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].") /mob/living/carbon/human/proc/set_species(datum/species/new_species, default_colour, delay_icon_update = FALSE) - if(new_species == dna.species.type) - return - var/datum/species/oldspecies = dna.species if(oldspecies) @@ -1295,7 +1292,7 @@ oldspecies.handle_pre_change(src) - dna.species = new new_species.type + dna.species = new new_species() tail = dna.species.tail diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index aa59b83b2c4..550871e0e4f 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -18,8 +18,8 @@ var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen. var/butt_sprite = "human" - var/primitive_form // Lesser form, if any (ie. monkey for humans) - var/greater_form // Greater form, if any, ie. human for monkeys. + var/datum/species/primitive_form = null // Lesser form, if any (ie. monkey for humans) + var/datum/species/greater_form = null // Greater form, if any, ie. human for monkeys. var/tail // Name of tail image in species effects icon file. var/datum/unarmed_attack/unarmed //For empty hand harm-intent attack var/unarmed_type = /datum/unarmed_attack From 0a613a8f4279329eeffc856306018400d031d5b0 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 17 Jul 2018 18:18:16 -0400 Subject: [PATCH 04/24] fixes --- code/game/dna/dna2.dm | 2 +- code/game/dna/genes/monkey.dm | 10 ++++++---- code/game/gamemodes/changeling/evolution_menu.dm | 2 +- code/game/gamemodes/changeling/powers/humanform.dm | 4 ++-- code/game/gamemodes/changeling/powers/lesserform.dm | 4 ---- code/game/gamemodes/changeling/powers/tiny_prick.dm | 6 +++--- code/game/gamemodes/changeling/powers/transform.dm | 4 ++-- code/game/gamemodes/miniantags/abduction/gland.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/transformer.dm | 4 ++-- code/modules/food_and_drinks/food/snacks.dm | 2 +- code/modules/mob/living/carbon/human/appearance.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 9 ++++++--- .../mob/living/carbon/human/interactive/interactive.dm | 2 +- code/modules/nano/modules/human_appearance.dm | 3 ++- code/modules/vr/vr_controller.dm | 2 +- 17 files changed, 32 insertions(+), 30 deletions(-) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index cf335b5f7d6..f7c36929432 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -420,7 +420,7 @@ var/global/list/bad_blocks[0] data["UE"] = unique_enzymes data["SE"] = SE.Copy() // This is probably too lazy for my own good data["UI"] = UI.Copy() - data["species"] = species.type // This works because `species` is a string, not a datum + data["species"] = species.type // Because old DNA coders were insane or something data["b_type"] = b_type data["real_name"] = real_name diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index c79e4168490..38caf8eda74 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -7,8 +7,8 @@ /datum/dna/gene/monkey/can_activate(var/mob/M,var/flags) return ishuman(M) -/datum/dna/gene/monkey/activate(var/mob/living/carbon/human/H, var/connected, var/flags) - if(!istype(H,/mob/living/carbon/human)) +/datum/dna/gene/monkey/activate(mob/living/carbon/human/H, connected, flags) + if(!istype(H)) return if(issmall(H)) return @@ -41,13 +41,14 @@ if(H.client) H.hud_used = new /datum/hud/monkey(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) + H.hud_used.show_hud(H.hud_used.hud_version) to_chat(H, "You are now a [H.dna.species.name].") return H -/datum/dna/gene/monkey/deactivate(var/mob/living/carbon/human/H, var/connected, var/flags) - if(!istype(H,/mob/living/carbon/human)) +/datum/dna/gene/monkey/deactivate(mob/living/carbon/human/H, connected, flags) + if(!istype(H)) return for(var/obj/item/W in H) if(W == H.w_uniform) // will be torn @@ -81,6 +82,7 @@ if(H.client) H.hud_used = new /datum/hud/human(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) + H.hud_used.show_hud(H.hud_used.hud_version) to_chat(H, "You are now a [H.dna.species.name].") diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm index a7af2b94482..befdf899253 100644 --- a/code/game/gamemodes/changeling/evolution_menu.dm +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -375,7 +375,7 @@ var/list/sting_paths path.on_purchase(src) var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste - mind.changeling.absorbed_dna |= C.dna + mind.changeling.absorbed_dna |= C.dna.Clone() mind.changeling.trim_dna() return 1 diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index fb3012cd274..72b0e821e66 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -26,10 +26,10 @@ to_chat(user, "We transform our appearance.") user.dna.SetSEState(MONKEYBLOCK,0,1) genemutcheck(user,MONKEYBLOCK,null,MUTCHK_FORCED) + if(istype(user)) + user.set_species(chosen_dna.species.type) user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name - if(istype(user)) - user.set_species(chosen_dna.species) domutcheck(user,null,MUTCHK_FORCED) user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index d6b4870c50a..2197163cbd5 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -21,13 +21,9 @@ to_chat(H, "We cannot perform this ability in this form!") return - user.dna = user.dna.Clone() H.visible_message("[H] transforms!") changeling.geneticdamage = 30 to_chat(H, "Our genes cry out!") - var/list/implants = list() //Try to preserve implants. - for(var/obj/item/implant/W in H) - implants += W H.monkeyize() changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null) feedback_add_details("changeling_powers","LF") diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 082ec9bbe54..bb216ddad35 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -111,11 +111,11 @@ target.visible_message("[target] begins to violenty convulse!","You feel a tiny prick and a begin to uncontrollably convulse!") spawn(10) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + H.set_species(NewDNA.species.type) target.dna = NewDNA.Clone() target.real_name = NewDNA.real_name - var/mob/living/carbon/human/H = target - if(istype(H)) - H.set_species(NewDNA.species) target.UpdateAppearance() domutcheck(target, null) feedback_add_details("changeling_powers","TS") diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index b7c8abefd1d..bacdc8b0d8b 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -14,10 +14,10 @@ if(!chosen_dna) return + if(ishuman(user)) + user.set_species(chosen_dna.species.type) user.dna = chosen_dna.Clone() user.real_name = chosen_dna.real_name - if(ishuman(user)) - user.set_species(chosen_dna.species) domutcheck(user, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them user.flavor_text = "" user.dna.UpdateSE() diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 9b03311d88c..a8c6398fa95 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -217,8 +217,8 @@ var/mob/living/carbon/human/interactive/greytide/clone = new(src) var/datum/dna/owner_dna = H.dna clone.rename_character(clone.name, owner_dna.real_name) + clone.set_species(H.dna.species.type) clone.dna = owner_dna.Clone() - clone.set_species(H.dna.species) clone.body_accessory = H.body_accessory domutcheck(clone) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 91c36356fd9..801eb6cb33c 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -321,7 +321,7 @@ var/global/list/multiverse = list() to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help [user.p_them()] accomplish [user.p_their()] goals at all costs.") M.faction = list("[user.real_name]") if(duplicate_self) - M.set_species(user.dna.species) //duplicate the sword user's species. + M.set_species(user.dna.species.type) //duplicate the sword user's species. else if(prob(50)) var/list/list_all_species = list(/datum/species/human, /datum/species/unathi, /datum/species/skrell, /datum/species/tajaran, /datum/species/kidan, /datum/species/golem, /datum/species/diona, /datum/species/machine, /datum/species/slime, /datum/species/grey, /datum/species/vulpkanin) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 881136dbd58..798a01f2bda 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -231,7 +231,7 @@ R.dna = new /datum/dna() var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.set_species(R.dna.species) + H.set_species(R.dna.species.type) occupant = H if(!R.dna.real_name) //to prevent null names diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index e5dc8f7db00..5e99a954650 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -300,7 +300,7 @@ /obj/machinery/transformer/transmogrifier/do_transform(mob/living/carbon/human/H) if(!istype(H)) return - if(!istype(target_species)) + if(!ispath(target_species)) to_chat(H, "'[target_species]' is not a valid species!") return H.set_species(target_species) @@ -336,7 +336,7 @@ to_chat(H, "No genetic template configured!") return var/prev_ue = H.dna.unique_enzymes - H.set_species(template.species) + H.set_species(template.species.type) H.dna = template.Clone() H.real_name = template.real_name H.sync_organ_dna(assimilate = 0, old_ue = prev_ue) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 2105ae712d0..64b856628ab 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1252,7 +1252,7 @@ icon_state = "monkeycube" bitesize = 12 filling_color = "#ADAC7F" - var/monkey_type = "Monkey" + var/datum/species/monkey_type = /datum/species/monkey list_reagents = list("nutriment" = 2) /obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature) diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 07fc623952c..3f79b90628d 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -4,7 +4,7 @@ AC.ui_interact(user, state = state) /mob/living/carbon/human/proc/change_species(datum/species/new_species) - if(!new_species || dna.species.type == new_species || !(initial(new_species.name) in all_species)) + if(!new_species || dna.species.type == new_species || !ispath(new_species, /datum/species)) return FALSE set_species(new_species, null, TRUE) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d5ef581f4cb..64ecd8d2699 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -16,7 +16,7 @@ dna = new /datum/dna(null) // Species name is handled by set_species() - set_species(new_species, 1, delay_icon_update = 1) + set_species(new_species, 1, delay_icon_update = 1, skip_same_check = TRUE) ..() @@ -1274,7 +1274,10 @@ else to_chat(usr, "[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].") -/mob/living/carbon/human/proc/set_species(datum/species/new_species, default_colour, delay_icon_update = FALSE) +/mob/living/carbon/human/proc/set_species(datum/species/new_species, default_colour, delay_icon_update = FALSE, skip_same_check = FALSE) + if(!skip_same_check) + if(dna.species.name == initial(new_species.name)) + return var/datum/species/oldspecies = dna.species if(oldspecies) @@ -1934,7 +1937,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X dna.deserialize(data["dna"]) real_name = dna.real_name name = real_name - set_species(dna.species) + set_species(dna.species.type, skip_same_check = TRUE) age = data["age"] undershirt = data["ushirt"] underwear = data["uwear"] diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index e88def0ebad..30451bc9562 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -208,8 +208,8 @@ var/datum/dna/toDoppel = chosen.dna T.real_name = toDoppel.real_name + T.set_species(chosen.dna.species.type) T.dna = toDoppel.Clone() - T.set_species(chosen.dna.species) T.body_accessory = chosen.body_accessory T.UpdateAppearance() domutcheck(T) diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index dea188e1eb7..880553a63bc 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -31,7 +31,8 @@ if(href_list["race"]) if(can_change(APPEARANCE_RACE) && (href_list["race"] in valid_species)) - if(owner.change_species(href_list["race"])) + var/datum/species/S = all_species[href_list["race"]] + if(owner.change_species(S.type)) cut_and_generate_data() // Species change creates new organs - runtimes ahoy if we forget this head_organ = owner.get_organ("head") diff --git a/code/modules/vr/vr_controller.dm b/code/modules/vr/vr_controller.dm index c0fc61be587..564291b2999 100644 --- a/code/modules/vr/vr_controller.dm +++ b/code/modules/vr/vr_controller.dm @@ -36,8 +36,8 @@ proc/build_virtual_avatar(mob/living/carbon/human/H, location, datum/map_templat vr_avatar.real_me = V.real_me else vr_avatar.real_me = H + vr_avatar.set_species(H.dna.species.type) vr_avatar.dna = H.dna.Clone() - vr_avatar.set_species(H.dna.species) vr_avatar.name = H.name vr_avatar.real_name = H.real_name vr_avatar.undershirt = H.undershirt From d512b362ed7fff36633d2b93e77f3d013cd1d2d2 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 17 Jul 2018 20:27:47 -0400 Subject: [PATCH 05/24] keep equipped items on species change --- code/modules/mob/living/carbon/human/human.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 64ecd8d2699..2f6465289cf 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1319,8 +1319,19 @@ if(!(dna.species.bodyflags & HAS_SKIN_TONE)) s_tone = 0 + var/list/thing_to_check = list(slot_wear_mask, slot_head, slot_shoes, slot_gloves, slot_l_ear, slot_r_ear, slot_glasses, slot_l_hand, slot_r_hand) + var/list/kept_items[0] + + for(var/thing in thing_to_check) + var/obj/item/I = get_item_by_slot(thing) + if(I) + kept_items[I] = thing + dna.species.create_organs(src) + for(var/thing in kept_items) + equip_to_slot_or_del(thing, kept_items[thing]) + //Handle default hair/head accessories for created mobs. var/obj/item/organ/external/head/H = get_organ("head") if(dna.species.default_hair) From 7440dad57ea9a5302cd9e05e42b2739529fdb987 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 18 Jul 2018 01:13:24 -0400 Subject: [PATCH 06/24] further conversion --- code/__DEFINES/genetics.dm | 3 +- code/__DEFINES/mobs.dm | 26 ++++++++- code/__HELPERS/mobs.dm | 4 +- code/_onclick/item_attack.dm | 2 +- code/datums/datacore.dm | 2 +- code/datums/diseases/kingstons.dm | 55 ++++++++++--------- code/datums/diseases/transformation.dm | 4 +- code/datums/outfits/outfit_admin.dm | 2 +- code/game/dna/dna2.dm | 6 +- code/game/gamemodes/cult/talisman.dm | 2 +- code/game/gamemodes/intercept_report.dm | 2 +- .../miniantags/abduction/abduction.dm | 2 +- .../miniantags/abduction/abduction_gear.dm | 2 +- .../miniantags/abduction/abduction_surgery.dm | 4 +- code/game/gamemodes/shadowling/shadowling.dm | 4 +- .../shadowling/shadowling_abilities.dm | 12 ++-- code/game/gamemodes/wizard/artefact.dm | 10 ++-- code/game/gamemodes/wizard/wizard.dm | 2 +- code/game/jobs/job/support.dm | 2 +- code/game/machinery/dye_generator.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/machinery/poolcontroller.dm | 2 +- code/game/objects/items/weapons/cosmetics.dm | 2 +- .../weapons/implants/implant_abductor.dm | 2 +- code/game/objects/items/weapons/scissors.dm | 2 +- code/game/objects/items/weapons/soap.dm | 2 +- code/modules/admin/verbs/onlyone.dm | 4 +- code/modules/admin/verbs/onlyoneteam.dm | 4 +- .../awaymissions/mission_code/wildwest.dm | 8 +-- .../clothing/spacesuits/miscellaneous.dm | 2 +- code/modules/clothing/spacesuits/rig/rig.dm | 4 +- code/modules/customitems/item_defines.dm | 4 +- .../kitchen_machinery/gibber.dm | 2 +- code/modules/hydroponics/beekeeping/beebox.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 2 +- code/modules/mob/living/carbon/brain/brain.dm | 4 +- code/modules/mob/living/carbon/human/emote.dm | 42 +++++++++----- .../mob/living/carbon/human/examine.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 10 +--- .../living/carbon/human/species/abductor.dm | 2 +- .../mob/living/carbon/human/species/monkey.dm | 1 + .../living/carbon/human/species/station.dm | 6 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/mob/living/carbon/slime/life.dm | 2 +- .../living/simple_animal/friendly/diona.dm | 4 +- code/modules/mob/mob.dm | 3 - code/modules/mob/mob_helpers.dm | 6 +- code/modules/mob/new_player/new_player.dm | 13 ----- code/modules/projectiles/gun.dm | 4 +- code/modules/projectiles/guns/alien.dm | 4 +- code/modules/projectiles/projectile/magic.dm | 12 ++-- .../reagents/chemistry/reagents/toxins.dm | 8 +-- .../reagents/chemistry/reagents/water.dm | 4 +- code/modules/surgery/limb_reattach.dm | 2 +- code/modules/surgery/organs/organ_external.dm | 3 +- code/modules/surgery/other.dm | 2 +- code/modules/surgery/plastic_surgery.dm | 2 +- code/modules/surgery/surgery.dm | 19 +------ 58 files changed, 177 insertions(+), 176 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index aba6e6baea9..65b7f0f24d0 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -142,4 +142,5 @@ #define VIRUSIMMUNE 14 #define NOCRITDAMAGE 15 #define RESISTHOT 16 -#define RESISTCOLD 17 \ No newline at end of file +#define RESISTCOLD 17 +#define NO_EXAMINE 18 \ No newline at end of file diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 023ebe426d9..74119ae23bf 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -130,7 +130,31 @@ #define EYE_SHINE_THRESHOLD 6 //dark_view threshold past which a humanoid's eyes will 'shine' in the dark. //Human sub-species -#define isabductor(A) (is_species(A, "Abductor")) +#define isshadowling(A) (is_species(A, /datum/species/shadow/ling)) +#define isshadowlinglesser(A) (is_species(A, /datum/species/shadow/ling/lesser)) +#define isabductor(A) (is_species(A, /datum/species/abductor)) +#define isgolem(A) (is_species(A, /datum/species/golem)) +#define ismonkeybasic(A) (is_species(A, /datum/species/monkey)) +#define isfarwa(A) (is_species(A, /datum/species/monkey/tajaran)) +#define iswolpain(A) (is_species(A, /datum/species/monkey/vulpkanin)) +#define isneara(A) (is_species(A, /datum/species/monkey/skrell)) +#define isttok(A) (is_species(A, /datum/species/monkey/unathi)) +#define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) +#define isshadowperson(A) (is_species(A, /datum/species/shadow)) +#define isskeleton(A) (is_species(A, /datum/species/skeleton)) +#define ishumanbasic(A) (is_species(A, /datum/species/human)) +#define isunathi(A) (is_species(A, /datum/species/unathi)) +#define istajaran(A) (is_species(A, /datum/species/tajaran)) +#define isvulpkanin(A) (is_species(A, /datum/species/vulpkanin)) +#define isskrell(A) (is_species(A, /datum/species/skrell)) +#define isvox(A) (is_species(A, /datum/species/vox)) +#define isvoxarmalis(A) (is_species(A, /datum/species/vox/armalis)) +#define iskidan(A) (is_species(A, /datum/species/kidan)) +#define isslimeperson(A) (is_species(A, /datum/species/slime)) +#define isgrey(A) (is_species(A, /datum/species/grey)) +#define isdiona(A) (is_species(A, /datum/species/diona)) +#define ismachine(A) (is_species(A, /datum/species/machine)) +#define isdrask(A) (is_species(A, /datum/species/drask)) #define isanimal(A) (istype((A), /mob/living/simple_animal)) #define iscorgi(A) (istype((A), /mob/living/simple_animal/pet/corgi)) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 8628e6957cf..3a6e8be62ac 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -373,11 +373,11 @@ This is always put in the attack log. if(progress) qdel(progbar) -/proc/is_species(A, species_name) +/proc/is_species(A, species_datum) . = FALSE if(ishuman(A)) var/mob/living/carbon/human/H = A - if(H.get_species() == species_name) + if(H.dna && istype(H.dna.species, species_datum)) . = TRUE /proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE, list/extra_args) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 71cb7bc9cc0..0299a7ec2fc 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -43,7 +43,7 @@ else return 1 - if(isscrewdriver(src) && M.get_species() == "Machine") + if(isscrewdriver(src) && ismachine(M)) if(!attempt_initiate_surgery(src, M, user)) return 0 else diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index ebacefbcc49..4fc2522ce65 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -280,7 +280,7 @@ var/record_id_num = 1001 G.fields["p_stat"] = "Active" G.fields["m_stat"] = "Stable" G.fields["sex"] = capitalize(H.gender) - G.fields["species"] = H.get_species() + G.fields["species"] = H.dna.species.name G.fields["photo"] = get_id_photo(H) G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = SOUTH))]'" G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = WEST))]'" diff --git a/code/datums/diseases/kingstons.dm b/code/datums/diseases/kingstons.dm index e65f5da3355..260f01e0301 100644 --- a/code/datums/diseases/kingstons.dm +++ b/code/datums/diseases/kingstons.dm @@ -16,26 +16,26 @@ switch(stage) if(1) if(prob(10)) - if(affected_mob.get_species() == "Tajaran") + if(istajaran(affected_mob)) to_chat(affected_mob, "You feel good.") else to_chat(affected_mob, "You feel like playing with string.") if(2) if(prob(10)) - if(affected_mob.get_species() == "Tajaran") + if(istajaran(affected_mob)) to_chat(affected_mob, "Something in your throat itches.") else to_chat(affected_mob, "You NEED to find a mouse.") if(3) if(prob(10)) - if(affected_mob.get_species() == "Tajaran") + if(istajaran(affected_mob)) to_chat(affected_mob, "You feel something in your throat!") affected_mob.emote("cough") else affected_mob.say(pick(list("Mew", "Meow!", "Nya!~"))) if(4) if(prob(5)) - if(affected_mob.get_species() == "Tajaran") + if(istajaran(affected_mob)) affected_mob.visible_message("[affected_mob] coughs up a hairball!", \ "You cough up a hairball!") affected_mob.Stun(5) @@ -59,7 +59,7 @@ severity = BIOHAZARD var/list/virspecies = list(/datum/species/human, /datum/species/tajaran, /datum/species/unathi,/datum/species/skrell, /datum/species/vulpkanin) //no karma races sorrys. var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay") - var/chosentype + var/datum/species/chosentype var/chosensuff /datum/disease/kingstons/advanced/New() @@ -70,26 +70,27 @@ /datum/disease/kingstons/advanced/stage_act() ..() - switch(stage) - if(1) - if(prob(10)) - to_chat(affected_mob, "You feel awkward.") - if(2) - if(prob(10)) - to_chat(affected_mob, "You itch.") - if(3) - if(prob(10)) - to_chat(affected_mob, "Your skin starts to flake!") + if(ishuman(affected_mob)) + var/mob/living/carbon/human/twisted = affected_mob + switch(stage) + if(1) + if(prob(10)) + to_chat(twisted, "You feel awkward.") + if(2) + if(prob(10)) + to_chat(twisted, "You itch.") + if(3) + if(prob(10)) + to_chat(twisted, "Your skin starts to flake!") - if(4) - if(prob(5)) - if(affected_mob.get_species() != chosentype) - affected_mob.visible_message("[affected_mob]'s skin splits and form contorts!", \ - "Your body mutates into a [chosentype]!") - var/mob/living/carbon/human/twisted = affected_mob - twisted.set_species(chosentype) - else - affected_mob.visible_message("[affected_mob] scratches at thier skin!", \ - "You scratch your skin to try not to itch!") - affected_mob.adjustBruteLoss(-5) - affected_mob.adjustStaminaLoss(5) \ No newline at end of file + if(4) + if(prob(5)) + if(!istype(twisted.dna.species, chosentype)) + twisted.visible_message("[twisted]'s skin splits and form contorts!", \ + "Your body mutates into a [initial(chosentype.name)]!") + twisted.set_species(chosentype) + else + twisted.visible_message("[twisted] scratches at thier skin!", \ + "You scratch your skin to try not to itch!") + twisted.adjustBruteLoss(-5) + twisted.adjustStaminaLoss(5) \ No newline at end of file diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 8ffbcba22c9..444b4838319 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -194,12 +194,12 @@ if(1) if(ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob - if(H.dna.species.name == "Slime People") + if(isslimeperson(H)) stage = 5 if(3) if(ishuman(affected_mob)) var/mob/living/carbon/human/human = affected_mob - if(human.dna.species.name != "Slime People") + if(!isslimeperson(human)) human.set_species(/datum/species/slime) /datum/disease/transformation/corgi diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index b31084aee9f..edb254203bf 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -371,7 +371,7 @@ ) /datum/outfit/admin/vox/equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(H.get_species() == "Vox Armalis") + if(isvoxarmalis(H)) . = ..() else H.equip_vox_raider() diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index f7c36929432..131ebdf3428 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -435,8 +435,4 @@ var/global/list/bad_blocks[0] UpdateSE() species = new data["species"] b_type = data["b_type"] - real_name = data["real_name"] - -// a nice hook for if/when we refactor species on dna -/datum/dna/proc/get_species_name() - return species.name \ No newline at end of file + real_name = data["real_name"] \ No newline at end of file diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 8d858c6fade..70e78176463 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -279,7 +279,7 @@ var/mob/living/carbon/human/H = user user.visible_message("Otherworldly armor suddenly appears on [user]!", \ "You speak the words of the talisman, arming yourself!") - if(H.get_species() == "Plasmaman") + if(isplasmaman(H)) H.equip_to_slot(new /obj/item/clothing/suit/space/eva/plasmaman/cultist(H), slot_wear_suit) H.equip_to_slot(new /obj/item/clothing/head/helmet/space/eva/plasmaman/cultist(H), slot_head) else diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index 50b749a62a2..ca868f4874e 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -116,7 +116,7 @@ if((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs)) return //don't include suspects who can't possibly be the antag based on their species (no suspecting the machines of being sneaky changelings) - if(man.get_species() in ticker.mode.protected_species) + if(man.dna.species.name in ticker.mode.protected_species) return dudes += man for(var/i = 0, i < max(player_list.len/10,2), i++) diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index d94ea557744..09e91869fd9 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -338,7 +338,7 @@ if(!owner.current || !ishuman(owner.current)) return 0 var/mob/living/carbon/human/H = owner.current - if(H.get_species() != "Abductor") + if(!isabductor(H)) return 0 ab_team = H.mind.abductor.team for(var/obj/machinery/abductor/experiment/E in abductor_equipment) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 99e93288645..73a910e54ef 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -248,7 +248,7 @@ name = "alien pistol" desc = "A complicated gun that fires bursts of high-intensity radiation." ammo_type = list(/obj/item/ammo_casing/energy/declone) - restricted_species = list("Abductor") + restricted_species = list(/datum/species/abductor) icon_state = "alienpistol" item_state = "alienpistol" origin_tech = "combat=4;magnets=7;powerstorage=3;abductor=3" diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index 3ecb33466c8..d4d791c5b19 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -15,7 +15,7 @@ return FALSE var/mob/living/carbon/human/H = user // You must either: Be of the abductor species, or contain an abductor implant - if((H.get_species() == "Abductor" || (locate(/obj/item/implant/abductor) in H))) + if((isabductor(H) || (locate(/obj/item/implant/abductor) in H))) return TRUE return FALSE @@ -93,7 +93,7 @@ return FALSE var/mob/living/carbon/human/H = user // You must either: Be of the abductor species, or contain an abductor implant - if((H.get_species() == "Abductor" || (locate(/obj/item/implant/abductor) in H))) + if((isabductor(H) || (locate(/obj/item/implant/abductor) in H))) return TRUE return FALSE diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 1d0bb3adf03..3c1f5d47ed8 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -209,7 +209,7 @@ Made by Xhuis if(shadow.special_role == SPECIAL_ROLE_SHADOWLING && config.shadowling_max_age) if(ishuman(shadow.current)) var/mob/living/carbon/human/H = shadow.current - if(H.get_species() != "Shadow") + if(!isshadowling(H)) for(var/obj/effect/proc_holder/spell/targeted/shadowling_hatch/hatch_ability in shadow.spell_list) hatch_ability.cycles_unused++ if(!H.stunned && prob(20) && hatch_ability.cycles_unused > config.shadowling_max_age) @@ -317,7 +317,7 @@ Made by Xhuis blood_color = "#555555" flesh_color = "#222222" - species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NOGUNS) //Can't use guns due to muzzle flash + species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NOGUNS, NO_EXAMINE) //Can't use guns due to muzzle flash burn_mod = 1.5 //1.5x burn damage, 2x is excessive oxy_mod = 0 heatmod = 1.5 diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 3cb08739a7c..f8f55f0e126 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -2,8 +2,10 @@ /obj/effect/proc_holder/spell/proc/shadowling_check(var/mob/living/carbon/human/H) if(!H || !istype(H)) return - if(H.get_species() == "Shadowling" && is_shadow(H)) return 1 - if(H.get_species() == "Lesser Shadowling" && is_thrall(H)) return 1 + if(isshadowling(H) && is_shadow(H)) + return 1 + if(isshadowlinglesser(H) && is_thrall(H)) + return 1 if(!is_shadow_or_thrall(usr)) to_chat(usr, "You can't wrap your head around how to do this.") else if(is_thrall(usr)) @@ -267,7 +269,7 @@ listclearnulls(ticker.mode.shadowling_thralls) if(!(ling.mind in ticker.mode.shadows)) return - if(ling.get_species() != "Shadowling") + if(!isshadowling(ling)) if(ticker.mode.shadowling_thralls.len >= 5) charge_counter = charge_max return @@ -610,7 +612,7 @@ to_chat(user, "[thrallToRevive] must be conscious to become empowered.") charge_counter = charge_max return - if(thrallToRevive.get_species() == "Lesser Shadowling") + if(isshadowlinglesser(thrallToRevive)) to_chat(user, "[thrallToRevive] is already empowered.") charge_counter = charge_max return @@ -619,7 +621,7 @@ if(!ishuman(M.current)) return var/mob/living/carbon/human/H = M.current - if(H.get_species() == "Lesser Shadowling") + if(isshadowlinglesser(H)) empowered_thralls++ if(empowered_thralls >= EMPOWERED_THRALL_LIMIT) to_chat(user, "You cannot spare this much energy. There are too many empowered thralls.") diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 801eb6cb33c..2ac4bc0b2f8 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -429,7 +429,7 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(sword, slot_r_hand) //Don't duplicate what's equipped to hands, or else duplicate swords could be generated...or weird cases of factionless swords. else - if(M.get_species() == "Tajaran" || M.get_species() == "Unathi") + if(istajaran(M) || isunathi(M)) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) //If they can't wear shoes, give them a pair of sandals. var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") @@ -461,7 +461,7 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(sword, slot_r_hand) if("cyborg") - if(M.get_species() != "Machine") + if(!ismachine(M)) for(var/obj/item/organ/O in M.bodyparts) O.robotize(make_tough = 1) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) @@ -584,9 +584,9 @@ var/global/list/multiverse = list() W.SetOwnerInfo(M) M.equip_to_slot_or_del(W, slot_wear_id) - if(M.get_species() == "Vox") - M.dna.species.after_equip_job(null, M) //Voxygen(tm) - if(M.get_species() == "Plasmaman") + if(isvox(M)) + M.dna.species.after_equip_job(null, M) //Nitrogen tanks + if(isplasmaman(M)) M.dna.species.after_equip_job(null, M) //No fireballs from other dimensions. M.update_icons() diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index eee87148118..18dda0fcbc4 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -141,7 +141,7 @@ wizard_mob.equip_to_slot_or_del(new /obj/item/radio/headset(wizard_mob), slot_l_ear) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) - if(wizard_mob.get_species() != "Plasmaman") //handled in the species file for plasmen on the afterjob equip proc for now + if(!isplasmaman(wizard_mob)) //handled in the species file for plasmen on the afterjob equip proc for now wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) wizard_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(wizard_mob), slot_back) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 154a34750cd..5c4c559a8b0 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -244,7 +244,7 @@ if(visualsOnly) return - if(H.get_species() == "Machine") + if(ismachine(H)) var/obj/item/organ/internal/cyberimp/brain/clown_voice/implant = new implant.insert(H) diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm index b141990fb6f..52b11da599b 100644 --- a/code/game/machinery/dye_generator.dm +++ b/code/game/machinery/dye_generator.dm @@ -98,7 +98,7 @@ var/mob/living/carbon/human/H = M var/dye_list = list("hair", "alt. hair theme") - if(H.gender == MALE || H.get_species() == "Vulpkanin") + if(H.gender == MALE || isvulpkanin(H)) dye_list += "facial hair" dye_list += "alt. facial hair theme" diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index e846ba591e2..baa424cb209 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -562,7 +562,7 @@ Class Procs: if(istype(perp.belt, /obj/item/gun) || istype(perp.belt, /obj/item/melee)) threatcount += 2 - if(perp.dna.species.name != "Human") //beepsky so racist. + if(!ishumanbasic(perp)) //beepsky so racist. threatcount += 2 if(check_records || check_arrest) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index b134b53bd86..3d7f6a52e70 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -92,7 +92,7 @@ return //Has internals, no drowning if((NO_BREATHE in drownee.dna.species.species_traits) || (BREATHLESS in drownee.mutations)) return //doesn't breathe, no drowning - if(drownee.get_species() == "Skrell" || drownee.get_species() == "Neara") + if(isskrell(drownee) || isneara(drownee)) return //fish things don't drown if(drownee.stat == DEAD) //Dead spacemen don't drown more diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index d9c7eb5ef83..c28fd68fc62 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -136,7 +136,7 @@ if(C.h_style == "Bald" || C.h_style == "Balding Hair" || C.h_style == "Skinhead") to_chat(user, "There is not enough hair left to shave...") return - if(M.get_species() == "Skrell") + if(isskrell(M)) to_chat(user, "Your razor isn't going to cut through tentacles.") return if(H == user) //shaving yourself diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm index 0d5bc869e44..40ed4d3bfa3 100644 --- a/code/game/objects/items/weapons/implants/implant_abductor.dm +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -28,7 +28,7 @@ var/obj/machinery/abductor/console/console if(ishuman(source)) var/mob/living/carbon/human/H = source - if(H.get_species() == "Abductor") + if(isabductor(H)) console = get_team_console(H.mind.abductor.team) home = console.pad diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 857e9a0af8c..2f53a1200a9 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -33,7 +33,7 @@ var/list/species_facial_hair = list() var/obj/item/organ/external/head/C = H.get_organ("head") var/datum/robolimb/robohead = all_robolimbs[C.model] - if(H.gender == MALE || H.get_species() == "Vulpkanin") + if(H.gender == MALE || isvulpkanin(H)) if(C.dna.species) for(var/i in facial_hair_styles_list) var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i] diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index a6046b575f7..742f5b3d0c0 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -26,7 +26,7 @@ to_chat(user, "You need to take that [target.name] off before cleaning it.") else if(target == user && user.a_intent == INTENT_GRAB && ishuman(target)) var/mob/living/carbon/human/muncher = user - if(muncher && muncher.get_species() == "Drask") + if(muncher && isdrask(muncher)) to_chat(user, "You take a bite of the [name]. Delicious!") playsound(user.loc, 'sound/items/eatfood.ogg', 50, 0) user.nutrition += 2 diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 816f7d24a67..bffaaa9bc9c 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -3,13 +3,13 @@ alert("The game hasn't started yet!") return - var/list/incompatible_species = list("Plasmaman", "Vox") + var/list/incompatible_species = list(/datum/species/plasmaman, /datum/species/vox) for(var/mob/living/carbon/human/H in player_list) if(H.stat == DEAD || !(H.client)) continue if(is_special_character(H)) continue - if(H.dna.species.name in incompatible_species) + if(is_type_in_list(H.dna.species, incompatible_species)) H.set_species(/datum/species/human) var/datum/preferences/A = new() // Randomize appearance A.copy_to(H) diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 16c06ab0424..715472128b8 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -3,14 +3,14 @@ alert("The game hasn't started yet!") return - var/list/incompatible_species = list("Plasmaman", "Vox") + var/list/incompatible_species = list(/datum/species/plasmaman, /datum/species/vox) var/team_toggle = 0 for(var/mob/living/carbon/human/H in player_list) if(H.stat == DEAD || !(H.client)) continue if(is_special_character(H)) continue - if(H.dna.species.name in incompatible_species) + if(is_type_in_list(H.dna.species, incompatible_species)) H.set_species(/datum/species/human) var/datum/preferences/A = new() // Randomize appearance A.copy_to(H) diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 9bfc00ca7c6..b26bdba7d92 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -82,7 +82,7 @@ user.mutations.Add(XRAY) if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.dna.species.name != "Shadow") + if(!isshadowperson(human)) to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") @@ -95,7 +95,7 @@ new /obj/structure/closet/syndicate/resources/everything(loc) if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.dna.species.name != "Shadow") + if(!isshadowperson(human)) to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") @@ -108,7 +108,7 @@ user.verbs += /mob/living/carbon/proc/immortality if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.dna.species.name != "Shadow") + if(!isshadowperson(human)) to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") @@ -130,7 +130,7 @@ obj_count++ if(ishuman(user)) var/mob/living/carbon/human/human = user - if(human.dna.species.name != "Shadow") + if(!isshadowperson(human)) to_chat(user, "Your flesh rapidly mutates!") to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.") diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index dd2861cc3a4..1e874772478 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -16,7 +16,7 @@ /obj/item/clothing/head/helmet/space/capspace/equipped(mob/living/carbon/human/user, slot) if(ishuman(user) && slot == slot_head) - if(user.dna.species.name == "Vox") + if(isvox(user)) if(flags & BLOCKHAIR) flags &= ~BLOCKHAIR else diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index eab5aa0c5bb..c65ea335c4d 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -609,8 +609,8 @@ var/species_icon = 'icons/mob/rig_back.dmi' // Since setting mob_icon will override the species checks in // update_inv_wear_suit(), handle species checks here. - if(wearer && sprite_sheets && sprite_sheets[wearer.get_species()]) - species_icon = sprite_sheets[wearer.get_species()] + if(wearer && sprite_sheets && sprite_sheets[wearer.dna.species.name]) + species_icon = sprite_sheets[wearer.dna.species.name] mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]") if(installed_modules.len) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index ee27b827ff0..51b2cbccae6 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -268,7 +268,7 @@ return var/mob/living/carbon/human/target = user - if(!istype(target) || target.get_species() != "Tajaran") // Only catbeasts, kthnx. + if(!istype(target) || !istajaran(target)) // Only catbeasts, kthnx. return if(target.change_body_accessory("Jay Wingler Tail")) @@ -1276,7 +1276,7 @@ /obj/item/fluff/zekemirror/attack_self(mob/user) var/mob/living/carbon/human/target = user - if(!istype(target) || target.get_species() != "Skrell") // It'd be strange to see other races with head tendrils. + if(!istype(target) || !isskrell(target)) // It'd be strange to see other races with head tendrils. return if(target.change_hair("Zekes Tentacles", 1)) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index a67b88f97d4..bf4d4309793 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -255,7 +255,7 @@ if(occupant.reagents) occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count,1)) - if(occupant.get_species() == "Human") + if(ishumanbasic(occupant)) new /obj/item/stack/sheet/animalhide/human(src) new /obj/effect/decal/cleanable/blood/gibs(src) diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 950b873af55..7acd3efc961 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -23,7 +23,7 @@ return 1 /mob/living/carbon/human/bee_friendly() - if(get_species() == "Diona") //bees pollinate plants, duh. + if(isdiona(src)) //bees pollinate plants, duh. return 1 if((wear_suit && (wear_suit.flags & THICKMATERIAL)) && (head && (head.flags & THICKMATERIAL))) return 1 diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 7ffa47586a4..a80c2ae6c18 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -105,7 +105,7 @@ to_chat(M, "This item is currently non-functional.") /*if(ishuman(M) && M.stat != DEAD) var/mob/living/carbon/human/H = M - if(H.species.name != "Human" || reac_volume < 5) // implying xenohumans are holy + if(!ishumanbasic(H) || reac_volume < 5) // implying xenohumans are holy if(method == INGEST && show_message) to_chat(H, "You feel nothing but a terrible aftertaste.") return ..() diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 82e062246b6..c64318d804b 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -84,12 +84,12 @@ I'm using this for Stat to give it a more nifty interface to work with if(container) var/obj/item/mmi/M = container if(istype(M) && M.held_brain) - return M.held_brain.dna.get_species_name() + return M.held_brain.dna.species.name else return "Artificial Life" if(istype(loc, /obj/item/organ/internal/brain)) var/obj/item/organ/internal/brain/B = loc - return B.dna.get_species_name() + return B.dna.species.name /mob/living/carbon/brain/Stat() ..() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 9cb1a981999..2f2d559f046 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -29,29 +29,36 @@ switch(act) //Cooldown-inducing emotes if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no", "buzz2") - if(dna.species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise. + var/found_machine_head = FALSE + if(ismachine(src)) //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm - else //Everyone else fails, skip the emote attempt - return + else + var/obj/item/organ/external/head/H = get_organ("head") // If you have a robotic head, you can make beep-boop noises + if(H && H.is_robotic()) + on_CD = handle_emote_CD() + found_machine_head = TRUE + + if(!found_machine_head) //Everyone else fails, skip the emote attempt + return //Everyone else fails, skip the emote attempt if("drone","drones","hum","hums","rumble","rumbles") - if(get_species() == "Drask") //Only Drask can make whale noises + if(isdrask(src)) //Only Drask can make whale noises on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm else return if("howl", "howls") - if(get_species() == "Vulpkanin") //Only Vulpkanin can howl + if(isvulpkanin(src)) //Only Vulpkanin can howl on_CD = handle_emote_CD(100) else return if("growl", "growls") - if(get_species() == "Vulpkanin") //Only Vulpkanin can growl + if(isvulpkanin(src)) //Only Vulpkanin can growl on_CD = handle_emote_CD() else return if("squish", "squishes") var/found_slime_bodypart = 0 - if(get_species() == "Slime People") //Only Slime People can squish + if(isslimeperson(src)) //Only Slime People can squish on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' found_slime_bodypart = 1 else @@ -65,31 +72,31 @@ return if("clack", "clacks") - if(get_species() == "Kidan") //Only Kidan can clack and rightfully so. + if(iskidan(src)) //Only Kidan can clack and rightfully so. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' else //Everyone else fails, skip the emote attempt return if("click", "clicks") - if(get_species() == "Kidan") //Only Kidan can click and rightfully so. + if(iskidan(src)) //Only Kidan can click and rightfully so. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' else //Everyone else fails, skip the emote attempt return if("creaks", "creak") - if(get_species() == "Diona") //Only Dionas can Creaks. + if(isdiona(src)) //Only Dionas can Creaks. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' else //Everyone else fails, skip the emote attempt return if("hiss", "hisses") - if(get_species() == "Unathi") //Only Unathi can hiss. + if(isunathi(src)) //Only Unathi can hiss. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' else //Everyone else fails, skip the emote attempt return if("quill", "quills") - if(get_species() == "Vox") //Only Vox can rustle their quills. + if(isvox(src)) //Only Vox can rustle their quills. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' else //Everyone else fails, skip the emote attempt return @@ -891,8 +898,6 @@ + " wag(s), wave(s), whimper(s), wink(s), yawn(s), quill(s)" switch(dna.species.name) - if("Machine") - emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" if("Drask") emotelist += "\nDrask specific emotes :- drone(s)-(none)/mob, hum(s)-(none)/mob, rumble(s)-(none)/mob" if("Kidan") @@ -906,7 +911,14 @@ if("Diona") emotelist += "\nDiona specific emotes :- creak(s)" - if (dna.species.name == "Slime People") + if(dna.species.name == "Machine") + emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" + else + var/obj/item/organ/external/head/H = get_organ("head") // If you have a robotic head, you can make beep-boop noises + if(H && H.is_robotic()) + emotelist += "\nRobotic head specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" + + if(dna.species.name == "Slime People") emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index ce0930f229f..a39d2843501 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -29,14 +29,12 @@ msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated msg += "[name]" - var/list/nospecies = list("Abductor", "Shadowling", "Neara", "Monkey", "Stok", "Farwa", "Wolpin") //species that won't show their race no matter what - - var/displayed_species = get_species() + var/displayed_species = dna.species.name for(var/obj/item/clothing/C in src) //Disguise checks if(C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back) if(C.species_disguise) displayed_species = C.species_disguise - if(skipjumpsuit && skipface || (displayed_species in nospecies)) //either obscured or on the nospecies list + if(skipjumpsuit && skipface || (NO_EXAMINE in dna.species.species_traits)) //either obscured or on the nospecies list msg += "!\n" //omit the species when examining else if(displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural msg += ", a slime person!\n" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2f6465289cf..5d2a4c22e7c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1035,10 +1035,6 @@ /mob/living/carbon/human/proc/check_dna() dna.check_integrity(src) - return - -/mob/living/carbon/human/get_species() - return dna.species.name /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) @@ -1172,7 +1168,7 @@ surgeries.Cut() //End all surgeries. update_revive() - if(dna.species.name != "Skeleton" && (SKELETON in mutations)) + if(!isskeleton(src) && (SKELETON in mutations)) mutations.Remove(SKELETON) if(NOCLONE in mutations) mutations.Remove(NOCLONE) @@ -1821,14 +1817,14 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/forceFed(var/obj/item/reagent_containers/food/toEat, mob/user, fullness) if(!check_has_mouth()) - if(!((istype(toEat, /obj/item/reagent_containers/food/drinks) && (get_species() == "Machine")))) + if(!((istype(toEat, /obj/item/reagent_containers/food/drinks) && (ismachine(src))))) to_chat(user, "Where do you intend to put \the [toEat]? \The [src] doesn't have a mouth!") return 0 return ..() /mob/living/carbon/human/selfDrink(var/obj/item/reagent_containers/food/drinks/toDrink) if(!check_has_mouth()) - if(!get_species() == "Machine") + if(!ismachine(src)) to_chat(src, "Where do you intend to put \the [src]? You don't have a mouth!") return 0 else diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 8aeb6f88a3d..ec2bb7514ed 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -16,7 +16,7 @@ "eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight. ) - species_traits = list(NO_BLOOD, NO_BREATHE, VIRUSIMMUNE, NOGUNS) + species_traits = list(NO_BLOOD, NO_BREATHE, VIRUSIMMUNE, NOGUNS, NO_EXAMINE) oxy_mod = 0 diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index d3ca4f68b3a..4dfbc362474 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -11,6 +11,7 @@ path = /mob/living/carbon/human/monkey language = null default_language = "Chimpanzee" + species_traits = list(NO_EXAMINE) greater_form = /datum/species/human is_small = 1 has_fine_manipulation = 0 diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index ae17fcb0367..8b264ad77b0 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -627,13 +627,13 @@ #undef SLIMEPERSON_ICON_UPDATE_PERIOD #undef SLIMEPERSON_BLOOD_SCALING_FACTOR -/mob/living/carbon/human/proc/toggle_recolor(var/silent = 0) - var/datum/species/slime/S = all_species[get_species()] - if(!istype(S)) +/mob/living/carbon/human/proc/toggle_recolor(silent = FALSE) + if(!isslimeperson(src)) if(!silent) to_chat(src, "You're not a slime person!") return + var/datum/species/slime/S = dna.species if(src in S.recolor_list) S.recolor_list -= src if(!silent) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3729e9aa85e..af134052a66 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -448,7 +448,7 @@ var/global/list/damage_icon_parts = list() if(head_organ.h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) var/datum/sprite_accessory/hair/hair_style = hair_styles_full_list[head_organ.h_style] - //if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN + //if(!src.get_int_organ(/obj/item/organ/internal/brain) && !ismachine(src))//make it obvious we have NO BRAIN // hair_standing.Blend(debrained_s, ICON_OVERLAY) if(hair_style && hair_style.species_allowed) if((head_organ.dna.species.name in hair_style.species_allowed) || (head_organ.dna.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 2d68747a742..5b0ee885ce7 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -337,7 +337,7 @@ if(istype(L, /mob/living/carbon/human)) //Ignore slime(wo)men var/mob/living/carbon/human/H = L - if(H.dna.species.name == "Slime People") + if(isslimeperson(H)) continue if(!L.canmove) // Only one slime can latch on at a time. diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 2396d08a1df..8dc6a46a584 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -54,7 +54,7 @@ /mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M) //Let people pick the little buggers up. if(M.a_intent == INTENT_HELP) - if(M.dna.species && M.dna.species.name == "Diona") + if(isdiona(M)) to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.") to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.") verbs += /mob/living/simple_animal/diona/proc/split @@ -82,7 +82,7 @@ if(ishuman(C)) var/mob/living/carbon/human/D = C - if(D.dna.species && D.dna.species.name == "Diona") + if(isdiona(D)) choices += C var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index beba84eaa3f..84f9503066a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1080,9 +1080,6 @@ var/list/slot_equipment_priority = list( \ /mob/proc/activate_hand(selhand) return -/mob/proc/get_species() - return "" - /mob/dead/observer/verb/respawn() set name = "Respawn as NPC" set category = "Ghost" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 2f51ec9417b..d622c78f680 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -16,9 +16,9 @@ return 0 /mob/living/carbon/human/isSynthetic() - if(get_species() == "Machine") - return 1 - return 0 + if(ismachine(src)) + return TRUE + return FALSE /mob/proc/get_screen_colour() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index d7e8a531867..fe3ad6b120d 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -591,19 +591,6 @@ if(!S) return 1 return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(IS_WHITELISTED in S.species_traits) -/mob/new_player/get_species() - var/datum/species/chosen_species - if(client.prefs.species) - chosen_species = all_species[client.prefs.species] - - if(!chosen_species) - return "Human" - - if(is_species_whitelisted(chosen_species) || has_admin_rights()) - return chosen_species.name - - return "Human" - /mob/new_player/get_gender() if(!client || !client.prefs) ..() return client.prefs.gender diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 51bf515ca1e..165e75f1875 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -153,10 +153,10 @@ process_fire(target,user,1,params) -/obj/item/gun/proc/can_trigger_gun(var/mob/living/user) +/obj/item/gun/proc/can_trigger_gun(mob/living/user) if(!user.can_use_guns(src)) return 0 - if(restricted_species && restricted_species.len && !(user.get_species() in restricted_species)) + if(restricted_species && restricted_species.len && !is_type_in_list(user.dna.species, restricted_species)) to_chat(user, "[src] is incompatible with your biology!") return 0 return 1 diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 7093d587b3c..95e1a586469 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -11,7 +11,7 @@ can_suppress = 0 var/charge_tick = 0 var/charge_delay = 15 - restricted_species = list("Vox", "Vox Armalis") + restricted_species = list(/datum/species/vox) /obj/item/gun/projectile/automatic/spikethrower/New() ..() @@ -79,7 +79,7 @@ force = 10 ammo_type = list(/obj/item/ammo_casing/energy/sonic) cell_type = /obj/item/stock_parts/cell/super - restricted_species = list("Vox Armalis") + restricted_species = list(/datum/species/vox/armalis) /obj/item/gun/energy/noisecannon/update_icon() return diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index faf0ce94c6a..1df45dbe064 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -24,15 +24,15 @@ var/exp_flash = 3 var/exp_fire = 2 -/obj/item/projectile/magic/death/on_hit(var/mob/living/carbon/G) +/obj/item/projectile/magic/death/on_hit(mob/living/carbon/C) . = ..() - if(isliving(G)) - if(G.get_species() == "Machine") //speshul snowfleks deserv speshul treetment - G.adjustFireLoss(6969) //remember - slimes love fire + if(isliving(C)) + if(ismachine(C)) //speshul snowfleks deserv speshul treetment + C.adjustFireLoss(6969) //remember - slimes love fire else - G.death() + C.death() - visible_message("[G] topples backwards as the death bolt impacts [G.p_them()]!") + visible_message("[C] topples backwards as the death bolt impacts [C.p_them()]!") /obj/item/projectile/magic/fireball/Range() var/turf/T1 = get_step(src,turn(dir, -45)) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 3da4df4d558..a3fc113339e 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -61,7 +61,7 @@ /datum/reagent/slimetoxin/on_mob_life(mob/living/M) if(ishuman(M)) var/mob/living/carbon/human/human = M - if(human.dna.species.name != "Shadow") + if(!isshadowperson(human)) to_chat(M, "Your flesh rapidly mutates!") to_chat(M, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") to_chat(M, "Your body reacts violently to light. However, it naturally heals in darkness.") @@ -217,7 +217,7 @@ if(method == TOUCH) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.get_species() == "Grey") + if(isgrey(H)) return if(volume > 25) @@ -246,7 +246,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.get_species() == "Grey") + if(isgrey(H)) return if(volume >=10 && volume <=25) @@ -995,7 +995,7 @@ C.adjustToxLoss(2) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.get_species() == "Kidan") //RIP + if(iskidan(H)) //RIP H.adjustToxLoss(20) /datum/reagent/capulettium diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index cd338cb048d..199edb72fb4 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -29,7 +29,7 @@ var/mob/living/carbon/human/H = M - if(H.get_species() != "Grey") //God this is so gross I hate it. + if(!isgrey(H)) //God this is so gross I hate it. return if(volume > 25) @@ -58,7 +58,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.get_species() != "Grey") + if(!isgrey(H)) return if(volume < 10) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 979e80ddf29..42db2e97da1 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -32,7 +32,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(target.get_species() == "Machine") + if(ismachine(target)) // RIP bi-centennial man return 0 if(!affected) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 18a5e4ee04f..a0ca54c8e01 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -279,7 +279,8 @@ This function completely restores a damaged organ to perfect condition. for(var/obj/item/organ/external/EO in contents) EO.rejuvenate() - owner.updatehealth() + if(owner) + owner.updatehealth() update_icon() if(!owner) processing_objects |= src diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 467f1e64a00..bcb5151d359 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -303,7 +303,7 @@ ..() /datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(target.get_species() == "Lesser Shadowling") //Empowered thralls cannot be deconverted + if(isshadowlinglesser(target)) //Empowered thralls cannot be deconverted to_chat(target, "NOT LIKE THIS!") user.visible_message("[target] suddenly slams upward and knocks down [user]!", \ "[target] suddenly bolts up and slams you with tremendous force!") diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index a0e4c2a3976..9483818d153 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -24,7 +24,7 @@ /datum/surgery_step/reshape_face/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/organ/external/head/head = target.get_organ(target_zone) - var/species_names = target.get_species() + var/species_names = target.dna.species.name if(head.disfigured) head.disfigured = FALSE user.visible_message("[user] successfully restores [target]'s appearance!", "You successfully restore [target]'s appearance.") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index c64c53c8baa..72bf70c7e81 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -67,10 +67,6 @@ //How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 - var/list/allowed_mob = list() - var/list/disallowed_mob = list() - - /datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/success = 0 if(accept_hand) @@ -146,19 +142,8 @@ // Checks if this step applies to the user mob at all /datum/surgery_step/proc/is_valid_target(mob/living/carbon/human/target) if(!hasorgans(target)) - return 0 - - if(allowed_mob)//can i just remove this and/or change it? - for(var/species in allowed_mob) - if(target.get_species() == species) - return 1 - - if(disallowed_mob) - for(var/species in disallowed_mob) - if(target.get_species() == species) - return 0 - - return 1 + return FALSE + return TRUE // checks whether this step can be applied with the given user and target /datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) From c6bb2ecd4d6b60b0d48159ca924227ab9c26ff62 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 18 Jul 2018 19:51:22 -0400 Subject: [PATCH 07/24] abductor stuff --- code/datums/mind.dm | 34 +- code/game/gamemodes/cult/cult_items.dm | 1 + .../abduction/abductee_objectives.dm | 147 ++++++++ .../miniantags/abduction/abduction.dm | 318 ++---------------- .../miniantags/abduction/abduction_gear.dm | 23 +- .../miniantags/abduction/abduction_outfits.dm | 62 ++++ .../miniantags/abduction/machinery/camera.dm | 73 ++-- .../machinery/computer/camera_advanced.dm | 2 + code/game/objects/items/devices/megaphone.dm | 2 +- .../weapons/implants/implant_abductor.dm | 3 +- code/game/objects/items/weapons/whetstone.dm | 16 +- code/modules/mob/language.dm | 8 +- .../living/carbon/human/species/abductor.dm | 8 +- icons/mob/ears.dmi | Bin 1716 -> 1926 bytes icons/obj/abductor.dmi | Bin 55430 -> 55758 bytes paradise.dme | 2 + 16 files changed, 334 insertions(+), 365 deletions(-) create mode 100644 code/game/gamemodes/miniantags/abduction/abductee_objectives.dm create mode 100644 code/game/gamemodes/miniantags/abduction/abduction_outfits.dm diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 667ad44e027..0e8d655c546 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -61,7 +61,6 @@ var/linglink var/datum/vampire/vampire //vampire holder var/datum/nations/nation //nation holder - var/datum/abductor/abductor //abductor holder var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD @@ -1132,14 +1131,17 @@ log_admin("[key_name(usr)] turned [current] into abductor.") ticker.mode.update_abductor_icons_added(src) if("equip") + if(!ishuman(current)) + to_chat(usr, "This only works on humans!") + return + + var/mob/living/carbon/human/H = current var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") if(gear) - var/datum/game_mode/abduction/temp = new - temp.equip_common(current) if(gear=="Agent") - temp.equip_agent(current) + H.equipOutfit(/datum/outfit/abductor/agent) else - temp.equip_scientist(current) + H.equipOutfit(/datum/outfit/abductor/scientist) else if(href_list["silicon"]) switch(href_list["silicon"]) @@ -1425,35 +1427,31 @@ var/mob/living/carbon/human/H = current H.set_species(/datum/species/abductor) + var/datum/species/abductor/S = H.dna.species - switch(role) - if("Agent") - H.mind.abductor.agent = 1 - if("Scientist") - H.mind.abductor.scientist = 1 - H.mind.abductor.team = team + if(role == "Scientist") + S.scientist = TRUE + + S.team = team var/list/obj/effect/landmark/abductor/agent_landmarks = new var/list/obj/effect/landmark/abductor/scientist_landmarks = new agent_landmarks.len = 4 scientist_landmarks.len = 4 for(var/obj/effect/landmark/abductor/A in landmarks_list) - if(istype(A,/obj/effect/landmark/abductor/agent)) + if(istype(A, /obj/effect/landmark/abductor/agent)) agent_landmarks[text2num(A.team)] = A - else if(istype(A,/obj/effect/landmark/abductor/scientist)) + else if(istype(A, /obj/effect/landmark/abductor/scientist)) scientist_landmarks[text2num(A.team)] = A var/obj/effect/landmark/L - if(teleport=="Yes") + if(teleport == "Yes") switch(role) if("Agent") - H.mind.abductor.agent = 1 L = agent_landmarks[team] - H.loc = L.loc if("Scientist") - H.mind.abductor.scientist = 1 L = agent_landmarks[team] - H.loc = L.loc + H.forceMove(L.loc) // check whether this mind's mob has been brigged for the given duration diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index a223f2e5125..b8e5365cb5d 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -201,6 +201,7 @@ increment = 5 max = 40 prefix = "darkened" + claw_damage_increase = 2 /obj/item/whetstone/cult/update_icon() icon_state = "cult_sharpener[used ? "_used" : ""]" diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm new file mode 100644 index 00000000000..af2920c4626 --- /dev/null +++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm @@ -0,0 +1,147 @@ +/datum/objective/abductee + completed = 1 + +/datum/objective/abductee/steal + explanation_text = "Steal all" + +/datum/objective/abductee/steal/New() + var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) + explanation_text+=" [target]." + +/datum/objective/abductee/paint + explanation_text = "The station is hideous. You must color it all" + +/datum/objective/abductee/paint/New() + var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) + explanation_text+= " [color]!" + +/datum/objective/abductee/speech + explanation_text = "Your brain is broken... you can only communicate in" + +/datum/objective/abductee/speech/New() + var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) + explanation_text+= " [style]." + +/datum/objective/abductee/capture + explanation_text = "Capture" + +/datum/objective/abductee/capture/New() + var/list/jobs = job_master.occupations.Copy() + for(var/datum/job/J in jobs) + if(J.current_positions < 1) + jobs -= J + if(jobs.len > 0) + var/datum/job/target = pick(jobs) + explanation_text += " a [target.title]." + else + explanation_text += " someone." + +/datum/objective/abductee/shuttle + explanation_text = "You must escape the station! Get the shuttle called!" + +/datum/objective/abductee/noclone + explanation_text = "Don't allow anyone to be cloned." + +/datum/objective/abductee/oxygen + explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station." + +/datum/objective/abductee/blazeit + explanation_text = "Your body must be improved. Ingest as many drugs as you can." + +/datum/objective/abductee/yumyum + explanation_text = "You are hungry. Eat as much food as you can find." + +/datum/objective/abductee/insane + explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL" + +/datum/objective/abductee/cannotmove + explanation_text = "Convince the crew that you are a paraplegic." + +/datum/objective/abductee/deadbodies + explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." + +/datum/objective/abductee/floors + explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." + +/datum/objective/abductee/POWERUNLIMITED + explanation_text = "Flood the station's powernet with as much electricity as you can." + +/datum/objective/abductee/pristine + explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." + +/datum/objective/abductee/nowalls + explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" + +/datum/objective/abductee/nations + explanation_text = "Ensure your department prospers over all else." + +/datum/objective/abductee/abductception + explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." + +/datum/objective/abductee/summon + explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." + +/datum/objective/abductee/machine + explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." + +/datum/objective/abductee/calling + explanation_text = "Call forth a spirit from the other side." + +/datum/objective/abductee/calling/New() + var/mob/dead/D = pick(dead_mob_list) + if(D) + explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." + +/datum/objective/abductee/social_experiment + explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." + +/datum/objective/abductee/vr + explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR." + +/datum/objective/abductee/pets + explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" + +/datum/objective/abductee/defect + explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can." + +/datum/objective/abductee/promote + explanation_text = "Climb the corporate ladder all the way to the top!" + +/datum/objective/abductee/science + explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe." + +/datum/objective/abductee/build + explanation_text = "Expand the station." + +/datum/objective/abductee/pragnant + explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." + +/datum/objective/abductee/engine + explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." + +/datum/objective/abductee/music + explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" + +/datum/objective/abductee/clown + explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" + +/datum/objective/abductee/party + explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" + +/datum/objective/abductee/pets + explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" + +/datum/objective/abductee/conspiracy + explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" + +/datum/objective/abductee/stalker + explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." + +/datum/objective/abductee/narrator + explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." + +/datum/objective/abductee/lurve + explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" + +/datum/objective/abductee/sixthsense + explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 09e91869fd9..5d5c3342010 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -89,62 +89,14 @@ return 1 /datum/game_mode/abduction/post_setup() - //Spawn Team - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new - agent_landmarks.len = max_teams - scientist_landmarks.len = max_teams - for(var/obj/effect/landmark/abductor/A in landmarks_list) - if(istype(A,/obj/effect/landmark/abductor/agent)) - agent_landmarks[text2num(A.team)] = A - else if(istype(A,/obj/effect/landmark/abductor/scientist)) - scientist_landmarks[text2num(A.team)] = A - - var/datum/mind/agent - var/obj/effect/landmark/L - var/datum/mind/scientist - var/team_name - var/mob/living/carbon/human/H for(var/team_number=1,team_number<=abductor_teams,team_number++) - team_name = team_names[team_number] - agent = agents[team_number] - H = agent.current - L = agent_landmarks[team_number] - H.forceMove(get_turf(L)) - H.body_accessory = null - H.set_species(/datum/species/abductor) - H.mind.abductor.agent = 1 - H.mind.abductor.team = team_number - H.real_name = team_name + " Agent" - H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys. - H.overeatduration = 0 - equip_common(H,team_number) - equip_agent(H,team_number) - greet_agent(agent,team_number) - update_abductor_icons_added(agent) - - scientist = scientists[team_number] - H = scientist.current - L = scientist_landmarks[team_number] - H.forceMove(get_turf(L)) - H.body_accessory = null - H.set_species(/datum/species/abductor) - H.mind.abductor.scientist = 1 - H.mind.abductor.team = team_number - H.real_name = team_name + " Scientist" - H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys. - H.overeatduration = 0 - equip_common(H,team_number) - equip_scientist(H,team_number) - greet_scientist(scientist,team_number) - update_abductor_icons_added(scientist) - + post_setup_team(team_number) return ..() //Used for create antag buttons /datum/game_mode/abduction/proc/post_setup_team(team_number) - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new + var/list/obj/effect/landmark/abductor/agent_landmarks = list() + var/list/obj/effect/landmark/abductor/scientist_landmarks = list() agent_landmarks.len = max_teams scientist_landmarks.len = max_teams for(var/obj/effect/landmark/abductor/A in landmarks_list) @@ -153,11 +105,13 @@ else if(istype(A,/obj/effect/landmark/abductor/scientist)) scientist_landmarks[text2num(A.team)] = A + var/team_name = team_names[team_number] + var/datum/mind/agent var/obj/effect/landmark/L var/datum/mind/scientist - var/team_name var/mob/living/carbon/human/H + var/datum/species/abductor/S team_name = team_names[team_number] agent = agents[team_number] @@ -166,11 +120,12 @@ H.forceMove(get_turf(L)) H.body_accessory = null H.set_species(/datum/species/abductor) - H.mind.abductor.agent = 1 - H.mind.abductor.team = team_number + S = H.dna.species + S.team = team_number H.real_name = team_name + " Agent" - equip_common(H,team_number) - equip_agent(H,team_number) + H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys. + H.overeatduration = 0 + H.equipOutfit(/datum/outfit/abductor/agent) greet_agent(agent,team_number) update_abductor_icons_added(agent) @@ -180,20 +135,16 @@ H.forceMove(get_turf(L)) H.body_accessory = null H.set_species(/datum/species/abductor) - H.mind.abductor.scientist = 1 - H.mind.abductor.team = team_number + S = H.dna.species + S.scientist = TRUE + S.team = team_number H.real_name = team_name + " Scientist" - equip_common(H,team_number) - equip_scientist(H,team_number) + H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys. + H.overeatduration = 0 + H.equipOutfit(/datum/outfit/abductor/scientist) greet_scientist(scientist,team_number) update_abductor_icons_added(scientist) - -/datum/abductor //stores abductor's team and whether they're a scientist or agent; since species datums are global, we have to use this, instead. - var/scientist = 0 - var/agent = 0 - var/team = 1 - /datum/game_mode/abduction/proc/greet_agent(datum/mind/abductor,team_number) abductor.objectives += team_objectives[team_number] var/team_name = team_names[team_number] @@ -202,11 +153,7 @@ to_chat(abductor.current, "With the help of your teammate, kidnap and experiment on station crew members!") to_chat(abductor.current, "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve.") - var/obj_count = 1 - for(var/datum/objective/objective in abductor.objectives) - to_chat(abductor.current, "Objective #[obj_count]: [objective.explanation_text]") - obj_count++ - return + abductor.announce_objectives() /datum/game_mode/abduction/proc/greet_scientist(datum/mind/abductor,team_number) abductor.objectives += team_objectives[team_number] @@ -216,64 +163,12 @@ to_chat(abductor.current, "With the help of your teammate, kidnap and experiment on station crew members!") to_chat(abductor.current, "Use your tool and ship consoles to support the agent and retrieve human specimens.") - var/obj_count = 1 - for(var/datum/objective/objective in abductor.objectives) - to_chat(abductor.current, "Objective #[obj_count]: [objective.explanation_text]") - obj_count++ - return - -/datum/game_mode/abduction/proc/equip_common(mob/living/carbon/human/agent,team_number) - var/radio_freq = SYND_FREQ - - var/obj/item/radio/R = new /obj/item/radio/headset/syndicate/alt(agent) - R.set_frequency(radio_freq) - R.name = "alien headset" - agent.equip_to_slot_or_del(R, slot_l_ear) - agent.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(agent), slot_shoes) - agent.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(agent), slot_w_uniform) //they're greys gettit - agent.equip_to_slot_or_del(new /obj/item/storage/backpack(agent), slot_back) - -/datum/game_mode/abduction/proc/get_team_console(team) - var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in abductor_equipment) - if(c.team == team) - console = c - break - return console - -/datum/game_mode/abduction/proc/equip_agent(mob/living/carbon/human/agent,team_number) - if(!team_number) - team_number = agent.mind.abductor.team - - var/obj/machinery/abductor/console/console = get_team_console(team_number) - var/obj/item/clothing/suit/armor/abductor/vest/V = new /obj/item/clothing/suit/armor/abductor/vest(agent) - if(console!=null) - console.vest = V - V.flags |= NODROP - agent.equip_to_slot_or_del(V, slot_wear_suit) - agent.equip_to_slot_or_del(new /obj/item/abductor_baton(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/gun/energy/alien(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/abductor/silencer(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) - agent.equip_to_slot_or_del(new /obj/item/storage/belt/military/abductor/full(agent), slot_belt) - agent.update_icons() - - -/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number) - if(!team_number) - team_number = scientist.mind.abductor.team - - var/obj/machinery/abductor/console/console = get_team_console(team_number) - var/obj/item/abductor/gizmo/G = new /obj/item/abductor/gizmo(scientist) - if(console!=null) - console.gizmo = G - G.console = console - scientist.equip_to_slot_or_del(G, slot_in_backpack) - - var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(scientist) - beamplant.implant(scientist) - scientist.update_icons() + abductor.announce_objectives() +/datum/game_mode/abduction/proc/get_team_console(team_number) + for(var/obj/machinery/abductor/console/C in machines) + if(C.team == team_number) + return C /datum/game_mode/abduction/check_finished() if(!finished) @@ -336,18 +231,19 @@ var/ab_team = team if(owner) if(!owner.current || !ishuman(owner.current)) - return 0 + return FALSE var/mob/living/carbon/human/H = owner.current if(!isabductor(H)) - return 0 - ab_team = H.mind.abductor.team - for(var/obj/machinery/abductor/experiment/E in abductor_equipment) + return FALSE + var/datum/species/abductor/S = H.dna.species + ab_team = S.team + for(var/obj/machinery/abductor/experiment/E in machines) if(E.team == ab_team) if(E.points >= target_amount) - return 1 + return TRUE else - return 0 - return 0 + return FALSE + return FALSE /datum/game_mode/proc/remove_abductor(datum/mind/abductor_mind) if(abductor_mind in abductors) @@ -358,7 +254,7 @@ to_chat(abductor_mind.current, "You have been turned into a robot! You are no longer an abductor.") else to_chat(abductor_mind.current, "You have been brainwashed! You are no longer an abductor.") - ticker.mode.update_abductor_icons_added(abductor_mind) + ticker.mode.update_abductor_icons_removed(abductor_mind) /datum/game_mode/proc/update_abductor_icons_added(datum/mind/alien_mind) var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR] @@ -368,152 +264,4 @@ /datum/game_mode/proc/update_abductor_icons_removed(datum/mind/alien_mind) var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR] hud.leave_hud(alien_mind.current) - set_antag_hud(alien_mind.current, null) - -/datum/objective/abductee - completed = 1 - -/datum/objective/abductee/steal - explanation_text = "Steal all" - -/datum/objective/abductee/steal/New() - var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) - explanation_text+=" [target]." - -/datum/objective/abductee/paint - explanation_text = "The station is hideous. You must color it all" - -/datum/objective/abductee/paint/New() - var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) - explanation_text+= " [color]!" - -/datum/objective/abductee/speech - explanation_text = "Your brain is broken... you can only communicate in" - -/datum/objective/abductee/speech/New() - var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) - explanation_text+= " [style]." - -/datum/objective/abductee/capture - explanation_text = "Capture" - -/datum/objective/abductee/capture/New() - var/list/jobs = job_master.occupations.Copy() - for(var/datum/job/J in jobs) - if(J.current_positions < 1) - jobs -= J - if(jobs.len > 0) - var/datum/job/target = pick(jobs) - explanation_text += " a [target.title]." - else - explanation_text += " someone." - -/datum/objective/abductee/shuttle - explanation_text = "You must escape the station! Get the shuttle called!" - -/datum/objective/abductee/noclone - explanation_text = "Don't allow anyone to be cloned." - -/datum/objective/abductee/oxygen - explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station." - -/datum/objective/abductee/blazeit - explanation_text = "Your body must be improved. Ingest as many drugs as you can." - -/datum/objective/abductee/yumyum - explanation_text = "You are hungry. Eat as much food as you can find." - -/datum/objective/abductee/insane - explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL" - -/datum/objective/abductee/cannotmove - explanation_text = "Convince the crew that you are a paraplegic." - -/datum/objective/abductee/deadbodies - explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." - -/datum/objective/abductee/floors - explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." - -/datum/objective/abductee/POWERUNLIMITED - explanation_text = "Flood the station's powernet with as much electricity as you can." - -/datum/objective/abductee/pristine - explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." - -/datum/objective/abductee/nowalls - explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" - -/datum/objective/abductee/nations - explanation_text = "Ensure your department prospers over all else." - -/datum/objective/abductee/abductception - explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." - -/datum/objective/abductee/summon - explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." - -/datum/objective/abductee/machine - explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." - -/datum/objective/abductee/calling - explanation_text = "Call forth a spirit from the other side." - -/datum/objective/abductee/calling/New() - var/mob/dead/D = pick(dead_mob_list) - if(D) - explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." - -/datum/objective/abductee/social_experiment - explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." - -/datum/objective/abductee/vr - explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR." - -/datum/objective/abductee/pets - explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" - -/datum/objective/abductee/defect - explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can." - -/datum/objective/abductee/promote - explanation_text = "Climb the corporate ladder all the way to the top!" - -/datum/objective/abductee/science - explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe." - -/datum/objective/abductee/build - explanation_text = "Expand the station." - -/datum/objective/abductee/pragnant - explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." - -/datum/objective/abductee/engine - explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." - -/datum/objective/abductee/music - explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" - -/datum/objective/abductee/clown - explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" - -/datum/objective/abductee/party - explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" - -/datum/objective/abductee/pets - explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" - -/datum/objective/abductee/conspiracy - explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" - -/datum/objective/abductee/stalker - explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." - -/datum/objective/abductee/narrator - explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." - -/datum/objective/abductee/lurve - explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" - -/datum/objective/abductee/sixthsense - explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." \ No newline at end of file + set_antag_hud(alien_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 73a910e54ef..4f7d260db92 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -117,8 +117,8 @@ /obj/item/abductor/proc/ScientistCheck(user) var/mob/living/carbon/human/H = user - if(H.mind && H.mind.abductor) - return H.mind.abductor.scientist + var/datum/species/abductor/S = H.dna.species + return S.scientist /obj/item/abductor/gizmo name = "science tool" @@ -477,6 +477,25 @@ Congratulations! You are now trained for invasive xenobiology research!"} to_chat(user, "The baton is in probing mode.") +/obj/item/radio/headset/abductor + name = "alien headset" + desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows." + flags = EARBANGPROTECT + origin_tech = "magnets=2;abductor=3" + icon = 'icons/obj/abductor.dmi' + icon_state = "abductor_headset" + item_state = "abductor_headset" + ks2type = /obj/item/encryptionkey/heads/captain + +/obj/item/radio/headset/abductor/New() + ..() + make_syndie() + +/obj/item/radio/headset/abductor/attackby(obj/item/I, mob/user, params) + if(isscrewdriver(I)) + return // Stops humans from disassembling abductor headsets. + return ..() + /obj/item/scalpel/alien name = "alien scalpel" desc = "It's a gleaming sharp knife made out of silvery-green metal." diff --git a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm new file mode 100644 index 00000000000..bb39e90cd01 --- /dev/null +++ b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm @@ -0,0 +1,62 @@ +/datum/outfit/abductor + name = "Abductor Basic" + uniform = /obj/item/clothing/under/color/grey //they're greys gettit + shoes = /obj/item/clothing/shoes/combat + back = /obj/item/storage/backpack + l_ear = /obj/item/radio/headset/abductor + +/datum/outfit/abductor/proc/get_team_console(team_number) + for(var/obj/machinery/abductor/console/C in machines) + if(C.team == team_number) + return C + +/datum/outfit/abductor/proc/link_to_console(mob/living/carbon/human/H, team_number) + if(!team_number && isabductor(H)) + var/datum/species/abductor/S = H.dna.species + team_number = S.team + + if(!team_number) + team_number = 1 + + var/obj/machinery/abductor/console/console = get_team_console(team_number) + if(console) + var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H + if(V) + console.vest = V + V.flags |= NODROP + + var/obj/item/abductor/gizmo/G = locate() in H.get_item_by_slot(slot_back) + if(G) + console.gizmo = G + G.console = console + +/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(!visualsOnly) + link_to_console(H) + + +/datum/outfit/abductor/agent + name = "Abductor Agent" + head = /obj/item/clothing/head/helmet/abductor + suit = /obj/item/clothing/suit/armor/abductor/vest + belt = /obj/item/storage/belt/military/abductor/full + + backpack_contents = list( + /obj/item/abductor_baton = 1, + /obj/item/gun/energy/alien = 1, + /obj/item/abductor/silencer = 1 + ) + +/datum/outfit/abductor/scientist + name = "Abductor Scientist" + + backpack_contents = list( + /obj/item/abductor/gizmo = 1 + ) + +/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(!visualsOnly) + var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(H) + beamplant.implant(H) \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 219ae4b6e54..cd4f80f2527 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -2,7 +2,6 @@ name = "Human Observation Console" var/team = 0 networks = list("SS13","Abductor") - off_action = new /datum/action/innate/camera_off/abductor //specific datum var/datum/action/innate/teleport_in/tele_in_action = new var/datum/action/innate/teleport_out/tele_out_action = new var/datum/action/innate/teleport_self/tele_self_action = new @@ -25,65 +24,43 @@ eyeobj.icon_state = "camera_target" /obj/machinery/computer/camera_advanced/abductor/GrantActions(mob/living/carbon/user) - off_action.target = user - off_action.Grant(user) + ..() - jump_action.target = user - jump_action.Grant(user) - //TODO : add null checks - tele_in_action.target = console.pad - tele_in_action.Grant(user) + if(tele_in_action) + tele_in_action.target = console.pad + tele_in_action.Grant(user) + actions += tele_in_action - tele_out_action.target = console - tele_out_action.Grant(user) + if(tele_out_action) + tele_out_action.target = console + tele_out_action.Grant(user) + actions += tele_out_action - tele_self_action.target = console.pad - tele_self_action.Grant(user) + if(tele_self_action) + tele_self_action.target = console.pad + tele_self_action.Grant(user) + actions += tele_self_action - vest_mode_action.target = console - vest_mode_action.Grant(user) + if(vest_mode_action) + vest_mode_action.target = console + vest_mode_action.Grant(user) + actions += vest_mode_action - vest_disguise_action.target = console - vest_disguise_action.Grant(user) + if(vest_disguise_action) + vest_disguise_action.target = console + vest_disguise_action.Grant(user) + actions += vest_disguise_action - set_droppoint_action.target = console - set_droppoint_action.Grant(user) - -/obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H) - if(H.mind && H.mind.abductor) - return H.mind.abductor.scientist + if(set_droppoint_action) + set_droppoint_action.target = console + set_droppoint_action.Grant(user) + actions += set_droppoint_action /obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user) if(!isabductor(user)) return return ..() -/datum/action/innate/camera_off/abductor/Activate() - if(!target || !iscarbon(target)) - return - var/mob/living/carbon/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/abductor/origin = remote_eye.origin - C.remote_view = 0 - origin.current_user = null - origin.jump_action.Remove(C) - origin.tele_in_action.Remove(C) - origin.tele_out_action.Remove(C) - origin.tele_self_action.Remove(C) - origin.vest_mode_action.Remove(C) - origin.vest_disguise_action.Remove(C) - origin.set_droppoint_action.Remove(C) - remote_eye.eye_user = null - C.reset_perspective(null) - if(C.client) - C.client.images -= remote_eye.user_image - for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks) - C.client.images -= chunk.obscured - C.remote_control = null - C.unset_machine() - src.Remove(C) - - /datum/action/innate/teleport_in name = "Send To" button_icon_state = "beam_down" diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 00f6a98f2bc..99eaeae3fe6 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -31,6 +31,7 @@ for(var/V in actions) var/datum/action/A = V A.Remove(user) + actions.Cut() if(user.client) user.reset_perspective(null) eyeobj.RemoveImages() @@ -52,6 +53,7 @@ if(current_user) current_user.unset_machine() QDEL_NULL(eyeobj) + QDEL_LIST(actions) return ..() /obj/machinery/computer/camera_advanced/on_unset_machine(mob/M) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 4bbdaa2f723..4fea8e93a39 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -24,7 +24,7 @@ return if(ishuman(user)) var/mob/living/carbon/human/abductor/H = user - if(H && H.mind.abductor) + if(isabductor(H)) to_chat(user, "Megaphones can't project psionic communication!") return if(ishuman(user)) diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm index 40ed4d3bfa3..3ec571c94a6 100644 --- a/code/game/objects/items/weapons/implants/implant_abductor.dm +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -29,7 +29,8 @@ if(ishuman(source)) var/mob/living/carbon/human/H = source if(isabductor(H)) - console = get_team_console(H.mind.abductor.team) + var/datum/species/abductor/S = H.dna.species + console = get_team_console(S.team) home = console.pad if(!home) diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm index 5d17e66d976..fcb2fab2d4e 100644 --- a/code/game/objects/items/weapons/whetstone.dm +++ b/code/game/objects/items/weapons/whetstone.dm @@ -10,6 +10,7 @@ var/max = 30 var/prefix = "sharpened" var/requires_sharpness = 1 + var/claw_damage_increase = 1 /obj/item/whetstone/attackby(obj/item/I, mob/user, params) @@ -46,16 +47,24 @@ playsound(get_turf(src), usesound, 50, 1) name = "worn out [name]" desc = "[desc] At least, it used to." - used = 1 + used = TRUE update_icon() -/obj/item/whetstone/attack_self(mob/user as mob) //This is just fluff for now. Species datums are global and not newly created instances, so we can't adjust unarmed damage on a per mob basis. +/obj/item/whetstone/attack_self(mob/user) + if(used) + to_chat(user, "The whetstone is too worn to use again!") + return if(ishuman(user)) var/mob/living/carbon/human/H = user var/datum/unarmed_attack/attack = H.dna.species.unarmed if(istype(attack, /datum/unarmed_attack/claws)) - H.visible_message("[H] sharpens [H.p_their()] claws on the [src]!", "You sharpen your claws on the [src].") + attack.damage += claw_damage_increase + H.visible_message("[H] sharpens [H.p_their()] claws on [src]!", "You sharpen your claws on [src].") playsound(get_turf(H), usesound, 50, 1) + name = "worn out [name]" + desc = "[desc] At least, it used to." + used = TRUE + update_icon() /obj/item/whetstone/super name = "super whetstone block" @@ -64,3 +73,4 @@ max = 200 prefix = "super-sharpened" requires_sharpness = 0 + claw_damage_increase = 200 diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 93bdfe30c27..6ed8baf5de0 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -507,8 +507,10 @@ ..(speaker,message,speaker.real_name) /datum/language/abductor/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker) - if(other.mind && other.mind.abductor) - if(other.mind.abductor.team == speaker.mind.abductor.team) + if(isabductor(other) && isabductor(speaker)) + var/datum/species/abductor/A = speaker.dna.species + var/datum/species/abductor/A2 = other.dna.species + if(A.team == A2.team) return TRUE return FALSE @@ -553,7 +555,7 @@ if(!message) return - + log_say("(ROBOT) [message]", speaker) var/message_start = "[name], [speaker.name]" var/message_body = "[speaker.say_quote(message)],\"[message]\"
" diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index ec2bb7514ed..16fcd34d315 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -27,14 +27,14 @@ female_scream_sound = 'sound/goonstation/voice/male_scream.ogg' female_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg') female_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' //Abductors always scream like guys + var/team = 1 + var/scientist = FALSE // vars to not pollute spieces list with castes /datum/species/abductor/can_understand(mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member - return 1 + return TRUE /datum/species/abductor/handle_post_spawn(mob/living/carbon/human/H) H.gender = NEUTER - if(H.mind) - H.mind.abductor = new /datum/abductor H.languages.Cut() //Under no condition should you be able to speak any language H.add_language("Abductor Mindlink") //other than over the abductor's own mindlink - return ..() + return ..() \ No newline at end of file diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi index 13d5981c458502f54cecfb4c329aa2fcb26831de..597029a456cde0fb24669e4623c1f2d30f080670 100644 GIT binary patch delta 1885 zcmYjR3pmpY8~;0KBWji0ig9q1lGduZ&Hb9rPKRz1ITpw5AQUnFedywzl}i@BE|zlH z5hWtZZBwiiV~d^Kwqa+)u-W!Me9!ZJzV~_F_kG^m^Lu~K`#f*G>W!^N=_hcms><5R z005}EyE%CRfSlf%0&w}YjN!ab+L{Z=GqM9GCnwX>)0s@>TL8!cfSQZwG)pA_Kwq=~ zif}r{#>Ry|@3yhAL7`A>ZEee;Jql}sal7G+j}D274T+2Z zfcX3QMEfl%2NBK;{$A}NZTaA_p6q{Vsz)n&a{WmsLYemMeACc}n~4EUA`pF53X(%U z;5r+t&L;2W=~Q_I`MbVk|8&>-t{pGa*Ck!ya{kJJ-O&nWj|REte$d$R=M>iEE7V;9C;^UEg`p;%ezGmVV>iXB6ueKI#rc6X(}&6!m%1?n>6ec0tW zadg3(TtxXbO)IdM1R{8(Q`XlG@3g9~FpH`+_h7p=AM>>P5D+p+LEQAmwaHPX>3?nW zIZ&7&!!qFs=wL8b~$~=BnS7xyrm~O7blp7uK;1Ru8hsaz1Rtxh6<`Ul;f$FQUdW z7#Tx=O?eXu;29`n%R6D!;nF0*l^1s>b+Hy57d>zGYdm#apL$@=n&#G7gw`=v1UXlV zg)YHk5ezJRa3P%i)}f-@dV%M@<4&fFO((WrC2@vyF=KBiOLg}7-c4p?3jXL=Oa(ST zziIUrtpZit7?l5IT>S}HG%Yw?^f>eP@Ve)^wPQzja8_8|p}+WNnWt`=#^kQsh8*kE z8@&I!Q+dJv&&3efZ zT_}qTJ&uuJbhb=R6rE0{&+TvFLwQ#oK9kz!_}#k@3;nunOdLj#X*owKylvW{_WApA zd;!CBy=ky445HUYh;qA@+2*2_cCW>+RDM0WLe`5ywRR6kt-KZzkI$|)TXK@XGSqO_ zL&*>LCVoJ3C%)Jvfb@KWYQ&vdDW;a8Aw^|tIUF4Nk}$Cf-S=THb$6^E6Rv%~Gp4rvJ%YE95=zrH5RscT?i&wFJI9ku9@smMQipS2+eoPYs zHSkUiYz1%fTLV~WbSbbpqgH~|mCvof@Z)Bz$|A0MPm8N(1JlMLpD!ZA!K`uqHimAc z=6m)yihEXUBz1jLZqI^ZQy^FG#Qpf3HFlA_60tI86?758I_tmd8lbA1+jq{52)w=v zRFX~KXz7!^FV2R|_rg)VKcaj$Z!iS2I=@J5kA6;u7$<~DvR!e1&^WF0JX5e&DFNf~ z`klVSb>x--;lBkgzZ2TA=$N)BGvg>vEQ6{qEi&ogc#Ww@g3)c^3oPtyopw(rO025I zrRDbT*|9{3Mps;hEF8~_LYLL>qD1jvp(YDNUl#)h&6D^T@DVHS2ALua3SaH}xcGwY z&z9R*j+^_f)m>LtHMM^{)lct5O`D3QPPKfUVcuxdN#cktc1A~B{!-6W{>Sd~ZFC!j zZw91$!<^1s6A#*>w~JIm8j{yMAHVYhClt)M#zocwxgXa*Bula9iP@((Dxt$O1a4NS nSzJUoq+*%EYk+Ma1OA3G*dA)Qt~+5`Yd!7mjB~1S@K5;%s|B?skNMy3DqghbZs^TRBHMwwA9j}flKqTmG~wf@b$f!mX;~F za#}7eG^tDx1;IyJnUBz^2MtA2Cx-X{A0ROL!|k5)IiLHvf82Y|xu2T_eQ9Wwea_@RKueQq0ox!N`lZ^>M?)dEtx#Zgc6JK@OifMk`TUw-yNr{%xd0IC z08l;5DVRL~Ut*t2ZfZ69Bv0fhD0BU+TL?gI~K7O(2D=|UQ;gPZ7ga`n* ze!uWe%a>`#46=GhypKeFqtn-3U<$F_^Ks|vz*k3q3LK;f#pXXh+-g9@sZQY4;0cUt z)azRb`*_|xgz-LU$#9PNWw2Sa@(Gl z)ONV*m)}A1R+9ha7fjZ?wq(K574edeODg;O?2BeW5g3=9Nk_j7_5im<*4f zsp@;%(iJS*>230!9`)e$4e2@rg!Y;g+vbY57y^LyF?Y1H&-MG_5+Rm<_J5h>CjI2P z!Uajw=8bM)g6C_{M82bkRkWzR&l?m6a-=Dhd)*myT^{nGYk%500I zp-OFaLiMTn4b{_l9B%(JN1}XM#V=L)Zz!f zvZHnn*gXr|+TfSVBW{nu?A}pcABGq|-q#6QGf=d)H>~hz&6PGI#koPT-18atvyqaH z1Zn{p)TnHx5i^Q;2yFrtr%v?R@Z`au3Y=rd2Sn%EEdA`M%}61(Cn$kcIb*CD2Ooky=J3qVVv&1)QKm7f)qM12C9vFGFbLgt zm$Os2dT7w5@6HdSj)%dtmBavU0CKP8n}8&x@tkSco1m|!V1<-l7uVK0bBnulLJeTTq-2%})ch(Sep$57+Uc(C>4RkzLwS}zOc;Oc}XLRHg`w}P6 zN`yJvBiH8N`~EHG#=@$xidDoqc+pchKI=ZvL;*`LVzd6@htWgWJb^&?g2Rojo7HK! zjr}ycWaX82?b-&J(qtyn(__u5wyg4Z4aY)855fbDZvD|%j_8W(ATYk>#NA=7nEstr zcRON9zWup_fn)F`XwT1O2=`gDZ$a{pFDJbSiwiO30j)BpXE-baMJo0qaBb7 z;J^Eidyk8IlZIATX3Xb&n+VxT$PuSw*T7U=#aBM3m)_FwgWG$BYY7dw3z*Cq4;q?e zVL2P6N=@v?2jE4>8qhxF#X%gd6>LmTW?zLBv92(FWuUMN~EI``c~lA8MQ7&>}&pMcKNicq1i< z)Vh&TE^kztUPe1LwzsbsCAwAOaOauCVvGD|>ffmaBk7cRxTiL9#WK>P-=#yk^Z=~L z%$=RG#OUwp?{bj+>!wJDWd6EVswaz#Y8&pANZ9l2i`jC-$MOC#Oa>15^o(qBix=q) z{BMP%Q-?z%;)ub?9blFuVQOE6I#dqZ{~UqBQbe8Ff6CK5`&P&D49OQHtoh;6Ji&+M zR)4UW!p?T9hUO1~kK|EWPntg(NjHcsT!!>X=@?^h>-7;CBpz-*#qm!(XH8V5#6;^j zaequNm~b58g0%EyqgTq*=?%0nRcF&a`8OFz$)&N8(p8!b8G&CI`bK%og`U67;T_V& zg3U>lt|zzPePyJKdJZbMB1fT*PB4FWesS4~q3i8`W17laTkx=73@Q6fYMf&@{bM0BE!BZP=91VJ*eOE*U*-#Z(f&eHKaObYKy1kdJ zr<1$4lbb65_+`FH8FZbMr0K!!7$JTd)42$-dG^`sTv;8qY2$875bI{im(cfY`nCC_ z7ul%8Bpfczvdu4?2pR?pT3NO5EcBB065arBB-4NN2AJ7J8@PW>;xaRy$)+6HBQ<%v z_2*UkBar;+)^UML`x)?RCBJ>G0-upPsl{E$y~US14Ub`;W1lFmw-plDV3DNqU5=Nk zu{pfV;3GC>P<^{Gu_{z3b3{9f_vX{ev#>1Y#pRX;@hr}>XG~PRrZVK-&L^P-S7Z}z z?Ou{)AB2geYYtI1k#pXWraU7S{kmdgsJ9K)dg~!`^M}hTO~g#aBzU#GT$Yz$H8<^_`fZ%{ zSv%Y7sJq(HYY{91v|>&-c;;|df7YF0qN>KlhSvi^$_qbS?%lW$r`kPRY9B@!6#v}i zbv5!}Dokof=(7ho82@2Uuwwk9{WaEW0-rPd(BXB{v#Y)@yP{I6b0>VNJeEWqQ+a17 zmemIK0A&YSo|lFz;m-&c2+NJ7%U>kVYaI}rNkP>OIfsq;NW&l3iy7?tEdske85KGMDS~RP=%-AmY2^*uWZG!OPOYTn!wy1rMhYo5 z!{r4R=4pHV9ITio$yUVi@K-a^{{FK`#H|a*)RiHp+^)Xf{8cyM!mS|3+UuTHXF#~f z)W5&KaH$Eh;1>_**#DJZ8hCsEuRywMUQtd{v>QNE~>iG^jk zRoQ*%QK!AAym(j96dhk};KTP654*;|wRo<(!SiX>Cu^grp=+QrtAFR+Ra(uTM(|M~ zqRR-jQcyBu5|$P$r7$^6d%u|#09e_z)m82UE_H;n6@-!ETe!*LPn~9&M`K^pxN)O+ zfOl3caKKLX(+AOt>yP!`Dux=BaXq_3|K<++S3iQpY1aM1qk$rch`r$Rj>>WA>)dLa zLrNnP6M1*tXez*9=!e1XobCHft9#zj-={#25wZ81W5nAelBO)YN)C94&(EMK&COL$ z=6<2~8w&l52lENC9(=8&H9ym|Tqmz*RSn+78RG6Y;$$eW_SGQw5zj9#x*0Jx;FX8Hwmm=j6&c-u> zOdsmG!5%9=jf$g?8?dj7+k(zZMo>Wrpg9eHwCQi{IJtfVMt6I~$I{U<}q%l9LhAPo;z; z2|8SFtFOhBmX^kN1As0?K}5@h^ICCnF$@HVL}Fo4QTwB^Jva~%G1P8T0RRmR4f^+* zXaM&fu2%{{hm!pR{HTbbp&`Z8XuLLRcJHDod4}-)&Tq8efBaDQ@sTAE2+wvy+j%F; ztm1Ptl+RW^eK;$o;owlP8kl>Vkc;X|X42>T7$D~w;=^Vy%)9fEBJ9HZrPLBR zmaW9^-@p6ij3BCJXySWvdbOYAFt&9`8J@}@&0DLJtXZ5Qy|l!a!whgCZ((}+?#%;O(umfz=Q51W1=gP7{=47W?WEd&A5b6bdGHr5XLAMqcm!-86YnX>uVX^V?{1OuMbrDqC6bBx2V$#c^wB+ctTjJa{vC~Wmesp|* z0dbJ6Xs#}p7?8CSP%F%<$`%k9=nvF;Z=NF@A76p;(497!%fiw!?r4{PMONhUWd|Ru zHVU&>5QcXs;HeQ1klt|d*D88!Y58`TTC3^hUA|8i^l6GPYfq5(%c8Yign?Y4OKCaI znm=_WfYR<{jDzLDi$E0`TH1@=;(>=SMC^mA*kLHuy;Q)P(wnKae9CCw;3ehnLAV!6L_$d>6S)6F+c9@#p*c`?c^C4cZN)xV zX+PlSA)*Ni+Z^{>l;Nu!=1x*uJ4so+f0AjtG;>HO;{0jG&aN$v70dqwg$d=2yoIiE znUOM{a*y?aFCPR4U3ppi;CjOJ>5Fr}Ii*PCD#(!hx;oRJQb_1gMABYPKa>~2C(lcX zMv^DyB#`kULVFE*VbI&vORE4Pl-HBV6Cejwkcw1_0OX!CoD)z%s>i9)g+O+i7yhxk zWrmF49q)!<1S$}KzLiy($JI9-oCeFU=GZwnob-f3wL){h!7FE6t^xJ)uExQUx!CIj zxr|te%a_A&>uQ04jpZ*5OifuuS)$!D2iD+9aVrWka&pdTolr76{RElJt8bJxym-*~ zWsMinoyi3px5Gnl>qc`3MNYZ}n~JuTowoJetPdY<8IYj~MPsZSr|L@zbXocc&YrA) zfTklwG0fYOO6&{Yld_Ogq`CAH|mPtt^MKf~TfI$c-79vKKvT`2eU}CZ%T`MUwDa7_)fa zU?eauRD@`AjX&AGFP{2?AtZT6c-~*=mLMY?>X1fR7TjFiJ+iKw%^4*x5=l)ab=|15 zhQOa}u*Y~r0vf2t#oZNp`>WxN)^8ts7WV>-Jc*yRqGO3kWv67~qA{Y8MEuK~jtYBw zd&!JJ_mB5F9&H0KhE+0%q zYHL|QV0d96?tY{1j^|YAHSXKvTSm_{VOnJY60V}jI{(z6vt$aTQ7wIT@Wn3l?zru% z;e&u?21)^sA1-@c8tEkr^9@J#C$-1ooaTqHVEh^t&=xq*8ZzS&CqgYvXt$OWi)m&m zGiCd^1|r(VESy_4E@A-RJ4L*Dxnf>m6p*PWBtc@RJl)#bvX6(~wM?B*#W4j7%AB** zR_Qg_<;SeyUo%RcrB$cu~OR~En5J!3+KttiCA#@;BoqKj0w`P>I9$K%jmx!)`r zcJ*$IqHQXR7?SaM5A;IXV_FrA)w{90--bSL0b3Ony&No_!#wwQE4NqfjGhJUjO4XO zQ}atp<0wPi6-0m7(xD5+5_g0m1+;o$si_&L!rPormo?BVXWTiTQ?rT#@4BX5 zjCUC7i=Ig?Jqix(WqRmBUTacITQutK^Y)c;!HnC>%O&iutj?2b0TI_wUmJ8^3>R>gv*328wx}3=b=2 z?UWT4Q+IU@0Kk(ugBP98>2sQzIDz4r8SO+Mk;$+d>wHR{cx_ArfbgA*iwg)j{&otW zKeb7pkYGy+S01TGkIc*nA91UErjR1_cYZnglvC6-JME+pGEP?x{$1XJSfJK*zTd6s z+ry1wQAcG--Kgfs zH!pMEy+eb3VzOs6+mqtqfZU`@Bq6g#NI7$?IkPy}uj^oY_Ya5h*w?#Nu-2cT)uk|Y z0`N>qlIXifZQh3`-E2PT@KX=1K*7PeJ0e$YprqoD}b z@GTPS@le%Grlr_B3NqlYESRfe z9UUDnWzpMr^Mnkazjgg71hJ#hY?Pr_G>1nzjUys`QHoC0nOO*1b)zY>IfIGTT<~wEK{@(92g|g|IVj?jqc$u&YRMPAWo)U7T zJ3vyg$p@3w3!i;3)}x07vwN49$j3<}ZP1s%HbJrIebv8U?Dep9waYm6#dJpN&XQ>b zbcIjRXMRXO$Nn%$87RaMZC0?ZUr%8_4GX>;Sn1{BIim1;HkgZLtyx-DSiJ+Qo2VR4 z2-7=<-Y8|IFql|?S94uSm8rjqt@goDOov+9AOY?*(W3`)8OB#S;@@5`ejj`-Kk(2?g(pFdbknIAL(Iim5^gGFZsHxhh-_~F`AjFnIIQp6UX&>%I;BfBjWnYh zUz>SYNv_wQuSn94| z>82nSixnsIRV(I}kQJ7dP07g1ce>WCtUV6gqN4#f$w5I@T?)Qt&*_(rp5LvkD$9P& zMR4EPTUl~fIE-eMfa|X>@naxih99|I+phSS3qW4!;Et#CZRF~t48C6%s9?zGKpkFn z`f3QVZ z+`r2AcPc+7aFGaf%0DYAW6?=oHzoWt zd&s07fu@2s!He^GMa7jaKG?^-nL)QlkN)$c%YwUa0EQ3?(!IoFD042s2s2>D zO#-AQW=gQk41n4_#;*-Nmmz_3Cz||W@mFwoxQz^LX~_-co4$nw^&7qC?g}4z|1tSk z@NW|+P*|6Zf!MjU=oXK)o6l4)_%&O)a~4ehdt8wO8?1b!wA~s>5%!=zrAABsFT;9j zRGELB@q-{YRXD^jjQ_^NIm29Xv7=rziOP_|cip@VdH^rZgA_d;g@uIxfZyBGRkYMC zu!i81MYX1`&UUKwev}eScJFK`??anOVcxivHV@AJ{(dA?xW2xANN6bhJPk#1a(Ds{~Zrg34#qdyimcs7#z~9wS;Dr2d2Q+u|-p|vw!15w&1O@nkl$JCnY5-h* zF>>A+|2meEqdw2XY4AK9MotJ8#u|xJ(q$?Fdd|m~E>tsU3+524P zPd;nw{UyE_Eq^L4my=e~M$Gm>Ti<(O0~jj>eEJUPp>4kM* z+H9xx67#0?0EawY!Rq9IC+}vIe&X}m$15;&!35RueqHtOHGT5Lr?~>~w4p->ewPT` z>wS9;S|6V#y<(6#2K2Lmqdy7Dj8E7T_ZZb{6TQh33U^wayPP@ApNOsml2y#y1~GvL z(N;^(59KI+!T82(W?kfzEebHfj1rvPNt~?FHDHp@|=wN9v6x?5GV;z1okSCG^ zWH~lmoJs3)cm?U}BFNiGm?QlGov98Qy7oZ76WUbL5y(1K&OEm23C|Fv7rZkNoVE2a z`Mb25gdC~j_j4gZRua7Q2xH8)eOUejt9gRWDGla_HSoQNiI!I5h(SZ?sWu9%*!4^q{ph??z`P zq&8l6f|;CXH8nD;fIqDkA#=S)(GM8fjNPV|WER?+{iwf&vJ{to2+!=#PxUUf6a z@Z+Z}pO4^9qn_ZJu*3d8IQQB56kt7!w;kEB0a2{-1UQ=15$+iDU3g*V6C*oNf1Zx| zw}D6`uT+?s(qGQv&ClyX86y>9ruf${2MqNC5nl$ zSM2=$^^0X88UwM}fS2WD*4SX*rj9fpGq@}?DHaFbU{IG!NPyg; zkO*}#Dr__j9bI-|Ap#A4I^5a|fB>b5MA!mCUcP*p{GGVT-&&{<-+D3N?OZo1#b?U3 z-D;A=U_~_Ij!LmCOA}W?dO38n=hc71VzE5hpneG*u$WQUqvqiH)TCJV;}T_d;PJ^O zKMJt6$ALEfxT;InJ<)z;kXi$_lNv9(KUlqTviggvDexNxe9$^agGEIbgZ3R88Bdm0 z*KwD#wUO$7ZgIdA{v`n4m6SY|IuOg*she>LGBaZfH4Pa5MKAKq5?r-CB!r}Gxd-45wvhm)*bKsHB&riMoO+f(H3 zFSgfz%s^qWIp#Uny6%TnI~nqB8VA2LpAqX8JQ*7r8;i2hNGH8}l)Mnn7(ZdWLIR#m zLCQ8>wxMp`*J4}|Dowz4FF(V|`0Q+k_mR%co5+^YHIIRpzip3CzD`_u{L#?%_gjA+ zYF70q<&$scf=WJ8H*8OJ1lkC>@5gc{XEOoA;M7!V^-fu7={MNo>*#|zt-bvyPx$=2 zDw!l37^(#dZ~@XJ@l>6}bQJ%28Y&GLUut!Ba~u{Gzq^hj3rUEk49U|;?Xam($Gq*c z3mtJJ2mG#a-!U=y109RH*%C;tpK!P}!GOCg!R&;tfUHc;o;(?;2L>U2U%%I2mq46C zYy}R*uwQWx;Up zQ?oj5cXjm*ILHPSIq@03COptXi%=nzB4^^xW)<-wRIg|A0W1Bl6o^AgP!)-qJYlPv zVCM{O%FErb+QJ81AHt%bP81o?F}bxz)l-RChUs{%9j#-hpagn*LntpV4`M#4dx7bF zX+0X$MMKBZo#M>2tD|UiXfG(3Ef{8N0B~#;dtbt8DTP3@nEvU@4QOa;hL@&^u9vBk zxApgXWa_tgJ0=gQUxL)yUSt%o|NCoMI)hF%LmC@s?TJjOe-ko6n3;5xS?*2bhdOn_ z(j*|eTkSke#GN1k738z*-pWfS_q1~v(tfTe=$#KbqfX%ni}Yj%(VrM{D_N0YuiAOX zMBhP5z%xmXE@V&ObrHk)whw``0#)BsuKkV5H>S-&30(U6ErDhkfsRuQf%L1L!w zq@{!b9A@AfKv@tc{cVP;f-vKHH-B6 z`Q7R-$(WD2+5s}s*XVAQ{B$frJCTNUSRP6o1XKgWKmU2M1MLMo_`a8oN9ehTs>vAWQtOpX z;@sf!UGuA^y#KwC+Bcls+plSaP99yWTwk%}T-#n7$Yv>!s-sG~{toAw+!GB--zwnR zdggRRDwEq;pl4id z*W*xrWh&Yk%Fd3(b1(*QpE$nhnj71$qI2zziLNmlAQAU={d=C>%=ww(HCk6*U*_}G z{S9yU1(DP2&!4w@&v3~^@*~9VuEL#L0(E92Vi=HlExQLJ?&ewcVdj!#W`Ad?(s!?d z{KA+wX8B53Ip5niDf}u_AEu6TK4^C6zoU{xh3chol*TouWtmgKq8&S?RdH?j_ zSanSldR#?4M6YSi)gwN{VoG<#4=t8RDtPzPacnSF!m9Sl?U{^{U6<~_^1=)J#!g!KNn7;Qb!t5g@vgjnZn#*xN@Wn-q;`3RqFQh?gbHsQFx)Q17M&? zvc}~!IPkrDZhS4#3D-9)+7njunNjCY*1ntApOv2Lof~xF@s^o?{`e7kX1zl_@su7F zK5f~S`MRFR19xZ#ZWW)8fya)6Ybcgwq!dUDj+Ocs4G-H~i$AN9kL;?a z`#P6~#jr900PCEAwx(Iz%b11!ESX_d-a`y6y&wbSz;sQr$AC-l?O!DTu>7_GNH)JI z*~c_HzIxbPq;$|X9*4atlGd%5au$#IZSH6421vFg)BmP>zoc7KX6 zV*tSRujAFkry=iyb{DKJv~L9T<>lq|tv#;oUkg1w+L@1co)XoUqjV431_RTpzp#oR z&p$jqfL(c;U{?7ovwo^^+S5-*hn$O>dw=118W4fC=ZlQXXIJ&_=({lVw1#+!K@m_gA2IhoW_x<7(rRA!53Bn*n-P86!J86yg*KBg9#oVOwCv!0;BAr1!vK1va}BEFGI zbMW$-CYsh=t!E+bP=^jw+UW*P27Fdcy-aS;hEq&BAG76-$;?3T#^`Gcz;4 zHaFexOR@!jvAe5FLR}5#PoBtyyB`|1u`sCy?W8v@5X?Dpri#kSDCg(r4e}a2u+p}e za9&G17{#ux0>;#?BQE(ngRey;cAS!}Xq4XS(`5@PMfV1eE1I&Z)C zs*L{@&>jSDopooE+e0*|NX^GWA~g{p-L|(NKsr|{5`Y` zULQpO$hGGpi73Om6dMEt1$8{GbKINBnHauFY%T}~-SKrMaC2r|o|u)H@GvBVtE8kvR7R!;$|x(TOd;&)LqBtKR{ZH{h8yZ3na`NJvd(nqw62@EB{MYHW{-mtz1PU2E1ZlXo(OZz{(D+BijaXTQZv zDVy}}Ei+TNHg`-+j5E*_xXlIaAK9x{Qvztscx)^!V@qydUY6(L;xhR(JTd&>-#Xp# z#<#UDMoDMJzHXEf6EhBhm0L31j?o6UVALYO0F5>`U($fA_=OB9mVHjAU$yslBf2#j z85uJ_v3GWMYMZRRisg$K^DG%MorHT zOW^@%ukx6jBPIRw>fW%UWQ02D-$7dO-eLRnmLn;C1s}5yVRTEEXvG+v^ z!gskXFS~J%k{S?@k}rqe?Ta87zRJqU6$f!r3Lw_MR!zgH1Q0A20ssVqNx=w=K}$bU zivmt5Kz@-IfI3720Puh8`PVUE%@D)z#aAV-w%3^iP~xGB>R&NgjWa?2ni?H#Q_iC_ zh^k*Dsh!=v1_Y~JdJrBrG0Yd%GB1stnrh!YE^2JFwCZ(rZ~!bS&6S6?18?$(7%-`* zsL-@Kl0~)U2419y2Q6A=YwX=8TX+zZY`=j{dNzO%j#<_H25FW>B`dVq!!djf4GnL( zfK3-edoMzoPO1<>OF%yrfyal?(9=uUEYbM&it$KVZ`;v5oG!o0=|gd$5$RnuRe#5w zxFBCd?^=G>FN+)%F`;pPiLy39R;AEFY3eDH1W>>8(hRH^czoU3+M4BIsvAn1_(WVS64@OIYrKHTiC^mYV+#E4UbFcl&%gj!y0LR z+l`4WKjJ9J*iS+kEgO+hzXEa%QFF7i@tK)yAOQFAk%25h!lfl}1s76ehlFN?6U=uf z6QZZb7QcHUraikkplEy)a$qO2Q}UW_g2?!~({Q|V{E>#jH2i4R5Ny2XY@_#2NZxK%@Mfe%I?eoM7_eGqS zihl#zNeQg2?^C0~*H+mx_)wXkAwTkyriq5SmzUQy0MX(22>Ar)>gtj^LlkS8(7`3A z?Ck6k?}?HbpIR!Cyb^_{3fZ=Xasur3BH22{1=<%yEf0tYNw!rlvXB3_X?oKPO+V~P zi4CXWPbJ~v;P@KUTE_~!cb~kKtK>_fkaM?`nLis2dJ%NU;FJbQ%9nwh!T-k$U-D>N z_0@DEaC30Lb#$%(KXzKUpZxm9I57zsFeJg8RLS*mE(EJn5uvcv*MO%2Hy)1%fZ5D& zT6pJIYF)ja^yLXpnrdwj1m}(^4am8`ZN}};&C!WXuitV!@W&M2K`6OI<;xLyszH4= zK4;>u?`|2JnIU#|c8b*lur&{w!ig$1hvye$LIc=t+_*t#OHDU6V$@tl)An-kMZSq4 zg?E?!C}{nN_tyoGp?|0@pubRYPZhPaaI>K=ygnBbYeg=R1D;;38k_zKdHC%YJ1bha4i8M+?&N%F&e_!J>3&^G zWBRrAcl2~S4uQBhG}>-8~b6LMZ&-mcQSIq6osR0ga`JrCbQnv{U~ zNEW48l5%6gB2}nFSo}g1o_JQqI9<0hUB0+k3Eud7%^BRnD=v*2WC-Lef}WgAr4j$1 zrI7I_R##SbjFsGm0kpKV1Q>HIWn5mC*aF)d-w{E+yTmROas(FFdcJ7~XJ%$L2rH94 z1Jb)4j>rTN$#YH%kq+&Q5Myv2ZO@7fKii`{+FkUyhs^R8fTY5Xguc9 zLa0_@E1`QfMTMK`O_E4W6qf{Ne9ST(b-;M8MVh&VTfZC@HFLH6Nf#3`O^&Q2yCEGJzGXqo@S zv9xK5;yFGGKzif%^^aCvu2Ynw!avu?PvJxCp~MaAa)a8^cA%Qy(rFS3Bg!2qGpDg0 z64Jr#1@ZFw=H`ozrICR4=9^jS0S{CTFV7#6mj|CwAJc!THI}&baW#)N>*r*xtYmFKqdlQY7E*l!* zVn0HT!I!AoQVqV4^An)-L75TJcGTW=Mhs;N|MKNa@aB}wY`E~bdd13&cVj>5mQ4NR z)Kp*#oE`%kBLPxdivcq5xg*TN&c1cDXN-h+otGHU>qY?#a4ZcC8OGI9%hu`p`TBkUAL9kLi%VMJ zbD@~Uq_HuR`Ah1XrcgOiggl@F-Wc=%5sZf&})+*!9ML zk1avgeTiTa;Ih49pylEs61clS3zXH==*n_v>*?uPJpbidjXom$T=kgViu=c1XPYvw zDB%e`%U9z-8HeMYdCJ%hQ7NhD#ogFm=RWtlwjNW2!(EnvW&?weJgEk`s>|jgZ-}*hHtIu zkn!Kcb_VUty^M^6%?n1Ffw~f!e1M)_tR{z& zl*i10fcsBqI7A50)8(7-))5>VC>+nt36wgH`Zfq=lInM#PzxDog@xS!9D;*`r}jfs z$f1SCGgLG-vOhoGnVh3qFE^qTI7soksGlkXq1VieHN;@)85!@Ys%W5l19Nk8V;krZ zXixM1YnX7X%F3`4Uw?>o_wqhR`;x4X!HeNFQ{5f+=mk82;ToUsWgw;XjSn>lY`z>N z3pvcbi{NM~v9vmz5bcsbD5cB|S}jT|+h692_p~SldebcD|1qr){r?8o zf1){890UoloSfYH12U~RLs=4jL^4S4-@hrNF;gr zhn_A-V>jM)@v@eode2;)snw~ey0&@mMgTcMr4R(;2iM7Rt!C zq@q6XgzWu1KH2s^cLNY=#Q~rbBb{J=Q5hPIf>PLd*B(Xhsr8+lQ2ThFC}OQ zIIFK#8&`OoL6vgKA;sw@Qh?5xQrC_2~Hc^|aHW!u`hCZ9gwBsTYbN z6P@0~aE;DW2zWlJzH?c8&b@f8U zZWl_u3}Bd-RZ~`eDfP$a!>`s}D`duKJ0qy|=LLce?nP)Q`z!L0024)T2e$Bd1nho3 z7%KCZWTOUtr089O0W`FrWzeJa^y4SYT1-q>80GSAV2gbDU+Nca1y0%z8{x&^JKWE% z_@>}}K|r)Q7-(9_v~g&#E>a)%R4DrNi3|9F3mF|5;YTf#sa;BHgNOwE<%kO?xJD3q zEs=0b`HDfGtFvGsfNQ1AS?JmIWitgsjHX5Wh>>t0Mwpa@(z${Xk*wAY6~$!y*P5t- zTeohFOi#arDj&$3F7wcV9+?N0Mh(fXTl>K@g%pWzRdszQO-H)%4q%lWFfzPIEA3bTA2TT;d zZKU2&jreC~t;gnZ9AMFC*)PK2d+Cu`F;$*i=|Ol|f7H zibQ<7Ou92yWS6=@YI>U`+&O|RLKFql=Ft>>4x{qB`cHVxzHw6gfRfoOM?$LK+?e3H zJ|y%SpcIJD%k>2!j=bnL3KD_Zs}u|n{^q>al)7l|`d@}=!c~fsrWZgI-!jwz;%T|U lwZ1vUF#h*F#Xp%RXarn*%Nrfk{04x220Dh?HChfY{uc&pfm;9o diff --git a/paradise.dme b/paradise.dme index daa3e1c9b65..cd51288c9a1 100644 --- a/paradise.dme +++ b/paradise.dme @@ -472,8 +472,10 @@ #include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" +#include "code\game\gamemodes\miniantags\abduction\abductee_objectives.dm" #include "code\game\gamemodes\miniantags\abduction\abduction.dm" #include "code\game\gamemodes\miniantags\abduction\abduction_gear.dm" +#include "code\game\gamemodes\miniantags\abduction\abduction_outfits.dm" #include "code\game\gamemodes\miniantags\abduction\abduction_surgery.dm" #include "code\game\gamemodes\miniantags\abduction\gland.dm" #include "code\game\gamemodes\miniantags\abduction\machinery\camera.dm" From 3773d753deaedbff4e3f7436ae893f50ece5fd48 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 18 Jul 2018 20:45:29 -0400 Subject: [PATCH 08/24] oops --- code/__DEFINES/mobs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 74119ae23bf..1d47ae409b3 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -136,9 +136,9 @@ #define isgolem(A) (is_species(A, /datum/species/golem)) #define ismonkeybasic(A) (is_species(A, /datum/species/monkey)) #define isfarwa(A) (is_species(A, /datum/species/monkey/tajaran)) -#define iswolpain(A) (is_species(A, /datum/species/monkey/vulpkanin)) +#define iswolpin(A) (is_species(A, /datum/species/monkey/vulpkanin)) #define isneara(A) (is_species(A, /datum/species/monkey/skrell)) -#define isttok(A) (is_species(A, /datum/species/monkey/unathi)) +#define isstok(A) (is_species(A, /datum/species/monkey/unathi)) #define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) #define isshadowperson(A) (is_species(A, /datum/species/shadow)) #define isskeleton(A) (is_species(A, /datum/species/skeleton)) From 702f093c64e1e48cbf93c2ab101cb5623da32ab0 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 18 Jul 2018 22:14:44 -0400 Subject: [PATCH 09/24] finishing touches --- code/modules/customitems/item_defines.dm | 2 +- .../kitchen_machinery/gibber.dm | 9 ++++-- code/modules/mob/living/carbon/human/emote.dm | 4 +-- code/modules/mob/living/carbon/human/human.dm | 15 +++++---- .../mob/living/carbon/human/species/monkey.dm | 1 + .../living/carbon/human/species/plasmaman.dm | 1 + .../living/carbon/human/species/skeleton.dm | 1 + .../living/carbon/human/species/species.dm | 1 + .../living/carbon/human/species/station.dm | 6 ++++ code/modules/surgery/organs/subtypes/diona.dm | 9 ------ .../surgery/organs/subtypes/machine.dm | 32 +++++++------------ 11 files changed, 40 insertions(+), 41 deletions(-) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 51b2cbccae6..2a734e91dcd 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -45,7 +45,7 @@ var/mob/living/carbon/human/target = M - if(istype(target.dna.species, /datum/species/machine)) + if(ismachine(target)) to_chat(user, "[target] has no skin, how do you expect to tattoo [target.p_them()]?") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index bf4d4309793..1e3c5602a22 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -122,7 +122,7 @@ to_chat(user, "The [src] is locked and running, wait for it to finish.") return - if(!ishuman(victim) || issmall(victim)) + if(!ishuman(victim)) to_chat(user, "This is not suitable for the [src]!") return @@ -255,8 +255,11 @@ if(occupant.reagents) occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count,1)) - if(ishumanbasic(occupant)) - new /obj/item/stack/sheet/animalhide/human(src) + if(ishuman(occupant)) + var/mob/living/carbon/human/H = occupant + var/skinned = H.dna.species.skinned_type + if(skinned) + new skinned(src) new /obj/effect/decal/cleanable/blood/gibs(src) if(!UserOverride) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 2f2d559f046..0ac25c11bea 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -911,14 +911,14 @@ if("Diona") emotelist += "\nDiona specific emotes :- creak(s)" - if(dna.species.name == "Machine") + if(ismachine(src)) emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" else var/obj/item/organ/external/head/H = get_organ("head") // If you have a robotic head, you can make beep-boop noises if(H && H.is_robotic()) emotelist += "\nRobotic head specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" - if(dna.species.name == "Slime People") + if(isslimeperson(src)) emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5d2a4c22e7c..98fdfeece38 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -114,12 +114,15 @@ ..() rename_character(null, "Integrated Robotic Chassis ([rand(1, 9999)])") update_dna() - for(var/obj/item/organ/external/E in bodyparts) - if(istype(E, /obj/item/organ/external/chest) || istype(E, /obj/item/organ/external/groin)) - continue - qdel(E) - for(var/obj/item/organ/O in internal_organs) - qdel(O) + spawn(2) // organ icon code has a spawn in it, if we don't have this, this will runtime. Disgusting + for(var/obj/item/organ/external/E in bodyparts) + if(istype(E, /obj/item/organ/external/chest) || istype(E, /obj/item/organ/external/groin)) + continue + qdel(E) + for(var/obj/item/organ/O in internal_organs) + qdel(O) + regenerate_icons() + death() /mob/living/carbon/human/shadow/Initialize(mapload) ..(mapload, /datum/species/shadow) diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 4dfbc362474..eb766633b97 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -12,6 +12,7 @@ language = null default_language = "Chimpanzee" species_traits = list(NO_EXAMINE) + skinned_type = /obj/item/stack/sheet/animalhide/monkey greater_form = /datum/species/human is_small = 1 has_fine_manipulation = 0 diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 692a23c470a..46270219735 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -6,6 +6,7 @@ //language = "Clatter" species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING) + skinned_type = /obj/item/stack/sheet/mineral/plasma // We're low on plasma, R&D! *eyes plasmaman co-worker intently* dietflags = DIET_OMNI reagent_tag = PROCESS_ORG diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index 9da4d1222f6..572ff91a7d7 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -13,6 +13,7 @@ flesh_color = "#E6E6C6" species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE) + skinned_type = /obj/item/stack/sheet/bone oxy_mod = 0 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 550871e0e4f..58fa37403ac 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -80,6 +80,7 @@ var/clothing_flags = 0 // Underwear and socks. var/exotic_blood + var/skinned_type var/bodyflags = 0 var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 8b264ad77b0..225a967065a 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -7,6 +7,7 @@ path = /mob/living/carbon/human language = "Sol Common" species_traits = list(LIPS, CAN_BE_FAT) + skinned_type = /obj/item/stack/sheet/animalhide/human clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS dietflags = DIET_OMNI @@ -28,6 +29,7 @@ default_language = "Galactic Common" language = "Sinta'unathi" tail = "sogtail" + skinned_type = /obj/item/stack/sheet/animalhide/lizard unarmed_type = /datum/unarmed_attack/claws primitive_form = /datum/species/monkey/unathi @@ -122,6 +124,7 @@ default_language = "Galactic Common" language = "Siik'tajr" tail = "tajtail" + skinned_type = /obj/item/stack/sheet/fur unarmed_type = /datum/unarmed_attack/claws blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ @@ -183,6 +186,7 @@ language = "Canilunzt" primitive_form = /datum/species/monkey/vulpkanin tail = "vulptail" + skinned_type = /obj/item/stack/sheet/fur unarmed_type = /datum/unarmed_attack/claws blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \ @@ -836,6 +840,7 @@ default_hair_colour = "#000000" dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE + skinned_type = /obj/item/stack/sheet/wood oxy_mod = 0 @@ -928,6 +933,7 @@ default_language = "Galactic Common" language = "Trinary" remains_type = /obj/effect/decal/remains/robot + skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources! eyes = "blank_eyes" brute_mod = 2.5 // 100% * 2.5 * 0.6 (robolimbs) ~= 150% diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index 173e3fd7977..be05b2917c3 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -74,15 +74,6 @@ amputation_point = "upper trunk" gendered_icon = 0 -//DIONA ORGANS. -/* /obj/item/organ/external/diona/removed() - var/mob/living/carbon/human/H = owner - ..() - if(!istype(H) || !H.bodyparts || !H.bodyparts.len) - H.death() - if(prob(50) && spawn_diona_nymph_from_organ(src)) - qdel(src) */ - /obj/item/organ/diona/process() return diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index e51d443bc72..7a8fa58828a 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -7,87 +7,88 @@ status = ORGAN_ROBOT /obj/item/organ/external/head/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/chest/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/chest/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/groin/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/groin/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/arm/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/arm/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/arm/right/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/arm/right/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") + /obj/item/organ/external/leg/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/leg/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/leg/right/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/leg/right/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/foot/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/foot/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/foot/right/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/foot/right/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/hand/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/hand/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/external/hand/right/ipc encased = null status = ORGAN_ROBOT /obj/item/organ/external/hand/right/ipc/New() - robotize("Morpheus Cyberkinetics") ..() + robotize("Morpheus Cyberkinetics") /obj/item/organ/internal/cell name = "microbattery" @@ -100,10 +101,6 @@ vital = TRUE status = ORGAN_ROBOT -/obj/item/organ/internal/cell/New() - robotize() - ..() - /obj/item/organ/internal/eyes/optical_sensor name = "optical sensor" icon = 'icons/obj/robot_component.dmi' @@ -112,11 +109,6 @@ // dead_icon = "camera_broken" weld_proof = 1 -/obj/item/organ/internal/eyes/optical_sensor/New() - robotize() - ..() - - /obj/item/organ/internal/eyes/optical_sensor/remove(var/mob/living/user,special = 0) if(!special) to_chat(owner, "Error 404:Optical Sensors not found.") From c6400382f670d05b1fc4c27496cdd618662849bb Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 18 Jul 2018 22:37:53 -0400 Subject: [PATCH 10/24] last thing --- code/modules/mob/living/carbon/human/human.dm | 14 +++++------- code/modules/surgery/organs/organ_external.dm | 3 +-- .../surgery/organs/subtypes/machine.dm | 22 +++++++++---------- .../surgery/organs/subtypes/standard.dm | 10 ++++----- 4 files changed, 21 insertions(+), 28 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 98fdfeece38..15a3dd04d12 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -114,14 +114,12 @@ ..() rename_character(null, "Integrated Robotic Chassis ([rand(1, 9999)])") update_dna() - spawn(2) // organ icon code has a spawn in it, if we don't have this, this will runtime. Disgusting - for(var/obj/item/organ/external/E in bodyparts) - if(istype(E, /obj/item/organ/external/chest) || istype(E, /obj/item/organ/external/groin)) - continue - qdel(E) - for(var/obj/item/organ/O in internal_organs) - qdel(O) - regenerate_icons() + for(var/obj/item/organ/external/E in bodyparts) + if(istype(E, /obj/item/organ/external/chest) || istype(E, /obj/item/organ/external/groin)) + continue + qdel(E) + for(var/obj/item/organ/O in internal_organs) + qdel(O) death() /mob/living/carbon/human/shadow/Initialize(mapload) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index a0ca54c8e01..cefe9554d41 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -110,8 +110,7 @@ if(istype(H)) replaced(H) sync_colour_to_human(H) - spawn(1) - get_icon() + get_icon() /obj/item/organ/external/replaced(var/mob/living/carbon/human/target) owner = target diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 7a8fa58828a..5eb8bd143f1 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -116,16 +116,14 @@ . = ..() /obj/item/organ/internal/brain/mmi_holder/posibrain/New() - stored_mmi = new /obj/item/mmi/robotic_brain/positronic(src) ..() - spawn(1) - if(!QDELETED(src)) - if(owner) - stored_mmi.name = "positronic brain ([owner.real_name])" - stored_mmi.brainmob.real_name = owner.real_name - stored_mmi.brainmob.name = stored_mmi.brainmob.real_name - stored_mmi.icon_state = "posibrain-occupied" - update_from_mmi() - else - stored_mmi.loc = get_turf(src) - qdel(src) \ No newline at end of file + stored_mmi = new /obj/item/mmi/robotic_brain/positronic(src) + if(owner) + stored_mmi.name = "positronic brain ([owner.real_name])" + stored_mmi.brainmob.real_name = owner.real_name + stored_mmi.brainmob.name = stored_mmi.brainmob.real_name + stored_mmi.icon_state = "posibrain-occupied" + update_from_mmi() + else + stored_mmi.forceMove(get_turf(src)) + qdel(src) \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/standard.dm b/code/modules/surgery/organs/subtypes/standard.dm index 1a548de7d0a..c83678a71a5 100644 --- a/code/modules/surgery/organs/subtypes/standard.dm +++ b/code/modules/surgery/organs/subtypes/standard.dm @@ -194,12 +194,10 @@ owner.unEquip(owner.r_ear) if(owner.wear_mask) owner.unEquip(owner.wear_mask) - spawn(1) - if(owner)//runtimer no runtiming - owner.update_hair() - owner.update_fhair() - owner.update_head_accessory() - owner.update_markings() + owner.update_hair() + owner.update_fhair() + owner.update_head_accessory() + owner.update_markings() . = ..() /obj/item/organ/external/head/replaced() From 6092e0319f7e2f99d8476edb49d02bf3ff534e73 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 19 Jul 2018 02:04:03 -0400 Subject: [PATCH 11/24] name and further fixes --- code/_globalvars/lists/names.dm | 1 - code/game/gamemodes/miniantags/abduction/gland.dm | 2 +- .../awaymissions/mission_code/spacehotel_npcs.dm | 4 ++-- code/modules/awaymissions/snpc.dm | 2 +- code/modules/mob/language.dm | 13 ++++++++++--- code/modules/mob/living/carbon/human/human.dm | 2 +- .../living/carbon/human/interactive/interactive.dm | 2 +- .../mob/living/carbon/human/interactive/prefabs.dm | 6 +++--- .../mob/living/carbon/human/species/species.dm | 5 ----- .../mob/living/carbon/human/species/station.dm | 10 ---------- .../mob/living/simple_animal/friendly/diona.dm | 3 +-- code/modules/mob/new_player/new_player.dm | 3 --- config/names/diona.txt | 13 ------------- 13 files changed, 20 insertions(+), 46 deletions(-) delete mode 100644 config/names/diona.txt diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 959c930bbf1..f403695b0f6 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -9,7 +9,6 @@ var/list/first_names_female = file2list("config/names/first_female.txt") var/list/last_names = file2list("config/names/last.txt") var/list/clown_names = file2list("config/names/clown.txt") var/list/mime_names = file2list("config/names/mime.txt") -var/list/diona_names = file2list ("config/names/diona.txt") var/list/verbs = file2list("config/names/verbs.txt") var/list/adjectives = file2list("config/names/adjectives.txt") diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index a8c6398fa95..ebc14225cd7 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -217,7 +217,7 @@ var/mob/living/carbon/human/interactive/greytide/clone = new(src) var/datum/dna/owner_dna = H.dna clone.rename_character(clone.name, owner_dna.real_name) - clone.set_species(H.dna.species.type) + clone.set_species(owner_dna.species.type) clone.dna = owner_dna.Clone() clone.body_accessory = H.body_accessory domutcheck(clone) diff --git a/code/modules/awaymissions/mission_code/spacehotel_npcs.dm b/code/modules/awaymissions/mission_code/spacehotel_npcs.dm index dcf4a48a280..5426516f86b 100644 --- a/code/modules/awaymissions/mission_code/spacehotel_npcs.dm +++ b/code/modules/awaymissions/mission_code/spacehotel_npcs.dm @@ -3,8 +3,8 @@ override_under = /obj/item/clothing/under/mafia chattyness = SNPC_CHANCE_TALK / 4 -/mob/living/carbon/human/interactive/away/hotel/New(loc) - ..(loc, "Skrell") +/mob/living/carbon/human/interactive/away/hotel/Initialize(mapload) + ..(loc, /datum/species/skrell) /mob/living/carbon/human/interactive/away/hotel/doSetup() ..() diff --git a/code/modules/awaymissions/snpc.dm b/code/modules/awaymissions/snpc.dm index 0b0de76ead3..8dc2b1b31e9 100644 --- a/code/modules/awaymissions/snpc.dm +++ b/code/modules/awaymissions/snpc.dm @@ -4,7 +4,7 @@ var/squad_member = 0 // was spawned by squad var/home_z -/mob/living/carbon/human/interactive/away/New() +/mob/living/carbon/human/interactive/away/Initialize(mapload) ..() TRAITS |= TRAIT_ROBUST faction += "away" diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 6ed8baf5de0..1a6f29a6dd0 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -226,7 +226,14 @@ "SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") /datum/language/vox/get_random_name() - return ..(FEMALE,1,6) + var/sounds = rand(2, 8) + var/i = 0 + var/newname = "" + + while(i <= sounds) + i++ + newname += pick(vox_name_syllables) + return capitalize(newname) /datum/language/diona name = "Rootspeak" @@ -240,8 +247,8 @@ syllables = list("hs","zt","kr","st","sh") /datum/language/diona/get_random_name() - var/new_name = "[pick(list("To Sleep Beneath","Wind Over","Embrace of","Dreams of","Witnessing","To Walk Beneath","Approaching the"))]" - new_name += " [pick(list("the Void","the Sky","Encroaching Night","Planetsong","Starsong","the Wandering Star","the Empty Day","Daybreak","Nightfall","the Rain"))]" + var/new_name = "[pick(list("To Sleep Beneath", "Wind Over", "Embrace of", "Dreams of", "Witnessing", "To Walk Beneath", "Approaching the", "Glimmer of", "The Ripple of", "Colors of", "The Still of", "Silence of", "Gentle Breeze of", "Glistening Waters under", "Child of", "Blessed Plant-ling of", "Grass-Walker of", "Element of", "Spawn of"))]" + new_name += " [pick(list("the Void", "the Sky", "Encroaching Night", "Planetsong", "Starsong", "the Wandering Star", "the Empty Day", "Daybreak", "Nightfall", "the Rain", "the Stars", "the Waves", "Dusk", "Night", "the Wind", "the Summer Wind", "the Blazing Sun", "the Scorching Sun", "Eternal Fields", "the Soothing Plains", "the Undying Fiona", "Mother Nature's Bousum"))]" return new_name /datum/language/trinary diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 15a3dd04d12..ad1c84a012d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1232,7 +1232,7 @@ ..() /mob/living/carbon/human/generate_name() - name = dna.species.makeName(gender,src) + name = dna.species.get_random_name(gender) real_name = name if(dna) dna.real_name = name diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index 30451bc9562..fe50206aedc 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -403,7 +403,7 @@ if(!hud_used) hud_used = new /datum/hud/human(src) -/mob/living/carbon/human/interactive/New(var/new_loc, var/new_species = null) +/mob/living/carbon/human/interactive/Initialize(mapload) ..() snpc_list += src diff --git a/code/modules/mob/living/carbon/human/interactive/prefabs.dm b/code/modules/mob/living/carbon/human/interactive/prefabs.dm index 6553bb26b70..85824145019 100644 --- a/code/modules/mob/living/carbon/human/interactive/prefabs.dm +++ b/code/modules/mob/living/carbon/human/interactive/prefabs.dm @@ -1,10 +1,10 @@ -/mob/living/carbon/human/interactive/angry/New() +/mob/living/carbon/human/interactive/angry/Initialize(mapload) TRAITS |= TRAIT_ROBUST TRAITS |= TRAIT_MEAN faction += "bot_angry" ..() -/mob/living/carbon/human/interactive/friendly/New() +/mob/living/carbon/human/interactive/friendly/Initialize(mapload) TRAITS |= TRAIT_FRIENDLY TRAITS |= TRAIT_UNROBUST faction += "bot_friendly" @@ -12,7 +12,7 @@ functions -= "combat" ..() -/mob/living/carbon/human/interactive/greytide/New() +/mob/living/carbon/human/interactive/greytide/Initialize(mapload) TRAITS |= TRAIT_ROBUST TRAITS |= TRAIT_MEAN TRAITS |= TRAIT_THIEVING diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 58fa37403ac..22becd820a4 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -308,11 +308,6 @@ /datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here return -// Used for species-specific names (Vox, etc) -/datum/species/proc/makeName(var/gender,var/mob/living/carbon/human/H=null) - if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - /datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). return diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 225a967065a..e5439026da8 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -365,16 +365,6 @@ /datum/species/vox/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) -/datum/species/vox/makeName(var/gender,var/mob/living/carbon/human/H=null) - var/sounds = rand(2,8) - var/i = 0 - var/newname = "" - - while(i<=sounds) - i++ - newname += pick(vox_name_syllables) - return capitalize(newname) - /datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H) if(!H.mind || !H.mind.assigned_role || H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime") H.unEquip(H.wear_mask) diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 8dc6a46a584..669271f3ead 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -156,8 +156,7 @@ adult.name = "diona ([rand(100,999)])" adult.real_name = adult.name adult.ckey = ckey - adult.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name! - adult.rename_self("diona") + adult.real_name = adult.dna.species.get_random_name() //I hate this being here of all places but unfortunately dna is based on real_name! for(var/obj/item/W in contents) unEquip(W) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index fe3ad6b120d..d8bfb77e725 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -537,9 +537,6 @@ else if(mind.assigned_role == "Mime") new_character.real_name = pick(mime_names) new_character.rename_self("mime") - else if(new_character.dna.species == "Diona") - new_character.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name! - new_character.rename_self("diona") mind.original = new_character mind.transfer_to(new_character) //won't transfer key since the mind is not active diff --git a/config/names/diona.txt b/config/names/diona.txt deleted file mode 100644 index 3eb4b5f4498..00000000000 --- a/config/names/diona.txt +++ /dev/null @@ -1,13 +0,0 @@ -Blade of Grass Bent Before Wind -Glimmer Of The Stars -The Ripple Of the Waves -Colors Of Dusk -The Still Of Night -Silence Of The Wind -Gentle Breeze of the Summer Wind -Glistening Water under the Blazing Sun -Child of the Scorching Sun -Blessed Plant-ling of Eternal Fields -Grass-walker of the Soothing Plains -Element of the Undying Fiona -Spawn of Mother Nature's Busum \ No newline at end of file From 59d0e53754d53fc5ddf6c03eee855584b8ed6e3d Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 19 Jul 2018 03:51:42 -0400 Subject: [PATCH 12/24] fixes vox no DNA head runtime --- code/modules/mob/living/carbon/human/species/station.dm | 4 ++-- code/modules/mob/new_player/preferences_setup.dm | 2 +- code/modules/surgery/organs/subtypes/vox.dm | 7 ++----- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index e5439026da8..55502649373 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -352,7 +352,7 @@ "brain" = /obj/item/organ/internal/brain, "appendix" = /obj/item/organ/internal/appendix, "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2. - "stack" = /obj/item/organ/internal/stack/vox //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used + "stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ. suicide_messages = list( @@ -473,7 +473,7 @@ "kidneys" = /obj/item/organ/internal/kidneys, "brain" = /obj/item/organ/internal/brain, "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2. - "stack" = /obj/item/organ/internal/stack/vox //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used + "stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ. suicide_messages = list( diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 511816124f7..0d14b428cfd 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -230,7 +230,7 @@ icobase = C.icobase ? C.icobase : C.dna.species.icobase if(H.dna.species.bodyflags & HAS_TAIL) coloured_tail = H.tail ? H.tail : H.dna.species.tail - + sleep(0) // let the icon generation finish qdel(H) else icobase = current_species.icobase diff --git a/code/modules/surgery/organs/subtypes/vox.dm b/code/modules/surgery/organs/subtypes/vox.dm index 7028d6f1fc2..960acf920a8 100644 --- a/code/modules/surgery/organs/subtypes/vox.dm +++ b/code/modules/surgery/organs/subtypes/vox.dm @@ -3,13 +3,10 @@ /obj/item/organ/internal/stack - name = "cortical stack" + name = "vox cortical stack" icon_state = "brain-prosthetic" parent_organ = "head" organ_tag = "stack" slot = "vox_stack" status = ORGAN_ROBOT - vital = TRUE - -/obj/item/organ/internal/stack/vox - name = "vox cortical stack" \ No newline at end of file + vital = TRUE \ No newline at end of file From 648049def05c864a63640a82a5311fe80c982f84 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 19 Jul 2018 04:08:43 -0400 Subject: [PATCH 13/24] better runtime fix --- code/modules/mob/living/carbon/human/human.dm | 9 ++++----- code/modules/mob/new_player/preferences_setup.dm | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ad1c84a012d..dc1fb19019a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1376,14 +1376,13 @@ update_client_colour(0) - spawn(0) - overlays.Cut() - update_mutantrace(1) - regenerate_icons() - if(!delay_icon_update) UpdateAppearance() + overlays.Cut() + update_mutantrace(1) + regenerate_icons() + if(dna.species) return TRUE else diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 0d14b428cfd..511816124f7 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -230,7 +230,7 @@ icobase = C.icobase ? C.icobase : C.dna.species.icobase if(H.dna.species.bodyflags & HAS_TAIL) coloured_tail = H.tail ? H.tail : H.dna.species.tail - sleep(0) // let the icon generation finish + qdel(H) else icobase = current_species.icobase From 62daecbf1e99c301efc5fe90f9ec6441d411dc48 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 19 Jul 2018 05:15:58 -0400 Subject: [PATCH 14/24] minor cleanup --- .../living/carbon/human/species/abductor.dm | 1 - .../mob/living/carbon/human/species/golem.dm | 1 - .../mob/living/carbon/human/species/monkey.dm | 1 - .../mob/living/carbon/human/species/shadow.dm | 1 - .../living/carbon/human/species/skeleton.dm | 2 - .../living/carbon/human/species/species.dm | 64 ++++++++----------- .../living/carbon/human/species/station.dm | 24 ------- 7 files changed, 28 insertions(+), 66 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 16fcd34d315..d50be2e73e8 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -3,7 +3,6 @@ name_plural = "Abductors" icobase = 'icons/mob/human_races/r_abductor.dmi' deform = 'icons/mob/human_races/r_abductor.dmi' - path = /mob/living/carbon/human/abductor language = "Abductor Mindlink" default_language = "Abductor Mindlink" eyes = "blank_eyes" diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 74f3e97d879..772a5ca5ba6 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -5,7 +5,6 @@ icobase = 'icons/mob/human_races/r_golem.dmi' deform = 'icons/mob/human_races/r_golem.dmi' - default_language = "Galactic Common" species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, NOGUNS) oxy_mod = 0 diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index eb766633b97..4128024a8c9 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -8,7 +8,6 @@ damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi' damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' - path = /mob/living/carbon/human/monkey language = null default_language = "Chimpanzee" species_traits = list(NO_EXAMINE) diff --git a/code/modules/mob/living/carbon/human/species/shadow.dm b/code/modules/mob/living/carbon/human/species/shadow.dm index 7480d7e3a66..0e8bd2e91e2 100644 --- a/code/modules/mob/living/carbon/human/species/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/shadow.dm @@ -5,7 +5,6 @@ icobase = 'icons/mob/human_races/r_shadow.dmi' deform = 'icons/mob/human_races/r_shadow.dmi' - default_language = "Galactic Common" unarmed_type = /datum/unarmed_attack/claws ignored_by = list(/mob/living/simple_animal/hostile/faithless) diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index 572ff91a7d7..8afc35f743a 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -6,8 +6,6 @@ icobase = 'icons/mob/human_races/r_skeleton.dmi' deform = 'icons/mob/human_races/r_skeleton.dmi' - path = /mob/living/carbon/human/skeleton - default_language = "Galactic Common" blood_color = "#FFFFFF" flesh_color = "#E6E6C6" diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 22becd820a4..6ce91d80ddd 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -1,11 +1,6 @@ -/* - Datum-based species. Should make for much cleaner and easier to maintain mutantrace code. -*/ - /datum/species var/name // Species name. var/name_plural // Pluralized name (since "[name]s" is not always valid) - var/path // Species path var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. @@ -95,6 +90,7 @@ //Used in icon caching. var/race_key = 0 var/icon/icon_template + var/is_small var/show_ssd = 1 var/can_revive_by_healing // Determines whether or not this species can be revived by simply healing them @@ -166,11 +162,11 @@ unarmed = new unarmed_type() -/datum/species/proc/get_random_name(var/gender) +/datum/species/proc/get_random_name(gender) var/datum/language/species_language = all_languages[language] return species_language.get_random_name(gender) -/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. +/datum/species/proc/create_organs(mob/living/carbon/human/H) //Handles creation of mob organs. QDEL_LIST(H.internal_organs) QDEL_LIST(H.bodyparts) @@ -263,28 +259,24 @@ . -= 2 return . -/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment. +/datum/species/proc/handle_post_spawn(mob/living/carbon/C) //Handles anything not already covered by basic species assignment. grant_abilities(C) + +/datum/species/proc/updatespeciescolor(mob/living/carbon/human/H) //Handles changing icobase for species that have multiple skin colors. return -/datum/species/proc/updatespeciescolor(var/mob/living/carbon/human/H) //Handles changing icobase for species that have multiple skin colors. - return - -/datum/species/proc/grant_abilities(var/mob/living/carbon/human/H) +/datum/species/proc/grant_abilities(mob/living/carbon/human/H) for(var/proc/ability in species_abilities) H.verbs += ability - return -/datum/species/proc/handle_pre_change(var/mob/living/carbon/human/H) - if(H.butcher_results)//clear it out so we don't butcher a actual human. +/datum/species/proc/handle_pre_change(mob/living/carbon/human/H) + if(H.butcher_results) //clear it out so we don't butcher a actual human. H.butcher_results = null remove_abilities(H) - return -/datum/species/proc/remove_abilities(var/mob/living/carbon/human/H) +/datum/species/proc/remove_abilities(mob/living/carbon/human/H) for(var/proc/ability in species_abilities) H.verbs -= ability - return // Do species-specific reagent handling here // Return 1 if it should do normal processing too @@ -295,37 +287,37 @@ if(R.id == exotic_blood) H.blood_volume = min(H.blood_volume + round(R.volume, 0.1), BLOOD_VOLUME_NORMAL) H.reagents.del_reagent(R.id) - return 0 - return 1 + return FALSE + return TRUE // For special snowflake species effects // (Slime People changing color based on the reagents they consume) -/datum/species/proc/handle_life(var/mob/living/carbon/human/H) +/datum/species/proc/handle_life(mob/living/carbon/human/H) if((NO_BREATHE in species_traits) || (BREATHLESS in H.mutations)) H.setOxyLoss(0) H.SetLoseBreath(0) -/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here +/datum/species/proc/handle_dna(mob/living/carbon/C, remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here return -/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). +/datum/species/proc/handle_death(mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). return /datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(attacker_style && attacker_style.help_act(user, target))//adminfu only... - return 1 + return TRUE if(target.health >= config.health_threshold_crit) target.help_shake_act(user) - return 1 + return TRUE else user.do_cpr(target) /datum/species/proc/grab(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(attacker_style && attacker_style.grab_act(user, target)) - return 1 + return TRUE else target.grabbedby(user) - return 1 + return TRUE /datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) //Vampire code @@ -348,7 +340,7 @@ return //end vampire codes if(attacker_style && attacker_style.harm_act(user, target)) - return 1 + return TRUE else var/datum/unarmed_attack/attack = user.dna.species.unarmed @@ -365,7 +357,7 @@ if(!damage) playsound(target.loc, attack.miss_sound, 25, 1, -1) target.visible_message("[user] tried to [pick(attack.attack_verb)] [target]!") - return 0 + return FALSE var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_sel.selecting)) @@ -386,7 +378,7 @@ /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(attacker_style && attacker_style.disarm_act(user, target)) - return 1 + return TRUE else add_attack_logs(user, target, "Disarmed", ATKLOG_ALL) user.do_attack_animation(target, ATTACK_EFFECT_DISARM) @@ -459,7 +451,7 @@ if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(0, M.name, attack_type = UNARMED_ATTACK)) add_attack_logs(M, H, "Melee attacked with fists (miss/block)") H.visible_message("[M] attempted to touch [H]!") - return 0 + return FALSE switch(M.a_intent) if(INTENT_HELP) @@ -483,11 +475,11 @@ /datum/species/proc/after_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE) return -/datum/species/proc/can_understand(var/mob/other) +/datum/species/proc/can_understand(mob/other) return // Called in life() when the mob has no client. -/datum/species/proc/handle_npc(var/mob/living/carbon/human/H) +/datum/species/proc/handle_npc(mob/living/carbon/human/H) return //Species unarmed attacks @@ -521,7 +513,7 @@ damage = 6 /datum/species/proc/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user) - return 0 + return FALSE /datum/species/proc/handle_vision(mob/living/carbon/human/H) // Right now this just handles blind, blurry, and similar states @@ -627,7 +619,7 @@ Returns the path corresponding to the corresponding organ It'll return null if the organ doesn't correspond, so include null checks when using this! */ //Fethas Todo:Do i need to redo this? -/datum/species/proc/return_organ(var/organ_slot) +/datum/species/proc/return_organ(organ_slot) if(!(organ_slot in has_organ)) return null return has_organ[organ_slot] @@ -725,4 +717,4 @@ It'll return null if the organ doesn't correspond, so include null checks when u /datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately - M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling + M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 55502649373..e3e9c2d2915 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -4,7 +4,6 @@ icobase = 'icons/mob/human_races/r_human.dmi' deform = 'icons/mob/human_races/r_def_human.dmi' primitive_form = /datum/species/monkey - path = /mob/living/carbon/human language = "Sol Common" species_traits = list(LIPS, CAN_BE_FAT) skinned_type = /obj/item/stack/sheet/animalhide/human @@ -25,8 +24,6 @@ name_plural = "Unathi" icobase = 'icons/mob/human_races/r_lizard.dmi' deform = 'icons/mob/human_races/r_def_lizard.dmi' - path = /mob/living/carbon/human/unathi - default_language = "Galactic Common" language = "Sinta'unathi" tail = "sogtail" skinned_type = /obj/item/stack/sheet/animalhide/lizard @@ -120,8 +117,6 @@ name_plural = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' deform = 'icons/mob/human_races/r_def_tajaran.dmi' - path = /mob/living/carbon/human/tajaran - default_language = "Galactic Common" language = "Siik'tajr" tail = "tajtail" skinned_type = /obj/item/stack/sheet/fur @@ -181,8 +176,6 @@ name_plural = "Vulpkanin" icobase = 'icons/mob/human_races/r_vulpkanin.dmi' deform = 'icons/mob/human_races/r_vulpkanin.dmi' - path = /mob/living/carbon/human/vulpkanin - default_language = "Galactic Common" language = "Canilunzt" primitive_form = /datum/species/monkey/vulpkanin tail = "vulptail" @@ -236,8 +229,6 @@ name_plural = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' deform = 'icons/mob/human_races/r_def_skrell.dmi' - path = /mob/living/carbon/human/skrell - default_language = "Galactic Common" language = "Skrellian" primitive_form = /datum/species/monkey/skrell @@ -285,9 +276,6 @@ name_plural = "Vox" icobase = 'icons/mob/human_races/vox/r_vox.dmi' deform = 'icons/mob/human_races/vox/r_def_vox.dmi' - path = /mob/living/carbon/human/vox - - default_language = "Galactic Common" language = "Vox-pidgin" tail = "voxtail" speech_sounds = list('sound/voice/shriek1.ogg') @@ -435,7 +423,6 @@ name_plural = "Vox Armalis" icobase = 'icons/mob/human_races/r_armalis.dmi' deform = 'icons/mob/human_races/r_armalis.dmi' - path = /mob/living/carbon/human/voxarmalis unarmed_type = /datum/unarmed_attack/claws/armalis warning_low_pressure = 50 @@ -491,8 +478,6 @@ name_plural = "Kidan" icobase = 'icons/mob/human_races/r_kidan.dmi' deform = 'icons/mob/human_races/r_def_kidan.dmi' - path = /mob/living/carbon/human/kidan - default_language = "Galactic Common" language = "Chittin" unarmed_type = /datum/unarmed_attack/claws @@ -533,11 +518,9 @@ /datum/species/slime name = "Slime People" name_plural = "Slime People" - default_language = "Galactic Common" language = "Bubblish" icobase = 'icons/mob/human_races/r_slime.dmi' deform = 'icons/mob/human_races/r_slime.dmi' - path = /mob/living/carbon/human/slime remains_type = /obj/effect/decal/remains/slime // More sensitive to the cold @@ -738,7 +721,6 @@ name_plural = "Greys" icobase = 'icons/mob/human_races/r_grey.dmi' deform = 'icons/mob/human_races/r_def_grey.dmi' - default_language = "Galactic Common" language = "Psionic Communication" eyes = "grey_eyes_s" butt_sprite = "grey" @@ -795,8 +777,6 @@ name_plural = "Dionaea" icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' - path = /mob/living/carbon/human/diona - default_language = "Galactic Common" language = "Rootspeak" speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16] speech_chance = 20 @@ -919,8 +899,6 @@ icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' - path = /mob/living/carbon/human/machine - default_language = "Galactic Common" language = "Trinary" remains_type = /obj/effect/decal/remains/robot skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources! @@ -1003,8 +981,6 @@ name_plural = "Drask" icobase = 'icons/mob/human_races/r_drask.dmi' deform = 'icons/mob/human_races/r_drask.dmi' - path = /mob/living/carbon/human/drask - default_language = "Galactic Common" language = "Orluum" eyes = "drask_eyes_s" From 8664e5501b42c63836dba42656652da48a0c5de2 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 19 Jul 2018 15:32:03 -0400 Subject: [PATCH 15/24] addresses changes --- .../mob/living/carbon/human/species/station.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index e3e9c2d2915..22b8b281f8b 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -557,7 +557,7 @@ "is ripping out their own core!", "is turning a dull, brown color and melting into a puddle!") - var/list/mob/living/carbon/human/recolor_list = list() + var/reagent_skin_coloring = FALSE var/datum/action/innate/regrow/grow = new() @@ -586,7 +586,7 @@ #define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds #define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower. // Slowly shifting to the color of the reagents - if((H in recolor_list) && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER) + if(reagent_skin_coloring && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER) var/blood_amount = H.blood_volume var/r_color = mix_color_from_reagents(H.reagents.reagent_list) var/new_body_color = BlendRGB(r_color, H.skin_colour, (blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)/((blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)+(H.reagents.total_volume))) @@ -611,12 +611,12 @@ return var/datum/species/slime/S = dna.species - if(src in S.recolor_list) - S.recolor_list -= src + if(S.reagent_skin_coloring) + S.reagent_skin_coloring = TRUE if(!silent) to_chat(src, "You adjust your internal chemistry to filter out pigments from things you consume.") else - S.recolor_list += src + S.reagent_skin_coloring = TRUE if(!silent) to_chat(src, "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you.") @@ -711,9 +711,9 @@ #undef SLIMEPERSON_MINHUNGER #undef SLIMEPERSON_REGROWTHDELAY -/datum/species/slime/handle_pre_change(var/mob/living/carbon/human/H) +/datum/species/slime/handle_pre_change(mob/living/carbon/human/H) ..() - if(H in recolor_list) + if(reagent_skin_coloring) H.toggle_recolor(silent = 1) /datum/species/grey From dea0b0156a867b8eae978550e94db97f5b9177e7 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 20 Jul 2018 01:05:47 -0400 Subject: [PATCH 16/24] minor fix --- code/modules/client/preference/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index af86929a94e..7750541ebec 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2233,7 +2233,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(disabilities & DISABILITY_FLAG_SCRAMBLED) character.dna.SetSEState(SCRAMBLEBLOCK,1,1) - S.handle_dna(character) + character.dna.species.handle_dna(character) if(character.dna.dirtySE) character.dna.UpdateSE() From 81133f7bb5a45ab82708f90afb4cb3481550e45b Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 20 Jul 2018 01:24:43 -0400 Subject: [PATCH 17/24] and another minor one --- code/modules/client/preference/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 7750541ebec..8edec3a7b29 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2183,7 +2183,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.backbag = backbag //Debugging report to track down a bug, which randomly assigned the plural gender to people. - if(S.has_gender && (character.gender in list(PLURAL, NEUTER))) + if(character.dna.species.has_gender && (character.gender in list(PLURAL, NEUTER))) if(isliving(src)) //Ghosts get neuter by default message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") character.change_gender(MALE) From ea1cd08bb5943aed229c650df3ad0ffdf712cab4 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 20 Jul 2018 02:52:58 -0400 Subject: [PATCH 18/24] fixes nitrogen warning --- code/modules/surgery/organs/lungs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 1d730632212..3c2b7e1cbd1 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -154,12 +154,12 @@ if(safe_nitro_min) if(N2_pp < safe_nitro_min) gas_breathed = handle_too_little_breath(H, N2_pp, safe_nitro_min, breath.nitrogen) - H.throw_alert("nitro", /obj/screen/alert/not_enough_nitro) + H.throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) else H.failed_last_breath = FALSE H.adjustOxyLoss(-5) gas_breathed = breath.nitrogen - H.clear_alert("nitro") + H.clear_alert("not_enough_nitro") //Exhale breath.nitrogen -= gas_breathed From 19d24a0bb0f428095ecd18b25f1cc41a0be223c0 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 20 Jul 2018 16:14:16 -0400 Subject: [PATCH 19/24] IPC emote fix --- code/modules/mob/living/carbon/human/emote.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 0ac25c11bea..c1eb8641820 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -32,6 +32,7 @@ var/found_machine_head = FALSE if(ismachine(src)) //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise. on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + found_machine_head = TRUE else var/obj/item/organ/external/head/H = get_organ("head") // If you have a robotic head, you can make beep-boop noises if(H && H.is_robotic()) From 5b3051cad96ca77e99a77ae39abd953dac45d361 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 20 Jul 2018 17:49:29 -0400 Subject: [PATCH 20/24] icon generation fixes --- code/modules/mob/living/carbon/human/human.dm | 1 + code/modules/surgery/organs/organ_external.dm | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index dc1fb19019a..1cf1a8bb942 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -120,6 +120,7 @@ qdel(E) for(var/obj/item/organ/O in internal_organs) qdel(O) + regenerate_icons() death() /mob/living/carbon/human/shadow/Initialize(mapload) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index cefe9554d41..04ce880d5f5 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -449,7 +449,7 @@ Note that amputating the affected organ does in fact remove the infection from t ****************************************************/ //Handles dismemberment -/obj/item/organ/external/proc/droplimb(var/clean, var/disintegrate, var/ignore_children, var/nodamage) +/obj/item/organ/external/proc/droplimb(clean, disintegrate, ignore_children, nodamage) if(cannot_amputate || !owner) return @@ -494,12 +494,13 @@ Note that amputating the affected organ does in fact remove the infection from t parent.receive_damage(total_brute, total_burn, ignore_resists = TRUE) //Transfer the full damage to the parent, bypass limb damage reduction. parent = null - spawn(1) - if(victim) - victim.updatehealth() - victim.UpdateDamageIcon() - victim.regenerate_icons() dir = 2 + + if(victim) + victim.updatehealth() + victim.UpdateDamageIcon() + victim.regenerate_icons() + switch(disintegrate) if(DROPLIMB_SHARP) compile_icon() @@ -513,7 +514,7 @@ Note that amputating the affected organ does in fact remove the infection from t dropped_part.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) dir = 2 brute_dam = 0 - burn_dam = 0 //Reset the damage on the limb; the damage should have transferred to the parent; we don't want extra damage being re-applie when then limb is re-attached + burn_dam = 0 //Reset the damage on the limb; the damage should have transferred to the parent; we don't want extra damage being re-applied when then limb is re-attached return dropped_part else qdel(src) // If you flashed away to ashes, YOU FLASHED AWAY TO ASHES From a60e2f60d878454f69eabdaf57c925f2bd0fa700 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 20 Jul 2018 18:13:53 -0400 Subject: [PATCH 21/24] nuke ops runtime fix --- code/game/gamemodes/nuclear/nuclear.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 57c511c65ad..17afd375952 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -141,15 +141,15 @@ proc/issyndicate(mob/living/M as mob) return ..() -/datum/game_mode/proc/create_syndicate(var/datum/mind/synd_mind) // So we don't have inferior species as ops - randomize a human +/datum/game_mode/proc/create_syndicate(datum/mind/synd_mind) // So we don't have inferior species as ops - randomize a human var/mob/living/carbon/human/M = synd_mind.current - var/obj/item/organ/external/head/head_organ = M.get_organ("head") M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ops. M.overeatduration = 0 + var/obj/item/organ/external/head/head_organ = M.get_organ("head") var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde var/eye_c = pick("#000000","#8B4513","1E90FF") // Black, brown, blue var/skin_tone = pick(-50, -30, -10, 0, 0, 0, 10) // Caucasian/black From e2fcfd9254fce92abbd167e845e4c36015b847ff Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 21 Jul 2018 03:53:06 -0400 Subject: [PATCH 22/24] species override and IPC monitor fix --- code/modules/surgery/organs/organ.dm | 4 +++- code/modules/surgery/organs/subtypes/machine.dm | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 53c0447589c..991a5d252ce 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -43,7 +43,7 @@ /obj/item/organ/proc/update_health() return -/obj/item/organ/New(mob/living/carbon/holder) +/obj/item/organ/New(mob/living/carbon/holder, datum/species/species_override = null) ..(holder) if(!max_damage) max_damage = min_broken_damage * 2 @@ -60,6 +60,8 @@ blood_DNA[dna.unique_enzymes] = dna.b_type else dna = new /datum/dna(null) + if(species_override) + dna.species = new species_override /obj/item/organ/proc/set_dna(var/datum/dna/new_dna) if(new_dna) diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 5eb8bd143f1..7c2aae08894 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -6,8 +6,8 @@ encased = null status = ORGAN_ROBOT -/obj/item/organ/external/head/ipc/New() - ..() +/obj/item/organ/external/head/ipc/New(mob/living/carbon/holder, datum/species/species_override = null) + ..(holder, /datum/species/machine) // IPC heads need to be explicitly set to this since you can print them robotize("Morpheus Cyberkinetics") /obj/item/organ/external/chest/ipc From ed1b1fda0285d2e95087b8e29cbff70293302cd3 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 21 Jul 2018 15:51:36 -0400 Subject: [PATCH 23/24] fix deserialization --- code/game/dna/dna2.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 131ebdf3428..cba96ded0db 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -433,6 +433,7 @@ var/global/list/bad_blocks[0] UI = data["UI"] UpdateUI() UpdateSE() - species = new data["species"] + var/datum/species/S = data["species"] + species = new S b_type = data["b_type"] real_name = data["real_name"] \ No newline at end of file From a4ac7abd9583688e7e31b2089b6e0fbea4ca83a2 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 21 Jul 2018 16:09:03 -0400 Subject: [PATCH 24/24] another runtime fix --- code/game/mecha/mech_fabricator.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 88c15e687ac..d0af747dc64 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -158,14 +158,14 @@ overlays -= "fab-active" desc = initial(desc) - var/obj/item/I = new D.build_path + var/obj/item/I = new D.build_path(loc) if(D.locked) - var/obj/item/storage/lockbox/large/L = new /obj/item/storage/lockbox/large(get_step(src,SOUTH)) //(Don't use capitals in paths, or single letters. - I.loc = L + var/obj/item/storage/lockbox/large/L = new /obj/item/storage/lockbox/large(get_step(src, SOUTH)) //(Don't use capitals in paths, or single letters. + I.forceMove(L) L.name += " [initial(I.name)]" L.origin_tech = I.origin_tech else - I.loc = get_step(src,SOUTH) + I.forceMove(get_step(src, SOUTH)) if(istype(I)) I.materials = res_coef atom_say("[I] is complete.")