diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 0e79b89189..4a85328819 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -285,11 +285,14 @@ playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) if(ishuman(M)) var/mob/living/carbon/human/H = M + + if(H.species.flags & IS_SYNTHETIC) + return + if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) ) var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot")) if(affecting.status & ORGAN_ROBOT) return - H.Weaken(3) if(affecting.take_damage(5, 0)) H.UpdateDamageIcon() diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index ad7ec85f14..e434913aee 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -449,11 +449,15 @@ item_state = "crowbar_red" /obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob) + if(hasorgans(M)) + var/datum/organ/external/S = M:organs_by_name[user.zone_sel.selecting] + if (!S) return if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help") return ..() + if(S.brute_dam) S.heal_damage(15,0,0,1) if(user != M) @@ -464,7 +468,26 @@ user.visible_message("\red \The [user] patches some dents on their [S.display_name] with \the [src]",\ "\red You patch some dents on your [S.display_name]",\ "You hear a welder.") - else - user << "Nothing to fix!" + return + + if(istype(M,/mob/living/carbon/human)) + + var/mob/living/carbon/human/H = M + + if(H.species.flags & IS_SYNTHETIC) + + if(H.getBruteLoss() > 0) + + if(M == user) + user << "\red You can't repair damage to your own body - it's against OH&S." + return + + user.visible_message("\red \The [user] patches some dents on \the [M] with \the [src]",\ + "\red You patch some of the dents on \the [M].",\ + "You hear a welder.") + H.heal_overall_damage(5,0) + return + + user << "Nothing to fix!" else return ..() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9e75b94987..89f3b8eccc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -63,7 +63,7 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") - + ..() @@ -860,6 +860,10 @@ return /mob/living/carbon/human/proc/vomit() + + if(species.flags & IS_SYNTHETIC) + return //Machines don't throw up. + if(!lastpuke) lastpuke = 1 src << "You feel nauseous..." diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index a8a8648476..1b12f62562 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -73,6 +73,10 @@ /mob/living/carbon/human/adjustCloneLoss(var/amount) ..() + + if(species.flags & IS_SYNTHETIC) + return + var/heal_prob = max(0, 80 - getCloneLoss()) var/mut_prob = min(80, getCloneLoss()+10) if (amount > 0) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a87a505b28..fe535fc897 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -225,6 +225,9 @@ proc/handle_mutations_and_radiation() + if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss. + return + if(getFireLoss()) if((COLD_RESISTANCE in mutations) || (prob(1))) heal_organ_damage(0,1) @@ -249,6 +252,7 @@ radiation = 0 else + if(species.flags & RAD_ABSORB) var/rads = radiation/25 radiation -= rads @@ -258,8 +262,6 @@ adjustToxLoss(-(rads)) updatehealth() return - if(species.flags & IS_SYNTHETIC) - return var/damage = 0 switch(radiation) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5ed7583adf..0444216267 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -515,8 +515,6 @@ This function completely restores a damaged organ to perfect condition. var/obj/organ //Dropped limb object switch(body_part) - if(LOWER_TORSO) - owner << "\red You are now sterile." if(HEAD) if(owner.species.flags & IS_SYNTHETIC) organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 7456e54915..851f1fdf3e 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -638,11 +638,14 @@ obj/structure/cable/proc/cableColor(var/colorC) /obj/item/weapon/cable_coil/attack(mob/M as mob, mob/user as mob) if(hasorgans(M)) + var/datum/organ/external/S = M:get_organ(user.zone_sel.selecting) if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help") return ..() + if(S.burn_dam > 0 && use(1)) S.heal_damage(0,15,0,1) + if(user != M) user.visible_message("\The [user] repairs some burn damage on [M]'s [S.display_name] with \the [src]",\ "\The [user] repairs some burn damage on your [S.display_name]",\ @@ -651,7 +654,28 @@ obj/structure/cable/proc/cableColor(var/colorC) user.visible_message("\The [user] repairs some burn damage on their [S.display_name] with \the [src]",\ "You repair some burn damage on your [S.display_name]",\ "You hear wires being cut.") - else - user << "Nothing to fix!" + + return + + if(istype(M,/mob/living/carbon/human)) + + var/mob/living/carbon/human/H = M + + if(H.species.flags & IS_SYNTHETIC) + + if(H.getFireLoss() > 0) + + if(M == user) + user << "\red You can't repair damage to your own body - it's against OH&S." + return + + user.visible_message("\The [user] repairs some burn damage on [M] with \the [src]",\ + "You repair some of \the [M]'s burn damage.",\ + "You hear wires being cut.") + H.heal_overall_damage(0,5) + return + + user << "Nothing to fix!" + else return ..() diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 026338606d..d09acc8e15 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -27,6 +27,13 @@ return 0 if(M == user) + + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_SYNTHETIC) + H << "\red You have a monitor for a head, where do you think you're going to put that?" + return + M << "\blue You swallow a gulp of [src]." if(reagents.total_volume) reagents.trans_to_ingest(M, gulp_size) @@ -35,6 +42,11 @@ return 1 else if( istype(M, /mob/living/carbon/human) ) + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_SYNTHETIC) + H << "\red They have a monitor for a head, where do you think you're going to put that?" + return + for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] attempts to feed [M] [src].", 1) if(!do_mob(user, M)) return diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 2cfe2978eb..89abf284c5 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -37,9 +37,15 @@ M.drop_from_inventory(src) //so icons update :[ del(src) return 0 + if(istype(M, /mob/living/carbon)) - if(M == user) //If you're eating it yourself. - var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) + var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) + if(M == user) //If you're eating it yourself + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_SYNTHETIC) + H << "\red You have a monitor for a head, where do you think you're going to put that?" + return if (fullness <= 50) M << "\red You hungrily chew out a piece of [src] and gobble it!" if (fullness > 50 && fullness <= 150) @@ -52,8 +58,14 @@ M << "\red You cannot force any more of [src] to go down your throat." return 0 else + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_SYNTHETIC) + H << "\red They have a monitor for a head, where do you think you're going to put that?" + return + if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else. - var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) + if (fullness <= (550 * (1 + M.overeatduration / 1000))) for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] attempts to feed [M] [src].", 1) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index fa9149f3ff..2ada558367 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -20,6 +20,13 @@ return attack(mob/M as mob, mob/user as mob, def_zone) if(M == user) + + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_SYNTHETIC) + H << "\red You have a monitor for a head, where do you think you're going to put that?" + return + M << "\blue You swallow [src]." M.drop_from_inventory(src) //icon update if(reagents.total_volume) @@ -31,6 +38,11 @@ else if(istype(M, /mob/living/carbon/human) ) + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_SYNTHETIC) + H << "\red They have a monitor for a head, where do you think you're going to put that?" + return + for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] attempts to force [M] to swallow [src].", 1)