From b5e8e5e88f73b0042608b3f7c31620e530da1505 Mon Sep 17 00:00:00 2001 From: Certhic Date: Sun, 21 Oct 2018 20:41:32 +0200 Subject: [PATCH 1/2] fix: autopsy scanner unresponsiveness --- code/game/objects/items/devices/autopsy.dm | 147 +++++++++--------- code/modules/surgery/organs/organ.dm | 2 +- code/modules/surgery/organs/organ_external.dm | 2 + 3 files changed, 76 insertions(+), 75 deletions(-) diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index f5aa02d6eb4..f0e85af177e 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -41,38 +41,37 @@ W.time_inflicted = time_inflicted return W -/obj/item/autopsy_scanner/proc/add_data(obj/item/organ/external/O) - if(!O.autopsy_data.len && !O.trace_chemicals.len) - return +/obj/item/autopsy_scanner/proc/add_data(obj/item/organ/O) + if(O.autopsy_data.len) + for(var/V in O.autopsy_data) + var/datum/autopsy_data/W = O.autopsy_data[V] - for(var/V in O.autopsy_data) - var/datum/autopsy_data/W = O.autopsy_data[V] - - if(!W.pretend_weapon) - if(1) - W.pretend_weapon = W.weapon - else - W.pretend_weapon = pick("mechanical toolbox", "wirecutters", "revolver", "crowbar", "fire extinguisher", "tomato soup", "oxygen tank", "emergency oxygen tank", "laser", "bullet") + if(!W.pretend_weapon) + if(1) + W.pretend_weapon = W.weapon + else + W.pretend_weapon = pick("mechanical toolbox", "wirecutters", "revolver", "crowbar", "fire extinguisher", "tomato soup", "oxygen tank", "emergency oxygen tank", "laser", "bullet") - var/datum/autopsy_data_scanner/D = wdata[V] - if(!D) - D = new() - D.weapon = W.weapon - wdata[V] = D + var/datum/autopsy_data_scanner/D = wdata[V] + if(!D) + D = new() + D.weapon = W.weapon + wdata[V] = D - if(!D.organs_scanned[O.name]) - if(D.organ_names == "") - D.organ_names = O.name - else - D.organ_names += ", [O.name]" + if(!D.organs_scanned[O.name]) + if(D.organ_names == "") + D.organ_names = O.name + else + D.organ_names += ", [O.name]" - qdel(D.organs_scanned[O.name]) - D.organs_scanned[O.name] = W.copy() + qdel(D.organs_scanned[O.name]) + D.organs_scanned[O.name] = W.copy() - for(var/V in O.trace_chemicals) - if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V)) - chemtraces += V + if(O.trace_chemicals.len) + for(var/V in O.trace_chemicals) + if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V)) + chemtraces += V /obj/item/autopsy_scanner/attackby(obj/item/P, mob/user) if(istype(P, /obj/item/pen)) @@ -90,71 +89,71 @@ user.put_in_hands(R) /obj/item/autopsy_scanner/attack_self(mob/user) - if(!wdata.len && !chemtraces.len) - return - var/scan_data = "" if(timeofdeath) scan_data += "Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]

" + else + scan_data += "Time of death: Unknown / Still alive

