diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 382ab89c367..00e45b009b9 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -186,7 +186,7 @@ if(scantemp == "Scanner unoccupied") scantemp = "" // Stupid check to remove the text // Make sure we can't scan a headless person. It breaks the cloner permanently. - var/datum/organ/external/temp = organs["head"] + var/datum/organ/external/temp = src.scanner.occupant.organs["head"] if(temp && !(temp.status & DESTROYED)) dat += "Scan - [src.scanner.occupant]
" else diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index c0d479c17cf..f667ec390a4 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -95,6 +95,13 @@ /atom/proc/blob_act() return +/atom/proc/acid_act(var/datum/reagent/R) + return 0 +/*/obj/proc/acid_act(var/datum/reagent/R) + return 0 +/mob/proc/acid_act(var/datum/reagent/R) + return 0*/ + // bullet_act called when anything is hit buy a projectile (bullet, tazer shot, laser, etc.) // flag is projectile type, can be: //PROJECTILE_TASER = 1 taser gun diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index d86f77622fe..753fafc8d94 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -702,6 +702,8 @@ datum reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if(!istype(M, /mob/living)) return + if(M.acid_act(src)) + return if(method == TOUCH) if(istype(M, /mob/living/carbon/human)) if(M:wear_mask) @@ -734,6 +736,8 @@ datum M.take_organ_damage(min(15, volume * 2)) reaction_obj(var/obj/O, var/volume) + if(O.acid_act(src)) + return if(istype(O, /obj/effect/blob)) var/obj/effect/blob/B = O if(B.weakness == "acid") @@ -772,6 +776,9 @@ datum reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if(!istype(M, /mob/living)) return //wooo more runtime fixin + //cael - added the option for things splashed with acid to handle it themselves (for xenoarch) + if(M.acid_act(src)) + return if(method == TOUCH) if(istype(M, /mob/living/carbon/human)) if(M:wear_mask) @@ -815,6 +822,8 @@ datum M.take_organ_damage(min(15, volume * 4)) reaction_obj(var/obj/O, var/volume) + if(O.acid_act(src)) + return if(istype(O, /obj/effect/blob)) var/obj/effect/blob/B = O if(B.weakness == "acid") diff --git a/code/modules/research/artifact_analysis.dm b/code/modules/research/artifact_analysis.dm index 16b4c0c1568..3089e9cd655 100644 --- a/code/modules/research/artifact_analysis.dm +++ b/code/modules/research/artifact_analysis.dm @@ -61,6 +61,8 @@ owned_pad = locate() in orange(1, src) /obj/machinery/artifact_analyser/attack_hand(var/mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return user.machine = src var/dat = "Artifact Analyser
" dat += "

