AGHHHHHHHHHHHHHHHHHHH WHATTT

This commit is contained in:
Fox McCloud
2018-07-17 04:58:36 -04:00
parent 9c3fcaa53c
commit aae5405d03
140 changed files with 666 additions and 696 deletions
+1 -1
View File
@@ -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()
+14 -14
View File
@@ -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)
+2 -2
View File
@@ -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]")
+1 -1
View File
@@ -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)))
@@ -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
+2 -2
View File
@@ -43,7 +43,7 @@
affected_mob.visible_message("<span class='danger'>[affected_mob]'s form contorts into something more feline!</span>", \
"<span class='userdanger'>YOU TURN INTO A TAJARAN!</span>")
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
+3 -3
View File
@@ -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"
+1 -1
View File
@@ -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")
+2 -2
View File
@@ -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, "<span class='warning'>Your bones clatter and shutter as they're pulled back into this world!</span>")
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)
@@ -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))
+6 -6
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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.")
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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, "<B>You are now a [H.species.name].</B>")
to_chat(H, "<B>You are now a [H.dna.species.name].</B>")
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, "<B>You are now a [H.species.name].</B>")
to_chat(H, "<B>You are now a [H.dna.species.name].</B>")
return H
+1 -1
View File
@@ -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
+14 -14
View File
@@ -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)
+3 -3
View File
@@ -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, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
return
if(NO_DNA in T.species.species_traits)
if(NO_DNA in T.dna.species.species_traits)
to_chat(user, "<span class='warning'>This creature does not have DNA!</span>")
return
@@ -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()
@@ -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, "<span class='warning'>We cannot perform this ability in this form!</span>")
return
@@ -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)
@@ -17,7 +17,7 @@
if((NOCLONE || SKELETON || HUSK) in target.mutations)
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
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, "<span class='warning'>[target] is not compatible with this ability.</span>")
return
return 1
@@ -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, "<span class='warning'>The selected DNA is incompatible with our sting.</span>")
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, "<span class='warning'>This won't work on a creature without DNA.</span>")
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")
@@ -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()
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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 = ""
@@ -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"
@@ -432,7 +432,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(ishuman(L))
var/mob/living/carbon/human/H = L
species = "<span clas=='notice'>[H.species.name]</span>"
species = "<span clas=='notice'>[H.dna.species.name]</span>"
if(L.mind && L.mind.changeling)
species = "<span class='warning'>Changeling lifeform</span>"
var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs
@@ -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!", "<span class='notice'>You prepare [target]'s [target_zone] for further dissection.</span>")
return TRUE
if(IC)
@@ -108,7 +108,7 @@
/obj/item/organ/internal/heart/gland/pop/activate()
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
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)
@@ -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
+5 -5
View File
@@ -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")
+2 -2
View File
@@ -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++
@@ -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("<span class='warning'>[thrallToRevive] slowly rises, no longer recognizable as human.</span>", \
"<span class='shadowling'><b>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.</b></span>")
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))
@@ -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)
@@ -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.
+7 -7
View File
@@ -321,11 +321,11 @@ var/global/list/multiverse = list()
to_chat(M, "<B>You are an alternate version of [user.real_name] from another universe! Help [user.p_them()] accomplish [user.p_their()] goals at all costs.</B>")
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("<span class = 'warning'> A massive amount of flesh sloughs off [M] and a skeleton rises up!</span>")
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)
+1 -1
View File
@@ -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.")
+3 -3
View File
@@ -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)
+4 -4
View File
@@ -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)
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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)
+4 -4
View File
@@ -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 = "<span class=\"bad\">Error: Unable to locate valid genetic data.</span>"
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 = "<span class=\"bad\">Error: Subject's brain is incompatible.</span>"
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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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, "<span class='warning'>'[target_species]' is not a valid species!</span>")
return
H.set_species(target_species)
@@ -336,7 +336,7 @@
to_chat(H, "<span class='warning'>No genetic template configured!</span>")
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)
+1 -1
View File
@@ -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)
@@ -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 << "<span class='warning'>Your fingers can't press the button!</span>"
return
+2 -2
View File
@@ -99,7 +99,7 @@
if(!get_location_accessible(H, "mouth"))
to_chat(user, "<span class='warning'>The mask is in the way.</span>")
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, "<span class='warning'>You find yourself disappointed at the appalling lack of facial hair.</span>")
return
if(C.f_style == "Shaved")
@@ -130,7 +130,7 @@
if(!get_location_accessible(H, "head"))
to_chat(user, "<span class='warning'>The headgear is in the way.</span>")
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, "<span class='warning'>You find yourself disappointed at the appalling lack of hair.</span>")
return
if(C.h_style == "Bald" || C.h_style == "Balding Hair" || C.h_style == "Skinhead")
@@ -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())
@@ -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, "<span class='warning'>You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.</span>")
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.
+8 -8
View File
@@ -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, "<span class='warning'>You are unable to find anything on [H]'s face worth cutting. How disappointing.</span>")
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, "<span class='warning'>You are unable to find anything on [H]'s head worth cutting. How disappointing.</span>")
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
+1 -1
View File
@@ -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, "<span class='warning'>It's too heavy for you to wield fully.</span>")
return
if(user.get_inactive_hand())
+1 -1
View File
@@ -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("<span class='notice'>[H] sharpens [H.p_their()] claws on the [src]!</span>", "<span class='notice'>You sharpen your claws on the [src].</span>")
playsound(get_turf(H), usesound, 50, 1)
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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)
+2 -2
View File
@@ -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), "<span class=danger>[src] [replacetext(pick(species.suicide_messages), "their", p_their())] It looks like [p_theyre()] trying to commit suicide.</span>")
to_chat(viewers(src), "<span class=danger>[src] [replacetext(pick(dna.species.suicide_messages), "their", p_their())] It looks like [p_theyre()] trying to commit suicide.</span>")
do_suicide(0)
updatehealth()
+1 -1
View File
@@ -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 )
+3 -3
View File
@@ -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)
+3 -3
View File
@@ -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)
+2 -2
View File
@@ -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
@@ -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, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
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, "<B>Your wish is granted, but at a terrible cost...</B>")
@@ -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, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
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, "<B>Your wish is granted, but at a terrible cost...</B>")
@@ -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, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
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, "<B>Your wish is granted, but at a terrible cost...</B>")
@@ -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, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
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, "<B>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.</B>")
@@ -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
+4 -4
View File
@@ -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
@@ -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
@@ -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
+2 -2
View File
@@ -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, "<span class= 'notice'>[target] has no skin, how do you expect to tattoo [target.p_them()]?</span>")
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, "<span class= 'notice'>You can't think of a way to make the [tattoo_name] design work on [target == user ? "your" : "[target]'s"] body type.</span>")
return
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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))
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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("<span class='warning'>[A] has attempted to hit [D] with a [atk_verb]!</span>")
+3 -3
View File
@@ -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("<span class='danger'>[A] has weakened [D]!!</span>", \
"<span class='userdanger'>[A] has weakened [D]!</span>")
D.apply_effect(4, WEAKEN, armor_block)
+1 -1
View File
@@ -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("<span class='warning'>[A] swings invisible nunchcuks at [D]..and misses?</span>")
@@ -116,7 +116,7 @@
switch(random)
if(1)
to_chat(user, "<span class='danger'>Your flesh begins to melt! Miraculously, you seem fine otherwise.</span>")
H.set_species("Skeleton")
H.set_species(/datum/species/skeleton)
if(2)
to_chat(user, "<span class='danger'>Power courses through you! You can now shift your form at will.")
if(user.mind)
@@ -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)
@@ -111,7 +111,7 @@
return ..()
to_chat(H, "<span class='userdanger'>A terrible pain travels down your back as wings burst out!</span>")
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")
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
@@ -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
@@ -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))
+17 -17
View File
@@ -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 = "<B>[src]</B> 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 = "<B>[src]</B> 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 = "<B>[src]</B> stops wagging [p_their()] tail."
stop_tail_wagging(1)
else
@@ -431,11 +431,11 @@
message = "<B>[src]</B> 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 = "<B>[src]</B> makes a strong noise."
m_type = 2
@@ -479,7 +479,7 @@
m_type = 2
if("deathgasp", "deathgasps")
message = "<B>[src]</B> [replacetext(species.death_message, "their", p_their())]"
message = "<B>[src]</B> [replacetext(dna.species.death_message, "their", p_their())]"
m_type = 1
if("giggle", "giggles")
@@ -676,9 +676,9 @@
if(!muzzled)
message = "<B>[src]</B> 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 = "<B>[src]</B> makes a strange noise."
@@ -784,12 +784,12 @@
m_type = 1
else
if(!muzzled)
message = "<B>[src]</B> [species.scream_verb][M ? " at [M]" : ""]!"
message = "<B>[src]</B> [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 = "<B>[src]</B> 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
@@ -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 += "<span class='deadsay'>[p_they(TRUE)] [p_are()] appears to be [interestdebug] and [dodebug].</span>\n"
else if(species.show_ssd)
else if(dna.species.show_ssd)
if(!key)
msg += "<span class='deadsay'>[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.</span>\n"
else if(!client)
+100 -127
View File
@@ -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, "<span class='notice'>[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].</span>")
/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, "<span class='warning'>Where's your head at? Can't change your monitor/display without one.</span>")
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, "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>")
return 0
if(NOGUNS in species.species_traits)
if(NOGUNS in dna.species.species_traits)
to_chat(src, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
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
@@ -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()
@@ -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("<span class='danger'>[message]</span>", "<span class='userdanger'>[message]</span>")
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))
@@ -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)
@@ -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())
@@ -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)
@@ -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
+36 -36
View File
@@ -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
@@ -1,7 +1,7 @@
/mob/living/carbon/human/Login()
..()
if(species && species.ventcrawler)
if(dna.species && dna.species.ventcrawler)
to_chat(src, "<span class='notice'>You can ventcrawl! Use alt+click on vents to quickly travel about the station.</span>")
update_pipe_vision()
return
+4 -4
View File
@@ -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
@@ -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()
@@ -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"
@@ -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, "<span class='warning'>They have no blood!</span>")
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("<span class='danger'>[user] [pick(attack.attack_verb)]ed [target]!</span>")
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("<span class='danger'>[user] has weakened [target]!</span>", \
"<span class='userdanger'>[user] has weakened [target]!</span>")
target.apply_effect(4, WEAKEN, armor_block)

Some files were not shown because too many files have changed in this diff Show More