Races Continued (#33)

This commit is contained in:
TalkingCactus
2016-10-11 08:14:44 -04:00
committed by GitHub
parent 7f57882022
commit 1a25e96385
60 changed files with 720 additions and 215 deletions
+64 -7
View File
@@ -76,7 +76,11 @@ var/list/preferences_datums = list()
var/skin_tone = "caucasian1" //Skin color
var/eye_color = "000" //Eye color
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/list/features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tail_animated" = "None")
var/list/features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth",
"tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None",
"wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None",
"mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tail_animated" = "None",
"xenodorsal" = "None", "xenohead" = "None", "xenotail" = "None")
var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
//Mob preview
@@ -340,7 +344,7 @@ var/list/preferences_datums = list()
dat += "<a href='?_src_=prefs;preference=body_markings;task=input'>[features["body_markings"]]</a><BR>"
dat += "</td>"
//mammal bodyparts
//Mammal bodyparts
if("mam_body_markings" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
@@ -368,6 +372,34 @@ var/list/preferences_datums = list()
dat += "</td>"
//Xeno Bodyparts
if("xenohead" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Head/Caste</h3>"
dat += "<a href='?_src_=prefs;preference=xenohead;task=input'>[features["xenohead"]]</a><BR>"
dat += "</td>"
if("xenotail" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=xenotail;task=input'>[features["xenotail"]]</a><BR>"
dat += "</td>"
if("xenodorsal" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Dorsal Tubes</h3>"
dat += "<a href='?_src_=prefs;preference=xenodorsal;task=input'>[features["xenodorsal"]]</a><BR>"
dat += "</td>"
if(config.mutant_humans)
if("tail_human" in pref_species.mutant_bodyparts)
@@ -977,18 +1009,18 @@ var/list/preferences_datums = list()
if("species")
var/result = input(user, "Select a species", "Species Selection") as null|anything in roundstart_species
var/result = input(user, "Select a species", "Species Selection") as null|anything in get_racelist(user)
if(result)
var/newtype = roundstart_species[result]
pref_species = new newtype()
//Now that we changed our species, we must verify that the mutant colour is still allowed.
var/temp_hsv = RGBtoHSV(features["mcolor"])
if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]))
if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3]))
features["mcolor"] = pref_species.default_color
if(features["mcolor2"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]))
if(features["mcolor2"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3]))
features["mcolor2"] = pref_species.default_color
if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]))
if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3]))
features["mcolor3"] = pref_species.default_color
if("mutant_color")
@@ -1041,7 +1073,13 @@ var/list/preferences_datums = list()
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in mam_tails_list
if(new_tail)
features["mam_tail"] = new_tail
/* Doesn't exist yet. will include facial overlays to mimic 5th port species heads.
if("mam_snout")
var/new_snout
new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in mam_snouts_list
if(new_snout)
features["snout"] = new_snout
*/
if("snout")
var/new_snout
new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list
@@ -1096,6 +1134,25 @@ var/list/preferences_datums = list()
if(new_mam_body_markings)
features["mam_body_markings"] = new_mam_body_markings
//Xeno Bodyparts
if("xenohead")//Head or caste type
var/new_head
new_head = input(user, "Choose your character's caste:", "Character Preference") as null|anything in xeno_head_list
if(new_head)
features["xenohead"] = new_head
if("xenotail")//Currently one one type, more maybe later if someone sprites them. Might include animated variants in the future.
var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in xeno_tail_list
if(new_tail)
features["xenotail"] = new_tail
if("xenodorsal")
var/new_dors
new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in xeno_dorsal_list
if(new_dors)
features["xenodorsal"] = new_dors
if("s_tone")
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones
if(new_s_tone)
@@ -377,6 +377,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_mam_tail"] >> features["mam_tail"]
S["feature_mam_ears"] >> features["mam_ears"]
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
//Xeno features
S["feature_xeno_tail"] >> features["xenotail"]
S["feature_xeno_dors"] >> features["xenodorsal"]
S["feature_xeno_head"] >> features["xenohead"]
if(!config.mutant_humans)
features["tail_human"] = "none"
features["ears"] = "none"
@@ -451,6 +455,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["mam_body_markings"] = sanitize_inlist(features["mam_body_markings"], mam_body_markings_list)
features["mam_ears"] = sanitize_inlist(features["mam_ears"], mam_ears_list)
features["mam_tail"] = sanitize_inlist(features["mam_tail"], mam_tails_list)
//Xeno features
features["xenotail"] = sanitize_inlist(features["xenotail"], xeno_tail_list)
features["xenohead"] = sanitize_inlist(features["xenohead"], xeno_head_list)
features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], xeno_dorsal_list)
userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
@@ -508,6 +516,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_mam_tail"] << features["mam_tail"]
S["feature_mam_ears"] << features["mam_ears"]
S["feature_mam_tail_animated"] << features["mam_tail_animated"]
//Xeno features
S["feature_xeno_tail"] << features["xenotail"]
S["feature_xeno_dors"] << features["xenodorsal"]
S["feature_xeno_head"] << features["xenohead"]
S["clown_name"] << custom_names["clown"]
S["mime_name"] << custom_names["mime"]
S["ai_name"] << custom_names["ai"]
+89
View File
@@ -169,3 +169,92 @@
name = "carp mask"
desc = "Gnash gnash."
icon_state = "carp_mask"
/obj/item/clothing/mask/gas/yautja_fake
name = "ceremonial mask"
desc = "A beautifully designed metallic face mask. This one appears to be mostly decorative."
icon_state = "pred_mask"
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDEHAIR
item_state = "pred_mask"
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
burn_state = LAVA_PROOF
var/list/options = list()
var/current_skin = ""
/obj/item/clothing/mask/gas/yautja_fake/New()
options["Jawbone"] = "jaw"
options["Plain"] = "plain"
options["Horned"] = "horn"
options["Winged"] = "wing"
options["Cancel"] = null
/obj/item/clothing/mask/gas/yautja_fake/examine(mob/user)
..()
if(!current_skin)
user << "<span class='notice'>Alt-click [src.name] to reskin it.</span>"
/obj/item/clothing/mask/gas/yautja_fake/proc/reskin_mask(mob/M)
var/choice = input(M,"Warning, you can only reskin your mask once!","Reskin Mask") in options
if(src && choice && !current_skin && !M.incapacitated() && in_range(M,src))
if(options[choice] == null)
return
current_skin = options[choice]
icon_state = "[initial(icon_state)]_[current_skin]"
item_state = "[initial(item_state)]_[current_skin]"
M << "Your mask is now skinned as \"[choice]\"."
update_icon()
M.regenerate_icons()
/obj/item/clothing/mask/gas/yautja_fake/AltClick(mob/user)
..()
if(user.incapacitated())
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!current_skin && loc == user)
reskin_mask(user)
/obj/item/clothing/mask/gas/yautja
name = "clan mask"
desc = "A beautifully designed metallic face mask. Both decorative and functional."
icon_state = "pred_mask"
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDEHAIR
item_state = "pred_mask"
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
burn_state = LAVA_PROOF
armor = list(melee = 50, bullet = 50, laser = 50,energy = 50, bomb = 50, bio = 80, rad = 50)
var/list/options = list()
var/current_skin = ""
/obj/item/clothing/mask/gas/yautja/New()
options["Jawbone"] = "jaw"
options["Plain"] = "plain"
options["Horned"] = "horn"
options["Winged"] = "wing"
options["Cancel"] = null
/obj/item/clothing/mask/gas/yautja/proc/reskin_mask(mob/M)
var/choice = input(M,"Warning, you can only reskin your mask once!","Reskin Mask") in options
if(src && choice && !current_skin && !M.incapacitated() && in_range(M,src))
if(options[choice] == null)
return
current_skin = options[choice]
icon_state = "[initial(icon_state)]_[current_skin]"
item_state = "[initial(item_state)]_[current_skin]"
M << "Your mask is now skinned as \"[choice]\"."
update_icon()
M.regenerate_icons()
/obj/item/clothing/mask/gas/yautja/AltClick(mob/user)
..()
if(user.incapacitated())
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!current_skin && loc == user)
reskin_mask(user)
/obj/item/clothing/mask/gas/yautja/examine(mob/user)
..()
if(!current_skin)
user << "<span class='notice'>Alt-click [src.name] to reskin it.</span>"
@@ -162,3 +162,10 @@
icon_state = "griffinboots"
item_state = "griffinboots"
can_hold_items = 1
/obj/item/clothing/shoes/yautja_fake
name = "clan greaves"
desc = "A pair of armored, perfectly balanced boots. Perfect for running through the jungle or the central primary hallway."
icon_state = "yautjaboots"
item_state = "yautjaboots"
can_hold_items = 1
+45
View File
@@ -396,4 +396,49 @@
icon_state = "knight_templar"
item_state = "knight_templar"
/obj/item/clothing/suit/armor/yautja_fake
name = "ceremonial breastplate"
desc = "Half of an aging, ceremonial breastplate. Its usefulness as armor are long gone."
icon_state = "yautjahalfarmor"
item_state = "yautjahalfarmor"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = TRUE
burn_state = FIRE_PROOF
body_parts_covered = CHEST|GROIN|LEGS|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/device/flashlight,
/obj/item/weapon/tank/internals,
/obj/item/weapon/resonator,
/obj/item/device/mining_scanner,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/gun/energy/kinetic_accelerator,
/obj/item/weapon/pickaxe)
/obj/item/clothing/suit/armor/yautja
name = "clan breastplate"
desc = "An armored breastplate. This type is used by most clans for combat among elders."
icon_state = "yautjafullarmor"
item_state = "yautjafullarmor"
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 0, rad = 15)
unacidable = TRUE
burn_state = FIRE_PROOF
body_parts_covered = CHEST|GROIN|LEGS|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/device/flashlight,
/obj/item/weapon/tank/internals,
/obj/item/weapon/resonator,
/obj/item/device/mining_scanner,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/gun,
/obj/item/weapon/pickaxe,
/obj/item/weapon/melee,
/obj/item/weapon/kitchen/knife)
/obj/item/clothing/suit/armor/yautja/half
name = "clan half-breastplate"
desc = "Half of an armored breastplate. This type is used by most clans for combat among blooded."
icon_state = "yautjahalfarmor"
item_state = "yautjahalfarmor"
armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 5)
@@ -574,3 +574,22 @@
icon_state = "hostanclothes"
item_state = "hostanclothes"
item_color = "hostanclothes"
/obj/item/clothing/under/mesh
name = "mesh suit"
desc = "A mesh of strong fabric worn underneath normal clothing and armor."
body_parts_covered = CHEST|GROIN|LEGS|ARMS
icon_state = "mesh_suit"
item_color = "mesh_suit"
item_state = "mesh_suit"
can_adjust = FALSE
burn_state = FIRE_PROOF
unacidable = TRUE
/obj/item/clothing/under/mesh/top
name = "mesh shirt"
desc = "A mesh of strong fabric worn underneath normal clothing and armor."
body_parts_covered = CHEST|GROIN
icon_state = "mesh_shirt"
item_color = "mesh_shirt"
item_state = "mesh_shirt"
+39 -1
View File
@@ -259,6 +259,21 @@
message = "<B>[src]</B> raises a hand."
m_type = 1
if ("roar","roars")
if (miming)
message = "<B>[src]</B> appears to roar!"
else
if(!muzzled && has_dna())
m_type = 2
message = "<B>[src]</B> roars!"
switch(dna.species.id)
if("pred")
playsound(get_turf(src), "predroar", 50, 0, 5)
if("xeno")
playsound(get_turf(src), "alienscreech", 50, 0, 5)
else
..(act)
if ("salute","salutes")
if (!src.buckled)
var/M = null
@@ -279,6 +294,23 @@
if (miming)
message = "<B>[src]</B> acts out a scream!"
else
if(has_dna())
switch(dna.species.id) //Visit sound.dm to see and add more 'soundin' options. (alienscreech, malescream, femscream, etc)
if("xeno")
playsound(get_turf(src), "alienscreech", 50, 0, 5)
if("pred")
playsound(get_turf(src), "predroar", 50, 0, 5)
if("moth")
playsound(get_turf(src), "mothscream", 50, 1, 5)
if("lizard" || "drake")
playsound(get_turf(src), "drakescream", 50, 0, 5)
if("avian")
playsound(get_turf(src), "birdscream", 50, 0, 5)
else
if(gender == MALE)
playsound(get_turf(src), "malescream", 50, 0, 5)
if(gender == FEMALE)
playsound(get_turf(src), "femscream", 50, 0, 5)
..(act)
if ("shiver","shivers")
@@ -342,7 +374,13 @@
src << "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>"
if ("help") //This can stay at the bottom.
src << "Help for human emotes. You can use these emotes with say \"*emote\":\n\naflap, airguitar, blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, dance, dap, deathgasp, drool, eyebrow, faint, flap, frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, jump, laugh, look-(none)/mob, me, moan, mumble, nod, pale, point-(atom), raise, salute, scream, shake, shiver, shrug, sigh, signal-#1-10, sit, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, wink, wings, wag, yawn"
if(has_dna(src))
switch(dna.species.id)//Set lists of emotes for specific species. Not the best way to do this, but the easiest considering they'll share most emotes.
if("pred")
src << "Help for yautja emotes. You can use these emotes with say \"*emote\":\n\naflap, airguitar, blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, dance, dap, deathgasp, drool, eyebrow, faint, flap, frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, jump, laugh, look-(none)/mob, me, moan, mumble, nod, pale, point-(atom), raise, <b>roar</b>, salute, scream, shake, shiver, shrug, sigh, signal-#1-10, sit, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, wink, wings, wag, yawn"
else
src << "Help for human emotes. You can use these emotes with say \"*emote\":\n\naflap, airguitar, blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, dance, dap, deathgasp, drool, eyebrow, faint, flap, frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, jump, laugh, look-(none)/mob, me, moan, mumble, nod, pale, point-(atom), raise, salute, scream, shake, shiver, shrug, sigh, signal-#1-10, sit, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, wink, wings, wag, yawn"
else
..(act)
@@ -357,7 +357,8 @@
msg += "<a href='?src=\ref[src];hud=s;view_comment=1'>\[View comment log\]</a> "
msg += "<a href='?src=\ref[src];hud=s;add_comment=1'>\[Add comment\]</a>\n"
if(print_flavor_text()) msg += "[print_flavor_text()]\n"
if(print_flavor_text() && get_visible_name() != "Unknown")//Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation.
msg += "[print_flavor_text()]\n"
msg += "*---------*</span>"
@@ -94,6 +94,8 @@
if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask
var/obj/item/clothing/mask/MFP = src.wear_mask
number += MFP.flash_protect
if(istype(src.dna.species, /datum/species/xeno)) //Xenos don't have eyes.
number += 2 //So give them protection from flashes.
return number
/mob/living/carbon/human/check_ear_prot()
+114 -54
View File
@@ -26,7 +26,7 @@
var/roundstart = 0 // can this mob be chosen at roundstart? (assuming the config option is checked?)
var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race
var/eyes = "eyes" // which eyes the race uses. at the moment, the only types of eyes are "eyes" (regular eyes) and "jelleyes" (three eyes)
var/eyes = "eyes" // which eyes the race uses(the icon state). "eyes" are for normal humans and most other races, check human_face.dmi to make new ones
var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
var/hair_color = null // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
@@ -58,12 +58,10 @@
var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"]
var/fixed_mut_color2 = ""
var/fixed_mut_color3 = ""
var/generic = "something"
var/adjective = "unknown"
var/restricted = 0 //Set to 1 to not allow anyone to choose it, 2 to hide it from the DNA scanner, and text to restrict it to one person
// var/tail=0
// var/taur=0
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
var/lang_spoken = HUMAN
var/lang_understood = HUMAN
var/invis_sight = SEE_INVISIBLE_LIVING
var/darksight = 2
@@ -102,6 +100,11 @@
// PROCS //
///////////
mob/living/carbon/human/proc/get_species()
if(has_dna())
return dna.species.id
else
return
/datum/species/New()
if(!limbs_id) //if we havent set a limbs id to use, just use our own id
@@ -149,6 +152,7 @@
if((NOBLOOD in specflags) && heart)
heart.Remove(C)
qdel(heart)
else if((!(NOBLOOD in specflags)) && (!heart))
heart = new()
heart.Insert(C)
@@ -156,6 +160,7 @@
if((NOBREATH in specflags) && lungs)
lungs.Remove(C)
qdel(lungs)
else if((!(NOBREATH in specflags)) && (!lungs))
lungs = new()
lungs.Insert(C)
@@ -163,6 +168,7 @@
if((NOHUNGER in specflags) && appendix)
appendix.Remove(C)
qdel(appendix)
else if((!(NOHUNGER in specflags)) && (!appendix))
appendix = new()
appendix.Insert(C)
@@ -174,6 +180,8 @@
if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype)
C.dna.blood_type = exotic_bloodtype
C.languages_spoken = lang_spoken
C.languages_understood = lang_understood
/datum/species/proc/on_species_loss(mob/living/carbon/C)
if(C.dna.species.exotic_bloodtype)
@@ -322,15 +330,8 @@
var/obj/item/bodypart/head/HD = H.get_bodypart("head")
if("tail_lizard" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "tail_lizard"
if("waggingtail_lizard" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "waggingtail_lizard"
else if ("tail_lizard" in mutant_bodyparts)
bodyparts_to_add -= "waggingtail_lizard"
//At this point, the game will decide which bodyparts it will render on the sprite of the player; depending on clothing worn, DNA, and other factors.
//This helps eliminate clipping with certain clothing types, as well as providing a means to effectively hide your species identity from other players.
if("tail_human" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
@@ -342,6 +343,22 @@
else if ("tail_human" in mutant_bodyparts)
bodyparts_to_add -= "waggingtail_human"
if("ears" in mutant_bodyparts)
if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "ears"
//Race specific bodyparts:
//Xenos
if("xenodorsal" in mutant_bodyparts)
if(!H.dna.features["xenodorsal"] || H.dna.features["xenodorsal"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)))
bodyparts_to_add -= "xenodorsal"
if("xenohead" in mutant_bodyparts)//This is an overlay for different castes using different head crests
if(!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "xenohead"
if("xenotail" in mutant_bodyparts)
if(!H.dna.features["xenotail"] || H.dna.features["xenotail"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "xenotail"
//Canids/Felids
if("mam_tail" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "mam_tail"
@@ -356,9 +373,27 @@
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "mam_ears"
if("spines" in mutant_bodyparts)
if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "spines"
//Angels
if("wings" in mutant_bodyparts)//Will likely define these as "angel_wings" later so we can have cosmetic wings for other species.
if(!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)))
bodyparts_to_add -= "wings"
if("wings_open" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "wings_open"
else if ("wings" in mutant_bodyparts)
bodyparts_to_add -= "wings_open"
//Lizards
if("tail_lizard" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "tail_lizard"
if("waggingtail_lizard" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "waggingtail_lizard"
else if ("tail_lizard" in mutant_bodyparts)
bodyparts_to_add -= "waggingtail_lizard"
if("waggingspines" in mutant_bodyparts)
if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
@@ -378,19 +413,21 @@
if(!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "horns"
if("ears" in mutant_bodyparts)
if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "ears"
if("wings" in mutant_bodyparts)
if(!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)))
bodyparts_to_add -= "wings"
if("wings_open" in mutant_bodyparts)
if("spines" in mutant_bodyparts)
if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "spines"
//Slimecoons
if("slimecoontail" in mutant_bodyparts)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "wings_open"
else if ("wings" in mutant_bodyparts)
bodyparts_to_add -= "wings_open"
bodyparts_to_add -= "slimecoontail"
if("slimecoonears" in mutant_bodyparts)
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "slimecoonears"
if("slimecoonsnout" in mutant_bodyparts)
if((H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE)) || (H.head && (H.head.flags_inv & HIDEFACE)) || !HD || HD.status == ORGAN_ROBOTIC)
bodyparts_to_add -= "slimecoonsnout"
if(!bodyparts_to_add)
@@ -404,33 +441,16 @@
for(var/bodypart in bodyparts_to_add)
var/datum/sprite_accessory/S
switch(bodypart)
if("tail_lizard")
S = tails_list_lizard[H.dna.features["tail_lizard"]]
if("waggingtail_lizard")
S.= animated_tails_list_lizard[H.dna.features["tail_lizard"]]
if("tail_human")
S = tails_list_human[H.dna.features["tail_human"]]
if("waggingtail_human")
S.= animated_tails_list_human[H.dna.features["tail_human"]]
if("spines")
S = spines_list[H.dna.features["spines"]]
if("waggingspines")
S.= animated_spines_list[H.dna.features["spines"]]
if("snout")
S = snouts_list[H.dna.features["snout"]]
if("frills")
S = frills_list[H.dna.features["frills"]]
if("horns")
S = horns_list[H.dna.features["horns"]]
if("ears")
S = ears_list[H.dna.features["ears"]]
if("body_markings")
S = body_markings_list[H.dna.features["body_markings"]]
if("wings")
S = wings_list[H.dna.features["wings"]]
if("wingsopen")
S = wings_open_list[H.dna.features["wings"]]
//mammal bodyparts
//Mammal Bodyparts (Canid/Felid, others maybe in the future)
if("mam_tail")
S = mam_tails_list[H.dna.features["mam_tail"]]
if("mam_waggingtail")
@@ -440,16 +460,56 @@
if("mam_ears")
S = mam_ears_list[H.dna.features["mam_ears"]]
//Lizard Bodyparts
if("tail_lizard")
S = tails_list_lizard[H.dna.features["tail_lizard"]]
if("waggingtail_lizard")
S.= animated_tails_list_lizard[H.dna.features["tail_lizard"]]
if("spines")
S = spines_list[H.dna.features["spines"]]
if("waggingspines")
S.= animated_spines_list[H.dna.features["spines"]]
if("snout")//This is shared between lizard and mammals currently.(9/8/16)
S = snouts_list[H.dna.features["snout"]]
if("frills")
S = frills_list[H.dna.features["frills"]]
if("horns")
S = horns_list[H.dna.features["horns"]]
//Xeno Bodyparts
if("xenodorsal")
S = xeno_dorsal_list[H.dna.features["xenodorsal"]]
if("xenohead")
S = xeno_head_list[H.dna.features["xenohead"]]
if("xenotail")
S = xeno_tail_list[H.dna.features["xenotail"]]
//Angel Bodyparts
if("wings")
S = wings_list[H.dna.features["wings"]]
if("wingsopen")
S = wings_open_list[H.dna.features["wings"]]
//Slimecoon Bodyparts
if("slimecoontail")
S = /datum/sprite_accessory/slimecoon_tail
if("slimecoonears")
S = /datum/sprite_accessory/slimecoon_ears
if("slimecoonsnout")
S = /datum/sprite_accessory/slimecoon_snout
if(!S || S.icon_state == "none")
continue
//A little rename so we don't have to use tail_lizard or tail_human when naming the sprites.
if(bodypart == "tail_lizard" || bodypart == "tail_human" || bodypart == "mam_tail")
if(bodypart == "tail_lizard" || bodypart == "tail_human" || bodypart == "mam_tail" || bodypart == "slimecoontail" || bodypart == "xenotail")
bodypart = "tail"
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human" || bodypart == "mam_waggingtail")
bodypart = "waggingtail"
if(bodypart == "mam_ears")
bodypart = "ears"
if(bodypart == "xenohead")
bodypart = "xhead"
var/icon_string
@@ -495,7 +555,7 @@
standing += I
if(S.hasinner)
if(S.hasinner) //apply the inner ear sprite
if(S.gender_specific)
icon_string = "[g]_[bodypart]inner_[S.icon_state]_[layer]"
else
@@ -508,7 +568,7 @@
standing += I
if(S.extra)
if(S.extra) //apply the extra overlay, if there is one
if(S.gender_specific)
icon_string = "[g]_[bodypart]_extra_[S.icon_state]_[layer]"
else
@@ -519,7 +579,7 @@
if(S.center)
I = center_image(I,S.dimension_x,S.dimension_y)
switch(S.extra_color_src)
switch(S.extra_color_src) //change the color of the extra overlay
if(MUTCOLORS)
if(fixed_mut_color)
I.color = "#[fixed_mut_color]"
@@ -3,6 +3,7 @@
*/
/datum/species/human
roundstart = 1
name = "Human"
id = "human"
default_color = "FFFFFF"
@@ -94,6 +95,7 @@
/datum/species/pod
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
roundstart = 1
name = "Podperson"
id = "pod"
default_color = "59CE00"
@@ -166,7 +168,6 @@
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
dangerous_existence = 1
restricted = 2
/datum/species/shadow/spec_life(mob/living/carbon/human/H)
var/light_amount = 0
@@ -194,7 +195,6 @@
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime
exotic_blood = "slimejelly"
var/datum/action/innate/regenerate_limbs/regenerate_limbs
restricted = 2
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
if(regenerate_limbs)
@@ -539,7 +539,6 @@
dangerous_existence = TRUE
limbs_id = "golem"
fixed_mut_color = "aaa"
restricted = 2
/datum/species/golem/random
name = "Random Golem"
@@ -595,6 +594,7 @@
name = "Human?"
id = "fly"
say_mod = "buzzes"
eyes = "flyeyes"
mutant_organs = list(/obj/item/organ/tongue/fly)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly
@@ -630,7 +630,6 @@
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT)
mutant_organs = list(/obj/item/organ/tongue/bone)
restricted = 2
/*
ZOMBIES
@@ -647,7 +646,6 @@
specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT, TOXINLOVER)
mutant_organs = list(/obj/item/organ/tongue/zombie)
speedmod = 2
restricted = 2
/datum/species/zombie/infectious
name = "Infectious Zombie"
@@ -694,7 +692,6 @@
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
mutant_organs = list(/obj/item/organ/tongue/zombie)
restricted = 2
/datum/species/abductor
name = "Abductor"
@@ -707,7 +704,6 @@
var/scientist = 0 // vars to not pollute spieces list with castes
var/agent = 0
var/team = 1
restricted = 2
var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_state"="plasmaman")
@@ -782,7 +778,6 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_
var/list/initial_specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE,NODISMEMBER,NOHUNGER) //for getting these values back for assume_disguise()
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
restricted = 2
roundstart = 0
/datum/species/synth/military
@@ -793,7 +788,6 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_
punchdamagehigh = 19
punchstunthreshold = 14 //about 50% chance to stun
disguise_fail_health = 50
restricted = 2
/datum/species/synth/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
..()
@@ -914,7 +908,6 @@ SYNDICATE BLACK OPS
use_skintones = 0
specflags = list(RADIMMUNE,VIRUSIMMUNE,NOBLOOD,PIERCEIMMUNE,EYECOLOR,NODISMEMBER,NOHUNGER)
sexes = 0
restricted = 2
/datum/species/angel
name = "Angel"
@@ -926,7 +919,6 @@ SYNDICATE BLACK OPS
use_skintones = 1
no_equip = list(slot_back)
blacklisted = 1
restricted = 2
limbs_id = "human"
skinned_type = /obj/item/stack/sheet/animalhide/human
@@ -1098,7 +1090,7 @@ datum/species/canid
H.endTailWag()
//AVIAN//
/datum/species/ave
/datum/species/avian
name = "Avian"
id = "avian"
default_color = "BCAC9B"
@@ -1114,36 +1106,46 @@ datum/species/canid
//HERBIVOROUS//
//EXOTIC//
//These races will likely include lots of downsides and upsides. Keep them relatively balanced.//
/datum/species/xeno
name = "Xenomorph"
id = "xeno"
default_color = "BCAC9B"
say_mod = "hisses"
eyes = "eyes_xeno"
specflags = list(NOGUNS,MUTCOLORS)
mutant_bodyparts = list("xeno_head", "dorsal_tubes")
default_features = list("xeno_head" = "None", "dorsal_tubes" = "None")
eyes = "none"
specflags = list()
mutant_organs = list(/obj/item/organ/tongue/alien)
mutant_bodyparts = list("xenohead",
"xenodorsal",
"xenotail")
default_features = list("xenohead"="Hunter",
"xenodorsal"="Dorsal Tubes",
"xenotail"="Xenomorph Tail")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
burnmod = 1.5
heatmod = 1.5
safe_toxins_max = 9999999
burnmod = 1.75
heatmod = 1.75
darksight = 4 //Just above slimes
exotic_blood = "xblood"
exotic_damage_overlay = "xeno"
roundstart = 0 //wip
blacklisted = 1 //so xenobio can't steal the broken races
no_equip = list(slot_glasses) //MY EYES, THEY'RE GONE
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
skinned_type = /obj/item/stack/sheet/animalhide/xeno
safe_toxins_max = 32 //Too much of anything is bad.
roundstart = 1
// whitelisted = 1
// whitelist = list("talkingcactus") //testing whitelisting
/datum/species/xeno/on_species_gain(mob/living/carbon/C, datum/species/old_species)
..()
var/obj/effect/decal/cleanable/xenoblood/xgibs/XG
if(istype(C.gib_type, XG))
return
else
C.gib_type = XG
/datum/species/xeno/on_species_loss(mob/living/carbon/C)
..()
var/obj/effect/decal/cleanable/xenoblood/xgibs/XG
var/obj/effect/decal/cleanable/blood/gibs/HG
if(istype(C.gib_type, XG))
@@ -1156,5 +1158,57 @@ datum/species/canid
id = "xblood"
description = "A highly corrosive substance, it is capable of burning through most natural or man-made materials in short order."
color = "#66CC00"
toxpwr = 0.5
toxpwr = 0
acidpwr = 12
/datum/species/yautja
name = "Yautja"
id = "pred"
say_mod = "clicks"
eyes = "predeyes"
mutant_organs = list(/obj/item/organ/tongue/yautja)
specflags = list(EYECOLOR)
lang_spoken = YAUTJA
lang_understood = HUMAN|YAUTJA|ALIEN
no_equip = list(slot_head)
punchdamagelow = 4
punchdamagehigh = 14
punchstunthreshold = 13
blacklisted = 1
roundstart = 0
whitelist = 1
whitelist = list("talkingcactus")
/datum/outfit/yautja_basic
name = "Yautja, Basic"
uniform = /obj/item/clothing/under/mesh
suit = /obj/item/clothing/suit/armor/yautja_fake
shoes = /obj/item/clothing/shoes/yautja_fake
mask = /obj/item/clothing/mask/gas/yautja_fake
/datum/species/yautja/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
var/datum/outfit/yautja_basic/O = new /datum/outfit/yautja_basic//Just basic gear. Doesn't include anything that gives any meaningful advantage.
H.equipOutfit(O, visualsOnly)
return 0
/datum/species/octopus
blacklisted = 1
/datum/species/carp
blacklisted = 1
/datum/species/horse
blacklisted = 1
///////////////////
//DONATOR SPECIES//
///////////////////
//ChronoFlux: Slimecoon
/datum/species/jelly/slime/slimecoon
name = "Slime Raccoon"
id = "slimecoon"
limbs_id = "slime"
whitelisted = 1
whitelist = list("chronoflux")
blacklisted = 1
mutant_bodyparts = list("slimecoontail", "slimecoonears", "slimecoonsnout")
default_features = list("slimecoontail" = "Slimecoon Tail", "slimecoonears" = "Slimecoon Ears", "slimecoonsnout" = "Slimecoon Snout")
+18 -3
View File
@@ -640,10 +640,25 @@ Sorry Giacom. Please don't be mad :(
..()
/mob/living/proc/getTrail()
if(getBruteLoss() < 300)
return pick("ltrails_1", "ltrails_2")
if(ishuman(src))
var/mob/living/carbon/human/H = src
var/species = H.dna.species.id
if(species == "xeno") //Here we can define custom blood trails for different species; copy+paste the xenos species to add new ones.
if(getBruteLoss() < 300)
return pick (list("xltrails_1", "xltrails2"))
else
return pick (list("xttrails_1", "xttrails2"))
else
if(getBruteLoss() < 300)
return pick("ltrails_1", "ltrails_2")
else
return pick("trails_1", "trails_2")
else
return pick("trails_1", "trails_2")
if(getBruteLoss() < 300)
return pick("ltrails_1", "ltrails_2")
else
return pick("trails_1", "trails_2")
/mob/living/verb/resist()
set name = "Resist"
+144 -14
View File
@@ -60,9 +60,10 @@
var/dimension_x = 32
var/dimension_y = 32
var/center = FALSE //Should we center the sprite?
var/extra = 0 //Used for extra overlays on top of the bodypart that may be colored seperately. Uses the secondary mutant color as default. See species.dm for the actual overlay code.
var/extra = 0 //Used for extra overlays on top of the bodypart that may be colored seperately. Uses the secondary mutant color as default. See species.dm for the actual overlay code.
var/extra_icon = 'icons/mob/mam_bodyparts.dmi'
var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
//////////////////////
// Hair Definitions //
//////////////////////
@@ -1419,7 +1420,7 @@
/datum/sprite_accessory/ears/wolf
name = "Wolf"
icon_state = "wolf"
hasinner = 0
hasinner = 1
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/tails/human/fox
@@ -1487,24 +1488,73 @@
icon = 'icons/mob/mam_bodyparts.dmi'
extra = 1
/datum/sprite_accessory/ears/murid
name = "Murid"
icon_state = "murid"
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/tails/human/murid
name = "Murid"
icon_state = "murid"
color_src = 0
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/tails_animated/human/murid
name = "Murid"
icon_state = "murid"
color_src = 0
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/ears/squirrel
name = "Squirrel"
icon_state = "squirrel"
hasinner= 1
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/tails/human/squirrel
name = "Squirrel"
icon_state = "squirrel"
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/tails_animated/human/squirrel
name = "Squirrel"
icon_state = "squirrel"
icon = 'icons/mob/mam_bodyparts.dmi'
//Mammal Bodyparts
/datum/sprite_accessory/mam_ears
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/mam_ears/none
name = "None"
/datum/sprite_accessory/mam_tails
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/mam_tails/none
name = "None"
/datum/sprite_accessory/mam_tails_animated
icon = 'icons/mob/mam_bodyparts.dmi'
/datum/sprite_accessory/mam_tails_animated/none
name = "None"
//Snouts
/datum/sprite_accessory/snouts/lcanid
name = "Long, Thin"
name = "Fox, Long"
icon_state = "lcanid"
icon = 'icons/mob/mutant_bodyparts.dmi'
extra = 1
/datum/sprite_accessory/snouts/scanid
name = "Short, Thin"
name = "Fox, Short"
icon_state = "scanid"
icon = 'icons/mob/mutant_bodyparts.dmi'
extra = 1
/datum/sprite_accessory/snouts/wolf
name = "Wolf"
icon_state = "wolf"
icon = 'icons/mob/mutant_bodyparts.dmi'
extra = 1
//Cat, Big
/datum/sprite_accessory/mam_ears/catbig
@@ -1571,7 +1621,6 @@
/datum/sprite_accessory/mam_ears/lab
name = "Dog, Long"
icon_state = "lab"
hasinner = 0
/datum/sprite_accessory/mam_tails/lab
name = "Lab"
@@ -1587,6 +1636,40 @@
icon_state = "husky"
extra = 1
/datum/sprite_accessory/mam_tails_animated/husky
name = "Husky"
icon_state = "husky"
extra = 1
//Murid
/datum/sprite_accessory/mam_ears/murid
name = "Murid"
icon_state = "murid"
/datum/sprite_accessory/mam_tails/murid
name = "Murid"
icon_state = "murid"
color_src = 0
/datum/sprite_accessory/mam_tails_animated/murid
name = "Murid"
icon_state = "murid"
color_src = 0
//Squirrel
/datum/sprite_accessory/mam_ears/squirrel
name = "Squirrel"
icon_state = "squirrel"
hasinner= 1
/datum/sprite_accessory/mam_tails/squirrel
name = "Squirrel"
icon_state = "squirrel"
/datum/sprite_accessory/mam_tails_animated/squirrel
name = "Squirrel"
icon_state = "squirrel"
//Mammal Specific Body Markings
/datum/sprite_accessory/mam_body_markings
color_src = MUTCOLORS2
@@ -1609,14 +1692,61 @@
extra_color_src = MUTCOLORS3
*/
//Exotic Bodyparts
/*
//Xeno Dorsal Tubes
/datum/sprite_accessory/xeno_dorsal
locked = 1
icon = 'icons/mob/exotic_bodyparts.dmi'
color_src = 0
/datum/sprite_accessory/xeno_dorsal/none
name = "None"
/datum/sprite_accessory/xeno_dorsal/normal
name = "Dorsal Tubes"
icon_state "dortubes"
/datum/sprite_accessory/tails/xeno
locked = 1
icon_state = "dortubes"
//Xeno Tail
/datum/sprite_accessory/xeno_tail
icon = 'icons/mob/exotic_bodyparts.dmi'
color_src = 0
/datum/sprite_accessory/xeno_tail/none
name = "None"
/datum/sprite_accessory/xeno_tail/normal
name = "Xenomorph Tail"
icon_state = "xenotail"
*/
icon_state = "xeno"
//Xeno Caste Heads
//unused as of October 3, 2016
/datum/sprite_accessory/xeno_head
icon = 'icons/mob/exotic_bodyparts.dmi'
color_src = 0
/datum/sprite_accessory/xeno_head/none
name = "None"
/datum/sprite_accessory/xeno_head/hunter
name = "Hunter"
icon_state = "hunter"
/datum/sprite_accessory/xeno_head/drone
name = "Drone"
icon_state = "drone"
/datum/sprite_accessory/xeno_head/sentinel
name = "Sentinel"
icon_state = "sentinel"
//Slimecoon Parts
/datum/sprite_accessory/slimecoon_ears
icon = 'icons/mob/exotic_bodyparts.dmi'
name = "Slimecoon Ears"
icon_state = "slimecoon"
/datum/sprite_accessory/slimecoon_tail
icon = 'icons/mob/exotic_bodyparts.dmi'
name = "Slimecoon Tail"
icon_state = "slimecoon"
/datum/sprite_accessory/slimecoon_snout
icon = 'icons/mob/exotic_bodyparts.dmi'
name = "Hunter"
icon_state = "slimecoon"
+1 -1
View File
@@ -25,7 +25,7 @@
var/paused = FALSE //for suspending the projectile midair
var/p_x = 16
var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center
var/speed = 1 //Amount of deciseconds it takes for projectile to travel
var/speed = 0.1 //Amount of deciseconds it takes for projectile to travel
var/Angle = 0
var/spread = 0 //amount (in degrees) of projectile spread
var/legacy = 0 //legacy projectile system
@@ -688,6 +688,8 @@
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
if(!istype(C))
return
if(C.dna && C.dna.species.id == "xeno")
return
reac_volume = round(reac_volume,0.1)
if(method == INGEST)
C.adjustBruteLoss(min(6*toxpwr, reac_volume * toxpwr))
+12 -2
View File
@@ -358,10 +358,10 @@
name = "alien tongue"
desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"."
icon_state = "tonguexeno"
say_mod = "hiss"
say_mod = "hisses"
/obj/item/organ/tongue/alien/TongueSpeech(var/message)
playsound(owner, "hiss", 25, 1, 1)
playsound(owner, "hiss", 15, 1, 1)
return message
/obj/item/organ/tongue/bone
@@ -433,3 +433,13 @@
if(inflamed)
S.reagents.add_reagent("????", 5)
return S
/obj/item/organ/tongue/yautja
name = "yautja tongue"
desc = "You're having a hard time even deciding if this is a tongue or not."
icon_state = "tongueyautja"
say_mod = "clicks"
/obj/item/organ/tongue/yautja/TongueSpeech(var/message)
playsound(owner, "predsay", 50, 0, 1)
return message