From e0924bf4ab851c8e3bd8ddea95f5f65ea4eeaa01 Mon Sep 17 00:00:00 2001 From: "Mark Aherne (Faerdan)" Date: Thu, 19 Sep 2013 01:39:59 +0100 Subject: [PATCH] Multiple minor updates to Nano. Created new DNA Modifier Nano UI. Refactored the DNA Modifier code. --- code/game/dna/dna_modifier.dm | 1374 ++++++++--------- code/game/machinery/computer/cloning.dm | 79 - code/game/machinery/cryo.dm | 36 +- code/modules/client/client procs.dm | 2 + code/modules/nano/nanoexternal.dm | 5 +- code/modules/nano/nanoui.dm | 3 +- code/modules/reagents/Chemistry-Machinery.dm | 18 +- .../reagents/reagent_containers/glass.dm | 1 + nano/css/icons.css | 351 ++--- nano/css/shared.css | 651 ++++---- nano/images/uiIcons16.png | Bin 4165 -> 3080 bytes nano/images/uiMaskBackground.png | Bin 0 -> 226 bytes nano/js/nano_base_helpers.js | 56 +- nano/templates/cryo.tmpl | 9 +- nano/templates/dna_modifier.tmpl | 310 ++++ 15 files changed, 1494 insertions(+), 1401 deletions(-) create mode 100644 nano/images/uiMaskBackground.png create mode 100644 nano/templates/dna_modifier.tmpl diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 94345c2472..1c77d90426 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -1,3 +1,5 @@ +#define DNA_BLOCK_SIZE 3 + /////////////////////////// DNA MACHINES /obj/machinery/dna_scannernew name = "\improper DNA modifier" @@ -5,12 +7,13 @@ icon = 'icons/obj/Cryogenic2.dmi' icon_state = "scanner_0" density = 1 - var/locked = 0.0 - var/mob/occupant = null anchored = 1.0 use_power = 1 idle_power_usage = 50 active_power_usage = 300 + var/locked = 0 + var/mob/living/carbon/occupant = null + var/obj/item/weapon/reagent_containers/glass/beaker = null /obj/machinery/dna_scannernew/New() ..() @@ -40,6 +43,13 @@ if (usr.stat != 0) return + + eject_occupant() + + add_fingerprint(usr) + return + +/obj/machinery/dna_scannernew/proc/eject_occupant() src.go_out() for(var/obj/O in src) if((!istype(O,/obj/item/weapon/circuitboard/clonescanner)) && (!istype(O,/obj/item/weapon/stock_parts)) && (!istype(O,/obj/item/weapon/cable_coil))) @@ -47,8 +57,6 @@ if(!occupant) for(var/mob/M in src)//Failsafe so you can get mobs out M.loc = get_turf(src) - add_fingerprint(usr) - return /obj/machinery/dna_scannernew/verb/move_inside() set src in oview(1) @@ -81,8 +89,21 @@ src.add_fingerprint(usr) return -/obj/machinery/dna_scannernew/attackby(obj/item/weapon/grab/G as obj, user as mob) - if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) +/obj/machinery/dna_scannernew/attackby(var/obj/item/weapon/item as obj, var/mob/user as mob) + if(istype(item, /obj/item/weapon/reagent_containers/glass)) + if(beaker) + user << "\red A beaker is already loaded into the machine." + return + + beaker = item + user.drop_item() + item.loc = src + user.visible_message("[user] adds \a [item] to \the [src]!", "You add \a [item] to \the [src]!") + return + else if (!istype(item, /obj/item/weapon/grab)) + return + var/obj/item/weapon/grab/G = item + if (!ismob(G.affecting)) return if (src.occupant) user << "\blue The scanner is already occupied!" @@ -170,6 +191,73 @@ A.loc = src.loc del(src) +/obj/machinery/computer/scan_consolenew + name = "DNA Modifier Access Console" + desc = "Scand DNA." + icon = 'icons/obj/computer.dmi' + icon_state = "scanner" + density = 1 + var/selected_ui_block = 1.0 + var/selected_ui_subblock = 1.0 + var/selected_se_block = 1.0 + var/selected_se_subblock = 1.0 + var/selected_ui_target = 1 + var/selected_ui_target_hex = 1 + var/radiation_duration = 2.0 + var/radiation_intensity = 1.0 + var/list/buffers = list( + list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0), + list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0), + list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0) + ) + var/irradiating = 0 + var/injector_ready = 0 //Quick fix for issue 286 (screwdriver the screen twice to restore injector) -Pete + var/obj/machinery/dna_scannernew/connected = null + var/obj/item/weapon/disk/data/disk = null + var/selected_menu_key = null + anchored = 1 + use_power = 1 + idle_power_usage = 10 + active_power_usage = 400 + +/obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + new /obj/item/weapon/shard( src.loc ) + var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 3 + A.icon_state = "3" + A.anchored = 1 + del(src) + else + user << "\blue You disconnect the monitor." + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 4 + A.icon_state = "4" + A.anchored = 1 + del(src) + if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME diskS + if (!src.disk) + user.drop_item() + I.loc = src + src.disk = I + user << "You insert [I]." + nanomanager.update_uis(src) // update all UIs attached to src() + return + else + src.attack_hand(user) + return /obj/machinery/computer/scan_consolenew/ex_act(severity) @@ -210,89 +298,10 @@ if(!isnull(connected)) break spawn(250) - src.injectorready = 1 + src.injector_ready = 1 return return -/obj/machinery/computer/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob) - if ((istype(W, /obj/item/weapon/disk/data)) && (!src.diskette)) - user.drop_item() - W.loc = src - src.diskette = W - user << "You insert [W]." - src.updateUsrDialog() -/* -/obj/machinery/computer/scan_consolenew/process() //not really used right now - if(stat & (NOPOWER|BROKEN)) - return - if (!( src.status )) //remove this - return - return -*/ -/obj/machinery/computer/scan_consolenew/attack_paw(user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/scan_consolenew/attack_ai(user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/scan_consolenew/attack_hand(user as mob) - if(..()) - return - var/dat - if (src.delete && src.temphtml) //Window in buffer but its just simple message, so nothing - src.delete = src.delete - - else if (!src.delete && src.temphtml) //Window in buffer - its a menu, dont add clear message - dat = text("[]

Main Menu", src.temphtml, src) - else - if (src.connected) //Is something connected? - var/mob/living/occupant = src.connected.occupant - dat = "Occupant Statistics:
" //Blah obvious - if(occupant && occupant.dna) //is there REALLY someone in there? - if(NOCLONE in occupant.mutations) - dat += "The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.

" //NOPE. -Pete - dat += text("View/Edit/Transfer Buffer

", src) - dat += text("Radiation Emitter Settings

", src) - else - if (!istype(occupant,/mob/living/carbon/human)) - sleep(1) - var/t1 - switch(occupant.stat) // obvious, see what their status is - if(0) - t1 = "Conscious" - if(1) - t1 = "Unconscious" - else - t1 = "*dead*" - dat += text("[]\tHealth %: [] ([])
", (occupant.health > 50 ? "" : ""), occupant.health, t1) - dat += text("Radiation Level: []%

", occupant.radiation) - dat += text("Unique Enzymes : []
", uppertext(occupant.dna.unique_enzymes)) - dat += text("Unique Identifier: []
", occupant.dna.uni_identity) - dat += text("Structural Enzymes: []

", occupant.dna.struc_enzymes) - dat += text("Modify Unique Identifier
", src) - dat += text("Modify Structural Enzymes

", src) - dat += text("View/Edit/Transfer Buffer

", src) - dat += text("Pulse Radiation
", src) - dat += text("Radiation Emitter Settings

", src) - dat += text("Inject Rejuvenators

", src) - else - dat += "The scanner is empty.

" - dat += text("View/Edit/Transfer Buffer

", src) - dat += text("Radiation Emitter Settings

", src) - if (!( src.connected.locked )) - dat += text("Lock (Unlocked)
", src) - else - dat += text("Unlock (Locked)
", src) - //Other stuff goes here - if (!isnull(src.diskette)) - dat += text("Eject Disk
", src) - dat += text("

Close", user) - else - dat = " Error: No DNA Modifier connected. " - user << browse(dat, "window=scannernew;size=550x625") - onclose(user, "scannernew") - return - /obj/machinery/computer/scan_consolenew/proc/all_dna_blocks(var/buffer) var/list/arr = list() for(var/i = 1, i <= length(buffer)/3, i++) @@ -308,695 +317,540 @@ I.dna = copytext(buffer,id*3-2,id*3+1) return 1 +/obj/machinery/computer/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob) + if ((istype(W, /obj/item/weapon/disk/data)) && (!src.disk)) + user.drop_item() + W.loc = src + src.disk = W + user << "You insert [W]." + nanomanager.update_uis(src) // update all UIs attached to src() +/* +/obj/machinery/computer/scan_consolenew/process() //not really used right now + if(stat & (NOPOWER|BROKEN)) + return + if (!( src.status )) //remove this + return + return +*/ +/obj/machinery/computer/scan_consolenew/attack_paw(user as mob) + ui_interact(user) + +/obj/machinery/computer/scan_consolenew/attack_ai(user as mob) + ui_interact(user) + +/obj/machinery/computer/scan_consolenew/attack_hand(user as mob) + if(!..()) + ui_interact(user) + + /** + * The ui_interact proc is used to open and update Nano UIs + * If ui_interact is not used then the UI will not update correctly + * ui_interact is currently defined for /atom/movable + * + * @param user /mob The mob who is interacting with this ui + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui + * + * @return nothing + */ +/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + + if(user == connected.occupant || user.stat) + return + + // this is the data which will be sent to the ui + var/data[0] + data["selectedMenuKey"] = selected_menu_key + data["locked"] = src.connected.locked + data["hasOccupant"] = connected.occupant ? 1 : 0 + + data["hasDisk"] = disk ? 1 : 0 + + var/diskData[0] + if (!disk) + diskData["data"] = null + diskData["owner"] = null + diskData["label"] = null + diskData["type"] = null + diskData["ue"] = null + else + diskData["data"] = disk.data + diskData["owner"] = disk.owner + diskData["label"] = disk.name + diskData["type"] = disk.data_type + diskData["ue"] = disk.ue + data["disk"] = diskData + + data["buffers"] = buffers + + data["radiationIntensity"] = radiation_intensity + data["radiationDuration"] = radiation_duration + data["irradiating"] = irradiating + + data["dnaBlockSize"] = DNA_BLOCK_SIZE + data["selectedUIBlock"] = selected_ui_block + data["selectedUISubBlock"] = selected_ui_subblock + data["selectedSEBlock"] = selected_se_block + data["selectedSESubBlock"] = selected_se_subblock + data["selectedUITarget"] = selected_ui_target + data["selectedUITargetHex"] = selected_ui_target_hex + + var/occupantData[0] + if (!src.connected.occupant || !src.connected.occupant.dna) + occupantData["name"] = null + occupantData["stat"] = null + occupantData["isViableSubject"] = null + occupantData["health"] = null + occupantData["maxHealth"] = null + occupantData["minHealth"] = null + occupantData["uniqueEnzymes"] = null + occupantData["uniqueIdentity"] = null + occupantData["structuralEnzymes"] = null + occupantData["radiationLevel"] = null + else + occupantData["name"] = connected.occupant.name + occupantData["stat"] = connected.occupant.stat + occupantData["isViableSubject"] = 1 + if (NOCLONE in connected.occupant.mutations || !src.connected.occupant.dna) + occupantData["isViableSubject"] = 0 + occupantData["health"] = connected.occupant.health + occupantData["maxHealth"] = connected.occupant.maxHealth + occupantData["minHealth"] = config.health_threshold_dead + occupantData["uniqueEnzymes"] = connected.occupant.dna.unique_enzymes + occupantData["uniqueIdentity"] = connected.occupant.dna.uni_identity + occupantData["structuralEnzymes"] = connected.occupant.dna.struc_enzymes + occupantData["radiationLevel"] = connected.occupant.radiation + data["occupant"] = occupantData; + + data["isBeakerLoaded"] = connected.beaker ? 1 : 0 + data["beakerLabel"] = null + data["beakerVolume"] = 0 + if(connected.beaker) + data["beakerLabel"] = connected.beaker.label_text ? connected.beaker.label_text : null + if (connected.beaker.reagents && connected.beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in connected.beaker.reagents.reagent_list) + data["beakerVolume"] += R.volume + + if (!ui) // no ui has been passed, so we'll search for one + { + ui = nanomanager.get_open_ui(user, src, ui_key) + } + if (!ui) + // the ui does not exist, so we'll create a new one + ui = new(user, src, ui_key, "dna_modifier.tmpl", "DNA Modifier Console", 660, 700) + // When the UI is first opened this is the data it will use + ui.set_initial_data(data) + ui.open() + // Auto update every Master Controller tick + ui.set_auto_update(1) + else + // The UI is already open so push the new data to it + ui.push_data(data) + return + /obj/machinery/computer/scan_consolenew/Topic(href, href_list) if(..()) - return + return 0 // don't update uis if(!istype(usr.loc, /turf)) - return + return 0 // don't update uis if(!src || !src.connected) - return - if ((usr.contents.Find(src) || in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - if (href_list["locked"]) - if ((src.connected && src.connected.occupant)) - src.connected.locked = !( src.connected.locked ) - //////////////////////////////////////////////////////// - if (href_list["genpulse"]) - if(!src.connected.occupant || !src.connected.occupant.dna)//Makes sure someone is in there (And valid) before trying anything - src.temphtml = text("No viable occupant detected.")//More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - src.delete = 1 - src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - var/lock_state = src.connected.locked - src.connected.locked = 1//lock it - sleep(10*src.radduration) - if (!src.connected.occupant) - temphtml = null - delete = 0 - return null - if (prob(95)) - if(prob(75)) - randmutb(src.connected.occupant) - else - randmuti(src.connected.occupant) - else - if(prob(95)) - randmutg(src.connected.occupant) - else - randmuti(src.connected.occupant) - src.connected.occupant.radiation += ((src.radstrength*3)+src.radduration*3) - src.connected.locked = lock_state - temphtml = null - delete = 0 - if (href_list["radset"]) - src.temphtml = text("Radiation Duration: []
", src.radduration) - src.temphtml += text("Radiation Intensity: []

