mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 16:13:19 +01:00
AGHHHHHHHHHHHHHHHHHHH WHATTT
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
/mob/living/carbon/human/handle_autohiss(message, datum/language/L)
|
||||
if(!client || client.prefs.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off
|
||||
return message
|
||||
return species.handle_autohiss(message, L, client.prefs.autohiss_mode)
|
||||
return dna.species.handle_autohiss(message, L, client.prefs.autohiss_mode)
|
||||
|
||||
/client/verb/toggle_autohiss()
|
||||
set name = "Toggle Auto-Accent"
|
||||
|
||||
@@ -121,10 +121,10 @@
|
||||
brainmob.dna = H.dna.Clone()
|
||||
brainmob.container = src
|
||||
|
||||
if(!istype(H.species) || isnull(H.species.return_organ("brain"))) // Diona/buggy people
|
||||
if(!istype(H.dna.species) || isnull(H.dna.species.return_organ("brain"))) // Diona/buggy people
|
||||
held_brain = new(src)
|
||||
else // We have a species, and it has a brain
|
||||
var/brain_path = H.species.return_organ("brain")
|
||||
var/brain_path = H.dna.species.return_organ("brain")
|
||||
if(!ispath(brain_path, /obj/item/organ/internal/brain))
|
||||
brain_path = /obj/item/organ/internal/brain
|
||||
held_brain = new brain_path(src) // Slime people will keep their slimy brains this way
|
||||
|
||||
@@ -382,7 +382,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
if(!ventcrawler)
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
ventcrawlerlocal = H.species.ventcrawler
|
||||
ventcrawlerlocal = H.dna.species.ventcrawler
|
||||
|
||||
if(!ventcrawlerlocal) return
|
||||
|
||||
|
||||
@@ -3,20 +3,20 @@
|
||||
AC.flags = flags
|
||||
AC.ui_interact(user, state = state)
|
||||
|
||||
/mob/living/carbon/human/proc/change_species(var/new_species)
|
||||
if(!new_species || species == new_species || !(new_species in all_species))
|
||||
return
|
||||
/mob/living/carbon/human/proc/change_species(datum/species/new_species)
|
||||
if(!new_species || dna.species.type == new_species || !(initial(new_species.name) in all_species))
|
||||
return FALSE
|
||||
|
||||
set_species(new_species, null, 1)
|
||||
set_species(new_species, null, TRUE)
|
||||
reset_hair()
|
||||
if(species.bodyflags & HAS_MARKINGS)
|
||||
if(dna.species.bodyflags & HAS_MARKINGS)
|
||||
reset_markings()
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/change_gender(var/new_gender, var/update_dna = 1)
|
||||
var/obj/item/organ/external/head/H = bodyparts_by_name["head"]
|
||||
if(gender == new_gender || (gender == PLURAL && species.has_gender))
|
||||
if(gender == new_gender || (gender == PLURAL && dna.species.has_gender))
|
||||
return
|
||||
|
||||
gender = new_gender
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/change_alt_head(var/alternate_head)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!H || H.alt_head == alternate_head || H.is_robotic() || (!(species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list))
|
||||
if(!H || H.alt_head == alternate_head || H.is_robotic() || (!(dna.species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list))
|
||||
return
|
||||
|
||||
H.alt_head = alternate_head
|
||||
@@ -296,7 +296,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_color(var/colour = "#000000")
|
||||
if(colour == skin_colour || !(species.bodyflags & HAS_SKIN_COLOR))
|
||||
if(colour == skin_colour || !(dna.species.bodyflags & HAS_SKIN_COLOR))
|
||||
return
|
||||
|
||||
skin_colour = colour
|
||||
@@ -306,7 +306,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
|
||||
if(s_tone == tone || !((species.bodyflags & HAS_SKIN_TONE) || (species.bodyflags & HAS_ICON_SKIN_TONE)))
|
||||
if(s_tone == tone || !((dna.species.bodyflags & HAS_SKIN_TONE) || (dna.species.bodyflags & HAS_ICON_SKIN_TONE)))
|
||||
return
|
||||
|
||||
s_tone = tone
|
||||
@@ -350,16 +350,16 @@
|
||||
continue
|
||||
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
|
||||
continue
|
||||
if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
|
||||
if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
|
||||
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
|
||||
else
|
||||
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
|
||||
But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */
|
||||
valid_hairstyles += hairstyle
|
||||
else //If the user is not a species who can have robotic heads, use the default handling.
|
||||
if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
|
||||
if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
|
||||
valid_hairstyles += hairstyle
|
||||
|
||||
return valid_hairstyles
|
||||
@@ -378,17 +378,17 @@
|
||||
continue
|
||||
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
|
||||
continue
|
||||
if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(H.dna.species2.name in S.species_allowed) //If this is a facial hair style native to the user's species...
|
||||
if((H.dna.species2.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
|
||||
if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
|
||||
if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
|
||||
valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do.
|
||||
else
|
||||
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
|
||||
But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */
|
||||
valid_facial_hairstyles += facialhairstyle
|
||||
else //If the user is not a species who can have robotic heads, use the default handling.
|
||||
if(H.dna.species2.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
|
||||
if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
|
||||
valid_facial_hairstyles += facialhairstyle
|
||||
|
||||
return valid_facial_hairstyles
|
||||
@@ -402,7 +402,7 @@
|
||||
for(var/head_accessory in head_accessory_styles_list)
|
||||
var/datum/sprite_accessory/S = head_accessory_styles_list[head_accessory]
|
||||
|
||||
if(!(H.dna.species2.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list.
|
||||
if(!(H.dna.species.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
valid_head_accessories += head_accessory
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
continue
|
||||
if(S.marking_location != location) //If the marking isn't for the location we desire, skip.
|
||||
continue
|
||||
if(!(species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list.
|
||||
if(!(dna.species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
if(location == "tail")
|
||||
if(!body_accessory)
|
||||
@@ -432,7 +432,7 @@
|
||||
continue
|
||||
if(location == "head")
|
||||
var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[S.name]
|
||||
if(H.dna.species2.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head...
|
||||
if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species that can have a robotic head...
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head.
|
||||
continue
|
||||
@@ -456,7 +456,7 @@
|
||||
if(!istype(A))
|
||||
valid_body_accessories["None"] = "None" //The only null entry should be the "None" option.
|
||||
continue
|
||||
if(species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
|
||||
if(dna.species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
|
||||
valid_body_accessories += B
|
||||
|
||||
return valid_body_accessories
|
||||
@@ -469,7 +469,7 @@
|
||||
valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option, and there should always be a "None" option.
|
||||
for(var/alternate_head in alt_heads_list)
|
||||
var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head]
|
||||
if(!(H.dna.species2.name in head.species_allowed))
|
||||
if(!(H.dna.species.name in head.species_allowed))
|
||||
continue
|
||||
|
||||
valid_alt_heads += alternate_head
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
animation.master = src
|
||||
|
||||
flick("dust-h", animation)
|
||||
new species.remains_type(get_turf(src))
|
||||
new dna.species.remains_type(get_turf(src))
|
||||
|
||||
spawn(15)
|
||||
if(animation) qdel(animation)
|
||||
@@ -103,8 +103,8 @@
|
||||
set_heartattack(FALSE)
|
||||
|
||||
//Handle species-specific deaths.
|
||||
if(species)
|
||||
species.handle_death(src)
|
||||
if(dna.species)
|
||||
dna.species.handle_death(src)
|
||||
|
||||
callHook("death", list(src, gibbed))
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
switch(act)
|
||||
//Cooldown-inducing emotes
|
||||
if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no", "buzz2")
|
||||
if(species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise.
|
||||
if(dna.species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise.
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
@@ -56,7 +56,7 @@
|
||||
found_slime_bodypart = 1
|
||||
else
|
||||
for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too!
|
||||
if(istype(L.dna.species2, /datum/species/slime))
|
||||
if(istype(L.dna.species, /datum/species/slime))
|
||||
on_CD = handle_emote_CD()
|
||||
found_slime_bodypart = 1
|
||||
break
|
||||
@@ -225,7 +225,7 @@
|
||||
message = "<B>[src]</B> starts wagging [p_their()] tail."
|
||||
start_tail_wagging(1)
|
||||
|
||||
else if(species.bodyflags & TAIL_WAGGING)
|
||||
else if(dna.species.bodyflags & TAIL_WAGGING)
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
message = "<B>[src]</B> starts wagging [p_their()] tail."
|
||||
start_tail_wagging(1)
|
||||
@@ -236,7 +236,7 @@
|
||||
m_type = 1
|
||||
|
||||
if("swag", "swags")
|
||||
if(species.bodyflags & TAIL_WAGGING || body_accessory)
|
||||
if(dna.species.bodyflags & TAIL_WAGGING || body_accessory)
|
||||
message = "<B>[src]</B> stops wagging [p_their()] tail."
|
||||
stop_tail_wagging(1)
|
||||
else
|
||||
@@ -431,11 +431,11 @@
|
||||
message = "<B>[src]</B> coughs!"
|
||||
m_type = 2
|
||||
if(gender == FEMALE)
|
||||
if(species.female_cough_sounds)
|
||||
playsound(src, pick(species.female_cough_sounds), 120)
|
||||
if(dna.species.female_cough_sounds)
|
||||
playsound(src, pick(dna.species.female_cough_sounds), 120)
|
||||
else
|
||||
if(species.male_cough_sounds)
|
||||
playsound(src, pick(species.male_cough_sounds), 120)
|
||||
if(dna.species.male_cough_sounds)
|
||||
playsound(src, pick(dna.species.male_cough_sounds), 120)
|
||||
else
|
||||
message = "<B>[src]</B> makes a strong noise."
|
||||
m_type = 2
|
||||
@@ -479,7 +479,7 @@
|
||||
m_type = 2
|
||||
|
||||
if("deathgasp", "deathgasps")
|
||||
message = "<B>[src]</B> [replacetext(species.death_message, "their", p_their())]"
|
||||
message = "<B>[src]</B> [replacetext(dna.species.death_message, "their", p_their())]"
|
||||
m_type = 1
|
||||
|
||||
if("giggle", "giggles")
|
||||
@@ -676,9 +676,9 @@
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> sneezes."
|
||||
if(gender == FEMALE)
|
||||
playsound(src, species.female_sneeze_sound, 70)
|
||||
playsound(src, dna.species.female_sneeze_sound, 70)
|
||||
else
|
||||
playsound(src, species.male_sneeze_sound, 70)
|
||||
playsound(src, dna.species.male_sneeze_sound, 70)
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a strange noise."
|
||||
@@ -784,12 +784,12 @@
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> [species.scream_verb][M ? " at [M]" : ""]!"
|
||||
message = "<B>[src]</B> [dna.species.scream_verb][M ? " at [M]" : ""]!"
|
||||
m_type = 2
|
||||
if(gender == FEMALE)
|
||||
playsound(loc, "[species.female_scream_sound]", 80, 1, frequency = get_age_pitch())
|
||||
playsound(loc, "[dna.species.female_scream_sound]", 80, 1, frequency = get_age_pitch())
|
||||
else
|
||||
playsound(loc, "[species.male_scream_sound]", 80, 1, frequency = get_age_pitch()) //default to male screams if no gender is present.
|
||||
playsound(loc, "[dna.species.male_scream_sound]", 80, 1, frequency = get_age_pitch()) //default to male screams if no gender is present.
|
||||
|
||||
else
|
||||
message = "<B>[src]</B> makes a very loud noise[M ? " at [M]" : ""]."
|
||||
@@ -890,7 +890,7 @@
|
||||
+ " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \
|
||||
+ " wag(s), wave(s), whimper(s), wink(s), yawn(s), quill(s)"
|
||||
|
||||
switch(species.name)
|
||||
switch(dna.species.name)
|
||||
if("Machine")
|
||||
emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
|
||||
if("Drask")
|
||||
@@ -906,11 +906,11 @@
|
||||
if("Diona")
|
||||
emotelist += "\nDiona specific emotes :- creak(s)"
|
||||
|
||||
if (species.name == "Slime People")
|
||||
if (dna.species.name == "Slime People")
|
||||
emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob"
|
||||
else
|
||||
for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too!
|
||||
if(istype(L.dna.species2, /datum/species/slime))
|
||||
if(istype(L.dna.species, /datum/species/slime))
|
||||
emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob"
|
||||
break
|
||||
|
||||
|
||||
@@ -199,9 +199,9 @@
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_destroyed = list()
|
||||
for(var/organ_tag in species.has_limbs)
|
||||
for(var/organ_tag in dna.species.has_limbs)
|
||||
|
||||
var/list/organ_data = species.has_limbs[organ_tag]
|
||||
var/list/organ_data = dna.species.has_limbs[organ_tag]
|
||||
var/organ_descriptor = organ_data["descriptor"]
|
||||
is_destroyed["[organ_data["descriptor"]]"] = 1
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
var/dodebug = auto.doing2string(auto.doing)
|
||||
var/interestdebug = auto.interest2string(auto.interest)
|
||||
msg += "<span class='deadsay'>[p_they(TRUE)] [p_are()] appears to be [interestdebug] and [dodebug].</span>\n"
|
||||
else if(species.show_ssd)
|
||||
else if(dna.species.show_ssd)
|
||||
if(!key)
|
||||
msg += "<span class='deadsay'>[p_they(TRUE)] [p_are()] totally catatonic. The stresses of life in deep-space must have been too much for [p_them()]. Any recovery is unlikely.</span>\n"
|
||||
else if(!client)
|
||||
|
||||
@@ -4,10 +4,6 @@
|
||||
voice_name = "unknown"
|
||||
icon = 'icons/mob/human.dmi'
|
||||
icon_state = "body_m_s"
|
||||
|
||||
//why are these here and not in human_defines.dm
|
||||
//var/list/hud_list[10]
|
||||
var/datum/species/species //Contains icon generation and language information, set during New().
|
||||
var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
|
||||
|
||||
/mob/living/carbon/human/New(loc)
|
||||
@@ -15,21 +11,17 @@
|
||||
log_runtime(EXCEPTION("human/New called with more than 1 argument (REPORT THIS ENTIRE RUNTIME TO A CODER)"))
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/human/Initialize(mapload, new_species = null)
|
||||
/mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human)
|
||||
if(!dna)
|
||||
dna = new /datum/dna(null)
|
||||
// Species name is handled by set_species()
|
||||
|
||||
if(!species)
|
||||
if(new_species)
|
||||
set_species(new_species, 1, delay_icon_update = 1)
|
||||
else
|
||||
set_species(delay_icon_update = 1)
|
||||
set_species(new_species, 1, delay_icon_update = 1)
|
||||
|
||||
..()
|
||||
|
||||
if(species)
|
||||
real_name = species.get_random_name(gender)
|
||||
if(dna.species)
|
||||
real_name = dna.species.get_random_name(gender)
|
||||
name = real_name
|
||||
if(mind)
|
||||
mind.name = real_name
|
||||
@@ -74,49 +66,46 @@
|
||||
status_flags = GODMODE|CANPUSH
|
||||
|
||||
/mob/living/carbon/human/skrell/Initialize(mapload)
|
||||
..(mapload, "Skrell")
|
||||
..(mapload, /datum/species/skrell)
|
||||
|
||||
/mob/living/carbon/human/tajaran/Initialize(mapload)
|
||||
..(mapload, "Tajaran")
|
||||
..(mapload, /datum/species/tajaran)
|
||||
|
||||
/mob/living/carbon/human/vulpkanin/Initialize(mapload)
|
||||
..(mapload, "Vulpkanin")
|
||||
..(mapload, /datum/species/vulpkanin)
|
||||
|
||||
/mob/living/carbon/human/unathi/Initialize(mapload)
|
||||
..(mapload, "Unathi")
|
||||
..(mapload, /datum/species/unathi)
|
||||
|
||||
/mob/living/carbon/human/vox/Initialize(mapload)
|
||||
..(mapload, "Vox")
|
||||
..(mapload, /datum/species/vox)
|
||||
|
||||
/mob/living/carbon/human/voxarmalis/Initialize(mapload)
|
||||
..(mapload, "Vox Armalis")
|
||||
..(mapload, /datum/species/vox/armalis)
|
||||
|
||||
/mob/living/carbon/human/skeleton/Initialize(mapload)
|
||||
..(mapload, "Skeleton")
|
||||
..(mapload, /datum/species/skeleton)
|
||||
|
||||
/mob/living/carbon/human/kidan/Initialize(mapload)
|
||||
..(mapload, "Kidan")
|
||||
..(mapload, /datum/species/kidan)
|
||||
|
||||
/mob/living/carbon/human/plasma/Initialize(mapload)
|
||||
..(mapload, "Plasmaman")
|
||||
..(mapload, /datum/species/plasmaman)
|
||||
|
||||
/mob/living/carbon/human/slime/Initialize(mapload)
|
||||
..(mapload, "Slime People")
|
||||
..(mapload, /datum/species/slime)
|
||||
|
||||
/mob/living/carbon/human/grey/Initialize(mapload)
|
||||
..(mapload, "Grey")
|
||||
..(mapload, /datum/species/grey)
|
||||
|
||||
/mob/living/carbon/human/abductor/Initialize(mapload)
|
||||
..(mapload, "Abductor")
|
||||
|
||||
/mob/living/carbon/human/human/Initialize(mapload)
|
||||
..(mapload, "Human")
|
||||
..(mapload, /datum/species/abductor)
|
||||
|
||||
/mob/living/carbon/human/diona/Initialize(mapload)
|
||||
..(mapload, "Diona")
|
||||
..(mapload, /datum/species/diona)
|
||||
|
||||
/mob/living/carbon/human/machine/Initialize(mapload)
|
||||
..(mapload, "Machine")
|
||||
..(mapload, /datum/species/machine)
|
||||
|
||||
/mob/living/carbon/human/machine/created
|
||||
name = "Integrated Robotic Chassis"
|
||||
@@ -133,34 +122,34 @@
|
||||
qdel(O)
|
||||
|
||||
/mob/living/carbon/human/shadow/Initialize(mapload)
|
||||
..(mapload, "Shadow")
|
||||
..(mapload, /datum/species/shadow)
|
||||
|
||||
/mob/living/carbon/human/golem/Initialize(mapload)
|
||||
..(mapload, "Golem")
|
||||
..(mapload, /datum/species/golem)
|
||||
|
||||
/mob/living/carbon/human/wryn/Initialize(mapload)
|
||||
..(mapload, "Wryn")
|
||||
..(mapload, /datum/species/wryn)
|
||||
|
||||
/mob/living/carbon/human/nucleation/Initialize(mapload)
|
||||
..(mapload, "Nucleation")
|
||||
..(mapload, /datum/species/nucleation)
|
||||
|
||||
/mob/living/carbon/human/drask/Initialize(mapload)
|
||||
..(mapload, "Drask")
|
||||
..(mapload, /datum/species/drask)
|
||||
|
||||
/mob/living/carbon/human/monkey/Initialize(mapload)
|
||||
..(mapload, "Monkey")
|
||||
..(mapload, /datum/species/monkey)
|
||||
|
||||
/mob/living/carbon/human/farwa/Initialize(mapload)
|
||||
..(mapload, "Farwa")
|
||||
..(mapload, /datum/species/monkey/tajaran)
|
||||
|
||||
/mob/living/carbon/human/wolpin/Initialize(mapload)
|
||||
..(mapload, "Wolpin")
|
||||
..(mapload, /datum/species/monkey/vulpkanin)
|
||||
|
||||
/mob/living/carbon/human/neara/Initialize(mapload)
|
||||
..(mapload, "Neara")
|
||||
..(mapload, /datum/species/monkey/skrell)
|
||||
|
||||
/mob/living/carbon/human/stok/Initialize(mapload)
|
||||
..(mapload, "Stok")
|
||||
..(mapload, /datum/species/monkey/unathi)
|
||||
|
||||
/mob/living/carbon/human/Stat()
|
||||
..()
|
||||
@@ -564,7 +553,7 @@
|
||||
grant_death_vision()
|
||||
return
|
||||
|
||||
species.update_sight(src)
|
||||
dna.species.update_sight(src)
|
||||
|
||||
//Removed the horrible safety parameter. It was only being used by ninja code anyways.
|
||||
//Now checks siemens_coefficient of the affected area by default
|
||||
@@ -594,8 +583,8 @@
|
||||
if(gloves)
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
gloves_siemens_coeff = G.siemens_coefficient
|
||||
if(species)
|
||||
species_siemens_coeff = species.siemens_coeff
|
||||
if(dna.species)
|
||||
species_siemens_coeff = dna.species.siemens_coeff
|
||||
siemens_coeff = gloves_siemens_coeff * species_siemens_coeff
|
||||
if(undergoing_cardiac_arrest())
|
||||
if(shock_damage * siemens_coeff >= 1 && prob(25))
|
||||
@@ -1049,11 +1038,7 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/get_species()
|
||||
|
||||
if(!species)
|
||||
set_species()
|
||||
|
||||
return species.name
|
||||
return dna.species.name
|
||||
|
||||
/mob/living/carbon/human/proc/play_xylophone()
|
||||
if(!src.xylophone)
|
||||
@@ -1154,9 +1139,9 @@
|
||||
|
||||
//Replacing lost limbs with the species default.
|
||||
var/mob/living/carbon/human/temp_holder
|
||||
for(var/limb_type in H.species.has_limbs)
|
||||
for(var/limb_type in H.dna.species.has_limbs)
|
||||
if(!(limb_type in H.bodyparts_by_name))
|
||||
var/list/organ_data = H.species.has_limbs[limb_type]
|
||||
var/list/organ_data = H.dna.species.has_limbs[limb_type]
|
||||
var/limb_path = organ_data["path"]
|
||||
var/obj/item/organ/external/O = new limb_path(temp_holder)
|
||||
if(H.get_limb_by_name(O.name)) //Check to see if the user already has an limb with the same name as the 'missing limb'. If they do, skip regrowth.
|
||||
@@ -1169,8 +1154,8 @@
|
||||
|
||||
//Replacing lost organs with the species default.
|
||||
temp_holder = new /mob/living/carbon/human()
|
||||
for(var/index in H.species.has_organ)
|
||||
var/organ = H.species.has_organ[index]
|
||||
for(var/index in H.dna.species.has_organ)
|
||||
var/organ = H.dna.species.has_organ[index]
|
||||
if(!(organ in types_of_int_organs)) //If the mob is missing this particular organ...
|
||||
var/obj/item/organ/internal/I = new organ(temp_holder) //Create the organ inside our holder so we can check it before implantation.
|
||||
if(H.get_organ_slot(I.slot)) //Check to see if the user already has an organ in the slot the 'missing organ' belongs to. If they do, skip implantation.
|
||||
@@ -1187,7 +1172,7 @@
|
||||
surgeries.Cut() //End all surgeries.
|
||||
update_revive()
|
||||
|
||||
if(species.name != "Skeleton" && (SKELETON in mutations))
|
||||
if(dna.species.name != "Skeleton" && (SKELETON in mutations))
|
||||
mutations.Remove(SKELETON)
|
||||
if(NOCLONE in mutations)
|
||||
mutations.Remove(NOCLONE)
|
||||
@@ -1250,7 +1235,7 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/generate_name()
|
||||
name = species.makeName(gender,src)
|
||||
name = dna.species.makeName(gender,src)
|
||||
real_name = name
|
||||
if(dna)
|
||||
dna.real_name = name
|
||||
@@ -1289,88 +1274,79 @@
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].</span>")
|
||||
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/delay_icon_update = 0)
|
||||
var/datum/species/oldspecies = species
|
||||
var/datum/species/NS = all_species[new_species]
|
||||
if(!dna)
|
||||
if(!new_species)
|
||||
new_species = "Human"
|
||||
else
|
||||
if(!new_species)
|
||||
new_species = dna.species2
|
||||
else
|
||||
dna.species2 = new_species
|
||||
/mob/living/carbon/human/proc/set_species(datum/species/new_species, default_colour, delay_icon_update = FALSE)
|
||||
if(new_species == dna.species.type)
|
||||
return
|
||||
|
||||
if(species)
|
||||
if(species.name && species.name == new_species)
|
||||
return
|
||||
|
||||
if(species.language)
|
||||
remove_language(species.language)
|
||||
|
||||
if(species.default_language)
|
||||
remove_language(species.default_language)
|
||||
|
||||
if(gender == PLURAL && NS.has_gender)
|
||||
change_gender(pick(MALE,FEMALE))
|
||||
species.handle_pre_change(src)
|
||||
|
||||
species = all_species[new_species]
|
||||
var/datum/species/oldspecies = dna.species
|
||||
|
||||
if(oldspecies)
|
||||
if(oldspecies.language)
|
||||
remove_language(oldspecies.language)
|
||||
|
||||
if(oldspecies.default_language)
|
||||
remove_language(oldspecies.default_language)
|
||||
|
||||
if(gender == PLURAL && oldspecies.has_gender)
|
||||
change_gender(pick(MALE, FEMALE))
|
||||
|
||||
if(oldspecies.default_genes.len)
|
||||
oldspecies.handle_dna(src,1) // Remove any genes that belong to the old species
|
||||
oldspecies.handle_dna(src, TRUE) // Remove any genes that belong to the old species
|
||||
|
||||
tail = species.tail
|
||||
oldspecies.handle_pre_change(src)
|
||||
|
||||
maxHealth = species.total_health
|
||||
dna.species = new new_species.type
|
||||
|
||||
if(species.language)
|
||||
add_language(species.language)
|
||||
tail = dna.species.tail
|
||||
|
||||
if(species.default_language)
|
||||
add_language(species.default_language)
|
||||
maxHealth = dna.species.total_health
|
||||
|
||||
hunger_drain = species.hunger_drain
|
||||
digestion_ratio = species.digestion_ratio
|
||||
if(dna.species.language)
|
||||
add_language(dna.species.language)
|
||||
|
||||
if(species.base_color && default_colour)
|
||||
if(dna.species.default_language)
|
||||
add_language(dna.species.default_language)
|
||||
|
||||
hunger_drain = dna.species.hunger_drain
|
||||
digestion_ratio = dna.species.digestion_ratio
|
||||
|
||||
if(dna.species.base_color && default_colour)
|
||||
//Apply colour.
|
||||
skin_colour = species.base_color
|
||||
skin_colour = dna.species.base_color
|
||||
else
|
||||
skin_colour = "#000000"
|
||||
|
||||
if(!(species.bodyflags & HAS_SKIN_TONE))
|
||||
if(!(dna.species.bodyflags & HAS_SKIN_TONE))
|
||||
s_tone = 0
|
||||
|
||||
species.create_organs(src)
|
||||
dna.species.create_organs(src)
|
||||
|
||||
//Handle default hair/head accessories for created mobs.
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(species.default_hair)
|
||||
H.h_style = species.default_hair
|
||||
if(dna.species.default_hair)
|
||||
H.h_style = dna.species.default_hair
|
||||
else
|
||||
H.h_style = "Bald"
|
||||
if(species.default_fhair)
|
||||
H.f_style = species.default_fhair
|
||||
if(dna.species.default_fhair)
|
||||
H.f_style = dna.species.default_fhair
|
||||
else
|
||||
H.f_style = "Shaved"
|
||||
if(species.default_headacc)
|
||||
H.ha_style = species.default_headacc
|
||||
if(dna.species.default_headacc)
|
||||
H.ha_style = dna.species.default_headacc
|
||||
else
|
||||
H.ha_style = "None"
|
||||
|
||||
if(species.default_hair_colour)
|
||||
if(dna.species.default_hair_colour)
|
||||
//Apply colour.
|
||||
H.hair_colour = species.default_hair_colour
|
||||
H.hair_colour = dna.species.default_hair_colour
|
||||
else
|
||||
H.hair_colour = "#000000"
|
||||
if(species.default_fhair_colour)
|
||||
H.facial_colour = species.default_fhair_colour
|
||||
if(dna.species.default_fhair_colour)
|
||||
H.facial_colour = dna.species.default_fhair_colour
|
||||
else
|
||||
H.facial_colour = "#000000"
|
||||
if(species.default_headacc_colour)
|
||||
H.headacc_colour = species.default_headacc_colour
|
||||
if(dna.species.default_headacc_colour)
|
||||
H.headacc_colour = dna.species.default_headacc_colour
|
||||
else
|
||||
H.headacc_colour = "#000000"
|
||||
|
||||
@@ -1378,20 +1354,17 @@
|
||||
m_colours = DEFAULT_MARKING_COLOURS //Defaults colour to #00000 for all markings.
|
||||
body_accessory = null
|
||||
|
||||
if(!dna)
|
||||
dna = new /datum/dna(null)
|
||||
dna.species2 = species.name
|
||||
dna.real_name = real_name
|
||||
dna.real_name = real_name
|
||||
|
||||
species.handle_post_spawn(src)
|
||||
dna.species.handle_post_spawn(src)
|
||||
|
||||
see_in_dark = species.get_resultant_darksight(src)
|
||||
see_in_dark = dna.species.get_resultant_darksight(src)
|
||||
if(see_in_dark > 2)
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_ONE
|
||||
else
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
|
||||
species.handle_dna(src) //Give them whatever special dna business they got.
|
||||
dna.species.handle_dna(src) //Give them whatever special dna business they got.
|
||||
|
||||
update_client_colour(0)
|
||||
|
||||
@@ -1403,18 +1376,18 @@
|
||||
if(!delay_icon_update)
|
||||
UpdateAppearance()
|
||||
|
||||
if(species)
|
||||
return 1
|
||||
if(dna.species)
|
||||
return TRUE
|
||||
else
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/get_default_language()
|
||||
if(default_language)
|
||||
return default_language
|
||||
|
||||
if(!species)
|
||||
if(!dna.species)
|
||||
return null
|
||||
return species.default_language ? all_languages[species.default_language] : null
|
||||
return dna.species.default_language ? all_languages[dna.species.default_language] : null
|
||||
|
||||
/mob/living/carbon/human/proc/bloody_doodle()
|
||||
set category = "IC"
|
||||
@@ -1481,7 +1454,7 @@
|
||||
to_chat(src, "<span class='warning'>Where's your head at? Can't change your monitor/display without one.</span>")
|
||||
return
|
||||
|
||||
if(species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body...
|
||||
if(dna.species.bodyflags & ALL_RPARTS) //If they can have a fully cybernetic body...
|
||||
var/datum/robolimb/robohead = all_robolimbs[head_organ.model]
|
||||
if(!head_organ)
|
||||
return
|
||||
@@ -1497,7 +1470,7 @@
|
||||
var/list/hair = list()
|
||||
for(var/i in hair_styles_public_list)
|
||||
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_public_list[i]
|
||||
if((head_organ.dna.species2.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
|
||||
if((head_organ.dna.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
|
||||
hair += i
|
||||
|
||||
var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
|
||||
@@ -1585,8 +1558,8 @@
|
||||
/mob/living/carbon/human/proc/get_eyecon()
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
|
||||
if(istype(species) && species.eyes)
|
||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
|
||||
if(istype(dna.species) && dna.species.eyes)
|
||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', dna.species.eyes)
|
||||
if(eye_implant) //Eye implants override native DNA eye colo(u)r
|
||||
eyes_icon = eye_implant.generate_icon()
|
||||
else if(eyes)
|
||||
@@ -1792,7 +1765,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
|
||||
|
||||
/mob/living/carbon/human/IsAdvancedToolUser()
|
||||
if(species.has_fine_manipulation)
|
||||
if(dna.species.has_fine_manipulation)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -1827,7 +1800,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/can_eat(flags = 255)
|
||||
return species && (species.dietflags & flags)
|
||||
return dna.species && (dna.species.dietflags & flags)
|
||||
|
||||
/mob/living/carbon/human/selfFeed(var/obj/item/reagent_containers/food/toEat, fullness)
|
||||
if(!check_has_mouth())
|
||||
@@ -1888,7 +1861,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
. |= A.GetAccess()
|
||||
|
||||
/mob/living/carbon/human/is_mechanical()
|
||||
return ..() || (species.bodyflags & ALL_RPARTS) != 0
|
||||
return ..() || (dna.species.bodyflags & ALL_RPARTS) != 0
|
||||
|
||||
/mob/living/carbon/human/can_use_guns(var/obj/item/gun/G)
|
||||
. = ..()
|
||||
@@ -1897,7 +1870,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
if(HULK in mutations)
|
||||
to_chat(src, "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>")
|
||||
return 0
|
||||
if(NOGUNS in species.species_traits)
|
||||
if(NOGUNS in dna.species.species_traits)
|
||||
to_chat(src, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
|
||||
return 0
|
||||
|
||||
@@ -1964,7 +1937,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
dna.deserialize(data["dna"])
|
||||
real_name = dna.real_name
|
||||
name = real_name
|
||||
set_species(dna.species2)
|
||||
set_species(dna.species)
|
||||
age = data["age"]
|
||||
undershirt = data["ushirt"]
|
||||
underwear = data["uwear"]
|
||||
@@ -2026,8 +1999,8 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
. += "---"
|
||||
|
||||
/mob/living/carbon/human/get_taste_sensitivity()
|
||||
if(species)
|
||||
return species.taste_sensitivity
|
||||
if(dna.species)
|
||||
return dna.species.taste_sensitivity
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
//TODO: fix husking
|
||||
if(((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD)
|
||||
ChangeToHusk()
|
||||
if(species.can_revive_by_healing)
|
||||
if(dna.species.can_revive_by_healing)
|
||||
var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(B)
|
||||
if((health >= (config.health_threshold_dead + config.health_threshold_crit) * 0.5) && stat == DEAD && getBrainLoss()<120)
|
||||
@@ -32,11 +32,11 @@
|
||||
if(status_flags & GODMODE)
|
||||
return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
if(dna.species && dna.species.has_organ["brain"])
|
||||
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(sponge)
|
||||
if(species)
|
||||
amount = amount * species.brain_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.brain_mod
|
||||
sponge.receive_damage(amount, 1)
|
||||
brainloss = sponge.damage
|
||||
else
|
||||
@@ -48,11 +48,11 @@
|
||||
if(status_flags & GODMODE)
|
||||
return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
if(dna.species && dna.species.has_organ["brain"])
|
||||
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(sponge)
|
||||
if(species)
|
||||
amount = amount * species.brain_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.brain_mod
|
||||
sponge.damage = min(max(amount, 0), (maxHealth*2))
|
||||
brainloss = sponge.damage
|
||||
else
|
||||
@@ -64,7 +64,7 @@
|
||||
if(status_flags & GODMODE)
|
||||
return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
if(dna.species && dna.species.has_organ["brain"])
|
||||
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(sponge)
|
||||
brainloss = min(sponge.damage,maxHealth*2)
|
||||
@@ -89,24 +89,24 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/adjustBruteLoss(amount, damage_source)
|
||||
if(species)
|
||||
amount = amount * species.brute_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.brute_mod
|
||||
if(amount > 0)
|
||||
take_overall_damage(amount, 0, used_weapon = damage_source)
|
||||
else
|
||||
heal_overall_damage(-amount, 0)
|
||||
|
||||
/mob/living/carbon/human/adjustFireLoss(amount, damage_source)
|
||||
if(species)
|
||||
amount = amount * species.burn_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.burn_mod
|
||||
if(amount > 0)
|
||||
take_overall_damage(0, amount, used_weapon = damage_source)
|
||||
else
|
||||
heal_overall_damage(0, -amount)
|
||||
|
||||
/mob/living/carbon/human/proc/adjustBruteLossByPart(amount, organ_name, obj/damage_source = null)
|
||||
if(species)
|
||||
amount = amount * species.brute_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.brute_mod
|
||||
|
||||
if(organ_name in bodyparts_by_name)
|
||||
var/obj/item/organ/external/O = get_organ(organ_name)
|
||||
@@ -119,8 +119,8 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/adjustFireLossByPart(amount, organ_name, obj/damage_source = null)
|
||||
if(species)
|
||||
amount = amount * species.burn_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.burn_mod
|
||||
|
||||
if(organ_name in bodyparts_by_name)
|
||||
var/obj/item/organ/external/O = get_organ(organ_name)
|
||||
@@ -139,8 +139,8 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/adjustCloneLoss(amount)
|
||||
if(species)
|
||||
amount = amount * species.clone_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.clone_mod
|
||||
..()
|
||||
|
||||
var/heal_prob = max(0, 80 - getCloneLoss())
|
||||
@@ -179,23 +179,23 @@
|
||||
|
||||
// Defined here solely to take species flags into account without having to recast at mob/living level.
|
||||
/mob/living/carbon/human/adjustOxyLoss(amount)
|
||||
if(species)
|
||||
amount = amount * species.oxy_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.oxy_mod
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/setOxyLoss(amount)
|
||||
if(species)
|
||||
amount = amount * species.oxy_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.oxy_mod
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/adjustToxLoss(amount)
|
||||
if(species)
|
||||
amount = amount * species.tox_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.tox_mod
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/setToxLoss(amount)
|
||||
if(species)
|
||||
amount = amount * species.tox_mod
|
||||
if(dna.species)
|
||||
amount = amount * dna.species.tox_mod
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////
|
||||
@@ -352,8 +352,8 @@ This function restores all organs.
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
damageoverlaytemp = 20
|
||||
if(species)
|
||||
damage = damage * species.brute_mod
|
||||
if(dna.species)
|
||||
damage = damage * dna.species.brute_mod
|
||||
|
||||
if(organ.receive_damage(damage, 0, sharp, used_weapon))
|
||||
UpdateDamageIcon()
|
||||
@@ -376,8 +376,8 @@ This function restores all organs.
|
||||
if(BURN)
|
||||
damageoverlaytemp = 20
|
||||
|
||||
if(species)
|
||||
damage = damage * species.burn_mod
|
||||
if(dna.species)
|
||||
damage = damage * dna.species.burn_mod
|
||||
|
||||
if(organ.receive_damage(0, damage, sharp, used_weapon))
|
||||
UpdateDamageIcon()
|
||||
|
||||
@@ -354,7 +354,7 @@ emp_act
|
||||
if(check_shields(user, 15, "the [hulk_verb]ing"))
|
||||
return
|
||||
..(user, TRUE)
|
||||
playsound(loc, user.species.unarmed.attack_sound, 25, 1, -1)
|
||||
playsound(loc, user.dna.species.unarmed.attack_sound, 25, 1, -1)
|
||||
var/message = "[user] has [hulk_verb]ed [src]!"
|
||||
visible_message("<span class='danger'>[message]</span>", "<span class='userdanger'>[message]</span>")
|
||||
adjustBruteLoss(15)
|
||||
@@ -365,7 +365,7 @@ emp_act
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
species.spec_attack_hand(H, src)
|
||||
dna.species.spec_attack_hand(H, src)
|
||||
|
||||
/mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L)
|
||||
if(..()) //successful larva bite.
|
||||
@@ -494,7 +494,7 @@ emp_act
|
||||
|
||||
/mob/living/carbon/human/water_act(volume, temperature, source)
|
||||
..()
|
||||
species.water_act(src,volume,temperature,source)
|
||||
dna.species.water_act(src,volume,temperature,source)
|
||||
|
||||
/mob/living/carbon/human/is_eyes_covered(check_glasses = TRUE, check_head = TRUE, check_mask = TRUE)
|
||||
if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
. = 0
|
||||
. += ..()
|
||||
. += config.human_delay
|
||||
. += species.movement_delay(src)
|
||||
. += dna.species.movement_delay(src)
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0)
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
if(!lying && !buckled && !throwing)
|
||||
for(var/obj/item/organ/external/splinted in splinted_limbs)
|
||||
splinted.update_splints()
|
||||
|
||||
|
||||
if(!has_gravity(loc))
|
||||
return
|
||||
|
||||
|
||||
var/obj/item/clothing/shoes/S = shoes
|
||||
|
||||
|
||||
//Bloody footprints
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/organ/external/l_foot = get_organ("l_foot")
|
||||
@@ -119,7 +119,7 @@
|
||||
if(step_count % 3) //this basically says, every three moves make a noise
|
||||
return 0 //1st - none, 1%3==1, 2nd - none, 2%3==2, 3rd - noise, 3%3==0
|
||||
|
||||
if(species.silent_steps)
|
||||
if(dna.species.silent_steps)
|
||||
return 0 //species is silent
|
||||
|
||||
playsound(T, S, volume, 1, range)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
// standing is poor
|
||||
if(stance_damage >= 8)
|
||||
if(!(lying || resting))
|
||||
if(!(NO_PAIN in species.species_traits))
|
||||
if(!(NO_PAIN in dna.species.species_traits))
|
||||
emote("scream")
|
||||
custom_emote(1, "collapses!")
|
||||
Weaken(5) //can't emote while weakened, apparently.
|
||||
@@ -90,7 +90,7 @@
|
||||
continue
|
||||
|
||||
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
||||
custom_emote(1, "[(NO_PAIN in species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!")
|
||||
custom_emote(1, "[(NO_PAIN in dna.species.species_traits) ? "" : emote_scream ]drops what [p_they()] [p_were()] holding in [p_their()] [E.name]!")
|
||||
|
||||
else if(E.is_malfunctioning())
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
//this is here because this has no client/prefs/brain whatever.
|
||||
age = rand(AGE_MIN, AGE_MAX)
|
||||
change_gender(pick("male", "female"))
|
||||
rename_character(real_name, species.get_random_name(gender))
|
||||
rename_character(real_name, dna.species.get_random_name(gender))
|
||||
//job handling
|
||||
myjob = new default_job()
|
||||
job = myjob.title
|
||||
@@ -208,9 +208,9 @@
|
||||
var/datum/dna/toDoppel = chosen.dna
|
||||
|
||||
T.real_name = toDoppel.real_name
|
||||
T.set_species(chosen.species.name)
|
||||
T.body_accessory = chosen.body_accessory
|
||||
T.dna = toDoppel.Clone()
|
||||
T.set_species(chosen.dna.species)
|
||||
T.body_accessory = chosen.body_accessory
|
||||
T.UpdateAppearance()
|
||||
domutcheck(T)
|
||||
|
||||
|
||||
@@ -419,7 +419,7 @@
|
||||
..(what, who, where, silent = is_silent)
|
||||
|
||||
/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0)
|
||||
switch(species.handle_can_equip(I, slot, disable_warning, src))
|
||||
switch(dna.species.handle_can_equip(I, slot, disable_warning, src))
|
||||
if(1) return 1
|
||||
if(2) return 0 //if it returns 2, it wants no normal handling
|
||||
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
handle_heartbeat()
|
||||
handle_heartattack()
|
||||
handle_drunk()
|
||||
species.handle_life(src)
|
||||
dna.species.handle_life(src)
|
||||
|
||||
if(!client)
|
||||
species.handle_npc(src)
|
||||
dna.species.handle_npc(src)
|
||||
|
||||
if(stat != DEAD)
|
||||
//Stuff jammed in your limbs hurts
|
||||
@@ -178,7 +178,7 @@
|
||||
if(gene_stability < GENETIC_DAMAGE_STAGE_3)
|
||||
gib()
|
||||
|
||||
if(!(RADIMMUNE in species.species_traits))
|
||||
if(!(RADIMMUNE in dna.species.species_traits))
|
||||
if(radiation)
|
||||
radiation = Clamp(radiation, 0, 200)
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
chest.add_autopsy_data("Radiation Poisoning", autopsy_damage)
|
||||
|
||||
/mob/living/carbon/human/breathe()
|
||||
if(!species.breathe(src))
|
||||
if(!dna.species.breathe(src))
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/check_breath(datum/gas_mixture/breath)
|
||||
@@ -253,8 +253,8 @@
|
||||
|
||||
failed_last_breath = TRUE
|
||||
|
||||
if(species)
|
||||
var/datum/species/S = species
|
||||
if(dna.species)
|
||||
var/datum/species/S = dna.species
|
||||
|
||||
if(S.breathid == "o2")
|
||||
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
|
||||
@@ -332,39 +332,39 @@
|
||||
bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX)
|
||||
|
||||
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
|
||||
if(bodytemperature > species.heat_level_1)
|
||||
if(bodytemperature > dna.species.heat_level_1)
|
||||
//Body temperature is too hot.
|
||||
if(status_flags & GODMODE) return 1 //godmode
|
||||
var/mult = species.heatmod
|
||||
var/mult = dna.species.heatmod
|
||||
|
||||
if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2)
|
||||
if(bodytemperature >= dna.species.heat_level_1 && bodytemperature <= dna.species.heat_level_2)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 1)
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
|
||||
if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3)
|
||||
if(bodytemperature > dna.species.heat_level_2 && bodytemperature <= dna.species.heat_level_3)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 2)
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
|
||||
if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY)
|
||||
if(bodytemperature > dna.species.heat_level_3 && bodytemperature < INFINITY)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 3)
|
||||
if(on_fire)
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire")
|
||||
else
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
|
||||
|
||||
else if(bodytemperature < species.cold_level_1)
|
||||
else if(bodytemperature < dna.species.cold_level_1)
|
||||
if(status_flags & GODMODE)
|
||||
return 1
|
||||
if(stat == DEAD)
|
||||
return 1
|
||||
|
||||
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
|
||||
var/mult = species.coldmod
|
||||
if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1)
|
||||
var/mult = dna.species.coldmod
|
||||
if(bodytemperature >= dna.species.cold_level_2 && bodytemperature <= dna.species.cold_level_1)
|
||||
throw_alert("temp", /obj/screen/alert/cold, 1)
|
||||
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
|
||||
if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2)
|
||||
if(bodytemperature >= dna.species.cold_level_3 && bodytemperature < dna.species.cold_level_2)
|
||||
throw_alert("temp", /obj/screen/alert/cold, 2)
|
||||
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature")
|
||||
if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3)
|
||||
if(bodytemperature > -INFINITY && bodytemperature < dna.species.cold_level_3)
|
||||
throw_alert("temp", /obj/screen/alert/cold, 3)
|
||||
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature")
|
||||
else
|
||||
@@ -379,18 +379,18 @@
|
||||
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
|
||||
if(status_flags & GODMODE) return 1 //godmode
|
||||
|
||||
if(adjusted_pressure >= species.hazard_high_pressure)
|
||||
if(adjusted_pressure >= dna.species.hazard_high_pressure)
|
||||
if(!(HEATRES in mutations))
|
||||
var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE)
|
||||
var/pressure_damage = min( ( (adjusted_pressure / dna.species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE)
|
||||
take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure")
|
||||
throw_alert("pressure", /obj/screen/alert/highpressure, 2)
|
||||
else
|
||||
clear_alert("pressure")
|
||||
else if(adjusted_pressure >= species.warning_high_pressure)
|
||||
else if(adjusted_pressure >= dna.species.warning_high_pressure)
|
||||
throw_alert("pressure", /obj/screen/alert/highpressure, 1)
|
||||
else if(adjusted_pressure >= species.warning_low_pressure)
|
||||
else if(adjusted_pressure >= dna.species.warning_low_pressure)
|
||||
clear_alert("pressure")
|
||||
else if(adjusted_pressure >= species.hazard_low_pressure)
|
||||
else if(adjusted_pressure >= dna.species.hazard_low_pressure)
|
||||
throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
|
||||
else
|
||||
if(COLDRES in mutations)
|
||||
@@ -430,13 +430,13 @@
|
||||
//END FIRE CODE
|
||||
|
||||
/mob/living/carbon/human/proc/stabilize_temperature_from_calories()
|
||||
var/body_temperature_difference = species.body_temperature - bodytemperature
|
||||
var/body_temperature_difference = dna.species.body_temperature - bodytemperature
|
||||
|
||||
if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
|
||||
if(bodytemperature <= dna.species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
|
||||
bodytemperature += max((body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM)
|
||||
if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1)
|
||||
if(bodytemperature >= dna.species.cold_level_1 && bodytemperature <= dna.species.heat_level_1)
|
||||
bodytemperature += body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR
|
||||
if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
|
||||
if(bodytemperature >= dna.species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects.
|
||||
//We totally need a sweat system cause it totally makes sense...~
|
||||
bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers
|
||||
|
||||
@@ -588,7 +588,7 @@
|
||||
return 0 //godmode
|
||||
|
||||
//The fucking FAT mutation is the greatest shit ever. It makes everyone so hot and bothered.
|
||||
if(CAN_BE_FAT in species.species_traits)
|
||||
if(CAN_BE_FAT in dna.species.species_traits)
|
||||
if(FAT in mutations)
|
||||
if(overeatduration < 100)
|
||||
becomeSlim()
|
||||
@@ -652,7 +652,7 @@
|
||||
AdjustDizzy(-3)
|
||||
AdjustJitter(-3)
|
||||
|
||||
if(NO_INTORGANS in species.species_traits)
|
||||
if(NO_INTORGANS in dna.species.species_traits)
|
||||
return
|
||||
|
||||
handle_trace_chems()
|
||||
@@ -766,10 +766,10 @@
|
||||
|
||||
//Vision //god knows why this is here
|
||||
var/obj/item/organ/vision
|
||||
if(species.vision_organ)
|
||||
vision = get_int_organ(species.vision_organ)
|
||||
if(dna.species.vision_organ)
|
||||
vision = get_int_organ(dna.species.vision_organ)
|
||||
|
||||
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
|
||||
if(!dna.species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
|
||||
SetEyeBlind(0)
|
||||
blinded = 0
|
||||
SetEyeBlurry(0)
|
||||
@@ -860,10 +860,10 @@
|
||||
remoteview_target = null
|
||||
reset_perspective(null)
|
||||
|
||||
species.handle_vision(src)
|
||||
dna.species.handle_vision(src)
|
||||
|
||||
/mob/living/carbon/human/handle_hud_icons()
|
||||
species.handle_hud_icons(src)
|
||||
dna.species.handle_hud_icons(src)
|
||||
|
||||
/mob/living/carbon/human/handle_random_events()
|
||||
// Puke if toxloss is too high
|
||||
@@ -907,7 +907,7 @@
|
||||
if(times_fired % 5 == 1)
|
||||
return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load)
|
||||
|
||||
if(NO_BLOOD in species.species_traits)
|
||||
if(NO_BLOOD in dna.species.species_traits)
|
||||
return PULSE_NONE //No blood, no pulse.
|
||||
|
||||
if(stat == DEAD)
|
||||
@@ -977,7 +977,7 @@
|
||||
var/obj/item/clothing/mask/M = H.wear_mask
|
||||
if(M && (M.flags_cover & MASKCOVERSMOUTH))
|
||||
return
|
||||
if(NO_BREATHE in H.species.species_traits)
|
||||
if(NO_BREATHE in H.dna.species.species_traits)
|
||||
return //no puking if you can't smell!
|
||||
// Humans can lack a mind datum, y'know
|
||||
if(H.mind && (H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Coroner"))
|
||||
@@ -1054,9 +1054,9 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/can_heartattack()
|
||||
if(NO_BLOOD in species.species_traits)
|
||||
if(NO_BLOOD in dna.species.species_traits)
|
||||
return FALSE
|
||||
if(NO_INTORGANS in species.species_traits)
|
||||
if(NO_INTORGANS in dna.species.species_traits)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/carbon/human/Login()
|
||||
..()
|
||||
|
||||
if(species && species.ventcrawler)
|
||||
if(dna.species && dna.species.ventcrawler)
|
||||
to_chat(src, "<span class='notice'>You can ventcrawl! Use alt+click on vents to quickly travel about the station.</span>")
|
||||
update_pipe_vision()
|
||||
return
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak.
|
||||
return 1
|
||||
|
||||
if(species.can_understand(other))
|
||||
if(dna.species.can_understand(other))
|
||||
return 1
|
||||
|
||||
//These only pertain to common. Languages are handled by mob/say_understands()
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
/mob/living/carbon/human/IsVocal()
|
||||
// how do species that don't breathe talk? magic, that's what.
|
||||
var/breathes = (!(NO_BREATHE in species.species_traits))
|
||||
var/breathes = (!(NO_BREATHE in dna.species.species_traits))
|
||||
var/obj/item/organ/internal/L = get_organ_slot("lungs")
|
||||
if((breathes && !L) || breathes && L && (L.status & ORGAN_DEAD))
|
||||
return FALSE
|
||||
@@ -219,8 +219,8 @@
|
||||
|
||||
/mob/living/carbon/human/handle_speech_sound()
|
||||
var/list/returns[2]
|
||||
if(species.speech_sounds && prob(species.speech_chance))
|
||||
returns[1] = sound(pick(species.speech_sounds))
|
||||
if(dna.species.speech_sounds && prob(dna.species.speech_chance))
|
||||
returns[1] = sound(pick(dna.species.speech_sounds))
|
||||
returns[2] = 50
|
||||
return returns
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
/mob/living/carbon/human/proc/handle_shock()
|
||||
if(status_flags & GODMODE) //godmode
|
||||
return
|
||||
if(NO_PAIN in species.species_traits)
|
||||
if(NO_PAIN in dna.species.species_traits)
|
||||
return
|
||||
|
||||
updateshock()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
path = /mob/living/carbon/human/monkey
|
||||
language = null
|
||||
default_language = "Chimpanzee"
|
||||
greater_form = "Human"
|
||||
greater_form = /datum/species/human
|
||||
is_small = 1
|
||||
has_fine_manipulation = 0
|
||||
ventcrawler = 1
|
||||
@@ -99,7 +99,7 @@
|
||||
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
|
||||
greater_form = "Tajaran"
|
||||
greater_form = /datum/species/tajaran
|
||||
default_language = "Farwa"
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#000000"
|
||||
@@ -123,7 +123,7 @@
|
||||
icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
|
||||
|
||||
greater_form = "Vulpkanin"
|
||||
greater_form = /datum/species/vulpkanin
|
||||
default_language = "Wolpin"
|
||||
flesh_color = "#966464"
|
||||
base_color = "#000000"
|
||||
@@ -147,7 +147,7 @@
|
||||
icobase = 'icons/mob/human_races/monkeys/r_neara.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_neara.dmi'
|
||||
|
||||
greater_form = "Skrell"
|
||||
greater_form = /datum/species/skrell
|
||||
default_language = "Neara"
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
@@ -162,7 +162,7 @@
|
||||
deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
|
||||
|
||||
tail = "stoktail"
|
||||
greater_form = "Unathi"
|
||||
greater_form = /datum/species/unathi
|
||||
default_language = "Stok"
|
||||
flesh_color = "#34AF10"
|
||||
base_color = "#000000"
|
||||
|
||||
@@ -334,7 +334,7 @@
|
||||
/datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
//Vampire code
|
||||
if(user.mind && user.mind.vampire && (user.mind in ticker.mode.vampires) && !user.mind.vampire.draining && user.zone_sel && user.zone_sel.selecting == "head" && target != user)
|
||||
if((NO_BLOOD in target.species.species_traits) || target.species.exotic_blood || !target.blood_volume)
|
||||
if((NO_BLOOD in target.dna.species.species_traits) || target.dna.species.exotic_blood || !target.blood_volume)
|
||||
to_chat(user, "<span class='warning'>They have no blood!</span>")
|
||||
return
|
||||
if(target.mind && target.mind.vampire && (target.mind in ticker.mode.vampires))
|
||||
@@ -354,7 +354,7 @@
|
||||
if(attacker_style && attacker_style.harm_act(user, target))
|
||||
return 1
|
||||
else
|
||||
var/datum/unarmed_attack/attack = user.species.unarmed
|
||||
var/datum/unarmed_attack/attack = user.dna.species.unarmed
|
||||
|
||||
user.do_attack_animation(target, attack.animation_type)
|
||||
add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL)
|
||||
@@ -364,7 +364,7 @@
|
||||
else
|
||||
target.LAssailant = user
|
||||
|
||||
var/damage = rand(user.species.punchdamagelow, user.species.punchdamagehigh)
|
||||
var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh)
|
||||
damage += attack.damage
|
||||
if(!damage)
|
||||
playsound(target.loc, attack.miss_sound, 25, 1, -1)
|
||||
@@ -380,7 +380,7 @@
|
||||
target.visible_message("<span class='danger'>[user] [pick(attack.attack_verb)]ed [target]!</span>")
|
||||
|
||||
target.apply_damage(damage, BRUTE, affecting, armor_block, sharp = attack.sharp) //moving this back here means Armalis are going to knock you down 70% of the time, but they're pure adminbus anyway.
|
||||
if((target.stat != DEAD) && damage >= user.species.punchstunthreshold)
|
||||
if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold)
|
||||
target.visible_message("<span class='danger'>[user] has weakened [target]!</span>", \
|
||||
"<span class='userdanger'>[user] has weakened [target]!</span>")
|
||||
target.apply_effect(4, WEAKEN, armor_block)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user