mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-14 16:44:33 +01:00
AGHHHHHHHHHHHHHHHHHHH WHATTT
This commit is contained in:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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]")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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")
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user