", src.radstrength) - src.temphtml += text("-- Duration ++
", src, src) - src.temphtml += text("-- Intesity ++
", src, src) - src.delete = 0 - if (href_list["radleplus"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - if (src.radduration < 20) - src.radduration++ - src.radduration++ - dopage(src,"radset") - if (href_list["radleminus"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - if (src.radduration > 2) - src.radduration-- - src.radduration-- - dopage(src,"radset") - if (href_list["radinplus"]) - if (src.radstrength < 10) - src.radstrength++ - dopage(src,"radset") - if (href_list["radinminus"]) - if (src.radstrength > 1) - src.radstrength-- - dopage(src,"radset") - //////////////////////////////////////////////////////// - if (href_list["unimenu"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - //src.temphtml = text("Unique Identifier: []

", src.connected.occupant.dna.uni_identity) - //src.temphtml = text("Unique Identifier: [getleftblocks(src.connected.occupant.dna.uni_identity,uniblock,3)][src.subblock == 1 ? ""+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)+"" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)][src.subblock == 2 ? ""+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)+"" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)][src.subblock == 3 ? ""+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)+"" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)][getrightblocks(src.connected.occupant.dna.uni_identity,uniblock,3)]

") + return 0 // don't update uis + if(irradiating) // Make sure that it isn't already irradiating someone... + return 0 // don't update uis - // New way of displaying DNA blocks - src.temphtml = text("Unique Identifier: [getblockstring(src.connected.occupant.dna.uni_identity,uniblock,subblock,3, src,1)]

") + add_fingerprint(usr) - src.temphtml += text("Selected Block: []
", src.uniblock) - src.temphtml += text("<- Block ->

", src, src) - src.temphtml += text("Selected Sub-Block: []
", src.subblock) - src.temphtml += text("<- Sub-Block ->

", src, src) - src.temphtml += text("Selected Target: []
", src.unitargethex) - src.temphtml += text("<- Target ->

", src, src) - src.temphtml += "Modify Block:
" - src.temphtml += text("Irradiate
", src) - src.delete = 0 - if (href_list["unimenuplus"]) - if (src.uniblock < 13) - src.uniblock++ + if (href_list["selectMenuKey"]) + selected_menu_key = href_list["selectMenuKey"] + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["toggleLock"]) + if ((src.connected && src.connected.occupant)) + src.connected.locked = !( src.connected.locked ) + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["pulseRadiation"]) + irradiating = src.radiation_duration + var/lock_state = src.connected.locked + src.connected.locked = 1//lock it + nanomanager.update_uis(src) // update all UIs attached to src + + sleep(10*src.radiation_duration) // sleep for radiation_duration seconds + + irradiating = 0 + + if (!src.connected.occupant) + return 1 // return 1 forces an update to all Nano uis attached to src + + if (prob(95)) + if(prob(75)) + randmutb(src.connected.occupant) else - src.uniblock = 1 - dopage(src,"unimenu") - if (href_list["unimenuminus"]) - if (src.uniblock > 1) - src.uniblock-- + randmuti(src.connected.occupant) + else + if(prob(95)) + randmutg(src.connected.occupant) else - src.uniblock = 13 - dopage(src,"unimenu") - if (href_list["unimenusubplus"]) - if (src.subblock < 3) - src.subblock++ + randmuti(src.connected.occupant) + + src.connected.occupant.radiation += ((src.radiation_intensity*3)+src.radiation_duration*3) + src.connected.locked = lock_state + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["radiationDuration"]) + if (text2num(href_list["radiationDuration"]) > 0) + if (src.radiation_duration < 20) + src.radiation_duration += 2 + else + if (src.radiation_duration > 2) + src.radiation_duration -= 2 + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["radiationIntensity"]) + if (text2num(href_list["radiationIntensity"]) > 0) + if (src.radiation_intensity < 10) + src.radiation_intensity++ + else + if (src.radiation_intensity > 1) + src.radiation_intensity-- + return 1 // return 1 forces an update to all Nano uis attached to src + + //////////////////////////////////////////////////////// + + if (href_list["changeUITarget"] && text2num(href_list["changeUITarget"]) > 0) + if (src.selected_ui_target < 15) + src.selected_ui_target++ + src.selected_ui_target_hex = src.selected_ui_target + switch(selected_ui_target) + if(10) + src.selected_ui_target_hex = "A" + if(11) + src.selected_ui_target_hex = "B" + if(12) + src.selected_ui_target_hex = "C" + if(13) + src.selected_ui_target_hex = "D" + if(14) + src.selected_ui_target_hex = "E" + if(15) + src.selected_ui_target_hex = "F" + else + src.selected_ui_target = 0 + src.selected_ui_target_hex = 0 + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["changeUITarget"] && text2num(href_list["changeUITarget"]) < 1) + if (src.selected_ui_target > 0) + src.selected_ui_target-- + src.selected_ui_target_hex = src.selected_ui_target + switch(selected_ui_target) + if(10) + src.selected_ui_target_hex = "A" + if(11) + src.selected_ui_target_hex = "B" + if(12) + src.selected_ui_target_hex = "C" + if(13) + src.selected_ui_target_hex = "D" + if(14) + src.selected_ui_target_hex = "E" + else + src.selected_ui_target = 15 + src.selected_ui_target_hex = "F" + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["selectUIBlock"] && href_list["selectUISubblock"]) // This chunk of code updates selected block / sub-block based on click + var/select_block = text2num(href_list["selectUIBlock"]) + var/select_subblock = text2num(href_list["selectUISubblock"]) + if ((select_block <= 13) && (select_block >= 1)) + src.selected_ui_block = select_block + if ((select_subblock <= DNA_BLOCK_SIZE) && (select_subblock >= 1)) + src.selected_ui_subblock = select_subblock + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["pulseUIRadiation"]) + var/block + var/newblock + var/tstructure2 + block = getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),src.selected_ui_subblock,1) + + irradiating = src.radiation_duration + var/lock_state = src.connected.locked + src.connected.locked = 1//lock it + nanomanager.update_uis(src) // update all UIs attached to src + + sleep(10*src.radiation_duration) // sleep for radiation_duration seconds + + irradiating = 0 + + if (!src.connected.occupant) + return 1 + + if (prob((80 + (src.radiation_duration / 2)))) + block = miniscrambletarget(num2text(selected_ui_target), src.radiation_intensity, src.radiation_duration) + newblock = null + if (src.selected_ui_subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),2,1) + getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),3,1) + if (src.selected_ui_subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),1,1) + block + getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),3,1) + if (src.selected_ui_subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),1,1) + getblock(getblock(src.connected.occupant.dna.uni_identity,src.selected_ui_block,DNA_BLOCK_SIZE),2,1) + block + tstructure2 = setblock(src.connected.occupant.dna.uni_identity, src.selected_ui_block, newblock,DNA_BLOCK_SIZE) + src.connected.occupant.dna.uni_identity = tstructure2 + updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) + src.connected.occupant.radiation += (src.radiation_intensity+src.radiation_duration) + else + if (prob(20+src.radiation_intensity)) + randmutb(src.connected.occupant) + domutcheck(src.connected.occupant,src.connected) else - src.subblock = 1 - dopage(src,"unimenu") - if (href_list["unimenusubminus"]) - if (src.subblock > 1) - src.subblock-- - else - src.subblock = 3 - dopage(src,"unimenu") - if (href_list["unimenutargetplus"]) - if (src.unitarget < 15) - src.unitarget++ - src.unitargethex = src.unitarget - switch(unitarget) - if(10) - src.unitargethex = "A" - if(11) - src.unitargethex = "B" - if(12) - src.unitargethex = "C" - if(13) - src.unitargethex = "D" - if(14) - src.unitargethex = "E" - if(15) - src.unitargethex = "F" - else - src.unitarget = 0 - src.unitargethex = 0 - dopage(src,"unimenu") - if (href_list["unimenutargetminus"]) - if (src.unitarget > 0) - src.unitarget-- - src.unitargethex = src.unitarget - switch(unitarget) - if(10) - src.unitargethex = "A" - if(11) - src.unitargethex = "B" - if(12) - src.unitargethex = "C" - if(13) - src.unitargethex = "D" - if(14) - src.unitargethex = "E" - else - src.unitarget = 15 - src.unitargethex = "F" - dopage(src,"unimenu") - if (href_list["uimenuset"] && href_list["uimenusubset"]) // This chunk of code updates selected block / sub-block based on click - var/menuset = text2num(href_list["uimenuset"]) - var/menusubset = text2num(href_list["uimenusubset"]) - if ((menuset <= 13) && (menuset >= 1)) - src.uniblock = menuset - if ((menusubset <= 3) && (menusubset >= 1)) - src.subblock = menusubset - dopage(src, "unimenu") - if (href_list["unipulse"]) - if(src.connected.occupant) - var/block - var/newblock - var/tstructure2 - block = getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),src.subblock,1) - src.delete = 1 - src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - var/lock_state = src.connected.locked - src.connected.locked = 1//lock it - sleep(10*src.radduration) - if (!src.connected.occupant) - temphtml = null - delete = 0 - return null - /// - if (prob((80 + (src.radduration / 2)))) - block = miniscrambletarget(num2text(unitarget), src.radstrength, src.radduration) + randmuti(src.connected.occupant) + updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) + src.connected.occupant.radiation += ((src.radiation_intensity*2)+src.radiation_duration) + src.connected.locked = lock_state + return 1 // return 1 forces an update to all Nano uis attached to src + + //////////////////////////////////////////////////////// + + if (href_list["injectRejuvenators"]) + if (!connected.occupant) + return 0 + var/inject_amount = round(text2num(href_list["injectRejuvenators"]), 5) // round to nearest 5 + if (inject_amount < 0) // Since the user can actually type the commands himself, some sanity checking + inject_amount = 0 + if (inject_amount > 50) + inject_amount = 50 + connected.beaker.reagents.trans_to(connected.occupant, inject_amount) + connected.beaker.reagents.reaction(connected.occupant) + return 1 // return 1 forces an update to all Nano uis attached to src + + //////////////////////////////////////////////////////// + + if (href_list["selectSEBlock"] && href_list["selectSESubblock"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes) + var/select_block = text2num(href_list["selectSEBlock"]) + var/select_subblock = text2num(href_list["selectSESubblock"]) + if ((select_block <= STRUCDNASIZE) && (select_block >= 1)) + src.selected_se_block = select_block + if ((select_subblock <= DNA_BLOCK_SIZE) && (select_subblock >= 1)) + src.selected_se_subblock = select_subblock + return 1 // return 1 forces an update to all Nano uis attached to src + + if (href_list["pulseSERadiation"]) + var/block + var/newblock + var/tstructure2 + var/oldblock + + block = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),src.selected_se_subblock,1) + + irradiating = src.radiation_duration + var/lock_state = src.connected.locked + src.connected.locked = 1 //lock it + nanomanager.update_uis(src) // update all UIs attached to src + + sleep(10*src.radiation_duration) // sleep for radiation_duration seconds + + irradiating = 0 + + if(src.connected.occupant) + if (prob((80 + (src.radiation_duration / 2)))) + if ((src.selected_se_block != 2 || src.selected_se_block != 12 || src.selected_se_block != 8 || src.selected_se_block || 10) && prob (20)) + oldblock = src.selected_se_block + block = miniscramble(block, src.radiation_intensity, src.radiation_duration) newblock = null - if (src.subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1) + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1) - if (src.subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1) + block + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1) - if (src.subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1) + getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1) + block - tstructure2 = setblock(src.connected.occupant.dna.uni_identity, src.uniblock, newblock,3) - src.connected.occupant.dna.uni_identity = tstructure2 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - src.connected.occupant.radiation += (src.radstrength+src.radduration) + if (src.selected_se_block > 1 && src.selected_se_block < STRUCDNASIZE/2) + src.selected_se_block++ + else if (src.selected_se_block > STRUCDNASIZE/2 && src.selected_se_block < STRUCDNASIZE) + src.selected_se_block-- + if (src.selected_se_subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),2,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),3,1) + if (src.selected_se_subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),1,1) + block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),3,1) + if (src.selected_se_subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),1,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),2,1) + block + tstructure2 = setblock(src.connected.occupant.dna.struc_enzymes, src.selected_se_block, newblock,DNA_BLOCK_SIZE) + src.connected.occupant.dna.struc_enzymes = tstructure2 + domutcheck(src.connected.occupant,src.connected) + src.connected.occupant.radiation += (src.radiation_intensity+src.radiation_duration) + src.selected_se_block = oldblock else - if (prob(20+src.radstrength)) - randmutb(src.connected.occupant) - domutcheck(src.connected.occupant,src.connected) - else - randmuti(src.connected.occupant) - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - src.connected.occupant.radiation += ((src.radstrength*2)+src.radduration) - src.connected.locked = lock_state - dopage(src,"unimenu") - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["rejuv"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") + // + block = miniscramble(block, src.radiation_intensity, src.radiation_duration) + newblock = null + if (src.selected_se_subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),2,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),3,1) + if (src.selected_se_subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),1,1) + block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),3,1) + if (src.selected_se_subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),1,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.selected_se_block,DNA_BLOCK_SIZE),2,1) + block + tstructure2 = setblock(src.connected.occupant.dna.struc_enzymes, src.selected_se_block, newblock,DNA_BLOCK_SIZE) + src.connected.occupant.dna.struc_enzymes = tstructure2 + domutcheck(src.connected.occupant,src.connected) + src.connected.occupant.radiation += (src.radiation_intensity+src.radiation_duration) else - var/mob/living/carbon/human/H = src.connected.occupant - if(H) - if (H.reagents.get_reagent_amount("inaprovaline") < 60) - H.reagents.add_reagent("inaprovaline", 30) - usr << text("Occupant now has [] units of rejuvenation in his/her bloodstream.", H.reagents.get_reagent_amount("inaprovaline")) - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["strucmenu"]) - if(!src.connected.occupant || !src.connected.occupant.dna) - src.temphtml = text("No viable occupant detected.") - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - else - // Get this shit outta here it sucks - //src.temphtml = text("Structural Enzymes: [getleftblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)][src.subblock == 1 ? ""+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)+"" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1)][src.subblock == 2 ? ""+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)+"" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1)][src.subblock == 3 ? ""+getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)+"" : getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1)][getrightblocks(src.connected.occupant.dna.struc_enzymes,strucblock,3)]