" - var/n = 1 - for(var/wdata_idx in wdata) - var/datum/autopsy_data_scanner/D = wdata[wdata_idx] - var/total_hits = 0 - var/total_score = 0 - var/list/weapon_chances = list() // maps weapon names to a score - var/age = 0 + if(wdata.len) + var/n = 1 + for(var/wdata_idx in wdata) + var/datum/autopsy_data_scanner/D = wdata[wdata_idx] + var/total_hits = 0 + var/total_score = 0 + var/list/weapon_chances = list() // maps weapon names to a score + var/age = 0 - for(var/wound_idx in D.organs_scanned) - var/datum/autopsy_data/W = D.organs_scanned[wound_idx] - total_hits += W.hits + for(var/wound_idx in D.organs_scanned) + var/datum/autopsy_data/W = D.organs_scanned[wound_idx] + total_hits += W.hits - var/wname = W.pretend_weapon + var/wname = W.pretend_weapon - if(wname in weapon_chances) - weapon_chances[wname] += W.damage - else - weapon_chances[wname] = max(W.damage, 1) - total_score+=W.damage + if(wname in weapon_chances) + weapon_chances[wname] += W.damage + else + weapon_chances[wname] = max(W.damage, 1) + total_score+=W.damage - var/wound_age = W.time_inflicted - age = max(age, wound_age) + var/wound_age = W.time_inflicted + age = max(age, wound_age) - var/damage_desc + var/damage_desc - var/damaging_weapon = (total_score != 0) + var/damaging_weapon = (total_score != 0) - // total score happens to be the total damage - switch(total_score) - if(0) - damage_desc = "Unknown" - if(1 to 5) - damage_desc = "negligible" - if(5 to 15) - damage_desc = "light" - if(15 to 30) - damage_desc = "moderate" - if(30 to 1000) - damage_desc = "severe" + // total score happens to be the total damage + switch(total_score) + if(0) + damage_desc = "Unknown" + if(1 to 5) + damage_desc = "negligible" + if(5 to 15) + damage_desc = "light" + if(15 to 30) + damage_desc = "moderate" + if(30 to 1000) + damage_desc = "severe" - if(!total_score) - total_score = D.organs_scanned.len + if(!total_score) + total_score = D.organs_scanned.len - scan_data += "Weapon #[n]
" - if(damaging_weapon) - scan_data += "Severity: [damage_desc]
" - scan_data += "Hits by weapon: [total_hits]
" - scan_data += "Approximate time of wound infliction: [station_time_timestamp("hh:mm", age)]
" - scan_data += "Affected limbs: [D.organ_names]
" - scan_data += "Possible weapons:
" - for(var/weapon_name in weapon_chances) - scan_data += "\t[100*weapon_chances[weapon_name]/total_score]% [weapon_name]
" + scan_data += "Weapon #[n]
" + if(damaging_weapon) + scan_data += "Severity: [damage_desc]
" + scan_data += "Hits by weapon: [total_hits]
" + scan_data += "Approximate time of wound infliction: [station_time_timestamp("hh:mm", age)]
" + scan_data += "Affected limbs: [D.organ_names]
" + scan_data += "Possible weapons:
" + for(var/weapon_name in weapon_chances) + scan_data += "\t[100*weapon_chances[weapon_name]/total_score]% [weapon_name]
" - scan_data += "
" + scan_data += "
" - n++ + n++ if(chemtraces.len) scan_data += "Trace Chemicals:
" diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 991a5d252ce..a6165c77f41 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -203,7 +203,7 @@ // Let's not drag this on, medbay has only so much antibiotics //Adds autopsy data for used_weapon. -/obj/item/organ/proc/add_autopsy_data(var/used_weapon, var/damage) +/obj/item/organ/proc/add_autopsy_data(var/used_weapon = "Unknown", var/damage) var/datum/autopsy_data/W = autopsy_data[used_weapon] if(!W) W = new() diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 74d498704aa..f39967cc3a2 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -175,6 +175,8 @@ owner.handle_splints() if(used_weapon) add_autopsy_data("[used_weapon]", brute + burn) + else + add_autopsy_data(null, brute + burn) // Make sure we don't exceed the maximum damage a limb can take before dismembering if((brute_dam + burn_dam + brute + burn) < max_damage) From e8597c897d6608b06b7d56c7cab40244574e1cec Mon Sep 17 00:00:00 2001 From: Certhic Date: Sun, 21 Oct 2018 21:04:01 +0200 Subject: [PATCH 2/2] removed unused pretend weapon code --- code/game/objects/items/devices/autopsy.dm | 33 +++------------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index f0e85af177e..65afc0f64ef 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -27,7 +27,6 @@ /datum/autopsy_data var/weapon = null - var/pretend_weapon = null var/damage = 0 var/hits = 0 var/time_inflicted = 0 @@ -35,7 +34,6 @@ /datum/autopsy_data/proc/copy() var/datum/autopsy_data/W = new() W.weapon = weapon - W.pretend_weapon = pretend_weapon W.damage = damage W.hits = hits W.time_inflicted = time_inflicted @@ -46,13 +44,6 @@ for(var/V in O.autopsy_data) var/datum/autopsy_data/W = O.autopsy_data[V] - if(!W.pretend_weapon) - if(1) - W.pretend_weapon = W.weapon - else - W.pretend_weapon = pick("mechanical toolbox", "wirecutters", "revolver", "crowbar", "fire extinguisher", "tomato soup", "oxygen tank", "emergency oxygen tank", "laser", "bullet") - - var/datum/autopsy_data_scanner/D = wdata[V] if(!D) D = new() @@ -102,19 +93,11 @@ var/datum/autopsy_data_scanner/D = wdata[wdata_idx] var/total_hits = 0 var/total_score = 0 - var/list/weapon_chances = list() // maps weapon names to a score var/age = 0 for(var/wound_idx in D.organs_scanned) var/datum/autopsy_data/W = D.organs_scanned[wound_idx] total_hits += W.hits - - var/wname = W.pretend_weapon - - if(wname in weapon_chances) - weapon_chances[wname] += W.damage - else - weapon_chances[wname] = max(W.damage, 1) total_score+=W.damage @@ -122,13 +105,8 @@ age = max(age, wound_age) var/damage_desc - - var/damaging_weapon = (total_score != 0) - // total score happens to be the total damage switch(total_score) - if(0) - damage_desc = "Unknown" if(1 to 5) damage_desc = "negligible" if(5 to 15) @@ -137,20 +115,17 @@ damage_desc = "moderate" if(30 to 1000) damage_desc = "severe" + else + damage_desc = "Unknown" - if(!total_score) - total_score = D.organs_scanned.len - + var/damaging_weapon = (total_score != 0) scan_data += "Weapon #[n]
" if(damaging_weapon) scan_data += "Severity: [damage_desc]
" scan_data += "Hits by weapon: [total_hits]
" scan_data += "Approximate time of wound infliction: [station_time_timestamp("hh:mm", age)]
" scan_data += "Affected limbs: [D.organ_names]
" - scan_data += "Possible weapons:
" - for(var/weapon_name in weapon_chances) - scan_data += "\t[100*weapon_chances[weapon_name]/total_score]% [weapon_name]
" - + scan_data += "Weapon: [D.weapon]
" scan_data += "
" n++