diff --git a/code/WorkInProgress/Chemistry-Holder.dm b/code/WorkInProgress/Chemistry-Holder.dm index 49f10196ffe..de22a277f0f 100644 --- a/code/WorkInProgress/Chemistry-Holder.dm +++ b/code/WorkInProgress/Chemistry-Holder.dm @@ -58,7 +58,9 @@ datum return the_id trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. - if (!target || src.total_volume<=0) + if (!target ) + return + if (!target.reagents || src.total_volume<=0) return var/datum/reagents/R = target.reagents amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 2bf5292aa28..1b9469a3c52 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -240,7 +240,9 @@ datum/mind if (istype(objective, /datum/objective/absorb)) def_num = objective:num_to_eat - var/num_to_eat = input("Number to eat:", "Objective", def_num) as text + var/num_to_eat = input("Number to eat:", "Objective", def_num) as num|null + if (isnull(num_to_eat)) + return new_objective = new /datum/objective/absorb new_objective.owner = src new_objective:num_to_eat = num_to_eat diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 33b1a407b50..9b72ab06268 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -169,9 +169,8 @@ occupant.oxyloss -= 1 //severe damage should heal waaay slower without proper chemicals if(occupant.bodytemperature < 225) - if(occupant.bruteloss) occupant.bruteloss = max(0, occupant.bruteloss - min(1, 20/occupant.bruteloss)) - if(occupant.fireloss) occupant.fireloss = max(0, occupant.fireloss - min(1, 20/occupant.fireloss)) - if(occupant.toxloss) occupant.toxloss = max(0, occupant.toxloss - min(1, 20/occupant.toxloss)) + occupant.toxloss = max(0, occupant.toxloss - min(1, 20/occupant.toxloss)) + occupant.heal_organ_damage(min(1, 20/occupant.bruteloss),min(1, 20/occupant.fireloss)) if(beaker && (next_trans == 0)) beaker:reagents.trans_to(occupant, 1, 10) beaker:reagents.reaction(occupant) diff --git a/code/game/objects/items/weapons/papers_bins.dm b/code/game/objects/items/weapons/papers_bins.dm index da8c3f710fd..e252c1560fd 100644 --- a/code/game/objects/items/weapons/papers_bins.dm +++ b/code/game/objects/items/weapons/papers_bins.dm @@ -203,7 +203,12 @@ CLIPBOARDS return /obj/item/weapon/paper/attack_ai(var/mob/living/silicon/ai/user as mob) - if (get_dist(src, user.current) < 2) + var/dist + if (istype(user) && user.current) //is AI + dist = get_dist(src, user.current) + else //cyborg or AI not seeing through a camera + dist = get_dist(src, user) + if (dist < 2) usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name)) onclose(usr, "[src.name]") else diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 9187ed65b50..7ef7b3c98a6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -800,3 +800,8 @@ In all, this is a lot like the monkey code. /N src.health = 100 src.stat = 0 + +/mob/living/carbon/alien/heal_organ_damage(var/brute, var/burn) + bruteloss = max(0, bruteloss-brute) //HACK + fireloss = max(0, fireloss-burn) //HACK + src.updatehealth() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0bb0c06a0b6..321ea947044 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -87,7 +87,7 @@ return 0 src.burn_skin(shock_damage) //src.fireloss += shock_damage //burn_skin will do this for us - src.updatehealth() + //src.updatehealth() src.visible_message( "\red [src] was shocked by the [source]!", \ "\red You feel a powerful shock course through your body!", \ diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f3e2d02c665..224ecb0edf9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -2696,18 +2696,7 @@ var/obj/item/clothing/gloves/G = src.gloves siemens_coeff = G.siemens_coefficient return ..(shock_damage,source,siemens_coeff) - -/mob/living/carbon/human/proc/heal_organ_damage(var/brute, var/burn) - var/list/parts = list() - for(var/A in src.organs) - if(!src.organs[A]) continue - var/datum/organ/external/affecting = src.organs[A] - if(!istype(affecting)) continue - if((brute && affecting.brute_dam) || (burn && affecting.burn_dam)) - parts += affecting - - if(!parts.len) return - var/datum/organ/external/picked = pick(parts) - picked.heal_damage(brute,burn) + +/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn) + ..() src.UpdateDamageIcon() - src.updatehealth() diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 9e8c86aa5fa..23baebd00e7 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -701,4 +701,9 @@ src.source.update_clothing() src.target.update_clothing() del(src) - return \ No newline at end of file + return + +/mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn) + bruteloss = max(0, bruteloss-brute) //HACK + fireloss = max(0, fireloss-burn) //HACK + src.updatehealth() \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ed7d74ca04f..982bd647c54 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -2228,4 +2228,18 @@ note dizziness decrements automatically in the mob's Life() proc. var/list/L = src.get_contents() for(var/obj/O in L) O.emp_act(severity) - ..() \ No newline at end of file + ..() + +/mob/proc/heal_organ_damage(var/brute, var/burn) + var/list/parts = list() + for(var/A in src.organs) + if(!src.organs[A]) continue + var/datum/organ/external/affecting = src.organs[A] + if(!istype(affecting)) continue + if((brute && affecting.brute_dam) || (burn && affecting.burn_dam)) + parts += affecting + + if(!parts.len) return + var/datum/organ/external/picked = pick(parts) + picked.heal_damage(brute,burn) + src.updatehealth()