Races Continued (#33)
This commit is contained in:
@@ -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"]
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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()
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user