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
+1
View File
@@ -88,6 +88,7 @@
#define DRONE 32
#define SWARMER 64
#define RATVAR 128
#define YAUTJA 256
// Flags for reagents
#define REAGENT_NOREACT 1
+1 -1
View File
@@ -30,5 +30,5 @@
#define CHAT_GHOSTRADIO 512
#define CHAT_LOOC 1024
#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO)
#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC)
+15 -5
View File
@@ -13,17 +13,18 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
//socks
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list)
//human mutant bodyparts
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, animated_tails_list_human)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, wings_open_list)
//lizard bodyparts (blizzard intensifies)
init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, tails_list_lizard)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, animated_tails_list_lizard)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, tails_list_human)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, animated_tails_list_human)
init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, snouts_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, horns_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, wings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, wings_open_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, frills_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, spines_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, animated_spines_list)
@@ -33,6 +34,15 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, mam_tails_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, mam_ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, mam_tails_animated_list)
//avian bodyparts (i swear this isn't starbound)
// init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks/avian, avian_beaks_list)
// init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/avian, avian_tails_list)
// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_wings, avian_wings_list)
// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_open_wings, avian_open_wings_list)
//xeno parts (hiss?)
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, xeno_head_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, xeno_tail_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, xeno_dorsal_list)
//Species
for(var/spath in subtypesof(/datum/species))
+1
View File
@@ -124,6 +124,7 @@ var/list/skin_tones = list(
)
var/global/list/species_list[0]
var/global/list/whitelisted_species_list[0]
var/global/list/roundstart_species[0]
/proc/age2agedescription(age)
+14 -1
View File
@@ -16,6 +16,7 @@ var/global/list/undershirt_m = list() //stores only undershirt name
var/global/list/undershirt_f = list() //stores only undershirt name
//Socks
var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name
//Lizard Bits (all datum lists indexed by name)
var/global/list/body_markings_list = list()
var/global/list/tails_list_lizard = list()
@@ -34,12 +35,24 @@ var/global/list/wings_list = list()
var/global/list/wings_open_list = list()
var/global/list/r_wings_list = list()
//Mammal Specific Mutant Human Bits
//Mammal Species
var/global/list/mam_body_markings_list = list()
var/global/list/mam_ears_list = list()
var/global/list/mam_tails_list = list()
var/global/list/mam_tails_animated_list = list()
//Exotic Species
var/global/list/exotic_tails_list = list()
var/global/list/exotic_tails_animated_list = list()
var/global/list/exotic_ears_list = list()
var/global/list/exotic_head_list = list()
var/global/list/exotic_back_list = list()
//Xenomorph Species
var/global/list/xeno_head_list = list() //I forgot the ' = list()' part for the longest time and couldn't figure out what was wrong. *facepalm
var/global/list/xeno_tail_list = list()
var/global/list/xeno_dorsal_list = list()
var/global/list/ghost_forms_with_directions_list = list("ghost") //stores the ghost forms that support directional sprites
var/global/list/ghost_forms_with_accessories_list = list("ghost") //stores the ghost forms that support hair and other such things
+12 -92
View File
@@ -1,4 +1,4 @@
//THIS FOLDER CONTAINS CONSTANTS, PROCS, DEFINES, AND OTHER THINGS//
//THIS FILE CONTAINS CONSTANTS, PROCS, DEFINES, AND OTHER THINGS//
////////////////////////////////////////////////////////////////////
var/const/SIZEPLAY_TINY=1
@@ -18,97 +18,17 @@ var/const/SIZEPLAY_HUGE=5
return mtrx
/proc/get_matrix_small()
var/matrix/mtrx=new()
return mtrx.Scale(0.7)
return mtrx.Scale(0.8)
/proc/get_matrix_smallest()
var/matrix/mtrx=new()
return mtrx.Scale(0.5)
return mtrx.Scale(0.65)
proc/kpcode_race_getlist(var/restrict=0)
var/list/race_options = list()
for(var/r_id in species_list)
var/datum/species/R = kpcode_race_get(r_id)
if(!R.restricted||R.restricted==restrict)
race_options[r_id]=kpcode_race_get(r_id)
return race_options
proc/kpcode_race_get(var/name="human")
name=kpcode_race_san(name)
if(!name||name=="") name="human"
if(species_list[name])
var/type_to_use=species_list[name]
var/datum/species/return_this=new type_to_use()
return return_this
else
return kpcode_race_get()
proc/kpcode_race_san(var/input)
if(!input)input="human"
if(istype(input,/datum/species))
input=input:id
return input
proc/kpcode_race_restricted(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.restricted
return 2
/*
proc/kpcode_race_tail(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.tail
return 0
proc/kpcode_race_taur(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
if(D.taur==1)
return D.id
return D.taur
return 0
proc/kpcode_race_generic(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.generic
return 0
proc/kpcode_race_adjective(var/name="human")
name=kpcode_race_san(name)
if(kpcode_race_get(name))
var/datum/species/D=kpcode_race_get(name)
return D.adjective
return 0
proc/kpcode_get_generic(var/mob/living/M)
if(istype(M,/mob/living/carbon/human))
if(M:dna)
return kpcode_race_generic(M:dna:mutantrace())
else
return kpcode_race_generic("human")
if(istype(M,/mob/living/carbon/monkey))
return "monkey"
if(istype(M,/mob/living/carbon/alien))
return "xeno"
if(istype(M,/mob/living/simple_animal))
return M.name
return "something"
proc/kpcode_get_adjective(var/mob/living/M)
if(istype(M,/mob/living/carbon/human))
if(M:dna)
return kpcode_race_adjective(M:dna:mutantrace())
else
return kpcode_race_adjective("human")
if(istype(M,/mob/living/carbon/monkey))
return "cranky"
if(istype(M,/mob/living/carbon/alien))
return "alien"
if(istype(M,/mob/living/simple_animal))
return "beastly"
return "something"
*/
proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' has available to them. It searches the list of ckeys attached to the 'whitelist' var for a species and also checks if they're an admin.
for(var/spath in subtypesof(/datum/species))
var/datum/species/S = new spath()
var/list/wlist = S.whitelist
if(S.whitelisted && (wlist.Find(user.ckey) || wlist.Find(user.key) || user.client.holder)) //If your ckey is on the species whitelist or you're an admin:
whitelisted_species_list[S.id] = S.type //Add the species to their available species list.
else if(!S.whitelisted && S.roundstart) //Normal roundstart species will be handled here.
whitelisted_species_list[S.id] = S.type
return whitelisted_species_list
-2
View File
@@ -1,4 +1,3 @@
/obj/item/organ/stomach
name = "stomach"
icon_state = "stomach"
@@ -44,4 +43,3 @@
zone = "groin"
slot = "womb"
w_class = 3
+17
View File
@@ -117,6 +117,23 @@
soundin = pick('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
if ("ricochet")
soundin = pick( 'sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg')
if ("predsay")
soundin = pick('sound/voice/pred/predsay1.ogg', 'sound/voice/pred/predsay2.ogg', 'sound/voice/pred/predsay3.ogg')
if ("predroar")
soundin = pick('sound/voice/pred/predroar1.ogg', 'sound/voice/pred/predroar2.ogg')
if ("alienscreech")
soundin = pick('sound/alien/Voice/screech1.ogg', 'sound/alien/Voice/screech2.ogg', 'sound/alien/Voice/screech3.ogg', 'sound/alien/Voice/screech4.ogg')
//Scream emote sounds
if ("malescream")
soundin = pick('sound/voice/scream/scream_m1.ogg', 'sound/voice/scream/scream_m2.ogg')
if ("femscream")
soundin = pick('sound/voice/scream/scream_f1.ogg', 'sound/voice/scream/scream_f2.ogg', 'sound/voice/scream/scream_f3.ogg')
if ("drakescream")
soundin = pick('sound/voice/scream/drake1.ogg', 'sound/voice/scream/drake2.ogg')
if ("birdscream")
soundin = pick('sound/voice/scream/bird1.ogg', 'sound/voice/scream/bird2.ogg')
if ("mothscream")
soundin = pick('sound/voice/scream/moth1.ogg')
return soundin
/proc/playsound_global(file, repeat=0, wait, channel, volume)
+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
+1 -1
View File
@@ -254,7 +254,7 @@ ANNOUNCE_ADMIN_LOGOUT
## GENERATE_MINIMAPS
## Generating minimaps(For crew monitor) is slow and bogs down testing, so its disabled by default and must be enabled by uncommenting this config if you are running a production server.
#GENERATE_MINIMAPS
GENERATE_MINIMAPS
## CLIENT VERSION CONTROL
## This allows you to configure the minimum required client version, as well as a warning version, and message for both.
+8 -7
View File
@@ -274,20 +274,21 @@ JOIN_WITH_MUTANT_RACE
## Uncommenting races will allow them to be choosen at roundstart while join_with_muntant_race is on. You'll need at least one.
## You probably want humans on your space station, but technically speaking you can turn them off without any ill effect
ROUNDSTART_RACES human
#ROUNDSTART_RACES human
## Races because TG is racist
ROUNDSTART_RACES canid
ROUNDSTART_RACES felid
#ROUNDSTART_RACES canid
#ROUNDSTART_RACES felid
#ROUNDSTART_RACES xeno
#ROUNDSTART_RACES avian
#ROUNDSTART_RACES rodent
#ROUNDSTART_RACES herbivorous
#ROUNDSTART_RACES exotic
## Races that are strictly worse than humans that could probably be turned on without balance concerns
ROUNDSTART_RACES lizard
ROUNDSTART_RACES fly
ROUNDSTART_RACES plasmaman
#ROUNDSTART_RACES lizard
#ROUNDSTART_RACES fly
#ROUNDSTART_RACES plasmaman
#ROUNDSTART_RACES shadow
#ROUNDSTART_RACES shadowling
@@ -306,7 +307,7 @@ ROUNDSTART_RACES plasmaman
## Races that are straight upgrades. If these are on expect powergamers to always pick them
#ROUNDSTART_RACES skeleton
#ROUNDSTART_RACES zombie
ROUNDSTART_RACES slime
#ROUNDSTART_RACES slime
#ROUNDSTART_RACES pod
#ROUNDSTART_RACES military_synth
#ROUNDSTART_RACES agent
Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
View File
@@ -128,8 +128,10 @@
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\screen_objects.dm"
#include "code\_onclick\hud\swarmer.dm"
#include "code\citadel\_helpers.dm"
#include "code\citadel\dogborgs.dm"
#include "code\citadel\dogborgstuff.dm"
#include "code\citadel\organs.dm"
#include "code\citadel\pokemon.dm"
#include "code\citadel\vore\hook-defs_vr.dm"
#include "code\citadel\vore\trycatch_vr.dm"