Merge pull request #7845 from Fox-McCloud/organsss

Fixes IPC and Diona Knockdown Immunity
This commit is contained in:
Crazy Lemon
2017-07-21 23:05:00 -07:00
committed by GitHub
31 changed files with 103 additions and 158 deletions
+19 -13
View File
@@ -216,10 +216,13 @@
"<span class='notice'>You check yourself for injuries.</span>" \
)
for(var/obj/item/organ/external/org in H.bodyparts)
var/list/missing = list("head", "chest", "groin", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot")
for(var/X in H.bodyparts)
var/obj/item/organ/external/LB = X
missing -= LB.limb_name
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
var/brutedamage = LB.brute_dam
var/burndamage = LB.burn_dam
if(brutedamage > 0)
status = "bruised"
@@ -236,16 +239,17 @@
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(org.status & ORGAN_DESTROYED)
status = "MISSING!"
if(org.status & ORGAN_MUTATED)
if(LB.status & ORGAN_MUTATED)
status = "weirdly shapen."
if(status == "")
status = "OK"
src.show_message(text("\t []My [] is [].",status=="OK"?"<span class='notice'></span>":"<span class='warning'></span>",org.name,status),1)
to_chat(src, "\t <span class='[status == "OK" ? "notice" : "warning"]'>Your [LB.name] is [status].</span>")
for(var/obj/item/I in org.embedded_objects)
to_chat(src, "\t <a href='byond://?src=[UID()];embedded_object=[I.UID()];embedded_limb=[org.UID()]' class='warning'>There is \a [I] embedded in your [org.name]!</a>")
for(var/obj/item/I in LB.embedded_objects)
to_chat(src, "\t <a href='byond://?src=[UID()];embedded_object=[I.UID()];embedded_limb=[LB.UID()]' class='warning'>There is \a [I] embedded in your [LB.name]!</a>")
for(var/t in missing)
to_chat(src, "<span class='boldannounce'>Your [parse_zone(t)] is missing!</span>")
if(H.bleed_rate)
to_chat(src, "<span class='danger'>You are bleeding!</span>")
@@ -297,7 +301,9 @@
)
if(istype(src,/mob/living/carbon/human))
var/mob/living/carbon/human/H = src
if(H.w_uniform)
if(H.wear_suit)
H.wear_suit.add_fingerprint(M)
else if(H.w_uniform)
H.w_uniform.add_fingerprint(M)
/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
@@ -317,15 +323,15 @@
if(1)
to_chat(src, "<span class='warning'>Your eyes sting a little.</span>")
if(prob(40)) //waiting on carbon organs
E.damage += 1
E.take_damage(1, 1)
if(2)
to_chat(src, "<span class='warning'>Your eyes burn.</span>")
E.damage += rand(2, 4)
E.take_damage(rand(2, 4), 1)
else
to_chat(src, "Your eyes itch and burn severely!</span>")
E.damage += rand(12, 16)
E.take_damage(rand(12, 16), 1)
if(E.damage > E.min_bruised_damage)
AdjustEyeBlind(damage)
@@ -37,7 +37,7 @@
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
return
if("howl", "howls")
if (species.name == "Vulpkanin") //Only Vulpkanin can howl
on_CD = handle_emote_CD(100)
@@ -47,7 +47,7 @@
if (species.name == "Vulpkanin") //Only Vulpkanin can growl
on_CD = handle_emote_CD()
else
return
return
if("squish", "squishes")
var/found_slime_bodypart = 0
@@ -101,7 +101,7 @@
if("me") //OKAY SO RANT TIME, THIS FUCKING HAS TO BE HERE OR A SHITLOAD OF THINGS BREAK
return custom_emote(m_type, message) //DO YOU KNOW WHY SHIT BREAKS? BECAUSE SO MUCH OLDCODE CALLS mob.emote("me",1,"whatever_the_fuck_it_wants_to_emote")
//WHO THE FUCK THOUGHT THAT WAS A GOOD FUCKING IDEA!?!?
if("howl", "howls")
var/M = handle_emote_param(param) //Check to see if the param is valid (mob with the param name is in view).
message = "<B>[src]</B> howls[M ? " at [M]" : ""]!"
@@ -113,7 +113,7 @@
message = "<B>[src]</B> growls[M ? " at [M]" : ""]."
playsound(loc, "growls", 80, 0)
m_type = 2
if("ping", "pings")
var/M = handle_emote_param(param)
@@ -750,9 +750,9 @@
var/obj/item/organ/external/R = H.get_organ("r_hand")
var/left_hand_good = 0
var/right_hand_good = 0
if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.status & ORGAN_SPLINTED)) && (!(L.status & ORGAN_BROKEN)))
if(L && (!(L.status & ORGAN_SPLINTED)) && (!(L.status & ORGAN_BROKEN)))
left_hand_good = 1
if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.status & ORGAN_SPLINTED)) && (!(R.status & ORGAN_BROKEN)))
if(R && (!(R.status & ORGAN_SPLINTED)) && (!(R.status & ORGAN_BROKEN)))
right_hand_good = 1
if(!left_hand_good && !right_hand_good)
@@ -609,7 +609,7 @@
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
/mob/living/carbon/human/proc/get_face_name()
var/obj/item/organ/external/head = get_organ("head")
if( !head || head.disfigured || (head.status & ORGAN_DESTROYED) || !real_name || (HUSK in mutations) ) //disfigured. use id-name if possible
if( !head || head.disfigured || !real_name || (HUSK in mutations) ) //disfigured. use id-name if possible
return "Unknown"
return real_name
@@ -1590,7 +1590,7 @@
return
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!head_organ || (head_organ.status & ORGAN_DESTROYED)) //If the rock'em-sock'em robot's head came off during a fight, they shouldn't be able to change their screen/optics.
if(!head_organ) //If the rock'em-sock'em robot's head came off during a fight, they shouldn't be able to change their screen/optics.
to_chat(src, "<span class='warning'>Where's your head at? Can't change your monitor/display without one.</span>")
return
@@ -201,10 +201,10 @@ emp_act
qdel(src)
var/obj/item/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
if(!affecting || (affecting.status & ORGAN_DESTROYED))
if(!affecting)
to_chat(user, "<span class='danger'>They are missing that limb!</span>")
return 1
var/hit_area = affecting.name
var/hit_area = parse_zone(affecting.limb_name)
if(user != src)
user.do_attack_animation(src)
@@ -270,7 +270,7 @@ emp_act
update_inv_glasses(0)
if("upper body")//Easier to score a stun but lasts less time
if("chest")//Easier to score a stun but lasts less time
if(stat == CONSCIOUS && I.force && prob(I.force + 10))
visible_message("<span class='combat danger'>[src] has been knocked down!</span>", \
"<span class='combat userdanger'>[src] has been knocked down!</span>")
@@ -45,7 +45,7 @@
var/obj/item/organ/external/l_foot = get_organ("l_foot")
var/obj/item/organ/external/r_foot = get_organ("r_foot")
var/hasfeet = 1
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
if(!l_foot && !r_foot)
hasfeet = 0
if(shoes)
@@ -43,7 +43,7 @@
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
var/obj/item/organ/external/E = bodyparts_by_name[limb_tag]
if(!E || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD)) || E.is_malfunctioning())
if(!E || (E.status & ORGAN_DEAD) || E.is_malfunctioning())
stance_damage += 2 // let it fail even if just foot&leg. Also malfunctioning happens sporadically so it should impact more when it procs
else if(E.is_broken() || !E.is_usable())
stance_damage += 1
@@ -24,8 +24,7 @@
/mob/living/carbon/human/proc/has_organ(name)
var/obj/item/organ/external/O = bodyparts_by_name[name]
return (O && !(O.status & ORGAN_DESTROYED))
return O
/mob/living/carbon/human/proc/has_organ_for_slot(slot)
switch(slot)
@@ -172,10 +172,7 @@ var/global/list/damage_icon_parts = list()
var/damage_appearance = ""
for(var/obj/item/organ/external/O in bodyparts)
if(O.status & ORGAN_DESTROYED)
damage_appearance += "d"
else
damage_appearance += O.damage_state
damage_appearance += O.damage_state
if(damage_appearance == previous_damage_appearance)
// nothing to do here
@@ -189,20 +186,19 @@ var/global/list/damage_icon_parts = list()
// blend the individual damage states with our icons
for(var/obj/item/organ/external/O in bodyparts)
if(!(O.status & ORGAN_DESTROYED))
O.update_icon()
if(O.damage_state == "00") continue
var/icon/DI
var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]"
O.update_icon()
if(O.damage_state == "00") continue
var/icon/DI
var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]"
if(damage_icon_parts[cache_index] == null)
DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human
DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
DI.Blend(species.blood_color, ICON_MULTIPLY)
damage_icon_parts[cache_index] = DI
else
DI = damage_icon_parts[cache_index]
standing_image.overlays += DI
if(damage_icon_parts[cache_index] == null)
DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human
DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
DI.Blend(species.blood_color, ICON_MULTIPLY)
damage_icon_parts[cache_index] = DI
else
DI = damage_icon_parts[cache_index]
standing_image.overlays += DI
overlays_standing[DAMAGE_LAYER] = standing_image
@@ -238,7 +234,7 @@ var/global/list/damage_icon_parts = list()
for(var/organ_tag in species.has_limbs)
var/obj/item/organ/external/part = bodyparts_by_name[organ_tag]
if(isnull(part) || (part.status & ORGAN_DESTROYED))
if(isnull(part))
icon_key += "0"
else if(part.status & ORGAN_ROBOT)
icon_key += "2[part.model ? "-[part.model]": ""]"
@@ -365,7 +361,7 @@ var/global/list/damage_icon_parts = list()
//Body markings.
var/obj/item/organ/external/chest/chest_organ = get_organ("chest")
if(chest_organ && !(chest_organ.status & ORGAN_DESTROYED) && m_styles["body"])
if(chest_organ && m_styles["body"])
var/body_marking = m_styles["body"]
var/datum/sprite_accessory/body_marking_style = marking_styles_list[body_marking]
if(body_marking_style && body_marking_style.species_allowed && (species.name in body_marking_style.species_allowed))
@@ -375,7 +371,7 @@ var/global/list/damage_icon_parts = list()
markings_standing.Blend(b_marking_s, ICON_OVERLAY)
//Head markings.
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(head_organ && !(head_organ.status & ORGAN_DESTROYED) && m_styles["head"]) //If the head is destroyed, forget the head markings. This prevents floating optical markings on decapitated IPCs, for example.
if(head_organ && m_styles["head"]) //If the head is destroyed, forget the head markings. This prevents floating optical markings on decapitated IPCs, for example.
var/head_marking = m_styles["head"]
var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking]
if(head_marking_style && head_marking_style.species_allowed && (head_organ.species.name in head_marking_style.species_allowed))
@@ -395,7 +391,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[HEAD_ACC_OVER_LAYER] = null
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!head_organ || (head_organ.status & ORGAN_DESTROYED) )
if(!head_organ)
if(update_icons) update_icons()
return
@@ -432,7 +428,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[HAIR_LAYER] = null
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!head_organ || (head_organ.status & ORGAN_DESTROYED))
if(!head_organ)
if(update_icons) update_icons()
return
@@ -481,7 +477,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[FHAIR_OVER_LAYER] = null
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!head_organ || (head_organ.status & ORGAN_DESTROYED))
if(!head_organ)
if(update_icons) update_icons()
return