mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 23:53:47 +01:00
Merge branch 'master' of https://github.com/QuinnAggeler/Paradise into disguise
This commit is contained in:
@@ -142,6 +142,11 @@ var/global/nologevent = 0
|
||||
if(istype(M, /mob/dead/observer))
|
||||
body += "<a href='?_src_=holder;incarn_ghost=\ref[M]'>Re-incarnate</a> | "
|
||||
|
||||
if(ispAI(M))
|
||||
body += "<B>Is a pAI</B> "
|
||||
else
|
||||
body += "<A href='?_src_=holder;makePAI=\ref[M]'>Make pAI</A> | "
|
||||
|
||||
// DNA2 - Admin Hax
|
||||
if(M.dna && iscarbon(M))
|
||||
body += "<br><br>"
|
||||
|
||||
@@ -1142,6 +1142,28 @@
|
||||
message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(H)]", 1)
|
||||
H.corgize()
|
||||
|
||||
else if(href_list["makePAI"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makePAI"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
|
||||
var/painame = "Default"
|
||||
var/name = ""
|
||||
if(alert(usr, "Do you want to set their name or let them choose their own name?", "Name Choice", "Set Name", "Let them choose") == "Set Name")
|
||||
name = sanitize(copytext(input(usr, "Enter a name for the new pAI. Default name is [painame].", "pAI Name", painame),1,MAX_NAME_LEN))
|
||||
else
|
||||
name = sanitize(copytext(input(H, "An admin wants to make you into a pAI. Choose a name. Default is [painame].", "pAI Name", painame),1,MAX_NAME_LEN))
|
||||
|
||||
if(!name)
|
||||
name = painame
|
||||
|
||||
log_admin("[key_name(usr)] attempting to pAIze [key_name(H)]")
|
||||
message_admins("\blue [key_name_admin(usr)] attempting to pAIze [key_name_admin(H)]", 1)
|
||||
H.paize(name)
|
||||
|
||||
else if(href_list["forcespeech"])
|
||||
if(!check_rights(R_SERVER|R_EVENT)) return
|
||||
|
||||
|
||||
@@ -498,6 +498,7 @@ client/proc/one_click_antag()
|
||||
/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0)
|
||||
|
||||
var/mob/living/carbon/human/new_vox = new(spawn_location.loc, "Vox")
|
||||
var/obj/item/organ/external/head/head_organ = new_vox.get_organ("head")
|
||||
|
||||
var/sounds = rand(2,8)
|
||||
var/i = 0
|
||||
@@ -516,8 +517,8 @@ client/proc/one_click_antag()
|
||||
new_vox.add_language("Vox-pidgin")
|
||||
new_vox.add_language("Galactic Common")
|
||||
new_vox.add_language("Tradeband")
|
||||
new_vox.h_style = "Short Vox Quills"
|
||||
new_vox.f_style = "Shaved"
|
||||
head_organ.h_style = "Short Vox Quills"
|
||||
head_organ.f_style = "Shaved"
|
||||
|
||||
for(var/obj/item/organ/external/limb in new_vox.organs)
|
||||
limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT)
|
||||
|
||||
@@ -1603,7 +1603,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
if("nanoui")
|
||||
nanoui_fancy = !nanoui_fancy
|
||||
|
||||
if("ghost_att_anim")
|
||||
if("ghost_att_anim")
|
||||
show_ghostitem_attack = !show_ghostitem_attack
|
||||
|
||||
if("UIcolor")
|
||||
@@ -1726,13 +1726,19 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
character.g_eyes = g_eyes
|
||||
character.b_eyes = b_eyes
|
||||
|
||||
character.r_hair = r_hair
|
||||
character.g_hair = g_hair
|
||||
character.b_hair = b_hair
|
||||
//Head-specific
|
||||
var/obj/item/organ/external/head/H = character.get_organ("head")
|
||||
H.r_hair = r_hair
|
||||
H.g_hair = g_hair
|
||||
H.b_hair = b_hair
|
||||
|
||||
character.r_facial = r_facial
|
||||
character.g_facial = g_facial
|
||||
character.b_facial = b_facial
|
||||
H.r_facial = r_facial
|
||||
H.g_facial = g_facial
|
||||
H.b_facial = b_facial
|
||||
|
||||
H.h_style = h_style
|
||||
H.f_style = f_style
|
||||
//End of head-specific.
|
||||
|
||||
character.r_skin = r_skin
|
||||
character.g_skin = g_skin
|
||||
@@ -1740,9 +1746,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
|
||||
character.s_tone = s_tone
|
||||
|
||||
character.h_style = h_style
|
||||
character.f_style = f_style
|
||||
|
||||
// Destroy/cyborgize organs
|
||||
for(var/name in organ_data)
|
||||
|
||||
@@ -1819,10 +1822,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
character.socks = socks
|
||||
|
||||
if(character.species.bodyflags & HAS_HEAD_ACCESSORY)
|
||||
character.r_headacc = r_headacc
|
||||
character.g_headacc = g_headacc
|
||||
character.b_headacc = b_headacc
|
||||
character.ha_style = ha_style
|
||||
H.r_headacc = r_headacc
|
||||
H.g_headacc = g_headacc
|
||||
H.b_headacc = b_headacc
|
||||
H.ha_style = ha_style
|
||||
if(character.species.bodyflags & HAS_MARKINGS)
|
||||
character.r_markings = r_markings
|
||||
character.g_markings = g_markings
|
||||
|
||||
@@ -176,9 +176,11 @@
|
||||
|
||||
/obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user)
|
||||
if(!istype(user)) return
|
||||
var/obj/item/organ/external/head/head_organ = user.get_organ("head")
|
||||
|
||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
||||
// mob2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty2") - Commented out because it seemingly does nothing.
|
||||
mob.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
||||
mob.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD)
|
||||
// mob2.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD) - Commented out because it seemingly does nothing.
|
||||
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
|
||||
@@ -201,8 +203,9 @@
|
||||
|
||||
/obj/item/clothing/head/kitty/mouse/update_icon(var/mob/living/carbon/human/user)
|
||||
if(!istype(user)) return
|
||||
var/obj/item/organ/external/head/head_organ = user.get_organ("head")
|
||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "mousey")
|
||||
mob.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
||||
mob.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD)
|
||||
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "mouseyinner")
|
||||
mob.Blend(earbit, ICON_OVERLAY)
|
||||
|
||||
@@ -18,16 +18,17 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_gender(var/gender, var/update_dna = 1)
|
||||
var/obj/item/organ/external/head/H = organs_by_name["head"]
|
||||
if(src.gender == gender)
|
||||
return
|
||||
|
||||
src.gender = gender
|
||||
|
||||
var/datum/sprite_accessory/hair/current_hair = hair_styles_list[h_style]
|
||||
var/datum/sprite_accessory/hair/current_hair = hair_styles_list[H.h_style]
|
||||
if(current_hair.gender != NEUTER && current_hair.gender != src.gender)
|
||||
reset_head_hair()
|
||||
|
||||
var/datum/sprite_accessory/hair/current_fhair = facial_hair_styles_list[f_style]
|
||||
var/datum/sprite_accessory/hair/current_fhair = facial_hair_styles_list[H.f_style]
|
||||
if(current_fhair.gender != NEUTER && current_fhair.gender != src.gender)
|
||||
reset_facial_hair()
|
||||
|
||||
@@ -38,59 +39,137 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_hair(var/hair_style)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!hair_style)
|
||||
return
|
||||
|
||||
if(h_style == hair_style)
|
||||
if(H.h_style == hair_style)
|
||||
return
|
||||
|
||||
if(!(hair_style in hair_styles_list))
|
||||
return
|
||||
|
||||
h_style = hair_style
|
||||
H.h_style = hair_style
|
||||
|
||||
update_hair()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!facial_hair_style)
|
||||
return
|
||||
|
||||
if(f_style == facial_hair_style)
|
||||
if(H.f_style == facial_hair_style)
|
||||
return
|
||||
|
||||
if(!(facial_hair_style in facial_hair_styles_list))
|
||||
return
|
||||
|
||||
f_style = facial_hair_style
|
||||
H.f_style = facial_hair_style
|
||||
|
||||
update_fhair()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_head_accessory(var/head_accessory_style)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!head_accessory_style)
|
||||
return
|
||||
|
||||
if(H.ha_style == head_accessory_style)
|
||||
return
|
||||
|
||||
if(!(head_accessory_style in head_accessory_styles_list))
|
||||
return
|
||||
|
||||
H.ha_style = head_accessory_style
|
||||
|
||||
update_head_accessory()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_markings(var/marking_style)
|
||||
if(!marking_style)
|
||||
return
|
||||
|
||||
if(src.m_style == marking_style)
|
||||
return
|
||||
|
||||
if(!(marking_style in marking_styles_list))
|
||||
return
|
||||
|
||||
src.m_style = marking_style
|
||||
|
||||
update_markings()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_body_accessory(var/body_accessory_style)
|
||||
var/found
|
||||
if(!body_accessory_style)
|
||||
return
|
||||
|
||||
if(src.body_accessory)
|
||||
if(src.body_accessory.name == body_accessory_style)
|
||||
return
|
||||
|
||||
for(var/B in body_accessory_by_name)
|
||||
if(B == body_accessory_style)
|
||||
src.body_accessory = body_accessory_by_name[body_accessory_style]
|
||||
found = 1
|
||||
|
||||
if(!found)
|
||||
return
|
||||
|
||||
update_tail_layer()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/reset_hair()
|
||||
reset_head_hair()
|
||||
reset_facial_hair()
|
||||
reset_head_accessory()
|
||||
if(m_style && m_style != "None") //Resets the markings if they were head markings.
|
||||
var/datum/sprite_accessory/marking_style = marking_styles_list[m_style]
|
||||
if(marking_style && marking_style.marking_location == "head")
|
||||
reset_markings()
|
||||
|
||||
/mob/living/carbon/human/proc/reset_head_hair()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
var/list/valid_hairstyles = generate_valid_hairstyles()
|
||||
|
||||
if(valid_hairstyles.len)
|
||||
h_style = pick(valid_hairstyles)
|
||||
H.h_style = pick(valid_hairstyles)
|
||||
else
|
||||
//this shouldn't happen
|
||||
h_style = "Bald"
|
||||
H.h_style = "Bald"
|
||||
|
||||
update_hair()
|
||||
|
||||
/mob/living/carbon/human/proc/reset_facial_hair()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles()
|
||||
if(valid_facial_hairstyles.len)
|
||||
f_style = pick(valid_facial_hairstyles)
|
||||
H.f_style = pick(valid_facial_hairstyles)
|
||||
else
|
||||
//this shouldn't happen
|
||||
f_style = "Shaved"
|
||||
H.f_style = "Shaved"
|
||||
update_fhair()
|
||||
|
||||
/mob/living/carbon/human/proc/reset_markings()
|
||||
var/list/valid_markings = generate_valid_markings()
|
||||
if(valid_markings.len)
|
||||
m_style = pick(valid_markings)
|
||||
else
|
||||
//this shouldn't happen
|
||||
m_style = "None"
|
||||
update_markings()
|
||||
|
||||
/mob/living/carbon/human/proc/reset_head_accessory()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
var/list/valid_head_accessories = generate_valid_head_accessories()
|
||||
if(valid_head_accessories.len)
|
||||
H.ha_style = pick(valid_head_accessories)
|
||||
else
|
||||
//this shouldn't happen
|
||||
H.ha_style = "None"
|
||||
update_head_accessory()
|
||||
|
||||
/mob/living/carbon/human/proc/change_eye_color(var/red, var/green, var/blue)
|
||||
if(red == r_eyes && green == g_eyes && blue == b_eyes)
|
||||
return
|
||||
@@ -104,27 +183,53 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue)
|
||||
if(red == r_eyes && green == g_eyes && blue == b_eyes)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(red == H.r_hair && green == H.g_hair && blue == H.b_hair)
|
||||
return
|
||||
|
||||
r_hair = red
|
||||
g_hair = green
|
||||
b_hair = blue
|
||||
H.r_hair = red
|
||||
H.g_hair = green
|
||||
H.b_hair = blue
|
||||
|
||||
update_hair()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue)
|
||||
if(red == r_facial && green == g_facial && blue == b_facial)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(red == H.r_facial && green == H.g_facial && blue == H.b_facial)
|
||||
return
|
||||
|
||||
r_facial = red
|
||||
g_facial = green
|
||||
b_facial = blue
|
||||
H.r_facial = red
|
||||
H.g_facial = green
|
||||
H.b_facial = blue
|
||||
|
||||
update_fhair()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_head_accessory_color(var/red, var/green, var/blue)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(red == H.r_headacc && green == H.g_headacc && blue == H.b_headacc)
|
||||
return
|
||||
|
||||
H.r_headacc = red
|
||||
H.g_headacc = green
|
||||
H.b_headacc = blue
|
||||
|
||||
update_head_accessory()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_marking_color(var/red, var/green, var/blue)
|
||||
if(red == r_markings && green == g_markings && blue == b_markings)
|
||||
return
|
||||
|
||||
r_markings = red
|
||||
g_markings = green
|
||||
b_markings = blue
|
||||
|
||||
update_markings()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue)
|
||||
if(red == r_skin && green == g_skin && blue == b_skin || !(species.bodyflags & HAS_SKIN_COLOR))
|
||||
return
|
||||
@@ -170,6 +275,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_hairstyles()
|
||||
var/list/valid_hairstyles = new()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
|
||||
@@ -177,12 +283,11 @@
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
var/obj/item/organ/external/head/H = organs_by_name["head"]
|
||||
if(H.species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(!H)
|
||||
return
|
||||
if(species.name in S.species_allowed) //If this is a hairstyle native to the user's species...
|
||||
if(H.species.name in S.species_allowed) //If this is a hairstyle native to the user's species...
|
||||
if(robohead.is_monitor && (robohead.company in S.models_allowed)) //Check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
|
||||
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
|
||||
continue
|
||||
@@ -195,8 +300,8 @@
|
||||
if("Human" in S.species_allowed) //If the user has a robotic head and the hairstyle can fit humans, let them use it as a wig for their humanoid robot head.
|
||||
valid_hairstyles += hairstyle
|
||||
continue
|
||||
else
|
||||
if(!(species.name in S.species_allowed)) //If the user is not a species who can have robotic heads, use the default handling.
|
||||
else //If the user is not a species who can have robotic heads, use the default handling.
|
||||
if(!(H.species.name in S.species_allowed)) //If the user's head is not of a species the hair style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
valid_hairstyles += hairstyle
|
||||
|
||||
@@ -204,6 +309,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_facial_hairstyles()
|
||||
var/list/valid_facial_hairstyles = new()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
@@ -211,12 +317,11 @@
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
var/obj/item/organ/external/head/H = organs_by_name["head"]
|
||||
if(H.species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(!H)
|
||||
continue // No head, no hair
|
||||
if(species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
|
||||
if(H.species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
|
||||
if(robohead.is_monitor && (robohead.company in S.models_allowed)) //Check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
|
||||
valid_facial_hairstyles += facialhairstyle //Give them their facial hair styles if they do.
|
||||
continue
|
||||
@@ -231,8 +336,52 @@
|
||||
valid_facial_hairstyles += facialhairstyle
|
||||
continue
|
||||
else //If the user is not a species who can have robotic heads, use the default handling.
|
||||
if(!(species.name in S.species_allowed))
|
||||
if(!(H.species.name in S.species_allowed)) //If the user's head is not of a species the facial hair style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
valid_facial_hairstyles += facialhairstyle
|
||||
|
||||
return valid_facial_hairstyles
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_head_accessories()
|
||||
var/list/valid_head_accessories = new()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
for(var/head_accessory in head_accessory_styles_list)
|
||||
var/datum/sprite_accessory/S = head_accessory_styles_list[head_accessory]
|
||||
|
||||
if(!(H.species.name in S.species_allowed)) //If the user's head is not of a species the head accessory style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
valid_head_accessories += head_accessory
|
||||
|
||||
return valid_head_accessories
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_markings()
|
||||
var/list/valid_markings = new()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
for(var/marking in marking_styles_list)
|
||||
var/datum/sprite_accessory/S = marking_styles_list[marking]
|
||||
|
||||
if(!(species.name in S.species_allowed)) //If the user's head is not of a species the marking style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
if(H.species.flags & ALL_RPARTS) //If the user is a species that can have a robotic head...
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head.
|
||||
continue
|
||||
valid_markings += marking
|
||||
|
||||
return valid_markings
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_body_accessories()
|
||||
var/list/valid_body_accessories = new()
|
||||
for(var/B in body_accessory_by_name)
|
||||
var/datum/body_accessory/A = body_accessory_by_name[B]
|
||||
if(check_rights(R_ADMIN, 1, src))
|
||||
valid_body_accessories = body_accessory_by_name.Copy()
|
||||
else
|
||||
if(!istype(A))
|
||||
valid_body_accessories += "None" //The only null entry should be the "None" option.
|
||||
continue
|
||||
if(!(species.name in A.allowed_species)) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
|
||||
continue
|
||||
valid_body_accessories += B
|
||||
|
||||
return valid_body_accessories
|
||||
|
||||
@@ -145,12 +145,13 @@
|
||||
return ..(gibbed)
|
||||
|
||||
/mob/living/carbon/human/proc/makeSkeleton()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(SKELETON in src.mutations) return
|
||||
|
||||
if(f_style)
|
||||
f_style = "Shaved"
|
||||
if(h_style)
|
||||
h_style = "Bald"
|
||||
if(H.f_style)
|
||||
H.f_style = "Shaved"
|
||||
if(H.h_style)
|
||||
H.h_style = "Bald"
|
||||
update_fhair(0)
|
||||
update_hair(0)
|
||||
|
||||
@@ -162,12 +163,13 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/ChangeToHusk()
|
||||
var/obj/item/organ/external/head/H = organs_by_name["head"]
|
||||
if(HUSK in mutations) return
|
||||
|
||||
if(f_style)
|
||||
f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE
|
||||
if(h_style)
|
||||
h_style = "Bald"
|
||||
if(H.f_style)
|
||||
H.f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE
|
||||
if(H.h_style)
|
||||
H.h_style = "Bald"
|
||||
update_fhair(0)
|
||||
update_hair(0)
|
||||
|
||||
|
||||
@@ -307,18 +307,28 @@
|
||||
if (M == src)
|
||||
M = null
|
||||
|
||||
if (M)
|
||||
if(src.lying || src.weakened)
|
||||
if(M)
|
||||
if(lying || weakened)
|
||||
message = "<B>[src]</B> flops and flails around on the floor."
|
||||
else
|
||||
message = "<B>[src]</B> flips in [M]'s general direction."
|
||||
src.SpinAnimation(5,1)
|
||||
SpinAnimation(5,1)
|
||||
else
|
||||
if(src.lying || src.weakened)
|
||||
if(lying || weakened)
|
||||
message = "<B>[src]</B> flops and flails around on the floor."
|
||||
else
|
||||
message = "<B>[src]</B> does a flip!"
|
||||
src.SpinAnimation(5,1)
|
||||
var/obj/item/weapon/grab/G = get_active_hand()
|
||||
if(G && G.affecting)
|
||||
var/turf/oldloc = loc
|
||||
var/turf/newloc = G.affecting.loc
|
||||
if(isturf(oldloc) && isturf(newloc))
|
||||
SpinAnimation(5,1)
|
||||
forceMove(newloc)
|
||||
G.affecting.forceMove(oldloc)
|
||||
message = "<B>[src]</B> flips over [G.affecting]!"
|
||||
else
|
||||
message = "<B>[src]</B> does a flip!"
|
||||
SpinAnimation(5,1)
|
||||
|
||||
if ("aflap", "aflaps")
|
||||
if (!src.restrained())
|
||||
|
||||
@@ -74,38 +74,30 @@
|
||||
status_flags = GODMODE|CANPUSH
|
||||
|
||||
/mob/living/carbon/human/skrell/New(var/new_loc)
|
||||
h_style = "Skrell Male Tentacles"
|
||||
..(new_loc, "Skrell")
|
||||
|
||||
/mob/living/carbon/human/tajaran/New(var/new_loc)
|
||||
ha_style = "Tajaran Ears"
|
||||
..(new_loc, "Tajaran")
|
||||
|
||||
/mob/living/carbon/human/vulpkanin/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Vulpkanin")
|
||||
|
||||
/mob/living/carbon/human/unathi/New(var/new_loc)
|
||||
h_style = "Unathi Horns"
|
||||
..(new_loc, "Unathi")
|
||||
|
||||
/mob/living/carbon/human/vox/New(var/new_loc)
|
||||
h_style = "Short Vox Quills"
|
||||
..(new_loc, "Vox")
|
||||
|
||||
/mob/living/carbon/human/voxarmalis/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Vox Armalis")
|
||||
|
||||
/mob/living/carbon/human/skeleton/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Skeleton")
|
||||
|
||||
/mob/living/carbon/human/kidan/New(var/new_loc)
|
||||
..(new_loc, "Kidan")
|
||||
|
||||
/mob/living/carbon/human/plasma/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Plasmaman")
|
||||
|
||||
/mob/living/carbon/human/slime/New(var/new_loc)
|
||||
@@ -121,31 +113,24 @@
|
||||
..(new_loc, "Human")
|
||||
|
||||
/mob/living/carbon/human/diona/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Diona")
|
||||
|
||||
/mob/living/carbon/human/machine/New(var/new_loc)
|
||||
h_style = "blue IPC screen"
|
||||
..(new_loc, "Machine")
|
||||
|
||||
/mob/living/carbon/human/shadow/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Shadow")
|
||||
|
||||
/mob/living/carbon/human/golem/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Golem")
|
||||
|
||||
/mob/living/carbon/human/wryn/New(var/new_loc)
|
||||
h_style = "Antennae"
|
||||
..(new_loc, "Wryn")
|
||||
|
||||
/mob/living/carbon/human/nucleation/New(var/new_loc)
|
||||
h_style = "Nucleation Crystals"
|
||||
..(new_loc, "Nucleation")
|
||||
|
||||
/mob/living/carbon/human/drask/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Drask")
|
||||
|
||||
/mob/living/carbon/human/monkey/New(var/new_loc)
|
||||
@@ -1505,6 +1490,15 @@
|
||||
|
||||
species.create_organs(src)
|
||||
|
||||
//Handle default hair/head accessories for created mobs.
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(species.default_hair)
|
||||
H.h_style = species.default_hair
|
||||
if(species.default_fhair)
|
||||
H.f_style = species.default_fhair
|
||||
if(species.default_headacc)
|
||||
H.ha_style = species.default_headacc
|
||||
|
||||
if(!dna)
|
||||
dna = new /datum/dna(null)
|
||||
dna.species = species.name
|
||||
@@ -1601,9 +1595,8 @@
|
||||
return
|
||||
|
||||
if(species.flags & ALL_RPARTS) //If they can have a fully cybernetic body...
|
||||
var/obj/item/organ/external/head/H = organs_by_name["head"]
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(!H)
|
||||
var/datum/robolimb/robohead = all_robolimbs[head_organ.model]
|
||||
if(!head_organ)
|
||||
return
|
||||
if(!robohead.is_monitor) //If they've got a prosthetic head and it isn't a monitor, they've no screen to adjust. Instead, let them change the colour of their optics!
|
||||
var/optic_colour = input(src, "Select optic colour", rgb(r_markings, g_markings, b_markings)) as color|null
|
||||
@@ -1620,15 +1613,15 @@
|
||||
var/list/hair = list()
|
||||
for(var/i in hair_styles_list)
|
||||
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
|
||||
if((species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
|
||||
if((head_organ.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
|
||||
hair += i
|
||||
|
||||
var/new_style = input(src, "Select a monitor display", "Monitor Display", h_style) as null|anything in hair
|
||||
var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
|
||||
if(incapacitated())
|
||||
to_chat(src, "<span class='warning'>You were interrupted while changing your monitor display.</span>")
|
||||
return
|
||||
if(new_style)
|
||||
h_style = new_style
|
||||
head_organ.h_style = new_style
|
||||
|
||||
update_hair()
|
||||
|
||||
|
||||
@@ -9,24 +9,6 @@ var/global/default_martial_art = new/datum/martial_art
|
||||
var/b_markings = 0
|
||||
var/m_style = "None"
|
||||
|
||||
//Hair colour and style
|
||||
var/r_hair = 0
|
||||
var/g_hair = 0
|
||||
var/b_hair = 0
|
||||
var/h_style = "Bald"
|
||||
|
||||
//Head accessory colour and style
|
||||
var/r_headacc = 0
|
||||
var/g_headacc = 0
|
||||
var/b_headacc = 0
|
||||
var/ha_style = "None"
|
||||
|
||||
//Facial hair colour and style
|
||||
var/r_facial = 0
|
||||
var/g_facial = 0
|
||||
var/b_facial = 0
|
||||
var/f_style = "Shaved"
|
||||
|
||||
//Eye colour
|
||||
var/r_eyes = 0
|
||||
var/g_eyes = 0
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
base_color = "#704300"
|
||||
flesh_color = "#704300"
|
||||
blood_color = "#FFFF99"
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Antennae"
|
||||
|
||||
|
||||
/datum/species/wryn/handle_death(var/mob/living/carbon/human/H)
|
||||
@@ -54,6 +56,7 @@
|
||||
to_chat(C, "<span class='danger'>It feels like part of you has died.</span>")
|
||||
|
||||
/datum/species/wryn/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M)
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
if(M.a_intent == I_HARM)
|
||||
if(H.handcuffed)
|
||||
if(!H.get_int_organ(/obj/item/organ/internal/wryn/hivenode)) return
|
||||
@@ -71,7 +74,7 @@
|
||||
to_chat(M, "<span class='notice'>You hear a loud crunch as you mercilessly pull off [H]'s antennae.</span>")
|
||||
to_chat(H, "<span class='danger'><B>You hear a loud crunch as your antennae is ripped off your head by [M].</span></B>")
|
||||
to_chat(H, "<span class='danger'><span class='danger'><B>It's so quiet...</B></span>")
|
||||
H.h_style = "Bald"
|
||||
head_organ.h_style = "Bald"
|
||||
H.update_hair()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>removed antennae [H.name] ([H.ckey])</font>")
|
||||
@@ -87,7 +90,7 @@
|
||||
blurb = "A sub-race of unforunates who have been exposed to too much supermatter radiation. As a result, \
|
||||
supermatter crystal clusters have begun to grow across their bodies. Research to find a cure for this ailment \
|
||||
has been slow, and so this is a common fate for veteran engineers. The supermatter crystals produce oxygen, \
|
||||
negating the need for the individual to breath. Their massive change in biology, however, renders most medicines \
|
||||
negating the need for the individual to breathe. Their massive change in biology, however, renders most medicines \
|
||||
obselete. Ionizing radiation seems to cause resonance in some of their crystals, which seems to encourage regeneration \
|
||||
and produces a calming effect on the individual. Nucleations are highly stigmatized, and are treated much in the same \
|
||||
way as lepers were back on Earth."
|
||||
@@ -97,6 +100,9 @@
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_BLOOD | NO_PAIN | HAS_LIPS | NO_SCAN
|
||||
dietflags = DIET_OMNI //still human at their core, so they maintain their eating habits and diet
|
||||
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Nucleation Crystals"
|
||||
|
||||
reagent_tag = PROCESS_ORG
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/internal/heart,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
deform = 'icons/mob/human_races/r_golem.dmi'
|
||||
|
||||
default_language = "Galactic Common"
|
||||
flags = NO_BREATHE | NO_BLOOD | RADIMMUNE
|
||||
flags = NO_BREATHE | NO_BLOOD | RADIMMUNE | NOGUNS
|
||||
virus_immune = 1
|
||||
dietflags = DIET_OMNI //golems can eat anything because they are magic or something
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
flags = IS_RESTRICTED
|
||||
|
||||
/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H)
|
||||
if(H.stat != CONSCIOUS)
|
||||
return
|
||||
|
||||
@@ -118,6 +118,11 @@
|
||||
var/male_scream_sound = 'sound/goonstation/voice/male_scream.ogg'
|
||||
var/female_scream_sound = 'sound/goonstation/voice/female_scream.ogg'
|
||||
|
||||
//Default hair/headacc style vars.
|
||||
var/default_hair = "Bald" //Default hair style for newly created humans unless otherwise set.
|
||||
var/default_fhair = "Shaved" //Default facial hair style for newly created humans unless otherwise set.
|
||||
var/default_headacc = "None" //Default head accessory style for newly created humans unless otherwise set.
|
||||
|
||||
// Determines the organs that the species spawns with and
|
||||
var/list/has_organ = list( // which required-organ checks are conducted.
|
||||
"heart" = /obj/item/organ/internal/heart,
|
||||
@@ -158,7 +163,6 @@
|
||||
|
||||
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
|
||||
|
||||
|
||||
for(var/obj/item/organ/internal/iorgan in H.internal_organs)
|
||||
if(iorgan in H.internal_organs)
|
||||
qdel(iorgan)
|
||||
|
||||
@@ -55,6 +55,8 @@
|
||||
flesh_color = "#34AF10"
|
||||
reagent_tag = PROCESS_ORG
|
||||
base_color = "#066000"
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Unathi Horns"
|
||||
|
||||
allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
|
||||
/mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
|
||||
@@ -109,6 +111,8 @@
|
||||
reagent_tag = PROCESS_ORG
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
//Default styles for created mobs.
|
||||
default_headacc = "Tajaran Ears"
|
||||
|
||||
allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot,
|
||||
/mob/living/simple_animal/tribble)
|
||||
@@ -189,6 +193,8 @@
|
||||
dietflags = DIET_HERB
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Skrell Male Tentacles"
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
suicide_messages = list(
|
||||
@@ -251,6 +257,8 @@
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Short Vox Quills"
|
||||
|
||||
reagent_tag = PROCESS_ORG
|
||||
scream_verb = "shrieks"
|
||||
@@ -751,6 +759,8 @@
|
||||
dietflags = 0 //IPCs can't eat, so no diet
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#AAAAAA"
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Blue IPC Screen"
|
||||
virus_immune = 1
|
||||
can_revive_by_healing = 1
|
||||
reagent_tag = PROCESS_SYN
|
||||
@@ -791,6 +801,10 @@
|
||||
)
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
H.h_style = ""
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
head_organ.h_style = "Bald"
|
||||
head_organ.f_style = "Shaved"
|
||||
spawn(100)
|
||||
if(H) H.update_hair()
|
||||
if(H)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
@@ -393,13 +393,13 @@ var/global/list/damage_icon_parts = list()
|
||||
//base icons
|
||||
var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
|
||||
|
||||
if(ha_style && (src.species.bodyflags & HAS_HEAD_ACCESSORY))
|
||||
var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[ha_style]
|
||||
if(head_organ.ha_style && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY))
|
||||
var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style]
|
||||
if(head_accessory_style && head_accessory_style.species_allowed)
|
||||
if(src.species.name in head_accessory_style.species_allowed)
|
||||
if(head_organ.species.name in head_accessory_style.species_allowed)
|
||||
var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s")
|
||||
if(head_accessory_style.do_colouration)
|
||||
head_accessory_s.Blend(rgb(r_headacc, g_headacc, b_headacc), ICON_ADD)
|
||||
head_accessory_s.Blend(rgb(head_organ.r_headacc, head_organ.g_headacc, head_organ.b_headacc), ICON_ADD)
|
||||
head_accessory_standing = head_accessory_s //head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY)
|
||||
//Having it this way preserves animations. Useful for animated antennae.
|
||||
else
|
||||
@@ -429,17 +429,17 @@ var/global/list/damage_icon_parts = list()
|
||||
var/icon/hair_standing = new /icon('icons/mob/human_face.dmi',"bald_s")
|
||||
//var/icon/debrained_s = new /icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s")
|
||||
|
||||
if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic())))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(head_organ.h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic())))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[head_organ.h_style]
|
||||
//if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN
|
||||
// hair_standing.Blend(debrained_s, ICON_OVERLAY)
|
||||
if(hair_style && hair_style.species_allowed)
|
||||
if((src.species.name in hair_style.species_allowed) || (src.species.flags & ALL_RPARTS))
|
||||
if((head_organ.species.name in hair_style.species_allowed) || (head_organ.species.flags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
if(src.get_species() == "Slime People") // I am el worstos
|
||||
if(head_organ.species.name == "Slime People") // I am el worstos
|
||||
hair_s.Blend(rgb(r_skin, g_skin, b_skin, 160), ICON_AND)
|
||||
else if(hair_style.do_colouration)
|
||||
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||
hair_s.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD)
|
||||
|
||||
hair_standing = hair_s //hair_standing.Blend(hair_s, ICON_OVERLAY)
|
||||
//Having it this way preserves animations. Useful for IPC screens.
|
||||
@@ -470,15 +470,15 @@ var/global/list/damage_icon_parts = list()
|
||||
//base icons
|
||||
var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s")
|
||||
|
||||
if(f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(head_organ.f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[head_organ.f_style]
|
||||
if(facial_hair_style && facial_hair_style.species_allowed)
|
||||
if((src.species.name in facial_hair_style.species_allowed) || (src.species.flags & ALL_RPARTS))
|
||||
if((head_organ.species.name in facial_hair_style.species_allowed) || (head_organ.species.flags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
if(src.get_species() == "Slime People") // I am el worstos
|
||||
if(head_organ.species.name == "Slime People") // I am el worstos
|
||||
facial_s.Blend(rgb(r_skin, g_skin, b_skin, 160), ICON_AND)
|
||||
else if(facial_hair_style.do_colouration)
|
||||
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
|
||||
facial_s.Blend(rgb(head_organ.r_facial, head_organ.g_facial, head_organ.b_facial), ICON_ADD)
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
else
|
||||
//warning("Invalid f_style for [species.name]: [f_style]")
|
||||
@@ -1265,22 +1265,23 @@ var/global/list/damage_icon_parts = list()
|
||||
//gender no longer matters for the mouth, although there should probably be seperate base head icons.
|
||||
// var/g = "m"
|
||||
// if (gender == FEMALE) g = "f"
|
||||
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
//base icons
|
||||
var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l")
|
||||
|
||||
if(f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
|
||||
if(H.f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.f_style]
|
||||
if(facial_hair_style)
|
||||
var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l")
|
||||
facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
|
||||
facial_l.Blend(rgb(H.r_facial, H.g_facial, H.b_facial), ICON_ADD)
|
||||
face_lying.Blend(facial_l, ICON_OVERLAY)
|
||||
|
||||
if(h_style)
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(H.h_style)
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l")
|
||||
hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||
hair_l.Blend(rgb(H.r_hair, H.g_hair, H.b_hair), ICON_ADD)
|
||||
face_lying.Blend(hair_l, ICON_OVERLAY)
|
||||
|
||||
//Eyes
|
||||
|
||||
@@ -148,6 +148,7 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/recruit/cast(list/targets)
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
var/obj/item/organ/external/head/head_organ = target.get_organ("head")
|
||||
if(ticker.mode.greyshirts.len >= 3)
|
||||
to_chat(usr, "<span class='warning'>You have already recruited the maximum number of henchmen.</span>")
|
||||
if(!in_range(usr, target))
|
||||
@@ -210,8 +211,8 @@
|
||||
to_chat(target, "<span class='deadsay'>You may not harm other Greyshirt or [usr]. However, you do not need to obey other Greyshirts.</span>")
|
||||
ticker.mode.greyshirts += target.mind
|
||||
target.set_species("Human")
|
||||
target.h_style = "Bald"
|
||||
target.f_style = "Shaved"
|
||||
head_organ.h_style = "Bald"
|
||||
head_organ.f_style = "Shaved"
|
||||
target.s_tone = 35
|
||||
target.r_eyes = 1
|
||||
target.b_eyes = 1
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
if(c.can_use())
|
||||
cameras += c
|
||||
|
||||
for(var/turf/t in block(locate(x, y, z), locate(min(x + CHUNK_SIZE - 1, world.maxx), min(y + CHUNK_SIZE - 1, world.maxy), z)))
|
||||
for(var/turf/t in block(locate(max(x, 1), max(y, 1), max(z, 1)), locate(min(x + CHUNK_SIZE - 1, world.maxx), min(y + CHUNK_SIZE - 1, world.maxy), z)))
|
||||
turfs[t] = t
|
||||
|
||||
for(var/camera in cameras)
|
||||
|
||||
@@ -492,7 +492,7 @@
|
||||
if(reagent_id == "internal_beaker")
|
||||
if(use_beaker && reagent_glass && reagent_glass.reagents.total_volume)
|
||||
var/fraction = min(injection_amount/reagent_glass.reagents.total_volume, 1)
|
||||
reagent_glass.reagents.reaction(patient, 2, fraction)
|
||||
reagent_glass.reagents.reaction(patient, INGEST, fraction)
|
||||
reagent_glass.reagents.trans_to(patient, injection_amount) //Inject from beaker instead.
|
||||
else
|
||||
patient.reagents.add_reagent(reagent_id,injection_amount)
|
||||
|
||||
@@ -88,13 +88,17 @@
|
||||
stat("Time To Start:", "DELAYED")
|
||||
|
||||
if(ticker.current_state == GAME_STATE_PREGAME)
|
||||
stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]")
|
||||
stat("Players:", "[totalPlayers]")
|
||||
if(client.holder)
|
||||
stat("Players Ready:", "[totalPlayersReady]")
|
||||
totalPlayers = 0
|
||||
totalPlayersReady = 0
|
||||
for(var/mob/new_player/player in player_list)
|
||||
stat("[player.key]", (player.ready)?("(Playing)"):(null))
|
||||
if(client.holder)
|
||||
stat("[player.key]", (player.ready)?("(Playing)"):(null))
|
||||
totalPlayers++
|
||||
if(player.ready)totalPlayersReady++
|
||||
if(player.ready)
|
||||
totalPlayersReady++
|
||||
|
||||
/mob/new_player/Topic(href, href_list[])
|
||||
if(!client) return 0
|
||||
|
||||
@@ -886,12 +886,12 @@
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_quills_fluff
|
||||
name = "Fluffy Quills"
|
||||
name = "Fluffy Vox Quills"
|
||||
icon_state = "vox_afro"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_quills_mohawk
|
||||
name = "Quill Mohawk"
|
||||
name = "Vox Quill Mohawk"
|
||||
icon_state = "vox_mohawk"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
@@ -910,6 +910,11 @@
|
||||
icon_state = "vox_nights"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_razor
|
||||
name = "Vox Razorback"
|
||||
icon_state = "vox_razor"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
// Apollo-specific
|
||||
|
||||
//Wryn antennae
|
||||
@@ -1893,22 +1898,22 @@
|
||||
icon_state = "markings_tiger"
|
||||
|
||||
/datum/sprite_accessory/body_markings/tigerhead
|
||||
name = "Tiger Body + Head"
|
||||
name = "Tiger Body and Head"
|
||||
species_allowed = list("Unathi", "Tajaran", "Vulpkanin")
|
||||
icon_state = "markings_tigerhead"
|
||||
|
||||
/datum/sprite_accessory/body_markings/tigerheadface_taj
|
||||
name = "Tajaran Tiger Body + Head + Face"
|
||||
name = "Tajaran Tiger Body, Head and Face"
|
||||
species_allowed = list("Tajaran")
|
||||
icon_state = "markings_tigerheadface_taj"
|
||||
|
||||
/datum/sprite_accessory/body_markings/tigerheadface_vulp
|
||||
name = "Vulpkanin Tiger Body + Head + Face"
|
||||
name = "Vulpkanin Tiger Body, Head and Face"
|
||||
species_allowed = list("Vulpkanin")
|
||||
icon_state = "markings_tigerheadface_vulp"
|
||||
|
||||
/datum/sprite_accessory/body_markings/tigerheadface_una
|
||||
name = "Unathi Tiger Body + Head + Face"
|
||||
name = "Unathi Tiger Body, Head and Face"
|
||||
species_allowed = list("Unathi")
|
||||
icon_state = "markings_tigerheadface_una"
|
||||
|
||||
|
||||
@@ -319,6 +319,35 @@
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/paize(var/name)
|
||||
if(notransform)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
for(var/t in organs) //this really should not be necessary
|
||||
qdel(t)
|
||||
|
||||
var/obj/item/device/paicard/card = new(loc)
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
pai.key = key
|
||||
card.setPersonality(pai)
|
||||
|
||||
pai.name = name
|
||||
pai.real_name = name
|
||||
card.name = name
|
||||
|
||||
to_chat(pai, "<B>You have become a pAI! Your name is [pai.name].</B>")
|
||||
pai.update_pipe_vision()
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/mob/proc/safe_respawn(var/MP)
|
||||
if(!MP)
|
||||
return 0
|
||||
|
||||
@@ -2,9 +2,13 @@
|
||||
name = "Appearance Editor"
|
||||
var/flags = APPEARANCE_ALL_HAIR
|
||||
var/mob/living/carbon/human/owner = null
|
||||
var/obj/item/organ/external/head/head_organ = null
|
||||
var/list/valid_species = list()
|
||||
var/list/valid_hairstyles = list()
|
||||
var/list/valid_facial_hairstyles = list()
|
||||
var/list/valid_head_accessories = list()
|
||||
var/list/valid_marking_styles = list()
|
||||
var/list/valid_body_accessories = list()
|
||||
|
||||
var/check_whitelist
|
||||
var/list/whitelist
|
||||
@@ -13,6 +17,7 @@
|
||||
/datum/nano_module/appearance_changer/New(var/location, var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list())
|
||||
..()
|
||||
owner = H
|
||||
head_organ = owner.get_organ("head")
|
||||
src.check_whitelist = check_species_whitelist
|
||||
src.whitelist = species_whitelist
|
||||
src.blacklist = species_blacklist
|
||||
@@ -54,7 +59,7 @@
|
||||
return 1
|
||||
if(href_list["hair_color"])
|
||||
if(can_change(APPEARANCE_HAIR_COLOR))
|
||||
var/new_hair = input("Please select hair color.", "Hair Color", rgb(owner.r_hair, owner.g_hair, owner.b_hair)) as color|null
|
||||
var/new_hair = input("Please select hair color.", "Hair Color", rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair)) as color|null
|
||||
if(new_hair && can_still_topic(state))
|
||||
var/r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
var/g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
@@ -69,7 +74,7 @@
|
||||
return 1
|
||||
if(href_list["facial_hair_color"])
|
||||
if(can_change(APPEARANCE_FACIAL_HAIR_COLOR))
|
||||
var/new_facial = input("Please select facial hair color.", "Facial Hair Color", rgb(owner.r_facial, owner.g_facial, owner.b_facial)) as color|null
|
||||
var/new_facial = input("Please select facial hair color.", "Facial Hair Color", rgb(head_organ.r_facial, head_organ.g_facial, head_organ.b_facial)) as color|null
|
||||
if(new_facial && can_still_topic(state))
|
||||
var/r_facial = hex2num(copytext(new_facial, 2, 4))
|
||||
var/g_facial = hex2num(copytext(new_facial, 4, 6))
|
||||
@@ -87,6 +92,41 @@
|
||||
if(owner.change_eye_color(r_eyes, g_eyes, b_eyes))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["head_accessory"])
|
||||
if(can_change_head_accessory() && (href_list["head_accessory"] in valid_head_accessories))
|
||||
if(owner.change_head_accessory(href_list["head_accessory"]))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["head_accessory_color"])
|
||||
if(can_change_head_accessory())
|
||||
var/new_head_accessory = input("Please select head accessory color.", "Head Accessory Color", rgb(head_organ.r_headacc, head_organ.g_headacc, head_organ.b_headacc)) as color|null
|
||||
if(new_head_accessory && can_still_topic(state))
|
||||
var/r_headacc = hex2num(copytext(new_head_accessory, 2, 4))
|
||||
var/g_headacc = hex2num(copytext(new_head_accessory, 4, 6))
|
||||
var/b_headacc = hex2num(copytext(new_head_accessory, 6, 8))
|
||||
if(owner.change_head_accessory_color(r_headacc, g_headacc, b_headacc))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["marking"])
|
||||
if(can_change_markings() && (href_list["marking"] in valid_marking_styles))
|
||||
if(owner.change_markings(href_list["marking"]))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["marking_color"])
|
||||
if(can_change_markings())
|
||||
var/new_markings = input("Please select marking color.", "Marking Color", rgb(owner.r_markings, owner.g_markings, owner.b_markings)) as color|null
|
||||
if(new_markings && can_still_topic(state))
|
||||
var/r_markings = hex2num(copytext(new_markings, 2, 4))
|
||||
var/g_markings = hex2num(copytext(new_markings, 4, 6))
|
||||
var/b_markings = hex2num(copytext(new_markings, 6, 8))
|
||||
if(owner.change_marking_color(r_markings, g_markings, b_markings))
|
||||
update_dna()
|
||||
return 1
|
||||
if(href_list["body_accessory"])
|
||||
if(can_change_body_accessory() && (href_list["body_accessory"] in valid_body_accessories))
|
||||
if(owner.change_body_accessory(href_list["body_accessory"]))
|
||||
update_dna()
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
@@ -107,13 +147,21 @@
|
||||
data["change_skin_tone"] = can_change_skin_tone()
|
||||
data["change_skin_color"] = can_change_skin_color()
|
||||
data["change_eye_color"] = can_change(APPEARANCE_EYE_COLOR)
|
||||
data["change_head_accessory"] = can_change_head_accessory()
|
||||
if(data["change_head_accessory"])
|
||||
var/head_accessory_styles[0]
|
||||
for(var/head_accessory_style in valid_head_accessories)
|
||||
head_accessory_styles[++head_accessory_styles.len] = list("headaccessorystyle" = head_accessory_style)
|
||||
data["head_accessory_styles"] = head_accessory_styles
|
||||
data["head_accessory_style"] = head_organ.ha_style
|
||||
|
||||
data["change_hair"] = can_change(APPEARANCE_HAIR)
|
||||
if(data["change_hair"])
|
||||
var/hair_styles[0]
|
||||
for(var/hair_style in valid_hairstyles)
|
||||
hair_styles[++hair_styles.len] = list("hairstyle" = hair_style)
|
||||
data["hair_styles"] = hair_styles
|
||||
data["hair_style"] = owner.h_style
|
||||
data["hair_style"] = head_organ.h_style
|
||||
|
||||
data["change_facial_hair"] = can_change(APPEARANCE_FACIAL_HAIR)
|
||||
if(data["change_facial_hair"])
|
||||
@@ -121,10 +169,31 @@
|
||||
for(var/facial_hair_style in valid_facial_hairstyles)
|
||||
facial_hair_styles[++facial_hair_styles.len] = list("facialhairstyle" = facial_hair_style)
|
||||
data["facial_hair_styles"] = facial_hair_styles
|
||||
data["facial_hair_style"] = owner.f_style
|
||||
data["facial_hair_style"] = head_organ.f_style
|
||||
|
||||
data["change_markings"] = can_change_markings()
|
||||
if(data["change_markings"])
|
||||
var/marking_styles[0]
|
||||
for(var/marking_style in valid_marking_styles)
|
||||
marking_styles[++marking_styles.len] = list("markingstyle" = marking_style)
|
||||
data["marking_styles"] = marking_styles
|
||||
data["marking_style"] = owner.m_style
|
||||
|
||||
data["change_body_accessory"] = can_change_body_accessory()
|
||||
if(data["change_body_accessory"])
|
||||
var/body_accessory_styles[0]
|
||||
for(var/body_accessory_style in valid_body_accessories)
|
||||
body_accessory_styles[++body_accessory_styles.len] = list("bodyaccessorystyle" = body_accessory_style)
|
||||
data["body_accessory_styles"] = body_accessory_styles
|
||||
var/datum/body_accessory/BA
|
||||
if(owner.body_accessory)
|
||||
BA = owner.body_accessory.name
|
||||
data["body_accessory_style"] = BA
|
||||
|
||||
data["change_head_accessory_color"] = can_change_head_accessory()
|
||||
data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR)
|
||||
data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR)
|
||||
data["change_marking_color"] = can_change_markings()
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state)
|
||||
@@ -145,10 +214,22 @@
|
||||
/datum/nano_module/appearance_changer/proc/can_change_skin_color()
|
||||
return owner && (flags & APPEARANCE_SKIN) && (owner.species.bodyflags & HAS_SKIN_COLOR)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/can_change_head_accessory()
|
||||
return owner && (flags & APPEARANCE_HEAD_ACCESSORY) && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/can_change_markings()
|
||||
return owner && (flags & APPEARANCE_MARKINGS) && (owner.species.bodyflags & HAS_MARKINGS)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/can_change_body_accessory()
|
||||
return owner && (flags & APPEARANCE_BODY_ACCESSORY) && (owner.species.bodyflags & HAS_TAIL)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/cut_and_generate_data()
|
||||
// Making the assumption that the available species remain constant
|
||||
valid_hairstyles.Cut()
|
||||
valid_facial_hairstyles.Cut()
|
||||
valid_facial_hairstyles.Cut()
|
||||
valid_head_accessories.Cut()
|
||||
valid_marking_styles.Cut()
|
||||
valid_body_accessories.Cut()
|
||||
generate_data()
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/generate_data()
|
||||
@@ -158,4 +239,10 @@
|
||||
valid_species = owner.generate_valid_species(check_whitelist, whitelist, blacklist)
|
||||
if(!valid_hairstyles.len || !valid_facial_hairstyles.len)
|
||||
valid_hairstyles = owner.generate_valid_hairstyles()
|
||||
valid_facial_hairstyles = owner.generate_valid_facial_hairstyles()
|
||||
valid_facial_hairstyles = owner.generate_valid_facial_hairstyles()
|
||||
if(!valid_head_accessories.len)
|
||||
valid_head_accessories = owner.generate_valid_head_accessories()
|
||||
if(!valid_marking_styles.len)
|
||||
valid_marking_styles = owner.generate_valid_markings()
|
||||
if(!valid_body_accessories.len)
|
||||
valid_body_accessories = owner.generate_valid_body_accessories()
|
||||
|
||||
@@ -134,11 +134,8 @@
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.get_species() == "Golem")
|
||||
to_chat(user, "<span class='danger'>Your metal fingers don't fit in the trigger guard!</span>")
|
||||
return
|
||||
if(H.get_species() == "Shadowling")
|
||||
to_chat(user, "<span class='danger'>The muzzle flash would cause damage to your form!</span>")
|
||||
if(H.species.flags & NOGUNS)
|
||||
to_chat(user, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
|
||||
return
|
||||
if(H.martial_art && H.martial_art.name == "The Sleeping Carp") //great dishonor to famiry
|
||||
to_chat(user, "<span class='danger'>Use of ranged weaponry would bring dishonor to the clan.</span>")
|
||||
|
||||
@@ -387,45 +387,48 @@ var/const/INGEST = 2
|
||||
can_process = 1
|
||||
return can_process
|
||||
|
||||
/datum/reagents/proc/reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
|
||||
|
||||
/datum/reagents/proc/reaction(atom/A, method=TOUCH, volume_modifier = 1)
|
||||
switch(method)
|
||||
if(TOUCH)
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
if(ismob(A))
|
||||
spawn(0)
|
||||
if(!R) return
|
||||
var/check = reaction_check(A, R)
|
||||
if(!check)
|
||||
continue
|
||||
else
|
||||
R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
|
||||
if(!R)
|
||||
return
|
||||
var/check = reaction_check(A, R)
|
||||
if(!check)
|
||||
continue
|
||||
else
|
||||
R.reaction_mob(A, TOUCH, R.volume*volume_modifier)
|
||||
if(isturf(A))
|
||||
spawn(0)
|
||||
if(!R) return
|
||||
else R.reaction_turf(A, R.volume+volume_modifier)
|
||||
if(!R)
|
||||
return
|
||||
else
|
||||
R.reaction_turf(A, R.volume*volume_modifier)
|
||||
if(isobj(A))
|
||||
spawn(0)
|
||||
if(!R) return
|
||||
else R.reaction_obj(A, R.volume+volume_modifier)
|
||||
if(!R)
|
||||
return
|
||||
else
|
||||
R.reaction_obj(A, R.volume*volume_modifier)
|
||||
if(INGEST)
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
if(ismob(A) && R)
|
||||
spawn(0)
|
||||
if(!R) return
|
||||
var/check = reaction_check(A, R)
|
||||
if(!check)
|
||||
continue
|
||||
else
|
||||
R.reaction_mob(A, INGEST, R.volume+volume_modifier)
|
||||
if(!R)
|
||||
return
|
||||
var/check = reaction_check(A, R)
|
||||
if(!check)
|
||||
continue
|
||||
else
|
||||
R.reaction_mob(A, INGEST, R.volume*volume_modifier)
|
||||
if(isturf(A) && R)
|
||||
spawn(0)
|
||||
if(!R) return
|
||||
else R.reaction_turf(A, R.volume+volume_modifier)
|
||||
if(!R)
|
||||
return
|
||||
else
|
||||
R.reaction_turf(A, R.volume*volume_modifier)
|
||||
if(isobj(A) && R)
|
||||
spawn(0)
|
||||
if(!R) return
|
||||
else R.reaction_obj(A, R.volume+volume_modifier)
|
||||
if(!R)
|
||||
return
|
||||
else
|
||||
R.reaction_obj(A, R.volume*volume_modifier)
|
||||
return
|
||||
|
||||
/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15)
|
||||
|
||||
@@ -337,9 +337,10 @@
|
||||
var/check = rand(0,100)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(check < 8 && H.h_style != "Very Long Beard")
|
||||
H.h_style = "Very Long Hair"
|
||||
H.f_style = "Very Long Beard"
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
if(check < 8 && head_organ.h_style != "Very Long Beard")
|
||||
head_organ.h_style = "Very Long Hair"
|
||||
head_organ.f_style = "Very Long Beard"
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
H.visible_message("<span class='warning'>[H] has a wild look in their eyes!</span>")
|
||||
|
||||
@@ -198,12 +198,13 @@ datum/reagent/hair_dye
|
||||
datum/reagent/hair_dye/reaction_mob(var/mob/living/M, var/volume)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.r_facial = rand(0,255)
|
||||
H.g_facial = rand(0,255)
|
||||
H.b_facial = rand(0,255)
|
||||
H.r_hair = rand(0,255)
|
||||
H.g_hair = rand(0,255)
|
||||
H.b_hair = rand(0,255)
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
head_organ.r_facial = rand(0,255)
|
||||
head_organ.g_facial = rand(0,255)
|
||||
head_organ.b_facial = rand(0,255)
|
||||
head_organ.r_hair = rand(0,255)
|
||||
head_organ.g_hair = rand(0,255)
|
||||
head_organ.b_hair = rand(0,255)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
..()
|
||||
@@ -228,8 +229,9 @@ datum/reagent/hairgrownium
|
||||
datum/reagent/hairgrownium/reaction_mob(var/mob/living/M, var/volume)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.h_style = random_hair_style(H.gender, H.species)
|
||||
H.f_style = random_facial_hair_style(H.gender, H.species)
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
head_organ.h_style = random_hair_style(H.gender, head_organ.species.name)
|
||||
head_organ.f_style = random_facial_hair_style(H.gender, head_organ.species.name)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
..()
|
||||
@@ -252,12 +254,21 @@ datum/reagent/super_hairgrownium
|
||||
result_amount = 3
|
||||
mix_message = "The liquid becomes amazingly furry and smells peculiar."
|
||||
|
||||
datum/reagent/super_hairgrownium/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
datum/reagent/super_hairgrownium/reaction_mob(var/mob/living/M, var/volume)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.h_style = "Very Long Hair"
|
||||
H.f_style = "Very Long Beard"
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
var/datum/sprite_accessory/tmp_hair_style = hair_styles_list["Very Long Hair"]
|
||||
var/datum/sprite_accessory/tmp_facial_hair_style = facial_hair_styles_list["Very Long Beard"]
|
||||
|
||||
if(head_organ.species.name in tmp_hair_style.species_allowed) //If 'Very Long Hair' is a style the person's species can have, give it to them.
|
||||
head_organ.h_style = "Very Long Hair"
|
||||
else //Otherwise, give them a random hair style.
|
||||
head_organ.h_style = random_hair_style(H.gender, head_organ.species.name)
|
||||
if(head_organ.species.name in tmp_facial_hair_style.species_allowed) //If 'Very Long Beard' is a style the person's species can have, give it to them.
|
||||
head_organ.f_style = "Very Long Beard"
|
||||
else //Otherwise, give them a random facial hair style.
|
||||
head_organ.f_style = random_facial_hair_style(H.gender, head_organ.species.name)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
if(!H.wear_mask || H.wear_mask && !istype(H.wear_mask, /obj/item/clothing/mask/fakemoustache))
|
||||
|
||||
@@ -293,7 +293,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
|
||||
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
|
||||
result_amount = 1
|
||||
mix_message = "The mixture quickly turns into a pall of smoke!"
|
||||
var/forbidden_reagents = list("sugar", "phosphorus", "potassium") //Do not transfer this stuff through smoke.
|
||||
var/forbidden_reagents = list("sugar", "phosphorus", "potassium", "stimulants") //Do not transfer this stuff through smoke.
|
||||
|
||||
/datum/chemical_reaction/smoke/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
for(var/f_reagent in forbidden_reagents)
|
||||
@@ -325,7 +325,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
|
||||
min_temp = 374
|
||||
secondary = 1
|
||||
result_amount = 1
|
||||
forbidden_reagents = list()
|
||||
forbidden_reagents = list("stimulants")
|
||||
mix_sound = null
|
||||
|
||||
/datum/reagent/sonic_powder
|
||||
|
||||
@@ -60,6 +60,9 @@
|
||||
return
|
||||
|
||||
interpreter.container = src
|
||||
|
||||
interpreter.CreateGlobalScope() // Reset the variables.
|
||||
interpreter.curScope = interpreter.globalScope
|
||||
|
||||
interpreter.SetVar("PI", 3.141592653) // value of pi
|
||||
interpreter.SetVar("E", 2.718281828) // value of e
|
||||
@@ -127,7 +130,7 @@
|
||||
|
||||
@param time: time to sleep in deciseconds (1/10th second)
|
||||
*/
|
||||
interpreter.SetProc("sleep", /proc/delay)
|
||||
interpreter.SetProc("sleep", "delay", signal, list("time"))
|
||||
|
||||
/*
|
||||
-> Replaces a string with another string
|
||||
@@ -255,6 +258,28 @@
|
||||
signal.data["reject"] = 1
|
||||
|
||||
/* -- Actual language proc code -- */
|
||||
/datum/signal/proc/delay(var/time)
|
||||
var/obj/machinery/telecomms/server/S = data["server"]
|
||||
var/datum/n_Interpreter/TCS_Interpreter/interpreter = S.Compiler.interpreter
|
||||
// Backup the scope
|
||||
var/datum/scope/globalScope = interpreter.globalScope
|
||||
var/datum/scope/curScope = interpreter.curScope
|
||||
var/list/scopes = interpreter.scopes.stack.Copy()
|
||||
var/list/functions = interpreter.functions.stack.Copy()
|
||||
var/datum/node/statement/FunctionDefinition/curFunction = interpreter.curFunction
|
||||
var/status = interpreter.status
|
||||
var/returnVal = interpreter.returnVal
|
||||
// Sleep
|
||||
sleep(time)
|
||||
// Restore the scope
|
||||
interpreter.returnVal = returnVal
|
||||
interpreter.status = status
|
||||
interpreter.curFunction = curFunction
|
||||
interpreter.functions.stack = functions
|
||||
interpreter.scopes.stack = scopes
|
||||
interpreter.curScope = curScope
|
||||
interpreter.globalScope = globalScope
|
||||
|
||||
/datum/signal/proc/mem(var/address, var/value)
|
||||
if(istext(address))
|
||||
var/obj/machinery/telecomms/server/S = data["server"]
|
||||
|
||||
@@ -99,11 +99,6 @@
|
||||
|
||||
// --- Miscellaneous functions ---
|
||||
|
||||
// Clone of sleep()
|
||||
/proc/delay(var/time)
|
||||
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/delay() called tick#: [world.time]")
|
||||
sleep(time)
|
||||
|
||||
// Clone of rand()
|
||||
/proc/rand_chance(var/low = 0, var/high)
|
||||
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/rand_chance() called tick#: [world.time]")
|
||||
|
||||
@@ -683,7 +683,12 @@
|
||||
to_chat(usr, "<span class='danger'>Access denied.</span>")
|
||||
return
|
||||
|
||||
var/list/options = params2list(possible_destinations)
|
||||
if(href_list["move"])
|
||||
if(!options.Find(href_list["move"])) //I see you're trying Href exploits, I see you're failing, I SEE ADMIN WARNING.
|
||||
// Seriously, though, NEVER trust a Topic with something like this. Ever.
|
||||
message_admins("move HREF ([src] attempted to move to: [href_list["move"]]) exploit attempted by [key_name_admin(usr)] on [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
||||
return
|
||||
switch(shuttle_master.moveShuttle(shuttleId, href_list["move"], 1))
|
||||
if(0)
|
||||
to_chat(usr, "<span class='notice'>Shuttle received message and will be sent shortly.</span>")
|
||||
|
||||
@@ -97,10 +97,12 @@
|
||||
E.forceMove(target)
|
||||
if(target.get_species() == "Machine")//as this is the only step needed for ipc put togethers
|
||||
if(target_zone == "head")
|
||||
var/obj/item/organ/external/head/H = target.organs_by_name["head"]
|
||||
var/obj/item/organ/external/head/H = target.get_organ("head")
|
||||
var/datum/robolimb/robohead = all_robolimbs[H.model]
|
||||
if(robohead.is_monitor) //Ensures that if an IPC gets a head that's got a human hair wig attached to their body, the hair won't wipe.
|
||||
target.h_style = ""
|
||||
H.h_style = ""
|
||||
H.f_style = ""
|
||||
target.m_style = ""
|
||||
E.status &= ~ORGAN_DESTROYED
|
||||
if(E.children)
|
||||
for(var/obj/item/organ/external/C in E.children)
|
||||
|
||||
@@ -190,7 +190,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
|
||||
if(src.species.exotic_blood)
|
||||
vessel.remove_reagent(species.exotic_blood,amm)
|
||||
vessel.reaction(T, TOUCH, amm)
|
||||
if(vessel.total_volume)
|
||||
var/fraction = amm / vessel.total_volume
|
||||
vessel.reaction(T, TOUCH, fraction)
|
||||
return
|
||||
|
||||
else
|
||||
|
||||
@@ -54,6 +54,7 @@ var/global/list/limb_icon_cache = list()
|
||||
overlays.Cut()
|
||||
if(!owner)
|
||||
return
|
||||
var/obj/item/organ/external/head/H = owner.get_organ("head")
|
||||
|
||||
if(species.has_organ["eyes"])
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"]
|
||||
@@ -79,32 +80,32 @@ var/global/list/limb_icon_cache = list()
|
||||
markings_s.Blend(rgb(owner.r_markings, owner.g_markings, owner.b_markings), ICON_ADD)
|
||||
overlays |= markings_s
|
||||
|
||||
if(owner.ha_style)
|
||||
var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[owner.ha_style]
|
||||
if(head_accessory_style && head_accessory_style.species_allowed && (species.name in head_accessory_style.species_allowed))
|
||||
if(H.ha_style)
|
||||
var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[H.ha_style]
|
||||
if(head_accessory_style && head_accessory_style.species_allowed && (H.species.name in head_accessory_style.species_allowed))
|
||||
var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s")
|
||||
if(head_accessory_style.do_colouration)
|
||||
head_accessory_s.Blend(rgb(owner.r_headacc, owner.g_headacc, owner.b_headacc), ICON_ADD)
|
||||
head_accessory_s.Blend(rgb(H.r_headacc, H.g_headacc, H.b_headacc), ICON_ADD)
|
||||
overlays |= head_accessory_s
|
||||
|
||||
if(owner.f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
|
||||
if(facial_hair_style && ((facial_hair_style.species_allowed && (species.name in facial_hair_style.species_allowed)) || (src.species.flags & ALL_RPARTS)))
|
||||
if(H.f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[H.f_style]
|
||||
if(facial_hair_style && ((facial_hair_style.species_allowed && (H.species.name in facial_hair_style.species_allowed)) || (src.species.flags & ALL_RPARTS)))
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
if(species.name == "Slime People") // I am el worstos
|
||||
if(H.species.name == "Slime People") // I am el worstos
|
||||
facial_s.Blend(rgb(owner.r_skin, owner.g_skin, owner.b_skin, 160), ICON_AND)
|
||||
else if(facial_hair_style.do_colouration)
|
||||
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
|
||||
facial_s.Blend(rgb(H.r_facial, H.g_facial, H.b_facial), ICON_ADD)
|
||||
overlays |= facial_s
|
||||
|
||||
if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
|
||||
if(hair_style && ((species.name in hair_style.species_allowed) || (src.species.flags & ALL_RPARTS)))
|
||||
if(H.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
||||
if(hair_style && ((H.species.name in hair_style.species_allowed) || (src.species.flags & ALL_RPARTS)))
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
if(species.name == "Slime People") // I am el worstos
|
||||
if(H.species.name == "Slime People") // I am el worstos
|
||||
hair_s.Blend(rgb(owner.r_skin, owner.g_skin, owner.b_skin, 160), ICON_AND)
|
||||
else if(hair_style.do_colouration)
|
||||
hair_s.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD)
|
||||
hair_s.Blend(rgb(H.r_hair, H.g_hair, H.b_hair), ICON_ADD)
|
||||
overlays |= hair_s
|
||||
|
||||
return mob_icon
|
||||
|
||||
@@ -499,18 +499,19 @@
|
||||
|
||||
if(istype(owner, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!(H.h_style == "Very Long Hair" || H.h_style == "Mowhawk"))
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
if(!(head_organ.h_style == "Very Long Hair" || head_organ.h_style == "Mohawk"))
|
||||
if(prob(10))
|
||||
H.h_style = "Mohawk"
|
||||
head_organ.h_style = "Mohawk"
|
||||
else
|
||||
H.h_style = "Very Long Hair"
|
||||
H.r_hair = 216
|
||||
H.g_hair = 192
|
||||
H.b_hair = 120
|
||||
head_organ.h_style = "Very Long Hair"
|
||||
head_organ.r_hair = 216
|
||||
head_organ.g_hair = 192
|
||||
head_organ.b_hair = 120
|
||||
H.update_hair()
|
||||
if(!(H.f_style == "Very Long Beard"))
|
||||
H.f_style = "Very Long Beard"
|
||||
H.r_facial = 216
|
||||
H.g_facial = 192
|
||||
H.b_facial = 120
|
||||
if(!(head_organ.f_style == "Very Long Beard"))
|
||||
head_organ.f_style = "Very Long Beard"
|
||||
head_organ.r_facial = 216
|
||||
head_organ.g_facial = 192
|
||||
head_organ.b_facial = 120
|
||||
H.update_fhair()
|
||||
@@ -141,6 +141,24 @@
|
||||
encased = "skull"
|
||||
var/can_intake_reagents = 1
|
||||
|
||||
//Hair colour and style
|
||||
var/r_hair = 0
|
||||
var/g_hair = 0
|
||||
var/b_hair = 0
|
||||
var/h_style = "Bald"
|
||||
|
||||
//Head accessory colour and style
|
||||
var/r_headacc = 0
|
||||
var/g_headacc = 0
|
||||
var/b_headacc = 0
|
||||
var/ha_style = "None"
|
||||
|
||||
//Facial hair colour and style
|
||||
var/r_facial = 0
|
||||
var/g_facial = 0
|
||||
var/b_facial = 0
|
||||
var/f_style = "Shaved"
|
||||
|
||||
/obj/item/organ/external/head/remove()
|
||||
if(owner)
|
||||
if(!istype(dna))
|
||||
|
||||
Reference in New Issue
Block a user