Merge remote-tracking branch 'upstream/master' into Pod-Refactor

This commit is contained in:
IK3I
2016-05-23 14:59:23 -05:00
249 changed files with 3199 additions and 2074 deletions
@@ -192,7 +192,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return 0
/mob/dead/observer/can_use_hands() return 0
/mob/dead/observer/is_active() return 0
/mob/dead/observer/Stat()
..()
+1 -2
View File
@@ -124,7 +124,6 @@
I.dropped(src)
if(I)
I.layer = initial(I.layer)
return 1
@@ -173,4 +172,4 @@
return l_hand
if(slot_r_hand)
return r_hand
return null
return null
@@ -8,7 +8,7 @@
// if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
// act = copytext(act,1,length(act)) //seriously who the fuck wrote this
var/muzzled = is_muzzled()
act = lowertext(act)
switch(act)
if("sign")
if(!restrained())
@@ -8,7 +8,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
var/muzzled = is_muzzled()
act = lowertext(act)
switch(act)
if ("me")
if(silent)
+3 -2
View File
@@ -44,14 +44,15 @@
user.drop_item()
B.forceMove(src)
held_brain = B
if(istype(O,/obj/item/organ/internal/brain/xeno)) // I'm not sure how well this will work now, since I don't think you can actually get xeno brains
if(istype(O,/obj/item/organ/internal/brain/xeno)) // kept the type check, as it still does other weird stuff
name = "Man-Machine Interface: Alien - [brainmob.real_name]"
icon = 'icons/mob/alien.dmi'
icon_state = "AlienMMI"
alien = 1
else
name = "Man-Machine Interface: [brainmob.real_name]"
icon_state = "mmi_full"
icon = B.mmi_icon
icon_state = "[B.mmi_icon_state]"
alien = 0
feedback_inc("cyborg_mmis_filled",1)
@@ -15,6 +15,8 @@
parent_organ = "head"
slot = "brain"
vital = 1
var/mmi_icon = 'icons/obj/assemblies.dmi'
var/mmi_icon_state = "mmi_full"
/obj/item/organ/internal/brain/surgeryize()
if(!owner)
@@ -27,6 +29,8 @@
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
icon_state = "brain-x"
origin_tech = "biotech=7"
mmi_icon = 'icons/mob/alien.dmi'
mmi_icon_state = "AlienMMI"
/obj/item/organ/internal/brain/New()
..()
@@ -107,6 +111,7 @@
desc = "A complex, organic knot of jelly and crystalline particles."
icon = 'icons/mob/slimes.dmi'
icon_state = "green slime extract"
mmi_icon_state = "slime_mmi"
// parent_organ = "chest" Hello I am from the ministry of rubber forehead aliens how are you
/obj/item/organ/brain/slime/take_damage(var/amount, var/silent = 1)
@@ -11,6 +11,7 @@
if(src.stat == DEAD)
return
act = lowertext(act)
switch(act)
if ("alarm")
+19
View File
@@ -746,6 +746,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
spintime -= speed
/mob/living/carbon/resist_buckle()
spawn(0)
resist_muzzle()
if(restrained())
changeNext_move(CLICK_CD_BREAKOUT)
last_special = world.time + CLICK_CD_BREAKOUT
@@ -776,6 +778,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/resist_restraints()
spawn(0)
resist_muzzle()
var/obj/item/I = null
if(handcuffed)
I = handcuffed
@@ -786,6 +790,21 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
last_special = world.time + CLICK_CD_BREAKOUT
cuff_resist(I)
/mob/living/carbon/resist_muzzle()
if(!istype(wear_mask, /obj/item/clothing/mask/muzzle))
return
var/obj/item/clothing/mask/muzzle/I = wear_mask
var/time = I.resist_time
if(I.resist_time == 0)//if it's 0, you can't get out of it
to_chat(src, "[I] is too well made, you'll need hands for this one!")
else
visible_message("<span class='warning'>[src] gnaws on [I], trying to remove it!</span>")
to_chat(src, "<span class='notice'>You attempt to remove [I]... (This will take around [time/10] seconds and you need to stand still.)</span>")
if(do_after(src, time, 0, target = src))
visible_message("<span class='warning'>[src] removes [I]!</span>")
to_chat(src, "<span class='notice'>You get rid of [I]!</span>")
unEquip(I)
/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0)
breakouttime = I.breakouttime
@@ -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
+10 -8
View File
@@ -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)
+41 -6
View File
@@ -25,6 +25,7 @@
//Emote Cooldown System (it's so simple!)
// proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
act = lowertext(act)
switch(act)
//Cooldown-inducing emotes
if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no")
@@ -32,6 +33,11 @@
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
else //Everyone else fails, skip the emote attempt
return
if("drone","drones","hum","hums","rumble","rumbles")
if (species.name == "Drask") //Only Drask can make whale noises
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
else
return
if("squish", "squishes")
var/found_slime_bodypart = 0
@@ -114,6 +120,23 @@
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 2
if("drone", "drones", "hum", "hums", "rumble", "rumbles")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<B>[src]</B> drones at [param]."
else
message = "<B>[src]</B> rumbles."
playsound(src.loc, 'sound/voice/DraskTalk.ogg', 50, 0)
m_type = 2
if("squish", "squishes")
var/M = null
if(param)
@@ -284,18 +307,30 @@
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
if(istype(get_active_hand(), /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())
+18 -13
View File
@@ -56,17 +56,22 @@
var/list/nospecies = list("Abductor", "Shadowling", "Neara", "Monkey", "Stok", "Farwa", "Wolpin") //species that won't show their race no matter what
if (skipjumpsuit && skipface || (species.name in nospecies)) //either obscured or on the nospecies list
msg += "!\n" //omit the species when examining
else if (species.name == "Slime People") //snowflakey because Slime People are defined as a plural
var/displayed_species = get_species()
for(var/obj/item/clothing/C in src) //Disguise checks
if (C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back)
if(C.species_disguise)
displayed_species = C.species_disguise
if (skipjumpsuit && skipface || (displayed_species in nospecies)) //either obscured or on the nospecies list
msg += "!\n" //omit the species when examining
else if (displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural
msg += ", a slime person!\n"
else if (species.name == "Unathi") //DAMN YOU, VOWELS
else if (displayed_species == "Unathi") //DAMN YOU, VOWELS
msg += ", a unathi!\n"
else
msg += ", \a [lowertext(species.name)]!\n"
msg += ", \a [lowertext(displayed_species)]!\n"
//uniform
if(w_uniform && !skipjumpsuit)
if(w_uniform && !skipjumpsuit && !(w_uniform.flags & ABSTRACT))
//Ties
var/tie_msg
if(istype(w_uniform,/obj/item/clothing/under))
@@ -80,14 +85,14 @@
msg += "[t_He] [t_is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].\n"
//head
if(head)
if(head && !(head.flags & ABSTRACT))
if(head.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [head.blood_color != "#030303" ? "blood-stained":"oil-stained"] [head.name] on [t_his] head!</span>\n"
else
msg += "[t_He] [t_is] wearing \icon[head] \a [head] on [t_his] head.\n"
//suit/armour
if(wear_suit)
if(wear_suit && !(wear_suit.flags & ABSTRACT))
if(wear_suit.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] [wear_suit.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_suit.name]!</span>\n"
else
@@ -101,7 +106,7 @@
msg += "[t_He] [t_is] carrying \icon[s_store] \a [s_store] on [t_his] [wear_suit.name].\n"
//back
if(back)
if(back && !(back.flags & ABSTRACT))
if(back.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[back] [back.gender==PLURAL?"some":"a"] [back.blood_color != "#030303" ? "blood-stained":"oil-stained"] [back] on [t_his] back.</span>\n"
else
@@ -122,7 +127,7 @@
msg += "[t_He] [t_is] holding \icon[r_hand] \a [r_hand] in [t_his] right hand.\n"
//gloves
if(gloves && !skipgloves)
if(gloves && !skipgloves && !(gloves.flags & ABSTRACT))
if(gloves.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [gloves.blood_color != "#030303" ? "blood-stained":"oil-stained"] [gloves.name] on [t_his] hands!</span>\n"
else
@@ -147,7 +152,7 @@
msg += "[t_He] [t_has] \icon[belt] \a [belt] about [t_his] waist.\n"
//shoes
if(shoes && !skipshoes)
if(shoes && !skipshoes && !(shoes.flags & ABSTRACT))
if(shoes.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [shoes.blood_color != "#030303" ? "blood-stained":"oil-stained"] [shoes.name] on [t_his] feet!</span>\n"
else
@@ -157,14 +162,14 @@
//mask
if(wear_mask && !skipmask)
if(wear_mask && !skipmask && !(wear_mask.flags & ABSTRACT))
if(wear_mask.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] [wear_mask.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_mask.name] on [t_his] face!</span>\n"
else
msg += "[t_He] [t_has] \icon[wear_mask] \a [wear_mask] on [t_his] face.\n"
//eyes
if(glasses && !skipeyes)
if(glasses && !skipeyes && !(glasses.flags & ABSTRACT))
if(glasses.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [glasses.blood_color != "#030303" ? "blood-stained":"oil-stained"] [glasses] covering [t_his] eyes!</span>\n"
else
+77 -24
View File
@@ -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)
@@ -1270,6 +1255,54 @@
else
germ_level += n
/mob/living/carbon/human/proc/check_and_regenerate_organs(var/mob/living/carbon/human/H) //Regenerates missing limbs/organs.
var/list/types_of_int_organs = list() //This will hold all the types of organs in the mob before rejuvenation.
for(var/obj/item/organ/internal/I in H.internal_organs)
types_of_int_organs |= I.type //Compiling the list of organ types. It is possible for organs to be missing from this list if they are absent from the mob.
//Removing stumps.
for(var/obj/item/organ/organ in H.contents)
if(istype(organ, /obj/item/organ/external/stump)) //Get rid of all stumps.
qdel(organ)
H.contents -= organ //Making sure the list entry is removed.
for(var/obj/item/organ/organ in H.organs)
if(istype(organ, /obj/item/organ/external/stump))
qdel(organ)
H.organs -= organ //Making sure the list entry is removed.
for(var/organ_name in H.organs_by_name)
var/obj/item/organ/organ = H.organs_by_name[organ_name]
if(istype(organ, /obj/item/organ/external/stump) || !organ) //The !organ check is to account for mechanical limb (prostheses) losses, since those are handled in a way that leaves indexed but null list entries instead of stumps.
qdel(organ)
H.organs_by_name -= organ_name //Making sure the list entry is removed.
//Replacing lost limbs with the species default.
var/mob/living/carbon/human/temp_holder
for(var/limb_type in H.species.has_limbs)
if(!(limb_type in H.organs_by_name))
var/list/organ_data = H.species.has_limbs[limb_type]
var/limb_path = organ_data["path"]
var/obj/item/organ/external/O = new limb_path(temp_holder)
if(H.get_limb_by_name(O.name)) //Check to see if the user already has an limb with the same name as the 'missing limb'. If they do, skip regrowth.
continue //In an example, this will prevent duplication of the mob's right arm if the mob is a Human and they have a Diona right arm, since,
//while the limb with the name 'right_arm' the mob has may not be listed in their species' bodyparts definition, it is still viable and has the appropriate limb name.
else
O = new limb_path(H) //Create the limb on the player.
O.owner = H
H.organs |= H.organs_by_name[O.limb_name]
//Replacing lost organs with the species default.
temp_holder = new /mob/living/carbon/human()
for(var/index in H.species.has_organ)
var/organ = H.species.has_organ[index]
if(!(organ in types_of_int_organs)) //If the mob is missing this particular organ...
var/obj/item/organ/internal/I = new organ(temp_holder) //Create the organ inside our holder so we can check it before implantation.
if(H.get_organ_slot(I.slot)) //Check to see if the user already has an organ in the slot the 'missing organ' belongs to. If they do, skip implantation.
continue //In an example, this will prevent duplication of the mob's eyes if the mob is a Human and they have Nucleation eyes, since,
//while the organ in the eyes slot may not be listed in the mob's species' organs definition, it is still viable and fits in the appropriate organ slot.
else
I = new organ(H) //Create the organ inside the player.
I.insert(H)
/mob/living/carbon/human/revive()
if(species && !(species.flags & NO_BLOOD))
@@ -1277,9 +1310,18 @@
vessel.add_reagent(blood_reagent, max_blood-vessel.total_volume)
fixblood()
// Fix up all organs.
// This will ignore any prosthetics in the prefs currently.
species.create_organs(src)
//Fix up all organs and replace lost ones.
restore_all_organs() //Rejuvenate and reset all existing organs.
check_and_regenerate_organs(src) //Regenerate limbs and organs only if they're really missing.
surgeries.Cut() //End all surgeries.
update_revive()
if(species.name != "Skeleton" && (SKELETON in mutations))
mutations.Remove(SKELETON)
if(NOCLONE in mutations)
mutations.Remove(NOCLONE)
if(HUSK in mutations)
mutations.Remove(HUSK)
if(!client || !key) //Don't boot out anyone already in the mob.
for (var/obj/item/organ/internal/brain/H in world)
@@ -1505,6 +1547,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 +1652,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 +1670,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()
@@ -1930,3 +1980,6 @@
if(U.accessories)
for(var/obj/item/clothing/accessory/A in U.accessories)
. |= A.GetAccess()
/mob/living/carbon/human/is_mechanical()
return ..() || (species.flags & ALL_RPARTS) != 0
@@ -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
@@ -607,4 +607,4 @@
return 0
return 1
return 0 //Unsupported slot
return 0 //Unsupported slot
@@ -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,
@@ -52,6 +52,7 @@
reagent_tag = PROCESS_ORG
base_color = "#a3d4eb"
blood_color = "#a3d4eb"
butt_sprite = "drask"
has_organ = list(
"heart" = /obj/item/organ/internal/heart/drask,
@@ -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
@@ -12,6 +12,8 @@
//default_mutations=list(SKELETON) // This screws things up
butt_sprite = "plasma"
breath_type = "plasma"
heat_level_1 = 350 // Heat damage level 1 above this point.
@@ -16,6 +16,7 @@
var/eyes = "eyes_s" // Icon for eyes.
var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen.
var/butt_sprite = "human"
var/primitive_form // Lesser form, if any (ie. monkey for humans)
var/greater_form // Greater form, if any, ie. human for monkeys.
@@ -118,6 +119,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 +164,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,9 @@
flesh_color = "#34AF10"
reagent_tag = PROCESS_ORG
base_color = "#066000"
//Default styles for created mobs.
default_hair = "Unathi Horns"
butt_sprite = "unathi"
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)
@@ -104,11 +107,14 @@
flags = HAS_LIPS | CAN_BE_FAT
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
flesh_color = "#AFA59E"
base_color = "#333333"
//Default styles for created mobs.
default_headacc = "Tajaran Ears"
butt_sprite = "tajaran"
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)
@@ -148,11 +154,12 @@
flags = HAS_LIPS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
flesh_color = "#966464"
base_color = "#B43214"
butt_sprite = "vulp"
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)
@@ -189,7 +196,20 @@
dietflags = DIET_HERB
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
//Default styles for created mobs.
default_hair = "Skrell Male Tentacles"
reagent_tag = PROCESS_ORG
butt_sprite = "skrell"
has_organ = list(
"heart" = /obj/item/organ/internal/heart,
"lungs" = /obj/item/organ/internal/lungs,
"liver" = /obj/item/organ/internal/liver/skrell,
"kidneys" = /obj/item/organ/internal/kidneys,
"brain" = /obj/item/organ/internal/brain,
"appendix" = /obj/item/organ/internal/appendix,
"eyes" = /obj/item/organ/internal/eyes,
)
suicide_messages = list(
"is attempting to bite their tongue off!",
@@ -251,12 +271,26 @@
blood_color = "#2299FC"
flesh_color = "#808D11"
//Default styles for created mobs.
default_hair = "Short Vox Quills"
butt_sprite = "vox"
reagent_tag = PROCESS_ORG
scream_verb = "shrieks"
male_scream_sound = 'sound/voice/shriek1.ogg'
female_scream_sound = 'sound/voice/shriek1.ogg'
has_organ = list(
"heart" = /obj/item/organ/internal/heart,
"lungs" = /obj/item/organ/internal/lungs,
"liver" = /obj/item/organ/internal/liver,
"kidneys" = /obj/item/organ/internal/kidneys,
"brain" = /obj/item/organ/internal/brain,
"appendix" = /obj/item/organ/internal/appendix,
"eyes" = /obj/item/organ/internal/eyes,
"stack" = /obj/item/organ/internal/stack/vox //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
@@ -347,8 +381,8 @@
"kidneys" = /obj/item/organ/internal/kidneys,
"brain" = /obj/item/organ/internal/brain,
"eyes" = /obj/item/organ/internal/eyes,
"stack" = /obj/item/organ/internal/stack/vox
)
"stack" = /obj/item/organ/internal/stack/vox //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
suicide_messages = list(
"is attempting to bite their tongue off!",
@@ -376,6 +410,7 @@
dietflags = DIET_HERB
blood_color = "#FB9800"
reagent_tag = PROCESS_ORG
butt_sprite = "kidan"
allowed_consumed_mobs = list(/mob/living/simple_animal/diona)
@@ -408,6 +443,7 @@
reagent_tag = PROCESS_ORG
exotic_blood = "water"
//ventcrawler = 1 //ventcrawling commented out
butt_sprite = "slime"
has_organ = list(
"brain" = /obj/item/organ/internal/brain/slime
@@ -578,6 +614,7 @@
unarmed_type = /datum/unarmed_attack/punch
darksight = 5 // BOOSTED from 2
eyes = "grey_eyes_s"
butt_sprite = "grey"
brute_mod = 1.25 //greys are fragile
@@ -642,6 +679,7 @@
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
blood_color = "#004400"
flesh_color = "#907E4A"
butt_sprite = "diona"
reagent_tag = PROCESS_ORG
@@ -656,17 +694,17 @@
vision_organ = /obj/item/organ/internal/diona_receptor
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/diona/chest),
"groin" = list("path" = /obj/item/organ/external/diona/groin),
"head" = list("path" = /obj/item/organ/external/diona/head),
"l_arm" = list("path" = /obj/item/organ/external/diona/arm),
"r_arm" = list("path" = /obj/item/organ/external/diona/arm/right),
"l_leg" = list("path" = /obj/item/organ/external/diona/leg),
"r_leg" = list("path" = /obj/item/organ/external/diona/leg/right),
"l_hand" = list("path" = /obj/item/organ/external/diona/hand),
"r_hand" = list("path" = /obj/item/organ/external/diona/hand/right),
"l_foot" = list("path" = /obj/item/organ/external/diona/foot),
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
"chest" = list("path" = /obj/item/organ/external/chest/diona),
"groin" = list("path" = /obj/item/organ/external/groin/diona),
"head" = list("path" = /obj/item/organ/external/head/diona),
"l_arm" = list("path" = /obj/item/organ/external/arm/diona),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/diona),
"l_leg" = list("path" = /obj/item/organ/external/leg/diona),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/diona),
"l_hand" = list("path" = /obj/item/organ/external/hand/diona),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
"l_foot" = list("path" = /obj/item/organ/external/foot/diona),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
)
suicide_messages = list(
@@ -751,11 +789,14 @@
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
male_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
female_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
butt_sprite = "machine"
has_organ = list(
"brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain,
@@ -791,6 +832,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]")
@@ -574,6 +574,8 @@ var/global/list/damage_icon_parts = list()
UpdateDamageIcon()
update_icons()
update_fire()
force_update_limbs()
update_tail_layer(0)
/* --------------------------------------- */
//vvvvvv UPDATE_INV PROCS vvvvvv
@@ -1265,22 +1267,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
@@ -7,6 +7,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
act = lowertext(act)
switch(act) //Alphabetical please
if ("me")
if(silent)
@@ -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
+23 -4
View File
@@ -320,7 +320,6 @@
/mob/living/proc/revive()
rejuvenate()
buckled = initial(src.buckled)
if(iscarbon(src))
var/mob/living/carbon/C = src
@@ -348,6 +347,8 @@
timeofdeath = 0
/mob/living/proc/rejuvenate()
var/mob/living/carbon/human/human_mob = null //Get this declared for use later.
// shut down various types of badness
setToxLoss(0)
setOxyLoss(0)
@@ -366,6 +367,7 @@
drowsyness = 0
radiation = 0
druggy = 0
hallucination = 0
nutrition = 400
bodytemperature = 310
sdisabilities = 0
@@ -380,7 +382,13 @@
fire_stacks = 0
on_fire = 0
suiciding = 0
buckled = initial(src.buckled)
if(buckled) //Unbuckle the mob and clear the alerts.
buckled.buckled_mob = null
buckled = null
anchored = initial(src.anchored)
update_canmove()
clear_alert("buckled")
post_buckle_mob(src)
if(iscarbon(src))
var/mob/living/carbon/C = src
@@ -392,12 +400,13 @@
// restore all of the human's blood and reset their shock stage
if(ishuman(src))
var/mob/living/carbon/human/human_mob = src
human_mob = src
human_mob.restore_blood()
human_mob.shock_stage = 0
human_mob.decaylevel = 0
restore_all_organs()
surgeries.Cut() //End all surgeries.
if(stat == DEAD)
dead_mob_list -= src
living_mob_list += src
@@ -406,6 +415,9 @@
stat = CONSCIOUS
update_fire()
regenerate_icons()
if(human_mob)
human_mob.update_eyes()
human_mob.update_dna()
return
/mob/living/proc/UpdateDamageIcon()
@@ -580,12 +592,19 @@
return
/mob/living/proc/resist_buckle()
spawn(0)
resist_muzzle()
buckled.user_unbuckle_mob(src,src)
/mob/living/proc/resist_muzzle()
return
/mob/living/proc/resist_fire()
return
/mob/living/proc/resist_restraints()
spawn(0)
resist_muzzle()
return
/*//////////////////////
@@ -835,4 +854,4 @@
if(slowed)
tally += 10
return tally
return tally
+11 -3
View File
@@ -166,8 +166,13 @@ proc/get_radio_key_from_channel(var/channel)
verb = say_quote(message, speaking)
if(is_muzzled())
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
return
var/obj/item/clothing/mask/muzzle/G = wear_mask
if(G.mute) //if the mask is supposed to mute you completely or just muffle you
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
return
else
message = muffledspeech(message)
verb = "mumbles"
message = trim_left(message)
@@ -356,7 +361,10 @@ proc/get_radio_key_from_channel(var/channel)
return
if(is_muzzled())
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
if(istype(wear_mask, /obj/item/clothing/mask/muzzle/tapegag)) //just for tape
to_chat(src, "<span class='danger'>Your mouth is taped and you cannot speak!</span>")
else
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
return
var/message_range = 1
+2 -1
View File
@@ -307,7 +307,7 @@ var/list/ai_verbs_default = list(
//if(icon_state == initial(icon_state))
var/icontype = ""
if (custom_sprite == 1) icontype = ("Custom")//automagically selects custom sprite if one is available
else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President")
else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT")
switch(icontype)
if("Custom") icon_state = "[src.ckey]-ai"
if("Clown") icon_state = "ai-clown2"
@@ -329,6 +329,7 @@ var/list/ai_verbs_default = list(
if("Sparkles") icon_state = "ai-sparkles"
if("ANIMA") icon_state = "ai-anima"
if("President") icon_state = "ai-president"
if("NT") icon_state = "ai-nt"
else icon_state = "ai"
//else
// to_chat(usr, "You can only change your display once!")
@@ -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)
+1
View File
@@ -8,6 +8,7 @@
//Emote Cooldown System (it's so simple!)
// proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
act = lowertext(act)
switch(act)
//Cooldown-inducing emotes
if("scream", "screams")
+11 -11
View File
@@ -1,15 +1,15 @@
/mob/living/silicon/pai/death(gibbed)
if(stat == DEAD) return
if(canmove || resting)
var/turf/T = get_turf_or_move(loc)
for (var/mob/M in viewers(T))
M.show_message("\red [src] emits a dull beep before it loses power and collapses.", 3, "\red You hear a dull beep followed by the sound of glass crunching.", 2)
name = "pAI debris"
desc = "The unfortunate remains of some poor personal AI device."
icon_state = "[chassis]_dead"
else
card.overlays.Cut()
card.overlays += "pai-off"
if(stat == DEAD)
return
force_fold_out()
var/turf/T = get_turf_or_move(loc)
for (var/mob/M in viewers(T))
M.show_message("\red [src] emits a dull beep before it loses power and collapses.", 3, "\red You hear a dull beep followed by the sound of glass crunching.", 2)
name = "pAI debris"
desc = "The unfortunate remains of some poor personal AI device."
icon_state = "[chassis]_dead"
stat = DEAD
canmove = 0
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
+26 -25
View File
@@ -340,35 +340,37 @@
if(stat || sleeping || paralysis || weakened)
return
if(src.loc != card)
to_chat(src, "\red You are already in your mobile form!")
if(loc != card)
to_chat(src, "<span class=warning>You are already in your mobile form!</span>")
return
if(world.time <= last_special)
to_chat(src, "\red You must wait before folding your chassis out again!")
to_chat(src, "<span class=warning>You must wait before folding your chassis out again!</span>")
return
last_special = world.time + 200
//I'm not sure how much of this is necessary, but I would rather avoid issues.
if(istype(card.loc,/mob))
force_fold_out()
visible_message("<span class=notice>[src] folds outwards, expanding into a mobile form.</span>", "<span class=notice>You fold outwards, expanding into a mobile form.</span>")
/mob/living/silicon/pai/proc/force_fold_out()
if(istype(card.loc, /mob))
var/mob/holder = card.loc
holder.unEquip(card)
else if(istype(card.loc,/obj/item/device/pda))
else if(istype(card.loc, /obj/item/device/pda))
var/obj/item/device/pda/holder = card.loc
holder.pai = null
src.client.perspective = EYE_PERSPECTIVE
src.client.eye = src
src.forceMove(get_turf(card))
if(client)
client.perspective = EYE_PERSPECTIVE
client.eye = src
forceMove(get_turf(card))
card.forceMove(src)
card.screen_loc = null
var/turf/T = get_turf(src)
if(istype(T)) T.visible_message("<b>[src]</b> folds outwards, expanding into a mobile form.")
/mob/living/silicon/pai/verb/fold_up()
set category = "pAI Commands"
set name = "Collapse Chassis"
@@ -376,12 +378,12 @@
if(stat || sleeping || paralysis || weakened)
return
if(src.loc == card)
to_chat(src, "\red You are already in your card form!")
if(loc == card)
to_chat(src, "<span class=warning>You are already in your card form!</span>")
return
if(world.time <= last_special)
to_chat(src, "\red You must wait before returning to your card form!")
to_chat(src, "<span class=warning>You must wait before returning to your card form!</span>")
return
close_up()
@@ -474,16 +476,15 @@
last_special = world.time + 200
resting = 0
if(src.loc == card)
if(loc == card)
return
var/turf/T = get_turf(src)
if(istype(T)) T.visible_message("<b>[src]</b> neatly folds inwards, compacting down to a rectangular card.")
visible_message("<span class=notice>[src] neatly folds inwards, compacting down to a rectangular card.</span>", "<span class=notice>You neatly fold inwards, compacting down to a rectangular card.</span>")
src.stop_pulling()
if(src.client)
src.client.perspective = EYE_PERSPECTIVE
src.client.eye = card
stop_pulling()
if(client)
client.perspective = EYE_PERSPECTIVE
client.eye = card
// If we are being held, handle removing our holder from their inv.
var/obj/item/weapon/holder/H = loc
@@ -492,13 +493,13 @@
if(istype(M))
M.unEquip(H)
H.loc = get_turf(src)
src.loc = get_turf(H)
loc = get_turf(H)
// Move us into the card and move the card to the ground
//This seems redundant but not including the forced loc setting messes the behavior up.
src.loc = card
loc = card
card.loc = get_turf(card)
src.forceMove(card)
forceMove(card)
card.forceMove(card.loc)
icon_state = "[chassis]"
@@ -8,6 +8,7 @@
//Emote Cooldown System (it's so simple!)
// proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
act = lowertext(act)
switch(act)
//Cooldown-inducing emotes
if("law","flip","flips","halt") //halt is exempt because it's used to stop criminal scum //WHOEVER THOUGHT THAT WAS A GOOD IDEA IS GOING TO GET SHOT.
+4 -1
View File
@@ -355,4 +355,7 @@
/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash/noise)
if(affect_silicon)
return ..()
return ..()
/mob/living/silicon/is_mechanical()
return 1
@@ -216,17 +216,10 @@
else
to_chat(user, "[src] is in pristine condition.")
/mob/living/simple_animal/bot/adjustBruteLoss(amount)
. = ..()
/mob/living/simple_animal/bot/adjustHealth(amount)
if(amount > 0 && prob(10))
new /obj/effect/decal/cleanable/blood/oil(loc)
/mob/living/simple_animal/bot/adjustFireLoss(amount)
. = ..()
if(amount > 0 && prob(5))
new /obj/effect/decal/cleanable/blood/oil(loc)
return ..(amount)
/mob/living/simple_animal/bot/updatehealth()
..()
@@ -346,9 +339,7 @@
return
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
adjustBruteLoss(-10)
adjustFireLoss(-10)
updatehealth()
adjustHealth(-10)
add_fingerprint(user)
user.visible_message("[user] repairs [src]!","<span class='notice'>You repair [src].</span>")
else
@@ -1019,4 +1010,7 @@ Pass a positive integer as an argument to override a bot's default speed.
if(260 to 300)
throw_alert("temp", /obj/screen/alert/cold/robot, 1)
else
throw_alert("temp", /obj/screen/alert/cold/robot, 2)
throw_alert("temp", /obj/screen/alert/cold/robot, 2)
/mob/living/simple_animal/bot/is_mechanical()
return 1
@@ -11,6 +11,7 @@
//Emote Cooldown System (it's so simple!)
// proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
act = lowertext(act)
switch(act)
//Cooldown-inducing emotes
if("scream", "screams")
@@ -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)
@@ -20,6 +20,7 @@
flying = 1
universal_speak = 1
var/list/construct_spells = list()
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
/mob/living/simple_animal/construct/New()
..()
@@ -31,7 +32,6 @@
/mob/living/simple_animal/construct/death()
..()
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm (src.loc)
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red [src] collapses in a shattered heap. ")
@@ -603,6 +603,7 @@
var/emagged = 0
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
/mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob)
if(!emagged)
@@ -651,7 +652,6 @@
/mob/living/simple_animal/pet/corgi/Ian/borgi/death()
..()
visible_message("<b>[src]</b> blows apart!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
@@ -250,18 +250,19 @@
return
/mob/living/simple_animal/diona/emote(var/act, var/m_type=1, var/message = null)
if(stat)
if(stat)
return
var/on_CD = 0
act = lowertext(act)
switch(act)
if("chirp")
on_CD = handle_emote_CD()
on_CD = handle_emote_CD()
else
on_CD = 0
on_CD = 0
if(on_CD == 1)
return
return
switch(act) //IMPORTANT: Emotes MUST NOT CONFLICT anywhere along the chain.
if("chirp")
@@ -21,6 +21,7 @@
attacktext = "kicks"
attack_sound = 'sound/weapons/punch1.ogg'
health = 40
maxHealth = 40
melee_damage_lower = 1
melee_damage_upper = 2
stop_automated_movement_when_pulled = 1
@@ -109,6 +110,7 @@
attacktext = "kicks"
attack_sound = 'sound/weapons/punch1.ogg'
health = 50
maxHealth = 50
var/milk_content = 0
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -172,7 +174,8 @@
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
attacktext = "kicks"
health = 1
health = 3
maxHealth = 3
ventcrawler = 2
var/amount_grown = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
@@ -216,6 +219,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 10
maxHealth = 10
var/eggsleft = 0
var/chicken_color
pass_flags = PASSTABLE | PASSMOB
@@ -299,6 +303,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
maxHealth = 50
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -321,6 +326,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "pecks"
health = 50
maxHealth = 50
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -343,6 +349,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
maxHealth = 50
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -365,6 +372,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
maxHealth = 50
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -387,5 +395,6 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
maxHealth = 50
can_collar = 1
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
@@ -38,6 +38,7 @@
icon_living = "aliend_running"
icon_dead = "aliend_l"
health = 60
maxHealth = 60
melee_damage_lower = 15
melee_damage_upper = 15
var/plant_cooldown = 30
@@ -59,6 +60,7 @@
icon_living = "aliens_running"
icon_dead = "aliens_l"
health = 120
maxHealth = 120
melee_damage_lower = 15
melee_damage_upper = 15
ranged = 1
@@ -23,6 +23,7 @@
minbodytemp = 0
speak_emote = list("states")
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
@@ -41,12 +42,12 @@
name = "Strong Hivebot"
desc = "A robot, this one is armed and looks tough!"
health = 80
maxHealth = 80
ranged = 1
/mob/living/simple_animal/hostile/hivebot/death()
..()
visible_message("<b>[src]</b> blows apart!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
@@ -186,7 +186,7 @@
/mob/living/simple_animal/hostile/proc/Goto(var/target, var/delay, var/minimum_distance)
walk_to(src, target, minimum_distance, delay)
/mob/living/simple_animal/hostile/adjustBruteLoss(var/damage)
/mob/living/simple_animal/hostile/adjustHealth(damage)
..(damage)
if(!stat && search_objects < 3)//Not unconscious, and we don't ignore mobs
if(search_objects)//Turn off item searching and ignore whatever item we were looking at, we're more concerned with fight or flight
@@ -99,7 +99,7 @@
visible_message("<b>[src]</b> starts to move!")
attempt_open = 1
/mob/living/simple_animal/hostile/mimic/crate/adjustBruteLoss(var/damage)
/mob/living/simple_animal/hostile/mimic/crate/adjustHealth(damage)
trigger()
..(damage)
@@ -73,6 +73,8 @@
aggro_vision_range = 9
idle_vision_range = 2
turns_per_move = 5
loot = list(/obj/item/weapon/ore/diamond{layer = 4.1},
/obj/item/weapon/ore/diamond{layer = 4.1})
/obj/item/projectile/temp/basilisk
name = "freezing blast"
@@ -100,14 +102,6 @@
if(3.0)
adjustBruteLoss(110)
/mob/living/simple_animal/hostile/asteroid/basilisk/death()
if(stat != DEAD)
var/counter
for(counter=0, counter<2, counter++)
var/obj/item/weapon/ore/diamond/D = new /obj/item/weapon/ore/diamond(src.loc)
D.layer = 4.1
..()
/mob/living/simple_animal/hostile/asteroid/goldgrub
name = "goldgrub"
desc = "A worm that grows fat from eating everything in its sight. Seems to enjoy precious metals and other shiny things, hence the name."
@@ -204,7 +198,7 @@
Reward()
..()
/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustBruteLoss(var/damage)
/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustHealth(damage)
idle_vision_range = 9
..()
@@ -239,6 +233,7 @@
retreat_distance = 3
minimum_distance = 3
pass_flags = PASSTABLE
loot = list(/obj/item/organ/internal/hivelord_core)
/mob/living/simple_animal/hostile/asteroid/hivelord/OpenFire(var/the_target)
var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood(src.loc)
@@ -250,11 +245,6 @@
/mob/living/simple_animal/hostile/asteroid/hivelord/AttackingTarget()
OpenFire()
/mob/living/simple_animal/hostile/asteroid/hivelord/death()
if(stat != DEAD)
new /obj/item/organ/internal/hivelord_core(src.loc)
..()
/obj/item/organ/internal/hivelord_core
name = "hivelord remains"
desc = "All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating."
@@ -370,6 +360,7 @@
idle_vision_range = 5
anchored = 1 //Stays anchored until death as to be unpullable
var/pre_attack = 0
loot = list(/obj/item/asteroid/goliath_hide{layer = 4.1})
/mob/living/simple_animal/hostile/asteroid/goliath/process_ai()
..()
@@ -386,13 +377,6 @@
anchored = 1
..()
/mob/living/simple_animal/hostile/asteroid/goliath/death()
anchored = 0
if(stat != DEAD)
var/obj/item/asteroid/goliath_hide/G = new /obj/item/asteroid/goliath_hide(src.loc)
G.layer = 4.1
..()
/mob/living/simple_animal/hostile/asteroid/goliath/OpenFire()
var/tturf = get_turf(target)
if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen
@@ -403,7 +387,7 @@
pre_attack = 0
return
/mob/living/simple_animal/hostile/asteroid/goliath/adjustBruteLoss(var/damage)
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage)
ranged_cooldown--
handle_preattack()
..()
@@ -59,7 +59,7 @@
health = maxHealth
..()
/mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(var/damage)//Possibility to flee from a fight just to make it more visually interesting
/mob/living/simple_animal/hostile/mushroom/adjustHealth(damage)//Possibility to flee from a fight just to make it more visually interesting
if(!retreat_distance && prob(33))
retreat_distance = 5
spawn(30)
@@ -22,9 +22,8 @@
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
speak_emote = list("yarrs")
var/corpse = /obj/effect/landmark/mobcorpse/pirate
var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate
loot = list(/obj/effect/landmark/mobcorpse/pirate,
/obj/item/weapon/melee/energy/sword/pirate)
faction = list("pirate")
/mob/living/simple_animal/hostile/pirate/ranged
@@ -38,16 +37,12 @@
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/beam
corpse = /obj/effect/landmark/mobcorpse/pirate/ranged
weapon1 = /obj/item/weapon/gun/energy/laser
loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged,
/obj/item/weapon/gun/energy/laser)
/mob/living/simple_animal/hostile/pirate/death()
..()
if(corpse)
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
ghostize()
qdel(src)
return
@@ -150,8 +150,8 @@
walk(src,0)
/mob/living/simple_animal/hostile/retaliate/malf_drone/death()
src.visible_message("\blue \icon[src] [src] suddenly breaks apart.")
..()
visible_message("\blue \icon[src] [src] suddenly breaks apart.")
qdel(src)
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell.
@@ -61,7 +61,7 @@
H.enemies |= enemies
return 0
/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(var/damage)
/mob/living/simple_animal/hostile/retaliate/adjustHealth(damage)
..(damage)
Retaliate()
@@ -45,6 +45,7 @@
minbodytemp = 0
faction = list("undead") // did I mention ghost
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
/mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(var/check_drift = 0)
return 1
@@ -61,7 +62,7 @@
invisibility = pick(0,60,60,invisibility)
..()
/mob/living/simple_animal/hostile/retaliate/ghost/death()
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(loc)
..()
qdel(src)
return
@@ -90,9 +91,10 @@
minbodytemp = 0
faction = list("undead")
loot = list(/obj/effect/decal/remains/human)
/mob/living/simple_animal/hostile/retaliate/skeleton/death()
new /obj/effect/decal/remains/human(loc)
..()
qdel(src)
return
@@ -121,8 +123,9 @@
minbodytemp = 0
faction = list("undead")
loot = list(/obj/effect/decal/cleanable/blood/gibs)
/mob/living/simple_animal/hostile/retaliate/zombie/death()
new /obj/effect/decal/cleanable/blood/gibs(loc)
..()
qdel(src)
return
@@ -19,35 +19,30 @@
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = I_HARM
var/corpse = /obj/effect/landmark/mobcorpse/russian
var/weapon1 = /obj/item/weapon/kitchen/knife
unsuitable_atmos_damage = 15
faction = list("russian")
status_flags = CANPUSH
loot = list(/obj/effect/landmark/mobcorpse/russian,
/obj/item/weapon/kitchen/knife)
/mob/living/simple_animal/hostile/russian/ranged
icon_state = "russianranged"
icon_living = "russianranged"
corpse = /obj/effect/landmark/mobcorpse/russian/ranged
weapon1 = /obj/item/weapon/gun/projectile/revolver/mateba
ranged = 1
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/bullet
projectilesound = 'sound/weapons/Gunshot.ogg'
casingtype = /obj/item/ammo_casing/a357
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged, /obj/item/weapon/gun/projectile/revolver/mateba)
/mob/living/simple_animal/hostile/russian/ranged/New()
if(prob(50) && ispath(weapon1,/obj/item/weapon/gun/projectile/revolver/mateba)) //to preserve varedits
weapon1 = /obj/item/weapon/gun/projectile/shotgun/boltaction
casingtype = /obj/item/ammo_casing/a762
/mob/living/simple_animal/hostile/russian/ranged/mosin
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged,
/obj/item/weapon/gun/projectile/shotgun/boltaction)
casingtype = /obj/item/ammo_casing/a762
/mob/living/simple_animal/hostile/russian/death()
..()
if(corpse)
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
qdel(src)
return
@@ -19,22 +19,14 @@
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = I_HARM
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
var/weapon1
var/weapon2
unsuitable_atmos_damage = 15
faction = list("syndicate")
check_friendly_fire = 1
status_flags = CANPUSH
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier)
/mob/living/simple_animal/hostile/syndicate/death()
..()
if(corpse)
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
if(weapon2)
new weapon2 (src.loc)
qdel(src)
return
@@ -45,11 +37,10 @@
melee_damage_upper = 25
icon_state = "syndicatemelee"
icon_living = "syndicatemelee"
weapon1 = /obj/item/weapon/melee/energy/sword/saber/red
weapon2 = /obj/item/weapon/shield/energy
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
status_flags = 0
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/weapon/melee/energy/sword/saber/red, /obj/item/weapon/shield/energy)
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(O.force)
@@ -71,7 +62,7 @@
if(!Proj) return
if(prob(65))
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
src.health -= Proj.damage
adjustHealth(Proj.damage)
else
visible_message("\red <B>[src] blocks [Proj] with its shield!</B>")
return 0
@@ -83,8 +74,8 @@
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
name = "Syndicate Commando"
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/weapon/melee/energy/sword/saber/red, /obj/item/weapon/shield/energy)
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0)
return
@@ -99,8 +90,7 @@
casingtype = /obj/item/ammo_casing/c45
projectilesound = 'sound/weapons/Gunshot_smg.ogg'
projectiletype = /obj/item/projectile/bullet/midbullet2
weapon1 = /obj/item/weapon/gun/projectile/automatic/c20r
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/weapon/gun/projectile/automatic/c20r)
/mob/living/simple_animal/hostile/syndicate/ranged/space
icon_state = "syndicaterangedpsace"
@@ -108,8 +98,9 @@
name = "Syndicate Commando"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/weapon/gun/projectile/automatic/c20r)
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0)
return
@@ -28,6 +28,7 @@
minbodytemp = 0
faction = list("hostile", "winter")
loot = list(/obj/item/stack/sheet/wood)
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/tree/FindTarget()
@@ -46,5 +47,4 @@
/mob/living/simple_animal/hostile/tree/death()
..()
visible_message("\red <b>[src]</b> is hacked into pieces!")
new /obj/item/stack/sheet/wood(loc)
qdel(src)
@@ -20,15 +20,12 @@
melee_damage_lower = 3
melee_damage_upper = 7
var/weapon1
/mob/living/simple_animal/hostile/winter/snowman
name = "snowman"
desc = "A very angry snowman. Doesn't look like it wants to play around..."
icon_state = "snowman"
icon_living = "snowman"
icon_dead = "snowman-dead"
weapon1 = /obj/item/weapon/melee/candy_sword
bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold.
maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something.
@@ -37,10 +34,10 @@
/mob/living/simple_animal/hostile/winter/snowman/death()
if(weapon1 && prob(50)) //50% chance to drop weapon on death, if it has one to drop
new weapon1(get_turf(src))
if(prob(50)) //50% chance to drop weapon on death, if it has one to drop
loot = list(/obj/item/weapon/melee/candy_sword)
if(prob(20)) //chance to become a stationary snowman structure instead of a corpse
new /obj/structure/snowman(get_turf(src))
loot.Add(/obj/structure/snowman)
visible_message("<span class='notice'>The [src.name] shimmers as its animating magic fades away!</span>")
..() //this is just to make sure it gets properly killed before we qdel it
qdel(src)
@@ -52,7 +49,6 @@
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/snowball
weapon1 = null
/mob/living/simple_animal/hostile/winter/reindeer
name = "reindeer"
@@ -24,11 +24,11 @@
status_flags = 0
faction = list("cult")
status_flags = CANPUSH
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
death()
..()
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm (src.loc)
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red [src] lets out a contented sigh as their form unwinds. ")
@@ -71,6 +71,7 @@
var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
var/list/loot = list() //list of things spawned at mob's loc when it dies
/mob/living/simple_animal/New()
@@ -269,8 +270,9 @@
return
/mob/living/simple_animal/emote(var/act, var/m_type=1, var/message = null)
if(stat) return
if(stat)
return
act = lowertext(act)
switch(act) //IMPORTANT: Emotes MUST NOT CONFLICT anywhere along the chain.
if("scream")
message = "<B>\The [src]</B> whimpers."
@@ -404,22 +406,18 @@
if(health < maxHealth)
if(MED.amount >= 1)
if(MED.heal_brute >= 1)
adjustBruteLoss(-MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] applies [MED] on [src]")
heal_organ_damage((MED.heal_brute * 1.66), (MED.heal_burn * 1.66))
MED.use(1)
visible_message("<span class='notice'>[user] applies [MED] on [src]</span>")
return
else
to_chat(user, "\blue [MED] won't help at all.")
to_chat(user, "<span class='notice'>[MED] won't help at all.</span>")
return
else
to_chat(user, "\blue [src] is at full health.")
to_chat(user, "<span class='notice'>[src] is at full health.</span>")
return
else
to_chat(user, "\blue [src] is dead, medical items won't bring it back to life.")
to_chat(user, "<span class='notice'>[src] is dead, medical items won't bring it back to life.</span>")
return
else if(can_collar && !collar && istype(O, /obj/item/clothing/accessory/petcollar))
var/obj/item/clothing/accessory/petcollar/C = O
@@ -470,6 +468,9 @@
stat(null, "Health: [round((health / maxHealth) * 100)]%")
/mob/living/simple_animal/death(gibbed)
if(loot.len)
for(var/i in loot)
new i(loc)
health = 0
icon_state = icon_dead
stat = DEAD
@@ -492,25 +493,31 @@
if(3.0)
adjustBruteLoss(30)
/mob/living/simple_animal/proc/adjustHealth(amount)
if(status_flags & GODMODE)
return 0
bruteloss = Clamp(bruteloss + amount, 0, maxHealth)
handle_regular_status_updates()
/mob/living/simple_animal/adjustBruteLoss(amount)
if(damage_coeff[BRUTE])
return ..(amount * damage_coeff[BRUTE])
adjustHealth(amount * damage_coeff[BRUTE])
/mob/living/simple_animal/adjustFireLoss(amount)
if(damage_coeff[BURN])
return ..(amount * damage_coeff[BURN])
adjustHealth(amount * damage_coeff[BURN])
/mob/living/simple_animal/adjustOxyLoss(amount)
if(damage_coeff[OXY])
return ..(amount * damage_coeff[OXY])
adjustHealth(amount * damage_coeff[OXY])
/mob/living/simple_animal/adjustToxLoss(amount)
if(damage_coeff[TOX])
return ..(amount * damage_coeff[TOX])
adjustHealth(amount * damage_coeff[TOX])
/mob/living/simple_animal/adjustCloneLoss(amount)
if(damage_coeff[CLONE])
return ..(amount * damage_coeff[CLONE])
adjustHealth(amount * damage_coeff[CLONE])
/mob/living/simple_animal/adjustStaminaLoss(amount)
if(damage_coeff[STAMINA])
@@ -665,7 +672,7 @@
if(!can_collar || collar)
return
var/obj/item/clothing/accessory/petcollar/C = usr.get_active_hand()
if(!C)
if(!istype(C))
usr.visible_message("[usr] rubs [src]'s neck.","<span class='notice'>You rub [src]'s neck for a moment.</span>")
return
usr.drop_item()
+1 -16
View File
@@ -903,13 +903,8 @@ var/list/slot_equipment_priority = list( \
/mob/proc/can_use_hands()
return
/mob/proc/is_active()
return (0 >= usr.stat)
/mob/proc/is_mechanical()
if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI"))
return 1
return istype(src, /mob/living/silicon) || get_species() == "Machine"
return mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI")
/mob/proc/is_ready()
return client && !!mind
@@ -936,19 +931,9 @@ var/list/slot_equipment_priority = list( \
/mob/proc/get_gender()
return gender
/mob/proc/see(message)
if(!is_active())
return 0
to_chat(src, message)
return 1
/mob/proc/is_muzzled()
return 0
/mob/proc/show_viewers(message)
for(var/mob/M in viewers())
M.see(message)
/mob/Stat()
..()
+19 -181
View File
@@ -1,10 +1,3 @@
// fun if you want to typecast humans/monkeys/etc without writing long path-filled lines.
/proc/ishuman(A)
if(istype(A, /mob/living/carbon/human))
return 1
return 0
/proc/issmall(A)
if(A && istype(A, /mob/living/carbon/human))
var/mob/living/carbon/human/H = A
@@ -12,56 +5,6 @@
return 1
return 0
/proc/isbrain(A)
if(A && istype(A, /mob/living/carbon/brain))
return 1
return 0
/proc/isalien(A)
if(istype(A, /mob/living/carbon/alien))
return 1
return 0
/proc/isalienadult(A)
if(istype(A, /mob/living/carbon/alien/humanoid))
return 1
return 0
/proc/islarva(A)
if(istype(A, /mob/living/carbon/alien/larva))
return 1
return 0
proc/isfacehugger(A)
if(istype(A, /obj/item/clothing/mask/facehugger))
return 1
return 0
proc/isembryo(A)
if(istype(A, /obj/item/organ/internal/body_egg/alien_embryo))
return 1
return 0
/proc/isslime(A)
if(istype(A, /mob/living/carbon/slime))
return 1
return 0
/proc/isrobot(A)
if(istype(A, /mob/living/silicon/robot))
return 1
return 0
/proc/isanimal(A)
if(istype(A, /mob/living/simple_animal))
return 1
return 0
/proc/iscorgi(A)
if(istype(A, /mob/living/simple_animal/pet/corgi))
return 1
return 0
/proc/ispet(A)
if(istype(A, /mob/living/simple_animal))
var/mob/living/simple_animal/SA = A
@@ -69,46 +12,6 @@ proc/isembryo(A)
return 1
return 0
/proc/iscrab(A)
if(istype(A, /mob/living/simple_animal/crab))
return 1
return 0
/proc/iscat(A)
if(istype(A, /mob/living/simple_animal/pet/cat))
return 1
return 0
/proc/ismouse(A)
if(istype(A, /mob/living/simple_animal/mouse))
return 1
return 0
/proc/isbear(A)
if(istype(A, /mob/living/simple_animal/hostile/bear))
return 1
return 0
/proc/iscarp(A)
if(istype(A, /mob/living/simple_animal/hostile/carp))
return 1
return 0
/proc/isbot(A)
if(istype(A, /mob/living/simple_animal/bot))
return 1
return 0
/proc/isclown(A)
if(istype(A, /mob/living/simple_animal/hostile/retaliate/clown))
return 1
return 0
/proc/isAI(A)
if(istype(A, /mob/living/silicon/ai))
return 1
return 0
/mob/proc/isSynthetic()
return 0
@@ -119,76 +22,6 @@ proc/isembryo(A)
return 0
return 1
/proc/isAIEye(A)
if(istype(A, /mob/camera/aiEye))
return 1
return 0
/proc/ispAI(A)
if(istype(A, /mob/living/silicon/pai))
return 1
return 0
/proc/iscarbon(A)
if(istype(A, /mob/living/carbon))
return 1
return 0
/proc/issilicon(A)
if(istype(A, /mob/living/silicon))
return 1
return 0
/proc/isSilicon(A) // Bay support
if(istype(A, /mob/living/silicon))
return 1
return 0
/proc/isliving(A)
if(istype(A, /mob/living))
return 1
return 0
/proc/isswarmer(A)
if(istype(A, /mob/living/simple_animal/hostile/swarmer))
return 1
return 0
/proc/isguardian(A)
if(istype(A, /mob/living/simple_animal/hostile/guardian))
return 1
return 0
/proc/isobserver(A)
if(istype(A, /mob/dead/observer))
return 1
return 0
/proc/isSpirit(A)
if(istype(A, /mob/spirit))
return 1
return 0
proc/isovermind(A)
if(istype(A, /mob/camera/blob))
return 1
return 0
/proc/ismask(A)
if(istype(A, /mob/spirit/mask))
return 1
return 0
/proc/isAutoAnnouncer(A)
if(istype(A, /mob/living/automatedannouncer))
return 1
return 0
/proc/isorgan(A)
if(istype(A, /obj/item/organ/external))
return 1
return 0
/proc/isloyal(A) //Checks to see if the person contains a loyalty implant, then checks that the implant is actually inside of them
for(var/obj/item/weapon/implant/loyalty/L in A)
if(L && L.implanted)
@@ -220,14 +53,6 @@ proc/isNonCrewAntag(A)
return 1
proc/isnewplayer(A)
if(istype(A, /mob/new_player))
return 1
return 0
proc/hasorgans(A)
return ishuman(A)
proc/iscuffed(A)
if(istype(A, /mob/living/carbon))
var/mob/living/carbon/C = A
@@ -255,10 +80,6 @@ proc/getsensorlevel(A)
return U.sensor_mode
return SUIT_SENSOR_OFF
/proc/is_admin(var/mob/user)
return check_rights(R_ADMIN, 0, user) != 0
/proc/check_zone(zone)
if(!zone) return "chest"
switch(zone)
@@ -412,6 +233,24 @@ proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 fo
return returntext
proc/muffledspeech(phrase)
phrase = html_decode(phrase)
var/leng=lentext(phrase)
var/counter=lentext(phrase)
var/newphrase=""
var/newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
if(newletter in list(" ", "!", "?", ".", ","))
//do nothing
else if(lowertext(newletter) in list("a", "e", "i", "o", "u", "y"))
newletter = "ph"
else
newletter = "m"
newphrase+="[newletter]"
counter-=1
return newphrase
/proc/shake_camera(mob/M, duration, strength=1)
if(!M || !M.client || M.shakecamera)
@@ -537,8 +376,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM)
return P
/proc/get_both_hands(mob/living/carbon/M)
var/list/hands = list(M.l_hand, M.r_hand)
return hands
return list(M.l_hand, M.r_hand)
//Direct dead say used both by emote and say
+7 -3
View File
@@ -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"
+1 -1
View File
@@ -25,7 +25,7 @@ mob/spirit
var/follow_target = null
mob/spirit/is_active()
mob/spirit/proc/is_active()
if (client && client.inactivity <= 10 * 60 * 10)
return TRUE
return FALSE
+29
View File
@@ -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