mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-30 12:02:24 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
Conflicts: .travis.yml code/game/turfs/turf.dm code/modules/mob/living/carbon/human/examine.dm code/modules/mob/living/carbon/human/human_defense.dm code/modules/mob/mob_grab_specials.dm
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
interface_desc = "A self-sustaining plasma arc capable of cutting through walls."
|
||||
suit_overlay_active = "plasmacutter"
|
||||
suit_overlay_inactive = "plasmacutter"
|
||||
use_power_cost = 0.5
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/plasmacutter
|
||||
|
||||
@@ -56,6 +57,7 @@
|
||||
interface_desc = "A diamond-tipped industrial drill."
|
||||
suit_overlay_active = "mounted-drill"
|
||||
suit_overlay_inactive = "mounted-drill"
|
||||
use_power_cost = 0.1
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/diamonddrill
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
if(40 to INFINITY)
|
||||
status += "peeling away"
|
||||
|
||||
if(org.status & ORGAN_DESTROYED)
|
||||
if(org.is_stump())
|
||||
status += "MISSING"
|
||||
if(org.status & ORGAN_MUTATED)
|
||||
status += "weirdly shapen"
|
||||
|
||||
@@ -237,14 +237,12 @@
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [species.show_ssd].</span>\n"
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_destroyed = list()
|
||||
var/list/is_bleeding = list()
|
||||
|
||||
for(var/organ_tag in species.has_limbs)
|
||||
|
||||
var/list/organ_data = species.has_limbs[organ_tag]
|
||||
var/organ_descriptor = organ_data["descriptor"]
|
||||
is_destroyed["organ_descriptor"] = 1
|
||||
|
||||
var/obj/item/organ/external/E = organs_by_name[organ_tag]
|
||||
if(!E)
|
||||
@@ -252,15 +250,10 @@
|
||||
else if(E.is_stump())
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span>\n"
|
||||
else
|
||||
is_destroyed["organ_descriptor"] = 0
|
||||
continue
|
||||
|
||||
for(var/obj/item/organ/external/temp in organs)
|
||||
if(temp)
|
||||
if(temp.status & ORGAN_DESTROYED)
|
||||
is_destroyed["[temp.name]"] = 1
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [temp.name].</b></span>\n"
|
||||
continue
|
||||
if(temp.status & ORGAN_ROBOT)
|
||||
if(!(temp.brute_dam + temp.burn_dam))
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a robot [temp.name]!</span>\n"
|
||||
|
||||
@@ -319,7 +319,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 || head.is_stump() || !real_name || (HUSK in mutations) ) //disfigured. use id-name if possible
|
||||
return "Unknown"
|
||||
return real_name
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
var/hit_zone = H.zone_sel.selecting
|
||||
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
||||
|
||||
if(!affecting || affecting.is_stump() || (affecting.status & ORGAN_DESTROYED))
|
||||
if(!affecting || affecting.is_stump())
|
||||
M << "<span class='danger'>They are missing that limb!</span>"
|
||||
return 1
|
||||
|
||||
|
||||
@@ -143,6 +143,11 @@ emp_act
|
||||
for(var/obj/O in src)
|
||||
if(!O) continue
|
||||
O.emp_act(severity)
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
O.emp_act(severity)
|
||||
for(var/obj/item/organ/I in O.internal_organs)
|
||||
if(I.robotic == 0) continue
|
||||
I.emp_act(severity)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone)
|
||||
@@ -162,7 +167,7 @@ emp_act
|
||||
return null
|
||||
|
||||
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
||||
if (!affecting || (affecting.status & ORGAN_DESTROYED) || affecting.is_stump())
|
||||
if (!affecting || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
return null
|
||||
|
||||
@@ -190,7 +195,7 @@ emp_act
|
||||
effective_force /= 2 //half the effective force
|
||||
if(!..(I, effective_force, blocked, hit_zone))
|
||||
return 0
|
||||
|
||||
|
||||
attack_joint(affecting, I, blocked) //but can dislocate joints
|
||||
else if(!..())
|
||||
return 0
|
||||
@@ -210,11 +215,11 @@ emp_act
|
||||
if(prob(effective_force + 10))
|
||||
visible_message("<span class='danger'>[src] has been knocked down!</span>")
|
||||
apply_effect(6, WEAKEN, blocked)
|
||||
|
||||
|
||||
//Apply blood
|
||||
if(!(I.flags & NOBLOODY))
|
||||
I.add_blood(src)
|
||||
|
||||
|
||||
if(prob(33))
|
||||
var/turf/location = loc
|
||||
if(istype(location, /turf/simulated))
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if(istype(buckled, /obj/structure/bed/chair/wheelchair))
|
||||
for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm"))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
if(!E || (E.status & ORGAN_DESTROYED))
|
||||
if(!E || E.is_stump())
|
||||
tally += 4
|
||||
if(E.status & ORGAN_SPLINTED)
|
||||
tally += 0.5
|
||||
@@ -40,9 +40,9 @@
|
||||
|
||||
for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg"))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
if(!E || (E.status & ORGAN_DESTROYED))
|
||||
if(!E || E.is_stump())
|
||||
tally += 4
|
||||
if(E.status & ORGAN_SPLINTED)
|
||||
else if(E.status & ORGAN_SPLINTED)
|
||||
tally += 0.5
|
||||
else if(E.status & ORGAN_BROKEN)
|
||||
tally += 1.5
|
||||
@@ -104,4 +104,4 @@
|
||||
return 1
|
||||
if(shoes && (shoes.item_flags & NOSLIP) && istype(shoes, /obj/item/clothing/shoes/magboots)) //magboots + dense_object = no floating
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
|
||||
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
||||
if(!E || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD)))
|
||||
if(!E || (E.status & (ORGAN_MUTATED|ORGAN_DEAD)) || E.is_stump()) //should just be !E.is_usable() here but dislocation screws that up.
|
||||
stance_damage += 2 // let it fail even if just foot&leg
|
||||
else if (E.is_malfunctioning())
|
||||
//malfunctioning only happens intermittently so treat it as a missing limb when it procs
|
||||
|
||||
@@ -33,7 +33,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
/mob/living/carbon/human/proc/has_organ(name)
|
||||
var/obj/item/organ/external/O = organs_by_name[name]
|
||||
|
||||
return (O && !(O.status & ORGAN_DESTROYED) && !O.is_stump())
|
||||
return (O && !O.is_stump())
|
||||
|
||||
/mob/living/carbon/human/proc/has_organ_for_slot(slot)
|
||||
switch(slot)
|
||||
|
||||
@@ -247,15 +247,13 @@
|
||||
var/obj/item/organ/O = new limb_path(H)
|
||||
organ_data["descriptor"] = O.name
|
||||
|
||||
for(var/organ in has_organ)
|
||||
var/organ_type = has_organ[organ]
|
||||
H.internal_organs_by_name[organ] = new organ_type(H,1)
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
H.organs |= H.organs_by_name[name]
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.owner = H
|
||||
for(var/organ_tag in has_organ)
|
||||
var/organ_type = has_organ[organ_tag]
|
||||
var/obj/item/organ/O = new organ_type(H,1)
|
||||
if(organ_tag != O.organ_tag)
|
||||
warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.")
|
||||
O.organ_tag = organ_tag
|
||||
H.internal_organs_by_name[organ_tag] = O
|
||||
|
||||
/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target)
|
||||
if (target.holder_type && target.a_intent == "help" && H.a_intent == "help")
|
||||
|
||||
@@ -29,11 +29,11 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
// Check if they have a functioning hand.
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_hand"]
|
||||
if(E && !(E.status & ORGAN_DESTROYED))
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
|
||||
E = user.organs_by_name["r_hand"]
|
||||
if(E && !(E.status & ORGAN_DESTROYED))
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -181,11 +181,11 @@ var/global/list/sparring_attack_cache = list()
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
|
||||
if(E && !(E.status & ORGAN_DESTROYED))
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
|
||||
E = user.organs_by_name["r_foot"]
|
||||
if(E && !(E.status & ORGAN_DESTROYED))
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -225,11 +225,11 @@ var/global/list/sparring_attack_cache = list()
|
||||
if(target.grabbed_by == user && target.lying)
|
||||
return 0
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
|
||||
if(E && !(E.status & ORGAN_DESTROYED))
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
|
||||
E = user.organs_by_name["r_foot"]
|
||||
if(E && !(E.status & ORGAN_DESTROYED))
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -257,4 +257,4 @@ var/global/list/sparring_attack_cache = list()
|
||||
shredding = 0
|
||||
damage = 0
|
||||
sharp = 0
|
||||
edge = 0
|
||||
edge = 0
|
||||
|
||||
@@ -189,9 +189,10 @@ var/global/list/damage_icon_parts = list()
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
if(O.is_stump())
|
||||
continue
|
||||
if(O.status & ORGAN_DESTROYED) damage_appearance += "d"
|
||||
else
|
||||
damage_appearance += O.damage_state
|
||||
//if(O.status & ORGAN_DESTROYED) damage_appearance += "d" //what is this?
|
||||
//else
|
||||
// damage_appearance += O.damage_state
|
||||
damage_appearance += O.damage_state
|
||||
|
||||
if(damage_appearance == previous_damage_appearance)
|
||||
// nothing to do here
|
||||
@@ -207,20 +208,20 @@ var/global/list/damage_icon_parts = list()
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
if(O.is_stump())
|
||||
continue
|
||||
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.get_bodytype()]"
|
||||
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
|
||||
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.get_bodytype()]"
|
||||
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
|
||||
|
||||
@@ -262,7 +263,7 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
for(var/organ_tag in species.has_limbs)
|
||||
var/obj/item/organ/external/part = organs_by_name[organ_tag]
|
||||
if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED))
|
||||
if(isnull(part) || part.is_stump())
|
||||
icon_key += "0"
|
||||
else if(part.status & ORGAN_ROBOT)
|
||||
icon_key += "2[part.model ? "-[part.model]": ""]"
|
||||
@@ -351,7 +352,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.is_stump() || (head_organ.status & ORGAN_DESTROYED) )
|
||||
if(!head_organ || head_organ.is_stump() )
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
var/obj/item/organ/external/E = H.organs_by_name["head"]
|
||||
if(!E || (E.status & ORGAN_DESTROYED))
|
||||
if(!E || E.is_stump())
|
||||
src << "\The [H] does not have a head!"
|
||||
|
||||
if(!H.species.has_organ["brain"])
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
var/obj/item/organ/external/E = H.get_organ(target_zone)
|
||||
|
||||
if(!E || (E.status & ORGAN_DESTROYED))
|
||||
if(!E || E.is_stump())
|
||||
user << "<span class='notice'>[H] is missing that bodypart.</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
var/mob/living/carbon/human/driver = mob.buckled
|
||||
var/obj/item/organ/external/l_hand = driver.get_organ("l_hand")
|
||||
var/obj/item/organ/external/r_hand = driver.get_organ("r_hand")
|
||||
if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED)))
|
||||
if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump()))
|
||||
return // No hands to drive your chair? Tough luck!
|
||||
//drunk wheelchair driving
|
||||
if(mob.confused)
|
||||
@@ -494,4 +494,4 @@
|
||||
return 0
|
||||
if(Check_Shoegrip())
|
||||
return 0
|
||||
return prob_slip
|
||||
return prob_slip
|
||||
|
||||
@@ -140,8 +140,8 @@ nanoui is used to open and update nano browser uis
|
||||
* @return nothing
|
||||
*/
|
||||
/datum/nanoui/proc/update_status(var/push_update = 0)
|
||||
src_object = src_object.nano_host()
|
||||
var/new_status = src_object.CanUseTopic(user, state)
|
||||
var/obj/host = src_object.nano_host()
|
||||
var/new_status = host.CanUseTopic(user, state)
|
||||
if(master_ui)
|
||||
new_status = min(new_status, master_ui.status)
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ var/list/organ_cache = list()
|
||||
var/mob/living/carbon/human/H = holder
|
||||
if(istype(H))
|
||||
if(internal)
|
||||
var/obj/item/organ/external/E = H.organs_by_name[src.parent_organ]
|
||||
var/obj/item/organ/external/E = H.get_organ(parent_organ)
|
||||
if(E)
|
||||
if(E.internal_organs == null)
|
||||
E.internal_organs = list()
|
||||
@@ -249,7 +249,6 @@ var/list/organ_cache = list()
|
||||
src.status &= ~ORGAN_BLEEDING
|
||||
src.status &= ~ORGAN_SPLINTED
|
||||
src.status &= ~ORGAN_CUT_AWAY
|
||||
src.status &= ~ORGAN_DESTROYED
|
||||
src.status |= ORGAN_ROBOT
|
||||
src.status |= ORGAN_ASSISTED
|
||||
|
||||
|
||||
@@ -83,15 +83,15 @@
|
||||
if(istype(I,/obj/item/organ))
|
||||
continue
|
||||
removable_objects |= I
|
||||
if(!removable_objects.len)
|
||||
return ..()
|
||||
var/obj/item/I = pick(removable_objects)
|
||||
if(!istype(I))
|
||||
return ..()
|
||||
I.loc = get_turf(user)
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(I)
|
||||
user.visible_message("<span class='danger'>\The [user] rips \the [I] out of \the [src]!</span>")
|
||||
if(removable_objects.len)
|
||||
var/obj/item/I = pick(removable_objects)
|
||||
I.loc = get_turf(user) //just in case something was embedded that is not an item
|
||||
if(istype(I))
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(I)
|
||||
user.visible_message("<span class='danger'>\The [user] rips \the [I] out of \the [src]!</span>")
|
||||
return //no eating the limb until everything's been removed
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/external/examine()
|
||||
..()
|
||||
@@ -164,8 +164,8 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/organ/external/New(var/mob/living/carbon/holder, var/internal)
|
||||
..()
|
||||
/obj/item/organ/external/New(var/mob/living/carbon/holder)
|
||||
..(holder, 0)
|
||||
if(owner)
|
||||
replaced(owner)
|
||||
sync_colour_to_human(owner)
|
||||
@@ -204,8 +204,6 @@
|
||||
/obj/item/organ/external/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
if((brute <= 0) && (burn <= 0))
|
||||
return 0
|
||||
if(status & ORGAN_DESTROYED)
|
||||
return 0
|
||||
|
||||
brute *= brute_mod
|
||||
burn *= burn_mod
|
||||
@@ -434,11 +432,11 @@ This function completely restores a damaged organ to perfect condition.
|
||||
|
||||
/obj/item/organ/external/process()
|
||||
if(owner)
|
||||
if(parent)
|
||||
if(parent.status & ORGAN_DESTROYED)
|
||||
status |= ORGAN_DESTROYED
|
||||
owner.update_body(1)
|
||||
return
|
||||
//Dismemberment
|
||||
//if(parent && parent.is_stump()) //should never happen
|
||||
// warning("\The [src] ([src.type]) belonging to [owner] ([owner.type]) was attached to a stump")
|
||||
// remove()
|
||||
// return
|
||||
|
||||
// Process wounds, doing healing etc. Only do this every few ticks to save processing power
|
||||
if(owner.life_tick % wound_update_accuracy == 0)
|
||||
@@ -480,7 +478,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
*/
|
||||
/obj/item/organ/external/proc/update_germs()
|
||||
|
||||
if(status & (ORGAN_ROBOT|ORGAN_DESTROYED) || (owner.species && owner.species.flags & IS_PLANT)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs.
|
||||
if(status & (ORGAN_ROBOT) || (owner.species && owner.species.flags & IS_PLANT)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs.
|
||||
germ_level = 0
|
||||
return
|
||||
|
||||
@@ -657,8 +655,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
// new damage icon system
|
||||
// returns just the brute/burn damage code
|
||||
/obj/item/organ/external/proc/damage_state_text()
|
||||
if(status & ORGAN_DESTROYED)
|
||||
return "--"
|
||||
|
||||
var/tburn = 0
|
||||
var/tbrute = 0
|
||||
@@ -687,14 +683,11 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
****************************************************/
|
||||
|
||||
//Handles dismemberment
|
||||
/obj/item/organ/external/proc/droplimb(var/clean, var/disintegrate, var/ignore_children)
|
||||
/obj/item/organ/external/proc/droplimb(var/clean, var/disintegrate = DROPLIMB_EDGE, var/ignore_children = null)
|
||||
|
||||
if(cannot_amputate || !owner)
|
||||
return
|
||||
|
||||
if(!disintegrate)
|
||||
disintegrate = DROPLIMB_EDGE
|
||||
|
||||
switch(disintegrate)
|
||||
if(DROPLIMB_EDGE)
|
||||
if(!clean)
|
||||
@@ -718,16 +711,16 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
"<span class='danger'>You hear the [gore_sound].</span>")
|
||||
|
||||
var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed().
|
||||
var/obj/item/organ/external/parent_organ = parent
|
||||
removed(null, ignore_children)
|
||||
victim.traumatic_shock += 60
|
||||
|
||||
wounds.Cut()
|
||||
if(parent)
|
||||
if(parent_organ)
|
||||
var/datum/wound/lost_limb/W = new (src, disintegrate, clean)
|
||||
parent.children -= src
|
||||
if(clean)
|
||||
parent.wounds |= W
|
||||
parent.update_damages()
|
||||
parent_organ.wounds |= W
|
||||
parent_organ.update_damages()
|
||||
else
|
||||
var/obj/item/organ/external/stump/stump = new (victim, 0, src)
|
||||
if(status & ORGAN_ROBOT)
|
||||
@@ -735,7 +728,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
stump.wounds |= W
|
||||
victim.organs |= stump
|
||||
stump.update_damages()
|
||||
parent = null
|
||||
|
||||
spawn(1)
|
||||
victim.updatehealth()
|
||||
@@ -956,9 +948,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
return 0
|
||||
|
||||
/obj/item/organ/external/proc/is_usable()
|
||||
if((status & ORGAN_ROBOT) && get_damage() >= max_damage) //robot limbs just become inoperable at max damage
|
||||
return
|
||||
return !is_dislocated() && !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD))
|
||||
return !is_dislocated() && !(status & (ORGAN_MUTATED|ORGAN_DEAD))
|
||||
|
||||
/obj/item/organ/external/proc/is_malfunctioning()
|
||||
return ((status & ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
|
||||
@@ -980,7 +970,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
H.drop_from_inventory(W)
|
||||
W.loc = owner
|
||||
|
||||
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children)
|
||||
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children = 0)
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
@@ -989,14 +979,13 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
..()
|
||||
|
||||
status |= ORGAN_DESTROYED
|
||||
victim.bad_external_organs -= src
|
||||
|
||||
for(var/obj/item/implant in implants)
|
||||
if(!istype(implant))
|
||||
return
|
||||
if(implant.w_class <= 2)
|
||||
qdel(implant)
|
||||
for(var/atom/movable/implant in implants)
|
||||
//large items and non-item objs fall to the floor, everything else stays
|
||||
var/obj/item/I = implant
|
||||
if(istype(I) && I.w_class < 3)
|
||||
implant.loc = get_turf(victim.loc)
|
||||
else
|
||||
implant.loc = src
|
||||
implants.Cut()
|
||||
@@ -1015,6 +1004,10 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
organ.removed()
|
||||
organ.loc = src
|
||||
|
||||
// Remove parent references
|
||||
parent.children -= src
|
||||
parent = null
|
||||
|
||||
release_restraints(victim)
|
||||
victim.organs -= src
|
||||
victim.organs_by_name[limb_name] = null // Remove from owner's vars.
|
||||
@@ -1091,7 +1084,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(wound_descriptors.len)
|
||||
var/list/flavor_text = list()
|
||||
var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\
|
||||
"huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area")
|
||||
"huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area") //note to self make this more robust
|
||||
for(var/wound in wound_descriptors)
|
||||
switch(wound_descriptors[wound])
|
||||
if(1)
|
||||
|
||||
@@ -166,14 +166,6 @@
|
||||
name = "anchoring ligament"
|
||||
parent_organ = "groin"
|
||||
|
||||
/obj/item/organ/diona/node
|
||||
name = "receptor node"
|
||||
parent_organ = "head"
|
||||
|
||||
/obj/item/organ/diona/nutrients
|
||||
name = "nutrient vessel"
|
||||
parent_organ = "chest"
|
||||
|
||||
/obj/item/organ/diona
|
||||
name = "diona nymph"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
@@ -191,8 +183,9 @@
|
||||
// These are different to the standard diona organs as they have a purpose in other
|
||||
// species (absorbing radiation and light respectively)
|
||||
/obj/item/organ/diona/nutrients
|
||||
name = "nutrient vessel"
|
||||
organ_tag = "nutrient vessel"
|
||||
name = "nutrient channel"
|
||||
parent_organ = "chest"
|
||||
organ_tag = "nutrient channel"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "claw"
|
||||
|
||||
@@ -200,7 +193,8 @@
|
||||
return
|
||||
|
||||
/obj/item/organ/diona/node
|
||||
name = "receptor node"
|
||||
name = "response node"
|
||||
parent_organ = "head"
|
||||
organ_tag = "receptor node"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "claw"
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
i.loc = src
|
||||
user << "<span class='notice'>You put [i] in [src].</span>"
|
||||
papers.Add(i)
|
||||
update_icon()
|
||||
amount++
|
||||
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
|
||||
|
||||
if (!affecting || (affecting.status & ORGAN_DESTROYED) || affecting.is_stump())
|
||||
if (!affecting || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
if (affected.status & ORGAN_DESTROYED)
|
||||
if (affected.is_stump())
|
||||
return 0
|
||||
if (affected.status & ORGAN_ROBOT)
|
||||
return 0
|
||||
@@ -288,8 +288,6 @@
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
if (affected.status & ORGAN_DESTROYED)
|
||||
return 0
|
||||
return !affected.cannot_amputate
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
Reference in New Issue
Block a user