") - //src.temphtml = text("Structural Enzymes: []

", src.connected.occupant.dna.struc_enzymes) + if (prob(80-src.radiation_duration)) + randmutb(src.connected.occupant) + domutcheck(src.connected.occupant,src.connected) + else + randmuti(src.connected.occupant) + updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) + src.connected.occupant.radiation += ((src.radiation_intensity*2)+src.radiation_duration) + src.connected.locked = lock_state + return 1 // return 1 forces an update to all Nano uis attached to src - // New shit, it doesn't suck (as much) - src.temphtml = text("Structural Enzymes: [getblockstring(src.connected.occupant.dna.struc_enzymes,strucblock,subblock,3,src,0)]

") - // SE of occupant, selected block, selected subblock, block size (3 subblocks) + if(href_list["ejectBeaker"]) + if(connected.beaker) + connected.beaker.loc = connected.loc + connected.beaker = null + return 1 - src.temphtml += text("Selected Block: []
", src.strucblock) - src.temphtml += text("<- Block ->

", src, src) - src.temphtml += text("Selected Sub-Block: []
", src.subblock) - src.temphtml += text("<- Sub-Block ->

", src, src) - src.temphtml += "Modify Block:
" - src.temphtml += text("Irradiate
", src) - src.delete = 0 - if (href_list["strucmenuplus"]) - if (src.strucblock < STRUCDNASIZE) - src.strucblock++ - else - src.strucblock = 1 - dopage(src,"strucmenu") - if (href_list["strucmenuminus"]) - if (src.strucblock > 1) - src.strucblock-- - else - src.strucblock = STRUCDNASIZE - dopage(src,"strucmenu") - if (href_list["strucmenusubplus"]) - if (src.subblock < 3) - src.subblock++ - else - src.subblock = 1 - dopage(src,"strucmenu") - if (href_list["strucmenusubminus"]) - if (src.subblock > 1) - src.subblock-- - else - src.subblock = 3 - dopage(src,"strucmenu") - if (href_list["semenuset"] && href_list["semenusubset"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes) - var/menuset = text2num(href_list["semenuset"]) - var/menusubset = text2num(href_list["semenusubset"]) - if ((menuset <= STRUCDNASIZE) && (menuset >= 1)) - src.strucblock = menuset - if ((menusubset <= 3) && (menusubset >= 1)) - src.subblock = menusubset - dopage(src, "strucmenu") - if (href_list["strucpulse"]) - var/block - var/newblock - var/tstructure2 - var/oldblock + if(href_list["ejectOccupant"]) + connected.eject_occupant() + return 1 + + // Transfer Buffer Management + if(href_list["bufferOption"] && href_list["bufferId"]) + var/bufferOption = href_list["bufferOption"] + + // These bufferOptions do not require a bufferId + if (bufferOption == "wipeDisk") + if ((isnull(src.disk)) || (src.disk.read_only)) + //src.temphtml = "Invalid disk. Please try again." + return 0 + + src.disk.data = null + src.disk.data_type = null + src.disk.ue = null + src.disk.owner = null + src.disk.name = null + //src.temphtml = "Data saved." + return 1 + + if (bufferOption == "ejectDisk") + if (!src.disk) + return + src.disk.loc = get_turf(src) + src.disk = null + return 1 + + // All bufferOptions from here on require a bufferId + var/bufferId = text2num(href_list["bufferId"]) + + if (bufferId < 1 || bufferId > 3) + return 0 // Not a valid buffer id + + if (bufferOption == "saveUI") + if(src.connected.occupant && src.connected.occupant.dna) + src.buffers[bufferId]["ue"] = 0 + src.buffers[bufferId]["data"] = src.connected.occupant.dna.uni_identity + if (!istype(src.connected.occupant,/mob/living/carbon/human)) + src.buffers[bufferId]["owner"] = src.connected.occupant.name + else + src.buffers[bufferId]["owner"] = src.connected.occupant.real_name + src.buffers[bufferId]["label"] = "Unique Identifier" + src.buffers[bufferId]["type"] = "ui" + return 1 + + if (bufferOption == "saveUIAndUE") + if(src.connected.occupant && src.connected.occupant.dna) + src.buffers[bufferId]["data"] = src.connected.occupant.dna.uni_identity + if (!istype(src.connected.occupant,/mob/living/carbon/human)) + src.buffers[bufferId]["owner"] = src.connected.occupant.name + else + src.buffers[bufferId]["owner"] = src.connected.occupant.real_name + src.buffers[bufferId]["label"] = "Unique Identifier + Unique Enzymes" + src.buffers[bufferId]["type"] = "ui" + src.buffers[bufferId]["ue"] = 1 + return 1 + + if (bufferOption == "saveSE") + if(src.connected.occupant && src.connected.occupant.dna) + src.buffers[bufferId]["ue"] = 0 + src.buffers[bufferId]["data"] = src.connected.occupant.dna.struc_enzymes + if (!istype(src.connected.occupant,/mob/living/carbon/human)) + src.buffers[bufferId]["owner"] = src.connected.occupant.name + else + src.buffers[bufferId]["owner"] = src.connected.occupant.real_name + src.buffers[bufferId]["label"] = "Structural Enzymes" + src.buffers[bufferId]["type"] = "se" + return 1 + + if (bufferOption == "clear") + src.buffers[bufferId]["data"] = null + src.buffers[bufferId]["owner"] = null + src.buffers[bufferId]["label"] = null + src.buffers[bufferId]["ue"] = null + return 1 + + if (bufferOption == "label" && href_list["newLabel"]) + src.buffers[bufferId]["label"] = sanitize(href_list["newLabel"]) + return 1 + + if (bufferOption == "transfer") + if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) + return + + irradiating = 2 var/lock_state = src.connected.locked src.connected.locked = 1//lock it - if (src.connected.occupant) - block = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),src.subblock,1) - src.delete = 1 - src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration) - usr << browse(temphtml, "window=scannernew;size=550x650") - onclose(usr, "scannernew") - sleep(10*src.radduration) - else - temphtml = null - delete = 0 - return null - /// - if(src.connected.occupant) - if (prob((80 + (src.radduration / 2)))) - if ((src.strucblock != 2 || src.strucblock != 12 || src.strucblock != 8 || src.strucblock || 10) && prob (20)) - oldblock = src.strucblock - block = miniscramble(block, src.radstrength, src.radduration) - newblock = null - if (src.strucblock > 1 && src.strucblock < STRUCDNASIZE/2) - src.strucblock++ - else if (src.strucblock > STRUCDNASIZE/2 && src.strucblock < STRUCDNASIZE) - src.strucblock-- - if (src.subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + block - tstructure2 = setblock(src.connected.occupant.dna.struc_enzymes, src.strucblock, newblock,3) - src.connected.occupant.dna.struc_enzymes = tstructure2 - domutcheck(src.connected.occupant,src.connected) - src.connected.occupant.radiation += (src.radstrength+src.radduration) - src.strucblock = oldblock - else - // - block = miniscramble(block, src.radstrength, src.radduration) - newblock = null - if (src.subblock == 1) newblock = block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 2) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + block + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),3,1) - if (src.subblock == 3) newblock = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),1,1) + getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),2,1) + block - tstructure2 = setblock(src.connected.occupant.dna.struc_enzymes, src.strucblock, newblock,3) - src.connected.occupant.dna.struc_enzymes = tstructure2 - domutcheck(src.connected.occupant,src.connected) - src.connected.occupant.radiation += (src.radstrength+src.radduration) - else - if (prob(80-src.radduration)) - randmutb(src.connected.occupant) - domutcheck(src.connected.occupant,src.connected) - else - randmuti(src.connected.occupant) - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - src.connected.occupant.radiation += ((src.radstrength*2)+src.radduration) - src.connected.locked = lock_state - /// - dopage(src,"strucmenu") - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["buffermenu"]) - src.temphtml = "Buffer 1:
" - if (!(src.buffer1)) - src.temphtml += "Buffer Empty
" - else - src.temphtml += text("Data: []
", src.buffer1) - src.temphtml += text("By: []
", src.buffer1owner) - src.temphtml += text("Label: []
", src.buffer1label) - if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src) - if (src.buffer1) src.temphtml += text("Transfer to: Occupant - Full Injector - Iso Injector
", src, src, src) - //if (src.buffer1) src.temphtml += text("Isolate Block
", src) - if (src.buffer1) src.temphtml += "Disk: Save To | Load From
" - if (src.buffer1) src.temphtml += text("Edit Label
", src) - if (src.buffer1) src.temphtml += text("Clear Buffer

", src) - if (!src.buffer1) src.temphtml += "
" - src.temphtml += "Buffer 2:
" - if (!(src.buffer2)) - src.temphtml += "Buffer Empty
" - else - src.temphtml += text("Data: []
", src.buffer2) - src.temphtml += text("By: []
", src.buffer2owner) - src.temphtml += text("Label: []
", src.buffer2label) - if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src) - if (src.buffer2) src.temphtml += text("Transfer to: Occupant - Full Injector - Iso Injector
", src, src, src) - //if (src.buffer2) src.temphtml += text("Isolate Block
", src) - if (src.buffer2) src.temphtml += "Disk: Save To | Load From
" - if (src.buffer2) src.temphtml += text("Edit Label
", src) - if (src.buffer2) src.temphtml += text("Clear Buffer

", src) - if (!src.buffer2) src.temphtml += "
" - src.temphtml += "Buffer 3:
" - if (!(src.buffer3)) - src.temphtml += "Buffer Empty
" - else - src.temphtml += text("Data: []
", src.buffer3) - src.temphtml += text("By: []
", src.buffer3owner) - src.temphtml += text("Label: []
", src.buffer3label) - if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src) - if (src.buffer3) src.temphtml += text("Transfer to: Occupant - Full Injector - Iso Injector
", src, src, src) - //if (src.buffer3) src.temphtml += text("Isolate Block
", src) - if (src.buffer3) src.temphtml += "Disk: Save To | Load From
" - if (src.buffer3) src.temphtml += text("Edit Label
", src) - if (src.buffer3) src.temphtml += text("Clear Buffer

