//cael - some changes here. the analysis pad is entirely new //stick artifacts onto this then switch the analyser on /obj/machinery/analyser_pad name = "artifact analysis pad" desc = "Studies the structure of artifacts to discover their uses." icon = 'stationobjs.dmi' icon_state = "tele0" anchored = 1 density = 0 /obj/machinery/analyser_pad/New() ..() /*spawn(10) for(var/obj/machinery/artifact_analyser/analyser in orange(1)) world << "pad found analyser" if(!analyser.owned_pad) analyser.owned_pad = src world << "pad set analyser to self" break*/ /obj/machinery/artifact_analyser name = "Artifact Analyser" desc = "Studies the structure of artifacts to discover their uses." icon = 'virology.dmi' icon_state = "analyser" anchored = 1 density = 1 var/working = 0 var/accuO = 0 var/accuT = 0 var/accuE1 = 0 var/accuE2 = 0 var/aorigin = "None" var/atrigger = "None" var/aeffect1 = "None" var/aeffect2 = "None" var/list/origin_bonuses var/list/trigger_bonuses var/list/function_bonuses var/list/range_bonuses var/cur_id = "N\\A" var/scan_num = 0 var/obj/machinery/artifact/cur_artifact = null var/list/allorigins = list("Ancient Robots","Martian","Wizard Federation","Extradimensional","Precursor") var/list/alltriggers = list("Contact with Living Organism","Heavy Impact","Contact with Energy Source","Contact with Hydrogen","Contact with Corrosive Substance","Contact with Volatile Substance","Contact with Toxins","Exposure to Heat") var/list/alleffects = list("Healing Device","Anti-biological Weapon","Non-lethal Stunning Trap","Mechanoid Repair Module","Mechanoid Deconstruction Device","Power Generator","Power Drain","Stellar Mineral Attractor","Agriculture Regulator","Shield Generator","Space-Time Displacer") var/list/allranges = list("Constant Short-Range Energy Field","Medium Range Energy Pulses","Long Range Energy Pulses","Extreme Range Energy Pulses","Requires contact with subject") var/obj/machinery/analyser_pad/owned_pad = null /obj/machinery/artifact_analyser/New() ..() origin_bonuses = new/list() origin_bonuses["ancient"] = 0 origin_bonuses["martian"] = 0 origin_bonuses["wizard"] = 0 origin_bonuses["eldritch"] = 0 origin_bonuses["precursor"] = 0 trigger_bonuses = new/list() trigger_bonuses["ancient"] = 0 trigger_bonuses["martian"] = 0 trigger_bonuses["wizard"] = 0 trigger_bonuses["eldritch"] = 0 trigger_bonuses["precursor"] = 0 function_bonuses = new/list() function_bonuses["ancient"] = 0 function_bonuses["martian"] = 0 function_bonuses["wizard"] = 0 function_bonuses["eldritch"] = 0 function_bonuses["precursor"] = 0 range_bonuses = new/list() range_bonuses["ancient"] = 0 range_bonuses["martian"] = 0 range_bonuses["wizard"] = 0 range_bonuses["eldritch"] = 0 range_bonuses["precursor"] = 0 // spawn(10) if(!owned_pad) for(var/obj/machinery/analyser_pad/pad in orange(1)) owned_pad = pad world << "\blue found pad" break /obj/machinery/artifact_analyser/attack_hand(var/mob/user as mob) user.machine = src var/dat = "Artifact Analyser
" dat += "

" if(!owned_pad) dat += "Unable to locate analysis pad.
" dat += "

" else if (!src.working) dat += "Artifact ID: [cur_id]
" dat += "Artifact Origin: [aorigin] ([accuO]%)
" dat += "Activation Trigger: [atrigger] ([accuT]%)
" dat += "Artifact Function: [aeffect1] ([accuE1]%)
" dat += "Artifact Range: [aeffect2] ([accuE2]%)

" dat += "

" dat += "Artifact ID is determined from unique energy emission signatures.
" dat += "Analyse Artifact
" dat += "
Print Page
" else dat += "Please wait. Analysis in progress.
" dat += "

" // dat += "
Close
" user << browse(dat, "window=artanalyser;size=450x500") onclose(user, "artanalyser") /obj/machinery/artifact_analyser/process() if(!owned_pad) for(var/obj/machinery/analyser_pad/pad in orange(1)) owned_pad = pad break /obj/machinery/artifact_analyser/Topic(href, href_list) if(href_list["analyse"]) if(owned_pad) var/turf/pad_turf = get_turf(owned_pad) var/findarti = 0 for(var/obj/machinery/artifact/A in pad_turf.contents) findarti++ cur_artifact = A if (findarti == 1) cur_artifact.anchored = 1 src.working = 1 src.icon_state = "analyser_processing" var/time = rand(30,150) + max(0, 150 - scan_num * 10) /*for(var/i = artifact_research.starting_tier, i <= artifact_research.max_tiers, i++) for(var/datum/artiresearch/R in artifact_research.researched_items[i]) if (R.bonustype == "analyser") time -= R.bonusTime*/ time *= 10 var/message = "[src] states, \"Commencing analysis.\"" src.visible_message(message, message) spawn(time) src.working = 0 icon_state = "analyser" if(cur_artifact.loc == pad_turf) AA_Analyse() scan_num++ message = "[src] states, \"Analysis complete.\"" src.visible_message(message, message) else if (findarti > 1) var/message = "[src] states, \"Cannot analyse. Too many artifacts on pad.\"" src.visible_message(message, message) else var/message = "[src] states, \"Cannot analyse. No artifact found.\"" src.visible_message(message, message) else var/message = "[src] states, \"Cannot analyse, no analysis pad connected.\"" src.visible_message(message, message) else if(href_list["print"]) var/r = "Artifact Analysis Report (Scan #[scan_num])
" r += "Artifact ID: [cur_id] (determined from unique energy emission signatures)
" r += "Artifact Origin: [aorigin] ([accuO]%)
" r += "Activation Trigger: [atrigger] ([accuT]%)
" r += "Artifact Function: [aeffect1] ([accuE1]%)
" r += "Artifact Range: [aeffect2] ([accuE2]%)

