mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 21:40:55 +01:00
Deprecation of DNA Modifier UI, AME, misc NanoUI templates, and _old spritefiles. (#22320)
Lead-up to final push on NanoUI conversion; AME was removed (w approval from Matt), DNA modifier will not be converted to Nano at this time, a heap of templates and associated unused sprite files also removed.
This commit is contained in:
@@ -3412,9 +3412,6 @@
|
||||
#include "code\modules\power\terminal.dm"
|
||||
#include "code\modules\power\tracker.dm"
|
||||
#include "code\modules\power\turbine.dm"
|
||||
#include "code\modules\power\antimatter\containment_jar.dm"
|
||||
#include "code\modules\power\antimatter\control.dm"
|
||||
#include "code\modules\power\antimatter\shielding.dm"
|
||||
#include "code\modules\power\fusion\fusion_circuits.dm"
|
||||
#include "code\modules\power\fusion\fusion_particle_catcher.dm"
|
||||
#include "code\modules\power\fusion\fusion_reactions.dm"
|
||||
|
||||
@@ -325,499 +325,16 @@
|
||||
if(!ai_can_interact(user))
|
||||
return
|
||||
src.add_hiddenprint(user)
|
||||
ui_interact(user)
|
||||
// DNA Modifier is currently deprecated (old NanoUI code)
|
||||
to_chat(user, SPAN_WARNING("The firmware on this thing is so hopelessly out of date as to render it unusable. Dang."))
|
||||
return
|
||||
// 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 (which is inherited by /obj and /mob)
|
||||
*
|
||||
* @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, var/force_open = 1)
|
||||
if (!connected)
|
||||
// DNA Modifier is currently deprecated (old NanoUI code)
|
||||
to_chat(user, SPAN_WARNING("The firmware on this thing is so hopelessly out of date as to render it unusable. Dang."))
|
||||
return
|
||||
|
||||
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["isInjectorReady"] = injector_ready
|
||||
|
||||
data["hasDisk"] = disk ? 1 : 0
|
||||
|
||||
var/diskData[0]
|
||||
if (!disk || !disk.buf)
|
||||
diskData["data"] = null
|
||||
diskData["owner"] = null
|
||||
diskData["label"] = null
|
||||
diskData["type"] = null
|
||||
diskData["ue"] = null
|
||||
else
|
||||
diskData = disk.buf.GetData()
|
||||
data["disk"] = diskData
|
||||
|
||||
var/list/new_buffers = list()
|
||||
for(var/datum/dna2/record/buf in src.buffers)
|
||||
new_buffers += list(buf.GetData())
|
||||
data["buffers"]=new_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.real_name
|
||||
occupantData["stat"] = connected.occupant.stat
|
||||
occupantData["isViableSubject"] = 1
|
||||
if ((connected.occupant.mutations & NOCLONE) || !src.connected.occupant.dna)
|
||||
occupantData["isViableSubject"] = 0
|
||||
occupantData["health"] = connected.occupant.health
|
||||
occupantData["maxhealth"] = connected.occupant.maxhealth
|
||||
occupantData["minHealth"] = connected.occupant.species.total_health
|
||||
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.total_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
|
||||
for(var/_R in connected.beaker.reagents.reagent_volumes)
|
||||
data["beakerVolume"] += connected.beaker.reagents.reagent_volumes[_R]
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
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)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/Topic(href, href_list)
|
||||
if(..())
|
||||
return 0 // don't update uis
|
||||
if(!istype(usr.loc, /turf))
|
||||
return 0 // don't update uis
|
||||
if(!src || !src.connected)
|
||||
return 0 // don't update uis
|
||||
if(irradiating) // Make sure that it isn't already irradiating someone...
|
||||
return 0 // don't update uis
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
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
|
||||
SSnanoui.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
|
||||
randmuti(src.connected.occupant)
|
||||
else
|
||||
if(prob(95))
|
||||
randmutg(src.connected.occupant)
|
||||
else
|
||||
randmuti(src.connected.occupant)
|
||||
|
||||
src.connected.occupant.apply_damage(((src.radiation_intensity*3)+src.radiation_duration*3), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
|
||||
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 <= DNA_UI_LENGTH) && (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 = src.connected.occupant.dna.GetUISubBlock(src.selected_ui_block,src.selected_ui_subblock)
|
||||
|
||||
irradiating = src.radiation_duration
|
||||
var/lock_state = src.connected.locked
|
||||
src.connected.locked = 1//lock it
|
||||
SSnanoui.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)
|
||||
src.connected.occupant.dna.SetUISubBlock(src.selected_ui_block,src.selected_ui_subblock,block)
|
||||
src.connected.occupant.UpdateAppearance()
|
||||
src.connected.occupant.apply_damage((src.radiation_intensity+src.radiation_duration), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
|
||||
else
|
||||
if (prob(20+src.radiation_intensity))
|
||||
randmutb(src.connected.occupant)
|
||||
domutcheck(src.connected.occupant,src.connected)
|
||||
else
|
||||
randmuti(src.connected.occupant)
|
||||
src.connected.occupant.UpdateAppearance()
|
||||
src.connected.occupant.apply_damage(((src.radiation_intensity*2)+src.radiation_duration), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
|
||||
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_mob(connected.occupant, inject_amount, CHEM_BLOOD)
|
||||
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 <= DNA_SE_LENGTH) && (select_block >= 1))
|
||||
src.selected_se_block = select_block
|
||||
if ((select_subblock <= DNA_BLOCK_SIZE) && (select_subblock >= 1))
|
||||
src.selected_se_subblock = select_subblock
|
||||
//testing("User selected block [selected_se_block] (sent [select_block]), subblock [selected_se_subblock] (sent [select_block]).")
|
||||
return 1 // return 1 forces an update to all Nano uis attached to src
|
||||
|
||||
if (href_list["pulseSERadiation"])
|
||||
var/block = src.connected.occupant.dna.GetSESubBlock(src.selected_se_block,src.selected_se_subblock)
|
||||
//var/original_block=block
|
||||
//testing("Irradiating SE block [src.selected_se_block]:[src.selected_se_subblock] ([block])...")
|
||||
|
||||
irradiating = src.radiation_duration
|
||||
var/lock_state = src.connected.locked
|
||||
src.connected.locked = 1 //lock it
|
||||
SSnanoui.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))))
|
||||
// FIXME: Find out what these corresponded to and change them to the WHATEVERBLOCK they need to be.
|
||||
//if ((src.selected_se_block != 2 || src.selected_se_block != 12 || src.selected_se_block != 8 || src.selected_se_block || 10) && prob (20))
|
||||
var/real_SE_block=selected_se_block
|
||||
block = miniscramble(block, src.radiation_intensity, src.radiation_duration)
|
||||
if(prob(20))
|
||||
if (src.selected_se_block > 1 && src.selected_se_block < DNA_SE_LENGTH/2)
|
||||
real_SE_block++
|
||||
else if (src.selected_se_block > DNA_SE_LENGTH/2 && src.selected_se_block < DNA_SE_LENGTH)
|
||||
real_SE_block--
|
||||
|
||||
//testing("Irradiated SE block [real_SE_block]:[src.selected_se_subblock] ([original_block] now [block]) [(real_SE_block!=selected_se_block) ? "(SHIFTED)":""]!")
|
||||
connected.occupant.dna.SetSESubBlock(real_SE_block,selected_se_subblock,block)
|
||||
src.connected.occupant.apply_damage((src.radiation_intensity+src.radiation_duration), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
|
||||
domutcheck(src.connected.occupant,src.connected)
|
||||
else
|
||||
src.connected.occupant.apply_damage(((src.radiation_intensity*2)+src.radiation_duration), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
|
||||
if (prob(80-src.radiation_duration))
|
||||
//testing("Random bad mut!")
|
||||
randmutb(src.connected.occupant)
|
||||
domutcheck(src.connected.occupant,src.connected)
|
||||
else
|
||||
randmuti(src.connected.occupant)
|
||||
//testing("Random identity mut!")
|
||||
src.connected.occupant.UpdateAppearance()
|
||||
src.connected.locked = lock_state
|
||||
return 1 // return 1 forces an update to all Nano uis attached to src
|
||||
|
||||
if(href_list["ejectBeaker"])
|
||||
if(connected.beaker)
|
||||
var/obj/item/reagent_containers/glass/B = connected.beaker
|
||||
B.forceMove(connected.loc)
|
||||
connected.beaker = null
|
||||
return 1
|
||||
|
||||
if(href_list["ejectOccupant"])
|
||||
connected.eject_occupant()
|
||||
return 1
|
||||
|
||||
// Transfer Buffer Management
|
||||
if(href_list["bufferOption"])
|
||||
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.buf=null
|
||||
//src.temphtml = "Data saved."
|
||||
return 1
|
||||
|
||||
if (bufferOption == "ejectDisk")
|
||||
if (!src.disk)
|
||||
return
|
||||
src.disk.forceMove(get_turf(src))
|
||||
src.disk = null
|
||||
return 1
|
||||
|
||||
// All bufferOptions from here on require a bufferId
|
||||
if (!href_list["bufferId"])
|
||||
return 0
|
||||
|
||||
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)
|
||||
var/datum/dna2/record/databuf=new
|
||||
databuf.types = DNA2_BUF_UE
|
||||
databuf.dna = src.connected.occupant.dna.Clone()
|
||||
if(ishuman(connected.occupant))
|
||||
databuf.dna.real_name=connected.occupant.dna.real_name
|
||||
databuf.name = "Unique Identifier"
|
||||
src.buffers[bufferId] = databuf
|
||||
return 1
|
||||
|
||||
if (bufferOption == "saveUIAndUE")
|
||||
if(src.connected.occupant && src.connected.occupant.dna)
|
||||
var/datum/dna2/record/databuf=new
|
||||
databuf.types = DNA2_BUF_UI|DNA2_BUF_UE
|
||||
databuf.dna = src.connected.occupant.dna.Clone()
|
||||
if(ishuman(connected.occupant))
|
||||
databuf.dna.real_name=connected.occupant.dna.real_name
|
||||
databuf.name = "Unique Identifier + Unique Enzymes"
|
||||
src.buffers[bufferId] = databuf
|
||||
return 1
|
||||
|
||||
if (bufferOption == "saveSE")
|
||||
if(src.connected.occupant && src.connected.occupant.dna)
|
||||
var/datum/dna2/record/databuf=new
|
||||
databuf.types = DNA2_BUF_SE
|
||||
databuf.dna = src.connected.occupant.dna.Clone()
|
||||
if(ishuman(connected.occupant))
|
||||
databuf.dna.real_name=connected.occupant.dna.real_name
|
||||
databuf.name = "Structural Enzymes"
|
||||
src.buffers[bufferId] = databuf
|
||||
return 1
|
||||
|
||||
if (bufferOption == "clear")
|
||||
src.buffers[bufferId]=new /datum/dna2/record()
|
||||
return 1
|
||||
|
||||
if (bufferOption == "changeLabel")
|
||||
var/datum/dna2/record/buf = src.buffers[bufferId]
|
||||
var/text = sanitize(input(usr, "New Label:", "Edit Label", buf.name) as text|null, MAX_NAME_LEN)
|
||||
buf.name = text
|
||||
src.buffers[bufferId] = buf
|
||||
return 1
|
||||
|
||||
if (bufferOption == "transfer")
|
||||
if (!src.connected.occupant || (src.connected.occupant.mutations & NOCLONE) || !src.connected.occupant.dna)
|
||||
return
|
||||
|
||||
irradiating = 2
|
||||
var/lock_state = src.connected.locked
|
||||
src.connected.locked = 1//lock it
|
||||
SSnanoui.update_uis(src) // update all UIs attached to src
|
||||
|
||||
sleep(10*2) // sleep for 2 seconds
|
||||
|
||||
irradiating = 0
|
||||
src.connected.locked = lock_state
|
||||
|
||||
var/datum/dna2/record/buf = src.buffers[bufferId]
|
||||
|
||||
if ((buf.types & DNA2_BUF_UI))
|
||||
if ((buf.types & DNA2_BUF_UE))
|
||||
src.connected.occupant.real_name = buf.dna.real_name
|
||||
src.connected.occupant.name = buf.dna.real_name
|
||||
src.connected.occupant.UpdateAppearance(buf.dna.UI.Copy())
|
||||
else if (buf.types & DNA2_BUF_SE)
|
||||
src.connected.occupant.dna.SE = buf.dna.SE
|
||||
src.connected.occupant.dna.UpdateSE()
|
||||
domutcheck(src.connected.occupant,src.connected)
|
||||
src.connected.occupant.apply_damage(rand(20,50), damage_flags = DAMAGE_FLAG_DISPERSED)
|
||||
return 1
|
||||
|
||||
if (bufferOption == "createInjector")
|
||||
if (src.injector_ready || waiting_for_user_input)
|
||||
|
||||
var/success = 1
|
||||
var/obj/item/dnainjector/I = new /obj/item/dnainjector
|
||||
var/datum/dna2/record/buf = src.buffers[bufferId]
|
||||
if(href_list["createBlockInjector"])
|
||||
waiting_for_user_input=1
|
||||
var/list/selectedbuf
|
||||
if(buf.types & DNA2_BUF_SE)
|
||||
selectedbuf=buf.dna.SE
|
||||
else
|
||||
selectedbuf=buf.dna.UI
|
||||
var/blk = input(usr,"Select Block","Block") in all_dna_blocks(selectedbuf)
|
||||
success = setInjectorBlock(I,blk,buf)
|
||||
else
|
||||
I.buf = buf
|
||||
waiting_for_user_input=0
|
||||
if(success)
|
||||
I.forceMove(src.loc)
|
||||
I.name += " ([buf.name])"
|
||||
//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.buf))
|
||||
//src.temphtml = "Invalid disk. Please try again."
|
||||
return 0
|
||||
|
||||
src.buffers[bufferId]=src.disk.buf
|
||||
//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
|
||||
|
||||
var/datum/dna2/record/buf = src.buffers[bufferId]
|
||||
|
||||
src.disk.buf = buf
|
||||
src.disk.name = "data disk - '[buf.dna.real_name]'"
|
||||
//src.temphtml = "Data saved."
|
||||
return 1
|
||||
|
||||
// ui_interact(user)
|
||||
|
||||
/////////////////////////// DNA MACHINES
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
description = "A janitorial supplies company best known for their highly-effective and mostly-non-toxic 'space cleaner' formula, in wide usage throughout the Spur."
|
||||
tag_line = "Just say BLAM! And it's gone!"
|
||||
|
||||
/// Unused with the removal of Antimatter-based energy sources from the codebase.
|
||||
/singleton/cargo_supplier/eckharts
|
||||
short_name = "eckharts"
|
||||
name = "Eckhart's Energy Solutions Limited"
|
||||
|
||||
@@ -586,20 +586,6 @@
|
||||
groupable = TRUE
|
||||
spawn_amount = 1
|
||||
|
||||
/singleton/cargo_item/packagedantimatterreactorsection
|
||||
category = "engineering"
|
||||
name = "packaged antimatter reactor section"
|
||||
supplier = "eckharts"
|
||||
description = "A section of antimatter reactor shielding. Do not eat."
|
||||
price = 220
|
||||
items = list(
|
||||
/obj/item/am_shielding_container
|
||||
)
|
||||
access = ACCESS_CE
|
||||
container_type = "crate"
|
||||
groupable = TRUE
|
||||
spawn_amount = 1
|
||||
|
||||
/singleton/cargo_item/debugger
|
||||
category = "engineering"
|
||||
name = "debugger"
|
||||
@@ -840,34 +826,6 @@
|
||||
groupable = TRUE
|
||||
spawn_amount = 1
|
||||
|
||||
/singleton/cargo_item/antimattercontainmentjar
|
||||
category = "engineering"
|
||||
name = "antimatter containment jar"
|
||||
supplier = "eckharts"
|
||||
description = "Holds antimatter. Warranty void if exposed to matter."
|
||||
price = 280
|
||||
items = list(
|
||||
/obj/item/am_containment
|
||||
)
|
||||
access = ACCESS_CE
|
||||
container_type = "crate"
|
||||
groupable = TRUE
|
||||
spawn_amount = 1
|
||||
|
||||
/singleton/cargo_item/antimattercontrolunit
|
||||
category = "engineering"
|
||||
name = "antimatter control unit"
|
||||
supplier = "eckharts"
|
||||
description = "The control unit for an antimatter reactor. Probably safe."
|
||||
price = 1950
|
||||
items = list(
|
||||
/obj/machinery/power/am_control_unit
|
||||
)
|
||||
access = ACCESS_CE
|
||||
container_type = "crate"
|
||||
groupable = TRUE
|
||||
spawn_amount = 1
|
||||
|
||||
/singleton/cargo_item/alphaparticlegenerationarray
|
||||
category = "engineering"
|
||||
name = "Alpha Particle Generation Array"
|
||||
|
||||
@@ -160,7 +160,6 @@ var/list/worths = list(
|
||||
/obj/item/mining_scanner = 13,
|
||||
/obj/item/bee_smoker = 5,
|
||||
/obj/item/anomaly_core = 2000,
|
||||
/obj/item/am_containment = 500,
|
||||
/obj/item/coin/diamond = 50,
|
||||
/obj/item/coin/platinum = 25,
|
||||
/obj/item/coin/phoron = 20,
|
||||
@@ -237,7 +236,6 @@ var/list/worths = list(
|
||||
/obj/item/smes_coil/super_io = 450,
|
||||
/obj/item/smes_coil = 200,
|
||||
/obj/item/tracker_electronics = 15,
|
||||
/obj/item/am_containment = 500,
|
||||
/obj/item/syringe_cartridge = 2,
|
||||
/obj/item/suppressor = 6,
|
||||
/obj/item/fossil = 10,
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/obj/item/am_containment
|
||||
name = "antimatter containment jar"
|
||||
desc = "Holds antimatter. Warranty void if exposed to matter."
|
||||
icon = 'icons/obj/machinery/antimatter.dmi'
|
||||
icon_state = "jar"
|
||||
force = 18
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
|
||||
var/fuel = 1000
|
||||
var/stability = 100 //TODO: add all the stability things to this so its not very safe if you keep hitting in on things
|
||||
var/exploded = FALSE
|
||||
|
||||
/obj/item/am_containment/antagonist_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
. += "Antimatter is extremely volatile, and containment jars are not particularly strong. Weak explosions will reduce the container's integrity, and larger ones will cause it to explode immediately."
|
||||
/obj/item/am_containment/proc/boom()
|
||||
var/percent = 0
|
||||
if(fuel)
|
||||
percent = (fuel / initial(fuel)) * 100
|
||||
if(!exploded && percent >= 10)
|
||||
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
|
||||
exploded = TRUE
|
||||
if(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/am_containment/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
boom()
|
||||
if(2.0)
|
||||
if(prob((fuel / 10) - stability))
|
||||
boom()
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
|
||||
/obj/item/am_containment/proc/check_stability()
|
||||
if(stability <= 0)
|
||||
boom()
|
||||
|
||||
/obj/item/am_containment/proc/usefuel(var/wanted)
|
||||
if(fuel < wanted)
|
||||
wanted = fuel
|
||||
fuel -= wanted
|
||||
return wanted
|
||||
@@ -1,365 +0,0 @@
|
||||
/obj/machinery/power/am_control_unit
|
||||
name = "antimatter control unit"
|
||||
desc = "The control unit for an antimatter reactor. Probably safe."
|
||||
icon = 'icons/obj/machinery/new_ame.dmi'
|
||||
icon_state = "control"
|
||||
var/icon_mod = "on" // on, critical, or fuck
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
use_power = POWER_USE_IDLE
|
||||
idle_power_usage = 100
|
||||
active_power_usage = 1000
|
||||
|
||||
var/list/obj/machinery/am_shielding/linked_shielding
|
||||
var/list/obj/machinery/am_shielding/linked_cores
|
||||
var/obj/item/am_containment/fueljar
|
||||
var/update_shield_icons = FALSE
|
||||
var/stability = 100
|
||||
var/exploding = FALSE
|
||||
var/exploded = FALSE
|
||||
|
||||
var/active = FALSE //On or not
|
||||
var/fuel_injection = 2 //How much fuel to inject
|
||||
var/shield_icon_delay = FALSE //delays resetting for a short time
|
||||
var/reported_core_efficiency = 0
|
||||
|
||||
var/power_cycle = 0
|
||||
var/power_cycle_delay = 4 //How many ticks till produce_power is called
|
||||
var/stored_core_stability = 0
|
||||
var/stored_core_stability_delay = 0
|
||||
|
||||
var/stored_power = 0 //Power to deploy per tick
|
||||
|
||||
/obj/machinery/power/am_control_unit/assembly_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
if(!anchored)
|
||||
. += "First secure the control unit to the ground with some <b>bolts</b>."
|
||||
else
|
||||
. += "Arrange the reactor sections nearby and activate them."
|
||||
. += "Reactor sections can only be activated if they are near the control unit, but otherwise are not restricted in how they must be placed."
|
||||
|
||||
/obj/machinery/power/am_control_unit/antagonist_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
. += "The antimatter engine will quickly destabilize if the fuel injection rate is set too high, causing a large explosion."
|
||||
|
||||
/obj/machinery/power/am_control_unit/Destroy()//Perhaps damage and run stability checks rather than just del on the others
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
AMS.control_unit = null
|
||||
qdel(AMS)
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
AMS.control_unit = null
|
||||
qdel(AMS)
|
||||
|
||||
QDEL_NULL(fueljar)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/am_control_unit/process()
|
||||
if(exploding && !exploded)
|
||||
message_admins("AME explosion at ([x],[y],[z] - <A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) - Last touched by [fingerprintslast]",0,1)
|
||||
exploded=1
|
||||
explosion(get_turf(src),8,10,12,15)
|
||||
if(src)
|
||||
qdel(src)
|
||||
|
||||
if(update_shield_icons && !shield_icon_delay)
|
||||
check_shield_icons()
|
||||
update_shield_icons = 0
|
||||
|
||||
if(stat & (NOPOWER|BROKEN) || !active)//can update the icons even without power
|
||||
return
|
||||
|
||||
if(!fueljar)//No fuel but we are on, shutdown
|
||||
toggle_power()
|
||||
//Angry buzz or such here
|
||||
return
|
||||
|
||||
check_core_stability()
|
||||
|
||||
ADD_TO_POWERNET(src, stored_power)
|
||||
|
||||
power_cycle++
|
||||
if(power_cycle >= power_cycle_delay)
|
||||
produce_power()
|
||||
power_cycle = 0
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/produce_power()
|
||||
playsound(get_turf(src), 'sound/effects/air_seal.ogg', 25, TRUE)
|
||||
for(var/thing in linked_cores)
|
||||
flick("core2", thing)
|
||||
if(reported_core_efficiency <= 0)
|
||||
return FALSE //Something is wrong
|
||||
var/core_damage = 0
|
||||
var/fuel = fueljar.usefuel(fuel_injection)
|
||||
|
||||
stored_power = fuel * AM_POWER_FACTOR
|
||||
// Now check if the cores could deal with it safely, this is done after so you can overload for more power if needed, still a bad idea
|
||||
if(fuel > (2 * reported_core_efficiency)) //More fuel has been put in than the current cores can deal with
|
||||
if(prob(50))
|
||||
core_damage = 1 //Small chance of damage
|
||||
if((fuel - reported_core_efficiency) > 5)
|
||||
core_damage = 5 //Now its really starting to overload the cores
|
||||
if((fuel - reported_core_efficiency) > 10)
|
||||
core_damage = 20 //Welp now you did it, they wont stand much of this
|
||||
if(core_damage == 0)
|
||||
return
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
AMS.stability -= core_damage
|
||||
AMS.check_stability(TRUE)
|
||||
playsound(get_turf(src), 'sound/effects/bang.ogg', 50, 1)
|
||||
|
||||
/obj/machinery/power/am_control_unit/emp_act(severity)
|
||||
. = ..()
|
||||
|
||||
switch(severity)
|
||||
if(EMP_HEAVY)
|
||||
if(active)
|
||||
toggle_power()
|
||||
stability -= rand(15, 30)
|
||||
if(EMP_LIGHT)
|
||||
if(active)
|
||||
toggle_power()
|
||||
stability -= rand(10, 20)
|
||||
check_stability()
|
||||
|
||||
/obj/machinery/power/am_control_unit/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
stability -= 60
|
||||
if(2.0)
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
|
||||
/obj/machinery/power/am_control_unit/power_change()
|
||||
..()
|
||||
if(stat & NOPOWER && active)
|
||||
toggle_power()
|
||||
|
||||
/obj/machinery/power/am_control_unit/update_icon()
|
||||
if(active)
|
||||
icon_state = "control_[icon_mod]"
|
||||
else
|
||||
icon_state = "control"
|
||||
|
||||
/obj/machinery/power/am_control_unit/attackby(obj/item/attacking_item, mob/user)
|
||||
if(attacking_item.tool_behaviour == TOOL_WRENCH)
|
||||
if(!anchored)
|
||||
attacking_item.play_tool_sound(get_turf(src), 75)
|
||||
user.visible_message("<b>[user.name]</b> secures \the [src] to the floor.", \
|
||||
SPAN_NOTICE("You secure the anchor bolts to the floor."), \
|
||||
SPAN_NOTICE("You hear a ratcheting noise."))
|
||||
anchored = TRUE
|
||||
update_shield_icons = 2
|
||||
check_shield_icons()
|
||||
connect_to_network()
|
||||
else if(!LAZYLEN(linked_shielding))
|
||||
attacking_item.play_tool_sound(get_turf(src), 75)
|
||||
user.visible_message("<b>[user]</b> unsecures \the [src].", \
|
||||
SPAN_NOTICE("You remove the anchor bolts."), \
|
||||
SPAN_NOTICE("You hear a ratcheting noise."))
|
||||
anchored = FALSE
|
||||
disconnect_from_network()
|
||||
else
|
||||
to_chat(user, SPAN_WARNING("Once bolted and linked to a shielding unit it \the [src] is unable to be moved!"))
|
||||
return
|
||||
|
||||
if(istype(attacking_item, /obj/item/am_containment))
|
||||
if(fueljar)
|
||||
to_chat(user, SPAN_WARNING("There is already \a [fueljar] loaded!"))
|
||||
return
|
||||
fueljar = attacking_item
|
||||
user.drop_from_inventory(attacking_item, src)
|
||||
message_admins("AME loaded with fuel by [user.real_name] ([user.key]) at ([x],[y],[z] - <A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
user.visible_message("<b>[user]</b> loads \the [attacking_item] into \the [src].",
|
||||
SPAN_NOTICE("You load \the [attacking_item] into \the [src]."),
|
||||
SPAN_NOTICE("You hear a thunk."))
|
||||
return
|
||||
|
||||
if(attacking_item.force >= 20)
|
||||
user.do_attack_animation(src, attacking_item)
|
||||
stability -= attacking_item.force / 2
|
||||
check_stability()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/am_control_unit/attack_hand(mob/user)
|
||||
if(anchored)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/add_shielding(var/obj/machinery/am_shielding/AMS, var/AMS_linking = 0)
|
||||
if(!istype(AMS))
|
||||
return FALSE
|
||||
if(!anchored)
|
||||
return FALSE
|
||||
if(!AMS_linking && !AMS.link_control(src))
|
||||
return FALSE
|
||||
LAZYDISTINCTADD(linked_shielding, AMS)
|
||||
update_shield_icons = 1
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/remove_shielding(var/obj/machinery/am_shielding/AMS)
|
||||
if(!istype(AMS))
|
||||
return FALSE
|
||||
LAZYREMOVE(linked_shielding, AMS)
|
||||
update_shield_icons = 2
|
||||
if(active)
|
||||
toggle_power()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/check_stability()//TODO: make it break when low also might want to add a way to fix it like a part or such that can be replaced
|
||||
if(stability <= 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/power/am_control_unit/toggle_power()
|
||||
active = !active
|
||||
if(active)
|
||||
update_use_power(POWER_USE_ACTIVE)
|
||||
visible_message(SPAN_NOTICE("\The [src] starts up."))
|
||||
else
|
||||
update_use_power(POWER_USE_IDLE)
|
||||
visible_message(SPAN_NOTICE("\The [src] shuts down."))
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
AMS.update_icon()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/check_shield_icons()//Forces icon_update for all shields
|
||||
if(shield_icon_delay)
|
||||
return
|
||||
shield_icon_delay = TRUE
|
||||
if(update_shield_icons == 2)//2 means to clear everything and rebuild
|
||||
for(var/obj/machinery/am_shielding/neighbor in cardinalrange(loc))
|
||||
if(!neighbor.control_unit)
|
||||
LAZYADD(linked_shielding, neighbor)
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
if(AMS.processing)
|
||||
AMS.shutdown_core()
|
||||
AMS.control_unit = null
|
||||
addtimer(CALLBACK(src, PROC_REF(ams_do_scan), AMS), 1 SECOND)
|
||||
LAZYCLEARLIST(linked_shielding)
|
||||
else
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
AMS.update_icon()
|
||||
addtimer(CALLBACK(src, PROC_REF(clear_shield_icon_delay)), 2 SECONDS)
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/ams_do_scan(var/obj/machinery/am_shielding/AMS)
|
||||
AMS.controllerscan()
|
||||
AMS.assimilate()
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/clear_shield_icon_delay()
|
||||
shield_icon_delay = FALSE
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/check_core_stability()
|
||||
if(!LAZYLEN(linked_cores))
|
||||
return
|
||||
stored_core_stability = 0
|
||||
for(var/thing in linked_cores)
|
||||
var/obj/machinery/am_shielding/AMS = thing
|
||||
if(QDELETED(AMS))
|
||||
continue
|
||||
stored_core_stability += AMS.stability
|
||||
stored_core_stability /= LAZYLEN(linked_cores)
|
||||
switch(stored_core_stability)
|
||||
if(0 to 24)
|
||||
icon_mod = "fuck"
|
||||
if(25 to 49)
|
||||
icon_mod = "critical"
|
||||
if(50 to INFINITY)
|
||||
icon_mod = "on"
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/power/am_control_unit/interact(mob/user)
|
||||
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
||||
if(!issilicon(user))
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=AMcontrol")
|
||||
return
|
||||
return ui_interact(user)
|
||||
|
||||
/obj/machinery/power/am_control_unit/ui_interact(mob/user, ui_key = "main")
|
||||
if(!user)
|
||||
return
|
||||
|
||||
var/list/fueljar_data = null
|
||||
if(fueljar)
|
||||
fueljar_data = list(
|
||||
"fuel" = fueljar.fuel,
|
||||
"fuel_max" = initial(fueljar.fuel),
|
||||
"injecting" = fuel_injection
|
||||
)
|
||||
|
||||
var/list/data = list(
|
||||
"active" = active,
|
||||
"linked_shields" = LAZYLEN(linked_shielding),
|
||||
"linked_cores" = LAZYLEN(linked_cores),
|
||||
"efficiency" = reported_core_efficiency,
|
||||
"stability" = stored_core_stability,
|
||||
"stored_power" = stored_power,
|
||||
"fueljar" = fueljar_data,
|
||||
"siliconUser" = issilicon(user)
|
||||
)
|
||||
|
||||
var/datum/nanoui/ui = SSnanoui.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, "ame.tmpl", "Antimatter Control Unit", 500, data["siliconUser"] ? 465 : 390)
|
||||
// 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(TRUE)
|
||||
else
|
||||
// The UI is already open so push the new data to it
|
||||
ui.push_data(data)
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/Topic(href, href_list)
|
||||
if(..())
|
||||
return TRUE
|
||||
if(href_list["close"])
|
||||
if(usr.machine == src)
|
||||
usr.unset_machine()
|
||||
return TRUE
|
||||
//Ignore input if we are broken or guy is not touching us, AI can control from a ways away
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=AMcontrol")
|
||||
return
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=AMcontrol")
|
||||
usr.unset_machine()
|
||||
return
|
||||
|
||||
if(href_list["togglestatus"])
|
||||
toggle_power()
|
||||
message_admins("AME toggled [active?"on":"off"] by [usr.real_name] ([usr.key]) at ([x],[y],[z] - <A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
return TRUE
|
||||
|
||||
if(href_list["refreshicons"])
|
||||
update_shield_icons = 2 // Fuck it
|
||||
return TRUE
|
||||
|
||||
if(href_list["ejectjar"])
|
||||
if(fueljar)
|
||||
message_admins("AME fuel jar ejected by [usr.real_name] ([usr.key]) at ([x],[y],[z] - <A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
fueljar.forceMove(src.loc)
|
||||
fueljar = null
|
||||
//fueljar.control_unit = null currently it does not care where it is
|
||||
//update_icon() when we have the icon for it
|
||||
return TRUE
|
||||
|
||||
if(href_list["set_strength"])
|
||||
var/newval = input("Enter new injection strength") as num|null
|
||||
if(isnull(newval))
|
||||
return
|
||||
fuel_injection = newval
|
||||
fuel_injection = max(1, fuel_injection)
|
||||
message_admins("AME injection strength set to [fuel_injection] by [usr.real_name] ([usr.key]) at ([x],[y],[z] - <A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
return TRUE
|
||||
|
||||
if(href_list["refreshstability"])
|
||||
check_core_stability()
|
||||
return TRUE
|
||||
|
||||
updateDialog()
|
||||
return TRUE
|
||||
@@ -1,258 +0,0 @@
|
||||
//like orange but only checks north/south/east/west for one step
|
||||
/proc/cardinalrange(var/center)
|
||||
var/list/things = list()
|
||||
for(var/direction in GLOB.cardinals)
|
||||
var/turf/T = get_step(center, direction)
|
||||
if(!T)
|
||||
continue
|
||||
things += T.contents
|
||||
return things
|
||||
|
||||
/obj/machinery/am_shielding
|
||||
name = "antimatter reactor section"
|
||||
desc = "A shielding component for an antimatter reactor. Looks delicate."
|
||||
icon = 'icons/obj/machinery/new_ame.dmi'
|
||||
icon_state = "shield"
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
dir = NORTH
|
||||
use_power = POWER_USE_OFF
|
||||
idle_power_usage = 0
|
||||
active_power_usage = 0
|
||||
|
||||
var/obj/machinery/power/am_control_unit/control_unit = null
|
||||
var/processing = FALSE //To track if we are in the update list or not, we need to be when we are damaged and if we ever
|
||||
var/stability = 100 //If this gets low bad things tend to happen
|
||||
var/efficiency = 1 //How many cores this core counts for when doing power processing, phoron in the air and stability could affect this
|
||||
var/coredirs = 0
|
||||
var/dirs = 0
|
||||
var/mapped = FALSE //Set to 1 to ignore usual suicide if it doesn't immediately find a control_unit
|
||||
|
||||
/obj/machinery/am_shielding/mechanics_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
. += "Antimatter shielding sections must be beside an anchored control unit or another shielding section. If either are destroyed, the section will disappear."
|
||||
|
||||
/obj/machinery/am_shielding/antagonist_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
. += "Antimatter shielding sections are delicate. Attacking the shielding unit with a damaging object will reduce its stability, as will explosions. If the stability hits zero, the reactor may explode."
|
||||
|
||||
// Stupidly easy way to use it in maps
|
||||
/obj/machinery/am_shielding/map
|
||||
mapped = TRUE
|
||||
|
||||
/obj/machinery/am_shielding/Initialize(mapload, var/obj/machinery/power/am_control_unit/AMC)
|
||||
. = ..()
|
||||
if(!AMC)
|
||||
if (!mapped)
|
||||
WARNING("AME sector somehow created without a parent control unit!")
|
||||
controllerscan()
|
||||
return
|
||||
link_control(AMC)
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/machinery/am_shielding/LateInitialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/am_shielding/proc/link_control(var/obj/machinery/power/am_control_unit/AMC)
|
||||
if(!istype(AMC))
|
||||
return FALSE
|
||||
if(control_unit && control_unit != AMC)
|
||||
return FALSE // already have one
|
||||
control_unit = AMC
|
||||
return control_unit.add_shielding(src, TRUE)
|
||||
|
||||
/obj/machinery/am_shielding/Destroy()
|
||||
if(control_unit)
|
||||
control_unit.remove_shielding(src)
|
||||
if(processing)
|
||||
shutdown_core()
|
||||
visible_message(SPAN_WARNING("\The [src] melts!"))
|
||||
// Might want to have it leave a mess on the floor but no sprites for now
|
||||
return ..()
|
||||
|
||||
/obj/machinery/am_shielding/proc/controllerscan(var/priorscan = FALSE)
|
||||
//Make sure we are the only one here
|
||||
if(!isturf(loc))
|
||||
qdel(src)
|
||||
return
|
||||
for(var/obj/machinery/am_shielding/AMS in loc.contents - src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//Search for shielding first
|
||||
for(var/obj/machinery/am_shielding/AMS in cardinalrange(src))
|
||||
if(AMS && AMS.control_unit && link_control(AMS.control_unit))
|
||||
break
|
||||
|
||||
if(!control_unit)//No other guys nearby, look for a control unit
|
||||
for(var/obj/machinery/power/am_control_unit/AMC in cardinalrange(src))
|
||||
if(AMC.add_shielding(src))
|
||||
break
|
||||
if(!mapped) // Prevent rescanning and suicide if it's part of the map
|
||||
if(!priorscan)
|
||||
addtimer(CALLBACK(src, PROC_REF(controllerscan), TRUE), 20)
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
// Find surrounding unconnected shielding and add them to our controller
|
||||
/obj/machinery/am_shielding/proc/assimilate()
|
||||
if(!control_unit)
|
||||
return // nothing to share :'^[
|
||||
for(var/obj/machinery/am_shielding/neighbor in cardinalrange(src))
|
||||
if(neighbor && !neighbor.control_unit)
|
||||
neighbor.link_control(control_unit)
|
||||
neighbor.assimilate() // recursion is fun, right?
|
||||
|
||||
/obj/machinery/am_shielding/Cross(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||
if(air_group || (height==0))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/am_shielding/process()
|
||||
if(!processing)
|
||||
. = PROCESS_KILL
|
||||
//TODO: core functions and stability
|
||||
//TODO: think about checking the airmix for phoron and increasing power output
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/emp_act()//Immune due to not really much in the way of electronics.
|
||||
. = ..()
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/am_shielding/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
stability -= 80
|
||||
if(2.0)
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
|
||||
/obj/machinery/am_shielding/update_icon()
|
||||
ClearOverlays()
|
||||
coredirs = 0
|
||||
dirs = 0
|
||||
for(var/direction in GLOB.alldirs)
|
||||
var/turf/T = get_step(loc, direction)
|
||||
for(var/obj/machinery/machine in T)
|
||||
// Detect cores
|
||||
if(istype(machine, /obj/machinery/am_shielding))
|
||||
var/obj/machinery/am_shielding/AMS = machine
|
||||
if(AMS.control_unit == control_unit && AMS.processing)
|
||||
coredirs |= direction
|
||||
|
||||
// Detect cores, shielding, and control boxen.
|
||||
if(direction in GLOB.cardinals)
|
||||
if(istype(machine, /obj/machinery/am_shielding))
|
||||
var/obj/machinery/am_shielding/AMS = machine
|
||||
if(AMS.control_unit == control_unit)
|
||||
dirs |= direction
|
||||
else if(istype(machine, /obj/machinery/power/am_control_unit))
|
||||
var/obj/machinery/power/am_control_unit/AMCU = machine
|
||||
if(AMCU == control_unit)
|
||||
dirs |= direction
|
||||
|
||||
var/is_core = core_check()
|
||||
|
||||
// Set our overlay
|
||||
if(!is_core)
|
||||
icon_state = "shield_[dirs]"
|
||||
if(is_core)
|
||||
icon_state = "core[control_unit && control_unit.active]"
|
||||
if(!processing)
|
||||
setup_core()
|
||||
else if(processing)
|
||||
shutdown_core()
|
||||
|
||||
/obj/machinery/am_shielding/attackby(obj/item/attacking_item, mob/user)
|
||||
if(!istype(attacking_item) || !user)
|
||||
return
|
||||
if(attacking_item.force > 10)
|
||||
user.do_attack_animation(src, attacking_item)
|
||||
stability -= attacking_item.force / 2
|
||||
check_stability()
|
||||
return ..()
|
||||
|
||||
//Scans cards for shields or the control unit and if all there it
|
||||
/obj/machinery/am_shielding/proc/core_check()
|
||||
for(var/direction in GLOB.alldirs)
|
||||
var/found_am_device = FALSE
|
||||
for(var/obj/machinery/machine in get_step(loc, direction))
|
||||
if(!machine)
|
||||
continue
|
||||
if(istype(machine, /obj/machinery/am_shielding) || istype(machine, /obj/machinery/power/am_control_unit))
|
||||
found_am_device = TRUE
|
||||
break
|
||||
if(!found_am_device)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/am_shielding/proc/setup_core()
|
||||
processing = TRUE
|
||||
if(!control_unit)
|
||||
return
|
||||
LAZYADD(control_unit.linked_cores, src)
|
||||
control_unit.reported_core_efficiency += efficiency
|
||||
|
||||
/obj/machinery/am_shielding/proc/shutdown_core()
|
||||
processing = 0
|
||||
if(!control_unit)
|
||||
return
|
||||
LAZYREMOVE(control_unit.linked_cores, src)
|
||||
control_unit.reported_core_efficiency -= efficiency
|
||||
|
||||
/obj/machinery/am_shielding/proc/check_stability(var/injecting_fuel = FALSE)
|
||||
if(stability > 0)
|
||||
return
|
||||
if(injecting_fuel && control_unit)
|
||||
control_unit.exploding = TRUE
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/am_shielding/proc/recalc_efficiency(var/new_efficiency)//tbh still not 100% sure how I want to deal with efficiency so this is likely temp
|
||||
if(!control_unit || !processing)
|
||||
return
|
||||
if(stability < 50)
|
||||
new_efficiency /= 2
|
||||
control_unit.reported_core_efficiency += (new_efficiency - efficiency)
|
||||
efficiency = new_efficiency
|
||||
|
||||
/obj/item/am_shielding_container
|
||||
name = "packaged antimatter reactor section"
|
||||
desc = "A section of antimatter reactor shielding. Do not eat."
|
||||
icon = 'icons/obj/machinery/antimatter.dmi'
|
||||
icon_state = "box"
|
||||
item_state = "electronic"
|
||||
throwforce = 5
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
|
||||
/obj/item/am_shielding_container/mechanics_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
. += "To deploy, drop near an antimatter control unit or an existing deployed section and use your multitool on it."
|
||||
|
||||
/obj/item/am_shielding_container/attackby(obj/item/attacking_item, mob/user)
|
||||
if(attacking_item.tool_behaviour == TOOL_MULTITOOL && isturf(loc))
|
||||
if(locate(/obj/machinery/am_shielding) in loc)
|
||||
to_chat(user, SPAN_WARNING("There is already an antimatter reactor section there."))
|
||||
return
|
||||
|
||||
//Search for shielding first
|
||||
for(var/obj/machinery/am_shielding/AMS in cardinalrange(src))
|
||||
if(AMS.control_unit)
|
||||
new /obj/machinery/am_shielding(loc, AMS.control_unit)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//No other guys nearby, look for a control unit
|
||||
var/obj/machinery/power/am_control_unit/AMC = locate() in cardinalrange(src)
|
||||
if(AMC?.anchored)
|
||||
new /obj/machinery/am_shielding(loc, AMC)
|
||||
qdel(src)
|
||||
else //Stranded & Alone
|
||||
to_chat(user, SPAN_WARNING("\The [src] couldn't connect to an Antimatter Control Unit."))
|
||||
return
|
||||
|
||||
..()
|
||||
@@ -0,0 +1,7 @@
|
||||
# Your name.
|
||||
author: Batrachophrenoboocosmomachia
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscdel: "Removes deprecated AME code and associated power spritefiles."
|
||||
- rscdel: "Removes DNA Modifier NanoUI, replacing interaction behavior with a feedback message."
|
||||
- rscdel: "Removes old NanoUI templates for objects whose UIs have already been converted to TGUI, or which had already been removed from the server."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 29 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 103 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 492 B |
@@ -1,216 +0,0 @@
|
||||
<!--
|
||||
Title: Air Alarm
|
||||
Used In File(s): \code\game\machinery\alarm.dm
|
||||
|
||||
#define AALARM_MODE_SCRUBBING 1
|
||||
#define AALARM_MODE_REPLACEMENT 2 //like scrubbing, but faster.
|
||||
#define AALARM_MODE_PANIC 3 //constantly sucks all air
|
||||
#define AALARM_MODE_CYCLE 4 //sucks off all air, then refill and switches to scrubbing
|
||||
#define AALARM_MODE_FILL 5 //emergency fill
|
||||
#define AALARM_MODE_OFF 6 //Shuts it all down.
|
||||
|
||||
#define AALARM_SCREEN_MAIN 1
|
||||
#define AALARM_SCREEN_VENT 2
|
||||
#define AALARM_SCREEN_SCRUB 3
|
||||
#define AALARM_SCREEN_MODE 4
|
||||
#define AALARM_SCREEN_SENSORS 5
|
||||
|
||||
-->
|
||||
<H1>Air Status</H1>
|
||||
{{if data.has_environment}}
|
||||
{{for data.environment}}
|
||||
{{:value.name}}:
|
||||
{{if value.danger_level == 2}}
|
||||
<span class='bad'>
|
||||
{{else value.danger_level == 1}}
|
||||
<span class='average'>
|
||||
{{else}}
|
||||
<span class='good'>
|
||||
{{/if}}
|
||||
{{:helper.fixed(value.value, 1)}}
|
||||
</span>{{:value.unit}}<br>
|
||||
{{/for}}
|
||||
Local Status: {{if data.total_danger == 2}}
|
||||
<span class='bad'>DANGER: Internals Required
|
||||
{{else data.total_danger == 1}}
|
||||
<span class='average'>Caution
|
||||
{{else}}
|
||||
<span class='good'>Optimal
|
||||
{{/if}}
|
||||
</span><br>
|
||||
Area Status: {{if data.atmos_alarm}}<span class='bad'>Atmosphere alert in area</span>{{else}}No alerts{{/if}}
|
||||
{{else}}
|
||||
<span class='bad'>Warning: Cannot obtain air sample for analysis.</span>
|
||||
{{/if}}
|
||||
<HR>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<tr>
|
||||
<td>
|
||||
<H3>Remote Control</H3>
|
||||
</td>
|
||||
<td>
|
||||
<H3>Thermostat</H3>
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
<td>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
{{:helper.link('Off', null, { 'rcon' : 1}, data.remote_connection && !data.remote_access ? (data.rcon == 1 ? 'yellowButton' : 'disabled') : null, data.rcon == 1 ? 'selected' : null)}}
|
||||
{{:helper.link('Auto', null, { 'rcon' : 2}, data.remote_connection && !data.remote_access ? (data.rcon == 2 ? 'yellowButton' : 'disabled') : null, data.rcon == 2 ? 'selected' : null)}}
|
||||
{{:helper.link('On', null, { 'rcon' : 3}, data.remote_connection && !data.remote_access ? (data.rcon == 3 ? 'yellowButton' : 'disabled') : null, data.rcon == 3 ? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
{{:helper.link(data.target_temperature, null, { 'temperature' : 1})}}
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<HR>
|
||||
{{if (data.locked && !data.remote_connection) || (data.remote_connection && ! data.remote_access)}}
|
||||
{{if data.remote_connection}}
|
||||
<span class='noticePlaceholder'>(Current remote control settings and alarm status restricts access.)</span>
|
||||
{{else}}
|
||||
<span class='noticePlaceholder'>(Swipe ID card to unlock interface.)</span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{if data.screen != 1}}
|
||||
<div class="item">{{:helper.link('Main Menu', null, { 'screen' : 1})}}</div>
|
||||
{{/if}}
|
||||
{{if data.screen == 1}}
|
||||
<div class="item">
|
||||
{{if data.atmos_alarm}}
|
||||
{{:helper.link('Reset - Area Atmospheric Alarm', null, { 'atmos_reset' : 1})}}
|
||||
{{else}}
|
||||
{{:helper.link('Activate - Area Atmospheric Alarm', null, { 'atmos_alarm' : 1})}}
|
||||
{{/if}}
|
||||
</div>
|
||||
<hr>
|
||||
<div class="item">
|
||||
{{:helper.link('Scrubbers Control', null, { 'screen' : 3})}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('Vents Control', null, { 'screen' : 2})}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('Set Environmental Mode', null, { 'screen' : 4})}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('Sensor Settings', null, { 'screen' : 5})}}
|
||||
</div>
|
||||
<hr>
|
||||
{{if data.mode==3}}
|
||||
{{:helper.link('PANIC SIPHON ACTIVE - Turn siphoning off', null, { 'mode' : 1}, null, 'redButton')}}
|
||||
{{else}}
|
||||
{{:helper.link('ACTIVATE PANIC SIPHON IN AREA', null, { 'mode' : 3}, null, 'yellowButton')}}
|
||||
{{/if}}
|
||||
{{else data.screen == 2}}
|
||||
{{for data.vents}}
|
||||
<div class="item">
|
||||
{{:value.long_name}}</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Operating:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link(value.power ? 'On' : 'Off', null, { 'id_tag' : value.id_tag, 'command' : 'power', 'val' : value.power ? 0 : 1}, null, value.power ? null : 'redButton')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Operation Mode:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:value.direction == "siphon" ? 'Siphoning' : 'Pressurizing'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Pressure Checks:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('External', null, { 'id_tag' : value.id_tag, 'command' : 'checks', 'val' : value.checks^1}, null, value.checks&1 ? 'selected' : null)}}
|
||||
{{:helper.link('Internal', null, { 'id_tag' : value.id_tag, 'command' : 'checks', 'val' : value.checks^2}, null, value.checks&2 ? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
External Pressure Bound:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link(helper.fixed(value.external,2), null, { 'id_tag' : value.id_tag, 'command' : 'set_external_pressure'})}}
|
||||
{{:helper.link('Reset', null, { 'id_tag' : value.id_tag, 'command' : 'reset_external_pressure'})}}
|
||||
</div>
|
||||
</div>
|
||||
<HR>
|
||||
{{empty}}
|
||||
No vents connected.
|
||||
{{/for}}
|
||||
{{else data.screen == 3}}
|
||||
{{for data.scrubbers}}
|
||||
<div class="item">
|
||||
{{:value.long_name}}</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Operating:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link(value.power ? 'On' : 'Off', null, { 'id_tag' : value.id_tag, 'command' : 'power', 'val' : value.power ? 0 : 1}, null, value.power ? null : 'redButton')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Operation Mode:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link(value.scrubbing ? 'Scrubbing' : 'Siphoning', null, { 'id_tag' : value.id_tag, 'command' : 'scrubbing', 'val' : value.scrubbing ? 0 : 1}, null, value.scrubbing ? null : 'redButton')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Filters:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{for value.filters :filterValue:filterIndex}}
|
||||
{{:helper.link(filterValue.name, null, { 'id_tag' : value.id_tag, 'command' : filterValue.command, 'val' : filterValue.val ? 0 : 1}, null, filterValue.val ? 'selected' : null)}}
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
<HR>
|
||||
{{empty}}
|
||||
No scrubbers connected.
|
||||
{{/for}}
|
||||
{{else data.screen == 4}}
|
||||
<H3>Environmental Modes</H3>
|
||||
{{for data.modes}}
|
||||
<div class="item">
|
||||
{{:helper.link(value.name, null, { 'mode' : value.mode }, null, value.selected ? (value.danger ? 'redButton' : 'selected') : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
{{else data.screen == 5}}
|
||||
<H3>Alarm Threshold</H3>
|
||||
Partial pressure for gases.
|
||||
<table class='fixed'>
|
||||
<tr>
|
||||
<td></td><td><span class='bad'>min2</span></td><td><span class='average'>min1</span></td><td><span class='average'>max1</span></td><td><span class='bad'>max2</span></td>
|
||||
</tr>
|
||||
{{for data.thresholds}}
|
||||
<tr>
|
||||
<td>{{:value.name}}</td>
|
||||
{{for value.settings :settingsValue:settingsIndex}}
|
||||
<td>
|
||||
{{:helper.link(settingsValue.selected >= 0 ? helper.fixed(settingsValue.selected, 2) : "Off", null, { 'command' : 'set_threshold', 'env' : settingsValue.env, 'var' : settingsValue.val })}}
|
||||
</td>
|
||||
{{/for}}
|
||||
</tr>
|
||||
{{/for}}
|
||||
<table>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,37 +0,0 @@
|
||||
<!--
|
||||
Title: Alarm Monitor Console (Main content)
|
||||
Used In File(s): \code\modules\nano\modules\alarm_monitor.dm
|
||||
"MD5 checks should be good enough"
|
||||
-->
|
||||
{{for data.categories}}
|
||||
<H2><span class="itemLabelWidest">{{:value.category}}</span></H2>
|
||||
{{for value.alarms :alarmValue:alarmIndex}}
|
||||
{{if alarmValue.origin_lost}}
|
||||
{{:alarmValue.name}} <span class='notice'>Alarm Origin Lost</span><br>
|
||||
{{else}}
|
||||
{{:alarmValue.name}}<br>
|
||||
{{/if}}
|
||||
{{if alarmValue.has_cameras || alarmValue.lost_sources != ""}}
|
||||
<div class="item">
|
||||
{{if alarmValue.has_cameras}}
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
{{for alarmValue.cameras :cameraValue:cameraIndex}}
|
||||
{{if cameraValue.deact}}
|
||||
{{:helper.link(cameraValue.name + " (deactivated)", '', {}, 'inactive')}}
|
||||
{{else}}
|
||||
{{:helper.link(cameraValue.name, '', {'switchTo' : cameraValue.camera})}}
|
||||
{{/if}}
|
||||
{{/for}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if alarmValue.lost_sources != ""}}
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
<H4><span class='notice'>Lost Alarm Sources: {{:alarmValue.lost_sources}}</span></H4>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{empty}}
|
||||
<span class="white">--All Systems Nominal</span>
|
||||
{{/for}}
|
||||
{{/for}}
|
||||
@@ -1,56 +0,0 @@
|
||||
<div class="line">
|
||||
<div class="statusLabel">Status:</div>
|
||||
{{if data.active}}
|
||||
<div class="statusValue average">Injecting</div>
|
||||
{{else}}
|
||||
<div class="statusValue good">Standby</div>
|
||||
{{/if}}
|
||||
{{:helper.link("Toggle Status", "gear", {"togglestatus":1},null)}}
|
||||
</div>
|
||||
{{if !data.fueljar}}
|
||||
<div class="notice">No fuel jar detected.</div>
|
||||
{{else}}
|
||||
<div class="statusDisplay">
|
||||
<div class="line">
|
||||
<div class="statusLabel">Fuel:</div>
|
||||
<div class="statusValue">{{:data.fueljar.fuel}}/{{:data.fueljar.fuel_max}}</div>
|
||||
{{:helper.link("Eject", "eject", {"ejectjar":1},null,'floatRight')}}
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Injecting:</div>
|
||||
<div class="statusValue">
|
||||
{{:helper.link(data.fueljar.injecting+" units", 'carat-2-n-s', {'set_strength': 1})}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="statusDisplay">
|
||||
<div class="line">
|
||||
<div class="statusLabel">Stability:</div>
|
||||
<div class="statusValue">
|
||||
{{:helper.displayBar(data.stability,0,100,"good")}}
|
||||
{{:data.stability}}%
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Shielding Count:</div>
|
||||
<div class="statusValue">{{:data.linked_shields}}</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Cores:</div>
|
||||
<div class="statusValue">{{:data.linked_cores}}</div>
|
||||
{{:helper.link("Refresh Parts",null,{"refreshicons" : 1},(data.active?"disabled":null),'floatRight')}}
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Current Efficiency:</div>
|
||||
<div class="statusValue">{{:data.efficiency}}</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Average Efficiency:</div>
|
||||
<div class="statusValue">{{:data.stability}}</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Last Produced:</div>
|
||||
<div class="statusValue">{{:data.stored_power}}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,18 +0,0 @@
|
||||
<H1>Priority Alerts</H1>
|
||||
{{for data.priority_alarms}}
|
||||
<div class="item">
|
||||
{{:value.name}} {{:helper.link('Reset', null, {'clear_alarm' : value.ref})}}
|
||||
</div>
|
||||
{{empty}}
|
||||
No priority alerts detected.
|
||||
{{/for}}
|
||||
|
||||
<H3>Minor Alerts</H3>
|
||||
{{for data.minor_alarms}}
|
||||
<div class="item">
|
||||
{{:value.name}} {{:helper.link('Reset', null, {'clear_alarm' : value.ref})}}
|
||||
</div>
|
||||
{{empty}}
|
||||
No minor alerts detected.
|
||||
{{/for}}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
<!--
|
||||
Title: Bioballistic Delivery System UI
|
||||
Used In File(s): \code\modules\hydroponics\seed_machines.dm
|
||||
-->
|
||||
|
||||
{{if data.activity}}
|
||||
Scanning...
|
||||
{{else}}
|
||||
<h3>Buffered Genetic Data</h3>
|
||||
{{if data.disk}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Source:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.sourceName}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Gene decay:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{if data.degradation <= 100}}
|
||||
{{:data.degradation}}%
|
||||
{{else}}
|
||||
<font = '#FF0000'><b>FURTHER AMENDMENTS NONVIABLE</b></font>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Locus:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.locus}}
|
||||
</div>
|
||||
{{:helper.link('Eject Disk', 'circle-arrow-e', {'eject_disk' : 1}, null)}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="notice">No disk loaded.</div>
|
||||
{{/if}}
|
||||
<h3>Loaded Material</h3>
|
||||
{{if data.loaded}}
|
||||
<div class = "item">
|
||||
<div class = "itemLabel">
|
||||
Target:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:data.loaded}}
|
||||
</div>
|
||||
{{if data.degradation <= 100}}
|
||||
{{:helper.link('Apply Gene Mods', 'gear', {'apply_gene' : 1}, null)}}
|
||||
{{/if}}
|
||||
{{:helper.link('Eject Target', 'circle-arrow-e', {'eject_packet' : 1}, null)}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="notice">No target seed packet loaded</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,73 +0,0 @@
|
||||
<!--
|
||||
Title: Lysis-isolation Centrifuge UI
|
||||
Used In File(s): \code\modules\hydroponics\seed_machines.dm
|
||||
-->
|
||||
|
||||
{{if data.activity}}
|
||||
Scanning...
|
||||
{{else}}
|
||||
<h3>Buffered Genetic Data</h3>
|
||||
{{if data.hasGenetics}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Source:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.sourceName}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Gene decay:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.degradation}}%
|
||||
</div>
|
||||
</div>
|
||||
{{if data.disk}}
|
||||
{{for data.geneMasks}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
{{:value.mask}}
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Extract', 'circle-arrow-s', {'get_gene' : value.tag}, null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{empty}}
|
||||
<div class="notice">Data error. Genetic record corrupt.</div>
|
||||
{{/for}}
|
||||
<br>
|
||||
<div class="item">
|
||||
{{:helper.link('Eject Loaded Disk', 'circle-arrow-e', {'eject_disk' : 1}, null)}}
|
||||
{{:helper.link('Clear Genetic Buffer', 'gear', {'clear_buffer' : 1}, null)}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="notice">No disk inserted.</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="notice">No data buffered.</div>
|
||||
{{if data.disk}}
|
||||
<br>
|
||||
<div class="item">
|
||||
{{:helper.link('Eject Loaded Disk', 'circle-arrow-e', {'eject_disk' : 1}, null)}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="notice">No disk inserted.</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<h3>Loaded Material</h3>
|
||||
{{if data.loaded}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Packet loaded:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.loaded}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('Process Genome', 'gear', {'scan_genome' : 1}, null)}}{{:helper.link('Eject Packet', 'circle-arrow-e', {'eject_packet' : 1}, null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="notice">No seeds loaded.</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,150 +0,0 @@
|
||||
<!--
|
||||
Title: Cryo Cell Status UI
|
||||
Used In File(s): \code\game\machinery\cryo.dm
|
||||
-->
|
||||
<h3>Cryo Cell Status</h3>
|
||||
|
||||
<div class="statusDisplay">
|
||||
{{if !data.hasOccupant}}
|
||||
<div class="line">Cell Unoccupied</div>
|
||||
{{else}}
|
||||
<div class="line">
|
||||
{{:data.occupant.name}} | {{:helper.round(data.occupant.bodyTemperature - 273.15)}} C =>
|
||||
{{if data.occupant.stat == 0}}
|
||||
<span class="good">Conscious</span>
|
||||
{{else data.occupant.stat == 1}}
|
||||
<span class="average">Unconscious</span>
|
||||
{{else}}
|
||||
<span class="bad">DEAD</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{if data.occupant.stat < 2}}
|
||||
<div class="line">
|
||||
<div class="statusLabel">Brain Activity:</div>
|
||||
<div class="statusValue">{{:data.occupant.brain_activity}}</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Pulse rate:</div>
|
||||
<div class="statusValue">{{:data.occupant.pulse}}bpm</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Blood Pressure:</div>
|
||||
<div class="statusValue">{{:data.occupant.blood_pressure}} ({{:data.occupant.blood_o2}}% blood oxy)</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Genetic Damage:</div>
|
||||
{{if data.occupant.cloneLoss > 50}}
|
||||
<span class="bad">Severe</span>
|
||||
{{else data.occupant.cloneLoss > 25}}
|
||||
<span class="bad">Significant</span>
|
||||
{{else data.occupant.cloneLoss > 10}}
|
||||
<span class="average">Moderate</span>
|
||||
{{else data.occupant.cloneLoss > 1}}
|
||||
<span class="notgood">Minor</span>
|
||||
{{else}}
|
||||
<span class="good">None.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Physical Trauma:</div>
|
||||
{{if data.occupant.bruteLoss > 50}}
|
||||
<span class="bad">Severe</span>
|
||||
{{else data.occupant.bruteLoss > 25}}
|
||||
<span class="bad">Significant</span>
|
||||
{{else data.occupant.bruteLoss > 10}}
|
||||
<span class="average">Moderate</span>
|
||||
{{else data.occupant.bruteLoss > 1}}
|
||||
<span class="notgood">Minor</span>
|
||||
{{else}}
|
||||
<span class="good">None.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Burn Severity:</div>
|
||||
{{if data.occupant.fireLoss > 50}}
|
||||
<span class="bad">Severe</span>
|
||||
{{else data.occupant.fireLoss > 25}}
|
||||
<span class="bad">Significant</span>
|
||||
{{else data.occupant.fireLoss > 10}}
|
||||
<span class="average">Moderate</span>
|
||||
{{else data.occupant.fireLoss > 1}}
|
||||
<span class="notgood">Minor</span>
|
||||
{{else}}
|
||||
<span class="good">None.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class ="line">
|
||||
<div class ="statusLabel">=> Organ Damage:</div>
|
||||
{{if data.occupant.toxLoss > 50}}
|
||||
<span class="bad">Major systemic organ failure detected.</span>
|
||||
{{else data.occupant.toxLoss > 25}}
|
||||
<span class="bad">Significant.</span>
|
||||
{{else data.occupant.toxLoss > 10}}
|
||||
<span class="average">Moderate.</span>
|
||||
{{else data.occupant.toxLoss > 1}}
|
||||
<span class="notgood">Minor.</span>
|
||||
{{else}}
|
||||
<span class="good"> None.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">=> Oxygenation:</div>
|
||||
{{if data.occupant.oxyLoss > 50}}
|
||||
<span class="bad">Severe oxygen deprivation.</span>
|
||||
{{else data.occupant.oxyLoss > 25}}
|
||||
<span class="average">Moderate oxygen deprivation.</span>
|
||||
{{else data.occupant.oxyLoss > 10}}
|
||||
<span class="average">Low oxygen deprivation.</span>
|
||||
{{else}}
|
||||
<span class="good">Normal oxygenation levels.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<hr>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Cell Temperature:</div><div class="statusValue">
|
||||
<span class="{{:data.cellTemperatureStatus}}">{{:data.cellTemperature}} K</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Cryo Cell Operation</h3>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Cryo Cell Status:
|
||||
</div>
|
||||
<div class="itemContent" style="width: 40%;">
|
||||
{{:helper.link('On', 'power', {'switchOn' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'switchOff' : 1}, data.isOperating ? null : 'selected')}}
|
||||
</div>
|
||||
<div class="itemContent" style="width: 26%;">
|
||||
{{:helper.link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, data.hasOccupant ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item"> </div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Beaker:
|
||||
</div>
|
||||
<div class="itemContent" style="width: 40%;">
|
||||
{{if data.isBeakerLoaded}}
|
||||
{{:data.beakerLabel ? data.beakerLabel : '<span class="average">No label</span>'}}<br>
|
||||
{{if data.beakerVolume}}
|
||||
<span class="highlight">{{:data.beakerVolume}} units remaining</span><br>
|
||||
{{else}}
|
||||
<span class="bad">Beaker is empty</span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<span class="average"><i>No beaker loaded</i></span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="itemContent" style="width: 26%;">
|
||||
{{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,125 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if data.busy}}
|
||||
<h5 class='average'>The Splicer is currently busy.</h5>
|
||||
<div class='notice'>
|
||||
<center><span class='bad'>{{:data.busy}}</span></center>
|
||||
</div>
|
||||
<p>
|
||||
Thank you for your patience!
|
||||
</p>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<h2>Virus Dish</h2>
|
||||
</div>
|
||||
<div class="item">
|
||||
{{:helper.link('Eject Dish', 'eject', { 'eject' : 1 }, data.dish_inserted ? null : 'disabled')}}
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
<b>Growth Density:</b>
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.growth, 0, 100, (data.growth >= 50) ? 'good' : data.growth >= 25 ? 'average' : 'bad', data.growth + '%' )}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="statusDisplay" style="height: 145px; overflow: auto;">
|
||||
<div class='item'>
|
||||
{{if !data.info}}
|
||||
<div class='itemLabel'>
|
||||
<span class='good'>Symptoms:</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class='itemContent' style="width: 100%;">
|
||||
{{if data.info}}
|
||||
<span class='average'>{{:data.info}}</span>
|
||||
{{else}}
|
||||
{{for data.effects}}
|
||||
<div>
|
||||
<div class="highlight">
|
||||
({{:value.stage}}) {{:value.name}}
|
||||
{{if value.badness > 1}}
|
||||
<span class='bad'><b>Dangerous</b></span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/for}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{if data.affected_species && !data.info}}
|
||||
<div class='item'>
|
||||
<div class='itemLabelWide'>
|
||||
<span class='good'>Affected Species:</span>
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
<span class='highlight'>{{:data.affected_species}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{if data.effects}}
|
||||
<div class='item'>
|
||||
<span class="bad"><i>CAUTION: Reverse engineering will destroy the viral sample.</i></span>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class='itemLabelWide'>
|
||||
Reverse Engineering:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{for data.effects}}
|
||||
{{:helper.link(value.stage, 'transferthick-e-w', { 'grab' : value.reference })}}
|
||||
{{/for}}
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:helper.link('Species', 'transferthick-e-w', { 'affected_species' : 1 })}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="item">
|
||||
<h2>Storage</h2>
|
||||
</div>
|
||||
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
<b>Memory Buffer:</b>
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{if data.buffer}}
|
||||
{{:data.buffer.name}} ({{:data.buffer.stage}})
|
||||
{{else}}
|
||||
{{if data.species_buffer}}
|
||||
{{:data.species_buffer}}
|
||||
{{else}}
|
||||
Empty
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{:helper.link('Save To Disk', 'disk', { 'disk' : 1 }, (data.buffer || data.species_buffer) ? null : 'disabled')}}
|
||||
{{if data.species_buffer}}
|
||||
{{:helper.link('Splice Species', 'pencil', { 'splice' : 5 }, (data.species_buffer && !data.info) ? null : 'disabled')}}
|
||||
{{else data.buffer}}
|
||||
{{:helper.link('Splice #1', 'pencil', { 'splice' : 1 }, data.buffer.stage > 1 ? 'disabled' : null)}}
|
||||
{{:helper.link('Splice #2', 'pencil', { 'splice' : 2 }, data.buffer.stage > 2 ? 'disabled' : null)}}
|
||||
{{:helper.link('Splice #3', 'pencil', { 'splice' : 3 }, data.buffer.stage > 3 ? 'disabled' : null)}}
|
||||
{{:helper.link('Splice #4', 'pencil', { 'splice' : 4 }, data.buffer.stage > 4 ? 'disabled' : null)}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Close', 'gear', {'close' : '1'}, null, 'fixedLeft')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<h2>Environmental Conditions</h2>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Power:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('On', 'power', { 'power' : 1 }, !data.dish_inserted ? 'disabled' : data.on ? 'selected' : null)}}{{:helper.link('Off', 'close', { 'power' : 1 }, data.on ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
{{:helper.link('Add Radiation', 'radiation', {'rad' : 1})}}
|
||||
{{:helper.link('Flush System', 'trash', {'flush' : 1}, data.system_in_use ? null : 'disabled')}}
|
||||
</div>
|
||||
|
||||
<div class="statusDisplay" style="height: 100px; overflow: auto;">
|
||||
<div class='item'>
|
||||
<div class="itemLabel">
|
||||
<span class='good'>Virus Food:</span>
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.food_supply, 0, 100, 'good', data.food_supply)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class="itemLabel">
|
||||
<span class='good'>Radiation Level:</span>
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.radiation, 0, 100, (data.radiation >= 50) ? 'bad' : (data.growth >= 25) ? 'average' : 'good')}}
|
||||
<br/>
|
||||
{{:helper.formatNumber(data.radiation * 10000)}} <acronym title='In microSieverts'>µSv</acronym>
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class="itemLabel">
|
||||
<span class='good'>Toxicity:</span>
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.toxins, 0, 100, (data.toxins >= 50) ? 'bad' : (data.toxins >= 25) ? 'average' : 'good', data.toxins + '%')}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<h2>Chemicals</h2>
|
||||
</div>
|
||||
<div class='item'>
|
||||
{{:helper.link('Eject Chemicals', 'eject', { 'ejectchem' : 1 }, data.chemicals_inserted ? null : 'disabled')}}
|
||||
{{:helper.link('Breed Virus', 'circle-arrow-s', { 'virus' : 1 }, data.can_breed_virus ? null : 'disabled')}}
|
||||
</div>
|
||||
|
||||
{{if data.chemicals_inserted}}
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
Volume:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:helper.displayBar(data.chemical_volume, 0, data.max_chemical_volume, 'good', data.chemical_volume + ' / ' + data.max_chemical_volume)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
Breeding Environment:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
<span class='{{:data.can_breed_virus ? "good" : "average"}}'>
|
||||
{{:!data.dish_inserted ? 'N/A' : data.can_breed_virus ? 'Suitable' : 'No hemolytic samples detected'}}
|
||||
</span>
|
||||
{{if data.blood_already_infected}}
|
||||
<br/>
|
||||
<span class='bad'><i>CAUTION: Viral infection detected in blood sample.</i></span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class='item'>
|
||||
<span class='average'>No chemicals inserted.</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="item">
|
||||
<h2>Virus Dish</h2>
|
||||
</div>
|
||||
<div class='item'>
|
||||
{{:helper.link('Eject Dish', 'eject', {'ejectdish' : 1}, data.dish_inserted ? null : 'disabled')}}
|
||||
</div>
|
||||
|
||||
{{if data.dish_inserted}}
|
||||
{{if data.virus}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
<b>Growth Density:</b>
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.growth, 0, 100, (data.growth >= 50) ? 'good' : (data.growth >= 25) ? 'average' : 'bad', data.growth + '%' )}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
<b>Infection Rate:</b>
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:data.analysed ? data.infection_rate : "Unknown"}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<span class='average'>No virus detected.</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<span class='average'>No dish loaded.</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
@@ -1,318 +0,0 @@
|
||||
<!--
|
||||
Title: DNA Modifier UI
|
||||
Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
|
||||
-->
|
||||
<h3>Status</h3>
|
||||
|
||||
<div class="statusDisplay">
|
||||
{{if !data.hasOccupant}}
|
||||
<div class="line">Cell Unoccupied</div>
|
||||
{{else}}
|
||||
<div class="line">
|
||||
{{:data.occupant.name}} =>
|
||||
{{if data.occupant.stat == 0}}
|
||||
<span class="good">Conscious</span>
|
||||
{{else data.occupant.stat == 1}}
|
||||
<span class="average">Unconscious</span>
|
||||
{{else}}
|
||||
<span class="bad">DEAD</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{if !data.occupant.isViableSubject || !data.occupant.uniqueIdentity || !data.occupant.structuralEnzymes}}
|
||||
<div class="notice">
|
||||
The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.
|
||||
</div>
|
||||
{{else data.occupant.stat < 2}}
|
||||
<div class="line">
|
||||
<div class="statusLabel">Health:</div>
|
||||
{{if data.occupant.health >= 0}}
|
||||
{{:helper.displayBar(data.occupant.health, 0, data.occupant.maxhealth, 'good')}}
|
||||
{{else}}
|
||||
{{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'average alignRight')}}
|
||||
{{/if}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.health)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Radiation:</div>
|
||||
{{:helper.displayBar(data.occupant.radiationLevel, 0, 100, 'average')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.radiationLevel)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Unique Enzymes:</div>
|
||||
<div class="statusValue">{{:data.occupant.uniqueEnzymes ? data.occupant.uniqueEnzymes : '<span class="bad">Unknown</span>'}}</div>
|
||||
</div>
|
||||
|
||||
<!--<div class="line">
|
||||
<div class="statusLabel"><small>Unique Identifier:</small></div>
|
||||
<div class="statusValue"><small>{{:data.occupant.uniqueIdentity}}</small></div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel"><small>Structural Enzymes:</small></div>
|
||||
<div class="statusValue"><small>{{:data.occupant.structuralEnzymes}}</small></div>
|
||||
</div>-->
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<div class="clearBoth"></div>
|
||||
</div>
|
||||
|
||||
<h3>Operations</h3>
|
||||
<div class="item">
|
||||
{{:helper.link('Modify U.I.', 'link', {'selectMenuKey' : 'ui'}, data.selectedMenuKey == 'ui' ? 'selected' : null)}}
|
||||
{{:helper.link('Modify S.E.', 'link', {'selectMenuKey' : 'se'}, data.selectedMenuKey == 'se' ? 'selected' : null)}}
|
||||
{{:helper.link('Transfer Buffers', 'disk', {'selectMenuKey' : 'buffer'}, data.selectedMenuKey == 'buffer' ? 'selected' : null)}}
|
||||
{{:helper.link('Rejuvenators', 'plusthick', {'selectMenuKey' : 'rejuvenators'}, data.selectedMenuKey == 'rejuvenators' ? 'selected' : null)}}
|
||||
</div>
|
||||
|
||||
<div class="item"> </div>
|
||||
|
||||
{{if !data.selectedMenuKey || data.selectedMenuKey == 'ui'}}
|
||||
<h3>Modify Unique Identifier</h3>
|
||||
{{:helper.displayDNABlocks(data.occupant.uniqueIdentity, data.selectedUIBlock, data.selectedUISubBlock, data.dnaBlockSize, 'UI')}}
|
||||
<div class="clearBoth"></div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Target:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('-', null, {'changeUITarget' : 0}, (data.selectedUITarget > 0) ? null : 'disabled')}}
|
||||
<div class="statusValue"> {{:data.selectedUITargetHex}} </div>
|
||||
{{:helper.link('+', null, {'changeUITarget' : 1}, (data.selectedUITarget < 15) ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Irradiate Block', 'radiation', {'pulseUIRadiation' : 1}, !data.occupant.isViableSubject ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{else data.selectedMenuKey == 'se'}}
|
||||
<h3>Modify Structural Enzymes</h3>
|
||||
{{:helper.displayDNABlocks(data.occupant.structuralEnzymes, data.selectedSEBlock, data.selectedSESubBlock, data.dnaBlockSize, 'SE')}}
|
||||
<div class="clearBoth"></div>
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Irradiate Block', 'radiation', {'pulseSERadiation' : 1}, !data.occupant.isViableSubject ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{else data.selectedMenuKey == 'buffer'}}
|
||||
<h3>Transfer Buffers</h3>
|
||||
{{for data.buffers}}
|
||||
<h4>Buffer {{:(index + 1)}}</h4>
|
||||
<div class="itemGroup">
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Load Data:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Subject U.I.', 'link', {'bufferOption' : 'saveUI', 'bufferId' : (index + 1)}, !data.hasOccupant ? 'disabled' : null)}}
|
||||
{{:helper.link('Subject U.I. + U.E.', 'link', {'bufferOption' : 'saveUIAndUE', 'bufferId' : (index + 1)}, !data.hasOccupant ? 'disabled' : null)}}
|
||||
{{:helper.link('Subject S.E.', 'link', {'bufferOption' : 'saveSE', 'bufferId' : (index + 1)}, !data.hasOccupant ? 'disabled' : null)}}
|
||||
{{:helper.link('From Disk', 'disk', {'bufferOption' : 'loadDisk', 'bufferId' : (index + 1)}, (!data.hasDisk || !data.disk.data) ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{if value.data}}
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Label:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link(value.label, 'document-b', {'bufferOption' : 'changeLabel', 'bufferId' : (index + 1)})}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Subject:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:value.owner ? value.owner : '<span class="average">Unknown</span>'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Stored Data:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:value.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
|
||||
{{:value.ue ? ' + Unique Enzymes' : ''}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
<span class="highlight">This buffer is empty.</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Options:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Clear', 'trash', {'bufferOption' : 'clear', 'bufferId' : (index + 1)}, !value.data ? 'disabled' : null)}}
|
||||
{{:helper.link('Injector', data.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (index + 1)}, (!data.isInjectorReady || !value.data) ? 'disabled' : null)}}
|
||||
{{:helper.link('Block Injector', data.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (index + 1), 'createBlockInjector' : 1}, (!data.isInjectorReady || !value.data) ? 'disabled' : null)}}
|
||||
{{:helper.link('Transfer', 'radiation', {'bufferOption' : 'transfer', 'bufferId' : (index + 1)}, (!data.hasOccupant || !value.data) ? 'disabled' : null)}}
|
||||
{{:helper.link('Save To Disk', 'disk', {'bufferOption' : 'saveDisk', 'bufferId' : (index + 1)}, (!value.data || !data.hasDisk) ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/for}}
|
||||
|
||||
<h4>Data Disk</h4>
|
||||
<div class="itemGroup">
|
||||
{{if data.hasDisk}}
|
||||
{{if data.disk.data}}
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Label:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:data.disk.label ? data.disk.label : 'No Label'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Subject:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:data.disk.owner ? data.disk.owner : '<span class="average">Unknown</span>'}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Stored Data:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:data.disk.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
|
||||
{{:data.disk.ue ? ' + Unique Enzymes' : ''}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
<span class="average">Disk is blank.</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<div class="itemContentWide">
|
||||
<span class="highlight">No disk inserted.</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Options:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Wipe Disk', 'trash', {'bufferOption' : 'wipeDisk'}, (!data.hasDisk || !data.disk.data) ? 'disabled' : null)}}
|
||||
{{:helper.link('Eject Disk', 'eject', {'bufferOption' : 'ejectDisk'}, !data.hasDisk ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{else data.selectedMenuKey == 'rejuvenators'}}
|
||||
<h3>Rejuvenators</h3>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Inject:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('5', 'pencil', {'injectRejuvenators' : 5}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
|
||||
{{:helper.link('10', 'pencil', {'injectRejuvenators' : 10}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
|
||||
{{:helper.link('20', 'pencil', {'injectRejuvenators' : 20}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
|
||||
{{:helper.link('30', 'pencil', {'injectRejuvenators' : 30}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
|
||||
{{:helper.link('50', 'pencil', {'injectRejuvenators' : 50}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item"> </div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Beaker:
|
||||
</div>
|
||||
<div class="itemContentWide" style="width: 40%;">
|
||||
{{if data.isBeakerLoaded}}
|
||||
{{:data.beakerLabel ? data.beakerLabel : '<span class="average">No label</span>'}}<br>
|
||||
{{if data.beakerVolume}}
|
||||
<span class="highlight">{{:data.beakerVolume}} units remaining</span><br>
|
||||
{{else}}
|
||||
<span class="bad">Beaker is empty</span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<span class="average"><i>No beaker loaded</i></span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="itemContentWide" style="width: 26%;">
|
||||
{{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="item"> </div>
|
||||
|
||||
{{if !data.selectedMenuKey || data.selectedMenuKey == 'ui' || data.selectedMenuKey == 'se'}}
|
||||
<h3>Radiation Emitter Settings</h3>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Intensity:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('-', null, {'radiationIntensity' : 0}, (data.radiationIntensity > 1) ? null : 'disabled')}}
|
||||
<div class="statusValue"> {{:data.radiationIntensity}} </div>
|
||||
{{:helper.link('+', null, {'radiationIntensity' : 1}, (data.radiationIntensity < 10) ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Duration:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('-', null, {'radiationDuration' : 0}, (data.radiationDuration > 2) ? null : 'disabled')}}
|
||||
<div class="statusValue"> {{:data.radiationDuration}} </div>
|
||||
{{:helper.link('+', null, {'radiationDuration' : 1}, (data.radiationDuration < 20) ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Pulse Radiation', 'radiation', {'pulseRadiation' : 1}, !data.hasOccupant ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="item"> </div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Occupant:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Eject Occupant', 'eject', {'ejectOccupant' : 1}, data.locked || !data.hasOccupant || data.irradiating ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabelNarrow">
|
||||
Door Lock:
|
||||
</div>
|
||||
<div class="itemContentWide">
|
||||
{{:helper.link('Engaged', 'locked', {'toggleLock' : 1}, data.locked ? 'selected' : !data.hasOccupant ? 'disabled' : null)}}
|
||||
{{:helper.link('Disengaged', 'unlocked', {'toggleLock' : 1}, !data.locked ? 'selected' : data.irradiating ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if data.irradiating}}
|
||||
<div class="mask">
|
||||
<div class="maskContent">
|
||||
<h1>Irradiating Subject</h1>
|
||||
<h3>For {{:data.irradiating}} seconds.</h3>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{{if data.screen == 0}}
|
||||
{{for data.beacons}}
|
||||
<hr>
|
||||
<b>Name:</b> {{:value.name}}<br>
|
||||
<b>Integrity:</b> {{:value.health}}%<br>
|
||||
<b>Cell charge:</b> {{:value.charge}}<br>
|
||||
<b>Airtank:</b> {{:value.air}}kPa<br>
|
||||
<b>Pilot:</b> {{:value.pilot || "None"}}<br>
|
||||
<b>Location:</b> {{:value.location}}<br>
|
||||
<b>Active equipment:</b> {{:value.active}}<br>
|
||||
{{:helper.link("Send Message", null, {'send_message' : value.ref}, (value.pilot) ? null : 'disabled')}}
|
||||
{{:helper.link("Get Log", null, {'get_log' : value.ref})}}
|
||||
{{if value.control == 1}}
|
||||
{{:helper.link("Terminate", null, {'shock' : value.ref})}}
|
||||
{{/if}}
|
||||
{{empty}}
|
||||
<hr>
|
||||
No active beacons detected
|
||||
{{/for}}
|
||||
{{else}}
|
||||
<h3>Log Contents</h3><br><hr>
|
||||
{{:helper.link("Return", null, {'return' : 0})}}<br>
|
||||
{{:data.log}}
|
||||
{{/if}}
|
||||
@@ -1,142 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Total Output:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.totalOutput, 0, data.maxTotalOutput)}}
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.fixed(data.totalOutput, 1)}} kW
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Thermal Output:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.fixed(data.thermalOutput, 1)}} kW
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
{{if data.circConnected}}
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="statusDisplay">
|
||||
<center><h2>Primary Circulator ({{:data.primaryDir}})</h2></center>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Turbine Output:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.primaryOutput, 1)}} kW
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Flow Capacity:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.primaryFlowCapacity, 1)}} %
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Inlet Pressure:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.primaryInletPressure, 1)}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Inlet Temperature:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.primaryInletTemperature, 1)}} K
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Outlet Pressure:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.primaryOutletPressure, 1)}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Outlet Temperature:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.primaryOutletTemperature, 1)}} K
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<div class="statusDisplay">
|
||||
<center><h2>Secondary Circulator ({{:data.secondaryDir}})</h2></center>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Turbine Output:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.secondaryOutput, 1)}} kW
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Flow Capacity:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.secondaryFlowCapacity, 1)}} %
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Inlet Pressure:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.secondaryInletPressure, 1)}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Inlet Temperature:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.secondaryInletTemperature, 1)}} K
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Outlet Pressure:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.secondaryOutletPressure, 1)}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Outlet Temperature:
|
||||
</div>
|
||||
<div align='center' class="itemContent">
|
||||
{{:helper.fixed(data.secondaryOutletTemperature, 1)}} K
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{{else}}
|
||||
<div class="notice">
|
||||
ERROR: Both circulators must be connected!
|
||||
</div>
|
||||
{{/if}}
|
||||
@@ -1,66 +0,0 @@
|
||||
{{if data.temp }}
|
||||
<center>
|
||||
<table>
|
||||
<tr><td>{{:data.temp }}</td>
|
||||
<tr><td>{{:helper.link('Continue', null, {'PRG_continue' : 1})}}</td>
|
||||
</table>
|
||||
</center>
|
||||
{{else}}
|
||||
<center><h3>Balance: {{:data.bank}} Credits</h3><br>
|
||||
{{if data.mode}}
|
||||
<div>
|
||||
<div style="float: left">{{:helper.link('<=', null, {'PRG_scroll' : 'left'})}}</div>
|
||||
<div>{{:helper.link('Main Menu', null, {'PRG_main_menu' : 1})}}</div>
|
||||
<div style="float: right">{{:helper.link('=>', null, {'PRG_scroll' : 'right'})}}</div>
|
||||
</div>
|
||||
<center><h3>{{:data.traderName}}</h3><br>
|
||||
Signal Origin: {{:data.origin}}<br>
|
||||
{{if data.last_comms}}
|
||||
<i>{{:data.last_comms}}</i>
|
||||
{{/if}}
|
||||
</center>
|
||||
<br>
|
||||
{{if data.hailed}}
|
||||
{{if data.trades}}
|
||||
{{:helper.link('Go Back', null, {'PRG_show_trades' : 1})}}
|
||||
<br><br>
|
||||
<h3>Trade Goods</h3>
|
||||
<table>
|
||||
{{for data.trades}}
|
||||
<tr><td>{{:value}}</td>
|
||||
<td>{{:helper.link('Trade', null, {'PRG_offer_item' : index})}}</td>
|
||||
<td>{{:helper.link('Money', null, {'PRG_offer_money_for_item' : index})}}</td>
|
||||
<td>{{:helper.link('Bulk', null, {'PRG_bulk_money_for_item' : index})}}</td>
|
||||
<td>{{:helper.link('Ask Cost', null, {'PRG_how_much_do_you_want' : index})}}</td>
|
||||
{{/for}}
|
||||
</table>
|
||||
{{else}}
|
||||
{{:helper.link('List Goods', null, {'PRG_show_trades' : 1})}}<br><br>
|
||||
{{:helper.link('Sell Items', null, {'PRG_sell_items' : 1})}}<br><br>
|
||||
{{:helper.link('Compliment', null, {'PRG_compliment' : 1})}}<br><br>
|
||||
<span class=itemLabel>Pay them to stay longer: </span><span class=itemContent>{{:helper.link('100', null, {'PRG_bribe' : 100})}} {{:helper.link('500', null, {'PRG_bribe' : 500})}} {{:helper.link('1000', null, {'PRG_bribe' : 1000})}}</span><br><br>
|
||||
{{:helper.link('Ask What They Want', null, {'PRG_what_do_you_want': 1})}}<br><br>
|
||||
{{:helper.link('Insult', null, {'PRG_insult' : 1})}}<br><br>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{:helper.link('Hail',null,{'PRG_hail': 1})}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<center>
|
||||
<h2>Main Menu</h2>
|
||||
<table style="text-align:center">
|
||||
<tr><td>{{:helper.link('Open Communications', null, {'PRG_merchant_list' : 1})}}</td>
|
||||
<tr><td>{{:helper.link('Test Fire Transporter', null, {'PRG_test_fire': 1 })}}</td>
|
||||
<tr><td>{{:helper.link('Connect Pad', null, {'PRG_connect_pad' : 1})}}
|
||||
{{if data.pad}}
|
||||
<font color="green">Connected</font>
|
||||
{{else}}
|
||||
<font color="red">DISCONNECTED</font>
|
||||
{{/if}}
|
||||
</td>
|
||||
<tr><td>{{:helper.link('Deposit Money', null, {'PRG_transfer_to_bank' : 1})}}</td>
|
||||
<tr><td>{{:helper.link('Retrieve Money', null, {'PRG_get_money' : 1})}}</td>
|
||||
</table>
|
||||
</center>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -1,74 +0,0 @@
|
||||
{{if data.message}}
|
||||
<div class='item'>
|
||||
{{:data.message}}
|
||||
{{:helper.link('CLEAR', null, { "PRG_clearmessage" : 1 })}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if data.article}}
|
||||
Viewing: {{:data.title}}<br>
|
||||
{{:helper.link('CLOSE', null, { "PRG_reset" : 1 })}}
|
||||
{{:helper.link('SAVE', null, { "PRG_savearticle" : 1 })}}
|
||||
<br><br>
|
||||
|
||||
{{:data.article}}
|
||||
{{else data.download_running}}
|
||||
Downloading file...<br><br>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
Progress:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:helper.displayBar(data.download_progress, 0, data.download_maxprogress, 'good')}}
|
||||
{{:data.download_progress}} / {{:data.download_maxprogress}} GQ
|
||||
</div>
|
||||
<div class='itemLabel'>
|
||||
Download speed:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:data.download_rate}} GQ/s
|
||||
</div>
|
||||
<div class='itemLabel'>
|
||||
Controls:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:helper.link('ABORT', null, { "PRG_reset" : 1 })}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<h3>Listing available files</h3>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
Show archived files:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{if data.showing_archived}}
|
||||
{{:helper.link('YES', null, { "PRG_toggle_archived" : 1 })}}
|
||||
{{else}}
|
||||
{{:helper.link('NO', null, { "PRG_toggle_archived" : 1 })}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<br><hr>
|
||||
{{for data.all_articles}}
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
Name:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:value.name}}
|
||||
</div>
|
||||
<div class='itemLabel'>
|
||||
Size:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:value.size}} GQ
|
||||
</div>
|
||||
<div class='itemLabel'>
|
||||
Actions:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{:helper.link('OPEN', null, { "PRG_openarticle" : value.uid })}}
|
||||
</div>
|
||||
</div>
|
||||
{{/for}}
|
||||
{{/if}}
|
||||
@@ -1,22 +0,0 @@
|
||||
{{:helper.syndicateMode()}}
|
||||
{{if data.error}}
|
||||
##SYSTEM ERROR: {{:data.error}}{{:helper.link('RESET', null, { 'PRG_reset' : 1 })}}
|
||||
{{else data.target}}
|
||||
##DoS traffic generator active. Tx: {{:data.speed}}GQ/s<br>
|
||||
{{for data.dos_strings}}
|
||||
{{:value}}<br>
|
||||
{{/for}}
|
||||
{{:helper.link('ABORT', null, { 'PRG_reset' : 1 })}}
|
||||
{{else}}
|
||||
##DoS traffic generator ready. Select target device.<br>
|
||||
{{if data.focus}}
|
||||
Targeted device ID: {{:data.focus}}
|
||||
{{else}}
|
||||
Targeted device ID: None
|
||||
{{/if}}
|
||||
{{:helper.link('EXECUTE', null, { 'PRG_execute' : 1 })}}<div style="clear:both"></div>
|
||||
Detected devices on network:<br>
|
||||
{{for data.relays}}
|
||||
{{:helper.link(value , null, { 'PRG_target_relay' : value })}}
|
||||
{{/for}}
|
||||
{{/if}}
|
||||
@@ -1,94 +0,0 @@
|
||||
{{if data.error}}
|
||||
<div class='item'>
|
||||
<h2>An error has occured during operation...</h2>
|
||||
<b>Additional information: </b>{{:data.error}}<br>
|
||||
{{:helper.link('Clear', null, {'PRG_reset' : 1})}}
|
||||
</div>
|
||||
{{else data.downloading}}
|
||||
<h2>Download in progress...</h2>
|
||||
<div class="itemLabel">
|
||||
Downloaded file:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.download_name}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Download progress:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.download_progress}} / {{:data.download_size}} GQ
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Transfer speed:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.download_netspeed}}GQ/s
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Controls:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Abort download', null, {'PRG_reset' : 1})}}
|
||||
</div>
|
||||
{{else data.uploading}}
|
||||
<h2>Server enabled</h2>
|
||||
<div class="itemLabel">
|
||||
Connected clients:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.upload_clients}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Provided file:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.upload_filename}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Server password:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{if data.haspassword}}
|
||||
ENABLED
|
||||
{{else}}
|
||||
DISABLED
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Commands:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Set password', null, {'PRG_setpassword' : 1})}}
|
||||
{{:helper.link('Exit server', null, {'PRG_reset' : 1})}}
|
||||
</div>
|
||||
{{else data.upload_filelist}}
|
||||
<h2>File transfer server ready. Select file to upload: </h2>
|
||||
<table>
|
||||
<tr><th>File name<th>File size<th>Controls
|
||||
{{for data.upload_filelist}}
|
||||
<tr><td>{{:value.filename}}
|
||||
<td>{{:value.size}}GQ
|
||||
<td>{{:helper.link('Select', null, {'PRG_uploadfile' : value.uid})}}
|
||||
{{/for}}
|
||||
</table>
|
||||
<hr>
|
||||
{{:helper.link('Set password', null, { "PRG_setpassword" : 1 })}}
|
||||
{{:helper.link('Return', null, { "PRG_reset" : 1 })}}
|
||||
{{else}}
|
||||
<h2>Available files:</h2>
|
||||
<table border="1" style="border-collapse: collapse"><tr><th>Server UID<th>File Name<th>File Size<th>Password Protection<th>Operations
|
||||
{{for data.servers}}
|
||||
<tr><td>{{:value.uid}}
|
||||
<td>{{:value.filename}}
|
||||
<td>{{:value.size}}GQ
|
||||
{{if value.haspassword}}
|
||||
<td>Enabled
|
||||
{{else}}
|
||||
<td>Disabled
|
||||
{{/if}}
|
||||
<td>{{:helper.link('Download', null, { "PRG_downloadfile" : value.uid })}}
|
||||
{{/for}}
|
||||
</table>
|
||||
<hr>
|
||||
{{:helper.link('Send file', null, { "PRG_uploadmenu" : 1 })}}
|
||||
{{/if}}
|
||||
@@ -1,125 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Power:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link(data.power ? 'On' : 'Off', null, {'command' : 'power'}, data.config ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Config:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Configure', null, {'command' : 'configure'}, null, data.config ? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Set Flow Rate Limit:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
<div class="statusValue">
|
||||
{{if data.config}}
|
||||
{{:helper.link(data.set_flow_rate/10, null, {'command' : 'set_flow_rate'})}} L/s
|
||||
{{else}}
|
||||
{{:(data.set_flow_rate/10)}} L/s
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Current Flow Rate:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
<div class="statusValue">
|
||||
{{:(data.last_flow_rate/10)}} L/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Load:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.last_power_draw, 0, data.max_power_draw, (data.last_power_draw < data.max_power_draw - 5) ? 'good' : 'average')}}
|
||||
<div class="statusValue">
|
||||
{{:data.last_power_draw}} W
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if data.config}}
|
||||
|
||||
<div class="item">
|
||||
<div style="width: 315px; text-align: center">
|
||||
<div style="float: left">
|
||||
<div class="white" style="height: 26">Port</div>
|
||||
{{for data.ports}}
|
||||
<div class="average" style="height: 26">{{:value.dir}} Port</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Input</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link(' ', null, {'command' : 'switch_mode', 'mode' : 'in', 'dir' : value.dir}, null, value.input ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Output</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link(' ', null, {'command' : 'switch_mode', 'mode' : 'out', 'dir' : value.dir}, null, value.output ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Filter</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link(value.f_type ? value.f_type : 'None', null, {'command' : 'switch_filter', 'mode' : value.f_type, 'dir' : value.dir}, value.filter ? null : 'disabled', value.f_type ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
|
||||
<div class="item">
|
||||
<div style="width: 315px; text-align: center">
|
||||
<div style="float: left">
|
||||
<div class="white" style="height: 26">Port</div>
|
||||
{{for data.ports}}
|
||||
<div class="average" style="height: 26">{{:value.dir}} Port</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Mode</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{if value.input}}
|
||||
Input
|
||||
{{else value.output}}
|
||||
Output
|
||||
{{else value.f_type}}
|
||||
{{:value.f_type}}
|
||||
{{else}}
|
||||
Disabled
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{/if}}
|
||||
@@ -1,141 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Power:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link(data.power ? 'On' : 'Off', null, {'command' : 'power'}, data.config ? 'disabled' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Config:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Configure', null, {'command' : 'configure'}, null, data.config ? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Set Flow Rate Limit:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
<div class="statusValue">
|
||||
{{if data.config}}
|
||||
{{:helper.link(data.set_flow_rate/10, null, {'command' : 'set_flow_rate'})}} L/s
|
||||
{{else}}
|
||||
{{:(data.set_flow_rate/10)}} L/s
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Current Flow Rate:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
<div class="statusValue">
|
||||
{{:(data.last_flow_rate/10)}} L/s
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Load:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.last_power_draw, 0, data.max_power_draw, (data.last_power_draw < data.max_power_draw - 5) ? 'good' : 'average')}}
|
||||
<div class="statusValue">
|
||||
{{:data.last_power_draw}} W
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if data.config}}
|
||||
|
||||
<div class="item">
|
||||
<div style="width: 315px; text-align: center">
|
||||
<div style="float: left">
|
||||
<div class="white" style="height: 26">Port</div>
|
||||
{{for data.ports}}
|
||||
<div class="average" style="height: 26">{{:value.dir}} Port</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Input</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link(' ', null, value.input ? {'command' : 'switch_mode', 'mode' : 'none', 'dir' : value.dir} : {'command' : 'switch_mode', 'mode' : 'in', 'dir' : value.dir}, value.output ? 'disabled' : null, value.input ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Output</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link(' ', null, value.output ? null : {'command' : 'switch_mode', 'mode' : 'out', 'dir' : value.dir}, null, value.output ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Concentration</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link( value.input ? helper.round(value.concentration*100)+' %' : '-', null, {'command' : 'switch_con', 'dir' : value.dir}, value.input ? null : 'disabled')}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Lock</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{:helper.link(' ', value.con_lock ? 'locked' : 'unlocked', {'command' : 'switch_conlock', 'dir' : value.dir}, value.input ? null : 'disabled', value.con_lock ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{else}}
|
||||
|
||||
<div class="item">
|
||||
<div style="width: 315px; text-align: center">
|
||||
<div style="float: left">
|
||||
<div class="white" style="height: 26">Port</div>
|
||||
{{for data.ports}}
|
||||
<div class="average" style="height: 26">{{:value.dir}} Port</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Mode</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{if value.input}}
|
||||
Input
|
||||
{{else value.output}}
|
||||
Output
|
||||
{{else}}
|
||||
Disabled
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
<div style="float: left; margin-left: 10">
|
||||
<div class="white" style="height: 26">Concentration</div>
|
||||
{{for data.ports}}
|
||||
<div style="height: 26">
|
||||
{{if value.input}}
|
||||
{{:helper.round(value.concentration*100)}} %
|
||||
{{else}}
|
||||
-
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{/if}}
|
||||
@@ -1,136 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Status:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('On', 'power', {'power' : 1}, data.on ? 'selected' : null)}}{{:helper.link('Off', 'close', {'power' : 1}, data.on ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Power Level:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('1', null, {'setPower' : 1}, (data.powerSetting == 1)? 'selected' : null)}}
|
||||
{{:helper.link('2', null, {'setPower' : 2}, (data.powerSetting == 2)? 'selected' : null)}}
|
||||
{{:helper.link('3', null, {'setPower' : 3}, (data.powerSetting == 3)? 'selected' : null)}}
|
||||
{{:helper.link('4', null, {'setPower' : 4}, (data.powerSetting == 4)? 'selected' : null)}}
|
||||
{{:helper.link('5', null, {'setPower' : 5}, (data.powerSetting == 5)? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{if data.phase == "filling"}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Processing phase:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
filling inner tank
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Input pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.air1Pressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Tank pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.tankPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Target tank pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.targetPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{if data.phase == "processing"}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Processing phase:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
processing gas mix
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Processing rate:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.gasProcessed}} moles
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Tank pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.tankPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
CO2 content:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.co2}} %
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
O2 content:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.o2}} %
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{if data.phase == "releasing"}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Processing phase:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
releasing processed gas mix
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Tank pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.tankPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Output Pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.air2Pressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Target release pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.targetPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
@@ -1,107 +0,0 @@
|
||||
<div class='item'>
|
||||
<h2>Menu</h2>
|
||||
</div>
|
||||
<div class="item">
|
||||
{{if !data.isolating}}
|
||||
{{:helper.link('Home', 'home', {'home' : 1}, data.state == 'home' ? 'disabled' : null, 'fixedLeft')}}
|
||||
{{:helper.link('List', 'note', {'list' : 1}, data.state == 'list' ? 'disabled' : null, 'fixedLeft')}}
|
||||
{{:helper.link('Pathogen', 'folder-open', {'entry' : 1}, data.state == 'entry' ? 'disabled' : null, 'fixedLeft')}}
|
||||
{{/if}}
|
||||
<br>
|
||||
{{:helper.link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}}
|
||||
{{:helper.link('Print', 'print', { 'print' : 1 }, data.can_print ? null : 'disabled', 'fixedLeft')}}
|
||||
</div>
|
||||
|
||||
{{if data.isolating}}
|
||||
<h5 class='average'>The Isolator is currently busy.</h5>
|
||||
<div class='notice'>
|
||||
<center><span class='bad'>Isolating pathogens...</span></center>
|
||||
</div>
|
||||
<p>
|
||||
Thank you for your patience!
|
||||
</p>
|
||||
{{else}}
|
||||
{{if data.state =="home"}}
|
||||
<div class="item">
|
||||
<h2>Blood Sample</h2>
|
||||
</div>
|
||||
<div class='item'>
|
||||
{{:helper.link('Eject Syringe', 'eject', { 'eject' : 1 }, data.syringe_inserted ? null : 'disabled')}}
|
||||
</div>
|
||||
|
||||
{{if data.syringe_inserted}}
|
||||
<div class='statusDisplay'>
|
||||
<span class='good'><b>Pathogens:</b></span>
|
||||
{{if data.pathogen_pool}}
|
||||
{{for data.pathogen_pool}}
|
||||
<div class='item'>
|
||||
<span class='highlight'><b><u>{{:index + 1}}. #{{:value.unique_id}}</u> {{:value.is_in_database ? "(Analysed)" : ""}}</b></span><br>
|
||||
<span class='average'>{{:value.name}}:</span> {{:value.dna}}
|
||||
</div>
|
||||
{{/for}}
|
||||
{{else}}
|
||||
No pathogens detected.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class='item'>
|
||||
<span class='average'>No syringe loaded.</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if data.pathogen_pool}}
|
||||
<div class='item'>
|
||||
<div class='itemLabelWide'>
|
||||
Isolate Pathogens:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{for data.pathogen_pool}}
|
||||
{{:helper.link('#' + value.unique_id, 'pencil', { 'isolate' : value.reference }, null, 'fixedLeft')}}
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
<div class='item'>
|
||||
<div class='itemLabelWide'>
|
||||
Database Lookup:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{for data.pathogen_pool}}
|
||||
{{if value.is_in_database}}
|
||||
{{:helper.link('#' + value.unique_id, 'info', { 'entry' : 1, 'view' : value.record }, null, 'fixedLeft')}}
|
||||
{{/if}}
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{if data.state == "list"}}
|
||||
<div class='item'>
|
||||
<h2>View Database</h2>
|
||||
</div>
|
||||
<div class='item'>
|
||||
{{if data.database}}
|
||||
{{for data.database}}
|
||||
<div class='itemContent'>
|
||||
<div class='highlight fixedLeft'>{{:value.name}}</div>
|
||||
{{:helper.link('Details', 'circle-arrow-s', { 'entry' : 1, 'view' : value.record }, null, 'fixedLeft')}}
|
||||
</div>
|
||||
{{/for}}
|
||||
{{else}}
|
||||
<span class='average'>The viral database is empty.</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{if data.state == "entry"}}
|
||||
{{if data.entry}}
|
||||
<div class='item'>
|
||||
<h2>{{:data.entry.name}}</h2>
|
||||
</div>
|
||||
<div class='statusDisplay'>
|
||||
{{:data.entry.description}}
|
||||
</div>
|
||||
{{else}}
|
||||
<span class='average'>No virus selected.</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,100 +0,0 @@
|
||||
<h3>Pump Status</h3>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Tank Pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.tankPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Port Status:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.portConnected ? '<span class="good">Connected</span>' : '<span class="average">Disconnected</span>'}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Load:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.powerDraw}} W
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Cell Charge:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.cellCharge, 0, data.cellMaxCharge)}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Holding Tank Status</h3>
|
||||
{{if data.hasHoldingTank}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Tank Label:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
<div style="float: left; width: 180px;">{{:data.holdingTank.name}}</div> {{:helper.link('Eject', 'eject', {'remove_tank' : 1})}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Tank Pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.holdingTank.tankPressure}} kPa
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item"><span class="average"><i>No holding tank inserted.</i></span></div>
|
||||
<div class="item"> </div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
<h3>Power Regulator Status</h3>
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Target Pressure:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.displayBar(data.targetpressure, data.minpressure, data.maxpressure)}}
|
||||
<div style="clear: both; padding-top: 4px;">
|
||||
{{:helper.link('-', null, {'pressure_adj' : -1000}, (data.targetpressure > data.minpressure) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'pressure_adj' : -100}, (data.targetpressure > data.minpressure) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'pressure_adj' : -10}, (data.targetpressure > data.minpressure) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'pressure_adj' : -1}, (data.targetpressure > data.minpressure) ? null : 'disabled')}}
|
||||
<div style="float: left; width: 80px; text-align: center;"> {{:data.targetpressure}} kPa </div>
|
||||
{{:helper.link('+', null, {'pressure_adj' : 1}, (data.targetpressure < data.maxpressure) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'pressure_adj' : 10}, (data.targetpressure < data.maxpressure) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'pressure_adj' : 100}, (data.targetpressure < data.maxpressure) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'pressure_adj' : 1000}, (data.targetpressure < data.maxpressure) ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Power Switch:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('On', 'unlocked', {'power' : 1}, data.on ? 'selected' : null)}} {{:helper.link('Off', 'locked', {'power' : 1}, data.on ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Pump Direction:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Out', 'arrowreturn-1-e', {'direction' : 1}, data.pump_dir ? 'selected' : null)}} {{:helper.link('In', 'arrowreturn-1-w', {'direction' : 1}, data.pump_dir ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,23 +0,0 @@
|
||||
{{:helper.syndicateMode()}}
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>
|
||||
Payload status:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
{{if data.armed}}
|
||||
ARMED
|
||||
{{else}}
|
||||
DISARMED
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class='itemLabel'>
|
||||
Controls:
|
||||
</div>
|
||||
<div class='itemContent'>
|
||||
<table>
|
||||
<tr><td>{{:helper.link('OBFUSCATE PROGRAM NAME', null, { 'PRG_obfuscate' : 1 })}}
|
||||
<tr><td>{{:helper.link(data.armed ? 'DISARM' : 'ARM', null, { 'PRG_arm' : 1 })}}
|
||||
{{:helper.link('ACTIVATE', 'radiation', { 'PRG_activate' : 1 }, data.armed ? null : 'disabled', data.armed ? 'redButton' : null)}}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,99 +0,0 @@
|
||||
<style>
|
||||
.lb{border-left: #222222 solid 6px;}
|
||||
.rb{border-right: #222222 solid 6px;}
|
||||
.tile, .lb,.rb,.nb{width: 32px; text-align: center; font-size: 24px; color: #5555DD}
|
||||
.tb{border-top: #222222 solid 5px;}
|
||||
.bb{border-bottom: #222222 solid 5px;}
|
||||
.nanoformbutton{height: 22px; float: left; text-align: center; color: #ffffff; text-decoration: none;
|
||||
background: #40628a; border: 1px solid #161616; margin: 0 2px 2px 0;cursor: default;white-space: nowrap;}
|
||||
</style>
|
||||
|
||||
|
||||
<script>
|
||||
function autosubmit()
|
||||
{
|
||||
document.forms["grid"].submit();
|
||||
}
|
||||
</script>
|
||||
|
||||
<table id="page"><tr><td>
|
||||
<form name="grid" method="get" action='?src={{:data.src}}' style="margin:0;">
|
||||
<input type='hidden' name='src' value='{{:data.src}}'>
|
||||
<input type='hidden' name='save' value='{{:data.src}}'>
|
||||
<table id="board" class="board" cellspacing="0" cellpadding="0">
|
||||
<tr class="tb">
|
||||
{{for data.grid}}
|
||||
|
||||
<td id="{{:value.id}}" class="
|
||||
{{if (value.column == 1 || value.column == 4 || value.column == 7)}}
|
||||
lb
|
||||
{{else (value.column == 9)}}
|
||||
rb
|
||||
{{else}}
|
||||
nb
|
||||
{{/if}}
|
||||
|
||||
{{if (value.row == 1 || value.row == 4 || value.row == 7)}}
|
||||
tb
|
||||
{{else (value.row == 9)}}
|
||||
bb
|
||||
{{/if}}
|
||||
">
|
||||
|
||||
<input onkeyup="autosubmit()" type="number" min="1" max="9" class="tile" name="{{:value.index}}" id="{{:value.id}}" maxlength="1" value="{{:value.value}}"
|
||||
{{if value.static}}
|
||||
readonly="1" style="color: #000000"
|
||||
{{/if}}
|
||||
{{if value.highlight}}
|
||||
style="background-color: #ff8888";
|
||||
{{/if}}
|
||||
>
|
||||
</td>
|
||||
{{if value.column == 9}}
|
||||
</tr>
|
||||
{{if value.row < 9}}
|
||||
<tr>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/for}}
|
||||
</table>
|
||||
<br>
|
||||
<!-- <input type='submit' class="nanoformbutton" value='Check'> -->
|
||||
{{:helper.link("Check", null, {'check' : value.ref})}}
|
||||
{{:helper.link("Reset Grid", null, {'clear' : value.ref})}}
|
||||
{{:helper.link((data.collapse) ? "Expand" : "Collapse", null, {'collapse' : value.ref})}}
|
||||
</form>
|
||||
</td>
|
||||
{{if data.collapse == 0}}
|
||||
<td style="vertical-align: top;">
|
||||
<table>
|
||||
<tr><td>
|
||||
<div>Sudoku is a classic human game of logic and deduction originating from Earth, in the Sol system. Invented in 19th century France and later popularised in 20th century Japan, where the name originates. It has proven a popular and diverting pastime for almost 500 years.<br>
|
||||
<br>
|
||||
The object of the game is simple. Complete the board by filling in digits from 1 to 9, with the constraint that each digit can only appear once per row, once per column, and once per 3x3 subgrid. The solution can usually be figured out by a process of elimination: Carefully check each tile against those around it based on the above rules, and fill in the tiles where there is only one option. Each new tile filled is a clue to the value of other tiles!</div>
|
||||
</td></tr>
|
||||
<tr><td style="height:40px;">
|
||||
{{if data.message}}
|
||||
<div style="font-size: 18px; color: #7799cc;">{{:data.message}}</div>
|
||||
{{/if}}
|
||||
</td></tr>
|
||||
<tr><td>
|
||||
{{:helper.link("Hint", null, {'hint' : value.ref})}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td>
|
||||
<div style="font-size: 18px;">Start a New Game</div>
|
||||
<hr>
|
||||
|
||||
{{:helper.link("Easy", null, {'difficulty' : "Easy"}, data.difficulty == "Easy" ? 'selected' : null)}}
|
||||
{{:helper.link("Medium", null, {'difficulty' : "Medium"}, data.difficulty == "Medium" ? 'selected' : null)}}
|
||||
{{:helper.link("Hard", null, {'difficulty' : "Hard"}, data.difficulty == "Hard" ? 'selected' : null)}}
|
||||
{{:helper.link("Robust", null, {'difficulty' : "Robust"}, data.difficulty == "Robust" ? 'selected' : null)}}
|
||||
<br><br>
|
||||
{{:helper.link("Generate Grid", null, {'newgame' : value.ref})}}
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
{{/if}}
|
||||
<tr>
|
||||
</table
|
||||
@@ -1,20 +0,0 @@
|
||||
<!--
|
||||
Title: Telescience Control UI
|
||||
Used In File(s): \code\modules\telesci\telesci_computer.dm
|
||||
-->
|
||||
<div class="item">
|
||||
<div class="itemLabel">Coordinates:</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('X: ' + data.coordx, 'gear', {'setx': 1})}}
|
||||
{{:helper.link('Y: ' + data.coordy, 'gear', {'sety': 1})}}
|
||||
{{:helper.link('Z: ' + data.coordz, 'gear', {'setz': 1})}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemLabel">Controls:</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Send', 'gear', {'send': 1}, null, (data.coordx != null && data.coordy != null && data.coordz != null) ? '' : 'disabled')}}
|
||||
{{:helper.link('Receive', 'gear', {'receive': 1}, null, (data.coordx != null && data.coordy != null && data.coordz != null) ? '' : 'disabled')}}
|
||||
{{:helper.link('Recalibrate', 'gear', {'recal': 1})}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,56 +0,0 @@
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Attachment One:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{if data.attachmentOne}}
|
||||
{{:data.attachmentOne}}
|
||||
{{else}}
|
||||
<i>None</i>
|
||||
{{/if}}
|
||||
{{:helper.link('Remove', 'eject', {'tankone' : 1}, data.attachmentOne ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Attachment Two:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{if data.attachmentTwo}}
|
||||
{{:data.attachmentTwo}}
|
||||
{{else}}
|
||||
<i>None</i>
|
||||
{{/if}}
|
||||
{{:helper.link('Remove', 'eject', {'tanktwo' : 1}, data.attachmentTwo ? null : 'disabled')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Valve Attachment:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{if data.valveAttachment}}
|
||||
{{:data.valveAttachment}}
|
||||
{{else}}
|
||||
<i>None</i>
|
||||
{{/if}}
|
||||
{{:helper.link('Remove', 'eject', {'rem_device' : 1}, data.valveAttachment ? null : 'disabled')}}
|
||||
{{if data.valveAttachment}}
|
||||
{{:helper.link('View', 'wrench', {'device' : 1})}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item"> </div>
|
||||
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
Valve Status:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.link('Open', 'unlocked', {'open' : 1}, (!data.attachmentOne || !data.attachmentTwo) ? 'disabled' : (data.valveOpen ? 'selected' : null))}}{{:helper.link('Close', 'locked', {'open' : 1}, (!data.attachmentOne || !data.attachmentTwo) ? 'disabled' : (data.valveOpen ? null : 'selected'))}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user