", src) - if (!src.buffer3) src.temphtml += "
" - if (href_list["b1addui"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer1iue = 0 - src.buffer1 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer1owner = src.connected.occupant.name - else - src.buffer1owner = src.connected.occupant.real_name - src.buffer1label = "Unique Identifier" - src.buffer1type = "ui" - dopage(src,"buffermenu") - if (href_list["b1adduiue"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer1 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer1owner = src.connected.occupant.name - else - src.buffer1owner = src.connected.occupant.real_name - src.buffer1label = "Unique Identifier & Unique Enzymes" - src.buffer1type = "ui" - src.buffer1iue = 1 - dopage(src,"buffermenu") - if (href_list["b2adduiue"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer2 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer2owner = src.connected.occupant.name - else - src.buffer2owner = src.connected.occupant.real_name - src.buffer2label = "Unique Identifier & Unique Enzymes" - src.buffer2type = "ui" - src.buffer2iue = 1 - dopage(src,"buffermenu") - if (href_list["b3adduiue"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer3 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer3owner = src.connected.occupant.name - else - src.buffer3owner = src.connected.occupant.real_name - src.buffer3label = "Unique Identifier & Unique Enzymes" - src.buffer3type = "ui" - src.buffer3iue = 1 - dopage(src,"buffermenu") - if (href_list["b2addui"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer2iue = 0 - src.buffer2 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer2owner = src.connected.occupant.name - else - src.buffer2owner = src.connected.occupant.real_name - src.buffer2label = "Unique Identifier" - src.buffer2type = "ui" - dopage(src,"buffermenu") - if (href_list["b3addui"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer3iue = 0 - src.buffer3 = src.connected.occupant.dna.uni_identity - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer3owner = src.connected.occupant.name - else - src.buffer3owner = src.connected.occupant.real_name - src.buffer3label = "Unique Identifier" - src.buffer3type = "ui" - dopage(src,"buffermenu") - if (href_list["b1addse"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer1iue = 0 - src.buffer1 = src.connected.occupant.dna.struc_enzymes - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer1owner = src.connected.occupant.name - else - src.buffer1owner = src.connected.occupant.real_name - src.buffer1label = "Structural Enzymes" - src.buffer1type = "se" - dopage(src,"buffermenu") - if (href_list["b2addse"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer2iue = 0 - src.buffer2 = src.connected.occupant.dna.struc_enzymes - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer2owner = src.connected.occupant.name - else - src.buffer2owner = src.connected.occupant.real_name - src.buffer2label = "Structural Enzymes" - src.buffer2type = "se" - dopage(src,"buffermenu") - if (href_list["b3addse"]) - if(src.connected.occupant && src.connected.occupant.dna) - src.buffer3iue = 0 - src.buffer3 = src.connected.occupant.dna.struc_enzymes - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffer3owner = src.connected.occupant.name - else - src.buffer3owner = src.connected.occupant.real_name - src.buffer3label = "Structural Enzymes" - src.buffer3type = "se" - dopage(src,"buffermenu") - if (href_list["b1clear"]) - src.buffer1 = null - src.buffer1owner = null - src.buffer1label = null - src.buffer1iue = null - dopage(src,"buffermenu") - if (href_list["b2clear"]) - src.buffer2 = null - src.buffer2owner = null - src.buffer2label = null - src.buffer2iue = null - dopage(src,"buffermenu") - if (href_list["b3clear"]) - src.buffer3 = null - src.buffer3owner = null - src.buffer3label = null - src.buffer3iue = null - dopage(src,"buffermenu") - if (href_list["b1label"]) - src.buffer1label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"buffermenu") - if (href_list["b2label"]) - src.buffer2label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"buffermenu") - if (href_list["b3label"]) - src.buffer3label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"buffermenu") - if (href_list["b1transfer"]) - if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) - return - if (src.buffer1type == "ui") - if (src.buffer1iue) - src.connected.occupant.real_name = src.buffer1owner - src.connected.occupant.name = src.buffer1owner - src.connected.occupant.dna.uni_identity = src.buffer1 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - else if (src.buffer1type == "se") - src.connected.occupant.dna.struc_enzymes = src.buffer1 - domutcheck(src.connected.occupant,src.connected) - src.temphtml = "Transfered." - src.connected.occupant.radiation += rand(20,50) - src.delete = 0 - if (href_list["b2transfer"]) - if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) - return - if (src.buffer2type == "ui") - if (src.buffer2iue) - src.connected.occupant.real_name = src.buffer2owner - src.connected.occupant.name = src.buffer2owner - src.connected.occupant.dna.uni_identity = src.buffer2 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - else if (src.buffer2type == "se") - src.connected.occupant.dna.struc_enzymes = src.buffer2 - domutcheck(src.connected.occupant,src.connected) - src.temphtml = "Transfered." - src.connected.occupant.radiation += rand(20,50) - src.delete = 0 - if (href_list["b3transfer"]) - if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) - return - if (src.buffer3type == "ui") - if (src.buffer3iue) - src.connected.occupant.real_name = src.buffer3owner - src.connected.occupant.name = src.buffer3owner - src.connected.occupant.dna.uni_identity = src.buffer3 - updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) - else if (src.buffer3type == "se") - src.connected.occupant.dna.struc_enzymes = src.buffer3 - domutcheck(src.connected.occupant,src.connected) - src.temphtml = "Transfered." - src.connected.occupant.radiation += rand(20,50) - src.delete = 0 - if (href_list["b1injector"]) - if (src.injectorready) - var/success = 1 - var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffer1type - if(href_list["b1injector"]=="2") - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffer1) - success = setInjectorBlock(I,blk,src.buffer1) - else - I.dna = src.buffer1 - if(success) - I.loc = src.loc - I.name += " ([src.buffer1label])" - if (src.buffer1iue) I.ue = src.buffer1owner //lazy haw haw - src.temphtml = "Injector created." - src.delete = 0 - src.injectorready = 0 - spawn(300) - src.injectorready = 1 - else - src.temphtml = "Error in injector creation." - src.delete = 0 - else - src.temphtml = "Replicator not ready yet." - src.delete = 0 - if (href_list["b2injector"]) - if (src.injectorready) - var/success = 1 - var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffer2type - if(href_list["b2injector"]=="2") - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffer2) - success = setInjectorBlock(I,blk,src.buffer2) - else - I.dna = src.buffer2 - if(success) - I.loc = src.loc - I.name += " ([src.buffer2label])" - if (src.buffer2iue) I.ue = src.buffer2owner //lazy haw haw - src.temphtml = "Injector created." - src.delete = 0 - src.injectorready = 0 - spawn(300) - src.injectorready = 1 - else - src.temphtml = "Error in injector creation." - src.delete = 0 - else - src.temphtml = "Replicator not ready yet." - src.delete = 0 - if (href_list["b3injector"]) - if (src.injectorready) - var/success = 1 - var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffer3type - if(href_list["b3injector"]=="2") - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffer3) - success = setInjectorBlock(I,blk,src.buffer3) - else - I.dna = src.buffer3 - if(success) - I.loc = src.loc - I.name += " ([src.buffer3label])" - if (src.buffer3iue) I.ue = src.buffer3owner //lazy haw haw - src.temphtml = "Injector created." - src.delete = 0 - src.injectorready = 0 - spawn(300) - src.injectorready = 1 - else - src.temphtml = "Error in injector creation." - src.delete = 0 - else - src.temphtml = "Replicator not ready yet." - src.delete = 0 - //////////////////////////////////////////////////////// - if (href_list["load_disk"]) - var/buffernum = text2num(href_list["load_disk"]) - if ((buffernum > 3) || (buffernum < 1)) - return - if ((isnull(src.diskette)) || (!src.diskette.data) || (src.diskette.data == "")) - return - switch(buffernum) - if(1) - src.buffer1 = src.diskette.data - src.buffer1type = src.diskette.data_type - src.buffer1iue = src.diskette.ue - src.buffer1owner = src.diskette.owner - if(2) - src.buffer2 = src.diskette.data - src.buffer2type = src.diskette.data_type - src.buffer2iue = src.diskette.ue - src.buffer2owner = src.diskette.owner - if(3) - src.buffer3 = src.diskette.data - src.buffer3type = src.diskette.data_type - src.buffer3iue = src.diskette.ue - src.buffer3owner = src.diskette.owner - src.temphtml = "Data loaded." + nanomanager.update_uis(src) // update all UIs attached to src + + sleep(10*2) // sleep for 2 seconds + + irradiating = 0 + src.connected.locked = lock_state + + if (src.buffers[bufferId]["type"] == "ui") + if (src.buffers[bufferId]["ue"]) + src.connected.occupant.real_name = src.buffers[bufferId]["owner"] + src.connected.occupant.name = src.buffers[bufferId]["owner"] + src.connected.occupant.dna.uni_identity = src.buffers[bufferId]["data"] + updateappearance(src.connected.occupant,src.connected.occupant.dna.uni_identity) + else if (src.buffers[bufferId]["type"] == "se") + src.connected.occupant.dna.struc_enzymes = src.buffers[bufferId]["data"] + domutcheck(src.connected.occupant,src.connected) + src.connected.occupant.radiation += rand(20,50) + return 1 + + if (bufferOption == "createInjector") + if (src.injector_ready) + var/success = 1 + var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector + I.dnatype = src.buffers[bufferId]["type"] + if(href_list["createInjectorOption"] == "2") + var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffers[bufferId]["data"]) + success = setInjectorBlock(I,blk,src.buffers[bufferId]["data"]) + else + I.dna = src.buffers[bufferId]["data"] + if(success) + I.loc = src.loc + I.name += " ([src.buffers[bufferId]["label"]])" + if (src.buffers[bufferId]["ue"]) I.ue = src.buffers[bufferId]["owner"] //lazy haw haw + //src.temphtml = "Injector created." + src.injector_ready = 0 + spawn(300) + src.injector_ready = 1 + //else + //src.temphtml = "Error in injector creation." + //else + //src.temphtml = "Replicator not ready yet." + return 1 + + if (bufferOption == "loadDisk") + if ((isnull(src.disk)) || (!src.disk.data) || (src.disk.data == "")) + //src.temphtml = "Invalid disk. Please try again." + return 0 + + src.buffers[bufferId]["data"] = src.disk.data + src.buffers[bufferId]["type"] = src.disk.data_type + src.buffers[bufferId]["ue"] = src.disk.ue + src.buffers[bufferId]["owner"] = src.disk.owner + //src.temphtml = "Data loaded." + return 1 + + if (bufferOption == "saveDisk") + if ((isnull(src.disk)) || (src.disk.read_only)) + //src.temphtml = "Invalid disk. Please try again." + return 0 + + src.disk.data = buffers[bufferId]["data"] + src.disk.data_type = src.buffers[bufferId]["type"] + src.disk.ue = src.buffers[bufferId]["ue"] + src.disk.owner = src.buffers[bufferId]["owner"] + src.disk.name = "data disk - '[src.buffers[bufferId]["owner"]]'" + //src.temphtml = "Data saved." + return 1 + - if (href_list["save_disk"]) - var/buffernum = text2num(href_list["save_disk"]) - if ((buffernum > 3) || (buffernum < 1)) - return - if ((isnull(src.diskette)) || (src.diskette.read_only)) - return - switch(buffernum) - if(1) - src.diskette.data = buffer1 - src.diskette.data_type = src.buffer1type - src.diskette.ue = src.buffer1iue - src.diskette.owner = src.buffer1owner - src.diskette.name = "data disk - '[src.buffer1owner]'" - if(2) - src.diskette.data = buffer2 - src.diskette.data_type = src.buffer2type - src.diskette.ue = src.buffer2iue - src.diskette.owner = src.buffer2owner - src.diskette.name = "data disk - '[src.buffer2owner]'" - if(3) - src.diskette.data = buffer3 - src.diskette.data_type = src.buffer3type - src.diskette.ue = src.buffer3iue - src.diskette.owner = src.buffer3owner - src.diskette.name = "data disk - '[src.buffer3owner]'" - src.temphtml = "Data saved." - if (href_list["eject_disk"]) - if (!src.diskette) - return - src.diskette.loc = get_turf(src) - src.diskette = null - //////////////////////////////////////////////////////// - if (href_list["clear"]) - src.temphtml = null - src.delete = 0 - if (href_list["update"]) //ignore - src.temphtml = src.temphtml - src.add_fingerprint(usr) - src.updateUsrDialog() - return /////////////////////////// DNA MACHINES diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 9c493e715d..3adeccdf91 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -1,82 +1,3 @@ -/obj/machinery/computer/scan_consolenew - name = "DNA Modifier Access Console" - desc = "Scand DNA." - icon = 'icons/obj/computer.dmi' - icon_state = "scanner" - density = 1 - var/uniblock = 1.0 - var/strucblock = 1.0 - var/subblock = 1.0 - var/unitarget = 1 - var/unitargethex = 1 - var/status = null - var/radduration = 2.0 - var/radstrength = 1.0 - var/radacc = 1.0 - var/buffer1 = null - var/buffer2 = null - var/buffer3 = null - var/buffer1owner = null - var/buffer2owner = null - var/buffer3owner = null - var/buffer1label = null - var/buffer2label = null - var/buffer3label = null - var/buffer1type = null - var/buffer2type = null - var/buffer3type = null - var/buffer1iue = 0 - var/buffer2iue = 0 - var/buffer3iue = 0 - var/delete = 0 - var/injectorready = 0 //Quick fix for issue 286 (screwdriver the screen twice to restore injector) -Pete - var/temphtml = null - var/obj/machinery/dna_scannernew/connected = null - var/obj/item/weapon/disk/data/diskette = null - anchored = 1.0 - use_power = 1 - idle_power_usage = 10 - active_power_usage = 400 - -/obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES - if (!src.diskette) - user.drop_item() - I.loc = src - src.diskette = I - user << "You insert [I]." - src.updateUsrDialog() - return - else - src.attack_hand(user) - return - /obj/machinery/computer/cloning name = "Cloning console" icon = 'icons/obj/computer.dmi' diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index b852331280..073c1b8fe4 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -9,7 +9,7 @@ var/on = 0 var/temperature_archived var/mob/living/carbon/occupant = null - var/beaker = null + var/obj/item/weapon/reagent_containers/glass/beaker = null var/current_heat_capacity = 50 @@ -68,11 +68,12 @@ * ui_interact is currently defined for /atom/movable * * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui * * @return nothing */ -/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(user == occupant || user.stat) return @@ -114,14 +115,26 @@ else if(air_contents.temperature > 225) data["cellTemperatureStatus"] = "average" - data["isBeakerLoaded"] = beaker ? 1 : 0 + data["isBeakerLoaded"] = beaker ? 1 : 0 + /* // Removing beaker contents list from front-end, replacing with a total remaining volume var beakerContents[0] - if(beaker && beaker:reagents && beaker:reagents.reagent_list.len) - for(var/datum/reagent/R in beaker:reagents.reagent_list) + if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... data["beakerContents"] = beakerContents - - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + */ + data["beakerLabel"] = null + data["beakerVolume"] = 0 + if(beaker) + data["beakerLabel"] = beaker.label_text ? beaker.label_text : null + if (beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) + data["beakerVolume"] += R.volume + + if (!ui) // no ui has been passed, so we'll search for one + { + ui = nanomanager.get_open_ui(user, src, ui_key) + } if (!ui) // the ui does not exist, so we'll create a new one ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 410) @@ -153,8 +166,7 @@ if(href_list["ejectBeaker"]) if(beaker) - var/obj/item/weapon/reagent_containers/glass/B = beaker - B.loc = get_step(loc, SOUTH) + beaker.loc = get_step(loc, SOUTH) beaker = null if(href_list["ejectOccupant"]) @@ -224,8 +236,8 @@ var/has_clonexa = occupant.reagents.get_reagent_amount("clonexadone") >= 1 var/has_cryo_medicine = has_cryo || has_clonexa if(beaker && !has_cryo_medicine) - beaker:reagents.trans_to(occupant, 1, 10) - beaker:reagents.reaction(occupant) + beaker.reagents.trans_to(occupant, 1, 10) + beaker.reagents.reaction(occupant) /obj/machinery/atmospherics/unary/cryo_cell/proc/heat_gas_contents() if(air_contents.total_moles() < 1) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 57428fb0a4..9db503f93a 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -251,10 +251,12 @@ 'nano/css/icons.css', 'nano/templates/chem_dispenser.tmpl', 'nano/templates/cryo.tmpl', + 'nano/templates/dna_modifier.tmpl', 'nano/images/uiBackground.png', 'nano/images/uiIcons16.png', 'nano/images/uiIcons24.png', 'nano/images/uiLinkPendingIcon.gif', + 'nano/images/uiMaskBackground.png', 'nano/images/uiNoticeBackground.jpg', 'nano/images/uiTitleFluff.png', 'html/search.js', diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index 609bb604dc..fed8cb4c4f 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -31,11 +31,12 @@ * ui_interact is currently defined for /atom/movable * * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui * * @return nothing */ -/atom/movable/proc/ui_interact(mob/user, ui_key = "main") +/atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) return // Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index e1ac8556f2..474e955f57 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -387,6 +387,7 @@ nanoui is used to open and update nano browser uis return // Cannot update UI, no visibility data = add_default_data(data) + //user << list2json(data) // used for debugging user << output(list2params(list(list2json(data))),"[window_id].browser:receiveUpdateData") /** @@ -414,7 +415,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/process(update = 0) if (status && (update || is_auto_updating)) - src_object.ui_interact(user, ui_key) // Update the UI (update_status() is called whenever a UI is updated) + src_object.ui_interact(user, ui_key, src) // Update the UI (update_status() is called whenever a UI is updated) else update_status(1) // Not updating UI, so lets check here if status has changed diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 3b94b005e2..f993e0816d 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -74,10 +74,11 @@ * * @param user /mob The mob who is interacting with this ui * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui * * @return nothing */ -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main") +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return if(user.stat || user.restrained()) return @@ -110,8 +111,11 @@ chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... data["chemicals"] = chemicals - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) - if (!ui) + if (!ui) // no ui has been passed, so we'll search for one + { + ui = nanomanager.get_open_ui(user, src, ui_key) + } + if (!ui) // the ui does not exist, so we'll create a new one ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 370, 605) // When the UI is first opened this is the data it will use @@ -343,15 +347,15 @@ reagents.clear_reagents() icon_state = "mixer0" else if (href_list["createpill"] || href_list["createpill_multiple"]) - var/name = reject_bad_text(input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name())) var/count = 1 if (href_list["createpill_multiple"]) count = isgoodnumber(input("Select the number of pills to make.", 10, pillamount) as num) if (count > 20) count = 20 //Pevent people from creating huge stacks of pills easily. Maybe move the number to defines? var/amount_per_pill = reagents.total_volume/count if (amount_per_pill > 50) amount_per_pill = 50 + var/name = reject_bad_text(input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill] units)")) while (count--) var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc) - if(!name) name = reagents.get_master_reagent_name() + if(!name) name = "[reagents.get_master_reagent_name()] ([amount_per_pill] units)" P.name = "[name] pill" P.pixel_x = rand(-7, 7) //random position P.pixel_y = rand(-7, 7) @@ -363,9 +367,9 @@ src.updateUsrDialog() else if (href_list["createbottle"]) if(!condi) - var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name())) + var/name = reject_bad_text(input(usr,"Name:","Name your bottle!","[reagents.get_master_reagent_name()] ([reagents.total_volume] units)")) var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) - if(!name) name = reagents.get_master_reagent_name() + if(!name) name = "[reagents.get_master_reagent_name()] ([reagents.total_volume] units)" P.name = "[name] bottle" P.pixel_x = rand(-7, 7) //random position P.pixel_y = rand(-7, 7) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 31cbe81582..15123bacf8 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -25,6 +25,7 @@ /obj/structure/sink, /obj/item/weapon/storage, /obj/machinery/atmospherics/unary/cryo_cell, + /obj/machinery/dna_scannernew, /obj/item/weapon/grenade/chem_grenade, /obj/machinery/bot/medbot, /obj/machinery/computer/pandemic, diff --git a/nano/css/icons.css b/nano/css/icons.css index 54fd5d8290..e20af95053 100644 --- a/nano/css/icons.css +++ b/nano/css/icons.css @@ -49,179 +49,180 @@ } /* positioning */ -.uiIcon16.blank { background-position: 16px 16px; } -.uiIcon16.carat-1-n { background-position: 0 0; } -.uiIcon16.carat-1-ne { background-position: -16px 0; } -.uiIcon16.carat-1-e { background-position: -32px 0; } -.uiIcon16.carat-1-se { background-position: -48px 0; } -.uiIcon16.carat-1-s { background-position: -64px 0; } -.uiIcon16.carat-1-sw { background-position: -80px 0; } -.uiIcon16.carat-1-w { background-position: -96px 0; } -.uiIcon16.carat-1-nw { background-position: -112px 0; } -.uiIcon16.carat-2-n-s { background-position: -128px 0; } -.uiIcon16.carat-2-e-w { background-position: -144px 0; } -.uiIcon16.triangle-1-n { background-position: 0 -16px; } -.uiIcon16.triangle-1-ne { background-position: -16px -16px; } -.uiIcon16.triangle-1-e { background-position: -32px -16px; } -.uiIcon16.triangle-1-se { background-position: -48px -16px; } -.uiIcon16.triangle-1-s { background-position: -64px -16px; } -.uiIcon16.triangle-1-sw { background-position: -80px -16px; } -.uiIcon16.triangle-1-w { background-position: -96px -16px; } -.uiIcon16.triangle-1-nw { background-position: -112px -16px; } -.uiIcon16.triangle-2-n-s { background-position: -128px -16px; } -.uiIcon16.triangle-2-e-w { background-position: -144px -16px; } -.uiIcon16.arrow-1-n { background-position: 0 -32px; } -.uiIcon16.arrow-1-ne { background-position: -16px -32px; } -.uiIcon16.arrow-1-e { background-position: -32px -32px; } -.uiIcon16.arrow-1-se { background-position: -48px -32px; } -.uiIcon16.arrow-1-s { background-position: -64px -32px; } -.uiIcon16.arrow-1-sw { background-position: -80px -32px; } -.uiIcon16.arrow-1-w { background-position: -96px -32px; } -.uiIcon16.arrow-1-nw { background-position: -112px -32px; } -.uiIcon16.arrow-2-n-s { background-position: -128px -32px; } -.uiIcon16.arrow-2-ne-sw { background-position: -144px -32px; } -.uiIcon16.arrow-2-e-w { background-position: -160px -32px; } -.uiIcon16.arrow-2-se-nw { background-position: -176px -32px; } -.uiIcon16.arrowstop-1-n { background-position: -192px -32px; } -.uiIcon16.arrowstop-1-e { background-position: -208px -32px; } -.uiIcon16.arrowstop-1-s { background-position: -224px -32px; } -.uiIcon16.arrowstop-1-w { background-position: -240px -32px; } -.uiIcon16.arrowthick-1-n { background-position: 0 -48px; } -.uiIcon16.arrowthick-1-ne { background-position: -16px -48px; } -.uiIcon16.arrowthick-1-e { background-position: -32px -48px; } -.uiIcon16.arrowthick-1-se { background-position: -48px -48px; } -.uiIcon16.arrowthick-1-s { background-position: -64px -48px; } -.uiIcon16.arrowthick-1-sw { background-position: -80px -48px; } -.uiIcon16.arrowthick-1-w { background-position: -96px -48px; } -.uiIcon16.arrowthick-1-nw { background-position: -112px -48px; } -.uiIcon16.arrowthick-2-n-s { background-position: -128px -48px; } -.uiIcon16.arrowthick-2-ne-sw { background-position: -144px -48px; } -.uiIcon16.arrowthick-2-e-w { background-position: -160px -48px; } -.uiIcon16.arrowthick-2-se-nw { background-position: -176px -48px; } -.uiIcon16.arrowthickstop-1-n { background-position: -192px -48px; } -.uiIcon16.arrowthickstop-1-e { background-position: -208px -48px; } -.uiIcon16.arrowthickstop-1-s { background-position: -224px -48px; } -.uiIcon16.arrowthickstop-1-w { background-position: -240px -48px; } -.uiIcon16.arrowreturnthick-1-w { background-position: 0 -64px; } -.uiIcon16.arrowreturnthick-1-n { background-position: -16px -64px; } -.uiIcon16.arrowreturnthick-1-e { background-position: -32px -64px; } -.uiIcon16.arrowreturnthick-1-s { background-position: -48px -64px; } -.uiIcon16.arrowreturn-1-w { background-position: -64px -64px; } -.uiIcon16.arrowreturn-1-n { background-position: -80px -64px; } -.uiIcon16.arrowreturn-1-e { background-position: -96px -64px; } -.uiIcon16.arrowreturn-1-s { background-position: -112px -64px; } -.uiIcon16.arrowrefresh-1-w { background-position: -128px -64px; } -.uiIcon16.arrowrefresh-1-n { background-position: -144px -64px; } -.uiIcon16.arrowrefresh-1-e { background-position: -160px -64px; } -.uiIcon16.arrowrefresh-1-s { background-position: -176px -64px; } -.uiIcon16.arrow-4 { background-position: 0 -80px; } -.uiIcon16.arrow-4-diag { background-position: -16px -80px; } -.uiIcon16.extlink { background-position: -32px -80px; } -.uiIcon16.newwin { background-position: -48px -80px; } -.uiIcon16.refresh { background-position: -64px -80px; } -.uiIcon16.shuffle { background-position: -80px -80px; } -.uiIcon16.transfer-e-w { background-position: -96px -80px; } -.uiIcon16.transferthick-e-w { background-position: -112px -80px; } -.uiIcon16.folder-collapsed { background-position: 0 -96px; } -.uiIcon16.folder-open { background-position: -16px -96px; } -.uiIcon16.document { background-position: -32px -96px; } -.uiIcon16.document-b { background-position: -48px -96px; } -.uiIcon16.note { background-position: -64px -96px; } -.uiIcon16.mail-closed { background-position: -80px -96px; } -.uiIcon16.mail-open { background-position: -96px -96px; } -.uiIcon16.suitcase { background-position: -112px -96px; } -.uiIcon16.comment { background-position: -128px -96px; } -.uiIcon16.person { background-position: -144px -96px; } -.uiIcon16.print { background-position: -160px -96px; } -.uiIcon16.trash { background-position: -176px -96px; } -.uiIcon16.locked { background-position: -192px -96px; } -.uiIcon16.unlocked { background-position: -208px -96px; } -.uiIcon16.bookmark { background-position: -224px -96px; } -.uiIcon16.tag { background-position: -240px -96px; } -.uiIcon16.home { background-position: 0 -112px; } -.uiIcon16.flag { background-position: -16px -112px; } -.uiIcon16.calendar { background-position: -32px -112px; } -.uiIcon16.cart { background-position: -48px -112px; } -.uiIcon16.pencil { background-position: -64px -112px; } -.uiIcon16.clock { background-position: -80px -112px; } -.uiIcon16.disk { background-position: -96px -112px; } -.uiIcon16.calculator { background-position: -112px -112px; } -.uiIcon16.zoomin { background-position: -128px -112px; } -.uiIcon16.zoomout { background-position: -144px -112px; } -.uiIcon16.search { background-position: -160px -112px; } -.uiIcon16.wrench { background-position: -176px -112px; } -.uiIcon16.gear { background-position: -192px -112px; } -.uiIcon16.heart { background-position: -208px -112px; } -.uiIcon16.star { background-position: -224px -112px; } -.uiIcon16.link { background-position: -240px -112px; } -.uiIcon16.cancel { background-position: 0 -128px; } -.uiIcon16.plus { background-position: -16px -128px; } -.uiIcon16.plusthick { background-position: -32px -128px; } -.uiIcon16.minus { background-position: -48px -128px; } -.uiIcon16.minusthick { background-position: -64px -128px; } -.uiIcon16.close { background-position: -80px -128px; } -.uiIcon16.closethick { background-position: -96px -128px; } -.uiIcon16.key { background-position: -112px -128px; } -.uiIcon16.lightbulb { background-position: -128px -128px; } -.uiIcon16.scissors { background-position: -144px -128px; } -.uiIcon16.clipboard { background-position: -160px -128px; } -.uiIcon16.copy { background-position: -176px -128px; } -.uiIcon16.contact { background-position: -192px -128px; } -.uiIcon16.image { background-position: -208px -128px; } -.uiIcon16.video { background-position: -224px -128px; } -.uiIcon16.script { background-position: -240px -128px; } -.uiIcon16.alert { background-position: 0 -144px; } -.uiIcon16.info { background-position: -16px -144px; } -.uiIcon16.notice { background-position: -32px -144px; } -.uiIcon16.help { background-position: -48px -144px; } -.uiIcon16.check { background-position: -64px -144px; } -.uiIcon16.bullet { background-position: -80px -144px; } -.uiIcon16.radio-on { background-position: -96px -144px; } -.uiIcon16.radio-off { background-position: -112px -144px; } -.uiIcon16.pin-w { background-position: -128px -144px; } -.uiIcon16.pin-s { background-position: -144px -144px; } -.uiIcon16.play { background-position: 0 -160px; } -.uiIcon16.pause { background-position: -16px -160px; } -.uiIcon16.seek-next { background-position: -32px -160px; } -.uiIcon16.seek-prev { background-position: -48px -160px; } -.uiIcon16.seek-end { background-position: -64px -160px; } -.uiIcon16.seek-start { background-position: -80px -160px; } +.uiIcon16.icon-blank { background-position: 16px 16px; } +.uiIcon16.icon-carat-1-n { background-position: 0 0; } +.uiIcon16.icon-carat-1-ne { background-position: -16px 0; } +.uiIcon16.icon-carat-1-e { background-position: -32px 0; } +.uiIcon16.icon-carat-1-se { background-position: -48px 0; } +.uiIcon16.icon-carat-1-s { background-position: -64px 0; } +.uiIcon16.icon-carat-1-sw { background-position: -80px 0; } +.uiIcon16.icon-carat-1-w { background-position: -96px 0; } +.uiIcon16.icon-carat-1-nw { background-position: -112px 0; } +.uiIcon16.icon-carat-2-n-s { background-position: -128px 0; } +.uiIcon16.icon-carat-2-e-w { background-position: -144px 0; } +.uiIcon16.icon-triangle-1-n { background-position: 0 -16px; } +.uiIcon16.icon-triangle-1-ne { background-position: -16px -16px; } +.uiIcon16.icon-triangle-1-e { background-position: -32px -16px; } +.uiIcon16.icon-triangle-1-se { background-position: -48px -16px; } +.uiIcon16.icon-triangle-1-s { background-position: -64px -16px; } +.uiIcon16.icon-triangle-1-sw { background-position: -80px -16px; } +.uiIcon16.icon-triangle-1-w { background-position: -96px -16px; } +.uiIcon16.icon-triangle-1-nw { background-position: -112px -16px; } +.uiIcon16.icon-triangle-2-n-s { background-position: -128px -16px; } +.uiIcon16.icon-triangle-2-e-w { background-position: -144px -16px; } +.uiIcon16.icon-arrow-1-n { background-position: 0 -32px; } +.uiIcon16.icon-arrow-1-ne { background-position: -16px -32px; } +.uiIcon16.icon-arrow-1-e { background-position: -32px -32px; } +.uiIcon16.icon-arrow-1-se { background-position: -48px -32px; } +.uiIcon16.icon-arrow-1-s { background-position: -64px -32px; } +.uiIcon16.icon-arrow-1-sw { background-position: -80px -32px; } +.uiIcon16.icon-arrow-1-w { background-position: -96px -32px; } +.uiIcon16.icon-arrow-1-nw { background-position: -112px -32px; } +.uiIcon16.icon-arrow-2-n-s { background-position: -128px -32px; } +.uiIcon16.icon-arrow-2-ne-sw { background-position: -144px -32px; } +.uiIcon16.icon-arrow-2-e-w { background-position: -160px -32px; } +.uiIcon16.icon-arrow-2-se-nw { background-position: -176px -32px; } +.uiIcon16.icon-arrowstop-1-n { background-position: -192px -32px; } +.uiIcon16.icon-arrowstop-1-e { background-position: -208px -32px; } +.uiIcon16.icon-arrowstop-1-s { background-position: -224px -32px; } +.uiIcon16.icon-arrowstop-1-w { background-position: -240px -32px; } +.uiIcon16.icon-arrowthick-1-n { background-position: 0 -48px; } +.uiIcon16.icon-arrowthick-1-ne { background-position: -16px -48px; } +.uiIcon16.icon-arrowthick-1-e { background-position: -32px -48px; } +.uiIcon16.icon-arrowthick-1-se { background-position: -48px -48px; } +.uiIcon16.icon-arrowthick-1-s { background-position: -64px -48px; } +.uiIcon16.icon-arrowthick-1-sw { background-position: -80px -48px; } +.uiIcon16.icon-arrowthick-1-w { background-position: -96px -48px; } +.uiIcon16.icon-arrowthick-1-nw { background-position: -112px -48px; } +.uiIcon16.icon-arrowthick-2-n-s { background-position: -128px -48px; } +.uiIcon16.icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.uiIcon16.icon-arrowthick-2-e-w { background-position: -160px -48px; } +.uiIcon16.icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.uiIcon16.icon-arrowthickstop-1-n { background-position: -192px -48px; } +.uiIcon16.icon-arrowthickstop-1-e { background-position: -208px -48px; } +.uiIcon16.icon-arrowthickstop-1-s { background-position: -224px -48px; } +.uiIcon16.icon-arrowthickstop-1-w { background-position: -240px -48px; } +.uiIcon16.icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.uiIcon16.icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.uiIcon16.icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.uiIcon16.icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.uiIcon16.icon-arrowreturn-1-w { background-position: -64px -64px; } +.uiIcon16.icon-arrowreturn-1-n { background-position: -80px -64px; } +.uiIcon16.icon-arrowreturn-1-e { background-position: -96px -64px; } +.uiIcon16.icon-arrowreturn-1-s { background-position: -112px -64px; } +.uiIcon16.icon-arrowrefresh-1-w { background-position: -128px -64px; } +.uiIcon16.icon-arrowrefresh-1-n { background-position: -144px -64px; } +.uiIcon16.icon-arrowrefresh-1-e { background-position: -160px -64px; } +.uiIcon16.icon-arrowrefresh-1-s { background-position: -176px -64px; } +.uiIcon16.icon-arrow-4 { background-position: 0 -80px; } +.uiIcon16.icon-arrow-4-diag { background-position: -16px -80px; } +.uiIcon16.icon-extlink { background-position: -32px -80px; } +.uiIcon16.icon-newwin { background-position: -48px -80px; } +.uiIcon16.icon-refresh { background-position: -64px -80px; } +.uiIcon16.icon-shuffle { background-position: -80px -80px; } +.uiIcon16.icon-transfer-e-w { background-position: -96px -80px; } +.uiIcon16.icon-transferthick-e-w { background-position: -112px -80px; } +.uiIcon16.icon-radiation { background-position: -128px -80px; } +.uiIcon16.icon-folder-collapsed { background-position: 0 -96px; } +.uiIcon16.icon-folder-open { background-position: -16px -96px; } +.uiIcon16.icon-document { background-position: -32px -96px; } +.uiIcon16.icon-document-b { background-position: -48px -96px; } +.uiIcon16.icon-note { background-position: -64px -96px; } +.uiIcon16.icon-mail-closed { background-position: -80px -96px; } +.uiIcon16.icon-mail-open { background-position: -96px -96px; } +.uiIcon16.icon-suitcase { background-position: -112px -96px; } +.uiIcon16.icon-comment { background-position: -128px -96px; } +.uiIcon16.icon-person { background-position: -144px -96px; } +.uiIcon16.icon-print { background-position: -160px -96px; } +.uiIcon16.icon-trash { background-position: -176px -96px; } +.uiIcon16.icon-locked { background-position: -192px -96px; } +.uiIcon16.icon-unlocked { background-position: -208px -96px; } +.uiIcon16.icon-bookmark { background-position: -224px -96px; } +.uiIcon16.icon-tag { background-position: -240px -96px; } +.uiIcon16.icon-home { background-position: 0 -112px; } +.uiIcon16.icon-flag { background-position: -16px -112px; } +.uiIcon16.icon-calendar { background-position: -32px -112px; } +.uiIcon16.icon-cart { background-position: -48px -112px; } +.uiIcon16.icon-pencil { background-position: -64px -112px; } +.uiIcon16.icon-clock { background-position: -80px -112px; } +.uiIcon16.icon-disk { background-position: -96px -112px; } +.uiIcon16.icon-calculator { background-position: -112px -112px; } +.uiIcon16.icon-zoomin { background-position: -128px -112px; } +.uiIcon16.icon-zoomout { background-position: -144px -112px; } +.uiIcon16.icon-search { background-position: -160px -112px; } +.uiIcon16.icon-wrench { background-position: -176px -112px; } +.uiIcon16.icon-gear { background-position: -192px -112px; } +.uiIcon16.icon-heart { background-position: -208px -112px; } +.uiIcon16.icon-star { background-position: -224px -112px; } +.uiIcon16.icon-link { background-position: -240px -112px; } +.uiIcon16.icon-cancel { background-position: 0 -128px; } +.uiIcon16.icon-plus { background-position: -16px -128px; } +.uiIcon16.icon-plusthick { background-position: -32px -128px; } +.uiIcon16.icon-minus { background-position: -48px -128px; } +.uiIcon16.icon-minusthick { background-position: -64px -128px; } +.uiIcon16.icon-close { background-position: -80px -128px; } +.uiIcon16.icon-closethick { background-position: -96px -128px; } +.uiIcon16.icon-key { background-position: -112px -128px; } +.uiIcon16.icon-lightbulb { background-position: -128px -128px; } +.uiIcon16.icon-scissors { background-position: -144px -128px; } +.uiIcon16.icon-clipboard { background-position: -160px -128px; } +.uiIcon16.icon-copy { background-position: -176px -128px; } +.uiIcon16.icon-contact { background-position: -192px -128px; } +.uiIcon16.icon-image { background-position: -208px -128px; } +.uiIcon16.icon-video { background-position: -224px -128px; } +.uiIcon16.icon-script { background-position: -240px -128px; } +.uiIcon16.icon-alert { background-position: 0 -144px; } +.uiIcon16.icon-info { background-position: -16px -144px; } +.uiIcon16.icon-notice { background-position: -32px -144px; } +.uiIcon16.icon-help { background-position: -48px -144px; } +.uiIcon16.icon-check { background-position: -64px -144px; } +.uiIcon16.icon-bullet { background-position: -80px -144px; } +.uiIcon16.icon-radio-on { background-position: -96px -144px; } +.uiIcon16.icon-radio-off { background-position: -112px -144px; } +.uiIcon16.icon-pin-w { background-position: -128px -144px; } +.uiIcon16.icon-pin-s { background-position: -144px -144px; } +.uiIcon16.icon-play { background-position: 0 -160px; } +.uiIcon16.icon-pause { background-position: -16px -160px; } +.uiIcon16.icon-seek-next { background-position: -32px -160px; } +.uiIcon16.icon-seek-prev { background-position: -48px -160px; } +.uiIcon16.icon-seek-end { background-position: -64px -160px; } +.uiIcon16.icon-seek-start { background-position: -80px -160px; } /* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */ -.uiIcon16.seek-first { background-position: -80px -160px; } -.uiIcon16.stop { background-position: -96px -160px; } -.uiIcon16.eject { background-position: -112px -160px; } -.uiIcon16.volume-off { background-position: -128px -160px; } -.uiIcon16.volume-on { background-position: -144px -160px; } -.uiIcon16.power { background-position: 0 -176px; } -.uiIcon16.signal-diag { background-position: -16px -176px; } -.uiIcon16.signal { background-position: -32px -176px; } -.uiIcon16.battery-0 { background-position: -48px -176px; } -.uiIcon16.battery-1 { background-position: -64px -176px; } -.uiIcon16.battery-2 { background-position: -80px -176px; } -.uiIcon16.battery-3 { background-position: -96px -176px; } -.uiIcon16.circle-plus { background-position: 0 -192px; } -.uiIcon16.circle-minus { background-position: -16px -192px; } -.uiIcon16.circle-close { background-position: -32px -192px; } -.uiIcon16.circle-triangle-e { background-position: -48px -192px; } -.uiIcon16.circle-triangle-s { background-position: -64px -192px; } -.uiIcon16.circle-triangle-w { background-position: -80px -192px; } -.uiIcon16.circle-triangle-n { background-position: -96px -192px; } -.uiIcon16.circle-arrow-e { background-position: -112px -192px; } -.uiIcon16.circle-arrow-s { background-position: -128px -192px; } -.uiIcon16.circle-arrow-w { background-position: -144px -192px; } -.uiIcon16.circle-arrow-n { background-position: -160px -192px; } -.uiIcon16.circle-zoomin { background-position: -176px -192px; } -.uiIcon16.circle-zoomout { background-position: -192px -192px; } -.uiIcon16.circle-check { background-position: -208px -192px; } -.uiIcon16.circlesmall-plus { background-position: 0 -208px; } -.uiIcon16.circlesmall-minus { background-position: -16px -208px; } -.uiIcon16.circlesmall-close { background-position: -32px -208px; } -.uiIcon16.squaresmall-plus { background-position: -48px -208px; } -.uiIcon16.squaresmall-minus { background-position: -64px -208px; } -.uiIcon16.squaresmall-close { background-position: -80px -208px; } -.uiIcon16.grip-dotted-vertical { background-position: 0 -224px; } -.uiIcon16.grip-dotted-horizontal { background-position: -16px -224px; } -.uiIcon16.grip-solid-vertical { background-position: -32px -224px; } -.uiIcon16.grip-solid-horizontal { background-position: -48px -224px; } -.uiIcon16.gripsmall-diagonal-se { background-position: -64px -224px; } -.uiIcon16.grip-diagonal-se { background-position: -80px -224px; } \ No newline at end of file +.uiIcon16.icon-seek-first { background-position: -80px -160px; } +.uiIcon16.icon-stop { background-position: -96px -160px; } +.uiIcon16.icon-eject { background-position: -112px -160px; } +.uiIcon16.icon-volume-off { background-position: -128px -160px; } +.uiIcon16.icon-volume-on { background-position: -144px -160px; } +.uiIcon16.icon-power { background-position: 0 -176px; } +.uiIcon16.icon-signal-diag { background-position: -16px -176px; } +.uiIcon16.icon-signal { background-position: -32px -176px; } +.uiIcon16.icon-battery-0 { background-position: -48px -176px; } +.uiIcon16.icon-battery-1 { background-position: -64px -176px; } +.uiIcon16.icon-battery-2 { background-position: -80px -176px; } +.uiIcon16.icon-battery-3 { background-position: -96px -176px; } +.uiIcon16.icon-circle-plus { background-position: 0 -192px; } +.uiIcon16.icon-circle-minus { background-position: -16px -192px; } +.uiIcon16.icon-circle-close { background-position: -32px -192px; } +.uiIcon16.icon-circle-triangle-e { background-position: -48px -192px; } +.uiIcon16.icon-circle-triangle-s { background-position: -64px -192px; } +.uiIcon16.icon-circle-triangle-w { background-position: -80px -192px; } +.uiIcon16.icon-circle-triangle-n { background-position: -96px -192px; } +.uiIcon16.icon-circle-arrow-e { background-position: -112px -192px; } +.uiIcon16.icon-circle-arrow-s { background-position: -128px -192px; } +.uiIcon16.icon-circle-arrow-w { background-position: -144px -192px; } +.uiIcon16.icon-circle-arrow-n { background-position: -160px -192px; } +.uiIcon16.icon-circle-zoomin { background-position: -176px -192px; } +.uiIcon16.icon-circle-zoomout { background-position: -192px -192px; } +.uiIcon16.icon-circle-check { background-position: -208px -192px; } +.uiIcon16.icon-circlesmall-plus { background-position: 0 -208px; } +.uiIcon16.icon-circlesmall-minus { background-position: -16px -208px; } +.uiIcon16.icon-circlesmall-close { background-position: -32px -208px; } +.uiIcon16.icon-squaresmall-plus { background-position: -48px -208px; } +.uiIcon16.icon-squaresmall-minus { background-position: -64px -208px; } +.uiIcon16.icon-squaresmall-close { background-position: -80px -208px; } +.uiIcon16.icon-grip-dotted-vertical { background-position: 0 -224px; } +.uiIcon16.icon-grip-dotted-horizontal { background-position: -16px -224px; } +.uiIcon16.icon-grip-solid-vertical { background-position: -32px -224px; } +.uiIcon16.icon-grip-solid-horizontal { background-position: -48px -224px; } +.uiIcon16.icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.uiIcon16.icon-grip-diagonal-se { background-position: -80px -224px; } \ No newline at end of file diff --git a/nano/css/shared.css b/nano/css/shared.css index 7400e2e25e..6f5b79a31f 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -1,408 +1,343 @@ -body -{ - padding: 0; - margin: 0; - font-size: 12px; - color: #ffffff; - line-height: 170%; - font-family: Verdana, Geneva, sans-serif; +body { + padding: 0; + margin: 0; + font-size: 12px; + color: #ffffff; + line-height: 170%; + font-family: Verdana, Geneva, sans-serif; background: #272727 url(uiBackground.png) 50% 0 repeat-x; } - -hr -{ - background-color: #40628a; - height: 1px; +hr { + background-color: #40628a; + height: 1px; } - -a, a:link, a:visited, a:active, .link, .linkOn, .linkOff, .selected, .disabled -{ - color: #ffffff; - text-decoration: none; - background: #40628a; - border: 1px solid #161616; - padding: 0px 4px 4px 0px; - margin: 0 2px 2px 0; - cursor:default; -} - -.link -{ +.link, .linkOn, .linkOff, .selected, .disabled { float: left; - min-width: 40px; - height: 16px; + min-width: 40px; + height: 16px; + text-align: center; + color: #ffffff; + text-decoration: none; + background: #40628a; + border: 1px solid #161616; + padding: 0px 4px 4px 4px; + margin: 0 2px 2px 0; + cursor:default; +} +.noIcon { + padding: 0px 4px 4px 0px; } -a:hover, .linkActive:hover -{ - background: #507aac; +a:hover, .linkActive:hover { + background: #507aac; } - -.linkPending, .linkPending:hover -{ - color: #ffffff; - background: #507aac; +.linkPending, .linkPending:hover { + color: #ffffff; + background: #507aac; } - -a.white, a.white:link, a.white:visited, a.white:active -{ - color: #40628a; - text-decoration: none; - background: #ffffff; - border: 1px solid #161616; - padding: 1px 4px 1px 4px; - margin: 0 2px 0 0; - cursor:default; +a.white, a.white:link, a.white:visited, a.white:active { + color: #40628a; + text-decoration: none; + background: #ffffff; + border: 1px solid #161616; + padding: 1px 4px 1px 4px; + margin: 0 2px 0 0; + cursor:default; } - -a.white:hover -{ - color: #ffffff; - background: #40628a; +a.white:hover { + color: #ffffff; + background: #40628a; } - -.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover -{ - color: #ffffff; - background: #2f943c; +.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover { + color: #ffffff; + background: #2f943c; } - -.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover -{ - color: #ffffff; - background: #999999; - border-color: #666666; +.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover { + color: #ffffff; + background: #999999; + border-color: #666666; } - -a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon -{ - position: relative; - padding: 1px 4px 2px 20px; +a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon { + position: relative; + padding: 1px 4px 2px 20px; } - -a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img -{ - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; +a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img { + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; } - -ul -{ - padding: 4px 0 0 10px; - margin: 0; - list-style-type: none; +ul { + padding: 4px 0 0 10px; + margin: 0; + list-style-type: none; } - -li -{ - padding: 0 0 2px 0; +li { + padding: 0 0 2px 0; } - -img, a img -{ - border-style:none; +img, a img { + border-style:none; } - -h1, h2, h3, h4, h5, h6 -{ - margin: 0; - padding: 16px 0 8px 0; - color: #517087; - clear: both; +h1, h2, h3, h4, h5, h6 { + margin: 0; + padding: 12px 0 6px 0; + color: #517087; + clear: both; } - -h1 -{ - font-size: 15px; +h1 { + font-size: 18px; } - -h2 -{ - font-size: 14px; +h2 { + font-size: 16px; } - -h3 -{ - font-size: 13px; +h3 { + font-size: 14px; } - -h4 -{ - font-size: 12px; +h4 { + font-size: 12px; } - -#uiWrapper -{ +#uiWrapper { width: 100%; - height: 100%; + height: 100%; } - -#uiTitleWrapper -{ - position: relative; +#uiTitleWrapper { + position: relative; height: 30px; } - -#uiTitle -{ - position: absolute; +#uiTitle { + position: absolute; top: 6px; - left: 44px; - width: 66%; - overflow: hidden; - color: #E9C183; - font-size: 16px; + left: 44px; + width: 66%; + overflow: hidden; + color: #E9C183; + font-size: 16px; +} +#uiTitle.icon { + padding: 6px 8px 6px 42px; + background-position: 2px 50%; + background-repeat: no-repeat; +} +#uiTitleFluff { + position: absolute; + top: 4px; + right: 12px; + width: 42px; + height: 24px; + background: url(uiTitleFluff.png) 50% 50% no-repeat; +} +#uiStatusIcon { + position: absolute; + top: 4px; + left: 12px; + width: 24px; + height: 24px; +} +#uiContent { + clear: both; + padding: 8px; +} +.good { + color: #4f7529; + font-weight: bold; +} +.average { + color: #cd6500; + font-weight: bold; +} +.bad { + color: #ee0000; + font-weight: bold; +} +.highlight { + color: #8BA5C4; +} +.dark { + color: #272727; +} +.notice { + position: relative; + background: url(uiNoticeBackground.jpg) 50% 50%; + color: #15345A; + font-size: 12px; + font-style: italic; + font-weight: bold; + padding: 3px 0px 3px 0px; + margin: 4px; +} +.notice.icon { + padding: 2px 4px 0 20px; +} +.notice img { + position: absolute; + top: 0; + left: 0; + width: 16px; + height: 16px; +} +div.notice { + clear: both; +} +.item { + width: 100%; + margin: 4px 0 0 0; + clear: both; +} +.itemLabel { + float: left; + width: 30%; + color: #e9c183; +} +.itemContent { + float: left; + width: 69%; +} +.itemContentSmall { + float: left; + width: 33%; +} +.statusDisplay { + background: #000000; + color: #ffffff; + border: 1px solid #40628a; + padding: 4px; + margin: 3px 0; +} +.statusLabel { + width: 138px; + float: left; + overflow: hidden; + color: #98B0C3; +} +.statusValue { + float: left; +} +.block { + padding: 8px; + margin: 10px 4px 4px 4px; + border: 1px solid #40628a; + background-color: #202020; +} +.block h3 { + padding: 0; +} +.displayBar { + position: relative; + width: 236px; + height: 16px; + border: 1px solid #666666; + float: left; + margin: 0 5px 0 0; + overflow: hidden; + background: #000000; +} +.displayBarText { + position: absolute; + top: -2px; + left: 5px; + width: 100%; + height: 100%; + color: #ffffff; + font-weight: normal; +} +.displayBarFill { + width: 0%; + height: 100%; + background: #40628a; + overflow: hidden; + float: left; +} +.displayBarFill.alignRight { + float: right; +} +.displayBarFill.good { + color: #ffffff; + background: #4f7529; +} +.displayBarFill.average { + color: #ffffff; + background: #cd6500; +} +.displayBarFill.bad { + color: #ffffff; + background: #ee0000; +} +.displayBarFill.highlight { + color: #ffffff; + background: #8BA5C4; +} +.clearBoth { + clear: both; +} +.clearLeft { + clear: left; +} +.clearRight { + clear: right; +} +.line { + width: 100%; + clear: both; +} +.inactive, , a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover { + color: #ffffff; + background: #999999; + border-color: #666666; +} +.fixedLeft { + width: 110px; + float: left; +} +.floatRight { + float: right; } -#uiTitle.icon +/* DNA Modifier UI (dna_modifier.tmpl) */ + +.dnaBlock { - padding: 6px 8px 6px 42px; - background-position: 2px 50%; - background-repeat: no-repeat; + float: left; + width: 90px; + padding: 0 0 5px 0; } -#uiTitleFluff -{ - position: absolute; - top: 4px; - right: 12px; - width: 42px; - height: 24px; - background: url(uiTitleFluff.png) 50% 50% no-repeat; -} - -#uiStatusIcon -{ - position: absolute; - top: 4px; - left: 12px; - width: 24px; - height: 24px; -} - -#uiContent -{ - clear: both; - padding: 8px; -} - -.good -{ - color: #4f7529; - font-weight: bold; -} - -.average -{ - color: #cd6500; - font-weight: bold; -} - -.bad -{ - color: #ee0000; - font-weight: bold; -} - -.highlight -{ - color: #8BA5C4; -} - -.dark -{ - color: #272727; -} - -.notice -{ - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50% no-repeat; - color: #15345A; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 8px 2px 8px; - margin: 4px; -} - -.notice.icon -{ - padding: 2px 4px 0 20px; -} - -.notice img -{ - position: absolute; - top: 0; - left: 0; - width: 16px; - height: 16px; -} - -div.notice -{ - clear: both; -} - -.item -{ - width: 100%; - clear: both; -} - -.itemLabel +.dnaBlockNumber { + font-family: Fixed, monospace; float: left; - width: 30%; - color: #e9c183; -} - -.itemContent -{ - float: left; - width: 69%; -} -.itemContentSmall -{ - float: left; - width: 33%; -} - -.statusDisplay -{ - background: #000000; color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; -} - -.statusLabel -{ - width: 138px; - float: left; - overflow: hidden; - color: #98B0C3; -} - -.statusValue -{ - float: left; -} - -.block -{ - padding: 8px; - margin: 10px 4px 4px 4px; - border: 1px solid #40628a; - background-color: #202020; -} - -.block h3 -{ + background: #363636; + min-width: 20px; + height: 20px; padding: 0; + text-align: center; } -.displayBar +.dnaSubBlock { - position: relative; - width: 236px; - height: 16px; - border: 1px solid #666666; + font-family: Fixed, monospace; float: left; - margin: 0 5px 0 0; - overflow: hidden; - background: #000000; + padding: 0; + min-width: 16px; + height: 20px; + text-align: center; } -.displayBarText +.mask { - position: absolute; - top: -2px; - left: 5px; + position: fixed; + left: 0; + top: 0; width: 100%; height: 100%; - color: #ffffff; - font-weight: normal; + background: url(uiMaskBackground.png); } -.displayBarFill -{ - width: 0%; - height: 100%; - background: #40628a; - overflow: hidden; - float: left; -} - -.displayBarFill.alignRight -{ - float: right; -} - -.displayBarFill.good -{ - color: #ffffff; - background: #4f7529; -} - -.displayBarFill.average -{ - color: #ffffff; - background: #cd6500; -} - -.displayBarFill.bad -{ - color: #ffffff; - background: #ee0000; -} - -.displayBarFill.highlight -{ - color: #ffffff; - background: #8BA5C4; -} - -.clearBoth -{ - clear: both; -} - -.clearLeft -{ - clear: left; -} - -.clearRight -{ - clear: right; -} - -.line +.maskContent { width: 100%; - clear: both; -} - -.inactive, , a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover -{ - color: #ffffff; - background: #999999; - border-color: #666666; -} - -.fixedLeft -{ - width: 110px; - float: left; -} - -.floatRight -{ - float: right; + height: 200px; + margin: 200px 0; + text-align: center; } \ No newline at end of file diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png index ef427103047151b165610fb15a030fa26353eca7..7257f307ece7e015a0497efc192a513eda969511 100644 GIT binary patch delta 2807 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 diff --git a/nano/images/uiMaskBackground.png b/nano/images/uiMaskBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3500537ab0f178383271be0b35cf7d43304e0a GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-wj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYQ<#BAnDww>Gf+r2GbEzKIX^cyHLnE7WngeFN=+'; + iconHtml = '
'; + iconClass = 'hasIcon'; } if (typeof elementClass == 'undefined' || !elementClass) @@ -37,10 +39,10 @@ NanoBaseHelpers = function () if (typeof status != 'undefined' && status) { - return ''; + return ''; } - return ''; + return ''; }, // Round a number to the nearest integer round: function(number) { @@ -114,6 +116,54 @@ NanoBaseHelpers = function () var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100); return '
' + showText + '
'; + }, + // Display DNA Blocks (for the DNA Modifier UI) + displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { + if (!dnaString) + { + return '
Please place a valid subject into the DNA modifier.
'; + } + + var characters = dnaString.split(''); + + var html = '
'; + var block = 1; + var subblock = 1; + for (index in characters) + { + if (!characters.hasOwnProperty(index) || typeof characters[index] === 'object') + { + continue; + } + + var selectBlockKey = 'select' + paramKey + 'Block'; + var selectSubblockKey = 'select' + paramKey + 'Subblock'; + var parameters = { selectBlockKey : block, selectSubblockKey : subblock }; + + var status = 'linkActive'; + if (block == selectedBlock && subblock == selectedSubblock) + { + status = 'selected'; + } + + html += '' + + index++; + if (index % blockSize == 0 && index < characters.length) + { + block++; + subblock = 1; + html += '
'; + } + else + { + subblock++; + } + } + + html += '
'; + + return html; } }); } diff --git a/nano/templates/cryo.tmpl b/nano/templates/cryo.tmpl index 56dffac33c..77075e7cbc 100644 --- a/nano/templates/cryo.tmpl +++ b/nano/templates/cryo.tmpl @@ -79,12 +79,13 @@ Used In File(s): \code\game\machinery\cryo.dm Beaker:
- {^{if isBeakerLoaded}} - {^{for beakerContents}} - {^{:volume}} units of {^{:name}}
+ {^{if isBeakerLoaded}} + {^{:beakerLabel ? beakerLabel : 'No label'}}
+ {^{if beakerVolume}} + {^{:beakerVolume}} units remaining
{{else}} Beaker is empty - {{/for}} + {{/if}} {{else}} No beaker loaded {{/if}} diff --git a/nano/templates/dna_modifier.tmpl b/nano/templates/dna_modifier.tmpl new file mode 100644 index 0000000000..b22be24bd1 --- /dev/null +++ b/nano/templates/dna_modifier.tmpl @@ -0,0 +1,310 @@ + +