" @@ -87,6 +89,10 @@ onclose(user, "artanalyser") /obj/machinery/artifact_analyser/process() + if(stat & (NOPOWER|BROKEN)) + return + use_power(350) + // if(!owned_pad) for(var/obj/machinery/analyser_pad/pad in range(1)) owned_pad = pad @@ -229,6 +235,7 @@ time *= 10 var/message = "[src] states, \"Commencing analysis.\"" src.visible_message(message, message) + use_power(500) spawn(time) src.working = 0 icon_state = "analyser" @@ -239,11 +246,12 @@ scan_num++ message = "[src] states, \"Analysis complete.\"" src.visible_message(message, message) + use_power(500) else if (findarti > 1) - var/message = "[src] states, \"Cannot analyse. Too many artifacts on pad.\"" + var/message = "[src] states, \"Cannot analyse. Error isolating energy signature.\"" src.visible_message(message, message) else - var/message = "[src] states, \"Cannot analyse. No artifact found.\"" + var/message = "[src] states, \"Cannot analyse. No noteworthy energy signature isolated.\"" src.visible_message(message, message) if(href_list["upload"] && cur_id != "") @@ -267,6 +275,7 @@ CA.effecttype = aeffect1 + " ([accuE1]%)" CA.effectmode = aeffect2 + " ([accuE2]%)" DB.catalogued_artifacts.Add(CA) + use_power(100) if(href_list["print"]) var/r = "Artifact Analysis Report (Scan #[scan_num])
" @@ -280,6 +289,7 @@ P.info = r for(var/mob/O in hearers(src, null)) O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3) + use_power(10) if(href_list["close"]) usr << browse(null, "window=artanalyser") diff --git a/code/modules/research/artifact_archaeo.dm b/code/modules/research/artifact_archaeo.dm index f3b047d3ecb..cc03ad685d6 100644 --- a/code/modules/research/artifact_archaeo.dm +++ b/code/modules/research/artifact_archaeo.dm @@ -31,27 +31,23 @@ else for(var/mob/M in viewers(world.view, user)) M.show_message("\blue A few sparks fly off the rock, but otherwise nothing else happens.",1) - else if(istype(W, /obj/item/weapon/reagent_containers/)) - var/obj/item/weapon/reagent_containers/R = W - if(R.reagents.has_reagent("pacid", 1)) - if(src.method) - if(inside) - var/obj/A = new src.inside(get_turf(src)) - for(var/mob/M in viewers(world.view, get_turf(src))) - M.show_message("\blue The rock fizzes away revealing a [A.name].",1) - else - for(var/mob/M in viewers(world.view, get_turf(src))) - M.show_message("\blue The rock fizzes away into nothing.",1) - del src - else - for(var/mob/M in viewers(world.view, get_turf(src))) - M.show_message("\blue The acid splashes harmlessly off the rock, nothing else interesting happens.",1) +/obj/item/weapon/ore/strangerock/acid_act(var/datum/reagent/R) + if(src.method) + if(inside) + var/obj/A = new src.inside(get_turf(src)) + for(var/mob/M in viewers(world.view, get_turf(src))) + M.show_message("\blue The rock fizzes away revealing a [A.name].",1) + else + for(var/mob/M in viewers(world.view, get_turf(src))) + M.show_message("\blue The rock fizzes away into nothing.",1) + del src + else + for(var/mob/M in viewers(world.view, get_turf(src))) + M.show_message("\blue The acid splashes harmlessly off the rock, nothing else interesting happens.",1) + return 1 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /obj/item/weapon/crystal name = "Crystal" icon = 'mining.dmi' @@ -124,7 +120,11 @@ /obj/item/weapon/talkingcrystal/proc/catchMessage(var/msg, var/mob/source) var/list/seperate = list() - if(findtext(msg," ")==0) + if(findtext(msg,"((")) + return + else if(findtext(msg,"))")) + return + else if(findtext(msg," ")==0) return else /*var/l = lentext(msg) @@ -167,7 +167,7 @@ if(!word) text = "[pick(words)]" else - text = word + text = pick(stringsplit(word)) if(lentext(text)==1) text=uppertext(text) else @@ -196,8 +196,18 @@ msg+="." else msg+="!" - for(var/mob/M in viewers(src)) - M << "The crystal says, \"[msg]\"" + + var/list/listening = viewers(src) + for(var/mob/M in world) + if (!M.client) + continue //skip monkeys and leavers + if (istype(M, /mob/new_player)) + continue + if(M.stat == 2 && M.client.ghost_ears) + listening|=M + + for(var/mob/M in listening) + M << "The crystal reverberates, \blue\"[msg]\"" lastsaid = world.timeofday + rand(300,800) /obj/item/weapon/talkingcrystal/process() diff --git a/code/modules/research/artifact_effect.dm b/code/modules/research/artifact_effect.dm index 867bf030187..19291af9b04 100644 --- a/code/modules/research/artifact_effect.dm +++ b/code/modules/research/artifact_effect.dm @@ -72,8 +72,8 @@ H.update_body() H.update_face() H.UpdateDamageIcon() - return 1 - // + return 1 + // if (istype(user, /mob/living/carbon/monkey/)) user << "\blue You feel a soothing energy invigorate you." user.adjustOxyLoss(-25) @@ -81,6 +81,7 @@ user.adjustBruteLoss(-25) user.adjustFireLoss(-25) user.adjustBrainLoss(-25) + return 1 else user << "Nothing happens." if("injure") if (istype(user, /mob/living/carbon/)) diff --git a/code/modules/research/artifact_harvester.dm b/code/modules/research/artifact_harvester.dm index 84839dfb768..b01bdbf4d0d 100644 --- a/code/modules/research/artifact_harvester.dm +++ b/code/modules/research/artifact_harvester.dm @@ -36,8 +36,12 @@ interact(user) /obj/machinery/artifact_harvester/process() + if(stat & (NOPOWER|BROKEN)) + return + use_power(350) if(harvesting) + use_power(250) inserted_battery.stored_charge += 10 if(inserted_battery.stored_charge >= inserted_battery.capacity) inserted_battery.stored_charge = inserted_battery.capacity @@ -49,6 +53,8 @@ return /obj/machinery/artifact_harvester/proc/interact(var/mob/user as mob) + if(stat & (NOPOWER|BROKEN)) + return user.machine = src var/dat = "Artifact Power Harvester
" dat += "

" @@ -88,20 +94,19 @@ var/mundane = 0 for(var/obj/O in get_turf(owned_pad)) - mundane++ - break + if(!istype(O, /obj/machinery/artifact)) + mundane++ + break for(var/mob/O in get_turf(owned_pad)) - mundane++ - break + if(!istype(O, /obj/machinery/artifact)) + mundane++ + break - if(articount > 1) - var/message = "[src] states, \"Cannot harvest. Too many artifacts on pad.\"" - src.visible_message(message, message) - else if(mundane) - var/message = "[src] states, \"No noteworthy energy signatures detected.\"" + if(articount > 1 || mundane) + var/message = "[src] states, \"Cannot harvest. Error isolating energy signature.\"" src.visible_message(message, message) else if(!articount) - var/message = "[src] states, \"Cannot harvest. No artifact found.\"" + var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" src.visible_message(message, message) else if (cur_artifact.being_used) var/message = "[src] states, \"Cannot harvest. Too much interferance from energy scan.\"" @@ -140,6 +145,7 @@ src.inserted_battery = null if (href_list["drainbattery"]) + use_power(100) src.inserted_battery.battery_effect.artifact_id = "" src.inserted_battery.stored_charge = 0 var/message = "[src] states, \"Battery drained of all charge.\"" diff --git a/code/modules/research/artifacts.dm b/code/modules/research/artifacts.dm index d79222b3f21..83f85dee1c1 100644 --- a/code/modules/research/artifacts.dm +++ b/code/modules/research/artifacts.dm @@ -179,7 +179,7 @@ my_effect.UpdateEffect(src.loc) //activate - if(src.charged && my_effect.DoEffect(src.loc)) + if(src.charged && my_effect.DoEffect(src)) src.charged = 0 src.chargetime = src.recharge @@ -207,7 +207,7 @@ else if (my_effect.trigger != "touch" && !src.activated) user << "Nothing happens." if (my_effect.effectmode == "contact" && src.activated && src.charged) - my_effect.DoEffect(src.loc) + my_effect.DoEffect(src) src.charged = 0 src.chargetime = src.recharge