AGHHHHHHHHHHHHHHHHHHH WHATTT

This commit is contained in:
Fox McCloud
2018-07-17 04:58:36 -04:00
parent 9c3fcaa53c
commit aae5405d03
140 changed files with 666 additions and 696 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
/mob/living/carbon/human/handle_autohiss(message, datum/language/L)
if(!client || client.prefs.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off
return message
return species.handle_autohiss(message, L, client.prefs.autohiss_mode)
return dna.species.handle_autohiss(message, L, client.prefs.autohiss_mode)
/client/verb/toggle_autohiss()
set name = "Toggle Auto-Accent"
+2 -2
View File
@@ -121,10 +121,10 @@
brainmob.dna = H.dna.Clone()
brainmob.container = src
if(!istype(H.species) || isnull(H.species.return_organ("brain"))) // Diona/buggy people
if(!istype(H.dna.species) || isnull(H.dna.species.return_organ("brain"))) // Diona/buggy people
held_brain = new(src)
else // We have a species, and it has a brain
var/brain_path = H.species.return_organ("brain")
var/brain_path = H.dna.species.return_organ("brain")
if(!ispath(brain_path, /obj/item/organ/internal/brain))
brain_path = /obj/item/organ/internal/brain
held_brain = new brain_path(src) // Slime people will keep their slimy brains this way
+1 -1
View File
@@ -382,7 +382,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(!ventcrawler)
if(ishuman(src))
var/mob/living/carbon/human/H = src
ventcrawlerlocal = H.species.ventcrawler
ventcrawlerlocal = H.dna.species.ventcrawler
if(!ventcrawlerlocal) return
@@ -3,20 +3,20 @@
AC.flags = flags
AC.ui_interact(user, state = state)
/mob/living/carbon/human/proc/change_species(var/new_species)
if(!new_species || species == new_species || !(new_species in all_species))
return
/mob/living/carbon/human/proc/change_species(datum/species/new_species)
if(!new_species || dna.species.type == new_species || !(initial(new_species.name) in all_species))
return FALSE
set_species(new_species, null, 1)
set_species(new_species, null, TRUE)
reset_hair()
if(species.bodyflags & HAS_MARKINGS)
if(dna.species.bodyflags & HAS_MARKINGS)
reset_markings()
return 1
return TRUE
/mob/living/carbon/human/proc/change_gender(var/new_gender, var/update_dna = 1)
var/obj/item/organ/external/head/H = bodyparts_by_name["head"]
if(gender == new_gender || (gender == PLURAL && species.has_gender))
if(gender == new_gender || (gender == PLURAL && dna.species.has_gender))
return
gender = new_gender
@@ -129,7 +129,7 @@
/mob/living/carbon/human/proc/change_alt_head(var/alternate_head)
var/obj/item/organ/external/head/H = get_organ("head")
if(!H || H.alt_head == alternate_head || H.is_robotic() || (!(species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list))
if(!H || H.alt_head == alternate_head || H.is_robotic() || (!(dna.species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list))
return
H.alt_head = alternate_head
@@ -296,7 +296,7 @@
/mob/living/carbon/human/proc/change_skin_color(var/colour = "#000000")
if(colour == skin_colour || !(species.bodyflags & HAS_SKIN_COLOR))
if(colour == skin_colour || !(dna.species.bodyflags & HAS_SKIN_COLOR))
return
skin_colour = colour
@@ -306,7 +306,7 @@
return 1
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
if(s_tone == tone || !((species.bodyflags & HAS_SKIN_TONE) || (species.bodyflags & HAS_ICON_SKIN_TONE)))
if(s_tone == tone || !((dna.species.bodyflags & HAS_SKIN_TONE) || (dna.species.bodyflags & HAS_ICON_SKIN_TONE)))
return
s_tone = tone
@@ -350,16 +350,16 @@
continue
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
continue
if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
else
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */
valid_hairstyles += hairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
valid_hairstyles += hairstyle
return valid_hairstyles
@@ -378,17 +378,17 @@
continue
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
continue
if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(H.dna.species2.name in S.species_allowed) //If this is a facial hair style native to the user's species...
if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do.
else
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */
valid_facial_hairstyles += facialhairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
valid_facial_hairstyles += facialhairstyle
return valid_facial_hairstyles
@@ -402,7 +402,7 @@
for(var/head_accessory in head_accessory_styles_list)
var/datum/sprite_accessory/S = head_accessory_styles_list[head_accessory]
if(!(H.dna.species2.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list.
if(!(H.dna.species.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list.
continue
valid_head_accessories += head_accessory
@@ -421,7 +421,7 @@
continue
if(S.marking_location != location) //If the marking isn't for the location we desire, skip.
continue
if(!(species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list.
if(!(dna.species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list.
continue
if(location == "tail")
if(!body_accessory)
@@ -432,7 +432,7 @@
continue
if(location == "head")
var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[S.name]
if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head...
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head.
continue
@@ -456,7 +456,7 @@
if(!istype(A))
valid_body_accessories["None"] = "None" //The only null entry should be the "None" option.
continue
if(species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
if(dna.species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
valid_body_accessories += B
return valid_body_accessories
@@ -469,7 +469,7 @@
valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option, and there should always be a "None" option.
for(var/alternate_head in alt_heads_list)
var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head]
if(!(H.dna.species2.name in head.species_allowed))
if(!(H.dna.species.name in head.species_allowed))
continue
valid_alt_heads += alternate_head
@@ -62,7 +62,7 @@
animation.master = src
flick("dust-h", animation)
new species.remains_type(get_turf(src))
new dna.species.remains_type(get_turf(src))
spawn(15)
if(animation) qdel(animation)
@@ -103,8 +103,8 @@
set_heartattack(FALSE)
//Handle species-specific deaths.
if(species)
species.handle_death(src)
if(dna.species)
dna.species.handle_death(src)
callHook("death", list(src, gibbed))
+17 -17
View File
@@ -29,7 +29,7 @@
switch(act)
//Cooldown-inducing emotes
if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no", "buzz2")
if(species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise.
if(dna.species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
else //Everyone else fails, skip the emote attempt
return
@@ -56,7 +56,7 @@
found_slime_bodypart = 1
else
for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too!
if(istype(L.dna.species2, /datum/species/slime))
if(istype(L.dna.species, /datum/species/slime))
on_CD = handle_emote_CD()
found_slime_bodypart = 1
break
@@ -225,7 +225,7 @@
message = "<B>[src]</B> starts wagging [p_their()] tail."
start_tail_wagging(1)
else if(species.bodyflags & TAIL_WAGGING)
else if(dna.species.bodyflags & TAIL_WAGGING)
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
message = "<B>[src]</B> starts wagging [p_their()] tail."
start_tail_wagging(1)
@@ -236,7 +236,7 @@
m_type = 1
if("swag", "swags")
if(species.bodyflags & TAIL_WAGGING || body_accessory)
if(dna.species.bodyflags & TAIL_WAGGING || body_accessory)
message = "<B>[src]</B> stops wagging [p_their()] tail."
stop_tail_wagging(1)
else
@@ -431,11 +431,11 @@
message = "<B>[src]</B> coughs!"
m_type = 2
if(gender == FEMALE)
if(species.female_cough_sounds)
playsound(src, pick(species.female_cough_sounds), 120)
if(dna.species.female_cough_sounds)
playsound(src, pick(dna.species.female_cough_sounds), 120)
else
if(species.male_cough_sounds)
playsound(src, pick(species.male_cough_sounds), 120)
if(dna.species.male_cough_sounds)
playsound(src, pick(dna.species.male_cough_sounds), 120)
else
message = "<B>[src]</B> makes a strong noise."
m_type = 2
@@ -479,7 +479,7 @@
m_type = 2
if("deathgasp", "deathgasps")
message = "<B>[src]</B> [replacetext(species.death_message, "their", p_their())]"
message = "<B>[src]</B> [replacetext(dna.species.death_message, "their", p_their())]"
m_type = 1
if("giggle", "giggles")
@@ -676,9 +676,9 @@
if(!muzzled)
message = "<B>[src]</B> sneezes."
if(gender == FEMALE)
playsound(src, species.female_sneeze_sound, 70)
playsound(src, dna.species.female_sneeze_sound, 70)
else
playsound(src, species.male_sneeze_sound, 70)
playsound(src, dna.species.male_sneeze_sound, 70)
m_type = 2
else
message = "<B>[src]</B> makes a strange noise."
@@ -784,12 +784,12 @@
m_type = 1
else
if(!muzzled)
message = "<B>[src]</B> [species.scream_verb][M ? " at [M]" : ""]!"
message = "<B>[src]</B> [dna.species.scream_verb][M ? " at [M]" : ""]!"
m_type = 2
if(gender == FEMALE)
playsound(loc, "[species.female_scream_sound]", 80, 1, frequency = get_age_pitch())
playsound(loc, "[dna.species.female_scream_sound]", 80, 1, frequency = get_age_pitch())
else
playsound(loc, "[species.male_scream_sound]", 80, 1, frequency = get_age_pitch()) //default to male screams if no gender is present.
playsound(loc, "[dna.species.male_scream_sound]", 80, 1, frequency = get_age_pitch()) //default to male screams if no gender is present.
else
message = "<B>[src]</B> makes a very loud noise[M ? " at [M]" : ""]."
@@ -890,7 +890,7 @@
+ " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \
+ " wag(s), wave(s), whimper(s), wink(s), yawn(s), quill(s)"
switch(species.name)
switch(dna.species.name)
if("Machine")
emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
if("Drask")
@@ -906,11 +906,11 @@
if("Diona")
emotelist += "\nDiona specific emotes :- creak(s)"
if (species.name == "Slime People")
if (dna.species.name == "Slime People")
emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob"
else
for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too!
if(istype(L.dna.species2, /datum/species/slime))
if(istype(L.dna.species, /datum/species/slime))
emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob"
break
@@ -199,9 +199,9 @@
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
for(var/organ_tag in species.has_limbs)
for(var/organ_tag in dna.species.has_limbs)
var/list/organ_data = species.has_limbs[organ_tag]
var/list/organ_data = dna.species.has_limbs[organ_tag]
var/organ_descriptor = organ_data["descriptor"]
is_destroyed["[organ_data["descriptor"]]"] = 1
@@ -324,7 +324,7 @@
var/dodebug = auto.doing2string(auto.doing)
var/interestdebug = auto.interest2string(auto.interest)
msg += "<span class='deadsay'>[p_they(TRUE)] [p_are()] appears to be [interestdebug] and [dodebug].</span>\n"
else if(species.show_ssd)
else if(dna.species.show_ssd)
if(!key)
msg += "<span class='deadsay'>[p_they(TRUE)] [p_are()] totally catatonic. The stresses of life in deep-space must have been too much for [p_them()]. Any recovery is unlikely.</span>\n"
else if(!client)
+100 -127
View File
@@ -4,10 +4,6 @@
voice_name = "unknown"
icon = 'icons/mob/human.dmi'
icon_state = "body_m_s"
//why are these here and not in human_defines.dm
//var/list/hud_list[10]
var/datum/species/species //Contains icon generation and language information, set during New().
var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
/mob/living/carbon/human/New(loc)
@@ -15,21 +11,17 @@
log_runtime(EXCEPTION("human/New called with more than 1 argument (REPORT THIS ENTIRE RUNTIME TO A CODER)"))
. = ..()
/mob/living/carbon/human/Initialize(mapload, new_species = null)
/mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human)
if(!dna)
dna = new /datum/dna(null)
// Species name is handled by set_species()
if(!species)
if(new_species)
set_species(new_species, 1, delay_icon_update = 1)
else
set_species(delay_icon_update = 1)
set_species(new_species, 1, delay_icon_update = 1)
..()
if(species)
real_name = species.get_random_name(gender)
if(dna.species)
real_name = dna.species.get_random_name(gender)
name = real_name
if(mind)
mind.name = real_name
@@ -74,49 +66,46 @@
status_flags = GODMODE|CANPUSH
/mob/living/carbon/human/skrell/Initialize(mapload)
..(mapload, "Skrell")
..(mapload, /datum/species/skrell)
/mob/living/carbon/human/tajaran/Initialize(mapload)
..(mapload, "Tajaran")
..(mapload, /datum/species/tajaran)
/mob/living/carbon/human/vulpkanin/Initialize(mapload)
..(mapload, "Vulpkanin")
..(mapload, /datum/species/vulpkanin)
/mob/living/carbon/human/unathi/Initialize(mapload)
..(mapload, "Unathi")
..(mapload, /datum/species/unathi)
/mob/living/carbon/human/vox/Initialize(mapload)
..(mapload, "Vox")
..(mapload, /datum/species/vox)
/mob/living/carbon/human/voxarmalis/Initialize(mapload)
..(mapload, "Vox Armalis")
..(mapload, /datum/species/vox/armalis)
/mob/living/carbon/human/skeleton/Initialize(mapload)
..(mapload, "Skeleton")
..(mapload, /datum/species/skeleton)
/mob/living/carbon/human/kidan/Initialize(mapload)
..(mapload, "Kidan")
..(mapload, /datum/species/kidan)
/mob/living/carbon/human/plasma/Initialize(mapload)
..(mapload, "Plasmaman")
..(mapload, /datum/species/plasmaman)
/mob/living/carbon/human/slime/Initialize(mapload)
..(mapload, "Slime People")
..(mapload, /datum/species/slime)
/mob/living/carbon/human/grey/Initialize(mapload)
..(mapload, "Grey")
..(mapload, /datum/species/grey)
/mob/living/carbon/human/abductor/Initialize(mapload)
..(mapload, "Abductor")
/mob/living/carbon/human/human/Initialize(mapload)
..(mapload, "Human")
..(mapload, /datum/species/abductor)
/mob/living/carbon/human/diona/Initialize(mapload)
..(mapload, "Diona")
..(mapload, /datum/species/diona)
/mob/living/carbon/human/machine/Initialize(mapload)
..(mapload, "Machine")
..(mapload, /datum/species/machine)
/mob/living/carbon/human/machine/created
name = "Integrated Robotic Chassis"
@@ -133,34 +122,34 @@
qdel(O)
/mob/living/carbon/human/shadow/Initialize(mapload)
..(mapload, "Shadow")
..(mapload, /datum/species/shadow)
/mob/living/carbon/human/golem/Initialize(mapload)
..(mapload, "Golem")
..(mapload, /datum/species/golem)
/mob/living/carbon/human/wryn/Initialize(mapload)
..(mapload, "Wryn")
..(mapload, /datum/species/wryn)
/mob/living/carbon/human/nucleation/Initialize(mapload)
..(mapload, "Nucleation")
..(mapload, /datum/species/nucleation)
/mob/living/carbon/human/drask/Initialize(mapload)
..(mapload, "Drask")
..(mapload, /datum/species/drask)
/mob/living/carbon/human/monkey/Initialize(mapload)
..(mapload, "Monkey")
..(mapload, /datum/species/monkey)
/mob/living/carbon/human/farwa/Initialize(mapload)
..(mapload, "Farwa")
..(mapload, /datum/species/monkey/tajaran)
/mob/living/carbon/human/wolpin/Initialize(mapload)
..(mapload, "Wolpin")
..(mapload, /datum/species/monkey/vulpkanin)
/mob/living/carbon/human/neara/Initialize(mapload)
..(mapload, "Neara")
..(mapload, /datum/species/monkey/skrell)
/mob/living/carbon/human/stok/Initialize(mapload)
..(mapload, "Stok")
..(mapload, /datum/species/monkey/unathi)
/mob/living/carbon/human/Stat()
..()
@@ -564,7 +553,7 @@
grant_death_vision()
return
species.update_sight(src)
dna.species.update_sight(src)
//Removed the horrible safety parameter. It was only being used by ninja code anyways.
//Now checks siemens_coefficient of the affected area by default
@@ -594,8 +583,8 @@
if(gloves)
var/obj/item/clothing/gloves/G = gloves
gloves_siemens_coeff = G.siemens_coefficient
if(species)
species_siemens_coeff = species.siemens_coeff
if(dna.species)
species_siemens_coeff = dna.species.siemens_coeff
siemens_coeff = gloves_siemens_coeff * species_siemens_coeff
if(undergoing_cardiac_arrest())
if(shock_damage * siemens_coeff >= 1 && prob(25))
@@ -1049,11 +1038,7 @@
return
/mob/living/carbon/human/get_species()
if(!species)
set_species()
return species.name
return dna.species.name
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
@@ -1154,9 +1139,9 @@
//Replacing lost limbs with the species default.
var/mob/living/carbon/human/temp_holder
for(var/limb_type in H.species.has_limbs)
for(var/limb_type in H.dna.species.has_limbs)
if(!(limb_type in H.bodyparts_by_name))
var/list/organ_data = H.species.has_limbs[limb_type]
var/list/organ_data = H.dna.species.has_limbs[limb_type]
var/limb_path = organ_data["path"]
var/obj/item/organ/external/O = new limb_path(temp_holder)
if(H.get_limb_by_name(O.name)) //Check to see if the user already has an limb with the same name as the 'missing limb'. If they do, skip regrowth.
@@ -1169,8 +1154,8 @@
//Replacing lost organs with the species default.
temp_holder = new /mob/living/carbon/human()
for(var/index in H.species.has_organ)
var/organ = H.species.has_organ[index]
for(var/index in H.dna.species.has_organ)
var/organ = H.dna.species.has_organ[index]
if(!(organ in types_of_int_organs)) //If the mob is missing this particular organ...
var/obj/item/organ/internal/I = new organ(temp_holder) //Create the organ inside our holder so we can check it before implantation.
if(H.get_organ_slot(I.slot)) //Check to see if the user already has an organ in the slot the 'missing organ' belongs to. If they do, skip implantation.
@@ -1187,7 +1172,7 @@
surgeries.Cut() //End all surgeries.
update_revive()
if(species.name != "Skeleton" && (SKELETON in mutations))
if(dna.species.name != "Skeleton" && (SKELETON in mutations))
mutations.Remove(SKELETON)
if(NOCLONE in mutations)
mutations.Remove(NOCLONE)
@@ -1250,7 +1235,7 @@
..()
/mob/living/carbon/human/generate_name()
name = species.makeName(gender,src)
name = dna.species.makeName(gender,src)
real_name = name
if(dna)
dna.real_name = name
@@ -1289,88 +1274,79 @@
else
to_chat(usr, "<span class='notice'>[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].</span>")
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/delay_icon_update = 0)
var/datum/species/oldspecies = species
var/datum/species/NS = all_species[new_species]
if(!dna)
if(!new_species)
new_species = "Human"
else
if(!new_species)
new_species = dna.species2
else
dna.species2 = new_species
/mob/living/carbon/human/proc/set_species(datum/species/new_species, default_colour, delay_icon_update = FALSE)
if(new_species == dna.species.type)
return
if(species)
if(species.name && species.name == new_species)
return
if(species.language)
remove_language(species.language)
if(species.default_language)
remove_language(species.default_language)
if(gender == PLURAL && NS.has_gender)
change_gender(pick(MALE,FEMALE))
species.handle_pre_change(src)
species = all_species[new_species]
var/datum/species/oldspecies = dna.species
if(oldspecies)
if(oldspecies.language)
remove_language(oldspecies.language)
if(oldspecies.default_language)
remove_language(oldspecies.default_language)
if(gender == PLURAL && oldspecies.has_gender)
change_gender(pick(MALE, FEMALE))
if(oldspecies.default_genes.len)
oldspecies.handle_dna(src,1) // Remove any genes that belong to the old species
oldspecies.handle_dna(src, TRUE) // Remove any genes that belong to the old species
tail = species.tail
oldspecies.handle_pre_change(src)
maxHealth = species.total_health
dna.species = new new_species.type
if(species.language)
add_language(species.language)
tail = dna.species.tail
if(species.default_language)
add_language(species.default_language)
maxHealth = dna.species.total_health
hunger_drain = species.hunger_drain
digestion_ratio = species.digestion_ratio
if(dna.species.language)
add_language(dna.species.language)
if(species.base_color && default_colour)
if(dna.species.default_language)
add_language(dna.species.default_language)
hunger_drain = dna.species.hunger_drain
digestion_ratio = dna.species.digestion_ratio
if(dna.species.base_color && default_colour)
//Apply colour.
skin_colour = species.base_color
skin_colour = dna.species.base_color
else
skin_colour = "#000000"
if(!(species.bodyflags & HAS_SKIN_TONE))
if(!(dna.species.bodyflags & HAS_SKIN_TONE))
s_tone = 0
species.create_organs(src)
dna.species.create_organs(src)
//Handle default hair/head accessories for created mobs.
var/obj/item/organ/external/head/H = get_organ("head")
if(species.default_hair)
H.h_style = species.default_hair
if(dna.species.default_hair)
H.h_style = dna.species.default_hair
else
H.h_style = "Bald"
if(species.default_fhair)
H.f_style = species.default_fhair
if(dna.species.default_fhair)
H.f_style = dna.species.default_fhair
else
H.f_style = "Shaved"
if(species.default_headacc)
H.ha_style = species.default_headacc
if(dna.species.default_headacc)
H.ha_style = dna.species.default_headacc
else
H.ha_style = "None"
if(species.default_hair_colour)
if(dna.species.default_hair_colour)
//Apply colour.
H.hair_colour = species.default_hair_colour
H.hair_colour = dna.species.default_hair_colour
else
H.hair_colour = "#000000"
if(species.default_fhair_colour)
H.facial_colour = species.default_fhair_colour
if(dna.species.default_fhair_colour)
H.facial_colour = dna.species.default_fhair_colour
else
H.facial_colour = "#000000"
if(species.default_headacc_colour)
H.headacc_colour = species.default_headacc_colour
if(dna.species.default_headacc_colour)
H.headacc_colour = dna.species.default_headacc_colour
else
H.headacc_colour = "#000000"
@@ -1378,20 +1354,17 @@
m_colours = DEFAULT_MARKING_COLOURS //Defaults colour to #00000 for all markings.
body_accessory = null
if(!dna)
dna = new /datum/dna(null)
dna.species2 = species.name
dna.real_name = real_name
dna.real_name = real_name
species.handle_post_spawn(src)
dna.species.handle_post_spawn(src)
see_in_dark = species.get_resultant_darksight(src)
see_in_dark = dna.species.get_resultant_darksight(src)
if(see_in_dark > 2)
see_invisible = SEE_INVISIBLE_LEVEL_ONE
else
see_invisible = SEE_INVISIBLE_LIVING
species.handle_dna(src) //Give them whatever special dna business they got.
dna.species.handle_dna(src) //Give them whatever special dna business they got.
update_client_colour(0)
@@ -1403,18 +1376,18 @@
if(!delay_icon_update)
UpdateAppearance()
if(species)
return 1
if(dna.species)
return TRUE
else
return 0
return FALSE
/mob/living/carbon/human/get_default_language()
if(default_language)
return default_language
if(!species)
if(!dna.species)
return null
return species.default_language ? all_languages[species.default_language] : null
return dna.species.default_language ? all_languages[dna.species.default_language] : null
/mob/living/carbon/human/proc/bloody_doodle()
set category = "IC"
@@ -1481,7 +1454,7 @@
to_chat(src, "<span class='warning'>Where's your head at? Can't change your monitor/display without one.</span>")
return
if(species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body...
if(dna.species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body...
var/datum/robolimb/robohead = all_robolimbs[head_organ.model]
if(!head_organ)
return
@@ -1497,7 +1470,7 @@
var/list/hair = list()
for(var/i in hair_styles_public_list)
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i]
if((head_organ.dna.species2.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
if((head_organ.dna.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
hair += i
var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
@@ -1585,8 +1558,8 @@
/mob/living/carbon/human/proc/get_eyecon()
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
if(istype(species) && species.eyes)
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
if(istype(dna.species) && dna.species.eyes)
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', dna.species.eyes)
if(eye_implant) //Eye implants override native DNA eye colo(u)r
eyes_icon = eye_implant.generate_icon()
else if(eyes)
@@ -1792,7 +1765,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
/mob/living/carbon/human/IsAdvancedToolUser()
if(species.has_fine_manipulation)
if(dna.species.has_fine_manipulation)
return 1
return 0
@@ -1827,7 +1800,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
return 1
/mob/living/carbon/human/can_eat(flags = 255)
return species && (species.dietflags & flags)
return dna.species && (dna.species.dietflags & flags)
/mob/living/carbon/human/selfFeed(var/obj/item/reagent_containers/food/toEat, fullness)
if(!check_has_mouth())
@@ -1888,7 +1861,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
. |= A.GetAccess()
/mob/living/carbon/human/is_mechanical()
return ..() || (species.bodyflags & ALL_RPARTS) != 0
return ..() || (dna.species.bodyflags & ALL_RPARTS) != 0
/mob/living/carbon/human/can_use_guns(var/obj/item/gun/G)
. = ..()
@@ -1897,7 +1870,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
if(HULK in mutations)
to_chat(src, "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>")
return 0
if(NOGUNS in species.species_traits)
if(NOGUNS in dna.species.species_traits)
to_chat(src, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
return 0
@@ -1964,7 +1937,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
dna.deserialize(data["dna"])
real_name = dna.real_name
name = real_name
set_species(dna.species2)
set_species(dna.species)
age = data["age"]
undershirt = data["ushirt"]
underwear = data["uwear"]
@@ -2026,8 +1999,8 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
. += "---"
/mob/living/carbon/human/get_taste_sensitivity()
if(species)
return species.taste_sensitivity
if(dna.species)
return dna.species.taste_sensitivity
else
return 1
@@ -17,7 +17,7 @@
//TODO: fix husking
if(((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD)
ChangeToHusk()
if(species.can_revive_by_healing)
if(dna.species.can_revive_by_healing)
var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain)
if(B)
if((health >= (config.health_threshold_dead + config.health_threshold_crit) * 0.5) && stat == DEAD && getBrainLoss()<120)
@@ -32,11 +32,11 @@
if(status_flags & GODMODE)
return 0 //godmode
if(species && species.has_organ["brain"])
if(dna.species && dna.species.has_organ["brain"])
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
if(species)
amount = amount * species.brain_mod
if(dna.species)
amount = amount * dna.species.brain_mod
sponge.receive_damage(amount, 1)
brainloss = sponge.damage
else
@@ -48,11 +48,11 @@
if(status_flags & GODMODE)
return 0 //godmode
if(species && species.has_organ["brain"])
if(dna.species && dna.species.has_organ["brain"])
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
if(species)
amount = amount * species.brain_mod
if(dna.species)
amount = amount * dna.species.brain_mod
sponge.damage = min(max(amount, 0), (maxHealth*2))
brainloss = sponge.damage
else
@@ -64,7 +64,7 @@
if(status_flags & GODMODE)
return 0 //godmode
if(species && species.has_organ["brain"])
if(dna.species && dna.species.has_organ["brain"])
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
brainloss = min(sponge.damage,maxHealth*2)
@@ -89,24 +89,24 @@
/mob/living/carbon/human/adjustBruteLoss(amount, damage_source)
if(species)
amount = amount * species.brute_mod
if(dna.species)
amount = amount * dna.species.brute_mod
if(amount > 0)
take_overall_damage(amount, 0, used_weapon = damage_source)
else
heal_overall_damage(-amount, 0)
/mob/living/carbon/human/adjustFireLoss(amount, damage_source)
if(species)
amount = amount * species.burn_mod
if(dna.species)
amount = amount * dna.species.burn_mod
if(amount > 0)
take_overall_damage(0, amount, used_weapon = damage_source)
else
heal_overall_damage(0, -amount)
/mob/living/carbon/human/proc/adjustBruteLossByPart(amount, organ_name, obj/damage_source = null)
if(species)
amount = amount * species.brute_mod
if(dna.species)
amount = amount * dna.species.brute_mod
if(organ_name in bodyparts_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -119,8 +119,8 @@
/mob/living/carbon/human/proc/adjustFireLossByPart(amount, organ_name, obj/damage_source = null)
if(species)
amount = amount * species.burn_mod
if(dna.species)
amount = amount * dna.species.burn_mod
if(organ_name in bodyparts_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -139,8 +139,8 @@
..()
/mob/living/carbon/human/adjustCloneLoss(amount)
if(species)
amount = amount * species.clone_mod
if(dna.species)
amount = amount * dna.species.clone_mod
..()
var/heal_prob = max(0, 80 - getCloneLoss())
@@ -179,23 +179,23 @@
// Defined here solely to take species flags into account without having to recast at mob/living level.
/mob/living/carbon/human/adjustOxyLoss(amount)
if(species)
amount = amount * species.oxy_mod
if(dna.species)
amount = amount * dna.species.oxy_mod
..()
/mob/living/carbon/human/setOxyLoss(amount)
if(species)
amount = amount * species.oxy_mod
if(dna.species)
amount = amount * dna.species.oxy_mod
..()
/mob/living/carbon/human/adjustToxLoss(amount)
if(species)
amount = amount * species.tox_mod
if(dna.species)
amount = amount * dna.species.tox_mod
..()
/mob/living/carbon/human/setToxLoss(amount)
if(species)
amount = amount * species.tox_mod
if(dna.species)
amount = amount * dna.species.tox_mod
..()
////////////////////////////////////////////
@@ -352,8 +352,8 @@ This function restores all organs.
switch(damagetype)
if(BRUTE)
damageoverlaytemp = 20
if(species)
damage = damage * species.brute_mod
if(dna.species)
damage = damage * dna.species.brute_mod
if(organ.receive_damage(damage, 0, sharp, used_weapon))
UpdateDamageIcon()
@@ -376,8 +376,8 @@ This function restores all organs.
if(BURN)
damageoverlaytemp = 20
if(species)
damage = damage * species.burn_mod
if(dna.species)
damage = damage * dna.species.burn_mod
if(organ.receive_damage(0, damage, sharp, used_weapon))
UpdateDamageIcon()
@@ -354,7 +354,7 @@ emp_act
if(check_shields(user, 15, "the [hulk_verb]ing"))
return
..(user, TRUE)
playsound(loc, user.species.unarmed.attack_sound, 25, 1, -1)
playsound(loc, user.dna.species.unarmed.attack_sound, 25, 1, -1)
var/message = "[user] has [hulk_verb]ed [src]!"
visible_message("<span class='danger'>[message]</span>", "<span class='userdanger'>[message]</span>")
adjustBruteLoss(15)
@@ -365,7 +365,7 @@ emp_act
return
if(ishuman(user))
var/mob/living/carbon/human/H = user
species.spec_attack_hand(H, src)
dna.species.spec_attack_hand(H, src)
/mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L)
if(..()) //successful larva bite.
@@ -494,7 +494,7 @@ emp_act
/mob/living/carbon/human/water_act(volume, temperature, source)
..()
species.water_act(src,volume,temperature,source)
dna.species.water_act(src,volume,temperature,source)
/mob/living/carbon/human/is_eyes_covered(check_glasses = TRUE, check_head = TRUE, check_mask = TRUE)
if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES))
@@ -2,7 +2,7 @@
. = 0
. += ..()
. += config.human_delay
. += species.movement_delay(src)
. += dna.species.movement_delay(src)
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0)
@@ -39,12 +39,12 @@
if(!lying && !buckled && !throwing)
for(var/obj/item/organ/external/splinted in splinted_limbs)
splinted.update_splints()
if(!has_gravity(loc))
return
var/obj/item/clothing/shoes/S = shoes
//Bloody footprints
var/turf/T = get_turf(src)
var/obj/item/organ/external/l_foot = get_organ("l_foot")
@@ -119,7 +119,7 @@
if(step_count % 3) //this basically says, every three moves make a noise
return 0 //1st - none, 1%3==1, 2nd - none, 2%3==2, 3rd - noise, 3%3==0
if(species.silent_steps)
if(dna.species.silent_steps)
return 0 //species is silent
playsound(T, S, volume, 1, range)
@@ -62,7 +62,7 @@
// standing is poor
if(stance_damage >= 8)
if(!(lying || resting))
if(!(NO_PAIN in species.species_traits))
if(!(NO_PAIN in dna.species.species_traits))
emote("scream")
custom_emote(1, "collapses!")
Weaken(5) //can't emote while weakened, apparently.
@@ -90,7 +90,7 @@
continue
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
custom_emote(1, "[(NO_PAIN in species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!")
custom_emote(1, "[(NO_PAIN in dna.species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!")
else if(E.is_malfunctioning())
@@ -128,7 +128,7 @@
//this is here because this has no client/prefs/brain whatever.
age = rand(AGE_MIN, AGE_MAX)
change_gender(pick("male", "female"))
rename_character(real_name, species.get_random_name(gender))
rename_character(real_name, dna.species.get_random_name(gender))
//job handling
myjob = new default_job()
job = myjob.title
@@ -208,9 +208,9 @@
var/datum/dna/toDoppel = chosen.dna
T.real_name = toDoppel.real_name
T.set_species(chosen.species.name)
T.body_accessory = chosen.body_accessory
T.dna = toDoppel.Clone()
T.set_species(chosen.dna.species)
T.body_accessory = chosen.body_accessory
T.UpdateAppearance()
domutcheck(T)
@@ -419,7 +419,7 @@
..(what, who, where, silent = is_silent)
/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0)
switch(species.handle_can_equip(I, slot, disable_warning, src))
switch(dna.species.handle_can_equip(I, slot, disable_warning, src))
if(1) return 1
if(2) return 0 //if it returns 2, it wants no normal handling
+36 -36
View File
@@ -15,10 +15,10 @@
handle_heartbeat()
handle_heartattack()
handle_drunk()
species.handle_life(src)
dna.species.handle_life(src)
if(!client)
species.handle_npc(src)
dna.species.handle_npc(src)
if(stat != DEAD)
//Stuff jammed in your limbs hurts
@@ -178,7 +178,7 @@
if(gene_stability < GENETIC_DAMAGE_STAGE_3)
gib()
if(!(RADIMMUNE in species.species_traits))
if(!(RADIMMUNE in dna.species.species_traits))
if(radiation)
radiation = Clamp(radiation, 0, 200)
@@ -238,7 +238,7 @@
chest.add_autopsy_data("Radiation Poisoning", autopsy_damage)
/mob/living/carbon/human/breathe()
if(!species.breathe(src))
if(!dna.species.breathe(src))
..()
/mob/living/carbon/human/check_breath(datum/gas_mixture/breath)
@@ -253,8 +253,8 @@
failed_last_breath = TRUE
if(species)
var/datum/species/S = species
if(dna.species)
var/datum/species/S = dna.species
if(S.breathid == "o2")
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
@@ -332,39 +332,39 @@
bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX)
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(bodytemperature > species.heat_level_1)
if(bodytemperature > dna.species.heat_level_1)
//Body temperature is too hot.
if(status_flags & GODMODE) return 1 //godmode
var/mult = species.heatmod
var/mult = dna.species.heatmod
if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2)
if(bodytemperature >= dna.species.heat_level_1 && bodytemperature <= dna.species.heat_level_2)
throw_alert("temp", /obj/screen/alert/hot, 1)
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3)
if(bodytemperature > dna.species.heat_level_2 && bodytemperature <= dna.species.heat_level_3)
throw_alert("temp", /obj/screen/alert/hot, 2)
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY)
if(bodytemperature > dna.species.heat_level_3 && bodytemperature < INFINITY)
throw_alert("temp", /obj/screen/alert/hot, 3)
if(on_fire)
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire")
else
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
else if(bodytemperature < species.cold_level_1)
else if(bodytemperature < dna.species.cold_level_1)
if(status_flags & GODMODE)
return 1
if(stat == DEAD)
return 1
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
var/mult = species.coldmod
if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1)
var/mult = dna.species.coldmod
if(bodytemperature >= dna.species.cold_level_2 && bodytemperature <= dna.species.cold_level_1)
throw_alert("temp", /obj/screen/alert/cold, 1)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2)
if(bodytemperature >= dna.species.cold_level_3 && bodytemperature < dna.species.cold_level_2)
throw_alert("temp", /obj/screen/alert/cold, 2)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature")
if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3)
if(bodytemperature > -INFINITY && bodytemperature < dna.species.cold_level_3)
throw_alert("temp", /obj/screen/alert/cold, 3)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature")
else
@@ -379,18 +379,18 @@
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
if(status_flags & GODMODE) return 1 //godmode
if(adjusted_pressure >= species.hazard_high_pressure)
if(adjusted_pressure >= dna.species.hazard_high_pressure)
if(!(HEATRES in mutations))
var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE)
var/pressure_damage = min( ( (adjusted_pressure / dna.species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE)
take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure")
throw_alert("pressure", /obj/screen/alert/highpressure, 2)
else
clear_alert("pressure")
else if(adjusted_pressure >= species.warning_high_pressure)
else if(adjusted_pressure >= dna.species.warning_high_pressure)
throw_alert("pressure", /obj/screen/alert/highpressure, 1)
else if(adjusted_pressure >= species.warning_low_pressure)
else if(adjusted_pressure >= dna.species.warning_low_pressure)
clear_alert("pressure")
else if(adjusted_pressure >= species.hazard_low_pressure)
else if(adjusted_pressure >= dna.species.hazard_low_pressure)
throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
else
if(COLDRES in mutations)
@@ -430,13 +430,13 @@
//END FIRE CODE
/mob/living/carbon/human/proc/stabilize_temperature_from_calories()
var/body_temperature_difference = species.body_temperature - bodytemperature
var/body_temperature_difference = dna.species.body_temperature - bodytemperature
if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
if(bodytemperature <= dna.species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
bodytemperature += max((body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM)
if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1)
if(bodytemperature >= dna.species.cold_level_1 && bodytemperature <= dna.species.heat_level_1)
bodytemperature += body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR
if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
if(bodytemperature >= dna.species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
//We totally need a sweat system cause it totally makes sense...~
bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers
@@ -588,7 +588,7 @@
return 0 //godmode
//The fucking FAT mutation is the greatest shit ever. It makes everyone so hot and bothered.
if(CAN_BE_FAT in species.species_traits)
if(CAN_BE_FAT in dna.species.species_traits)
if(FAT in mutations)
if(overeatduration < 100)
becomeSlim()
@@ -652,7 +652,7 @@
AdjustDizzy(-3)
AdjustJitter(-3)
if(NO_INTORGANS in species.species_traits)
if(NO_INTORGANS in dna.species.species_traits)
return
handle_trace_chems()
@@ -766,10 +766,10 @@
//Vision //god knows why this is here
var/obj/item/organ/vision
if(species.vision_organ)
vision = get_int_organ(species.vision_organ)
if(dna.species.vision_organ)
vision = get_int_organ(dna.species.vision_organ)
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
if(!dna.species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
SetEyeBlind(0)
blinded = 0
SetEyeBlurry(0)
@@ -860,10 +860,10 @@
remoteview_target = null
reset_perspective(null)
species.handle_vision(src)
dna.species.handle_vision(src)
/mob/living/carbon/human/handle_hud_icons()
species.handle_hud_icons(src)
dna.species.handle_hud_icons(src)
/mob/living/carbon/human/handle_random_events()
// Puke if toxloss is too high
@@ -907,7 +907,7 @@
if(times_fired % 5 == 1)
return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load)
if(NO_BLOOD in species.species_traits)
if(NO_BLOOD in dna.species.species_traits)
return PULSE_NONE //No blood, no pulse.
if(stat == DEAD)
@@ -977,7 +977,7 @@
var/obj/item/clothing/mask/M = H.wear_mask
if(M && (M.flags_cover & MASKCOVERSMOUTH))
return
if(NO_BREATHE in H.species.species_traits)
if(NO_BREATHE in H.dna.species.species_traits)
return //no puking if you can't smell!
// Humans can lack a mind datum, y'know
if(H.mind && (H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Coroner"))
@@ -1054,9 +1054,9 @@
/mob/living/carbon/human/proc/can_heartattack()
if(NO_BLOOD in species.species_traits)
if(NO_BLOOD in dna.species.species_traits)
return FALSE
if(NO_INTORGANS in species.species_traits)
if(NO_INTORGANS in dna.species.species_traits)
return FALSE
return TRUE
@@ -1,7 +1,7 @@
/mob/living/carbon/human/Login()
..()
if(species && species.ventcrawler)
if(dna.species && dna.species.ventcrawler)
to_chat(src, "<span class='notice'>You can ventcrawl! Use alt+click on vents to quickly travel about the station.</span>")
update_pipe_vision()
return
+4 -4
View File
@@ -42,7 +42,7 @@
if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak.
return 1
if(species.can_understand(other))
if(dna.species.can_understand(other))
return 1
//These only pertain to common. Languages are handled by mob/say_understands()
@@ -87,7 +87,7 @@
/mob/living/carbon/human/IsVocal()
// how do species that don't breathe talk? magic, that's what.
var/breathes = (!(NO_BREATHE in species.species_traits))
var/breathes = (!(NO_BREATHE in dna.species.species_traits))
var/obj/item/organ/internal/L = get_organ_slot("lungs")
if((breathes && !L) || breathes && L && (L.status & ORGAN_DEAD))
return FALSE
@@ -219,8 +219,8 @@
/mob/living/carbon/human/handle_speech_sound()
var/list/returns[2]
if(species.speech_sounds && prob(species.speech_chance))
returns[1] = sound(pick(species.speech_sounds))
if(dna.species.speech_sounds && prob(dna.species.speech_chance))
returns[1] = sound(pick(dna.species.speech_sounds))
returns[2] = 50
return returns
@@ -23,7 +23,7 @@
/mob/living/carbon/human/proc/handle_shock()
if(status_flags & GODMODE) //godmode
return
if(NO_PAIN in species.species_traits)
if(NO_PAIN in dna.species.species_traits)
return
updateshock()
@@ -11,7 +11,7 @@
path = /mob/living/carbon/human/monkey
language = null
default_language = "Chimpanzee"
greater_form = "Human"
greater_form = /datum/species/human
is_small = 1
has_fine_manipulation = 0
ventcrawler = 1
@@ -99,7 +99,7 @@
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
greater_form = "Tajaran"
greater_form = /datum/species/tajaran
default_language = "Farwa"
flesh_color = "#AFA59E"
base_color = "#000000"
@@ -123,7 +123,7 @@
icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
deform = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
greater_form = "Vulpkanin"
greater_form = /datum/species/vulpkanin
default_language = "Wolpin"
flesh_color = "#966464"
base_color = "#000000"
@@ -147,7 +147,7 @@
icobase = 'icons/mob/human_races/monkeys/r_neara.dmi'
deform = 'icons/mob/human_races/monkeys/r_neara.dmi'
greater_form = "Skrell"
greater_form = /datum/species/skrell
default_language = "Neara"
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
@@ -162,7 +162,7 @@
deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
tail = "stoktail"
greater_form = "Unathi"
greater_form = /datum/species/unathi
default_language = "Stok"
flesh_color = "#34AF10"
base_color = "#000000"
@@ -334,7 +334,7 @@
/datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
//Vampire code
if(user.mind && user.mind.vampire && (user.mind in ticker.mode.vampires) && !user.mind.vampire.draining && user.zone_sel && user.zone_sel.selecting == "head" && target != user)
if((NO_BLOOD in target.species.species_traits) || target.species.exotic_blood || !target.blood_volume)
if((NO_BLOOD in target.dna.species.species_traits) || target.dna.species.exotic_blood || !target.blood_volume)
to_chat(user, "<span class='warning'>They have no blood!</span>")
return
if(target.mind && target.mind.vampire && (target.mind in ticker.mode.vampires))
@@ -354,7 +354,7 @@
if(attacker_style && attacker_style.harm_act(user, target))
return 1
else
var/datum/unarmed_attack/attack = user.species.unarmed
var/datum/unarmed_attack/attack = user.dna.species.unarmed
user.do_attack_animation(target, attack.animation_type)
add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL)
@@ -364,7 +364,7 @@
else
target.LAssailant = user
var/damage = rand(user.species.punchdamagelow, user.species.punchdamagehigh)
var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh)
damage += attack.damage
if(!damage)
playsound(target.loc, attack.miss_sound, 25, 1, -1)
@@ -380,7 +380,7 @@
target.visible_message("<span class='danger'>[user] [pick(attack.attack_verb)]ed [target]!</span>")
target.apply_damage(damage, BRUTE, affecting, armor_block, sharp = attack.sharp) //moving this back here means Armalis are going to knock you down 70% of the time, but they're pure adminbus anyway.
if((target.stat != DEAD) && damage >= user.species.punchstunthreshold)
if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold)
target.visible_message("<span class='danger'>[user] has weakened [target]!</span>", \
"<span class='userdanger'>[user] has weakened [target]!</span>")
target.apply_effect(4, WEAKEN, armor_block)
@@ -3,8 +3,8 @@
name_plural = "Humans"
icobase = 'icons/mob/human_races/r_human.dmi'
deform = 'icons/mob/human_races/r_def_human.dmi'
primitive_form = "Monkey"
path = /mob/living/carbon/human/human
primitive_form = /datum/species/monkey
path = /mob/living/carbon/human
language = "Sol Common"
species_traits = list(LIPS, CAN_BE_FAT)
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
@@ -29,7 +29,7 @@
language = "Sinta'unathi"
tail = "sogtail"
unarmed_type = /datum/unarmed_attack/claws
primitive_form = "Stok"
primitive_form = /datum/species/monkey/unathi
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
Uuosa-Eso system, which roughly translates to 'burning mother'.<br/><br/>Coming from a harsh, radioactive \
@@ -138,7 +138,7 @@
heat_level_2 = 380
heat_level_3 = 440
primitive_form = "Farwa"
primitive_form = /datum/species/monkey/tajaran
species_traits = list(LIPS, CAN_BE_FAT)
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
@@ -181,7 +181,7 @@
path = /mob/living/carbon/human/vulpkanin
default_language = "Galactic Common"
language = "Canilunzt"
primitive_form = "Wolpin"
primitive_form = /datum/species/monkey/vulpkanin
tail = "vulptail"
unarmed_type = /datum/unarmed_attack/claws
@@ -235,7 +235,7 @@
path = /mob/living/carbon/human/skrell
default_language = "Galactic Common"
language = "Skrellian"
primitive_form = "Neara"
primitive_form = /datum/species/monkey/skrell
blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
the royals' or 'Light of the Crown'.<br/><br/>Skrell are a highly advanced and logical race who live under the rule \
@@ -393,7 +393,7 @@
..()
/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H, var/owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race.
if(H.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis.
if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis.
var/new_icobase = 'icons/mob/human_races/vox/r_vox.dmi' //Default Green Vox.
var/new_deform = 'icons/mob/human_races/vox/r_def_vox.dmi' //Default Green Vox.
switch(H.s_tone)
@@ -617,7 +617,7 @@
if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller
for(var/organname in H.bodyparts_by_name)
var/obj/item/organ/external/E = H.bodyparts_by_name[organname]
if(istype(E) && E.dna && istype(E.dna.species2, /datum/species/slime))
if(istype(E) && E.dna && istype(E.dna.species, /datum/species/slime))
E.sync_colour_to_human(H)
H.update_hair(0)
H.update_body()
@@ -672,7 +672,7 @@
for(var/l in bodyparts_by_name)
var/obj/item/organ/external/E = bodyparts_by_name[l]
if(!istype(E))
var/list/limblist = species.has_limbs[l]
var/list/limblist = dna.species.has_limbs[l]
var/obj/item/organ/external/limb = limblist["path"]
var/parent_organ = initial(limb.parent_organ)
var/obj/item/organ/external/parentLimb = bodyparts_by_name[parent_organ]
@@ -708,7 +708,7 @@
stored_burn = doomedStump.burn_dam
qdel(O)
var/limb_list = species.has_limbs[chosen_limb]
var/limb_list = dna.species.has_limbs[chosen_limb]
var/obj/item/organ/external/limb_path = limb_list["path"]
// Parent check
var/obj/item/organ/external/potential_parent = bodyparts_by_name[initial(limb_path.parent_organ)]
@@ -1,19 +1,19 @@
/mob/living/carbon/human/SetStunned(amount, updating = 1, force = 0)
if(species)
amount = amount * species.stun_mod
if(dna.species)
amount = amount * dna.species.stun_mod
..()
/mob/living/carbon/human/SetWeakened(amount, updating = 1, force = 0)
if(species)
amount = amount * species.stun_mod
if(dna.species)
amount = amount * dna.species.stun_mod
..()
/mob/living/carbon/human/SetParalysis(amount, updating = 1, force = 0)
if(species)
amount = amount * species.stun_mod
if(dna.species)
amount = amount * dna.species.stun_mod
..()
/mob/living/carbon/human/SetSleeping(amount, updating = 1, no_alert = FALSE)
if(species)
amount = amount * species.stun_mod
if(dna.species)
amount = amount * dna.species.stun_mod
..()
@@ -185,7 +185,7 @@ var/global/list/damage_icon_parts = list()
previous_damage_appearance = damage_appearance
var/icon/standing = new /icon(species.damage_overlays, "00")
var/icon/standing = new /icon(dna.species.damage_overlays, "00")
var/image/standing_image = new /image("icon" = standing)
@@ -194,12 +194,12 @@ var/global/list/damage_icon_parts = list()
O.update_icon()
if(O.damage_state == "00") continue
var/icon/DI
var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]"
var/cache_index = "[O.damage_state]/[O.icon_name]/[dna.species.blood_color]/[dna.species.name]"
if(damage_icon_parts[cache_index] == null)
DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human
DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
DI.Blend(species.blood_color, ICON_MULTIPLY)
DI = new /icon(dna.species.damage_overlays, O.damage_state) // the damage icon for whole human
DI.Blend(new /icon(dna.species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
DI.Blend(dna.species.blood_color, ICON_MULTIPLY)
damage_icon_parts[cache_index] = DI
else
DI = damage_icon_parts[cache_index]
@@ -220,15 +220,15 @@ var/global/list/damage_icon_parts = list()
var/hulk = (HULK in mutations)
var/skeleton = (SKELETON in mutations)
if(species && species.bodyflags & HAS_ICON_SKIN_TONE)
species.updatespeciescolor(src)
if(dna.species && dna.species.bodyflags & HAS_ICON_SKIN_TONE)
dna.species.updatespeciescolor(src)
//CACHING: Generate an index key from visible bodyparts.
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
//Create a new, blank icon for our mob to use.
if(stand_icon)
qdel(stand_icon)
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
stand_icon = new(dna.species.icon_template ? dna.species.icon_template : 'icons/mob/human.dmi',"blank")
var/icon_key = ""
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
@@ -237,7 +237,7 @@ var/global/list/damage_icon_parts = list()
else
icon_key += "#000000"
for(var/organ_tag in species.has_limbs)
for(var/organ_tag in dna.species.has_limbs)
var/obj/item/organ/external/part = bodyparts_by_name[organ_tag]
if(isnull(part))
icon_key += "0"
@@ -249,7 +249,7 @@ var/global/list/damage_icon_parts = list()
icon_key += "1"
if(part)
icon_key += "[part.dna.species2.race_key]"
icon_key += "[part.dna.species.race_key]"
icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]"
icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]"
if(part.s_col)
@@ -307,7 +307,7 @@ var/global/list/damage_icon_parts = list()
//END CACHED ICON GENERATION.
stand_icon.Blend(base_icon,ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
overlays_standing[LIMBS_LAYER] = image(stand_icon) // Diverts limbs to their own layer so they can overlay things (i.e. tails).
else
overlays_standing[LIMBS_LAYER] = null // So we don't get the old species' sprite splatted on top of the new one's
@@ -316,18 +316,18 @@ var/global/list/damage_icon_parts = list()
overlays_standing[UNDERWEAR_LAYER] = null
var/icon/underwear_standing = new/icon('icons/mob/underwear.dmi',"nude")
if(underwear && species.clothing_flags & HAS_UNDERWEAR)
if(underwear && dna.species.clothing_flags & HAS_UNDERWEAR)
var/datum/sprite_accessory/underwear/U = underwear_list[underwear]
if(U)
underwear_standing.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY)
if(undershirt && species.clothing_flags & HAS_UNDERSHIRT)
if(undershirt && dna.species.clothing_flags & HAS_UNDERSHIRT)
var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt]
if(U2)
underwear_standing.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
if(socks && species.clothing_flags & HAS_SOCKS)
if(socks && dna.species.clothing_flags & HAS_SOCKS)
var/datum/sprite_accessory/socks/U3 = socks_list[socks]
if(U3)
underwear_standing.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
@@ -339,7 +339,7 @@ var/global/list/damage_icon_parts = list()
if(update_icons)
update_icons()
if(lip_style && (LIPS in species.species_traits))
if(lip_style && (LIPS in dna.species.species_traits))
var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s")
lips.Blend(lip_color, ICON_ADD)
@@ -369,7 +369,7 @@ var/global/list/damage_icon_parts = list()
if(chest_organ && m_styles["body"])
var/body_marking = m_styles["body"]
var/datum/sprite_accessory/body_marking_style = marking_styles_list[body_marking]
if(body_marking_style && body_marking_style.species_allowed && (species.name in body_marking_style.species_allowed))
if(body_marking_style && body_marking_style.species_allowed && (dna.species.name in body_marking_style.species_allowed))
var/icon/b_marking_s = new/icon("icon" = body_marking_style.icon, "icon_state" = "[body_marking_style.icon_state]_s")
if(body_marking_style.do_colouration)
b_marking_s.Blend(m_colours["body"], ICON_ADD)
@@ -379,7 +379,7 @@ var/global/list/damage_icon_parts = list()
if(head_organ && m_styles["head"]) //If the head is destroyed, forget the head markings. This prevents floating optical markings on decapitated IPCs, for example.
var/head_marking = m_styles["head"]
var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking]
if(head_marking_style && head_marking_style.species_allowed && (head_organ.dna.species2.name in head_marking_style.species_allowed))
if(head_marking_style && head_marking_style.species_allowed && (head_organ.dna.species.name in head_marking_style.species_allowed))
var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s")
if(head_marking_style.do_colouration)
h_marking_s.Blend(m_colours["head"], ICON_ADD)
@@ -407,10 +407,10 @@ var/global/list/damage_icon_parts = list()
//base icons
var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(head_organ.ha_style && (head_organ.dna.species2.bodyflags & HAS_HEAD_ACCESSORY))
if(head_organ.ha_style && (head_organ.dna.species.bodyflags & HAS_HEAD_ACCESSORY))
var/datum/sprite_accessory/head_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style]
if(head_accessory_style && head_accessory_style.species_allowed)
if(head_organ.dna.species2.name in head_accessory_style.species_allowed)
if(head_organ.dna.species.name in head_accessory_style.species_allowed)
var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s")
if(head_accessory_style.do_colouration)
head_accessory_s.Blend(head_organ.headacc_colour, ICON_ADD)
@@ -451,9 +451,9 @@ var/global/list/damage_icon_parts = list()
//if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN
// hair_standing.Blend(debrained_s, ICON_OVERLAY)
if(hair_style && hair_style.species_allowed)
if((head_organ.dna.species2.name in hair_style.species_allowed) || (head_organ.dna.species2.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
if((head_organ.dna.species.name in hair_style.species_allowed) || (head_organ.dna.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(istype(head_organ.dna.species2, /datum/species/slime)) // I am el worstos
if(istype(head_organ.dna.species, /datum/species/slime)) // I am el worstos
hair_s.Blend("[skin_colour]A0", ICON_AND)
else if(hair_style.do_colouration)
hair_s.Blend(head_organ.hair_colour, ICON_ADD)
@@ -497,9 +497,9 @@ var/global/list/damage_icon_parts = list()
if(head_organ.f_style)
var/datum/sprite_accessory/facial_hair/facial_hair_style = facial_hair_styles_list[head_organ.f_style]
if(facial_hair_style && facial_hair_style.species_allowed)
if((head_organ.dna.species2.name in facial_hair_style.species_allowed) || (head_organ.dna.species2.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
if((head_organ.dna.species.name in facial_hair_style.species_allowed) || (head_organ.dna.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(istype(head_organ.dna.species2, /datum/species/slime)) // I am el worstos
if(istype(head_organ.dna.species, /datum/species/slime)) // I am el worstos
facial_s.Blend("[skin_colour]A0", ICON_AND)
else if(facial_hair_style.do_colouration)
facial_s.Blend(head_organ.facial_colour, ICON_ADD)
@@ -644,11 +644,11 @@ var/global/list/damage_icon_parts = list()
if(w_uniform.icon_override)
standing.icon = w_uniform.icon_override
else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name])
standing.icon = w_uniform.sprite_sheets[species.name]
else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[dna.species.name])
standing.icon = w_uniform.sprite_sheets[dna.species.name]
if(w_uniform.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "uniformblood")
bloodsies.color = w_uniform.blood_color
standing.overlays += bloodsies
@@ -658,8 +658,8 @@ var/global/list/damage_icon_parts = list()
if(!tie_color) tie_color = A.icon_state
if(A.icon_override)
standing.overlays += image("icon" = A.icon_override, "icon_state" = "[A.icon_state]")
else if(A.sprite_sheets && A.sprite_sheets[species.name])
standing.overlays += image("icon" = A.sprite_sheets[species.name], "icon_state" = "[A.icon_state]")
else if(A.sprite_sheets && A.sprite_sheets[dna.species.name])
standing.overlays += image("icon" = A.sprite_sheets[dna.species.name], "icon_state" = "[A.icon_state]")
else
standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]")
@@ -720,19 +720,19 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(gloves.icon_override)
standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]")
else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name])
standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]")
else if(gloves.sprite_sheets && gloves.sprite_sheets[dna.species.name])
standing = image("icon" = gloves.sprite_sheets[dna.species.name], "icon_state" = "[t_state]")
else
standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]")
if(gloves.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "bloodyhands")
bloodsies.color = gloves.blood_color
standing.overlays += bloodsies
overlays_standing[GLOVES_LAYER] = standing
else
if(blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "bloodyhands")
bloodsies.color = hand_blood_color
overlays_standing[GLOVES_LAYER] = bloodsies
else
@@ -759,8 +759,8 @@ var/global/list/damage_icon_parts = list()
if(glasses.icon_override)
new_glasses = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]")
else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.dna.species2.name])
new_glasses = image("icon" = glasses.sprite_sheets[head_organ.dna.species2.name], "icon_state" = "[glasses.icon_state]")
else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.dna.species.name])
new_glasses = image("icon" = glasses.sprite_sheets[head_organ.dna.species.name], "icon_state" = "[glasses.icon_state]")
else
new_glasses = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
@@ -795,9 +795,9 @@ var/global/list/damage_icon_parts = list()
if(l_ear.icon_override)
t_type = "[t_type]_l"
overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]")
else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name])
else if(l_ear.sprite_sheets && l_ear.sprite_sheets[dna.species.name])
t_type = "[t_type]_l"
overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]")
overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[dna.species.name], "icon_state" = "[t_type]")
else
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
@@ -811,9 +811,9 @@ var/global/list/damage_icon_parts = list()
if(r_ear.icon_override)
t_type = "[t_type]_r"
overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]")
else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name])
else if(r_ear.sprite_sheets && r_ear.sprite_sheets[dna.species.name])
t_type = "[t_type]_r"
overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]")
overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[dna.species.name], "icon_state" = "[t_type]")
else
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
@@ -837,20 +837,20 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(shoes.icon_override)
standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]")
else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name])
standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]")
else if(shoes.sprite_sheets && shoes.sprite_sheets[dna.species.name])
standing = image("icon" = shoes.sprite_sheets[dna.species.name], "icon_state" = "[shoes.icon_state]")
else
standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]")
if(shoes.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "shoeblood")
bloodsies.color = shoes.blood_color
standing.overlays += bloodsies
overlays_standing[SHOES_LAYER] = standing
else
if(feet_blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "shoeblood")
bloodsies.color = feet_blood_color
overlays_standing[SHOES_LAYER] = bloodsies
else
@@ -891,13 +891,13 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(head.icon_override)
standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]")
else if(head.sprite_sheets && head.sprite_sheets[species.name])
standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]")
else if(head.sprite_sheets && head.sprite_sheets[dna.species.name])
standing = image("icon" = head.sprite_sheets[dna.species.name], "icon_state" = "[head.icon_state]")
else
standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]")
if(head.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "helmetblood")
bloodsies.color = head.blood_color
standing.overlays += bloodsies
overlays_standing[HEAD_LAYER] = standing
@@ -925,8 +925,8 @@ var/global/list/damage_icon_parts = list()
if(belt.icon_override)
t_state = "[t_state]_be"
overlays_standing[BELT_LAYER] = image("icon" = belt.icon_override, "icon_state" = "[t_state]")
else if(belt.sprite_sheets && belt.sprite_sheets[species.name])
overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[species.name], "icon_state" = "[t_state]")
else if(belt.sprite_sheets && belt.sprite_sheets[dna.species.name])
overlays_standing[BELT_LAYER] = image("icon" = belt.sprite_sheets[dna.species.name], "icon_state" = "[t_state]")
else
overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]")
else
@@ -949,8 +949,8 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(wear_suit.icon_override)
standing = image("icon" = wear_suit.icon_override, "icon_state" = "[wear_suit.icon_state]")
else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name])
standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]")
else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[dna.species.name])
standing = image("icon" = wear_suit.sprite_sheets[dna.species.name], "icon_state" = "[wear_suit.icon_state]")
else if(FAT in mutations)
if(wear_suit.flags_size & ONESIZEFITSALL)
standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]")
@@ -969,7 +969,7 @@ var/global/list/damage_icon_parts = list()
if(wear_suit.blood_DNA)
var/obj/item/clothing/suit/S = wear_suit
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood")
bloodsies.color = wear_suit.blood_color
standing.overlays += bloodsies
@@ -1035,14 +1035,14 @@ var/global/list/damage_icon_parts = list()
if(wear_mask.icon_override)
mask_icon = new(wear_mask.icon_override)
standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name])
mask_icon = new(wear_mask.sprite_sheets[species.name])
standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[dna.species.name])
mask_icon = new(wear_mask.sprite_sheets[dna.species.name])
standing = image("icon" = wear_mask.sprite_sheets[dna.species.name], "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
else
standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood")
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "maskblood")
bloodsies.color = wear_mask.blood_color
standing.overlays += bloodsies
overlays_standing[FACEMASK_LAYER] = standing
@@ -1062,8 +1062,8 @@ var/global/list/damage_icon_parts = list()
//If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc.
var/obj/item/rig/rig = back
standing = rig.mob_icon
else if(back.sprite_sheets && back.sprite_sheets[species.name])
standing = image("icon" = back.sprite_sheets[species.name], "icon_state" = "[back.icon_state]")
else if(back.sprite_sheets && back.sprite_sheets[dna.species.name])
standing = image("icon" = back.sprite_sheets[dna.species.name], "icon_state" = "[back.icon_state]")
else
standing = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]")
@@ -1163,7 +1163,7 @@ var/global/list/damage_icon_parts = list()
var/icon/tail_marking_icon
var/datum/sprite_accessory/body_markings/tail/tail_marking_style
if(m_styles["tail"] != "None" && (species.bodyflags & HAS_TAIL_MARKINGS))
if(m_styles["tail"] != "None" && (dna.species.bodyflags & HAS_TAIL_MARKINGS))
var/tail_marking = m_styles["tail"]
tail_marking_style = marking_styles_list[tail_marking]
tail_marking_icon = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]_s")
@@ -1172,11 +1172,11 @@ var/global/list/damage_icon_parts = list()
if(body_accessory)
if(body_accessory.try_restrictions(src))
var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state)
if(species.bodyflags & HAS_SKIN_COLOR)
if(dna.species.bodyflags & HAS_SKIN_COLOR)
accessory_s.Blend(skin_colour, body_accessory.blend_mode)
if(tail_marking_icon && (body_accessory.name in tail_marking_style.tails_allowed))
accessory_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/under = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "accessory_none_s")
under.Insert(new/icon(accessory_s, dir=SOUTH), dir=SOUTH)
@@ -1194,14 +1194,14 @@ var/global/list/damage_icon_parts = list()
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else if(tail && species.bodyflags & HAS_TAIL) //no tailless tajaran
else if(tail && dna.species.bodyflags & HAS_TAIL) //no tailless tajaran
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[tail]_s")
if(species.bodyflags & HAS_SKIN_COLOR)
if(dna.species.bodyflags & HAS_SKIN_COLOR)
tail_s.Blend(skin_colour, ICON_ADD)
if(tail_marking_icon && !tail_marking_style.tails_allowed)
tail_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "blank")
under.Insert(new/icon(tail_s, dir=SOUTH), dir=SOUTH)
@@ -1230,7 +1230,7 @@ var/global/list/damage_icon_parts = list()
var/icon/tail_marking_icon
var/datum/sprite_accessory/body_markings/tail/tail_marking_style
if(m_styles["tail"] != "None" && (species.bodyflags & HAS_TAIL_MARKINGS))
if(m_styles["tail"] != "None" && (dna.species.bodyflags & HAS_TAIL_MARKINGS))
var/tail_marking = m_styles["tail"]
tail_marking_style = marking_styles_list[tail_marking]
tail_marking_icon = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]w_s")
@@ -1238,15 +1238,15 @@ var/global/list/damage_icon_parts = list()
if(body_accessory)
var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state())
if(species.bodyflags & HAS_SKIN_COLOR)
if(dna.species.bodyflags & HAS_SKIN_COLOR)
accessory_s.Blend(skin_colour, body_accessory.blend_mode)
if(tail_marking_icon && (body_accessory.name in tail_marking_style.tails_allowed))
accessory_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "Vulpkanin_tail_delay")
if(body_accessory.allowed_species && (species.name in body_accessory.allowed_species))
under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
if(body_accessory.allowed_species && (dna.species.name in body_accessory.allowed_species))
under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay")
under.Insert(new/icon(accessory_s, dir=SOUTH), dir=SOUTH)
under.Insert(new/icon(accessory_s, dir=EAST), dir=EAST)
under.Insert(new/icon(accessory_s, dir=WEST), dir=WEST)
@@ -1255,23 +1255,23 @@ var/global/list/damage_icon_parts = list()
// Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such.
var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "Vulpkanin_tail_delay")
if(body_accessory.allowed_species && (species.name in body_accessory.allowed_species)) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank
over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
if(body_accessory.allowed_species && (dna.species.name in body_accessory.allowed_species)) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank
over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay")
over.Insert(new/icon(accessory_s, dir=NORTH), dir=NORTH)
overlays_standing[TAIL_LAYER] = image(over, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else if(tail && species.bodyflags & HAS_TAIL)
else if(tail && dna.species.bodyflags & HAS_TAIL)
var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[tail]w_s")
if(species.bodyflags & HAS_SKIN_COLOR)
if(dna.species.bodyflags & HAS_SKIN_COLOR)
tailw_s.Blend(skin_colour, ICON_ADD)
if(tail_marking_icon && !tail_marking_style.tails_allowed)
tailw_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && dna.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay")
under.Insert(new/icon(tailw_s, dir=SOUTH), dir=SOUTH)
under.Insert(new/icon(tailw_s, dir=EAST), dir=EAST)
under.Insert(new/icon(tailw_s, dir=WEST), dir=WEST)
@@ -1279,7 +1279,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(under)
// Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such.
var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.species.name]_tail_delay")
over.Insert(new/icon(tailw_s, dir=NORTH), dir=NORTH)
overlays_standing[TAIL_LAYER] = image(over)
@@ -1314,8 +1314,8 @@ var/global/list/damage_icon_parts = list()
var/icon/icon_file = new(icon_path)
if(wear_suit.icon_state in icon_file.IconStates())
standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]")
else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name])
var/icon_path = "[wear_suit.sprite_sheets[species.name]]"
else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[dna.species.name])
var/icon_path = "[wear_suit.sprite_sheets[dna.species.name]]"
icon_path = "[copytext(icon_path, 1, findtext(icon_path, "/suit.dmi"))]/collar.dmi" //If this file doesn't exist, the end result is that COLLAR_LAYER will be unchanged (empty).
if(fexists(icon_path)) //Just ensuring the nonexistance of a file with the above path won't cause a runtime.
var/icon/icon_file = new(icon_path)
+1 -1
View File
@@ -337,7 +337,7 @@
if(istype(L, /mob/living/carbon/human)) //Ignore slime(wo)men
var/mob/living/carbon/human/H = L
if(H.species.name == "Slime People")
if(H.dna.species.name == "Slime People")
continue
if(!L.canmove) // Only one slime can latch on at a time.
@@ -217,7 +217,7 @@
to_chat(target, "<span class='deadsay'><b>You must follow the orders of [user], and help [user.p_them()] succeed in [user.p_their()] dastardly schemes.</span>")
to_chat(target, "<span class='deadsay'>You may not harm other Greyshirt or [user]. However, you do not need to obey other Greyshirts.</span>")
ticker.mode.greyshirts += target.mind
target.set_species("Human")
target.set_species(/datum/species/human)
head_organ.h_style = "Bald"
head_organ.f_style = "Shaved"
target.s_tone = 35
+3 -3
View File
@@ -660,14 +660,14 @@
TH.transfer_mob_blood_dna(src)
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.species.blood_color)
TH.color = H.species.blood_color
if(H.dna.species.blood_color)
TH.color = H.dna.species.blood_color
else
TH.color = "#A10808"
/mob/living/carbon/human/makeTrail(turf/T)
if((NO_BLOOD in species.species_traits) || species.exotic_blood || !bleed_rate || bleedsuppress)
if((NO_BLOOD in dna.species.species_traits) || dna.species.exotic_blood || !bleed_rate || bleedsuppress)
return
..()
@@ -373,7 +373,7 @@
// is secretly a silicon
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(H.species && H.species.reagent_tag == PROCESS_SYN)
if(H.dna.species && H.dna.species.reagent_tag == PROCESS_SYN)
return 0
if(emagged == 2) //Everyone needs our medicine. (Our medicine is toxins)
@@ -715,7 +715,7 @@
var/list/blood_dna = H.get_blood_dna_list()
if(blood_dna)
transfer_blood_dna(blood_dna)
currentBloodColor = H.species.blood_color
currentBloodColor = H.dna.species.blood_color
return
/mob/living/simple_animal/bot/mulebot/bot_control_message(command, mob/user, user_turf)
@@ -54,7 +54,7 @@
/mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M)
//Let people pick the little buggers up.
if(M.a_intent == INTENT_HELP)
if(M.species && M.species.name == "Diona")
if(M.dna.species && M.dna.species.name == "Diona")
to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.")
to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.")
verbs += /mob/living/simple_animal/diona/proc/split
@@ -82,7 +82,7 @@
if(ishuman(C))
var/mob/living/carbon/human/D = C
if(D.species && D.species.name == "Diona")
if(D.dna.species && D.dna.species.name == "Diona")
choices += C
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
@@ -142,7 +142,7 @@
visible_message("<span class='danger'>[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.</span>","<span class='danger'>You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.</span>")
var/mob/living/carbon/human/diona/adult = new(get_turf(loc))
adult.set_species("Diona")
adult.set_species(/datum/species/diona)
if(istype(loc, /obj/item/holder/diona))
var/obj/item/holder/diona/L = loc
@@ -178,7 +178,7 @@
if(!M || !src)
return
if(NO_BLOOD in M.species.species_traits)
if(NO_BLOOD in M.dna.species.species_traits)
to_chat(src, "<span class='warning'>That donor has no blood to take.</span>")
return
@@ -178,7 +178,7 @@
if(ishuman(the_target))
var/mob/living/carbon/human/H = the_target
if(is_type_in_list(src, H.species.ignored_by))
if(is_type_in_list(src, H.dna.species.ignored_by))
return 0
if(istype(the_target, /obj/mecha))
@@ -196,7 +196,7 @@ var/global/list/ts_spiderling_list = list()
var/can_poison = 1
if(ishuman(G))
var/mob/living/carbon/human/H = G
if(!(H.species.reagent_tag & PROCESS_ORG) || (!H.species.tox_mod))
if(!(H.dna.species.reagent_tag & PROCESS_ORG) || (!H.dna.species.tox_mod))
can_poison = 0
spider_specialattack(G,can_poison)
else
+2 -2
View File
@@ -58,8 +58,8 @@
if(istype(src,/mob/living/carbon/human))
var/mob/living/carbon/human/H = src
if(H.species && H.species.abilities)
client.verbs |= H.species.abilities
if(H.dna.species && H.dna.species.abilities)
client.verbs |= H.dna.species.abilities
client.screen += client.void
+1 -1
View File
@@ -410,7 +410,7 @@
return 1
var/mob/living/carbon/human/H = attacker
if(ishuman(H) && is_type_in_list(prey, H.species.allowed_consumed_mobs)) //species eating of other mobs
if(ishuman(H) && is_type_in_list(prey, H.dna.species.allowed_consumed_mobs)) //species eating of other mobs
return 1
return 0
+1 -1
View File
@@ -1,7 +1,7 @@
/proc/issmall(A)
if(A && istype(A, /mob/living/carbon/human))
var/mob/living/carbon/human/H = A
if(H.species && H.species.is_small)
if(H.dna.species && H.dna.species.is_small)
return 1
return 0
+2 -2
View File
@@ -395,7 +395,7 @@
var/arrivalmessage = announcer.arrivalmsg
arrivalmessage = replacetext(arrivalmessage,"$name",character.real_name)
arrivalmessage = replacetext(arrivalmessage,"$rank",rank ? "[rank]" : "visitor")
arrivalmessage = replacetext(arrivalmessage,"$species",character.species.name)
arrivalmessage = replacetext(arrivalmessage,"$species",character.dna.species.name)
arrivalmessage = replacetext(arrivalmessage,"$age",num2text(character.age))
arrivalmessage = replacetext(arrivalmessage,"$gender",character.gender == FEMALE ? "Female" : "Male")
announcer.say(";[arrivalmessage]")
@@ -537,7 +537,7 @@
else if(mind.assigned_role == "Mime")
new_character.real_name = pick(mime_names)
new_character.rename_self("mime")
else if(new_character.species == "Diona")
else if(new_character.dna.species == "Diona")
new_character.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name!
new_character.rename_self("diona")
mind.original = new_character
@@ -223,13 +223,13 @@
if(current_species)
if(current_species.bodyflags & HAS_ICON_SKIN_TONE) //Handling species-specific icon-based skin tones by flagged race.
var/mob/living/carbon/human/H = new
H.species = current_species
H.dna.species = current_species
H.s_tone = s_tone
H.species.updatespeciescolor(H, 0) //The mob's species wasn't set, so it's almost certainly different than the character's species at the moment. Thus, we need to be owner-insensitive.
H.dna.species.updatespeciescolor(H, 0) //The mob's species wasn't set, so it's almost certainly different than the character's species at the moment. Thus, we need to be owner-insensitive.
var/obj/item/organ/external/chest/C = H.get_organ("chest")
icobase = C.icobase ? C.icobase : C.dna.species2.icobase
if(H.species.bodyflags & HAS_TAIL)
coloured_tail = H.tail ? H.tail : H.species.tail
icobase = C.icobase ? C.icobase : C.dna.species.icobase
if(H.dna.species.bodyflags & HAS_TAIL)
coloured_tail = H.tail ? H.tail : H.dna.species.tail
qdel(H)
else