Status

+ +
+ {^{if !hasOccupant}} +
Cell Unoccupied
+ {{else}} +
+ {^{:occupant.name}} =>  + {^{if occupant.stat == 0}} + Conscious + {{else occupant.stat == 1}} + Unconscious + {{else}} + DEAD + {{/if}} +
+ + {^{if !occupant.isViableSubject || !occupant.uniqueIdentity || !occupant.structuralEnzymes}} +
+ The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure. +
+ {{else occupant.stat < 2}} +
+
Health:
+ {^{if occupant.health >= 0}} + {^{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}} + {{else}} + {^{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}} + {{/if}} +
{^{:~round(occupant.health)}}
+
+ +
+
Radiation:
+ {^{:~displayBar(occupant.radiationLevel, 0, 100, 'average')}} +
{^{:~round(occupant.radiationLevel)}}
+
+ +
+
Unique Enzymes:
+
{^{:occupant.uniqueEnzymes ? occupant.uniqueEnzymes : 'Unknown'}}
+
+ + + {{/if}} + {{/if}} +
+
+ +

Operations

+
+ {^{:~link('Modify U.I.', 'link', {'selectMenuKey' : 'ui'}, selectedMenuKey == 'ui' ? 'selected' : null)}} + {^{:~link('Modify S.E.', 'link', {'selectMenuKey' : 'se'}, selectedMenuKey == 'se' ? 'selected' : null)}} + {^{:~link('Transfer Buffers', 'disk', {'selectMenuKey' : 'buffer'}, selectedMenuKey == 'buffer' ? 'selected' : null)}} + {^{:~link('Rejuvenators', 'plusthick', {'selectMenuKey' : 'rejuvenators'}, selectedMenuKey == 'rejuvenators' ? 'selected' : null)}} +
+ +
 