" var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) P.name = "Artifact Analysis Report #[scan_num]" 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) else if(href_list["close"]) usr << browse(null, "window=artanalyser") usr.machine = null src.updateDialog() /obj/machinery/artifact_analyser/proc/AA_FailedAnalysis(var/failtype) switch(failtype) if(1) src.aorigin = "Failed to Identify" if (prob(20)) src.aorigin = pick(src.allorigins) if(2) src.atrigger = "Failed to Identify" if (prob(20)) src.atrigger = pick(src.alltriggers) if(3) src.aeffect1 = "Failed to Identify" if (prob(20)) src.aeffect1 = pick(src.alleffects) if(4) src.aeffect2 = "Failed to Identify" if (prob(20)) src.aeffect2 = pick(src.allranges) /obj/machinery/artifact_analyser/proc/AA_Analyse() if(!cur_artifact) return src.accuO = rand(0,10) + origin_bonuses[cur_artifact.origin] src.accuT = rand(0,10) + trigger_bonuses[cur_artifact.origin] src.accuE1 = rand(0,10) + function_bonuses[cur_artifact.origin] src.accuE2 = rand(0,10) + range_bonuses[cur_artifact.origin] if (src.accuO > 100) src.accuO = 100 if (src.accuT > 100) src.accuT = 100 if (src.accuE1 > 100) src.accuE1 = 100 if (src.accuE2 > 100) src.accuE2 = 100 // Roll to generate report if (prob(accuO)) switch(cur_artifact.origin) if("ancient") src.aorigin = "Ancient Robots" if("martian") src.aorigin = "Martian" if("wizard") src.aorigin = "Wizard Federation" if("eldritch") src.aorigin = "Extradimensional" if("precursor") src.aorigin = "Precursor" else src.aorigin = "Unknown Origin" origin_bonuses[cur_artifact.origin] += 10 else AA_FailedAnalysis(1) if (prob(accuT)) switch(cur_artifact.trigger) if("touch") src.atrigger = "Contact with Living Organism" if("force") src.atrigger = "Heavy Impact" if("energy") src.atrigger = "Contact with Energy Source" if("chemical") switch(cur_artifact.triggerX) if("hydrogen") src.atrigger = "Contact with Hydrogen" if("corrosive") src.atrigger = "Contact with Corrosive Substance" if("volatile") src.atrigger = "Contact with Volatile Substance" if("toxin") src.atrigger = "Contact with Toxins" if("heat") src.atrigger = "Exposure to Heat" else src.atrigger = "Unknown Trigger" origin_bonuses[cur_artifact.origin] += 5 else AA_FailedAnalysis(2) if (prob(accuE1)) switch(cur_artifact.effecttype) if("healing") src.aeffect1 = "Healing Device" if("injure") src.aeffect1 = "Anti-biological Weapon" if("stun") src.aeffect1 = "Non-lethal Stunning Trap" if("roboheal") src.aeffect1 = "Mechanoid Repair Module" if("robohurt") src.aeffect1 = "Mechanoid Deconstruction Device" if("cellcharge") src.aeffect1 = "Power Generator" if("celldrain") src.aeffect1 = "Power Drain" if("planthelper") src.aeffect1 = "Agriculture Regulator" if("forcefield") src.aeffect1 = "Shield Generator" if("teleport") src.aeffect1 = "Space-Time Displacer" else src.aeffect1 = "Unknown Effect" origin_bonuses[cur_artifact.origin] += 5 else AA_FailedAnalysis(3) if (prob(accuE2)) switch(cur_artifact.effectmode) if("aura") src.aeffect2 = "Constant Short-Range Energy Field" if("pulse") if(cur_artifact.aurarange > 7) src.aeffect2 = "Long Range Energy Pulses" else src.aeffect2 = "Medium Range Energy Pulses" if("worldpulse") src.aeffect2 = "Extreme Range Energy Pulses" if("contact") src.aeffect2 = "Requires contact with subject" else src.aeffect2 = "Unknown Range" origin_bonuses[cur_artifact.origin] += 5 else AA_FailedAnalysis(4) cur_artifact.name = "alien artifact ([cur_artifact.display_id])" cur_artifact.desc = "A large alien device. It has a small tag near the bottom that reads \"[cur_artifact.display_id]\"." cur_id = cur_artifact.display_id