+ +{^{if !selectedMenuKey || selectedMenuKey == 'ui'}} +

Modify Unique Identifier

+ {^{:~displayDNABlocks(occupant.uniqueIdentity, selectedUIBlock, selectedUISubBlock, dnaBlockSize, 'UI')}} +
+
+
+ Target: +
+
+ {^{:~link('-', null, {'changeUITarget' : 0}, selectedUITarget > 0 ? null : 'disabled')}} +
 {^{:selectedUITargetHex}} 
+ {^{:~link('+', null, {'changeUITarget' : 1}, selectedUITarget < 15 ? null : 'disabled')}} +
+
+
+
+ {^{:~link('Irradiate Block', 'radiation', {'pulseUIRadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}} +
+
+{{else selectedMenuKey == 'se'}} +

Modify Structural Enzymes

+ {^{:~displayDNABlocks(occupant.structuralEnzymes, selectedSEBlock, selectedSESubBlock, dnaBlockSize, 'SE')}} +
+
+
+ {^{:~link('Irradiate Block', 'radiation', {'pulseSERadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}} +
+
+{{else selectedMenuKey == 'buffer'}} +

Transfer Buffers

+ {^{for buffers}} +

Buffer {{:#index + 1}}

+
+
+ Load Data: +
+
+ {^{:~link('Subject U.I.', 'link', {'bufferOption' : 'saveUI', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}} + {^{:~link('Subject U.I. + U.E.', 'link', {'bufferOption' : 'saveUIAndUE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}} + {^{:~link('Subject S.E.', 'link', {'bufferOption' : 'saveSE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}} + {^{:~link('From Disk', 'disk', {'bufferOption' : 'loadDisk', 'bufferId' : (#index + 1)}, !~root.hasDisk || !~root.disk.data ? 'disabled' : null)}} +
+
+ {^{if data}} +
+
+ Label: +
+
+ {^{:label ? label : 'No Label'}} +
+
+
+
+ Subject: +
+
+ {^{:owner ? owner : 'Unknown'}} +
+
+
+
+ Stored Data: +
+
+ {^{:data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}} + {^{:ue ? ' + Unique Enzymes' : ''}} +
+
+ {{else}} +
+
+ This buffer is empty. +
+
+ {{/if}} +
+
+ Options: +
+
+ {^{:~link('Clear', 'trash', {'bufferOption' : 'clear', 'bufferId' : (#index + 1)}, !data ? 'disabled' : null)}} + {^{:~link('Create Injector', 'pencil', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1)}, !data ? 'disabled' : null)}} + {^{:~link('Transfer To Subject', 'radiation', {'bufferOption' : 'transfer', 'bufferId' : (#index + 1)}, !~root.hasOccupant || !data ? 'disabled' : null)}} + {^{:~link('Save To Disk', 'disk', {'bufferOption' : 'saveDisk', 'bufferId' : (#index + 1)}, !data || !~root.hasDisk ? 'disabled' : null)}} +
+
+ {{/for}} + +

Data Disk

+ {^{if hasDisk}} + {^{if disk.data}} +
+
+ Label: +
+
+ {^{:disk.label ? disk.label : 'No Label'}} +
+
+
+
+ Subject: +
+
+ {^{:disk.owner ? disk.owner : 'Unknown'}} +
+
+
+
+ Stored Data: +
+
+ {^{:disk.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}} + {^{:disk.ue ? ' + Unique Enzymes' : ''}} +
+
+ {{else}} +
+
+ Disk is blank. +
+
+ {{/if}} + {{else}} +
+
+ No disk inserted. +
+
+ {{/if}} +
+
+ {^{:~link('Wipe Disk', 'trash', {'bufferOption' : 'wipeDisk'}, !hasDisk || !disk.data ? 'disabled' : null)}} + {^{:~link('Eject Disk', 'eject', {'bufferOption' : 'ejectDisk'}, !hasDisk ? 'disabled' : null)}} +
+
+{{else selectedMenuKey == 'rejuvenators'}} +

Rejuvenators

+
+
+ Inject: +
+
+ {^{:~link('5', 'pencil', {'injectRejuvenators' : 5}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} + {^{:~link('10', 'pencil', {'injectRejuvenators' : 10}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} + {^{:~link('20', 'pencil', {'injectRejuvenators' : 20}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} + {^{:~link('30', 'pencil', {'injectRejuvenators' : 30}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} + {^{:~link('50', 'pencil', {'injectRejuvenators' : 50}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} +
+
+
 
+
+
+ Beaker: +
+
+ {^{if isBeakerLoaded}} + {^{:beakerLabel ? beakerLabel : 'No label'}}
+ {^{if beakerVolume}} + {^{:beakerVolume}} units remaining
+ {{else}} + Beaker is empty + {{/if}} + {{else}} + No beaker loaded + {{/if}} +
+
+ {^{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}} +
+
+{{/if}} + +
 
+ +{^{if selectedMenuKey == 'ui' || selectedMenuKey == 'se'}} +

Radiation Emitter Settings

+
+
+ Intensity: +
+
+ {^{:~link('-', null, {'radiationIntensity' : 0}, radiationIntensity > 1 ? null : 'disabled')}} +
 {^{:radiationIntensity}} 
+ {^{:~link('+', null, {'radiationIntensity' : 1}, radiationIntensity < 10 ? null : 'disabled')}} +
+
+
+
+ Duration: +
+
+ {^{:~link('-', null, {'radiationDuration' : 0}, radiationDuration > 2 ? null : 'disabled')}} +
 {^{:radiationDuration}} 
+ {^{:~link('+', null, {'radiationDuration' : 1}, radiationDuration < 20 ? null : 'disabled')}} +
+
+
+
+   +
+
+ {^{:~link('Pulse Radiation', 'radiation', {'pulseRadiation' : 1}, !hasOccupant ? 'disabled' : null)}} +
+
+{{/if}} + +
 
+ +
+ +
+
+ Occupant: +
+
+ {^{:~link('Eject Occupant', 'eject', {'ejectOccupant' : 1}, locked || !hasOccupant || irradiating ? 'disabled' : null)}} +
+
+
+
+ Door Lock: +
+
+ {^{:~link('Engaged', 'locked', {'toggleLock' : 1}, locked ? 'selected' : !hasOccupant ? 'disabled' : null)}} + {^{:~link('Disengaged', 'unlocked', {'toggleLock' : 1}, !locked ? 'selected' : irradiating ? 'disabled' : null)}} +
+
+ +{^{if irradiating}} +
+
+

Irradiating Subject

+

For {^{:irradiating}} seconds.

+
+
+{{/if}} +